“software”目录存档

AptEdit是中国人写的

2009年10月17日,星期六

就是作者搞笑了点

ps 发现一个不错的贴http://post.baidu.com/dwing 和一个牛人 http://wex.cn/dwing/mydemo.htm 凡是写demo的都是大牛。

网页嵌pdf的方法

2009年10月14日,星期三

Google Books那个看书的viewer和Google Fast Flip的用户体验都特棒,但是不知道为什么Actionscript做的比较卡。

Google LaTeX图片生成器、Google Sketchy和Google Cloudy

2009年10月3日,星期六

自己搜集了3个地址,一次性发出来:

Google Chart API里有一个未公开 undocumented 函数可以用来生成LaTeX图片。

有图为证:

上图的URL是:http://chart.apis.google.com/chart?cht=tx&chs=1x0&chf=bg,s,FFFFFF00&chco=000000&chl=$$$\LaTeX$$$

以前用72pines的LaTeX图片生成器,现在就可以直接用Google的了,呵呵。

下面是一个Google Sketchy,用于简易自由矢量绘图。可惜我还没有研究出来怎么用Javascript来enable这个界面。目前只能看不能用咯。

https://docs.google.com/drawings/client

最后一个是Google Cloudy:目前支持的浏览器有Chrome。Chromium似乎不行。

cloudy://resources/gaialogin

注意不要直接点击,需要复制站地址栏然后右键 粘贴并转到。

我非常希望这个 cloudy:// 协议能支持P2P。

Adobe Lightroom 2.4

2009年10月3日,星期六

http://download.adobe.com/pub/adobe/lightroom/mac/2.x/LTRM2_MUL_mac_2_5.dmg

http://download.adobe.com/pub/adobe/lightroom/win/2.x/LTRM2_MUL_win_2_5.exe

上面的是LR 2.5的官方下载地址。文件几百MB比较大,去WMZ找了个V2.4 多国语言绿色便携版,看了下大小:16.42 MB。我靠。。。。。赞美打包党和人民盗版运动。

中文教程:http://help.adobe.com/zh_CN/Lightroom/2.0/lightroom_2_help.pdf

又一个牛逼的循环自我解压的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,早点卸了吧。

手机上的 快速GPS(QuickGPS.exe)到底下载了什么东西

2009年09月22日,星期二

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

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

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

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

几个来自微软的好工具推荐

2009年09月3日,星期四

Microsoft SketchFlow

Microsoft SketchFlow是Expression® Studio 3里的,画草图,和那种铅笔风格的图特别有意思!

试用版直接下载地址

Microsoft SharedView

SharedView是个在网络分享程序窗口的工具。不得不承认,微软的这个idea非常好。传统远控木马(例如灰鸽子),Net Meeting,Live Conference和VNC之类的都是复制屏幕DC,而微软的这个可以只分享一个窗口的DC。这个程序响应速度特别快,可以直接看到输入法界面,不过依赖互联网连接,需要Live ID登录。局域网估计不行了。还有双鼠标技术也比较有意思。不知道可否基于这个做一个多触app,哈哈。。。通过网络多触拖放。

要是我来做这个东西的话我一定会基于rdp来做,直接复制绘制DC以前的指令,和DX、OpenGL指令。这样效率绝对最高。而且绝对要支持局域网甚至域。这里能创新的地方太多了。

具体介绍可以参考Technet文章:实用工具特别推荐 Microsoft SharedView

其余推荐

挖掘exe里字符的,strings,来自sysinternals

抓包的Microsoft Network Monitor 3.3

来自 Scott Hanselman via HN & reddit。原文有很多其他有用的工具推荐大家不妨去看看。

发现匹配函数!

2009年09月2日,星期三

数学家眼中的镜头视角总是与众不同的。

from Nikki Graziano via reddit

推荐基于Java的Visio/OmniGraffle/DIA小型替代品:yEd Graph Editor

2009年08月26日,星期三

推荐一个基于Java的Visio/OmniGraffle/DIA小型替代品:yEd Graph Editor

看截图:

软件的特色是可以输出为Flash嵌入HTML里,用的是 GraphML 格式demo地址。这个功能其实很原始,只是一个Flex然后内嵌图片,可以滚轮缩放而已。我倒是希望它能生成一个 图 ,而且节点能够自由拖拽,其余节点力学微动响应。图形最好是矢量放大,文字可复制,这样就完美了。

官网:http://www.yworks.com/en/products_yed_about.html
下载页面:http://www.yworks.com/en/downloads.html#yEd
jEd.jar单文件绿色免安装版下载:http://www.yworks.com/products/yed/demo/yed-3.3.0.2.zip