23

quine这个单词最早我是在自我打印的程序代码里学到的。例如下面的C代码,运行可以打印自己:

main() { char *s="main() { char *s=%c%s%c; printf(s,34,s,34); }"; printf(s,34,s,34); }

今天发现reddit上一个很火星的东西:A ZIP file quine,有人把zip格式也quine了。我前面发过gzip解压得到自己的一个gzip文件,这次The LZ77 quine还要高级一点,因为这个droste.zip解压得到 droste.jpg 和 另一个一模一样的droste.zip,再解压仍然得到 droste.jpg 和 一个droste.zip,再解压。。。。。。

这个zip还可能导致杀毒软件出错。无穷解压嘛。哈哈。。。可惜墙只会解压一次。。否则嘛。哼哼。。。。

不说了。自己下载玩吧。

23

Ahhhhh, fuck. Google推出了Chrome Frame

其实就是一个特殊版本的Chrome,里面包含了一个npchrome_tab.dll

注册了一个CF:这样的Asynchronous Pluggable Protocols到IE,然后嵌入一个ActiveX的Chrome引擎代替IE来layout和javascript。目前还没有去测试cookie啊XSS啊XSRF特性,不过:

cf:javascript:alert(/fuck chrome/)

这个似乎没用。

注意看上面的截图,地址栏里显示的是cf:http://g.cn。说明什么?说明我们很方便地址栏钓鱼了。因为301/302跳转显示没变。

目前还发现一个问题就是cf:https://gmail.com 似乎没用。但是测试了下其他https网站似乎可用。

Google官方给出了一个CFInstall.js来探测Chrome Frame是否可用。

大概就是var obj = new ActiveXObject('ChromeTab.ChromeFrame'); 这一句了。

npchrome_tab.dll定义了几个导出函数:

CfLaunchChrome
NP_GetEntryPoints
NP_Initialize
NP_Shutdown
RegisterNPAPIPlugin
UnregisterNPAPIPlugin

测试了下 rundll32 npchrome_tab.dll, CfLaunchChrome 可以启动 Chrome。不过把NPAPI引入IE会导致n多安全问题吧?

下面贴一个npchrome_tab.dll里的typelib:

ChromeTabLib; // ChromeTab 1.0 Type Library

Dispatch DIChromeFrameEvents;
GUID={A96B8A02-DD11-4936-8C0F-B2520289FABB};
function onload;
function onloaderror;
function onmessage(event:IDispatch);
function onreadystatechanged;
function onprivatemessage(event:IDispatch; target:BSTR);

Class HtmlFilter;
GUID={BB1176EE-20DD-41DC-9D1E-AC1335C7BBB0};
function QueryInterface(riid:^GUID; out ppvObj:^^void): HResult;
function AddRef: UI4;
function Release: UI4;

Class ChromeProtocol;
GUID={9875BFAF-B04D-445E-8A69-BE36838CDE3E};
function QueryInterface(riid:^GUID; out ppvObj:^^void): HResult;
function AddRef: UI4;
function Release: UI4;

Class ChromeActiveDocument;
GUID={3E1D0E7F-F5E3-44CC-AA6A-C0A637619AB8};
function QueryInterface(riid:^GUID; out ppvObj:^^void);
function AddRef: UI4;
function Release: UI4;
function GetTypeInfoCount(out pctinfo:^UINT);
function GetTypeInfo(itinfo:UINT; lcid:UI4; out pptinfo:^^void);
function GetIDsOfNames(riid:^GUID; rgszNames:^^I1; cNames:UINT; lcid:UI4; out rgdispid:^I4);
function Invoke(dispidMember:I4; riid:^GUID; lcid:UI4; wFlags:UI2; pdispparams:^DISPPARAMS; out pvarResult:^variant; out pexcepinfo:^EXCEPINFO; out puArgErr:^UINT);
property-get src: BSTR;
property-put src(BSTR);
function postMessage(message:BSTR; [target:variant]);
property-get onload: variant;
property-put onload(variant);
property-get onloaderror: variant;
property-put onloaderror(variant);
property-get onmessage: variant;
property-put onmessage(variant);
property-get readyState: I4;
function addEventListener(event_type:BSTR; listener:IDispatch; [use_capture:variant]);
function removeEventListener(event_type:BSTR; listener:IDispatch; [use_capture:variant]);
property-get version: BSTR;
function postPrivateMessage(message:BSTR; origin:BSTR; target:BSTR);
property-get useChromeNetwork: bool;
property-put useChromeNetwork(bool);

Dispatch IChromeFrame; // IChromeFrame Interface
GUID={B9F5EA20-C450-4F46-B70F-BFD3CA9A20C5};
function QueryInterface(riid:^GUID; out ppvObj:^^void);
function AddRef: UI4;
function Release: UI4;
function GetTypeInfoCount(out pctinfo:^UINT);
function GetTypeInfo(itinfo:UINT; lcid:UI4; out pptinfo:^^void);
function GetIDsOfNames(riid:^GUID; rgszNames:^^I1; cNames:UINT; lcid:UI4; out rgdispid:^I4);
function Invoke(dispidMember:I4; riid:^GUID; lcid:UI4; wFlags:UI2; pdispparams:^DISPPARAMS; out pvarResult:^variant; out pexcepinfo:^EXCEPINFO; out puArgErr:^UINT);
property-get src: BSTR;
property-put src(BSTR);
function postMessage(message:BSTR; [target:variant]);
property-get onload: variant;
property-put onload(variant);
property-get onloaderror: variant;
property-put onloaderror(variant);
property-get onmessage: variant;
property-put onmessage(variant);
property-get readyState: I4;
function addEventListener(event_type:BSTR; listener:IDispatch; [use_capture:variant]);
function removeEventListener(event_type:BSTR; listener:IDispatch; [use_capture:variant]);
property-get version: BSTR;
function postPrivateMessage(message:BSTR; origin:BSTR; target:BSTR);
property-get useChromeNetwork: bool;
property-put useChromeNetwork(bool);

Class ChromeFrame;
GUID={E0A900DF-9611-4446-86BD-4B1D47E7DB2A};
function QueryInterface(riid:^GUID; out ppvObj:^^void);
function AddRef: UI4;
function Release: UI4;
function GetTypeInfoCount(out pctinfo:^UINT);
function GetTypeInfo(itinfo:UINT; lcid:UI4; out pptinfo:^^void);
function GetIDsOfNames(riid:^GUID; rgszNames:^^I1; cNames:UINT; lcid:UI4; out rgdispid:^I4);
function Invoke(dispidMember:I4; riid:^GUID; lcid:UI4; wFlags:UI2; pdispparams:^DISPPARAMS; out pvarResult:^variant; out pexcepinfo:^EXCEPINFO; out puArgErr:^UINT);
property-get src: BSTR;
property-put src(BSTR);
function postMessage(message:BSTR; [target:variant]);
property-get onload: variant;
property-put onload(variant);
property-get onloaderror: variant;
property-put onloaderror(variant);
property-get onmessage: variant;
property-put onmessage(variant);
property-get readyState: I4;
function addEventListener(event_type:BSTR; listener:IDispatch; [use_capture:variant]);
function removeEventListener(event_type:BSTR; listener:IDispatch; [use_capture:variant]);
property-get version: BSTR;
function postPrivateMessage(message:BSTR; origin:BSTR; target:BSTR);
property-get useChromeNetwork: bool;
property-put useChromeNetwork(bool);
function onload;
function onloaderror;
function onmessage(event:IDispatch);
function onreadystatechanged;
function onprivatemessage(event:IDispatch; target:BSTR);

Class ChromeFrameBHO;
GUID={ECB3C477-1A0A-44BD-BB57-78F9EFE34FA7};
function QueryInterface(riid:^GUID; out ppvObj:^^void): HResult;
function AddRef: UI4;
function Release: UI4;

问了下#chromium里的人,他们说源码还没公开。看得出来CF只是为了借Wave推广Chrome的一个小聪明。总体感觉Chrome Frame,想做到很安全,难。还是regsvr32 /u npchrome_tab.dll,早点卸了吧。

22

无聊抓了一下包,就是下载了下面两个东西:

http://www.htcusainc.com/clm/CLM_SITE_LIST_UPDATE.INI

http://www.htcusainc.com/clm/packedEphemeris.ee

一共浪费54330字节流量。恩。如果要手动升级的话把packedephemeris.ee下载到Windows目录就行了。

22

Quartz Composer Quaternion Julia GPU Ray Tracer with AO from subBlue on Vimeo.

via

21

上次提到的MMTFML在国内已经很著名了

这次继续推荐几个其他的

TFLN texts from last night 昨晚的短信

GMH Give me hope 春哥啊给我希望吧

LML Lucky my life 我太走运了(更新:似乎L也有love的意思

MLIA My life is average 平凡的生活

MLIG My life is great 生活的惊喜

看来微内容网站要兴起了!当网名真正摆脱宏观的世界观静下心来发现一花一世界的时候,这是互联网的幸事。春秋战国时代,巅峰思想都是一两句话,振聋发聩大音希声说清楚的,哪里有几千字的长篇tl;dr大论。

说到这里想起了几天前看到一个笑话(原文已更正):

@hushufen: 中青报引用中国工程院副院长杜祥琬的话:“我一生就写了一篇文章,只有5000字,现在只能算一篇论文”。其实杜院长的原话是“老子一生就写了一篇文章”(道德经)。http://bit.ly/1x0zR0

另外推荐几个鲜明特色的reddit频道(subreddit):

TIL Today I learned 今天我学习到了

这个频道里你会发现很多你在其他地方学部到,绝对冷门有趣的小知识

IAmA I am a 我是一个……

这个频道有律师,妓女,微软员工,乞丐,LGBT等等五花八门的人发贴回答大家的问题。你可以问他们任意问题(AMA - Ask me anything)。

DAE Does anybody else 有没有其他人也……

TIW Tomorrow I will 明天我要……

不得不说twitter开创了这种形式。短小精悍的内容+开放式互动。国内最有希望进化成这种类型的网站是豆瓣,豆瓣里以前有好多非常有趣的小组,可惜都统统给管理员毙了。。。。现在一登录豆瓣看到 豆邮(1) 就好揪心,不想上豆瓣了。

另外一个鲜明的特征就是这些网站主题很集中,形式很类似,我想互联网表达形式重组和内容异构化是趋势。大而全的网站注定只是喉舌、politics、marketing和propaganda bullshit。

via 1, 2

21

via

15

粗略看了下Google Fast Flip,是AJAX请求后台缓存图片

效率已经不错了,不过当时我还是多期望Google会出一个很猛的dHTML技术。下面介绍有两个比Fast Flip更faster更酷的:

一个是1999年Ka-Ping YeeGIF 实时聊天室

另一个是CSC Office Webcam,很彪悍的通过MIME Push(就是Content-type: multipart/x-mixed-replace; boundary=--BoundaryString)实现了动态JPEG技术。MIME Push的缺点是IE无效。。。。。

我是这样设想Faster Flip的:一个永远载入不完的高压PNG,然后通过CSS Sprites定位。

如果PNG实现不了,gif、swf是绝对可以实现动态内容的。

14

在IRC里聊天的时候老外show了一下一个能gzip解压得到自身,无穷循环的gzip文件。比较有趣,分享给大家

下载:selfgz.rar
File: selfgz.rar
CRC-32: eee1b53b
Size: 156 bytes
MD4: 30b9986f2fd24a633a8dc0d40de88bc9
MD5: d001ded35de7f773e444378b4f09eb6f
SHA-1: 53dfd029e1982509fc804d23713e122ce698b7f6

测试:

$ ls -la selfgz
-rw-rw-r-- 1 est pg2212848 210 2008-02-22 17:55 selfgz
$ mv selfgz selfgz.gz && gzip -d selfgz.gz
$ ls -la selfgz
-rw-rw-r-- 1 est pg2212848 210 2008-02-22 17:55 selfgz
$ mv selfgz selfgz.gz && gzip -d selfgz.gz
$ ls -la selfgz
-rw-rw-r-- 1 est pg2212848 210 2008-02-22 17:55 selfgz
$ mv selfgz selfgz.gz && gzip -d selfgz.gz
$ ls -la selfgz
-rw-rw-r-- 1 est pg2212848 210 2008-02-22 17:55 selfgz
$ mv selfgz selfgz.gz && gzip -d selfgz.gz

14

wikipedia上看到的

以reddit的URL为例:http://www.reddit.com/r/science/comments/9k9op/

>>> int('9k9op', 36)
16062217

14

proggit上看到有人用Hilbert Curve绘制了全球IP分布图,贴几张截图

全球的:

美帝的:

兲朝的:

自己去吧,交互式的。另有xkcd漫画一则