博文

目前显示的是 2010的博文

2010-12-30

最近的工作真是长见识。今天去参观了一下实验室里的核心网交换机柜,据说所用的设备和现网是完全一样的。在布网线的时候,同事给我介绍了一下旁边那个机柜里的E1接口是干什么的。第一次听说“线井”这种东西。今天发现思科的vpn客户端居然有开源版的实现,http://www.unix-ag.uni-kl.de/~massar/vpnc/ 稍微改改配置文件就能用,真是不错。我想让我的手机能在Linux下跟我的电脑同步,我查了下,它用的是SyncML协议,然后装了一个SyncEvolution,但是不晓得怎么用。貌似直连只能走bluetooth。而我又不想把我的短信、电话本什么都找个服务器中转一圈。我觉得啊,最直接的办法就是用scp把数据库复制到PC上,然后定义一个merge规则,然后merge,然后复制回去。

2010-12-29

今天把电的问题算是解决了,明天准备解决网的问题。因为一直是做应用开发,最底层也就写了个802.1x认证,所以IP层及其以下的部分一直是我的薄弱点。明天要去学着配中兴的交换机,之前我就配过H3C的,看了下手册,命令差别还是挺大的。这到不是最大的问题,最大的问题我连CCNA的课都没上完,很多基本概念都不懂,也就勉强会配个vlan。STP只知道这个协议,但是没真正在机器上配过。嗯,我那两台交换机还都是比较新的三层交换,能支持ipv6,我准备试一试看能不能用6to4的方式打通ipv6,就算不行,网内这些机器之间用link-local的ipv6地址应该也是能通的。因为会跑很多虚拟机,所以我在想mac<—>IP的绑定是否还需要做?不做吧,怕谁中arp病毒。做吧,太麻烦了,新开一个虚拟机还得过来找我申请IP。明天的要紧是是先从console口把交换机的IP都给设了,把ssh或telnet打开,然后回工位慢慢搞。嗯……我现在只有一个C段,但是有两个机架、两个交换机。我在想怎么连。首先,两个交换机都得打开,否则支持不了这么多口。其次,是给他们各分一个C类呢,还是把它们级联呢,还是怎么滴呢?帮我想想除了划一个默认vlan然后配置静态路由表、dhcp、STP、IPv6之外还有什么新东西可以玩的?

2010-12-28

记得上大学的时候,有一次我和tianyuan在宿舍看一个我从channel9下载的视频。内容是微软的工程师介绍他们怎么建大规模IDC的,当时有一件很可笑的事情是,所有东西都到位了,最后发现:”But we don’t have enough power!”。我们当时都觉得很不可思议的。后来工作了,采购服务器,然后往网通的机房上架的时候遇到了困难。要求必须一换一,搬一个机器进去就得搬一个机器出来。不是没有机架没有机位,是因为供电不足。今天我遇到了同样的尴尬。需要上架27台2U的机器,一个在2个机柜里。每个机器都是双电,每个电源标的是750W,那么总共就是750w X 2 X 27=40.5kw,而我们给配的电是两个25A的,大约能支持10kw。悲催…… 我到现在也没弄明白交流电的功率到底是怎么算的,中学的时候就学了一个直流电的P=UI。不知道为什么近几年又在说机房应该统一采用直流供电。顺便抱怨下icbc的U盾,居然有一条单独的Usb线需要插上去,导致携带起来非常不方便。

2010-12-26

到新公司报到上班一周,说下感想吧。首先,工作绝不轻松,据说每周至少有一天是朝9晚9。但是因为我住的离公司近了很多,所以只需要骑自行车上下班就可以了,非常爽。只要不是下雨下雪或者刮大风的天气,我都准备骑车上下班。每天8点多醒来,骑车出门,路上随便找家卖早点的店坐下来,喝碗稀饭再吃点别的,然后继续骑。一路上总共花25分钟左右就可以了,非常爽。新公司办公环境很好,没有人在工位上抽烟。卫生间也很干净,暂时没发现有人在里面抽烟。工位面积比以前大了很多,再加上大家都是用笔记本电脑而没有台式机,所以显得个人空间很大。不过我是临时坐在那里,所以暂时不准备布置它。我右手两排是实习生,背后坐着一个很低调的牛人,他是国家千人计划引进的人才。在工作内容上,有三点很大的不同:首先是工作对象,从做具体的商用产品、技术变成了做平台。面对的不再是普通消费者,而是如何带动上下游公司形成完整的产业链。其次是工作方式,从自己带team变成了出方案出规范然后找外包公司合作。以前我主要是审策划写的设计文档,而将来则主要是自己写设计文档。还有就是这边所做的技术是很开放的,这边大部分产品都是借助于开源社区的现有技术组合而来,我的大部分工作成果都可以开放出来与他人分享。比如自己研究下mysql半同步复制然后把心得在博客或技术会议上与其他人分享,公司不会反对。而我在上家公司,他的技术产品都是坚持自主研发所以自成一体,外面的东西很难揉进去,而里面在做什么,外面人全然不知。我一直很希望做技术的时候能多一些交流和分享,以促进新的想法变成切实的产品。最近许久没有更新blog是因为在Linux下没有找到任何一个支持atom publishing protocol的客户端,我后悔当初干嘛要选用这个,而不是clone一个常见产品(如wordpress)的xmlrpc接口。

2010-12-21

整了一个thinkpad X201,处理器是i5的。在fedora下用top一看,哇,4个逻辑CPU(应该是4核的)。可那又怎样?我的T400大多数时间都是在降频跑,主频高又怎样?核多又怎样?笔记本的核心问题还是散热以及省电。今天在X201上装Fedora 14可费苦了功夫。Fedora 官方的LiveUSBCreator因为syslinux.exe的版本太老,所以做出来的东西总是无法引导。然后我的U盘自从刚买回来起就没好使过。最终我用读卡器把我的手机卡给格了用来做Fedora的启动安装介质。可怜我玩了很久的meego,没了。事情还没完,在分完区准备进行下一步的时候,总是崩溃,给我扔出一堆python的堆栈,让我记录下来报告BUG,然后就关了。无论我是手动分区还是自动分区都是如此。在我绝望准备装其它OS的时候,重启一次然后再搞就好了。莫名其妙。fedora下装java是一件很恶心的事情。首选当然是sun jdk啊,可惜,想通过yum装sun jdk是不可能的。手动下载然后安装,它是帮我设置好了alternatives,但是装openoffice的时候要依赖gcj,我不知道怎么跳过这个。然后装gcj的时候,gcj又去更新alternatives把自己设置成默认的java。重装sun jdk也不行。MD,手动重新设置alternatives。可是装ant的时候又要装openjdk,唉。。。

我的网站貌似又发现一个BUG

netson找到的,是发文章的时候,如果没有选择分类,会导致在index页的列表中不显示。

2010-12-12

前几天去面试,对方认为我是一名技术精湛的Linux黑客。我当时心里唰的抖了一下。基本上,如果某人对Linux/BSD/Windows这样的系统玩的很熟,最终免不了要被扣上“黑客”的帽子,甚至政治倾向颇浓的“红客”。凡是喜欢车的人,若不是女人喜欢保时捷那样的喜欢,那么基本都会想着如何改装。同样,如果对某个Operating System很喜欢,那么基本都会拿调试器跟kernel。我在Windows下装机的必备SysinternalsSuite。应用数学界也有所谓的Hacker,拿别人的算法,改几个参数或者稍微修改一下迭代的步骤,发paper,毕业。所以我不喜欢这样。最近南京"外挂代练"事件闹的沸沸扬扬。我最先知道这件事是在twitter上,@zhoushuqun 转发的。这件案例法院判的没错,唯一值得怀疑的就是量刑是否过重。直到今天还有很多人不知道制作以及贩卖外挂是违法的。搞代练工作室,只要涉及人民币交易,那肯定也是违法的。但是很多人不知道,跑来找我说,你看,你也是做游戏的,那你能不能帮我给某某游戏做个外挂?据我所知,做游戏外挂的人,要比做游戏、做反外挂的人的收入高好几倍甚至10倍以上,但是这样做可能会像熊猫烧香的作者那样被判刑。某些外挂是利用服务器漏洞,开发恶意软件,组织很多电脑为谋取经济利益而对服务器发起有预谋的攻击,我觉得理所当然的应该依法处置啊。但是实际上,判断标准很模糊啊。你说制作taobao的抢拍器算违法吗?我回忆了一下我做过的和黑客相关的事情:在华尔街日报中文版的网站偶然发现一个sql注入漏洞然后立马发信告知对方;在公司内部新论坛刚上线的时候找到一个sql注入漏洞然后立刻告诉我的领导(我当时属于数据安全部);我的同事开了一个新blog我去帮他扫描一圈找出几个XSS漏洞;上大学的时候把上网计费客户端脱壳反编译然后移植到FreeBSD下…… 反正我能想起来的,都是在中国法律许可内。没办法,谁叫我只是一个本科生。所以在未来的3-5年内,我主要的工作内容依然是从大量的技术文档和paper中寻找能被实际应用的那些,落实成产品。除了阅读理解外,可做的就是修改下编译参数、运行参数、写个插件、对某小部分代码做点hack、给开源社区提bug提patch。想买车,锁定如下几个:雨燕、POLO、晶锐。1.5或1.6。如果自动档和手动挡相差7千以内就买自动…

Meego要玩完了

Nokia has said it will stick with Symbian as its main business-phone platform
even when MeeGo, the handset-maker's new top-end operating system, is released."It's very important to note that Symbian is the primary platform today and
will also be the primary platform in the future," Numari said.http://www.zdnet.co.uk/news/mobile-devices/2010/12/01/nokia-meego-will-not-displ
ace-symbian-as-enterprise-os-40091029/
http://www.branedy.net/?p=2023twitter上正在热议这件事情。我不知道nokia是不是会真的出一款meego手机。哪怕maemo很失败,也是出了之后才死掉的

我不知道腾讯的meego项目是否还在进行。
Intel那边也不好过,据我所知,有些项目已经冻结了。只是准备拿它做上网本系统的人请忽略这些。

更新日志

今天给我的网站修补了如下bug:1、atom输出中的content标签少了type字段。导致含有html的entry在google reader以及IE8下显示原始的html标签。2、修正发布时间显示的时候被截断的问题同时增加如下功能及改动:1、给首页及blog页面添加google analytics2、把MathJax加到blog的显示页面中3、把view层从jstl更换成freemaker4、可以在blog上留言。5、blog的文章可以显示分类。发布的时候可以选择分类。6、添加google analytics

TLS’s Server Name Indication

我的一个同事打算在单个IP上通过http虚拟主机的方式配置多个https域名。关于这个问题的讨论可见这里:https://blog.delphij.net/2009/06/apacheiphttps.html 。令我惊讶的是,他成功了。后来我发现,Apache和delphij所说的问题,是针对SSLv2的。TLSv1中的Client Hello请求可以带Extensions,其中extension type中有一类就是server_name。而wget在发起https请求的时候并没有把这个带上,而IE8带上了。其它的我还没测试。总之nginx是支持根据这个选择所用的证书,这个功能在rfc4366中被称之为Server Name Indication。查了一下关于SNI的支持情况:库: openssl: 0.9.8f客户端:Mozilla Firefox 2.0 or laterOpera 8.0 or later (with TLS 1.1 enabled)Internet Explorer 7.0 or later (on Vista, not XP)Google ChromeSafari 3.2.1 on Mac OS X 10.5.6服务器:apache/nginx的较新版本都支持,主要取决于tls库(比如openssl)。

我在想怎么在苹果店浏览其它网站

昨天去了西单的苹果店,是家很小的,应该不是新开的吧.反正比三里屯的小多了,而且它很恶心的是,利用家长控制功能只让上苹果的官网和taobao.然后我就在想怎么能上其它的网站。我发现它有perl和python和java。可惜我不会python,否则应该很容易。我想用perl从cpan装LWP,但是不知道为什么,CPAN不好使。然后我就想,手写一段java代码,就可以从网上以http方式下东西了。但是下什么东西下来呢?如果能找到一个纯java的浏览器就好了。否则那个系统连gcc都没有。下个opera下来? 需要安装吗? 呃,关键是我对苹果的系统不熟悉。。。

在chroot下跑tomcat

我承认我代码写的很烂,为了可以放心大胆的继续开发后续功能,所以我急着要把tomcat扔到一个较为安全的环境中。首先,第一点是要把用户权限降下来。不要让tomcat在80/443这样的特权端口上监听,而是8080/8443这样的。然后通过iptables做转发(如果数据量不大或者用xinet也可)然后我创建了一个目录,/export/tomcatroot,作为chroot的根目录。然后下载tomcat,解压缩。然后下载jre,解压缩。然后创建一个lib目录,放动态链接库。root@snnn:/export/tomcatroot# ls
apache-tomcat-7.0.4 apache-tomcat-7.0.4.tar.gz jre jre22.bin lib为了检查是否缺少动态链接库,需要有ldd。为了能使用ldd,必须把/lib/ld-linux.so.2复制到/export/tomcatroot/lib下,并且把static版本的bash放到/export/tomcatroot或它的某个子目录下。还有我发现还需要cat这个命令。root@snnn:/export/tomcatroot# cp /bin/cat binjava需要的so没几个。# ls lib
ld-linux.so.2 libc.so.6 libdl.so.2 libm.so.6 libnsl.so.1 libpthread.so.0然后我发现JAVA还是起不来。/jre/bin/java: error while loading shared libraries: libjli.so: cannot open shared object file: No such file or directory。经查,原因是没有挂/proc,因为java启动的时候是从/proc/self/exe读取自己的位置。于是干脆把/dev和/proc都mount了。root@snnn:/export/tomcatroot# mkdir proc dev
root@snnn:/export/tomcatroot# mount -o bind /proc /export/tomcatroot/proc
root@snnn:/export/tomcatroot# mount -o bind /dev /ex…

生成DOM树的时候怎么在根节点上添加namespace定义?

我想生成这样一棵DOM树<servicexmlns="http://www.w3.org/2007/app"xmlns:atom="http://www.w3.org/2005/Atom"><workspace><atom:title>Main Site</atom:title></workspace></service>我知道在创建根节点的时候用doc.createElementNS("http://www.w3.org/2007/app", "service");就可以生成这样的节点:<servicexmlns="http://www.w3.org/2007/app" />但是假如我想同时在这个节点上定义atom这个namespace呢?该用什么方法?我现在用createElementNS创建节点的时候它都是在需要的时候才定义namespace

关于计数器的想法

我想统计每篇日志的点击量。你们看看我的想法对不对。首先,尽量的把同一个人在同一个浏览器会话中的多次点击计算成一个。那么,首先,这些页面必须启用session,即,没有session的访问即创建session。然后服务器在session中放一个Set<String>。对于需要统计的页面,把url往这个set里面插,如果insert返回true,就是说set里面现在还没有,那么去更新数据库,计数加1。可以不?

勉强能发文了

今天写了一个atom publishing service,然后可以利用这个接口加上live writer发日志了。但是有一个小问题没有搞定。我在发布成功后回复的包里加上了response.addHeader("Location", url);但是貌似没有起作用。而eclipse的那个server monitor功能我怎么用都不好使,一直监听不到包。现在我想到一个折衷的方案就是把我本机的8080映射到我家路由器的8080上,然后访问路由器的8080,并通过wireshark抓包。这样应该能抓到。我在想,能不能在tomcat上直接部署一个SIP server?睡吧。明天早点起来

在网游中嵌入sina微博?

不知道有没有哪个网游准备把sina微博嵌入进去。不是说这个网游公司自己做一个微博,而是直接借sina的平台。在网游中发生某些事件的时候,自动通过sina微博广播出去。目的是通过这个平台做宣传。最好是支持能直接在客户端截图直接发。况且,一旦关闭了游戏客户端,在游戏里的什么记录都没有了。但是在微博上依然能看到一些重大事件的记录。嗯,会不会有人拿这些信息去盗号呢?这就要看GM根据什么来判断帐号是不是你的了。

一个游戏想法

刚想到一个玩法:在游戏里设计一个铜人巷这样的场景。是个单独的副本,进入之后会有很多怪物从四面八方涌过来。拿回合游戏来说,你就得不停的遇怪进战斗,而且还没经验。但是,战斗奖励可能是很珍贵的物品,大多数情况下是草根树皮等不值钱的草药。RMB玩家可以购买炸药,不用进战斗直接把周围的怪炸飞。奖励掉路在地上,如果不拾取,高级物品出副本的时候自动邮寄到邮箱。这个特效可以做华丽一些,就像三国无双里一路放无双放到末尾一样。有三点:
1.它不是彩票。它是玩家通过努力所得(一直释放大招)。所以是合法的。
2.玩家很爽。N多怪倒下,地上都是金灿灿的。奖励是自己打出来的,不是买的。
3.使用方便,消耗速度快。
4.在审计这个问题上,从来不认为战斗中消耗性药品的价值会传递到战利品上。为了体谅玩家包裹容量有限,出副本的时候有个NPC,支持退货。

2010-11-20

今天一时兴起想重写下blog,用java实现这样就可以彻底抛弃php了。然后下午回来开始写,目前已经完成的部分有:1、index页。翻页还没做2、内容页。不能显示评论、不能写评论。3、rss和atom顺便准备把oauth整合进来,用sina的账号做登录,方便别人留言。可以说,oauth已死,有事烧纸吗?明天要去学车。大约后天替换上来。

tomcat的classloader的问题

今天用jstl+spring写一个小东西的时候,我用这样的方式引入jstl:
xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:fmt="http://java.sun.com/jsp/jstl/fmt"
然后用这样的方式格式化一个java.util.Date变量<fmt:formatDatepattern="yyyy-MM-dd"value="${now}" />结果遇到这样的错误:
org.springframework.web.servlet.support.JstlUtils$SpringLocalizationContext cannot be cast to java.lang.String
查了一下发现,原来是这样:我把spring的jar放在了tomcat的lib目录下,而把jstl放在了自己的webapp的lib目录下。结果因为classloader不同,没有能从SpringLocalizationContext 转成 LocalizationContext。How Sadly... 还是怪我对java的web开发太欠缺经验了。

准确率90%是个什么概念?

最近看到这样一个问题。
拿胃癌来说,我所知道的最准确的诊断方式就是做胃镜。假设在有胃癌的情况下被检查出胃癌的概率是90%,并且在没有胃癌的情况下被检查认为是胃癌的概率是10%。并且胃癌在群体中的患病率是千分之一。
如果现在我去做胃镜检查,检查结果表示可能是胃癌。那么我实际上有胃癌的概率是多大?
通过贝叶斯公式可以算出,这个概率是0.001*0.9/(0.001*0.9+0.999*0.1)约等于0.89%。
好吧,既然你说90%太低了,那么高一些。假设在有胃癌的情况下被检查出胃癌的概率是99%,并且在没有胃癌的情况下被检查认为是胃癌的概率是1%。那么实际上有胃癌的概率是0.001*0.99/(0.001*0.99+0.999*0.01)约等于9.02%。
我觉得可以得出两个结论:
1、每年花上千元做体检是没有必要的。只有那些对发病率很高的病做检查才是有意义的。
2、医生只是拼命的开检查单,实际他们自己也不怎么信。我的观察是只有检查结果自相矛盾的时候他才会把准确率搬出来做挡一挡。

“swapper: page allocation failure”这个日志可忽略

我的messages里有很多这样的日志:Nov 8 06:57:03 snnn kernel: [239273.336284] swapper: page allocation failure. order:4, mode:0x4020
Nov 8 06:57:03 snnn kernel: [239273.336292] Pid: 0, comm: swapper Not tainted 2.6.xx-xx-virtual #xx-Ubuntu然后是kernel的Call Trace。很明显,这句话的意思是说内存不够了。据我对Call Trace的统计发现,无一例外都是在执行ip_finish_output函数的过程中使用kmalloc分配内存失败。据我找到的资料看,这个是Xen特有的。然后我从xen的邮件列表中找到一封06年的邮件,http://lists.xensource.com/archives/html/xen-devel/2006-12/msg00490.html,邮件里这么说:“Harmless and not entirely unexpected. I'll add __GFP_NOWARN to the allocations to quieten things down. ”同时在red hat的bugzilla上也找到了类似的问题,信中说,“The good news is this is just diagnostic, and not indication of an actual failure. The problem is we're trying to satisfy a fairly large allocation of a certain type, which after the machine has been up for a while, is difficult. We retry atomic allocations when they get failed, so the system keeps going.. ”。于是可以放心的舒口气了。下面接着说到,“That said, the driver shouldn't be asking for such obscene amou…

svn+ssh小记

图片
因为lighttpd貌似不支持subversion,我就只好采用别的途径访问svn。服务器不需要做什么配置修改也不需要单开多余的进程,但是客户端需要2个东西:1、TortoiseSVN2、cygwin并且装了ssh client首先在服务器上看下,/export/svn$ ls -lhad *
drwxrwsr-x 7 www-data subversion 4.0K 2010-10-29 00:16 miscsvnadmin在创建repos的时候,是采用组内可写(g+rw)的方式,组是subversion。所以用root添加一个用户,名字可以随意,但是必须在subversion这个组里。$ adduser --ingroup subversion svnuser这样,这个用户就可以读写svn仓库里的文件了。然后切换到svnuser这个用户下,用ssh-keygen生key
$ ssh-keygen -b 2048 -t rsa -f sshkey
$ cat sshkey.pub >> .ssh/authorized_keys然后用chmod把ssh和authorized_keys的权限分别改成0700和0600。然后把key复制到我的笔记本上。
然后从笔记本测试登陆
ssh -i sshkey svnuser@myhost.com
然后在服务器上修改authorized_keys在刚才那行key的前面加上no-port-forwarding,no-agent-forwarding,no-X11-forwarding,no-pty,command="svnserve -t -r /export/svn/ --tunnel-user=sunchangming"目的是为了防止用这个key获取shell或是做端口转发。再像刚才那样测试:ssh -i sshkey svnuser@myhost.com登陆就会失败然后就是修改TortoiseSVN的配置告诉它去哪里找key然后最终就可以用这样的方式访问了 svn+ssh://svnuser@myhost/misc缺点是执行svn操作的时候会有黑乎乎的窗口弹出来,我想用cygwin的run.exe去掉它,但是没有成功,貌似得改点东西。没有help,没有文档,名字起的实在是太普通了想google都难。这个…

更换到lighttpd

把http server从apache换成了lighttpd,原有的应用,如wordpress/awstats都挪过来了,可是subversion我没辙了。lighttpd有mod_dav模块,但是貌似很简略,不知道能不能用它做svn服务器。官方的文档中有一篇是讲在lighttpd之外再开一个apache然后把请求转给它。http://redmine.lighttpd.net/projects/lighttpd/wiki/ApacheSubversionRecipe,就这样,还有无法提交的bug未解决。
本来想用tomcat代替apache,但是跑php-cgi的时候问题出在缺少REDIRECT_STATUS这个环境变量。有一个简单做法就是写一个wrapper把php5-cgi套起来先设置REDIRECT_STATUS环境变量然后执行/usr/bin/php5-cgi,但是我不确定这个wrapper该怎么写以及会不会产生安全风险?总之官方文档的意思是尽量不要以cgi的方式运行php?
囧。要不要换回apache?

2010-11-11

貌似明年的今天更精彩,因为是6个1。嗯,不过应该都跟我没啥关系。刚刚得到一个好消息,如果我打算继续在这里住下去,那么房租每个月给我降200,从下次交房租的时候开始。其实我本来是这个月或者下个月打算搬去南城吃卤煮的,离MM也近点。嗯,犹豫中……这么便宜的房子在北京估计得到二拨子、史各庄才能找到了。想当初住回龙观的时候真是欢乐啊,虽然便宜且宁静,但是晚上娱乐活动挺多的。他们喜欢去打台球或者杀人,我喜欢一个人散散步。当时在回龙观社区网上还认识了好几个朋友。最终直到搬走的时候,我也没把那“井”字形的路认对几条。twitter观光团的力量很大,让我的blog的单日的visitor数量首次突破1000,rss的订阅数也从20多个涨到100多个。于是,于是,我现在写东西紧张啊,就像被蒙上眼睛在大堂里演讲一样。路过的朋友请留下点什么吧,陪我说说话。今天在网上查了一下,貌似vmware还没有支持2..6.35 kernel的版本,以至于我暂时都没有win2000用了,也暂时不方便上QQ了。虽然webqq最近又可以用了,可是貌似它故意没有把一些功能放出来,比如退群。而我加了10几个群,太吵了。我在创建vmware的虚拟磁盘的时候特地选的是单一文件。qemu支持这样的vmdk文件,但是貌似有限。我用这样的方式能启动我的freebsd:qemu-kvm -drive file=FreeBSD.vmdk,if=scsi,bus=0,unit=1,media=disk,format=vmdk,boot=on ,但是无法启动win2000,引导失败。我在寻找关于freebsd对arm的支持以及uboot。我想试一试看能不能把某个bsd用uboot在手机上引导起来。delphij 今天遇到一个很郁闷的问题,他的DNS收到一些很奇怪的查询请求,IP包的src address是广播地址。他问我这样的包该不该收,我猜他是想在防火墙上禁掉这样的包。可是我查了一半天文档也没有得到100%确定的答案。今天在linux下看man手册的时候还看到一个很有意思的东西,socket中有一种特殊的domain是AF_NETLINK(freebsd下没有),大致思想是利用socket接口,在用户态和内核之间传递数据。由于大家对socket的用法都很熟悉了,所以看一看手册很容易上手。通过这样的方式可以扩展系统功能而不必增…

满篇都是page allocation failure

我的web server是买的256M的VPS,按理说内存不小了,平时都跑的很平稳的。但是偶尔,某些时间点,比如凌晨3:00或者凌晨7:00的时候,就会报告page allocation failure。可是我的crontab中没有在这些时间点跑的东西啊,莫非是web spider干的?。现在/var/log/messages里主要的信息都是page allocation failure。烦死了,如何在内存有限的情况下选择一款合适的http server真是难题啊,目前看来最保险的就是apache的prefork模式。每个进程占大概20M,规定好最大只能有5个进程,基本可以限制死内存上限为100M。可惜我前几天切到mpm event了,过几天切回去看看。这种偶发的事情是最难查的。

队列(一)

我刚来公司的时候,我的头lch给我以及其它的几个新毕业的同学出了一道练习题:写一个FIFO队列,要求是线程安全的。后来在新项目组招人的时候,这个被我拿来当笔试题,大多数人答的还不错。为什么说lch是神人呢?因为这个问题可难可易,可深可浅。对于科班出身的朋友,那么在学完《数据结构和算法》这门课之后,自己用C/C++或Java写一个队列不是难事儿,但是这门课一般不考虑多线程的问题。如果把多线程的问题考虑清楚了,研究结果在国外的二流杂志上发几篇paper都行。这个题中所说的队列,总体来说可以分为bounded和unbounded的。bounded是说在插入的时候,如果满(size()=capacity),则等待,而unbounded则没有这个问题,直接插。在lch看来,这两种队列的实现方式有很大差异。lch当时提到说这其实是apue上的例题。我刚去翻书把代码找出来了#include <pthread.h>struct msg { struct msg *m_next; /* ... more stuff here ... */ }; struct msg *workq; pthread_cond_t qready = PTHREAD_COND_INITIALIZER; pthread_mutex_t qlock = PTHREAD_MUTEX_INITIALIZER; voidprocess_msg(void){ struct msg *mp; for (;;) { pthread_mutex_lock(&qlock); while (workq == NULL) pthread_cond_wait(&qready, &qlock); mp = workq; workq = mp->m_next; pthread_mutex_unlock(&qlock); /* now process the message mp */ } } voidenqueue_msg(struct msg *mp){ pthread_mutex_lock(&qloc…

2010-11-7

今天在http://sudone.com/在技术文章的时候,发现旁边有杨建的博客链接,然后把他08年末写的那些技术分享认真学习了一遍。很佩服他所做出的成果,之后也不免唏嘘一番,我和他差不多同时去的sina(我比他晚半年左右)。他和我熟悉起来最早是因为他经常会有些FreeBSD的问题来问我。我觉得当时,我和他的技术水平差不多吧,各有所长。可是两三年后,看看人家在sina做出的东西,再看看我,唉……杨建现在在互联网行业名气可大了。而我在sina那段时间,什么大东西也没做,主要是在学习。比如去sina之前,虽然会用mysql,但是仅限于自己个人用用。而去sina之后,有大规模的mysql集群需要维护。那时候我最熟练的就是修库、做从库了。08年杨建在sina财经带一帮人干的热火朝天的时候,我来了现在这家公司,然后从头到尾做完了一个项目,可依然没有什么可拿出来说的。虽然我blog每周都在更新,但是我的blog上基本不会谈自己的工作,是的,你看到了很多很多技术话题但是那都是和我在公司的工作无关的。其实在内部的技术交流会上我也讲过很多次,但主要是针对项目本身讲,比如你需要的什么什么接口,什么什么服务该找公司的谁谁谁要,服务器上线的时候在安全设置上有哪些要求等等。外边的人也不感兴趣。就拿我刚做完的那款网络游戏来说吧,你要说技术上有什么创新?的确挺大的,第一个采用java,整套架构包括DBMS都是新写的。可要说技术难点、核心算法,无非就是Btree和A*,其它都是简单的if…else, foreach。可是对于Btree这样的东西,不要说科班出身的了,就算是学文科生考过计算机等级考试三级的都知道。(在我正在写的时候,又有人通过支付宝给我捐了三块钱)Ok。我准备把我之前某次ppt的内容补上文字,写一个系列叫《网络游戏服务器架构设计》,做为阶段性的工作总结。皆属原创,绝无抄袭。如果侵犯到任何人的知识产权,请来电话或来信告知。

imsettings 续

我还是有几点没弄明白
1、为什么只有gconf那个backend往dbus注册了,而xim没有。
2、imsettings-xim由谁来启动?我现在是手动启动的
3、QT的backend目前是不是根本就没做完呢,不能用?
4、我能清楚的看到,当imsettings-xim从dbus收到ChangeTo请求的时候,把消息通过gxim库转发给了当前的XIM server。于是我当前的输入法就失效了。但是,新的输入法并没有起效啊。如果这个能工作,那么就实现了所希望的,在不重启程序的情况下切换输入法(天哪,这个要求在windows下多容易被满足啊)
5、hildon-input-method进程只要被kill掉,那么机器会立马关机。这是为什么?这意味着如果要用imsettings框架,那么必须修改系统本身出厂自带的一些配置文件,这一点,对于我打包很不利。
6、找不到关于XSETTINGS的详细资料,不知道maemo上有没有符合XSETTINGS的daemon。否则gconf那个backend就是个摆设吧?并且,这种方式应该只影响程序启动的时候。并且,貌似QT不理会它?

imsettings on n900 剖析

我提交到maemo上去的im-chooser有问题,刚有个日本人问我怎么用不了。http://maemo.org/packages/package\_instance/view/fremantle\_extras-devel\_free\_armel/im-chooser/1.3.2-1/
然后找这个问题的答案我花了有3个小时。
首先,在我手机上的现象是,打开im-chooser,列表是空的,没有任何可以选。然后我去查im-chooser的代码,发现原因是cur_iter==NULL,就是说它不知道当前用的是什么输入法,于是它就不显示任何输入法。
它不知道当前用的是什么输入法在于imsettings_info_is_system_default对于任何输入始终返回false。而 cur_iter==NULL的真正原因是那个while循环中strcmp(running_im, name)始终都不等于0.说来说去就是,我当前所用的im,它没在它的im模块列表中找到。看来这还是imsetting没挪对。因为我在手机上运行imsettings-info其结果是任何项目前面都没有星号。找了许久,看起来是imsettings_request_whats_input_method_running这个函数的问题。
为了方便于调试imsettings,我去找它的dbus接口说明。http://code.google.com/p/imsettings/wiki/DBusInterfaces。可是它没有说dest以及destination object path应该填什么。于是我就打开dbus-monitor,看了一下输出,然后照抄过去。
dbus-send --print-reply --dest=com.redhat.imsettings /com/redhat/imsettings com.redhat.imsettings.WhatsInputMethodRunning,在我电脑的fedora上运行返回是ibus,但是在我手机上返回的是空字符串。
然后找到大概是因为ibus的daemon不是由imsettings启动的所以imsettings不知道ibus的pid,所以在 imsettings_manager_real_whats_im_running中用_get_pid_from_nam…

我才发现web.qq.com上不去了

我说,您用得着这样吗?! 这个网站碍着谁了啊?它完全不在360和tencent的冲突范围内啊。但是你为了逼用户卸载360,于是你就把这个网站也关了?

今天多亏n900帮我把笔记本引导起来了

今天升级fedora,从13升级到14.但是那个傻瓜yum,不知道为什么,把我的/boot/grub2/下的东西给我清理掉了。而且是把大部分mod删掉了。没有这些mod当然就无法启动啦,grub直接进了rescue mode。但是grub.cfg还给我留着,谢天谢地。然后呢,如果现在是在公司,那么很好办,随便找个电脑刻一个usb启动盘就能把它救活。但是现在我在家里,除了n900什么都没有。这个状况也比较囧。我想用chainloader引导win7,但是ntfs.mod和chain.mod都没有。内置的只认识ext3文件系统。于是我就想到了n900,还好我的n900有microSD卡,可以直接把microSD卡通过usb线导出给电脑。于是,我就在手机上用mkfs.ext3把SD卡格式化成ext3,然后拿手机上http://mirrors.163.com,从cygwin目录下面下载了grub2的编译好的文件,主要是那些mod,企图用它来启动。可惜不行。后来就从fedora的目录下找,但是只有grub1没有grub2.然后就去ubuntu的目录下找,还好,这次有。
然后把deb包用wget下载到手机上,然后用deb -x 解压缩到存储卡上,然后用cp把那些mod文件移动到存储卡的根目录下,否则路径名太长,在grub2的rescue mode下输入那么长的东西很不方便。
然后我就用insmod (hd0,1)/normal.mod这样加载,结果还是不行。ntfs.mod可以加载,但是normal不行,说找不到文件。但是文件明明在啊,于是我想,肯定是依赖的mod没有找到。然后我就想起来prefix这个环境变量。
set prefix=(hd1)/
然后insmod normal就成功了。
然后进入普通模式
> normal
然后加载配置文件
> configfile (hd0,7)/grub2/grub.cfg
然后就是那个我很熟悉的界面了。可惜字体没有加载进来,不过这个无所谓啦第一次启动,还是失败了,2.6.35的kernel在刚开始启动的时候就panic了。但是老的2.6.34的kernel 是没问题的。
所以我现在就可以打开firefox用电脑敲下这段教训了。
教训是: 升级完系统后,一定先仔细检查grub,重新更新一次grub2的配置文件是最保险的。然后再重启。

论仙人掌能吸收辐射

光线是电磁波 电磁波都是辐射 仙人掌不是全透明的 所以仙人掌能吸收辐射

uboot-pr13 发布了,是Carsten Munk提交的!

http://maemo.org/packages/view/uboot-pr13/
但我不知道这个包做了什么,怎么用。
我去看看meego的wiki更新了没

用QML写了一个支持新浪微博的客户端

https://sunchangming.com/qtsinaclient.html
在qt demo的基础上改的
主要是 支持OAuth以及用数据库保存用户名密码

Fedora 14快要发了

Fedora 14快要发了,大概是后天,或者大后天。
于是我就可以用Qt 4.7了。

qt4.7自带的twitter demo

图片
纯粹用QML写的。

ibus-pinyin在n900上的安装指南

图片
提交bug来这里:http://code.google.com/p/ibus/issues/list 用中文写bug描述就行介绍:起因是我很无聊,无聊所以我玩twitter,然后发现 Khweeteur的图标很漂亮就装了。然后在twitter上遇到了 Khweeteur的作者khertan 。我说"khweeteur is very good,but I cannot type chinese ",然后khertan来问我是怎么回事,是Khweeteur的问题还是中文不在utf-8范围内还是说maemo下qt程序都不能输入中文。然后我告 诉他,maemo下qt程序都不能输入中文。于是他就只能很无奈的表示这事他解决不了。于是我决定把ibus搞搞。这件事情拖了很久了。之所以最近有时间了,是因为我把工作辞了,年前也没有心思去找下份工作。所以今晚一口气给n900更新了好几个软件。飞信,keepassx,最后一个,就是ibus-pinyin。我认为,linux下中文输入法可以分为这么三代: 第一代是fcitx,俗称小企鹅,有点像智能ABC。第二代是scim,提供了微软风格的整句输入功能,作者是Su Zhe,在smth上经常能看到他。前一阵他在google工作,现在不知道还在不在,不过他貌似不过问scim的事情了。第三代就是ibus,一套新的 引擎。maemo平台下,ibus的日文输入法已经有了,但是中文的一直没有。大家都知道nokia在主推QT,但是n900上却一直不能在QT程序中输入中文。ibus-pinyin弥补了此遗憾。安装步骤首先强调下,这个软件的界面本身就是汉化好了的。但是我机器的语言是English,所以界面才是英文的。1、因为mscim和ibus有冲突,所以如果你现在装的有mscim(基本上必然),请一定打开xterm运行apt-get purge mscim然后关机重启,然后再装ibus-pinyin。2、你的源是否包含extras-devel?如果不包含,找论坛其它的文档,加进去deb http://repository.maemo.org/extras/ fremantle-1.3 free non-freedeb http://repository.maemo.org/extras-devel/ fremantle fr…

正在向maemo repos提交ibus-pinyin

今天更新了下maemo sdk,然后把ibus-pinyin_1.3.11代码下载下来。今天编译比较顺利。可能是因为python版本的问题,生android.db总是不成功。我只好跳过去,而用fedora提供的。不知道这个数据库和cpu架构相关吗,放到arm上能不能用。总之我在模拟器里面测试是可以用的。
我之前测试ibus pinyin 一直没有成功的原因是我启动Xephyr的时候没有加-kb,所以键盘就不能用。唉……
网速很慢……很慢……

keepassx 0.4.3 提交到maemo5 repos中

[2010-10-29 14:50:02] Processing package keepassx 0.4.3-1. Uploader: snnn, builder: builder2
[2010-10-29 14:50:04] Building keepassx 0.4.3-1 for target 'maemo-fremantle-armel-extras-devel'
[2010-10-29 14:52:29] OK
[2010-10-29 14:52:34] Building keepassx 0.4.3-1 for target 'maemo-fremantle-i386-extras-devel'
[2010-10-29 14:54:31] Signing build results
[2010-10-29 14:54:32] keepassx 0.4.3-1 has been queued for loading into fremantle extras-devel repository
[2010-10-29 14:54:32] You can find more info about this build here: https://garage.maemo.org/builder/fremantle/keepassx_0.4.3-1/从0.4.3升级到0.4.1。只是小版本号升级-------------------
0.4.3 (2010-03-07)
-------------------Fixed crash when editing groups (regression introduced in 0.4.2) (Bug #2964295)-------------------
0.4.2 (2010-03-03)
-------------------Re-added "Close to Tray" optionUse icon of parent group when creating a new entry (Bug #2494084)Make database file saving transactional to avoid data lossFixed build errors with …

openfetion 2.0提交到maemo repos中

http://maemo.org/packages/view/openfetion/
这大概是我最后一次更新吧。我也不清楚2.0到底增加了什么功能,但是Build-Depends我必须增加libxss-dev, libsqlite3-dev, libnotify-dev才能编译过去。可惜我刚对debian的打包系统熟悉了,结果,meego非要用rpm。唉……学吧学吧
p.s. maemo怎么不提供一个下载统计的功能呢

meego 1.1 发了

嗯,太晚了,等我有时间了刷吧

awstats的纯真IP插件

首先用CPAN安装这个包 http://search.cpan.org/~sunnavy/IP-QQWry/lib/IP/QQWry.pm 即运行cpan,然后输入install IP::QQWry然后在这里下载 qqhostinfo.pm,然后放到awstats/wwwroot/cgi-bin/plugins目录下。这个文件是我在网上搜来的,然后改了一小点东西。如果你打算拿来用,这里面有一行这个,$qqwry = IP::QQWry->new('/export/QQWry.Dat'); 需要改成你机器上的QQWry.Dat的地址,然后在 awstats的配置文件里写上LoadPlugin="qqhostinfo"。这个需要写在LoadPlugin="hostinfo"后面。 缺点是不支持ipv6。p.s.数据库的下载地址是 http://update.cz88.net/soft/qqwry.rar,只要那个QQWry.Dat即可。数据库的格式在这里 http://lumaqq.linuxsir.org/article/qqwry_format_detail.html

maemo pr 1.3 发了

我out了。 刚刚在twitter上看见 晚上刷吧。现在不想开电脑。 唉,没有支持qt的中文输入法,就是半个残废

给路由器刷了DD-wrt

http://dd-wrt.com/site/support/router-database,搜索DIR-615,下载dir615c1-factory-to-ddwrt-firmware.bin。下载的dir615c1-factory-to-ddwrt-firmware.bin文件可能不能直接用。这是个二进制文件,文件末尾的那一段字符串是hardware id,必须要与现有的firmware匹配才行。我的firmware在dlink.com.cn上找不到,大概是因为型号太老了。然后根据提示,去http://tsd.dlink.com.tw/ 找到DIR-615,然后找到现在所使用的firmware,用二进制编辑器打开,找到最末尾的hardware id,然后替换掉dir615c1-factory-to-ddwrt-firmware.bin末尾的hardware id。其实区别就是最前面多了一个01。就目前搜集到的信息来看,C1/C2的hardware id要么是AP81-AR9130-RT-070614-02,要么是00AP81-AR9130-RT-070614-02或者01AP81-AR9130-RT-070614-02。刷的方法就是用内置的页面刷:打开http://192.168.0.1 ,然后在“工具”-〉“固件”里面。上传,刷新即可。这个页面一再强调,不要用wifi刷。我家拨号用的是PPPoE,刷之前,把配置备份一份,下载下来,文件名虽然是config.bin,但是其实是个二进制文件。很容易找到用户名和密码。不晓得dd-wrt里面那个SuperChannel 是什么。并且我刷的这个版本不支持ipv6。并且不支持openvpn,唉…… 我最想要的两个功能啊。目前没发现dd-wrt有什么优点

启用ipv6

我的网络知识比较陈旧,面对着ipv6无奈的抓耳挠腮。首先,我新买的vps支持ipv6,但是默认它没有帮我配置。
一边查文档一边写我知道的ipv4的长度是32位,ipv6的长度是128位
ipv4的header size是192位,ipv6是320位(但是支持压缩)
IPSec其实是为ipv6设计的
特殊的移动(mobile ipv6)以及自动配置支持
支持flows
头部可以压缩,也可以扩展关于地址:
ipv6的地址可以分为这么三类:provider based、provider independent或for local use。
provider based Global Unicast Address都是以001开始,也就是说,第一个数字要么是2(0010)要么是3(0011)。最前面48位是provider id,中间16位是子网ID(Subnet ID,or Site ID),最后64是主机ID(Host ID)。
Private ULA Unicast Address是FC00开始。
Link-Local Unicast Address是FE80开始。
在使用IPv4的时候,大多数情况下,一个网卡只用一个IP。但是ipv6的时候,可能会同时配置三种IP,global、 link local和 site local每样一个。以我的个人服务器的网卡为例:
# ifconfig -a
eth0 Link encap:Ethernet HWaddr aa:00:00:f5:49:b6
inet addr:173.245.73.182 Bcast:173.245.73.255 Mask:255.255.255.0
inet6 addr: fe80::a800:ff:fef5:49b6/64 Scope:Link
inet6 addr: 2001:470:21:31::adf5:49b6/64 Scope:Global
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
它配置了两个IPv6,fe80::a800:ff:fef5:49b6,2001:470:21:31::adf5:49b6,后面的/64和ipv4的时候含义类似(类似于192.168.0.1…

让apache2通过mysql做http digest认证

mysql里面要准备一张表CREATETABLE`users` ( `userid`varchar(30) NOTNULL, `passwd`varchar(80) NOTNULL, `realm`varchar(80) NOTNULL ) ENGINE=MyISAM DEFAULTCHARSET=utf8这里面的passwd其实是用MD5('userid:realm:明文密码')的方式算出来的。例如insert into users values ('snnn',MD5('snnn:host1:12345'),'host1');然后在.htaccess或者httpd.conf中针对对应目录这样配置:<Directory "/var/www/mtrg/"> AuthType Digest AuthName "scm" AuthDigestDomain /mtrg AuthDigestProvider dbd Require valid-user AuthDBDUserRealmQuery \ "SELECT passwd FROM users WHERE userid = %s and realm=%s" </Directory>这里的AuthName就对应着数据库里面的realm。参考文档:
http://httpd.apache.org/docs/current/mod/mod_dbd.html
http://httpd.apache.org/docs/current/mod/mod_auth_digest.html
http://httpd.apache.org/docs/current/mod/mod_authn_dbd.html

突然又发现一个免费的ssh代理

是这样的,某,开源软件社区,是采用scp的方式提交源代码包的。尽管它不让用ssh直接获取shell以防止你在他们的服务器上干更多的事情。但是在用ssh -D连接的时候,如果加了-NT,那么就不会请求shell。就可以了。
也说不清楚这是喜剧还是悲剧。因为如果大家都知道了,那么接着,这个玩意儿就要被防火墙挡在国外了。更多的人会郁闷。
哎……

iptables的一个很人性的设计

连delphij都说过,远程配置防火墙是一件很危险的事请。(恕我找不到出处)
至少,这是一件必须非常谨慎的事情。如果写错了,导致ssh断掉。那就只能求机房的哥们儿帮忙了。不过现在的机器如果带的有IPMI的话,也比较好办。
回正题,iptables-apply命令真的很人性化
#iptables-apply /etc/iptables.rules
Applying new ruleset... done.
Can you establish NEW connections to the machine? (y/N) y
... then my job is done. See you next time.

Xerces-C++的注释很超前

Xerces-C++ 3.1的DOMLSParser类的 virtual DOMDocument* parseURI(const XMLCh* const uri) 的注释里面有这么一段:@exception DOMLSException PARSE_ERR: Starting from Xerces-C++ 4.0.0 this exception is raised if the \DOMLSParser\ was unable to load the XML document. DOM applications should attach a \DOMErrorHandler\ using the parameter "error-handler" if they wish to get details on the error.这帮写代码的人真有前瞻性。连下个版本的代码抛什么异常都想好了。

2010-10-11

我在担心live writer这个项目会不会被砍掉?毕竟live space都不做了。昨天去参加了OpenSourceCamp & CommunityOne Beijing 2010,来的有开发者、产品开发经理、产品推广经理还有VC。很多talk都是英文的,而且语速非常快,深感学习英语重要啊。末尾,我给了一个大概3分钟的即兴的light talk,介绍了下freebsd社区。本来想好了要炫耀下dtrace和zfs,结果一上台就忘了。尽管技术性不强,但总体来说这是个非常好的机会。我昨天先是见到了以前的同事Bill Xu,然后又和intel的meego项目的经理以及apache harmony的开发人员聊了很久。顺便了解了一下postgresql的一套分布式Transaction方案,5台机器总计每秒能执行6000个存储过程,虽然这个描述很粗糙,但是听起来很诱人。能满足我的应用要求了。最后感叹一句,meego这个项目,真是非常微妙啊!

maemo flasher可以在64位win7下用了

我刚更新了libusb。然后maemo flasher可以在64位win7下用了。然后拿它把meego引起来,正在用zypper更新中。

收到msn space搬迁的信了

正文如下:
"亲爱的用户,您好,欢迎使用Windows Live系列产品。
尊敬的Windows Live Spaces(共享空间)用户: 为了提供更加完善的博客服务,微软将在全球大部分地区与WordPress.com进行合作。 而在中国大陆地区,Windows Live 中国团队考虑到用户的实际需求,正在寻求可能的本地解决方案,希望能为中国用户提供更完善、更实用的本地化博客服务。
进一步的相关信息,我们会及时发送邮件通知您,并在帮助中心上更新,欢迎您随时关注,网址:http://help.msn.cn/spaces.html 。
在正式迁移通知发布之前,您仍然可以通过 http://spaces.live.com 正常使用Windows Live Spaces(共享空间)服务。
感谢您陪伴Windows Live Spaces走过的6年,我们永远是您忠实的朋友!欢迎继续使用微软Windows Live的其他产品。 谢谢! Windows Live 中国团队 敬上"

新工具:ODB

刚在TAO的maillist中看到一个广告,http://www.codesynthesis.com/products/odb/一套C++的ORM框架,看起来不错。我刚知道,GPL的东西,如果不对外分发,而只是用在自己内部的服务器上,是不受其开源限制的。“if you only use your application within your organization, such as running it on your company's servers, then you do not need to make your source code public”

2010-09-29

最近在给一个GUI框架写render,发现字体的渲染真是一件很麻烦的事情啊。在读freetype2的文档,好复杂。今天用svn下了ftgl的代码,准备学习下它的实现。

n900的meego可以打电话了

哈哈! 终于在yum repos中盼来了ofono的更新。 dbus-send --print-reply --system --dest=org.ofono /n900 org.ofono.VoiceCallManager.Dial string:"10086" string:""

C++源文件的编码问题

假设你准备用C/C++写一个"hello world",假设想把"hello world"替换成"世界,你好",或者你准备加一行中文注释。你打算把C/C++的原文件以什么编码保存? utf-8? GBK/CP936/GB18030?假设你打算以GBK方式保存,那么gcc编译的时候也是先转码成utf-8然后再编译,如果你编译的时候忘记加-finput-charset=gbk,那么一个潜在的BUG等着你。(见下面的例子)假设你打算以UTF-8方式保存,VC怎么知道这个文件是UTF-8呢?它是看文件开头有没有BOM。UTF-16的BOM最大的功能是标志字节序,而UTF-8因为是字节序无关的,所以我从来不加BOM。如果你仅靠文件开头几个字符判断文件是什么编码,那么很遗憾,除非你只活在自己的世界里否则这是不可能的。文件编码类型多了去了,你见过GBK/ISO8859-1有BOM吗?那么给UTF-8加BOM意义何在呢?假设你打算以UTF-8 with BOM的方式保存,那么低版本的gcc 是编译不了的。据我测试,gcc 4.4可以,gcc 4.1不行。最后说VC的一个很常见但是很严重的警告"warning:C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失"这通常意味着编译器在以错误的编码打开源文件。大多数人都忽视了。可如果你看完这个测试例子也许会改变想法。代码很短:#include <iostream> enum AlienState{ ALIVE, //活着 DIEING, //爆炸中 DEADED, } ; intmain(int argc,char* argv[]){ std::cout<<DEADED<<std::endl; return0; } 看着似乎都对,但是这个代码在VC下就是编译不过去。enumtest\main.cpp(8) : error C2065: "DEADED": 未声明的标识符因为我保存的时候是utf-8 without BOM。如果你忽略了C4819警告,这意味着…

2010-9-24

可以确信的是n900已经可以打电话了(半个月之前)。只是修补后的ofono貌似还没有放出来。我在这里http://repo.meego.com/MeeGo/builds/trunk/preview/core/repos/armv7l/packages/armv7l/ 看到的依然是9月5号的版本。另外一个很有意思的事情就是有人把u-boot搞上去了:http://al.robotfuzz.com/~al/maemo/u-boot/我不明所以的围观中。现在采用kexec的双启动方案很不好,这个应该能提供非常完美的双启动支持。我下周试一试吧。meego的现状比较微妙。NOKIA压根就不想用所谓的meego UX,它要自己做自己的界面系统,这一点基本是公开的秘密。目前meego的开发情况是两套bug管理系统、两套源代码仓库。关于这个问题详细的可见这里:https://bugs.meego.com/show_bug.cgi?id=4900
https://bugs.maemo.org/show_bug.cgi?id=630对于maemo/meego这样的开源项目,NOKIA的开发策略貌似是这样:内部有一套完整的bug管理(I’m sure)和版本控制系统(?),大部分开发人员只在内部系统上工作。有几个(\<10)开发人员在外部的、公开的bug管理系统上处理bug,两套版本控制系统之间代码同步、合并也由这几个人完成。一个很宏大的项目,对外看起来就像是7-8个人完成的一样。但是nokia这么做也是很有道理的。比如apple/nokia每次公布一个新机型都是非常慎重的通过市场渠道公布("酒后无意被盗"除外)。向bug系统提交bug的时候应该尽可能的提供更多的环境资料(硬件环境以及所用的操作系统),尤其是硬件信息很容易通过core dump file这样的东西泄露出来。这对市场策略是不利的。但是nokia的做法是很让人恼火的。它在一个开源软件的Changelog里面写的bug号是nokia内部bug系统的bug号(NB xxxxx),这让外边的开发者很恼火,提bug的人也会很恼火。

cegui的libtool依赖的问题

我用的cegui的版本是0.7.2
cegui在生libtool的la文件的时候有点问题。# nm libCEGUIBase.a |grep getWindowRendererModule
U getWindowRendererModule# nm libCEGUIFalagardWRBase.a|c++filt |grep getWindowRendererModule
0000000000000000 b guard variable for getWindowRendererModule::mod
0000000000000020 b getWindowRendererModule::mod
0000000000000f60 T getWindowRendererModule从上面的输出可以看出,是libCEGUIBase.a需要getWindowRendererModule这个符号,而getWindowRendererModule这个符号是由libCEGUIFalagardWRBase.a提供的。但是libCEGUIFalagardWRBase.la却把CEGUIBase写到dependency_libs里。于是libtool就把-lCEGUIFalagardWRBase 展开成了/usr/lib64/libCEGUIFalagardWRBase.a /usr/lib64/libCEGUIBase.a。于是链接的时候找不到符号。
/usr/lib64/libCEGUIBase.a(libCEGUIBase_la-CEGUIScheme.o): In function CEGUI::Scheme::loadWindowRendererFactories()':
/usr/soft/CEGUI-0.7.2/cegui/src/CEGUIScheme.cpp:339: undefined reference togetWindowRendererModule'之所以libCEGUIFalagardWRBase.la把CEGUIBase写到dependency_libs里,是因为Makefile.am里有这么一句:
libCEGUIFalagardWRBase@cegui_bsfx@_la_LIBADD = $(top_builddir)/cegui/src/li…

你们团圆过端午,我无聊在家打飞机(有图为证)

图片
今天一天哪也没去。我的vmware坏了,vmmon模块启不来,所以所有的虚拟机里的系统都进不去,于是我也没心情看kernel的书了。 前天一个同事问我怎么在linux下载入一个图片显示出来,我给他推荐了sdl image这个库。结果他发现这个库的demo里面有一个打飞机的游戏很好玩。 于是我今天就想把那个程序好好看一看,改改。最初准备用c++/SDL重写那段代码,写了一大半之后觉得SDL太low level了,吃晚饭的时候就想要不要换成别的库。考察了下orge,觉得orge太复杂了。然后就换成了Irrlicht。不得不承认Irrlicht上手太容易了。

Irrlicht是个3D引擎。我的做法是靠摄像机来达到2D效果。IrrlichtDevice *device; ... ISceneManager* smgr = device->getSceneManager(); ICameraSceneNode* cam = smgr->addCameraSceneNode(); matrix4 projMat; cam->setProjectionMatrix(projMat.buildProjectionMatrixOrthoLH(width, height, 1, 1000), true); 把视点设在很远的位置,然后站在Z轴上对XY平台做垂直投影。但是我不会设置天空盒这样东西,也没有地形信息。于是我就不能用它自带的碰撞检测系统。我是在主循环函数里手动画背景图的:while (device->run() && driver) { if (device->isWindowActive()) { driver->beginScene(true, true, video::SColor(255, 120, 102, 136)); for (int i = 0; i <= width; i += images->getSize().Width) { driver->draw2DImage(images, core::position2d(i, 0), core::rect(0, 0, images->getSize().Width, 480), 0, video::SColor(255, 255, 255…

2010-09-20

终于明白了,linux x86上周一共是2个权限提升漏洞:CVE-2010-3081和CVE-2010-3301
https://bugzilla.redhat.com/show\_bug.cgi?id=CVE-2010-3081
https://bugzilla.redhat.com/show\_bug.cgi?id=CVE-2010-3301
我最初把它两混成一个了。
3301这个bug对最新的fc13有影响。
3081这个bug对最新的Red Hat Enterprise有影响。

zypper

辛辛苦苦在手机上装了好久yum,最终发现meego自带的包管理器是zypper。
第一次用zypper,好奇中。

2010-9-18

装了新版的live writer,界面变得复杂很多,其它暂时还没有发现区别。
最近做东西非常没效率,大部分时间都在开会开会开会。我想把现有的框架进一步完善,可是,能加些什么呢?今天本来商量加入对UDP的支持,仔细讨论过后,否了。JDK自带的那个javascript引擎到底怎样?据说是基于apache的某个实现?那到底是个demo还是个成熟可用的东西?测试一下发地图
查看大图

flock和fcntl的区别

fork之后,flock的锁依然保持。fcntl的锁丢失。
execve的时候,无论是Linux还是freebsd,无论是flock还是fcntl,锁依然保持。
对于flock而言,fork/dup,或是用open以相同的路径获得一个新的fd,对这个fd的锁都是指向同一个锁。例如fork后子进程用flock(fd,LOCK_UN)这个锁,那么父进程也会丢失这个锁。而fcntl的锁则在fork的时候被释放。
另外一个区别是,如果用open以相同的路径获得一个新的fd,那么对这个fd进行close或解锁操作将会导致丢失原来用fcntl加的锁,但是close操作不会丢失之前给老fd用flock加的锁。所以对/etc/passwd这样的文件使用fcntl加锁是非常有风险的,因为不确定你用到的某个函数库需要访问这个文件然后就会导致丢失锁。
Freebsd下fcntl、flock和lockf是相容的。而linux下fcntl和flock不是相容的。进程A用flock获取锁之后,进程B用fcntl依然能获取。
fcntl是posix标准,所以在linux/freebsd下差别不大。但是flock是bsd的函数,linux为了兼容而实现了它。
linux下,lockf是用fcntl实现的。

n900支持ISO9660 CDFS

刚发现n900支持ISO9660 CDFS,作为一个手机,意义何在呢?它又不能插usb光驱。

WP to Twitter有个小bug

WP to Twitter有个小bug,不识别 https:// 这样的url模式。so。。。我切换到了cli.gs。
顺便,测试下发数学符号: \( \delta \)

2010-9-13

今天把手机上的meego重新装了一下,不是yum update,而是下载最新的镜像放进去然后装yum。然后yum update,发现kernel被更新到2.6.35.3-6.3。
打电话和发短信依然是有界面没功能。庆幸的是那个折磨了许久的connman终于可以正常的通过图形界面连接wifi了。
我不能确定是否能充电,因为我还没有找到查看电池电量的方法。
http://wiki.meego.com/Quality/HandsetTestReport/N900Sanity20100913 给出的测试报告中很有意思的一项是“bootup time: 62s“。对于一个手机,开机启动需要一分钟,算不算空前绝后?据我测试开机启动的确是很慢很慢。
而最关心的电话功能的问题,看起来是卡在了ofono上。ofono没有把modem打开。
nokia已经把相关代码提交到了ofono, http://lists.ofono.org/pipermail/ofono/2010-August/003846.html ,但是等待被整合到meego中: http://bugs.meego.com/show_bug.cgi?id=5662
而另外一个很恶心的问题就是关机依然不能用。 http://bugs.meego.com/show\_bug.cgi?id=6090,拔电池是王道。

2010-9-11

Coq的核心是基于归纳定义的构造演算,而这一切都是建立在直觉主义逻辑之上的。
有些问题是很有趣的,比如无限小。我在大学里学数学分析的时候,课本的定理和定义中并没有提及无限小。总是说对于任意大于0的整数epsilon,怎样怎样怎样。通过牛顿之后的很多数学家的一起努力,终于在微积分的表述中消除了无限小。而数学直觉主义则更保守,它不承认逻辑的排中率。所以数学直觉主义者不能用真值表的方式来证明那些基本的逻辑命题。Coq产生的是构造性的证明,我所难以理解,看不懂的。假设存在对于命题P的证明,并且有P->Q的证明,那么我们就证明了Q?
Coq中很强调类型。所有的对象必须有一个类型。不能说“对于所有的x,命题P成立",而要说"对于所有属于T类型的x,命题P成立"。
顺便google了一下,找到了一个对选择公理讨论的很到位的网页:http://www.math.vanderbilt.edu/~schectex/ccc/choice.html
Coq这套东西太别扭了,我不知道继续学下去有什么意义

2010-09-06

大概就在这周,周围又有两个朋友要离开北京。一个是中学同学,一个是一起合租的隔壁的小姑娘。他们有一个共同点,都是在另一个城市买好了房,离开北京去那里。离别虽让人忧伤,却是值得庆祝的事情。没有谁会把住在北京当作人生目标,来这里都是为了寻找。而他们找到了,所以走了,而我还没找到,所以依然困在这里。4年前走出13号线站在五道口茫然不知所措的那一刻依然历历在目,4年后我依然是什么都没有,除了一间租来的不到10平米的小屋子,什么都没有。没房没车没户口这不打紧,要命的是,没有对这个城市的新鲜感,没有兴趣。我知道我每天必须去工作,除此而外我想不到什么。我觉得如果再加一条,性欲减退,就可以去北医六院就诊了。不知道医保卡报销吗?我留下来是因为我不在乎。我告诉自己,虽然身在尘世,但心在外,不要为俗物所动不要为俗事缠身。留在这里,每个月都会结识新的朋友。北京虽称不上人杰地灵,但是却聚集了很多有才的人以及奇奇怪怪的人。生活在一个高度集权的国家的政治中心,单单说起来就有趣。我可以把我现在饥饿的肚子填饱,除此以外什么都改变不了。甚至改变不了过几个月再以相似的内容再发一篇牢骚的习惯。

电压力锅使用小记

自己在厨房做点东西吃,要比在诺森德杀动物拿冻肉做烹饪日常有趣多了。起码我的胃,可以获得真实的满足感。我在卓越买了一个苏泊尔的电压力锅,主要看中的是定时的功能,晚上把米淘号,设定好时间,第二天早上到时间就可以吃饭,很爽。后来我刚看了一下觉得这个功能其实挺多余的。因为电压力锅煮粥只需要10分钟,而不像我平时自己用砂锅煮粥,需要40多分钟。所以定时的功能不是很必要。当我关了厨房灯再次走进去看的时候,红色数字缓慢的count down,让我总觉得它像一个定时炸弹。可能是因为小时候我被高压锅吓怕了。今天还做了一件很蠢的事情,锅盖怎么着都盖不上,后来发现是因为我没有把气阀拔下来。明天的早点是:花生粥(由changming制造)。使用效果:食用后可以精力充沛一整天。必须在早上食用。

搜索引擎的又一作假案例

之前那么多唱片公司起诉sogou,冤吗?内幕我不知道,算了,下面这个可是有根有据的起诉啊。自己做盗版然后放在自己的服务器上让自己的搜索引擎来索引:腾讯遭北京大学出版社起诉侵权 法院已受理中国法院网日前,北京市昌平区人民法院受理了北京大学出版社起诉深圳市腾讯计算机系统有限公司、北京慧聪建设信息咨询有限公司侵犯其版式设计著作权案件。原告北京大学出版社诉称:原告享有《CAXA实体设计工业设计篇》一书的版式设计著作权。2010年,原告发现深圳腾讯计算机系统有限公司(以下简称腾讯公司)未经原告授权,在其经营的网站上提供了涉案图书电子版本的下载服务。虽然腾讯公司所属网站上已声明:“该网络资源来自互联网,本网站仅提供搜索服务”,然而经查实,腾讯公司是假借搜索链接提供侵权内容,涉案图书是由腾讯公司自己制作并储存在腾讯公司自己的服务器上。而北京慧聪建设信息咨询有限公司则为腾讯公司的侵权行为提供了帮助。两被告的行为已经严重侵犯了原告对涉案图书所享有的版式设计权等相关权利。故原告诉至法院请求判令两被告承担侵权责任并赔偿损失。目前此案正在进一步审理中。

都什么破事儿啊!

http://www.douban.com/group/freeware/douban上这个小组的中文名是:”免费软件”。有错吗? 有错吗?我还是那句话,我很讨厌R.Stallman。那么多英文单词,偏要用一个有歧义的?还是那句话,GNU licence有没有法律效应都是件很难说的事情。一帮门外汉把法律当儿戏

2010-09-04

昨天三里屯soho的wow庆典我没去,据说很失败。今天从我中学语文老师的blog上得知,《荷塘月色》里“正如刚出浴的美人”这一句话在被挪进中学课本的时候被删掉了。我猜理由是因为太赤裸裸了。《林教头风雪山神庙》中从“七窍迸出血来”到“都摆在山神面前供桌上。”一段在原来的教材上也是被删去的。我猜理由是因为太血腥太暴力了。无奈虽然国服的wow被和谐了那么多,我还是觉得太阴暗了,不适合常玩。如果所有地图都像纳格兰那样多好啊。无独有偶,刚看到一条新闻:http://www.mnd.gov.tw/Publish.aspx?cnid=65&p=43035針對中共媒體報導「8年抗戰勝利,歸功中共領導」乙情,國防部今(4)日表示,抗日戰爭係中華民國國軍與全國同胞「用鮮血所寫下的歷史,以8年贏得的戰爭」,這段史實不容許任何人竄改或任意曲解,有關報導內容與史實不符,本部嚴正駁斥,並提出澄清如后:一、國軍自蘆溝橋事變起至抗戰勝利,歷經淞滬會戰、徐州會戰、武漢會戰、長沙會戰、常德會戰、長衡會戰、貴柳會戰與湘西會戰等諸多會戰,皆無役不與;八年期間,舉國軍民服膺蔣委員長之領導,集注與動員全國之力,共同抵禦驅逐入侵之日軍,中華民國乃獲致最後光榮勝利。二、抗日期間,國軍與日軍激戰,計有會戰22次,大型戰役1,117次,小型戰鬥38,931次,傷亡官兵高達322萬餘人,絕非中共所宣稱參與之「平型關戰役」相關戰果,所能比擬;另對日抗戰期間,中華民國參與之各項國際會議與抗戰勝利後接受日軍之降書,皆為中華民國國民政府種種抗戰歷史之鐵證真相,均足以駁斥中共媒體宣稱之「抗戰勝利由中共領導」不實言論。三、有關國軍對日抗戰之斑斑史實,可經由參閱我國軍「柏溪稿檔案」、日本防衛廳編撰「日軍對華作戰紀要」等檔案及相關史料,加以對照與查證獲得印證。中華民國領導對日抗戰勝利之事實,絕不容扭曲。我觉得,这篇新闻稿还是非常中立的,起码它不忘加上“与全国同胞”。并且,它敢举出档案和数字做例证。

大脚的更新日志很orz

2010/9/1 (3.1.0.211)
1.大脚客户端:版本升级至1.148,修正设置界面的一个问题。
2010/9/1 (3.1.0.210)
1.大脚客户端:版本升级至1.147,移除原汁原味体验魔兽世界功能。

要不要升级Xen Cloud Platform呢?

今天打开xen的网站看了一下,Xen Cloud Platform 0.5在上个月发布了(我还用的是0.1.1)。相比于上个版本的变化主要有:
* xen 3.4.2
* linux 2.6.27
* openvswitch
* fully signed windows PV drivers
* improved SR-IOV support
* heterogeneous machine resource pool support
* templates for many different guest types (including latest Ubuntu, Debian)
* full-featured enterprise-class management toolstack
** multi-host resource pools
** live VM snapshots, checkpoints, migration
** disaster recovery support
** flexible storage, networking, host power management
** event tracking, progress notification
** performance monitoring and alerting
** XMLRPC-based API and powerful CLI
我感觉变化不是很大,主要是一些稳定和增强。而下个版本,1.0,是基于red hat 企业版 6的。按最乐观的估计,也需要在今年Q4才能发布。

把笔记本上的fedora的kernel升级到2.6.34

今天把笔记本上的fedora的kernel升级到2.6.34,因为是双显卡,ATI的驱动不好。所以在xorg.conf中只启用了内置的Intel网卡。
嗯。。。其实我的手机早就在用2.6.35了

终于把wlk更新完了

等开服中。。。

2010-08-22

今天可真是冏死了。和女朋友出去玩,坐电梯坐到某一层的时候,一个妈妈推着小车进来。小车里坐着一个小男孩,那个小男孩看看我,很天真的叫了一声“爸爸”。

Coq中手动证明简单的逻辑命题

Section MiniPropLogic.
Variables P Q R T : Prop.
Theorem imp_trans : (P->Q)->(Q->R)->P->R.
Proof.
intros H H' p.
apply H'.
apply H.
assumption.
Qed.
End MiniPropLogic.

Database Systems: The Complete Book

我刚才想买一本书,“Database Systems: The Complete Book (2nd Edition) ”。原版有1200多页,但是翻译成中文之后只有300页。我超级惊讶。都是16开大小,中文难道这么神奇?

2010-08-15

今天又是全国哀悼日,所以没有魔兽世界玩。我对此表示非常愤怒,因为普通民众的喜怒哀乐必须由政府精细控制。比如,到了2008.8.8,因为要开奥运,所以关于地震的一切报道立马停止,三鹿奶粉的事情也被压着瞒着。因为全国要喜庆。今天路过中关村,发现连路口的大广告牌都变成黑底白字的了。政府要你高兴的时候你就必须高兴,比如8月8,比如春节晚会。政府要你哀的时候你就必须哀,不能看电视剧不能看英超不能玩网络游戏甚至打开web.qq.com都被禁止。
今天发现很多人拿的是雅酷的游泳卡,算下来大概只需要10块钱一次。而我昨天办的游泳卡是30块钱一次。我办的游泳卡只能在那一个游泳馆游,雅酷的游泳卡能在那个游泳馆以及其它很多很多游泳馆游。很悲剧。
今天更新了下meego,因为从bug列表看,dbus的bug被修复了。然后我看了一下,果然好了,并且connmand貌似也可以用了。反正我可以用usbnet连了。
在电脑上执行
ifconfig usb0 192.168.2.15 netmask 255.255.255.0 gateway 192.168.2.14
iptables -A POSTROUTING -t nat -s 192.168.2.15/32 -j MASQUERADE
就可以ssh到手机上了。然后在手机上执行
route add default gw 192.168.2.14
echo "nameserver 8.8.8.8" > /etc/resolv.conf
但是我的wifi又不好使了。因为connmand在,所以我的wpa_supplicant.conf就不好使了。connmand怎么配,我还是不大会。
而且,xorg貌似也broken了。目前有2个包都能提供显卡驱动,
xorg-x11-drv-fbdev.armv7l : Xorg X11 fbdev video driver
xorg-x11-drv-fbdev-sgx.armv5tel : Xorg X11 fbdev video drive
后者是带opengl ES加速的。但是某一天meego团队更新了xorg的版本,但是n900团队还来不及更新xorg-x11-drv-fbdev-sgx,于是xorg启动的时候就会报告“fbdev_drv.so: undefined symbol: miEmptyD…

2010-08-14

今天下了一趟英雄本的能源舰,因为这个是今天的日常任务。顺便用75个公正徽章买了一双鞋。呃,现在GS 是1550.可惜法伤依然很低。
晚上吃完晚饭过后,就去英东游泳馆游泳了,人还是那么多。据说是因为某个组织怎么着发出去一大堆票,是10块钱一次的,所以来了很多新人。而这边如果办卡正常价格是30,不办卡50。只有在临近关门的那半个小时,人稍微少一点,可以放开游。否则不是我踹别人,就是别人踹我。

2010-08-13

今天去把时光之穴的2个本又打了一遍,把任务做完了,并且得到了外域地下城大师这个称号。一看,时光守护者的声望到崇拜了,下次就可以去英雄本了。哈哈。

2010-08-12

今天中午去了一趟普通平台,然后去了一趟禁魔监狱。把禁魔监狱钥匙那个任务做完了,感觉很爽。在平台打出来一只小凤凰,是一个红色小宠物。

2010-08-11

今天下了一次英雄平台,然后去黑石塔上,于是把BWL的入门任务做了,以后想去BWL就可以直接进了。然后又去了一趟普通生态船,一趟卡拉赞。卡拉赞收获不错,拿了3件紫装。受wlk要开的消息影响,最近几天组队频道根本组不到人下副本了。像我们这样的都是娱乐团,或者做任务,或者刷声望。好累。睡。

2010-08-09

今天去了一趟能源舰,把禁魔监狱的钥匙的任务做完了。然后无聊啊,钓鱼,终于钓到龙虾了。然后去训练师那里开了双天赋,洗了一个深火毁。今天把沙塔尔的声望刷到尊敬了,顺便把天空三本英雄本的钥匙买了。

2010-08-08

今年是北京奥运两周年纪念日吧?再次说,我对北京奥运没有一点好感。开幕式从头到尾,丑闻不断。今天很无趣,在家玩了一天的魔兽世界。进展如下:1、卖了一张点卡,2400,买了一只鸟。虽然卖的便宜,但是比5173还是划算。2、学飞,买了只小鸟。发现在空中居然也会被地面的怪物攻击。3、去了一趟风暴要塞,这是我第一次下25人本。好混乱啊,机器卡的不行。最后一个boss那里被团灭了一次。其它都很顺。反正我觉得,有我没我都一样。4、做禁魔监狱的钥匙的任务。一直杀到生态船副本。拿到了半个钥匙。最后roll的时候,不小心把牧师的饰品点了需求。结果被我拿了,被骂死。5、把黑石深渊打了,成就和钥匙拿了。过程比较搞笑,只有我认识进去的路。但是本里面我就不认识了。我们是6个人组了一个团去黑石深渊,结果有个人进不来,我们才知道这个是5人本。好吧,有人主动退了。然后剩下5个人在本里瞎转悠。某人死了,求拉,但是我们找不到他的尸体,因为集体迷路中。让他跑尸吧,也不现实。因为他是被拉进来的,没走过第一个锁链,应该是找不到。然后另一个人不停的在喊,我们再组一个人进来吧。这样不行的,后面的boss很难的。然后一群人稀里糊涂的不知道怎么就打完了,拿了成就。总体来说,路上那些机关还是很麻烦的。最近电脑问题很多。开久了就狂出问题。比如网卡突然断开连接,要禁用然后重新启用才好。因为怕独立显卡(ATI)发热量大,切成intel内置显卡,结果倒是不死机了,但是会报告这个”Display driver igfx stopped responding and has successfully recovered.”有些问题更是奇怪,比如”The ICS_IPV6 was unable to allocate bytes of memory. This may indicate that the system is low on virtual memory, or that the memory manager has encountered an internal error.” 实际上,由于我插了4G内存,空闲内存一直很多。

2010-08-07

周五晚上打开wow,有好久没上了。去了趟卡拉赞。今天依然是吃过晚饭开wow。还想去卡拉赞,队都组好了结果发现必须得等到下周二才行。然后就只好去奥金顿的几个英雄本刷声望,最后去了趟时光之穴。然后我才发现我差的东西多呢,根本进不去。然后就去做观光任务。然后大概是走错路了,还是进不去。最后让术士把我拉进去的。
明天我准备继续找点时光之穴的任务,把声望刷高点,等什么时候去买把钥匙。
今天充了一张点卡,是用上次在maemoers.com做飞信的时候他们捐给我的钱充的,哈哈。

我终于找到我的手机瘫痪的原因了!mscim-pinyin

最近手机总是报告 Internal Error. Application X closed (这里的X是指大部分应用程序,包括phone). 我想了很多办法都没查出来为什么(也没有找到core dump file),然后就只好刷机。嗯,问题解决了。然后恢复app list和settings。然后问题依旧。
然后我就开始拼命卸载程序。直到 apt-get autoremove mscim-pinyin
然后就好了!
然后再装
#apt-get install mscim-pinyin
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following NEW packages will be installed:
mscim-pinyin
0 upgraded, 1 newly installed, 0 to remove and 1 not upgraded.
Need to get 0B/2246kB of archives.
After this operation, 5366kB of additional disk space will be used.
立马就打不开xterm
如此反复
特别明显
为了这东西我一整体关机,不能打电话。MMD!还好ssh还可以用。否则在打不开xterm/file manager的情况下,能解决什么问题??
也怪我笨,怎么不想一想,什么都不能用,为什么ssh可以。

n900的pidgin的飞信插件发布

http://maemoers.com/viewthread.php?tid=5101
pidgin版飞信
为什么要有它?
和现有的通讯软件集成在一起
实现说明:
在老的pidgin fetion的基础上把认证协议换成了4.0版的新协议
暂时不支持图形验证码。意味着如果你把密码输错了,你就得换官方的客户端登录一次。然后再来
暂时不支持头像下载
暂时只支持使用手机号登录
使用说明:
pidgin的版本必须是2.7.2
下载这个so文件。然后用scp放到手机里面

2010-08-03

今天老项目组来了一个新同事。
“玩过网游吗?”
“玩过”
“什么网游?”
“梦幻诛仙”
“多少级?”
“15”
不是抱怨什么,只是觉得又一个大好的青年要被毒害了。唉……我说不清这是我经手的第几个了。
meego的进展很缓慢。一个被标为critical的BUG居然半个多月了都没解决。http://bugs.meego.com/show_bug.cgi?id=3936 。我知道这个问题拖了这么久不是因为BUG本身,而是因为gcc的问题。但是这个拖的也太久了吧?
刚才我看了一下maemo的repos,其中pidgin的最新版本其实已经是2.7.2了http://maemo.org/packages/view/pidgin/ 。而我上周做的飞信插件也是基于2.7.2的,也就是说,我大概只需要给arm平台编译一个so试一试,大概就没什么问题了。今天太晚了,明天要是回来的早就搞这个吧。
我还是想用mantis。因为没有找到比它更好的并且免费的东西。

java表达式求值的顺序

int lorem = 1, ipsum = 2, dolor = 3; if (lorem == (lorem = ipsum)) f(); if ((ipsum = dolor) == ipsum) g(); f和g会被执行吗?

2010-08-01

我丧失了一个习惯:每个月写一下总结。以前上学的时候是有的,工作以后可能是因为要写的太多了,所以就倦了。7月份给我自己定下一个目标,一定要学会游泳。结果呢,今天拉我大学的上铺去游泳。我发现我所谓的不会游只是怕水。今天那个池子底下是平的,到处都是一样深的,是浅水池子。然后我就放心大胆的游啊,可开心了。然后被批了。虽然我能游,不淹死,在往前走,但是,姿势全是错的。手的姿势不对,脚蹬水的方式完全不对。别人都是划一下换一次气,我是吸一口气就沉下去了,扑腾好久才能再露出头来。还有,别人都是头向上,身体的后半部向下。而我是屁股在上面,头和脚一直泡水里。你说,我这个目标达到了吗?有时候就是闲的蛋疼。比如今天在公交车上,给女友打电话,然后吵起来了。长途啊!事情是我挑起来的,我说不该有普通话这种东西。国家不应该规定一个字该怎么读。我说语言最重要的作用是它作为思维最根本的不可缺的元素,其次才是与人交流的作用。文字的发音方式严重影响人的思维。而统治者统一文字统一发音是要让婴儿从一生下来就遵从他所规定的统一思维。所有人都按照他所规定的方式思考,这是统治者最想看到的。这件事情的远大影响,可远溯至中国历史上最著名的暴君:秦始皇。她当然不赞同这些。可是她的一切反对意见我觉得都可以用来支撑天安门上那句:“世界人民大团结万岁”以及共产主义红旗插满全球的崇高理想。设想世界上只有一个统治者、一个国家、一个种族、一种货币,What wonderful!后来我查了一下,根本没有一部法律授予了汉语排它性的地位,只是说应当推广。可是你看看CCTV在NBA这三个字母上下煞苦心,唉…… 宪法不如现管。但我们争吵的问题是,我认为我是在使用汉语,但是这个汉字怎么读,不该由国家来规定。http://www.edu.cn/HomePage/zhong_guo_jiao_yu/jiao_yu_yan_jiu/yu_yan_wen_zi/zheng_ce_fa_gui/index.shtml

还是用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放出

普告:亚洲当代著名奇幻文学作家李小多病

普告:亚洲著名奇幻文学作家李小多病情好转,已于近日出院并恢复正常饮食。但因大病初愈,炎症刚退,小多的言语及脑部思维仍有诸多困难,急需小loli一名随身看护。有意献身中国当代文学(家)者,可与本人联系。凡报名有效且条件较好者,附赠当代奇幻小说,如果宅。鉴于病情的不确定性,以上内容长期有效。人数不限。性别不限。体型以能穿女仆装为限。最终解释权归公告发布者所有
2010-6—30

qt4-designer真是个垃圾

不能自己添加slots。话说也不是界面不让,点着点着,添加slot的界面就出来了,我就添加了。ui文件里面确实也有。<ui> ... <slots><slot>open()</slot></slots></ui>但是生出来的头文件里面没有。
原因是生出来的头文件根本就没有基类,它也没有Q_OBJECT这样的声明。即便是我要写一个很简单的窗体,因为我用到了按钮/菜单,所以我就需要slot,所以我就需要从它生出来的类继承。然后还要跑moc。
去死去死去死

tomcat 7.0发布了。支持servlet 3.0

http://tomcat.apache.org/download-70.cgi
一个新的大分支啊!

some note