2009年09月 存档

ChinaNET出口今天断了至少3次(更新中)

2009年09月27日,星期日

MLGB,老子看XXX正爽呢。。突然就无限缓冲了。。。突然Gmail也没法用了,IRC也掉了,感觉就像Matrix里停电了一样。

逼得老子挂代理到CERNET。

很神奇很多“境外”网站都打不开的时候,俺的dreamhost还能打开,是不是今年Verizon新拖的中美海底光纤线路比较高级?

为啥这帮肆意破坏通信设施的人没有被判刑啊

更新
兲朝技术牛逼啊:https://64.233.189.100/ 直接被RST。。。

陀螺仪轮子的幼儿自行车

2009年09月27日,星期日

文字难以描述,上视频

这轮胎设计得超级awesome!

高中物理不讲陀螺仪和角动量是一种愚昧的表现。。。。

via

现代中国racist第一次国际影响的报道

2009年09月26日,星期六

reddit上看到TIMEYahooChinaSMACK报道了关于娄婧的新闻。

老外似乎选择性忽略国人对丁慧的看法了。

新的stereotype正在形成。

记得那个4k的地形生成demoscene吗?有讲解slides了

2009年09月26日,星期六

记得那个4k的地形生成demoscene吗?有讲解slides

似乎fake shadows特别有趣

via

世界上最难的语言【有图有真莫道不消魂相】

2009年09月26日,星期六

SR上看到 ZT世界上最难的语言,其实这个出自wikipedia上Greek to me词条

Language Log也对这一问题进行了讨论:The directed graph of stereotypical incomprehensibility,得出一张图作为结论:

看来还是天书牛逼。

沃艹,联通版iPhone界面太强大了[20p]

2009年09月25日,星期五

懒得传图了,盗链163的 中国联通iPhone菜单图曝光(独家)

沃槽,典型的Chinese crap design啊。。。莫非联通的意思鼓励大家购机之后呕吐立即刷机软解 wifi?

豆瓣你太他妈牛逼了

2009年09月24日,星期四

亲爱的xxx,你好,
你的头像违反了豆瓣的图片政策,已被删除。你可以重新更换合适的头像,谢谢你的配合与理解。

附:图片政策 http://www.douban.com/about?policy=photorules

--豆瓣

头像是这个

豆瓣你太他妈牛逼了,老子3个月没发言的账户头像都能被你找出来。佩服佩服。

刀俎牛逼了,今天。

2009年09月24日,星期四

几点:

  1. Cisco跟那个东西一毛钱关系都没有
  2. Gold盾跟那个东西一毛钱关系都没有,我怀疑wikipedia上故意有5 mao维护那个词条以掩人耳目混淆视听。
  3. TOR根本就不是p2p(后来加入了一些p2p特征),而是一个圆环套圆环的匿名网络,况且exit node就那么几个,人越多速度越慢。不知道为什么有人把tor吹捧那么高。
  4. OpenDNS是废品,一点也不open和fast。还把一些大站劫持解析到自己的Web服务器上跳转

要骂就骂某校长某院士方公公吧。这个老JB搞政治投机是老手了。

又一个牛逼的循环自我解压的zip文件(ZIP file quine)

2009年09月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还可能导致杀毒软件出错。无穷解压嘛。哈哈。。。可惜墙只会解压一次。。否则嘛。哼哼。。。。

不说了。自己下载玩吧。

Google Chrome Frame

2009年09月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,早点卸了吧。