新浪微博
- 是啊,有段时间他回家爱说,“你们说够了没有?”,“再说就把你扔下去!”。一定是学幼儿园老师的。李先静_ABSURD : 早餐后儿子对我说,爸爸,我们一边看书一边大便便好吗?我说好,他就拉我一起看书,他拉大便。偶尔还来一句,爸爸,动动你的小脑筋想一想,。。。[抓狂][汗]
- 儿子一天要问几百个“这是什么?”,昨天在游乐场,他指着一个小女孩说,爸爸,这是什么?搞得我哭笑不得。
- 早餐后儿子对我说,爸爸,我们一边看书一边大便便好吗?我说好,他就拉我一起看书,他拉大便。偶尔还来一句,爸爸,动动你的小脑筋想一想,。。。[抓狂][汗]
- 儿子今天居然考我,指着书上的文字说,爸爸,这是什么?我读了一遍,不小心读错了一个字。他马上说,不对不对,再试试。我很小心的再读了一遍。他来了一句,答对了,爸爸你真棒!
- 两个月不见,李路加变得太可爱了,不但不发脾气,而且非常贴心。经常对我和老婆说,爸爸妈妈,你们辛苦了,我帮你们捶捶背好吗?爸爸,我讲个故事给你听好吗?爸爸,我们一起看报纸好吗?天呐,一下真不习惯!感谢上帝,感谢岳父岳母
- 是啊,有段时间他回家爱说,“你们说够了没有?”,“再说就把你扔下去!”。一定是学幼儿园老师的。
Monthly Archives: January 2009
系统程序员成长计划-动态数组(一)
双向链表和动态数组是最简单的两种数据结构,在研读大量源代码之后,我发现正是这两种最简单的数据结构有着最广泛的应用。像平衡二叉树这样的复杂数据结构,除了学习之外,你永远都不会写第二遍,甚至连使用的机会都没有,而双向链表和动态数组则会在开发中反复的运用。也正是由于这个原因,我们才选择双向链表和动态数组作为学习的载体。
仅仅是好看一些吗?
今天看BLOG上的留言,其中有一句话大意是说,仅仅是好看一些罢了,没有什么实际用处。他是针对一个模拟器说的,那个模拟器不是我写的,我不过是写了一篇关于构建那个模拟器短文罢了。这句话本身对我没有什么影响,况且我相信那个模拟器有很大实际价值的。本文并非是因为不能接受反面观点而写,相反我只想澄清一个观点。
SCIM输入法架构分析(下)
2.7. 模块动态加载机制(Module) SCIM只是一个框架,具体的输入法是通过动态库的方式加载进来的,而不是在编译时静态的绑起来的。SCIM实现了一个Module类,封装了操作系统底层函数,提供面向对象的接口。另外,在此基础之上,还实现了其它几个类对Module进行包装,提供更具体的服务。
Posted in GTK+
2 Comments
SCIM输入法架构分析(上)
文档格式与术语说明: 1. 概述 SCIM 是Smart Common Input Method的简称,它是一个输入法框架,由苏哲领导开发的。作为新一代输入法框架,其架构设计精良,具有很好的扩充性和灵性性,代码质量也非常高,称得上是国内经典的开源项目了。本文试图对SCIM的架构进行分析,了解它的架构,也许并不能帮助你更好的使用它,但对于添加新的输入法引擎,或者把它移植到其它平台,会有一些帮助。不过,即使单从学习的角度出发,了解它的架构,对于提高设计能力也是有很大好处的。
Posted in GTK+
Leave a comment
Linux下文件关联的实现原理
我们知道在Windows下,双击一个可执行文件,文件管理器会自动运行这个应用程序。而双击一个数据文件时,文件管理器会用与之关联的应用程序打开它。数据文件与应用程序之间的关联是通过注册表来实现的:文件管理器查询注册表,找到数据文件对应的应用程序,然后运行这个应用程序,并把数据文件的文件名作为命令行参数传给它。 这种文件关联的方式非常好用,省去了先起动应用程序再打开文件的麻烦。Linux下的桌面环境也有类似的功能,而且实现方式更合理。最近负责开发一个资源管理器,本来GNOME有一个功能强大的资源管理器Nautilus,只是它过于庞大,不但有超过10万行的代码,还依赖于libgnome、gnome-vfs和CORBA等,故不适合于嵌入式应用。最终我们决定自己开发一个简化的资源管理器,但又要尽量兼容现有的应用程序,这要了解相关标准,文件关联方式是其中之一。把这几天学到的知识做个笔记吧,供有兴趣的朋友参考:
Posted in Linux Mobile
5 Comments
开发代码产生器的经验
提到代码产生器,很容易让人联想到Rrose之类的工具,它们根据UML图产生相应的代码,同时还可以从代码反向生成UML图。Rrose是一个庞大的系统,自然让人觉得代码产生器也是一个复杂的东西,所以不少人对代码产生器抱着敬而远之的态度。其实,代码产生器可大可小,小则几行代码,大则数万行代码。大小本身不是问题,重要的是它能提高我们的工作效率。
Posted in Programming
2 Comments
两则C语言技巧
以前用C++时,喜欢去玩一些语法上的技巧,每学到一个技巧都高兴得不得了,总是想找个地方用它,以显示自己的水平。其实我们应该更关心技巧的实用价值,如果一项技巧很巧妙,但很少用它,忘掉了也不必觉得可惜。最近发现两则C语言技巧,以前没有用过,觉得有些实用价值,做个笔记吧。
Posted in Programming
7 Comments
reparent指定进程到当前进程
今天遇到一个问题,需要监视某个应用程序的退出事件,并得到它的退出码。waitpid只能监视子进程,对其它进程没有效果,怎么才能reparent一个进程呢?我在内核里找了半天也没有找到相应的系统调用,后来想到调试器都可以,那一定有办法。调试器是用ptrace实现的,我试了一下,发现其实很简单。做了些测试,也没有发现性能上的损失,我想这种方法应试是可行的。发出来给有类似需要的朋友参考吧:
Posted in Linux Mobile
Leave a comment
Mozilla的架构设计
原文发表于《程序员》2007第5期,BLOG首发。 Firefox的横空出世在很多人的意料之外,其体积小巧功能强大,在安全性、扩展性和可移植性上都有惊人的表现。这样优秀的软件,实在想不出是在mozilla这棵老树上生出的新花。我们都认为mozilla老了,已经过时了,不是吗?如果不是firefox,我们还记得mozilla吗? 最近因为工作需要,我花了不少时间去研究Mozilla。才知道我的想法错了,mozilla的架构设计非常优秀,不但没有老,而且在持续的焕发出生机。不是别的,正是它优秀的架构孕育了firefox的诞生。 浏览器的复杂度可以和操作系统相提并论,mozilla有数百万行的C++代码。这样复杂的软件,其中到底使用了那些秘技呢?其实,好的设计总是遵循一些众所周知的设计准则,套句俗语说,差的设计千差万别,好的设计都一个样。Mozilla当然也是遵循了这些设计准则,不过,在实现方法上却有很多创新之处,让人惊叹不已。
Posted in Mozilla
11 Comments
如何面对单调重复的任务
我们每个人都喜欢做有挑战的,能学到新东西的任务,而不愿意去那些单调重复的,没有什么新意的事情。然而常常事与愿违,在软件开发中,前者并非主流,而后者占了大多数。前者未必每次都能轮到你,而后者也总是要人完成的。 面对后者,你可以选择拒绝接受任务,但那会让人觉得你工作态度不好,以后好的差事可能就轮流不到你了;你可以选择走人,换个地方去做,但那也只能祷告,祈求上帝保佑你在别的地方遇到好任务。其实这都不是好的做法,相反我们应该接受并搞掂它,应该想法转换它们,完成任务但又不必自虐,从中还能学到东西。下面是我的一些经验:
Posted in 沉思录
4 Comments