%@ Language=Inherit from Web site %>
During Investigating an Interaction, I Monitor a Motion;
While I Monitor a Motion, I try to Deduct a Direction;
After I Deduct a Direction, I may Conclude a Connection;
From the Concluded Connection, I can Accumulate a series of Actions;
for English version click here
for most updated version visit:
(最近更新在这里)
|
我有经三藏, 一藏谈天,天上神物,只可意会,不可言传,故不立文字,闻道者,参心见性,久而久之,必有应验。 一藏谈地,地阔天方,岁去月来,于平淡无奇的琐碎之中领悟征途的艰辛,在浩瀚无垠的星辰大海中有一颗没有留下轨迹的流星。 一藏谈人,人海茫茫,心路点点,凡人凡事,见智见仁,于无常的变化中见证一丝若隐若现的永恒。
|
暗黑杂谈 杂谈匝坛,杂弹砸坛,别家灌水,咱这砸坛。
我的征尘是星辰大海。。。 (日记太长了,我就把它们另存在这里了)★★
|
|
四月一日 今天天气很好吗?阳光灿烂,但是 后来下雨又刮风。 据说是愚人节,但是对于我来说应该没有什么区别,晚上回家的路上心情格外的郁闷,是一种莫名的郁闷。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的问题了。试验一下让搜索引擎来帮忙测试吧,比如我把几个关键字写在下面很快就有大量的引擎像秃鹫扑死尸一样冲上来。 (以下纯粹为了测试搜索引擎的反应速度,普通读者请谨慎访问以下链接,其中包含裸体和成人内容,观者请谨慎从事,其中内容纯粹为学术研究,不代表本人观点和看法。) 陈冠希和张柏芝的“艳照门”照片在这里:http://74.12.223.226/image1482 陈冠希和所谓的阿娇的不雅照片在这里(这个女人是干什么的,我始终不知道,哈哈。。孤陋寡闻至此。)在这里:http://74.12.223.226/image1190 (我想看看到底我自家的破电脑能够承受多大的压力) 我觉得我的服务器现在很强壮了,下午的错误是因为我输入负数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的图片在http://76.69.228.24 感觉完全没有办法解决这个问题,只好使用下下策,用__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来等待。 五月七日 今天有些冷,下起了小雨 今天,DC叫我先暂停解决cache的问题,让我取万那个ethereal去分析tcp包的问题,折腾了半个下午总算知道怎么使用了,简单测试发现tcp的overhead数据量要多出近40%,这就是他想要实现一个filter的原因,这绝对不是一个简单的任务,他自己也没有主意。 五月九日 今天阳光灿烂,但还是有些冷
今天遇到了所谓的DC所说的crisis,突然之间很多的服务器上的server都不能正常工作,DC几乎是暴跳如雷,又是骂娘,又是拍桌子,我完全可以想象作为一个程序员的心情,明明都是好好的运行了一两个星期为什么突然出现这种问题?最后才发现原来是需要安装terminal-server-licencing的组件服务,这种问题很古怪的,因为有不少的session是正常的,有时候重起也可以,总之是比较的麻烦的。我这个时候才比较的感到压力,从前听说电信的服务器程序员很辛苦,看来此言不虚,有的时候你最高的目标就是能够让程序run起来,哪怕不停地手动删除用户也行。 刚刚在想DC这样使用自己编译的vnc不仅仅有自己改造的用意,也许他还是为了更加的安全吧,比如只要把其中的任何协议部分改造一下,哪怕端口号密码都泄露出去了也还不怕,因为没有同样的vnc可能还是无法控制服务器。当然这是我遐想,也许他根本就是为了玩,就像那片评论上说的Datawind是现在越来越少的eating their own dog food,这是我查wiki才明白的,就是说自己用自己的产品,好像自力更生一样。 五月十日 今天阳光灿烂
前前后后断断续续化了零零碎碎将近一个月时间才终于搞明白了文件上传的原理,很多人也许觉得这不可思议,为什么是几年前的老的掉牙的技术我要花这么长时间,我也不知道,也许这就是所谓的old-new-story,不过我想很多人未必真的知道其中的细节,就好像我们每天都在使用cdrom/dvd,但是说老实话真正知道其中读写原理并能编程实现的应该不会太多吧,反正我是不知道。 竟然堕落到了看日本的偶像剧,当然这不是我的错,我是为了体会一下广大劳动姐妹的心声而已。当然,其实挺好看的,女主角很漂亮,居然找不到男朋友,这一点几乎是违背了生物进化中的自然竞争规律的,所以是伪科学的。女主角叫什么,电视剧的名字叫做<anego>.google了一下,原来意思是大姐大,女主角是篠原涼子。哈哈互联网真好。 五月十一日 今天阳光灿烂
大概每过一年,都对《four wedding and one funeral》理解多一点,当然英语程度提高了,
同时,这种电影你没有看过n多遍很多时候连剧情都搞不懂的,不要告诉我你看中文字幕能够明白详情,其中的很多笑话是无法翻译的很准确的。每次看英国的婚礼仪式我就在想,国内的婚宴大概像文革时代的大食堂,一大群人跑去吃吃喝喝,然后就很高兴回家或者某个地方。英国人却是在婚礼上结识新的结婚对象,这就好像连锁反应。It
is pretty easy. Just say "I do" whenever someone asks you a
question.
|
|
想知道蒙特利尔的天气吗?看这里。
我热切的期望有更多的朋友参加讨论,如果你们有什么建议和想法,不妨留话给我。
给坛主写信
我现在用的是宽带,感觉不出速度慢,如果各位浏览时候觉得慢的话,给我说一声,我就把图片改小。