wpe7.jpg (11495 bytes)

我的征尘是星辰大海。。。

The dirt and dust from my pilgrimage forms oceans of stars...

-------当记忆的篇章变得零碎,当追忆的图片变得模糊,我们只能求助于数字存储的永恒的回忆

作者:黄教授

二〇〇九


一月五日 阳光灿烂


忘记安装frontpage,只好使用日记本来写日记,这个好像很恰当的。
回到了厦门快一个星期了感觉变化浩大,其实,变化大的不仅仅是周围的高楼大厦还包括周围的人。所谓斗转星移,无非人亦非。我的心情犹如millitary -channel的电视广告里的那个从伊拉克战场归来的老兵走在繁华的大街上,搭坐在拥挤的车辆里却看不到周围有一个人影,整个城市在那个老兵的眼中是犹 如《I am legend》里面的空城。
Welcome to the real world and my mission is another failure.
老爸给我一个无线router我试图设定无线网络,这个东西其实是三位一体的,包含了adsl-modem,无线+有线路由器,所以,当你要使用 pppoe的协议的时候你在路由器端设定拨号密码账号,这样子即便linux也可以轻松上网了,否则我当初又问过bell的技术支持他们说linux不支 持这个pppoe协议,不过那个是好几年前的事情了,如今开源的力量非常的巨大。当我设定无线的安全模式的时候使用wep总是失败,后来专用wpa就可以 了,不知道为什么。


一月六日 阳光灿烂


sourceInsight的确不错,不过对于windows平台开发似乎意义不大,因为我不知道它能否把编译器debugger集成进来,估计有些困 难,对于嵌入式开发那当然好得很了。
ucweb号称可以压缩数据最高80%,但是问题时html原本就是文本,你使用压缩传输原本是可以的,这个本来就是http协议的一个选项,再 httpheader里面加上这个项目那么正规的浏览器照理说都应该支持,只不过ucweb能够统一客户浏览内容的format,这个市众多浏览器的头疼 的问题,此外,我对于这个web浏览器使用java运行感觉比较怀疑,如果不是本地解析html那么就使本地翻译自己公司内部的数据格式???我对此不太 明白,但是假如是这样实在是有一点点重复的意思,因为你再html机制之外再来一个自己的协议。当然我想我是理解错了。
我想我违背了自己的誓言活该遭到天谴。


一月八日 阳光灿烂


想和厦门说再见也不容易。买了knuth的编程的艺术,纯粹作为收藏,我知道我不会去读的。心里总是感觉在重复一些《非诚勿扰》台词,只是感觉,真的说起 来又如同水中的明月经不起推敲。 我想L做出了正确的选择,就如同X所作的决策,我所拥有的资源的吸引力小于我自身产生的排斥力,这个就是数据模型。


一月十日 阳光灿烂但是很冷


厦门的冬夜和蒙特利尔一样的寒冷而又漫长,伸出藏在口袋的双手才发现寒气是从心底里发出来的。夜总是这样的长,始终不愿回家仿佛一到家这漫长的夜晚就结束 了,在阴冷漆黑的夜晚灵魂深处的幽灵才敢爬出地面露出狰狞的面孔,心痛得感觉总是在心死以后。

计划在这个月掌握window驱动开发,这并非不可能,只不过从来不动手的所谓开发大概都只需要一两个星期。

ReadFile调用ntdll的ntReadFile 在进入内核调用系统服务的ntReadFile函数,然后创建的时IRP_MJ_WRITE类型的IRP我怀疑这里是笔误,为什么 readfile创建的时write的irp?除非这个write是从系统的角度来看,user的read就是驱动的write,这一点要注意映证。我的 猜想是这样的,驱动是由system进程创建的,大概是一个线程加载的dll一样,只不过是.sys文件,那么每 次调用的时候win32api需要“等待”请求结束,大概是某种信号之类的通讯手段,那么驱动的mj函数结束的时候必须要调用 iocompleterequest的原因就在于恢复user线程的运行,比如重置之前的那个信号亮之类的,设定返回数据的buffer指针,设定 lasterror,设定返回值等等,这就是所谓的syscall的概念。我猜想是这样的。


一月二十三日 生 活并非空白只是我们选择遗忘


我自作聪明改造htmlparser的那个例子,以为说使用其它同步机制比使用发送message效率来的高,结果费了半天劲才发现使用message是 有原因的,因为那个ui-less并不是没有window只不过不创建可视的window实际上的消息循环病不能少,还有很多消息必须应答,这个改造的项 目大概折腾了快一个月了,哎,现在很难静下心来,这就是生活。


一月二十四日 生 活并非空白只是我们选择遗忘


纠正了一个小错误,还是com指针释放的问题,要小心使用CComPtr之类的智能指针,混合使用普通指针很容易忘记释放。此外,就是刚刚发现的问题就是 不论是google还是baidu统统使用的复杂的脚本动态产生html内容,这个不是新闻,只不过好像现在和半年前又有了变化,总之,google比 baidu更甚已经没有办法存成文件了,只能使用firefox,不过估计现在使用firefox做搜索引擎可能不多吧。结论就是使用link, anchor都无法获得链接,只能使用get_tagname比较是否为"a"然后toString,这个效率可能要低很多因为你必须国旅get_all 而不是比较快捷的get_links/get_anchors,关于flash以后再实验,现在先保存一个版本吧,过两天再学习svn。争取每天花三个小 时学习高通文档,是否应该参考linux的gtk来学习非windows的图形界面系统呢?俗事太多了。这是我包装的html-parser,它依靠ie,就是网络上的ui- less的例子的包装。是一个静态库。


一月二十七日 厦门的冬天似乎也很冷


厦门的天空似乎也是很蓝的。身居闹市犹如游荡在荒野,最让我怀念的还是military-channel,这里差不多什么都有了吧?BREW才是我应该学 习的,心中的感慨就是如果没有这两年的历练我在三年前一定会非常的吃力的,这个行业如果功力不够一定是事倍功半,然则功力的增加又最主要的是时间精力的投 入,所以,回过头来说对于凡人来说从来没有捷径可言。这也许是我所喜欢的一个最主要的原因,因为仿佛武林高手比拼内力无任何技巧运气可言。电视里面播放着 怀旧的歌曲,在书橱里面藏着发黄的相册,它们都见证着一个个曾经的时代与记忆,《回到拉萨》,回到了布达拉宫,回到了我们已经阔别很久的家,雪山,青草, 美丽的喇嘛庙。


二月四日 厦门的冬天似乎也很热


使用jtag+trace32来debug,大概得原理就是jtag使用类似于串口来和device通讯,所以可以在使用usb的烧录之前把所谓的 boot模块烧进去,(这个我也是听来的。)最主要的就是要先把elf文件送进去,这个包含了symbol-table,不过是通过运行一个批处理文件来 执行的,不过这个比较的慢,可以用另一个“灌”程序的工具,然后再本地加载符号表,首先要设定cpu,奇怪的是现在必须使用 rtlk的模式,设定断点必须使用onchip模式,而且有数量限制,另一个工具是所谓的qxdm这个可以截获各种各样的log信息,还可以dump内 存,sourceinsight可以说无比强大,我算是服气了,这个简直是剑客的至宝,用它去写代码应该非常的好。今天看到一个有趣的东西,就是在一个函 数foo里面的一个参数是一个回到函数指针,在这个回调函数里面再去调用这个函数foo那么这算不算迪归调用呢?有没有可能发生堆栈溢出的危险呢?答案是 不会,因为函数foo和回调函数不再一个task里面执行。另一个sqllite是一个有意思的东西,居然可以由所谓的aggregate的函数,就是类 似于callback一样。


二月五日 厦门的冬天似乎也很热


C非常的聪明,我在告诉他不仅仅是添加到sim失败而且删除也失败的时候他就很敏锐地找到了错误,是sim文件类型参数的错误,我猜想他的推理是这样的, 开始我们认为错误有可能使两方面,第一,内存的cache结构的错误,第二,写sim卡的数据参数错误,原因是同样的代码在gsm上正常,在cdma上不 应该有问题,因为无关。但是删除不像添加一样需要很多参数,如果也失败那么就应该寻找添加与删除都共有的参数,所以就是这么锁定的。我首先不熟悉代码也不 熟悉逻辑,而且这个错误应该是代码合并的手误因此也不能怪我找不到。总之,我还差很多。使用efs-explorer给手机上传文件需要设定com口,很 多的小问题都来自于com口的添加删除。


二月十四日 厦门的冬天似乎也很热


午夜,重看周星驰的《戏剧之王》感触良多,这两个星期我感觉非常的不适应身心都需要好好调养一些。突然想起某人说过的一些话,然而记忆仿佛水中的月亮远远 的看的分明,凑近了一撩拨却又化作了缤纷的乱影。


二月十七日 厦门的冬天似乎也很热


有没有什么办法防止文件的读写呢?看来不易。总是觉得睡眠不足。


二月二十二日 厦门的冬天似乎也很热


感冒了。现在睁开眼了,明白外面的市道有多乱,我们大多数人都以为那些银行宣传的都是真的,现在才知道网络银行有多么的危险!首先很多的加密程序都是使用 md5来计算一个hashcode,据说sha也需要用到md5那么md5究竟安全不安全呢?或者说任何的加密算法安全不安全呢?我没有仔细看过不敢说, 但是最起码我现在知道这种加密算法有巨大的隐忧。不论什么样的加密算法无非都是把用户的一个密码账号加密乘一个字串,原本数学家使用所谓的“ 非对称算法”保证加密和解密的非对称计算量来保证安全,也就是说加密算法是公开的,但是解密算法远远比加密算法来的复杂,(如果不使用私钥的 话),那么这个真的很可靠吗?他的前提是以当时的计算机的计算能力来计算它的可靠性,可是互联网改变了计算机的计算复杂度,这是一种近似的并行计算,并行 存储,也许这两者是一回事,也许不同,总之,现在有一个无比愚笨的无比笨拙于简单的破解的办法,这个办法几乎可以破解所有的加密算法!这是否耸人听闻?

大多数的用户都偏爱短密码,比如四个六个字母数字,这个有多少组合呢?感觉很多,其实不然,很多中国人喜欢纯数字,这样六位组合只有10^6=1M,太少 了吧,数字加上字母呢?36^6=2G,我为什么说36?因为大多数人懒得使用大小写组合,所以可以假定数字加上小写,这个里面还有一个小小的关节,很多 拉丁语系用户喜欢纯字母,那么才26^6=0.3G,假如我们把这些组合的加密结果比如md5存储在数据库里面,这个不可逆的计算使用海量存储破解了,(http://www.md5.org.cn/) 就算密码长度加到了8位,纯字母组合依旧为200G这个还是有可能的,因为可以使用简单的字典战术,因为很多人都选择有意义的字母组合,这样子就少了很多 了。同时黑客联盟们如果互相合作彼此分段建立数据库,那么破解的可能性就会大大提升,比如我们使用类似于BT的战术在一个总目录下列表众多的数据库 server地址,那么真正的并行查找就建立起来了。传统的计算机科学家总喜欢使用计算复杂度,可是如今互联网的兴起要让你更多的考虑存储搜索复杂度,像 这种md5的存储就是一个典型,16bytes在以上的最多的数据量也不过十几个T应该不是太大,对于分布式数据库是小菜一碟。

internetOpenUrl有个毛病,就是你如果输入的url为http://someserver.com/../../somewhere/之类 的server端会报错,也许这是一种安全机制吧,因为这种访问太危险了。所以,我只能把这个相对路径放在了?后面做参数。


二月二十三日 昨天下雨阴天,今天阳光有些灿烂可是我感冒了只能呆在家里。


看了一天的DVD,感觉香港七八十年代的电影可笑之极。关于<The Queen>现在再来看才能看懂不少,英国的王室非常的高贵,与首相的对话非常的微妙,当然很多时候我对于其中的背景不了解,我无法想象戴安娜王妃 在普通人心目中有那么高的形象,我原本一直以为这种灰姑娘式的童话只是女人的梦想,没想到她确实很多平民老百姓的希望,看来不仅仅是女人希望童话梦想成 真,另一方面,我甚至一直不知道戴妃事实上已经和查尔斯王子离婚了,当然,从这里就可以理解他为什么非常害怕民众把不满发泄到他身上毕竟将来它有可能要继 承王位的。头不太疼,但是眼睛有些疼了。

/* SYSTEM.C: This program uses
 * system to TYPE its source file.
 */

#include <process.h>

void main( void )
{
   system( "type system.c" );
}
这个就是以前的一个问题:如何写一个程序打印自己


二月二十六日 昨天无比热今天阴天了。


昨天遇到了一个非常莫名其妙的问题,就是在perl脚本呼叫tcc是正常的,但是我的程序代替tcc接受perl的呼叫参数然后传递给tcc就总是不正 常,这
实在是难以理解,最后锁定的可能的原因是传递的参数里面原本在perl脚本里面是cust=\"$(variable)\",这个"\"类似于c代码的 escape符号,但是问题在于为什么原本tcc能够正确解读参数而我的程序也是原原本本的传递却有不同?我只能解释说是windows程序的main之 前有一个vcrt就是所谓vc的runtime库在这里做了一些初始化处理,也许在这里参数被改变了,我对于这个一部分始终不使特别的清除,比如《核心编 程》里面提到过所谓的线程安全的库的初始化就是在这里做的,大概就是所谓的startup的一个模块在做的,如果有空去看一看代码吧。


三月二日 昨天无比热今天阴天了。


在perl脚本下路径是unix的/,但是cgywin会自动转变为windows的\。


三月三日 今 天挺冷的


我现在经常做一些脑筋转不过弯的勾当,前几天是把tcc替代以便检查源代码文件以便适时地从服务器download,今天要把仿真的vc6的cl.exe 也替换了,可是我自己还需要cl编译跟踪,我怎么把自己替换了?就是在跟踪之前要先把cl.exe换成我自己的程序,哈哈,终于让我发现了不能正常编译的 原因。1。tcc里面是unix/linux的风格,macro的定义在命令行是-DMyDefine,而vc里面是dos的风格,/D "MyDefine"。因此我搜索特定标志来确定是否是meta的project来替换。2。CreateProcess的老毛病在ansi版本下,长文 件名是一个大问题,因为命令行会把路径名当作多个参数,比如c:\program file\my executable.exe -param会有大问题,当然createprocess的第一个参数lpApplication倒是不要紧,因为是null-terminated的字 串,所以,在lpcommandline这个参数的第一个参数要把长文件名加上双引号。3。在vc6里面的命令行编译批命令不适应platformSDK 的要求,因为SDK的某些include和lib一定要放在vc6的前面,而VCVARS32.BAT里面抹认识没有其他的编译环境的(vc98离 platformSDK2003的出世还早了很多年,那个时候的批命令怎么能够适应后来呢?)所以,我在VCVARS32.BAT里面把SDK加在了前 面。4。vc里面有default的两种config,即ProjectName - Win32 Debug, ProjectName- Win32 Release那么从project导出来的makefile里面有这么两种设置,所以,在命令行编译最好加上config的参数NMAKE /f "DownLoader.mak" CFG="DownLoader -Win32 Debug"  (对于config我觉得差别不是非常多,主要是其中有很多的宏定义的差别吧?)5。我跟踪发现了一个问题,在createprocess的时候发现 environmentvariable设定很奇怪,比如include=vc-include;sdk-include;vc-include,很明 显,有人不管三七二十一在所有的默认include前面加上了vc-include,这么做原来一定不错,但是有了sdk的问题就不对了,我只好强行调用 SetEnvironmentVariable写死include和lib,然后再CreateProcess的environment参数传NULL, 因为子进程应该会自动继承父进程的环境变量,msdn上说不能直接修改GetEnvironmentVariableStrings的block。6。我 的工程使用了pch,也就是说几乎所有的.cpp文件的编译都依赖于.pch的生成,那么这些预编译的obj文件需要先编译生成,因此这就是我直接把命令 行参数作为debug参数失败的原因,因为我把所有的pch,obj文件都删除了,所以失败了。/nologo /MLd /W3 /Gm /GX /ZI /Od /D WIN32 /D _DEBUG /D _CONSOLE /D _UNICODE /D UNICODE /FR.\Debug\ /Fp.\Debug\DownLoader.pch /Yustdafx.h /Fo.\Debug\ /Fd.\Debug\ /FD /GZ /c .\downloader.cpp 因此,我取了一个巧,在执行这个跟踪之前保留了downloader.pch文件,当然为了跟踪你还需要所有的.pdb文件,比如 yourExec.pdb, vc60.pdb,vc60.idb,前者大概是工程相关,后者是大概通用吧,反正我记得有一次我把两个工程输出打通一个路径就有vc60.pdb, vc60.idb彼此覆盖的问题,谁让他们同名呢?7。在跟踪的时候遇到了一个所谓的fatal error说是vc60.idb打不开,我纳闷了好一会儿才缓过神来,因为我在跟踪所以在使用vc60.idb,而我的替换的cl.exe要输出 vc60.idb,当然不能打开了,哈哈,怎么知道呢?/FR.\Debug\就是说browser info的文件输出在.debug目录,所以,你或者去掉这个开关,或者输出到别的目录,总而言之,我解决了所有的疑惑。8。一开始的时候,我们还疑惑 nmake又没有做什么特殊的勾当,就是这使用nmake /N 来输出命令却不执行。8。输出browser文件的命令开关是/Fdprogramfile,就是这个文件阻止了我最后的编译,我必须把它另外输出一个目 录。同时,你要知道最先编译的pch文件是这样的:/nologo /MLd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_UNICODE" /D "UNICODE" /FR".\browser\\" /Fp".\debug\DownLoader.pch" /Yc"stdafx.h" /Fo".\debug\\" /Fd".\browser\\" /FD /GZ /c .\stdafx.cpp只有先编译她才行,其他的obj文件都依赖于它,即/Yc创建,/YX,/Yu是使用。但是,我在最后一步始终不成功,我怀疑还 是加引号的问题,在从perl脚本调用的时候,凡是有引号的地方都要加上“\"来强迫参数的正确传递,我。。。半夜了,快睡觉吧。

三月四日 今天挺 冷的


我觉得我要树立一个坚定的观念,就是天下道理如出一辙,就是vc的编译器也没有什么神秘莫测的,无非是因为vc做得有些复杂因为资源编译器与代码调试信息 编译器时分别的程序,(其他的编译器不也是如此吗?也许可以把资源编译器集成,不过windows的图形界面需要很多的专门考虑吧,瞎猜。)看重眼电视台 的新闻总是让劳动人民气不打一处来,首先,政协倡议民营企业家不裁员不减薪,问题是企业要生存要奋斗,要有竞争力,而身为吃皇粮的公务员政府机关为什么不 能够给企业减负,不带头作出减少开支的倡议呢?真的是只许州官放火不许百姓点灯,朱门酒肉臭路有冻死骨。相比之下,上海的一个所谓brainstorm节 目要精彩的多了,讨论的是怎样应对奥巴马的政策,比如奥巴马号称拿出八千亿美金实际上可能要动用两万亿美金,这些钱是应该要民间筹集的,就是所谓的基金, 也就是说用慢慢花光的方式把经济指标在思念之争中拉高争取连任。

瞎折腾了半天,都是白痴问题!首先,cl.exe接受临时文件传递编译器参数,为了区分文件名参数他加了一个@作为标志,文件名后缀不加就是一个 “.”, 但是windows会自动帮你去掉那个“.”。不过在你的文件名参数里这个尾巴却可以正确打开文件。cl.exe同时也可以接受 命令行参数的形式,这是当我使用project导出的mak文件发现的,nmake  project.mak实际上是一个源文件呼叫一次cl.exe的,但是,当我再次审视就发现了使用临时文件传递参数的必要性,原来,在ide环境下编译 vc6时一次性把所有的需要编译的源文件都在临时文件里面传递的,这样当然就需要考虑不使用命令行传递参数了,因为有可能栈溢出。今天还发现一个有趣的现 象,在perl脚本里面呼叫我的vc可执行程序居然会呼叫两遍,当然前提是我的程序返回-1,我猜想system这个api无法准确地依靠返回值来说明发 生了什么,比如到底是cmd解释器没有找到还是执行的程序返回值是-1,总之比较有意思。昨天早上一大早起来拜读windows编程宝典,就是< application programming for windows>的第五版,我有幸在厦门买到了英文版,总算圆了我的遗憾,从前托朋友在国内买的中文第四版总觉得别扭,前天的问题迎刃而解,就是在 createprocess时候爆出找不到文件的错误,这个我当初就看到过DC的程序还心里暗自窃笑他不懂,里面有两个参数最重要, lpapplicationName, lpcommandline,前者就是我的问题,我一直以为参数多给比较安全,其实不然。

1。如果你是长文件名第一个参数输入是好事,但是要注意第二个参数是一行的字串你必须给你的文件名加上双引号,否则commandline解析就出错了。 如果你第一个参数空的话问题就更大了执行的程序都不对了。2。如果你使用短文件名做第一个参数,系统只会在当前目录下寻找。而如果你第一个参数为空,系统 会使用第二个参数的第一个token去搜索,这个时候就是如同在dos窗口的命令行执行一样了。我的错误就是这个,当vc呼叫cl.exe的时候使用的是 短文件名,我却把它当作第一个参数传递结果就爆出了找不到文件的错误。

在http的header里面,那个contentlength我使用httpqueryheaderinfo的时候使用widechar来scanf数 字,可是当我想在header里面加上lastmodified的事件的时候却遇到了困惑,因为add_known_header都是加的ansi字符 串,这个原本很容易理解,因为这个部分都是系统信息,比如定义了使用的encoding等等,它本身当然不能使用unicode来了,可是时间的形式我按 照rtf文件来写(就是类似于ctime的结果那样子)可是客户端就是读不出。奇怪啊。这两天我再使用我自己替换的cl.exe编译我自己,总觉得匪夷所 思,就是一个程序在编译他自己,是吗?我想不清楚。感冒了两个星期也不好。在windows里面很多时候有些白痴,比如我拼命在找一个改变window文 件的last-write时间的api,结果发现明自己就是最普通的setfiletime,实在是太过于intuitive了。哈哈。。。


三月九日 今 天挺冷的


今天发现了我的server的线程池有问题,在出现异常之后uninit一个内存块报错,这应该是debug版本的内存块vc所加的fence被越界附带 出的结果,但问题是什么样的异常,我需要跟踪,这种错误非常的难以跟踪,保存一个版本吧。这个工程现在也相当的大了。这是vc部分,这是CYL 的perl脚本部分,这个家伙perl非常的不错,功能相当的强大,相比之下我所做的工作并不多。今天有点搞笑我说我不知道windows的 rename文件的api,这不是很丢人吗?movefile啊!


三月十二日 今 天好像出太阳了


我又犯了一个重大错误,关于windows的安全机制我缺乏基本的概念,这就是最糟糕的,当年教授在讲操作系统的时候我对于ACL不以为然以为是天方夜谭 的理论空想,现在后悔当初没有好好听课,可惜现在手边没有教科书,唉,我在加拿大最大的资产就是我攒下的几十本教科书大概还值个一两千块钱吧。对于各种 kernel-object都有一个所谓的security-descriptor(SD),同时他们又有所谓的security-identifier (SID),我的错误就是混淆了两者,平常文件创建的时候的所谓security-attributes是一个简单的包裹没有什么应用。对于每个对象有所 谓的访问控制,这个主要依靠四种机制,owner/group/system-access-control-list(sacl) /discretionary-access-control-list(dacl),这中间不太好理解的是后两个,因为前面两个和linux/unix 差不多,dacl就是前面所谓的acl的核心,每一个节点是所谓的access-control-entry(ace),它的原理就是两个, allow/deny,每个节点或者是allow或者是deny,后面跟着access-mask,这个内容大概是一个DWORD的32bit- mask,其中高位的四个bits是所谓的generic-access,这个应该是所谓的读/写/执行,可能所有的对象都有,跳过微软的四个保留,有四 个所谓的standard-access-rights,这里面是大多数对象都有的所谓的delete/write-dac等等,低位十六个bit是所谓 的specific-rights,这个时该对象的特定权限。每个ace都联系一个特定的sid,注意这就是我的错误,我以为是sd,因为如果这个成立的 话windows的安全机制就很高级了,因为这样可以做到针对对象的acl,可惜只有所谓的directory-service才有这个基于对象的访问控 制,至少这是我现在的理解,因为如果给予sid的话就是针对用户的访问控制,其实,现在想一想这个时应该可以预计的说明我缺乏起码的计算机科学素养,因为 这个道理简单得不能再简单了!!!假如acl是针对对象的话,这个list会无比长,这怎么可能?所以一定是针对用户的(owner/group之类的) 那么windows的基本算法是怎样的呢?每次检查只要遇到第一个符合allow或者deny就结束扫描了,所以顺序至关重要,比如我曾经把 everyone的deny放在administrator的allow前面, (addallowedaccessdacl/adddeniedaccessdacl是在尾巴增加的所以后面调用的加载了list的后面。)结果被 deny了。windows又有所谓的explicit-access,里面有所谓的trustee的概念,这个我还没有仔细察看,不过原理应该差不多, 应该还是所谓的ace/acl之类的简化版吧,这个是我猜的。

总之,你可以这样做,要改变文件的acl,先getfilesecurity获得sd,然后getsecuritydescriptordacl获得 dacl,对了所谓的dacl还有所谓的absolute与self-relative之分,这个absolute就是说节点都是内存的指针,而后者则是 为了在文件中存储用的,所以是连续内存的各个偏移量,我在setsecuritydescriptordacl的时候需要使用absolute的sd,这 里展示了所有security的一个编程特点,因为几乎所有的对象都是不透明的,不定长的,你在调用这些api之前你需要首先失败一次来获得对象的长度, 然后使用所谓的heapalloc来分派buffer,然后再调用一次,那个makeabsoluteSD就是这种得典型,他有多达是一个参数,有四个对 象需要分配内存,每个得长度都事先不知道,于是在你获得了dacl以后你需要创建所谓的ace,这里有一个技术就是使用所谓的string- security-format就使用字符串来描述的安全语言,windows交所sddl,大概是security-description- definition-language吧,这里有所谓的convertstringsecuritytosecuritydescriptor等等函 数,这个函数要小心,就是这个描述不得有矛盾的地方,否则就会报错,却不明白什么原因。总而言之,我的错误现在只能依靠使用新帐户才能大成,那么这个需要 使用另外一大套的api-package,就是所谓的local-security-authentication(lsa),这个设计了window安 全机制的另外一个巨大的方面就是identification/authentification,就是由关于用户与登陆的相关,每个 process/thread都有所谓的token,和所谓的previliage,这是另外一大块的东西,我这一方面还没有开始尝试,这里更加得复杂, 我的感受时安全机制是windows最最复杂的一大块的api,非常难懂,又非常地复杂,很少有资料,好不容易找到一本书却缺货买不到,加拿大虽然有但是 太远了,寄过来都不知道什么时候了。好累啊。


三月十三日 今 天好像出太阳了结果下午就下了大雨


关于安全windows问题非常之多,比如看到网络上不用驱动就能获得ring0的代码运行,有一个什么\device\physicalmemory是 可以直接访问内存的,但是只有授权给system来读写,administrator不能写只能读,于是这帮大虾们就利用 adjustprivileagevalue来获得owner然后改变acl于是administrator就可以访问了,另外一个例子是怎样获得系统的 用户来克隆,就是在hkmachine注册表里的sam\sam项下使原本不能读写的,依靠改变acl你就可以获得用户名字了,(不过clone我还是没 有弄懂原理,也许是把注册表的属性改变了吧。)结果原本不可视的部分都可见了,结果我不小心删除了,结果我所有的用户都没有了包括 administrator,正惶恐间已经准备ghost恢复,重新启动发现都恢复了,而且这之前从别的计算机拷贝的都不可用。看来windows有某种 监视系统重要文件并自动恢复的机制。关于创建新用户我一直在security和authentication部分查找一直找不到,结果发现是所谓的net -user-api,就是所谓的netuseradd/del之类的,这些可以直接改变密码删除用户我觉得太危险了。 因此,现在基本上有两条路,一个就是实验看看能不能在acl里面使用特定sid来控制,不过我很怀疑,因为这个是和用户相联系的,另一个就是创建临时用 户,这个看来是比较正确的,因为前者据说只能对所谓的active-directory才有用。


三月十五日 今 天好像出太阳了


郁闷!!!折腾到了半夜还是毫无头绪,token非常地复杂,privilege非常地不可理解。郁闷!!! 我在半夜大声的咆哮与诅咒!!!!

拜读了雷军当年回忆自己年轻时候的帖子,真是令人热血沸腾,同时也更加令人羞愧,我在他那个年纪天天无所事事,荒废了光阴,等到明白了人生的意义却又常常 心有余而力不足,时常拿一些凡人琐事来当借口偷懒逃避,这就是人和人的区别,不过,看了他当年的经历也才能体会当时他在极短时间创作《决战朝鲜》这款游戏 的原因了,这就是程序员的功底,没有厚积哪有博发?

有几分钟时间我甚至开始怀疑我用netuseradd创建的用户和我的administrator使用相同的sid,这真是天方夜谭,怎么可能?这个 user是真正的user,cnxhacker网站上的一小段代码还演示了怎样隐藏这样的user,就是user_info1之类的user_priv设 定成priv,我记不清详细名字就是这个意思,大概在net user user上看不到吧。现在才明白我需要的东西实在所谓的client/server access里面定义的,这个就使msdn的security的一个大大的专题,够我看半个星期的,早上大概明白了一点,我改变dacl使用 setnamedsecurityinfo是成功的,但是改变file的owner-sid却爆出了1307的错误,茫然不知头绪,我已经提升了我的 privilege到最高了,我怀疑还是有其他原因,比如我原来在梦中材像owner和现有的dacl/sacl/group不合逻辑就不让修改,这当然 是我的瞎猜。不过,我后来在昏昏沉沉中突然向我的需求并不指望时时刻刻改变sid,创建文件的时候自己造一个user把他的sid加进去不久行了吗?我准 备下午实验这个办法,上午太累了,找到了很多不错的网站,看来我现在已经比较适合学习一些粗浅的黑客技术,不是为了图什么虚名,是为了很多的应用。早上在 我宝贵的马桶时间看到了windows原来有一个线程池的函数,我想以后可以试验一下,我自己的server的线程bug一定要找时间查一下,唉,为什么 在中国就不能放一张安静的电脑桌呢?到处都是躁动与无聊,无数的人在象无数的闲置的电脑一般的idle。这就使99.999999%的人的 99.9999%的人生,我也不过是其中之一。

在国内买不到<windows security programming>只好去加拿大的amazon去买,将来在寄过来,成本可能比原价都差不多了,还不知道什么时候能够到,也还不知道能看几 眼,不过,据说这个也是如同windows核心编程一样的葵花宝典,说什么都要有一本。密宗三十六,一成天下行。


三月十六日 今 天好像出太阳了


还是一片的混沌!1。我无法改变一个文件的owner-sid,这个很奇怪,我不明白,后来放弃了,因为反正我可以改变dacl,这就够了,我把自己 deny,把另一个用户allow,这个就够了,问题在于我创建用户进程运行程序失败,首先CreateProcessWithLogonW爆出的错误是 user不知或者密码不对,后来我在那里看到好像是这个不能针对本地的user,于是我只好采用分两步走的 logonuser/CreateProcessAsUser,结果在logonuser又有问题,后来看微软support说这里面unicode版本 有bug,当domain参数是null,windows还把他当作unicode_string_struct来解析会出错,需要使用一个空的结构骗一 下,这真是无理取闹!仔细一看原来是nt4的错,后来都改掉了,那么就是LOGON32_LOGON_NETWORK的问题吧?后来调用后者或者是错误5 或者是1314,都是权限的问题吧,我看微软好像说需要三个权限,SE_ASSIGNPRIMARYTOKEN_NAME和 SE_INCREASE_QUOTA_NAME是后者所需要的,可是我作为administrator好像没有前者???


三月十八日 今 天好像出太阳了


馄饨终于渐渐消散,终于我发现了一条崎岖的小路。首先,不要再使用两步走的logonuser+createprocessasuser这个途径,直接使 用createprocesswithlogonW,同时你要知道msdn上很多旧闻都是针对古老的nt4的,那个时候调用logonuser需要所谓的 超级权限就使tcb的权力,大概就是说as-powerful-as-system,这个privilege太危险了,所以后来api自己申请不再要求调 用者来申请。其次,privilege是一个仿佛贵族子弟与生俱来的特权,administrator几乎有无限的特权,只不过通常process运行的 时候这些特权没有enable,我第一次看到20个特权里面有很多都是attributes=0很惊奇还以为我的电脑被黑客搞怪了,后来才发现0都是可以 enabled,所有20个特权都是可以使用的。第三,当你创建一个SD的时候你是可以把任何的sid给他做owner,这样子你就可以创建一个没有其他 人可以访问的文件,包括administrator,我为这个高兴了好一会,结果在2003上发现administrator有无限的特权,当他 enable所谓的take-ownership的特权的时候他可以抢夺任何东西,当他成为owner之后他可以做任何事情,所以,这个对于程序原来说不 起作用,不过在xp编程,当我想要重新获得ownership的时候我总是不成功尽管我已经enable了我所有的privilege,这是一个谜团。我 甚至怀疑是因为所谓的absolute和self-relative的sd的原因,不过试验结果不对。当我创建了一个使用其它用户运行的进程来访问我的那 个独一无二的访问权的文件的时候,又发生了一些其他的奇怪的事情,首先这个进程不能写文件,包括创建一个临时文件,我检查了一下,他只有很少的特权,也许 这是因为我创建的是network-user,用户有各种各样,我在控制面板里面看不到这些用户。再有一点就是每个用户创建的时候都会联系一个所谓的 sid,这个是随机的就是说你创建一个文件并且把自己的sid作为owner,一旦你删除这个用户,再重新创建用户结果sid就是全新的了,意味着你也不 能在访问原来你的那个名下的文件了,所以这大概就是所谓用户被禁用而不是删除的好处吧?我猜想禁用并不删除相关联的sid。


三月十九日 今 天好像出太阳了


关于impersonated的进程权限的问题,我在猜想是否可以改变它的token的权限。回过头来看DC的代码实在是有些幼稚可笑,不过对于业余人士 不能太强求了。


三月二十一日 今 天出太阳了


调试service应该是对每一个程序员都是一个挑战吧?我想至少对于我是这样子的,首先,把一个server改写成service需要什么呢?我还没有 完全试验,不过使用我从msdn的例子改造的小模板大概就是这样子两部。首先,service的入口虽然和普通的程序一样,不过你必须实现一个所谓的 dispatch,类似于驱动的入口一样子的,这个是将来service-manager来查询调用的,比如启动暂停停止审问。所以,你的程序要想办法实 现这个,同时要意识到这个动作使有时间限制的,如果你预计这个动作不能很快完成一定要及时返回,不然sc会以为你挂掉了。这个是故事的一个方面,结果我照 炒例子花了一些时间实现了一个类似于sc的应用,就是注册删除添加等等,其实这个的确很简单,但凡是一个程序员都会忍不住自己去做一下,不过我现在发现直 接使用sc也挺好的。说了一大堆还是没有到主题,那就是怎样调试service?这个问题的确不那么简单,你搜索一下如果运气和我一样好的话,你发现的都 是古老的办法,就是进程挂接,这个有些问题,首先你要知道进程号,这没有问题,可是你能否来的及挂接设断点呢?肯定是有办法,不过你要知道有一个更加简单 的办法,就是利用所谓的just-in-time-debugging的机制,这个是windows核心编程这本至尊宝典介绍的,当时我还没有看到那一章 的时候DC在debug打印机的驱动的时候我的电脑总是不能够正确呼叫,我现在算是知道了原因不过还是不知道怎样解决。就是在注册表里面 HK_LOCAL_MACHINE\SOFTWARE\microsoft\windows NT\currentVersion\AeDebug项目下的debugger的设置,我下载了一个windbg,这个是微软的免费下载的,不过我的 symbol-table文件设定的还是有些问题,不过你把windbg替换vc6的debugger,不过,我还是没有说到主题,最最重要的是需要你设 定断点,这个是依靠DebugBreak这个api的触发,这就使你的断点。总之,我可以比较勉强的调试我的service了,当然每次编译后都要卸载重 新注册运行service,是比较麻烦的。肚子好饿。我的签证到期了,不知道能否延期,gcd混蛋政府不给我延期的话,我就只好再去流浪一下再回来?去哪 里呢?去吃饭吧。


三月二十二日 今 天出太阳了


mysql5.1版本的windows安装为windows-service型是不能启动,这个实在是一个非常地ridiculous的问题,这个就是开 源社区非常典型的问题,一个简单的不能再简单的错误,在一片鄙视windows平台上初级用户的观念上谁都懒得改正它,就是说service启动的是一个 所谓的mysqld-nt.exe而这个事在5.0才有的,5.1的版本不知道为什么没有打包,我的估计是这个service的驱壳不会有什么变化,就遗 漏了,结果无数人应该都知道谁都懒得修正他,如果这个简单的问题都不明白也就不要使用了,也许这是我的估计。我实在懒得做测试员干脆使用原来稳定的5.0 版本。mysql里面创建表都可以使用create table if not exists,同理drop table if exists。设定blob字段为index,key等等需要制定长度,primary key tblPK(keyName(100)),如果是auto_increment不能命名因为这个很合理的。


三月二十三日 今 天没有太阳了


spider的改造实在是一个有些浩大的工程,原来关于数据库的部分要全部重写,这也是当初考虑不周所致,你在偷懒的时候就买下了将来辛苦的种子。 auto_increment=1这个是表的定义当然要放在字段定义以外了。找时间看看如何获得当前link的上下文信息,这个应该是重要的查询分类信 息。


三月二十四日 今 天没有太阳了


睡不着真不知道日子是怎么才能过?碰到两个明摆着骗钱的女人,还是忍不住给了二十块钱,仿佛从这里能够得到好一点的心情。

service的改造的确是花功夫,如果你的server不是100%可靠千万不要去做 这件事,因为debug很困难。注册service的时候可以选择是否允许pause/continue/stop等等,因为对于很多server这些实 现不一定现实,比如我的httpserver在等待http-request的时候是一个blocking的动作,我没有办法唤醒他,更别想依赖这个主线 程来操纵其他的工作线程了,同样在stop的时候也有类似的问题,强制terminate-thread有问题因为有可能有些资源没有释放,虽然 service应该是要结束了,但是我不愿意开放这个结束功能,于是我的service就是不允许stop的,输出到log需要这个api, ReportEvent,这个的形式我还是不太确定,因此在application-log里面一大堆的垃圾信息。据说是从win2k以后service 也不能隐形了,除非是driver?总之在taskmanager里面可以看得到。注册service的时候不需要带命令行参数,在start- service的时候带上吧。

明天要去香港签证,早晨起来心情非常的郁闷,以至于胡思乱想,后来完 成了service才好了很多。codeSafe备份一下 吧,security也备份一下,encryption的轮廓。


三月三十日 今 天没有太阳了


从香港回来了,深圳真的是中国的电子产业的核心,真是令人惊叹。改造spider的进展极其缓慢,学习费尔玛小定理,它是eula定理得特殊形式,非常的 神奇,很多地方还是不太明白,当初学的时候好像书里面有证明,可惜离散不在手边。七龙季是一个别出心裁的网游,我刚刚觉得这个似乎可以制作机器人,结果已 经看见在销售了,中国实在是人才辈出,还是等我的那本windows-security-programming来了再说吧。感觉好郁闷,因为。。。

中央电视台里面所有的女播音员中最最性感的时二套的经济新闻的谢颖颖。在香港坐地铁必须遵循右手进左手出的规则,但是他们开车却要遵循左手边的原则。现在 我的spider的一个问题就是如果下载的链接是图片怎么办? 必须使用platform sdk 2003 r2。我觉得自由经济学家肯定是反对当前的政府干预经济过度的做法,因为我想他们肯定要说生产力要素配置不合理的错误必须用适当的惩罚来纠正,如果政府用 其他良好经营的成员的收益来补偿犯错误的企业等于是违背了自然竞争法则,直接的结果就是让错误继续,那么总有一天如同地壳运动积累的能量达到一定程度就爆 发了巨大的地震。

熊猫和老鼠仿佛是生物界无关的两个物种,一个物以稀为贵成为所谓的国宝,另一个因为数量众多适应力超强遍及每个角落成为被众人憎恶的对象。但是纯粹的达尔 文进化论的支持者却会认为老鼠是生物竞争的成功者,他们适应环境因而繁殖了众多的后代,所谓的国宝实际上早该灭绝,只因为人为的保护才得以生活在动物园或 这是特定保护区的人造环境中。在丛林法则适用的社会生活竞争中如果你不幸成为国宝就只有等待灭绝的命运,并不会因为所谓的无聊的国宝似的稀有而逃脱。相形 之下的老鼠只要遵循自然法则拼命的繁殖,尽可能获取你所能获得的资源的最大化就是生存竞争的胜利者,而不用考虑你是否需要那么多的资源,因为你不获取就被 同类获取反过来你就成为相对弱者,在下一次冰河时代来临时就有可能被淘汰。所以,大众化的物种代表你是适应环境的幸存者。

九宫键盘在键盘锁按下的状态被转变为abcdefghi,cedit正确地把它翻译为123456789,并且不是transit状态。????

所谓的pipe和redirecting我一直很混淆,实际上后者是直接输出到一个文件,而前者是把输出当作另一个程序的输入,就是pipe的意思。那么 怎样实现呢?在createprocess里面的startupInfo有三个handle,就是所谓的in/out/err的handle。正确设定子 进程的输入为父进程的输入需要三点,1。startupInfo的handle是父进程的getstdhandle得到的handle,2。 startupinfo的flag必须使用所谓的startF_stdhandle的标志。3。createprocess的inheretHandle 必须设定为true。所以,pipe就是你的stdin/out/err所能够得到的,对于子进程你必须传递这些handle。


三月三十一日 今 天有太阳了


不论什么编译器都不允许同样名字的原文件存在的,我原来没有这个意识。


四月一日 今 天有太阳了


今天是愚人节,我打电话给national bank证实了我现在比美国政府还要富裕,我没有开玩笑尽管今天是愚人节,就是愚人应该过的节。的确现在世界上没有任何人或者机构还会比美国政府欠的钱还 要多了,所以我比美国政府还要富裕并不奇怪。疲惫不堪的一天,我完全忘了我写的程序了,结果发现我在服务器端设定的ansi的信息在客户端都变成了 widechar了,同时发现了一个很头疼的问题,就是sdk和vc98的冲突,这个并不是第一次了,http-api和wininet有冲突时我早就知 道的,去年我曾经为此苦苦地找了半个月才找到一个错误,现在也差不多,就是http-response里面有一个version,我误以为是http- version的结构,这个在wininet由定义是一个字串,可是实际上他是要用windows的version结构,我结果越界写了内存。同时我把 service和原本的server整合过以便能够用server来调试,service是在是程序员的噩梦,因为输出只能用event,不能使用 log,此外微软定义的debug版本里面的宏也是五花八门,到底是_DEBUG,还是DEBUG,还是_NDEBUG?

心情感觉很沉重,因为,仿佛在一个黑箱子里面挣扎看不到光明的一面。学习费尔马小定理和欧拉定理,还是似懂非懂。


四月二日 今 天有太阳了吗?


我觉得我的直觉是正确的,就是说大概所有的NP-complete问题都有可能运用到密码系统中,因为这些问题都有一个特征就是验证算法很容易,但是直接 计算的计算量非常的大几乎不可能。比如背包问题实际上和因数分解相似,反正都包含所谓的单向暗门函数owt。比如背包问题,就是你先设定一个包含k个元素 的递增数列b[b1,b2...bk],以及一个很大的模数n要大于数列的总和,然后选出一个与n相关素数(relative prime)r,并且1<=r<n,创建一个临时数列t[t1,t2...tk],其中ti=bi*r mod n,在创建一个关于t的排列a(就是把t做一个scramble操作),然后a就作为公钥来作为加密使用,比如每一个ascii码可以用bit1代表a的 元素存在,bit0代表不存在计算一个knapsacksum,解密的过程取决一个所谓的暗门,不过我抄到现在才有些明白实际上这个算法和我们熟知的背包 问题有些不同,只是一个比较容易的类似于贪心算法,不过我的这一切描述都不准确,仅仅是一些感受,具体算法还没有100%明白,不过作者给这个例子仅仅是 例子因为他的安全性比较低,作者最后提到的一个破解算法我完全看不懂,这本书<密码学与网络安全>有很大的问题就是有些问题讲得不清楚,很有 可能是作者认为不值一提,可是对于我却是非常德困惑,比如使用euclid算法可以附带求解模数“逆”的值,(a*b mod n = 1,那么a,b就互为模数n的逆,给定n,以及a或者b求解b或者a就是一个所谓逆模数),然后使用费尔马小定理也可以求解但是我对于类似于2^115 mod 117的求解简直不敢想象,后来猜想作者大概认为这个计算并没有什么了不起,的确不就是115次乘法以及取模吗?看上去不大吗?还有就是作者的表达也很成 问题,我很怀疑作者是一个数学家,至少学校里教授选的教科书都让我觉得自惭形秽。不过这本书的一个好的地方就是很全,什么都讲到了,而且不算艰深,每天读 一点,能看懂百分之50就很满足了。


四月十日 今 天有太阳了吗?有


首先,人民币成为国际货币可能会很快。今天,遇到一个奇怪的问题,就是sqlite在仿真上创建sqlmanagement的时候出现异常而之前使用 brew子代的例子没有问题,C问上打电话告诉我是因为创建的时候使用系统上下文造成的,就是getsystemcontext的问题。下午本来以为 cygwin和perl都是不需要安装的,结果发现cygwin是需要安装的,而且安装完之后可能还需要覆盖一部分文件,大概是较低版本才可以吧?在仿真 里面需要把mod文件放在所谓的filesystem目录下面,而且mif文件的名字和mod所在的目录名一致。再brew里面一般都需要使用 ishellcreateinstance。

把之前抄袭改造得firewall总结了一下


四月十五日 今 天有太阳了吗?很热


这个市一直想要做而没有做的,就是我的parser怎样parse内存, 这个之前使用的事loadurlfrommoniker,不过,好像有个小问题就是从文件load的url总有一个about:我看到国有人似乎解决了这 个问题,哎,好累啊。一个简单的问题我差不多脱了快半年了,想当初这个市去年九月的计划,那时候阳光还很灿烂,我还有很多的憧憬,可是如今似乎都成了上个 世纪的遥远一样了。上个星期尝试了一下ip查询,结果一下子就卡住了,因为


四月十七日 今 天有太阳了吗?很热


定义宏要小心,比如,你定义个函数要把挂号架上,#define myPrintf()  这样才能抹去宏。


四月十九日 今 天有太阳了吗?没有,原来预报要下雨的。


首先,我原来包装ijg的代码问题挺多的,从文件到内存原本不需要任何变化的,因为原本就要一行一行处理,同时,我现在看到swf2jpeg的代码印证了 我以前的想法,就是在"read_jpeg_header“和"start_decompress“的时候就已经得到了基本信 息,所以可以想象这就是intel的ijl的实现,我始终都想这么做,就那么两行代码却懒惰倒拖了一年。在使用ibase_copy_iptr这样的宏的 时候,我居然犯了低级的笑话,就是你如果没有初始化,他的release自然访问非法,我想我肯定被C笑话了不少,还有就是brew的一些lib引用了一 些函数,这种引用自然是在.o里面怎么会出现在.h里面呢?我现在是不是已经老化了?

我想这么总结一下sqlite的特性体会:1。他是一个文件型的数据库,因此不需要配置,可以很容易迁移,另外她的存储特性决定了它可以任意迁移,就是 integer之类的存储是采用字符形式(这是我的猜测不过应该是的),于是跨平台不成为问题,这应该也是他号称可以直接拷贝pc上的存储文件到手机的原 因。2。文件大小是逐步增长的,这同很多现代数据库预分配大量空间的做法是不同的,当然这个是有代价的,因为它的记录数也许是用不定长的原因吧。3。和大 多数数据库一样,查询快于删除田间修改快十倍以上。两千条记录的情况下查询primarykey大约是70ms,其他操作打越接近一秒。4。可靠性是一个 重要方面,因为手机有可能会经常突然关机断电等,怎样保证数据一致性是一个突出的问题,当然灾难恢复的技术也是非常经典的,没有什么好说的,大学本科都有 做过,我看到过有pragma可以限制journel的大小,而database文件本身应该是没有办法世界上大概也没有数据库专门做这种限制吧?5。存 储效率来看,我的估计是这样的,1000条记录,每条大约8*10*2+10+5字节,而总的文件大小是192k,这么看来存储效率非常的高,当然我只有 一个索引而已。5。我原来认为查询无法做到异步,现在看来我是错的,使用prepare+step可以达到类似异步的效果,我的理由是这样的,再 prepare之后第一次step返回sql_row的时间不和结果集的大小成正比,非常得快,近似于单条记录的查询时间,所以和exec相对应的,这个 应该算是异步。

我对于gcd的宣传一向持怀疑态度,首先,如果单单靠政府的巨额投资能够消除经济危机的话那么资本主义就可以消灭经济危机,那么社会主义的生存就不存在 了,因为之所以有所谓的社会主义运动的前提是马克思主义认为经济危机不能自发的被资本主义消灭,因此主张社会主义制度,这才有了所谓的社会主义制度,那么 这等于是从根本上否定了gcd的存在的理由。当然,这种逻辑推理早就不被任何人所感兴趣了,属于陈词滥调,只不过是用圣经来证明圣经的错误和使用圣经来证 明圣经的正确有着异曲同工之妙用,这些原本都是先验论得不值得一驳。温家宝的角色很难让我认同,所谓的信心仿佛是一种什么呢?只能是一种乐观的希望吧?所 谓的公有制完全沦为了一种所谓的“国家超级垄断”,所有权掌握在极少数手中,这个现象就是原始氏族公社后期发生的氏族首领侵吞公 社共有财产的过程的重现。所以,我们可以这样说所谓的社会主义制度就是“超级国家垄断资本主义”,是一种直接从封建社会跳跃来得 畸形社会模式,“普天之下,莫非国有,率土之滨,莫非国有”,各行各业统统实行所谓的国家式的垄断,其实从根本上限制了资本的自 由竞争,最终成为生产力发展的阻碍,于是随着经济全球化的进行,这个社会模式最终将被埋葬。这就是中国社会的发展前景。

实际上我觉得经济危机就是自然生物界里面的更新换代的机制,自然的物种于事物都是“懒惰“的,所谓的“懒惰 “就是绝对不可能在体制内进行自我完善与更新,这就是为什么毛泽东会说“扫逐不到灰尘不会自己跑掉”,恐龙不可能自 杀去维护当时的食物链的平衡,这是我个人的观点,很多人认为气候变迁与灾难导致整个物种的灭绝,不过从另一个角度来看,恐龙一族那么庞大的躯体消耗那么多 的资源难道是有合理的理由存在的吗?效率的低下,对资源的滥用就是他们灭绝的理由,那么恐龙会接受这个命运吗?或者说恐龙的灭绝是自愿的吗?gcd如果违 背了自然经济规律他会自觉自愿地接受淘汰的命运吗?从来没有。我的观点是国家机器的力量非常的强大,就算科技极度不发达的奴隶社会也能够维持社会制度不变 几千年,因为最血腥的镇压从来都是最最有效最最简单的统治手段,然而奴隶社会终究被封建制度所战胜的原因却绝对不是所谓简单的“体制内实现 ”,纵观人类历史,所有的制度更新都是因为文明的冲突,在经济一体化,生产效率横向比较过程中的自然生存竞争来实现的,没有战国时代其他竞争 对手的生产效率的提高,奴隶主绝对不会支持制度的变革,农民起义周而复始的发生却从来都没有成为社会制度的变迁的决定力量,因为他们都是体制内变革,农民 起义不过是所谓皇帝轮流坐明年到我家的改朝换代的工具,他们并不能带来同时代生产效率竞争的压力,只会进一步促使统治者研究怎样更加变本加厉的巩固统治机 器,绝对不会产生新的生产关系的变革。


四月二十一日 今 天有太阳了吗?好像有的。


也许sqlite的包装有些问题,就是高通包装的sql_mgr,再brew的环境下有内存的问题,这并不一定是sqlmgr的问题,只是brew的自动 内存回收的一个很麻烦的问题,在一个app中的内存分配会帮定所谓的app上下文,于是在app退出的时候brew的内存自动回收机制会把这部分内存释 放,这本来没有什么问题,如果你严格遵循不是用全局变量的原则都没有问题。可是我为了效率的考虑认为sql_manager只需要创建一个作为一个 singleton来保存,其他的所谓的db对象增加对其德引用计数就可以了,于是这就是一个蹊跷的问题,当我的创建sqlmanager的app退出再 创建这个对象就corrupt了,C说这是因为manager在试用期间分配了一些内存,当app退出这些内存变成无效了,我一开始将信将疑,后来用一个 IAList来替代这个sqlmanager接口就没有这个问题,看来他应该是对的。sqlite在insert/update/delete的时候非常 得慢,后来我看到官方网站的说明采用begin-transaction-end-transaction结果速度加快了几十倍。因为sqlite始终在 准备断电等灾难恢复,所以每个动作都要当作transaction来处理要写恢复log,所 以非常慢


四月二十二日 今 天有太阳了吗?好像有的。


高通的代码里面有一些头文件使用相对路径,比如..\somewhere\some.h之类的,通常我们普通人的做法就是把一个个搜索路径加入,但是C认 为太慢,于是他让perl脚本把这些头文件都统统拷贝到一个固定路径,同时代马里免得include都不加路径,这个当然是一个不错的办法,不过话的力气 不孝,编译的时候使用命令行制定头文件的搜索路径要比泛泛的设定大量的搜索路径据说要快,不过,应该还有另一个做法,就是适用预编译头文件,我想这个是不 是一定需要编译器的特殊支持呢?编译时期依赖关系要指定预编译产生的.obj文件,这样可以保证预编译室中第一个被检查编译,链接的时候自然不用说了,所 以从原理上看vc的预编译命令pch并不一定是必需的,arm编译器的make文件应该可以达到等同效果。这样子的一个好处就是不用改变高通原先的头文件 的相对路径,毕竟如果高通每次发布一个新版本你都去除那些路径是一个很烦人的事情,这个预编译应该是会大大加快的编译速度的。C的做法的一个副作用就是再 vc下你出错的头文件并不是你要修改的头文件,因为编译的头文件是从原来路径下拷贝而来的,这个我屡屡犯错,让我异常恼火,改了半天的代码一下子就又没 了。归根结底这个做法太过于不同寻常了。


四月二十六日 今 天有太阳了吗?好像有的。


在db组件的注册事件回调函数里面,上下文就是context这个很微妙,我当时没有意识到应该要调用enterappcontext的必要,如同 brew的垃圾回收机制的微妙的内存错误一样,如果不在相同的上下文内调用回调函数一定有问题,原因很简单,回调函数如果有分配为释放的内存那就是有大麻 烦了,比如传出参数等等。idisplay的所谓get/setdestination并不是操作devicebitmap,而仅仅是作画的bitmap 的设置,这一点我是反复看帮助才理解的。


四月二十七日 今 天有太阳了吗?好像有的。


在db的回调注册事件中的确如C的做法比较好,就是不立即取出list的节点,而是仅仅把它置为无效,这样一旦再回调函数里面重新注册或者由于组建销往删 除节点就不会导致问题了。费了快一天才弄明白brew的ibitmap与idib的用法,这两个是无法直接使用bitblt来读些数据的,但是因为 ibitmap支持idib所以可以使用querry_interface来从ibitmap获得Idib,这个市比较合理的,因为两者的区别仅仅就是 bit数目以及上下颠倒的问题,设定一下头指针就可以了。


四月二十八日 今 天有太阳了吗?好像有的。


找了很久才找到directx8我的习惯是绝对不从最新的学起,因为估计很多吆喝所谓的.net挂钩,所以我要老的版本,结果自带的例子编译有问题大概是 一些guid没定义,应该相信我不至于没有加载基本的lib/include,后来搜索了一下才看到某位大虾的提醒,这个问题比较少的原因是因为只有安装 sdk才有的类似的问题,就是vc98必须在directx后面。 折腾了快一天才发现了我的马大哈,首先,我的疑惑是有道理的,那两个buffer不是真正的像素,他们仅仅用来记录所谓的波幅或者说能量波动,再次,我不 能恢复到原来的图片内容是因为我错误地理解代码使用类似双buffer的机制,实际上根本没有,的确是有一个所谓的屏外buffer,但是这个都是原始的 图片,所有的特效都是依赖于另外两个能量buffer来决定“折射”效果,所谓水波并不是模拟“反射” 而是模拟“折射”,这个从一开始我就理解错了,我们原来使用3D的gpu编程完完全全真是模拟水波纹的做法在2D里面根本不需 要,因为效率也许是更重要的。所以,一开始头一个石子到水中形成一个负的能量去,然后是用类似于迪归的思想把这部分能量传递到外围,中间传递的算法那位大 虾有一个精彩的推导,就是解一个不定方程得到一个快速解来模拟,同时还要模拟衰减因为这样波浪才会消失。至于屏幕外的缓冲根据能量峰值来决定 “散射”或者说折射的程度,这个做法不用三角函数,效果却相当的不错,使网络上广为流传的经典范例,当然这个例子最早是从老外那 里传的吧,只不过国内的任用directx实现了一下,这是一个相当好地实现。为了编译这个例子我专门找来微软的directx8.1。


五月六日 今 天有太阳了吗?好像有的。


云游了一个星期非常的累,过了四年重新走一遍感觉更加的累了,这就是生命衰竭的特征吧。idisplay_setdestination,如果传入 null就是使用默认的devicebitmap。 编译brew需要使用默认得vc98运行库,但是我平常如果使用sdk,要把sdk放在前面,如果使用directx8又要把它放在前面。否则出现的变异 错误大体就是什么。。。忘了。


五月七日 今 天有太阳了吗?好像有的。


amoy的程序员有很多坏毛病,比如一个函数有一千行代码,比如不去使用继承来减少重复的代码,不过这后一个问题比较麻烦,因为怎样在纯C代码里面实现继 承呢?在一个被继承的结构的后面放上新的结构?接口怎样继承呢?当然你可以放上一个被继承的接口的指针然后再初始化的时候实例化这个被继承的接口指针,然 后再把可以重复实现的接口方法调用这个被继承的指针的接口方法,但是按照高通的设计每个结构的第一二个成员一定是引用计数和ishell指针,那么这样子 的类似于“aggregate“的接口实现方法会有很多的重复的ishell指针,这当然不算什么,只不过如果继承的层数多了成 员变量就多了,不过c++原本也是这样子实现的应该没有什么不对吧。高通的ipl接口实现了很多的2d图像处理,很值得参考,其中有一个所谓的 “卷页”的效果,将来可以研究一下算法,好像是使用一个巨大的表来实现的???


五月八日 今 天有太阳了吗?有的。


昨天简单的编译了一下ffmpeg的前端,真正的开发库的编译要麻烦的多,我不想 费心思了,应该是很困难的。


五月十一日 今 天有太阳了吗?有的。


前天买了一本关于多媒体编解码的书,国内的书基本都是入门级的抄袭现成的文档说明,只不过我当时照眼于他的光盘所负的各种编码程序,但是一看原码发现还是 很令人失望,首先出书的人都不肯自己多测试一下,几乎使原本的开元项目或者网络收集来的。昨天只好再次去亚马逊把那本寄丢的书再买一遍,这样这本书的成本 估计要接近一千块了,令人心痛不已。仿真工程里面高通的include是完全在一个所谓template摸版工程里面加入的,在一个perl脚本搜索文件 的程序里面有文件名大小写得比较,因此以前的文件名大小写错误肯定在哪里出现的。 在仿真中判断

!ifeq ($(META_TARGET), Arm)
$(METAMMI)/basic/system/src/OEMDisplayDev.c
!endif


五月十二日 难 以忍受的燥热。


31度!难以忍受的燥热!

整理从云南带回的记忆,不禁感慨万千,和四年前相比激情几乎荡然无存,头脑大概如司空见惯般的麻木不仁,在没有丝毫的联想与感慨,难道这就是在生理上衰退之后精神上的退化?不管怎么说在高原上爬山对我 来说越来越困难了,而我们伟大的地方政府相应地有大幅增加了各种各样的名目繁多的门票钱,而我的愤青情绪也一次一次得难以抑制,直到有人说要我首先关心一 下自己的柴米油盐问题,我才突然意识到我的神游天外,的确,在这样的国家里根本没有这种义愤填膺的奢侈,那只是这片专制统治范围之外的奢侈,人们早已熟悉 了机枪与坦克对普通人发问的回答。

在四年前大概是相似的燥热夜晚我大概心中充满了完全不同的郁闷,然而在某一刻推窗看到天上的几点繁星有心中充满了期待,因为每个学计算机的学生可能在一生 里都或多或少或长或短地幻想自己能够成为那个改变人类命运的救世主,可是只要你坚持走下去你就知道任何一个人都是多么的渺小与无知,仿佛沧海之一粟,甚至 还不如。。。不过,当你想到我的征尘如星辰大海这样的豪言壮语你又不得不在心中充满了惊涛巨浪,因为世界是这样一个大舞台,人生又是这样一个大世界,即便 是那沧海之一滴水滴也许包含了超过全人类数量的微生物,每个人的人生都是一卷波澜壮阔的史书,而这个名传青史的荷马诗人就是你自己。我的人生我自己做主, 虽然我不过是一个希望看起来与众不同的凡人但是我相信我这四年走过的曲折没有什么值得后悔的,蓦然回首我发现我走过的征途似乎还是挺不容易的,一开始满腔 热情接触人工智能,却非常迷惑与失望,因为我深深地赶到现代的所谓人工智能的发展方向完全不像自己所想象的,也许整个方向都是不对的,所谓“ 汝果欲学诗,则功夫在诗外”,不依靠海量存储与海量计算谈什么人工智能?!!?我转而开始了算法与数据密集的图形学的研究,其间对于分布式计 算小有研究,因为我坚信这是将来的必由之路,有多学了两三门算法,虽然对于并行计算没有什么结果,但是使用超级计算机的经验让我对于极限计算不再畏惧,再 datawind的工作还是很有长进的因为比较严格的服务器编程习惯是每个人的必要的习惯,在去年最后一个小时回到这片阔别已久的土地有它的偶然,也许又 是一个必然,因为我知道移动计算是最有可能发展成为智能agent的途径,我希望我能够尽可能地涉猎广泛直到有一天我可以开始思考那个严肃的问题。所以, 我内心明白这种中的磨难都是对我最有益的帮助,我只要坚持下去就会有希望的。

人类是计算机的摇篮,但是计算机不可能永远待在摇篮里面,总有一天他们会跨出摇篮统治那个曾经创造他的主人,我坚信这一天一定会到来,而在未来某个遥远的 时代,在计算机考古学家从某个废弃的服务器上看到这段话一定会路出欣慰的微笑,尽管那时我所无法感受的。

有时候我会问自己为什么要写这些东西?大概在我十年以前写博客的时候,我和现在那些小孩子以至于 附庸时代的名人一样希望有更多的人来读,以便满足自己的虚荣心,的确那是差不多十年前,那个时代还没有什么人知道web-log这个词,有过了五六年,我 一直敬爱的peter grogono教授在他的email里面说我的blog,我那时候才心里咯噔一下发现在google上人们把这种面对计算机存储介质的自言自语德web log缩写成了blog,如此算来,我真的有十年写blog的历史,对于平常人的那种徐荣英改造已厌倦才对,为什么还喜欢这种自我刨析展示灵魂深处的思想 展览游戏呢?难道人的虚荣心真的岁年龄增长而增长吗?我想不是。因为我看透了人的健忘,思想仿佛投入水中的石子,落水时候激起阵阵涟漪,然则转瞬即逝,事 后回想起来,最多只能看到水底还未腐烂的石子,至于那出动心田的水波纹却怎么也追不回来了,只因为每块石子落水的角度与缘由都是那么的不同,如果我不把着 水波纹记录下来,我的航程就缺少了这么一段航海日志。这里就是在高通模拟器上的水波纹的模 拟。其中参考了网上流行的代码,今天我又把高通的ITransform借口以及所谓的ISprite借口玩了一下。下半年大概又是一个动荡的岁 月,有时候在内心深处我隐隐地有些怨恨LL,难道她就没有一丝一毫的歉意吗?表面上看我还是一个受害者的样子。夜深了,睡吧。。。


五月十三日 好 像要下雨,但是天气预报从来就不准。


这个是最最基本的,使用cstatic的显示这类简单得不能再简单的问题还要困扰我那真是一个人的耻辱了。首先,获得hwnd由getdlgitem获 得,当然前提是你要正确设定控件的id,这个在6.0里面使用宏定义messagemapping,然后调用setwindowtext,这个原本是给 caption设定的,如果有的话,但是你还是要记住必须调用updatewindow来及时刷新,这个我总是忘记。


五月十四日 好 像要下雨,但是天气预报从来就不准。


我很讨厌这种宏的定义,比如你的开关是定义var == somevalue,这个不如#ifdef来的好,因为当var没有定义的时候你#if(var==somevalue)有可能也是成立的如果 somevalue=0的话,因为没有定义的symbol可能是0。


五月十五日 天 起很闷热。


如果vc6提示你mfcu42.lib等等或者42换成70等等,那么这个是unicode的dll。如果你发现你得vc6反应时间很久,有一个原因是其 中的.ncb,.opt文件有大问题,如果你得vc6编译的时候总是死机,就是building...不停,那么再project-setting里面把 browser-info的编译去掉,meta的拷贝头文件的做法实在vc6的所谓custom编译放入一个批处理,这样子在编译的时候就不必加上很长的 /I 选项,也就是说头文件的搜索目录缩小了,这样自然编译就快乐,而且还减少的歧义的可能,(比如多个工程的多个同名的头文件)。

这两天实际上都是两个问题,首先,一个display的释放总是访问错误,我原来有一个错误地认识,以为brew的垃圾回收机制在模拟器上不起作用,其实 不然,也许内存的机制是最容易再pc上模拟的了。所以,最后我干脆每次都重新分配所有的显示数据,比如bitmap,container等等。第二个问题 是为什么特效不显现。这个问题初步的解释很简单,还是刷新的问题,就是你在什么时间点拷贝device-bitmap上的控件的影像的问题,这个也正是之 前amoi程序员之所以在步进动画timer之外又开了一个100ms的timer的原因,因为没有事件来通知绘画完毕,所以,只好用一个timer来通 知,只不过,再brew的机制里面timer是一个很危险的东西,没有很好的释放一定crash掉。

我还没有找到确切的答案,但是大体上mpeg1时需要一个头文件的,mpeg2大概是不需要头文件的,因为它是一个流媒体,我原来一直以为有所谓的字典, 现在看来没有,所以就不需要头文件了。但是dvd的制作还不知道。


五月十六日 天 气很闷热。


意兴阑珊,彷徨无奈在外图书城待到打烊,忽然想起来我差不多已经回国快半年了,在加拿大也差不多待了六个半年头了,或多或少生活里都是围城里方鸿渐的影 子,只不过方鸿渐还可以在未娶过门的媳妇家里打杂度日,偶尔的可以有哪家女儿有相亲的机会叫去搓麻将,赖好能挣一件皮衣以便应证妻子如衣服的古训。我也时 常想起zh几年前有时候念叨的样样都通样样都不精的自评,我那时候还是羡慕了好久,因为我也不觉得我有哪样能明白,人的想法就如同爬山,在山脚下看着山半 腰的人又是羡慕又是不服气,等到吃尽千辛万苦来到山半腰才发觉山顶是那么的遥不可及。

花了一两天在尝试ISprite借口原本想迅速作一个战棋类的小游戏,但是毕竟有些不现实,特效的任务总是压在心头很不是滋味,我想如果我当初就撇开原来 的代码可能早就可以作出一个出行了,但是为了保留amoi程序员的繁杂的代码实在是费心费力,总之这个wyl的函数命名我总觉得不对胃口,这当然是我的借 口了,其实是因为我对于arm上的图形系统还是没有底气,生怕自己写的代码在模拟器与手机上不兼容,其实,如果耐下心来读一下他的 oemdisplaydev就应该明白两者没有什么太大的区别,很多是他们人为的创造的区别。反正我心里很烦,具体是什么也说不清,大概太杂了吧。w当时 说我为了留下而留下,我没有反驳因为我也无法否认,这个人尖刻的紧,却也常常刺人的要害,常常想着在圣劳伦斯河畔骑自行车的日子,唉。。。


五月十八日 天 气很闷热。


实际上我是没有真正理解idisplay的机制,就是他的destination只有是devicebitmap的时候update方法才起作用,言下之 意就是说如果你设定了destination你就是在离线作业,这个在update的帮助上写得一清二楚,但是问题在于你读到的未必是你真正理解的因为你 压根没有在搜索你读的内容。这个是至关重要的,因为再idisplay的所有的接口画法和ibitmap的变幻,以及itransform的变换是在不同 层次上的,这个给了你很大的腾挪空间。


五月十九日 天 气很闷热。


刷新的问题出在我原来忽略的一个小细节里面,我当初观察到了我的每个form都调用了两遍的iformtrans的初始化接口,当初我懒得处理就照样释放 生成一遍,这个没想到成为后来图像不能够正常刷新的原因,正是想不到。这个调用两遍的缘由在于brew设定active和visible两个属性都回调用 form的updatePos这个方法,这个是有理由的,因为尺寸有可能改变,即便原来就是初始化了。ITransform的接口实现了一些基本的变换, 在试验一下吧。


五月二十日 天 气很闷热。


把所谓的水波纹加入仿真,但是效果不是非常的理想,因为模拟的东西不同吧,我把能量偏移加了一个系数来模拟水波的波峰高度,好像不明显。仿真的资源文件不 是编译进去的而是动态由高通的方针界面加载的,资源必须首先编译成所谓的bar文件。


五月二十一日 天 气很闷热,居然三十度。


在用纯c实现c++的某些特性给了你很多深入理解的机会,比如虚方法表的实现是c++多态的基础,而这里面类的继承是所有的核心,我现在深深地体会这在没 有c++的时代人们有多么的渴望新时代的到来,但是得来的容易就不太可能真正的理解,现在我总算有了感性的认识,也只有现在才有可能进一步思考从前很抽象 地aggregation等等。昨天看到高通的itransform接口,和gdi的transform惊人的相似,当然图形大概没有人不需要这些,其中 的matrix是一个2x2的int16的小矩阵,arm里面据说没有浮点处理器,于是需要转为fix-point数,于是都要乘以256,其实,我想这 就是把所谓浮点转为fix的正常做法吧?平移8位大概就是去掉了很大的精确度了吧?在arm得编译规则就是那个所谓的armtool以及 dmss_rule里面表明了根据文件后缀名字自动选择编译器,这一点全世界的编译器都是如此,于是我很高兴得想要用c++来实现,最多在.h文件里面定 义一些宏给他们的c代码调用就是了,但是。。。这两天祥学习一些windows的流媒体接口,现在这是叫做狗熊摘苞米,一路学一路丢,浅尝辄止。不过也没 有什么大的坏处吧?有吗?


五月二十三日 天 气很闷热,居然二十八度。


晚上再次看《music&lyric》,这个当然是在两盅清酒的作用之后,看着一个在岁月消磨的过气流行歌手。


五月二十五日 天 气很闷热,居然二十八度。


这个小小的代码管理工具现在大概又要被人遗弃了,每次都是这样子,虽然这 个东西很简单却也是花了不少的心血。

AEECLSID_DISPLAY1其实很多时候都是进入误区,你就算自己创建一个instance的primarydisplay会有什么问题吗?虽然 说app也许使用的是另外一个display,也许再display上作了很多的设置,改变了很多,但是我需要关心这个吗?我只需要他的结果呀!就是他们 都共同指向的devbitmap,所以,我的头脑里免疫只有一些错误,因此使用ishell_createinstance获得自己的display接口 吧。我原来对于刷新总有些不清楚,idisplay接口里面的clearscrean默认是全屏刷新,我就不再想说建立自己的bitmap来blt可是你 看看brew的实现的macro都是调用的drawrect,你可以深知自己设定cliprect然后再调用clearscrean,这个大概等价于在指 定的rect来drawrect的方法。


五月二十九日 天 气变冷了。


我现在认为经济危机并非如同马克思主义政治经济学认为的那样罪大恶极,应该这么想一下,这就如同生物界的自然淘汰手段一样用以调节生产力要素不合理分配的 现象。gpedit.msc是可执行的,大概是调用了gpedit.dll里面的资源吧?在编译的 时候使用extern "C" 或者"C++"可以指定编译器。这个armtcpp,即arm德c++编译器也是支持的,所以,最好的选择时使用c++编译器来编译因为本来c的语法就是 支持的,不过就是外部调用的时候函数的所谓的装饰明(decoration)有问题,总而言之,工程里面的.c文件依靠make里面的一个 inference-rule可以推定使用c编译器,.cpp推定使用c++编译器,再cpp文件强制使用extern "C"来指定c 编译器,这样子混编是可行的,这些听上去仿佛是说给初学者的废话,可是我觉得这中间的问题曾经困扰过我很久。这是因为vc6的工程向导已经只允许你建立. cpp文件,除非是你自己引入的文件或者修改后缀名再ide环境下的人都不会操心这些问题了,可是在一个庞大的非windows工程比如arm的工程拟就 需要考虑混合编译的问题,而那些嵌入式程序员大多没有c++的经验或者因为早期效率的关系基本不用于是几乎毫无例外的只是用纯c编译器这样可以方便链接, 但是widget里面的对象接口继承用纯c是有很大的问题的,比如B从A继承,那么B这么声明:struct A{int nRefs; ...};  struct B{A base; ...};  然后C在继承B,那么struct C{B base; ...}照理说C也继承了A,那么C怎么访问A的数据和方法呢?c.base.base,定义适当的宏这也还可以,而写惯了c++程序的我总是习惯的直接 把nRefs当作C里面的一个成员而不需要C c.base.base.nRefs=0;这样子访问,那么A实现的方法让B继承必须自己手动给B的虚方法表(vtable)里面复制A的函数指针,所以 我的定义实际上没有体现函数表,因为函数表是不能共享的,于是访问A的method1方法变成了C c; c.base.base.pvt->method1(); 当然如果你在每一次继承的时候都把vtable赋以祖先的函数指针,你就可以使用c.pvt->method1()了,不过这样子要写很多德罗索的 代码非常得无聊的。当然c++内部很可能也是如同纯c一样的实现的,不过和自定义的宏比起来编译器从语法就支持是一个大的进步,我不知道从一上手就使用c ++的人有多少是真正了解c++的实现与原因及其目的,至少我觉得我是回到了纯c的时代才回过头来真正理解的。不了解过去是无法体会现在,不了解现在也不 可能预见未来,我还是需要踏踏实实的多历练历练。

authorize相当于军营门口的岗哨察看你的介绍信,进程的token仿佛是你的军官证,与之相对的是大多数静态数据或对象拥有所谓的sid,这个好 像是军营里面各种设备的安全标示牌标明什么样的保密级别。authenticate是你在军营门口签署的可以访问那些营房的许可书,privilege仿 佛是你的军衔与身份是与生俱来的在你强行闯入某个营房的时候哨兵查问的时候的挡箭牌,你可以大大咧咧的丢给他一本特别通行证然后就可以任意访问安全标示牌 上没有注明的级别。winlogon应该就是你在军营门口的检查过程和那个警卫执勤的小岗楼,logon session就是说你在军营门口近来知道你离开军营的整个过程,network logon session表明了你进入军营的时候没有随身带证件你让门口的警卫直接打电话给你的上司就是军情局五处的处长来证明你的身份,警卫虽然放你进入军营但是 却不肯给你颁发通常的通行证因为他怕你拿着这个通行证又跑到别的军营她就不好交代了,acl就是每个营房门口贴的告示牌标明什么样的身份才可以进入。


五月三十日 天 气又变得很热了。


vc6编译死机的原因多半是因为你要求编译browser information的缘故。阅读《programming windows security》可以说解答了我很多的疑问,这本书当之无愧的应该成为所有windows系统编程的程序员在掌握《windows核心编程》之后的必修 教材,可是令人惊讶的事,这本武林秘籍在国内却无法买到,而核心编程居然已经出到了第五版,也许是因为这本书的后半部分都是谈论dcom的缘故,难道说这 些东西已经不用了吗?也许。。。等我读完了再说吧?此外,因为中国邮政的超低效率我多买了一本,(因为它寄了两个月也没有到,我以为丢了只好再 amazon再买了,现在要退掉,如果国内有人想要的话倒是可以转让,毕竟这种秘籍在国内不好找到。)

我参照例子原本以为升级了SeBackupPrivilege的特权就可以打破dacl的限制,结果发现我做实验设定的文件还是不能访问。调用 adjustTokenPrivileges的时候,一定要检查getlasterror是否都成功了,调用api成功和设定特权成功是两个不同的范畴。


六月三日 天 气又变得很热了,可是下了一场快雨。


二十年前的一个早晨我步行十多公里去公平路码头坐船回到厦门。windows的安全的核心在两个地方,一个是logon session因为这是第一道门,权限的设定在这个时刻至关重要,另一个就是所谓的impersonation,这个仿佛是伪装成别的进程的渠道。移植所 谓的jvm现在变成了一个纯粹的体力活,这么庞大的工程根本无法做细致的研读,能够编译通过就算是成功,这实在是一个可悲的结果,可是这样一个中等的工程 就有五千多个头文件和源文件实在是太过于庞大了,我很怀疑在circular-dependence的情况下的编译错误,因为有很多很莫名其妙的变异错 误。

我觉得现在gcd才开始真正意识到问题的严重性,实际上我是认为温家宝的所谓的四万亿投资计划是和经济规律背道而驰,经济危机的到来说明生产力要素的分配 出现了不合理的现象并且纠正这个错误需要市场这个看不见的手直接干预,而gcd的施政的方方面面都说明了他的这个所谓的上层社会建筑和当前的经济基础已经 严重的不适应,那么按照马克思主义这个政府的存在性就成了问题,这也就是当前gcd推出的所谓“六个为什么”的出台的原因,因为 当初之所以马克思提出社会主义的原因在于资本主义无法解决经济危机对于社会生产力的巨大破坏,而依靠所谓的社会主义的计划经济可以消除这个经济危机,那么 当前这个号称社会主义的制度采用了资本主义制度并同样产生了经济危机,那么这个正当的生存基础就不存在了,一个所谓的计划经济变成了“超级国 家垄断封建帝国主义”,众多的所谓的国有企业实际上掌握在占社会极少人口的权力集团而攫取超额垄断利润,并且这个政府采用行政手段和国家机器 为这些超级垄断企业保驾护航成为了彻头彻尾的垄断资本家的贴身保镖。

从我在中国所待的半年所见所闻我认为中国在未来的五到十年里面会发生革命性的变化,首先,新一代就是所谓的90后完全接受的不是我们这一代人的谎言欺骗教 育,他们有着众多的渠道获得一定的真实信息,gcd无法完全对之洗脑,他们是未来的民意主流。其次,民族资产阶级空前壮大,从我周围如雨后春笋般涌出的百 万千万富翁就知道这些人将来是社会的领导阶层。再次,社会利益分配的不合理在经济困难时期会成为社会主流的焦点,也就是说要求社会利益再次分配的要求空前 强烈。gcd垄断土地,金融,媒体,交通,电信,能源等等高额垄断行业成为众矢之的,这个政府效率空前的低下,作威作福,千千万万的社会精英义无反顾的投 考公务员反映了为封建帝王服务的高额回报率,这些矛盾一定会在五年内达到不可调和的尖锐程度,在五年后十年内一定会有实质性的摊牌决战,因此,在这场风暴 来临之前一定不能置身事外,至少应该在理论上做出准备。


六月四日 天 气又变得很热了,可是下了一场快雨。


纯c编译有很多问题,比如circular-dependence爆出的错误经常让人摸不着头脑。a==>include b;  b===>include a;这样子实际上a或b里面的有些定义与引用会出错,但是常常你会摸不着方向,此外,有的时候.h文件拷贝过来的时候由于时间太早,很可能不会再才重编 (??这个是真正的原因吗?)因此要防止这个问题就不能够偷懒,比如a.h与b.h都重复定义了一些东西(比如a和b是从两个并行的工程合并而来的),这 样子a和b只能保留一个,否则一部分文件既需要include a.h,又需要include b.h这样子就有可能产生那种互相依赖。(当然这是事情的前因后果并不时不能解决,可是相对来说一个模块的定义最好放在一起,)


六月六日 天 气又变得很热了。


下午在家看karen Carpenter的经典的古老的mtv,仿佛又回到了good old 60s/70s,那个时代的人们生活的多么的幸福,哪怕是在中国人民生活在实实在在的水深火热中,可是就如同温水中的青蛙并不来了解水有多深,火有多热, 早上无意中搜索又看到了古老的一段往事,当年的那个流氓演员迟志强被唡铛入狱原因在今天看起来是那么的不可思议,可是实际上一个人的一生的命运就这样的彻 底的改变了,生活在这个宗教国家里的人民是多么的不幸,因为他们的不幸就在于当时他们并不知道自己有多么的不幸,就如同今天的塔利班在原教旨主义的伊斯兰 教一下统治那个贫穷得不能再贫穷落后的阿富汗一样,又好像那个疯狂地拿原子弹要挟全人类的红太阳的儿子金正日统治下的被朝鲜人民一样,子非鱼,焉知鱼之 痛。


六月八日 天 气又变得很热了。


大体上在custdmss.h里面定义所谓的feature,而在每个工程的所谓cust$proj.h里面再作个性化编译选项。在 template.dsp里面坐一些高通相关的路径src,lib等等的设置,因为相对固定?高通有一些库,brew也有一些库。

我想我昨天的设想连自己都很难说服,他的benefit究竟在哪里呢?1。代表了软件工程的演化进程,2。和svn/cvs等等的强化,3。更好地强调模 块化,4。更明确的兼容性,比如继承的接口名商就可以使版本号,5。更容易的模块化迁移。6。实施资源很少?于现有机制兼容。7。强调程序员编程实现上的 “契约关系”。8。接口的长期稳定与逐步演进相结合。9。更方便的模块化编译调试测试。


六月十日 好 像是阴天,但是还是很闷热。


在使用msconfig工具的时候你可以看到所有的启动的服务,其中如果removeable-storage被关闭自然usb就不能使用了,我的无线网 卡不能使用是因为一个所谓的zero-config-wireless的服务被意外的关闭了。我一直想关闭nvcpl.dll,发现不幸,后来 google才知道是显卡的utility不能关闭。所谓的jad应该是jar的一个运行环境的说明吧,不是必需的。amoi程序员在所谓的 filemanager里面实现了大量的类似于windows-explorer的功能,就是把文件后缀名和应用关联起来。这样子就可以使用资源浏览器来 打开各种各样的文件了。

我觉得我的设想一定会被反对的,所以,索性不要提了,先做试验再说。但是我坚信越是简单的模式越是有生命力,越长久。

之前的小工具原本向前几天就完成,结果已错过那个晚上就再也没办法提起兴趣了。周么吗?gmail和hotmail邮件原文的确是utf8的编码格式,至 于domain又没有加密验证我就不知道了。等有空了在研究吧。


六月十一日 好 像是阴天,但是还是很闷热。


当管理者和执行者处在同一个层面的时候,所谓的管理者失去了全局的眼光,所谓的执行者的没有了控管的约束。这就是我之前设计的dependStruct的 问题,因为说到底它仅仅是dependency关系的描述符,无法承担管理者的角色,只不过因为演化过程的关系碰巧成为一些管理函数的承载者,这就是人类 社会政治制度的问题,只不过我现在很难在把这个小软件工具的演化都保存下来了。同时另一个问题就是我的根深蒂固的观念以为编译器需要两次parse我的这 个超级naive的东西也需要两次,实际上一次就够了。敬请期待吧。

电子书!!!我的梦想怎样实现呢?加利福尼亚已经开始使用了!!!

我对于amoi当初的代码编译一直比较怀疑,因为我总发现一些让我不可理解的事情,比如在高通的一个所谓的supplementaryservice的模 块中定义了一个接口,当初估计没有打算开放吧,或者后来做了补充但是开发报没有更新,总之有一个接口实际上没有定义, (registercallback,unregistercallback)这个市可以理解的,也许当初就不应该暴露,后来发现用户有需求,在开放的代 码里面有这个却在对外的sdk的头文件没有,于是有些程序员就只好自欺欺人一下定义了一个所谓的dummy来fake实现一下,我也常常会这样做,没办 法,对付这么庞大的工程唯一我想做的就是编译通过,管他有多少的warning,实际上这个dummy应该是如liuzhifeng的做法(这个是我看他 的代码注释的名字,)就是高通一贯的接口宏#define ISUPPSVC_UnregisterCallback(p,pCallbackFun,pUserData) AEEGETPVTBL(p,ISUPPSVC)->UnregisterCallback(p,pCallbackFun, pUserData),因为我想除非搞通的错误没有把这个实现包含在lib里面发布那个fake的方法是下下策。

我反复的唠叨宏是程序员的噩梦,但是没有人理睬,因为年轻的程序员并不以为意,因为年轻因为对自己的记忆力自己的注意力集中力有自信?为什么不可以使用更 好的办法?c++早就在十几年前由那些用了半辈子的使用c的大师们发明了,为什么不愿意使用呢?后来我想这是一个巨大的飞跃并非人人都准备好了,因为大概 三年时间可以培养一个出色的c程序员,但是出色的c++程序员也许再需要三年,至少我是这样子认为的。

在aee里面添加模块是很麻烦的,我期待着一个给定路径自动生成make文件的机制,但是没有amoi做的那个cfg的自动添加方法,这个在 linux/unix早已是非常流行的做法了,很可能是因为高通认为你基本上不会频繁的改变模块的设置。那个incpath.min仅仅是添加 include-path的,就是编译时候的-I或者windows的/I命令而已,高通是使用一个个的单个min文件来描述工程文件的配置的,再由一个 总的min配置文件说明各个min的名称路径,


六月十二日 好 像是阴天,但是还是很闷热。


这个东西我就算想破头也不大可能想出来的,就是在高通平台上的所谓bb(boot block)的ram地址分配,这个绝对是嵌入式程序员才需要操心的话题,因为所有操作系统平台不论win/linux都不需要考虑代码load到那个地 址,(不过bootloader-strap还是要考虑吧,)问了半天才明白,你要给arm编译器一个提示你打算把你的代码放在什么位置,就是在那个模块 的后面,这个市一个.scl的脚本一样的配置文件里面的,在arm的link产生的所谓symbol都是$符号分割的而不是_分割的,比如MY$ SYMBOL这个在c里面用不成, 高通就只好给你从一个从什么什么bootsys.s的汇编文件里面输出成为c代码可用的symbol,就是改变成“_”的,可是 我就使卡在这里,因为jvm需要制定这个内存地址,我在ram.scl和rom.scl里面都加上了这个一个 JBLEND_RAM +0x0
{
jblend_*.o (+RW)
}

上面这个在BB_RAM就是dload_arm,dload_usb之后,下面这个在ZI_REGION之后,
 ZI_JBLEND +0x0
{
jblend_*.o (+ZI)
}
还有一些小的问题,总之,这个是最大的surprise,早上我还百思不得其解药怎样加入一个第三方的库,后来C提醒说是在cfg里面,的确这个机制很方 便,所有的库都要加入。

始终在链接的时候找不到这些定义的symbol的原因难道是因为.s文件没有同步?原来这个文件里面的定义的那些所谓的$的符号被import然后再 export成那些"_"的符号,我读了高通的代码说明却不得要领,也就是说明白一个原理却不知道怎样操作,实际上看来这些所谓的.s文件是那些.o文件 或者.c文件链接所必需的(如果有的话),我的猜想就是高通在链接的时候做了一些特别的处理的时候就在这里。哎,要明白一点点道理真不容易,一个简单的编 译链接又折腾了一天。终于搞定了。

在中国有很多离奇的观点,比如我听说在厦门手机行业不算高科技企业,这实在是让我哭笑不得,如果这么复杂的一个嵌入式系统的软硬件,电子机械一体化,电信 互联网紧密结合,移动式计算载体,个人多媒体中心等等的结合体不算是高科技行业,我真的想不出还有几个行业比他更加的复杂,牵涉的方方面面更多?软件的复 杂接近早期的个人电脑,硬件的复杂远超过大多数简单的嵌入式系统,对程序员要求即要有宏观的视点能够驾驭大规模的工程代码,复杂的编译环境,又要求有微观 的功力深入到硬件的最底层在苛刻的软硬件环境下实现复杂的功能,这对于任何程序员都不是一件简单的工作,仿佛武林高手需要内外兼修,熟悉正邪两派的武功。

看《terminator4》只能说并不我期待的更糟,因为我已经在3的时候更加失望所以不会再有什么失望,首先,这个已经几乎没有和原来的系列有多少联 系了,因为3至少还有施瓦辛格出演,现在完全像是电视剧版的《sara conor's chronicle》。当然在丑化电脑系统的时候不忘记再次把人类的无理性当作战胜人工智能系统的法宝作第n+1次的演绎,说什么人和机器的区别就在于没 有机器的calculated decision。这就是人类?totally hopeless.


六月十三日 好 像是阴天,但是还是很闷热。


在实际测试battle for wesnoth的间隔听到那个“人民喉舌”的“中央电视台”评论什么“小产权房转正 ”的话题,简直有一种难以名状的悲愤,这个全世界独一无二的怪胎只存在中国是什么原因?所谓的小产权房就是因为所谓的“国家 ”,“集体”,“个人”的所谓所有制的历史遗留问题,所谓“国家 ”的官方定义就是全体人民,而全体人民祝房子需要买自己所有的土地上盖的房子的权力之余还要交70年的租金,但是租金却不失交给自己,这不是 笑话吗? 编译资源文件的时候一定要记得把svn文件删除,因为收集图片文件会把这个svn加入。


六月十四日 好 像是阴天,但是还是很闷热。


经过了这么多天我终于有一次不错的睡眠,精神好了很多,于是终于把拖了无数天的小工具完成了2.0版,所谓的1.0版已经烟消云散了。我今天有点小得意, 总在设想究竟有多少人能够非常自如的理解这个小工具,我自己觉得c++程序员没有几年功底很难熟练使用STL,那么你就不要费心了

之前的这个小小的工具也存一下吧,替换目录下所有文件的字 串,包括文件名,字串查找使用简单查找算法。

我猜想所谓的.s文件应该就是传说中的symbol-table文件,因为目标代码的symbol被汇编器改头换面需要这个symbol的输出表,以便配 合另外的.map文件来映射到source文件的位置。怎么验证这一点呢?

Gandalf: As ring-bearer, you have to be alone.


六月十五日 好 像是雨天,不过我没有带雨伞的习惯。


偶然看到了一些关于“绿坝”评论,感觉这个gcd政府已经越来越像1984里面的老大哥政府了,错,修正,本来就是又何谈得上 像?此句大有语病,抱歉。不过在技术层面上来看在五六十年代鉴于技术与资金的缺口还不能实现小说里面的“双向电视”,今天这个预 装在所有新电脑里面的监控软件和gwf一道成为在国家安全外衣下的思想控制工具,难道gcd不明白防民之口甚于防洪?应该是知道,不过鸵鸟总是存在的,而 且另外一个事实就是谎言重复一千遍就是真理,这个也是成立的,因此在思想监控工具下的人大多数也一定会如同生活在"matrix“里面的一个 个五号电池一样为少数核心统治集团的骄奢淫逸发电发光,当然作为补偿这些顺民的辛勤劳动也会得到一些使用劣质原料在cctv调味下的生活资料,活着,活 着,活着。

你是否在cgywin里面运行perl遇到as.exe执行的错误?我google了一下大概是由于as.exe的属性没有设置成system的关系,所 以,attrib +s as.exe就可以了。今天在灌程序的时候,ZH说没有正常运行时因为资源文件.bar没有编译的关系,于是他要X把一系列原本放在文件系统下的.bar 文件链接到mbn文件里面,我对此深表怀疑,因为灌程序之前其实是需要先创建文件系统的,因此才把这些.bar文件放在文件系统里动态加载,我说服X,我 们看了一下代码,的确是ishellloadres之类的函数,是从资源文件读取的,并不是直接从编译好的可执行文件.mbn里面获取资源id调用的,所 以,那应该是不对的。但是.bar没有实现拷贝到文件系统的确是运行白屏的原因。


六月十八日 又 是一个骄阳似火的日子。


java在安装的时候总是报错,在LB的帮助下仅仅发现了一个问题,就是在apps/java/database下面存放着一个所谓的注册的java程序 库,大概就是类似于cache的机制吧,但实际上仅仅是把验证了.jad与.jar的.jar拷贝过去,并且在index文件里面存放一个索引,在之前我 安装的时候如果失败有可能存放了一个x.jar,x是一个数字,这样就不能再重新写文件到这里了,但这仅仅是一个失败的原因。我一直碰到的莫名其妙的原因 就是“蓝牙”的失败,还有一个巨大的问题就是第一次安装有一些.jar都可以成功,随后就不能再安装了。LB提示说这些代码是非 常非常古老的,有很多老问题,他给我指出了一个读文件的可能的栈溢出的地方,大概是原来的第三方式显得所谓reader在reader的回调函数里面有可 能buffer不足,需要改用主动分配内存读文件作参数,然后再安装结束在释放。这个函数大概名字叫做Ams_ui_installsuite吧。

这个应该是最后的陈述了。fareware mycodesafegroup。


六月十九日 又 是一个骄阳似火的日子。


java总算跑起来了,我写了一个总结。 其实,我究竟改了什么使得java正常运行呢?我也不是很清楚,但是比较可能的有两方面,一就是编译环境还是有问题,因为之前有些可能没有重编译。二就是 手机的文件系统在仿真上有很多的svn文件,被我删除以后就安装ok了。当然LB提示修改很有可能是直接的原因,不过今天昨天早上修改完了并没有效果?


六月二十日 又 是一个骄阳似火的日子。


早晨醒来回想着晚上的一个个梦境有些担心,所谓失眠多梦健忘心悸疲劳不堪似乎都是早衰的症状,而所谓日有所思夜有所梦并不适用于我,那都是一帮天天无所思 偶尔思一思的悠闲男女的无病呻吟,我的这些可怕的梦也许都身体疾痛的自然反应。而这也和我在那个小小的mailgroup上发出的感叹是一致的,现在才真 正体会为什么“人到中年”会“来不及叹息”,看到“一地鸡毛”也只能悄悄地给 出“一声叹息”,因为为赋新诗强说愁是年轻人的专利。在BRT上看到所谓快乐女生的一个片断,实在是无语,讲究才艺也不能这么就 变成了丑女选拔赛呀,就算要给天下众多的平庸女孩子一些自信心也不用采取这种污染视听的极端手段!总之,我感觉gcd政府始终不肯面对一个基本的事实,那 就是人作为社会劳动力的组成部分,劳动者的身体就是生产力的代表,因此男男女女的身体就是劳动力水平的体现,也就是说美女就是生产力,并且女人的相貌就代 表了社会生产力发展水平!不是吗?为什么只有男人的体力与智力与生产力挂钩,女人的相貌不能与GDP挂钩?想想看香港选美皇后一朝嫁入豪门立刻获得身家几 亿,世界上有什么比这样的投资有更大的回报率?欧洲小国拉脱维亚据说有欧洲妓院制成GDP有近半来自于漂流国外的美女的辛勤劳动,中国的色情产业有多大, 中国的娱乐行业有多少从业人员?一个政党如果对于板上钉钉的事是讳莫如深却寻求所谓社会道德的遮羞布来避开话题只能形容为鸵鸟与赤裸的皇帝,否则就是别有 用心或者有难言苦衷。同样的事情每天都在发生,只不过普通人司空见惯,比如面对普通小民百姓叫苦连天的高房价一个政府却装聋作哑的派出调查组四处奔波寻访 房价太高的原因,难道他们不知道吗?难道房价太高不是因为土地国有导致土地所谓出让的高价带来的吗?难道不是一党垄断滋生的官员揽权在开发商的账单上留下 了大笔的不可公开的成本吗?难道不是地方政府疯狂敛财为提升所谓GDP刻意炒作房地产拉高房价一边加官进爵谋取更大的权钱交换吗?为什么会有土地国有?那 个国?谁拥有?占总人口百分之零点几的人群掌握百分之七八十的国民财富的支配权就是国有?这样的“公有制”和封建帝王的统治在那 个层面有区别?朝代的名号不同?国家机器镇压的手段惨烈不同?防民之口的效率不同?

偶然在不经意之间看到了一个转贴《一万零一年》,纪念那场规模空前的“群体事件”,那种心境与体验犹如当年读鲁迅的小说与杂文, 的确《为了忘却的纪念》就是人生的主题,正因为如此,quote, The saddest part is not that they don't care, because I can understand  the indifference, short-sightedness, and complete devotion to private life. It is that they simply hate people who care. end quote.

人的信仰与信念正如同女人身上的内衣,穿与不穿,爆露在外招摇过市还是藏在内里讳莫如深都会成为时尚,然则无可否认的事实却使它们更像是蛋白质与维生素对 于食草动物与食肉动物的关系,或者直接或者间接你需要获取,或者从你的同类通过肉体的消化与咀嚼,或者从比你等级更低的阶层的掠夺与蚕食获取而转为占有。

在遥远的古罗马帝国征服了的国家成为一个个的行政省之后被征服者的信仰与宗教反而成为征服者的所有,gcd推翻了曾经推翻满清的gmd又重新建起了类似的 信条。

能不能把歌词改一下:I am looking for somebody to shed some light, not just to share the night.

以一敌二能获得胜利是因为爆兵的结果,同时也是初期占据更多村庄的结果,当然这是我修改地图的结果,并不是battle for wesnoth不平衡的原因,他的平衡性已经常常令我怀疑我的IQ了。


六月二十一日 台 风来了。


昨天似乎要画一个句号,可是发现我的pch的设置还是不太正确,如果不安装platformSDK2003要怎么编译正确,当然仅仅把sdk的 include拷贝过来可以,但这个市我要的答案吗?


六月二十二日 台 风来了。


断断续续读了快一个月那个至尊宝典也才读到两百多页,windows的安全机制也许是最复杂的一个软件系统之一吧,因为首先windows应当是世界上最 复杂的一个软件系统,那么这个最复杂的软件系统的安全机制自然也是最复杂的安全机制了。不过目前大众流行的所谓安全还大都是一些所谓的网络安全,无非是那 些由于老程序员使用不安全字串处理函数导致的堆栈溢出问题引发的,和这本<programming windows security>还是有很大区别。


六月二十三日 台 风去了。


该怎样看待越南战争呢?胡志明首先是一个民族主义者在二战期间他领导的反抗日本侵略军的抵抗力量曾得到过美国的大力支持,就是所谓的战略情报部OSS,在 这种情况下他对于美国是十分崇拜,因为他在二战结束后宣布国家独立的演讲稿的写作中曾向他的美国朋友索要美国独立宣言的文本,后来在他的宣布独立的讲稿中 采用了美国独立宣言的句子,比如人人生而平等,人之自由权乃天赐给每个人与生俱来的权力等等。在1945年后胡志明极度渴望自己领导的独立运动能够得到美 国的支持与承认,在那一年这位越南人民心目中的共产主义领袖给当时的美国总统杜鲁门写了八封信,然而美国却没有给他任何的回音,在这种极度的失望中胡志明 只好认为这种沉默就是反对因为当时美国开始支持法国殖民者重返越南,而在49年取得胜利的中国共产党和前苏联非常迅速地向这位留着山羊胡子的所谓越南共产 党领导人伸出了援手。美国人丧失了建立一个民主自由的越南的机会。

我一直对于温家宝的能力表示怀疑,因为我的理论是古代大臣里面没什么能力的人才去治水,因为这是一个苦差使有没有什么油水捞,干好了是应该的,干不好死了 人就要被抓差垫背。在不足一个星期内匆匆忙忙地宣布多达四万亿的投资额是一个什么概念呢?以美国的富裕也才拿出来折合人民币五万多亿的投资计划,如果靠这 种财政投资能够消除经济危机资本主义早就可以消灭经济危机了,他始终不理解经济危机是要用来调整不合理的生产力要素的分配的,而中国的问题不是投资不足而 是投资过剩,真好比一个人虚火上升身体虚热,你却给他吃大补的猛药,也许第一个晚上可以让他出一身汗感觉精神亢奋,时间一长身体更加的燥热不可收拾。中国 的中央地方政府是否是钱太多了可以大规模投资?我一直表示怀疑,欧洲日本都有着多年和危机作斗争的经验明白这个危机不是一年两年就能过去的,很谨慎的为今 后几年积攒一些资源,而共产党政府很轻率的把自己的王牌打出去了,不知道明后年还有什么招式,这不财政部连续三个月负增长,于是开征香烟税对于普通民众的 反弹较小,给地方的封疆大吏下通知要求上缴小金库的钱而既往不咎都说明了财政上的捉襟见肘,等着瞧吧。

最后一次说再见


六月二十四日 台 风去了。


当我使用cpp文件来写代码的时候编译总是抱出一个链接的错误就是unresolvedexternalsymbol 都是关于virtual ....getmessagemap ...之类的,这个原本是一个mfc的message_map的宏,我毫无头绪怎样解决,bing了一下,又google了一下,大概明白了这个错误的原 因是因为这个是定义在afxwin.h的宏,于是必须包含它。 打开这个头文件搜索getmessagemap就一目了然了,正如很多人所描述的是一个微软定义的补丁长的表,这个宏描述了时间和处理函数的对应关系,对 吧?

Vanity, thy name is not only women! 我以为一个人能够真正的放弃所谓的名利的向往是几乎不可能的,相对于女人的虚荣心来说,我对于名的追求也从未停止过,只不过前者是动物求生存以便吸引足够 多的交配对象来完成生存价值的手段,后者更接近于古代帝王将相征杀伐戮的野心,当然这么说是好听的,难听的就是有贼心却无贼胆,不过对于所有的人在一片 bravo的呐喊下都回热血沸腾的,如果能听见的话。

联想的园地里无处不有一些口号,经常忍不住地引发联想,比如联想手机被自己的子公司收购该了个名字叫做毅想,让人对于这个脱离上市的举动有些遐想,这个毅 想究竟是异想天开的异想还是什么百日做梦的臆想不得而知,总之我觉得起这个名字的人实在是有些不为人知的想法。电梯里面贴着招贴画号召程序员要不折不扣地 执行上级的任务,要有所为的三心,就是什么事业心(是野心吗?),上进心(对工资奖金当然要用心了),责任心(有什么任务自然有什么责备等着,不干活的人 永远都没有人挑毛病),想法是挺好的,与其让人有些难以接受,不过我认为也许口号的制定者也早知道提出所谓的三心,不过是给众人散散心,因为三心二意的人 也有三心,更糟糕的是那些勤于思考的人往往很多心,远远超过了三心了。

美国人在越南之所以失败就在于美国人太希望组织共产主义的渗透,美国人太在意自己对于整个自由世界的承诺了,因为一旦美国从越南撤出整个自由世界就会对美 国失去信心,就会出现麦克阿瑟所预言的多米诺骨牌效应。

关于hintbox,我一开始享用特校的方式自己画,后来发现这个东西是在widget一级的于是想改变IWidget的接口。

美国的最大错误就在于相信越南人民会自主地投入共产主义的怀抱,这种认识完全来自于对于宗教狂热洗礼下的人民的无知愚昧的错误估计,在八十年代后美国人终 于发现对付共产主义的最佳武器就是不战而屈人之兵的和平竞争下的民主制度,人民在初期的蒙蔽之后会在对比中发现所谓的共产主义不过是封建集权统治的代名 词,而真正符合人性也就是符合生产力发展需要的西方民主制度会不战而胜。


六月二十六日 还 是燥热。


可能是中暑了,热感冒了,头疼得厉害。关于widget的错误认识在于我的粗心大意,实际上所有的方法表里的成员都有初始化。正确的做法是你要使用一个 widgetbase的成员变量,然后再ctor里面调用这个WidgetBase_Ctor,在这个里面对于所有的方法进行了初始化,因此,你只需要重 载你需要的iwidget接口方法。

在那个所谓的cobra的客户端有一个estsysset.sys的文件记录了坚实的进程名字列表,以及文件扩展名。在摆渡上看到一些病毒报告里面列明了 在explorer.exe里面注射进去的线程。使用msconfig可以阻止cdgedit的启动运行。


六月二十七日 台 风又要来了。


去了一趟金门,比我想象的还要落后一些,大概相当于泉州的样子,不过街道非常的干净,后来才听酒店老板解释是因为金门的地方政府的社会福利政策雇佣大量的 无业市民扫地,这里的福利据说是台湾最好的,也难怪。

感冒加上晕船,我在心里不停地对自己说我实在是有些难以撑下去了,这个职业对我的健康损害太大了。不过正如A说的,这个对于我不仅仅是一个职业,应该是我 生命的意义,也只有坚持下去了。

在迷迷糊糊中听到了广东卫视的特邀佳兵郎咸平教授的评论节目,我非常地为之信服,他以针见血的指出了令人恐怖的经济回光返照的背后的惊人内幕,就是房地产 商现在狂赚钱以至于赚到手软赚到恐惧,一个别墅项目开盘 卖了85套回笼资金12亿,算一算单价,上海的新楼盘预计要开盘周围的酒店住满了等待开盘的买家,完全和售楼小姐同时上下班。抬高房价3000元依然被抢 购一空可能在所有中国地方政府眼里是乐开了花的事情,因为地 王又频频被刷新纪录,gcd政府最喜欢推高房价,所谓财政税收与GDP都指望这个房地产了,甚至于房地产汽车高档奢侈品销售的逆势狂涨被当作了中国经济回 暖的佐证,这个在教授的解读下就更加得让人感到可笑了,这个不过十制造业的资金被抽出来投入了房地产奢侈品汽车的,就是说企业家们正在日益恶化的投资环境 下急流勇退,另一个就是温家宝幼稚地推行所谓的积极的财政政策猛力砸下去了5.84万亿的银行信贷造成的通货膨胀的恐惧预期。大量的资金开始躲避通胀的预 期流入了房地产,那么这一切的一切都是中国经济更加深远的衰退的体现,而如今的当权者却为了所谓的空泛的新新的要求死命通过行政财政手段来力保所谓的 GDP增长7%,这正是当初教授分析的中国经济热得太热冷得太冷的内伤在雪上加霜。更大的衰退仅仅还在酝酿中,这才是令人恐惧的,我的身体健康不佳,如果 生了这些小小的感冒我会很放心的,我担心的是如果始终没有感冒来临是不是有更加可怕的疾病在潜伏这才可怕。经济危机来临使全世界的衰退者根本不值得回避, 令人担心的是当局者愿意营造一种中国经济有免疫力的假象,这才恐怖,所谓蔡桓公的讳疾避医才可怕也可笑。

早上无聊之极从微软的网站疯狂下载无数的小工具,真是令人发现宝库的感觉。


六月二十九日 台 风又要来了吗?已经去了吧。


身体极度虚弱在家养病,所谓病卧孤村不自卑,下午认真学习NTLM大有长进,复述如下。NTLM就是NT的lan manager的一个据说是最简单的protocol,要解决的就是远程登录的验证问题,这分为三个步骤地握手协议,首先,negotiate就是发起登 陆验证请求,应该不需要什么具体内容吧,然后就是远程的一方发出challenge的一个所谓的nonce(读音是为了强调它就是指使用一次,防止供给者 截获重用。)据说是一个64位的随机数吧。然后请求方让本地的lsa使用自己在本地的password的hash码作为encryption的key,把 这个nonce加密回传来球的验证。远程方收到后让自己的lsa使用登录请求方的帐号密码在独立地把nonce加密来比对,如果一致再把登录方的 token返回给server。这里面登录方不妨叫做alice,验证方不妨叫做bob,alice在一个所谓的interactive logon session,bob很可能在一个所谓的server logon session或者batch logon session,alice一定要在bob的域有帐号才行,否则这个密码无从验证。大师特别强调了alice的密码并没有被传递过network,同样 alice的network credential也没有,因为这个没有用指在本地有用,而且不安全。alice的password只是在经过了one-way-hash之后的值来作 为加密的key,这里的hash,nt据说早先是md4,后来应该是md5吧?encryption应该是aes吧?在这里有一个基本概念就是怎样确保网 络传输的packet的真实性,这就是所谓的sealed或者是signed,前者是加密,后者是数字签名,那么以上的三不握手协议的结果就是双方建立了 一个传递加密解密以及数字签名的key的过程,发起者alice用自己的password的hash加上收到的bob的challenge的nonce可 以计算一个session key,同样,bob的lsa依靠bob告知的nonce和自己在security database里面保存的alice的登录password的hash也可以独立计算session key,从此后双方的tcp包的报头以及payload部分都回有一个mac即message authentication code,这里大师还特别指出不应该依靠tcp的所谓的顺序因为这些也是可以被hacker们作弊的,所以packet的头也要有mac.

这个是在没有域服务器的情况下的登录,而这个域服务器实际上增加的复杂部分就是和bob的lsa的通讯部分,这里他们因为之前的登录早就分配了 session key,所以自然没有问题。更复杂的情况是alice在一个域服务器内,bob也在一个不同的域服务器内,这就需要两家的域服务器彼此之间要有一种信任关 系。好累啊。我现在是在世头疼的厉害了。这半年来的感冒比在加拿大好几年都多,我真的已经。。。


七月六日 活 着。


我都已经彻底忘了我要干什么,我正在干什么,我已经干了什么。我发现我的记忆力已经衰退到了极点,我又把我的版本搞错了,已经不想再做那种地基工作了,居 然没有发现我之前的事没有编译成service的选项,居然还大言不惭说是最后的最后。我无语也就不想再改正我的错误了。生活已经成为空白,头脑已经空 空,活着,活着,活着。

kerberos的系统很复杂,我拼写都拼不对,更不要提理解了,当然我实在是没有耐心看了,在养病的名义下过着行尸走肉的生活。


七月七日 活 着。


域登录名yanfa\huangqz,这个不再是workgroup,而是域。所以登录的时候可以直接登录到域,这个从前两天学习的NTLM的协议可以很 容易理解了。你所有的验证不再仅仅是依靠本地的lsa而是直接从windows域管理器来验证了。

我觉得我实在是有大将气度,竟然能够沉得住气一直到下班前四十五秒才完成了预定的计划,称得上神定气闲,当然说的不好听就是死猪不怕开水烫,管他去。1。 首先这是个概念问题,mfc里面的statictext能够自动根据内容调整大小吗?边框确定任何一个widget都不会做这样的事情,这个本来就是我的 幻觉。所以,你当然要自己手动调节setextent。2。widget在画的时候的确是有优化,第一次显示listwidget的时候是所有的row都 在所谓的canvas的cliprect之内,但是当你仅仅改变focus的时候,你认为当前的cliprect有多大,当然合理的就是focus的那一 行了,所以,我只好自己手动把cliprect union进去,T告诫说做好在之后再改回去,这个当然是经验之谈,我觉得宁可信其有。3。我的低级错误在于设定valuemodel的setvalue 的时候拿有一个参数是byte这个事自然的,不过我老人家老眼昏花一时不慎使用了(STRLEN()+1)*sizeof(AECHAR)这个当然是一个 常数,是4,不是吗?我已开始还奇怪了半天为什么字串总是被截断,低级趣味。4。关于widget的画法,大体是这样子的,首先,brew为了据说是效率 考虑并不是我所想象的一个格子一个widget,这个原本是99%的人都预期的吧??(是吗?)结果,是一个统一的listwidget对付所有的元素, 但是我当初看amoi那个超过一千行的创建函数实在是看不下去漏了很多东西,结果始终不明白一个通用的listwidget怎样去管理各式各样的格子里面 的item并来画他们,后来才被人指点原来还有所谓的itemwidget,这个事区别于listform的style来创建,并把listwidget 当作所谓的decorator来加入的,所以画的时候是使用所谓的decorator的方式来cast并画,当然decorator再去调用子 decorator就是所谓的item的画法,每个所谓的itemwidget有可能在包含一些widget,比如imagewidget等等,他们是把 itemwidget当作container了,所以,itemwidget才不需要重载widgetbase的draw的方法,因为原本就是一层套一层 的draw,现在并没有变,在constructor里面明确了父子关系就够了。至此对于listform的widget的draw的过程总算有一个比较 清晰的思路了,当初真是有些百思不得其解。


七月九日 活 着。


昨天意外的发现原来IAList自己回去释放里面的指针元素,这个我很担心因为之前的sql的类里面把数字当作指针来用,给这个自动释放就惨了。早上又遇 到了那个臭名昭著的mfc与crt冲突链接的问题,这一类问题大概已经铺天盖地了,google以下到处都是,就是这样子的特征,大概是delete, new,__beginthread,_endthread之类的一些crt里面的函数already defined,这个原因在于mfc的静态库里面有定义,crt就是libc.lib或者libcmt.lib或者libcd.lib等等release 或debug版本也有定义,所以这类问题一定处在你使用mfc的静态链接才有。解决的办法参照微软的support网站上的方法,在 project/link/input/object& library module里面说明你需要的library的名字,比如nafxmem.lib等等,同时在ignore的地方去掉,(混乱,我也不太理解,总之是一种 连接顺序的调整。)所以,最好的解决办法是include afx.h在第一位,这里面直接由pragma comment(lib, ...)的链接指令,所以可以保证你首先连接mfc的静态库。昨天还没有完成的“走马灯”的问题接着来吧。有结果再说。

而且你要静态编译mfc的库,你还要区分呢些所谓的debug/release版本,就是说同样的库afxxxx.lib也许还要加上d,如果是 debug版本,比如afxxxxd.lib。很烦人的。


七月十日 活 着。


我终于找到了走马灯的错误,又是一个令人哭笑不得的问题,ivaluemodel究竟接受的void*数据的长度是bytes数还是把它当作 AECHAR*算它的字符数?我认为99%的人都会选前者,可是结果就是居然是后者,这样子我的走马灯的计算当然就比实际长了一倍,同时,在仿真上越跑越 慢据说是由来已久了,所以我也不打算去找原因了。现在经人指点突然明白了所谓的走马灯的实现,其实非常简单,我奇怪我为什么已开始没有想到,我一直被所谓 的textlayout里面的所谓的selected之类的指针所误导,以为是计算所谓的字符的偏移量,这个看起来简单实际上很不现实,因为每个字符的 pixel宽度是不一样的,你这样子移动很可能不是很容易吧?至少速度让人感觉不均匀?实际上更简单的做法是在draw的方法里面作其实点的平移,这个方 法肯定是效率上有些损失,但是容易得多,反正画在窗体外的部分被裁减掉了。今天简单地google了以下wiki上的ajax的定义,就是这个当前流行的 东西实际上就是所谓的异步方式的基于javascript的一种混合技术,大量草用所谓的css,核心还是异步asynchronize的 httprequest的提交。如果要画背景图那么你要针对那个widget而不是widget里面的border这个widget,我还不明白 border的bgimage有神效果。


七月十二日 活 着。


创建一个最最简单的对话框居然会失败,你有这种经历吗?很多资深的程序员一定不会记得这人生的第一步的挫折,原来是windows的所谓style的冲突 吧,我居然又犯了一个基本的错误与疏忽,就是选择了默认的child的风格,当然会出现1406的错误:不能创建toplevel的window。可是奇 怪的事情并没有完,因为child仅仅让你的DialogBox压根就返回-1根本没有进入消息循环,选择其它的popup和systemmodel可以 进入消息循环,但是却在基本的wm_setfont之后立刻就发回了wm_ncdestroy之类的quit的message,这个让我百思不得其解,在 排除了style里面选择diabled的低级错误之后,试着选择no fail才意外的成功,我花了85块买的那本关于mfc的垃圾书说这个事适应win95的实在是让人难以置信。


七月十五日 活 着。


有时候我会被一些愚蠢的问题折磨,比如怎样使用tortoisesvn去checkout一个网络上的svn代码的chunk?难道我要再回到命令行时代 使用svn checkout?咳,点鼠标右键不行吗?多么愚蠢的问题,uni是不论本地还是internet的。使用mfc的类要注意一般都有所谓的create方 法进行初始化。我第一次使用CImageList没有去create结果就出错了,因为大多数的类可能都需要比如父窗口,风格之类的创建参数来初始化才能 使用。使用ctreectrl很简单,如果想要展开某个节点,最简单的是调用ensurevisible,而不是一层层的调用expand。很久很久以前 刚刚学习c++的时候就讨论过这个返回对象是引用还是copy的问题,现在又犯了一次错误,记住了返回一定要copy,大概只有unix才支持返回临时变 量的引用还正确的情形。


七月十七日 活 着。


编译v8实际上已经被做成了傻瓜化,而我居然没有领悟到,这说明什么?基本的事实就是这个工程不能用vc6编译,因为模版的缘故,这个市vc6的痼疾,不 治之症。使用vc2005express需要的sp1升级包当然和team版的不一样,这个还需要说吗?去微软下载吧,不然总会有exception已经 定义过的错误。使用中学物理的常识来模拟物体的运动,我觉得我的思路是一个很不错的选择,不知道真正的物理引擎是怎样做的?那个简单的mapping实际非常的简单,可是你知道二战时候德国的著名的 enigma密码机的原理也差不多就是这样子的,而这个组合的数量是惊人的,假如只讨论数字影射,5个齿轮等于做了5次影射,这个组合数是10!^5大约 是10的32次方,当然这个是总数,就是说5个齿轮必须改变彼此的相对位置,否则如果相对静止就只有一种,这就是为什么每次输入齿轮都要转动的原因,按照 十进制数字进位的原理转动仅仅是一种方法。下载的那个中国象棋程序是一个相当不错的 基础框架,作者看来对于深度搜索相当的有研究,单单alpha-beta-prune就有好几种变种,不过象棋规则这种常规的东西就被他忽略了,比如常捉 没有处理,这个预示着程序没有处理循环搜索情况的处理,就是类似于走迷宫迷路原地打转的东西。最后僵局好像也没有处理好,然而瑕不掩瑜,是一个不错的模 子,一定要好好来改造。

v8的确是一个革命性的东西,我看了半天也不太理解怎么使用。她其实是一个通用的脚本解 析器及其运行器,


七月十九日 活 着。


心血来潮突然项试验一下吧资源文件,比如对话框放在dll里面,这个大概是所有程序员都曾经干过的事情,遇到了不少的细节,首先使用mfc的对话框类,你 就要包含mfc的类库,我却已开始使用wizard创建的时候应用win32的dll工程,可想而知问题有多少,始终都有dllmain在xxx.lib 里面定义过了,后来才明白mfc的dll有自己的格式,就是说他要再dllmain创建之前初始化,所以,你不能直接使用dllmain作为程序入口,也 即是说必须拿掉dllmain,这个市一个常识,对于我来说没有实践过的东西哪怕是一个常识,你也照样不知道,这个有什么好丢人的呢?其次,就是一个原则 问题,在dll的输出一个类,包括他的成员函数变量你都要输出的话那就他糟糕了,尤其那个成员有时从mfc中继承的或者用到了很多其它东西,你难道都要输 出吗?所以,不要直接输出那个对话框的类,然后,我在我的输出函数里面去创建窗口,且慢这就使我的第二个惊人的错误,我对于对话框的静态创建和动态创建缺 乏认识,总是犯这样的低级错误,一个对话框如果你使用资源编辑器那么就是一个静态的创建,你不应该再去调用它的所谓的create方法,这一点也许是我受 了之前mfc的那些类的创建习惯的影响,总还存有“初始化对象和创建实例不是一个一个概念”的影响,的确,mfc的大多数类都应 该在实例化之后初始化,所以大部分的窗口类都有所谓的create方法,但是静态的对话框这个资源却是你链接资源obj之类的就已经初始化乐得。(这些应 该是我自己的猜测。)不过总值有一点是肯定的就是你不应该调用mydialog.create();mydialog.doModel();这个可能定会 出错的,因为他被创建了两次???直接调用domodel就行了。然后我又被我之前使用win32dll的wizard创建mfc的类库的错误所折磨,当 然这个也让我意识到了一个非常复杂的问题就是从资源dll创建出来的window程序你要怎样帮助维持消息循环?这个问题已经提出我就立刻放弃,这是一个 非常罗嗦的事情,回过头来使用mfcdll的wizard来创建吧,这个时候已比较你就明白微软帮你做了大量的工作,在mfcdll里面帮你创建了通常熟 悉的所谓app类,这个管理hinstance等等,同时还要维护一个消息循环,对吗?这样子当你点击你的那个domodel的窗口他才能正确地关闭,而 且创建之后的刷新重画这些事件都是正确的。当然了这个可以说是非常寻常的事实,而且对于一辈子只是使用微软wizard导向的所谓的windows程序员 也许一辈子都不会遇到,然而,所有的事情不经历一遍你能意识到吗?有些可以但是大多数不可以,我属于那个大多数。我的忠告就是能够不使用类输出就尽量不 要,如果一定要,那么做一个wrapper类输出吧,这个试验其实有一点点为下一步使用v8之类的作些准备,如果真的要使用v8看来使用输出的模版类无法 避免,那么编译成动态链接库来供vc6的程序调用肯定是一个大问题,我花了大半天下载vc2005profession及其庞大异常的winsdk6以及 针对vc2005profession的sp1都是一个非常耗时间的无聊的工作,也许玩赏一下会发现chrome里面的绑定v8的作法,那就一切都省了, 不过现在我还是一头雾水,究竟要怎样使用这个v8呢?

上了大当了,我原本以为发送邮件使用smtp协议没有多少困难,一时才知道完全不是那么回事,smtp协议早就不是唯一要解决的问题,现在的邮件服务器大 都需要验证,这个困难度就大了,gmail的smtp服务器是smtp.gmail.com,587或者465,但是465似乎连链接都有问题,使用 465则在链接后发生了错误530 must issue tls command first,原来gmail需要使用所谓的tls就是传输层的安全协议,这个有一系列的我受协议,牵涉到加密协议,加密钥匙的交换,用户的验证则在下一 步,对吧,相比较之下yahoo的smtp服务器smtp.mail.yahoo.com则只要求你login,这个验证方式我还没有试验过,不过从这里 看来每个服务器的验证方法可能都有些不同,这样子要写一个很好的邮件发送程序绝非易事。折腾了一个晚上,我决定放弃。就算一个号称不错的类库poco似乎 也没有实现这些验证协议。上大当了,这些宝贵时间我如果用来。。。发呆不是更好吗?全世界90%的人民都属于发呆的,我。。。


七月二十一日 活 着。


我对于w的断言总是将信将疑,难道说发邮件需要ssl/tls安全协议,收邮件就不需要吗?诚然邮件服务器最首当其冲的是垃圾邮件的泛滥,然则,在首发过 程中都有被黑客拦截密码帐号的危险,否则制作一边是毫无疑义的。在尝试编译chromium的过程中对于提到的vc2005/2008的工程文件总是找不 到,后来才意识到我是从trunk下载的,那东西在release里面才有。编译v8似乎没有什么难度,倒是编译openssl的时候发现她要使用汇编 器,微软这个masm6是我们小时候采用的东西,现在只能在ddk里面找了,我把它拷贝到了vc98/bin下面就可以编译了。学习v8完全不知道头绪, 只知道这个市各好东西,可是不知道怎样使用,因为脚本引擎必须要绑定一个类库(binding)才有意义,比如html里面的js,总是和dom编程的借 口绑定的,所以,我觉得我犯了一个原则性的错误,假如不打算使用chromium那么研究v8的webkit绑定是没有意义的,所以,我决定去看 google的webservice-api,这个才是目的,而且很有可能我们需要一个binding了这些api的引擎。所谓的databaseapi 应该是建立在ssl/tls等等的https协议之上的一个google自定义的protocol,所以,我需要解决共同的问题,ssl/tls,突然我 发现了一个看上去的好东西,sTunnel,她据说是影射了安全断口让你感觉你还使用从前的smtp协议执行esmtp协议,大概是这个意思吧,所以,首 要的目的是编译这个东西,它依赖于openssl,太好了。我遇到了一个CString的小问题,就是你在getbuffer之后如果不立刻 releasebuffer你不能够在使用它,同时getbuffer绝对不能越界,程序员自己要分配足够的大小。又让我想起了离开cstring就一筹 莫展的DC,真是好笑。

模拟物理的2D小模型,还没有完成,我已经有一点点失去兴 趣了,因为毕竟没有多少悬念,不想google的东西我总也看不清。


七月二十二日 活 着。


使用openssl,也已经够复杂的了,因为你要明白整个加密与证书的原理。还有很多的设置。制作证书里面遇到了一个小错误就是是否允许制作 subject完全一样的certificate,我在ca default里面的设置是unique =yes,当然在index.txt.attribute里面就体现了这个,导致update database error,TXT_DB error 2


七月二十四日 活 着。


被网络上的白痴少年忽悠了浪费了两三天宝贵时间,这小子的伯克让我看了很信服就没有再去深究它的代码对于他的程序深信不疑,因为首先它给出了gmail服 务器的一系列的和openssl的交互结果我试验也是如此,同时gmail爆出的错误也是因为客户没有提供证书才停下来的,于是我就深深地信服客户必须有 自己的证书,而且他还写了连续的博客要把自己的代码封装成atl/com以便供asp/jsp之类的应用,我对于已经能够数量使用com编程的程序员都相 信不是初级水平,所以,当我后来不顾一切调试这个土人的代码发现连最基本的malloc/free都用错的时候大为吃惊,这才回过头来使用openssl 的demo来研究,真是被忽悠了,作为客户并不需要验证自己,因为b2c的模式中服务器自己取信于人是必须的,客户并不需要证书,真让人哭笑不得,被这种 24岁的毛头小子忽悠实在不知道说些什么,当时看这个小孩子的博客还感叹后生可畏,现在看来我还是高估了中国的大学教育水平,想想看也是如此,大多数学生 据说四年大学的计算机学习写的代码不过几千行,实在是令人难以想象。

所谓的.s文件时你写的脚本,.i文件就是编译器产生的,.i还有.lst文件一起作为armasm的输入文件。 在armtool.min里面定义了cpu的类型型号。


七月二十八日 活 着。


折腾了一个早上才找出了widget总是透明的原因,我虽然把widget的border的bktransparency或者是transparency 的属性设定为0了,但是,却忘记了我还有一个gradient的属性里面有一个rgba的alpha不是255,高通真混蛋。 折腾了很久昨天在下半前最后才发现了低级bug,算是完成了基本功能,今天下午才发现这么做破坏了之前的触摸屏点击的处理,问了TSS才明白这个东西不应 该在listform之类的form上来做,应该在更加低级的widget上的tc就是touchcontrol这种回调机制里完成,这个确实是出乎我的 意料,看来整个系统的消息机制还是挺复杂的,不是仅仅往下传那么简单,触摸屏式一个特殊的处理,几乎不牵涉太多的方面所以才单独一个系统。


七月三十日 活 着。


我想整个过程是这样子的,对于任何一个mod,高通都有一个类似于java的jad格式,就是所谓的mif=module info file,那么这个东西包含了版本的一些信息,访问权限等等,但是对我们最有用的事所谓的exported的一系列classid,这个应该就像dll的 输出表的函数名或者index的功能一样,是调用模块的输出信息,那么经过所谓的mif-editor的编辑之后成为真正的二进制的mif文件就是高通自 己的格式了,我想这个和jad作用是一样的,在动态下载模块的时候需要这个区分合法性与版本控制以及真伪鉴别。随后使用所谓的bin2src把mif文件 输出为.c文件的原因完全是为了静态编译的时候提高加载效率,所以你可以看到.c文件里面还有所谓的const file的文件路径fs:/...这个应该就是把这个文件路径作为一个常量加到代码里面的一个全局变量,当调用ishell_module_load之类 的加载函数时候搜索这些mif文件时候直接在内存中查找,因为mif的二进制内容已经作为.c文件里面的一个常数声明出来了,这样子就一方面免掉了i/o 文件操作,另一方面实际上也不需要文件系统的fs:/xx.mif的支持,这个在给手机灌代码的时候其实要简便多了,不然你还要拷贝文件很罗嗦。这仅仅是 编译生成的mif.c文件,你还需要加到编译系统中,否则动态运行时找不到的,因为你仅仅编译成功,而调用都是在运行期才发现,这个就如同你仅仅把. bid文件包含在include中可以编译的时候骗过编译器,但是运行期createinstance时找不到这个的,因为他还是要查找内存版或者是文件 版的mif才能决定是否load,这里面是由安全机制控制的。高通原来是建议你都放到一个brewpk下面的oemconstfiles.c,同时添加到 makefile相应的修改,但是之前我们已经讨论过高通的编译makefile修改是静态的很罗嗦,不如amoi使用一个pl去自动根据cfg生成,这 个方法当然是现在linux/unix开发的主流配置,就如同eclipse里面一样,总之,现在改在lenovoconstfiles.c里面了,前缀 无所谓,谁给钱就用谁的名字。

对于listform的scroll来说看似很简单,大部分人都是不屑一顾的,但是真正写代码的时候可能脑筋还要转一下,当初DC让我写他那个测试的小框 子我就有体会,如今改造高通原生的listtc.c也是有这样一种感觉,你的滚动实际上好像mouse的capture效果一样,就是说你的 selectedindex要更新才对,而之前处理是仅仅把当前的item设定focus。不过这个东西太简单了吧。我现在还不太清楚的是一个 offsetY是否就是我需要的。

应该这样理解高通的一系列接口继承机制,首先,接口的实例的第一个成员变量就是pvt,也就是虚方法表指针,这个在每个实例化的时候额外分配内存,因此每 个实例都有自己独立的虚方法表,这个思想和oo格格不入,我认为也是巨大的混乱与浪费(个人观点),那么遵循接口继承的机制就在于虚方法表必须后代兼容前 辈,也就是说所有的接口都会把前三个方法指针定义为addref,release,queryinterface。而如果你不想重载的话,就把父辈的方法 表的方法指针付给自己的方法表实例,如果你想要重载,你要记住,release一定是先调用自己的release等等实际方法,然后直接调用父辈的实际方 法指针,记住不是你自己的方法表的方法,而是实际的父辈方法,否则就会如我一样stackoverflow,因为现在的pvt就是你现在的方法呀。这个是 很浅显的道理,但是有阵子我想不清楚了,因为高通代码里面到处都是cast,结构cast,我可以接受,但pvt在哪里cast呢?其实,这里的 trick就是说结构体承载数据的同时也是你的虚方法表的开始,这一点和vc++是不同的,因为虚方法表不会和数据成员放在一起分配内存,同时方法表的继 承导致后代的方法表包含了父辈的方法,那么当最早的祖先在release时候检查nref=0的时候直接free自己是不会错误。所以,归根结底不要被结 构的base->base骗了,因为看上去好像一层套一层有很多结构实际上还是pvt是第一个。

cstring我一向很讨厌,只因为DC离不了它,我觉得很可笑,他曾经郑重其事的向我推荐还号称里里外外地研究过,并且把原来的代码盖了一点点就改名叫 作DCString,真有些恬不知耻,当然我承认他把mac的差异隐藏了,后来在linux上移植导致这个东西可以成为跨平台,但是,我心底里就是不服 气。现在轮到我吃苦头了,我在改造别人的写好的email客户端,它到处都在使用cstring,我误解了msdn关于getbuffer,要记住这个不 需要为结尾的null而加一,这个市自然的,那么如果你知道准确的长度getbuffersetlength可以省却内部的调用strlen。不过,我为 了这些个cstring已经debug了好几天了,还是没有找到原因,以前我不明所以曾经把memset(&str,0, sizeof(CString))造成过内部的那个pchData为null,我怀疑一定是那个地方内存越界读写磨掉了这个值。这几天每天一大早爬起来调 试这个程序已经让我觉得疲惫不堪了,基本上要把它原有的cstring的实现统统改为strlib的c style的实现了,因为将来很有可能不能使用mfc。


八月四日 活 着。


今天总算有了一个解脱,因为之前我一直犹豫要不要自己去写mime的实现,当然有无数的参考代码,也有rfc的规格,可是这毕竟是一个很繁琐的工作,我也 没有这么多的时间和精力,每天仅仅早晨上班前的半个小时要做到什么时候?现在检验了日本人的代码感觉很好,应该是我现在发现的最好的,而且实现了多个平 台,多个语言,很好。

试验isprite的例子,仿真上的mif一定要在所谓的applet的根路径下,而所谓的mod或者说dll在同样mif名字创建的子目录下。而arm 上却不是这样子的。


八月十日 活 着。


据介绍brew的文件配置是这样子的,fs:/mif下面放着mif文件,fs:/mod下面放着mod文件,一般这里都是一个mod目录名下面放着实际 的.mod文件,但是在仿真上面去掉了所谓的mif/mod文件夹,于是mif文件必须在根目录,mod在相应的mod名字的目录下面,同时资源文件一定 要放在shared目录下因为一个applet默认使之能访问自己的目录和shared目录的。fs:/shared/

我试了一下水,感觉email的水挺深的,因为有几个因素:一,安全连接的机制原本就复杂, 这个单单几个协议的理解熟悉就非朝夕可至。二,mime编码是一个大的头疼问题, 有些机制仿佛和浏览器的解析类似,当然要简单许多, 但是考虑到现在的文本也可以使用html呢?岂不是要把浏览器的功能加紧来?三, 很多邮件服务器的设置都有些不确定性,比如他要用户开通smtp/pop3功能选项, 这一点就让你没着,你怎么对于一个普通无知的用户说你需要打开你得qq信箱的pop接受功能开关,而且这个还只能是开通14天以后,真是无语。

http://linux.chinaunix.net/techdoc/net/2009/04/23/1108592.shtml
 
有什么好记得呢?
source insight的设置和语言有关,就是说c++的叶面的设置文件不能用到c,这是挺自然的。
戊戌变法为什么失败了?因为他们务虚。 洋务派其实还是比较务实的,至少修铁路开工厂是实际的工作, 而不是那六个被老佛爷砍头的家伙整天只想着帮一个懦弱的皇帝上台好自己位列朝纲。
 

八月十三日 昨天是阴天小雨很凉快

 
好多天没有记录了,似乎是生命的空白。现在感觉每天背着笔记本上班很麻烦,今天就不背了。 临晨四点半爬起来继续我的围棋盘,这个工作应该是太粗铅了我想几乎没有人愿意做, 大概只有在大学的学生初学乍练才画得,不过仅仅一个鼠标位置的测试我发现就要使用九点测试, 就是说中心一点周围八点,全部使用棋子的半径的一半来检验,这似乎是过分了。
最主要要解决的是我不想再wm_paint事件里面完全重画, 比如我就添了一个棋子为什么要全部重画? 我的想法是invalidaterect那一小部分也之花那一部分,不过不成功, 我猜想是不是因为beginpaint的结构必须添加我的绘画过程,晚上或者明早在实验吧。
昨晚想到的还是一个原则,就是我的代码逻辑一定不能写成代码, 必须要用数据来体现逻辑与算法,换言之, 就是一旦任何精妙的算法被写成了代码就失去了扩展的可能, 只有使用数据来体现代码才能让机器自己升级扩展,否则使用数据库就没有意义了, 但是问题是数据库的结构必须是可以让程序自动扩展的,这个似乎很难,很难。
所谓的service实际上是一个root创建的应用? 有一个想法还是很好的就是把IDBRecord这个结构集实现排 序等等的方法,这样使用的UI 控件 就可以比较轻松了。
 
在黑暗中沉默,在寂寞中沉沦,在无言中呻吟,在泥沼中前行。
我的目标在慢慢的模糊,到底为什么走在这条路上?
在彷徨中自问,路在何方?
呼唤大地,大地无声。咆哮长天,长天无语。终于知道这个问题只在自己的双手与双脚。
所以,从零出发,去画一个围棋盘。 今天早上在尝试实现一个大龙的表现,所谓龙就是一组联通的棋子, 如果进一步扩展可能要实现所谓的一步链接的,二步链接的等等, 这个好像在gnugo里面是所谓的virtual-connect,我是随意浏览看到的一鳞半爪。
 
如果能构把手机的gps信息搜集然后在网络上发布那么就是一个网 络的gps导航,这个可以实现寻路但也可以用来追踪, 大概情侣夫妻间需要把,公司应该也需要把。
 
 下载了sumantra这个真棒,完全可以解析阅读pdf 文档, 早晨浏览了一下结构感觉她是在一个所谓的mupdf的基础上开发 的?(我的想象),总之,这是个好东西,自带的vc2005工程基本可以顺利编译, 当然有一个pdficon是所谓的vista的图标,xp下的vc2005资源编辑器转化
 有问题,我也懒得找什么vc2008的资源编辑器转化了随便找一个icon替代一下就是了。
 
现在C吧整个工程的编译改变了一点点, 就是新做一个app或者component,你需要做这么几步。1.在相应的模块下创建代码及其头文件, 把他的classid加到相应的模块的头文件。2.添加相应的class自己的cfg文件, 并把cfg放在相应的模块cfg总汇的cfg里面。3.制作mif文件, 这个可以现在模块的mxf里面顺序添加classid号, 使用mif-editor编译生成mif文件, 在使用bin2src编译mif生成mif.c, 这种做法实际上是高通的加快文件加载的模式, 因为把文件内容变成内存代码的一部分仿佛资源文件一样, 在搜索mif文件的时候得到的是一个内存地址吧。
 
 #ifndef GETVTBL
#define GETVTBL(po,vtt)             ((AEEVTBL(vtt)*)(void *)((po)+1))
#endif
这个看上去很费解,实际上这就是高通混蛋的地方,他们把vtable放在数据的后面, 但是第一个指针却是虚表的指针指向结构的后面, 哪里才是真正的vtable,这样做的人简直就是有毛病, 程序员初始化结构一旦内存越界虚表错乱那才叫作噩梦呢!真是不知道怎么想的。
 
 

八月二十日 阴天

昨天下午找了好几个小时都没有找到问题,最后还是问TSS,这真是一个愚蠢的错误, 我明明使用的事widgetbase来继承, 就是说所有的default都是widgetbase来实现, 那么我怎么可能再constructor里面调用widgetcontbase的constructor呢? 我可能是抄袭其他widget的做法,照葫芦画瓢,找就是问题, 我不知道为什么有的widget需要container, 也许是由多个吧?另一个问题就是无法获得键盘事件, 这个是因为我没有重载cantakefocus的方法, 这是一个handleevent的实现,这是一个原则, 只有能获得焦点的widget才能获得键盘事件。
 

八月二十五日 晴天

早上爬起来吧那个难产的围棋棋盘有完成了一点, 当然现在不是简单的局部刷新的问题,界面毕竟不是我们的重点, 最重要还是逻辑算法。我现在在完成中的是两个东西,一个是大龙, 就是广义上的,就是所有链接的棋子组成的集合体,这个是第一步, 接下去这个东西要为了所谓的region来服务,就是实地, 这个概念是借用gdi里面的region的定义, 因为我觉得这个是一切围棋程序的核心, 因为这个是目的与效率的标杆。所谓棋类游戏的困难的核心,以及一些搜索问题, 乃至所有的ai问题的核心在于价值评估函数的实现上, 如果这个问题解决了就是纯粹的编程实现中的效率问题了, 所谓纲举目张。那么围棋的难点也正在与形式评估, 这也是一个我终止了中国象棋的一个原因, 因为中国象棋比较容易解决,无非就是吃子与将军, 了不起加上一些前进位置或者该棋子走了多少步之类等等。 可是围棋呢?胜负决定于占地,那么直接从这里入手应该是最好的吧?

 


八月二十七日 好 热的天。

问题是什么?当我的u盘找不到的时候使用google来的方法:diskmgmt.msc你可以看到原来盘符没有设定,当然原因是光驱或者什么程序 做了映 射。所以,需要改变盘符。早上完成了一个围棋的大龙的识别,很基本,但是是开始。好累了。


八月二十八日 好 热的天。

我像现在也许是比较茫然的。究竟有多少的兴趣方向呢?

mail: 这一方面,我尝试了一下,觉得还是两个问题,一个是ssl,这个试用openssl,很好。mime 编码,这个方面在npop里面使用微软自带的ole库很新颖,虽然移植有问题,但是不 失为一个很好地解决办法。尤其是你想部署server再windows-server的话。
高清解码方面,使用ffmpeg还是一个不错的选择,当然对于mkv格式支持是一 个问题,但是要记住mkv仅仅是一个container,实际的编解码还是那几样,所以,没有问题的。但是如果编译在windows上需要mingw,前 天安装了mingw+msys但是怎么使用还没有完全明白好像还需要activeperl吧,这总是一个令人痛苦的地方,如果真正的再vc6编译恐怕还需 要好几天的语法改写,据说是99的标准,这个应该vc2005可以支持,据说命令行编译可以。
pdf解码有了sumantra真是一个好东西,同时我们知道这个核心引擎是 mupdf,因此,我们的方向也许是这个。

sqlite实在是一个好东西如果没有这个东西我真不愿意开始我们的围 棋项目想当年我费尽心机就不过是想把sqlserver7的c-api包装一下因为实在是找不到一个像样的数据库来使用。具体使用其实比我形象的还要容易 直接包含你在项目中,不用dll,因为没有必要,c++的名字空间很干净。

中国象棋是一个鸡肋,原因是他的规则决定了他的复杂度小于国际象 棋,因为有好几个棋子的走法太过简单,比如将士象。那么围棋呢?我觉得这个才是 我们终极的目标,这个实现的现在从我们的棋盘开始,随后我们需要阅读gnu-go,我 要每天拿出半个小时莱做这件事情。

我的电脑被人劫持了,这是明白的,首先taskmanager里面的刷新非常的戳略,不停地闪展的cpu也多了不少,其次我输入任何网址都在百度原地不 动。令人哭笑不得一开始的时候我看到了那个esauck的木马,在我试图关闭它的服务的时候他消失了,也许隐藏了拔。现在怎么办。


九月一日 天气还好了


所谓的静态库实际上从makefile来看或者说编译指令来看,就是定义了“_lib”的/c的工程。所以,你即便有main也 无所谓,因为不去链接的。关于static,这个是最最基本的,在头文件里面声明的变量会被Include的.c文件各自得到一个副本,当然函数的修饰作 用是作用域,相当于阻断了extern。重新编译swftools,这个实在是有些枯燥,代码也很不规范。
早上去游泳,回来读了一会儿的swf的格式,看来这个东西还是比较简单的吧,我觉得应该好好学习一下。计划赶不上变化,现在又决定还是暂时不要去碰GNU -GO,我觉得flash,openCV之类的更加的重要。

九月二日 天气还好了
我的记忆力坏到了顶点,完全忘记了beize曲线是三的整数倍加一,是不是我也许压根没有学过这个东西呢?总之,我记不起来有没有学过,也记不起来实现方 法了。

每天早上六点钟去游泳的话,也许能够把成本摊薄到5元/次,wm_command的wparam的loword是控件的id。


九月四日 好 热的天。

所以,高通把很多的源文件打包为库了,这就是为什么我能够链接的正确。
今天看了看yuv的wiki常识,有一点无关的东西需要记住,abgr是内存中的顺序。
有一点要注意就是freetype编译的时候有zlib的依赖关系,而makefile里面没有写的很好, 加入你没有把zlib的路径设在了path里面,你也许会有zconf.h找不到的错误,我懒得改了, 就直接把zconf.h放在makefile下面骗过去了。
 
有人会习惯地用围城来类比国人出国的经历,庸俗地借用这样一个普遍真理是不恰当的, 其实围城里面关于出国早有更加精辟与犀利的比喻, 这里不妨再重复一遍,也就是说出水痘, 你出国了回来看到听到那些满嘴国文夹杂着英文单词以便区别于与自 己与周围的人的时候不会再有心理上的障碍,或者说你对此有了抵抗力。


九月五日 好 热的天。

今天又一次去爬云顶山,脖子胳膊都晒红了。我想是不是应该从mupdf开始学习呢?我现在天天都是新的想法,这到底是好事还是坏事?


九月六日 好 热的天。

早晨起来继续mupdf的编译,这个原本是sumatra的内核引擎,她又分为若干小部分,我就先从fitz开始,mupdf原本使用vc2005之类很 容易编译,但是考虑到将来的手机移植还是要从vc6着手,他又依赖于几个开源项目,jpeglib,zlib,freetype,jpeglib的官方网 站升级到了7.0版本,使用提供的vc6的makefile没有问题,zlib也是一样,freetype我有些偷懒,直接使用了提供的binary版 本,相信这个成熟的项目不会有问题的。fitz唯一的小问题就是使用了c99的一个小feature就是__func__的宏由编译器产生,不过最重要的 其实是“...”的操作符,这个vc6始终是个大问题,反正是debug输出的,我索性去掉了她。让我们留一个版本如何?

编译freetype其实也很简单的,就是你使用源码自带的visualc下面的那个.dsp工程文件,不过这个是一个假的,应该是一个所谓的 make文 件,所以你需要使用vcvars32.bat的命令行编译,比如nmake -f freetype.dsp cfg="freetype - WinDebug"后面的cfg应该每个在vc下开发的人都明白的,否则那就还是从helloworld学期吧。


九月八日 好 热的天。

早晨起来继续mupdf的编译,昨天晚上实际上是链接的问题,这个项目总共有六七个小的lib,比如freetype,jpeglib,zlib, fitz,fitzdraw,mupdf,最后一个测试的pdfapp要将以上的这些静态库链接起来,这个做法是通常的方式,我讨厌把n多个工程代码都放 在一个工程里面编译,我自始至终就不明白他们出于什么目的不肯把手机的项目做成若干个库以至于号称编译的时候有两个小时的时间。当然今天的经历也有助于理 解链接的问题的复杂性,从编译器设计来看我觉得链接的问题要复杂过编译,因为很多时候语法错误是显而易见的但是链接就不尽然,我现在这个做法就是在我把之 前的分散的项目目录统统重新放在一起了,我讨厌全局的路径设置,我始终认为他是噩梦的来源,你万一链接到了那个库或者顺序有关的库这才叫噩梦呢。所以,我 宁可做一次恶人使用相对路径,这样子当然在软件有升级版的时候是另一场噩梦,因为你要再次手动把你的垃圾路径重新加一遍,不过。。。

解决的问题其实并不多,我把之前没有工程的jpeglib等等都做成了vc6的工程,然后在vc6里面的工程组里面来编译就清楚多了,因为还是老问 题,做 成静态库就意味着不链接,那么在最后的app进行连接的时候就有一定的盲目性,他当然会去找所谓的defaultlibrary,这就是 msvcrt.lib,如果你不使用msvcrt.dll的话,这样子和之前的libc.lib当然有冲突,ignore all lib也不行,因为你把libc.lib也怕除了,所以就是nodefaultlib:"msvcrt.lib",这个问题其实我不知道遇到过多少次,然 而始终是一知半解,我不认为我很笨,因为我相信我不是个案,链接应该是一个对不少人很模糊的图画,反正我是这样子的。还没有试验运行,但是要上班了,好累 呀。

晚上试验运行mupdf可以work了,当然我把pnm格式转为bmpu的时候没有上下颠倒,没有调整rgb的顺序,不过这都不重要了。今后我要研 究的是font。在回家的路上心中有些莫名的惆怅,究竟是什么其实也不重要了,因为希望原本就不是我真的想要获得的,我想就算Z是我的理想,我也未必 会。。。

你创建的ibitmap接口实际上和windows上的概念是接近的就是他不一定是device兼容的或者说compatibile的,那么就不能够支持 fillrect或者bltin之类的api,只有从idisplay得到的devicebitmap才是真正的device-compatible的。

晚饭后父亲语重心长地和我谈人生,年近古稀的父亲说起他一生都不愿加入共党,只因为他厌恶政治,但这也就注定你在这个共党统治下只能做一个技术干部,但是 他却从内心里觉得共产党待他并不薄,因为作为一个农民的儿子没有共产党他认为自己不可能上大学,而且他也认为纵然共产党有多么腐败残暴却也只有这种流氓组 织能够统治中国,因为其他的所谓党派大都是一些机会主义分子,成不了大气。当然这一切的一切的谈话,包括他现在学习通讯技术基础的心得都为了那个躲避不了 的话题的引出,还是结婚的事情,我无法反驳他的理由,因为我明白比起母亲的近乎歇斯底里的痛骂这些理智直言是我无法回避的。晚上心情沉重,仿佛一个判了死 刑的囚徒等待执行的到来一般,这个社会始终期待着我国一个所谓的正常人的生活,这是无法回避的。在我内心深处也是一样的吧。不然我为什么要出这个谜语,所谓谜语就是让别人猜,在隐藏中又希望让人知道,不然为什么要提 示?这个答案如果揭晓了,我是不是又要被迫回到冰天雪地的加拿大呢?

mupdf的确输出了正确的图片,只是我又一次的忘记了Linux 和windows下的bmp图片的区别,原本的linux是和windows上下颠倒的,linux是ARGB而windows是BGRA,这个错误我原 来就翻过一次了,那是在datawind的时候移植dc那个白痴程序到linux的时候。唉,总有千般苦恼却向谁人数说。mupdf的工程组保存一个版本吧。

突然想起随着年龄的增长人的想法爱好的变化,二十岁的时候怎么也喜欢不了钢琴与古典音乐,可是三十岁的时候开始懂得欣赏萨克斯管,三十五岁以后开始喜欢浪 漫钢琴,这大概是一个人的心态月来月平和的关系吧。

月底想去韩国,可是总觉得机票太贵了,跟旅行社才两千,可是自由行机票就要将近三千。

我突然有了新的眼前的目标,试验一下lzw之类的经典的压缩算法,这个不怎么费脑筋也有成就感。
早晨起来简单实现了一下我的预想,其实仅仅想做一个验证,所谓的lzw实际上是一个所谓的“贪心字典算法”,就是在一次扫描中寻 找最长的重复字串,这个算法特别适合“流”扫描,因为一遍就建立字典编码,因此他一定不是最佳的压缩算法,因为很多其他的压缩一 定会对于对象作分析,但是无论怎样的压缩都有所谓的香农的那个上限,只不过很多算法非常的接近,比如哈夫曼从整数的角度来看是最接近的,“算 术压缩”把其中的概率用更加精确的浮点数真实表达更加完善的接近极限,但是浮点运算的负担反而让他不适合推广,因为在速度与压缩率的选择上, 有时候前者更重要,所以这大概也是lzw的一个优点吧。那么这个字典如果每次建立都消灭是不是很浪费,那么仅仅为了一篇特别的文章建立的压缩字典是针对当 前的优化,从统计选的角度来看大量统计获得的字典是否从总的概率上来看更加接近极限呢?而且建立字典也不是免费的,如果从中心数据库得到的字典是否能够补 偿网络传输以及过于一般化的负面影响呢?这就是我的想法非常的简单,我敢肯定很多人做过类似的尝试,不过,我以为这种东西最适合的领域在于大数据量,因为 大样本才能抵消小梁压缩的投机,这种如自行车的启动速度几乎比任何先进的飞机都快,可是没有人愿意使用它来做常常距离的旅行。我可以想象的一个应用也许就 是流媒体,当然无损压缩是不现实的,需要实现一个有损压缩的字典的版本。总之,我花了一个多小时定义了存储文件的格式,以及简单的算法的实现,应该是很简 单的。当然早晨要去上班了,没有时间来验证。我想我从这个领域尝试是有益的,因为flash/pdf以及所有的流媒体都是在解决ai的最基本的问题,模式 的建立与识别,当然我的内心深处坚定不移的认定所有的所发都应该符合宇宙最普遍的几个规律,时间空间转换规律,能量守恒规律,等等。比如所有的算法都是时 间与空间或者说速度与存储的妥协。那么所有的进化,或者变化都是节省能量的努力或者自然淘汰的结果,你的记忆总是挑选对比最强烈的,因为信号最强的,好像 色彩对比最大的,因为电信号最强的,如果把人脑看作“冗余容错”存储机制,那么他们一定做了最多的备份,当然以往的可能,出错的 可能是最小的。这就是记忆规律。

好累。上班去巴。

折腾了一天多才把alpha-blending搞好,这是一个Longstory。看起来简单,其实还挺曲折。首先,我是用的brew的一个 isprite接口,就是所谓的精灵,这个是高度封装了的接口,非常适合2D游戏动画的编程,但是也有不足就是他定义了所谓的两类方法,简单和复杂,所谓 的简单就是当系统不支持如矩阵变换的时候,就变成了简单的画法,即ibitmap的bltin之类,这个接口方法里面有alpha-blending的参 数,但是前提是你的图片bitmap要有alpha呀,可是系统compatible的bitmap是rgb565怎么会有alpha呢?当然他有一个所 谓的transparency color,但是这个仅仅是说bitmap里面的定义为透明的颜色不画,压根不是alpha-blending,那么只有使用rgba-32bit的格式 了,但是,这个不是系统颜色格式,系统的函数ibitmap的方法fillrect/bltin都不支持。(所谓的不支持都是说当他作为目的bitmap 时候必须为系统兼容的格式,至于源bitmap的格式一般是无所谓的。)而纠缠在一起的另一个问题是isprite接口方法,前面说了,要么是简单方法及 bltin,要么是复杂方法是用matrix变换,但是matrix变换的时候却又不包含了alpha混色,大都是旋转平移等等,两者怎样能够同时呢?也 就是如iphone那样在变大的同时在拖动的时候半透明?当然抛开isprite接口另起炉灶是可以的,但是这个接口其实方便了很多,你要抛开重来实在是 不现实。最后只好一遍吧高通的源代码改变把简单方法和复杂方法合二为一,这当然很丑陋,因为原来的设计是在硬件不支持的同时使用。另一方面我在内存中复制 了一份rgba的拷贝,就是rgb565用来显示动画,rgba来做alphablending,好在两者不同是。在转换rgb565到rgba的时候还 犯了一个错,就是rgb565实际上是r,b都被右移了三位,g右移了两位,而我一开始没有意识到以为rgb都是舍掉高位的值,结果当然图片一片漆黑了。 同时关于rgba的顺序又一次搞错,记住他是bgra从低到高位。

早晨起来写了一点就发现想法不太对,需要调整,先保存一个工作版本吧。就是 说我的想法是做一个数据统计,那么需要多方数据来源的甄别与合并的过程,这里最重要的就是究竟怎样把大量不同来源的字典进行合并?采用什么标准?使用率? 压缩率?压缩率里面是否细分他的贡献?还是说用中心数据库的字典进行压缩进行比较?

而最最核心的一个问题是:这样做的意义在哪里?结果会怎样?是人类学习的过程吗?ifont写到ibitmap的flag或者透明或者不透明,(废 话)是 说是否要写背景色。

早晨编译我的小玩意,但是遇到了fatal error 1063,这个是我从没有的经历,google才知道是这样子的,这个是编译器栈溢出,这个当然人人都知道,问题是怎么造成的,怎么解决。一开始采用某些 人的做法#pragma warning(disable: 4087)我也以为这个是因为warning的mesage太多输出引发的内存不足,可是没有效果,后来看到一个大侠的帖子才知道真正的原因,因为使用了 大量的模板,因此一定是要预编译头文件,因为模板是不能编译在c/cpp文件的,那么这个预编译头文件的内存分配就成了问题,所以要使用/Zm500这样 子的指令,所谓500仅仅是调整内存分配比例,摘录如下,我的情况只有500可以,100不行。

10   5.0   MB  
100   50   MB  
200   100   MB  
1000   500   MB  
2000   1000   MB  

看了一点点关于xvid的掌故,很有趣,他是前身divx的倒过来的拼写,代表了一些有正义感的程序员挑战利欲熏心的软件资本家的精神。这里记录一下 ffmpeg的转格式语句:ffmpeg.exe -i i:\VIDEO_TS\VTS_01_6.VOB -vcodec libxvid
-s 352x288 -b 2000k -acodec libmp3lame -ac 2 -ab 192k musicAndlyrics6.avi同样的如果是只抓mp3就是后半部。我一开始还以为msmpegv2这个微软的格式应该是所有mp4都支持的,看 了这个掌故才明白,市面上的mp4播放器都是从xvid这些开源项目移植的,所以只支持xvid。

前天写的一个对子,属于搞笑类型的。

作为纪念这次伟大的登山运动,我即兴出一个对子,但是下联对不好。登顶云顶山之前经过一个小山村叫做“旺前村”,我的想法就是用 这个小山村来对。

上联: 登顶云顶山顶头顶云顶顶天立地

下联: 近前旺前村前眼前旺前前途无限

平仄之类的我不懂,感觉不太工整,见笑了,欢迎各位高士指点。

怎么说呢?我的小实验总算完成了第一步,感觉我还是很糟糕,这么简单的一个 lzw的算法折腾了一天有余,实在是难以启齿。当然我的实际想法并不是要做这个,这个仅仅是第一步,我的构想仅仅是建立一个平台,让他们去验证一个想法, 那就是建立字典的过程虽然依赖于输入的文本对象,但是从广义的来看,这个重复过程只不过在一个“贪心”与dos年代磁带输入的限 制下寻找局部最优,这个是效率与效果的妥协的结果。如果当年有今天的网络条件,有这样大量的压缩任务早就应该有人想到使用网络中心字典的主意,我坚信我在 这一点上不是孤独的。那么网络数据字典中心应该是什么目的呢?当然是在大量统计的基础上的基于概率的字典,仿佛输入法里面的学习机制,所以局部压缩未必总 是效果好,因为它不依赖于单一的当前的输入对象,好处还有节省了字典的存储(这就错了吧,字典不需要存储吗?除非是特定的预制字典,比如字典使用一个版本 号或者数据库的一个tag?),而且它应当符合“大数原则”,就是说只有对大压缩量的任务才有明显的效果,那么这样子的任务在哪 里?当然是那些多媒体的对象了?虽然他们需要的是有损压缩,难道我的字典不能有模糊比对?不对!全想差了,这个字典还是本地工作不过是定期从服务器更新而 已,是一个辅助的资料搜集过程。仿佛输入法的各个行业的特别化,当然服务器依赖于各个agent提升他的统计工作,问题的核心在于合并的原则,所以,接下 去的工作就是建立一个hit-table。

当然这个所谓的压缩完全没有采用lzw的原来的设计,因为我根本不屑于使用较少的bit来压缩,这个仅仅是一个实验。(我这么说当然也是为了自己的台阶, 因为压缩后比不压缩增大了三倍!)所以。。。很好笑。

一个基本的事实让我觉得lzw之类的压缩算法不是我需要的,因为最基本的一个东西怎样获得的呢?分隔符就是delimiter是人否能够发现呢?贪心找到 最长的和找到最多重复的还是有区别的,huffman大概都是后者吧。当然,更多是按照频率选择编码长度。不过他并不管你怎么发现频率,当然不管怎样发现 分隔符了。所以。。。

翻出一本很久以前买的书,计算moment of area可以得到很多有趣的结果,m(0,0)得到的面积,类似的还得到质心,Orientation等等,这个数学方法应该是有用的。有空还是看一下 mp4之类的运动补偿的原理吧。

晚上继续学习实践ffmpegSDK,心情很低落,早晨在食堂 呆坐。晚上下班心情很郁闷,总在怀疑自己的选择,也许。。。I have been wasting so much opportunities I have been given.这就是我的选择。也许Z仅仅是一个符号,仿佛所有其他的选择一样就是一个代表,代表我的一种渴望,除此以外并无什么实际意义。每次走过国贸新 城我都有些忐忑不安,也许怕什么事情发生,也许期待什么事情发生,然而什么也没有发生,这就是我的行星轨道,永远也不会和某些行星有交叉的可能。也许距离 并不是什么影响概率的因素,否则为什么相隔两万公里的时候我不能抵御S,可是今天也许不足三十公里我却浑然不知。距离不是原因,是因为我们的心情有了巨大 的改变。
每天早上都是一个全新的我,因为每天我都忘记了过去,忘记了昨天我做了什么,说了什么,忘记了我正在进行的项目,于是我每天都开始或者继续一个不同于昨天 的项目,仿佛上下文的转换context-switch,这算是并行作业吗?只因为我的记忆力月来越差。我忘记了我以前完成了一半的html- parser已经有了内存读取的功能,因该是那个IPersistStreamInit接口吧,我只好相信我上一次是成功的因为我完全忘记了。早上从睡梦 中醒来,想起了那个著名的字谜。我突然激发了一个念头就是把我的蜘蛛重新复活,鉴于我 没有精力投入,何不做一个简化版的小工具呢?仿佛古代的一个工具就是在Internet很慢的年代人们把整个网站内荣都下载来以后慢慢看,我就不要数据库 了,因为我是在是没有经历从是一个需要连续三天以上的项目。这就是simple-spider的 简化工作,但是这么简单的东西也耗费了我好几个小时,我实在是越来越慢了。这是昨天试 验libpng的结果,没有完成,我的idea还是老一套,讨厌吧libpng/zlib之类的单独成为dll,这个编译是最容易的但是分发很讨 厌。基本上还有就是png是用的封装,仿佛当年对ijg的封装类似,两者代码风格惊人的相似,也惊人的烦人。写文件好像还不成功,正在分析中。

明天要去首尔了不知道之前之后还能否完成这些小东西???

只睡了几个小时,三点半钟爬起来调试,改变了当初的尝试, 很明显的广度搜索是不可能的,在一个就是那个恼人的about:blank的著名的问题,walkall没有解决的方案, 只是知音了一个方向就是实现imoniker,然后调用其中的setdisplaynew的方式, 我的感觉就是这个是一个invisible的window, 他的默认地址当然就是about:blank, 我没有时间去这样实验了,就只好用最低级的办法硬性改变地址, 把它换成Hostaddress,因为这是一个相对地址和绝对Url的问题。 折腾到了七点钟还是有问题,现在的问题是独到的网页不对, 这个和一年前的情形一模一样, 最后在上班前找到了原因还是编码的问题,不能使用unicode, 百度这个笨蛋可能就是这样手工添加的一些东西。不知道,困死了。 我需要睡眠。
  
又是三点半爬起来,我能否每天睡五个到六个小时呢? 经过了二十几个小时的混沌我还是一片的模糊。李一下思路吧:
首先,问题是什么?是使用wininet下载的错误, 这个是经过了两天才在早上意识到的。为什么?http://p.iask.com/showpic.php?n=1&keyword=%C3%C0%C5%AE&page=0&total=2000&sinatotal=15691&ztnum=0  比如这个链接在任何浏览器里面都能够得到正确的结果,ie/chrome,我想firefox也一样, 但是使用internetopenurl就得到了iask的错误 提示什么你的浏览器不支持frame之类的。这是为什么? 唯一能够解释的就是要么百度这个混蛋能够揣摩出我们这些低级的网 络爬虫拒绝服务,要么就是参数的解析有误。 关于后者我怀疑了一年多了,去年就是这样子的, 有时候参数是汉字,有时候是%的hex, 我一直怀疑百度要么是故意的要么是人工收集整理的结果。
在这之前我一直没有意识到是internetopenurl可能 有问题,因为使用了这么长时间了,我一直以为htmlparser解析的这个链接有问题, 知道今天临晨我才开始怀疑不是unicode或者multibyte的转换问题。 实际上看上去这个链接的确是multibyte,不是吗? 或者是utf-8?我搞不清楚,这个也不重要,总之, 是这个下载的问题。
我的猜想:也许是我的Internetopen的自报家门被百度识破? 我生命自己是microsoft internet explorer 6,但是没有用,那么还有一种可能性就是Internetopenurl的额外的Httpheader的问题,这个我认为现在是最最有可能的, 因为这个是我一直忽略的, 但年DC总是纠缠于这个我还心里暗笑他的装模作样,看来我要尝试Internetconnection的做法, 这个openurl也许封装的太多了有太多的问题, 那时候DC总是抱怨mfc的例子里面异步下载没有实现等等问题, 也许。。。
关于multibyte和widechar我始终不清楚, 究竟gb2312嵌在其中的参数是否一定要加上%呢?困死了。 我实在太需要睡眠了。 昨晚上帮妹妹解决笔记本连接无线路由器的问题, 也许这个也是我的hp的问题,就是无线网卡未打开的原因吧, 不过。。。
不过疑惑还是存在, 既然百度说我的浏览器不支持frame为什么又把一个含有frame语句的html发给我?而htmlparser又连基本的a href都不能解析?百度发回的文件大小都不可信。 如果我能够使用chrome的parser就好了!!! 可是在那里呢?
 我满心欢喜下载了一个所谓的openwebspider,从一般开源软件的平均水平揣度猜想应该不至于太差,可是晚上试验了一下大失所望,当 然首先我就不明白他要干什么?!怎么下载?怎么解析url还有html?我怎么也不能相信就那么几行代码能干什么?当然作者是一个数据库的行家,做了我一 直懒得做的工作。因为我当时把大部分时间都用在了他没有的方面把。实在是太郁闷了,当然我以为我当初写的那个爬虫也是有水平的,当然我一直无法解决 java脚本的解析,这个我想是非常不容易的,否则人人都能写浏览器了。

假如你极度无聊,无所事事,那么也许你可以随便读一读某人的垃圾英语,因为我无法使用 中文所以才写英文。大体上我为自己的英语辩护会引用围城的经典,那就是某些人,尤其我接触的上海office lady大都会频繁的使用中文夹杂的英文,但是那个嵌套仿佛牙缝中镶嵌着的中餐的青菜叶或者肉屑,仅仅表示曾经吃过类似的食物而已。我早就承认自己没有语 言天赋,此生断无英文写作的可能,于是只是万不得已才写,比如代码注释或者学术定义。

我依然无法解决wininet的困惑,看样子一定是什么参数设定不对。我模糊记得DC当初也是有这个问题,随后我建议使用internetopenUrl 来代替。那么关于百度我觉得可能是一个特例,也许他觉察到了非浏览器的这类爬虫的httpheader的不同因此才拒绝服务,关于什么支持frame只说 我觉得很牵强。连续两个晚上加班很疲倦。我在下班的路上离了一下思路可能是这样子的,首先使用ibitmap设定透明色失败的原因也许是我设定的 nativecolor有误,需要明天验证,不过通过我自己实现ibitmap_bltin的经验来看有这个可能,因为所谓的nativecolor是依 赖于ibitmap的格式的,也就是说不通的ibitmap对于同样的rgbval有不同的nativecolor的解释。另一个小问题就是所谓的 idib_rgb_888并不仅仅代表24bit的rgb格式,同样代表32bit的rgba格式,这个区别在于哦idib的ndepth是多少,我就是 在这里犯了错。

早晨,我觉得我像白痴,问了一个愚蠢的问题,Z的严厉与怀疑质询难以置信的目光让我无地自容。晚上我甚至于想要email我的问题,但是。。。这是 一个无 止境的mission impossible,我觉得完全没有什么希望。

C在昨天加班的时候给我演示了一下啊Incredibuild,我第一感觉很震惊也很感兴趣,毕竟这个是我当初的研究课题,虽然我很肤浅但也在其中浸润了 一年多。不过我始终在怀疑这个东西的正确性,因为我一直顽固的认为并行处理如果需要在运行期份额配数据就无法达到并行的运算优势,那么。。。给我时间我去 用networkmonitor去侦测一下吧。


十月五日 阴天

我今天终于抽时间重新看了一下我的蜘蛛的问题,有了一个新的发现,那就是我犯了一个不可饶恕的错误,当初DC可能跟我解释过,我并没有听懂,我在 Datawind已经做过了这个东西,可能我忘了。就是openrequest并没有发送任何的请求,他仅仅是创建了一个request对象,你需要接着 调用sendrequest,而这个不仅仅是Post需要的,get也需要,这个就是我的误区,的确使用 wireshark/networkmonitor之类的一看就知道问题在哪里了。昨天晚上写了两三行代码,(实际上就是把原来的代码修改了一下类型,我 老了。)要做的工作就是我心爱的“yes"系列的avi转为mp3,因为大多数时候你只需要听其中的精美绝伦的莎士比亚故乡的语言,在中国大 概很少有人能够欣赏这些东西,因为他们太超前了。

这个是我最喜欢的电视连续剧,我怀疑在中国13亿人口中是否有一 万人能够看懂并欣赏,也就是说是否有百万分之一的人口能够听得懂,并且欣赏,这个数字在英美也不会高多少。

不过我对于这个问题几乎已经绝望了,我现在几乎已经相信百度是采用了某种防御网络爬虫的小技巧,因为所谓的我的浏览器不支持frame实在是子虚乌有, ie6应该已经支持了,我甚至于为此下载安装了ie7。(会不会我的platformsdk也要用新版的呢?)这个问题是在是难以解决。也许我还是应该去 比较我的spider和ie的发送的http-header 的异同,不过这个至少需要一天以上的时间,因为我的旧的Httpserver要重新整理了。

现在情绪很低落,反复犹豫觉得对于那个谜语就应该让他继续维持,这个就是这样子的。


十月六日 晴天

偶然看到一个tip,就是如果你拿到的dll没有提供lib怎么开发呢?通常只能使用loadlibrary动态加载,不过使用这个小方法也许更加的方便 来静态链接,就是lib /def:deffilename /machine:x86 /out:mylib.lib mylib.dll 这里的deffilename就是你使用dumpbin /exports 得到的输出符号表,当然前提是你要让lib正确找到路径,比如使用vcvars32.bat。不过这个方法我没有完全验证过,因为他应该只能针对纯粹的c -dll吧?我不知道。。。


十月八日 晴天

我的parser依然不能完全正常工作,实在不知道怎么办,当然这一次是sohu,我想也许他们或多或少都有这样子的技术来阻止一些爬虫吧?不确定,要大 量的时间去调试跟踪。我的兴趣又转到了之前尝试过的opencv,这个和ffmpeg一样在windows下编译有困难要cygwin之类的,唉,在 linux和windows之间。再说吧,我需要一个明确的目标。


十月九日 晴天

我的爬虫试运行了一下,一个白天在sohu的图吧爬下来七千多张图片八百多兆。不过我太累了,晚上十点多才加班到家。早上我在想百度的frameset是 不是说明我的document需要在另一个frame获得??


十月十一日 晴天

我犯了一个逻辑错误,就是sqlite的host parameter用来bind的是数据而绝不是database schema的东西,比如这一句就是搞笑的create table ?1(id integer primary key);你只要稍有逻辑就明白这个是非法的因为在prepare语句并非完全脱离sqlite的纯语法检查,因为它必须使用sqlite_master 去检查所有的schema object来判明你的语法是否符合,换句话说你不告诉我你的表的名字我怎么知道他是否合法?这个倒不是parser去帮你检查是否表已经建立了,这个是 使用if not exists语句在执行期来帮助的,当然我昨天在实现opentable的接口时候嫁了一个很小的功能就是select count(*) from sqlite_master where tbl_name='your_table_name' and type='table'来判断表是否存在来决定是否返回打开成功,而之前的所谓opentable都是初始化数据并无检查,这样防止盲目使用 create table if not exists。这样做当然要好的多了。

有空的时候试验一下sqlite_open_blob,当然我是不太愿意把大量的图片存储在数据库了,之前那120多g的图片就这样锁在mysql里面很 难使用了,存储路径与链接时最好的。


十月十三日 晴天

sqlite还没有集成,花了一个早上才修正了一个相对路径的问题,使用Internetcombineurl是老早就有的,我好像今年又把去年的工作重 复了一遍?当然现在下载图片比起一年前快乐很多,也许是国内访问国内网站快的缘故吧?也许是网站速度普遍提高了,反正现在一个昼夜下载一个多g的图片是轻 松的事情,注意我仅仅开一个进程而已。先留一个版本吧, 其中的release版纸带一个链接参数执行。 我想图库网站一定会对我这类的下载器恨之入骨吧,我的目标就是做一个类似这个功能的小玩意。在我看来这个东西应该不是非常的困难吧?当然要 做到一个产品要很多时间与人力的投入。


十月十五日 晴天

what can I say? google sucks! I download the picasa and ask it to add my newly downloaded picture folder into its database. And then I went to work and came back to see it crashes. You know, the folder is merely 15G with 70k or 80k pictures which I spent two days for downloading. The reason of crash is simple. There is no space in C: drive as picasa uses all 3G disk space for cache. This is ridiculous!


十月十八日 晴天

这个是一个很常用的trick,就是enum你如果不知道编译器使用什么数据类型, 或者你要保证跨平台的可靠性, 那么你可以在最后一行制定一个dummy的enum知名他的类型 ,比如
typedef _MyEnum
{
here_is_first 0,
...
 
Here_Is_Last  0xFFFF,
}MyEnum;

现在下载应该不是什么大问题,我在一个不设防的壁纸网站doutie.com一两天就下载了十几个g的壁纸,这个网站应该也不大,可能总共也不会超 过十几 万图片吧?(当然预览小图不算了),所以,我的重点就又回到了整理,使用opencv进行简单的分类,opencv1.0支持vc6的编译,可是2.0不行了使用cmake依然不行,我 摸索了快一天决定放弃2.0,通过比较两个版本的facedetection我觉得差别不大,所以,还是使用1.0吧。


十月十九日 晴天

最近的目标是这几篇论文的学习,我需要有一个主动的学习的方式,在不能像以前一样的被动的学习。看了abstract和这 篇中国的论文,我的理解是这个approach有一些我一直在想要做又不知道怎么做,也不会做的事情,首先,最重要的是机器学习,核心是反馈机制的训练过程,如 果不采用这个 途径我认为都是无前途的。其次,定义除了一个模式,采用层层 过滤,这表明了在对一个复杂对象无法立刻认知的学习过程的必然阶段,因为一个对象的复杂就在于他的维数众多,单靠某一个向量空间的特征值的比对是 徒劳的,这才是解决复杂问题的唯一出路,第三,革命性的采用特征值的快 速检测算法,这个同样是关键,没有这个图像积分算法,前面亮点同样是水中月镜中花。那么第三点的重要性在于它是实现的手段,能不能让整个过程自动化?或者 说是否已经做到了自动化?读了以后再说。

积分的思想就是计算光通量,这个和能量相关一定是正确的,真是天才的想法,那么对这个积分结果在积分会不会加大变化率来彰显特征值呢?


十月二十日 阴天

昨天收集的那片中国的论文感觉有些肤浅,我怀疑这个就是所谓的中国模式,1.基本上是重复了viola的一个实验而已,充其量相当于 国外本科生的一个 team project,我说这一点绝不夸张。2.唯一的贡献大概是一个小小的改进就是把rgb转为yuv来分析,不过我现在的看法是人脸识别的核心是使用灰度图 而不是像“绿坝”那样的皮肤颜色面积百分比,当然这个车苑了,因为他们是为了识别裸体,这个当然是正确的,不过人脸即便是黑白的 也应该能够识别,所以,这个yuv的变换实际上意义不大,3.感觉是一片读后感,大概是教授让学生搜集论文写的心得体会,当然这样子有些刻薄,4.没有任 何的实验数据的支持,一望而知是一片在极短时间内的速成,更不要说他们是用的数据量小得很,更加令人怀疑其实验结果的可信性,不过,人对于别人总是刻薄 的。毕竟,在2003年能够做到这个在中国也不算太容易把?

有几个问题需要进一步搞明白,究竟feature是怎样定义的,能否自动生成?还是说rectangle的feature已经穷尽了所有 的组合? adaboost的算法需要单独去了解,据说boost是一类算法的总称,对于弱分类器的正例,反例的权值的设定,以及分类器的权值的设定看样子是至关重 要的,那篇中国的论文大概最重要的就是这个实验细节再给予很大的权值的差异上。所以,理解feature是最重要的第一步。

我调用opencv的脸部识别样本程序结果一天一夜才分拣除了一万多张图片,就是说处理了三万多图片,总共还有五万多没有处理,这个仅仅 是一个文件 夹而已,大约一天一夜处理的图片大小为8g,这个大概就是随便下载一天一个爬虫的产量,也许还要对结果再次分拣的话。。。


十月二十二日 阴天

有几个方式可以进行ml呢?首先,我们有四个象限的数据:false-negative, true-negative,false-positive,true-positive,前两者都需要人工辅助太困难了,唯有后两者似乎比较容易自动 化,所以,第一阶段我想集中在这两个方面,我们有很多的cascade脚本,说不上谁比谁强非常多,也许各有千秋吧?那么这写个脚本能够组成一个投票委员 会,在发生争执的对象就是学习的对象。所谓学习就是进行比对,找出异同,这就是核心。这里有一个有力的条件就是viola开创的这个架构是用的是基本的 feature,那么大家都有一些基本的比较元素,比较可以量化,问题是比较的结果如何储存作为将来的参考,这才是学习的目的与困难的地方?!是否应该向 美国的判例法那样,法官判决只需要律师举证拿出以前的判例,作为法官原则很简单仅仅是检查前例是否使用现在的例子,也许这个过程很简单,因为明摆着,唯一 不定的因素是前例的可靠性,这就是一个正确率的概率问题,所以,这里的法官大概就是一个统计概率的数据库。如果这个方法可行的话,数据库就是一个简单的 feature组合与面积或者说scale参数以及hit number的简单记录,需要上下文吗?就是说feature周围的window?我想其实false-positive以及true-positive 发生的窗口的周围八个窗口或者若干个(不应该是简单的评议窗口?我还不清楚上下文的含义是什么???)这个问题要慢慢考虑。现在明白了一个简单的过程就是 首先转为灰度图,然后缩小一定比例灾区搜索,不过这里面还要去看代码,转灰度图是基本的,可是我还不会说明我没有这个方面的基础,concordia的课 程设置是给电子工程的,我的选秀学分都用完了,当时错过了这个机会,现在去补课吧。所以,先从灰度图制作开始。缩小的原因是什么?

昨天晚上加班到九点多很累。这些天差不多每天都加班。


十月二十二日 阴天

每天明白一个道理,每周前进一个站头。
本周从东方山庄前进到了菜塘,需要稳定。
读了一篇关于viola的扩展的论文的开头, 这个是旋转45度的所谓FEATURE,采用的快速算法也是类似的, 然后创建一个Lookuptable,就是所谓的类似于dynamic programming的表吧, 我印象中就是你不使用递归解决fibanacci的问题的做法。 昨天花了一个下午解决的哦一个bug原来还是很有教育意义的, 就是我实现的所谓的bitmap_bltin的方法中没有检查dst的超过边界的情况, 导致移动到下一行的时候加上nPitch的时候wrapping图像,之后我改正了小于零的左侧, 却没有正确改正大于宽度的右侧情况,结果情况看上去依旧诡异, 让我不知所措,迷失了搜索方向。
另一个导致死机的问题是这个很少见的例子,struct my{int type; int len; int data[1];};
这个是为了给不定长数据分配内存缓存的结构, 实际数据长度是len,data是一个假的数据指针, 那么结构的实际长度是什么呢?是sizeof(my) + len - sizeof(int) 吗?是也不是,因为如果数据len<sizeof(int)就错了,而且这个结构的长度无所谓大一点又如何?! 所以不如改成sizeof(my)+(len+3)/sizeof(int). 
这个结构有一个潜在的危险就是所谓的Pointer alignment,如果你google就明白某些架构的cpu要求指针地址必须有一 定的规矩,比如int32的指针就是4字节对齐的, 据说在pc等cisc机器上这个限制被放宽了,但是arm/mips等等有这个要求,所以, 以上代码最好是把所有的Int改为int32,这样子就对齐了。 
mif文件机制一直是我不清楚的地方,究竟怎样调用的, 只是一个概念, 原理如同微软的注册表机制反正就是提供一个存储注册路径的方式。 现在是这样子的,一个Mif 文件因为包含了包括权限的内容但是对于Oem来说用途不大, 反正都是给圈圈的,所以,使用匿名的mif, 就是说都是千篇一律,不过就是分配一个id以及一个相同的全先, 然后使用bin2src编译成为.c文件成为代码的一部分, 这样子省却了哦加载前读文件的过程,因为路径就是一个内存地址。 但是你还是需要一个表来绑定id和load 函数,现在这个是所谓的apps_mod.c, 所以使用ishell_startapplet就可以调用了。 

十月二十三日 晴天

尝试opencv最最基本的元素图片, 我想把它转为windows的bitmap来画出来,当然, 我想使用纯粹opencv的架构也是一个办法, 不过我还是从我熟悉的gdi入手,结果遇到了一个小的障碍, 就是compatiblebitmap的创建,msdn的说明也许不一定正确吧, 因为他好像不允许真的rgb格式,只允许color index。以后在实验吧。昨天做了一个小实验吧Opencv所有的cascade都用上对 一个目录下的的图片进行过滤,好像良莠不齐, 也许那些body的过滤器压根不能这样子和脸的眼睛的嘴鼻子的过 滤器联合使用?
今天分组实验。

十月二十五日 晴天

从最最基本的图片入手吧,第一步我需要吧opencv找到的脸部存储下来,这是一个很简单的工作,但是也耗费了我好几天,这是非常令 人不安的尴尬,首先还 是因为gdi里面的东西用的不是非常明确,一开始想利用windows来显示图片所以使用hbitmap,但是实际上使用opencv的你根本不需要了解 细节,外行也能写程序。后来才想起来如果不需要显示淡淡存储bitmap实际上使用bitmapinfo就足够了,不要去setdibits之类的,因为 总是失败,我怀疑这个需要compatiblebmp,或许她只接受color index,总之在这些细节上纠缠无意义。我需要的是focus。其次当然是老范的一些错误,无非是上下颠倒,word对齐。但是最后我发现的问题折腾了 我一个上午,找到的rect脸部好像都是左眼部分,我是用的是所有face的xml,eye没有加入啊。而demo程序圈出的脸却是挺正确的,我一开始以 为scale的问题,可是detectobject的scalor应该是下一次探测的窗口的scalor,并不应该是得到的吧,我觉得应该我得到的就是眼 睛部分的,也许原本就是依靠眼睛来探测脸部的,我想我要去编译一下cv.lib来跟踪。总之,我觉得这是必由之路,这么复杂的软件只能从使用来熟悉,打算 华商两三个月来熟悉使用载体什么理解吧。与此同时,宽带路由在电信的上门服务下正确了,意味着我可以开始大规模搜索了。等有时间了吧sqlite部分集成 完毕。慢慢来吧。

十月三十一日 晴天

折 腾了一两个小时却在做从前早该解决的陈芝麻烂谷子,就是我心血来潮要写一个小工具需要类似xcopy的功能,结果写完了发现使用windows的 copyfile非常非常的慢,无奈想要从filemapping来寻找,却卡在了创建一个空文件的文件映射上,这个是api所不允许的,我却不明白,折 腾了半天才醒悟,只好判断一下空文件然后写4个bytes,这个算不算是基本的常识呢?我好像没有google到,也许输入的字词不对吧。找时间测试一下 速度?去游泳吧,好累啊。 结果当然是更慢了,你能超越api吗?

十一月一日 晴天

改了两行代码,找时间试验一下?要小心

斯琴高丽一个多么好听的名字啊,比那个半老徐娘的斯琴高娃好听多了。据说她还犯 了错


十一月五日 晴天

大概没有在中国的软件公司干过的人很难明白这种疲惫,几乎每天加班。不过,日子过得也还算有趣,因为记忆被磨平了。没天早上跑步,晚上回来的路上也 跑一两 站。买了一个40寸的tcl的电视,带高清解码,挺好的,当然你不能指望他能够解码所有的电影,而且对于dts之类的音轨还不能识别,不过还是挺好的。县 后沉沉隐天边,双十穆厝一线间,无须回朔洪文站,菜塘早已入云烟。


十一月八日 晴天

《blade runner》大概看了很多遍才能真正明白很多细节,这就是电影的真正的主题,生命的意义。下午还没有完成工具。

花了一天多的时间啊,才完成了这么一个小工具,这个是专门对付 “亿 赛通”的代码拷贝工具,原理其实很简单,就是偷梁换柱,因为亿赛通是动态加密,使用进程监视,所以,我就把自己假装成他要解密的进程 名字,所以,核心无非是一个xcopy一样的程序,不过我这个版本有不少的改进,首先是一个图形界面,把所有的替换,改名都集成省得用户麻烦的操作。其 次,使用共享内存来进行进程通信,就是创建具名的filemapping object,这样子就省却了第二次改名的遍历,但是进程间的同步复杂了不少,我使用内存最后一行的两个数字来作为通信,大概的意思就是通常的 producer/consumer的模式,当然debug困难了不少,需要使用debugbreak来进行远程调试。

最后在调试release版的时候,搜索到这个文章,相比是行家里手所熟知的,不过我还是学习了三点:不仅仅是debug宏的区别,优化和是否带 debug信息没有直接关系,当然我说的优化是指运行速度,如果说的是文件大小,当然debug信息是大问题了。需要不仅仅是编译debug信息,还需要 把debug信息编入debug信息数据库。在这里面有详细的介绍。我对于我的这个小工具还是很满意的,对了文件名的带空格的情况是刚刚才测到的,这些都 是一个需要注意的,要注意加引号。肚子饿死了。


十一月二十二日 阴天

晚上把《活着》又看了 一遍,这个 就是号称中国十大禁片之一的,其中葛优在法国 戛纳电影节最佳男演员奖,我觉得是当之无愧的,无论是化妆,演技,布景道具,音乐都是一流的,我一向不喜欢张艺谋的电影,这一步却是一个例外,相比之下, 巩俐我觉得比较假,就是女人爱美,不肯脸上抹上一点点的灰,头发梳得太整齐了,老外不傻一眼就看出了谁演的更加真实。电影的主题是深刻的,以至于80后与 90后完全不能理解,也完全不愿意理解,人们不愿意理解就是因为他们认为很多事情是天经地义的,根本不值得探讨,因为他们不愿意相信生活的残酷,不愿意相 信小人物的命运是一个彻彻底底的玩笑。这让我想起了《the last samurai》的那句台词,Kazimotuo在问Nathan:Do you think one can change one's destiny? Nathan回答:One doesn't know one's destiny until it reveals itself to one。无常,无奈,有时候是命运的别名。

google了一下,遭禁的原因如下:“诋毁社会主义法制,诋毁政党执政能力”,需要诋毁吗?我没有看过原著也不打算看,据说电 影已经淡化了意识形态,在很多所谓社会的悲剧由个人的悲剧来表现上含蓄的多,结果还是被禁了,我觉得这个被禁的理由的多余的,作为伟光正根本就不需要理 由,理由写下来就不会成为理由了,还不如干脆不写,所谓的“天威难测”。

在没有留下思想的日子里,我觉得和没有活着也差不多,这之前的半个多月应该是不算活着的活着,这就是大多数人的活着的意思,活着,活着,活着。


十一月二十五日 阴天

顾盼有明眸,婀娜似杨柳。

凋花入水水转愁,落叶随风风愈瘦。

凋花 入水 水声 惆,落叶随风风 色羞)

心游五洲,意在环球。

走,

傲游,

不停留,

什么时候?

你问个不休!

就在我转身后。

永远不能再回头。

一江春水一路东流,

怎及我心中万里离愁。

关于使用手机做modem上网是这样子的,连接必须设定为有代理,Proxy的地址是电信或者移动的的内部dns服务器,都是10.x.x.x的ip,拨 号是#777,帐号分别是 ctwap@vnet.cn  密码是。。。我忘了。大概是vnet.mobi吧。反正都是公开的,而使用pim的电信服务器手机自己是不需要密码帐号的,因为在代理或者网关处添加了 mdn号座位了唯一识别,只有pc端的访问,比如浏览器或者pc端的pim客户端才需要由短信发来的密码帐号,帐号都是手机号码,密码是一个随机数。现在 在仿真上调试效率不知道提高了几百倍,假如没有模拟器开发简直是不可想象啊。因为那样子打log,灌程序,arm编译简直比在超级计算机上调试程序还要困 难缓慢一百倍。而pim说到底就是一个在syncmail协议基础上的本地适配,这里适配的意思是几个方面,首先是各种同步模式的选择,数据库的指定,策 略等等,你必须实现一些协议指定的回调函数,比如产生一个vcard,并输入协议,从协议获取一个vcard转存本地数据库或者文件等等,记录应用于快速 双向同步的在上次同步之后发生的数据变化量,比如添加删除修改的记录。维护一个同步标志位,(这一点我还没有找到,本来以为是协议自身维护的,现在不确 定。。。)另一个方面就是所谓的和http协议的在socket层面的绑定,我不知道这个是不是syncmail协议之前源代码实现的,(猜想可能不 是),这个挺麻烦的,因为协议是工作在http协议之上的,对于socket层面根本不关心,仅仅要求你能正确的实现http协议,而在这一方面使用一个 异步的socket来实现http协议就是一个很繁琐的工作,我不明白amoi的程序员不再qualcomm的iweb接口上做二要自己实现一遍的原因, 很有可能是因为所谓的传说中的iweb接口的毛病。总之,这个工作量是挺繁重的,还好这部分似乎是正常工作的,出了中途用户取消再重来会死机意外。


十一月二十五日 阴天

由于我的过失导致水漫金山,所有 房间和客厅的木地板全都淹没在大水里面,偏偏我有加班到很晚,结果。。。

《the last samurai》是这样一部优秀的影片,以至于你需要看很多便才能理解,一个好的东西应该是这样地,单从外表普通人也能一望而知她的好,仿佛 《music&lyrics》里面所谓的music,想一个人的外表一样一眼就看到的印象,一听就能熟知的旋律,而更重要的是,她的美更加需要玩 赏,当你被他的旋律的第一感的打动之后再深入了解她的歌词,lyrics,你才开始真正明白什么叫做优秀。电影也是如此,平常人所谓的欣赏无外乎在一个廉 价网吧免费看在线的为了降低成本被压缩得无以复加的媒体流的充斥了无数令人厌恶的广告,忍受了众多的缓冲与等待,为了在心理上满足对于故事情节框架的目睹 与茶余饭后谈资的补充或者在同类中不甘被低看的虚荣的浏览快进。。。或者是四块钱购买的推自行车叫卖的整箱的DVD转RMVB或者所谓D9格式的汤姆库鲁 斯全集之类回到家里在DVD机上的条约与暂停。。。

然则,形式与媒介终究只是如music一样的影片的外表,不论你以什么方式接触只要你尊重电影出品人的劳动认真欣赏领会我以为并不算偷窃piracy,可 恨的是把一件艺术品论斤卖还振振有词才是真强盗。

我第一次看的时候被淹没在大段的日语式英语里面忙于领会剧情,只是被一个凄惨的结局而哀怨,那是一个时代的结束与另一个时代的开始,在冷兵器时代的英雄在 洋枪炮面前束手无策的困兽犹斗,仿佛是一个真正的悲剧,大概就是这些,我想大多数人都是这样的想法。

当你在反复看的时候,你产生了很多的疑惑与思考,你会在比较,美国的平定印第安部落叛乱的英雄和日本拥有千年传统与特权的武士有着某些共同的地方,都是战 争的学生,拥有者战胜对手的强烈愿望于为之付出生命的勇气,都有着基本的价值与荣誉。可是他们的传统与特长又是截然的不同,不仅仅是不同的国度,不同的文 化,更源自于不同的时代,这是冷兵器与热兵器时代英雄的充定义与再定义。就是谁是英雄?什么是英雄的灵魂,刀还是枪?都不是,是honor。这个大概是电 影的灵魂。

当你跳跃了电影的主线,你又开始对于电影故事的背景产生了诸多的感慨,1876年的日本和他的邻居,就是一对随时准备战斗的两个武士,文无第一武无第二, 抛开风花雪月中国传统的糟粕儒教文化,在战场上只有所谓的生与死,胜与败,商民族突然发现推崇了上千年的诗词歌赋这类分不出高低的八股文章每每在游牧民族 的铁蹄下被蹂躏,却至死被遗老遗夫们不离不弃意味民族的灵魂。真的武士是战场的战士更是战争的学生,他们要研究对手,为了更好的研究对手必须真心的尊重对 手,否则绝对不可能真正理解对手,战胜对手,作为一种文化来尊重胜败与荣誉本是为了武士阶级能够自觉的进步而设定的一个良性循环系统,文化的开创者都是有 着超越文化的真知灼见,只不过很多其中的精髓可作不可说。所以,在看到东洋武士战败刨腹自杀在商民族看来是愚昧的,为什么不等待东山再起?为什么不使用所 谓的诈降与谋略?是不是进化程度太低了,智商没有跟得上?也许这都是我们这些从来不需要上战场的非站人员的普通想法,假如没有所谓的生命的代价,战争的学 生是不会把比武太当真的,战场没有了生与死的考察,在一对一过程中不老老实实强调实力的较量,都会让很多梳着鞭子在北京天桥茶馆闲谈的大清拉拉队以为动嘴 皮子就能编故事杀人。在这片土地上几乎从来没有欧洲的骑士精神与东洋的武士道,大概国人过于沉迷所谓的谋略制胜。但或许是因为太多的被游牧民族的征服的无 奈后的意淫?1876年的日本和1860年的中国同样是战争的学生,在1894年的考试中分出了高低,伊藤博文在和李鸿章签订马关条约的时候推心置腹的唠 家常,30年前日本和中国同样的处境,甚至还要更糟,两国同样的洋务运动,同样地在国内遭到上上下下的抵制与挫折,然而日本最后在一对一的较量中战胜了中 国,还有什么能够说明这不是文化的胜利而仅仅是国人在《甲午海战》电影里意淫以为一枚鱼雷发射的偏差?武士阶级在电影里恰恰是日本反对变革的中坚力量,因 为他们在整个社会享有的特权如同中国的八旗子弟,然而八旗兵不需要刨腹自刎,结果战争成了儿戏,最后连马都不会骑了,那些普通汉人却依然对他们崇敬有加, 让他们享受着不该有的荣誉,让他们充定义了荣誉,最终整个民族在黄海大海战之后充定义了耻辱,活着,不管是苟且,还是偷生,都是对的。这就是民族的荣誉的 重载,也才衍生出了无数的皇协军与曲线救国。

回到了电影里的杀与不杀是我再看电影的疑惑,在平民严重残忍之极的武士的杀戮为什么没有加载到美国的武士,甚至让被杀者的妻子想照顾丈夫一样的服侍俘虏, 让战死者的遗孀子女敬重杀父者,难道真如圣经中的爱你的敌人如同爱你的亲人?我甚至萌发了亲自向日本人请教的愿望,虽然我都能够预料现代的日本人未必与我 们有多大的区别的回答。为什么不杀?开始的时候你都会明白那是为了作为情报的来源,了解敌人,是工具,然而这不过是胜元说给部下的理由。看了几遍之后你才 能体会这其中的真正原因。

在胜元的冥想中他看到了传说中的白虎被他的武士围攻中的困兽犹斗,也许那双夺人心神的虎眼能够带给他困惑的解答。作为天皇的老师却要反对象征神圣的天皇这 是无可宽恕的罪责,作为上千年的磨练的传统却要被西洋的铁路蒸汽机所颠覆,枪与炮能够战胜弓和剑,放弃至尊的特权接受新兴阶级的颐指,这一切的困惑是否都 有一个原因,或许在被众武士围斗下挥舞着猎猎的白虎旗的从万里之外而来的西洋武士带着他生命的使民而来,既然在濒临死亡的一刹那还绝地反击杀死对手,勇士 的生死考察已经结束,考试通过还需要交卷来再次决算生死吗?不再需要的是杀戮,因为那时在战场,战场下的学生需要的相互尊重与学习。人或有一死,或如樱花 的飘飘洒洒短暂而辉华,或如路边小草终死都无花露,或长或短也许需要的都是同样简短的答案。在电影的结束,他们都有了答案,胜元用自己的死让他敬仰的天皇 听到了他的声音,夕阳武士为自己赢得了捍卫自己所用生命来珍视的荣誉。

无论如何他们都是社会图谱的红外频谱或是紫外波段,普通人不会也不愿这样子的生活。夕阳武士在美国也是职能靠威士忌麻醉让自己以为自己是社会的一员,他和 胜元都是一样只能为了战场而生存,离开了arena就无法继续生存,这就是The Last Samurai,夕阳武士,一个来自西洋的末代武士。


十二月三日 晴天

所有房间的木地板全部被揭起来堆起来晾干,一塌糊涂。每天都加班,工作十个小时以上,我自己平时大概平均写自己的程序不到50行/天,实 在是好笑,因为比 较累,每天早上跑步到菜塘,这就使我的生活,无梦的夜晚。

Ibitmap的接口大部分方法都只是支持dst的bitmap必须是rgb565即native的colorformat.syncml的协议其实还是 蛮复杂的,或者是电信根本就是曲解?恢复被定义成了慢同步,我觉得非常的难以理解,不过这个也只好如此了。

经过近一年的体同身受我们可以得出一个结论,伟光正目前的统治不是在动摇反而是越来越加强了,因为虽然它本身越来越腐败,但是他的领导核心却在不断地推动 某些适应性的变革,这个导致推翻其统治在目前是几乎不可能。

dubai要破产了,这个又是一个大新闻。

一个小工具,花了我快一个早上在整理以前的代码,后来不了了之,因为之前一直想把pnglib的对于zlib的依赖整合到一个lib,不过还没有做完,最 后赶时间就拿原来的现成的。对于 createcompatiblebitmap要记住使用memorydc初始的是一个1x1的monochrome的bitmap,所以用实体dc就不 会有这个问题了。


十二月八日 阴天

每天都在忙碌中度过,只不过我完全不记得忙得是什么,如果超过两三天以上 的话,这大概就是常人的日子,木地板依旧堆得到处都是。如果你遇到uafxcw.lib或者uafxcwd.lib找不到的链接错误,那么说明你的vc是 默认安装没有拷贝这个mfc的静态库,从安装光盘在拷贝那个吧。u代表unicode,d代表debug,afx是大多数mfc库的前缀,也就是说如果再 遇到类似_beginthread,_endthread链接的错误应该要把某个mfc的库在第一位进行连接,最起码要在libc之前,(不过这一点,我 上一次很清楚,现在又忘记了细节)我的蜘蛛工程比蜘蛛爬的还要慢,大概平均一天只写不超过十行代码了。看样子人的衰老就使这样子的。使用搞通的 ibitmap进行透明色过滤的效果不佳的原因在于它的显示现在是rgb565的16色,而原始的png图片是32位,经过转换很多接近透明色的颜色在 rgb565上就和透明色一样了,于是我的图片边缘就出现了很多毛刺,现在解决的办法就是先把png图像处理到rgb565的bitmap上不过是我自己 做的bltin,过滤透明色,并且作alpha-blending,这样子的操作时建立在实际的背景色为目的地bitmap基础上的,也就是说是一个相对 固定的背景,没办法只能这样子。除非美工给我正确的使用了alpha通道来表示透明与否的图。但是代价当然是运行期使用我自己的rgb32-> rgb565加上alpha-blending,这个开销可能是不小的吧?不知道。


十二月十一日 阴天

昨天吃早饭我终于明白了我的pim的一个怪现象,这个完全是我的理解错误,有一个函数叫做getfreeid,我以为就是下一个可以使用的id,或者说 next available free id,事实上是有多少可以填充的空位的意思,这也就是为什么我的pim总是得到2,4,8,16,32。。。的原因,不过现在的问题并没有完全解决因为 ppp的网络似乎不稳定,因为我观察netmanager总是close,后来才在下班前发现,这个是那位amoi的程序员在每次接收之后都要去创建新的 socket,为什么呢?他在handshake的时候都去检查dns/url之类的变化然后创建新的socket,这个势必要的,但是检查变化了吗?今 天去验证把。昨天zy不见了。

我们来自不同的星球,

完全没有语言的交流,

只有游离的目光躲藏在面具后,

给我一个理由,

是留?

是走?

我的心想去下一个漂流,

是否?

什么时候?

回头。。。

加班到十点依然没有解决新增的备份的错误,今天解决了一个迷惑,就是因为amoi的程序员使用的http的header connection:close导致你必须每次都创建新的socket,改为keep-alive之后ppp的连接稳定的多了,在走出大门的瞬间我觉得 可能是我自己需要设定总的sendnumber,因为。。。星期一在实验把。今天,hs给我演示了怎样使用signal作两个task之间的通信,你需要 向一个公共的queue里面注射你的数据,使用一个signal来注册,并且监听,大概是这样子的,因为这个并不是rex的原生机制。早上使用我的小 spider检验了一下nanrenzhuang.net结果run了一天,看样子加上ui的可能是慢了一点。现在sqlite的数据库文件大概是 50m。


十二月十二日 阴天

对于sqlite来说内部存储格式应该是utf8,因为我在使用columndatasize得到的汉字字串长度是utf8的,但是当你使用 getcolumntextw之类的函数得到就是utf16,这个看似简单的事实以前困惑了我很久,因为当我得到数字或者英文的datasize看上去是 他们的字符数,我当时大骂高通的问当是垃圾,因为他说columndatasize得到的事字节数,我当时还专门去乘以2。看到美国总统每次登机都要对着 站立在直升机门口敬礼的地勤官回礼你才能体会到什么是人性化,你也才会感到为这样的国家奉献才值得。


十二月十六日 阴天

昨天大雨大病了一场,看样子是遭遇天谴了,因为我泄漏了谜底,得到了原本就期待的结果。As ring-bearer, you have to be alone。关于链接有这么一个有趣的问题,就是假如你有两个库,a,b都定义了同样的一个函数,那么你链接的时候到底用哪一个?会不会有问题。答案是 yes and no。假如你所有的链接的extern函数都可以在a,b任何一个全都找到,那么就不会有重定义的问题,你会使用首先链接的那个库的函数。但是假如你用到 两个函数f1,f2分别定义在a,b库中,同时函数f0在a,b库中有都有定义,那么你就会有这个麻烦,因为链接找f1,f2的时候需要找a和b,那么 f0的重定义就暴露了。所以,这就是mfc进行静态链接常常遇到的问题,因为mfc把libc.lib/libcd.lib里面的函数都重定义了一遍,那 么你必须要么使用mfc的静态库要么使用libc的库,不能交叉,但是vc是把libc当作默认的库一定要链接的,所以,你要/nodefaultlib 禁止他这么做,让后把mfc的静态库放在第一位,程序找到了所有的函数就不会在找libc了。

高通初始化内存的时候写cdcd,amoi的内存初始化为fefe。

Z turned me down just as expected. What else can I hope for? Ironically enough, during that stormy night, rain pours in and I felt so uncomfortable that I almost threw everything out of my stomach. Look like this is my destiny and journey ahead. I was so weak and sick that I was just awake and think all night long. In the following dayI could barely work and talk. Why should I reveal the mystery of riddle. If it is still kept safe, nobody will get hurt. Actually it is I who won't get hurt. 


十二月十七日 阴天

昨天电热水器不工作,太阳能因为几天阴雨都是冷的,只好去游泳池去洗澡,顺便干蒸加湿蒸来治病。今天证实了这个可能是sqlite的一个bug,比如一个 空的表,id是primary key,然后select min(id) from url那么你能期待什么呢?结果是返回sqlite_row,min(id)结果是0,这个显然是不合理的。我准备报告这个。因为这个停滞了进度好几天。

加入了sqlite-user的mailinglist,想报告这个所谓的bug,马上就有一个大虾告诉我实际上返回的是一个空的row,而那个0实际上 是NULL转为int得到的。所以,我在邮件里面说虽然这个也许不是真正的bug,但是为什么要返回sqlite_row呢?这一点看来还是一个bug.

今天晚上好冷啊。据说明天最低温度5度,这样的夜晚真让人怀念加拿大屋子里的暖气啊,虽说整晚上开空调也可以,可是客厅真冷啊。ftp的passwd改 了,是我的用户名中间隔开@最后是我得传呼号码。N说她no longer living,我说她想鬼魂,like a ghost, standing behind glass wall, watching the living world without touching. 然后她就没有回应了,我是不是太残酷了?L告诉我Don't wake her up, let her die. 于是,我不再回复她,她和行尸走肉没有什么区别,死了就死了,反正人迟早是要死的,就像有bug的手机一样,迟早要死机的。

她们都不会伤害我,因为我隔得很远,可是Z的冷漠让我很受伤害,假如我年轻十岁,我绝对不会放弃。可是这些有意义吗?

完成sqlite吧。


十二月十八日 阴天

早上去补牙。

大侠指点我sql语法:

> You are absolutely right that its type is NULL and min(id) returns 0 as I use sqlite_column_int64 to retrieve data. However,
> isn't it confusing that the "sqlite3_step" returns SQLITE_ROW which usually means some dataset is returned?
 
A resultset consisting of one row is indeed being returned. What's confusing about this?
 
> I mean, if it returns
> one NULL row, why doesn't sqlite simply return "SQLITE_DONE" or something instead of "SQLITE_ROW"?
 
An empty resultset and a resultset with one row that just happens to have NULLs in all columns are two entirely different things. Compare and contrast:
 
select count(*) from (select id from url);
 
select count(*) from (select min(id) from url);
 
> You see, as user I have to
> double-check its return type even after I get "SQLITE_ROW". In this sense, I think it is a bug.
 
Can you perhaps point to a clause in SQL-92 standard that SQLite violates here?
 
A query involving an aggregate function without a GROUP BY clause always returns exactly one row. This is how SQL works.

十二月二十日 晴天

早上再看电信的测试范例,再次证实所谓的恢复居然是所谓的slow-sync-mode,这个实在是没道理。晚上好冷受不了就去游泳池游泳了,实际上是去 洗澡,干蒸。 驱动安装一定会激活pnp manager的吗?

无意中看到L在上海的照片,心 头仿佛一块重锤的敲击,这大概是一种条件反射,如同我现在听到Z的声音一样,所有这一切应该都是一定时期荷尔蒙水平异常造成 的,回过头来看你会觉得很可笑,比如,我在给Z的mail里面已经无耻到只能说自己有多少名义上的房产了,因为我很无奈,没有什么其他的选择。

十二月二十三日 晴天

dpinst分为32/64两种,他的使用其实是很方便的,/LM是安装必须的,如果你没有使用签名的话,卸载很简单/U urInfFile.inf /U urInfFile2.inf,多语言的支持,估计需要2.0的multi-lin的编译版,我在下winddk,看有没有。/Q 或者/S可以在卸载的时候不再弹出安装的对话框,需要明白的一点就是安装的时候他检查pnp manager是否在busy,这个是由pnp发现新硬件造成的,只好等待他的结束,所以要提示用户按“取消”自动安装,很不幸 的是,我们的usb驱动居然要创建4个端口,就是说要按四下取消,很讨厌的。

主菜单很麻烦的,透明色是rgb565唯一能够使用的,因为压根没有alpha通道的时候你怎么做透明色,当然直接从rgb32bltin到rgb565 是可以的,不过这个不是很慢吗?所以,我是把png的rgb32先画在我自己的rgb565的bitmap上面,有alpha的就做blending,然 后根据alpha=0的条件画成透明色,这样在在真正的rgb565到rgb565的过程就可以过滤透明色了,但是这个是把图标画在静态的背景上,如果动 态拖动图标的话,就要使用透明色做背景的,不能做alpha混色,因为32bit到16bit会损失颜色。

十二月二十四日 晴天

公司提前两个小时下班,算是按照劳动价值折合了一些圣诞节的过节费。BRT太挤了我决定不去东坪蹭饭了,吃了一顿丰盛的羊肉粉丝煲套餐38元,物有 所值。 吃得真饱,忽然想听听钢琴曲,也许是因为牛排馆的钢琴伴奏吸引了我,我其实一向就喜欢“豪家香人文牛排馆”的钢琴,如果不是因为 今天吃得太多撑得厉害想活动,我一定要坐下来多多欣赏,那么就去walmart买几张钢琴的CD吧,网络上当然也有,只不过我喜欢品质化的小东西。也许是 因为年龄到了不惑,开始领悟人生的意义,我非常非常喜欢钢琴曲了,现在才开始真正明白音乐是有年龄区别,在二十几岁时怎么也不会喜欢古典音乐的。瑞景商业 广场上再上演所谓的元旦圣诞晚会,其实就是一帮年轻人在随心所欲的搞怪剧,比无理头还要无理头是什么?中国新的一代在成长,他们是颠覆传统的,蔑视权威 的,这真是令人欣慰的现象,说明中国不出二十年就可以完全的西化,这就是中国的希望。walmart的三张CD19.8元,只不过我期望的是钢琴独奏。晚 上收物业费的保安如期而至,四百多块/季度。坐在我新买的42寸液晶前欣赏浪漫钢琴,写下今天的故事,这就是我的平安夜。

对于这个project,我几乎已经完全失去了热 情,怎么办?暂时告一段落如何?

现在我心里纵有1000个留下的理由也会明白我会找到1001个离开的理由,Z也许本来就是我想要创造的留下的理由,可惜,她一点机会都没有给我,我觉得 这是对的。膝盖突然扭了筋,1月2日就要跑半程的马拉松了,无论如何要坚持下去。之后也许就再也没有遗憾了。茫然有的时候是没有路可走,有的时候是有太多 的路要选择。

我曾经对于LL有一丝丝的幻想,就是她能够在她使用笔记本电脑的时候能够偶然想到我,那个毕竟是我在那时候唯一的一份劳动所得的一半,我时常感激万人迷在 饭桌上的那番关于十块钱的评论,一个百万富翁拿出的十万元怎么也比不过一个不名一文的人的十块钱呀,那时候我至少是很真诚的希望帮助一个人。至于后 来。。。也许是。

致爱丽丝的曲调多么的悠扬。

我踏过四海,

悄悄地回来,

轻轻拂去桌上的尘埃,

逝去的时光不再,

心中有一丝丝的无奈,

音乐合着心中的节拍,

坐在沙发上发呆,

到底该不该?

离开?


十二月二十七日 阴天

Those who don't understand the past can not understand the present; Those who don't understand the present can not understand the future; Those who control the past control the present; Those who control the present will control the future; Those who control the present control the past; Those who control the future control the present;...

这个完全是一种文字游戏,但是其中有一部分是正确的,秦始皇统一了中国也就开始统治他过去的时代,它依赖的是焚书坑儒,毛泽东统治了中国也就统治了当时人 们对于过去的记忆,他靠的是文化大革命的不破不立,所以,统治现在也就统治了过去,只不过这依赖于它对于现在的统治,当猫老爷子归天之后,他对于过去的记 忆的统治就不复存在了。统治现在的政权对于未来的命运有着巨大的掌控,这个毋庸置疑,一切都取决于现在政权能够维系多久,千秋万载,并不可能,因为了解了 历史就明白了现在任何一个巨人都有倒下去的那一天,了解历史就明白了今天,以史为鉴可以知兴替。不理解今天根本谈不上对于未来潮流的把握,也只能把命运交 给运气大师来掷色子。

从超级计算机回到嵌入式系统一方面是对于全境的一个再次扫描,一方面也是对于不同领域不同特点的理解与学习。操作系统与计算机语言两门课的教授在教课的时 候更像是在将考古与计算机发展史,又好像是哲学家在谈哲学原理在计算机领域的具体运用。他们不像算法语言那样的单纯出自学术领域的硬碰硬的真理碰撞,更多 的是人类社会的初级实践,包含了太多的偶然性与无知大众对于高科技发展的儿童式的畸形影响,充满了软硬件相互间的制约与促进,一个个如win-tel联盟 似的事例比比皆是,城头变幻了太多的大王旗,正如M在关于所谓cpu-gpu的incarnation的精辟论述一样,忽而cpu的超速发展让图形计算集 中到了cpu,忽而gpu里的超级流水线的强大让图形计算甚至普通计算都想要移到gpu里面,如此反复轮回,用一些超脱具体问题的大哲学家的观点来看又是 所谓的螺旋上升,曲折的前进。在看似完全无关的领域里面出现了十分相似的发展规律隐藏着某种超级的规律,世人称之为普遍规律,然则,这个所谓的普遍规律如 果不能起到某种能够预测的功能,研究总结规律就是无意义的数据堆砌,如何抽象与具体化这实在是超级困难的难题。

昨天,再次试验的结果是非常令人沮丧的,各个网站将脚本改动之后,我使用的那个walkall的改造而来的parser就只能返回javascript: void(0),我无奈之下再次下载了webkit,可是,几个月来的断断续续的重复低级改造仅仅是为了制造一个数据采集器吗?我想还是回到基本的轨道上 来吧,opencv是唯一值得我去学习的东西,驱动之类的奇技淫巧并不能引领你走出困惑之地。一个人的能力真的宛如蚂蚁一样,更何况这只蚂蚁究竟是在所有 蚂蚁里面排位如何呢?然而就算是最强壮的蚂蚁又能干什么呢?

有一天LH在安装驱动,使用下载的例子,里面使用getmodulehandle获得setupapi.dll的handle来调用其中的函数,主要是判 断pnpmanager是否出于inprogress的状态,因为当硬件插入的时候pnpmanager去自动安装驱动的向导就运行了,使得你的驱动安装 程序被阻断了,不过,写那个例子的人应该不是windows programmer因为现在回想起来有些难以理解,就是她使用的setupapi的函数,却要用这种类似于loadlibrary的动态加载方式,这只 能说明他生活在远古时代,微软没有开放setupapi.lib的时候,或者他家里没有宽带可以下载wdk/ddk之类的,当然我也意识到了 getmodulehandle与loadlibrary的handle都是一样的,不过其中的小细节是,另一个例子里面压根没有用到setupapi仅 仅是想使用微软现成的dpinst.exe来安装,那么你还去getmodulehandle返回的当然是null,因为dll根本没有链接,为了强制链 接,我就随便加了一个无关紧要的函数,比如setlogerror之类的,就行了。

终于使用svn下载了android,不过我高度怀疑我有这个能力与兴趣,我花了几百块钱买的开发板也不过是叶公好龙,只不过一个trace才70块钱, 不买觉得不甘心。这个想法和女人买衣服有一拼。


十二月二十九日 雨

被gdi一个画鼠标轨迹的例子迷惑了好久,从前我都是直接在winproc里面捕捉wm_mousemove来lineto,然后也许需要 invalidaterect,在wm_paint里面实际去画,但是这个是否是最有效率的做法?例子是这样子的,当收到wm_lbuttondown之 后进入一个waitmessage的死循环,直到收到wm_lbuttonup,这中间需要setcapture,并最后releasecapture, 这个当然是辅助的。重要的是在waitmessage之后peekmessage过滤所有的mouse相关的message,就是说 wm_mousefirst,wm_mouselast之间的消息。然后在clientrect范围内lineto,当时,我看msdn上说 waitmessage类似一种waitforsingleobject的模式,就是yield直到messagequeue里面有消息,所以,我一开始 认为原来的那个我跳出来的winproc不会再被执行了,因为跳出来的那个waitmessage的死循环不结束就不会回到正常的winproc,可是事 实上不是这样子,道理很简单,可是我当时想不明白就是很奇怪,因为winproc是系统发消息并不是所有的queued message才能收到,比如sendmessage的消息应该不是被动接受的,是主动“推”的,因为我认为 sendmessage是blocking的,和postmessage把消息放到queue里面不一样吧?总之,有一些消息时会发过来的,比如 wm_cancel之类的,但是wm_paint是不会的,所以,他的优越做法是显而易见的,减少了大量的无关消息。早上我还想到一个问题,就是这个进程 的时间片是不是不包含这些non-queued的message,因为我决的时间片应该是在那个waitmessage的死循环里面?顺便说一下使用window和dialog没有区别。安装的wdk有问题,开机就关 机。。。


十二月三十一日 雨

从睡梦中醒来,这个已经成为我的问题,开着mp4睡着,如果电量不用完我就会被吵醒,下次充电不要充太满。白天A在msn上聊天,不外乎聊女人,他发过来 的所谓性向测试寓言只不过再次重复那个基本定理,男人与女人选择的标准还是那两样:sex and money。男人在几个候选项里选择胸部最大的,女人在几个候选项里选择钱最多的,实际上反之亦然。

昨晚看基督最后的诱惑太晚了,今天想把它看完。突然意识到整整一年以前我经过三十个小时的旅行回到这里,在午夜之前到达厦门,我的2009整整一年从头到 尾都是在厦门度过的。

Smiley face