wpe7.jpg (11495 bytes)

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

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

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

作者:黄教授

二〇〇八


一月一日 今天天气很好吗?下雪了

《runaway bride》实在是一部有趣的电影,我在想象我参加过的婚礼多少都是有些恐惧的,实在可以说是人生中最折磨人的时刻,不过话说回来了,作为逃跑新娘这个社 会多少是会宽容的,会把你当作冲破包办婚姻的新女性主义者或者是勇敢寻找自己理想的强者,对于逃跑新郎我只看到一两个,grant在《four wedding,one funeral》里面挨了结结实实的一记重拳,我觉得这是最轻的惩罚,大概新娘的娘家兄弟来的不多否则一定会让他来个终生残废之类的,因为女人的婚礼在传 统上仿佛就是超市买来的物品开了封就不好退货了,(这当然是中国的传统,这里在北美好一些,只要你保留了包装与发票在规定时间内退货是可以的,)电影里的 三个逃跑新娘的准新郎其实遭遇都还不错,因为他们最多被社会笑话笑话甚至还当作是同情对象,当然这是当那个新娘养成了婚礼上逃跑的习惯之后社会才认可新郎 是受害者,所以第一个新郎是最难当的因为人们会有对他有最多的猜测,随后的新郎一个个都会越来越受到社会的同情甚至敬仰因为他们勇敢敢于挑战别人不敢或者 不愿承担的责任与危险,去和这个被男主角,一个专栏作家,所称作的“man-eater”在教堂的婚礼现场决战,看谁更能忍受那种折磨看谁先逃走。我在国 内好像参加过不下二三十场的婚礼,每次对我都是一种折磨,第一婚宴总是很晚才开始,我总是饥肠辘辘,所以后来每次参加婚礼我都要先吃一顿,第二婚礼仪式实 在是千篇一律你有没有那种看电视台白吃主持人将非常白吃的话有吭哧吭哧将不出来你恨不得跳上去帮他讲出来的感觉?每次看听这样的场面对于一个头脑正常的我 都是一次精神上的折磨,你可以想象在中国当共产党的官员都是多么的经得起折磨因为那些冗长弱智的讲话你要天天经受着模拟的神经是多么多么多么的坚强,我只 有这个时候才理解共产党官员为什么总喜欢用酒精麻醉自己这样的工作一点都不必再“中美合作所渣滓洞集中营”李寿严刑拷打来得轻松,精神上的折磨一定是更加 的残酷。第三让我很感到embarrassing的是中国的婚礼的目的意义,原本我猜想一定是在原是部族群婚社会里突然宣告说你众多的性伙伴里面对于男女 成员各自减少了一个(那个时代同性恋还不时兴吧?因为这个东西对于增加人口没帮助社会不鼓励),为了让大家不至于搞错认清一下他们的面孔省得上错床引起不 必要的部族内冲突,那么把大家召集来看一看新郎新娘的面孔,(为什么是熟人朋友?因为这些人都是新娘新郎潜在的或者是曾经的伙伴嘛。)渐渐德在原始社会的 末期按照恩格斯的说法部族长老开始监守自盗利用职权把部族公有财产留给自己的子女于是私有财产出现了,婚礼成为显示私有财产多寡的一个时机,再接下去私有 财产的清单里包含了老婆的多少,于是举行几次婚礼就代表你有多少私有财产的一个标志了。同样的,中国现代婚礼多少也是一个社会地位与私有财产的展示会,新 娘的相貌也是要折合成一定的人民币计入新郎的家产的一部分的,同样作为拥有傲人身姿相貌的新娘野心欣然为自己代表的水涨船高的社会标底物而感到高人一筹, 这是非常自然的嘛,五六十年代在中国去一个漂亮的老婆大概说明你家里可能有所谓的自行车收音机之类的“三转一响”,大概八十年代是彩电冰箱摩托车吧,因为 按照马克思的劳动价值时间理论女人的价值也在增加,到了九十年代和今天大概没有价值百万的住宅美女是不会承认你在社会的位置的,同样的那个婚礼也自然不会 发生。在今天我想婚礼当初那种“昭告天下”男女伙伴“不要再和我上床”的意义越来越次要,而其社会地位的昭示作用越来越重要,电影里的女主角在解释她为什 么从婚礼上逃跑的一个原因时候说,她感到害怕因为她为每个准新郎改变她自己包括她吃什么类型的煎蛋,所以在婚礼进行曲中向那个她为之而改变一切的男人走过 去的时候感到惊慌失措,因为她差不多convince了那个男人她是什么样的女人而实际上她并不是,这就是大多数婚姻的实质,所谓“与敌同眠”因为你有一 晚上半夜惊醒发现身旁睡着一个陌生人,两个人都围了对方而作了适当的隐藏与改变只为了走进教堂然后在真实的家庭生活中摘下面具显露赤裸裸的另一面,很多人 只是在祈祷“假面舞会”结束的时候自己与对方的心理承受力不至于支撑不住家庭的重负。朱丽亚罗伯茨和 理查基尔的电影往往有很多小资倾向基本上是给社会的intellectual看的,很多劳动阶层对于其中的电影对白可能有理解的困难,揭示的问题和橄榄球 爆米花时装八卦新闻有一定的距离,里面有一段比较精彩的告白,凭着我很差的记忆里 复述如下,I can guarantee it will have hard time, I can guarantee there will be a time when one or both of us want to get this out, but I can also guarantee that if I don't make a choice now I will regret it for all my life.话虽然是好话,但是你怎么知道你会后悔?我要原本早上要做一个sprite结果看了这部电影什么都没做,真是耽误事啊。

制作sprite是不能用jpg的,因为去背景色的时候会失真,骗得过眼睛却骗不过程序,只能用bitmap这实在是很头痛的事情,也许这就是为什么 wesnoth用的是png的原因吧,据说这个是lossless的,可是微软的那个libpng.dll去哪里找libpng.lib呢,当然我可以采 用png.org的源码去编译新的lib可是如果操作系统有的我就不要再分发那不是更好吗?微软对于开发还是很讨厌的一件事。头疼啊。此外看那个png的 library实在是很麻烦,我有过看ijl的经历还是很头疼似乎更加的复杂吧?png比jpg更复杂对吗?终于在我的旧电脑里面找到了我曾经编译过的 wesnoth的工程。 我想用ternary-raster-operation来画一个silhouette可是我的头脑好像浆糊一样,对于黑白两色和前景背景亮色我每次都要 画一下真值表,在古巴的时候我干脆用一个256的循环把所有的可能性都试一遍,我觉得我现在是太懒了,懒得想问题宁可华裔两个小时写一个很傻的程序也不愿 花几分钟去想一想。


一月二日 今天天气很好吗? 好不容易出太阳了

关于ternary-raster-operation你要把所谓的post-fix想象成是一种stack来存放操作赋予操作元,比如SRCERASE =SDna那么你在wingdi.h的注解就可以看到dest=source AND (NOT dest)我一开始理解错了以为有两个独立的栈,一个operator,一个operand,就是简单的operator压栈,operand压栈,然后 两个同时出栈,其实不是的,而是一个共同的栈,类似于nested的挂号式的顺序,就是压栈顺序为SDna然后出栈的时候operator取决于一元还是 二元,比如a是二元,那么必须Hold住,等待下一个operator n,这个是一元的等待immediate operand,就是D,那么结果作为a的一个operand,等待下一个operand就是S。(我这里被微软的程序员耍了一下,猛一看NOTSRCERASE=DSon,我瞄了一眼wingdi.h发现是这样dest = (NOT src) AND (NOT dest)顿时紧张起来以为自己理解上有很大的偏差,结果你也知道,TNND为什么弄这种玩笑?直接写NOT(src OR dest)会很难吗?难道DSon这样不直观吗?我的方法画silhuette不能适应所有的形状。


一月三日 今天天气很好吗? 冷死了!

花了一天时间企图编译<wesnoth〉结果运行期有一个错误,追踪了很久不得不放弃,1.3版本以后据说用了booster更加的麻烦,看样子将来只有尝试linux下编译了,我觉得可能是自愿文件的问题吧?有一个image error,但是跟踪一次要十几分钟编译一次也要十几分钟我实在是无能为力了,运行的时候要设成window模式-w才能跟踪。今天学到两个小算法。

我觉得美国人是天生的战士,因为在西部拓荒时代人人都持枪。《the quick and the dead》


一月五日 今天天气很好吗? 有些冷!窗前屋檐下的积雪融化又结成冰柱掉了下来

M的damage-control应该是对的,这是我做不到的,有一小会儿我认为sort-first有得天独厚的优势sort-last因为无法解决透 明物体的问题实际上没有什么大用,但是睡了一觉醒来我才意识到M以前跟我说的,最后sort-first还要回到sort-last,所谓的hybrid 实际上最后还是要用sort-last来解决loading-balance的问题,那么如果sort-last不能解决transparency的问题 那么整个parallel-rendering就都没有什么意义了,而且在回过头来想想看sort-last只有在90年代才有意义,或者很小的数据要很 大的屏幕的时候才有大用,因为你要是一个一个primitive的检验坐标是不可能的,如果用hierarchical的idea比如octree之类的 spacial结构最终会有一个时候多个结构都落在多个屏幕分区上,那么这个数量会导致增加rendering node的努力失败,所以sort-first才真的是有scalability的问题。所谓opensg,我以为就是一个distributed scene graph,没有什么大的并行的方案,chromium不过是一个distributed opengl的版本,就是app不用重编译就能进行MDSI这类并行的效果,typically sort-first。那么刚刚兴起的所谓equalizer是个什么咚咚呢?我以为也不过是一个儿童玩具,大概就是对于单机多gpu用多线程来做并行渲 染,对于cluster他不过是实现最最原始的sort-frist,sort-last的简单功能,大概是用配置文件和回调函数(对象继承的函数重 载),反正pixel-merge居然是用的direct-send这种O(n)的玩意,可见是给初学者玩玩新鲜的幌子。


一月六日 今天天气很好吗?有些冷!窗前屋檐下的积雪融化又结成冰柱掉了下来

GetWindowInfo可以获得所有window相关信息。TNND这个是win2k的东西,又不行。你可以在WM_GETMINMAXINFO里面 修改default的max-size但是不能超越GetSystemMetrics里面设定的系统值,总之,超过系统最大resolution的 windows是不存在的因为没有意义。我觉得这条路不通。 真后悔没有保存一个版本下在我在被一个奇怪的现象所折磨!TNND,那个叫做GetWindowRect。最让人恼火的就是由一些基本的东西我想找人问一 下都没有,这就是孤独。为什么我的bitblt画的不是clientarea呢?好像把整个window包括caption都在画?为什么???

默认的应该都是window的左上角,所以如果你要映射clientarea,最好用setwindowOrgex把那个坐标系移动一下吧?(还没有试 验,应该是对的吧。)OffsetViewportOrgEx应该也可以吧?不用了,傻瓜,用clientToScreen, screenToClient转换就可以了,当然我还没有试验bitblt,应该也可以吧?证实了!TNND使用GDI还真的是有一点点地挑战,因为你要 takecare的东西真的不少,但是我相信我这样做是最正确地因为相对于API来说所有的建立在这之上的骗傻瓜的玩意一定更加的复杂,也许初看起来使用 容易实际上他们要记忆的东西一定比api来得多因为api都是按照最精简的设计的。(windows除外,这帮混蛋简直是毫无计划的乱输出一通API,明 明一条路可以的非要有多种可能性!怎么想的?什么叫做canonical?学过没有?)

<Keeping Mum>是一部典 型的英国式的黑色幽默或者说黑色喜剧,大概一部家庭生活剧很少会有人会把它跟serial-killer联系起来,尤其是这个killer是一个六七十岁 的面容慈祥的老奶奶,老奶奶年轻的时候和女儿失散了,丈夫大概是和别的女人偷情所以被她除掉了,后来大概看见不平的事情就喜欢用这样类似的极端手段解决, 关在监狱里几十年终于释放出来了就悄悄地跑到女儿家里做官家,女儿的生活可以说是一塌糊涂,丈夫是神父(mr.bean)生活刻板不会套女人的欢心,一心 一意传递上帝的福音,儿子在学校里总收到坏孩子欺负,女儿大概不停地交那些很糟糕的男朋友,在这种情况下女主人偷偷地和一个美国人就是她的高尔夫教练偷 情,老奶奶看在心里奇在心头,不动声色地悄悄剪断那些在学校里欺负小外孙的坏孩子的自行车刹车,当然这些小孩子都从悬崖上掉下去或者在公路上摔得半死,老 奶奶然后又把那个高尔夫教练除掉了,因为他偷偷来接老奶奶的女儿去墨西哥独家寻欢,当然老奶奶顺便也把讨厌的邻居杀掉了连同他讨人嫌的狗。老奶奶除了平抽 空杀人还引导古板的女婿在不到时候讲一些宗教笑话鼓励他多和女儿过过性生活,慢慢地这个家庭从破碎的边缘被拯救回来了,但是老奶奶杀的人太多了被女儿孙女 发现了只好吐露实情,当然已开始她们很难接受老奶奶这种爱的方式,老奶奶只好离开顺便把想要告发的另一个讨厌的邻居杀了,不过这一次仅仅用煎盘吓唬了一下 那个讨厌的老太婆就心脏病复发吓死了。那么多尸体都沉到池塘里自然要长青苔水草之类,结果老奶奶走后又花草公司来要清干池塘消除水草,老奶奶的女儿在妈妈 的教导下也学会了一不做二不休把那两个清水塘的干掉了沉到了水塘里喝一大队尸体作伴了。神父在一系列的实践中都蒙在鼓里,但是它深刻地感觉到了自己的生活 在一天天地好起来,于是写了一片布道词到基督教大会上宣讲,题目就是《God's Mysterious Ways》,应用圣经的话就是My way is not your way,对上帝的所谓最好不要多去质问,享用上帝的mysterious way就好了。这就是英国式的黑色幽默,这一类的代表自然就是著名的电影《一条叫做旺达的鱼》。

昨天晚上的片子也很有意思《Art School Confidential》,这是对于所有欣赏西方现代艺术的人的一个入门电影,有不少儿童不宜的内容,同时你看了一定会哈哈大笑不止的,这就是现代艺 术,你如果是在那个顶尖上你就可以肆无忌惮的做一个asshole,其他在下面的人你能做的就是cocksucking。粗鲁归粗鲁但是却是实情,大概一 个卧底的警察完全的儿童涂鸦被当作了艺术作品,西方大学里种中学生教授最丑恶的东西你都看得到。


一月七日 今天天气很好吗? 天气难以想象的暖和!

终于折磨到了一个头,世界的复杂就在于你犯的错误往往不是一个,问题的解决的困难也在于你需要把多个混合的错误一一解决,在大多数人眼里世界之所以神秘在 于你认为你改掉了你认识中的错误世界应当拨云见物显露原来的面目,可实际上还有第二个第三个的错误迷惑你的眼睛,但是有时候一个白痴也有上佳的运气用一个 完全错误地揭示碰巧在一个绝无仅有的机会上错搓得正,但是你可以靠运气成功一次,你不能一辈子靠运气,所以最终的道路还是要回到老老实实的探索与学习中。 这一次是两个方面的问题混合在一起,首先GDI有一点点状态机的味道,当然只能说味道,很多时候系统作了一件事就又把状态复原了,而你从他现有的状态你并 不能知道系统是怎么做的,而微软往往又不愿意告诉你,或者说不知道你原来不知道却想要知道,(废话)。其次,我对于一个window的组成总是概念模糊, 你我以为caption-title是天生就有的?我以为menu是自然而然就画出来的?client-area在没有caption和没有menu的情 况下肯定是不同的,对于程序员来说操心这个实在太麻烦了,所以所有的坐标都尽量让你用以clientarea左上角为原点的的坐标,可是window的 backgroundbrush当初并不知道你的clientarea有多大,所以默认的bkbrush(注意不是hdc的brush这是不同的)当然还 是从window左上角为原点,于是每次系统帮你做清洁的时候都回SetBrushOrgEx把这个brush平移到clientarea的原点,所以, 我们看到你load进来的bitmap之类的图示正确显示在clientarea的(如果你设定他为backgroundbrush的话,你曾经想过为什 么caption没有把它的顶部截掉呢?至少我没有想过,认为这都是理所当然的,以为天生的。)。再次,我一直怀疑有一个潜在的可能出错的地方,我获得了 hdc的时候忘记releaseDC是否会对我下一次获得起影响?我现在还不知道这是不是原因,但是凭直觉我觉得这应该是针对多线程同步的作用的那种 lock,应该对我现在没有影响吧?总而言之,GDI其实很简单,一句话你想干什么都可以,这就是我想追求的,而使用任何封装的高级的工具给我的感觉就是 在别人预设好的圈子里打转转让我有一种说不出的郁闷感。

TransparentBlt是win2k的,所以应该只有一条路没有选择。


一月八日 今天天气很好吗? 你知道今年的冬天有多么暖和吗?积雪都融化了。

看美国的大选实在是让人羡慕,美国真是人才济济,主要是一个好的制度能够让人才脱颖而出,这就是美国长盛不衰的秘密,一个众人皆知却没有几个国家能够做得 到的,民主制度在于能够举贤。我原本一向看好希拉里,可是这次奥巴马脱颖而出找是让我吃了一惊,美国不论是他们两个谁当选都代表了一个change,第一 个黑人总统还是第一个女总统,这都是一个巨大的进步,想想看美国普通人心目中已经不再由种族肤色性别的概念就知道人们注重的是人的能力,而今天中国的政治 仅仅从以前的老人正值走出来还徘徊在黑箱密室操作的阶段,人们选择领导人只能揣摩上意,完全没有什么人才的竞争机制,或者说他们竞争的只是密室斗争的能 力,这是国家的不幸人民的不幸。顺便说一下,奥巴马毕竟年轻演讲要强过希拉里,希拉里的演讲鼓动性和文采记忆力都比奥巴马差不少,而且谢谢家人的时候绝口 不提他的老公,可能还在为他今天的讲话生气,毕竟攻击性太强的言论不太好吧。

昨天发现原来《yes,prime minister》原来还有一个姐妹篇《yes,minister》,只好动用巨资在购买这个DVD,不过这个非常值得,预算委员会决定再怎么节衣缩食都要买。


一月九日 今天天气很好吗? 风很大。

看英阿马岛战争让人感到热血沸腾,英国在极端困难的情况下打赢了这场战争维护了大英帝国的尊严与荣誉,让英国人为之一振有了信心从衰退中走出来,今天英国 的人均生产毛额差不多是超过了美国大概在欧洲排前列,这场战争的胜负应该是有着重大的作用,试想如果英国打输了,今天的英国会怎样? 人生的最大享受就是躲在被窝里在一个风高夜黑的冬天的晚上看《yes,prime minister》,同时等待着<yes, minister〉的到来,同时品尝法国红葡萄酒。


一月十二日 今天天气很好吗? 还好吧。

终于我知道了battle-for-wesnoth运行期的问题,不是什么资源文件的问题,(虽然我还是看到了错误信息却找不到。)是一个coding的 错误,大概1.17版问题还比较多吧,同步的问题就很多,alex还提到说文件存储时候不是存当前状态而是存全部。有一个unit_animation的 基类,派生出很多子类,然后code用dynamic_cast把基类强 制转换为子类,你想msdn里面关于c++的说明是运行期检查类型信息这种错误抛出异常,这就是问题,我不知道这个版本的window版编译肯定是被改动 过,或者他们用的是vc200x之类的编译起比较聪明?总之今天费了我快一个小时才找到这个小错误很高兴!同时在constructor前的 explicit局msdn解说是对于多个参数的constructor是meaningless因为不存在convertion- constructor的问题,我对此将信将疑,总之,我想gcc和vc6有很大的不同,非常的烦人。(据说在这一点上vc6编译速度胜过gcc,没有比 较不敢说。)这两天一口气把<yes,minister〉都看完了现在开始反复看,其中的妙语连珠真是难以尽数,相比之下,日本的<别了,首 相>感觉要捎差一点,毕竟文化的积淀还差不少,其中最后的部分恰好和<yes,minister〉开头部分不谋而合,一个新官上任的新首相总 是哇哩哇啦将一同改革民主进步的措施,然后那些资深老练的公务员就微笑地告诉你说这些政策早已在执行了,哈哈这个下马威着实得厉害。

我个人觉得boost简直就是一团糟,里面定义了一大队的宏,居然硬要我使用lib,我找了半天才找到#pragma comment的lib定义,结果又有一大队问题,它倚赖zlib但是又把zlib改了什么,烦死了。我个人觉得这种开源大概没有什么人工作在windows平台上,所以人人都是些自以为是的傲慢的家伙。


一月十四日 今天天气很好吗? 还好吧。

另一个问题我搞错了,explicit对于constructor的修饰问题是conversion-constructor,并不是什么参数的conversion。比如A的constructor只带一个float的参数,那么你再用赋值A a=0.5的时候就会调用conversion constructor,如果你声明constructor用explicit的话就禁止了conversion。有意思的事如果你声明了两个constructor:explicit Conversion(long double f){} Conversion(int i){}然后你这么调用const long double l=4; Conversion con=l;你认为哪一个constructor会调用呢?当然是那个可能conversion的constructor就是参数是integer的那个。这里是关于type-cast的总结


一月十五日 今天天气很好吗? 挺好的。

GDI的一个真理就是永远都按照状态机的方式来处理事件,每次都保存原来状态最后在恢复,比如画背景的时候也还是要考虑clientarea和screen的作别变换,虽然重复但是省掉了很多麻烦。画hexagon网格最好的办法是用循环画polygon。

我现在明白美军在伊拉克的部队加装薄装甲的原因了,RPG是一种射流武器就是说它能够穿透很厚的装甲,早期的非反应装甲不是他的对手,因为你增加装甲厚度 赶不上RPG的威力这样不合算,但是这类武器有一个致命的缺点就是它只能在极短的距离起作用,比如在装甲表面爆炸产生的金属射流才具有穿透力,因此装甲车 之类的薄装甲车辆有一个简单的应对办法,在装甲外面再加一个保护网让RPG在穿透防护网的时候爆炸,这有一点点原始的反应装甲味道,但是简单有效,所以悍 马之类的薄装甲车辆也可以防御RPG了。

关于clienttoscreen我还是弄错了,这个坐标是针对全屏幕的,所以要知道clientarea的原点offset,我只能用嘴笨的办法把窗口 的原点和这个clientarea的原点求差值,这个办法实在是泰国尴尬了,但是有更好的办法吗?所以就是getwindowrect和 clienttoscreen结合起来求差。


一月十六日 今天天气很好吗?很好,今年的冬天非常的暖和,经常都是零下五度以上。

通过getwindowrect,clienttoscreen的综合得到clientarea的左上角坐标x实际上是边框的宽度,所以如果要完整显示图 片宽度加上两倍x,高度加上一倍x。设定SetwindowPos如果用SWP_SHOWWINDOW实际上是发一个消息,因此你必须在这个函数调用前用 setclasslong设定backgroundbrush。gdi里面有一系列的坐标变换可以尝试一下。

在诺曼底登陆的前夜,盟军的总指挥艾森豪威尔预先写下了一封登陆失败的辞职信,其实这样大规模的两栖登陆作战成败往往在伯仲之间,当时盟军哪怕掌握的完全 的制空制海权登陆作战仍旧面临着很大的失败的危险,隆美尔和当时另一位指挥官好像是曼施泰因对于装甲部队的使用上有着很大的分歧,隆美尔主张在登陆的那一 刻就要用优势的装甲部队把盟军赶下海去,曼施泰因则主张装甲部队靠后部署作为防守反击来使用,这样的分歧在日军防御硫磺岛的时候也发生过,就是在盟军这样 强大的海空力量下有多大把握打赢反登陆的问题,所以你可以看作是乐观主义和保守主义之争,在那样的情况下反登陆时要取得全胜还是拖延等待援军或者给敌人于 最大限度打击的问题,希特勒过于相信从东线调集部队的机动力了,当然那个时候德军捉襟见肘这也是不得已的办法。在硫磺岛防御的目的成为拖延因为在内无粮草 外无救兵的情况下胜利是不可能的,唯一能做的事让登陆方付出最大的时间与伤亡代价,那么按照同样的思想曼施泰因的想法就是固守待援,隆美尔则更加的富于赌 博心理,结果希特勒最终来了一个折中,一部分坦克部队靠前一部分坦克部队靠后,这实在是最大的问题,两种策略实际上都不能够贯彻,更糟糕的是希特勒开始嗅 到他的将军们正企图把他搞下台,在诺曼底登陆的一个月后就发生了那次著名的炸弹暗杀行动,所以当时希特勒坚决不把装甲部队的指挥权交给隆美尔而是一定要等 到登陆开始是有原因的,但是这正好更加映证了德国的将军们开始认为希特勒成为他们夺取胜利的绊脚石,到底孰因孰果实在是一个很难评价的事情。总之盟军的成 功是建立在巨大的优势前提下,德军的失败并非完全是因为指挥的无能,人力有时有穷奇迹岂能常有?


一月十八日 今天天气很好吗?很好, 但是风很大。

头脑中始终有一些误区,比如dc的brush和bitmap的关系,bitmap是dc的存贮空间,所以select了就可以存了,同时bitmap也是 brush的存储空间,可以创建patternbrush,但是归根结底两者并无联系。这正如dc的brush和backgroundbrush一样风马 牛不相及。回忆了一下关于hexagon的坐标问题,为什么会导致两个晚上的时间呢?第一是头脑不清楚,第二是问题的复杂。比如有clientarea和 windowarea的区别,其次坐标原点在左上的时候直线方程的斜率就和习惯不一样了,然后就是一个白痴的小问题,我为了节省一个变量就自然地把 row/2的整数除法结果来使用,就是说row=2或者3的时候应该是一样的,后来忘记了结果变成了row*value/2意义完全不一样了,这是一个教 训,不应该这样图省事,多声明一个变量halfRow=row/2要好得多!切记。

《art school confidential》是一部很好的片子,让你想到了小时候看《读者文摘》理解选的外国小说《他是死了还是活着》,所谓的艺术家大都不能在生前得到肯 定,所以四个画家抽签决定谁要死去,所谓的死当然是假死,就是向外宣布他死了然后他生前的作品就可以买一个好价钱了,这个从投资的角度看是对的,因为一个 人死了自然所有的作品都是绝版了,只能少不能多了,所以价钱就上去了,于是那个抽签的画家就只好一辈子隐姓埋名了,当然钱不回比另外三个少可是不能再“活 着了”。电影里面的艺术家也是如此,成了杀人犯关进了监狱就出名了。其中的所谓格言也不错,对于艺术的定义大概是人类的一种本能就是为了吸引交配的一种形 式,而所谓的“真正的”艺术家不是那种天天在《时代》杂志露面天天考虑餐后演讲的名人,应该是一日三餐食不果腹天天生活在narcotic moment of creative bliss,当然这些画家为了创作的灵感无所不用其极,酒精毒品女人等等,偶尔地杀几个人也是获得灵感的极好方式。

所有的烦恼都有一个简单的解决办法,那就是SetWindowOrgEx(hdc,-clientLeft,-clientTop)就是说把window的原点设定在clientarea的原点,这省掉了无比多的麻烦。

一月十九日 今天天气很好吗?很好 ,但是风很大。

这就是gdi麻烦的地方,我设定了windoworg,但是随后又被人改了回去,所以这个办法不可靠。同时getBkColor也得到白色即便你已经设定 了bkbrush,这是合理的吧,大概就是一个default值。使用TextOut你设定SetTextColor,SetBkColor然后可以使用 SetBkMode设定transparent就可以写透明字了,我猜想这个好似rop2的binary-raster的方法一样吧(胡说,应该是使用 hollow_brush而已吧。)一个非常简单的概念有耗费了不少时间,如果是做worldtransformation的话,你可以用bitblt, 但是设定SetGraphicsMode和SetWorldTransform的时候你是针对destinationDC的,我却“逻辑上”认为是针对 sourceDC,到底什么是简单的“逻辑”呢?看来要么我没逻辑,要么全世界都没逻辑,当然是前者了。还有一个逻辑问题,使用getwindowdc获 得的dc并不像我想象的仅仅是一个指针或者引用之类的(本质上是kernelobject表里的index),肯定是由某种lock机制,另一方面在强调 一下,gdi还是类似于状态机的你针对当前dc的所有操作释放后都失效了,这是好事,但也增加了一下麻烦,比如原本多重图性操作效果可能不一定是叠加的 吧?(有点糊涂了)不过bitmap旋转式很好的一件事!只是我必须得给我的sprite传递dc而不是hwnd,因为worldtransform设定 是针对当前dc的。让人百思不得其解的是旋转后的bitmap的坐标是怎样的呢?CombineTransform不是很正确,因为他大概就实矩阵相乘所 以你自己要设定好矩阵的default值,msdn说的都不算数,比如translate说出edx,edy都不用那肯定是不行的,你必须设定 default可是就是这样还是不大对。比如translate+rotate结果却仅仅是translate,可能bitblt还是有些限制吧。这部分 非常的糟糕,资料太少。


一月二十日 今天天气很好吗?很好 。

基本常识:一个bitmap如果被一个dc使用就不能再被select了,这是一个我总是在犯的错误,那么有什么bitmap复制的快速方法呢? GetDeviceGammaRamp我猜想适用于校正gamma,应该使用一系列的rgb值来描述颜色变化吧?(什么时候才会有这种应用?艺术家的眼 睛?)

超级白吃的问题!我的vc6是n多年前从国内带来的盗版,(这也是我唯一正在使用的盗版软件吧?哈哈)那么为什么很多windowsAPI我的编译器都说 没定义呢?这个问题很简单就是版本的问题,在windows.h的宏里面还是WINVER0X0400那当然有问题了!我当年大概还是在用win98的年 代就有了这一个盗版吧?这个问题大概是今天使用.net的人不会有的问题,或者vc6应该自己在安装的时候就检测window版本: GetVersionEx来改写那个宏定义,难道是因为盗版的缘故他不敢检验或者删了这一段?(啊,现在才明白,故事还很长,因为那个vc6版本是一个类 似于试用版的东西,大概是针对win98之类的,因此不光是头文件,连同lib文件都是一致的,所以简单更改这个是不行的!user32.lib之类的都 不全。)关于bitblt的worldtransform有一个问题就是它是以原点为圆心的旋转,所以应该要做两次变换,试验一下吧。刚才玩得有一点点心 跳,说来不值一提只不过我从来没有这么做过,所谓编译都不过是.h与.lib的游戏,操作系统当前的dll是可能千变万化的,比如win98, win2k,winxp的dll可能都不同了,那么当时的编译器vc6可能只能适应当时的dll,而是用老版本的.lib.h,那么 PLATFORMSDK照理说应该使编译器无关的,可是我觉得微软的platformsdk2003并非如此,可能我还是要做什么样的修正才行,这也是为 什么他建议每次运行都要设定环境变量,这个实在是很烦的事情。总之,我目前简单从platformsdk替换了我的vc6的user32.lib,把我的vc6的include的windows.h的winver改为0x500, 于是就可以EnumDisplayDevices发现我的显卡有两个display_device,还有一个netmeeting的虚拟的 mirror_driver之类的。很好。TranslateBitmapBits看起来很有用的样子,以后试验一下吧。GetDCOrgEx不是我想象 的样子,不知道是什么东西,现在有好几个origin我不明白,一个是window的,一个viewport,一个clientarea,从world- ->page-->device-->physical这一系列的变换的坐标分别是什么呢?要记住使用float类型的三角函数!!sinf, cosf,这种低级错误!OK,证实了,combinetransform和数学上的定义一样的,你可以定义变换的次序,比如我要让sprite转身,那么你要定义先移回原点在旋转,就是自转,反之为公转,当然我所不知道的事情是bitblt必须是从原点到原点,就是两个dc都是从原点开始,这是我一直出错的原因!!!


一月二十一日 今天天气很好吗?很好 。

CreateColorTransform不是我所想象的用法,完全没有关系。做bitblt的时候使用自身的dc仅仅靠更换bitmap用 srccopy是无效的,这个不知道为什么也许是因为自己不能拷贝自己吧?使用createbitmap有一个问题就是微软的bitmap是合别人的不一 样的,是上下颠倒的(当然这取决于你怎么看上下的问题),但是从数据的角度看,你是从数组的头获得图像左下角的部分,所以(是这样吗?还是因为 window坐标原点在左下上角所以先从左上角画图?)总之,要用createDIBitmap才行。使用GetDIBits能够取出你希望的格式,这个 要做为alphablend的数据还要在处理,实在想不出使用jpg的任何好处,为什么大家不使用png?这真是奇怪的事情,也许图性公司内部的确都是使 用png之类的,只是我不知道而已。(或者大家早就在使用32bitjpg也是可能的。)哈哈,天大的笑话,我没耐心,读了上句就不想看下一句,大概白吃 都会想到不应该所有的alphablending都是perpixel的就是说如果没有alpha-channel也是可以做alphablending 的,这就是常识,所以api不可能设计的那么傻,问题是msdn的描述让我感觉很简陋,为什么一定要premultiply alpha呢?仅仅是因为处于系统处理速度的考虑吗?也许是有道理的,如果一个api非常的慢那么很可能根本就不开放,这大概就是原因吧?再重复一遍常 识:bit操作不可替代算术操作,尽管有某些算术操作可以用bit操作来实现,比如与零的一系列操作(有意义吗?)这也就是为什么单单使用bitblt始 终无法实现某些效果的原因,除非适用alphablend,这个应该是离散数学的问题吧?什么是canonical的operation? 也许就是不可替代,(有交集吗?应该没有,也许也有,不过这个是定义的问题,我们可以把一切与零进行的操作不定义为算术运算,而是逻辑运算,于是就没有交 集了。)这个让我想起来在古巴度假的日子里我把ternary-raster-operation的256种运算统统尝试了一下,我想知道的是这些定义是 否是有某种数学原理,比如这些运算span所有的其他运算通过他们的组合?(不过也许更准确的说这是个无意义的问题,本来就是canonical的运算来 组合,只不过这256是目前大家常用的而已。)因此这是个无意义的问题。

这个实在是太初级了,我现在才发现getWindowDC和GetDC的区别,一个是clientarea,我费了很大劲去变来变去原来都是因为这个关 系!bitblt最常见的错误是我的width,height不对,实际上能够获得dc得数量很大程度上取决于内存的多少,当然win98/95据说只有 5个,因此我的函数迪归调用不断获得dc应该问题不大,当然这种做法应该避免。如果要让sprite研中心旋转,destDC的x=- bmwidth/2,y=-bmheight/2,srcDC的x=y=0;translate的偏移还是从左上角到clientarea的原点,(这一 点似乎一开始比较的出乎我的意料但是想一下就明白了,左上角的偏移量),


一月二十二日 今天天气很好吗? 不是吧?

需要纠正一个错误认识,当位图作为brush的时候填充会按照module原则重复,但是bitblt却是严格按照source位图的大小限制,因此当 dest比src来的大的画就是相当于nullbrush的空,因此你不能用这个来画一个mirrorimage,只能用xform的transform 来使用reflect。(我不知道我从那里得到的这种错误印象,也许是因为我自己一列一列的画得到的印象吧?)我现在刚刚学到region发现我的很多工 作可以交给gdi去做,比如我的hexagon如果用createpolygonrgn的话我就不用烦心point是否在hex内的问题了,这个是标准的 cg算法,就是数有多少次和boundary相交,这个在scanline里面有两种模式:alternate,winding,一个是boundary 无方向,一个有方向,所以,重新改写!!!这就是hex的简单的办法!!!这也就是我怀疑的 简单的办法,battleforwesnoth因为要跨平台所以只能自己去写,我粗略看了一下,他的办法不会比我的简单多少,当然他还要返回最近的和次最 近的hex,这一点我没有做,不过这个并不复杂,总之这不是什么很复杂的东西,但是很不容易写对,遇到九组组和判断出错的机会非常的大。msdn里面有些 是明显的程序员写作风格,忽略细节忘记参数。createcompatibleDC的时候会自带一个默认的1x1的monochrome的bitmap。 BeginPaint我现在才开始明白它主要是用来画一个path的,这个很有用,可以做clip。SetWindowRgn就是你所需要的全部!

《The Cat People》是一部老版的同名电影,就是八十年代末重拍的那部片子,1942年代美国的中产阶级生活已经远远超过我们的想象了,生活质量和现在相差无几,不过唯一让人讨厌的事男男女女都抽烟,尤其是在任何地方抽烟。

Region非常的强大!我想我现在才开始接触一些gdi的核心的部分,就是clip,path之类,一条光明的道路在眼前展现 。终于找到了TrackPopupMenuEx。回来再说吧。

重新学习advancedrendering&animation的讲座才开始明白很多,原来在本科的graphics里只是了解一个名词的并不 真正明白,现在才开始明白一点,对于数学的要求其实还是有一些的,比如c0,c1,c2 continuety之类的概念在calculus里面似乎不大提,或者使用另一个term,或者我根本就忘了,总之现在明白为什么在飞机汽车设计中那么 重要,因为这些都是流体力学里要求的,作为工具graphic必须要满足他们。回顾这些经典理论你也许会觉得没什么了不起,可是科学就是这么积累的,作为 全人类也不过就像一个个体一样一点点地积累而来的,所以从这点来看我还有太多太多的空白了。学一点是一点吧。 我一直对于menu有一个理解到误区,从用户的使用角度来理解大概看过计算机的就不干说不知道什么是menu,但是从程序的角度来看实在是不简单,今天明 白了一点,createpopupmenu+trackpopupmenuex就是目前我需要的。


一月二十三日 今天天气很好吗? 下雪了

clipping和path还有region是gdi的最核心,我玩了快一个月才刚刚开始接触这个,的确windows的核心是消息,gdi是 windows的灵魂,目前应该说windows是世界上最复杂的软件系统,“复杂”有很多的理解,大型计算机也许也复杂但是针对的使用者都是专业程序 元,基本上很多东西都没有,唯独windows是什么都要兼顾。今天有一个很搞笑得故事,RGNDATA和BITMAPINFO类似的都定义了一个类似的 char buf[1]或者RGBQUAD quad[1]的东西,我从一开始就百思不得其解,既然是不定长又何必要用这么个1长度的数组?结果我也没办法当参数取传入来获得,也不能赋值自己建造, 究竟微软的程序员当初是怎么想的?如果是考虑size要alignment与dword着我还能理解,但是实际上也不是。使用getRgndata就更搞 笑了,我从一开始阅读msdn就感觉这个玩意可能要call两次,赶紧google了一下,果然第一次长度和指针都用空来获得实际长度,然后分配内存再 call一遍,于是从这一点才能明白当初某些微软程序员是怎样思考的,这一类结构的设计很粗糙有可能就是只让输出使用的,或者标准的用法就是treat as byte stream,then allocate memory and then you use pointer。也许是故意不把char buf[1]声明称char* buf是希望使用者惊醒线性内存分配的提示, 让你不会犯错误,我想这大概就是原因吧!ExtSelectClipRgn总是有毛病,第二次就只能得到null-region了,不明白, GetWindowRgn也有一个dirty-trick就是普通的classic-window原本是没有windowregion的,所以你会得到 error,这实在是ugly,所以现在一旦遇到莫名其妙的问题,我的第一反应是赶紧google,否则你会为这些奇奇怪怪的问题浪费不知道多少时间。 rgn是一个对象,一定要记住创建,使用ExtCreateRegion创建的是变换的region,和坐标系的变换完全无关!记住不要double变 换,可以想象是几何体的变换,这不属于整个坐标系的变换。CombineRgn是正确的,现在的问题是extSelectClipRgn为什么不对呢? 吃完午饭在实验似乎是对的,GDI时常让我有一种不稳定的感觉,也许是我的电脑中了木马之类的,我有很强的感觉我的电脑被人装了hook,很多时候键盘按 下去反应时间很长,哎,这个世道实在太乱了。使用extSelectClipRgn的时候脑子里面的集合操作的“diff”有顺序关系,xor则是 diff的绝对值(和顺序无关)。


一月二十四日 今天天气很好吗? 不下雪了

我完全的忘记了上个月我在干些什么:

bsub -n 32 -o binary32.txt -ext "SLURM[nodes=32;exclude=n14]" mpirun -srun ./binarySwapText.exe

我有时候会被蒙蔽因为我不够坚定,比如你运行p个process的时候你想让每个process产生不同的随机数,通常我们使用srand(time (0))就足够了,可是在cluster上为什么我看到的时一样的结果呢?根据这样的现象我居然开始怀疑我运行的是否为多个版本,恰好我随手运行bsub -n 8 mpirun ./myGatherTest.exe系统很懒惰的就把那个孔显得node的8个smp的内核分配给我了,这样我看到的当然就是在同一个node上的八个 进程,为什么随机数也是一样的呢?你会不会像我一样的开始怀疑1+1=2?很简单的事我对于这些庞然大物还缺少敬意,事实上cluster很大的一个技术 在于始终同步上,这一点是系统级的,我侧试了一下几乎精确到毫秒级,这是非常非常可观的,考虑到我的测试方法本身就有局限(就是简单的 gettimeofday),可能比这个还要高!这是非常不容易的技术!所以time(0)这种秒级的数字当然是一样的,(就算毫秒也是一样)。这就是 cluster的技术所在!难怪人家要卖几百万加币!

再次强调一下,lsf与slurm没有什么“空间”上的差别,所谓partition是一种概念,就是说bsub之类的shell都是工作在这两者之上的 提供了“调度”“容错”等等的功能。等等,我的记忆好像消失了,我才想起来我是使用remote-graphic的shell所以他事先就去分配了运行的 资源,所以这个和slurm,lsf无关。mpi_allgather的使用很简单,就是sendbuf实际上和recvbuf可以无关的,但是一般人都 会用一个长buf,然后把sendbuf指向自己的block(就是自己的index所在的block)这样就collect了。gdi+里面有一个神奇 的“color-transformation”真是闻所未闻!

电影频道的最大好处与坏处就是他不停地重播同一部电影,每次我看《art school confidential》我都要大笑不止,如果说艺术家大部分是疯子的话,学艺术的女生就是疯子中的疯子,而疯子在英语里面有很多的词都有细微的差别, crazy,mad,insane,lunatic,mental disorder,nut,maniac,hypersexual也可以说是一种疯狂吧?frenzy?影片里面有很多东西你不一定能够真正明白,也许本 来就是导演留给观众的,比如男主角的老师sandy到底是一个欺世盗名的伪学者,还是一个有些真知灼见但是大部分时候郁郁不得志只能沦落到一个 cocksucking的失败事例?女主角对男主角的所谓吸引是否真的入她的lesbian伙伴所说的仅仅是fallinlovewith every talented painter?或者这正是导演所谓借学生的最说出来的主题,艺术原本就是这种弥补attract mating不足的手段,或者因此而导致的情绪宣泄,我想后者大概更符合弗洛伊德的理论。中国传统文化一方面肯定食色性也,另一方面又是重要把他们肯定的 某些形式从这一框架里剥离出来,这在我看来真正是pathetic。

ExtSelectClipRgn的返回在跟踪情况下不会正确,因为当时的窗口并不显示,所以正常情况下都是complexregion的返回值变成了nullregion。

The SetMetaRgn function intersects the current clipping region for the specified device context with the current metaregion and saves the combined region as the new metaregion for the specified device context. The clipping region is reset to a null region.

这个也许揭示了为什么有的时候你的clip-region是一个nullregion。使用saveDC,restoreDC可以达到类似于opengl的pushmatrix,popmatrix的效果。

《decoy2》这种搞笑得电影绝对的让人无话可说,college-hot-chicks are all hypersexual aliens。而识别这些blonde alien的办法就是看她们是否有bellybutton,或者是否总是说hot。


一月二十五日 今天天气很好吗?不下雪了

关于HRGN还是要转变一个观念,就是在大多数函数里面必须先创建,比如combineRgn里面不能只用一个handle来承接返回的rgn,我想系统 会自己释放内存的,(就是rgndata里面的那个buf),听说GDI+里面有浮点数的坐标这真是一个好消息否则gdi里面anti-aliasing 带来的问题实在太麻烦了,大部分操作如果你自己一个像素一个像素的变换一定很难看的,因为锯齿问题太严重了。 使用同心圆依次作为cliprgn并结合缩放来画ripple效果或者是fisheye效果都不太理想,因为太慢了,这里的原因是我不能够把bitmap 作为brush来fillrgn因为brush并不能缩放,必须用bitblt结合cliprgn一次次地画,结果特效变成了动画,这实在是搞笑,另一个 简单的途径但是我一直逃避,就是最直接的pixel操作,因为我有过直接操作bitmap缩放无法完美地rasterization的问题,就是浮点与整 数转换填充的问题,这就是我为什么说听到gdi+支持浮点坐标是个好消息的原因。坐标变换里面比较麻烦的事情是rgn和hdc的变换的同步,比如同样一个 xform的transform你可以使用setworldtransform来变换hdc的坐标系,但是要变换rgn要先获得rgndata在用 extcreatergn来创建,那么做后你画的时候就可以在world的原点了,如果rgn不牵涉到变形,比如仅仅作为clip来使用那么使用 offsetrgn更加的方便。总之,坐标变换我总是搞错,每次都要试验好几次才明白,这是一个比较痛苦的地方。

放大镜使用scale,bitblt加上cliprgn,但是效率还是不高,如果使用mousemove事件的话图像有比较大的话flicker比较严 重。看了一下windows自带的magnifier我觉得功能差别还是挺大的,因为那个是另外开一个窗口仅仅把screen的图像按照固定倍数放大一次 然后进行平移,而我这个却因为不断要在原图上修改效率当然差很远了,那么怎样改呢?

Stanly Kubrick真是一个超级天才!他的电影总是引起巨大的争议,然后十年后成为不朽的经典载入史册。


一月二十六日 今天天气很好吗? 很好,出太阳了

用像素变换的办法作了一个fisheye的特效,效果还可以但是效率和我估计的一样不行,我猜想原因在于getpixel,setpixel这种api是 非常的昂贵的,也许直接把bitmap拷贝到内存操作会好一点,不过这很值得怀疑,另一个就是因为我要不停地在鼠标移动的时候把变换的部分抹掉 bitblt的操作也是很昂贵的。今天另一个收获就是我怀疑extselectcliprgn这样的函数不会自己清楚状态,就是说releasedc并不 会为你恢复原来的cliprgn,这是我的猜想,总之gdi有不少的毛病,至少我经常发现有些莫名其妙的问题,比如第二次运行的时候现象就消失了,我猜想 一定是我修改了什么状态出错以后系统没有及时恢复,要么就是我电脑里的木马太多了,昨天下载了一个免费的avast查出来一大队的木马,这个在我的意料 中,只是我实在是懒得重装系统,我有些硬件的驱动可能找不到了吧?这实在是麻烦的事情,(又一个木马居然是藏在我的声卡应用程序里,难怪我的声卡总是出毛 病?)所以,总而言之,如果extselectcliprgn然后就使用null在恢复原来状态,这样也许就没有毛病了。


一月二十七日 今天天气很好吗? 很好,出太阳了

用alphablend函数又一个很好的应用就是增亮背景,这个是我一直想要的效果,用bitblt无论如何做不到,但是这个函数又一个小问题,就是如果 srcDC和destDC是同一个的时候你可以把不同部分的图像进行混合,但是src与dest的部分不得有重叠部分,在我发现这个问题之后重读 alphablend的说明发现这已经提到了,哈哈我没有耐心去读而已。所谓的增强要纠正一个我的误区,我始终有一种错误的想法就是按照颜色值乘一个系 数,这个实际上是做不到的,用同样的位图作任何alphablending都是原图,如果你使用黑色刷子倒是可以按比例调暗,但是有什么样的办法可以按比 例调亮呢?我觉得仅仅依靠alphablending是做不到的,用白板能做到的是所有颜色都增加一个常数,这个也许就是gamma增强色吧?但是使用过 就知道这是有一点失真的,当然如果预处理的时候按比例硬要造出一系列的按像素亮度变化的alpha当然是可以的,不过这有一点点地假吧?试验一下。 ExtFloodFill原来是这样子的,很好很好,大概就是学图形课里面的flood-algorithm吧?再提醒一个超级简单白吃的问题, fopen如果不用"rb"模式读单个byte可能会失败,大概是非字符的都不对吧?另外png是使用big-endian的,所以要记住啊。 折腾了一天我实在是搞不懂,StretchDIBits为什么不能够转化jpeg和png格式呢?难道是因为设备不支持?ExtEscape返回都是0按 照msdn的说法是没有实现,这不是搞笑吗?可是并没有报错啊?oleloadpicture不能使用png格式,真是倒霉。


一月二十八日 今天天气很好吗? 很好,出太阳了

如果出现link2001的问题,大多数时候是这样的,你使用的事dll,所以需要multi-thread-dll不能够用静态库比如 libcmt.lib之类的,这其中的原因我还是不十分清楚,今天和昨天又花了差不多一天一夜在编译libpng的库,说起来ijl和他非常的相像,基本 上是windows平台上的噩梦,因为windows平台的程序员一般比较天真以为这个世界上都是和自己一样的傻瓜,同时window上制作dll实在是 要比linux麻烦不少,我今天大概有 犯了一个错误吧,就是我已开始要把库编译成静态库,然后链接到我的程序里,因为libpng用的是纯粹的c,就是文件后缀明用的是.c这样vc就按照c编 译,而我的project是c++结果链接的时候调用约定不是_cdcl我当然要用extern "C"来改库的头文件,结果库有不答应了,因为我使用的是共同的头文件,结果又要编译完了改回去,我当时并没有清楚的意识脑子一团浆糊,过了很久才明白过 来,干脆全部强制用/TP的c++编译省掉了混合编译的麻烦,这实在是头疼的事情,我差不多把所有的时间都花在了编译链接的问题上了,至于说png转换为 DIB的毛病我还没来得及看呢,这就是痛苦的地方,明明是图形的问题却在编译上画了这么多的时间。debug宏命令实在是痛苦的事情,我只好用 #pragma message("my message")这样原始的办法一块一块地找,非常的麻烦。费了浩大的劲才找到了正确的macro的组合产生dll的输出,注意如果dll没有 dllexport定义的话是没有输出lib的,这是个常识。 找了好久才找到,如果定义宏的时候,比如把函数返回类型,参数等等用一个结构来包装,那么这很可能需要一个通用的宏,结果我忘记了这个宏的变量还包含一对 挂号,结果结成了双挂号,我找了好半天。ijl与libpng都喜欢这么干。

msdn的话不可全信,比如 SetDIBitsToDevice的src坐标说是左下角的坐标,结果我被折磨了很久都看不到图像,去看别人的源代码,应该给的是左上角,当然图像是翻 转180度的,于是你在解压缩pgn格式的时候要先进行上下处理,这里面转了好几个弯子,我有些想不清楚,也许msdn说的是对的,但是讲的不太清楚,总 之,花了浩大的力气才把人家的libpng制作成了dll供以后使用,这个工作其实也不轻松吧,因为这个library和ijl一样光是看懂使用就有大段 大段的代码,难怪这些年来直接使用png与jpeg的很少,jpeg大部分是用intel的库,有些人用oleloadpicture,还有些就是使用从 ijl小小修改的所谓面向对象的库,比如有个什么image的玩意,干的和我差不了多少,(实际上我怀疑连intel的都是从ijl改来得。)对于png 那简直就更少办法了,绝大多数人都使用gdi+来做,但是我实在是讨厌那个要已开始初始化的gdi+,所以坚决不用。在强调一个重复了n多遍的问题, SetDIBitsToDevice得参数看似两个,一个是bitmapinfo,一个是具体的bitmap-bits可是不要被他骗了!实际上这个是“线性”分配的内存,就是说bitmapinfo后边就是数据,或者是index,或者是rgb,你不要以为可以分开来。(这是不对的,两个是可以无关的,哈哈又犯了一个主管的错!)还有一件事,就算你在头文件里面有那个dllimport,dllexport的宏,可是不知道什么原因我居然还要在声明一个extern"C",这似乎有问题。

还有一件事我不理解,png的格式里面,就是IHDR里面的bitdepth我的理解就是bpp,可是结果总是8,难道我理解错了?简单读了一下, bitdepth有别的用途,就是可以作为gama的计算,实际上bpp并不一定有意义,因为dib根本就不care反正是truecolor。所以,这 是我的误区。

看电视里现场直播的布什总统在国会的演讲,整个讲演过程布什总统没有讲稿,全场每隔两三分钟就全体起立鼓掌,演说内容涵盖国内国际的方方面面,布什总统讲 的激昂流畅,令人十分佩服,我想这里面没有什么空话套话,因为你肯定记不住的,就凭着一点我觉得共产党在国一百年也没有办法找出一条让人才脱颖而出的办 法,国会里有一两个议员在打瞌睡结果被记者拍到了,这就是民主国家的新闻的威力,你做大官有如坐针毡,不想中国的官员都是老爷太爷。 几乎可以肯定的是SetDIBitsToDevice不能转化png与jpeg,不知道为什么msdn这么说?


一月二十九日 今天天气很好吗? 很好,出太阳了

gamma矫正据说应该放在系统颜色部分去做,这样节省了大量操作,png的gamma就是先把文件颜色变换到0-1之间,然后计算gamma变换,在 gAMA存储里面gamma值是乘过100000的,所以,sample = integer_sample/(2^bitdepth-1)变换到0-1,sample = light_out^(gamma/100000)还有一个重要的事实我忘记了,png里面的颜色是bgr,记得要转换,我费了很久才明白,实在是有一点 点让人泄气。非常的令人头疼,dib如果用SetDIBitsToDevice的时候,你要事先把png的上下颠倒,bgr->rgb并作 gamma矫正,但是如果你把这样的bitmap作为hbitmap的bits你得的又是一个上下颠倒的图,因为hbitmap不是DIB而是DDB,这 怎么办呢?注意我使用createbitmap来制作的。终于解决了,使用StretchBlt有两点注意,src的左上角是0,h,高度是-h,哈哈。同时明白了一个误区,bitdepth跟bpp不同,他指的是一个channel的,所以rgb要乘以三。

微软真是混帐,不,应该说是intel的那帮人比较的混帐,搞出一个什么little-endian,我都已经被搅得头昏脑涨了。在bitmapinfo 里的colortable是一个个的rgbquad,{bgra},但是微软自己定义的颜色colorref却是0x00bbggrr,现在你该明白问题 了吧,其中的rgb顺序颠倒了,(注意是32位取址模式下,按照little-endian的结构,rgbquad在内存里是“实际的顺序”是argb, 而colorref的实际顺序是rrggbb00,我实在不懂为什么当初要这样定义?)所以,问题处在bitmapinfo的colortable定义的 是bgra的顺序使得png必须这样转换rgb->bgra。

还有另一条途径创建这种bitmap,createDIBitmap用于把这种dib变为ddb,这个就不再需要使用stretchblt了。 折磨了很久很久我才明白我的白痴,什么样的alphablending可以成为透明色?不能想当然!如果blendfunction里的 constantalpha设定为不用0xff,那么alphablend是按照每一pixel的alpha作blend,dest=src+(1- alpha)dest,那么请问什么情况下才是透明色?仅仅透过改变alpha是永远做不到纯透明的,一定要把src变为纯黑呀!这是制作sprite的 唯一方法,可是我有种错觉以为有了alpha通道就可以在不破坏原图的基础上做到sprite效果,这是不可能的。(这种问题是否太白痴了?)png可以 有alpha,于是写了一个小小的函数传递一个backgroundcolor去修改颜色制作sprite,这个要比传统的执作mask的办法好一点点, 就是指需要call一次alphablend函数,而不需要两次bitblt,但是bitblt是纯粹的bit操作应该要比alphablend的 src_over操作来得快一些。


一月三十日 今天天气很好吗? 风很大

gamma矫正非常的重要,尤其是screen-gamma的差别非常大,这个大概是各种显示系统的问题,比如pc一般是2.2,(在libpng的帮助 里有一些基本的介绍),createDIBitmap的初始化部分可以现象是用户传进的数据,必须用户自己释放,只是作为初始化而已,我为了确信作了一个 简单的测试。这个函数可以保证你创建的hbitmap是一个windows可以正确使用的handle,所以很有用,当然前提是你必须正确地读取png, 还是要记住,上下颠倒,rgb顺序颠倒,gamma矫正,(backgroundcolor我觉得完全没有什么用,也不知道怎样用?)


一月三十日 今天天气很好吗?风很大

整整一天时间我被自己的错误所惩罚着,我不知道为什么我会得出昨天关于gamma矫正的结论,难道说我有幻觉?gamma矫正的确需要但是你可以交给 libpng去做,比如使用png_set_gamma函数里面传入screen的gamma2.2你不需要再次自己去计算gamma,我也许是因为变异 环境复杂导致的错觉或者是代码版本错误的问题,总之,今天画了一天的时间学到了一个简单的事实:如果你不按照png的建议去该系统的gamma-ramp 那么就只好使用这种gamma校正的方式,同时记住你得原始数据就改变了,这样从windows系统读取getdibits的时候就是现成的数据,不需要进行rgb顺序转化,但是你还是需要上下颠倒。 理所当然的你的png很可能是没有gamma的。我感到不太理解的就是如果png需要gamma的时候除了file-gamma之外你还需要screen -gamma,而当png根本没有gamma的时候你却不需要screen-gamma,(我试图解释,原因是因为我loading的时候已经根据pc的 gamma作了矫正2.2于是存储文件的时候,是适合pc的png,如果在mac显示问题就又大了,这实在是一个麻烦的问题,除非我loading的时候 不改变screen-gamma而是改变系统的显示的gamma就是保存原来的文件属性,这样存储文件的时候就不会有screen-gamma的成分在里 面了,在mac显示的时候只要加上mac的gamma就可以了。)但是这个实在是太罗嗦了,为了一幅图片去改变系统的gamma实在是不可能的事情,所 以,我现在明白了如果你要写一个游戏在window,mac上都运行正确或者用两套图片文件,或者在游戏开始的时候进行必要的系统gamma调整,这实在 是。。。 我想我终于可以吃晚饭了,我翻了一个异常低级的错误然后为此花了好几个小时debug,很经常的,我感觉我很可能实在是太差了。比如从rbg扩展到 abgr我的code是正确的,可是我忘了如果从rgba到abgr我的code就是错的,上一次我被问到做swap我就脑子一片空白的这么做,现在我有 这么干了,实在无话可说。(png用的大概是network-order,所以是rbg,rbga,windows用的是little-endian,所以是abgr,bgr)暂时放一个备份吧,我的实验太乱了。


一月三十一日 今天天气很好吗? 阴天吧。

感觉比较混乱,我比较讨厌libpng必须额外加一个zlib,不是我对于他有什么意见,都是开源的跨平台的都挺好的,不过我想简单一点做成一个dll, 试验了半天比较的没有主意,zlib的macro写得比较fancy,参数写得很奇怪也许是为了不同调用约定压栈的缘故吧?总之没找到合适的宏,最后只好 先把它编译成静态库,又用了一个它的ZLIB_INTERNAL的宏才成功,顺便记忆一下libpng的编译的宏,省得以后又要用#pragma message来找半天:这个东西原本不值一提,对于c语言的专家也许是小菜一叠不过对于我却非了不少功夫才找到,PNG_BUILD_DLL, PNG_NO_MODULEDEF,PNG_DLL,另外pnglib里面有一个png_set_bgr可以声调我自己转换的麻烦,效率也许会更高一些 吧。

《3:10 To Yuma》是一部神奇的电影,大多数中国人是很难理解的,反正我觉得作为中国文化熏陶下非常难以接受,当然如果看过《red river》之类的也许稍微容易些,所谓的信仰是一件非常难得事情,一件毫无所谓“理性”的东西,比如你相信一件事你基本上不需要理由,也基本上不去考虑 什么现实的后果,从生物进化的角度看这是一个覆灭种族的特征,注定是要被淘汰的,可是这确实是一件非常珍贵的东西,你要牺牲很多。 你知道最白痴弱智的电影是什么吗?《house of dead2》就是《僵尸战记2》名字是我自己翻译的,大概你可以想象很多人的脑子大概比大猩猩还差不少。


二月三日 今天天气很好吗? 记不清了。

感觉精神不好,洗衣服的工程又推迟了,因为我又找到了一件替换的衣服。地图的算法远远比我想想的复杂,实际上我已开始完全没有意识到这是有关地图的算法, 我以为简单的flood算法就够了,可是。。。如果我需要的仅仅是rgn是否需要silouette?我想不清楚,下午我以为convex-hull就可 以了,后来吃完晚饭才发现地图比convexhull复杂的多,最后我得到了一个不准确的结果,有很多噪音,首先小的rgn丢失了,其次有很多尖角的 rgn有多出来了,输入美国地图我得到了230个rgn,比美国的州多出了将近两倍,当然本来有些地图边缘不规则多出来了,大的州看上去是对的,丢了夏威 夷等小岛,还有就是四色问题,着色是一个很复杂的问题,对于下一步计算rgn之间的相邻关系是在是一个很不好解决的问题,我当然可以使用 getrgndata从变原来着手可使微软的rgn的定义可能和我想的不一样,边缘的点是否准确十个问题,而且计算量也不小,总之算法不很清楚。更糟糕的 事我心情格外的不好,想起了很多很多,关于ll也许。。。早上看了一部<china syndrome>的老电影,这个名字和中国一点关系都没有,是一个核技术的名词,觉得这个世界实在是很不安全,假如一两个核电站的操作员突然有什 么离奇的想法的话这个地球可能就成为地狱了。<election〉这部电影也很有意思,印象深刻的事美国的高中生的学生会主席的竞选的认真程度超过 了中国国家主席的竞选,当然难度也超过了中国任何一级官员的选举,如果美国一个普通高中学校都是这样的话,你可以想象这两个国家的人的差别有多么大,社会 发展到一定程度对于人的需求往往不在需要传统上的所谓“知识”,比如在中国的传统教育中心算能力的要求很高,这对于很多智力发展也许是对的,但是这是一个 open-question,如果计算器可以做的工作是否还需要人去做?我想更多的时候要求的是怎样使用计算器而不是把人变成计算器。当然很多人不同意这 一点,这也不奇怪,我也不是完全否定它们,总之这个问题不那么简单。

msdn说的不准,也许是因为我得版本太旧或者xp改掉了什 么,GetSystemPaletteEntries返回值总是0,同时你想用null指针获得palette的个数也不会成功,同样适用 GetDeviceCaps使用sizepalette也不行,总之我只好数了一下,是10个,记住就好了。此外想了半个晚上我猜想我找到了微软的算法, 应该是一个computation-geometry最简单的办法,就是用scanline来扩展rgndata的办法,排序也只需要对set的比较方法 的functor定义为从上倒下,从左到右,试验一下看看对不对,然后使用extcreatergn检验一下我得结果。

非常非常非常的复杂!看美军的训练我感觉有一点就是,不需要勇敢聪明的士兵,但是需要勇敢聪明的军官,下级军官素质决定了部队的战斗力,感觉pla现在的士官水准大概不比八旗兵强多少。

看陈文茜访问谢长厅的访谈感觉这个人其实还真的是象李敖评价的所谓“全台湾最聪明的人”,相比之下可能那个什么马英九实在是一个绣花枕头,但是所谓大巧不 工,在美国人民经历过尼克松的水门事件后向卡特这样的老实木匠反而会成为人民的宠爱,这就是民主。陈文茜这个肥婆其实还是比较伶牙俐齿的。 陈水扁跑到南海去干什么?我有一个大胆的假说,这是从“中天新闻”得来的启发,就是当初美国人很关切阿扁会不会再下台前挑起两岸冲突比如扣留大陆渔船,我 当时评论说大陆不会在乎个把渔民的生命财产所以不会有用,但是如果在南海挑动国际纠纷却不能说没有一点机会,所以这也许是一个投石问路,或者说阿扁在下台 前没事干,邦交国都跑遍了,没地方去了,所以只好到处找地方跑,所以就去了。


二月四日 今天天气很好吗? 非常的好!

昨天晚上写了一个非常复杂的mergeRect的函数,但是效果并不好,而且现在看来这个与微软的rgn的实作不相符,比如圆的rect分割就是一层一层 的,你需要解决的事degenerated rect也就是segment如何与邻近的segment融合为一个rect的问题,而不是把邻近的rect分割合并为最大的rect,因为创造一个最大 的rect连带无数朵小的rect并不见得减少了rect的总数,所以没有什么意义,而且没必要。另外一条路也并不好,我曾经想用path来创建rgn, 但是path如果碰到分叉,合并问题一样很复杂,更糟糕的事我得试验证明beginpath内只能是单向,就是说你的path不能“分进合击”最后汇合, 而必须要“一条路走到底”,类似于一笔画做法,这个更加的复杂。我现在唯一不太情愿的就是把相邻的segment融合为一个rect的时候产生的误差的问 题,简单的取平均肯定有不少问题吧?(且慢下结论,如果我把方向问题留在最后合并时候在解决不就好了吗?比如先建立一系列的subpath,然后。。。我 觉得这个比较的好!好的。)


二月五日 今天天气很好吗? 不知道。

只有看《yes,minister》才能让我暂时忘记我得烦恼。CreatePolygonRgn 有毛病,因为这些顶点在使用PtInRgn的时候居然返回false,这是怎么回事?左上角属于rgn,右下角不属于rgn,这是有原因的,好像是连续性 的问题,比如黑白图,对角线的从黑到黑,与从白到白不应该交叉,但是对角线分别为黑白的话就会交叉,于是只能去掉一个对角线的从属关系,这样一个rgn内 部不再有这种交叉的问题。


二月七日 今天天气很好吗? 下雪了吧。

怎样解释int a=25;int b=a++*a++;结果b=25?原因很简单但是我却把expression-evaluation和operator的precedence混在了一 起,表面上看运用operator-precedence来看a++应该同时开始计算,但是,从函数的角度讲*是一个函数要先进行参数 evaluation,a++是一个expression所以,要evaluate,结果都是5,因为原本a++就是返回没有inc的值,所以,我觉得有 人问这个宏有什么错?#define SQUARE(X) ((X)*(X))我是觉得没有什么错,错也只在使用者的逻辑,就算是你加上挂号这么做(a++)*(a++)了明确了优先级结果也是一样的。当然这个宏 是错的:#define SQUARE(X) (X*X),这个事我以前经常犯的错误忘记了会有操作符优先级引发的问题,(就是不能有expression作X)

#define SecondInYear 60*60*24*365UL结尾这个ul很重要,我还是第一次见到这个。

__FILE__这是与文件的文件名。 美军的伤亡为什么小?因为战场救治好,越战期间99%marine的伤员都生存了,你想半个小时内medevac的直升机就能赶到战场运走伤员这是什么样 的效率?越战期间大部分是海军陆战队在作战。有一个奇怪的现象我解释不了,如果基类的constructor声明在protected里面,那么子类是不 能调用的,而其他任何protected的方法或者数据成员都没有这个问题,为什么?

<The Pursuit of Happiness>是 一部非常让人感动的电影,will smith的确是一个出色的演员,你很难想象一个人是怎样在那样艰难的日子里度过的,我以前觉得中国的穷人日子过得很苦,美国的穷人要富裕的多,可是很多 时候日子的艰难是人的心理感受,比如你处在一个人人都需要尊严与体面的社会里失去这些的痛苦远远大于人人都不在乎的社会里来的大,痛苦往往不仅仅是来源于 物质上的匮乏,肉体的痛苦又时候比精神来的容易克服,有时候。特别是一个非常smart的小伙子非常非常的有进取心,有责任感追求幸福生活的勇气与能力让 人觉得特别羡慕,当然也感觉非常非常的敬佩,但是那绝对不是普通人可以做的到的,想想看一个人每天紧紧靠几块零钱生活,走投无路以至于在地铁厕所里借宿, 同时在顶级的投资公司力作没有工资的实习生,唯一的希望是全班几十人里面只有一个有机会得到六个月后的工作机会,不但要养活自己还要照顾儿子,每天晚上在 交汇慈善机构排长队等待避难所里的住所,被房东扫地出门,白天推销,以至于要靠卖血暂时维持生活,等等,这也许就是所谓的美国梦,因为不管怎样他始终没有 失去希望。这是一部非常好的电影,中国人应该了解美国的穷人的生活,可能比加拿大的穷人更加的困难。


二月八日 今天天气很好吗? 没有下雪。

我花了很久也没有找到重载"reference-operator"的办法,主要是语法上和"address-operator"没办法区别,应该是有办法吧?如果有谁知道这个就是专家了,专门搞奇技淫巧的专家。what is new?


二月十一日 今天天气很好吗?没有下雪。

很久没有玩坐标变换了几乎都忘光了,或者这是一个借口因为以前也不是很清楚,gllookat实际上相当于camera设在原点,向z轴负方向看去,那么 你要进行一个相应的变换,比如lookat的eye是[0,0,-10],center是[0,0,-8]所以你看到的matrix里面第一项是负的,我 为此想了好久都不明白,(我都忘了我是怎么使用lookat的,还以为就是纯粹的object变换坐标呢。)所谓的viewport- transformation我一开始不是很清楚,因为openGL里面我没有看到变换的矩阵,modelview,project都有matrix为什 么viewport不需要呢,后来才明白,它是不用matrix的,用一个vector表达,viewVector(winx,winy, winWidth,winHeight)所以,你就知道了,求得cananical的[-1,1]的小立方体的坐标后,进行一个乘法就可以了,不过要记 住,winWidth-1,winHeight-1,同时window坐标是原点在左上角,所以最简单的应该是x=(x+1)* (winWidth/2),y=winHeight-(y+1)*(winHeight/2)

差不多将近一天我才想起了右手法则,真太糟糕了,因为我忘记了这个最基本的常识于是我发现所有的逻辑都不对,由此我也惊叹我们周围有一些宇宙最基本的法 则,我以前常常在想为什么基本粒子要有一个自旋的属性,难道这是宇宙最基本的特征值吗?我想应该是的,所以,掩饰一下我的过错就说我又重新发现了最基本的 物质属性:自旋方向,笛卡尔坐标不是一个随意定义的坐标系,在二维的时候我是靠记忆知道x,y的相对位置,但是在三维的时候你必须要依靠右手,当时我在学 图形课的时候其实没有意识到其中的意义,opengl的坐标变换在第一次学习的人眼中实际上是基本的照猫画虎。所以总结一下,opengl里面的 matrix是这样的顺序,modelviewMatrix*projectMatrix,所以后来的modelviewmatrix都是从左边乘过来, 因此在vect*currentMatrix的时候相当于最左边的最先变换,(也许用stack来实现更加准确),那么viewport- transformation相当于scale winWidth, winHeight,translate winx,winy,当然也可以写成一个matrix,不过我的疑惑是为什么opengl没有开放这个matrix给glget?也许因为平台的缘故吧? 这个东西交给glut之类的应用library去做,或者是因为还有困难不能统一?

看《yes,minister》有一集说的是部长大人批评公务员是非部分是moral-vacuum,但是最后他自己也不得不做同样的事情,晚上边喝 whisky边向太太诉苦,太太安慰他说,他和公务员不一样,他还没有真正成为moralvacuum,只不过有conscience但是不用罢了,好像 whisky priest。我听了很有同感,很羡慕whisky,不过我还是偏好red wine。


二月十三日 今天天气很好吗?没有下雪。

hp的说法是现在版本的mpi library(libmpi)即便是你使用多线程哪怕多个县城都在call-mpi只要不是同时都可以,只有在多个线程同时都调用mpi的时候才需要链 接libmtmpi,而以往的lib则需要link -libmtmpi哪怕你自己保证多个线程每次只有一个调用mpi,所以这就是我那天小实验的疑惑,我用pthread作了多个线程调用mpi,我当时没 发现我使用默认的lib有什么问题,其实问题不在编译,而在运行,这类问题有时候小实验是很难发现的,编译命令为mpiCC -lmtmpi source target我总是忘记不需要lib字因为这是默认的,只要你的library命名为libxxx那么编译的时候就只要-lxxx就行了。TNND这些都 是纸上谈兵,我从来没有尝试过,结果一实验就不行了,首先确定如果是普通的non-thread-compliance-library调用 mpicall一定会出错,但是使用-lmtmpi链接的时候有出错undefined reference to `MPI_Type_create_subarray'这个是明显的linking的错误,但是我尝试了各种-L都不行为什么?


二月十六日 今天天气很好吗?非常好。

脖子疼得要死。我猜想boundingbox对于occlusion有很大的关系,所以。。。linux下STL的实现非常的不同,set.insert 如果take一个iterator指示插入位置,函数并不返回iterator,同时equal_range如果找不到的话也许返回的就不是一个区间了, 因为STL的区间都是[)的半开区间,你说怎么返回吧?


二月十八日 今天天气很好吗? 不知道。

老生常谈的问题,windows定义的rect或者说region的面积是指包括左上边,左边,不包括右边,右下边,所以计算面积right-left不 需要加一,这个启示本来都是正常的想法,不知道为什么我会想到加一?也许因为我总是有画轮廓线是region本身的概念吧,至少contour- tracing是这样做的,这也是一个小的区别,一条水平线段,用window的rect表达bottom=top+1,可是在silhouette里面 也许top=bottom,这比较的讨厌吧。

看美国独立战争,非常的令人感动,独立战争之初民意是怎样的呢?只要看一看<common sense>的销售量达到了圣经的销量就知道在大街小巷里人人都在心里呼唤着推翻君主制。华盛顿曾经遭遇了一连串的失败几乎是山穷水尽的地步,在圣 诞节之前,国会甚至号召所有的州在同一天祈祷上帝,在出击德国雇佣军的前夜华盛顿自己选择的口令是victory or death。在当时应该有一首非常令人感动的民歌《Johnny's Gone For a Soldier》 其中的歌词讲述的是一个美国民兵的恋人怎样竭尽全力支援前线,倾家荡产给自己的男朋友买一支步枪,这样的军队的士气当然是英国职业军队所缺乏的。纪录片里 说在十二月的寒冬里大陆军还有很多人是赤脚或者使用布缠足。林肯好像也被俘虏过?是投降。独立战争是一场旷日持久的战争,美国的通货膨胀大概有 2500%,大陆军里有18000人当了俘虏,有一半死在监狱里,独立战争的艰难远远超过了我的想象,因为我忘记了美国人的对手是当时的世界霸主,大英帝 国。

天天看英国的官僚体制,回过头来看日本的总理大臣感觉还是有不少差别的,但是有一点我觉得比较难以相信,就是日本妇女的地位真的如《再见了总理》中那么高 吗?但是有一点我的印象非常的深,日本的官僚平民化已经一点也不比欧美国家差了,总理出门并没有让十字路口的警察改变交通秩序,总理夫人对于当不当总理一 点都不在意,甚至冷嘲热讽巴不得早点辞职走人,对比法国的第一夫人上台就离婚就可以理解在一个平民化的政府里总理绝对不是什么人人都热衷的特权阶层,东亚 政府中也只有日本有这样的雏形。

咱们的人民政府来了一封信说多给了我将近三千块,我不知道这是上一次的还是什么,反正我从来都搞不懂事怎么回事,总之,只有信政府的。外面的天气很好,下 着小小的冰粒子,天气一点都不冷,可是我的心里却很冷。从来没有这么感觉沮丧,生活仿佛是一个轮回,不知不觉又走回了起点,人这种动物最多只有十年的信 仰。


二月十九日 今天天气很好吗?不知道。

以前的东西又忘了,(*it+=3)=100;实际上*操作符优先级最高所以变成了模板类的type的引用+=然后再赋值,所以iterator丝毫没有位置的变化。

在美国独立战争期间,魁北克是英国一个十分重要的要塞,与补给基地,据说那里储存有权北美最大的弹药库,美国人派了两只远征队去夺取他,结果付出了成千人的代价几乎全军覆没,而魁北克方面伤亡几乎微不足道,大概十几个人吧?


二月二十一日 今天天气很好吗? 是的。

我把prerequisites改成了heap的版本,现在就简单多了,当初我不理解这个问题,总认为可以一步到位计算sorting,问题是真正recursive的数据结构是不存在的,数学家认为理所当然的东西不一定存在于现实中。

花了半天时间安装新硬盘及操作系统,这是一个很好的选择,原来的系统我基本上不去动他,在新硬盘上装新系统,万一我需要运行久系统或者有什么软件设置等等的我还可以靠改变bios启动硬盘顺序切换回旧系统,perfect。


二月二十二日 今天天气很好吗?是的。

昨天折腾了快板天明白了一个简单的道理,使用ghost实际上变成了编写脚本,因为ghost只能在dos下使用,所以,你只需要用symantic的工 具制作一个启动盘,但是因为我没有软驱,结果一直不知道怎样制作启动光盘,可以使用subst drive dir虚拟一个软驱,然后把ghost-boot盘存在那个虚拟软驱然后可以长启动光盘就可以了,实际上这些都不是必需的,用nero直接制作启动光盘也 是一样,如果要使用鼠标,加载一个mouse.com就行了,这些东西我记得小时候玩游戏的时候经常作,现在都忘光了。


二月二十五日 今天天气很好吗?是 ,才怪。

我决定每天至少要再topcoder上作一道练习题。生活变得空虚无聊,没有什么目标。看了一片揭示当年《为了六十一个阶级兄弟》的内幕报道感触良多,这 篇文章是我当年读中学的课文,印象还是挺深的,当时年技校不会去问为什么,的确没有人去问为什么会有那么多人突然中毒,当然即便你问了给你的答案也不过是 混进革命队伍的反革命分子心怀不满的投毒事件,其实原因很简单,有人这么做是因为他们感觉不幸福,受到了不公正的待遇,这在每个社会都存在,GCD的解决 办法很简单,一个词就是阶级斗争,在一个词就是你死我活,这样一来什么问题都没有了,因为阶级斗争不可调和这样的情况不会消失,因为你死我活这样的结果你 不会去抱怨,能活下来就不错了。今天有人提所谓“和谐社会”真是让人好笑,三十年河东,三十年河西,终于开始正视社会成员中的哀怨与不满。想想看,连春节 都要在工地上修水库,每天还吃不饱,干活没有出全力就被批判,这比当年封建帝制逼迫农民服徭役强在哪里?或者我还是没有完全把这个政权当作封建集权制来看 待?

一整天都在看在伊拉克的华裔美国大兵陈果的博客,很有些羡慕因为他做到了很多我们普通人做不到的,如果我能够年轻时随也许我也还有勇气去从军,可是。。。

摘录了一小段他的日记,我一直以为他说的是他的笔记本电脑,可是结果竟然是枪,哈哈,有意思。

我承认,我是个花心的男人,我喜新厌旧,走马灯式换女朋友,但是,我敢发誓!我对我每一个阶段的女朋友都奉为女神,疼爱有加,百般呵护,绝不许他人染指!!!

我的女朋友是美国人,出身显赫名门,她高贵骄傲,完美无暇,是个冷美人。她从来没有跟我要过华丽的首饰与时装,从不装B追求烛光晚餐鲜花蛋糕咖啡的小资情 调,她从不在乎我是个士兵,她容忍我的一切缺点,从不指手画脚对我吆三喝四,从来不吵着回娘家。她,甚至没花过我一分钱.....

她24小时与我相依为命,形影不离,无怨无悔,她默默地陪着我在沙漠的星光下散步。默默地看着我写她看不懂中文,她陪着我去装甲车,食堂,训练场,游戏机 房和宿舍,即使我们同床,我的室友们也都熟视无睹,因为他们知道,我爱她,我离不开她。我们是一个生命共同体。。。。

她性情钢烈,对她不喜欢的男人毫不留情!她容不得她不喜欢的男人靠近她的身体,她一开口绝对令他丧魂失胆!肝脑涂地!粉身碎骨!!

我知道,总有一天我会抛弃她,我不再需要她了....

我会永远怀念她,但是我不会伤心。也许她很快会找到下一个男人,不再记得我--一个来自中国的美国大兵。

她就是我的恋人--- 枪!!!
 


二月二十七日 今天天气很好吗?是 ,才怪。

topcoder的1000的题目我通常要做将近一天,因为有时候感觉很累就停下来休息一天,结果题目没看清多做了很多麻烦的功能,又因为我的中国造的计 算器居然出错害得我找了半天的bug,这很骇人听闻对吧?又听说过计算器计算出错的吗?反正我的这个总不对,明明可以用整数计算的返回精确值的,可结果却 是浮点数的近似值。先存一个版本吧。

看马英九和谢长廷的电视辩论会感觉不论哪一个人都是一个社会的精英,美国总统大选的候选人辩论会更加得好,所谓社会政策,治国之道,领导理念这些东西其实 是非常复杂的决策问题,绝对不是普通人能够一朝一夕所能判断的,但是最起码这些东西必须拿到台面上来讨论,一个社会的进步程度最根本的标志是他的决策效 率,人民本身的勤劳善良聪明才智并不是社会进步的直接体现,这正如一个人的 的能力天赋各不相同一样。如今中国的制度是有极大的问题,问题就在于行政效率,什么民主自由都不是根本目的,根本的目的是效率,但是民主自由反过来是保障 效率的最好的手段,这一点我觉得才是核心。

ctv的晚间新闻播音小姐好像换了,是同一个人换了造型还是换了一个人?我的认人能力有很大问题,不知道这是否因为我现在思想跟接近电脑?(自吹自擂),应该是两个人。那个小妞儿戴眼镜很清秀的。

stryker说他所在的部队美军第二装甲骑兵旅是美国四大独立率团之一,这消除了我的疑惑,我一直以为它属于美国第一个骑兵师。很好。


二月二十八日 今天天气很好吗?是,才怪。

下载了一个mysql玩一下,登陆就是mysql -h host -u user -p pword,其中默认的是root。总的来说c-api要比什么php之类的清除多了,至少我不会觉得被人玩。现在经过好几年才慢慢开始明白开源的好处, 这些东西是当你有了一定基础以后才会有的体会,当年Z说得好,微软的东西是对用户友好不是对程序员友好,unix/linux相对来说要对程序要友好一 些。

F**K,费了我整整三个小时才搞明白存储blob数据的时候也就是存一个图片文件之类的二进制数据再sql里面你要是用特殊的“escape”字串,再mysql里面就是调用一个mysql_real_escape_string的函数替你封装,记住传出参数代表 经过“调制”以后的字串长度,我就是在这里粗心大意费了很久很久都没有找出来指针的错误,同时记住sql里面的双引号与单引号没有区别。


二月二十九日 今天天气很好吗? 非常的好。

我大胆的说一句,如果再windows下编程如果没有透彻了解dll那么等于还没有入门,所以我现在就是还在门槛上。1。同一个dll能否被load两 次?首先文件名包含路径名,所以如果路径也一样windows是不会让你loadlibrary两次的,因为内部有一张表维护当前的loaded dll。如果你调用FreeLibrary那么等于清除了表。其次,window很搞笑的,当年栽linux下为了防止别人删除一个文件你就运行一个 background程序打开这个文件,这是一个拙劣的办法但是至少还可以,windows好笑的事如果你要删除那个已经被loaded的dll,不行, 可是你可以把他拖拽移走!这实在是太搞笑了!!!结果我在运行期把一个已经被使用的dll替换了另一个版本!这实在是有些匪夷所思,当然了运行的程序如果 不freelibrary再loadlibrary也不会受影响,可是。。。2。我的记忆力太差了,每次再c++程序里面调用dll里的函数总是忘记 name decoration的问题,如果你调用的时候想用原来代码的函数名,那么dll里面第一是用默认的__cdecl其次,如果实在c++编译器下使用 extern "C"把函数的名字装饰去掉,所以就是extern "C" __declspec(dllexport) type __cdecl funcName(paramType...);__cdcl是为了保险因为不一定你正确设置了默认的调用约定吧?3。老生常谈,dllke亿看作是另一 个程序,windows德kernel的对象比如文件handle之类的不透明的东西都只有在本地有意义,越界无效,linux里面有相关process 文件列表继承的独特属性,windows好像不是天生的,所以把一个文件handle传递个dll当参数是无意义的,当然好像有个所谓的“共享的”办法, 创建的时候起个名字,大家就可以共享了,听说过没试过。


三月一日 今天天气很好吗? 开始下雪了。

使 用platformSDK你唯一需要记住的就是,不要shi用原来的vc6的basetsd.h因为微软更新了一些基本的类型定义,大概是为了于64位兼 容的问题吧?(我猜的。)不要把platformsdk的路径加进来,拷贝单个没有的.h和.lib到当前vc相应路径,这是比较干净的办法。这样只需要 更新一个basetsd.h文件,尽量保持原来的vc6。

如果使用httpAPI来做一个 httpserver的时候,最好定义一下UNICODE因为url都是unicode,同时要记住localhost是不能解析的,因为还没有dns服 务器吧?所以使用http://127.0.0.1:80/记住最后的那个slash是必需的!把微软的例子拷贝了一下就做了一个简陋得http- server,以前可能也是照猫画虎但是始终没有理解,什么tomcat之类的都去见鬼吧,明明一个简单的玩意被告成了一个吓人的东西。当然那时我被吓 得,我是吓大的。

英国媒体曝光了英国的哈里王子在阿富汗服役的消息,他只好回国了,我非常非常的敬佩这个年轻人,不仅仅是因为作为王子身先士卒,而是因为欧洲贵族阶层的子弟的培养传统让大多数东亚家庭感到生子当入哈里王子。

一开始我有一点转不过弯子来一直在想我怎样写一个http的客户端?后来才想起来不就是ie吗?我当然也可以模仿ie弄个无界面的包装一下packet发 送,不过这个现在还不需要。宽字符前面加一个L,printf里面的%s改称%ws。在重复一个基本的基本的东西,以后一律用TCHAR这样只要定义 UNICODE宏就可以选择ansi和unicode两种了!!!我始终没有unicode编程的概念原因在于没有一定要使用的原因,现在再http里面 必须了,所以总算有原因可以用了。

终于发现IE实际上非常的强大,他已经帮你做了很多很多,为什么IE能够显示jpg图片,因为他要自己去分析文件头的部分,因为http是一个基于文件的协议,他才不管三七二十一反正都是文件。


三月二日 今天天气很好吗? 非常的好。

NAT映射端口始终不成功,为什么?肯定还是我没搞明白,我的router-modem上的计算机映射之后并没有显示public-address这也许 说明我没做对?当然现在局域网是没有问题如果防火墙关闭的话,或者设定exception程序,及其exception得端口,二者缺一不可,我当时以为 制定程序自然就制定他所需要的端口,看来防火墙没有这样简单,也许是做不到,也许是为了更席位的控制,总之,还要再试验。现在这个市道太乱了,我的电脑里 面充满了各种各样的病毒与木马,我重装系统之后我感觉我并不是真正的administrator而是一个假的,听上去匪夷所思,可是看看我的dos吓得 homedirectory居然使administrator.montrealXXX难道这不奇怪吗?

如果想知道当前可执行程序自己的文件名,可以使用GetCommandLine,注意使用PTCHAR来兼容ansi/unicode,(这里面有些东西 还是不很清楚,winmain,main的argv好像是不能使用unicode的,所以要自己去调用commandlinetoARG之类的函数??) GetProcessWorkingSetSize给你一个清晰的系统分配的page多寡,GetProcessIoCounters可以统计程序的 i/o多寡。以上不太对,获得当前可执行程序的全名应该使用GetModuleFileName, 因为其他的命令行并不一定包括路径,startupinfo又是一个和window关系很大的东西,比如window的大小位置title, desktop等,environmentstring更加不沾边,GetCurrentDirectory和window模仿linux的getcwd 一样并不一定是exe的路径。关于防火墙的管理的api是一个INetFwMgr的COM接口,定义在netfw.h里面,这个在MSDN里面找不到,要 去platformSDK里面去找。

试验了很久端口映射总是不成功,但是把我的电脑设定城DMZ确实可以,现在等于那台电脑的private-add被完全映射到了internet,当然在 局域网内部访问的时候还是要使用局域网的地址,当在internet的时候可以使用public-ip来访问。mysql输入了大约七八百张照片就出错 了,也许是什么内存资源忘记释放了,明天查一下吧。


三月三日 今天天气很好吗? 好像不是。

sql有个问题,因为它本身并不需要care unicode,所以我不应该全部都是用_TCHAR,但是如果我的insert的数据里面又unicode我又必须在insert与距离面嵌入 TCHAR,这个非常的啰嗦,存储的二进制数据当然应该用char*但是如果有的field使用wchar,又必须不停地在_stprintf和 sprintf之间转换,也许asp,jsp之类的脚本takecare了这些?这就是用纯粹的c接口调用mysql的麻烦处。再mysql用户界面上你 可以用\T输出到文件,而不是在一开始的shell上直接调用c:>mysql mylongin.sql这样不行的,因为mysql会是用默认登陆本地的mysql而不察看mylogin.sql里面的参数。

也许是我昨天记错了,我的DMZ的mysqlserver现在不能使用private address192.168.2.x了,必须使用public address,这实在是混乱。到底是bell在捣鬼吗?mysql奇怪的语法使select的临时数据集必须要加挂号给于一个as aliasname,我记得以前oracle不需要,对吗?我的记忆力太差了。我实在是糊涂,因为mysql再windows里作为service存在的,所以是不能够直接用mysqld-nt启动的,需要使用net start mysql, net stop mysql来控制,同时昨天的错误终于找到了就是server端得max_allowed_packet太小的缘故,因为blob数据会大于1M所以default的设置不行的。


三月五日 今天天气很好吗? 下雪了或者下雨了。

httpapi有不少的问题要去处理,我首先不知道怎样传递多幅照片,单个照片firefox也不认,ie虽然正确显示但是只有第一张说明 response德packet我传的不对,并且很快就会爆出64或者1229的错误,大概是什么netname错误,现在还不清楚是怎么回事。今天偶然 看到msdn上面的directio部分,抄了一个例子检查我的营盘结果大小少了一点,不知道为什么,这个结果和“manage computer”上的一样,但是和硬盘的大小就是不一样,我怀疑会不会硬盘厂商为了招揽顾客把十进制的40G将错就错,就是说 40x1000x1000x1000就是平常说的40G和二进制的40x1024x1024x1024当然差了不少。那个函数叫做 devicecontrol。#操作符很有用,我这两天总是位sql的statement烦恼,现在好了用这个macro。#define stringer(x) (#x)或者不加挂号?这样就省去了自己给每个但双引号加\的麻烦。 看到md5感到很好奇,我在想如果把md5看作一个映射,那么对于所有的128bit的字符做映射,结果在继续映射,最终一定会形成一个环,我的问题是这 个环有多大,有多少?最理想的当然是一个,不过这个有人证明吗?

从set里面删除当前iterator指向的元素会很糟糕因为这个iterator很可能失效,至少这是我观察到的,linux/window都是如此, 甚至连vector的erase方法都是不可靠的,因为微软的实现说是返回当前下一个iterator,可是好像也不对,至少再linux不太对。另外一 个令人讨厌的问题就是64位长整数的问题,微软的这个__int64时我深恶痛绝的,首先__int32何int32或者int都被编译器看作不同的类 型,iostream不承认__int64/__int32时已经重载过的,其次,linux用的事longlong,printf用的是%lld微软则 是%I64d这实在是太麻烦了,用macro重定义都不好办。


三月六日 今天天气很好吗? 非常的好。

我觉得我应该放下一切包袱,生活没有什么大不了的,只要我下定决心去做我认为对的事情就没有必要认为结果是怎样的,反正这是矛盾的逻辑,好像matrix -reloaded里面讨论得如果一个decision在你take-decision之前已经决定了,(比如你试运行实现编译好的程序,所有的选择支都 是预设的)那么你决定与否都无关紧要,(听上去好像宿命论,实际效果是自我暗示,说得好听叫做坚忍不拔,如果失败了叫做执迷不悟,如果干出了伤天害理的事 情叫做。。。)总之我做什么与不做什么都是有理由的,任何结果都可以有一大队的事后诸葛亮来评述,重要的不是决定对不对,重要的是我今天作了什么,如果我 晚上睡觉前能把我今天作的事情回忆一遍没有无所事事,那么今天就可以好好的睡觉了。(当然就算我今天无所事事了一天,我还是会睡觉的,因为在你回忆完一天 之前早就睡着了。这就是生活的矛盾。)

以上都是垃圾,包括刚才那一句说明。

utf-8,utf-16不是unicode?看来没有亲自玩过的东西我永远不理解。以后要使用_itot来转换数字,使用unicode/ansi兼容 的代码要从现在开始养成习惯。花了一个小时开始学习html的格式,这是我一直很鄙视的东西,不过现在看起来还是很好的东西,<input type="reset">或者"submit"是针对整个form的,所以要定义form,这大概就是为什么我不能显示多个照片的原因?


三月七日 今天天气很好吗? 凌晨怎么能知道?

折腾到凌晨我才开始怀疑是否那是一个bug,问题就是如果用户不断刷新他的浏览器,那么浏览器和服务器之间的连接就不断被更新,这个解释对不对?也就是说 一个浏览器窗口在同一时间只能允许一个和服务器的唯一连接,一旦刷新那么连接就失效了。如果这个结论是对的,那么程序没有错。我也就可以睡觉了。可以吗? 不可以吗?


三月八日 今天天气很好吗? 好像是阴天。

我在想一个简单的问题,这个问题我从来没去想过,因为理所当然,html的格式是纯文本,那么他怎么能够显示图片一类的binarydata呢?99%学 过计算机的人对这个问题不屑一顾,因为可以用一个名字来表示嘛,<img src="image.jpg">,那么我的问题是我自己传送http的packet,就是那个httpresponse结构我要把图片数据放在哪 里?50%的人也许会说有一个fromfilehandle,你可以把文件的handle放在datachunk,可是如果我的图片不是来自于文件是从数 据库读出来的内存地址呢?也许40%的人会说放在cache里面,这样对不对试验一下再说吧。

(结论是以上不对,所谓服务器端的cache与客户端得cache根本就是风马牛不相及的,怎样存放binary的数据呢,同样道理,必须用content-type来定义。)


三月十日 今天天气很好吗? 风雪交加。

本来一直要坚持每天...


三月十二日 今天天气很好吗?风雪交加。

好像忘记交房租了。折腾到两点,问题时mp3文件太大了,我的mysql根本就不行,mysql_store_result就死在那里了。另外thread pool有一个理解的问题,所有的http的handle支能有一个,因为addurl只能加一次。所以还真的有一点点observer的意思。播放音乐是<bgsound loop=true src="filename">美女给我的任务还是有一点困难的。


三月十三日 今天天气很好吗?风雪交加。

今天发现window-live新开辟了一个sky-drive,我正好把我几个想保存得project存起来。

My-GDI-SDK(link-only)  MySQL(link-only) HttpServer(link-only)

顺便说一下,我计划建一个网站来挣钱,当然要先免费十年才行,哈哈。http://nickhuang99.dynalias.com:80/


三月十五日 今天天气很好吗?风雪交加。

今天星期六,前几天吧,加拿大议会投票表决是否延长驻札阿富汗部队的时间,渥太华议会大厦前一定又是一片的抗议人潮,我没有看到具体的画面,但是总理 harper大概是调侃的话我倒是从新闻里听到了,大意是加拿大是最讲人权的国家,全世界的警卫只有加拿大的经委会给抗议者送毛毯,这句话听上去也没什么 错,其实加拿大人根本和美国人的反战不一样,当初出兵阿富汗也是一个加拿大的政治传统,本身恐怖主义从来就不会对加拿大有仇,因为我们周围有一个巨大的恐 怖主义目标的吸铁石,美国。出兵阿富汗只不过是看在以前女皇的面子上跟着英国去的,当然美国邻居的面子也有一点谁让加拿大80%的贸易都来自美国呢?拿人 钱手短。不过呢,前几天大概中国政府在西藏又杀了几个抗议者,我并不是完全不赞成开枪对付示威者,但是最起码21世纪动真枪之前能否使用橡皮子弹?在全世 界最危险的伊拉克巴格达被全世界所为最人道最和平主义人士斥为屠杀者的美国士兵全副武装外还会携带橡皮子弹,不是美军不明白恐怖分子的残人与不惜代价,而 是因为美国人知道杀戮并不能消除仇恨,中国现代政府的管理意识在很多问题上还停留在两三个世纪前的封建时代,马恩列斯毛邓都明白政治体制要去适应经济基 础,经济基础的代言人是社会各阶层的政治诉求,如果下言不达上听连几百年上千年前的封建君主都会担心水亦覆舟,而如今的胡温却俨然不知所措, foreseen, but do nothing!藏人是否该杀这个问题我想老毛在世会比较慎重处理,中国人口这么多不在乎杀几个人,问题是在什么时间什么地点以什么方式来杀。

这一点加拿大做得就比较好,我们去超市买牛羊肉里面煮的时候总是有血,因为文明国家屠戮的时候希望观看屠戮者的心理感受能好一点,于是用电击不放血,请特 别注意我这里强调的不是被屠戮者而是观看屠戮者的感受,被屠戮者反正是一死,差别不大痛苦少一点总是有限,观看者可能还要活几十年,有了文献可能就要被人 看到几百几万年,所以人道主义就是你怎样考虑哪些观看者的心理感受,如果一个政府不考虑这一点那就是不人道。美国政府考虑到了观看者的感受因此他在伊拉克 杀再多的人,我以为都是人道的。这是一个野蛮政府与文明政府的最好的对比,不是针对你做什么,而是针对你怎么做。


三月十七日 今天天气很好吗? 阳光灿烂。

线程池其实还是有些复杂的,复杂就复杂在能否保证你得server始终很强壮,内存泄漏是基本的防止的内容,关于死锁我想除非我统统使用带timeout 的wait函数,否则很不容易做到。基本上我认为这是一个producer与多个consumer的模式,mysql支持多线程模式,只不过init函数 不是线程安全的,因此我只要再主线程力作资源分配,再threadproc里面仅仅做很简单的任务循环。早晨仅仅完成了coding,晚上或者明天早上 debug吧。第一步先实现多线程,第二阶段在实现异步通讯,其中在分两小步,mysql部分的异步,与http-server部分的异步。

关于DC,我认为他是我所认识的仅有的几个真正的programmer,(当然我不认识多少人,号称学过计算机的人倒是遇到不少。)他喜欢谈他的一些强烈 的看法,比如他以为printf之类根本就不应该使用,要使用带n的版本_snprintf,当然考虑unicode就是_sntprintf, woshen以为然,因为buffer-overflow是最常见的潜在的隐患,关于变量初始化他也反复强调,对于我管与效率的argument他的说法 我认为更加的实际,因为需要optimised的地方其实很少,大部分的函数调用不了多少次,我以前常常犯一些纸上谈兵的毛病,在基本的编程里面常常在想 代码在汇编下是如何执行的,这个看上去很注意效率其实是一个自以为是,第一,编译器的优化远超过普通程序员的想象,第二,在还没有完成基本框架的编程初级 阶段谈优化是本末倒置,很多时候所谓的被优化的代码直接就在编程的阶段被清除出去了,优化完全太早了。DC对于代码的clean&clear的强 调到了让人窒息的程度,我已经打算放弃自己的命名习惯迁就他了。他还是非常强调他的重用性,比如模仿windows的dialog再mac机下模拟消息循 环这样他的代码的接口部分达到平台无关,又比如他说他的device-driver时twain和usb通用的,这一点我一无所知,以后我会好好学习这方 面的东西。有一点我表示同意,DC对于design这个词的滥用非常的情绪化,他认为他接触的很多design的人根本就不了解实际纯粹纸上谈兵,对此我 深以为然,我的comment时designer首先应该是一个很好地programmer。今天我浏览了一下他的设计文档,发现这个project很讨 厌的就是要去兼容很多的古老的硬件与模式,比如mono,比如16色,比如各种压缩模式等等。他设计了自己的packet结构,关于他的类似于 window-gdi的rect来定义更新区域,这一点我很感兴趣。

DC决不是什么超级牛人,我以为他的大部分知识都来自于几十年的实践经验,这恰恰是很多人所缺乏的。如果他的理论背景足够高的话那就是非常的强了,但是往 往很多人沉溺于理论就不愿意亲自动手了,明显的理由当然是他有更重要的理论工作去做,不过我以为世界上除了少数顶级的科学家有资格这么说以外,其他人大多 是一种借口,不需要事必躬亲,但是你最起码需要知道事情是否可以做,是否容易做。

eeepc受到了,使linux版本的。


三月十九日 今天天气很好吗? 阳光灿烂。

DC今天讲的一个东西我很有感触,就是创建线程的返回的handle应该什么时候关闭,我以前从来没有想过这个问题,我一直有一个错误的概念是这个东西会 随着线程的结束而自然结束,DC说不会,所以,他只给我看process-manager里面的svhost有8000多个handle,说这是 handle泄漏,我有些将信将疑,我嘴上争辩说那个svhost是个空壳子,但是我心里知道他应该是对的,一个进程使用超过八千多个的handle不是 泄漏是什么?同样IE的GDI对象的泄漏应该也是有的吧?DC给我展示他的仿照GDI的东西,有一些实在mac上模仿,有些是在任意device上的模 仿,据他说是把window的菜单font等资源掉出来然后再pda等等硬件上直接使用,我还一时转不过弯了,但是他的那些类似于photoshop的功 能的一些实现速度相当的快,我有些简单的东西自己做过,比如我曾经用bitblt做过一个放大镜的效果速度比windows得慢了不知道多少倍,他的东西 速度这么快据他说是因为他只用加减法,乘除一律使用某些表来实现,我对此有些慌恐,他的钢笔型的扫描仪驱动所作的图像修正非常的惊人,我说为什么没有申请 专利,他说当然有不过不是他的名字,我不知道这个答案是否可信,不管怎么说这些东西在十年前的确是很了不起的。无论如何DC都是一个令人敬畏的老头。

半夜三更爬起来拆卸eeepc才发现我的型号和youtube上的不一样,tnnd的内存无法扩充因为我打不开后盖,整个连在一起的。上当了。我觉得这实在是一个最好的理由学习linux,因为我实在不太愿意使用一个512m的机器上的xp。


三月二十日 今天天气很好吗? 下雨了。

试验了一天才有些确信可能有些什么变化发生了,httpapi好像不能正常使用了,我可以接受但是不能发送,我已开始一直以为我的code的有问题,但是 我把微软的例子又试验了一遍,结果也不行了,说明也许sympatico把什么服务封掉了吧?比如http的包的发送?我实在不能解释1450系统资源不 足的错误!明天我去实验室试一下看看吧。DC对于工具的使用的执著到了疯狂的地步,vc6的大部分工具我几乎都没有怎么用过,这一点让我很惭愧,同时DC 的反应也比我来得快,让我觉得很惭愧,我不但比二三十岁的小孩子来得慢,也比五十多岁的老头子来得慢,唉。但是我绝对不会放弃!只要不断努力那帮小孩子我 是绝对不放在眼里的。

明天是复活节。


三月二十一日 今天天气很好吗? 阴天。

我问DC我平常可以做些什么来准备,他说让我去看他的代码,我本来也就是一个装装样子,没想到给自己拦回来这么些东西,当然我也比较高兴他不忌讳我拷贝代 码,我原本是把他给我的安装盘进行拷贝的,连带把所有的备份也可了过来,讲句老实话我压根没打算看,因为也未必有什么意义,唯一可以参考的是他的图形编辑 方面。于是只好取下在一个虚拟机来装windows-server,回想起来HM在我和他做project的时候就提过他是在VM上debug,那个时候 有些神往,不过我想一是我比较的懒,二是我对于所有的新技术新应用都保持一个怀疑的态度,按照DC的话来说就是:工程师并不打算去解决不存在的问题。如果 现有的技术资源够用,为什么要增添新的烦恼?新的软件意味着新的bug,我们目前的问题都解决不完为什么要增加新的?

很多时候我觉得topcoder很不公平,很多老手都是用了不少的类库之类的,否则让我现场编码我怎么可能用最短的时间敲键盘呢?我觉得有时候我两三百分 的题目几乎可以避免编译的错误,包括typo但是至少还会有一两个逻辑或者边缘条件错误,但是看了一下那帮人的代码还是很让人泄气,比如我们都知道gcd 的算法,但是这么写代码我还是很困难的。int gcd(int a, int b)return b?gcd(b, a%b):a;

寻找数N以内的所有相对N的质数,我是凭直觉把N的所有factor求出来存起来,然后再去用[1,N)检验这些factor,看到别人直接用gcd来求 [1,N),其实要快不知道多少倍?我对于基本的概念还是mei有真正理解。真正的高手一举手一投足就看出来了。

alex这小子非常的强,可以说是我见到的linux的geek级人物,当然我指的是主要的是系统管理这一层,并不是说他编程不突出,而是我反倒忽略了。 我一直以为实验室不能使用hp-rgs的原因是网络的问题,今天他成功地用linux版本连接到服务器了,其实远离都是一样,既然是应用程序使用网络协议 就没有window/linux的区别,我一直想不到这一层。同时我也曾他那里得知可以用synaptic来下载新的程序来安装我的eeepc。今天连续 安装了fedora和win2k的虚拟机,以后确实方便多了。记住用nero来刻光盘的iso时使用save-track命令,这实在是让人想不到我找了 非常得久。eeepc使用的事debian的变种xandro(记不住。)

httpapi在学校的机器上工作,不知道为什么在我的两台电脑都有问题。晚上到垃圾的路上又给了街头的乞讨者两块钱,在这个复活节的寒冷的夜晚,在寒风 中乞讨你能想象这是一种多么艰难的选择?我大概不仅在同情他们而且在同情自己,也许在我灵魂的深处藏着见不得阳光的邪恶,如果能够依靠施舍减轻那当然是最 好了。基督教教人向上现在并不用什么下地狱之类的恐怖手段了,更多的仿佛是心理医生让人去消费自己的精神能量。如果可能的话年底也许我可以捐献一些菲薄的 奉献。做了三十个俯卧撑累得气喘吁吁。


三月二十二日 今天天气很好吗? 阳光灿烂但是很冷,风很大。

看台湾的政治感到很搞笑,政治人物常常动不动就赌咒发誓甚至说出来性命不要的话,在加拿大我想这种话是很难听到的,有什么大不了的事情要性命相搏,难道你 的话就那么没有人相信,或者那么的有必要让别人相信?感觉用这种口气说话就仿佛殖民者刚来非洲美洲骗当地土著的情形一样,我的有限的和本地同学交往的经历 只有一次我听到一个同学说I swear I am not lying。为了什么事情我忘了,反正不是什么大事,大概就是老师的作业是怎样布置得之类的鸡毛蒜皮的事情,不过我当时还是吓了一跳,事后回想起来,在基 督教的传统里swear是很神圣的事情,轻易不敢用,用了当然没有人不敢不信。中华文化传统对于这些胶条根本没人信,说是都信佛实际上没有认真地相信有地 狱报应之说,因为脑子活分可以把宗教信仰当工具用,实际上一个人信什么本来并不重要,完全是一个精神需要,重要的是你觉得你有信仰了,晚上睡觉踏实了,因 为信仰本来仅仅是一个行为的“一致型”准绳,如果你的行为有了一致性,你自然不再为决策苦恼,因为可以参考从前的行为,或者你的信仰的条律,所以,不是为 了什么而信仰,而是因为要有一个行为指南而信仰。


三月二十三日 今天天气很好吗? 阳光灿烂但是很冷,风很大。

教训啊教训!我费了一两天时间在寻找一个不存在的bug,这就是很少做复杂工程的经验的缺失,同样的代码在不同的目录下运行结果不同意味着什么呢?当然是 编译环境的不同呀!这是一个常识,那么究竟是什么不同呢?1。makefile之类,可以在工程文件里选项寻找。2。路径设置。结果时发现我犯了一个低级 错误,我明明知道再platformSDK下很多头文件与vc6不同,结果想当然的不去做深入检查,(不过当时存了另外一个想法,因为我以前的程序都是在 vc6甚至是sp6之前的,我侥幸的想要尽可能保持vc6的头文件系统,于是遇到编译不同的我尽量在vc6的基础上增添sdk的东西。)这种做法是危险 的,比如sdk的winsock2.h有了很大的改变,我当时见招拆招以为sdk仅仅是添加了一些别名而已,现在看来为了兼容64位程序改动得非常之多, 有一个基本的就是对齐(alignment)的问题,64位程序据说是不可能和16/32位程序混合运行的,所以那些pack 4之类的都有改变,对于win32的宏定义都不同,我真是想当然结果吃了大苦头。结论就是sdk的东西还是在sdk环境下编译吧。(不过我是否做得到呢? 我实在是懒虫一个。)

最主要的问题解决以后其他都比较容易了,当然我还有别的错误,比如http里面的很多结构都是不定长的结构,是不能用queue之类的来存取结构的,如果 一定要用也只能用指针,就是类似于bitmap的结构里面的那些不定长得palette,所以,我在使用httpreceiverequest的时候绝对 不能只用sizeof(HTTP_REQUEST)的来作为buffer的size。本来这是一个很小的玩意,写一个数据结构来管理就可以了,不过我太懒 了,回过头来看台湾tvbs的政治论坛辩论会,非常的有意思,可以议论的很多,但是一个明显的感觉就是作为政治人物在台湾要比在中国大陆累得多,这样的唇 枪舌剑对人的头脑逻辑辩才的要求非常的高,绝对不是天天找秘书写讲稿开会打瞌睡,晚上大通宵麻将能应付的过来的,这才是人民对于政府官员的要求。同时亭节 目里的观众call-in也非常有意思,感觉人民的眼光是雪亮的,很多时候人民的思想其实非常的成熟,我想这是民主制度训练出来的,因为认识一个学习的动 物,没有实践学习的过程是不可能成熟的,这就是所谓西方民主社会的来源之所在,人民需要一个学习的过程,如果片面强调时机不成熟而剥夺人民学习民主的机 会,那么人民可能永远都不可能学会民主自由的思想与价值,gcd的所谓时机不成熟的谎言让我想起了伊索寓言里那只望着葡萄的狐狸的语言,不要再说什么够不 着的葡萄是酸的,你不应该总是欺骗自己葡萄是酸的所以我不去,你应该告诉自己葡萄是我应得,现在就挑起来摘自己的葡萄吧。

台湾的这些所谓的名嘴都非常得厉害,尤其很多的女人非常的灵牙利嘴,好厉害!台湾的女人好厉害! 马英九的台语讲的有些结结巴巴。三个女人一台戏好热闹,外号就是“火线娇娃”!国民党三大美女名嘴:郑丽文,兰萱,尹乃箐。


三月二十四日 今天天气很好吗?阳光灿烂但是很冷,风很大。

晚上在绿房子吃了一顿6块钱的糟肉饭,因为这个是最快的,冰箱里有一块牛排,本来想再烤了吃,可是怕等不及肚子饿。生活变得朝九晚五,慢慢就会成为一个钟 摆,人生的路也仿佛在不知不觉中回到了起点,曾经有一个上天赐给我的机会摆在我的面前,我在最后一刻犹豫了,尽管在数字上是吻合的,我还是犹豫了,我对于 我前方的道路看不清楚,同时更不想背负一丝一毫的负担,如同刚刚来加拿大在多伦多乘飞机莱蒙特里尔的路上的心情一样,匆匆地瞟了一眼路边随风起舞的小草, 前进的脚步不能有一丝一毫的停顿。理查德克莱德曼的浪漫钢琴曲悠扬地想起来,充溢在都是之间,徘徊在我的心底耳边。DC对于工具的使用是最让我佩服,我惊 天又看到了一个我不知道的功能,ctrl+}寻找挂号的匹配,这些细节在很多人眼里不值一提甚至被讥笑成奇技淫巧,的确,无他,但手熟尔。古龙小说里的超 级剑客在比试武功的时候对于每一个不知多么小的细节都精益求精,因为高手之争争之毫厘,再coding里细微的差别积累成巨大的差距,在某些方面我还是差 不少的。决不是说DC在所有方面都强,这决不对,他对于指针的运用还是差一些,大概是写汇编太多的原故,很多coding也有些多余,对于软件工程算法效 率的某些方面大都是朴素的实际体会,实用但未必最好。我想我用两年时间大概可以在大部分方面与他看齐吧?这也许说得太早了些,毕竟了解还太少,不过想当初 我对于计算机一窍不通的时候就能有决心在五年内赶上黄连声,这样的决心应该是要有的。


三月二十五日 今天天气很好吗?阳光灿烂 。

费了很大得劲最后还是回到老路上来了,http-server应该是一个stateless的server,这是基本的定义,并且是最容易实现的,我当初 执著的一定要形成一个能完成事务的,用一个线程dedicate一个connection的想法非常的麻烦,改写了好几个不同的request的模式,发 现还是用最简单的,因为我现在都是用一些零星的时间在改这个东西,经常忘记以前要干什么为什么要这么做,早上终于又回到了起点,完成了多线程并行访问的 httpserver+mysql。当然原本mysql就是支持多线程访问的,仅仅在httpapi部分监听者是一个线程,其它都是执行任务访问数据库生 成网页的“工作”线程。就这样吧。

拖拖拉拉一个多星期才总算改完了多线程版本,编码很简单主要是当初那个“vc6”和“platformsdk”的冲突问题折磨了我快一个星期。存一个版本在这里吧。服务器地址如下,内容不适合未成年人请自我约束:http://nickhuang99.dynalias.com:80/ 请大家帮助测试一下性能吧。(其实我知道我在这里吧ip地址登出来立刻就会有一大队的搜索引擎跑过来了。)


三月二十六日 今天天气很好吗? 阴天。

昨晚上作了一个很奇怪的梦,醒来也忘得差不多了,看我那台老掉牙的备用电脑被很多人疯狂的浏览,哈哈,我真应该写一个log记录下访问者的ip,看看那里 的人比较喜欢陈观希的自拍,不过呢,很高兴程序还算稳定,意思就是说应该还没有内存泄漏资源泄漏等等的问题,不然早当机了。接下去就是实现DB和http -response的分别的异步通讯,否则大文件如mp3那样的还是会有问题。浏览的人或者机器还是很疯狂的。哈哈。

历史上最超级搞笑,无聊,恶心,恐怖,白痴,无理头的电影是什么呢?《grindhouse》


三月二十七日 今天天气很好吗? 阳光灿烂,大雪纷飞,我不开玩笑的。

这年头就是逼良为娼的时代,我以前对于这些流行的web应用总是不屑一顾,现在为了争银子起 见不得已用业余时间在家里架设一个色情网站,欢迎大家踊跃访问,不过看了一下log一天下来没有几个人,10个线程只有一个有工作,看来陈冠希的那点东西 大家都不屑于看了,一定要找一些猛料,也许把成人频道十二点后的限制级电影放上去?不过我怕银子没有挣到我的sympatico高速网超标罚款到不少。昨 晚原本要写一个简单的垃圾邮件转发的东西,遇到一个小问题,今天再说吧。要么还是先做一个简单的图片收集的“爬虫”?看了一下IE的wininet- api应该很容易。先吃饭吧?

晚上步行8000多号去W家送我的保税表,从来就搞不懂这些东西,既不清楚政府给了我多少钱,也不知道我花了多少钱,反正银行户头上有多少钱我是知道的, 其它一概不清楚。步行速度大概是1000号/10分钟,这个多少号是蒙特利尔的长度单位,就好像1.5,2.5,3.5时面积单位一样,卖卖官子吧。学习 html发现这个东西很简单,难怪那些小孩子都明白,当然标准的html之外微软的ie作了超强的extesion,知道了上传文件的按钮是input type=file,从纯粹programming的角度看这是浏览器自己去调用系统对话框,就如同一大队的控件与一些gdi的命令一样,这样可以帮助我 理解。

晚上回来要做这样一件事情,用atexit注册清理程序,因为http的handle不释放问题很多。

晚上和同学在小肥羊吃饭又不由自主地讲了那个著名的笑话,一个美国人自豪地向朋友介绍说他叔叔当年凭着唯一的一句法语周游整个欧洲没有遇到任何问题,大家 对于法国文化深入欧洲的各个角落心驰神往就问他那句奇妙的法语是什么,他说:gracias。这个笑话来自于<mr.Bean's holiday〉的导演。

DC下午给我演绎了gdi对象泄漏的严重后果,当给老板演示的时候一窗口突然消失了很是尴尬。随后他和我一起debug,一个好方法就是再process -manager里面观察gdi-object的增加数量,这个是我现在唯一能想到的办法,也许vc6里面有类似的工具吧?好像没有吧。内存泄漏时有工具 来检测,对象呢?我的那个家里的小server也有类似的问题,不出一天就放生数据库访问的错误,是因为某种内存的泄漏吗?应该是吧。


三月二十八日 今天天气很好吗?阳光灿烂 ,但是有些冷。

我检查了log,错误显示是数据库访问错误,我没有进一步的资料只能猜测。

1。 我当初创建多个线程的时候给每一个线程分配了独立的mysql的对象句炳,实际上乱来,因为既然mysql支持多线程就可以多个线程共享一个句炳,这也许有一定的资源浪费,但还不能解释为什么服务器过了近一天才down。
2。 我为了提高反应速度,在server 上作了一个很简单的缓存,就是把访问的“数据库的数据集”(mysql里的query result)存在一个表里面,如果客户下一次访问同样的数据被我用表的index hash到了,就不用从数据库再取了而直接从表里面返回。当然如果hash到的数据集不是客户要的就只好释放数据集,我的理解是这个数据集在访问数据库时 候已经在数据库客户端了不再是数据库服务器端的资源了,(相当于客户端本地的buffer,服务器端应该自然就释放了。所以,我在这个表里面存多少个数据 集都不占用数据库的资源,如果要出错也是在我的数据库客户端访问出错。)所以。。。这也许就是我没有看到mysql的错误信息的缘故吧。是本地内存分配错 误但表现为query-error.

实际上发邮件是一个很简单的东西,我说简单是因为你不管新邮件系统的安全性等等的设置,原来一直困扰我的那个对话框其实和mapi完全无关使oe弹出来的,你只要再oe的security里面去掉什么“警告当别的程序以我的名义发送”的一个选项。


三月三十一日 今天天气很好吗?阳光灿烂,但是有些冷。

如果你看了<hostel〉这部电影你绝对不敢再去东欧那些国家旅行了,这是我看过得最血腥最残暴的恐怖片,这里我要修正一下恐怖的定义,加拿大的电影号称是恐怖与行,其实大都是带着一点点玩闹性质的,好莱坞的恐怖是让你干脆就边看边吐。

数据库访问错误应该只有两个可能吧?一个是长时间idle以至于lost-connection,可是mysql明确说这个bug在之前的版本已经改正 了,(就是不在位default选择)另一个可能是本地数据集太多了,就是我的本地缓存占的内存太多了。针对第一个可能,我写了一个简单的连结重置,针对 第二个可能我明天打算把针对美个线程连结的缓存改为全局针对所有线程连结得来节省内存。问题是我现在还不能判断到底是连接的次数还是连结的时间长短导致数 据库错误?各位能不能多去点一点这个图片库呢?http://74.12.223.226 当然里面有不少儿童不宜的,最不济那些搜索引擎看到这个ip应该也会像秃鹫看到尸首一样蜂拥而上。我一直想采用W的建议写一个自动测试,结果昨天天气非常 好出去爬山了,晚上把两个月的衣服都洗了。。。有人吐了吗?


四月一日 今天天气很好吗?阳光灿烂,但是 后来下雨又刮风。

据说是愚人节,但是对于我来说应该没有什么区别,晚上回家的路上心情格外的郁闷,是一种莫名的郁闷。ctrl+shift+U可以用来变小写为大写。为什 么郁闷呢?不是很清楚,大概是觉得自己蹉跎一生郁郁不得吧,更直接的是觉得肚子太饿了,这个理由可能更佳的真实。早上试验了半天也不明白到底内存有没有泄 漏,很像,可是。。。昨天,M&G把我找去,重新拾起那个块被我忘记的课题,M问我是否要换一个课题,G拼命说不要,我心里在想换什么呢?昨天在 telnet命令行用smtp试图发邮件,的确主要的网站都不太怎么能够轻易的发邮件,我在心里还向是否我应该自己去写一个smtp,现在看来。。。计划 太多了,晚上是否应该看那个triangle-plane-intersection的算法呢?究竟应该怎么办?前方的路太模糊了,我需要一盏 guiding star。这两年我觉得我的vision越来越模糊了,心中的目标都不知道便宜到哪里去了,究竟我有没有destiny?


四月二日 今天天气很好吗?阳光灿烂,但是后来下雨又刮风。

W发给我非常有教育意义的一个链接,他回答了我的关于mysql巨大数量的handle的疑问,非常的有教育意义,摘抄在这里

究竟是什么原因呢?数据库连接失效看网上的分析大概有三种可能:1。早期mysql的default设置是8小时断开,或者多少秒idle断开,但是 5.xx版本以后default已经改为用不断开。2。客户端主动断开。3。max_packet_number设置不够,比如default是8m,如 果数据集太大就拒绝连结,可是我也设成了32m,应该没有问题了。如果是我的自己的缓存导致的内存泄漏,那么我应该观察到程序的内存使用一直上升才对,可 是我看到的是当大量图片被浏览时候我的程序的内存使用先升后降,这个事很正常的,因为我的缓存cache一开始北海没有全部占用的时候上升,后来全部占用 了,遇到小的图片时候换出大的图片内存使用就下降,很合理的解释。甚至我为了debug关闭了缓存直接返回后就释放数据记者应该绝对没有内存泄漏的问题, 可是当我连续快速重复点击链接的时候又爆出了invalid access specified rtlfreeheap的错误,网上的说法是这个发生在exe与dll之间分别用debug和release编译时候new和delete跨越dll边界 造成的,因为debug和release版本的new与delete是不一样的,比如debug版本要检查分配的heap内存是否越界,(这个我以前就遇 到过,看网上的说明时debug版本在分配的内存前后设置边界,就是多几个byte,delete的时候检查是否被改过)所以但从这一点就知道两个版本的 分配的内存数量不一样,其实地址有差异,自然会有访问越界的问题。可是我的程序应该也没有这个问题,因为数据集是mysql分配的,释放也是他,我的程序 也没有做什么呀。会不会十多个请求导致http-api的内部buffer溢出呢?这个想法也太夸张了。我其实想不明白因为到底问题是什么我不清楚,只是 看到大量访问后mysql查询出错,并不知道为什么?


四月三日 今天天气很好吗?阳光灿烂 。

DC给我讲解了一下他的得意地pch,简单说就是头文件预编译,其中的一个好处就是省却了复杂工程里面的头文件的混乱,有依赖性德在头文件编译时候就发现 了。今天终于把我的httpserver又改回了原来的类似于appartment的threading-mode,就是说所有的线程各自运行在自己的空 间里,每一个线程有独立的数据库连接,对于mysql这样业余的数据库,我实在是有些不放心,还是不要节省那点资源了。这种增加了数据库连接失去之后的自 动恢复部分,又立刻县城自己恢复还有就是监听线程在始终找不到可用线程时候强制恢复等等的策略。我持续按住F5健飞快的刷新请求,还不错server很健 壮的。现在就看长时间空闲之后会不会又当掉,能不能自我恢复。网络上说,如果你娶到一个好妻子,你会幸福,如果你娶到一个坏妻子,你会成为哲学家。我想我 的理想是当一个哲学家。哈哈。


四月四日 今天天气很好吗?阳光灿烂 ?我看不见什么阳光。

我像今天是最后一天改进这个server的小小project了,周末一定要开始图形部分了,否则下个星期meeting真不知道该说什么。本身mp3文 件和图形文件没有什么区别,我的数据库和代码都已经写成一致的处理了,只不过在入口处我把music的链接拿掉了因为文件太大了,我本地下载都不知道等了 几分钟,看来对服务器带宽的要求太高了。改成异步通讯仅仅是调用一个函数的问题,不过很讨厌的是改变原本的程序流程,这个事我不太喜欢做的事情,这让我想 起了DC无穷多的不可理喻的地方,一个函数超过700行代码,而且它的代码是那种else缩进的风格的,可能要比我的风格多出30%的行,所以可以称之为 “千行函数”,其中无穷的if-else而且使用大量的全局标志,if嵌套好几重的,你可以想象这就是非科班出身全拼亲身摸索实践出真知的结果,当然我也 很佩服他读这些代码的能力,(肯定会有错误这是不用说的,因为没有人是神仙,都会犯错的。)问题是他就是不肯,也难怪50几岁的人对于自己的自信是比年轻 人多得多,如果我在他面前可以成为年轻人的话。不过有一个小东西值得记录,再vc6下debug跳出来汇编浏览窗口(disassembly)是非常让我 讨厌的,有时候我断点设错了找不到出来的函数,DC告诉我的他的方法是把那个disassembly窗口始终打开但是隐藏起来,然后看stack窗口看是 哪一个函数调用的就可以出去了,这的确是不错,在对于工具的使用上DC是非常的精通,或者说因为我基本上不怎么用调试工具的关系。(这句话有些问题,我回 想这可能说明几个问题:1。我写代码bug少?我不太相信,可能少一点因为有时候慢。2。我很少调试非常庞大的project?可能吧,当时在 cluster上并行的debugger学起来非常的繁杂,而且图形的数据那么大就算有了你也看不懂那些数据代表什么。3。我不 重视工具的使用,工欲善其事必先利其器。)

今天早上的努力好像有白费了,server在晚上的时候又挂掉了,但是我几乎可以肯定我的程序没有内存泄漏的问题,因为没个线程在自己的空间运行(数据不 共享)所以也没有同步的问题,(唯一共享的是http-request-handle,但是对于这个东西我认为它本质上就是windows里面做异步 i/o的那个文件handle一样,这么普通的东西可能也没有问题,而且我是用一个单独的线程监听,所以也没有同步的问题,对于以前http- responese的时候用户吊线我现在统统忽略因为他根本不是错误,这么一步不排除似乎问题是处在mysql身上?再做一下测试吧,如果我的数据库恢复 失败那就说明时mysql的问题了。试验一下让搜索引擎来帮忙测试吧,比如我把几个关键字写在下面很快就有大量的引擎像秃鹫扑死尸一样冲上来。

 

陈冠希和张柏芝的“艳照门”照片在这里:删除了。

陈冠希和所谓的阿娇的不雅照片在这里(这个女人是干什么的,我始终不知道,哈哈。。孤陋寡闻至此。)在这里:删除了。

(我想看看到底我自家的破电脑能够承受多大的压力)

我觉得我的服务器现在很强壮了,下午的错误是因为我输入负数index造成的,虽然拿个线程出现了访问错误,但是其余的线程海正常的运行,所以我一点都没有察觉服务器那投出了严重错误,说明程序的robust很不错的。心情终于开朗起来。

现在这个版本非常的稳定了,问题变成服务器能够支撑多少人同时访问,效率如何。


四月七日 今天天气很好吗?阳光灿烂 。

我的服务器非常的强壮(robust),首先,每个线程个绝不互相影响,即使有几个线程当掉了,只要监听线程工作,整个系统还是能够正常工作的,其次,数 据库出现的异常我虽然没有办法防治,但是我可以让线程重新连结,虽然这个改进非常非常的简单,但是效果非常的好。我现在这个版本已经正常运行好几天了,始 终正常,再重新连结之后内存清理应该会更好的运行。所以这个模式我觉得比较得适合小型服务器和较低并发的状况,他的稳定性很好。


四月八日 今天天气很好吗?阳光灿烂 。

连日来不断的有报道关于藏独分子干扰奥运圣火,我觉得这是一件好事,国无外患常亡,大多数中国封建王朝的灭亡常常是因为“天下太平,万方来朝”,当然这从 来就是统治者的一厢情愿,天下从来没有太平过,万方从来没有真心实意来朝过,中国目前的cctv+人民日报模式的“媒体专政”塑造出了这么一个“天下太 平,万方来朝”的海市蜃楼,生活在其中的人们如同当年鲁迅《呐喊》自序里面那些昏睡在不透气的铁皮屋子里一样,有个别人稍微警醒实际上要承受比旁人更加痛 苦的清醒的死亡进程,从内心来说在昏睡中死去要比在昏睡中死去痛苦更加百倍,结果都是一样为什么不能少些痛苦?所以索性天天看cctv那些“1984”似 的“老大哥”无休止的洗脑新闻,因为那些经过精心删减挑选的消息“令人振奋,团结一心,催人上进”。你只要翻看一下世界上的宗教布道就可以找到类似的效 果,世界上的所有的精神控制,包括无数多的所谓邪教都是如出一辙。

所谓西藏事件大多数有理智的人并不怀疑暴力的成分,问题时gcd还要用从前的方式来处理媒体,比如立刻驱逐媒体,全境封锁,这些做法在当年处理 “sars”爆发简直如出一辙,西藏独立不独立大多数西方民众只是从心理上同情,但是对于传染病的消息封锁那是所有西方政府都不能坐视不管的,因为这是切 身利益相关的,结果就是gcd意识到用老的一套“捂盖子”事后塑造大批“英雄事迹”的那一套行不通,老外不买你的帐。后来学乖了,但是对于西藏这样的事情 下面的官员没有一个敢掉以轻心,还是老法子比较管用。

归根结底,如果没有冰川的到来猴子是不会从树上下来的,如果没有各个方面的内忧外患gcd是不会进化的,可能永远蹲在枝叶凋零的树顶上向人群展示它的红屁股。

我抽了一些我每天“宝贵”的时间看了一下youtube上的各方意见,感觉这一切都是gcd自作自受,首先,cctv指责西方媒体歪曲报道拿了很多尼泊尔 之类国家的暴行的照片混淆视听,不错新闻媒体在全世界大多数国家都是一种商业产品,只有极少数政府专制下是宣传工具,那么作为商业竞争当顾客需要而供应商 没有产品的时候怎么办呢?回过头来看西方媒体为什么会这么做?原因是没有渠道,事件一发生所有的西方媒体被赶出了西藏,有必要吗?除非你准备使用大规模流 血镇压,否则让喇嘛打死一两个西方新闻记者不是更好吗?我觉得gcd反应过度,害怕这个东西规模扩大影响所谓的奥运,你越怕他就越来,索性豁出去,让喇嘛 们砸烧抢捎带脚的干掉一两个记者更加血淋淋,(估计下面的官员不敢负责,保乌纱第一。)你封锁了新闻然后指责西方的小媒体歪曲,拜托,那些个小电视台哪有 钱去雇人去西藏,连大媒体都没有消息,他们更加没办法,不得已只好从资料库里面找了。这能怪谁?其次,世界人民对于一件事有多个版本的一件本来就习以为 常,不要以为大多数人都是傻瓜,那些激进分子哪个国家都有,基本上都不是主流,(否则就不算激进了),那么怎么处理这些人?人的精神能量不释放会造成更多 的后果,给他们一个发泄的场所,比如西方社会资产阶级为了麻痹劳动人民的反抗精神就直接妓院妓女合法化,用这一套怀柔方法瓦解阶级矛盾,gcd也完全可以 效仿,以来增加税收丰富劳动人民精神生活,做到既有州官放火也有百姓点灯的与民同乐的“和谐”社会,同时也把一大批从事三产的劳动妇女正式纳入无产阶级的 行列,一夜之间增加几千万的潜在的共产党后备军也是一件大好事,各阶层都有“民意代表”的人大制度将来也可以考虑在妓女中直接发展几名具有三个“代表精 神”的“人大代表”,否则这个“人民”代表大会制度就不够完善了。西方的人权社会很多还做不到真正的人民代表大会制度给超前一步连同妓女都代表了岂不是更 好?说不定很多各级省市领导人还可以在“两会”期间“亲切会见”新当选的妓女代表,新朋老友欢聚一堂,共同叙谈当年夜话,其乐融融,创造出一个“超和谐” 和会。

疲惫的一天。

1。如果你要创建compatiblebitmap,那么不要从memoryDC创建,因为他是mono的,要从原来的dc,同时你不要把你创建的 bitmap捆绑到original的那个dc,药用comaptible的dc才能在上面画东西,msdn写得很明确,我也试验了吃了不少苦头。

2。你如果用getcurrentobject获得的bitmap的handle,你使用getobject会失败的,同样那个handle用 globallock会爆出非handle的错误,我的解释是那个内存是不能访问的系统内存,因为brush用这种办法是可以的,至少msdn的例子是这 样的。

3。慎用invalidaterect指定特别区域重画,或者validaterect指定特别区域不画,因为我自己后来忘记了调整了布局结果始终都画的 不对这才想起了这个害人的东西,其实最好的办法适用画的先后顺序,这样可以避免使用invalidaterect,当然这是个人看法。

4。使用所谓的scrollwindow,你要把资源里面的windowstyle改称resizeable,否则你就是瞎忙,同时所谓的scroll,都是要自己重新画出来的,(当然我估计有些控件可能是帮你做了一些工作,但是基本上是你自己重画的。)

5。关于当前window里面得snapshot存到磁盘文件,原本我的方法是使用一个compatibleDC和自己创建的compatible德 bitmap,然后永远有的dc进行bitblt,但是这有缺陷,首先,原有的dc有可能包含了重叠的东西,比如你当前的窗口上有另一个窗口,(我的例子 就是我打开savefiledlg的window也重叠在一起了,所以这个是纯粹的snapshot,并且scrolwindow的看不见部分有可能就存 不上了,所以最好的做法是不用bitblt而是使用一个专门的画全部方法在你创建的compatibledc连同compatiblebitmap上重画 一遍,注意refresh-background也要不仅仅局限于clientrect部分。重复前面说过的,一定要用compatibledc,不可以 用原来系统地dc。

6。所谓的resize的window实际上是windowstyle这个是在创建windowclass的设定的,如果是mfc的话,应该在资源文件的 属性里,(其实我在就想到了,但实在dialog资源的属性里找了很久就是看不见,哈哈。。。)所以,wm_size,wm_sizing仅仅是一个通知 事件,是不能像scroll事件那样来实现resize的。

rdp=remote-desktop-protocol这个东西要有时间去看一看,应该是一个核心的东西。


四月九日 今天天气很好吗?阳光灿烂 。

我的记忆力太差了,做过的东西没有留下记录就忘得一干二净,所谓鼠标右键菜单其实非常的简单,就是使用一个所谓的trackpopupmenu的函数去画 通过createpopupmenu所创建的菜单,只有一两个东西需要注意,trackpopupmenu的坐标是相对于screen的,所以,你要用 getwindowrect来获得相对坐标,所谓菜单都是一些id,自己定义一下就是了。另外创建createcopatiblebitmap失败的原因 不是内存太大的问题,而是bitmap必须宽度满足align32的要求。听说yahoo要破产了,我赶紧把我所有的再yahoo-group的存档转移到微软


四月十日 今天天气很好吗?阳光灿烂 。

DC说getdibits里面的那个pal的flag从来就没有看到有人用过,我也将信将疑,联想微软很多gdi函数都有些虎头蛇尾,比如我原来试验了很 久才发现用bitmap的压缩格式存储jpg,tiff是没有实现的东西。此外,我今天对于paletteentry的rgba顺序和bitmap- colortable的rgbquad的bgra顺序发了好一阵呆,是否我应该自己去调换呢?我的意思是如果我存储palette的bitmap时候,比 如8pp?DC说不用,我还是将信将疑。


四月十一日 今天天气很好吗? 下雨了很冷。

回到家发现服务器当掉了,最后一个错误好像是121=ERROR_SEM_TIMEOUT=“The semaphore timeout period has expired”,我猜想会不会是网络连接的超时?比如dns服务器的超时?我在命令行敲入ipconfig /displaydns先是localhost的timetolive是一个大约4天多的秒数,会不会使这个超时呢?

DC总要显示他比我强,我不知道双击window-caption导致最大化是什么事件,他就笑,说那时属性,让我取handle- ongetminmaxInfo,我说fullscreen不是自动的吗?他又开始揶揄我的所谓automatical,我要设定maxsize,要使用 systemparametersinfo来获取workarea的面积。处理mouse-wheel实在是太简单了,总的来说对着事件写回调函数我当年 没有学过任何计算机的都可以做到还能很快成为小公司的程序元,可想而知,但是要进步到一个初级偏上的程序元,就是能够按照msdn熟练使用各种api,那 还真要上过计算机本科才行。今天又明白了一个简单的道理,在处理bitmap的时候,系统compatible的hbitmap句炳并不能获得所谓的 palette,你要明白palette是和dc相联系的,因为bitmap都是一样的,(尤其是16色以下的依靠palette的颜色),需要靠系统地 palette来解析,所以才会出现所谓的不同机器的色差,这个和显示器的色差又是另一回事,比如某种256色本系统没有就只能找相近的颜色代替,那么你 在存储256色等得bitmap图时候怎样获得palette呢?我一开始想当然的以为用getcurrentobject获得当前的hpalette, 然后用getpaletteentries来获得palette,1。我昨天说了paletteentry的rgb顺序与bitmapinfo的 colortable就是rgbquad的rgb顺序颠倒,2。使用getpaletteentries只能获得系统默认的20个palette,这是我 一直没有想通的,后来看见dc跟踪才明白不需要这一步,因为你一定要用getdibits来获得bits,同时你得colortable就被填满了,3。 使用getdibits的时候,是否bits的buffer要和header+palette的bitmapinfo相连呢?我记得我以前做过实验室不需 要的,今天又在问了一遍,同时试验结果也证实了,但是dc说的有道理,如果相连的画可以直接送到clipboard作交换,当然是好的了,而且写 bitmap文件也一气呵成有效率。我今天费了很多时间没明白的是在于读msdn粗枝大叶,16色以下的bitmapheader的colorused如 果设为零表示最大可能的颜色,所以,计算文件长度时候要小心。DC好像还专门去handle一个bitmapcoreinfo的结构,我猜想这个会不会是 早期windows之类的结构?SetTimer一开始被DC认为是创建新的timer,我读msdn觉得不像,他叫我看process-manager的handle是否增加,结果不是的,所以说帮定window的timer使用id的话是单独的timer,set相当于reset-timeout。


四月十二日 今天天气很好吗?下雨了很冷。

早上去健身房,感觉在这种地方呆上两三个小时是很开心的一件事,因为心思纯粹,身心如一,然后去实验室想把那个该死的东西写完,可是我的懒惰是不可限量 的,当然也是很疲惫不堪,看着看着就睡着了,熬不住了就随便吃了一点东西回家睡觉了。一睡就是一下午其实也不算睡觉,实际上是躲在被窝里看eeepc里装 的《射雕英雄传》,哈哈。晚上看mr.bean's holiday梦想着将来沿着他的路线去法国,最好能够骑自行车旅行,哎穷人的梦想,不过我想这是富人们所永远体会不到的快乐。也许大多数人的一生都是一 个笑话,只不过大多数人讲给自己听,少数人讲给大家听结果被大多数人羡慕得要死。我想如果我要真地想知道真相就只有自己写一个简单的文件loader替代 mysql这样我就知道到底是httpapi的问题还是mysql的问题了,问题是我真的有时间吗?或者说不是时间而是一个人的热情,passion是否 存在?

逃避并行编程的方式就是看<yes,minister〉知道什么叫做quango吗?字典里没有,看了wiki才知道,这是哪一类的NGO的总称, 尤其是那一类的号称非政府组织实际上是政府操纵的组织,比如说“政邪”,“公贿”,“哄虱子会”等等。部长往往是最后一个了解真相的人,因为按照那些官僚 的说法就是部长不应当知道得太多,比如特工被抓住以后会被拷问,如果他们知道真相就会说出来,所以干脆不告诉他们真相,所谓的need-to-know。 有一集叫做<compassionate society〉中文翻译过来就是所谓的“和谐社会”。


四月十三日 今天天气很好吗? 又下雪了感觉比冬天还冷。

早上去试验室又睡着了,结果很不理想,也不知道什么原因,回头再说吧。


四月十四日 今天天气很好吗?感觉比冬天还冷。

心情非常得不好,期待中的没有发生,当然实际上我还是预测到了,只不过还是非常的郁闷。DC属于中国话里那种刚愎自用类型的,处处要显得比我强,他有不少 的奇技淫巧,比如说如果你的函数里面有一大队的指针,突然一下你打算把他都变成引用如果他是参数的话,我以前非常烦去一个一个地把"->"该城 ".",DC说他声明一个宏,这的确是一个好办法,因为从性能上说完全没有影响,不像你声明一个变量去赋值由损失,而且编译器都明白的,code- completion照样使用。对于CString我一直没有用过,前两天临时抱佛脚用了一下才明白这个东西好象以前delphi里面的智能string 一样,再pass-by-value的时候效率非常的高,因为他是一个“延迟”copy的方式,一开始仅仅是copy指针,直到有改变的动作发生的时候, 检查引用计数,如果不为零就说明有额外的拷贝在被使用中,这个时候再真正做拷贝以便改变,而且普通的时候应该你不需要关心同步的问题,在引用计数增加的实 现种内部使用了incrementlock的机制,当然如果有多个线程修改我觉得还是应该使用lockbuffer来的安全。我第一次使用不小心翻了一个 大错,声明了一个结构包含了一个cstring然后随手使用zeromemory初始化 那个结构,就是memset之类的,结果你当然可以想象了我总是遇到cstring出错,因为我把里面的东西也给干掉了!

有些老问题我反反复复得遇到就是老犯错。1。系统地dc是不可以被你是用来做“画板”的,可实施bitblt之类的source,不可以是dest,即便 是src也不能使你自己的bitmap,只能是系统的,(难道不对?)2。你如果创建了bitmap想要使用setdibits那么一定要使用 createcompatiblebitmap,使用createbitmapindirect一般是不行的。所以缩放图片你需要两个dc两个 bitmap,想偷懒使用系统的不行的。3。凭空创建dc可以使display的dc,比如createDC(_T("DISPLAY"), NULL, NULL, NULL);这当然是因为你没有hwnd的情况下,凑合着用吧。4。ijl里面的jpegcoreproperties的jpgcolor, dibcolor不是普通我们的colorbit,是猜出来的,据说jpeg根本不能知道colorspace,所以jpgchannel:1= IJL_G,3=IJL_YCBCR,其他=IJL_OTHER。我当初不理解。

最近闹得沸沸扬扬的西藏事件及其引发的火炬事件我只觉得很可笑,双方都很可笑,纯粹庸人自扰,不妨冷眼观瞧。首先,gcd自己混蛋为什么要搞新闻封锁落人 口实?当初申办奥运的时候就应经答应要新闻采访自由,为什么不敢?造成今天这种情况纯粹是应对无方,事情搞得大了让几个官员下台未必是坏事,问题是不可 能,所以不妨再高的轰轰烈烈一些。至于说那群藏民,原本就是无知无识的农奴你能拿它有什么办法?西方社会同情弱者未必是坏事,暴民暴动说明已经绝望,所以 更加不用担心,但反分裂主义走向恐怖暴力就说明已经失去民意,所以更加不用担心,只要暴乱的范围限制在西藏不妨再乱一些,不妨多放一些cnn和bbc的记 者进去,管杀不管埋,有什么好怕的?

感觉很冷,也许是血管里的血在变冷,曾经得令人热血沸腾的东西如今变得如同从窗外钻进来的冷风一般令人不寒而栗,年轻的时候幻想着我和我的梦想远走高飞, 如今发现生活的轨迹如同一个个的同心圆,画完了一个圈还有一个圈,只不过有时候在外面画有时候又回到了圈里面画。正应了那句陈词滥调,少年不是愁滋味,如 今忧愁有时比三千丈的长发还要长。


四月十五日 今天天气很好吗?感觉比冬天还冷。

ip地址变了,现在是CGX的图片在(删除了,忽然觉得那个毕竟是陈冠希本人及其当年女友的隐私,如果换坐我是什么感觉?) 感觉完全没有办法解决这个问题,只好使用下下策,用__try__except,语法有些不太明白,感觉就是要么__try__except,要么 __try__finally不能够三个一齐用,而且finally是在外围得except执行完之后在执行,msdn的例子是这样的,也是很合理的。再 试验一下吧。

从来没有真正的有意识地去使用unicode及其wchar_t,今天才明白了一个基本道理,再little-endian的系统下,short的高位地 址先读进来,那么wchar_t定义的字母'a'就是低位'a'高位‘0’,于是按照short就仍然是'a'因为高位是0,这个的确好,因为,我需要把 wchar_t转为char,因为mysql的一些参数直接受char,于是使用字符拷贝一个一个的拷贝就可以了。

感觉如果你要保证你得code不论在什么意外之夏都能保证释放资源是一件相当不容易的,DC这一点说的对,如果你相信msdn的粒子都能工作你就是太天真 了,很多例子都有相当严重的问题,不要说保证资源释放了。比如今天看的那个clistctrl的一个sortitem的简单例子,我搜了一下google 就发现有人说那个不可行,因为mfc的callback的参数是和资源帮定的32位整数并不是item的index,反正我试了一下发现有别的问题,就是 callback的参数都是0,也许因为我市debug用得自己马马虎虎创建的item哪里有什么不对吧。感觉mfc太庞大了,至少要专心致志学习两三个 月才能入门,我觉得这对我来说是最基本的,gdi总共就没有几个函数我差不多花了一个多月才有写入门道。mfc至少十好几倍,当然很多我可能根本不用,或 者使api的包装,有些应该是stl的包装,使用起来还是容易的。制造工具是区别人类和类人猿的标志,马克思并没有强调说使用工具,看来能够使用工具并不 能保证你已经进化了,我离一个直立行走的人还差不少呢。


四月十六日 今天天气很好吗? 阳光灿烂。

今天终于独立弄明白了listview的sortitem的解决办法,msdn上错误累累,你要全信就是白吃了,当然那是一个guide,告诉你方向。 1。再insertitem的时候,listview内不会帮你额外保留一个LVDATA的东西,你可以看作是一个索引数据,这个可以用 SETITEMDATA来设定。2。插入数据的时候使用INSERTITEM会返回当前的INDEX,然后你可以使用这个INDEX再来用 SETITEMTEXT来设定其他的“栏目”,我在这上面吃了亏,因为拷贝MSDN的例子就犯傻了,普通都以为每次插入当前的INDEX应当递增,其实不 是,每次都是插入位index=0的位置。3。再listview里面原本就有一个style时enableheadsort,意思就是允许 clickheadcolumn的时候发出sortitem消息给listview,所以,developper只需要处理一个sortitem的函数, 把一个用户定义的comparison的回调函数当作参数传进去,同时你还要给你的回调函数传一个自定义的参数。4。这个自定义的参数很重要,首先当前用 户点击的column的index是“subindex”不是那个iItem,那个不一定会用,总是-1。其次,listview再call你得比较大小 的回调函数时候有三个参数,前两个是当前要比较的两个行得item的lvdata的lparam,这个就是你在使用setitemdata设定的一个 32bit的数,最简单的是把这个item的行设定为这个数,可是,你不能再insertitem的时候设定因为每次排序之后这个行好就变了,所以一定要 在排序前设定。5。你单单有了行号还不足以比较大小,所以第三个参数需要把listview自己当作指针传进来,同时column也要当作参数传进来,所 以,涉及一个结构存这两个是必要的,否则用全局变量非常得不好。6。这里有一个需要讨论的问题,就是我再call完listview的sortitem之 后并不一定系统马上就开始排序,我的参数如果是一个临时变量有可能指针做参数会失效,设定为static又有多线程不安全的问题,当然这个问题总是会有 的。总之,这个问题我觉得还是不简单的,搜了一个dude夸张之极,他说得没有错,msdn的例子不行因为默认的那个回调函数的参数不是行号,所以他的解 决办法是把所有的item都取出来排序,然后再重新填回去,这实在是太夸张了,真有些愧对guru的称号,各位大概google一下都能找到他的文章。我 在解决之后,再次度各种对他的回应发现了和我的一抹一样的解决办法,真是应了那句老话,什么什么的所见略同,因为这是一个最一般的办法,只不过你读 msdn真要被她活活气死,根本是一大队的错。DC说globalalloc如果使用gmtr做参数分配的内存是固定的地址,不能被当作vm swap到硬盘,所以不要用,我想这是对的。此外他说device-driver都是64bit-aware的,就是说他们都是使用64位地址,对此,我 不置可否。这个老家伙确实是摸爬滚打出来的,我对他说他的一个等待的方法使busy-waiting有可能是系统瓶颈,他立刻就反应过来了,只给我看她基 本上不用那个,即便用也是迫不得已,比如logoff的时候当前thread不能yield,必须等待完成当前任务才能yield,因此,这个不算错,其 次,他讲了一个它的yield函数,这个市专门用于gui的thread的yield,就是再sleep之前先call- dispatchmessage,translatemessage等等那一套,这样才能保证gui不会僵死,并且他认为在 dispatchmessage里面自然就yield了,后面那个sleep并非完全必要,这个很有意思。今天他让我做一个类似delphi里面的分割 条,看似容易其实很不简单,我还找不到头绪,他让我用它的一个拖拽的函数,我心里有些抵触,总觉得不用那么复杂,可是却找不到合适的办法。

晚上在大街上闲逛新在想这样的悲惨生活就是当初我所期待的,为什么现在会感到烦恼呢?


四月十七日 今天天气很好 ,阳光灿烂。

加拿大人最让人不可理解的就是对于冰球的狂热,今天大概是在rogers比赛吧,人山人海的,车上都是ch旗子,人们身上也都是这种t恤衫。DC这个习惯 还是好的,他认为我sortitem的方法有可能覆盖原本得itemdata,决定在覆盖前备份排序湾再写回去,再写回去之前,这家伙还打算考我一下,当 然我的反应就慢了一两秒而已。当然我是没有一开始就意识到排序后index都变了的问题。今天发现了一个DC的奇技淫巧,他始终坚持我用它的一个小函数, 我已开始觉得平淡无奇,这是一个类似于实现脱拽的小玩意,因为控件本身在他的边缘的时候的事件的捕捉很麻烦,因此你要在两个控件窗口间藏一个很小的东西, 比如使frame,已开始使用button不好用,因为button的事件实在mousebuttonup的时候才出现。这实际上是一个general的 问题,再mfc里面消息循环都被掩盖了,你一般是调用现有的事件回调函数,那么有些问题就比较讨厌了,比如你想在鼠标按下的时候开始拖拽,在鼠标弹起的时 候放下,那么如果你是对这消息循环当然比较容易,但是如果是对应着edit,listview之类的有些麻烦,因为他们在主window之上,你如果想尽 量采用主窗口的坐标,你要先进行setcapture让主窗口来捕捉鼠标事件,同时,在两个回调函数之间设立全局标志是最不好的办法,而且一般不建议去干 扰mfc原本的消息处理机制,所以,DC用一个小函数来peekmessage窥探鼠标是否弹起来是一个挺好的办法,当然你要使用 getasyncstate之类的快速返回函数察看键盘鼠标事件,不过这里有个问题就是peekmessage并不一定能够截获所有的消息,因为很多时候 这种polling会是空的,因为没有消息你要赶快返回的,反正我始终没有办法捉到mousemove的消息,那么怎样才能画拖放的轨迹呢?注意 peekmessage里面的lparam,wparam虽然有可能空但是pt对应的鼠标坐标始终都是正确的,这就是你得mousemove轨迹,注意他 是screen坐标的,需要screentoclient来变换。总的来说这是一种较好的做法,很小的细节但是很不错的,就好像当初我把我相关的gdi操 作的事件处理函数集中放在一个消息处理函数中,总的消息循环再来调用一个个的综合的消息处理函数,这里的综合往往是某种功能的多项处理,逻辑上很清楚, (当然很可能不同的功能有些可能会冲突,不过我想这本来就是window gdi的内部做法,所以你才需要始终遵守分配资源释放资源的循环。)


四月十八日 今天天气很好 ,阳光灿烂。

好像是停电造成的modem重起,ip地址又变了,我应该去申请一个dynamicDNS。是的,反正是免费的,现在使用这个http://nickhuang99.dynalias.com 哈哈。。。我觉得gcd政府要去封锁ip地址实在是徒劳的,难道你要把这些余名解析服务都封掉?以前对于geocity.com得彻底封杀我觉得就是一种 耻辱,虽然说那上面有大量的黄色个人主页,可是一个愿打一个愿挨,就其原因还是在几年前的更加黑暗的时期,gcd一味向秦始皇一样的焚书坑儒就能够阻止思 想的交流,意识的传播,这个想法在几千年前,几百年前,几十年前,甚至是十几年前都是可能的,但是今天就入bill gates所阐述的那样,咨询产业改变了社会发展的法则,所谓的因时而边并不是戊戌变法的几个腐儒说给年幼无知的儿皇帝的海外奇谈,很残酷的,仿佛生物进 化的环境改变的物种的消亡,gcd既然走进了资本主义的俱乐部现在想要退回封建统治的那个自留地是不行的,第一,人民不答应,第二,俱乐部里面的其他资本 主义帝国不答应,第三,这个gcd的内部成员也不会答应,第四,也是最重要的,上层建筑必须适应生产力发展要求的法则不答应,这就是所谓的“硬道理”,敢 和这个法则作对的都逃脱不了灭亡的命运,这就是所谓“三个代表”的由来,这就是所谓“和谐社会”的起因。不过很多时候变革都是利益的再分配,究竟统治者再 多大程度上的让步成为变革成功与否的关键,中国历朝历代的统治者习惯了敲骨吸髓般的奴役,变本加厉般的盘剥,大概在东西方统治中的差别旨在与宗教在社会价 值中的地位,马恩列斯强烈批判宗教的奴役兴起是仅仅是为了开创他们自己的宗教即所谓共产主义的“一神论”而进行的精神准备,归根结底一个必须有某种共同的 价值观才能谋求某种程度的稳定与和谐,宗教在社会生活中仿佛一种润滑剂,在社会矛盾尖锐时候起到缓冲的作用,马恩列斯不是不懂只是为了标榜自己的宗教的独 一性而不对自己的衣钵弟子阐述,事实上所有的宗教几乎都是排他性的,标榜自己的“神”是唯一的神。可能少数几个里外就是当年罗马帝国时代疆土辽阔接纳多方 种族时候的“培根”宗教吧?我看电视上说的,当时罗马帝国跨三大洲能够统治大半个世界的原因在于他们包容其它的宗教信仰。也许在大多数能够为很多人信仰的 宗教都要求人们向善,但是作为统治者是否将其作为精神工具还是使用工具的同时自己也信仰却是一个很大的不同,大概中国历史上很少有宗教治国而成功的例子, 所谓的“儒家学说”只能说是一种哲学算不上宗教,这一点大概和印度教相似,因为宗教必须“神化”,你不创造超人类的传说始终不能够吸引渔妇渔夫,因为和普 通来百姓谈哲学那是毫无疑义的,因为宗教的精神鸦片作用不在于明白是非而在于给人希望暂时忘却痛苦,解脱精神压抑,清谈哲学只有让人民更清楚看清现实,这 和统治者的初衷完全背道而驰。作为社会前导的知识分子是否应该加入到“润滑”社会摩擦的宗教信仰行列呢?这仿佛是一个因人而异的个人问题,牛顿晚年信奉了 基督教这也许除了个人原因还有政治经济的因素,不过我觉得最主要的还是一个人儿童时代的家庭环境,在基督教家庭自然你有很大的可能成为基督徒,因此这大概 都是如同今天.com时代的先入为主一样,见多了就习惯了,无所谓原因。不过我个人的感觉是基督教大概要优越于所有的其它宗教,佛教的目的仿佛是钝化人的 意识,伊斯兰教则为了目的不择手段,仿佛一手拿可兰经一手拿宝剑来传道。

真正明白一个简单的道理都是很不容易的,何况这样的问题在计算机里尤其是今天的软件很多都是如金字塔般的庞大就可想而知了,那么一个人一辈子能明白多少? 我不知道,反正很有限,记得当年上combinatorial algorithm时候教授很佩服knuth,用的教材就是knuth还未正式出版的手稿部分,这个在amazon上有卖的,他的个人主页上也可以下载, 主要应该是征求人们发现的错误,大概初期的错误一两块美金,后期的可能只有几毛钱了,钱不是什么,主要是拿到knuth的亲笔签名的支票,尤其是辅助上说 你发现了他的错误那是一件学计算机的人很风光的,我当时对班上的一个白人小孩子的这件珍品非常的羡慕,他也专门炫耀使得拿到班级里让大家传阅,教授专门研 究knuth的算法也没有这样的运气,哈哈。。。想到哪里了?说的就是教授在课堂上讲knuth年轻时候的轶事传闻,有一个计算复杂度估计的算法就是 knuth在等待计算得无聊实践中想出来的,他在上课的时候常常和他的教授争论不休,据说总是要把所有的问题都要搞懂为止,以至于到了某种极点。他的个人 的解释是这样的,计算机这个东西一个人腰都搞明白是绝对不可能的,生命与时间都是有限的,于是knuth认为在有限的时间里碰到一个问题就搞明白一个是最 好的策略,于是他就专门钻研到一个问题的非常深入的地步,比如他的那些算法有时候代码精炼倒仿佛天书,完全想不出是怎么写出来的,我觉得大多数人都不会这 样做,因为这仿佛是一个哲学问题,是否在前人反复挖掘的金矿利在深深地挖掘得到金子的机会多还是到前面仿佛很少有人去的地方挖掘?当然你可以争辩说人人都 想着同样的事情,结果人人都认为荒无人烟的美国西部成了熙熙攘攘的淘金者簇拥的地方,这个道理好象古代的小孩子都明白的,就是在大陆旁结满了整棵大树的李 子应该是酸的。可是谁知道呢?也许人人都这么想都不去尝试,最后那个人人都不相信会成功的环球旅行的哥伦布又成功了,这也许就是曹操的虚则是知是则须知, 诸葛亮却反其道而行之来了个实则实之虚则虚之。总之,天之道,损有余而补不足,我辈只须努力,结果如何并不见得自己能够预料,只要临了自己觉得尽了力了就 是有结果了。

什么是pch?我原来以为自己明白了实际还是不懂,因为有时候仅仅明白一个目的是完全不够的,但是目的往往重要性又在具体实做之上。首先,目的是减少编译 时间,附带的可能也减少了编译中的莫名其妙的问题,因为一个大工程里面有很多module如果公用一些很少改变的部分,那么使用pch (precompiled-header)是非常合适的,因为一旦编译再不用反复引用。原因明白了具体做法很重要,我上一次就是完全不理解怎样做,首先, 再vc++编译器中认为.h文件不是代码文件不能编译成为目标文件,所以这就是为什么mfc总要产生一个stdafx.cpp的原因,你得 stdafx.h是存放所有的头文件的,而stdafx.cpp是一个空壳子,唯一的左右就是产生一个pch,因为空文件也算是代码文件。其次,所有其他 的source文件要引用pch的必须在第一行就引用,比如include stdafx.h,这里你得pch就是命名为stdafx.h的,具体有两种做法,一个使用project/setting的pre-compiled的 选项设定,另一个办法就是直接在编译选项来写开关,/Yc"stdafx.h"是产生pch,/Yu"stdafx.h"时使用,还有一个/Yp的开关我 没有很理解,总之,第一个办法是肯定没有问题的,自己写开关的细节我还有些疑问。不过,自今以后再遇到unexpected end of pch的错误不会不知所措了。

我现在其实很满足的,每天就搞明白一个很小的问题就够了。 忘了记录下来,上一次提到过得sortitem的系统时间处理函数带一个用户定义的回调函数和用户定义的参数,我当时担心排序在这个sortitem函数 返回之后才开始,比如是一个类似“异步”的样子,现在发现排序是一定要结束了函数才返回,这样很好,所以DC的感觉很敏锐,虽然他当时没有看明白所有的细 节,但是这种感觉是有的,这大概就是coding二十几年的手感,当然了如果我花了好几个小时才搞明白的东西他能够化二十分钟看明白,那么我也太菜了。我 很菜鸟吗?


四月十九日 今天天气很好 ,阳光灿烂。

我花了快两个小时才找到一个我绝想不到的错误的,内存分配方式!我因为听从了DC的说法而采用GHND作为GlobalAlloc的参数,因为他认为内存 地址可以移动有利于系统优化内存分配,我对于globalalloc已经失去意义的说法被他反驳说globalalloc可以分配超过物理内存的 size,我对此半信半疑。今天早上我用ijl写我的jpeg的小小工具,结果始终都遇到ijl报错,原来是我分配内存的方式GHND是可移动的有问题, 反正改成不可移动或者使new之类的都不会有这个问题,是否是内存地址跨越dll边界的时候需要固定呢?感觉是这样的,只不过我现在对于 globalalloc的分配机制和普通得heap分配有什么不同没概念。看了一下明白了一个简单的道理,globalalloc返回的一般是一个带有计 数的内存块地址,如果是不能移动的,恰好handle地址就是分配的内存地址,但是如果用其他的比如可以移动的,则必须使用globallock返回的真 实地址,我记得我以前做过类似的东西,犯过类似的错误,为什么同样的错误我总是屡屡重犯?我的记忆力实在太糟了。同时,globalalloc分配的内存 使execute的就是说你可以运行动态生成的code,(有人这么干吗?)总之我的结论是globalalloc和普通得heapalloc应该总的来 说没有大的区别,但是heap要快,global可以比较大,但是我的程序的错误在于没有使用globallock来获得真正的地址,handle不是分 配的内存地址,如果你使用moveable的参数的话。

写一个高质量的小工具相当的费力,花了一早上只完成了一半。看网上的一个视频是一个叫做“王千源”女孩子,这个就是现在风靡一时因为在美国大学校园里面所 谓的“藏独”与“返藏独”的辩论中的行为被斥责为卖国贼的,同事居然中央电视台居然用“最丑恶的留学生”字眼说一个学生。其实,对于某个人的行为有必要群 起而攻之吗?我觉得这是gcd在转移焦点的一个煽动民族主义的手段,我知道很多人对我的说法要嗤之以鼻,其实,温家宝在去年底的时候讲了一句心里话, 2008是中国的非常困难的也是关键的一年,所谓困难是内忧外患。

中国目前经济有极大的危机:1。人民币升值已经达到了15%以上,对于大多数工业行业尤其是出口导向的企业,如果用不变价格计算那么基本上达到了成本的边 缘,问题是升值代价能否转移到进口国?美国被次贷危机拖累到已经明确宣布进入衰退,欧盟和世界其他国家也都成为美国的次贷地承担者,换句话说谁也逃不了。 2。石油价格飙升了三倍以上,新一轮的能源危机就在眼前,由此引发的全球性通货膨胀仿佛就在明天,粮食价格已经在世界范围内上涨了,是否世界经济在持续增 长十几年要进入一个衰退期?3。中国国内社会矛盾的尖锐化已经进入了一个新阶段,贫富差距的悬殊所表现出来的社会问题多种多样, 其中有一点我觉得国内的投机之风日益盛行于政府的价值导向有关,也和国内民族资本家棉铃的内忧外患有关,据说现在什么都可以炒作,从茶叶到地产,从木头到 石头,资本进入高风险的投机领域的原因也和国内很多行业的困境有关,说明扩大再生产在萎缩。4。失业扩大,通货膨胀,世界性经济衰退,全球性粮食危机,能 源危机,气候危机,全球反华阵营的建立,国内各个阶级之间的矛盾的加剧,共产党官僚体制的无节制的膨胀,国内民族矛盾引发的人权危机,奥运会政治橱窗作用 结束之后的一些列反弹效应,等等是否会让2008成为共产党重大危机的开始?

很多时候我觉得gcd能够长期生存和政治恐怖主义以及思想清洗与资讯封锁是紧密相关的。比如对于王千源这样一个女孩子有一些自己的看法在大多数国家都是正 常的,在全世界人民群众从来都是和起伙来反对政府的,像今天这样大批的留学生对于一个表达了一些与众不同看法的同胞群起而攻之,乃至要威胁肉体消灭让人想 起了类似于伊朗之类的宗教极端主义的模样,当然共产主义原本就是类似于宗教极端主义,煽动民族主义为政治目的服务原本就是顺理成章的。我个人原本就是坚决 反对奥运会这一类的劳民伤财的政治表演的,当然鉴于说这些钱不花掉也会被政府官员挥霍掉,那么办一下也未尝不可,问题是怎样办?花多少钱?我的这种观点肯 定在国内时要被群起而攻之的,可是只要想一下现在的北朝鲜就明白我的意思了,一个连吃饭问题都没有解决的穷国却要时不时地举行盛大的十万人的团体操表演, 包括大多数中国人都会觉得可笑,可是同样的问题放在北京有的人却要强调中国和北朝鲜有巨大的差别,要另当别论,果真如此吗?听说食用油便宜几块钱小老百姓 不惜打破头抢购居然踩死人,欧美这么富有的国家办奥运会多花了几亿美金全国上下都叫苦连天,可是中国这样一个10%人口每天收入不到一美元,自己设立的贫 困线连联合国的平均水平都不到的国家大笔一挥几十亿几百亿美金就扔了下去,真是让人惊叹。很多人被一种盲目的民族自豪感驱动完全不去思考究竟是西方媒体歪 曲西藏事件在先还是功产党封锁新闻在先?到底孰因孰果?而且我以为按照经验主义的一般法则,根据共产蛋的一贯做法风格,可以用当年秦桧对付岳飞的办法来评 论,就是说不管这一次到底有没有进行血腥的镇压或者等等不妨称之为“莫须有”,就是说我们指责共产蛋做事混蛋完全可以认为不一定要有事实依据,因为作为被 告自己采用隐瞒手段封锁消息必定有不可告人之举,既然有不可告人,我们也不妨“莫须有”,我想这才是西方主流看法。在普通人眼里,如果有人针对常识性的概 念中的某些不重要的细节来反驳整个概念的正确那是很荒谬的。比如我们大家都认为老虎很凶猛会吃人,有人因为有几天老虎没有吃人而反对众人的观念这实在是可 笑的。


四月二十一日 今天天气很好,阳光灿烂。

我花了一两个小时才找到缩放图片失真的原因,和jpg的失真无关,使stretchblt的模式问题,默认的是做and操作,即便是or效果也不好,只有 用halftone才能达到高保真。我猜想这是做了一些类似convolution的操作,比如相邻像素取平均值。今天,DC说 SendMessageTimeout有些问题, 搜索了一下,大概是这样的,判断一个窗口是否不响应使用这个函数,因为一般的窗口如果5秒内都没有调用getmessage就可以认为是刮起了,但是如果 这个窗口调用一个大的任务,比如大文件同步读写,这时候你是不能判断这个窗口的情况的。此外,这个函数不等于sendmessage+timeout,这 个我看到一个专家说的,就是要注意sendmessage是blocking德,但是这个函数还会处理non-queued-message,所以要使用 一个block的参数。


四月二十二日 今天天气很好,阳光灿烂。

我的mysql一下子索引坏了,我怀疑是我村文件的时候磁盘空间不够引起的吧,当时表里面已经有重复数据了所以加上简直也不行的,所以只好用临时表来把数据到来到去删除重复的数据,虽然简单可是会经常用吧?要注意max和group by总是一起使用的。在命令行输入sql文件的命令式source或者\.总是忘记。现在进度很慢很慢,每天就只能写一两个小函数,目前初步完成了jpeg的封装,保存一个小小的版本吧。

insert into mypicture 
(picture_name, picture_size, picture_time, picture_data, picture_signature)
select max(picture_name) as picture_name, picture_size, picture_time, picture_data,
picture_signature from mypicture_backup group by picture_signature ;

四月二十四日 今天天气很好,阳光灿烂。

DC打电话给他太太说他现在又处在所谓的die-hard-mode,这句话的含义就是说他第二天告诉我他当天晚上十一点才回家,第二天早上七点多又起 来,反正这个crash的问题折磨了他两天也没解决,问题是很奇怪的,我一直怀疑他再xp上用虚拟机编译然后部署到远程server也许有什么问题,总之 我的win2k-server上的旧版本没有这个问题,他还认为它新作的win-hook如果把本地的CString当参数传进去会导致crash,他的 理论是cstring,beginthread都需要用到CRT的dll需要额外分配内存,我对此将信将疑,总之试验并没有排除也没有证明,我觉得他是 desperate乐。


四月二十五日 今天天气很好,阳光灿烂。

vc6德batch-compile有毛病就是不能够保持原有的projects的dependency。唯一的办法我觉得就是直接使用 makefile,不过vc6的makefile很麻烦的。今天终于正是了我的怀疑就是mysql空闲8小时终端连接,还有一大队的参数,这再gui的工 具下很简单的。不过mysql实在是太烂了,我才更新不到20张图片就断了,每次都是如此,最后只能在本地做,我也怀疑这本来就是免费版本的限制。


四月二十六日 今天阴天,得了重感冒。

刚刚才意识到ijl不能处理24色以外的bitmap,这实在是笑话。我觉得我犯了两个错误,第一使用mysql看上去容易实际上碰到性能要求的时候问题一大队,或者说资料不全,第二是用intel的ijl库处理jpeg看上去很好, 可是现在看来ijl支持24色bmp,这实在是讨厌。因为他给你一个功能就是先读取jpeg的参数可以让你按照大小分配内存,我如果画上一天时间也可以把ijg这样做,可是毕竟很烦人的,ijg的代码无比的难懂,至少对我来说。


四月二十七日 今天晴天,得了重感冒。

完成了图片浏览的全部工作,又用一个最简单的mapi发了一通spam给我所有的通讯联系人,这就是spam,如果你们觉得这些message很讨厌这只 能说你们交友不慎摊上了我,如果不回夫说去掉list,以后就自动发了,这就是internet上最基本的东西,porn web + spam, 以后就朝这个方向努力吧。简单的说,internet上的东西如果所有的东西都从头做起非常的不容易,图片处理我不过是把现成的library包装了一 下,数据库访芬我也不过是调用客户端api,http-server我也不过是使用http-api的现成函数,大部分的处理架构都是在原来msdn的 sample基础上改动一下,发送email纯粹是用mapi函数没有涉及smtp,但是这个小小的工程前前后后,断断续续花了一个多月,基本上没有多少 算法但是整合花时间,不过讲老实话我是看不太起这一类整合技术的,因为很多时候的编程要比自己设计算法容易得多,只是除了问题常常无处查找,比如我一开始 看到的mysql的资料说得是早先5.0之前的连接有bug,会自动断开,后来改掉了,结果我理解错了,不响应超过8小时还是断代的,这个和自动连接不是 一个概念,这个小问题花了我很多时间,完全是无意义的。

不过,我在平常抽时间克服眼睛疼脖子疼的困难能做到这样应该可以满意了。

跑步,主要是走路到W1家把我的自行车去了回来,骑车到W2,然后骑了半个下午,天气实在是太好了,在着明媚的春光里,风和日丽,让人不禁想起了another day in paradise。当然这首歌原来是反话,是劳动人民的又一天的悲惨日子,不过蒙特利尔的劳动人民不愁吃穿不奢求富贵,知足所以常乐,大概简单就是快乐。每天中午一个汉堡加薯条可乐,每天晚上固定是牛肉饭,周六周日跑步爬山骑车。

感谢jason发现firefox不能正确显示的问题,主要是我没有设定HttpHeaderContentType为text/html; charset=utf-16.现在可以在试验一下:http://nickhuang99.dynalias.com


四月二十八日 今天下雨,很冷,都穿皮夹克了,夏天来了冬天还会远吗?

DC找到了他的bug,他说因为Raja总是打断他,所以他不小心一个内存释放了两次,这就是灾难,因为我们观察到的现象是一个很遥远无关的模块出现 crash,仿佛蝴蝶效应一样,在太平洋的一只蝴蝶伸展了一下翅膀引起了大西洋飓风的生成。眼睛很痒,很难受,心情也随着天气而晴转阴。html里的 action指得是服务器端的uri,method=post。


四月三十日 今天没有下雨,很冷,都穿皮夹克了,夏天来了冬天还会远吗?

进展非常的缓慢,每天只能前进一两个函数,要写强壮的代码其实很不容易的,最重要的就是不论发生什么情况都要防止资源未释放,当然多释放问题可能更糟糕了。  

遭遇了user breakpoint called at code xxx的错误,这个一半就是再debug状态下heap的内存分配的前后边界被写过的错误,当然就说明内存分配释放的错误。晚上在追踪吧,开始使用callstack,当然并没有多少帮助但是表明我从业余进了一步。

DC叫我用namedpipe来模拟server-client的通讯,大体上应该和linux的大同小异,试验以后再说吧,关于这一点他一开始要我把 client的文件给server来用,但是他当初设计的时候有些问题,有些东西同名不同样,当然一开始很难预料到server/client共享的文 件,(其实现在他才意识到有一些所谓的protocol的东西时common的)但是改造这个的工作量不小,而且它的变异有些复杂,又一辆的东西按照他的 说法是所谓chicken&egg的关系,所以他用宏定义了两次编译,这个我从来没有玩过,另一个奇怪的问题我象记录下来,就是我要调用 client段德dll使用__declspec(dllimport)却不能正确链接,lib的路径没有错可是unresolve,我怀疑DC使用. def文件将输出函数的decoration重定义了,但是,函数名就是正常的名字,难道再def里面需要调用约定的stdcall吗?好像不行,最后我 只好使用loadlibrary动态加载。我平时使用的都是_declspec(dllexport)没有这种问题呀。

<The Devil Wears Prada>实在是让人惊讶女人居然有那么多的变化,换一件衣服就变了一个人 ,实在是令人难以理解。


五月一日 今天没有下雨,很冷,都穿皮夹克了,夏天来了冬天还会远吗?

一路上我就在想早上的试验,可是记忆仿佛竹篮打水,翻来覆去不知所踪。namedpipe得异步通讯相当的复杂,首先namedpipe本身支持异步,但 是这部提倡,使用overlap像异步i/o一样,但是这里面本身就不简单,加上pipe是两个进程间的问题,我还没有想明白同样名字不同 instance是怎么回事,connect德overlap和read/writefile的那个毫无关系,纯粹是建立connection得异步操 作,至于byte-mode何message-mode区别我还一窍不通,同时overlap里面定义了一个用户创建的event,使用 waitforsingleobject来实现异步i/o,如果你有多个event就使用waitformultipleobject,问题时 read/write函数本身会失败,在异步情况下失败并不是真的失败,还有很多我还没有试验,甚至以上都是我的理解还没有式样过。至于昨天的一伙有了答 案,我想使因为C/C++的调用约定的问题,一定是我定义了extern"C"的问题,这种低级错误我都 犯了好几次了。

这个bug化了快一个星期了,其实是好几个小问题,都是内存分配地问题,jpeg是可以有单色的,但是我在转换为bmp的时候应该强制转为3channel或者说24bit色。

在广大人民群众的劝导下,那掉了陈冠希的艳照,现在基本上养眼照了。http://nickhuang99.dynalias.com


五月四日 今天很冷下着大雨

真是longest day,今天骑车到了西岛,两条大腿都疼得要断了,从下午三点半到半夜十二点半整整九个小时,在戚风冷雨中冷的要命,有好几次都想在西岛找一个motel 过夜,是在台冷了,太累了海峡这与,腿酸疼得要抽筋,总算回来了,累死了。其实这种距离在夏天的时候我们都起过好几次没什么问题,问题是今天是一个冬天以 来的第一次,第二天下雨以后风大的走不动,冷的要命。


五月五日 今天很冷下着大雨

什么是数据挖掘?就是你在你那些被遗忘的硬盘,活动硬盘,闪存,旧笔记本电脑里面,大本大本的连名字也看不出来的CD/DVD中间查找一些被遗忘的照片。

什么是泪流满面?就是眼睛干涩痛痒难受滴了舒眼液之后的情景?

使用setstretchbltmode以后一定要遵照msdn的提示调用setbrushoriginex,否则就会有偏差。

花了整整一天时间才完成了一两个小功能,主要是我自己犯了低级错误,同时先入为主地以为“刷新”很困难,现在可以暂时这笔一张照片,(当然这个是骗人的了),好累啊。


五月六日 今天很冷

html里面白吃的东西很多,document.getelementbyid(fromid)实际上这里的formid时form的name不是id,为什么用这样的函数名字?

今天遇到了一个常见的老问题,就是些systemevent的时候,既reportevent失败的问题,这是因为默认的logfile的size只有 512k,另一个小问题就是关于registereventsource和openeventlog的问题,前者我总是不成功,后者我后来看了dc的代码 才明白我的错误,其中的那个LPCTSTR*的参数我理解错误了, 这个并不代表你可以使用一个TCHAR BUF[]然后去地址,&BUF,因为这是一个真正的指针数组,并且是以NULL结尾的。

WINDOWS的异步IO有很多的层面,首先,文件的读写使用OVERLAPPED,使得BLOCKING成为NON-BLOCKING,这里你可以是使 用WAIT来等待文件的HANDLE,也可以使用GETOVERLAPPEDRESULT的那个EVENT来等待,甚至可以直接把该函数的变成 BLOCKING,应该把那个参数设为TRUE就可以了吧?等待HANDLE不提倡因为还有很多事件可以导致含义混淆。另外,IO中最忌讳的一件事就是程 序的不相应,比如要终结程序可是等待不停止怎么办?所以,另一个好办法就是把OVERLAPPED的那个EVENT和其他的你关心的EVENT放在一个数 组里面用WAITFORMULTIPLEOBJECT来等待。
关于NAMEDPIPE我像说我的理解上有很大的偏差,首先,同样名字的PIPE可以有很多INSTANCE是为了同步方便的,比如你个SERVER可以 和多个CLIENT通讯,使用统一类的PIPE的不同INSTANCE,这样彼此不互相干扰。其次,PIPE的函数的意义我理解错了,SERVER创建 PIPE之后CLIENT不需要CONNECT,只需要WRITEFILE获得HANDLE,那个CONNECT函数是给SERVER使用的,仿佛 SOCKET的ACCEPT一样的BLOCKING,WAITNAMEDPIPE函数是给CLIENT是用来探索SERVER-PIPE的,连接还是要用 WRITEFILE或者READFILE或者直接使用CALLNAMEDPIPE。


五月七日 今天有些冷,下起了小雨

今天,DC叫我先暂停解决cache的问题,让我取万那个ethereal去分析tcp包的问题,折腾了半个下午总算知道怎么使用了,简单测试发现tcp 的overhead数据量要多出近40%,这就是他想要实现一个filter的原因,这绝对不是一个简单的任务,他自己也没有主意。


五月九日 今天阳光灿烂,但还是有些冷

今天遇到了所谓的DC所说的crisis,突然之间很多的服务器上的server都不能正常工作,DC几乎是暴跳如雷,又是骂娘,又是拍桌子,我完全可以 想象作为一个程序员的心情,明明都是好好的运行了一两个星期为什么突然出现这种问题?最后才发现原来是需要安装terminal-server- licencing的组件服务,这种问题很古怪的,因为有不少的session是正常的,有时候重起也可以,总之是比较的麻烦的。我这个时候才比较的感到 压力,从前听说电信的服务器程序员很辛苦,看来此言不虚,有的时候你最高的目标就是能够让程序run起来,哪怕不停地手动删除用户也行。
远程客户端重新boot这个问题我还不知道DC是怎么做的,我估计大概是他让他的那个server关机重新启动以后首先一特定账号登陆运行,然后启动 vnc的服务,这看起来不难,但是很多东西没有亲自做是不会知道有多困难的,我曾经花了一个通宵写一个关机的函数,最后休眠还是做不到,我也曾经花了好几 天写一个休眠启动的小程序,结果发现是假的。DC肯定有去改动vnc的代码,因为同时运行几个instance的时候会crash,他说新版本改掉了这个 bug。我也一直想去看代码原因是想把mouse-wheel事件加进去,当然连接速度已经很慢了,看样子根本不好。

今天下载ethereal的新版本,不是官方网页,那个不能用,要去sourceforge,下载wireshark,这个名字大概国内的人都熟悉。以前 听说国内搞什么防火墙,安全放黑客攻击的等等觉得很神奇,现在猜想很多人大概都是那几个开源的项目改一改就出来蒙人了,当然这也需要功底的。
今天大体上明白了上传文件的过程,首先post是没有大小限制的,我昨天一直猜想是form的maximum-size的缘故,现在想应该是无关的,其 次,boundary的问题我还不太明白,主要是文件的大小和knownheader里面说的不太一样,差几个byte,难道是我unicode和 ansi的字符长度搞错了?
同时今天使用ethereal的时候遇到了checksum错误的问题,提示说是checksum off loaded,google了一下大概是一种高级网卡把checksum的工作从cpu那里揽过来,这种功能对于小的packet未必就好多少,我发现从 server到device的channel有将近一半的这类错误,我打算把这个功能关闭试验一下。

另一个想要试验的是关于DC的那个pipe,我觉得不应该这么慢,也许我应该把他的padcore的刷新的事件抓过来强制重画,他的那个名字起的很恰如其分,messagepump。    

刚刚在想DC这样使用自己编译的vnc不仅仅有自己改造的用意,也许他还是为了更加的安全吧,比如只要把其中的任何协议部分改造一下,哪怕端口号密码都泄 露出去了也还不怕,因为没有同样的vnc可能还是无法控制服务器。当然这是我遐想,也许他根本就是为了玩,就像那片评论上说的Datawind是现在越来 越少的eating their own dog food,这是我查wiki才明白的,就是说自己用自己的产品,好像自力更生一样。


五月十日 今天阳光灿烂

前前后后断断续续化了零零碎碎将近一个月时间才终于搞明白了文件上传的原理,很多人也许觉得这不可思议,为什么是几年前的老的掉牙的技术我要花这么长时 间,我也不知道,也许这就是所谓的old-new-story,不过我想很多人未必真的知道其中的细节,就好像我们每天都在使用cdrom/dvd,但是 说老实话真正知道其中读写原理并能编程实现的应该不会太多吧,反正我是不知道。
1。http协议原本就是一个文件上传下载的协议,只是html里面有些啰嗦,后来才在html的input类型里面增加了一个file类型,并且增加了 一个enctype="multipart/form-data",并且要求web-browser的实现者实现一个file-widget就是方便用户 选择文件名给input的小功能。
2。客户端几乎稍有html编程的人都知道:
a) 使用form来承载上传的data,包括其他一些参数等等,显然你可以同时上传多个文件。
b)一定要使用method = post方法,get仅仅是使用uri来传递所以有一个2048的上限,post是无限的,所谓的限制都是服务器端的人为限制。
c) 一定要使用enctype="multipart/form-data"
d)当然要使用一个input type = "file"来告诉form这个是文件。

3。服务器端我找了一些资料都不是非常的清楚,因为rfc1867的协议规定写的不太明白,也许是我理解的偏差吧。
a)在http的包里的known-header里面有一个contenttype有一个所谓的boundary,就是27各"-"加上一个13个ascii组成的随机码,我猜想这里面有一定的算法要保证它不会出现在上传的数据中。
b)在http的包的known-header里面另一个contentlength有一个anci-char的decimal数字表达上传数据的总的大小。(这里面问题挺多的,下面再说)
c)那么数据究竟是怎样组织的呢?在httpapi里面的那个httprequest结构你可能是看不到上传数据的,而且比较烦人的事情是你读 httpreceiverequest函数读出来的数据大小几乎是一个垃圾值,你绝对不要去猜想究竟有多少byte跟在httprequest结构后面, 这是无意义的。我花了不少时间才明白虽然httprequest结构里面说httpentity-count=0并不说明我不能继续去调用 HttpReceiveRequestEntityBody函数,我毕竟在编程方面太幼稚天真过于相信微软的程序员的逻辑了。
d) 究竟你调用HttpReceiveRequestEntityBody会发生什么呢?首先,你要明白每次读取的数据大小很可能和网络传输有关,并不一定是 什么固定的数值,我当初一直以为form的maxmumsize限制了每次读取的大小都在16k,实际上根本无关。
e)第一次调用返回的数据包含了http的那些没用的head数据,都是固定的:
--boundary
Content-Disposition: form-data; name="input_name";
filename="actual_file_name" Content-Type: type_name/subtype_name
CRLFCRLF

说明:
i) boundary本身就有27个“-”结果这些协议设计者有非要在加上两个“--”在前面,结果让我迷惑了半个晚上,后来数了半天才发现“-”多了两个,当然现在看来,我也许是错怪protocol的设计者了,也许这是一个实现的问题,就是40个
byte的随机unique字串怎么产生的问题,40实在有些太多了,所以估计大多数浏览器就在前面加上“-”,当然如果换成“*”,我会感激他们的。
ii) 我想了半个晚上迟迟不能动手的原因是我不相信协议的设计者会使用crlfcrlf来表示文件名的结束,总之,我觉得html简直是垃圾。
iii)其次我也不太敢相信所有的浏览器都严格地按照这样一字不差,当然firefox看上去和ie是一样的。不过文件名里面的unicode怎么办我还 是一个不太清楚,总之,这不是什么大问题,只是我很讨厌去hardcode-parse这个没什么用的title.
f) 在随后的HttpReceiveRequestEntityBody里面,你会继续读取真正的数据文件,但是文件的结尾这一点上是在十全部的trick所 在,我当初在想,规定这个boundary的设计者当然是要用它来作为文件结束标志的巴?你要这么以为,又要被微软这帮程序员气死,如果文件很小,你会发 现文件结尾加上了"--boundary,然后后面可能有一大队的垃圾。所以HttpReceiveRequestEntityBody读取的数据大小不 能作为文件结尾的长度。当文件很大的时候,有时候我又发现boundary没有加在结尾,总之,我又要使用 HttpReceiveRequestEntityBody读取的数据大小来决定文件结尾。
总而言之,你真真要被这些微软的混账程序员活活气死。

竟然堕落到了看日本的偶像剧,当然这不是我的错,我是为了体会一下广大劳动姐妹的心声而已。当然,其实挺好看的,女主角很漂亮,居然找不到男朋友,这一点 几乎是违背了生物进化中的自然竞争规律的,所以是伪科学的。女主角叫什么,电视剧的名字叫做<anego>.google了一下,原来意思是 大姐大,女主角是篠原涼子。哈哈互联网真好。


五月十一日 今天阳光灿烂

大概每过一年,都对《four wedding and one funeral》理解多一点,当然英语程度提高了, 同时,这种电影你没有看过n多遍很多时候连剧情都搞不懂的,不要告诉我你看中文字幕能够明白详情,其中的很多笑话是无法翻译的很准确的。每次看英国的婚礼 仪式我就在想,国内的婚宴大概像文革时代的大食堂,一大群人跑去吃吃喝喝,然后就很高兴回家或者某个地方。英国人却是在婚礼上结识新的结婚对象,这就好像 连锁反应。It is pretty easy. Just say "I do" whenever someone asks you a question.

白吃问题,今天算是出了洋相,我居然用strstr区在jpg图片里搜索特定的字串,所以昨天才会发牢骚说微软的httpapi居然不再文件结尾加上 boundary,事实上,他们加了,可使用strstr去搜索实在是夸张了,当然搜不到了,因为你提前结束了,那个binary数据当然不能用null -terminated的函数了。
所以,补充一下昨天的疏漏。
1。两个“--”加上原先的boundary字串一定会加在文件结尾的。
2。boundary字串不一定是40bytes,但是目前看来一定是27个"-"加上若干个ascii字符。
3。这一点是最重要的,在以上的两个“-”加上boundary之前还有CRLF,我觉得这简直就是脱裤子放屁,http协议的设计者是在十脑子有毛病,有这个必要吗?还得我找了一两个小时。

今天的教训就是:
a) 我是用图片文件上传,只要文件头开始对了,实际上图片显示是正确的,但是数据文件的大小是不对的,结果我的md5时不同的,所以同样的图片居然存了好几次。这才引起我的注意,否则还真发现不了。
b) 子串搜索效率最高的大概就是KMP之类的了,我懒得翻书,就利用29个连续"-"来做了一点点加速,就是说第1与第29个字符如果都不是"-",你就可以 跳30,这应该比最傻的那种线性一个个来的快很多吧。我认为这就是KMP的核心思想:利用子字串的特征跳跃前进。保存一个版本。
改变auto_increment的语法又忘了:
alter table table_name auto_increment = new_start_id ;

对于字符集的理解还是不够透彻,MAPI确实是不怎么支持UNICODE,这好像是协议造成的,那么我用MAPI能否发送中文呢?能闻出这个问题的计算机学生就说明还没入门,你发什么其实都无所谓重要的是接受方是否支持UNICODE,
当然,你发送的时候也要小心了。
MAPIMessage是一个骗人的东西,msdn上面说类型是LPTSTR实际上mapi.h里面定义的却是lpstr,我曾经试图看看 mapi32.lib里面是否有unicode版本,发现是没有,如果有的话那么也是在具体实现的那个outlookexpress的dll里面,因为 mapi32.dll大概都是协议的wrapper吧?
简而言之,我强制转换我的lptstr成为lpstr来发送,接受方正确的显示了,原因很简单,我发送的中文相当于宽字符,中间没有null,而如果我定 义普通ansi的字串在使用枪支转换就被截断了,因为原本就是单字节的中间肯定有不少的0。如果有时间我一定要好好看看utf8时怎么回事。


五月十二日 今天阳光灿烂

每天中午我都去burger king吃special,然后坐在临窗的座位沐浴在灿烂的阳光下,磨蹭到一个小时以便把我的被剥削的剩余劳动时间减低11.11111111%,当然也 顺便欣赏一下偶尔路过的美女。生活就是这样的无奈,X问我的life goal是什么,我哑口无言,曾经有一段时间我很明确的知道,可以大声地宣布,I have a vision!可是,不知道从什么时候,我的眼前充满了迷雾,当一个人没有第二种选择的时候那个人是幸福的,因为他/她不会有错误选择的痛苦,同样地,一 个没有选择的认识痛苦的,一个人之所以是一个不同于动物被动适应环境的人就是因为他又选择的能力,当年选择在冰和时代丛树下地来的祖先做出了选择进化成了 人,后世的子孙同样应该有主动选择的能力与权利,为什么希望没有选择呢?我曾经认为人的记忆是有选择的,同样人的希望也是有选择的,没有理由希望人生的路 是一个automaton。当初不就是因为不愿意过一种一眼能看到几十年后人生的生活才希望不断地改变吗?年 轻的时候因为没有好好读万卷书,自己安慰自己能够走万里路也是一样的好,于是就常常自豪每年积攒的飞机票有增长了多少,终于有一天觉得我的人生仿佛是一个 个的驿站,没有终点的航程。仿佛是在突然转瞬之间,我的人生旅途机票里又多了一张跨越太平洋的存根,又仿佛是一瞬间我觉得我终于有一点点向一直向往的那样 生活了一段时间,仿佛陀螺一样的转个不停,这样的生活是我最值得回味的人生经历了。
现在我终于想起来了我的第一个人生目标,十年前的一天我躺在床上望着天花板发呆,delphi的帮助文档我每一个英文字都认得,每句话都知道怎么翻译可是 却一点都不明白怎么回事,我记得就在那一天我发下宏愿如果能够让我能够自由翱翔在计算机的世界里随心所欲上天入地我愿意付出任何代价,现在我想我大概初步 达到了我人生的一目标吧,算不上中级也总是初级偏上吧?

其实,我觉得女主人公说的都是实话,不是什么32岁的女人想要结婚,而是在日本这种纯粹男人当道的社会文化,大概再做十年也不过是一个正式的勤杂,而且女 主人公作为最后一批 正式女职员已经成为其他派遣女职员的羡慕的对象了,其他女职员大概基本上都是其他部长社长之类的情妇,最差最难看就只好作为其他男职员的一夜情的玩物,平 常的工作无非就是在一件让人羡慕的上设立端茶倒水议论一下那个女同事又成为那个部长的情妇了之类的八卦新闻。而且,日本商社的规矩都是女人结婚就要离职, 所谓OL,原本就是办公室里别人的妻子而已,所以这样看来,日本的OL真真是只有嫁人一条路了。

为什么今天晚上会看这种偶像剧?想来想去总算明白了,因为我在逃避在cluster上debug的那种恐怖的东西,一想到数据文件有一两个G,得复杂的mpi通讯程序我就头疼。这个凉子差不多快成为情妇办的主任了 。


五月十二日 今天阳光灿烂

一个人吃饱了肯定就不想干活了,可是不吃饭肚子饿更不想干活了,我是死活不想吃苦的了,这就是骡子的脾气,懒。
走在大街上被一个老乞丐盯上了,夸了两句我就赶紧给钱,当然听上去是不能拒绝的那种好话了,"Come on! Dude, you got style!"心里还是很高兴的,因为老乞丐的话是由衷的,就是那种言不由衷的由衷了,不,我是认真的,你想我的穿着打扮气质在乞丐界都得到认同那可是非同小可了。

其实,这部肥皂剧最让我喜欢的情节是最后,在蒙古大草原上发邮件遇到电池没有电的那一段,抱着笔记本拿着手机奔向太阳能电池板一定是非常幸福的,因为有期盼。今天,蒙古也是好天气。


五月十六日 今天阳光灿烂

加拿大的富裕已经是世人皆知了,可是,时不时地,国会议员还要向世人提醒一下,针对缅甸峰在政府援助两百万元,结果渥太华国会大厦里吵翻了天,议员们纷纷 表示为什么我们比日本还有英国这样的国家捐款来的少?!在G8会议里面大概加拿大应该也是靠前列的,但是人口应该是最少的,所以人均财富应该也是靠前列 的,当然,这只要从加拿大的人均税收就知道政府的钱有多少了。想想看,加拿大的街头乞丐都是相当有礼貌的,相比之下,今天晚上去那间新开张的中餐馆是在世 让人生气,就是在concordia附近的那个什么春的小超市楼上的“金石串吧”,waitress长得还有两分姿色,可是那个态度让我想起了楼上就是标 牌的按摩院,当然我声明在加拿大从来没去过那个地方,只是听说而已,因为她一直都是以一种近乎ktv小姐帮你点酒水的方式说话,就是说你们两个人就点这么 点东西吃?最后,付账的时候,直截了当地说那就不用找了吧?你说我还能说什么?在加拿大还从来没有碰到过这样的方式的女招待,男招待倒是有碰到过,那是一 个自助餐我付小费的时候,他直接就说,对不起小费是15%硬生生要我把10%的小费退给我,当然这都是只有中国人才做得出来。(不过,美国人也做得出来, 据说是一个笑话,加拿大人在纽约吃饭,最后给小费的时候给了一个quarter,美国女招待当场就扔还给了咱么朴实的加拿大同胞,说,You need it more than me.)今晚这个中国女孩子的那种方式实在是让我非常的不高兴,anyway, she must need it more than I.

美国应该是全世界最富有的国家,但是我们却常常看到美国人小里小气的举动。中国的网民对于中国拿出几十几百亿的钱仿佛是小菜一碟,天知道,美国人民对于政 府掏出几十万美金区捐款都会计较一下,因为那个钱就是美国人民自己的钱,他们的医疗,社会保障,子女教育,国防开支,公共建设,等等,所以,花一分钱都要 人民老爷点头高兴才是。相应地,中国政府手中的钱只是官僚手中的筹码,老百姓大概就是最多在过年的时候听个动静罢了,所以就算化了几十亿给几个非洲穷国讲 排场也是老百姓没办法不同意的事情。这就是这个世界上的一个特征,凡是当初标榜自己是人民做主的所谓社会主义国家都给自己的国号起个很好听的名字,像什么 “人民”,“民主”,“共和”,但实际上都不过是当初封建集权的延续罢了。而真正人民当家作主左右国家政策的民主国家反倒都有个很朴实的名字,什么民主, 人民都不大沾边,因为,这个世界上的真理就是这样,谁最缺什么,往往最推崇什么,反倒使那些天天司空见惯的东西最不屑一顾,因为早已视之为天经地义。
当然,美国的今天也是霸气十足,给中国地震捐款就捐了50万美金,大家很形象地比喻就是那一天一个超级千万富翁跑到你面前地给你一个铜板,然后郑重其事地说,这是我给你的赏钱,你倒是接还是不接?当然撇开我作为一个Chinese Canadian不谈,我从内心里也非常的欣赏美国的做法,这就是款爷的气度,你还要点头哈腰称谢不已,从普通美国人方面来看,他们应该感到自豪,这样的政府才使始终把自己的人民,自己的国家利益放在第一位的让本国公民放心的政府。我发自内心的羡慕这样的政府。


五月二十日 今天阳光灿烂

victoria day这个 长周末骑车去了Bromount,大概一百五六十公里吧,结果骑了一天半,非常的累,原因很多,第一整个冬天没有什么运动,尤其骑自行车很多时候是坐的屁 股疼,第二,大部分是沙土路,很费力,后面的五十多公里有都是上坡下坡非常的费力,第三,自行车太差了,中国造的杂牌只能在城市里面休闲运动,一怒之下决 定送人。
晚上原本以为可以把这个gb2312的问题解决,后来才发现我对于utf8还是没有真的明白,遇到html里面这种utf8的混合,我有些茫然,难道说我 应该把utf8转成utf16来处理吗?非常的烦躁。因为我原来就非常的不愿意使用自己那个最最简单的搜索超连结小函数,没有一个可靠的html- parser的支持,我实在是没有信心。


五月二十一日 今天阳光灿烂?见鬼了,冷的和冬天一样。

郁闷,郁闷,心情十分沉重,又一件事我知道我应该去做,也不难,很多人也在催我做,我自己也感觉到这时责任这是义务,可是我却始终在逃避,什么原因说不清 楚,总之,觉得索然无味,看上去容易其实挺难,为什么我不想去做呢?我想可能是曾经投入了太多的激情,在无疾而终之后越加的空虚与无聊,在并行处理上我很 多时候感觉很无奈,究竟是图形还是并行?彷徨啊,彷徨,我曾经的计划现在似乎是越来越遥远了,虽然写诗的工夫大都来自诗词歌赋以外,可是我现如今似乎走的 也太远了吧?当初我认定图形是问题的关键,可现在似乎还是没有入门,如果,纯粹用agent的模式并不能解决的最根本的问题,最最重要的在于第一步,然而 第一部怎样迈出去又取决于随后的一千步一万步,这就是困难的地方。在郁闷中随便写了一个小爬虫,就是最原始的“蜘蛛”,非常的粗糟,无非是用 wininet读取入口网页,用最简单的广度搜索累计link,然后再搜索所有link的图片,为了保证不重复布循环,用了一个最简单的set存储所有的 连接。问题很多,最大的就是charset的问题,现在很多人都使用ansi搀和gb2312,我原来专门下载了一个gb2312转换utf16的表,最 后发现link好像都是ansi的,遇到银号才是gb2312,所以,我似乎多余,同时也发现我这种纯粹utf16的编码实在是太格格不入了,估计很多蜘 蛛在我的服务器上探了一下头就所走的原因就在于此。我原本想在里面布置一些循环陷阱都没机会了。哈哈。。。第一天的战果还不错下载了七百多张照片,有60 几M。很好,存一个吧。 晚上有疯狂下载了将近两千张图片。


五月二十二日 今天阳光灿烂?见鬼了,冷的和冬天一样。

我的网络蜘蛛今天爬了四千多张图片足足有两百多兆,不过这个网站的图片质量太差了,居然大部分都是“芙蓉姐姐”一类的不堪入目的东西。我一般不太喜欢不穿 衣服的女人,因为这让我决的这个世界上还有很多饥寒交迫的人,想象看在中国还有很多妇女上街前就找两片布把自己裹以下,稍稍遮蔽一下而已。


五月二十四日 今天阳光灿烂?很灿烂也很冷。

mysql实在是太业余了,我的图片存到差不多两万张时候mysql就几乎不能用了,首先是显示那个线程"dead",在这之前还发生过lock的现象, 然后我修复一次存一条记录就有dead了,然后我把很多参数都跳大了一倍,还是不行,最后只好把这个corrupt的数据库整个drop掉,这就是开元软 件的通病,很多有一定天赋的程序员很兴奋的很自豪的写了一些玩意儿,在自己家里玩一玩还可以,可是真的碰到企业级的应用可能就不行了,当然,我也不是数据 库的专家,很可能有些参数没有调整,可是无论如何index corrupt的这类错误发生在大数据标的现象只能说明算法和极端情况考虑不周,这是普通程序员最可能犯的错误,总之,我只有推倒重来。重新把两万张图片 导入不是什么大事情,我只是担心如果我的“蜘蛛”以后按照这样的速度每天搜集几千张甚至上万张图片都不是很困难,数据库是否能够支撑的住?难道一定要换成 ms sqlserver?手机图片的速度现在大概可以每天三四千张吧,主要我还要提出很多的thumbnail小图片。

我实在 是有些fedup with mysql,这个儿童玩具完全不能承受大数据的读写,尤其是当表的数据达到两万条的时候每次添加记录都会显示dead,当然我的每条记录都包括几个 binary的blob的图片,所以数据大小应该总的在将近4G,我非常的怀疑是不是那些linux的geek忘记了怎样handle一个超过4G的文 件,当然这样才像实在是对别人和自己的不尊重,这样不好。但是我要怎样解释问题出现在数据文件接近4G的时候出错的现象呢?网上说那个dead时有很多的 原因,我也看不大懂,反正我觉得很有可能是类似于deadlock,或者就像一个bug-report上说的可能是socket不相应之类的,反正都无关 紧要。今天又发现了我一个低级错误,我一直以为realloc会把原来的内存内容自动拷贝,我一定是在那里看过这个,要么就是linux是这样做的,总之 我不应该反这种低级错误,window是不会的,你要自己malloc,自己拷贝,自己free,如果你想保存原本的内容的话,难道我错了?

花 了半个多小时才搞明白一个简单的白吃问题,这就是DC常常提起的初始化的问题,真的体会到这是程序员最安全的谋生之道。在OPENFILENAME这个结 构里面的filename那个参数必须要初始化,这个在msdn里面说的明明白白,我却没有耐心读完,这就是我的问题,今天头已经疼得很厉害了,怎么也读 不进去,眼睛也疼,这个mysql把我气死了。

我现在对于网络的东西越来越不信任了,如果下载一个什么东西没有md5的签名实在是让人不放心,简单的改造了一下,加了一个打开文件的对话框方便自己,不值一提但是我觉得很handy

我 又一次过早的jumptoconclusion,这不怪mysql,因为我用的是fat32的分区,最大的文件size时4g,这是操作系统的限制, mysql有办法绕过这个,但是我要寻找raid的选项,还不太明白,不过原因总算找到了,头疼了一天没有白费劲,哈哈。。。不容易。raid过时了要改 成partition,这个更加的强大,但是要升级到5.1版,又是一大队工作,头疼,肚子饿。partition虽然很强大,但是有primary- unique的key的限制,我一之间找不到合适的办法,折腾了半天只好把数据库移到一个NTFS的纷分区,这实在是没有办法的办法。

保存三个project的稳定版本。httpserver-stable httpClient-stable  mySqlTools-stable 为了解决路径问题我把所有的lib,dll,.h统统放在一起一边在心环境下也可以变异,通常不鼓励这样做。其中http-client还远远城不上稳定,但实现保存一个八,至少下载几千上万张图片还是没有问题的。

非常可笑的是我对于html知之甚少,错误的以为我应该用utf16来写html网页,(这也许是对的吧?但是你不能连开头的meta都用utf16巴? 否则别人怎么知道你的charset呢?靠猜吗?那样的话有可能浏览器要跑两边吧?所以,当我开始写那个小“蜘蛛”的时候我才意识到原来别人都使用 ansi+gb2312写的,这实在是个笑话,哈哈,不过那些个其它个人写的类似蜘蛛的东西就跑不进来了,为了方便这些搜索引擎我决定改成ansi版本


五月二十七日 今天阳光灿烂?很灿烂。

疯狂下载了好几万张图片,当然很多都是很小的thumbnail,剩下的大概两万多巴,哈哈现在数据库有将近五万多的图片了。

疯狂下载,一天下载了两三万张图片,现在服务器里面有八万多张图片了。向着“百万图库”冲刺,等到达到百万的时候考虑出售,当然是按照硬盘价格乘以二来出售整个硬盘了,我总不能赔一个硬盘吧?

Do you know how it feels when you don't have mouse? I am now only using my keyboard to do everything. This is really a strange experience and it feels so good!


六月一日 今天阳光灿烂?很灿烂。

今天又是蒙特利尔一年一度的环城自行车活动, 天公不作美阴雨连绵,不过参加的人并不比往年少多少,在出发点光排队等待出发就花了半个多小时,主办方非常的有经验所有的事情井井有条,上千的志愿者在沿 途各个路口维持交通并给骑车者鼓劲加油,在等待的时候也不忘了组织一些滑稽表演,播放动听的音乐,广播最新的天气预报情况舒缓大家的心情,你一点也不觉得 时间难挨,这就是蒙特利尔的特色,全民活动。五十公里骑了大概不到三个小时,主要是新自行车完全无避震屁股疼死了,加上路上大队人马想快也难。现在知道公 路自行车的平均速度应该至少有多少了吧?
我为了这个活动专门买了一辆新自行车,那辆旧的中国造实在太差了已经坏了就送人了。这个新的公路型的赛车简直太棒了,速度飞快,现在知道为什么原来追不上加拿大的普通妇女了,装备太差了。哈哈。
服务器的图片终于超过了十万,虽然我有几千张我自己拍摄的照片充数,可是其他都是从互联网搜罗下来的美女,总归有个七八万以上吧,当然后期为了照顾女观众 也有不少的帅哥,风景,动漫(其实是下载的时候自动搜索的,我是控制不了的。哈哈)。争取能不能在半年以内冲到百万图库?国内的网站可能号称百万的也不多 吧?也许有版权的关系?


六月五日 今天阳光灿烂?很灿烂。

奋战了好几天,战果很不佳,比较专业的图库网站对我这种业余的蜘蛛防范很严,有的是连接里面加上各种字符,好像是bookmark吧,其实我都没有搞明白 为什么抓不到连接,明白了也就不说了,今天还碰到一个奇怪的现象,那个服务器http://tu.uuu9.com居然好像认得我的程序不是普通浏览器的 请求吧?总是回答badrequest,我看到好像也有人遇到这种问题吧?总之我觉得专业图库我可能没办法对付,业余的图片太少,比如有的就那么几千张还 有很多事thumbnail就号称图库?看来靠这个办法达到一百万是比较困难的。另外我的浏览器合explorer都好像中毒了,真是赔了夫人又折兵,这 种吃力不讨好的或是在不好玩。此外,tempfilename这个白吃寒暑不知道是不是因为我的explorer一直崩溃的原因总是互相 overwrite文件,就是说他返回的是一个已经存在的文件,结果我下载的可怜的几千张图片还互相overwrite就剩下一千多,真是。。。一言难 尽。 


六月六日 今天阳光灿烂?很灿烂。

疯狂下载,居然有一个蜘蛛在一个网站下载了将近两万张图片,这还都是经过筛选的比较大尺寸的,如果加上那些忽略掉的小图片应该是达到了我预计的32位程序 的内存边缘把?(这个市吹牛了,其实我没有估计,只是大约猜想一个queue加上两个set内存占用达到一两百兆应该就比较危险了,因为这些复杂的数据结 构本身就有不少的内存耗用,而且他们是进行的动态分配,stl比较糟糕的是除了内存错误并不警告,也没有什么错误,比如以前遇到的push_back根本 没有返回值,也没有异常你怎么办?所以小心为上。
昨天DC叫我看driver,因为他想让我做一个modem的driver骑在他的usb-driver上面,这实在是太令人兴奋了,我一高兴晚上就去骑 车子了,高兴过头了在命令行永windows的ftp上传文件结果被传成了ascii码完全corrupt了,这实在是讨厌。今天安装虚拟机发现微软的 2007不支持2000,只好换成了2004可是不知道这个是否支持xp,这个真实麻烦,结果安装nero之后忘记restart居然c去冬全部 corrupt了,企图用win2k修复,但是没有软驱作应急盘,只好放弃重新安装win2k。
整个的顺序是这样的,1。win2k server-4sp 2。IE-oem-setup 3。VC6+sp6+msdn 4。MS-SDK+DDK 其中SDK的版本最要紧,2003版会删除2001版,DC甚至叫我装vista-DDK,我对此将信将疑让他先试验吧,实际上他对于64位操作系统也没 怎么玩过,连编译环境的设置也不是很清楚。今天很高兴晚上又去运河骑车子了,我的新自行车非常的轻便快捷,但是完全没有避震痛得要死。和我的老破车相比仿 佛二战时候日本零式战斗机和美国同期的hellcat的区别(记不清型号了),新车操纵太灵活了,仿佛零式超强的气动布局,非常的轻有非常的颠簸仿佛零式 完全用木头做的根本武装甲防护力。


六月七日 今天阳光灿烂?很灿烂。

疯狂下载,二十四小时内下载了超过十二万张美女图片,哈哈惊人的战果。晚上W请吃羊肉串啤酒,两杯下肚就飘飘然了,隔壁街上F1的庆祝活动如火如。


六月九日 今天阳光灿烂?很灿烂。

自行车实在是一个老年人的运动。据不可靠消息称,我这个自留地被GCD封杀了,我倒是不太奇怪,因为这是迟早的事情,一个政权对于任何批评的声音都要封杀能够生存多久呢?闭上眼睛以为世人都看不见自己赤裸裸的丑态大概只有皇帝的新衣里面那个幼稚天真的主角。


六月十日 今天阳光灿烂?很灿烂,结果下了暴雨。

virtualPC不论是2004还是usb所以,完全没有什么用。VMWare要花钱的,
The caller of device must have a priority level lower than dispatch when they are calling "wait" functions.
win2k cannot recognize disk bigger than 64g unless you enable biglba at:
localmachine/system/cirremtcpmtrp;/servoce/atapi/parameters/enablebiglba

读了一篇MATERIAL GIRL的宣言,感觉非常的沮丧,的确,这个女人说的很对,一个漂亮女人如果不嫁给有钱人那就是说自甘下流,因为这不符合进化论。DC说sata硬盘可以 即插即用。感觉所谓的programmer不是单纯的coder,所谓的developper也不是简单意义的programmer,我的直觉是 developper也需要花上30%精力再开发环境上,30%的精力在软件的调试与维护上,另外的30%也许才是编码,剩下的10%我不知道,也许是热 情,天赋,毅力,机遇等等?当然我觉得我现在还没有资格这么评论,不过是揣测吧。

灾难啊!这个月还没有到月底internet账单就超额了30块,我平常的流量一个月才五到六个g,现在半个月不到就是60个g,这怎么得了?这些蜘蛛下 载速度太快了,这样下去我要破产了,看来百万图库的代价太高了,首先是我的电脑中了木马病毒,其次是这个internet超标,我这么辛辛苦苦为人民服务 到底图什么?难道我的觉悟比中南海都高?


六月十日 今天阳光灿烂?很灿烂

加拿大的政治要比美国大选对我的吸引力大多了,因为很多在美国人不可思议的事情在这里可能都是司空见惯吧,比如今天加拿大政府正式给从前的印第安幸存者代表一个道歉,这时候你也可以称加拿大是一个多民族的国家。
今天,看driver明白了不少的东西,现在感觉我需要大约几个月时间才能成为一个比较合格的device-driver的程序员吧,当然我指得是 filter-driver之类。 在windows里面的driver的同步变得比较简单因为,线程的优先级都是在同一级,即便是系统的线程也是一样,就是说没有抢占式。昨天晚上一支巨大 的黑野猫溜进了我的屋子,黑暗中把我惊醒吓坏了我,一晚上都没睡好,后来睡着了他又流进来了,钻到床底下,简直把我气坏了,这日子没法过了。


六月十二日 今天阳光灿烂?很灿烂

我觉得我还是应该买一台电脑,就买最便宜的吧,原因是我买了一个500G的sata硬盘才想起来我的老电脑智能接ide,我的新电脑虽然有sata可是已 经有两个硬盘了,两台电脑各自都有两块硬盘,那么这个新买的硬盘怎么办?根据中国似的办事方针,配套工程应该比主体来的大的原则,所以我应该在花上几百块 钱给这个一百块的硬盘找个安身之处,当初引进这个新硬盘的时候是没有详细论证过,是中午吃饭喝了一杯咖啡头脑发热就去买了。这就是中国似的技术引进工程。 搭建ddk的开发环境就花了一两天时间,我现在还不太明白wdm和kmdf究竟是什么关系,反正微软的kmdf的第一个例子我就没有办法安装,那是一个 fakemodem的驱动,编译好了,安装的时候总是失败,不明白,在家里的电脑干脆连vista-ddk都安转失败,总之我认为是木马病毒引起的只好冲 撞系统,明天买新电脑吧?这个月又要节衣缩食了,我现在每天中午都是burgerking的special,晚上回家自己做饭不知道还能怎么节约了。这个 星期一定要洗衣服了,实在没有衣服还了。VMware实在是非常的糟糕,非常的慢,埃要不是微软德virtualpc不知耻usb我才懒得用呢,还是三十 天的使用版,烦死了。


六月十四日 今天阳光灿烂?很灿烂

重装系统实在是麻烦之极了,当然对于仅仅上网聊天的电脑来说那是一件简单的事情。
1。在我的httpserver中,winsock2.h必须在windows.h之前,否则winsock.h就会被包含进来。当然这是在使用pch的 情况下再stdafx.h里面的顺序,basetsd.h一定要放在第一位,并且是使用winsdk的版本,所以,如果不像破坏原来vc98的话,就只用 本地的"basetsd.h".
2。今天发现系统的一些service必须运行才行,大概是dns-client之类的,我不知道具体还有哪些,但是一定不能运行iis-admin这个 service,因为它是在监听80端口的,我的httpserver无法注册80端口花了我一两个小时才找到这个原因。
3。我的三块硬盘装在一个系统上迷惑了winxp的安装程序,我最后发现要把bios里面的ide自动监测功能关闭才能通过硬件检查。
4。我的vc6我想升级到sp6应该是必需的,同时我也一直不太清楚是否再windows.h里面把windows-version改为500是否有什么问题,微软当然是警告什么试用版,我不知道这是不是虚张声势。
5。昨天折腾了一天的驱动也没有一个结果,连最简单得ddk里面的kmdf的例子都无法安装成功,当然了,一贯地,如果微软的例子都能正常运行的话,说句 不好听的话连猴子都能写程序了。总之,第一还是运行环境花功夫,ddk得编译环境比较复杂,我花了不少时间试图把setenv.bat的内容移植出来,用 启动msdev /USEENV的参数来运行(/USEENV会把当前的SESSION的环境参数倒入VC,只限于当前SESSION所以很好。),但是问题是, SETENV.BAT并不是简单对应VC6里面的include,lib这样设置(设定了很多子字串适应子系统,比如,sdk,udmf,kdmf, crt等等,应该十分模块编译的吧,这样可以不引起名字污染,据说在vista以后这个编译环境有了一个本质的改变,好像是什么reflective的东 西,很神奇当然对于我来说是不可能的东西了,那一定是.net的机制。),因为是批处理文件,我想编译也是分别进行,我看到一个文件甚至对于dll的内存 抵制范围都是事先定义好的,这不像user-mode的程序的虚拟地址可以使pageable任意移动,kernel得很多抵制必须使non- pageable的,所以,我猜想链接不是通常的,可能要手工控制,所以才会使用这个编译控制文件详细控制编译的步骤与地址分配,这个绝非简单的一个命令 行参数可以解决的,否则也轮不到我了。
6。pnp manager非常的复杂,首先我根本还不清楚整个的流程,微软的那个安装device的例子,devcon我只好一步一步的跟踪,总算知道了一个白痴的 问题,guid在命令行作参数的时候不能加引号,不知道这是不是例子里面的白吃还是怎样,我对于device-class的概念还不是很清楚,总之头昏脑 胀一天,只是知道再update-device的时候不成功。。。总之,plug&play是一个很复杂的过程,我觉得我应该先试验其他的例子, 也许modem是特殊的device?
我自己家里面的那个网卡就折磨了大半天,当我在一块硬盘上安装了xp时候那个网卡驱动都可以安装正常,当我在另一块硬盘上也安装xp的时候就始终不能识 别,不过也许也是msi的主板的补丁有问题,或者使ide-PRIMARY选项的冲突?总之硬件的问题远比软件来的复杂。
7。以后一定要记住,我的新电脑里面的硬盘是两个sata加上一个ide,光驱也是sata,旧电脑全部是ide没有sata。新电脑只能用ide- primary的办法选择启动硬盘。系统盘坚决不允许装任何和开发有关的程序,也绝对不允许有任何数据!!!一定不能再犯这种低级错误,一定要预留一个 drive方所有的开发程序,数据,工程等等,DC的这个做法是非常正确的,他一定有过很多的痛苦经验才会由现在的选择。以后一定要经常备份,包括数据 库,每增加十万图片就备份一次?如何?还是二十万?总之才作系统一定要ghost一次,否则就成了真白吃了。
8。关于申请买新电脑的请求暂时不予批准,因为现在卖的都是vista,旧的问题没有解决又引入新的?再者说这个斗室根本没有地方了,还要买显示器吗?有 kvm能支持三个系统的吗?笔记本和台式机都差不多价钱了为什么还买?对于虚拟机的构想不成立,我不太打算用vmware,微软的virtualPC又不 支持usb,这样买新电脑就没有多大的意义了,何况这笔开支。。。还是以后再说吧。要么把将来买新笔记本的预算提前预支???
不过,预算委员会的意见是,当前的首要工作是严格控制固定资产的投资规模,采取适度从紧的货币政策,大力加强宏观调控的力度,解决老百姓的吃饭穿衣问题为 主。(我每次听到这样的答话空话就觉得一肚子的气,二十一世纪了全世界人口最多的国家还处在这样一个极端专制的愚昧统治之下,大概除了非洲的酋长就属共产 党的管好当了,整天头脑空空,吃喝玩乐,和殷周时期的肉山酒海有多大区别?)我现在每天最爱看的节目就是CPAC电视台的国会辩论节目,让我觉得民主国家 的最大不同就是政府的官员好辛苦,这些医院天天像打仗一样唇枪舌剑,虽然有很多是无意义的诡辩但是这也是反对党迫不得已的,一个议员每次不说出一些惊人的 话来迟早就的回家抱孩子了,这样的工作就算给我干我也不想,干不来的,作为一个普通人只有共产党的部长以下,乡长以上的职位比较适合,因为太高了如部长一 级时常要和外国同行较量没有一点点实力也很难看的,太低了比乡长还低的话,吃喝玩乐还不如普通人的,只有这中间那些职位既没有很多严格的绩效检查,也没有 很大的责任担当,除了吃喝玩乐没有什么别的大事,多好啊。

晚上玩了一下windows的dnsquery函数省得我老是要去查询服务器的ip地址,讲老实话,dns的结构还是相当复杂的,一大队的union大概 是为了兼容众多的系统吧,因为各种操作系统,各种编码,等等都会使用不同的表达,所以。。。哈哈,费了一些力气,我只用一个最简单的功能,我的那个动态域 名解析服务器就返回DNS_TYPE_A,就是用长整数(4byte)表达得ip地址,我已开始犯傻了心里总在想着8个byte所以摸不着头脑,真不知道 是哪里来的想法,总之,哪个是一个host-order,我猜想就是我给他什么顺序他就返回什么吧?比如我市little-endian,就是 little-endian地返回,高位地址时开始。同时,所谓域名是不待theme,就是说http://www.这个不需要,否则,你第一次丢过去, dns服务器丢回来那个不用http://www.的东西,你还要再丢一次过去,返回的才是ip地址。总之,dns德protocol已经是互联网上最最 简单的一个了,可是仍然很复杂。


六月十五日 今天阳光灿烂?很灿烂

我一直有一件引以为耻的事情说不出口,那就是学计算机这么多年了连一个service都不知道怎么写,这个东西是我们天天都在用的,再linux的时候知 道个原理,阻断io把当前目录移到root目录,阻断信号等等,可是这些台表面化了,所以,我必须在这个星期内把这个长久以来的确实补上,这个比当前的驱 动来得更急迫,因为驱动里面用的也是service。

HKEY_LOCAL_MACHINE -> Software -> Microsoft -> Windows -> CurrentVersion -> Explorer, create a DWORD entry named “ThumbnailSize” (without the quotes). between 32 and 256

加了一个非常小的功能,就是显示重复的上传图片,这个本来大概就是几行代码可以解决的,但是我的这个小小的project现在越来越难以扩展了。保存一个版本,同时昨天工具的版本的dns功能也都加入了。


六月十七日 今天阳光灿烂?很灿烂

预算委员会最终决定买最便宜的笔记本来做服务器,让我再去买台式机和显示器实在是太傻了。

DC闲聊的时候讲了一些有趣的东西,比如xlut这个东西我从来没有听说过,至少是只知道个概念,这大概是pentium之后的新指令吧?所谓的lut就是lookuptable,他在他的scanner的驱动里面需要做calibra
tion,其中的lut就是用这个指令倒入cache,这个当然比循环快n了,同时你的内存存放要符合这个指令,好像至少256以上吧?就是说一系列的偏 移量组成table能够一下子依靠cpu的所谓cache-transfer-register快速读进缓存。同时,他给我指出来这个并不是DMA,我以 前一直认为只有dma才能做块移动,看来这也许是新的cpu的功能吧。
EnumServicesStatusEx only allow buffer size to be 64k because they are using 16bit index internally. (To compatible with 16 OS?) This is really imbecille.
那个微软的程序远不知是有意还是无意识用16bit的index结果你得buffer-size大于64k就报错,这实在是前所未有的古怪,一般只有使用 者的buffer不足的问题,今天碰到了你传给一个大的buffer,api居然会出错,哈哈,天下之大真是无奇不有,微软里面的人物真是多,当然也可能 是为了根16位系统兼容,总之,如果不用google你还者的想不出来,因为另一个错误我现在也没有头绪,我按照msdn的例子的service启动时候 总是抱无法连接到service-manager的错误,我不知道。。。难道是win2k的权限,或者什么service没有启动?


六月二十一日 今天阳光灿烂?很灿烂

忽然之间我明白了DC在路径上的设置的真正原因,原本很多vc6的vc98下的函数api都很陈旧了,需要使用sdk的新版本,但是要让我把sdk覆盖 vc98我又不愿意,因为谁知道会有什么问题呢?于是简单的解决办法就是把sdk的include,lib等放在vc98之前,这是一个人人都明白的道 理,我当士兵没有真正意识到,仅仅拷贝DC的环境编译而已。我现在反复都在体会开发环境的配置需要花多少精力的问题,这个在写简单的逻辑算法的那类程序员 所难以遇到的,所谓简单逻辑算法并非简单,应该说是单纯的算法,你爱怎么写就怎么写不需要考虑函数的兼容,所有的轮子都自己造,有人常常说自己造轮子困 难,诚然,可是使用别人的轮子难道就不困难吗?如果你还没能力发现别人的轮子的问题的话,那就更麻烦了。“百度”疑惑我大概明白了,这个应该是一个 encoding的问题,我google了一下据说是jsp传参数的时候没有使用适当的encoding函数,导致乱码,不过本来这个跟我是毫无关系的, baidu的程序员白吃就白吃,我使用他们网页的连接访问他们的数据根本没有问题的,所以,这不是真正的原因,真正的原因是这一类jsp的参数被转成乱码 的时候加了不安全的字符比如&#于是他们的服务器不接受,这只是一个安全性的考量,所以我要调用另一套微软的light-weight-API里 面定义的更灵活的api来吧不安全字符变成escape字符,我现在才明白用google搜索的时候一帮子小孩子在讨论什么,这当然是一个陈年旧事,行家 里手一看边知的问题,可怜一般小孩子连这个基本道理不懂,虽然有人提示说使用escape就能解决但是他们应该是没有真的明白巴?我不明白石因为我从来不 碰这一类脚本语言,从来不学习任何与java有关的东西(当然学校里面被迫除外),我对于sun公司的仇恨不亚于linux界对于微软的仇恨,我也不知道 为什么讨厌java,大概是嫉妒吧,一帮小孩子什么都不用学大概三个月就可以出世号称programmer了,那着别人编好的工具炫耀一番,好像工资还挺 高的,那种纯逻辑的东西大概没有学过任何计算机相关课程的人都可以干得了,比如你就算是一个学物理数学的也能明白,哎,这个世道。昨天,DC说他理解错 了,当然不是他,是raja表达给marian的时候错了,谁知道呢?总之那是一个很简单的东西,就是让我们现在的emulator通过usb线连接 device使用device的gprs上网链接我们的服务器于是用户可以使用笔记本在野外上网,这个东西根本就不用该什么东西,只要把DC现成的usb 驱动换掉原来的winsock就行了,DC问我能不能下午改完,天哪,我就算在白吃,在慢着点事情也需要两个小时吗?大概一个小时就够了吧,file, pipe,socket,usb都是用文件handle,微软花了很大精力让我们觉得所有的io都是文件操作,于是那一套异步读写的逻辑都是通用的,我就 直接拷贝拈帖了,管它呢,尼日利亚人民就算使用internet他们也不一定打得起电话来complain吧,这个笑话是DC说的,我可没有瞧不起非洲同 胞的意思,当然他们会不会使用工具是我能不能称他们为同类的前提。

所以,&#34081;&#20381;&#26519;这个就代表蔡依林,那是用户浏览器的编码不正确发给baidu的时候出 的问题吧,然后baidu将错就错使用这个作为链接,我觉得baidu这么做是故意的,如果是程序员出错应该全出错,这看上去是一棒子每月工资八百块的小 孩子手工分类的时候系统编码设错了的缘故吧?白都会这么大量使用人力吗?总之,我的程序被他这么一绕就跟着错了。(其实我原本什么都不知道,根本就不明白 参数有不安全字符的问题,就是拷贝来者)正确的是改成这样子%26%2334081%3B%26%2320381%3B%26%2326519%3B,说 白了就是全部使用escape,这一点在论坛上说了很多遍,那帮小孩子没明白导致我也没明白,结果想了一两天,真是白吃。昨天决定把我的强大的笔记本型服 务器该回vista因为驱动实在是找不到,hp这也是正常的,550块的笔记本那,天哪,你知道有多么强大吗?当然这么巨大的庞然大物一般女孩子是抗不动 的,实在是笔记本中的重型装甲车,给我做服务器太合适了,算下来比买台式机还合算一些,哈哈。。。

我想吃完早饭在试验,很多天没有吃过早饭了。


六月二十二日 今天阳光灿烂?很灿烂

运河,皇家山,中央公园。跋山涉水,上山越岭,穿梭在鸟语花香之间。<balls of fury>实在是一部超级搞笑的片子,不过,我很怀疑优惠被很多中国人当作是某种侮辱,为什么这么敏感?我觉得是民族自信的不足,一个被称作东亚病 夫的民族整天担心以至于要花好几个亿的钱去赢一块体育金牌,开什么奥运会,劳民伤财,没见过一个国家为这么个东西花上几百亿美元的,这就是集权统治下才会 有的荒谬,整个就是当年皇帝好大喜功累死百姓的那一套。不过这部电影是真够搞笑的,其中最好看的就是maggie Q的风骚,哈哈。。。


六月二十四日 今天阳光灿烂?很灿烂

今天是什么公共假日,反正是休息,王林森已经到到了portland,这是什么地方呢?

http://blog.sina.com.cn/wanglinsen

昨天成功地找到了笔记本电脑的声卡,显卡的驱动,混账nvidia居然不提供winxp的驱动,我一定要整理一下放在网络上。
昨天晚上修正了一两个小bug,但是baidu依然是一个难以攻克的要塞,我实在是搞不懂了。真正的问题究竟在哪里?
1。她使用&#ddddd;那是因为编码的问题,大概是本地电脑的系统encoding的问题,我把&%和后面的;去出还原ddddd为 gb2312这样处理后的连接应该是正确的,但是好像还是在那里有问题,要跟踪实在是太累了,一定要找个长的时间。水印的事情拖了很久,仅昨天才把从前的 gdi翻出来,还没开始就困的想睡觉了。怎么办?


六月二十五日 今天阳光灿烂?很灿烂

终于想到了一个非常非常简单的办法来解决我的问题,这是一个简单的问题,当初我也没有精力去考虑因为spider非常得不稳定,当然现在html的 parsing还是有些小毛病,主要还是encoding的问题,我现在觉得baidu的问题纯属子虚乌有,我读到的是什么就应该是什么,完全不存在什么 变换的事情??(是吗?再试一下吧?)总之,对于广度搜索有一个最简单的解决大数据量的办法,使用mysql存储链接,这样一来甚至我四台电脑的搜索蜘蛛 都可以跳过去那些重复的连接了,再也不用担心内存溢出的问题了,查询速度应该也是要比set来的好吧?

我发现我的服务器被一只google的蜘蛛盯上了,他爬呀爬的,每天孜孜不倦的爬,大概爬到现在有十万张图片了吧,我现在已经快四十万了,要加油不要让他追上。

我发现我的ie不能另存为jpg图片的原因是因为cache满了,我google到了一大队的同样的问题,其中有个家伙在听到别人这么说之后说他要抽自己 的耳光因为它没有抄最简单的方向去找,我连抽耳光的资格都没有,我压根就不知道怎么办,一直以为是安全设置和病毒木马的感染。

另一个低级重复的愚蠢的问题就是我总是忘记打开file药用w+b,因为我的字串使unicode的,存储老是出错。riding, biking


六月二十六日 今天阳光灿烂?很灿烂



在百度身上浪费了很多G的流量结果,结果下载了不足几千张,实在是得不偿失,我已经几乎放弃了在百度身上打主意,只好用它来手动添加图片网站入口。这几天 没有完成每天的指标,迫不得已只好把自己胡乱拍的照片那来充数,不过还是杯水车薪,这个月还没有到头结果internet的流量已经超过了100G简直比 普通bt下在还厉害的多,现在还没有完全机械化作业,因为下载的照片都要人工粗捡一下,否则等我的程序链成一体三四台电脑同时日夜不停下载还不知道要用掉 几百个g,(不过是有上限的,adsl=512k*86400*30/1000=1327G,就是说理论上按照512k的带宽来算一个月最多可以下载 1327g,当然这是不可能的,因为还取决于外部网站的响应速度等等)现在越来越懒了,一个水印磨蹭了快一个月就是没有完成,一方面我有些犹豫不决,因为 很难看,而且很多图片上已经有水印了,重叠起来很不好,在这说这个做法有点让人不齿,看着一些业余非计算机专业的人都不会使用透明色做的网站地址让我觉得 不应该和他们一般见识,(自己找理由,当然另一个原因还是html-parser里面的encoding总有些莫名其妙的问题,让我心烦意乱。我已经把 link的buffer开到了1k,难道还有溢出的问题吗?html德get是可以使用2k的url,也许我应该在加大到2k?)现在还没有突破40万,看来百万图库还是有些难度的,尤其是高质量的。


六月二十八日 今天阳光灿烂?很灿烂

今天化了半天时间浪费在一个简直是初级白吃的问题,我当初在server里面的log用的是最简单的FILE,这个在普通的应用中问题不大,但是在 server段有很大问题,同样的问题时printf,这一类的stream函数,实际上这些都是类似于static的全局函数,当多线程并发的时候就出 问题了,我花了不少时间才意识到这个问题,一开始还以为是time之类的同样的全局static函数的问题,他们的问题当然也不少,但是还不至于 crash,最多就是数据比如时间corrupt,而文件操作却会crash的,这是在世浪费时间,我有更重要的工作要考虑。

现在我要考虑的是流量性能比,就是用多少机器多少流量下载多少图片,而且那些图片总是要让我手动挑选怎么办呢?


六月二十九日 今天阳光灿烂?很灿烂

今天帮人搬家,出了一身汗,应该多多锻炼。看了一片湖北一个高考女生的作文被判零分,我感到很气愤,这个小女孩不经过就是叫破了人人都知道却又不敢说的事 实,那就是皇帝的新衣实际上连一块遮羞布都没有,是赤裸裸的欺骗,我现在可以深深体会鲁迅的狂人日记里说的满篇都是吃人的道理,GCD的宣传都是欺骗。一 个人上学读书本来就是为谋生积累更多的资源,却非要说成是为什么祖国作贡献作准备,在男权社会里女人直接或间接,长期或短期出卖肉体换取生活资料原本就是 进化论的必然,说出来就被判零分,中国的中学生在中学里学了一大队天方夜谭,每次写作文的时候要把自己重新想象成六岁没有思想成熟的儿童般的天真,哪怕你 早已看穿了那虚伪的透明的遮羞布,这就是为什么那么多的青年走出校园感到迷茫,恐惧,应接不暇。什么样的教育就能培养出什么样的国民,咱这大清国迟早是要 完蛋的。

我被很荣幸地告知我这块自留地被伟大光荣正确的共产党政府彻底封了,我有那么幸运地登上黑名单吗?我一个手无缚鸡之力的穷书生由什么能量威胁到拥有全世界 人数最多的警察部队的政府的统治?我究竟说了什么话让他们这么恐惧?我极端?偏激?精锐来自于锋利,没有用显微镜与望远镜观察的人永远生活在无忧无虑中, 却总还自诩为宽容与大度,Ignorance is bliss.


六月三十日 今天阳光灿烂?很灿烂

所谓的万民暴动当然是夸张,但是反映的民怨却可见一斑,今天大概在全中国全民范围承认政府官员的腐败已经是一个共识了,我记得从前当我发几句牢骚的时候偶 尔的还能听到所谓的类似于宋江式的所谓“皇帝是清明的,只是下面的官员有些腐败”,下在我估计这一类鬼话越来越没有人信了,当年的宋朝皇帝清明的很对吗? 《水浒传》一开篇就要定调子说是明君下凡,(记得好像那个狗皮皇帝刚出生的时候是啼哭不止,直到有人在他耳边说所谓文有文曲,武有武曲这才高兴得不哭了。 然后小皇帝长大了就不理朝政了整天去找京城名妓李师师玩乐去了,只要是封建君主专制就不要期望有什么明君,社会进步到今天靠的是制度不是靠个人。制度使 然,这就是中国的根本问题。)我们当然可以理解水浒传这么写是迫不得已,否则也要落的各满门抄斩,一个社会完全禁止不同言论的做法,除了伊斯兰教就是今天 的共产党了,当年我们看到霍梅尼发出全球追杀令要去《撒旦诗篇》作者的项上人头肯定认为这是一个愚昧不开化社会的不智做法,全世界有这么多人,只要有一个 人吗了你几句你就要沙,你杀得过来吗?弄到最厚肯定是国外的我杀不到我就杀我眼前的,这个特征值在共产党的今天统治也是如此,总之,一个社会退化到和伊斯 兰极端教旨主义一样那肯定是没希望了。


七月一日 今天阳光灿烂?很灿烂

忘记打开防火墙了,现在用1000段口作测试,原来的那个server,看在googlebot的面子上先不动他。全面升级了。a) httpclient b) httpserver c) mysqltools


七月二日 今天阳光灿烂?很灿烂

现在是下决心的时候了,今年下半年的几项战略任务是这样的。
1。近期目标:
a) 把数据库的图片存量在两到三个月内从现在的40万提高到一百万,这大概要求每天的平均有效上传量达到5000-10000,考虑到目前的下载有效图片非重 复率低的时候只有10%的状况,每天要下载两万到三万以上。再HTTPCLIENT稳定后可以考虑把MYSQLTOOLS结合起来形成"蜘蛛群",建立一 个"联合收割机",即下载链接与下载图片的工作异步进行,让不同的专门化蜘蛛执行。这个工作已差不多完成了一半大概还需要两个星期左右完成整合调试。
b) 近期最重要的目标是集中精力学习internet explorer编程,重点在Binary Element Behavior方面,同时兼顾BHO,主要目的在于是否能够借用IE德htmlparser部分,这也是DC的project的核心之一。估计需要一到两个月时间。
c) 另一个长期任务时jpeg压缩算法问题,争取自己实现一个或者拆解出来作为图片分析使用。这个任务相对来说比较繁重并且并非十分紧急,需要大约三到四个月时间。
2。中期目标:
a) usb driver只能作为业余爱好,不可占用任何业余时间,并非当前的核心任务,建议放弃。
b) windows mobile,windows ce,symbian之类的东西并非可以在可预见的将来有入门的机会,主要是缺乏环境,入门时间太长。
c) 图片分析是唯一看来可行的目标,没有任何指标量可以评估。也许最起码先从简单几何图形识别开始?

以上战略指标需要每个月进行评估总结调整。年底作总结性评估。


昨天,我觉我遇到了网上有人说的那种问题,就是有的网页打开的时候有一定的延迟,我的httpclient会直接报出网页打不开的错误,但是ie打开的时 候从人的角度看还是正常的,甚至在debug环境下都是正常的,也许有必要调整wininet里面tcp的延时选项吧?研究一下吧。
为保证有足够的体力,现规定晚上12点以前必须睡觉,除周末外必须抽两个早上去gym锻炼。

新版的windows server 2003 sdk r2不能兼容vc6,要用老得sdk。
我总觉得风起云涌的大规模运动就在眼前,因为新一轮的资本主义经济危机伴随着高油价,高粮价已经到来,这些只是一个导火索 ,把早已堆积的社会总危机引发了。


七月四日 今天阳光灿烂?很灿烂

据说是美国独立日,BBC的特约记者的观点和我相似,就是中国老百姓的所谓“青天清洁”总指望什么明君特派青天从天而降,整顿吏治为民做主之类的,当然这 是很幼稚天真的想法,不过,这个在中国很多年的记者也很明白其中的缘由,这也是所谓的不得已,因为,如果真正想毛泽东批判宋江的所谓“只反贪官不反皇帝” 一心等待招安的方式,可能在今天的专政下遭到流血的下场。人民虽然愚鲁但并不笨傻,生存的本能使动物的本能。我的感觉是2008时一个转折点,一方面统治 者期待借此机会总进国际资本主义大国的俱乐部,这其中的标志当然是所谓的“奥运”,可是争相俱乐部的老玩家所说的那样,进这个俱乐部是要代价的,英国老牌 上流社会的会所并非是新型资本家开纺织厂赚了一些英镑就可以进去的,除了不菲的入门费还要学习英国贵族的作派,说话要拿腔拿调,一套礼仪学下来也并非一天 两天。今天,想进俱乐部的GCD要开始交会费了,如果不用专政手段对付暴民,下面的政府官员还真的不知道怎么办。《yes,minister》里面有一集 里非洲新政变的效果总统说的好,我党总统没有你们拉选票选举那么麻烦,动动枪杆子就行了,的确,暴力是最快最简单有效的途径,问题是来的快去的也快,以暴 易暴,循环往复的轮回是最快的。下午最好能够继续winpcap的试验。


七月五日 今天阳光灿烂?很灿烂

最近stryker的战地日记已经精简到了“活着“。“没挂“。注意这分别是两篇日记的全文啊。
人生可能就是这样,很多时候也许只能说今日无语,多少事,与说还休,索性不说,然而不说难道就没有思想吗?除非是脑死亡。
才说沧海难为水,却道巫山不算云。空有凌云腾挪志,奈何儿女寻常心。
Morpheus说道,History never repeats itself without irony.人人都知道所谓“苛政猛于虎”原文是说老百姓宁可与猛虎为伍躲进深山逃避苛捐杂税的暴虐,然则,在二十一世纪的今天一个老实巴交,狡诈阴险的 陕西农民居然演绎了一个新的老虎传奇,压根就没有什么老虎了,看起来苛政已经把老虎都赶尽杀绝了,所以苛政猛于虎的断言没有错。
轻徭役,减赋税,这是历朝历代的中国统治者挂在嘴边的治国之道,每个皇帝都明白要想江山长久必须要老百姓活下去,可实际上基本上没有几个皇帝做得到,因为 有这么一大帮子三宫六院要养活,有这么一大批的朝廷官员等着领俸禄,更有一大批的地方官员等着盘剥以便穷奢极欲,更有一个一心想要穷兵黩武昭显太平盛世的 皇帝,徭役怎么减,赋税怎样轻?
2008仿佛是古代的大灾之年,我们没有看到当今皇上免赋税轻徭役,却看到是在国库还算充裕的情况下发动了一场民间捐赈的运动,但是最终的负担其实都压在 了大多数的企业头上,因为中小企业的流动资金被房地产业造成的泡沫挤占了。为什么会有房地产的高利润高增长?说到底是企业经营环境的恶化,是当年朱镕基把 地方的财权收回到中央搞了一批所谓的扩大内需的新政,地方政府就只有卖地来效仿。其中的因果关系未必如此,但是结果就是地方政府积极推动以增加GDP大搞 政绩工程,以便从中捞取油水,各级银行信贷追求看上去无风险的房贷,舍弃日益利润地下的中小企业的贷款业务的直接结果。所谓积重难返,在这样的时代,我们 看到的是美国政府连年出台退税减税新政,中国政府则在创纪录的财政收入之下把一大笔钱投到了政治奥运上,那只是某些人的奥运会,决不是普通老百姓的奥运, 那只是统治者试图桥开国际俱乐部的大门的奥运,不是普通在日益激烈的全球化竞争环境的企业的奥运,那只是一场体育比赛而已,值得吗?开完之后,庶民百姓卖 豆腐的还得接着卖,拉黄包车的还得接着拉,真是与你我何干?这就是我的奥运态度。
这两天下载了将近十万图片,冲到五十万大概很快,问题是我是不是应该继续严格筛选,继续保持总体的一个theme.

翁安事件的真相如何并不重要,到底当地的公安机关是否无法无天也并非事件的核心,到底那个女孩子是被奸杀还是自杀也无关紧要,真正重要的是振臂一呼应者云 集能够挑动上万人围攻象征权力的政府机关以及象征国家机器的公安局,这说明什么?说明火药桶上的斑点火星都可以引发爆炸,古代的每次农民起义不都是一些偶 然的小事件作为导火索引发的吗?但是如果没有当时的社会政治经济矛盾的大背景下导火索有怎么可以引发爆炸?

胡温集团并非不明白其中的利害,然则所谓政策不出中南海并非一句戏言,因为当今的封疆大吏各个画地称王,在朝廷里的关系网络千丝万缕,各个部委也和一大批 的利益集团同进退共存亡,就算你要在这宦海里动一个小指头可能都能掀起轩然大波,唯一在中南海的那个位置上能做的就是处心积虑告诫整个统治集团内部:不要 过分激起民怨动摇国本,大家都是在一条船上的,不要做的太过分,仅此而已。
我的感觉是军队的腐败绝不亚于地方,一个封闭的系统更加的没有监督检查的机制,这样的八旗兵和美军相遇时一触即溃,不会比伊拉克军队强多少,原因在于中美 两军开战PLA根本就达不到美军,所谓的不接触,你就算近战干拼命也找不到人去拼,这一点在半个世纪前的朝鲜战争就被证实了,那个时候美军其实就能在一定 程度上做到不接触,完全用空地炮火消灭你的大部分有生力量,伊拉克战争是现代战争的完美演绎,萨达姆的百万大军第一次海湾战争根本没打就崩溃了,可索沃更 是一个极端,地面战争成了一个选项,坦克大炮的陆军仿佛星际争霸的人族的地面部队遇到了神族的空军完全无还手之力,这就是不对称战争的另一个解释,战争的 一方完全没有还击的能力。
鸦片战争算不算是不对称战争?火器时代碰到了冷兵器时代,这根本没有任何悬念,长矛大刀的义和团仗着刀枪不入的信条挑战马克辛机关枪,这和今天国人的盲目 乐观何其相似?在不远的将来,美军的作战部队将进入无人化时代,自动巡逻哨兵和遥控坦克成为陆军的作战主力,空中是大量的无人驾驶飞机执行全天候的空中作 战任务,海上在雷达扫描范围外的敌人就被太空的全球定位引导的导弹击毁,舰炮早就成为一个军舰的装饰品。这就是二十一世纪的战争概况。

突然之间,我被吓出一身冷汗,mysql文件超过了77G硬盘突然满了,我的上传自然就听在那里了,现在才47万多如果到百万的时候硬盘怎么办?NTFS 的文件大小应该是没问题,可是我的老电脑没有sata,那个IDE硬盘也许不够了,那么。。。这个问题难办,除非我再买一台电脑来做数据库服务器替换下那 台老爷爷,否则让我用笔记本做数据库完全不可能,因为硬盘无法扩展,用我的这台拥有512M显存的显卡主机做服务企业有些浪费。这是在世有些麻烦,难道预 算委员会会同意今年再添一台电脑的计划?或者就是买一个超大的IDE硬盘,使用mysql最新的那个磁盘阵列的文件形式,不过上一次我是了很久始终无法解 决primarykey,unique key的问题,现在来修改数据库结构也是一个伤筋动骨的工作。


七月六日 今天阳光灿烂?很灿烂

骑车去了所谓高德宁殡仪馆,实际上就是皇家山上的Cote Neidge公墓,景色很美丽的,我以前也常常在那里跑步,在里面骑车更好,因为上坡比皇家山还多,道路则比土路好骑的多。
回来察看了一下,我的mysql的link的数据表的字段用的是blob,于是我想这个比固定的varchar之类节约了大量的空间,5百万条记录,总共只有五百多兆平均每条只用了大约100bytes,这比较符合实际,要知道我原本预留每条记录1k到2k。

什么事service?当初学习linux的时候只有一个简单的daemon的概念,windows下的service的内涵要比daemon丰富的多。我想我现在大体上明白了基本的概念,相对于COM来说service问题很大,就是名字的问题,因而过于简单了。


七月七日 今天阳光灿烂?很灿烂

早上认真学习毛泽东思想,重温了伟大领袖的十大军事原则。整理以前收集的一些邪门歪道的武功秘籍,这些东西亦正亦邪全凭运用之人,我现在还使不甚了了,以后也许用得着。


七月八日 今天阳光灿烂?很灿烂

如果不设立索引的话肯定非常非常的曼。create index index_name on table_name (column_name).我有三张表,其中有一个表由五百多万条记录创建索引的时候,mysql德gui-tools显示线程死了(thread dead)我不知道这是否是紧紧地显示问题,比如长时间不响应,还是确实有错误,或者mysql在大数据量下的问题?奥,知道了,又是磁盘存储空间不足的 问题,这个index需要很大的空间,我的营盘分区不够了。

有两件急迫的事情要去做:加索引,备份。我对于mutex还有一点疑惑,wait_abandon的情况时获得了ownership但是并没有获得 singal的状态,是否应该再call一次wait呢?究竟ownership有什么用呢?每次大家不都是获得ownership吗?奥,理解错了,是 最简单的情况,获得ownership就是平常的意思,我看错了,所以,wait_abandon效果和wait_object_0时一样的。要小心。 msdn的例子非常的白痴,会误导你的,因为,wait_abandon居然不释放mutex,结果会怎样?

 


七月九日 今天阳光灿烂?见鬼下雨了。

我是在不明白共产党为什么要把我这小块试验田封掉,这么一个害怕别人批评的政党能存活多久呢?从前中学语文课本里面常常看到鲁迅之类的在国民党的统治下批 驳政府的文章,我想那个时代那些人的笔锋是非常的锋利的,可是他们都存活下来了,今天的这个政党防民之嘴胜于防洪。现在常常想水浒传里那些梁山好汉如果生 活在今天会怎样?已经有人问过类似的问题就是如果鲁迅活在文化大革命期间会怎样?毛泽东据说回答说鲁迅会选择沉默,也许毛泽东对自己的政党的特点一清二 楚,小时候看连环画歌颂太平天国的洪秀全,我那个年纪唯一能够记住的就是洪秀全值得歌颂的就是他反孔,我当然不知道他反孔是因为他信上帝,当然我也更不会 知道这个解放妇女废除缠足陋习的反封建领袖在天国南京养了后宫佳丽三千比当时的清朝皇帝还要腐朽居然二十年沉迷后宫不理国事,当时大力宣传教育像我们这样 的小孩子的原因仅仅是因为当时要批林批孔,而当时之所以批判孔老二的原因是为了批判林彪,批判林彪的原因是为了给毛泽东选择立标作为法定接班人的尴尬局面 找台阶。我一年级的小学数学应用题里面有一道题目是有关同学们书写反击右倾翻案风批判邓小平的大字报的加法题,结果那个学期还没有结束数学老师有一天让我 们翻到那一页划掉那一行,因为政治的风向标在一个学期内就有一百八十度的大转变。当我们在那样的年代那样的环境下长大我们从来不敢怀疑这有多么大的问题, 我们可能和现在的北朝鲜人民一样以为世界就应该是这样的,在二十一世纪的金太阳照耀下的北朝鲜是世界上最幸福的国家,这就是某个政党的政治谎言,比皇帝的 新衣还要赤裸裸,还要肆无忌惮与恬不知耻。
今天的互联网络让思想的传播达到了接近光速,突然之间在上海某个对社会不满的青年闯进了象征专政的公安局杀死杀伤了为数众多的警察,这种事情在任何国家都 是会发生的,原本没有什么大惊小怪,不过,我觉得这种寻常的极端挑战政权的行为在特定时间有着特定的影响,这正如在美国一所中学里发生的屠杀被后来很多的 极端青年所效仿。
中国有十三亿人口,美国有三亿人口,加拿大有三千万人口。如果中国只有现有人口的零头或许在很多年后达到或接近某种发达国家的水平,但是要达到所谓现在骗人的和谐社会的口号只有再把人口除以十降到三千万像加拿大一样就有可能了。

mysql有一个很麻烦的东西,就是1093的错误,你不能再update德from语句里面更新那张表,比如,你要更新当前表里面最小的一条记录怎么写?
update mytable set myvalue=1 where myid=(select min(myid) from mytable);
这是会报错的,因为mytable不能同时出现在从句里面,有人说用mytable的别名也行不通。我看到一个大虾的办法是这样的。
update mytable a
set a.myvalue=1
where
a.myid=
(select c.myid
from (select b.myid from mytable b) as c);
这个可以work,但是代价就是非常非常的慢,因为你嵌套了一个临时表,这个方法实际上和复制一个临时表没有太大的区别,对于我那个有五六百万条记录的表来说这个办法行不通,看来更新世很费时的操作,要尽量使用健和具体数据而不识子查询。

灾难性的一天,我的自行车丢了,这个可是我刚买了一个多月的新车子,就锁在上班的楼下,旁边还有好几辆更好的车子为什么要偷我的?看来我这个人太爱慕虚荣 了,为什么我的仅仅价值四百块的自行车会引起别人这么大的兴趣,难道是我这个人慧眼独具挑选的都是价廉物美的东西?当然原价是六百块的。真是祸不单行,这 个月搬家就要损失不少的房租,现在又要买一辆新车子,不过还是咬牙买了一辆一模一样的,这个月看样子又是一个艰难的月,碰到街上的乞丐恐怕就掏不出零钱 了。


七月十二日 今天阳光灿烂?很灿烂。



DC的code简直就是垃圾,惨不忍睹,这当然不能全怪他,一个自学成才的完全靠个人勤奋的非专业人士是非常难得的。他完全是靠着自己的头脑在 coding,仗着自己的逻辑在编程,这是程序员的大忌,(为什么?这是我个人的看法,程序员不应该靠着很强的逻辑来把一个简单的事情做成很复杂,恰恰相 反,要把复杂的事情变简单。否则,这个世界永无宁日。我承认我很多时候逻辑思维敏捷并不如一个五十岁的人,但是,这正是我的长处,我的coding绝对比 它的来的简单易懂,说明我把一件事情已经看透了。)一个喜欢绕来绕取得人未必是把所有的可能性都考虑的人。

我现在连皇家山的三分之一抖很难跑上去了,咬着牙硬撑到山顶附近,大概4/5吧?在山上我想到但凡是个programmer如果玩过两天的网络搜索没有不会想到所谓的google page-rank的,可是据说这个被google注册为patent,真是what a fuck!简直就是好像有人要把bubble sort申请为专利一样的让人怒不可遏!
看过几个数字大概是统计中国政府的行政费用占财政收入的比例,在全世界范围大概是最高的吧,和西欧北美比都是好几倍,这个大概就是以党专政的后果吧,当初 讨论慈禧太后为什么会把北洋水师的钱拿去盖颐和园,国人怒不可遏以为中国的不幸时那个老女人造成的,其实,换作谁都会那么做的,因为这就是制度,没有任何 约束力的制度让人的欲望无法无天,现在这个政府每年的财政收入增长率是百分之三十以上,可是普通老百姓的日子未必有那么好过,企业的经营更是日益困难,但 政府首先想到的不是怎样回馈人民而是怎样继续保持财政增长速度,所谓竭泽而渔是也。
我想军事武力的强悍没有几个国家能够超过前苏联的,但是一夜之间分崩离析的原因在于自上而下所有人都认为那个主义与那个政党是腐朽的,连那个政党内几百万 上千万的成员都是这样认为的,那么解体与下台是自然的,不管你拥有多么强大的军队与克格勃机构。实际上,那个专政的机构和美国比起来也差的很远,一个什么 专业训练都没有的青年拿了一把西瓜刀冲进警察局居然砍死了六个警察,看伤十几个,这在美国简直是天方夜谭,除非你是铁打钢铸的机器人, (terminator也是靠的自动武器才杀了十几个警察),这在全世界都是一个大笑话,反映出这个国家机器的脆弱。一场地震,派出据说是最精锐的空降部 队救援,结果不要说救人自己士兵的饮食都无法保证。征集全国的直升机也无法保证几万人的供应,还坠毁了一架,上天入地四面八方的寻找,不要说救援幸存者, 连残骸都找了十几天找不到,最好还是靠着最原始的人力搜索,这让人想到当年中美飞机相撞的结果,那个所谓的英雄飞行员坠毁之后也是连残骸也找不到。我再想 这样的军队比当年的八旗兵强在哪里?走私鸦片变成了走私香烟,士兵虽然没有集体吸食鸦片,但是无论是体力还是训练都远远比不上美军,装备与人员素质根本就 不用提了,至少清朝的军队还是命令禁止经商的,可实现如今虽然表面上军队与经商的部分分割,可是你认为有哪个傻瓜会放弃自己的小金库?这根本就是自欺欺 人,军队的经商没有军队的特殊背景根本没有暴利可言,军队没有油水可捞谁会傻到不脱去那层绿皮?当年的清朝不是因为侵略西方而引来了鸦片战争,恰恰是因为 当时的对外贸易顺差太大引来的,如果今天的中国成为美国的贸易顺差大国,成为美国的威胁,迟早有一天激烈的军事冲突是不可避免的。(当然这里有一个本质的 区别就是当年的顺差使用黄金白银流动体现的,今天的贸易顺差不过是一些废纸和数字,美国人高兴都来不及,可是,毕竟那是一种财富的流动。)如果把美国逼急 了触动了美国的国家利益,那么第三次鸦片战争就要爆发了,这一次不知道要烧掉哪一座颐和园?


七月十三日 今天阳光灿烂?下雨了。



我想我浪费了一天一夜的时间在做一件无用功,以后再也不要干这种傻事了。
1。笔记本硬盘的接口,p3与p4时不同的,至少我的是这样。所谓活动硬盘是由一个接口转换器转为usb,应该是借助不好所以供电不足吧?
2。用nero刻启动盘有一个高级选项就是emulation的问题,我一直以为我的老笔记本是这个问题,google到的也是这么说的,其实地址用0000应该是对的,有些dell的使用07c0,四个磁道sector。nero里面设置启动镜像。
3。结论就是我的光驱可能是有问题,或者是hp的bios作了什么特殊设置,所有的启动光盘都不能成功,应该不是光盘的问题,因为restore-disk也不行,当然也可能是corrupted。
以后还是专心致志编程不要花那么多时间玩硬件。


七月十五日 今天阳光灿烂?是呀。

我犯了很多的错,每次都是深深的懊悔,但是每次都改不了。
1。bmp是32bit对齐,换句话说说就是4byte对齐,现在的图片很少有256色以下了,所以原本的8-bit对齐的条件自动满足,否则还是要考虑的。(width*channel+3)&(~3)我想我什么时候才能不再犯这样的错呢?
2。debug dll要注意的是路径,假设dll在d路径,exe在e路径,那么从d路径下的workspace跟踪要设定运行e路径下的exe,但是它连接的是她能够 找到的dll,假如d路径下的dll并不在搜索路境内还是不行,但是如果你每次都用拷贝的话要下小心多版本的dll的噩梦。同时,因为实在d路径下跟踪参 数,便粮油都是相对于d的。这些浅显的道理原本应该是每个程序员无师自通的,但是我总是反同样的错误,而且比较惭愧的是至今还没有尝试远程debug,当 年简单的使用gdb来跟踪另一个进程,但是windows下从来没有做过类似的,据说要使用vc6的一个特殊的debugger,DC说的,以后在实验 吧,不过我看到它使用的是一个所谓debugbreak让运行期的程序捕捉断点然后再跟踪,不知道这个debugbreak函数是谁的。
3。针对与每次拷贝文件,在vc6的post-build项下这样做,copy "$(targetpath)" ..\..\myreleasepath,不要问我为什么$在挂号外,我不动怎么写script,也不想学。
4。bitmapfileheader这个结构里面的所谓size是整个bmp文件的大小,同理offbits也是相对于文件开头的偏移,这样就明白了吧,我实际上已经不止一次的反同样的错了。


七月十八日 今天阳光灿烂?阴天,晚上下起了瓢泼大雨。

每天平均写不了一百行代码,简直是蜗牛在爬行。白天打瞌睡,晚上睡不好,看样子还是每天写的程序太少了。大概上传与下载的部分初步完成了,要测试一下,实 际上根本没有什么东西,完全就是改了一下参数,就像昨晚上DC的email一样我始终认为他所谓的read-ahead-buffer根本没有什么为什么 就不用我的非要自己重写,当然我们每个人都觉得别人的代码难懂。当然我没有写那个buffer,可是应该没有什么东西吧,他总是把一件简单的东西写的无比 复杂,这就是没有学过正规算法但凭直觉的结果,不是让你去记,而是去体验别人的思想,这个世界上最困难的莫过于人和人的思想的交流,实际上我们自己都不很 清楚自己的思想,更谈不上理清楚交流了。

当然DC的问题远比我想象的复杂了,这是意料之中的,我只不过有时候很不服气,我现在的脑力与体力竟然比不过一个年近五十并且缺少专业训练的老头?更何况 我还没有他的烦恼,每次看到他接他老婆的电话的那种小心翼翼,温情脉脉的样子我就在心底里深深地同情他,老头儿经常接电话前都要诅咒一句,但是一拿起听筒 立即就换了一副嘴脸,通话结束还不忘了法国时的飞吻,哎,你说这种生活是不是非常的折磨人呢?我估计他每天上班还都要经常作老婆开的车,然后才骑自行车, 所以,对于司机的态度自然是毕恭毕敬了。
问题确实不简单,sheng德device要做成一种所谓的bridge模式就是作为一个纯粹的gprs天线,而通过usb连限于pc通信,由模拟器作为 web browser,首先得问题在于usb的连接,这个原本dc有一个driver,我也用它的code连接,但是,他认为usb的通信方式会有问题,比如每 个packet只有64bytes,(因为,另外一个iso什么模式是不做丢包检查的)所以,他要实现一个buffered-io,我原来用 windows的文件io的overlap来实现异步通信,模拟socket/pipe/com,当然它的小韩书也不算复杂,我看了好半天想把他改的简单 一些,就是类似于stream或者c-library的file的buffered-rw。但是发现其实没办法简化。这个问题也许还不是问题,因为 sheng那一头的device也许也有问题,他们已开始向要做的更加灵活,就是用户可以利用usb热插热拔的特性允许用户及可以使用pc也可以使用 device上网,这个实际上确实不太行,也许DC说的对,他的模拟器需要一个初始化过程,因为这个模拟器原本支持好几种device,各种现实模式都不 太一样,连通信协议都有些不同,所以及时切换不太可能。
我现在基本上写不了什么程序,注意力总是不集中,人也越来越懒了。比如一个网页上的机长图片我都懒得点击右健下载了,写了一个超简单的小工具把下载的jpg文件拷贝
在明确一下我的任务:
1。设法在ijg的library里面截获DCT之后的结果,并且作一个分析,找出最大与最小的压缩率,(不过我始终怀疑这个,因为虽然压缩损失在这里但并不代表这里就在做实际的压缩,应该时候一个阶段,这个必须要找算法来看才行。)
2。简单的能否把gif,png整合进来?pnglib可以,gif能吗?ijl好像不行吧?
3。filemapping有一个小问题就是0文件失败的问题,这个小缺陷是我最近才注意到的,抽时间改掉。
4。抽空玩一下usb的user-mode下的driver-management,这个要比kmdf来的简单的多,先从容易的玩。


七月二十日 今天阳光灿烂?阴天。

初步放飞了几个蜘蛛,现在他们分两大类,上传与下载,各司其职,最大的好处是占用内存不再与时间成比例每次都只有一个连接在处理,同时实现了全局的 link同步,当然是依靠数据库,另一个最大的好处是可以随时中止蜘蛛而不必担心损失很多数据,向以前我很多时候不得不等候程序运行完毕否则几天的下载流 量就白费了,这也是我以前一直想把支柱做成service的主要原因,现在看来这个需求不是很急迫了,大概接下来是加上一个简单的功能让蜘蛛群在多台电脑 上自动协调转换身份分配任务,因为大概一只下载的蜘蛛需要很多之上传的蜘蛛来平衡供给。

百度是一个很搞笑得公司,你去他的图片搜索居然发现大部分的图片都是来自他们家后院的百度贴吧,于是互联网搜索变成了纯粹的本地硬盘文件搜索,这个速度当然比google之类的快的多了。哈哈,很有创造力与想象力的搜索公司。

我个人认为中国最好的杂志就是《男人装》,堪称中国式的《花花公子》一定会成为未来中国中产阶级的宠爱。

mysql行为诡异不可捉摸,我的查询条件不满足居然也返回,实在不懂,胸口都痛。三只下载蜘蛛重复了三遍,原因就在于mysql的问题,不懂,真的不懂。下午玩乐一下usb的setupapi的最简单的函数,结果还是一样,不懂,实在不懂。郁闷中。


七月二十一日 今天阳光灿烂?下雨了。

mysql的问题其实很简单,就是一个全局同步的小问题。
1。你要对mysql有信心,他已经不是一个业余的玩具了,是一个企业级的产品,。
2。对于查询我始终有个基本的错误概念,以为返回空集合时候对于api是一种错误,其实,就算没有数据库常识的人也会明白只有语法错误和某种意外的情况下才有错误,我把这个意外扩大到了查询条件不满足是一个概念错误。
3。相对于从前和mr. hm做project的时候的那种全局同步这是非常容易的,因为数据库已经帮你实现了并发处理,我只需要结果就行了。
a) select min(myname) from mytable where mystatus =0
b) update mytable set mystatus =1 where mystatus =0 and myname = ... //这个地方只能用数据,我原本想把这两个查询合而为一做到一次成功,结果语法不支持,这也就是我费了很多天的一个原因,因为update的where语 句里不能再出现那个table,这个也许不是仅仅限于mysql吧?如果用子查询绕过明确使用table,那么这是一个非常大的自查询,我在数据库上试验 了一下,大概要很久很久,因为我的表都是几十万到几百万。
c) 处理数据。。。
d) update mytable set mystatus=2 where mystatus =1 and myname=...
4。所以,唯一的问题就是update/select是否成功,要使用mysql_affected_row是否为0来检查,这就是catch。
所以,问题解决了,我想这是一个原本很简单的问题,只是我很多时候缺乏一种信念。

很多时候coding和debugging是一种信念的问题,就是说你相信什么你怀疑什么,当然从来你都不应该无理由的怀疑也不应当无端端的轻信,可是有 信念的时候会帮助你很多。如果,你什么都相信,你会以为msdn都是对的,google到的代码与议论都是有理有据的,(当然现在几乎没有这样的人,可是 实际上我们或多或少的都是受别人的影响的。)结果很可能你很快患了脑积水成为脑死亡。可是,如果,你什么都不相信,你几乎一步也迈不出去,甚至连自己也不 相信,结果,你没有患脑积水,可是你的了脑肿瘤,迟早你也会获得脑死亡证书。
1。sheng德工程量非常的庞大,在一个赤裸的pda上实现tcp/ip,实现类似remote-terminal(protocol时DC制定的)这 实在是不容易,因为如果再pc上作也许我还可以,可是在pda上那种debug条件我感觉没有一点信心。DC的工作量也不小,因为现在要用它的usb- driver来和pda通信,使用pc上的emulator把pda当作gprs的modem这样的工具来和server通信,这个过程相当的复杂,究竟 在哪里出的错,双方都没有proof,结果请求windriver来测试,我就现学现用要在一两个小时内作一个简单的usb-driver来测试。
2。原理其实很简单,windriver的试用版有一个例子,你可以获得一个handle,然后就当作文件读写。当然前提是安装windriver的 user-mode-driver,这个我想也不适非常非常的难以理解,作为user-mode其实大都是读取registery里面的device信 息,然后生成自己的inf文件,我想他的那个所谓万能driver-dll应该是调用device原来注册的driver吧?(这一点是我猜的,因为没有 可能有什么万能通用driver,你能做pci,也能做mass-storage,hid,。。。没可能为所有的硬件写driver吧?)总之,我的理解 (读msdn的概念)driver就是主要几个部分,.sys的dll,(也许就是service),inf文件帮助你设置driver(包括了.sys 的信息吧?)注册表里的信息(让你找到inf,同时能够让你在device-class下enum等等),还有。。。我还没有学明白。所以,使用 windriver很简单,就是在她的device列表中选择device生成inf文件,他会把它的driver替换你原来的driver,这样就可以 实现那监听pipe的功能了。
3。我的理解就是driver都可以模拟成stream似的TCP或者buffer似的UDP模式,文件里也是这样,所以,在window里面driver最终都要你创建symbolic-link让你用文件读写来一致化。所以,在应用层并不复杂,复杂的不在这里。
4。最终好像是DC赢了一点点,他证明了sheng的程序在大数据下(256bytes以上)有问题,也许他在TCP的fifo里面没有处理好usb的buffer吧?DC很兴奋,我可以理解,因为我们大家都始终怀疑他的driver有问题。
5。使用windriver,我已开始编译他的例子wdu_lib成一个static-lib,但是linking有问题,就是crt的那些函数都包含 了,我知道static-lib我从来都没有成功使用过,但是让我再十几分钟内做成dll,实在是心虚,主要是我饿得厉害,我就说,你自己做吧。哈 哈。。。应该说老头的脑力比我强一些,因为我的注意力,短期记忆力尤其糟糕,比较代码这个活我总出错,逻辑上我越来越差。
6。玩这些工具其实也是一件很好的锻炼,sharkwire就是不错的体验,因为它让你直观地看到tcp/ip的通信,并且分析,你以后就用了直观的概念。同样,windriver很好,至少user-mode我比较有体会了。
7。ijg我的那个memory-memory的函数完全不能用,不知道当初是怎么测试的?也许我压根儿没测试,只是编译通过吧?ijg的代码是在难懂, DC说他恨函数指针,我深有同感,我原来是喜欢使用函数指针,但是对于别人来数那是一种噩梦,因为它基本上让你回到了汇编时代。
你有没有问过自己究竟现在网络上流行的用语“做俯卧撑”是什么意思?我想不一定有什么正宗的解释,至少现在。。。不!我查了一下wiki已经有官方的解释了,先引用如下:“对某事不便或不愿发表意见而做俯卧撑”。
这正和我的理解,用英文来说也许是speechless,也许是bullshit。说是speechless那是因为很多政府官员瞪大了眼蒙蔽普通百姓, 把人民党左三岁小孩子看待如同文化大革命期间一样让人忍无可忍以至于到了于无声处听惊雷的地步。说是bullshit是指的当这些政府官员给你信口雌黄的 扯谎,比如翁安事件一开头省委书记李可定性这是一个黑社会挑战政府专政的恶性打砸抢事件,这一类做法用英语只能说是bullshit,因为我们人人都明白 的,我遇到不懂的事情被别人问起的时候我也瞎扯一通,但是如果遇到明白人当场揭穿我一般是不大敢在来的,可是如果蒙过去了我自然把它当作法宝屡试不爽了, 这就是为什么共产党员喜欢bullshit,因为没有人能揭穿,媒体在我手里,谁能揭穿?你就算明白能让别人知道吗?就算人人都明白你能让人人都知道人人 都明白这个事实吗?就像皇帝的新装,人人心里都明白可是没有小女孩儿大声说出来人人可能都以为只有自己才这么想,这就是舆论的作用,所谓为民喉舌。


七月二十三日 今天阳光灿烂?有可能会下雨了。

DC与sheng的战争是个平局,双方都有一大队的bug,在软硬件都是问题的时候这的确是噩梦。昨天早上DC抱怨sheng不肯承认device的问题时候说:I don't know how deep this rabbit hole can go. 我只好说:Then you should stay in Wonderland and I show you how deep the rabbit hole goes.哈哈。。。如果你不明白就说明你不是programmer,因为这是programmer的必修课之一就是熟记《The Matrix》里的经典对白,仿佛国内的小孩倒背如流大话西游一样。
我的上行蜘蛛的定向搜索现在是一个突出问题,我今天早上化了半个多小时写详细的算法结果忘记存盘了,简直气死了。简单说就是享有一种反馈机制让“高产”的 连接优先搜索,所以,我这样涉及如果一个图片连接(分50k以上与以下两种,越大越好)给这个网站加一分,一个普通连接减一分,如果是死链接减五十分,当 然这些都是经验参数需要时间检验调整,同时每个链接的下载结果也要记录以便将来定期重新下载,我想这些都是最最普通的做法,只是复杂程度不同而已。
原本我期待这个部分在一两个星期内完成,结果现在都三个多星期了测试才刚开始。
最最重要的还是jpg,一个普通的观察就是同样的bmp图片,在24bit和4bit情况下,jpg/gif的压缩结果非常的接近,而zip/rar则完 全和输入大小成比例,这当然是常事,因为他们原本就不是针对图片的,jpg/gif市抓住了图片的精髓来压缩的所以图片不变他们的结果也不变。
放了两个上传蜘蛛大约把25万的连接减少了一两千吧?具体我不知道,但是图片连接仅仅增加了一千多而已。所以,参数要调整。
DC现在又会过头来叫我看kdmf,对于raja的要求更加的不以为然,现在已经改口说那不是他的project了,的确,iphone的出现是要让这个project出局的。
kmdf是有logging的,至少这是我刚刚读到的,当然DC我想说的也不错,你在kernel-mode的时候根本无法直接访问磁盘文件的,普通的 event-service是user-mode的,你要直接使用其他的driver来log。等读了再说吧,同时,cancel-pipe应该是完全无 法通知device的,sheng说只有reset-device他的buffer之类才会清空。使用windriver有很多毛病,我的usb- mass-storage去东北他替换之后,卸载的时候我可能作错了什么结果usb-disk不再能使用了,必须要找一个错误安装的 volume/device来upgrade-driver手动指定为microsoft的通用driver,总之是windriver改写了 registry和inf文件的问题,我找到了单不知道怎样改回去,是否说pnp-manager依靠vendorID与productID的字串来查找 驱动呢?因为在hkm/system/enum/usb下有这么一个windriver改写的项实用的就是vid&pid。

visionTV有一个节目叫做“God in China",介绍的是中国的宗教现状,基督教徒每年的增长在一百万,很快中国也许就会成为一个宗教国家了。


七月二十四日 这几天很有规律的,白天阳光灿烂,下午开始阴云密布,晚上细雨绵绵。

DC不论怎么说都是一个非常有天赋的程序员。今天他终于解决了他的usb-driver的问题,当然并不是完全,不过至少能正常工作了, surprising-removal还不能很好地解决,但是这应该需要device的配合才行吧?我不知道。下午下班后,他突然对我说,we are very much fucked up。他指给我看emulator通过device上网但是当device滚动时候其他部分不显示,其实,问题很简单哪个是我的第一个作的小工具的结果, 再debug模式下节约流量,没有“格子”是不能显示器他的,我自己完完全全忘了还有着一个东西,还是DC想到了。后来他心情不错给我讲了一大通关于 inf文件格式的问题,他的意见还是很中肯的,命名里面代dot就是"."的话或者是系统平台的“扩展”,比如amd64,nt等等,或者就是inf的系 统命令,比如.services,所以,在命名section名字的时候不要滥用,不如食用"_"替代不必要的"."。这实在是很好的习惯。我后来问他能 否通过registry查找inf文件,这当然是个很幼稚的问题,不过我有我的原因,他的办法应该是可行的吧,即使用vid+pid再inf文件里搜索, 我想应该是这样的吧,我的原因是windriver把我的系统搞得一塌糊涂,我想知道我的usb-disk的驱动被那个windriver的inf文件改 动了,当然我也注意到了石碑改成了oem??.inf的文件,当然我是通过修改时间找到的。
wdf德模式变得很简单,driverEntry是入口,必须设定四个回调函数,adddevice,startio,dispatch,unload, 其中adddevice/unload要配合pnp,dispatch可以想象是事件派遣中心,所有的处理callback都在这里,(这不是废话吗?)

mysql我设定的时候有一个疏漏,就是整数默认是unsigned的,这个引发了负数输入的一个range的错误,重新修正数据库化了很多时间,因为那个表由大概五百万条记录,我结果等的睡着了。

驱动编译在free或者说release模式下会做严格的检查,包括内存中断返回类型等。


七月二十六日 这几天很有规律的,白天阳光灿烂,下午开始阴云密布,晚上细雨绵绵。

FACEBOOK运用的是一个数学里著名的定律,大概就是世界上任何两个人之间找到共同的朋友最多需要几个人的问题,我记得好像不超过五六个吧,也许更 少?好像可以简单估计一下吧,平均每个人认识一百个人,那么不考虑重复的话五个人认识的最多的人就是100^5=100亿,而普通人很少只认识一百个人 的,所以,从大量统计的角度看五到六个人是差不多了。昨天看了看王林森在纽约的游记,非常的有同感,这就是美国人的价值观,在独立宣言里的写入宪法的立国 之本,人人生而平等,他们把这当作所谓的common-sense,不管现实怎样的难以做到,但是一个国家如果真的依此为立法立国之道那是非常难得的。我 很同意他的感言,什么叫做国家利益高于一切,没有每个人的个体存在哪里来的国家?国是谁的国?家是谁的家?为了救一匹马死掉,为了几头羊残疾了就应该成为 人人的典范?这是典型的维护皇权的噱头。中国现在就是一个典型的所谓“国富则民穷”的国家,历史上每次渲染的太平盛世都不过如此。

DC很多时候却是有些不折不挠,为了vb界面的tooltip折腾半天,当然界面这种东西是他比较容易理解的。toolbar德button不是真正意义 上的button,就是说每个button不再是一个window,所以,普通button的tooltip你可以定义就自动显示了,但是toolbar 的button可能需要一些处理,所以,他找了半天还使得自己去算鼠标move的坐标,vb已经简化很多了,不过还是费了些周折。
我的蜘蛛依然需要大量的测试,问题挺多的。明天搬家,今天整理,没时间了。

他的代码就让人想起两样东西:onion&boilerpot,一层又一层的重复,一锅煮的大杂烩,当然我现在也能理解他在这样的公司里面没有办 法很多时候进度催促,不停地改,只能采取最简单的cheaptrick,昨天,他给我说问题实在kernel-mode的mutex的中断水平设定上,我 也不记得了,反正msdn上面说的,采用spinlock就没有问题了,系统会自动帮你设定interrupt-level但是类似于gdi的 device-context之类的你要提取原来的interrupt-level使用玩乐在设定会去,我的猜想是这是全局的系统资源很昂贵的。不过我记 得,在free编译情况下编译器会帮你检查中断水平的?
整理出了一大队尘封的记忆,还有一堆的可乐罐要清理,我常常想加拿大的罪犯和中国的最大不同也许在于他们被警察追
捕的时候会考虑红灯要停车,或者处理尸体的时候是否要考虑可回收的部分。路过PA看到对面橱窗里的大概是律师事务所
的雕像,那是代表法律的希腊神话里的人物吧?一手拿剑一手拿天平,所谓公平与正义,这个大概是人人都耳熟能详的,
不过我以前没有注意到一个细节就是这个执法者带着眼罩,所以它是瞎的,所谓justice is blind。为什么要这样?在中
国推崇的是如包青天一样的明察秋毫,像狄人杰一样的断狱如神,为什么西方人的观念里面法律的执行这需要是盲人呢?
其实道理很简单,只有盲人才能不受周遭情形的干扰,才能客观公允,任何执法者如果被人情所困扰必定不能遵循天平的
倾斜来引导宝剑的走向。为什么这么简单的道理东方人不愿意去遵循,起码去希望?我不知道,很多时候中国人会把它归
咎于所谓文化差异,以及所谓的历史人文的原因,我现在觉得那都是bullshit,法制与秩序是放之四海而皆准的不以人文
差异而转移的,所谓的秩序都是是统治者与被统治者能够达成一定妥协的秩序,差别旨在妥协平衡点的不同,也许东方统
治者特别的凶残以至于这个平衡点完全的偏离了正常的平衡点,也许是东方的被统治者过于软弱与愚昧以至于无法争取到
起码的平衡点?我觉得一百年前鲁迅所最痛恨的是所谓民智不开,以至于他气愤到认为与其医治不开化的肉体让其默默的
死去不如给他们一些人血馒头做成的“良药”早些灭亡,今天情形不见的好到哪里,很多人认了字摆脱了文盲的束缚有开始
受到思想封锁的束缚,他们只能接受统治者认为“适宜”咨询,他们只能思考统治者允许的课题,这就是所谓的文化的差异
,这就是所谓的社会的差异。

一个出其不意的电话仿佛是打开了一扇尘封的大门,呈现了一些遥远的画面,已经很多年没有做恶梦了,现在想起以前噩梦连连的日子真是不堪回首,从内心深处我 知道我绝对不希望看到那些让我夜不能寐的生活,现在才是我一生梦想的生活。这一点是R永远也不可能理解的,当初我听说M说我是不是有一点点心理不平衡,所 以才这样,也许这有一点点言过其实,不平衡根本谈不上,只是觉得道不同不相与谋,没有什么共同语言反而没意思。有很多时候我也心里觉得抱歉,近在咫尺的朋 友我连电话都懒得打一个,可是,我实在是觉得无话可说,这就是生活。


七月二十九日 蒙特利尔越来越像热带了,白天骄阳烈日,下午阴云密布瓢泼大雨。

漏夜难眠,大概是我对于咖啡过敏吧下午困的一直想睡觉,地下室的宝地又不能去偷睡,只好喝了一大杯咖啡,下班的时
候饥肠辘辘全身颤抖,路上遇到瓢泼大雨,为躲雨去“金好”吃了一碗“泰河粉”,那里的waitress我始终觉得在那里见过就
是想不起来,问她也没结果。
睡不着就干脆起来整理线路,说是蜘蛛网一点都不夸张,光是需要电源的电器目前看得见大概有14个,加上配电般不够场
彼此串接,在加上网络线,kvm的鼠标键盘显示器cable地面上完全是一团乱麻,还要合理分配长短,浩大的工程。
今天使用virtualpc2007的时候,编译环境总是不对,只好问DC,原来是必须要“install&update addon”,我问他是怎么
知道的,他说他读document,还说他发现这是学校里面教的新技能,我无言以对。然后配置remote desktop terminal,
我按照以前的步骤添加everyone,去除login prompt等等结果还是运行有问题无法登陆,只好在问他,他改动了几个我认
为无关的地方结果可以了,但是,我自己在试着一个个重来却无法再现究竟哪一个起作用,也许权限这东西是一次通过一
直有效吧?总之,有些蹊跷。
我有一次聊天的时候说把产品卖给像尼日利亚这样的贫穷的第三世界国家根本没前途,DC的回答让我有些震惊,他说他的
生命中能够在创造的时间就剩下十年了,人过了六十岁以后精力下降会非常大,所以,他要在这最后有限的是年里做有意
义的事情,把internet送到很多人手里是一件有意义的事情。我不知道他是否在acting,这让我想起了在德军1944年圣诞
节前夕突出部战役的Patton,那时候美军第三军奉命解救被包围的空降101师,天气恶劣,士兵们疲劳不堪,缺吃少弹,
参谋们建议晚上休息明天再进攻,Patton怒火冲天咆哮着说那些英勇的空降兵等着救援现在要不停地进攻进攻,If we
are not vitorious, then let no one come back! 这种命令在美军事不可想象的,指挥官无法命令自己的士兵去自杀,
但是命令就是命令,事后一个贴身的参谋悄悄地对Patton说,It is very difficult to know when you are acting。
Patton回答说,It is not important for them to know. It is only important for me to know。的确,重要的不是
别人是否知道自己什么时候是认真的,重要的是自己知道什么是重要的,而自己是mean it。究竟什么是重要的,我是否
知道?

每次安装vc6第一步就是更新msjava,其中有一个问题就是和sunjava/msjava有关联的,总之,在微软与sun打官司以前
msjava被普遍使用,后来不能再用了,可是很多老的project难以改动,就成为两者不兼容的牺牲品了。另一个典型问题就是enterprise- tool里面visual-analyzer出错的问题,msdn里面有明确的步骤就实现不要安装,县增加用户再装,不过我好像没有搞太明白是哪一个用 户,总之我从来没有用过,也懒得管了。


八月一日 蒙特利尔越来越像热带了,白天骄阳烈日,下午阴云密布瓢泼大雨。

我觉得我是用这么长时间的vc6居然不知道两个基本功能实属可笑可悲,一个是调试的时候setnextstatement,一个是调试的时候显示unicode,这个是每天都要用到的功能呀。google了一下,显示unicode至少有三种办法,摘抄如下:

1。 Append to the variable name 'su' formatting symbol in Watch/QuickWatch window.
2。 Modify autoexp.dat file which is located in the same folder with msdev.exe.
See the comments in autoexp.dat and Symbols for Watch Variables topic in MSDN
3。 Last but not the least, go to Tools/Options/Debug and check 'Display Unicode strings'.

我始终很怀疑DC的所谓usb传输要自己实现buffered-io,因为这应当实在usbd.sys之类的io控制层实现了,这是他的老毛病,喜欢层峦 叠加,把一件简单的事情搞得非常的复杂,今天的软件开发早已不是二十年前的原始公社时期,现如今流行的是什么?据说写driver的都活不下去了改行做应 用软件了,原因是什么?现在的开发太容易了,很多小孩子根本不需要任何的基础知识照猫画虎就算作开发了,那么原来那些程序员岂不是要失业了?
我的计划落空了,我原本希望让dc尝试各种方式失败我然后开始我的方法(实际上我还没想到我的方法,只是假设。),结果早上他来的时候专门给我演示他解决了他的bug,这实在是有些让人气霉。
我的想法也许也对也许也不对,正像我的一些想法一样,dc把它的buffered-tranfer移到了应用软件层上了,这样减少了干扰。他的想法是对 的,否则debug是在很困难,同时,下一步也是对的,就是queued-io-request,不过这个应该是kmdf帮你做了,你只需要简单的放进队 列就行了,而且这个queue是安全的QUEUE,现在我需要了解一些CLEANUP的工作。DC给我炫耀他的eventlog,这个局他解释是wdm里 面没有直接帮你做的,我表示怀疑,因为这实在太不可思议了,要么是他不太熟悉driver的开发,要么开发wdm的人都是死脑筋,当然前者的可能性是绝对 的,不过他讲道了一个终端水平的事情还是值得留心的,他是着msdn给我说iowriteerrorevent之类的api的终端水平不能超过apc,所 以他始终都要检查,因为谁知道你的eventlog函数的调用是不是在一个高中断水平的函数中呢?这当然是个好事情,他说的也有一点点道理,在 driver中尼根本没有什么文件系统,因为你不是usermode,当然也没有什么service一说,logservice你看不见的,这个大概对 巴?我真希望早点动手证实,可是万恶的raja有让我重新做那些无用的report,这个smart-ass总是自以为是,他有着典型的 businessmen的那种aggressive,stubbon,impatient,sharp,mean,smart,quick- response,ruthless的特征,这个是劳动人民永远学不来也非常佩服的与鄙视的,其实,dc经常夜敷衍bullshit他,但是因为这个人也 是engineer出身,你很难蒙过他,你要非常小心不要被他发现。我估计连marian这样的人都很难蒙过他。嗨,我为什么整天围ceo操心呢,我自己 的五斗米为什么不多操心一下呢?

这个月的计划完成的很不好,到现在我还在测试spider,并不知道是否是内存泄露或者是parser的错误,数据库的设置已
经改了还多次了,已经第二次删除数据重来了,我要记下注意不要把其他的protocol纳入,比如mailto之类的,这个因该
在crackurl里面发现那个theme吧?要做的东西太多了,但是太懒了,整天都在计划着买hdtv,实在是没出息。现在初步
计划,在月中前完成spider,开始转入jpeg的探索中,顺便把png纳入,dc的那个ijg的改造和我的几乎一抹一样,不过我
的桔压缩不行,实在不行就拿它的吧,ijg的代码实在是难懂的很。


八月二日 蒙特利尔越来越像热带了,白天骄阳烈日,下午阴云密布瓢泼大雨。

美国主流媒体有时候会提起anti-intelligence的问题,具体是指什么我也不清楚,总之我觉得raja的idea就是这样的例
子,你要传送尽量少的数据,那么你就需要做成一个非常大的所谓“字典”,因为字典压缩是最最普通的办法,也是最最根
本的办法,最终你干脆就在回到传送ascii码不就行了吗?为什么要传送图像?真是岂有此理?使用图像唯一的原因是因
为你不能控制browser的解析引擎,而要达到feedondemand你需要使用ie解析后的结果的影像,这是一个不同寻常的做法
,能够生存的空间很小,因为,DC使用了一些dirtytrick运用256色pallette来增大压缩率,我不知到raja是真的不懂还是
装作不懂,也许是真的对于计算机一窍不通,这是dc说的,学工程的人并非能够学明白计算机科学,学计算机的也未必是
好的工程师,这中间的差别非常的大,并非仅仅是逻辑清晰,头脑敏捷就够了,这个需要长期的算法与计算机结构知识的
训练,这个市最核心的,但是,他完全没有概念。不过,a second thought,也许这正是这个smartasshole聪明的地方,
我猜想是不是依靠这个他采取所谓的政府骗取基金?非常有可能是吹牛,有什么20million的技术,都是骗人的,因为在
我身上连三百块钱的电脑都舍不得投资。(当然现在DC把从前不用的服务器拿给我做试验,让我感觉好多了。)

今天总算发现了一个严重的bug,那就是资源释放的问题,通常我的函数都要做到函数内释放资源,如果资源必须传出那么caller需要释放,同时函数的返 回值true/false表明是否资源传递成功,这原本是一个很清晰明确的协议,可是,我后来急急忙忙该代码的时候增添了一些其他的意思,结果 true/false不仅仅代表资源成功生成还代表query是否正确产生,这是一个非常大的教训,绝对要把所有的函数分成两类, critical/non-critical,前者代表有资源传出需要释放的函数。那个错误的mysql信息是:out of sync, you cannot run this commands now,这个通常是mysql_res没有释放就执行下一个query。 早晨起来随着黑豹的节奏运动,心中有总有些惆怅,想想看在每天吃burger king德州为至少有几十个软件公司,里面大大小小的程序员总有几千人,我究竟在什么位置上,看来是很低的位置吧。


八月三日 蒙特利尔越来越像热带了,白天骄阳烈日,下午阴云密布瓢泼大雨。

美国人的米尼机枪可能是常规轻武器中最可怕的之一吧,当时millitary-channel介绍生产工厂的时候,老板和员工都是
死活不露脸的,因为这应该是非常德有技术含量的武器制造厂,他超高速的射速以及决不卡壳的技术简直是步兵的噩梦,
最给人深刻印象的镜头就是在直升机上的一条火龙般的弹幕划过整个沙漠,这就是美军的实力的一个缩影。

现代中国真的是魑魅魍魉横行不已的世界,话说一个小偷窃得了两个局长大人的贵宾卡在几家酒店里消费模仿局长大人的签名白吃白喝白拿了两三万块钱的烟酒,结 果被酒店警惕性很高的工作人员机智巧妙的识破,这个万恶的小偷落入所谓的法网,挽救了国家财产。首先,在中国没有人回去问一个为什么,那就是这种贵宾卡是 谁的钱,单位的小金库,集团消费,大家司空见惯,习以为常,那么所谓的国际财产是归谁使用归谁拥有?人民的公仆是替主人花钱的奴仆,作为主人的人民根本不 需要天天费心思去操心这些吃喝的俗事,专心每天管好自家的柴米油盐就好了,那些不属于国家财产,公仆不需要操心,所以,排骨据说19块钱一斤哪纯粹是个人 的爱好,领导同志天天吃八九百块钱的鱼池龙虾那都是工作需要迫不得已,作为普通百姓不在其位不谋其政在肚子里面嫉妒羡慕是不应当的,这就是所谓的社会主 义,所谓的和谐社会,所谓的三个代表,不出五年,共产党就会像前苏联一样,连自己的几千万所谓党内成员也不能代表了,就不要说别的了,因为,一个团体内部 都得不到认同的结果是众所周知的。
这就是现代中国的成语解释:窃珠者寇,窃国者侯,那了两三万块钱所谓不义之财的小偷成了阶下囚,挥霍国库千百万的干部还是堂而皇之的座上宾。


八月五日 蒙特利尔越来越像热带了,白天骄阳烈日,下午阴云密布瓢泼大雨。

Albert赠诗一首,我也勉强附和一下。王林森骑自行车环游美国胜利归来了。


八月十二日 蒙特利尔越来越像热带了,白天骄阳烈日,下午阴云密布瓢泼大雨

折腾了一个晚上终于明白如何使用wininet上传文件了。


八月十四日 蒙特利尔越来越像热带了,白天骄阳烈日,下午阴云密布瓢泼大雨

DC最近给了我一些稀奇古怪的任务,这个让人感到很兴奋的。他要我把一个目录下的文件按照日期的新旧排序然后依次山
出直到总的文件大小刚毫不超过256k,这个看起来的确是简单,我给他说一个小时吧,的确粗粗的实现的确如此。不过你
要知道findfirstfile是不能依照你的想法排序的,你要自己把findfiledata全读出来自己排序在依次删除,DC不信,哈
哈,我当然已开始也不适很相信自己的记忆里,因为我原来就专门查过这个,msdn上说nt和98之类的还不大一样,一个是
按名字,一个是按照实际存储顺序。总之,windows很傻的,没有这个功能,好像linux也没有,当年本科一年级的作业就
是干这个,所以是一件很简单的工作。昨天他让我把两个驱动整合起来做一个联合的驱动安装程序,因为usb的安装经常
要重起电脑,导致用户不明白要怎样安装后来的printer的驱动,所以,要我做一个先运行usb驱动安装,然后再把自己写
入注册表重起电脑后首次运行,有个小细节就是runonce只能是currentuser才行,localmachine不行的。其次,怎样指导
另一个进程要求重起电脑呢?我已开始不想去改任何的代码,直接去监听充起电脑的wm_queryexit之类的message,这个
市exitwindowex发出的,通知所有的window,不过,dc的看法有道理,这个消息返回的快还是我waitforsingleobject来
的快,这个很难说吧,为了可靠还是该usb安装程序的代码返回值来的可靠。同时,他的那个gui的安装程序也挺有意思的
,使propertysheetex的mfc的一个类,很合适的,对于我这个ui盲来说很新鲜,玩了半天基本上copy-paste才作了一个
wizard,明天再改吧。下午angie被辞退了,哈哈,这个公司实在是糟糕。等我熬到下个月就半年,那个时候再fire我就
可以领救济了,不过看样子不容易吧,看样子除非我继续面对面地和那个smartasshole-raja对着来。昨晚上发现一个有
趣的问题就是,createcompatiblebitmap是否有限制,一个dude说那个内存是显卡的内存,有些道理。另一个说职能不超
过200m左右,也有道理。反正有限制的。

中途岛之战日本舰队指挥官为什么会犯错误?实际上是对于既定战略的执行不够坚决,原本山本五十六供给中途岛的战略目的就是寻找一个美国太平洋舰队不得不救 的要害,所谓围点打援,围点是虚打援才是目的,但是为什么南云为什么要让舰载机陆地攻击?第一,使作战与相识美国人事先不知道是随后增援,第二当然有某种 侥幸心理,认为美国舰队不大会在这一带,第三还是日本人的占领土地的战略占上风,殊不知山本苦心经营的就是与美国太平洋舰队尽早决战以便在美国庞大的军事 工业启动前逼和美国。可惜,这个战略思想始终没有被大多数日本高级将领领会。轻敌者常败。


八月十七日 天起很好去跑了跑步。

Frantic非常的动人心魄,没有想到一个并不起眼的简单的故事情节却能做出如此的悬念与激情。年轻的女主角deadly atrractive如同海洛因一般致命,同时也是那样的短暂如同流星,一切都如同我想象中的巴黎一样充满了莫名的吸引力,exortic的音乐舞蹈情 调,正如歌词立场的那样,一只小鸟从凶残的鹰嘴边偷走了他的猎物,然后想和猛禽作交易,然而这个危险的游戏却要了她年轻的生命。在生命的最后时刻,她把她 用生命代价换来的猎物放在哈里森伏特的口袋里是为了什么,我不明白,也不需要明白。deadly as cocaine. Emmanuelle Seigner
我想最好的办法我已经尝试过了,就是把gb2312转成unicode来处理,这个只是解决了我的html-parser的一部分问题,现在我需要解决一些老的语法的错误,我想我的错误应该是双引号和单引号的一些错误,然后导致一系列的错误。
让我把这个星期的记忆整理一下。
1。蓝牙实际上从应用程序的角度看如同com口,这是我听来的,现在我使用的是一个叫做rocket-fish的usb接口的蓝牙发射器。
2。重启计算机运行程序不能写在hk_local_machine,必须在current_user。


八月十九日

天气很好。

走投无路看来只能使用 CrtCheckMemory.

问:为什么退赛?受伤了吗?我因为抵制奥运不怎么看比赛。

答:是啊,据说跟健受伤,预赛没跑就退出了。全场观众哗然,那种“啊”的声音非常大,俺终于
明白了什么叫哗然了。呵呵。不跑就不跑呗,干吗不依不饶的。运动就是一个玩儿,可惜啊,
国家花大把银子养运动员,他们很苦,出头日就是得金牌,所以,运动不再是一种乐趣了。所以,
我们也看不到最原始最质朴的奥林匹亚精神了。而中国的老百姓就指望着得金牌,让人家高看自己,
证明一下自己崛起了。每每看到什么‘大国崛起’的字眼,我就觉得特恶心。我们的百姓很傻B.

再答:这种暴民的心态很典型,说是暴命并非凶残,而是愚蠢,就是mob,看过gladiator吗?那个刺杀了凯撒夺取罗马皇帝的包军事怎样对付暴民的? 修建大斗兽场让暴民们一年有两百多天都去看血腥的斗兽表演,于是就没有人起来反对罗马皇帝的暴政了,这就是今天温胡政权的策略,什么大国崛起,不过是关起 门来说给自己听的,大国的确对的,自古以来中国的人口就从来都是世界上数一数二的,自然是大国,崛起?还是崛起臀部让别人看自己的红屁股?

想象看当时罗马的参议员们怎么想?所谓民意有时候也是可以被当权者左右的。这就是暴民政治(mob politics)

 今天,DC在GDI方面大现了一下身手。
1。他让我创建一个背景给安装程序,结果我就直接创建了一个window, 用bitmap全屏来画这个window,这样挺好,但是,当我的程序创建另一个安装程序的时候, 我的先前的wizard窗口就躲在了背景窗口后面千呼万唤不出来了,我试验所有的方法,enable,showwindow,update,setforefrontwindow等等都不行, 只好投降问DC,他说你想不想用一个简单的办法,我当然说是了,那么就把背景窗口作为父亲窗口好了。这的确是一个好办法, 但是我遇到一个具体的问题,就是wizard窗口的constructor使用一个cwnd*作为夫窗口的参数,可是我的背景是一个纯粹自己画的hwnd, 怎样转换呢? DC告诉我使用cwnd的attach,我当时没有转过神来, 因为我还在像有没有constructor使用hwnd的,就机械的使用cwnd的attach然后自然就过了一会儿crash。我还一直莫不找头脑,其实,现在回想起来, 这是一个简单的问题,只不过DC给我解释的时候,我抓不到重点,实际上我们仅仅需要船一个指针就可以,但是, 没有合适的constructor来创建一个cwnd的object所以就用一个临时的变量来attach,用完之后, 自然应该detach,否则消灭对象就出错了。
2。另一个问题是当我的程序创建了另一个程序窗口运行的时候,那个程序刷新背景结果我的背景窗口没有重画变成了空白, 我当时认为没有办法解决,结果DC很惊讶我没有使用beginpaint,我说我基本上不用这个, 因为我仅仅是用stretchblt不干什么。结果,还是他赢了,我并不明白为什么,获得hdc的方法有两种, 一个是直接的getdc,或者getwindowdc,(这两个仅仅是坐标元点的不同吧,)而另一个是begainpaint获得的hdc, 这个方法可能有什么玄机解决了重画背景的问题。
3。早上还有一个类似于createcompatiblebitmap的极限的问题,我使用loadbitmap从资源文件里面load位图, 结果失败,dc说这是为了兼容16位windows,只有大概64k大小吧?使用文件可以解决,结果loadimage从文件load还是失败,dc说应该是dpi太大, 或者width和32位整数对齐的问题,不过这一次大概是我对, 因为我认为这是windows使用显卡内存存储位图的内存限制。当然,dc对于他的图形编辑工具爱不释手不停地展示一些稀奇古怪的功能 ,应该说其中很多功能做的还是挺好的,应该是使用gdi行家值得学习的例子

现在我有时候也能够体会DC的一些心情,比如他非常非常的小心内存溢出的问题,有时候简直是到了极端,比如,函数里面开一个buffer存字串,比如路径 之类的,他非要我分配max_path的好几倍,一开始我常常不以为然,后来我自己吃了苦头才开始听他的,他的故事是曾经为了一个内存溢出的找了几个月, 我想着根本不夸张,因为我差不多找了一个月多了,也许今天晚上是我的lucky day,被我找到了。我的sql query德buffer当初设想2k应该是够了,现在看来太幼稚了,因为html的url合法的就有2k之多,如果再加上复杂的sql语法,同时,要把 unicode转成安全ansi字串,可能又要加一倍还不止,这样算来分配8k也许才比较让我放心吧?


八月二十二日 天气很好。

昨天加班把我累死了最后结果不了了之,因为那个扫描笔的security功能的硬件firmware有问题,挺有意思的,密码是存在笔的内存里的。写了一个小工具生成一些简单的pattern写了一个小工据统计颜色。终于算是有了一个稳定的接收gb2312编码的蜘蛛程序,当然好像下载的时候和机器当前的编码设置有关系,但是已经相当稳定了。httpclient7.0

上个星期化了很多时间试图和H合作写一个类似于监视的小程序这是片断。 还有一些半截子工程。myijgdll , mygraphic  filecookie


这是一个很有意思的问题,也是老故事了, 当你创建mfc的project之后,有可能发生这样的linking错误,

msvcrt.lib(crtexew.obj) : error LNK2001: unresolved external symbol _WinMain@16

这个问题的解决方法是:

Under the project settings, under the 'Link' tab, category 'output', set the 'Entry-point symbol' to 'wWinMainCRTStartup'.

昨天尝试把当前的窗口作为背景窗口的子窗口好像并不是很灵验,最后还是必须使用setForeGroundWindow来强行把子窗口放在前端,看来是某些事件没有处理的关系。
创建安装程序的一个小程序负责把安装程序拷贝到硬盘这样用户中途拿走硬盘也没有关系了,当然,这个小程序不想让用户看到,可是console无法不显示 windows,即便隐藏window也是他创建了以后的事情,不好,最后,还是DC想到了使用mfc的工程但是不创建任何window,这是个好办法, 我以前就碰到过,还研究半天为什么不显示,现在却想不到用途。

写了一个小工具删除相同文件。1。 我现在开始讨厌console的窗口了,所以就使用win32但是不创建资源,所以无窗口。2。找了一下开始使用系统的目录查找对话框,一开始被 google到的东西误导,以为是普通api,后来机器死了好几次,才发现是com没有初始化和释放资源,(不过也很可能是avg的关系,我把他关掉了, 我的蜘蛛是否也受它影响?)3。算法不一定很好,现排序,在使用md5的数字签名比对,后来想直接计算所有的文件的md5,不过我觉得对 win32_file_data进行qsort可能比对所有文件计算md5来的快。4。不支持多层目录,因为我要记住当前搜索的路径,没时间了,同时这样 的话。。。

一个简单的函数修复bmp的size错误,供自己使用。

well,我时常说你是愤青,其实是觉得你非常尖锐,思维很牟利。有时看你的博客,时常会冒出几句话,
说得非常深刻。我常常只是有感觉,但是总结不出是什么,你会、你也能说出来,很有逻辑性。佩服。
大体上我们的观点是一致的,对于你的大部分看法我是赞同的,只是我没你那么尖锐,这大概是因为我
是女人的缘故吧。BTW,你的website在中国被滤掉了,想要看到的话,大概只能去外交部上网才行,呵呵。
世浑浊而你又不能糊里糊涂的就这么过了,所以总会觉得有些痛苦或是孤独吧。

你说我有时候尖锐,我在想不全是我的思想,人是一个环境动物,没有一定的输入不会有相应的输出,其实很多的想法我也是受海外新闻网站的影响,环境的潜移默 化。比如美国为什么强大?很重要的原因是她的制度,从古到今盛极一时的大帝国比比皆是,但是大多没有一个制度延续他的强大,美国这个帝国不同,他又一种激 励机制,同时又有一种让所有的声音都能被听到的制度,这不是简单的所谓民主,那是一种主流意识,一种比文化更深层次的东西,正是这种让所有的声音都能被听 到的机制让我们望尘莫及。

中国的统治者正在做一个相反的事情,所谓“万马齐喑终可悲”,这样的环境注定所谓的“大国崛起”不过是崛起了自己的红屁股让世界看到他的丑陋。

你是抵制奥运会呢?还是抵制中国办奥运呢?
对于中国申办奥运这件事我也是反对的,但既成事实就享受吧。
第一次申办失败时很难过的,等要第二次要申办时我已渐渐“成熟”起来,跟你现在的观点一样,到现在也不赞成而且后奥运时代还会发生什么谁都不知道。
但有一个问题,这是个多元的社会,世界也永远不可能大同,在意识形态复杂的地球,是否只有所谓最文明最民主的国家才能依据经济力量自然举办奥运或在极端领域领先呢?
那些没有民主堡垒森严灾难深重的国家的进步如此缓慢,有时不得不依靠虚荣。其实汉城、悉尼等等西方奥运虽然相比花得少也一样面子工程,后续问题也很多,程度不同。
刚看完闭幕式,因为有伦敦8分钟演出,比较很明显,中国就是喜欢大场面从大及小,西方多是个体演绎由小及大,中国文化如此,你深恶痛绝也罢,如此不同的文明,参差不齐地进步着。
今天刚从北京回来,下次再去可能才会对现在见到的有更深的认识。

1。我觉得你的看法相当的有深度,值得我认真对待。不是简单的恭维,是事实的感受,也许很多人都是很有见解的,但是因为种种原因无法有机会,或者根本不屑于表达,以为无意义,或者不值得,只有我这等闲人才对此津津乐道。

2。对于既成事实,不得不办,我同意。西方的奥运也大都是面子工程,我也同意,体育即外交,现在往往是综合国力的体现。问题是花多大代价的作面子的问题, 我并不反对面子工程,但是要适可而止,我反对的是现在花的钱太多了,与国力不相称。这个面子太贵了。正像我举的例子一样,穷人可以花点小钱装点门面表示自 己不是真的赤贫,比如我刚买了一台42寸的液晶电视,但是现在让我花钱买一辆全新的奔驰我就是疯了。这中间的差别就是一个量变到质变的问题。

3。一个多元社会决不可能也不应该有同仇敌忾的声音,(这种机会几乎微乎其微),不同的声音并不是要去影响整个社会的进步,而是在做任何决策之前听取多种 意见,所谓兼听则明。为什么在这种大事决策前没有民意的征询,你也许最终采用专家的决策,但至少可以让所谓的少数专家也听到多种意见的表达。这就是民主的 本质。
4。昨天晚上听加拿大议会的一个委员会辩论,议题你肯定想不到,是关于政府是否应当向对待普通电影一样补贴色情电影,这个议题荒诞吗?可是你仔细想一想, 听一听,就不觉得无聊了,为什么?第一,色情电影本来就是一个大产业,每年有二十几亿的产值,关系到很多人的生计,第二,很多公民是色情电影的观众,他们 观看是否就要比那些不看色情电影的观众多掏钱?同样反过来也是同样的问题,是否应当把那些不看色情电影的纳税人的钱拿来补贴色情电影?总之,不研究这些问 题都不会很清楚。我的意思是,很多社会问题牵涉到很多社会成员的利益,本来就应该拿到台面上讨论,否则,这个社会永无宁日,决无和谐可言。

5。中国政府的很多提法经常是似是而非的,比如,奥运拉动经济,政府为扩大内需大兴土木,到底哪个社会阶层受益,各个阶层收益有多少?你在北京开奥运,全 国大部分城市就听个响,但是建设的钱却是所有省份的贡献,这是否公平?加拿大议会每年争吵不休的就是各个省从联邦返还的钱是多少的问题,议员们在其位谋其 政,为自己所代表的省争取最大利益,联邦和地方在议会斗争中取得一个合理的平衡,这就是和谐,一个动态的和谐。

基本上我是在platformsdk和原本的vc98环境下混合编译,这个非常的危险,很多时候也许有莫名其妙的问题,而且对于使用mfc静态联接就更有问题了,(使用动态库可能还好吧。)

完善了一下修理bmp的小工具


八月二十六日 天气很好。

完善了一下算法, 当只有两个文件的时候直接比较可能要比计算md5快的多,但是使用filemapping一定要小心,首先,我的原来的函数使用一个静态全局变量,非但多 线程不能用,就是两个嵌套的使用都不行,释放资源非常的容易出错。其次,当我的filemapping没有释放的时候是无法删除文件的,结果我又要让使用 者explicitly释放。很头疼。

DC让我写一个简单的工具函数,就是给网站发请求,所不同的是我要知道返回的结果,这个是使用httpqueryinfo,另外,httpopenurl有些问题,好像一定要使用ip地址,所以,我只好使用dns函数,但是win2k下的dns和winxp不一样,明天在实验这个问题吧。

半夜醒来觉得寒冷无比,只好加了床被子,魁北克的冬天已经来了,所谓“胡天八月即飞雪”。马云说冬天来了,任正非说冬天来了,郎贤平也说冬天来了,在北京 赤日严严的八月没有人相信,奥运的高烧正让所有人把高潮的兴奋大声喊出来,生怕参加开幕式的几十个国家领袖不相信中国人民正在享受经济高速增长的快感。是 吗?难道不是吗?大灾之年迎大云,什么天灾人祸不过等闲视之,的确,当通货膨胀加速度开进的时候,很多人都只是说那是投机的块钱造成的,但是为什么有快 钱?快钱从哪里来?温州的钱从哪里来的?为什么是现在?

归根结蒂还是郎贤平从前说的对,那都是从制造业里推出来的大量资本,资本的目光比搜寻死尸的秃鹫还灵,在所谓内需创造gdp增长的旗帜下被拉动的是什么产 业?是怎么拉动的?借钱把县政府大楼重新装修一下,或者干脆盖几个更大更新的就能拉动GDP,如果是这样的话,全世界都不会有贫困了,美国也不用选什么总 统了,大家都不用研究经济了。我难以相像在21世纪的社会里有这么多的低能政府却可以不许任何社会成员的质询!

中国经济的冬天已经来了,不管你是否和我一样抵制奥运,经济杠杆从来不以你的意识形态为转移,冬天是残酷的,魁北克的夏天不管有多美好,冬天是长着锋利牙 齿的猛兽,冬天里,制造业是要死人的。市场经济重新分配生产力要素是靠暴力残杀企业做到的,甚至在极端的情况下依靠摧毁国民财富做到的,这就是经济规律, 和大雪与地震一样的无情。

 中国这头经济大牛已经在滞胀得泥塘里挣扎了好几年了,这一两年来的汇率升值不过是制造业死亡前的哀鸣。也许执政者并非完全不知道问题的严重 性,只是对策的选择,把大量的积累财富投入到所谓的公共建设期望能够改善迟早到来的制造业的衰退,问题是投资的效率,私人企业绝对不可能向政府官员一样的 把资金投入到完全无助于增长的面子工程上,因为花的钱不是自己的,升官之后自有下一任来扛着,更重要的是各级官员都暗熟钱不花出去是赚不回来的道理,借钱 投资100块钱倒有30块钱到了官员的口袋里,剩下五十块钱到了包工头口袋里,二十块钱贡献给了钢铁水泥之类的原本就不富裕的基本资源,真正能有多少回到 普通老百姓口袋里取决于官员和包工头的个人消费,比如到底是抱养四川妹还是东北姑?是到澳门赌场砸钱还是来拉斯韦加斯摆阔?这就是所谓的拉动经济。庶民百 姓最多在奥运开幕的时候听个响,或者闭幕式的时候过过眼瘾,回过神来讨论口袋问题居然异口同声德说,也不是不明白劳民伤财的道理,只不过这个钱不花也是让 官员们贪污掉了,这实在是让人哑口无言,一个社会到了这个地步居然安置若素那只有一个原因,就是没有人相信冬天的时候有狼来吃人了,仿佛祥林嫂的个人独 白,我但知道美国的经济危机到来的时候要有资本家跳楼,却没想到中国的所谓社会主义市场经济遭遇严冬的时候普通市民是要倾家荡产的。

中国的经济增长了快三十年,可能是要遇到一个转折点了,问题是一个十几亿人口的穷国挺过去要付出多少代价,社会的大动乱是否会发生,政局的大变革会有怎样 的形式来进行,危及必然导致变革,问题是什么养的变革?谁来主导?民族资产阶级是否已经有意识要开始参与主导的地位?GCD要在多大程度上做出让步?

一个简单的道理就像你的第一句话,冷了就起来加床被子。当严冬到来,经济崩盘或社会大乱,如果忽略掉政府自宫的情况,革命的力量自然爆发汇集,是英雄还是流氓谁来当主导都没关系。世界永远在变革中,不管是惨痛的革命还是缓慢被动的改变。还是那个关键,这样的 D 如果不能改变,一定是要推翻的,一定会被推翻的。


八月二十七日 天气很好。

完善了小工具发送httprequest,今天发现了我的一个隐藏很深的bug,就是有的bmp使用的是bitmapv5之类的形式,我如果使用gdi的getdibits会覆盖我的一部分内存。


八月二十九日 天气很好。

增加了两个index效果是惊人的,这之前我把mysql的1000字节的index资源都分配给了primarykey,后来增加的hostname没 有办法再增加index了,今天终于下决心改变,结果cpu从100%降到了不到50%,本来一个晚上我都在做思想斗争是否增加预算购买一台专门用于 spider的同步的数据库服务器,现在看来暂时不需要了。美国M1坦克在91年海湾战争期间对阵伊拉克的损失对比是4:2000以上,这个比以色列在 73年中东战争中一两辆英国centrion对阵叙利亚120辆坦克最终消灭60辆的战绩毫不逊色。我始终对于美国在海湾战争中美军的表现不甚了了,就其 原因是当时对于gcd高层的震动太大了,这个远远超越了人们对于纸老虎美帝国主义的想象,因此当时国内媒体对此避而不谈,想象看美英联军使用不到四百辆先 进坦克加上阿帕奇直升机消灭了将近四千辆伊拉克坦克,其中还有不少势必当时解放军先进的T72坦克,当时pla只有大约一万辆夺得T59老式坦克,假如美 军要消灭解放军的话。。。这就是世界的格局。


八月三十日 天气很好。

做了一个期待已久的改变,把我的http server改成了一个标准的html-file-server,我不知道怎样形容,反正web-server旧 址那个意思。主要原因当然是GCD封锁了我的言论自由,我只好再自己家里发一些噪音。服务器在家里总可以了吧。http: //nickhuang99.dynalias.com:1000/不错,就是端口为1000,我现在没有理由买新电脑,那台老旧的服务器早就超负荷 了。。。


八月三十一日 天气很好。

早上骑自行车,然后花了28块钱在运河上划了两个小时的kayak,非常得过瘾,富人们在运河上开游艇,穷人们在运河上划独木舟,相得益彰,充分体现了和谐社会的真谛。这是数据库的结构

我的新版html-server的cache有严重的问题,只好先不用了。


九月一日 天气很好。

据说这是mysql的bug,max-connection-number要设成250否则有很多1129的错误。


九月二日 天气很好。

美军乃是虎狼之师,每次看美军的新兵训练营节目我就感觉美军现在的纪律与训练都不是pla所能比拟的,不论是绝对服从得如同机器人一样的训练还是魔鬼似的体能训练都可以毫不夸张地说,美军现在一个旅的战斗力远远超过解放军一个集团军的实力。

把这个发送功能改成了dll.  DC像我炫耀了一下他的成就,再status-bar上嵌入了一个web-object,就是httpview之类的,我问他怎么做的,他就卖官司。


九月六日 天气很好。

研 究了半天只发现了一个小小的东西,就是baidu很奇怪,当你使用internetreadfile的时候,如果不给他准确的文件大小就返回失败,当然我 以前都是给一个足够大的buffer的大小,因此我一定要使用httpqueryinfo获取content-length,但是这个不是必需的,很多网 站都不care这个,今天在粗略看了一下baidu的网页,发现它确实是使用了脚本生成链接,这个要求浏览器本地运行,我的蜘蛛无能为力。除非我去 hook一个浏览器,这个现在还不是我能够做到了。上个月基本上没有完成计划,encoding问题算是解决了,我在数据库里面都使用标准的utf16, 但是整合工作基本上停止了,另外一个临时的计划断断续续两个星期也没有头绪,杂事太多了。昨天花了一天时间也没有写完缩放图片的一个函数,这个主要是因为 DC说不赞成使用windows-gdi因为mac机兼容很麻烦,他只在图形界面上作mac机的相对应的东西,api这一层太麻烦了,于是我要实现一个图 片缩放的函数,这是因为使用不同的dpi,在软件层实现高resolution的扫描图片,DC说最好不要使用浮点运算,因为太慢了,于是我干脆连乘法除 法都不使用,纯粹是用加减法,就是类似于图形处理中的anti-alias里面的所谓DDD算法,把浮点运算转为整数运算,本科读图形课的时候觉得很神 奇,现在看来其实平淡无奇,大概上过小学会数数的人都应该想得到,但是计算机的算法就是这样,你出生在上个世纪初就有很大的机会把你的名字刻在计算机算法 的书里面,现在呢,哈哈。。。不过,8bpp/24bpp之类的byte像素还好办一些,对于mono之类的bit图我好像还是写的不对,总之,磨洋工花 了一天时间也没有写完一个函数

期一上班再说吧

这 是一个long story.首先,我的电脑里面有一个什么xy...的蠕虫病毒,我当时觉得那个万一很无聊就烂得管它,他是一个使用atuorun.inf指向的广告木 马,我当然也想去手动删除他,不过他在每一个硬盘分区都有拷贝,彼此互相监视一旦删除就重新复制,并且正在运行的那个程序我就算知道也没办法删除,使用 movefile的api在重新启动后删除也不成功,最后就不了了之了。本来我和这个木马也相安无事,但时装了norton之后这个木马被删除了,我反倒 开始被折磨了,因为网络连接总是显示cable被拔起了,这当然是胡说八道,我换了网线,router段口,重启动router,删除驱动,使用 netsh重置winsock的catalog等等,重新启动,使用以往的ghost的winxp(现在看来这个蠕虫早早就在我家里了,那个最早的 ghost版本也有它的影子吧?)总之我能想到的办法都用尽了,连bios里面的王卡设置我都重置了一遍,就差直接拆电脑换王卡了,始终解决不了这个 network cable unplugged的毛病,最后无意中在使用winpe版启动下把各个硬盘分区里面的autorun.inf都删除(这个意志是我的headache)自 从norton删掉了木马之后我再也不能双击打开硬盘,反而要使用ie打开,这是在世ridiculous的事情,现在在回到winxp下就都没问题了。 原因很简单,正像google里面说的这个毛病往往是一些adware在被删除以后残留下的毛病导致网络始终被误判为unplugged。非常长的故事。


九月七日 天气很冷

把长久以来应该加入的水印加入到了server端。

无法安装运行程序有可能是windows-update有新的安装需要重新启动。使用bit操作符要非常小心加挂号,因为它的优先级非常的低。比如 widthInBytes = (width + 31) & (~31) /8;就是错的。

把 用于蜘蛛搜索同步的数据库和web图片服务器分离开来了,这是我一直想要做的,只是苦于没有新电脑,现在花了250元买了一台旧电脑终于完成了这个计划, 现在看来还是值得的,第一,我的新的42寸的LCD电视可以作为显示屏,第二,我原来的电视录像卡现在正好可以安装在这个媒体中心,第三,这个旧电脑居然 有一个无线网卡,又要了一根旧天线,省却了网线的折磨,这样我的旧router可以做其他用途。

于是,五台电脑有了各自的分 工,让人颇有妻妾成群的感觉。老大有着超级强悍的显卡,显村就有512m,在她年轻的时候也还算花枝招展,现在是主要的工作平台与游戏平台,掌管着我的所 有隐私与工作;老二是一台老旧的电脑,连升级内存都困难了,给了他一块新硬盘就作为web服务器,里面现在存放着将近70万张的美女图片;老三是一台刚买 的futureshop最便宜的hp笔记本,只因为所有的正版驱动都是vista,降级为xp之后显示眼色有些不太对劲,但是有两G的内存,速度颇快成为 下在蜘蛛的首选,常常有物质蜘蛛上窜下跳;老四就是刚刚入门的旧电脑,虽然是个二手,但是经过了别人的的调教倒也勤勤恳恳,现在承担了媒体中心与下载同步 服务器的角色,只要表现良好将来肯定要给她生机。老五实际上进门最早,陪伴我的时间也很长,我也一直都很钟爱这台hp的笔记本,常常回忆起在大雪纷飞的夜 晚陪伴我的日日夜夜,出外旅行的时候也总是带着她,始终不渝,可惜现在人老珠黄,奔三的性能实在太慢,现在基本上只能偶尔当所有的其他几台电脑忙不过来的 时候运行一两只蜘蛛,可惜她天性倔强最近发现她的locale设置有些问题总是出错,于是连养蜘蛛的角色都干不了了,只好被打入冷宫。


九月十一日 天气很冷

精 疲力尽的一天又一天,今天我再改进printer的驱动,要让新的model支持600dpi,其实,这些都早已实现了,我要做的只是怎样兼容以前的 model,就是让600dpi下打印机使用400dpi,就是skip-lines,这个和昨天的scanner升级400dpi到600dpi正好相 反,那个要增加lines,这种最烦人了,明明是400你要当作600,明明是600你要当作400,繁死了。其实还有另一个做法就是打印机的gpd文件 不变还是400dpi,我在内部把400dpi增加lines变成600dpi,但是。。。

我累死了,昨晚上胳膊疼了一晚上,只好半夜三更怕起来买pain-killer,早上去诊所,只前去医院的急诊,这时候才体会到了加拿大免费医疗保险背后的巨大问题,你作为一个穷人千万不要得病,实在不行,你就的大病,那种不知就差点要死的那种。
最后发现还是学校的诊所真好。

这 真是一个精疲力尽的一天,我要操作printer的filter-driver针对不同版本的firmware改变dpi,当然是有两种选择,一种是让 windows设定为高的dpi,比如600,这个是在gpd文件里面写死的,就是printpreference里面出现的内容,你不要再里面直接显示 真正的dpi,因为这个gpd文件不能动态的被spooler之类的loading,可能要重起电脑吧,所以才会治显示,low,normal, high,就是这个意思。我现在才明白所谓的400dpi/600dpi,在打印上字体大小并无区别,只不过增减打印行数,而计算这个挺麻烦的,幸好我不 需要考虑这个,又遇到这个600--〉400部使用浮点运算的地方,这个真好。问题时,你在kernel-mode-driver的时候debugger 是个大问题,要使用微软的一个特殊的debugger,但是我的系统设置有问题,不能用,只好用dc的电脑,结果出现了蓝屏死机,DC花了好大功夫看 dump文件,我已开始还以为他在追踪我有没有干什么坏事,后来想其实更主要的是他很担心他的usb-driver的问题,这个蓝屏死机并不是第一次了, 而且如果重起的时候不把usb拔掉还会在出现。
后来,我才发现一个简单的事实我忽略了,就是printer-driver安装程序是怎样把众多的 printer的资源文件,比如dll,gpd之类的大报安装的,原来我以为还是照样使用原来dc的一个所谓通用安装程序,这个东西吧别的执行文件当作资 源文件编译运行,再把资源拷贝到临时目录创建进程运行,然后后台监视,当时为了解决从一栋存储运行用户拿走光盘usb之类的,由在外面包装了一个通用拷贝 程序把这些东西统统县拷贝在运行,但是没一个背靠背的也有可能内部包好一个安装包,现在才发现那个安装包类似self-extract,使dc使用一个下 载的工具作的,奇巧的是printer的service的安装必须要要先启动spooler,否则就有错,这个真实出人意表。因为一半我总认为要先关闭那 个spooler,因为我更新driver的时候如果不管掉还没办法覆盖因为被使用。
其实一般的scanner并不复杂,因为后期图片处理大概很 简单的,一般就是色差,扫描速度偏差调整可能都是固定的,因为滚轮扫描速度是固定的吧,但是手持式的很复杂的,第一就是扫描速度校正,DC和jk争论的问 题就是在与滚轮校正是否把一部分line去掉了,后来又在scaling时候复制,结果两个人就在dc的看图工具上一个像素一个像苏德找,很有趣的。
我 自己的蜘蛛有一个重大的问题,就是发现html有一个所谓的base选项,这个作为以后所有uri的基准,我要处理这个很头疼,写html-parser 一直是我的头疼的问题。另一个就是我的multichartowidebyte是要知道当前的codepage的,这个在html开头有,所以,有归结为 写一个html选项搜索的问题了。这个我累得没时间去做,头疼,事情太多了,做不完。想象看,我当前这份工作那的钱币比那邦连进程怎么创建的都不清楚的小 孩子还低,又忙有累,有时候真是心里郁闷。


九月十二日 天气很冷 ,小雨

果 然如我估计得那样的确printer最后是机械故障,因为纸快用光了,滚轮速度不对,这个玩艺儿我觉得真实吃力不讨好的产品,缓解太多,软件硬件机械采购 生产销售,零零总总不知道有多少出错的机会,而买的人又没有几个,能赚钱才见怪。最后我饰演的时候把两个打印机都接上,结果出错因为打印端口只有一个 pstk,当然不行了,估计这个所谓的断口应该就是一个pipe名字吧?google了一下学习了两分钟的打印机并行口,还没看完就准备上诊所换药去了。 小伤口不治问题就达了。

晚上看了一部Hugh Grant主演的轻喜剧<music and lyric>非常的好看, 这就是好莱坞文化的另一面,在所谓的流行庸俗视听刺激之外的理性小资产阶级情调的适合都市贫民阶层精神需求的文化沙拉。其中的主题曲很好听,同时也是贯穿 全剧的灵魂与线索,男女主人公原本是为了一个商业投机展开合作,然后彼此在精神层面医治对方的创伤,也是我比较喜欢的歌舞剧,这大概是我这一类喜欢标榜自 己与众不同的唯一方式,那就是在批判使得享受主流大众庸俗文化的同时,功利性地排斥主流的高雅艺术转而特立独行与另类边缘艺术。(我最近学会了怎样堆砌词 藻,发现要成为现代文学巨匠首先要让别人不能理解,然后再找到个把有分量的批评家的吹捧后尽量做到让普通人都能理解,现在我还处在要尽量让别人不能理解的 阶段。)(可能是刚刚服用了抗生素的正常反应吧。)Anyway,主题曲歌 词写的很好,旋律也动人。(不过内心深处我倒是很欣赏那个性感女神的steamy&sticky的融合了印度禅宗的性感舞蹈,儿童不宜的那一 类。)不过,这部片子国内是看不成了,因为电影主人公开玩笑使得提了一句dalai lama,就是达赖喇嘛了,这对于共产党的信息监视系统是绝对不能放过的,有时候我觉得很悲凉,big brother is watching you 是半个多世纪就被人们普遍理解的一个典型的集权模式的统治特征,大概西方的知识分子在接受教育的第一步就是这一类的主题,但是在世界的另一半恰恰是这种明 灭人性的统治扼杀着成千上万的灵魂追求最基本的权利,就是the truth, nothing but truth,正像<matrix>里面所说的,真实的世界未必会为沉睡在虚幻世界的人所接受,因为truth有时候很丑陋,生活在 matrix里面的人相反很可能会看到听到他们想看到听到的,但是那中间的巨大的差别就是一个活生生的现实,一个不过是cctv1的面具。从那个虚幻世界 里醒来的人很多并不感到快乐,因为在那个世界里有可能你是一个如同cypher向要成为的somebody important,some kind of rich,而在现实的世界里你可能如我一样每天都吃4.93德burger king套餐,但是这是真实的生活,所谓真实就是说每个人都不过是一个普通劳动者,每个劳动者都是赚取劳动时间所交换来的维持生活的生活资料。在中国这个 号称工农是统治阶级的国家里所谓的人民公仆生活的如同中世纪的封建贵族,在借用了马克思的思想标签包装之后堂而皇之的把一个封建专制帝国的集权统治顺理成 章的延续到了二十一世纪,还有恬不知耻的御用文化打手鼓吹中国正处在历史上前所未有的理想制度时期,甚至是世界最好的制度,这些荒谬绝伦的论调比文革时期 更有过之而无不及,这就是在思想警察无处不在的EastAsia的响亮的三大口号笼罩下的回声:War is peace, Freedom is slavery, Ignorance is Strength.

我终于为我那台老旧的hp笔记本找到了她的用途:下载蜘蛛,因为上传要分析html她的locale设置可能有些问题总出错,但是下载却只要是太电脑就可以的,不管有多慢,这就是资源的合理利用。


九月十三日 天气很闷热

增加了一个小功能,就是直接上传文件,以前我的mysqltools是直接远程连接后台数据库,这个毕竟太危险了,不可以分发给普通用户,直接使用网页的上传界面当然也好可是没有办法大量批量上传这个版本服务器就支持了。不过还有很多细节没有解决,比如msdn说文件最好开头为r/n/因为这样符合header之后结尾为连续两个r/n/。同时文件名要怎样加入到header里面呢?累了。


九月十五日 天气很闷

我的版本有点混乱,这个才是正确的,水印和远程文件上传


九月十八日 天气很冷,很冷。

真 是一个混帐问题,不知道为什么之前那个人的代码能够运行,我现在才明白他的作用,他在资源编辑器中设定了bitmap给一个static,然后,让我迷惑 的是在代码中他又loadbitmap等等,然后deleteobject消灭了bitmap,我只前以为替换这个资源里面的bitmap就可以了,实际 上,他load这个bitmap唯一的目的是看看他的大小然后调整窗口的大小,当然需要消灭掉了。
结果,我依样画葫芦,以为setbitmap之 类的可以储存设定得bitmap,deleteobject不应该影响。实际上当然很困惑了。更加迷惑人的是我的粗心大意,setbitmap返回上一个 bitmap,对于一个空的static当然返回null了,但这不代表失败呀!我却困惑了很久。
结果两三件事情混在一起我就糊涂了。本来是一个很简单的东西,再vc里面bitmap都使用这个最简单得windows对象static来容纳的。

另 一件事情是dc的ui程序又编译成为dll,因为符合twain的应用程序都要使用scanner来扫描等等,结果我始终转不过弯来,不明白为什么我要变 异另一个twain的application,实际上所有的ui包括一系列的窗口,对话框都交叉使用在另一个工程里面编译成dll,当然再twain里面 是.ds的文件。不过后来遇到的一个bug,我还真长见识了,一个叫做fine-reader的anddy公司的软件大概运行的时候升成了别的什么进程, 然后调用DC的dll的时候,要么是传递了参数,要么是参数的unicode不对,反正crash了,原来DC的dialog里面接受drag& drop的时候有传递什么文件名作为参数,于是有了问题。
我的mysqltools有一些小毛病,主要是unicode的长文件名的问题,这个版本应该没有问题了

蒙 特利尔的冬天来了,这在很多人眼里是不可思议的,因为冬天的到来在我看来并不是一下雪为标志的,因为秋天几乎不存在,只要夏天结束了就算是冬天了。这个冬 天一定会很长很长,因为很多人在这几天已经在华尔街看到了冬天的影子,资本主义制度能够消灭经济危机吗?为什么这几十年来没有出现严重的经济危机?是因为 全球化提高了劳动生产率就自然抵消了经济危机的威胁?美国平白无故在伊拉克阿富汗耗费了几万亿美金对于经济毫无影响?美国政府最高层人士今晚聚集一起要做 出一个一揽子及决方案,据说要花费一万亿美金,刚听到新闻的时候有些吃惊,稍稍一项就觉得不奇怪了,刚刚倒闭的“雷曼兄弟”经营的债权规模有六千多亿,只 不过是美国的全部规模的13%,那么你可以估算出假如这些次贷危机债券有20%有问题那么就是一万亿美金,实际上肯定不止20%,你想问题严重到这个程度 绝对是不只20%的贷款出问题,据说这些的利润率相当的惊人,所以,大利酝酿大风险。回过头来看中国的问题,一万亿的外汇存底也许不会转眼成云烟,但是美 元本来就是一个圈套,你上了套就下不来了,向炮都没有地方,只能不断借钱给美国人填窟窿。

这个冬天有点儿凉,还会有点儿长。


九月十九日 天气很冷,很冷。

改了一早上才把一直以来应该做的作了一下,就是html-server的简化版,这个作为基准,因为没有任何cache,没有数据库,没有任何优化的东西,仅仅是一个多线成的webserver,在这个基础上重新来。(清理代码的时候才想起来以前的很多问题,比如屏幕输出的同步,当时好像费了很大劲才找到这个bug。)

整个下午作的都是一个很烦人的工作,那就是把一个旧的project移植过来,听上去简单, 可是你并不是简单的改个名字就玩了,DC固执到连一个临时变量(包括循环变量)都要命名的变态狂, 当然我现在也理解上了年纪的人不用这个班凡根本没办法写代码。于是更改一大队的资源文件真的是一个很好的学习机会, 以前遇到资源文件就头疼,现在强迫自己去比较才是最好的学习机会。
DC得编译模式也是一塌糊涂,因为如果你遵循pch的原则,你就把所有的头文件都写道stdafx.h里面去,按顺序编译, 问题是他的工具类苦又严重的问题,可能有循环引用的问题吧?我不是很确定反正他现在是一个混合的模式,非常的头疼,另外, 共享代码在多个project之间的问题,他也不是不对但是。。。总之,我搞了好几个小时, 因为她非要让我把工作路径改掉和他一抹一样,这当然是正确的,问题是他以前可能不是这样的。
关于路径名使用createprocess的时候最好文件名加上引号,这是msdn的忠告,因为长文件名总是一个祸患。
DC创建了多个project共享代码,比如那个twain使用的win-dll就是这样, 那么资源文件是否也可以共享呢?好像vc6不行吧,这就是头疼的,所以你要改两边。

九月二十日 天气很冷,很冷。

什 么是饮鸩止渴?布什政府正在做一个精彩的诠释,拿两万亿美金拯救美国的金融市场看上去非常不可思议,几乎是大多数所谓有理性的人都觉得不可思议,可是会过 头来看布什这个人其实也是很精明的一个领导人,他的精明就在于他的牛仔式的简单,打伊拉克难道不对吗?如果不把挑战美国权威的人全部彻底消灭,美国会在他 的经济跨掉以前就垮掉,美国每年几千亿美元的军费不是摆设,不打白不打,而且是由价钱才刚刚上涨世界就恐慌了,很多美国人就不再反对战争了。美国金融市场 的钱大部分都是世界各地的投资者的钱,不用白不用,所以,不是这个牛仔作风远比很多“读书人”来的聪明的多,“腐儒”最误国,简直百无一用,关在牛棚里养 牛都不行,老毛当年教训那些没用的知识分子并非全都错了。

二零零八年九月十九日将近半夜十二点的时候,我的数据库冲上了一百万,现在可以真正称得上“百万娇娃”库了。(当然最后为了冲刺有一点点滥竽充数,不以前弃而不用“非美女”图都压上了,甚至把当初删掉的“陈冠希”床照都加上了,哈哈。(不过,没看过的最好别看,还是有些太过隐私了。)
我 的电脑的声卡有些古怪,当然应该是soundmax的设置的问题,如果我把收听环境设定为5.1环绕音响我的麦克风就用不成了。当我设定为立体声耳机的时 候音箱又用不成了。我现在发现我的“网线被拔起的”问题也许不完全和病毒木马有关,也许可以这样解决,重新进入winpe,把ip地址释放/mac地址恢 复,同时我也把xp下的网卡重新安装了驱动,重新启动了router,总之,我觉得最大的可能是winpe锁定了一些东西,或者。。。

二十年前我曾经读过<animal farm><1984>, 在那个血雨腥风的日子里你一点一滴的体应着那个主义的暴政是如何不折不扣地按照Orwell的预言实践着他们的那个totalarianism的恐惧,二 十年后在这个阳光灿烂的日子里我从亚马逊订购了这两篇小说的合集,在沿着运河起了一圈自行车后,坐在阿基米德的灯塔旁重新读他的序言,依旧深刻地感受它对 灵魂的冲击。

在《动物庄园》里那个主义用一些美丽动人的口号把农民骗 进了合作社,于是在集体所有制的谎言下农民变成了一无所有的农奴阶层。在城市里,《1984》描述的是这个政党如何用精神控制的方法让知识分子生活在恐惧 与完全的屈服中。就在小说出版的同时(1949)一个大清帝国贴上了一个人民共和国的标签堂而皇之宣布成立了。


九月二十一日 天气很冷,很冷吗?

所 谓的cache-control在http协议里面并不复杂,你基本上可以很容易的控制它,我已开始以为使用“public”可以达到最大的cache, 实际上完全不是这个意义,private/public有别的含义吧?使用一下这个就可以达到最大限度的cache。(这么一行代码需要ajax的 100k的代码资源吗?我常常觉得java是一种小孩子的玩意,并不是我瞧不起java的强大,甚至我个人认为未来的语言就是只有“解释性”的语言,可 是,这种强大的工具很多时候被无知的小孩子拿在手里舞弄是十分危险的。)

ADD_KNOWN_HEADER(response, HttpHeaderCacheControl, "max-age=99999999");

在 《1984》的附录里有一个所谓“newspeak”的纲要,开宗明义就是说语言是思维的载体,通过控制语言你就直接掌握了对党员群众思想的控制, newspeak把很多单词的意思都清楚出去了,比如“自由”(free)在newspeak里面是不能和“言论“与”学术“联合使用的,因为现实世界里 根本不存在学术自由与言论自由。Jefferson的“独立宣言“在newspeak里根本找不到对等的翻译,最多只能用一个简单的词来代替 “crimethink”。

以下是独立宣言的开头:

We hold these truths to be self-evident, that all men are created equal, that they are endowed by their Createor with certain inalienable rights, that among these are life liberty, and the pursuit of happiness,. That to secure these rights, Governments are instituted among men, deriving their powers from the consent of the governed. That whenever any form of Government becomes destructive of those ends, it is the right of the People to alter or abolish it, and to instituite new Government...

如 果使用现在的oldspeak来翻译成中文就是:我们以为以下事实是显而易见的,就是每个人都生而平等,被其创造者赋予了不可剥夺的权力,这包括人身自由 以及追求幸福生活的权力。为保障这些权力,政府建立在人民中间,统治者的权力来源于被统治者的同意,一旦任何形式的政府成为这些原则的破坏者,那么人民有 权力改变或者废除这个政府并且建立新的政府。。。

这个作为所谓的“执政党”看来是“不可思议”,根本无法在任何一级的党的文件中使用或翻译,因此只能完全从newspeak中予以删除。或者简单称之为“反动言论”(crimethink)。

问题是所谓“显而易见”的原则一点的不明显:

1。每个人生而平等并非事实。在《动物庄园》说“一切动物都是平等的,但是有些动物更加的平等。”党员和普通群周的觉悟是不同的,在这个社会中的地位与重要性也是不同的。相应的每个人不可剥夺的权力势必也是不同的。

2。统治者的权力来源于国家机器,或者说按照newspeak来说就是“人民民主专政”,被统治者之所以被称之为被统治者就是因为他们应该服从手中掌握国家机器的统治者的意志,否则谁还要做统治者?当皇帝如果不能享受荣华富贵那么当初“革命斗争中”流血牺牲有为了什么?

3。 每个人都有人参自由与追求幸福生活的权力,但是如果人人都有不受限制的权力,作为统治者还怎样实施自己的意志,换句话说建设所谓的那个“什么”主义社会需 要某些社会成员做出牺牲,如果人人都拿这个什么个人权力来说事,还怎样建设国家?(当然,国家建成了为了什么或者说谁受益这个问题是不能公开讨论的,社会 财富在分配不需要普通人参与,因此与此相关的词语在“newspeak”里面都予以删除了。)

4。人民有权力改变甚至废除政府?那不是挑战国家机器或者说是人民民主专政的专政对象吗?所有敢于挑战政府权力的行为在newspeak里面都被称之为“黑恶势力”,所有参与者都可以分为“首恶分子”以及“被煽动的不明真相的普通群众”。

《music and lyric》是 这样一部美丽的电影,我实在无法抵御这样的诱惑只好再次破例在amazon上订购DVD,molody仿佛是人的外表,而当你想要真正了解一个人的时候你 才回去读lyrics,基本上很多平淡无奇的旋律后面隐藏着优美的歌词,同样地,很多优美的旋律配合这平庸不堪的歌词,melody和lyrics完美结 合的例子实在少而少之,这就是生活。way back into love.mp3, pop goes my heart.mp3dance with me tonight.mp3meaningless kiss.mp3


九月二十二日 天气很冷,很冷吗?

我已经忘记了我要干什么!一大堆的半截子工程,整天不知道要干什么。

DC 德工程没有办法共享资源文件,这是一个头疼的事情,除非你直接编辑dsp文件?而且一个很讨厌的问题是很多文件在工程文件里面实现对路径,如果你拷贝整个 workspace,那么workspace之外的文件路径就都不对了。我另外一个低级错误就是使用DC的第三方的打包文件的错误,这当然是很讨厌的事 情,大概是以前急着发行使用免费的第三方打包程序,打印机使用的叫做inno的delphi的工具,扫描仪使用的是叫做wse的vb编的工具,这个维护工 作真是麻烦。而且我使用的安装程序前前后后使用的这一类installer大概有四五个,我的头都大了。

天天看美国和加拿大的大选新闻给人耳目一新的感觉,加拿大的保守党Stephen Harper现任总理,气宇轩昂,说话有板有眼,让人有一种很放心的感觉,言说很有信服力,一下子就让我决定投票给保守党了。自由党的党魁Lion是个标准的Francophone,法语腔十足,不过他的演说很有激情,也让我觉得值得投票。NDP德Jack Layton让人觉得像个Ottawa的政治新闻记者,说话老是让人觉得他处在超然物外的感觉。绿党一看就是妇道人家当家,基本上是为了环境连吃饭都可以改素食的感觉。魁独党?好像都快小时了吧?

美 国的大选又不一样,两个候选人唇枪舌剑,其实也是很激烈的。这几天美联储要拿纳税人的歉疚华尔街的CEO们让CNN的主持人气不打一处来,公司破产了,那 帮ceo们还有几千万上亿的美金的补偿金,平常这些人的年薪至少上千万,为什么他们破产创下天大的灾难还要领着纳税人得救市的钱享受,同时,很多美国普通 人损失了他们的房子无家可归,这些人是否更加需要政府的救助?

我最大的感受是任何社会都起自身的一系列问题因为这个世界没有完美的人,当 然没有完美的社会,但是,民主社会与集权社会的最大区别在于社会问题以及重大决策可以被全体成员了解讨论各个阶层都可以发出自己的声音都可以有自己的代言 人参与决策,这是最佳的决策机制,也许在效率上比独裁者慢半拍,但是永远都不会如独裁者那样经常犯那样低级的错误。另一方面,民主机制能够让有能力的人脱 颖而出,而且可以创造一个尽可能公平的环境给每一个人。这就是民主社会的意义,决策尽可能的公开与公平的。

相比之下,所谓的三鹿牛奶事件难道不是因为举办奥运成为压倒一切的中心才拖延至今才曝光的吗?

鲍尔森要求国会批准他的救世计划,按照众议院的话就是三页纸的计划要求七千亿美金,平均一页纸两千多亿美金绝对的一字千金。

让我羡慕不已的不是美国的财富,而是美国政府有这么多的有识之士,有这么畅通的渠道在国家陷入危机的时候能够共商大计,更让人羡慕不已的是普通民众可以聆听社会精英在为自己的利益争辩,美国有这样优秀的制度毕竟永远屹立于世界领袖的巅峰。

我以为华尔街也不过是在和美国政府和国会三家一起玩“索哈”,就是showhand,华尔街吃定了政府要救市,政府吃定了国会要在解散前尽速决议,因为马上就要投票,这没有比这更好的时机了,国会也担心但让美国陷入大衰退的罪责,但是有担心陷入更深的泥潭。

美 国的国会参议员们言词非常的严厉,保尔森的前高盛的CEO的背景让人们多少有些猜疑。 问题是普通美国人并不是非常了解美国的金融体系,也不大了解问题的严重性,当然更加不能容忍华尔街的高官们在破产后还能领去巨额的花红奖金,或者称之为金 色降落伞逃之夭夭。假如美国国会真的死活不肯救世,美国的金融体系会垮台吗?CNN的主持人非常的激动直接就质问为什么保尔森之流的这么由衷敢于提出这么 荒诞不经的天大的计划?guts and courage.的确保尔森要么是惊慌失措六神无主要么就是胆大妄为吃定了美国的纳税人"on the hook".

DC问我知道不知道怎样编译64位的打印机驱动,我含糊了一句,是这样的,使用ntddk的编译连接通常我们直接使用ddk的build的命令,因 为这个makefile要你自己写好的,但是问题是我们通常会写一个32位的makefile,在重复写一个64位的makefile很无聊的,因此,在 这个命令下运行vc6的那个环境批处理命令(.bat),通常我们不想使用vc6的gui的时候可以使用这个批处理进行命令行编译,但是注意,这里DC实 际上又去命令行运行msdev.exe /USEENV后面这个SWITCH我原来就知道是使用当前的console的环境而不是去使用registery里面记录的全局的env变量,于是这样 我们可以在gui里面编译,不过,我这个所谓的printer的driver并不是真正的driver说白了不过是一个dll,被 printspooler调用而已,所以,使用这样的办法是可以的,至于真正的kernelmodedriver甚至usermodedriver都不行 的,因为那个makefile好想不通于普通的makefile,我的印象如此,比如dll不是任意地址loading而是定死地址的。今天,关于64位 vista的驱动又一个不同于32位xp的地方,就是所谓的getsystemwindowspath好像得到的是一个sysWOW64而不是 system32,所以设定都不太一样了。(这一点我也不是很确定是不是vista都这样。)

网络上说美国“两房”的最大的冤大头是中国,大概买了三千七百多亿美金的垃圾债券,我看了以后一点点都不吃惊,觉得挺正常的,像中国这样的腐败透顶 的政府做出这样的事情并没有什么奇怪的,当然国内的人民并不会轻易知道而已,交学费而已,与其被贪官污吏花天酒地还不如支援美国人民建设家园,至少还能够 增进中美两国人民的友谊,何乐不为?现在的中国政府至少比当年的清政府要好很多了,因为至少没有明目张胆的签订不平等条约,最多就是贪赃枉法,这个业不是 今天的共产党员发明的,自古如此。当然美国人民遇到这种事情直接就跟政府拼命了,中国的老百姓比较有大局观,就算政府要了人民的小命也不会和政府计较的, 别说这么多钱又不是某个劳动人民的钱,反正普通老百姓拿不到手,丢了就丢了,本来就没有得到的可能。就算没损市政府也不可能用在医疗教育等等普通人身上, 所以,没什么大不了的。


九月二十四日 天气很冷,很冷吗?

克林顿却时时一个很有智慧的政治家,在LarryKingLive的采访中说的话很中肯有很有分析,远比很多愤怒的CNN主持人来的有智慧,他说了大概四 五点。首先他指出超过半数的美国人都已经卷入了股票金融市场,所以这决不是所谓仅仅是华尔街的危机,所以,这是不得不作的事情,其次,当然他也认为计划的 细节太少,需要广泛的讨论听证。最后他说了一点就是这个救援计划不一定就是亏钱的,比如当年拯救墨西哥的行动后来都赚钱了。


九月二十五日 天气很冷,很冷吗?

To be or not to be?这是美国人民面临的难题,也是华盛顿的国会山上的law-maker的难题,这本来就是一个难题,如果有什么解决办法的话也不至于等到今天他爆发 了。CNN采访的克萨斯的牛仔,这些普通人说的很实在,这本来就是华尔街的钱贵们和政府玩的游戏,他就是要让你害怕,你越是怕他就越会玩这一套,反正他现 在不相信华盛顿的政治家说的话。普通人当然不会明白国家金融的体制,但是他们需要一个解释。普通人也许都会怀疑华尔街的脱身把戏,想象看就如同中国的股票 一样,庄家托市托到极高的行情原本以为普通小买家跟进,没想到突然之间普通美国人透支买房再也拿不出那么多钱了,这些把戏没办法收场,现在世界上唯一能够 跟进接庄的就剩下美国政府这个大凯子了,不过美国政府也不傻,在大选在即的今天,万一触怒人民共和党很可能很多年都不能翻身,何况美国的共和民主两党并不 是仅仅代表华尔街的金融家,还有各行各业都有不同的利益。
问题是这个难题绝非普通的难题,正如克林顿在回答LarryKing的这个发问的时候回答的,我们首先都需要谦逊(humble)一下明白没有人确定知道是否这么做是否对,是否有效。
麦盖恩有些反应过度,作秀的成份太多了,因为放弃竞选跑回华盛顿要主持大计只是为了证明它的论点就是奥巴马没有领导力,而他证明了他又这个担当。
他的那个副手培林女士有些搞笑,记者问她关于阿拉斯加和俄罗斯的关系的时候她说的话简直让人忍俊不禁,简直就是胸大无闹,这更加证明了她当年读大学转学了 n多家最后才毕业的真正原因,女子足球运动员,你知道我在concordia曾经和一个女子足球裁判在一个组里面做computer-graphic的 project的经历吗?如果不是那个engineering的小伙子非常的有组织能力,也作了非常excellent的job,我简直都要气疯了,女人 要是能够踢美国足球你就知道她们讲话时什么样子了。应该承认这个女人是很有能力的,但是我绝不相信一个在边境州,比如阿拉斯加,就会有什么国际外交经验。

Chris Rock的话非常的直接也非常的坑将有力,在这个破产成风的年代,一个人有12套房子和一个只有一套房子的人之间你会选择谁呢?只有一套房子的那个人一定会很小心他的房子,另一个人就算损失了六套房子还是能够睡好觉的,所以答案很简单,Larry King说他还真的没有想到这么简单原因。


九月二十六日 天气很冷,很冷吗?很冷

我个人觉得现在美国已经是骑虎难下,进退两难,7000亿美金的救市行动不论国会通过与否,经济衰退都会发生,因为,如果不注入资金,华尔街和政府玩得 showhand就算是破产了,揭开盖子你发现有更多的银行破产,然后是更多的其他行业的企业的破产,滚雪球似的企业危机最终会影响到各行各业与每个人。 如果,政府诸如7000亿美金,这也是大多数人所期待的那样,问题是着不解决本质问题,并不可能从根本上改变美国经济的致命创伤,那就是美国现在的过度透 支消费造成了财政贸易双赤字,经济规律是公平的,如果有人背离了价值规律一时得到了甜头如果始终没有回归,价值规律一定要站出来杀人偿命的,否则就不是自 然规律了,出来混迟早要还的,这个7000亿美金的强心剂不过是慢性毒药,首先,投机失败不需要破产偿债会鼓励更多的银行效仿结果美国消费经济会继续膨 胀,问题会越来越严重。第二,7000亿美金从哪里来?只能是印钞票,这个在保尔森伯南克的计划里很清楚就是提高政府举债上限,这个后果就是美元贬值,外 国投资者在孜孜手中美元资产缩水之后的唯一选择就是抛弃美元导致美元经济的破产,这个才是包儿森伯南克最担心的,因为失去了美元霸主地位美国经济会一蹶不 振彻底失去世界霸主的地位,仿佛当年向问天练吸星大法身上聚集了无数武林高手的内力,完全靠霸道的内力压制才维持着,一旦自己的控制力减弱这些体内的外家 内力就会离他而去,这些外家内力就是全世界的投资者,这时候就是美国的末日。第三,就在眼前的危机等于是给马上接手的下任总统留下一个烂摊子无法收拾,奥 巴马麦凯恩都不愿意接受,普通美国人心理上也不愿意接受,这毕竟不是一个小数目。所以,现在就好像重病的人服用由巨大副作用的毒药一样,不吃是死,吃了也 是死。

当然,现在谈论美国的衰落还为时太早,大国,起也兴,衰也形。

美国生病了全球经济都会发烧感冒,世界资本主义要陷入新的一轮大衰退。

尝试https总是不理解。现在DC给我的任务我比较感兴趣,就是使用iwebbrowser接口识别flash之类的对象,他想用jpeg来处理这些视 频,因为文字使用zip要比jpeg好的多,但是原本就是图片的话jpeg要比zip好的多。现在他使用的还是idispatch专用smart pointer转为idocument,不过这方面我几乎毫无经验,包括smart pointer都是只知道个大概,这个市比较让人embarrasing的,com一直是我想涉足的领域,原来的目标是从ie的dom入手可惜始终没有开 始。


九月二十九日 天气很冷,很冷吗?很冷

我个人关于使用wininet发送数据的小函数,DC问我有什么不好的地方,我当时没有意识到,只是觉得它过于挑剔以便显得他高我一筹。现在看来他的一些 想法还是很对的,因为我没有实现异步传输,这个必须要使用callback,就是internetsetstatuscallback函数设定你的 callback,要注意的是internetopen的时候要使用async的标志,同时,internetconnect要使用 keep_connection_alive的标志,(DC没有发现这个最后只好问我,我一开始就是不告诉他,因为有时候你告诉他,他还不耐烦,让他找一 找才解恨。)当然你要设定正确的hinternet的handle,因为wininet里面有好几个hinternet的handle,代表不同的 context,你的函数应该失败同时getlasterror()==997,就是io_pending。总之,你在 internetopenrequest和internetsendrequest都可以设定callback相对于不同的hinternet是不同的 callback。关于使用异步传输何时关闭handle的问题,我和DC简单讨论了一下一致认为,一定要一个timeout,同时,callback很 可能会用到handle相关的资源,所以一定要先是用internetsetstatuscallback设定为null在关闭,这个我间接证明了,我连 续设定两个callback,结果只用后一个被call了,回忆一下internetsetstatuscallback仅仅返回上一个 callback,并不是你想象的callback的array,仅仅只维护一个,给予这个原因有的sample才会自己设立一个callback的表记 录所有的callback以便一个个的call,不过这个只能是自己的callback因为internetsetstatuscallback自己没有 callback给你handle,哈哈扯远了。
关于internetsendrequest的额外的header的见解我也比较心服,我一开始觉得没有什么大勇,因为完全可以使用parameter做 到同样的效果,DC德argument很有道理,第一,安全因为parameter谁都看到得到都可以改,使用additional-header你可以 达到一些安全性,(食用https太麻烦了,我至今摸不着门)第二,parameter有2k的限制,而且很多时候要进行转换,比如空格,&%之 类的,很烦。总之,使用callback可以在不改变函数(比如已经写成library-dll的情况下)借口的情况下使用不同的callback灵活变 换。
当然,最主要的原因是DC决不会全盘接受我的代码,他总要想办法改写什么。哈哈。。。
今天玩了一会儿的智能指针,还不是很明白,ihtmlelement的接口有1,2,3的扩展,不知道怎么回事,最大的疑惑时idocument的 get_applet得到的是applet的icollection接口,但是我找不到applet究竟是什么接口,msdn里面看上去好像是html的 脚本里面的applet对象的方法吧?(我搞不明白)不过,我想我离我的目标很接近了,前方的道路很平坦的。

我有一个错误的观念,以为使用_stprintf(wbuffer, _T("%s"), astr);可以把ansi-str转为wstr,这是错的,只能一个字符字符的转换。

非常出乎我的意外,共和党差不多三分之二的众议员否决了7000亿美元的救市议案,结果华尔街继续以暴跌777点的来继续施压,我想着也许也是一种战略,逼迫国会坚定决心,因为议案被民主党修正后国会有权力抽回资金,所以,华尔街不满意?


九月三十日 天气很冷,很冷吗?不算冷

花了一个下午和半个早上在学习dom里面的各种接口,感觉现在学习ihtmlxxxxelement之类的com接口 要容易理解得多了,首先对于html的各种对象有基本的概念,其次,这时候很多com的基本概念在这里得到了充分的体现, 因为完全封装你只能通过接口访问,其次,很多对象实现了多个接口,于是我就在不断地摸索。比如,applet这个东西是什么一直是我的疑惑, 总在想象有没有一个ihtmlappletelement的接口,事实上当然是没有, 他就是ihtmlobjectelement,同时所有的东西都实现了ihtmlelement接口, 并且都是从idispatch继承而来,原因当然是为了vb之类的语言调用的关系吧。
那么,怎样使用这些接口是一个很陌生的问题。
1。从idocument下你可以找到所有的对象,比如,applet是一个applet的collection的这个collection当然也是一个ihtmlelementcollection的接口, 从这个借口你可以访问所有的applet,实际上,我的目的是找出所有的flash对象,flash就是applet。哈哈。。。似懂非懂, 反正这些脚本对象是可以播放的,他并没有实现ihtmlimgelement的接口, 不要错以为它是什么图形(只有我才会有这个错误的想法吧?)
2。每个对象都有着所有的offsetleft,offsettop,之类的属性,这个是嵌套的, 意思是你的父亲也有同样的属性,你的坐标都是相对于你的父亲的,于是你要一直找到根才是正确的, 同时每个父亲又有可能被别人遮住一部分,所以这就是DC所说得很复杂的一个计算每个对象坐标的函数。
3。使用智能指针,就是ccomptr<type>,同样要释放,这一点很出乎我的意料,我印象中他的引用计数是自动的, 当然释放的时候我又一秒钟的疑惑,就是直接把它当作指针来使用->release()出了错,真的, 我就迷惑了一秒钟然后想起来时只能指针重载了.release()的"."操作符。
4。使用queryinterface的时候,iid可以使用__uuidof(interface)来获取, 省得自己老市区拷贝那些guid的常数,这些当然都是最最基本的com操作,可是, 你要知道我真的事几乎没有怎么玩过com的,只有概念而已。能够在这么几个小时领会入门的东西我已经觉得挺不错了。
5。我找了一个下午实际上都在找接口里面画图的方法,因为我要把flash的位置标底出来,实在找不到, 一怒之下干脆直接用gdi获得dc直接画。这个实在是没有办法的事情。

十月一日 天气很冷,很冷吗?冷

早上发现了我一个疏忽的常识,文件名不能使用冒号:。在使用fgets的w版本时候, 函数会自己把输入当作多字节转为宽字节,比如multibytetowidechar一样, 这个是在你打开文件fopen使用text模式时候,所以,如果我已经存成了utf16一样的宽字节需要使用binary的 模式打开。这个是一个常识,不过我不知道而已,这种问题你不遇到你不会知道。
dc给我看了一个他认为很奇怪的事情,后来我们才发现mfc版本的chttpview不支持异步模式(aync),它直接就检查assert。这的确使good to know.
InternetCrackUrl的参数buffer的size不能太大,必须是2k多一点,超过了会出错。
InternetCanonicalizeUrl 好像是说明文当有问题,再browser-mode就是ICU_BROWSER_MODE模式下应该不转换whitespace,escape危险字符,可是好象实验正好相反。
 
 DC有些稀奇古怪的想法,比如wininet在每个调用函数都可以由callback, 于是他做了一个巨无霸的callback,在每个callback的时候的参数里面有一个函数名称( 或者说caller的地址,),于是,每个调用的callback都知道自己在什么样的context下,这个做法很特别, 普通我们的callback往往都是小函数作些很特别的事情,现在他的callback居然有机会在"回调"调用者, 这样做当然是死循环了,没有什么意义,只是好玩。同时他发现wininet会在调用的时候生成一个线程, 只不过这个thread不会消亡,我们所以猜想是threadpool一类的实现。

我和他争辩这样很危险, 并且举出来有些资源如文件不可以跨越dll使用,。这一点我又一次证实了,你再dll里面穿件一个FILE*的这个文件之真是不能传回来使用的,当然HANDLE是可以的。

DC最后发现很多问题,他的猜想是wininet可能异步的时候有些问题,不然为什么mfc的inet要有一个关于异步assert报错呢?


十月二日 天气很冷,很冷吗?冷

 Big Brother Is Watching You!  这个小小的project拖延的太久了,原因很多,一方面我懒(我就是懒,我能怎么办?),一方面我的手臂受伤了(擦破皮而已,这个理由还不够充分 马?),最主要的原因是html-server里面有很多问题,作为一个文件服务器我感觉问题很多,尤其有些安全性的问题我从来没有想过,还有就是效率, cache有很多问题。总之,这个仅仅是一个prototype,需要非常多非常多的改进。jpg图片质量不行,是否该城png?server界面怎样设 计始终是我的难题。客户端怎样隐藏,注册为service,或者是注射进dll,问题是我到底想要干什么?
美国副总统辩论我没有多大兴趣,看加拿大的五大政党领袖辩论才有去,harper总理当然是众矢之的,是其他反对党的攻击对象,这当然是正常现象,相反在 中国有类似的所谓五大政党,不过他们团结一致如同一个人,这才是不正常的,反对党根本和执政党如出一辙,为什么我说中国也有五大政党?中国的五星红旗的大 红星旁边的四颗小星星就是四个所谓反对党的象征。这五个党魁里面当然总理的涵养最好,因为反对党言词锋利攻击,他当然要镇定自若,不过评论员也说在昨天的 法语辩论中,harper有些过分超然,仿佛对于人民的民生问题无动于衷。
不过,如果略微了解加拿大经济状况的人就知道,这个位置也好坐也不好做,首先,加币升值太多了,比美元都贵,结果制造业职位大量,哈珀只能说失去的工作从 别的地区找回来了,绿党的女党魁算是一个比较将道理的人,她的评论比较中肯,制造业的高生产率的岗位换成了制造率较低的服务业岗位,这是对也不对。

不管怎样,我的感觉是这个地球上很多国家先进在于他们的领导人都是最激烈的竞争中脱颖而出的,这个地球村最后取决于人的能力的竞争,绝对不是什么靠人多力量打取胜的。


十月三日 天气很冷,很冷吗?非常的冷

我的《music&lyric》终于来了,使用平邮寄的,所以才这么的慢,不过我还是很满意的。在一次看结果又发现了很多的笑料,影片的结尾有很 多很好玩的花絮,就是在片尾曲的小注,比如,男女主角现在住在一起写歌总是要给那个tone-deaf的印度门卫先听,他们现在的家的植物都是塑料的。哈 哈,男主人公以前的乐队pop被主唱称为比“披头士”还要“大”,当然事后他解释说所谓“大”指的是他们pop有五个人比beatles来的多,在 colin这个大嘴巴挣了大笔的银子之后,主角阿里克斯却只能靠在游乐场表演糊口,这对于才华横溢的作曲家施多么可悲的生活,但是他却被在 Nabraska(听说过这个地方吗?听上去好像加拿大荒无人烟的北方诸省)举办的“拖拉机以及垃圾车大赛”评为最佳表演者,这个称号并不必大猩猩称赞雅 典娜性感来的更加让人怒不可遏了。阿里克斯后来在另一个性感明星Cora的婚礼上表演了他们的新歌曲,婚礼延续了九个小时,可是婚姻只维持了三个小时,哈 哈,这并不奇怪这对于声称两个月的关系就是奇迹的极度热衷于“圣雄甘迪”式的性高潮表演的流行歌手来说应该是很正常的。女主角夸奖男主角的时候说他说的真 好,尤其是这样一个穿这这样紧身的裤子的男人的嘴里说出来的,男主人公就说这样可以强迫血液流到脸上;女主人公用冰给受伤的男主人公冷敷脸的时候关切的文 是否好受一些,男主人公回答说如果她把冰块放在正确的一边的脸颊上会更好;心不在焉的女主人公总是大大咧咧,比如对这塑料花浇水,或者准备淹死盆花,男主 人公总是自觉地赶紧端走植物并且认真地告诉她说她可以接着开始杀死另一盆花了。电影里的小了无穷,最大的特点还是音乐非常的好听,表演也很出色,所有的歌 曲都是演员自己延长没有假唱的,当然我更加欣赏那个喜欢探索宗教的年轻女孩子的歌舞表演,这个社会向这么年轻性感的女孩这么想往宗教的快乐真不容易,有其 她能够领悟到达赖喇嘛似的性感实在难得。(我估计我写这些字又会被中国政府的过滤引擎视为禁忌了,哈哈,反正这部电影基本上没有办法用中文来翻译欣赏,中 国的年轻人不会感兴趣,老年人又看不懂,过于小资情调了。)

我的《music&lyric》终于来了,使用平邮寄的,所以才这么的慢,不过我还是很满意的。在一次看结果又发现了很多的笑料,影片的结尾有很 多很好玩的花絮,就是在片尾曲的小注,比如,男女主角现在住在一起写歌总是要给那个tone-deaf的印度门卫先听,他们现在的家的植物都是塑料的。哈 哈,男主人公以前的乐队pop被主唱称为比“披头士”还要“大”,当然事后他解释说所谓“大”指的是他们pop有五个人比beatles来的多,在 colin这个大嘴巴挣了大笔的银子之后,主角阿里克斯却只能靠在游乐场表演糊口,这对于才华横溢的作曲家施多么可悲的生活,但是他却被在 Nabraska(听说过这个地方吗?听上去好像加拿大荒无人烟的北方诸省)举办的“拖拉机以及垃圾车大赛”评为最佳表演者,这个称号并不必大猩猩称赞雅 典娜性感来的更加让人怒不可遏了。阿里克斯后来在另一个性感明星Cora的婚礼上表演了他们的新歌曲,婚礼延续了九个小时,可是婚姻只维持了三个小时,哈 哈,这并不奇怪这对于声称两个月的关系就是奇迹的极度热衷于“圣雄甘迪”式的性高潮表演的流行歌手来说应该是很正常的。女主角夸奖男主角的时候说他说的真 好,尤其是这样一个穿这这样紧身的裤子的男人的嘴里说出来的,男主人公就说这样可以强迫血液流到 心里;女主人公用冰给受伤的男主人公冷敷脸的时候关切的文是否好受一些,男主人公回答说如果她把冰块放在正确的一边的脸颊上会更好;心不在焉的女主人公总 是大大咧咧,比如对这塑料花浇水,或者准备淹死盆花,男主人公总是自觉地赶紧端走植物并且认真地告诉她说她可以接着开始杀死另一盆花了。电影里的小了无 穷,最大的特点还是音乐非常的好听,表演也很出色,所有的歌曲都是演员自己延长没有假唱的,当然我更加欣赏那个喜欢探索宗教的年轻女孩子的歌舞表演,这个 社会向这么年轻性感的女孩这么想往宗教的快乐真不容易,有其她能够领悟到达赖喇嘛似的性感实在难得。(我估计我写这些字又会被中国政府的过滤引擎视为禁忌 了,哈哈,反正这部电影基本上没有办法用中文来翻译欣赏,中国的年轻人不会感兴趣,老年人又看不懂,过于小资情调了。)

刚刚才明白那首插曲的名字的意思,pop  goes my heart,是这样的,I was going to lose my head, pop, goes my heart. 意思谁说看到漂亮煤烟的女子让自己头脑发疯的时候,突然心脏病发作了,我是反复看mtv才明白的。很平实的。

atlcom对于我来说还是很没头绪的,我觉得我要学习一下,因为我发现浏览器的控制非常的强大,这是未来以及现在的大方向。昨天,DC在玩 wininet的那几个函数,我明明已经写了非常完善好用的函数苦,他就是不用非要重起炉灶自己搞一套,我想这是程序员的通病,谁都不肯用别人的代码, 哼,结果不出我之所料,想在一两天内搞明白那一套还是有一定难度的,http协议虽然不算非常复杂但绝对不是什么连三天就能全明白的,何况wininet 把整个协议的大部分浓缩在十几个函数里面就更加的复杂了,其中很头疼的有几个方面,encoding这是谁都很头疼的,参数究竟是用什么样的 encoding很多时候取决于浏览器与操作系统的设定,所以你可以看到很多,比如baidu就是在参数里面把语言encoding都加上了。同步予异步 传输,我以为这一点不能么简单,我碰到不少的网站都会莫名其妙的拒绝我的蜘蛛的访问,我一直猜想是connection的option里面延时的设置,不 过没有试验过,同时为了多种用途,wininet的函数有些是重叠的,比如internetopenurl应该是等价与internetconnect+ internetopenrequest,这一点当然是我个人的感觉,而且DC的试验显示直接调用internetopenurl有时候不成功,这就是他 为什么死活都要尝试internetcanonicolizeurl的原因,他认为是空格与危险字符没有转为escape字符的原因,并且其中的flag 里面的browser-mode好像正好根msdn里面的说明相反,我实在是懒得深究,因为我在这里面也迷惑了好几个月了。总之,DC对于http协议知 之甚少,一直不明白http的header是怎么回事,我给他解释known-header和参数里面的additional-header完全是两码事 他还不耐烦,后来我吃午饭溜达了好久才回来,他低声地步抬头地对我说,I need your help。声音很小我都没怎么听清,当然这是因为它只剩下不到两个小时的时间了他只好会过头来把我的代码拆开来加到他的类里面去,不过我还是很佩服他这一 点,就是他把mfc的原码彻底拆开来玩了一遍,这才是程序员的本色,我还是不行。

女主人公有化腐朽为神奇的天分,随口一说就把一下这一俗不可耐的小节变得诗意盎然。这个是原来那个所谓edgy,hoppy的新潮流派词作者的版本。
Give it up, I am a bad hot witch. I look real good, but I am a nasty bitch. I can scream and claw and curdle your blood. But you'll die on your way back into love.

下面是女主人公在第一句基础上的发挥,我想着就是英语的诗词的韵味。
Give it up, I am a bad hot witch. But with some magic, I just might switch. Let's fly my broom to the stars above. And we'll charm our way back into love.

以下又是女主人公信口一说就出口成章:Figuring out you and me is like doing a love autopsy. They could operate all day long And never figure out what went wrong. Love autopsy. Love autopsy. Ah...Ah... What went wrong?
这其中的美是难以表达的,autopsy和operate丝丝入扣,却有别有风味,不落俗套,而影片的主题也正是两个恋人互相解剖彼此的爱情,就是 love autopsy,两个人的特点又正好像女主人公形容的那样如同music和lyric的相生相克,music好像外表,lyric确实内在的那个人,初次 相见彼此被melody吸引,但是当你要真正开始了解一个人的时候你才开始读他/她的lyric,这个过程就是一种love autopsy,在深入内心深处的时候矛盾不可避免,甚至你可以发现彼此都有某种潜在的自觉不自觉地功利因素,比如男女主人公在一起基本上除了偶然上床之 外都是很职业的互相对对方有些索取与付出,并没有很多的false expectation,这时候,冲突的爆发很可能是这种半职业关系的结束,能否back into love往往也在一念之间,男主人公趋向女主人公道歉发现她遥远赴Florida开辟新的生活,虽然内心深处也许还是想挽留,但话到嘴边却走了样,The thing is that I can't...也许女人期待着live without you.但实际变成了compose without you.就是说又回到了合作者的关系。这是事实,本来这个职业关系也是最稳固的,所谓 giving and taking.

这一句也是诗一样的美。

I got sunshine on a cloudy day. When it is cold outside, I got a month of May.


十月四日 天气很冷,很冷吗?非常的冷

这是一个非常非常小小的问题。我看到过DC的代码注释里面提到过这个但是没有真正领悟,就是使用winnt里面的一些函数必须要定义#define _WIN32_WINNT 0x0400或者更高,这个和windows version不同,否则你就总是编译不通过了,这实在是非常非常普通的问题,可是对于我来说耗费了我不少时间,最后还是google了才行,现在人编程 比从前容易多了,这才出现很多小孩子美学两天居然敢说他做了什么什么,这在以前是不可想象的,可是现在也许他就是download下来改一下别人的代码, 或者好一些看到很多的例子。但是学习过程不就是这样吗?怎么学有什么关系呢?我想我还是和很多年前看的一片关于c/c++程序员议论的人的想法一样,对于 c/c++程序员来说那些使用c#/java的人简直就是盗窃犯,因为c/c++没有三年几乎没办法说入门,没有五年很难说有什么功底,就算有十年八年的 磨砺也许还是如履薄冰吧?总之,我觉得我用了五六年,代码也写过一二十万行也还是只比入门强一点。可是,另一方面,使用java的人居然可以用上一两年敢 自称行家,这当然是让人很不平衡了,不过,我想这中间的差别人人心里都明白吧,制造汽车和驾驶汽车原本就不是一个范畴的问题,想到这里,我的心理总算有些 舒畅了。

你完全可以使用dialogbox创建自己的dialog,这个是一个常识,所谓的window,一个是资源文件,因为你不会愿意自己“画”窗口,所以使 用现成的资源编辑器创建,另一个就是消息循环,这个使用dialogbox的自带的消息处理函数省掉了很多默认的消息处理。这里面有几个常识, systemcommand是关于wm_systemmenu德,就是右上角的那个小叉,wm_command是所有的控件菜单等等,包括了按钮之类的。 system_destroy应该是postQuitmessage发出的。

 

十月五日 天气很冷,很冷吗?非常的冷

这是使用intel-ijl15.dll的版本,所以你会发现客户端很小。


十月六日 天气很冷,很冷吗?非常的冷

上一个个版本需要使用intel的ijl15.dll,所以我花了一两天改造我的ijg,同时为了避免编译问题,我使用静态库,这个要容易的多。Big Brother is Watching You!(有三个小project:staticijg(utility for mypeeker), mypeeker(client), bigbrother(server))


十月七日 天气很冷,很冷吗?非常的冷

Sheng他们要做一个debugging之类的tools,至少这是我一开始的理解,后来他给我解释说这个东西实际上是一种类似spy的东西。是什么 呢?使用现有的device使用不同的vid&pid,并且把接收的数据输出到文件,一开始他们希望pcap格式就是sharkwire之类的通 用格式,他们认为我应该handle文件头,比如总的packet数,big endian&little endian之类的issue,后来发现这个不需要,应该有device就是sheng负责。
我一开始的想法完全没有头绪,其实是这样的,usb-driver几乎不用怎么改,因为sys不需要重新编译,需要该的是.inf文件,这里面DC提出他 的worries就是guid冲突的问题,我就说干脆使用全新的guid对应vid,pid,问题就算解决了,我就是覆盖一下inf文件,(但是这个可能 就是潜在的原因导致pen-scanner crash的原因吧,我想也许还有别的原因,但是对于pda这样做是可以的,反正安装的时候需要重新寻找.sys文件,只有手动了。

ui一直是我头疼的问题,我对于mfc几乎一窍不通,纯粹使用gdi来实在太麻烦了。后来还是sheng提示我不要再onpaint事件handler里 面画图,因为控件的这个函数应该不同于wm_paint吧,我应该先改,然后使用invalidaterect之类的,(sheng说实际上也不需要,因 为mfc的类帮我做了,我不确定。)总之,另一个基本的问题就是我必须创建一个线程来处理usb的io,否则ui就无法刷新了。那么在用户操作ui取消任 务的时候,我需要调用terminatethread来强行关闭,因为我后来才明白sheng的protocol是不一定会发数据给我,我简单的设定标志 让线程结束不行的。使用waitforsingleobject也没有什么意义反而让用户发觉延迟,索性terminatethread来的简单。
那么如果想让ui显示进度怎么办呢?那只有使用postmessage来发消息了,我就定义了wm_user的消息,调用cdialog的 windowproc函数直接处理这个消息,第一次使用CProgresscontrol发现还是比较简单适用的,而且也是第一次使用CButton,这 个实在是太搞笑了,太初级了,大概刚刚学习mfc的新手都知道怎么使用cbutton吧。这让我想起了上一次看到bmp不知道是什么对象颇化了好多时间来 明白那个时cstatic,那么这一次又不知道怎么用它来写文字了。这个问题太初级了,太丢人了。DC昨天的意思是这个工具你应该在一个小时内完成,我当 时听他一砖头就问我你是不是已经做完了照实的心慌了一下。单单看driver明白inf的道理我就用了不只办小时吧,把原来的usb的io部分剥离出来我 当时尝试了很久,应为我还以为我要和pda进行以前的negotiation所以要保留所有的代码,最后DC跑过来三下五除二砍刀只剩下四五个小函数这才 编译比较容易。对于usb基本上你是一种类似于socket的监听模式,因为实际的usb通讯员本就是client-server模式,usb device是被动的,需要host不停地询问,当然我在driver之上不需要操心这个,但实际上我还是要监听device,我居然一开始练这个都没有 做。不知道在想什么。

看美国总统电视辩论我感觉这就是真正的世界最强大国家之所以强大的原因,他们有着最优秀的制度,不仅孕育除最优秀的人才,而且创造了让最优秀的人才脱颖而 出的渠道,什么渠道?就是民主与自由,公平与公正,很多我的前同胞始终对我的言行嗤之以鼻,我想这是完全可以理解的,借用周游“小人国”与“大人国”的 “格列佛的一句话,万事万物都要比较,不比较你甚至生活在小人国里还不知道自己在夜郎国里自大,不比较你永远看不到巨人国里的高有多么高。美国在华尔街的 灾难并不是原则上美国制度的失败,相反华尔街创造了资本最大限度增值的契机,这种高效率分配生产资料的方式远远胜过欧洲抱残守缺墨守成规的坐以待毙,所谓 坐以待毙就是说欧洲在劳动生产率上完全不能和美国相比,在和第三世界新型国家竞争过程中迟早会失败给美国的。市场的惩罚是必要的,美国的精英不是不明白, 保尔森绝非中国人民银行战略研究所的那帮酒囊饭袋所能企及的,他绝不是不明白7000亿美金的救市在很大程度上是抱薪救火南辕北辙扬汤止沸隔靴搔痒治标不 治本头疼医头脚痛医脚饮鸩止渴,但是这种必要的姿态是做给国外投资者看的,你只要听一听cnn的评论,看一看保尔森的那套计划就明白其中的猫腻很多。
首先,钱怎么用是一个大问号,怎样收购垃圾债券,多少钱收购都是一个未知数,这种一揽子议案更像一个原则性的政府担保案,否则,你怎么相信入保尔森这样的 人物会向国会提出一个7000亿美元的议案却只有两页半的计划书。这很大程度是一个空头支票,这也许也是为什么华尔街股票继续暴跌的一个原因吧,因为但凡 是个人都对美国政府的能力怀疑,钱从哪里来?伊拉克战争已经耗费了快要上万亿美元还看不到一个尽头,美国医疗体系分崩离析,美国的养老金体系也千疮百孔, 布什的减税计划一个接一个,美国经济财政外贸双赤字都要创纪录了,钱从哪里来?如果,政府真的要继续印钞票很可能会引发经济的大衰退和恶性通货膨胀,更要 命的是美元世界货币地位的丧失将是美国的灭顶之灾。钱从哪里来?Where is beef? where is money?

作为最优秀的国家并不意味着没有世界上最严峻的挑战,相反,在低效率行政体系下的中国正越来越成为民族资产阶级发展的绊脚石,既然已经在执行资本主义制 度,就要遵守资本主义的规则,这注定了改革势在必行,政治改革已经不是葡萄架上的酸葡萄,劳苦大众现在不再相信够不着的葡萄都是酸的谎言了,葡萄本来就是 属于你的,不管是酸的还是甜的,go for it!

加币跌跌不休,现在已经只剩下90美分了,我决定这个星期把我仅有的几块美金取出来换成加币。总理harper现在和布什一样束手无策除了减税别无他法, 但是让我惊讶的是作为中国的行政当局在经济滑坡的征兆这么明显的情况下竟然还没有任何减税的计划,看来共产党统治者的贪婪不仅仅是愚蠢更加是对经济规律与 资本主义规则的傲慢,迟早这个硬着陆回来的,在这个世界上没有什么国家可以独善其身,单单依靠扩大政府投资拉动经济这种浪费经济资源的做法已经走到头了, 资源在政府手中的使用效率是最低的,这个普世规律的不到遵守就意味着生产力要素的分配没有达到资本最大化的要求,那么生产力要求上层建筑做出相应调整的压 力会越聚越多,最终导致一场政治地震。什么时候发生,这个是个问题。

加拿大就要进入冬天了,世界经济的冬天就要来了,在夏天歌唱的蝉在冬天里会向他所嘲笑的屎壳郎乞讨几块过冬的粪土,想象一下屎壳郎的回答吧,你在夏天唱歌,那么你现在可以在冬天里跳舞呀。这个冬天是全世界的冬天,在冬天利税会先冻死呢?


十月九日 天气很冷,很冷吗?阳光灿烂

昨天marian叫我在他的电脑上装那个小玩意儿,结果我把它的电脑crash了好几次,这是usb-driver的问题,我为了偷懒不愿意重新启动,就 直接改inf文件,结果,硬件介入的时候就crash了,后来即便像要卸载驱动再安装也不成功了。我想要么是他的pda改了什么,我几天问他的确是这样, 但是他认为不会有什么问题会导致系统崩溃,后来我又想也许是新设定的guid需要在sys文件里面编译注册,可是在别的电脑上的安装发现好像也不用,因为 那个guid仅仅是驱动实体的标志以便在注册表里面查找,后来我有怀疑所有的硬件是否应该使用相同的interface,因为打印机扫描仪都是使用这个 usb驱动他们都是使用相同的guid,也许我也应该把我的新设备改称那个?可是。。。
我在被VZ催促完成http-request的coding,结果jk又来说scanner的12bpp图片被截成了一半,我实在没有主意,虽然说 http那个东西我原本半个小时就做完了,结果DC把它改的无比复杂,每个函数都可以使用callback,异步,然后又把wininet的例子inet 全部拿过来,有定义了一个包罗万象的类,把包括lasterror都变成成员变量,比如crackurl把所有的东西都存下来,甚至还在检查完 response之后,还去call internetreadfile把所谓的source下载,这个我实在高不明白他要干什么,总之我认为是多此一举,很多时候post之后server可 能什么都不回复也是可能的,就算要回复,你只接受128个字节做什么?这也太庞杂了,一个动作下来十几个步骤,而且他又写了一大堆函数,里面既可以使用 inet又可以使用他的类,我实在看的心烦,面向对象本来是方便程序员,结果他的包装比原来的api还要复杂难以理解,而且,我可以很负责任的说DC根本 不配称作C程序员,原因是他不敢使用指针直接操作字串,只想使用CString,在我看来CString就好像delphi或者java的string, 让人都变成傻瓜了,虽然说他的复制动作是延后的引用计数形式,只有在随后真正改变的时候才做拷贝之前仅仅拷贝指针,可是这总归是多了无数的动作,而且, windowsapi里面基本上都是buffer不接受CString,你要不停地转换,很烦人的,但是,老人就是这样固执,傲慢,我一直想对他说,他使 用大写开头的变量名是因为他的傲慢,因为只有系统函数变量才有资格使用大写,作为我们这些应用程序元首先要学会的就是要承认自己是一个humble的 programmer,所以我在家的时候总是谦卑的使用小写开头的命名方式,我很谦卑的。后来还是花了两个多小时才发现pen的问题,因为DC原本把 12bit色的图片也转为24bpp的格式,好像如同24bpp的格式,但是,后来因为jk传过来的tiff个石油可能是压缩的需要定义界压缩后的图片大 小,但是,jk的数据大小不准确,为了以防万一,DC叫我去检查图片的高乘宽是否和数据大小吻合,又设计在debug状态和release状态区别对待, 结果就出现了现在这样debug正确,release不对的问题,我听dc提到过release和debug没有截然不同的区别,release可以 debug,我当时没有怎么记住,现在操作以为只要把debug-info编译进去就可以在release版本下debug结果不行,看样子以后一定要问 个清楚。总之,问题是12bpp德widthinbytes当然应该是24bpp的一半,可是这在转变为24bpp之后就不是了,这就是问题的根源。很烦 人的。

安装了wireshark来分析https不过还是不得要领,看样子一定要去看协议,总之,在加密和证书着一块是很不简单的。

我认为黑客们在使用我的explorer干坏事,于是不使用电脑的时候我就把它掐死。很wierd的。  


十月十日 天气很冷,很冷吗?不知道。

每天早上起床之后我一定会做的就是坐在马桶上摆出一个沉思者的姿态彷徨思考,I am wondering and pondering,CNN说股票市场有在暴跌,全球都在暴跌,如果跌幅超过或者接近50%一定就是世纪末的大衰退,这一点大概任何人都不会反对的,问题 是这个市场的信心缺乏还是有组织的金融恐怖主义?Financial-Terrorism?现在各个国家的政府仿佛已经对于把政府的钱拿来填投机商 (investment banker)或者说投资银行的亏空没有什么异议了,在全球股票市场一体化的影响下,连普通人都仿佛明白了政府这样做是为了普通人的利益,自然各种各样的 bailout都是顺理成章,国会议员也不用再担心这么做会丢掉选举。也许这个结果就是金融资本枷锁希望的,也许这是另一个巨大的“投机”,因为客观上很 多投机失败的投资者可以让别人替他收场?当然,我猜想他们是不愿意这么双输,不过对于已经破产的投资银行来说也许是没有选择的选择。


十月十三日 天气很冷,很冷吗?是的。

发现了一个问题,使用windows创建的compatiblebitmap的格式是32bpp的,这一点我一直没有很明确,结果一直当作是24bpp的结果mypeeker当然会有很多的错误了。
所以,才会有些莫名其妙的问题。也许我的BUFFER分配的太小,而IJG去读一些垃圾数据导致CRASH?不知道这个是不是原因?服务器没什么改动。

偶然发现一个所谓的“阎学年”,发现这个人的言论很有意思,基本上世界上所有的言论从不同角度来看都有其合理性,比如,抗日战争从日本角度看是合理的,与 其让亚洲沦为欧美的殖民地不如有本地区的强国日本来统治,所谓同文近乎同种,这个和大陆统一台湾在本质上的理由也差不多。比如纳粹德国灭绝犹太人其实对于 德国本民族来说也是有其合理性,因为这个九如同目前美国人讨论的所谓非法移民抢夺了公民的工作机会一样,只不过美国人民不能像纳粹德国那样肉体消灭,最多 就是驱逐遣返。所以,从这个角度来看,这个阎学年的话没有什么绝对的对与错,关键看这个论述对于读者是否有利。
世界上没有什么绝对的真理,对与错都在于读者的翻译。举例来说,所谓“人民民主专政”在共产党的解释是对人民民主对所谓反动分子专政,但是现在大多数老百 姓认为实际上是对人民实行专政,对共产党内部实行民主。再比如,现在共产党总让人民回忆所谓的改革开放的三十年的伟大成就,从这来体现所谓“只有共产党才 有新中国”,这在共产党看来是合理的,但是,很多人从另一方面来看问题,就是所谓的三十年改革开放实际上就是当初共产党否定国民党的所谓资本主义制度,那 么如果没有共产党的前面49到79的三十年统治,直接实行所谓的“改革开放”是不是可以提前三十年实现现在花了六十年才达到的成就?当然,很可能有人说前 面三十年不是什么贡献都没有,不能用第四个烧饼吃饱了来否定前面的三个烧饼,可是问题是任何论断都需要人的解读,否则无所谓对错可言。
现在国人对与卫星上天,奥运举办好像非常兴奋,觉得所谓的盛事,可是,这些人很可能是健忘,因为前苏联在这方面取得的成就不知道是现在中国所作的多少倍, 上天的卫星无数,飞机坦克无数,奥运金牌无数,值得世界震惊的成就无数,可是结果如何?苏联人民承认这是他们最大的幸福来源吗?这个国家公证合理吗?最后 的结果如何呢?为什么普通人没有对比呢?
今天看到有关于“杨佳”报道,基本上普通民众并不一定会赞成以暴易暴,但是对于无可奈何的选择却都有很多的同情,不错,一个评论很有意思,因为是半官方的 网络评论不能说的太露骨,就说这是不自量力,个人和国家机器的碰撞是自取灭亡,告诫观众上街骑自行车一定要带执照。有些人把他从一楼杀到九楼,最后冲上二 十一楼,以及事件发生在七月一日联系起来成为所谓的共产党的诞生日即1921.7。1更是牵强附会,按照我们伟大光荣正确的政府的解释,如果杨佳真的是这 样想的那就是反革命罪了,造就不是人民内部矛盾了。

这是一个难题:对于普通人杀警察这样的滔天大罪如何解毒非常的困难,因为如果不是有深仇大恨很难想象有认真地干这样做,这在古代是要株连九族,一定要杀到他们家族断子绝孙才能彻底杜绝以后类似的事件发生,可是现在共产党不能这样做实在是非常遗憾。
如果承认杨佳有精神病,就意味着无法对其绳之以法以警后效。但是如果承认这个认识非常清醒理智的,又很难回答为什么有人会因为在警察局里被打了一顿就会和 警察拼命,因为这实在是太不合理了,普通人被打了一般都是自认倒霉绝对不会和政府作对,尤其是国家机器的执行者公检法机构,因为这样的代价太大了吧?中华 民族历史上很少有这样的例子,我能够想出来的没有几个,比如张飞打死了官衙,比如陈胜吴广之类的吊民,比如。。。总之,我们决不能认为这个人的神志是完全 正常的,但也决不能认为他神智是完全不正常的。这个的确是当前司法判决的难题。
我本来以为选举日可以放假一天结果差了法案《Canada Elections Act》发现只能请假三个小时。有时候民主让我很失望。

刚刚从网络上得知陈冠希的照片右一千三百多张,我好像才只有五百多张,这是怎么回事。
ATL非常的丑陋,单单编译就是一个大问题,微软的整套设计仿佛是七零八落的,乱七八糟,使用纯粹的pch方式好像又写问题,或者是我读的参考书太老了, 大概是vc5之类的吧,总之何vc6有不少区别。有一个变异问题,我是google的,LIBC.lib(crt0.obj) : error LNK2001: unresolved external symbol _main.这个问题需要把 _ATL_MIN_CRT去掉,这实在是太糟糕了。
什么是dirty movie? 《Little Britain USA》就是这个,基本上Adult movie仅仅是描述事实,而非主动歪曲,下流,而这个系列应该被称之为下流电影,因为它很多时候让观众感到unconfortable,user's discretion is recommended.


十月十四日 天气很冷,很冷吗?是的。

今天去投票终于在几十年中第一次体现了一个公民的权利,万恶的xx党剥夺了我基本的人权,终于在加拿大找了回来,心里充满了喜悦。我选择了保守党,因为有 几个原因,第一,Harper这个人有气度,在和反对党辩论中神定气闲镇定有序,有大将风度让人比较放心。第二,保守党政绩不错,加拿大在G7里面是唯一 有财政盈余的政府,并且提前还了以前的债,第三,保守党对待恶性犯罪的态度我比较赞赏,其他政党都没有这一条,同时减税与暂不实行温室气体税的政策我也比 较同意。
加拿大五大政党我个人的观察室这样的:
NDP的Jack Layton纯粹是一个政客,没有什么像样的主张一心一意准备和执政党谈判组成联合政府,我很讨厌;
自由党的Stephon Dion其实是一个很不错的好人,和他以前的教师出身很相符,诚实认真,但是绝不是一个政治家,很多时候比较天真,比如记者问到他关于Harper政府作 的不足的地方的时候他就答不出来,被Harper攻击为没有想清楚自己到底想做什么,的确他提出的所谓green-shift主张在大选前不足一个月时间 提出来实在是匆忙,让人觉得很不可靠
。绿党的梅女士其实也是一个非常intelligent的女领导人,并持了绿党一贯的理想主义的风格,她在辩论的时候提出的很多论点论据是为Harper 比较认真回应的,而不是像其他反对党一味的攻击诋毁,但是绿党在全世界的政坛都只是配角,所以不会成为主流,从人格的角度来说,她和Stephon Dion一样都是很善良的普通人,而不像其他都是一些政客,但是,很可惜政治仿佛是公司投资,你不会把自己的钱交给一个诚实但是不会经营的好人,你会选择 像Harper一样的精明的生意人。
Bloc Quebec完全没有全国大党的想法注定沦为没落,现在越来越没有人气了,因为离开了魁北克主权之外这个党完全没有生存的可能,而且我不喜欢这个党的领导人,他在回应政敌的攻击的时候竟然说对方Imbecile,这个让人很不舒服。

我大概终于找到了一点概念怎样开始DOM,其实最麻烦的就是第一部怎样获得ihtmldocument指针,究竟什么class实现了这个接口呢?有一个 办法比较容易,就是使用Ishellwin接口的cocreateinstance方法获得所有ie-window的collection指针,这个在精 通gdi的人变成了遍历所有window然后查找window-class名字符合的窗口。另外的办法都是要借助于mfc的现成的class,比如 chtmlview,或者cwebbroswer(这个极不清了,反正是mfc的类),我不喜欢图形界面,太笨重了,太复杂了。另外的问题,就是安全性的 问题,我利用ie的parser当然不行因为动态运行让黑客网站趁机侵入,所以,这是一个比较麻烦的问题,也许使用DC的那种terminal-user 来限制用户权限是个好办法。


十月十五日 天气很冷,很冷吗?是的。

com编程已经被简化成了这么容易!如果你想直接使用ie的接口而又不想使用mfc的庞大的类,那么就引用tlb吧。
#import "mshtml.tlb" 之后编译一下会生成量个文件,就是纯native的c/c++的stub,一个是接口定义,还有一个定义了所有的智能指针。。然后,我google到了使 用的方法非常的简单,如果mshtml.h里面定义的接口是IFoo的话,新的智能指针就是IFooPtr,需要使用一个所谓的coclass大概就是 Foo,所以就是这样子的:IFooPtr myPtr(__uuidof(Foo));
不过,你要记住你是否使用了namespace,我建议还是用吧,不然很多自动生成的名字有可能冲突,另外就是这个连接有点像是静态链接库一样你一定要使 用try-catch,因为这些智能指针在constructor的时候很可能抛出异常。这个好像动态联接你可以控制,而静态链接你无法预测一样。
 

这个大概又是一个所谓的old-new-story吧,我试图使用links获得ihtmldocument2接口的所 有的link的集合,这个没有问题,然后我使用ihtmllinkelement来遍历每一个成员, 结果一个也不行,结果一google就发现要使用ihtmlanchorelement接口,这个实在是无理头, 虽然我一开始就注意到了msdn所说得links返回的事link和area的集合, 但是我怎么也想不到居然所有的所谓hyperlink都被当作了所谓的area或者说anchor一类的对象。这个比较夸张, 我现在希望不使用ie浏览器的实际的instance直接调用getclassobject之类的方法来, 因为我使用ishellwin的接口不能够改变它的url,就是说只能读, 而且获得的ihtmldocument2的接口没有location的接口,这个比较的奇怪吧。
 
这个看上去要我自己去实现类似于iwebbrowser2的接口一样了,为什么不直接用mfc的类呢?因为我不会, 接口毕竟要比mfc来的简单,这是我一贯的看法,gdi比mfc简单,因为就那么多函数api看完了就完了, 你想深入也不可能,因为是系统api。而mfc不一样,看了一个类的包装,再看下去找到api还得看,真是脱裤子放屁, 多此一举。不如直接学习api。

十月十六日 天气很冷,很冷吗?是的。

msdn说对应coinitialize必须由couninitialize,所以,我就这样写我的智能指针代码,你发现了错误吗?
HRESULT hr;
hr = CoInitialize(NULL);
if (SUCCEEDED(hr))
{
      CComPtr<IWebBrowser2> spBrowser2;
      hr = CoCreateInstance(CLSID_InternetExplorer, NULL, CLSCTX_ALL, __uuidof(IWebBrowser2), (void**)&spBrowser2);
      //....blah, blah...check hr and do my job
      //you have to explicitly call release here======>>>>>>
      //spBrowser.Release(); //so, you have to remove the comment!!!
      CoUninitialize();
} // ====>>>>>only at this place is smart pointer destructor called!!!!
你发现了问题吗?我已开始很不理解还以为是在中间处理过程中我的智能指针引用计数使用(void**)这样子不会成功呢。其实问题不在智能指针身上,而是 在couninitialize身上,因为智能指针的作用域在他之后,就是在===>>的地方,这个时候dll已经被关闭了。所以,这是个很 讨厌的问题,你当然不想再coinitialize没有成功的情况下呼叫couninitialize。于是那个Release看来必须有,所以,这个看 上去很低级趣味的。
使用navigate2接口方法的时候参数都是variant*,但是,如果你不想传递postdata的话,你不能给一个null,因为null和variant设为空值是不一样的。
所以使用CComVariant的construct创建一个临时的variant空值吧。
使用智能指针一定要非常小心他们的作用域就是生命周期了,我发现很多程序员在使用智能指针的时候倾向于使用临时变量而且是那种局部的临时变量,比如循环体 内的,发生才定义的,等等,这个当然好了,因为没有必要在函数开始的时候初始化一大队根本可能用不到的临时变量,而且很多时候利用CComQIPtr的 copy-constructor里面实现的queryinterface,那么根是需要临时的临时变量来做了,那么怎样传递临时变量呢?我犯了不少的错 误,指针不为空依然有可能是空指针因为指向的智能指针可能就是临时变量已经死掉了,这里我还不知道怎样分配堆里面的变量,难道智能指针不是这样做的吗?
寻找ie实例的时候也要小心,并不是实现了iwebbrowser的就一定是ie,有可能他还是没有实现ihtmldocument2接口(是不是呢?)
不要包括<atlcom.h>那个好像有很多mfc的东西,很烦人的。

使用shellwin也可以获得当前活动的ie实例的iWebBrowser2接口,进而对其加以控制,这个都是些所谓的"常识"(我很讨厌很多人的这种说法),对于我来说这个东西没有实际做过一遍的就是新鲜东西,耳听都是虚。
以下代码我从网络上拷贝下来盖了一下,这个就不是直接使用tlb调用native的c/c++德stub来操控接口,而是需要一个正在运行的ie的窗口实 例。(其实现在window里面几乎都是explorer,ie不过是一种特殊的explorer所以才叫做internet explorer,我们只关心shellwin里面的实现了iwebbrowser2的接口的ie,忽略其他的explorer。)

需要#include <comdef.h> #include <mshtml.h>,于是,怎样获得接口的工作都被ishellwindows做掉了。这个也正是我所想知道的,我看了一点点 activex的帮助,猜想应该是实现一个类似olecontainer的东西,因为这些个com大都市inprocserver,需要一个实例来 hosting。那么这个事例原来就是mfc的chttpview之类的,现在要自己做一个简单的。这就是我的计划。

使用clsid_internet_explorer获得ie的实例,使用clsid_webbrowser获得了iwebbrowser2的接口,但是 问题并不能使用这个接口,因为它需要一个olecontrolcontainer,这个决不简单,需要实现另外三个接口,这个是我刚刚看来的。

《music&lyric》让我回忆了很多,里面杜撰出来的很多插曲都很优美完全就是80年代的流行音乐的翻版,电影的作曲真是天才能够模仿的惟妙惟肖,比如“a meaningless kiss”就是那时候“careless whisper”的绝妙克隆。1987是电影里面的同学聚会的标题,很凑巧的那个年代也是我的一个重要的年代,上海的一帮人在谈论着2011年的聚会,非常的irony。Hugh Grant扮演的主人公沦落到给一帮子怀旧同学会表演的地步真是音乐家的灾难,虽然知识阶层也许会对流行音乐嗤之以鼻以为低俗,但是对于大众来说,这是陪伴度过他们生命中最重要的青少年时期的精神食粮。


十月十七日 天气很冷,很冷吗?是的。

加拿大的恐怖电影既白痴又便宜,这一部电影完全就是在一个类似于home-depo的店里面拍的,people just talking and talking,背景就是这个小镇被浓雾笼罩,在浓雾里面有一种类似于与章鱼的吃人怪兽,还有变态为巨型的文字苍蝇和蝙蝠之类的,但是最变态的还是人类, 智商已经下降到了原始人,一群人就在这个五金店里面依靠玻璃窗组成的坚强堡垒抵御着各种各样的怪物,非常的恶心,大段大段的只有学艺术的人才想得出来的 bullshit对白。这就是加拿大的电影业。更正:这个白纸电影不是加拿大的是美国的,sorry, Canada.美国同样有更多白吃导演。


十月十八日 天气很冷,很冷吗?是的。

CNN把很多过错归结于wallstreet的那些stockbroker,比如,他指责这些投机经纪人用别人的钱玩游戏,赢了就得到大笔的奖金,输了反 正是别人的钱。这是事实吗?是的,但是别忘记是那些人自己把自己的钱交给这些经纪人去玩的,华尔街的奖金和工资是这些投资人认可的,用别人的钱去赌博者本 来就是生意场的至理名言,我还记得一部电影里面那个嚣张的主人公成立了一家投资公司颠覆市场,公司的名字叫做OPM investment。What does OPM stands for? It stands "Other People's Money“.

我还是没有仔细读明白mysql关于partitionby 的说明,我原来的难题根本就不存在,比如你现在设定你的primary key为id,然后又有一个md5字段signature的unique key,那么你怎样创建你的table呢?create table ...partition by key(id) partitions 2会失败因为你的unique key没有出现在所有的partition里面,这个是我的headache的问题,实际上这个问题也非常的容易。

1)partition by不论是key,hash,range,list等等都需要integer做参数。

2)这个参数必须至少是所有的uniquekey的子集,比如primary key(id1,id2),unique key(id1) partition by key(id1).

基于以上这一要求,必须作如下调整:1)数据库的primary key必须使用md5,这个本来就是合理的。
2)取消auto_increment,因为这个一定会使unique key,而我没有办法同时使用这个和md5作为partition by。
3)改造md5成为四个独立的long int,因为必须使用integer,而我要用其中的一个long int来partition by。
4)server程序,client程序都要改造。
5)硬盘要重新划分,把两个sata硬盘分配给新的二手电脑,然后大致分成若干个分区。在partition by 语句之后就是直接指定data file的存储位置:DATA DIRECTORY='e:/s1/data/' INDEX DIRECTORY = 'e:/s1/idx/',
(这里我的想法是分区越多越好,因为如果达到这两块硬盘的上限的时候,我可以不需要改变数据库及其程序紧紧依靠拷贝mysql的data文件以及购买新硬 盘把partition名字改成一样就能达到升级的目的。那么未来可能需要多少个分区呢?10个?这意味着潜在的最多10块硬盘的可能性?26个字母代表 了partition的可能性,这个方法的极限就是单个数据库服务器的极限,在多久只能使用mysql-proxy来平衡多个服务器了。不过这个有别的用 途。)
6)写一个简单的数据库拷贝的小工具,然后把三块硬盘放在一台电脑上拷贝,需要解决是否支持ide与sata。(这个很关键。)
整个计划实施估计没有两个星期根本不可能。软件测试,硬件安装,最后调试,拷贝数据库。。。这个计划太大了点,也许放在今后某个时期在实施吧。当前还是以 ie的bho之类的为主,最近期的目标是activex的控件的掌握。最后补充一点,我的数据库时mysql5.0的什么版本不知耻partition, 需要更新到5.1,至于6.0暂时还是不要尝试。
7)原理上md5应该是平均分配的,但是最好还是观察一下大致的几率,否则分区太小了调整不过来,或者采用linear hash让系统自动调整?

mysql从5.1以后支持partition by key(key_list)的做法,只需要把所有的primary key, unique key都交给key_list,让系统自己区分,我前面讨论的都是基于hash的要求,这样子的话,问题是这个key_list必须是所有的primarykey,uniquekey的子集,这一点才是我的表的设计的问题。
更正:
1)md5不需要拆分成四个整数,partition by key支持任何类型,只是hash才要求整数。
F***!读到最后才发现,partition德data_directory根本在windows里面不起作用!白忙了一晚上!!!

美军的空地一体化是令世界震惊的,你能像镶嵌现实并直接指挥航空兵直接实施抵近战壕不到两百码的投弹吗?要知道那个子母弹是原来对付装甲目标的,现在拿来 对付战壕前的两百码的步兵,只要有一丝一毫的误差就把自己的部队报销了,因为那种字母但是毁灭性的,掩体根本没有用的。这个技术与训练时惊人的,世界上没 有任何其他国家可以接近这种水平。

学习ole,这个是所有的故事的前传,我感觉非常的复杂,你现在就知道现在人编程有多么的容易,我记得当初学习delphi的时候,曾经那个作者说在 delphi1.0之前写一个button之类的控件化了3000多行代码,把当场的技术大会参与者都吓坏了。我感觉我现在在挖掘史前的历史,ole在很 多人眼里是所谓的old-long-extincted史前怪兽,可是就是这个怪兽是所有现代进化产物的鼻祖。讲老实话我实在抓不住重点只好写一些自己的 感觉,因为我没有一个清晰的图画。


十月二十四日 天气很冷,很冷吗?是的。

我被叫去处理database,管他的,只要给钱让我干什么还不是一样,何况我觉得我是一个半专业的database programmer,只不过很多年没有使用连左外连接的语法都忘了,基本上在from tb1 left outer join tb2 on cond1=cond2 left outer join tb3 on ...这个on决定连接条件,在随后的where里面做最后去除。撰写stored procedure的时候,如果是返回值需要加上output,在调用函数的时候也一样,exec st_proc1 param1,param2 output,在函数内部声明变量时候使用两个@@。使用convert转变类型时候使用数字作风个类型:

convert(varchar(10), @startdate, 11),有一会儿我居然想不起来怎样使用union了,也难怪,差不多快十年没有怎么写query了。

computalk:AI again. 我个人觉得<Pan's Labyrinth>是对人从头到脚,从里到外的灵魂的震撼。


十月二十五日 天气很冷,很冷吗?是的。

我觉得在加拿大成为政治家应该是很容易的事情,比如在很多乡下选区总共投票也不过几十票,如果某个中国新移民在某个小镇上住上几年养一大家子然后就可以左右当地的政治生态了。

现在整天稀里糊涂的,很多计划都处于半停滞状态,原因各种各样。mysql达到了磁盘极限怎么办?partition不幸,proxy要实施吗? mypeeker需要dll注入,或者注册为service,但是首先jpeg压缩要找到bug,spider以及相关的所有的所有都回到了ie的 parser借用的问题,这个需要我从ole学起,否则activex之类的东西我还是不懂,单单使用ihtmlxxx的接口我总觉得不好,为什么不使用 mfc?因为我不熟悉mfc每次编译都有不少的问题,主要还是要去学一点mfc。图像处理至今还没有开始,为什么?也许我觉得图像是一条错误的选择,因为 我突然意识到声音是比图像更加基本的信号,声音模式的识别要比图像来的容易。难道我要从声音学起?最近又想要把wesnoth的ai引擎改造为“云计算” 这个实在是有些ambitious,我很怀疑自己的实力与决心,可能看看开头就放弃了,99%的情况是这样的。与此同时,作为社会的最底层我要开始天天操 心柴米油盐,为什么穷人除了没有钱的烦恼之外还要操心那么多烦人的琐事?ole/activex不知从何入手,原理都是似懂非懂,真正问我又不知道是什 么?我想阅读起码要花上几个星期才能有一个基本概念。(夸张?internetkids可能看看wiki/google十分钟?)

mysql德datadirectory可以使用symboliclink,也就是说可以把mysql.ini里面的datadir下的database (就是一个directory)移走,然后使用一个database同名的.sym文件模拟linux下的symbloclink,就是说里面写上真正的 目录名字,还有人说在vista下windows真正支持symboliclink的情况下可以手动把用partition创建的.myi, .myd文件移走然后使用symboliclink替代,可惜,我没有vista,windows下的shortcut我看了一下实际上是一个可执行文 件,大概是ishell的接口使用的吧?总之,这个是一条死路不用再尝试了,我这已经是不只第二次下决心放弃了。


十月二十七日 天气很冷,很冷吗?是的。

我感觉我的生活就像是无尽的循环,一个modal状态的对话框,在无尽的空耗中等待,重复着毫无疑义的消息队列,在偶尔几个少感兴趣的消息中截取一鳞半爪 的信息,绝大多数时候这个所谓的消息仅仅传递了一些用户定义的结构的地址,当我按图索骥寻到了源头却有茫然不知所措,面对毫无线索的编码无从下手。然而更 多的时候,我就是休眠状态,被其他更加有优先级的任务踢出了cpu。这就是一个对话的生命过程,在一次轻描淡写的点击之后结束了长久的等待。

为什么dll不能够静态链接?因为有些地址无法在编译连接期间解决,需要loader的计算实际的loading地址改变dll的base,我猜想这也许 就是为什么我在ddk里面看到dll的起始地址都被计算过了,这是微软的必然过程,如果没有调整计算任何dll都要让loader重新rebase。当然 我现在就明白这些我看到的,具体rebase后怎样计算一些绝对地址我还是想不明白,假如windows的dll能够想linux的pic我们就不要这么 烦了。

圣堂的老太太看上去是一个很虔诚的法轮共信仰者,我虽然讨厌共产党但是对于这一类的所谓的气功宗教也不感兴趣,但是,共产党之所以镇压这个组织紧紧是因为 他们反对共产党,向着一类的气功治病的玩意数不胜数,要镇压取缔为什么不全都取缔?走火入魔也不是只有这么一家。反正我现在对于人们信仰越来越觉得无所谓 对与错,一个生物体根据外界客观的相互作用的出某种主观臆断,对了如何?错了怎样?仿佛一日三餐的物质食物一样,人总要有些东西来填充他们那些99%时间 都在空转的大脑。所谓信仰都是信则有不信则无,有也可以没有也一样,牛顿无法解释物质运动的起源就归结于上帝之手的第一次推动,这也没有什么不对的,这些 事情也许永远没有什么对与错,就像我坚信我的所谓的第一次推动一样,信仰对与信仰者不管有多少意义对与旁人都是无可非议的痴人说梦,谁知道呢?当数据形式 的逻辑可以在此成为数据被重新加工成为新的数据形式的逻辑那么第一推动就完成了。所谓道可道则非常道,任何逻辑如果沦落到了有形的算法就不再有资格成为能 被无生命智慧体自然处理的数据。名可名则非常名,任何数据如果上升到了高级的有格式的结构就失去了被无形逻辑处理的机会。


十月二十八日 天气很冷,很冷吗?是的。

早晨起来阅读《windows核心编程》感觉又如醍醐灌顶,眼前仿佛一片光明,现在里面的不少东西第二次读才能真正明白,(不过我从来也没有读完,只是挑 自己感兴趣的看)这个真是大师级的讲解,我越看越觉得自己很浅薄,这些应当是一个windows-programmer的常识,我却至今才明白,当时dc 问我createthread何beginthread的异同,我居然一点不懂还以为凡是win-api的就是最好的,诚然createthread是唯 一的系统的调用,但并不意味着没有问题,也许msdn说的对beginthread有某种内存泄漏的问题,但是防止那些strtok/tmpnam等等的 不安全函数的办法恐怕只有像beginthread那样自己在thread内部存储指针了,很有意思的是有一个内部函数basethreadstart这 个才是真正的线程的入口,不过你别想调用他,第一在dll里面没有输出,第二他的参数是寄存器的传递,所以。。。我也不知道为什么会想到直接调用他,有意 义吗?另一个有意思的东西是tlssetvalue,这个据说效率很高,比我自己设定线程间通讯来的快,我想这是最有效率的方式了(估计效率中间包含了地 址转换之类的?)。总之,昨天看的那个关于loader转换地址的问题其实在dll注入中有重要的用途,就是因为loader有一个地址变幻的问题才需要 使用getprocaddress得到loadlibraryA的地址,在已经运行的kernel32.dll里面得到的地址--loadlibrary 才是正确的地址,这个不同于晶态编译期直接调用loadlibrary这个api的地址,否则动态调用岂不是等同于静态连接了吗?很有趣的。当然这个在我 读来津津有味的已经是老古董了,这本书大概已经有几百几千万的程序员在阅读实践了,我现在只想把自己的体会写下来,帮助记忆。总之,我觉得,如果没有看管 这本书,或者无法看懂这本书的就没法成为中级,很像一个分水岭。

写了一天的sql,基本上我是可以随心所欲,不过原本我就喜欢sql,加了很多index,因为运行速度太慢了,后来嫌view太慢了全部生成临时表。user的表就是U,存储过程是P,view是V,view比临时表好的地方就是能够随时编辑,这简直就是废话,sqlserver容易使用的地方就是你可以方便的编辑view,根本不用自己存文件了。晚上把wesnoth拿出来看了看小心翼翼的改了一个参数然后开始玩游戏,美其名曰测试游戏的ai。


十月三十日 天气很冷,很冷吗?是的。

我还以为万圣节可以放假了,没想到根本不是。使用sqlserver引进表的时候我不知道怎样保持原来的collation,结果在query的=之类的 比较时候会出错,既不知道怎样使用collation的错,我google了一下可以在每个比较后面加上collation use database default,具体语法忘了。raja这个smart asshole其实很聪明的,我原本认为没有办法解决的问题他有一个数学的办法,就是当你无法比较具体数值的话那么就比较变化率,仿佛对于一个函数求导函 数来比较一样,这个应该是一个普遍的思想。我需要以后使用这个思想。使用左连接的时候,on是连接条件,那么where就是最后去除的条件。


十月三十一日 天气很冷,很冷吗?是的。

S: 看来这次危机的确是全球性的,国内已有好几万的企业倒闭了,股票就不用说了,各方面的订单都锐减,房地产降价。不过经济的东西我懂得实在不多。
====〉百年不遇的经济灾难,让不合理分配的生产力要素回归只能用最残酷的经济手段实现,正好像进化论的是现实残酷的物种淘汰一样,没有破产就不会有正 常的经济秩序,我一直不认为华尔街有什么不对,相反向中国那种所谓的半计划的“所谓四不像的国家社会垄断资本主义”才是人民的公敌,因为把社会资源集中起 来的做法就往往是效率的噩梦,这正是为什么西方始终反对国有化的原因。

S:华尔街的事我是外行,不和你争论,但我不同意你的观点 :) 中国需要时间,华尔街必须自己承担责任。
====>华尔街当然是贪婪的,我并没有否认,人的本性如此,只不过经济规律借用人类的贪婪实现自己的宏观控制,恐龙的灭绝就是这种自然规律的作用 结果,没有残酷的竞争新的物种不会产生。市场不会害怕淘汰,怕的是政府的过分限制,(看来我是支持自由经济学派的),中国政府的做法是把国民收入通过高税 收低工资大量集中在政府手中,看起来可以干大事,实际是大浪费,比如搞了很多的面子工程,浪费了大量的扩大再生产的资源,如果采用美国使得让企业与个人在 整个国民经济收入分配中获取大头,那么对于资源的使用将更有效率,国人只是和自己的昨天对比发现有了很大的进步而满足,却不知道世界的现状,好比清帝国和 明朝相比号称盛世却再不到五十年内成为列强的殖民地一样。中国政府的御用经济学家从来不让人民对于国家财富分配方式有一基本概念,比如政府开支占gdp的 百分比,地方政府与中央分配,甚至我们更本就不知道各级地方政府一年收入多少开支多少,(那个号称中央集权的政府首脑也不知道,这一点也不能怪他,下面的 小金库,大金库多的是。)这种体制和明清又多大区别?如果清朝卑劣强化了五十年占领统治,这个帝国能撑几年?美国现在不是没有能力把中国变成殖民地,只不 过以现在这种跨国公司,美元作为世界货币的方式来统治更加有效率,这就是美国人的聪明才智。

我时常为了一件小事而烦恼,比如我的vc6如果是console,总有一个dos窗口,向要取出就要变为win32的程序,这里有三个步骤:1。使用 winmain,形式为:int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow),注意这里unicode不能直接得到命令行参数需要使用getcommandline。2。在project-setting德 c/c++里把_CONSOLE给为_WINDOWS3。在project-setting德link里面把/subsystem:console改为 /subsystem:windows就只有这么三步。我把我的计算md5的小工具改造了一下,因为以前的filemapping完全取决于文件大小和操 作系统内存大小来保证映射成功,并且不知耻2G以上的大文件,现在我每次仅仅映射最多16M内存然后释放,并且支持无限大文件(NTFS支持多达就多大。) 忘记了映射必须是64k的整数倍,又改了半天,现在应该是正确的。


十一月二日 天气很好,阳光灿烂,真应该去跑跑步的。

买了5块钱的衣服三件。本来想把dll插入做一个试验,被俗事耽误了,上个月又没有完成进度,现在越来越懒了,怎么改变呢?能不能给自己订一个硬指标强制 完成?用什么办法?这个月究竟要完成什么?每天头脑都是出于混乱状态,难道真的像黄连生当年说的那样撑不过38岁?日子过的越容易我的内心就越恐慌,总是 担心真的变成猪圈里的生活,虽然这是内心深处的最高理想。要么每天规定写多少行代码吧?可是很多时候就像王朔小说里那个《我是你爸爸》的主人公爸爸一样铺 开一堆稿纸心潮起伏思绪万千却一个字也写不下去。这就是一个不甘愿或者还没有机会在猪圈里生活的猪的烦恼。

实验用创建远程线程的方式injectdll完全可以,现在的问题是我要注射到哪一个进程的dll里面,我想explorer大概是首选吧,那帮混蛋肯定 也是这样对付我的,不然为什么会有时几个线程在explorer里面运行?不过,好像也不对,在taskmanager里面我看不到线程数增加。


十一月三日 天气很好吗?

远程诸如好像没有什么大用?比如我把dll注入了explorer.exe,那么在dll_thread_attach或者 dll_process_attach里面我做了一个线程(我想还是前者吧,因为我可能把dll诸如很多的进程)那么我的注入者程序是什么时候返回呢?我 对此不是很清楚,就试验了一下,好像是在前者返回给我的再kernel32里面运行的那个"loadlibraryW“,因为我使用 getprocaddress(getmodulehandle(“kernel32"),"loadlibraryW")得到的 loadlibraryW指针,然后使用createremotethreadex创建的远程线程,那个threadproc就是刚才返回的 loadlibraryW的指针,这个是大师许多年前就为天下无数英雄指明的道路,我有照猫画虎了一下,只不过我一开始不明白远程线程什么时候返回,现在 明白了,创建的那个远程线程在dll_thread_attach之后返回而返回,但是,这并不意味着注入的dll就此被卸载了,这就是为什么大师又有一 个类似于诸如函数的卸载dll的函数,不过,我试验了一下在dll_thread_attatch里面创建了一个线程,然后再运行一会儿然后使用 getmodulehandle找到我的dll的module句柄向然后使用freelibraryAndexitthread来停止我的远程线程,这个 当然是错误的,因为我的线程已经结束了,于是我有了一个windows的所谓DEP(Data Execution Prevention),这个是很高级的东西,因为据说是依靠cpu标示了某些关键内存区域防治你运行非法程序。现在看来,我使用 getmodulehandle寻找我的dll的句柄然后调用freelibrary会把被注入的那个进程关闭掉,(不过也许是因为我注入的是 explorer,有一定特殊性吧?)没办法,要上班去了。

花了十块钱,原本以为可以把我的窗帘工程完成,结果窗子太宽了,变成了半截子工程。


十一月五日 天气很好吗?非常好,很热。

远程注入的dll不要再dll_thread_attach里面创建线程,我不知道为什么反正再dll_process_attach里面可以保证只做一次,目前为了测试方便只注射到explore.exe,不要注射到kernel32.dll之 类的,我的释放注射还没有实现问题可就大了。总之,这个方法很简单,是大概入门级的玩意儿,明天再接着玩吧。DC的想法还是非常不错的,JK的扫描仪把所 有的图像处理在硬件完成了,输出实处文件形式,于是DC就打算直接使用windows-explorer的那个mfc的工程形式,因为这样不用自己做 thumbnail了,他后来很得意地告诉我要使用webview而不是普通的treeview,我以后再研究吧,我现在每天埋头写sql大概都创建了将 近一百个临时表视图存储过程了,现在连名字都混乱了。在sqlserver的临时表,就是tempdb这个文件膨胀的时候可以这样做。 有三种方法,使msdn上看来的,how to adjust size of sqlserver 's tempdb? (from MSDN)


十一月六日 天气很好吗?非常好,很热。

WM_CLOSE  is issued by system menu.

这里是我将近一个星期在做的一个近乎不可能的任务,从网络公司月结账单的流量数据中分析出每个device对应的内部id,问题是网络公司的账单和我们自 己的log纪录的数据可能差了20-30%,而且,我们自己的log数据不可靠,有可能遗漏,我对marian发表我的评论,就是这个任务是一个wild -goose-chase,一个在hay里面寻找needle的工作,不过,今天早上我觉得我的函数还是能够95%的准确率发现matching,其实, 原理都很简单,只是第一步把每个月的账单数据规律化花了我不少时间,这些帐单粗看起来毫无规律,有的从月中开始,有的从月头,我一开始觉得毫无办法,后来 还是vm提醒,当然他对于这个东西天天接触自然比我清楚,从此以后大概都是很简单的查询,所谓的简单就是有时候建立一个临时表需要好几个子查询罢了。现在我除了游标不会用以外几乎没有什么不会了,哈哈,中级左右的水平的人大概和我差不多吧。

有一件事情要记住:去试验一下远程调试,就是怎样在运行中触发debugger。要记住。


十一月七日 天气很好吗?非常好,很热。

Explorer乃是一个藏污纳垢之所,你在里面可以看到众多熟悉的身影,微软的virtualpc,adobe的所谓help等等,大家统统都把自己的 dll注入期间,我不知道这些正规软件会不会去截取系统api,但是如果不这样做你能够实现类似vnc的那些功能吗?我很怀疑的一件事情是资源文件大小的 限制,好像应该只有64k,因为word直接转为指针就是这个makeintresource所作的,除非这个地址仅仅是索引的名字??(我猜的,否则你 怎么可能返回资源的地址?)试验一下吧。不过看起来我错了,也许这个仅仅是为了和16位系统兼容,内部并非这么简单的使用偏移量作为资源地址,估计就是索 引表一类的。还有就是反复犯的错误GetTempPath获得的路径末尾是有“\“的,GetTempFile好像有帮你创见文件吧?我印象中是这样。 (所以才会发生以前DC犯的小错误,他想用这个临时文件名创建临时文件夹就失败了,除非你先删除文件,这个总是很烦人的,因为没有一个真正意义上的临时文 件夹的函数。)tmpnam更加的糟糕,因为这个是不安全的库函数,大概只有使用__beginthread之类的才能保证线程安全,而且这种 static函数就算是进程间的race-condition都有可能失败。

把昨天的小小的改进完善了一下,现在我的peeker的dll作为资源文件存储,注射程序运行前先把资源文件读出来然后注入explorer,那么注入者要怎样隐身呢???


十一月八日 天气很好吗?下雨了,早上出去跑步。

在“wesnoth”中进攻应该尽量选择组合兵种,而防御也许需要尽量选择最便宜的单一兵种,我认为进攻一方通常是掌握战场主动权的一方,他可以自由选择发起进攻的时间和地点,因此不需要过多地考虑防御,而防御一方属于被动一方需要处处设防兵力难免捉襟见肘。


十一月九日 天气很好吗?下雨了吗?

vc6的资源编辑器有些古怪,要小心,尤其是使用import引入二进制文件作资源文件的时候,我遇到了莫名其妙的问题,最后实在没有办法解决了,把. ncb和.opt文件删除了才解决,大概的原因还有就是使用一个类似DC的sharedcode的时候我的pch怎么设置?因为已经有stdafx作为 pch了,你不能有两个pch,vc6不允许,其结果我猜体会到这个common的code部分不能使用pch。


十一月十日 天气很好吗?下雪了。

晚上噩梦连连,早晨心情郁闷,整天都心情沉重。marian实在是一个工程师天才,他总结出了imsi与ccid之间的规律,作了一个转换表格,这其中包 含了普遍使用的一个checksum的算法,这个在信用卡之类的号码上都是一样的。当然这也就意味着我花了一个星期做的工作基本上白费了。

不过,在加拿大当政治家要比别的国家困难一些就是你一定要英语法语都很流利,这里流利绝对是那种类似于同声传译的级别,当然政治家不仅仅是一个话筒,还要思考应变,就但凭着一点我觉得就比很多国家来的优越,不是有那一句老话叫做多懂一门外语作用很大。 我刚刚意识到好像每个星期都有人被layoff,这真是一个风雨飘摇的破船,早点沉掉算了。

晚上完全无头绪,首先,你的静态库使用的运行期库的线程模式要和别的一样,其次,发现好像explorer注入了几次就出现一些莫名其妙的问题,后来觉得是远端服务器不反应,强行关闭又引发的url删除不掉的问题,完全不知道怎么回事。

资源文件是这样子的,id  typename DISCARDABLE "FILENAME" 这个filename可以让你使用文件名来编辑二进制文件,这样不使用import,避免没有及时更新。

终于完成了第一版,这是我的第一个spyware,或者夸张一点称之为trojen horse,就是木马?让内行人见笑的小玩意。 这个工程组分服务器与客户端两大块,服务器段就是一个htmlserver(bigbrother),域名以及端口都是hardcoding的。客户端有 三四个小工程,staticIjg是一个辅助工程把ijg的jpeg转换简单包装做成静态库,否则编译很麻烦。mypeekdll是被植入的dll,负责 定时截屏使用http协议发送jpeg图片给服务器(bigbrother),injectdll是一个植入dll的工具,同时为了能够自动运行,在 mypeekdll资源内部放了一个injectdll的镜像,在dll被卸载的时候在注册表写上autorun,同时把资源中的injectdll写入 文件。thunk是一个空壳子,把injectdll.exe何mypeekdll.dll当作资源文件,运行时候创建injectdll.exe。这就 是全部了。用户可以在这个服务器上察看自己的桌面是否被传到服务器了(http://nickhuang99.dynalias.com:1001/)

原本是为了部署简单服务器才没有使用mysql数据库,现在看来不行,因为很快的文件就不得了了。


十一月十二日 天气很好吗?挺冷的。

早上去跑步,晚上又去跑步,实在是心情郁闷,总觉得好像囚犯等待判决一样的难耐。白天DC接到通知说要backup,我感觉有一点忐忑不安,实在是莫名其 妙的感觉,从心底里我从来都不觉得我会失去什么,但是人就是这样真正感到威胁的时候却又有些胆怯。纽约和多伦多的股票交易所喋喋不休,虽然作为平头百姓完 全没有股票投资失败的烦恼,但是却从心底里有中莫名的恐惧,因为恐惧来源于莫名,对于不可捉摸的未来任何动物都是恐惧的。


十一月十四日 天气很好吗?挺冷的。

半夜从恶梦中醒来,那完全是离奇的恐怖,中心思想却应征了英语的那句成语a skeleton in one man's cupboard。DC说raja也不过就是想要把公司发展到某一阶段出卖,这是所有高科技公司的梦想,仿佛妓院的老鸨把小女孩买回来培养长大了卖个好价钱一样,问题是我估计他有可能还没卖出去就把置买首饰的钱赔光了。

所谓的噩梦是因人而异的,如果你对与很多别人的恐惧司空见惯那么自然不以为是噩梦,比如美国人如果碰到最高法院的大法官贪赃枉法被送进监狱那一定会说这是 一场恶梦因为如果象征国家公平公正的最后保障的最高法院的大法官都落入自己信誓旦旦要维护的原则的套索里,那这个国家还有什么希望?应该说普通人还有什么 期望?这不是国家的噩梦是什么?然则,这个国家的人民却因为司空见惯对于噩梦有了抵抗力在梦境中发出某种看低劣恐怖片看穿了俗套后的会心的微笑,这在初来 乍到刚刚从外地跑来看本地影剧院的观众感到莫名的恐惧,一个民族对与别个民族的恐惧有了坚强的抵抗力在旁人看起来也是一种恐惧。无知者无畏,无知者无所 谓。


十一月十五日 天气很好吗?非常暖和。

帝国斜阳匆匆划过寂静的天空,一个帝国在不知不觉中衰老,大概没有任何一个帝国能够维持军事的超强地位而没有经济实力的保障,这个是共和党候选人麦凯恩的 陈述。大英帝国在击破无敌舰队后取代西班牙成为军事经济的霸主,两次世界大战挖空了帝国的脊梁,于是美国崛起了,于是苏联崛起了,然后日本德国在经济上崛 起了,然后苏联没落了,然后美国在能够同时打赢两场战争的指导思想下同时在阿富汗与伊拉克开战,然而如同苏联在阿富汗的遭遇一样强大的战争机器无法有效的 兑付比游击战还要无形的恐怖主义,装备精良的美国大兵在伊拉克称了维持治安的宪兵,每个月一百亿美金是否真的值得?在阿富汗和伊拉克一样的问题是精兵政策 对于进攻是有效的因为节省的大量的资源用于高科技武器的装备研发,但是在防御的时候,没有基本的兵力武器装备在先进也是捉襟见肘,何况阿富汗一贫如洗还不 如伊拉克可以在占领的同时以战养战,这两场战争注定要拖垮美国,金融危机看起来和战争是无关的,但是和在一起却是致命的,那就是撼动了美元的世界货币地位 从而动摇了美国作为经济霸主的地位,进而撼动了美国帝国的政治军事霸主地位,因为这就是麦凯恩所说的从来没有一个帝国可以在经济实力是去霸主地位的时候仍 然维持军事的霸主地位。 渔舟唱晚似的历史长河就发生在一个秋雨缠绵的星期六的早晨,雨丝无知觉得贴在你的额头混合着汗水流下你的脸颊,秋雨是无形的,唯一能够听到的就是雨滴打在 满地金黄落叶的滴答声,加拿大的枫叶并不都是红的,今年的冬天或许太暖和了枫叶还没有变红就凋零了,在无风的早晨自由的下落,仿佛漩涡上漂浮着一样的旋转 着,翻转着,在这一刻空气与时间仿佛已经凝固了,你可以融合在这自然的恬静中,也许文字对于感受的描述到了尽头,我只能使用里查德克莱德曼的浪漫钢琴曲来 形容,就是那首秋日的雨思。

case isnull(b.imea, 'null')
when 'null' then 'no'
else 'yes'
end
as 'IsPart1004Sim'

学习使用资源感染替换文件,结果我自己把自己搞糊涂了。要记住一点,资源文件loadresource得到的指针不需要释放,因为你用 lockresource使用的hmodule代表文件已经在内存了,使用beginupdateresource实际上类似于loadlibrary最 后使用endupdateresource释放。vc6最大的毛病就在于资源编辑器,这个东西bug太多了,我被他搞得稀里糊涂。暂时保存一个版本吧。

<music and lyrics>的男女主人公大概在成功人士眼中都是社会竞争中的loser,女主人公因为一次失败的恋爱从此一蹶不振连文学的便都不敢粘,只好寄生 在姐姐的公司里打杂带带孩子做babysitter,替别人家浇花赚点零花钱;男主人公其实更加的凄惨因为相比之下他的搭档挣的钱堆成了山,而他却沦落到 在游乐场里表演,在同学聚会上演唱勉强靠着当年的荣耀苟延残喘,这种曾经拥有比任何人都要好的机会却一事无成的痛苦又远远比普通人来的难以忍受。这就是故 事的主题,一对各自生活在过去阴影的男女如何帮助彼此重新开始他们的人生。


十一月十七日 天气很好吗?非常冷。

应该建立这样一种观念,远程调试没有什么神奇的地方,首先,从前DC的那个所谓的小断点应该不不过就是RaiseException (EXCEPTION_CONTINUE_SEARCH, 0, NULL, NULL);而实际上,你完全可以不需要这个exception来引发just-in-time-debug,因为你可以msdev -p pid,另外一个参数是-e eventid,这个event是exception做的,这是一种纯粹的约定,debugee要等待debugger初始化。至于说这个jit- debugger的设定:hk_localmachine/software/microsoft/windows NT/currentversion/AeDebugger。至于源代码那就是完全是和远程调试无关的问题了,原本debug版本就在文件的最后有这么一 个.pdb文件的路径,这个就是包含了代码信息的吧?Sorry, 更正,DC使用的是winapi,DebugBreakProcess(我猜的,等看了代码才能知道。)

下雪了,气温是零上一度。

在注册表里面把view source/editor name改成你想要得编辑器,比如notepad.exe。在system32里面的nslookup.exe好像dnsclient一样。


十一月十八日 天气很好吗?非常冷。

mspdb60.dll原本在msdev98目录下,大概是环境路径设置的问题,使用dumpbin需要使用link.exe有要求这个dll,必须把它 拷贝到vc98/bin下面。mshtml.dll是我们的首要目标,因为并不是仅仅包含interface,里面的coclass就是实现,所以应该可 以直接使用htmlparser为我们所用,第一步就是coinitialize,然后cocreateinstance, clsid_htmldocument在注册表里面有,说明这个是注册的,其他的辅助的coclass在注册表里找不到,说明不应该直接使用,不过我在 mshtml.h里面并没有看到直接的声明,为什么?也许是vc98的过于古老?总之,我相信com也不过是另一种形式的dll没有什么了不起的,不要被 他吓倒,该怎么干还是怎么办,see it through!

我的努力不会白费的,我现在比十年前要更加的接近我的目标了,现在我至少可以做很多当年我连想都不知道从何想的事情,现在只不过是在从前想象中的途径中逐 一尝试一个个的否定的过程,现在几乎没有什么是我完全不可能做到的,只不过需要多少时间,能做到多好的问题,听到某些评论说什么“technology is cheap“,我实在是懒得反驳,因为在怎么cheap也是别人的,你只不过在使用,或许如同中国的血汗工厂一样,在某一段时间你依靠无与伦比的廉价劳动 力,依靠偷税漏税等等手段看上去赚了点钱,可是,技术依然是别人的,DVD解码芯片再便宜也是别人的,windowsxp盗版光碟再便宜也是别人的,没有 基本的实践就算微软把源代码都公开了对你也是没有用。

union的逆过程就是把一个表变成若干个表。(废话)


十一月十九日 天气很好吗?非常冷。

我表面上看是获得了ihtmldocument2得指针,但是readystate显示uninitialize,并且这个open方法我觉得不像是打开 网页url的方法,同时我发现了老问题就是sdk和mfc的atl的不兼容问题,或许两个问题都存在就是我到底能不能直接使用mshtml.dll的 coclass而不是像通常那样创建一个window或者control的container来使用他的parser?这个trident看上去是三位一 体的?我能够不使用webbrowser直接创建ihtmldocument吗?这些问题经常让我很恼火,因为回过头来这个就像是html里面怎样上传文 件或者资源文件从哪里获得一样的基本的不能再基本的问题,可是我却不知道怎样获得答案,只能摸索。也许我需要使用imoniker创建一个数据流“喂”给 ihtmldocument,难道ihtmldocument4的createdocumentfromurl不是这个意思?

摸索了快一天,终于发现我的错误,ihtmldocument2的open方法有多种用途,不仅仅打开文件,还可以打开窗体,写的结果,于是参数很复杂, 我没有读的很仔细,全搞错了,第一个要text/html,成功是可以,但是遇到了网上所讨论的问题,这个是一个blocking的过程,要去检查 readystate,所以要设定eventhandler,这个比较复杂,明天再看吧,总之,摸索了一天也是有些收获的,很多的coclass之类的 guid在注册里面有的话,你就可以直接使用cocreateinstance获得,但是对于微软那些在mshtml.dll里面没有暴露的 coclass就没办法了,就算使用dllgetclassobject他也不给你。当然这原来就是原则,只给你接口不给你实现。

蒙特利尔的冬天来了,天空是冰冷的铅灰,地面是僵死的阴翳,唯一映入眼帘的鲜艳是十字路口的红灯, 而她传达的信息只是危险和等待。
collate可以在创建createtable里面设定。


十一月二十日 天气很好吗?非常冷。

犯了一个讨厌的错误,我的查询条件是两个表的union,结果我有一个否定条件,但是我一不小心在两个表里面提前使用否定条件,结果集当然就不对了。关于 ihtmldocument2这个接口我认为ie里面导出的也不过是mshtml.dll里面的,就是说ie是空壳子,这一点msdn说的很明确,只不过 在shdocvw.dll里面是否越俎代庖作了一些iwebbrowser之类以外的工作呢?我认为不大可能因为这个不符合逻辑,就是说wininet负 责数据流,mshtml.dll负责parse之类的,shdocvw.dll负责上层的browsing之类的,这应该就是trident的框架。那么 我的计划就是学习imoniker的使用,配合ipersistentinit这个接口,我想使用我原来关于wininet的代码改装成stream作为 ihtmldocument的输入,这个是一个猜想,需要试验。


十一月二十一日 天气很好吗?非常冷。

经过好几天的疯狂搜索摸索大概明白了,基本的情况就是但凡是个programmer就会有和我类似的想法,那就是怎样使用mshtml的强大的 parser的功能,但是又不使用ui或者ie的实例,否则这就不成为问题了,因为:1。使用mfc的那个chtmlview基本上你什么都不用作了,调 用iwebbrowser2获得ihtmldocument2你就获得了一切,但是前提是你要忍受mfc的繁琐,而且据说有不少的bug。2。你直接使用 cocreateinstance创建ie的实例,这个比mfc来的好一点点,至少没有那么多bug,但是前提是太浪费了,如果你仅仅就想要parse- html你需要ui吗?3。直接创建那个不公开的htmldocument的coclass是你的真正目的,创建不成问题(其实也还有不少问题,对于我这 类初学者来说,有不少的困惑,首先mshtml.h如果是vc98自带的太旧了,使用import mshtml.tlb要小心和sdk2003冲突,使用sdk和comdef.h又有冲突,我都忘了由多少问题了。)但是问题很多:a)使用从 ihtmldocument2的IPersistStreamInit并不能够如msdn所说的解决问题,无论是使用ipersiststream还是这 个,不论是从文件还是从内存创建istream接口最终ihtmldocument2的readystate始终都是loading,我猜想这个状态也许 需要iwebbrowser之类的设定,或者回调函数,或者什么事件之类的,总之,trident结构不适非常完整的彼此独立。(当然是我们这些人不懂得 使用,微软也不讲的很清楚,否则大家都不用ie自己去玩了。)b)有位大虾展示使用imarkupservices来调用parsestring这 个非常的好,因为你直接就得到结果不需要什么documentcomplete之类的,问题是我照着做了,结果也是对的,(我一开始搞错了,原因在于这个 service创建了一个新的document,你要获得那个才行,原有的document只不过是个引子)但是,稍微的有些繁琐。c)这个俄罗斯的小伙子的东西解决我的这几天的疑惑,ihtmldocument2原本就是指支持safearray的,不要用什么流来写,或者open,所以,我认为这个比较好。

超级淫荡的《淫荡的耗酒大会代表了当代的主流文化,象征着美国六十年代嬉皮士文化终于在中国开始生根发芽开花结果,不出十年中国就会变成一个更加欣欣向荣繁荣昌盛的现代封建中央集权加国家垄断资本主义的共同体。

我小时候很天真的以为天底下如伊能静,萸澄庆这搬金童玉女郎才女貌诗人间绝配,长大了才意识到天底下没有不散的宴席,所谓的两个人的幸福根本就是幻想,很多时候不如换取四个人的幸福,四个人的幸福不如换取八个人十六个人的幸福。。。以此类推。。。

发现了一个小bug,上传文件的时候长文件名我按照max_path处理却忘记了数据库里面我的文件名字段的长度有限制,当初是为了查询的key的长度在 mysql里面有一千个字节的长度限制我才缩减的,因为还有其他的字段作为key。(记住,我的最新版本是'database‘)


十一月二十二日 天气很好吗?非常冷,非常冷。

昨天的工作并不成功,那两个方法都不太行,基本上不可能正常工作,今天我终于找到了msdn屡屡提到的例子,walkall_example, 微软的很多例子都在这里。一开始我一直怀疑mshtml没有正常工作是因为没有使用虚拟机进行动态脚本的PARSING而仅仅是HTML语法的 PARSING,当然这是荒谬的,完全无理由的,现在看来还是ENCODING的一些原因,其他的原因当然是因为你要HOST这个冬冬你必须事先几个基本 的接口,要把MSHTML当作ACTIVE DOCUMENT,至于这个是什么,我要继续学习,另外就是接口的AGGREGATE,这个我也仅仅是明白个目的,具体就都不知道了,就是明白一个 WHY。昨天晚上在想来加拿大这几年来最经常听到的问到的就是UNDERSTANDING,究竟为什么总要问我是否明白? I just don't understand why people keep asking me if I understand. 可是实际上你是否明白一个事情是很难说得,中国人检验你是否明白就是考试,那一堆东西问你是否记住了,可是中国这一套并不是万能灵药,很多时候你是否明白 一个简单的道理并不是明白这个道理的目的,明白仅仅是一个手段,真正的目的还是解决某些问题,也许在中国很多时候解决问题成为一个次要问题,正像 《yes,prime minister》里面的内阁秘书所说的,“重要的不是解决问题而是提出问题发现问题”,这就是考试的目的,发现你的问题,当然没有义务去解决你的问题, 考试完毕,问题还在,敲门砖却不需要了。

我的问题就是要试验是否问题出在输入的url没有采用正确的encoding的问题,这个问题究竟是谁必须负责的?我常常的觉得很不可理解,因为照理说 baidu的链接应该在发送给服务器的时候就改称安全字符因为服务器需要防止恶意运行脚本之类的,可是为什么发送的链接在地址兰里面还是中文呢? encoding是一个非常头疼的问题,我始终不明白。


十一月二十三日 天气很好吗?非常冷,非常冷。

在一个小时之内,跑到皇家山顶,然后再跑到chinatown,当然是连走带跑了。之后觉得很郁闷就花巨资买了一套冬天的运动的衣裤鞋子,这就是全部美械装备的整编师的开销:400块+plus tax。


十一月二十五日 天气很好吗?非常冷,非常冷。

这个大概是结论:使用mshtml作为parser不是简单的dll的调用,也不是简单的创建com元素,只能遵循olecontrol的原则,因为有几 个接口必须要实现,否则无法正常和mshtml通讯。这个原本我就看到一个例子也早就知道应该是这样只是一直不想这么麻烦,当然了那个例子是用纯c来模拟 虚方法表非常的不好用,因为我没办法再去使用智能指针了。(变异很麻烦吧?)

1。实现一个comevent,这个是从idispatch继承而来,在invoke的实现里面加上DISPID_HTMLWINDOWEVENTS2_ONLOAD其他都可以使用DISP_E_MEMBERNOTFOUND而不用实现。

2。创建com对象cocreateinstance,使用CLSID_HTMLDocument作为clsid,获得Ihtmldocument2的接 口,然后获得parentwindow接口IHTMLWindow2。创建我们的事件对象,并用这个window接口指针初始化我们的事件。

3。在初始化事件对象的时候,要从IHTMLWindow2获得IConnectionPointContainer,然后 FindConnectionPoint获得IConnectionPoint指针,调用他的Advise方法把我们这个event类的地址连同一个 dword做参数,将来这个dword要作为unadvise的标志。

4。从IHTMLDocument2接口获得IOleObject接口调用他的SetClientSite方法把我们这个类的地址传入。糟糕忘记说明这个主要的实现类了,他要实现这么几个接口:IPropertyNotifySink, IOleClientSite, IDispatch,大部分都可以使用E_NOTIMPL来不实现。

(要去上班了,回头再总结。不过这个好像很多人都写过类似的说明流程。)

冒着大雨买了一个xbox360时那种最便宜无人和配件的空壳子,我发现她唯一的用途就是播放DVD,这样看来不如买PS3,可以播放蓝光,据说还可以编 程。两百块钱买了一个高级的DVD,还有hdmi免费送的,包括两年的futureshop的guarantee,也还算不错,反正我一直想买hdmi的 线,舍不得。用xbox播放DVD的好处在于使用hdmi,这和普通的component cable有着巨大的区别。


十一月二十七日 天气很好吗?也不算很冷因为下雨了。

百度是一个大大的asshole!我不知道他们是否是故意的,反正我有很多的困惑,我花了快一个小时在寻找一个奇怪的问题,我运行walkall这个例 子,在debug状态和直接运行状态连接到的“百度”的网页是不一样的,我怀疑也许是encoding的问题,因为百度这个混蛋有时候使用汉字做参数,有 时候又不用,我实在高不懂他们的服务器怎么回事。

也许我原来就差一步,就是说使用mshtml的时候用IID_IPersistMoniker的load方法的时候你没有办法获得complete的状态 是因为htmldocument透过IPropertyNotifySink的事件来通知的,直接察看IHTMLDocument德readystate 是不行的,在这个接口的OnChange方法中如果状态为DISPID_READYSTATE时候你可以query mshtml使用invoke方法,直到返回状态成为READYSTATE_COMPLETE,这个才是我当初始终无法解决的问题。这个获得通知的前提是 你要获得mshtml的IconnectionPointContainer的接口,调用他的FindConnectionPoint得方法,以便获得 IID_IPropertyNotifySink的接口,调用他的advise方法来通知我们自己这个类,大概回调函数之类的是靠这个机制设定的,

如果你获得了BSTR要使用sysfreestring释放。当然这两天恐怖分子袭击了孟买,实在是了无新意,又是911那一套,这种喜剧是否应该换换花样了。

终于找到了,花了不少时间,DC也是普通的途径就是从当前window德hwnd调用enumwindow寻找浏览器的window,这个我早就看到有人 这么说了,只不过我还向尝试看看com里面有没有什么作图的办法,看来不大可能。假如当年希特勒采纳了古德里安的大胆穿插的装甲突击战略现在的历史可能就 要改写了,到底纳粹的恐怖统治更加恐怖还是所谓的社会主义的恐怖更加恐怖?这个问题很难回答。


十一月二十九日 天气很好吗?也不算很冷因为下雨了。

好 莱坞的电影题材经常重复,比如我早上偶然看到的六十年代的黑白电影《The Last Man on Earth》和Will Smith的新片子《I am legend》几乎是一模一样,只不过这一类电影大概是每一个演员演绎生涯的理想:一个独角戏而且要通过各种自言自语形体动作表情表达内心感受,因为除了 回忆没有任何人与人之间的交流,所以会安排人与动物的交流,感情,而且不能让观众感到乏味,所以要安排主人公与僵尸的战斗,最后在把所有电影都离不开的女 主人公加进来。有时候,你会wonder是否电影一定要有女人的存在?不过话说回来了女人是电影的主要观众之一,但是否这就一定要求电影必须有女人呢?更 正一下,这个电影就是翻拍,因为没有导演敢侮辱美国观众的智商,除非它的投资人敢拿钱开玩笑,不过这个定理在中国不一定成立,就像童话故事里面皇帝的新衣 是拿国民的智商的污辱,但是在中国如果民意可以被强奸,再被剥光了衣服的人民的身上撒泼尿侮辱一下又有什么不合理的呢?有的地方说是四万亿的投资拉动经 济,我觉得这大概也是侮辱公众智慧的一个绝佳的例子,中央定下了用投资拉动消费的调子,各级地方政府在层层加码实际上成了游艺场官商勾结名正言顺发达才的 理由!

中国的经济问题在哪里?是经济危机,因为无限扩大的生产能力无法有充分的市场需求来满足,中国的经济主体中成长最快贡献最多,解决就业创造价值最有活力的 是什么?是私有中小企业外向型经济,是轻工业消费品生产,这一类的企业需要的是欧美个人消费品市场的支撑,而无能腐败的中国政府低效重复的大型所谓基础建 设投资能够直接启动内需市场吗?不是中国没有市场,而是劳动人民没有钱去消费。很多人口口声声说中国人有钱,可是他指的恐怕是社会的1%到5%,90%的 普通人还无法成为欧美消费市场的替代,所以这是缘木求鱼。

政府花钱就能够改善经济状况的话,那么这个世界上就没有无能的政府了,因为布什政府不会花钱来拉动经济吗?难道“大跃进”是只有中国人才有的幼稚与天真 吗?想起这个我就觉得好笑,如果这个办法可行的话为什么全世界的政府不全都采纳每年拼命花钱来吧世界的每个国家的GDP增长都拉动到10%以上?难道这个 又是一个侮辱13亿人民智商的玩笑?“商民族”大概是世界八大文明里面最弱小的一个民族,大和的武士刀很强,拜占庭的骑兵是第一,英伦的长弓兵射程加一, 阿拉伯的骆驼兵便宜又骁悍,法国的火炮还便宜,微软的帝国时代把商民族描述成唯独只有农民便宜不是完全没有道理的,历史上这个民族出了惊人的繁殖能力实在 乏善可陈,不论有多少外族的蹂躏都可以忍辱负重把种族继续繁衍下去而且更加的人口众多,甚至连侵略者都被最后血缘的融合所打败了,蒙古骑兵那么彪悍居然经 不起中华小女子的温柔乡不到一百年就退化了,清兵入关不过十几万人杀遍了大江南北少说也杀了好几百万,可是我们优秀的中华妇女很快又繁殖出了几千万,而且 还把旗人的基因都退化了,以至于八国联军之需要几千人就能打败四亿人口的大国,日本的中国派遣军当初的计划使用十万人的部队统一中国,其实这个目标是达到 了,因为日本人的战争能力相对于当时真正的欧洲列强差了一个数量级,不是同一个档次,如果是纳粹德国大概一半人就够了。只不过这些征服者都没有想到一个事 实,中华民族从来都是可以靠生育能力来战胜统治者的,割头如同割酒菜,割完了再长,还长得更多。如果用《matrix》里面Agent Smith的话来形容,这个世界上只有一种生物能够有相似的生存模式来形容,那就是老鼠,即便在核战争时候也能生存下来,用巨大的数量来弥补个体质量的不 足,仅仅消耗比其他种族少的多的资源就能繁殖出比其他种族多的多的个体,这就是中华民族的生存之道。虽然可悲但是实用,存在就是合理的。

有 时候,我在想商民族的孱弱是否是因为中国妇女造成的,因为女人是种族基因的主要承载者,同时她们是达尔文适者生存原则的执行者,因为如果妇女不去选择交配 的对象怎么能够体现适者生存的基因遗传到后代呢?北欧和加拿大的妇女异常强健她们完全有能力挑选她们认为优秀的基因个体来繁殖,大概中国妇女太过于弱小了 吧?所以红颜祸国在这个层面上也是成立的。因此我们的结论是中华民族的衰落是从某个时期中国妇女的软弱造成的,这样说来我觉得中国的那些所谓“足球迷“会为中国足球的丢人现眼感到好受一些。

皇帝的新衣在什么情况下可以成立?在全体人民不吭声或者不能发出任何声音的情况下。在中国你以匿名的方式发表一些个人想法观点是一种犯罪,这个极端的例子 只有在西方幻想的《1984》似的时代里才会发生,就是所谓“思想犯罪”(thought crime),如果连动一动念头都算犯罪的话每天不知道有多少人在犯罪,网络警察(thought police)整天坐在监视器的那一头监视着你的一言一行,只要是不同于执政者的声音都是“危害国家安全罪”,这样的集权统治不是好莱坞的电影而是活生生 的事实。究竟这样的社会有什么致命的问题?从统治者的角度来看奴隶制是最安全的社会,最稳定,最容易统治,一切都可以依靠极端的暴力与镇压来实现,为什么 社会的统治者不继续采用?是因为人民的反抗无法继续吗?我小时候学习马克思主义政治经济学被灌输的观点就是人民的反抗导致奴隶社会进化到了封建社会,人民 是历史的创造者,统治者要顺从人民的医院改革社会等等,那时候很天真以为都是真的,听上去也很合理。现在回过头来想才知道都是骗人的腐儒的谎言,社会的进 步根本就不是靠人民的反抗来实现的,作为拥有国家机器的政权可以用最残暴的暴力让人民屈服,即便改朝换代了还会继续沿用旧的体制,社会的进步绝对绝对不是 依靠人民的反抗来实现的,人民压根就不是所谓的历史创造者,这都是欺骗,真正的因素是外族的入侵,相互竞争的国家之间的社会生产力发展水平的激励。国无外 患常亡的道理导致国家统治者必须寻求更高的劳动生产力,生产效率的提高不仅仅是机械科技的进步,更加需要劳动者的努力与积极,而奴隶社会的社会分配不可能 激发奴隶的生产热情导致某些实行封建制度的邻国生产力高于奴隶制国家威胁了统治者的安全而不得不跟进实行封建制度。如果没有国家竞争中国发展了两千年也不 会诞生资本主义,只有一代又一代的农民起义从一个封建制度换成另一个封建王朝,即便今天的共产党实质上也不过是依靠又一场农民起义登上权力巅峰的封建君主 制王朝,你如果幻想这样的集权统治能够够自己跟新到资本主义那就是痴人说梦,在登上两千年也是一样。唯一的原因就是世界各国的生产力竞争促使统治者考虑采 用更加有效率的生产体制,中国普通人期待“明君”“清官”的思想根本是一种思想毒药,只有依靠我们强大的日本邻居美国伙伴才能促使“传着赤裸的皇帝新衣” 的统治者从沾沾自喜中稍稍情形披上一件“政治改革”的遮羞布在腰间,睁开眼睛看到当前生产力与生产关系的不适应,因为国家的竞争就是残酷的达尔文似的适者 生存的淘汰赛。所以,基于此只有让美国日本不断的威胁中共的统治才能促使改革继续下去,也就需要进一步促使美国日本感到目前中国的潜在威胁,如果让双方的 关系更加紧张对于双方都是更加的有利。“国无外患常亡“。

细节就是必须找到“Internet Explorer_Server“这个window,这个window才是我们要画的窗口。


十一月三十日 天气很好吗?也不算很冷因为下雪了。

英国的老太太们很有意思,她们环游世界寻找最理想的妓院,最后发现新西兰的妓院条件最好,性工作者在当地都是合法的合同制员工,老太太在参观了装修华丽典 雅的工作室后高兴的询问几个妓女是否喜欢她们的工作,这些性工作者很高兴的回答说喜欢,因为每个星期发工资,是合法工作,可以选择是否接客,工作环境舒适 宜人。这些老太太们也很高兴。

早就听说英国德中学性教育课非常的贴近现实,不仅仅教授性技巧还赶时髦的讲解同性恋的性技巧,呵呵,当然这部电影是纯粹的搞笑,性教育课的老师直接把自己的老婆叫到课堂现场示范。

老太太们很有趣,把一个房车就是那种很舒适的trailer改造成了“活动妓院”(mobile brothel),还发起了一个万人签名请愿运动要求唐宁街十号让妓院合法化。


十二月一日 天气很好吗?也不算很冷因为雪又化了。

加拿大的政局发生了戏剧化的变化,三大反对党联合起来要推翻conservative的少数政府,这个在道义上是否站的住脚我不知道,不过这个又一次引发 了我的感慨,刚来加拿大的时候看到有黑板上写的political science的字样常常觉得好笑,因为在传统的中国人眼中政治那有科学可言,几千年的封建统治教育了中国的普通人就是政治就是你死我活的肉体消灭,根本 不需要科学,只需要阴谋与诡计,而且屡屡觉得西方人不会像中国政治家一样的擅长计谋与圈套,我们甚至为此沾沾自喜意味着就是文明的标签。在加拿大待久了, 突然发现人和人之间还有另一种共生共存的方式,对于政治上的敌人有时候使用肉体的消灭并不是共同利益的最大化,因为这个好像美国成熟的黑帮家族之间的竞争 一样,消灭对方并不是目的,各自发展才是最终的选择,除非有着不可调和的矛盾。文明的进步就是社会利益分配越来越平衡,越来越给弱势群体一个公平的起点, 给予此,正值的确是一门科学,怎样设计政治体制是一门大学问,当年美国独立建国华盛顿亚当斯密斯等人为国体的设计煞费苦心,其间还有不少的调整,就是为了 能够有一个互相制约维护公平的体制。最直接的就是选举制度的选择,比如像台湾这种体制少数派政党当选是可以组阁,而加拿大却能够发生议会反对党联合倒戈政 府,这中间是很奥妙的,假如台湾采取的是类似于加拿大的体制就完全可以制约陈水扁的无法无天,他的贪污腐化有一半的责任在反对党的监督不力,就是说反对党 的权力太小。同样的,政党如果像美国一样的两党制,也不会出现这种“少数派政府”被反对党倒阁的问题,不过这个前提就是政党必须要兼容最多的不同声音,这 个对于有独特主张的政党比如”绿党“就根本不可能诞生了。孰利孰弊是一个很难权衡的问题,因此从这个意义上来看说政治是一门科学一点都不过分,只不过世界 上各种政治体制的弊端不管有多大都大不过“共产党“的一党独裁式的封建集权恐怖统治,这根本在这个世界上没有任何可以竞争的可能性,国内媒体那种欺骗使得 宣传让很多人错误的一位中国的经济增长是这个共产党的功劳,这正如同很多人天真地以为个别政治家能够起到扭转乾坤的作用一样的幼稚。

事实上中国的经济增长是“长期以来被压抑的生产力得到释放的结果”,和中国共产党的统治并无关系,甚至我们可以认为共产党的统治在几十年中抑制了经济的正 常增长,长期压抑了经济增长的要求,所谓的改革开放本来就是把原本应该拥有的增长释放出来了,换句话说,没有共产党可能中国在几十年前就能够得到现在的经 济增长。那种拿印度和中国做对比来说明共产党的统治成就是不足为信的。

我自己写的木马现在在暴露我自己的隐私,我居然忘记了。(http://nickhuang99.dynalias.com:1001)


十二月三日 天气很好吗?还可以,因为天不冷,居然有零上一度。

DC叫我写一个小函数搜索目录下面一定规则的文件名的最新的一个,我原本觉得这个简单的东西我已经写的很好了,结果发现还是有两个很大的失误,首先, findfirst可以给与pattern所以根本不需要我自己去解析,其次,判断是否为subdirectory的时候我已经获得了 find_file_data32了居然还去掉用getfileattribute却不知道ffd的成员就是我要的,这个真实非常的 embarrassing。这两天帮助andy移植emulator到linux上,感觉这的确不是一个简单的工作,因为你要对与两个平台都很熟悉,所谓 的熟悉绝对不能是那种知道概念的熟悉,比如sysV的semaphore我应该用过不止一次了,结果却还是花了半天才看明白sem_post就是我所要得 unlock,至于windows的大量的typedef就更是一个很头疼的事情了,这个工作还是很有意思的,因为我一直想尝试一下gtk的使用。有多长 时间没有给街头的劳动人民零用钱了,今天老头子结果我的两三个quarter真挚道谢说:Thank you, my friend,God bless you。让我非常的感动。只有穷人才会真心实意地帮助穷人。眼睛太疼冷了,我始终没有办法集中注意力包装那个mshtml,看到一片文章使用 ihtmlelement2把ihtmlElementBehaviorFactory指针传递进取,在定义一个elementBehavior以便在他 的init方法中获得ihtmlelementBehaviorSite指针,使用这个指针我们可以获得ihtmlPaintSite接口,使用这个接口 我们可以调用他的invalidRect导致重画的message,这个正是我使用hwnd的hdc总是不成功的一个解决办法,那种通过 enumchildwindow的得到的Internet Explorer_Server的window hwnd不行的。

我觉得不看一些书这个完全就是瞎摸索,一口气在亚马逊花巨资订购了四本书《inside dynamic html》,《inside com》, 《inside ole》,《understanding activeX and com》,平均每本书售价都不到一块钱,但是运费却都要比书价贵好多。


十二月四日 天气很好吗?还可以,因为天不冷,居然有零上一度。

状态不佳,感觉很疲惫,尝试把那个walkall的sample包装成一个容易使用的类,原本想使用event代替message,后来一看才发现原来不行,因为quitmessage不知道是谁发出的,也许是哪个看不见的window?太多的未知数。

DC在逗我玩,他给我看了一个CLSID_WebBrowser,我当时很怀疑,迟疑了几秒钟,他看见trick奏效了,就告诉我说这是不存在的。的确我印象中不能这样子的。
今天我们在把所谓的jpeg“重新“移植回unix,这个是个笑话,因为原来代码就是可以跨平台的,不过DC实现了一些memory- management以便在内存内压缩解压缩,并且删掉了很多不常用的东西,我以前和他做的几乎是一抹一样的做法,想法也很接近,因为tar,tiff之 类的我都不需要。不过这样就牵涉到makefile的再造问题,我问他它的建议也有些意思,就是从vc6的lib工程里面导出来,这样应该是可行的,主要 就是看文件的dependency能不能正确生成了。

今天最重要的成果就是我发现了我的解决方案,参照网络上的建议,就是替换windows procedure,这 样子可以在wm_paint事件里面画图这样可以在ie之后画就不会被她覆盖了。这个看样子是我周末的首要工作了。当前工作的重点就是包装mshtml- parser,另一个就是这个元素坐标位置的寻找了,DC的那个函数其实还是有些难度的,因为不仅仅是每个字窗口的相对位置在其父窗口的迪归计算,更重要 的是要确定当前窗口究竟有多少部分是可见的,算法并不简单,尤其是从com一层层的调用,他的函数好像还是有错,我始终想摆脱这个做法,不过这个问题不简 单。


十二月六日 天气很好吗?还可以,因为天不冷,零下三度。

Linux下的静态库的编译我全忘了,需要使用ar来编译超过一个以上的文件,否则你没有办法去单单使用-c来编译多个文件,实际上静态库原本和.o文件也没有什么区别,在链接使用上就很明确的,就把他们当作.o来连接。

看了一晚上的美国国会关于汽车工业要求救助的听证会,感觉美国的国会议员非常非常的精明智慧,我认为世界上的政治体制在美国达到的顶峰,当前的经济危机是 一个与人力无关的自然现象,不可避免,也无须避免,正如生物进化一样必须有一部分企业被淘汰以便让其他更强壮的企业占有更多的市场资源,政府救助无疑于抱 薪救火缘木求鱼南辕北辙扬汤止沸隔靴搔痒以卵投石。总之,中国的所谓积极财政如果全部用来修铁路也许有一些道理但是远水不解近渴,任何一个国家不可能在世 界大环境下独善其身。


十二月八日 天气很好吗?还可以,因为天不冷,零下十六度,感觉十九度。

怪不得这么冷原来下雪了,整天都很疲倦,下午又睡了一觉,昨天白天睡了两次,为什么周末的时候就整天睡觉?不知道为什么这么疲惫不堪?微软的com让我毫 无头绪,现在不过是简单的包装工作,却遇到了新的困难。实现IUnknown,IPropertyNotifySink,IOleClientSite, IDispatch,然而mshtml好像仅仅支持从IPersistFile和IID_IPersistMoniker的方式,mshtml明明支持 IPersistFile和IPersistMonikerh和IPersistStreamInit, 但是只有前面两个working,使用最后这个IPersistStreamInit和我当初使用ihtmldocument2接口测试遇到的问题时一样 的,就是documentcomplete实践始终没有被fire,我不论是使用CreateStreamOnHGlobal或者我自己简单的实现了一个 IStream的接口类,这个非常的简单,我试验了一下mshtml仅仅调用我的read方法以及iunknown的方法,在read的时候我还迷惑了一 下,我一开始认为我需要拷贝内容,出错之后我猜意识到read的方法是传递指针及其改变我内部的seek指针,不过seek方法根本没有人调用,在 read到文件结尾的时候我还是不确定是否应该返回错误还是仅仅返回读数为零,不过不论怎样实验似乎mshtml都能够正确地意识到文件结尾但是我始终没 有获得documentcomplete的事件,这个问题我看到有微软的说法是这是一个bug可以依靠ipersiststreaminit的 initnew来解决,但是好像完全不起作用,这也就使我怀疑这是微软故意不让你轻易的使用他的parser的原因,从urlmoniker和文件读取是 一定要,但是从内存的流却不一定了,iwebbrowser和mshtml的通讯业应该是iconnectionpointcontainer接口,所 以,如果这个假设是对的,那就是微软故意的。

使用multibytetowidebyte也是让我头疼的问题,我原来就发现一些不太明白的问题,现在更糊涂了,难道多字节一定要ansistring 吗?因为这个函数把我的widestring变成了加倍,难道他不会判断一下是不是输入的已经是unicode了吗?如果使用ipersistfile接 口的时候,文件名字要绝对路径。

我实在是不明白。google到很多的delphi的代码,让我回忆起了当年使用delphi的时光,那个时代是美好的,因为无知所以无畏, ignorance is bliss!当时我就觉得delphi调用windows的东西不如c语言来的直接,毕竟隔了一层,现在回过头来看那些网络上的帖子深深地感觉,我必须从 头学起,等到我买的四本书到了,我要好好从ole的基础学起,activex是ie的核心,不从头到尾绝对无法彻底解决问题。半夜了吗?睡觉吗?要么我保存一个版本吧

《little britain USA》大概是比午夜的late night show还要儿童不宜的节目,里面的笑话非常的粗,但是实在是让人不得不笑,大概是标准的成人笑话。


十二月九日 天气很好吗?还可以,因为下雪了,大概零下几度而已。

这位大虾的博课说的很清楚。 因为他总结了我这一段时间来所看到的所有的方法,但是关于ipersiststreaminit的一个细节还是没有说清楚,我想他要源代码,他也还没有回应。


十二月十二日 天气很好吗?还可以,因为下雪了,大概零下几度而已。

There are several lessons to learn.
1. Don't trust 'CentOS' any more. It is a disaster to install it to destroy my windows.
2. Never destroy your primary partition even you have ghost because ghost cannot restore without matching the size of file.
3. My network card is strange enough that it needs win2k driver plus a file from windowXP's driver file.
 

wine 和跨平台跨cpu架构移植。

目标:把windows的一个项目移植到国内生产的一种超低价“netbook”(实际就是基于linux-uburntoo的misp芯片的laptop,应该和acer的那种eeepc基本一样的)
项目概述:这个简单的应用程序是一个类似于浏览器的东西,不过html解析等等的工作在服务器端作了,仅仅把压缩的图片解压缩显示而已,但是需要响应用户的键盘鼠标事件传递回服务器。所以,会用到socket通讯,线程同步,基本的gui的。
 
公司的老人们统统不懂linux,希望能够在圣诞前移植完成,作出一个最基本的demo版本。一开始是另一个concordia学工程的小孩子在做,但是 他的问题是不熟悉windows,也不熟悉c++对于线程异步通讯之类的也不熟悉,因为他是做嵌入式开发的。我认为在这么短的时间做跨平台,跨cpu的移 植根本不可能,就算勉强作完了demo,将来真正移植问题更多,不如使用“wine”(http://en.wikipedia.org/wiki/Wine_(software) ),但是他们始终认为这里有模拟器的痕迹担心小笔记本硬件条件不够,(主要就是不想担责任),我昨天在pc的linux下编译运行完全可以运行 windows的binarycode,(当然有些activex之类的,和鼠标键盘有些微的问题,不过作为demo足够了。)结果现在又让我在星期一把 misp的移植做一个试验,(我争辩了半天,这个所谓的尝试如果成功了,就全部完成了,根本就不应该有两套方案,不过他们就是不肯担责任。)
这个领域我完全陌生,昨天下午的学习之明白了一个道理就是这个跨cpu的移植要自己编译gcc之作相应的编译器,国内的这个公司给出了非常详细的说明,(http://74.125.113.132/search?q=cache:ypCueAd61QEJ:ftp://ftp.ingenic.cn/3sw/01linux/08doc/mips_toolchain_guide.pdf+download+mipseltools-gcc412-lnx26.tar.gz&hl=zh-CN&ct=clnk&cd=5&gl=ca)不过我还是要今天尝试,设定正确的路径,此外关于linux我还有很多疑惑。
比如,关于glibc之类的library,在编译的时候我是怎样设置路径的,因为我担心我的linux默认的版本比我下载的版本高可能有问题。我印象时都在ld_library之类的environment variable设置,对不对?或者我就更该系统地symbolic link临时指向我的版本?
 

整个早晨都在尝试北京的这个脚本,问题是我无法下在国内这个公司在ftp的所有源代码, 最主要的是那个gcc的bug-patch,我怀疑编译不过是因为没有patch的原因,中间有一两个细节就是你要注意在输出目录opt往往使root建 立,并且需要用户创建文件目录的时候要开放权限。(在后面crosstool的时候又要求编译不能使root用户,这一点更要注意。)我们尝试向使用不同 版本的gcc与glibc来编译,但是,后来我想还是使用crosstool来吧,这是受这个老兄的启发

binutils-2.15.tar.bz2                    从ftp://ftp.gnu.org 下载

glibc-linuxthreads-2.3.6.tar.bz2           从ftp://ftp.gnu.org 下载

glibc-2.3.6.tar.gz                       从ftp://ftp.gnu.org 下载

gcc-3.4.5.tar.bz2                       从ftp://ftp.gnu.org 下载

linux-libc-headers-2.6.12.0.tar.bz2 从http://ep09.pld-linux.org/~mmazur/linux-libc-headers/下载

linux-2.6.18.1.tar.bz2   从http://www.kernel.org 下载

注意不能使用root用户编译,终于经过将近三个小时的编译,总算成功编译了toolchain的编译器,使用demo-mips.sh需要linux内核进行编译。

然后就是变异wine,这个也就是早晨我的疑惑,当你有了编译器之后你怎样变异library,怎样制作makefile,结果是这样的,./configure --prefix=/usr/local --host=mipsel-linux CC=mips-unknown-linux-gnu-gcc AR=mips-unknown-linux-gnu-ar  RANLIB=mips-unknown-linux-gnu-ranlib --with-wine-tools=/home/ayang/build/wine-1.0.1 --without-freetype --without-xcursor --without-xinerama --without-xcomposite --x-include=/usr/include/X11 --x-libraries=/usr/lib 这样子能够自动生成makefile,不过你还需要makedep来生成dependency文件,这个时候我们遇到了一个问题,就是这个 configure生成的makedep是MIPS的,这里andy的技巧就是使用普通不待参数的make depend生成linux host的makedep,再把这个替换以上产生的makedep。这个过程只需要一次就行了。

还有一个小得不能再小的问题就是下载tar文件的时候,有时候被改名为.tar.tar,可以使用file ...来检查,在改变文件名位tar.bz2,

但是这个时候我们遇到的前所未有的打击:wine 不能再mips上运行!?

可是我不甘心:

I think it over and there is still some hope for Wine because
 
a)   our program doesn't use too many "dlls".
For example, padcore.dll only uses following dlls:

WS2_32.dll
KERNEL32.dll
USER32.dll
GDI32.dll
WINSPOOL.DRV
ADVAPI32.dll
COMCTL32.dll 
 
And the VB gui program uses  

KERNEL32.dll
USER32.dll
GDI32.dll
ADVAPI32.dll
ole32.dll
OLEAUT32.dll
 
So, I am thinking maybe we just pickup those "dlls" from wine and compile with mips compiler and there are big chances that very few api are dependent on i386.
 
b) Even there are some windows api depending i386, still not all of those "#ifdefine __i386__" means error, check it out that many of them are just different implementations. (Only very few of them are really impossible to implement, like the one "interlockchange". However, in this case, I think we can change windows program to use other "api" or implement some "rough" code for demo purposes. )
 
c) We have reached so far and I don't want to give it up so easily! After all, we are allowed to try before Monday. This experiment won't take more than one day.
 
By doing this, you don't have to implement Denis code, instead you can just implement "windows API" in case i386 won't work. This is a great reduction in number of code! I think "Wine" only implements Windows API, instead of running x86 assembly instruction, right? (I am still not very clear about this.)

而且,

Also I read this in Wine official website and it seems to imply that wine IS able to run on MIPS. See below. It only requires winelib to be compiled with "toolchain compiler" which is what we are doing this afternoon! Only some of wine implementation is INCOMPLETE which doesn't mean it is unable to run. Don't you agree?
 
 
http://www.winehq.org/site/myths#only_x86

Myth 10: "Wine is for Intel x86 only"
Well, it is true that Wine only runs on Intel's x86 processors. Unfortunately it will also require quite a lot of work before it runs on other processor architectures.
But what do we mean by 'running on a non x86 processor'.
First it can mean 'I can compile a Windows application on Sparc, link it with Winelib, and have it run on Solaris'. I know, this is not what you had in mind. This may seem very restrictive and yet would be very useful: it means easy porting of Windows applications to almost any Unix architecture. In any case this is the first step towards allowing Wine to run on other processor architectures. Unfortunately Wine's code is not very portable to other processor architectures, partly because some parts of it have to know a lot about the processor, and partly because most of it makes assumptions like 'sizeof(int)==sizeof(pointer)' and 'byte-sex==little-endian'. This is being worked on though, and progress is being made albeit slowly.
Then we could take it to mean 'Wine on Alpha should be able to run Windows NT Alpha applications'. The prerequisite for this is that Winelib compiles on Alpha (or MIPS, the other defunct Windows NT platform). Now, would it be really useful? I don't think many people have Windows NT applications for the Alpha or MIPS processor. So this is probably not that useful and also rather unlikely to happen since we would need a programmer who has just this combination of hardware and software to work on it.
Then there's what everyone has been waiting for: 'I want to be able to run my x86 Windows applications on any processor architecture I like. That's the most complex one. Again the prerequisite is that Winelib works on this architecture, which will definitely happen someday. Then 'all that is needed' is to integrate an x86 emulator with Wine (and also change Wine's name :-). Ulrich Weigand just did that as an experiment some time ago when he had 'some spare time'. He even managed to get some Win16 applications to run. His code was not in a state where it could be integrated into Wine yet and I don't know how much work has been put into pursuing it. His attempt did spark many discussions on Wine's mailing list though. The result is that we would need a sophisticated emulator including a JIT in order to get something really viable (i.e. not too slow). And developing such an emulator is a whole project in itself.
Does it mean it will never happen? Not sure. Maybe we'll get some motivated developers once the Winelib problems are solved. Of course, it would happen much faster if, for instance, Compaq made its Fx32! Intel x86 emulator Open Source and financed the development of Wine for their Alpha machines. As with all Open Source projects, if enough people are interested and pool their resources together, it will happen.
 
 Also it seems each "dll" is an independent "module" which means we can probably compile whatever "dlls" we need.
If this is true, then it is very promising.

疲惫不堪的一天!!!好累!


十二月十三日 天气很好吗?还可以,因为下雪了,大概零下几度而已。

早晨醒来我觉得我想得比较清楚了。首先,所谓wine不支持mips的说法并不全对,wine原本就不是一个emulator,Wine Is Not Emulator, 所以并不是依赖于某种价购得cpu的,就如同linux并没有人说linux只能支持一种cpu一样的道理。其次,要理解wine的两种运行方式,第一, 普通用户或者没有window程序源代码的情况下运行wine,这时候wine是一个所谓的loader模拟windows的dll动态链接帮你运行 windows的dll,这个时候当然需要依赖于x86cpu,因为windows可执行程序里面除了微软的dll就是汇编,不管windows还是 linux只要是用同样的cpu无所谓汇编码的兼容性,汇编还是汇编,所不同的只是windows的dll怎么办,这里才是wine的核心,因为wine 实现了windows API再linux下调用所以看上去好像linux下得windows模拟器一样,实际上他根本不是虚拟机,他只是模拟windows操作系统。第二,如 果由windows程序源代码你可以把wine的实现的windows api当作lib来使用,(这就是我今天要试验的)这种情况下,wine就是一个winelib,更加没有架构的依赖了,只要linux能够支持的, wine就能运行。

然而,这并非说wine已经可以支持mips,首先,基于处理器指令的一些windowsapi是无法再mips上实现的,

我都不知道以下说的是什么,究竟哪个不支持的api叫什么我的忘了,因为好像我家里下载的事wine1.1版本大都实现了。也许是1.0版本没有来得及实现吧?不过,一下好像仅仅是一个general的argument已经没有什么意义了。

{这就是为什么有些函数没有实现,仿佛testandset指令一样无法实现,是纯粹的“硬”指令,如果非要实现那么不能保证函数返回值与当前改变的值得 一致了,(比如在函数里面加上linux的全局的semaphore来保证atomic操作,但是函数返回前你总要释放semaphore在返回,那么这 时候返回值就不是包含在atomic操作里面的)} 因为就像当初上操作系统课程的教授所说的,这种同步的问题原本是一个软件的问题,最后却去寻求硬件的解决,这一部分是真正学计算机专业与非专业最大不同的 地方之一。

突然又开始有了疑惑,我是否真的能够使用windows原码和winelib来连接吗?需要改变什么呢?除了vc++编译器扩展以外。

美国到了一个比较美妙的时期,big3是否应该生存?To be or not to be?美国政府不是不想救,怕的是救了汽车还有航空,还有零售等等的连锁反应,到时候美国就变成了落后得如同中国一样的社会主义了,但是坐视不管让部分选 民愤怒又有些不敢,至少民主党是这样。共和党应该还有些理智,因为big3到毕业回有别的汽车工业,只不过不一定是美国公司而已,而且国会手中的钱就剩下 那么几百亿美金还不知道有没有什么紧急事件发生要应急。

我常常感觉很多国人在看美国的经济危机暗自偷笑仿佛这是中国制度的胜利,这个正如同郎咸平和地产商谈话所说的,中国的企业家没有经历过经济危机从来没有抵 御经济萧条的思想准备,同样地中国的国民也没有这样的经历,很多人应该说绝大多数人并不知道什么是经济危机,所谓的三年自然灾害已经是上个世纪的事情了, 所以,中国的普通国民并没有思想准备,中国的官员如此,中国的政治体制如此。也许上个世纪的大萧条时期大多数的帝国主义政府也都没有准备好,所以,一场危 机就扩展为全球的危机,那么明年的中国经济增长降低到6%以下是完全不可能的吗?我想这种依靠国家储备强制经济增长的模式和计划经济时期的大干快上有什么 区别?如果这种政策能够成功那么中国为什么要放弃计划经济而要走资本主义道路?

为什么没到周末我就总要睡觉,上个星期天居然睡了三次觉,也许太疲劳了?可是感觉上我没有干什么正经事情,只有昨天经历比较多一些,但是我也没有做什么 coding,还大部分是andy在操作。所以,这么想我觉得不应该抱怨了,很可能使我太懒了。我下午向要试验的是使用windows程序源代码再 linux下编译,linking with winelib。如果我是对的,就仅仅是makefile的问题而已,因为除了vc6自己的编译器扩展外,没有什么不能编译的,不对吗?为什么我觉得这个 匪夷所思,是不是我那里犯了低级的致命的基本的错误?

想了一天的计划不到五分钟就破产了,因为kernel32里面不支持mips,比如context没定义,我有些死心了,因为这个东西被很多函数使用,后 来我在地铁上又想如果api实现的好的话会是一种“状态机”比如opengl的函数一样,就是说每个函数之间没有关联性,那么这样自我还是可以挑选我需要 的函数实现的,不过这个好像还是太理想了,很可能是由依赖关系的,大概只有一小部分的api可以没有依赖kernel32吧。看来跨架构的移植还是有一定 的难度的。

折腾了整整一天还是没有办法正确的安装运行fedora10,主要的问题就是mbr的问题,总之,网上的流行的做法是安装fedora但是不设置bootloader到mbr,而是在安装完后进入rescue模式,把linux的启动镜像拷贝下来,dd if=/dev/hdaX of=/bootsect.lnx bs=512 count=1 你需要fdisk-l 查询linux的启动分区代替X,这里你可以使用usb盘,就不用把windows的分区设为fat32来拷贝文件了。不过启动后无法进入graphic界面,就算我把/etc/inittab里面的runlevel改为5仍然失败。


十二月十五日 天气很好吗?还可以,因为下雪了,大概零下十几度而已。

布什被扔靴子,我觉得是一件好事,毕竟伊拉克人民已经敢于表达自己的意见观点不用担心丢掉性命,这本来就是不是推动中东和平路线图的目的,日本被美国占领 几十年而改造为民主社会,这个做法值得推广到全世界,可惜当年美国要把民主机制推广到被朝鲜和越南都被万恶的共产党挡了回去,今天美国在伊拉克推广民主机 制又一次遭到了恐怖分子的阻击,这么看来共产主义与恐怖主义有些雷同了?

大陆又在打击所谓的反洗钱,其实就是取缔地下钱庄,问题是金融业不开放自由竞争迟早有一天会成为经济发展的瓶颈,因为民族资本家需要的两样东西共产党一样 都没有去做,减税,融资。看到网络上评论所谓的温州炒房团的内幕你就能够想象中国的经济现状,这些所谓的温州人并不想买房子,因为买了你还要卖,他们的目 的就是资本增值,所以实际上是要贷款给开发商,开发商缺的是钱,银行不给贷款,所以他们需要温州人的购房合同区银行贷款,所以你可以看到中国的金融体制已 经到了一个变革的边缘了。

andy 发现我们做的编译器有问题,他说类似于以前碰到的arm上的busy-box的问题,我好像看到过那个patch提到过这个,所以,我们的跨平台编译器最 好还是重新按照ingenitic的方案来做,终于我想我找到了唯一可以使用的linux,那就是ubuntu,据说是德国人做的,德国人就是强,能够自 动调整分区大小完全帮我制作bootloader,正确找到声卡,显卡,网卡,oulala!万岁!ubuntu!我爱你!什么fedora, centos都是大问题。不过,且慢我怎么安装开发工具?初步查了一下没有。胡说八道,原来就预装了,如果使用linux没有gcc之类的编程工具这是很 奇怪的事情。我要再次大声呼吁:我爱你,ubuntu!!!!


十二月十六日 天气很好吗? 天气很好,很暖和,地上的雪都融化了。

andy发现了我们做的编译器的错误是因为使用crosstool的时候选定目标机器没有设定为big endian的问题,大概是.tls的文件。此外,ubuntu不给root权限,我就只能使用sudo来安装软件。andy打印的一篇博课文章对于理解 linux下的编译环境非常有帮助,首先来看动态链接库,这个事我以前一直想要搞明白的,现在明白了,在/etc/ld.so.conf.d目录下存放了 所有so文件的信息,比如libc.conf的内容就是他的so文件的路径。那么静态苦的信息呢?这个就是所谓的PKG_CONFIG_PATH所指明的 路径,在那个路径下有一个pkgconfig目录,下面存放着.pc文件,打开你可以看到prefix,include路径,名字,描述,版本,链接的明 细(这里我指的是使用L和使用l的时候应该如何比对名字,通常Lpathname,通常指的是路径,lnameversion往往指的是库名字和版本)。 那么ldconfig是做什么的呢?这个是对于动态库才有用的,他把刚才所说得ld.so.conf.d下的东西放到/etc/ld.so.cache里 面以便加快搜索,这个和静态库无关的。那么在代码里面写#include<gtk/gtk.h>这个include路径在那里定义呢?原来我 是按照windows的理解就是想在某个环境变亮里去定义,甚至准备再path里面定义,后来才明白,这个做法再windows里面早就是臭名昭著了, linux的做法好得多,你在连接得的时候给出了静态库的名字那么通过刚才所说得pkgconfig目录下得pc文件自然就有了include路径,这不 是要好一些吗?那么安装可执行文件还需要什么呢?当然就是$PATH路径下添加可执行文件的目录了。对于BASH你只需要更改$HOME/.bashrc 德export,然后source他,对于.bash_profile只有全局才需要吧?我也不太理解,比如环境变量对于不同的shell应该有一个总的 rc文件才对吧?我现在不知道要怎样在开机的时候截住登陆,比如在grub里面设定开机参数来取得root的密码重置。关于gtk,应该比opengl容 易得多了,我想对于使用者来说要容易得多了。应该说图形或者图形界面编程大概要容易得多,因为你看得见,很多儿童程序员都可以做得很好。一般来说安装程序 遵循这个原则,sudo ./configure --prefix=/usr/local然后执行sudo make install,设定prefix=/usr/local有很大好处因为就不用设定PKG_CONFIG_PATH了。

安装gtk2.0需要glibc2.0,cairo,atk,pango,atk2.0,pixman,libtiff,jpeg6b,zlip,g+ +,jpeg2000,libpng我装了一晚上的library都快疯掉了。同时我也深深地感到了开源的力量。似乎我印象中那位大虾写过 ldconfig的重要性,就是说很多时候安装gtk的时候之前的安装的library有些动态库如果你没有调用这个工具把它放到so的cache里面你 就不能成功,的确如此,我都差一点山穷水尽准备使用低版本的gtk了,无意中运行了一下ldconfig,发现有很多的so没有“注册”,结果再次运行就 成功了,当然我找不到jpeg2000的libjasper,明明我已经安装了,但是。。。我没有找到他的.pc文件,而且它不是动态库,使用的是la形 式,是不是静态库呢?

编译gtk程序好像只能使用pkg-config来设定预编译路经与连接,`pkg-config  --cflags gtk+-2.0` `pkg-config --libs gtk+-2.0`注意这里的"`"不是引号。


十二月十七日 天气很好吗?天气很好,很暖和,地上的雪都融化了。

英国金融时报在评论2008年成为中国黑暗的一年因为到处是天灾人祸,我想历史发展常常有偶然的因素成为某些长期积累的社会矛盾爆发的导火索,比如第一次 世界大战据说是7个青年刺杀奥匈帝国王储的突发事件,可是大背景是欧洲早就是一个火药桶,个个列强关于争夺殖民地的矛盾已经到了不可调和的地步,所以战争 爆发了。天灾是偶发的,人祸是必然的,占中国人口0.7%得极少数共产党核心集团控制了全中国70%以上的财富,这个就是中国最大的矛盾,也是生产关系与 生产力最大的不适应,也就是经济基础与上层建筑的最大的不适应,革命与变革的区别只在于有多少人头落地,有多少人必须流血,有多少现有利益团体被调整,而 他的发生却不以人的意志为转移,在共产党崛起的年代,中国还同时有很多其他的团体争夺政权,当时中国是一个农业国,农民是主体,得到农民的支持就得到全国 的支持。今天中国正在进行工业化,城市化,得到工人的支持就得到大多数人口的支持。但是,一场革命的领导核心却必须是社会的精英阶层,他们不受限于自身的 阶级出身,是超阶级集团,必须拥有相似或相容的理念,必须有团体内部的相对民主,必须有领导革命的基本资源或者能够获得相应的资源,必须拥有外围同情组 织。

2008北京奥运算不算人祸?花了好几千亿搞建设,另外花了好上千亿争金牌(不是我杜撰,国家体育总局统计过的5亿一块金牌,自己去算吧),每年政府官员 花掉9000亿吃喝出国买车建楼,然后突然一天发现经济增长的发动机在熄火,又冒出一个什么4万亿投资计划,我对于这笔钱从哪里来很是怀疑,这个计算是把 现有的财政增长收入大概都预算进去了,如果经济滑坡,房地产金融外贸滑坡,财政收入就不会有那么多,这笔钱的来源就很成问题了。就算有这笔钱,这个按照美 国众议院听证会上的说法就是“我们仅仅拥有一次拯救经济的机会“,这笔钱用完了我们也就完了。投资铁路是一个很有想象力的举措,这个惊人的计划是在几天之 内就产生了,大概国务院的幕僚们受到了当年三十年代大萧条时期罗斯福总统修铁路的启发,这里有一个所谓的关于猫狗的逻辑的笑话,猫和狗都有四条腿,所以猫 就是狗,狗就是猫。在美国能够雇用大量劳动力的产业不多,而在中国却很多,国务院没有搞清楚现在是解决失业问题重要还是解决经济振兴重要,看上去好像是一 个问题,但前提是中国的经济是外向型的占大多数,靠内需拉动完全不可能替代,需要考虑有好几年的冬天要熬过去,是否有这么多人这么多的企业熬得过去?因为 美国现在最乐观的经济学家都只能说美国的经济要2010年以后才能走出衰退,我觉得可能还需要一两年,同时这个前提是淘汰大量的剩余生产能力的前提下,仿 佛草原上的大量动物生存竞争必须要饿死大量的草食动物肉食动物才能支撑这个市场消费。所以,现在还是秋天,冬天还没有来,不许乐观。中国在几年内我想都不 大可能恢复。


十二月十八日 天气很好吗?天气很好,很暖和,地上的雪都融化了。

unix德semaphore很烦人的,sem_init后面的两个参数,一个是代表是否shared,一个是初始化值,你觉得允许share between process应该用什么integer来表示?我觉得90%的程序员都会选择1,可是不知道那位前辈高人秉持着0是无错误地unix的理念设定为0,那 么sem_getvalue取得当前的semaphore的内部counter的值,你觉得应该是什么数?那位大虾从效率出发使用负数,这个我还能够理 解,但是实在是很不习惯,而且我原本想要有此来实现一个类似于islocked的试探性函数,结果才发现是不行的,那个值仅仅告诉你有几个线程被 block了,不过事实上这个islocked根本就没有意义,完全DC这种没有受过专业训练的人的naive的做法,他大概是被这些线程同步问题搞怕 了,总是不放心,lock勒之后还要检查一下islocked,简直就是脱了裤子xx,我很早以前看他的代码就提醒过他,他就是不肯去掉,一个人年龄超过 50岁大概思想是很难转变的,问题是它对于linux一窍不通的情况下抱怨诅咒拍桌子让我也很烦,虽然我也是一样的懒得使用linux,但是毕竟知道这个 东西的强大的生命力,学习的门槛的确要比windows高非常多,很难通过自学掌握,因为windows所见即所得,没有学过计算机的人也能使用,但是 linux编程最后几乎成为打字比赛,谁敲键盘快谁就成为高手,哈哈。。。我打字也不快只好这么找借口。

早晨我在向我们已经有了目标程序位mips的linux下得编译器,那么为什么不把gcc在编译一边然后部署在mips下运行调试呢?我想资源是应该够用的。

日本在第二次世界大战中的教训就是不要在国家总体实力超越对手之前挑战对手,尤其不要轻视美国,想想看美国在国家独立之前就能够打败世界最强大的大帝国英 国是何等的了不起,美国人在拓荒时代人人有枪,社会秩序完全是靠人民自己维护的,这一点是美国国家民主经济发展的基础,正是因为如此美国成为类似于罗马帝 国一样的体制,公民为主体的军队有很高的主动性,这样的军队是世界上任何其他国家所不能相比的。日本在二战时期士兵的基本素质是很低的,紧紧依靠类似于宗 教信仰的传统观念来冲锋陷阵时有缺陷的。


十二月十九日 天气很好吗?天气很好, 大雪纷飞,并不算冷。

gdk的参数设置非常的迷惑人,比如gdk_pixbuf_new_from_data里面有一个bits_per_sample,这个一定是8,那么你 认为你传进去的图像格式是什么?按照常理我想80%的程序员会说是256色一个pixel一个bytes,难道我错了我是异类?实际上呢?因为他的另一个 参数colorspace却仅仅就是一个选项rgb,所以他就是rgb,你可以选择alpha或者不要,所以这个框架的设计者有前瞻性,但是你能不能在文 档里面说得稍微明确一点?难道是我的理解力有问题,或者文档撰写着认为这个是天经地义的常识?也许吧,如果不是我在实验中除了很多其他令人不齿的弱智的错 误我指需要一分钟就能够明确这一点,但是,我太累了头脑处于混乱状态,不停地否定自己。

怎样把DC的window程序移植到linux上是一个很头疼的问题,他的那些大锅煮洋葱的代码我一点都不想去碰,实际上,我也承认我重新驱邪没有几个月 是完成不了的,那种日积月累积累起来的工程都有这个问题,这就是熟知的软件工程的那个突然变陡的曲线。所以,最干净最简单的入手是采取wine的做法,把 所用道德windows的gui32的api都实现一遍,问题是这是一个浩大的工程,我曾经考虑单单使用wine的一个两个dll的实现,但是这个实验也 需要一天左右的时间吧,而DC和marian已经在考虑plan C,就是使用steven的java程序,这也是一个很不错的解决办法,只要mips的小笔记本硬件能够支持的话。更主要的是怎样实现plan A,就是传统的正规的移植代码,我的plan B利用wine的架构以便维护仅仅一个版本的代码只能是将来正式开发的选择,当然我对于这个project的成功的可能性的预计只比andy的估计高一点 点,大概是0.1%的可能性吧。

那么具体要采取什么途径来做呢?我的想法其实很简单,使用gdk_pixbuf,因为既然DC原本要把它的可见的窗口部分显示出来依靠“写屏”函数 setDiBbits,那么我就模拟这个函数好了,于是他的代码我连碰都不不碰了,要知道卷屏,socket更新他的"虚拟窗口“的内存buffer是很 繁琐的事情,我单单理解代码就要不知道多长时间,而且这些原来就是和操作系统无关的,于是,我开一个可见窗口大小的内存buffer给 gdk_pixbuf,然后再DC调用setdibbits的时候把数据写到这个buffer里面,然后就是紧紧定期刷新的机制了,这个和我以前再hp的 graphic-cluster-server上的概念一样,这个相当于animation,你自己去push刷新的,而且没有必要刷新品率超过你更新数 据的速度,那种再windows下把刷新交给操作系统的做法是不可取的。总之,我觉得我的做法很巧妙的,当然也应该是唯一的大多数人都应该采取的做法,难 道不是吗?不过问题在于DC原来的所谓256色是pallette的colorindex(南到256色有别的说法吗?),不过我反复再问他因为他的 setdibbits参数明明就是rgb而不是colorindex,他自己说后者从来就不能work,我自己好像也试验过的确如此,那么我只能在实现的 时候把colorindex换成它的调色板上的实际颜色,我可以肯定我的代码有错误,因为我还是不清楚到底linux上的bitmap是不是上下颠倒,到 底是rgba还是abgr,或者什么其它的,而且,让我天天加班到晚上九十点钟我都快累死了,这个破公司给的钱这么少我却还要老老实实的卖命到底为什么? 头疼。。。

昨天受到了两本书,inside ole,inside dynamic html,后者是我最期望的也是我最失望的,因为他讲的是script,只能看个原理。


十二月十九日 天气很好吗? 怎么可能呢?冷得要死,零下十七八度,但是大街上还是偶尔能看到露着大腿的女孩子。

德国在41年进攻苏联的时候应该多拍一些女兵去,因为她们天生御寒不用穿冬衣就可以抵御俄罗斯冬天零下四十度的严寒,苏联红军的胜利恰恰证明了这一点,男 人都打光了,剩下女兵上前线就打赢了,越南也是一样,男人被美国兵杀光了就派妇女上阵然后就打赢了,所以,现在美军里面女兵的比例很高大概有五分之一还 多。

GDK_PIXBUF德BUFFER就是RGBA,不过我忘记了ALPHA-BLENDING的原则,ALPHA要设定为255才行。那么如果 RGBQUAD也是这个顺序的话就好了。今天看了一篇简单介绍美国最大的金融诈骗的那个案子,那个老头怎么看都像一个农民居然能把一大队基金银行都骗到 了,什么原因?因为人是最不可靠的动物,华尔街的金融公司里的白领都是领奖金的打工的,包括经理层,把年底的业绩做好了领奖金就好了,那种老鼠会形式的 “标会”在中国流行,在美国也一样,只要有人进来投资,骗子公司的资金流不断你就看不出来他居然是拆东墙补西墙,这种做法在中国的国有企业是生存的基本之 道,在美国也一样,哪有什么稳赚不赔的生意?做梦。


十二月二十日 天气很好吗? 怎么可能呢?冷得要死,零下十七八度,但是大街上还是偶尔能看到露着大腿的女孩子。

叫我周末加班我就是一肚子气,原本不说我可能都会照样干活,但是用这种方式命令我去我就很恼火,恨不得立刻就不干了。DC这个无知的家伙没有读过书根本不 懂算法,写的东西就是一锅子洋葱,当然我也不一定能干得更好,反正我就是很恼火。SetDiBBitsToDevices如果他听我的就不会浪费这么多时 间了,我去了之后花了十分钟改正了,当然这之前他和我的辖碰瞎撞也不能全否认,不过你只要读一下msdn就知道了src是从左上角算起来的偏移,dst诗 作下角算起来的偏移,开始行数和要画的行书都是相对于你的这个偏移起算的,唯一迷惑人的是微软的bmp在内存里面大概已经是上下颠倒的,DC自己也是这样 上下颠倒的,那么画完之后的所谓的dib bitmap再linux之类的系统下海是不是上下颠倒的?他误导我到之画出来的部分是镜面一样的上下颠倒,但是凑巧的使用他的错误的理解正好有一个从另 算起的画的对,但其他就都不对了,这就是经验主义的恶果,没有读过书的人都有一个玻璃天花板,到了一定阶段再也上不去了,看得见就是超不过。要我再去改 socket的异步传输代码我就是一个字:烦。他的那个要两三层的buffer机制完全是不都算法的辖搞,不是用信号量同步只能是自欺欺人,否则你就开一 个足够大的buffer就好了,何必要两三层的buffer?怎么会有用?每次跟他说他都不理解还刚愎自用我都烦死了。我大概第一天上班的时候就看到他的 同步代码有毛病,后来看他不高兴索性不看了,这种同步异步通讯绝对不是很多靠自学成材的程序员所能完全掌握的,大概你的程序95%的时间都好像对,但是偏 偏就是有毛病,这就是烦人的地方。自欺欺人的办法就是所谓java程序员所推崇的使用异常一圈,反正有了错误就抛出,时时刻刻都准备着你的同伴犯错误。我 实在是头疼的很在办公桌前测试就直接睡着了。eclipse完全就是一个crap,删除一个工程居然花了二十分钟。

看军事频道介绍日本的幕府战争真是让人热血沸腾热泪盈眶,这种武士的决战要远远胜过当时中国的农民起义战争,日本武士的装备在当时应该远远超过明朝的军队,所以明朝的所谓防御倭寇是不奇怪的,在军事上的落后的原因是什么?是因为没有敌人吗?

如果matrix是稀疏的数据表,那么2d图像就是一个数据挖掘的过程,如果把binary的数据存放如数据库建立索引,那么。。。

Yes, yes, what can I say? Celebrities don't have to worry about money and job.  <Nanny's Diary>


十二月二十二日 天气很好吗?怎么可能呢?冷得要死,零下十七八度,但是大街上还是偶尔能看到露着大腿的女孩子。

美国joint chief以前认为可以同时打赢两场局部战争,yes and no,军事上可以,但是巩固政权不需要正规军,因为太昂贵了。阿富汗有三万多美军,明年要加倍,但是国防部却又表示最好是北约出兵减少阿富汗人的憎恶,这 样摆明了治安维持军,要消灭塔利班就绝不可能采取这种防御架势,不过国会不批钱也是没有办法的事情。那么伊拉克撤军是早晚的事情,阿富汗呢?维和部队? Economy is like bad kids spoiled by greasing politicians.那些投机商赔了钱,就让他们赔去吧,如果政府不停地替这些人擦屁股那么人人都会效仿的,于是敌特绿的汽车上门来讨钱,直接就用停 产关门来要挟政府,这个大门已开,接下去还有谁呢?零售?不算劳动密集型,航空?同样道理他们是资金密集型可以重组,好像没有了?

 

攻击计划应当这样制定:计算每个单元的价值,即攻击消灭敌人的价值加上制造价值加上防御其他可能被攻击消灭的单元价值(这个最后一点没有再wesnoth中体现)

攻击表:(attack matrix)
单元   造价(如果该单元被消灭之后来计算)  攻击敌方单元造成伤害价值( 按照多个单元联合攻击消灭敌人后的总价值分摊计算) 可攻击敌方单元伤害表( 可以理解为造成地方单元死亡的相对百分值表)             可攻击敌方单元造价表(和以上造价计算类似)
造价(如果该单元升级后) 防御我方需要保护的单元的价值表(即计算某个单元死亡与生存的价值差值, 甚至可以计算下一回合生存单元反击地方造成的价值,所以这个计算结果不是简单得min-max搜索, 是应该有着价值累积的效应的,比如在该回合中的价值还要考虑下一个回合,在下一个回合等等, 不过这里要看到攻击机算是一个概率计算,累计回合计算价值要把概率加成考虑在内。)
 
是否需要计算防御价值表呢?是否等同于敌方的攻击伤害表呢? 我想是的。我们只需要在进行一个状况评估计算, 不过以上攻击伤害把这个计算简化了原因就在于我们把所有的收益损失算法都归结为了一个伤害价值, 而所有算法的核心就是其特有伤害利益的相对于其他伤害受益的"权值"的计算,所以, 在以上计算中必须把这个转化计算开放乘客扩展的函数,最起码要设定为某种常数计算。
 
同时另一个传统的简单的状况评估表意我方每轮损失单元价值与消灭 敌方单元价值为指标,所谓伤敌十指不如断其一指。

十二月二十三日 天气很好吗? 天气很奇怪,居然圣诞节下雨。

有一种沦落风尘的感觉,我觉得我今天实在是一钱不值的被人当作廉价工具的奴隶。I am dog-tired.让我想起了那句著名的台词:I must be the cheapest whore in the town.


十二月二十五日 天气很好吗? 天气很奇怪,居然圣诞节下雨。

linux德socket应该是由MTU的传输限制吧?我读到的零零碎碎的信息和我观察到的现象我认为每次发送最多可能都是1404bytes?不过我不 是很确定,也许。。。不过逻辑上讲这应该是不可能的因为tcp根本不需要考虑MTU,除非andy的初始化设定成了udp,这是不可能的,或者另一种可能 性就是好像socket读写的时候可能会返回实际发送接受的bytes,这是我从manpage读来的,什么条件我忘了。以下是我读到的一篇关于优化的文 章(http://linux.sheup.com/linux/39/linux27495.htm) 摘要:1。禁用Nagle算法,这一点我原来就知道,再windows上当时给我的目标是降低tcp-overhead,我还常是强制使用nagle,不 过效果不明显。int sock, flag, ret; /* Create new stream socket */ sock = socket( AF_INET, SOCK_STREAM, 0 ); /* Disable the Nagle (TCP No Delay) algorithm */ flag = 1; ret = setsockopt( sock, IPPROTO_TCP, TCP_NODELAY, (char *)&flag, sizeof(flag) ); if (ret == -1) { printf("Couldn't setsockopt(TCP_NODELAY)\n"); exit(-1); }  2。减少系统调用开销,这一点我不是很理解,当然简单的道理很容易领悟,这个前提是把socket当作纯粹文件操作,或者pipe之类的时候,在应用程序 层尽量减少read/write的调用次数,比如写缓冲,读的缓存尽量大。3。微调buffer大小。Bandwidth Delay Product(BDP) = Link Bandwidth * Round Trip Time(RTT)。这个数据BDP是系统作为tcp内部缓冲大小的依据,测试rtt可以使用ping host来计算,Link Bandwidth就是带宽了,注意使bpp,比如测试test.datawind-s.com得到rtt=20ms那么BDP=20ms*100M/8 =250k,那么接受发送乘以二就是说linux应当设定为0.5M的TCPwindow,默认是110k,int ret, sock, sock_buf_size; sock = socket( AF_INET, SOCK_STREAM, 0 ); sock_buf_size = BDP; ret = setsockopt( sock, SOL_SOCKET, SO_SNDBUF, (char *)&sock_buf_size, sizeof(sock_buf_size) ); ret = setsockopt( sock, SOL_SOCKET, SO_RCVBUF, (char *)&sock_buf_size, sizeof(sock_buf_size) );据说接受buffer大小加倍的。此外据说改变MTU也可以改善性能,我就不知道这个是不是要在网关来应用,(因特网?)

此外再linux上检查依赖关系使用ldd file。

看来使用SDL_IMAGE之类的编写LINUX图形应用程序也是一个很流行的做法,使用GTK/GDK应该也是不错的吧,因为我的感觉这一类东西都很类 似OPENGL的理念,就是一个真正意义上的状态机,并且这个状态机的设计在开始编程的时候就贯彻始终而不是微软编写WINDOWS时候那样程序写完了随 便开放几个函数给你玩。我之所以发这个感慨是因为WINE的缘故,再WINE模拟WINDOWS-API的时候你才会认真去思考状态机的问题,一个软件是 否能够完全做到仅仅通过外部调用开放的API达到完全一致的效果?也许我的头脑混乱了,我说的不是一件事情,或许应该称之为CANONICAL-API的 设计,就是说最简化API,API只见无关联效应,彼此不干扰,彼此无重叠,用离散数据来表达吧,大概就是API-SET的SPAN是涵盖所有应用程序的 需求。但这好像是一个伪命题,应用程序的要求也许永远都无法满足,至少从系统安全的角度出发有些部分系统永远不愿意开放?

之所以WINE不去实现MIPS的平台的原因是什么?也许第一指令集差别太大了,用指令模拟效率太低不值得,不如开发者重新开发?这个理由太牵强了吧?也 许是第二:WINE原本希望能够用最小的代价平滑迁移WINDOW应同程序到LINUX,如果需要指令模拟不如使用虚拟机,这个超出了WINE的理念: Wine Is Not Emulator=WINE。

我昨天作了些什么呢?增加了socket的非阻塞通讯,使用poll使得两个发送/接收线程尽量不互相阻塞,如果我理解正确poll应该决不是使用 busy-looping的线程等待通知机制,我所写的代码没有几行,因为原来发送接受已经在两个不同线成了所以我不需要使用ring-buffer等的 耳际缓存自己polling。(混乱)

在GTK层你很难直接操控gdi的工作,因为这个主要关注的都是控件一类的高级窗口对象,比如在gtk层draw_rect之类的函数被取消了,换成了 queue_draw_rect之类的,这个意思就是说你在调用invalidate_rect之类的函数但是系统不会立刻重画直到系统空闲了,这个时候 所有的invalidated_rect被合并然后才真正开始重画,这个和windows的原理类似,也许设计者就是这样表现给window程序员方便理 解的。所以,对于我要aggressively-refresh画面来说只能在gdk一层调用gdk_draw_pixbuf来实现,这个就是我找了两天 的结果,原本我还打算使用sub_pixbuf来实现局部的rect的重画,但是DC依赖他的SetDibitsToDevice把他的内部virual -screen一次性全部写到显存由他的理由,因为它实际上就是自己把多次调用invalidate_rect的开销省掉了而是自己控制windows- repaint的机制,我现在如果在他的socket接受部分及时接收部分rect的数据立刻刷新rect的部分并不一定好?将来我自己实现某种 animation机制的时候我自己来控制好了。

andy说编译usb驱动的时候需要使用2.4的内核,我的理解是这样的,linux去冬不一定需要编译到内核里面去但是需要使用内核来编译,就是当年写 模拟驱动那样的情况一样,现在使用tool-chain来编译目标位mips的驱动应该是一样的,他说mips的linker自己回去寻找正确的动态库与 静态库,大概是类似于file之类的检查文件elf的magic-word,这个是最起码的,不过库的名称肯定还是在makefile写好的,不可能编译 器有这种智能寻找,应该仅仅是文件类型验证的工作而已。不过,和年轻人比较我的头脑慢很多,尤其是shell操作,几乎决定了linux程序员的编程序 度,我什么时候才能下定决心学习vi之类的编辑器呢?!!!

明年春季发起wesnoth战役如何?

又看了一眼google到的东西,应该是这样的,tcp虽然保证了不丢失,顺序到达,但是并不保证你每次接受都是你发送的字节数,应该在内部发送的时候还 是根据mtu切分成了多个包,所以,我的观察应该是没错的,我的这个做法和DC以前在usb驱动上缓存的道理相似,因为那个协议也是每次只能发送64个字 节,所以,你要内部缓存一下。


十二月二十七日 天气很好吗?天气很奇怪,居然圣诞节下雨。

其实pkg-config的工作原理非常的简单,环境变量PKG_CONFIG_PATH之下的lib/pkgconfig路径下有着各种安装的lib的 metafile皆为名.pc,然后里面编译的时候需要的无非是include和lib的path,这两样东西一个再cflags: 一个在libs:,所以这就是为什么你在编译命令中嵌入shell命令g++ source.c `pkg-config --cflags --libs  x-y`(这里的x是lib的名字,y是lib的version,比如GTK2.0就是gtk+-2.0)这个完全依赖于安装lib的时候在这个 pkgconfig下写入他的.pc文件,里面包含了很多有用的信息,比如版本号等等。

There are many wars to fight. In some wars, you win and you build up monuments; In some wars, you lose and you build up characters.

ubuntu安装更新里面的gvfs有bug,不要安装否则computer和usb不能正确识别。我试图更新gvfs,没有用的,网上说更新的时候要 lock这个gvfs,我不知道要怎样做。重装了ubuntu我没有覆盖以前的分区,只是把从前的swap消灭掉了,这样重新装完系统之后我可以使用 mount把旧的分区恢复。首先,你要sudo fdisk -l找到久的分区并且确认文件系统格式,比如ext3,然后修改/etc/fstat文件,最好备份,增加一个自动mount的选项, /dev/sda7   /storage ext3 defaults 0 0  这里的/storage当然就是mounting point乐,然后可以 sudo mount -a把这些都mount起来。在安装的时候我觉得sudo ./configure --prefix=/usr比较好,因为默认都是把.pc放在/usr/lib/pkgconfig目录下的。然后sudo make install

一千多年前伟大的狮心王理查德率领欧洲各国的十字军勇士组成的远征军来到了耶路撒冷城下准备进攻圣城完成各人的誓言,这就是著名的第三次十字军东征打败萨拉丁的著名的战役。

apt-get install xxx

最好不要自己重新编译,使用sudo apt-get build-dep  libname 我如果早知道就不用那么辛苦得下载编译了。但是,这个东西并不可靠,毕竟这种程序员该干的工作交给用户及程序替你处理问题很多的。重新安装ubuntu的时候,可以恢复以前的用户的系统。

隆美尔居然希特勒早年的保镖。

This drives me to nut!!!!!!!!!!!!!! pango/cairo/atk god damned!!!

经过了两天两夜的摸索我终于认清了一个简单的事实,那就是不要自己在原始的安装开发环境,这是一个混乱的过程,一定要使用ubuntu的synaptic package来安装,这个才是正途。


十二月二十九日 天气很好吗?天气很奇怪,居然圣诞节下雨。

前两天我被pkg-config折磨得要发疯了,我自己杜撰了一个.pc给jpeglib结果很奇怪的事情就层出不穷,我再pkg-config --debug --cflags jpeg下看得清清楚楚地他把cflags的部分又remove掉了,结果返回空,这个实在是奇怪的恨,其他的.pc文件就不会这样,我已开始以为是不可 见的字符的问题,结果也不是,我看了manpage关于.pc的文件格式,平淡无奇,唯独这个我自己创建的.pc有问题,而且也没有所谓缓存文件的问题 (比如ldconfig有一个缓存文件有时候要强制更新)。

早晨爬起来忽然心血来潮想把vnc编译一下安装在我的服务器上,我使用DC的版本连接他的服务器不成功,我猜想他一定做了什么手脚不让原来版本的vnc连 接,这是他的习惯总喜欢放一些magic-word之类的作为安全验证,这种也是初级的玩意儿,只能比密码强一点点而已,谈不上安全。不过编译的时候发现 源码使用了sdk2003,这个有勾起了我的痛苦,我始终不知道有什么好地解决办法,也许今天早上我的头脑清醒就应该是这样的:如果sdk2003与 vc6兼容,也就是说sdk2003是vc6的超集,那么在环境路径下把sdk2003放在vc6的前面也不会有问题;如果他们不兼容,那么也就是说 sdk2003改变了vc6的定义,这里面有几种情况:1)重定义了,那么始终使用sdk应该也没有问题,除非sdk抛弃了某些东西(比如某个文件)但是 你得include里面有提到了,这就是问题。2)完全抛弃了某个东西甚至一队的文件,这时候也需要小心了。

(以上都是瞎想,如果问题这么简单微软就不会不让sdk不兼容了,除非是故意让你要放弃vc6了,微软不至于这么短视,因为.net这一个产品而破坏开发 者的信心。)所以,从这一点来看我也不是完全瞎想,如果2003sdk是最后一个兼容vc6的版本的话那么完全可以混合环境制作一个超集,这就是我的试 验,把所有不兼容的lib都换成vc98(这是指产生debug information corrupt的情况),把所有定义不完整的都换成sdk,这是一个冒险的举动,在编译期能够检查的大概只有类型信息和少量的文件格式(我想这就是 debug文件专门制作的不同来检查编译器版本的一个目的吧),那么在运行起才能出现的崩溃就是一个恶梦了,如果这个办法根本不可行那么还是早一点发现的 好。不过,我的想法是开发环境的核心只有两个,编译器与开发库,vc6与sdk2003使用得编译器应该是兼容的,.net就不一定了,所以,主要是库函 数的问题,动态库也没有问题,因为那是操作系统自带的,唯一有问题的是静态库和用于动态链接的静态库,(我喜欢区分对待,比如mfc由静态库版本,也有动 态库版本,动态库也需要一个lib来连接。)当然头文件就不用说了。所以,理论上讲这个方法是可行的,不过从前使用httpapi的时候混用造成的噩梦至 今让我心有余悸,要么以后还是遵照sdk的官方做法设定环境变量的批处理来运行?有时间一定要看一看怎么做。

按部就班编译了vnc,不过我忘记拷贝DC的server版本了,他的手脚都在那里做的,因为vnc有些小缺陷,比如ctrl+alt+del键盘的问 题?(是吗?)还是要小心一些,现在的hacker都很牛的,只不过看你的目标是否有价值。编译方法就是按照sdk为准的原则,的确,这不是什么了不起的 工作,编译与环境搭建有时候还不被当作程序员的工作来看待,可是,如果基本的都不算还有什么算呢?我以为现在的开发原来越成为不同环境的设定了,其实真正 的编码/debug这些逻辑的东西是所有人都必备的反而不提了,有些纯算法纯逻辑的编码甚至于不要求程序员了解计算机原理,好像只要是头脑灵活逻辑清楚的 人都干得了的,的确。

我再次遇到无法解释的问题,首先,我本来以为这是一个几分钟的工作,我无非就是想要vnc能够自动启动,已开始我使用简单的注册表"run"来实现,但是 vnc必须要用户登陆后才能运行,所以,我只能寻求设定程序位service。让任意一个程序一service运行并不是很难的事情,这里是一个大虾的总结:1。 使用sc.exe,但是这个需要程序已经作成了service,所以毫无意义。2。 使用微软的resource kit的instsrv.exe and srvany.exe,实际上这两个东西要和起来用,我估计insvrv仅仅是把srvany注册为service,这里包括在 servicemanager里面的注册,以及注册表的撰写。而那个srvany估计就是把作为参数传进来的我们的可执行程序创建一个进程而已。网上有大 量的这种工具居然还要卖钱,真是不要脸,这样的东西并不复杂,不过就是要熟悉很多windows的编程,居然。。。不过讲老实话我为这么一个小功能已经耗 费了很多个小时了,凌晨要坐飞机,却还没有完全解决。其实主要不在service上,vnc本来自己就可以注册未service,所以我完全不需要以上的 办法,问题实在service的状态下似乎程序有些不同寻常,已开始我以为是一个加密的password的读写问题,一个constructor被声明成 了inline, 后来我以为是我的登陆用户设置密码的问题,后来我还以为是sdk与vc6的冲突,后来我又以为service得注销有问题,后来我又以为hook没有办法 卸载。。。总之,同样的代码同样的编译之后在三台电脑上行为不同,后来两台以administrator登陆的电脑ok了,但是另一台以root登陆的还 不行。我都要疯掉了,我估计DC很可能曾经遇到过与我相似的经历。

Smiley face