博文

目前显示的是 七月, 2010的博文

还是用pidgin上飞信比较舒服

昨晚上下班回来,突然想把pidgin的飞信插件搞一搞。原来的作者已经懒得维护了,于是我就去github把代码取下来改了一改,把openfetion里面计算密码的几个函数拿过来替进去,然后把获取头像的代码注了,然后基本就可以用了。
我暂时还没搞明白pidgin的event loop是怎么回事,貌似是poll io。而pidgin的飞信插件里读数据和写数据的方法是有问题的。不能假定用read方法从socket读到的就是一整条完整的http答复。应该是先read,然后看长度够不够,如果不够,放进buffer,然后return,等下次进来。如果够了,开始parse。

realloc并不是多么有用的设计

"A third kind of request, realloc(3), will resize a chunk, trying to avoid copying the contents if possible. It is seldom used, and has only had a significant impact on performance in a few special situations。" 摘自:《Malloc(3) in modern Virtual Memory environments》
所以C++没有realloc也无伤大雅。

无题

我们楼有两个电梯,一个从上周开始在修。另一个, 今早我刚跨进去走到12楼的时候,电梯门开了,门口站着维修工人。我们被告知这个也要修。门绳坏了,现在必须换,不然不安全。好吧,爬楼梯。我住的地方离公司很远,每天上班要坐地铁,而去地铁必须经过一个地道,那下面总是很热闹,卖什么的都有。今天我在地摊上看见了网上卖的脱销的独唱团。如果它是山寨版倒还好,否则韩寒看着他的处女作和清宫秘史食谱大全之类的放一起卖不知作何感想。不过我没看过独唱团,也许里面真是那样的内容。通俗杂志嘛,不是说换个素点的封面,就高雅了。要高雅你看学术期刊去!我觉得人生最大的悲剧就是你决定不了自己的位置。比如,你就生在这样一个操蛋的时代。不是你操别人,就是别人操你。

面对洪水,我真想说淹了活该

最近听见新闻说三峡遇到建成以来最大的洪水,为了舒缓汉江的压力,怎样怎样怎样。然后我就想,我家就在汉江边上,我家会不会有事。然后今天晚上在网上看见图,城市的很多道路被水淹着,但是其实都不严重,刚刚没过脚踝而已。至于那几个4米高的立交桥下因为积水太深不能行车,那是自从我小的时候就常发生的事情。那不知道是哪届市政府的形象工程,给汉中市人民建了一个标志性的立交桥。在我的印象中,只要一说立交桥,指的就是那里。过了10来年了,好像也没有建其它的。总之呢,那个桥一逢大雨就是一个悲剧。 很明显,整个城市的排水系统是很陈旧的,平时没什么问题,但是一遇到暴雨就不成样子,比如那个悲剧的立交桥。为什么我说淹了活该?因为市政府不忙着改善这些,而破天荒的在汉江上围河造湖。 市中心有一个湖,可惜水太臭。汉江的水质不错,可惜越来越浅,不能满足观赏需要。于是市政府就在稍微下游一点的地方把河床围窄,然后修闸,提高水位,做成一个人工湖。建好之后是很漂亮,可是!汉江是长江最大的主流(按水量来说),当防汛形势严峻的时候,低坝周围的人工花园、座椅之类的被淹了有什么好心疼的? 汉中市作为汉江上游第一个城市,这都2010年了,不知道汉中市第一个污水处理厂修好了没有?就我看过的任何调查报告,给出的结果都是城市自来水公司的水源很差,属于三类水平,有的甚至更差。汉江流经城市的这一小段,属于4类或者5类水平,水质极劣。而这是上游接近源头的地方啊!这里的水质坏了,要影响下面多少人?

本网站全面转向https

前几天看见delphij用的是starcom的ssl,然后我就去申请了一个。不巧的是我的手机的浏览器对startcom的网站支持不好,于是就搁浅了。刚才看见delphij又详细的写了如何申请ssl证书,https://blog.delphij.net/2010/07/ssltlsx509.html 。于是我就重新搞了一次,把我之前的自签名的证书换成startcom的了。
然后配置了一下.htaccess,利用URL重写功能,把所有的非http访问都转向到https。
另外,不知道会有人突然发现本站是CNNIC签署的证书? 如果这样,那就joke了

今天又学会了一门新手艺:刷墙

朋友想把家里的墙换个颜色,恰好有一桶涂料,于是哥几个准备自己动手。嗯,很有意思的事情。
可是看起来简单,做起来却不简单。根据我在网上找到资料和多方询问,正确的步骤如下:
1、首先决定要不要把现有的墙皮铲掉。如果要,那么就先铲墙皮,然后上腻子。然后再刷
2、如果不要铲墙皮,那么就要先打理墙表。这是个细致活儿,务必要保证墙表光滑平整。墙表必须先用干布擦一遍,去掉浮土。如果有胶带留下的痕迹,就用小刀轻轻刮,然后湿毛巾轻轻擦,如此反复。刮的时候不能力气太大,否则反而伤了墙。钉子眼用石膏粉塞起来,然后用细砂纸轻轻一抹,就平了。把其它不平整的地方都用细砂纸这么给弄平了。正式刷墙之前,必须保证墙面是干的。
3、买来的刷子和滚子必须先在清水里面泡。必须是冷的自来水,不能是温水或者开水。然后甩两下把水甩掉。
4、涂料用之前必须兑水。盆子要比滚子宽很多才行,否则会很悲剧。一般是涂料:水=1:8或者涂料:水=1:10。具体可以看桶上的说明。兑完之后,搅匀。
5、把不想被刷到的地方用胶布贴起来。不是通常用的那种透明胶,是贴到墙上很容易被撕下来的不透明的。例如我不想刷顶部的墙面,那么就必须在边角处把顶部的墙贴起来。
6、刷墙。首先滚子蘸涂料的时候要充分浸泡,然后拎出来之后先等等,等涂料往盆子里滴的不那么快了,再上墙。刷的时候,拿着刷子轻轻到上下刷,也可稍微斜一点。反正就是尽力涂匀。不能太使劲,一旦使劲,涂料就沿着滚子的两边滴下来,就跟蜡烛的泪水一样(如果涂料太稠也容易这样)。但无论多轻,滴蜡这种现象都是难免的。只有轻轻来回滚,滚匀。但也要注意,刷的不要太厚。墙角(二面角或者三面角)可以先竖着刷一下,然后再横着刷一下,那么大体上就差不多了。然后各种边角的地方拿小刷子刷。
7、干透之后刷第二边。因为第一边肯定有些地方没有刷好,而这个只有干透之后才能看出来。要让它干透,一般需要4个小时以上。等一整天比较好。

GPL真的那么重要吗?

我说GPL,不是GPA。
昨天晚上我把系统从ubuntu 10切换成了fedora 13。让我很为不爽的是,很多基本软件没有。比如ati显卡驱动,一个这么新这么牛B的操作系统,配上一个价格近万到笔记本电脑,居然连基本的3D加速功能都没有,站在普通用户的角度,谁会接受?从meego的事情可以看出,Intel一直把Linux基金会以及众多发行版把持着,只有使用Intel显卡和Intel驱动才是王道。
Fedora的原则是,只有开源的东西才会被放进官方的repos里。可是对于普通用户而言,我关心的是可用,绝大多数用户是没兴趣去审查你的源代码的。而貌似仅仅开源还不够,你还得是GPL能兼容的东西。否则就算你把源代码全开放了,它也会因版权协议不同而指责你,排斥你。

转载: 7月17日中关村图书大厦《如果*宅》签售

时间:7月17号,下午一点半。 地点:中关村图书大厦五层多功能厅(北四环西路68号 海淀桥附近) 你能看到谁: SUN爷、有时右逝、咬人、老大(能过安检的话)、林熊猫、奶茶超人、卑鄙马维斯、小铁匠(主题曲演唱者)、苹果牛(宣传视频制作人,谢谢~)、HANK、ZETACOLA、性感玉米(跨省中)、纯洁的刮叔、猴子(地球那一头,我们会现场进行通灵尝试进行召唤)、猫太、卢西西、(不断报名更新,我会把所有确定去的人的名单写在这里。没错只要你跟帖说你去我就会抄上来。) 同时各种诡异人物发来贺电,比如叫兽、核桃大叔(争取拖去)等…… 你会得到: 老大的直面接触、一些赠送的签名书、各种WOW圈子里的人物见面、克服黑手的祝福、妹子们的聚会等等。 你能做到: 带着书去,写上我们的祝愿。 没买书的可以现场买书。 勾搭美女主持人。 逛逛中关村买买电脑。 以上。 7月17日,中关村图书大厦五层多功能厅,不见不散。

2010-07-11

我的meego的repos指向的是daily build。于是每天只要我执行yum update,就会有300多个包需要更新,令我最窘的是,执行更新、替换的过程,要远远比下载还慢。以至于我严重怀疑我在电脑上重新做一次镜像然后刷进去是不是更快?
今天晚上去了趟海图,趁快收摊的时候淘了4影印版的本书,才70块钱。都是计算机方面的,架构啊设计啊之类的。
我不想用connman,因为我实在找不到它的文档在哪。但是我发现我的/etc/sysconfig/network-scripts/目录是空的,却最基础的那些脚本。我写的ifcfg-wlan0这样的配置根本没生效。而且,这些东西是在什么时候执行呢?wpa_supplicant之前还是之后?
目前看起来,nokia主要没有开源的是电池驱动及相关工具、蓝牙驱动和图形驱动。nokia对它们的支持程度决定了meego以后在n900上的发展。
据我私下联系开发者得到的消息,电话模块的驱动马上就要有了。

继续玩meego

今天又重装了meego,首先是用image-creator重新做了一次镜像。然后刷到SD卡上,然后开始琢磨怎么得到xterm。去IRC问了一下,Stskeeps说“there is a compositor bug so xterm doesnt work, so it was not included in the icons/image”。好吧,那我怎么得到shell? wifi? Stskeeps又接着说:"connman is acting up so usb networking isnt working."。于是我就只好把SD重新挂在电脑上,首先修改inittab把runlevel改成3,然后修改/etc/rc.local,把wpa_supplicant设置成自动启动。
/sbin/wpa_supplicant -iwlan0 -c/etc/wpa.conf -B
dhclient wlan0
然后把wpa.conf填好。oh yeah!果然可以用了。
然后发现没有yum,开始装yum。还好,wget是有的。在装yum的过程中,发现网络经常会断掉,然后我就只好reboot。但是还看不出来到底是应用层的问题,还是wifi驱动的问题。
目前,meego-trunk和handset两个源一共加起来有2224个包。

部分更新

今天和同事讨论这样的一个问题,如何让后台的daemon进程在不重启的情况下,更新掉部分代码和配置文件?我认为这主要是架构的问题而不是技术限制的问题。想当然的明白要替换掉一个普通的文本文件是多么的容易,就算是要替换掉程序的代码,那么也有dlopen这样的函数可以用,java也可以动态的load/unload class。拿java为例,在不改变类的对外接口(函数的签名、添加或减少非私有变量)的前提下,改变某个函数的实现,是很容易的事情。难点在于如何设计一种合理的架构。假设这个daemon进程的是由消息驱动的。消息可能来自于网络也可能来自于程序内部的其它模块。设想这样一种模型,每个模块维护这样一个map,其中key是消息的类型id,对应的value是一个object,这个object有一个void process(message msg)方法。每来一个消息就去调用这个方法。而这个对象有两种方式被存储在硬盘上,class文件,或者一个脚本文件。如果是C/C++,那么就是从一个so中用dlsym获得函数指针而已。无论如何,当需要更新的时候,就是从硬盘文件反序列化得到一个对象(或函数指针)插入到现在的map中。现有的那个对象在没有message继续引用它时自动删除。这套逻辑看起来是没有问题的,可是,如果这个object包含状态(如成员变量,网络连接)怎么办?结论是:这些只能被丢弃,否则问题会急剧复杂。重要的数据应该都在数据库里,或者对象析构的时候写入到数据库里。如果是后者,那么还要求在旧对象清理结束之后再注册新的对象。上面所说的对象,也可以看成是一个微型模块。模块是什么?就像so文件一样,有明确的init和fini,并对外以函数指针的方式提供服务。具体到java之中,可以把一堆代码放在一个package下,然后以一个object实例对外提供公开函数,其它的所有变量和函数都是私有或包隐藏的。如果模块之间需要交互,那么应该是在模块的构造函数那里把其它模块的对象实例传进去。如果一个模块不被其它任何模块所依赖,那么可以轻易的把它的所有消息处理钩子注销掉,unload然后重新load。这样就没问题了吗?不是。假设我在数据库里存储着账户的货币数。分金银两种货币,老的实现是1金=100银,新的实现是1金=10银。然后消息处理函数在这两个实现之间来回切换,不会出问题吗?或者某个业务逻辑,原…

Object Mapping

最近两天在做一个有点类似hibernate的东西,当然不需要那么复杂。
我要做的也是要把表映射到对象。不过源不是jdbc而是excel,目标依然是java object。支持继承,支持容器,容器的值类型可以是简单基本类型也可以是复杂的bean。为了解决一个问题,策划喜欢用excel编辑数据,而程序员喜欢看到的是object,而忽略这个object具体是怎么在硬盘上存储的,或者说,怎么存储的是另一个纬度的问题。比如,我现在是用xstream,而其实我的代码中根本就没有出现Xstream的任何类任何方法,编译的时候根本不需要xstream,而是在运行的时候通过配置文件决定采用什么样的序列化方案。

2010-07-04

今天去紫竹院南边的那条河游泳了。水很清澈,然后躺在岸边晒太阳,很舒服。前面一转弯就到大河了,那里今天又死了一个。按meego现在的开发进度看,大概这个月内就可以用它打电话了。那么,我还会继续用maemo吗?absolutely no ! 那么,我应该继续在maemo下做移植吗?今天的天气真的很闷

apt-get添加key

今天想装meego的一些东西,于是就需要添加apt-get的源。然后更新的时候就总是报告 gpg警告。最后终于找到解决办法了。
就是,先用gpg获取这个key
gpg --keyserver keys.gnupg.net --recv-key 0BC7BEC479FC1F8A
然后导出,然后交给apt添加
gpg --export 0BC7BEC479FC1F8A | apt-key add -

sourceforge.net默认屏蔽苏丹,北韩,叙利亚,伊朗,古巴

今天早上起来收邮件,发现由于美国的出口限制,sourceforge.net默认屏蔽来自苏丹,北韩,叙利亚,伊朗,古巴的下载。项目管理员手动设置export control之后方可打开。 "As a US-based web site, SourceForge is committed to complying fully with US laws and regulations, including those affecting the distribution of software."

Meego handset day 1

看邮件列表,今天会有image放出