博文

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

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了