一月 29, 2007

new blogger, new template and new project

周末登录blogger.com,被要求升级至新的blogger,即已经脱去beta的blogger beta。

有点不情愿,用得好好的,干嘛非得升级不可呢?!倒不是说老的blogger有多么好,只是对我来说,基本的功能两者都差不多,不想要的都没有,而标签啊、模版啊、动态啊等等又不能用到咱这以ftp方式发布的blog上,除了浪费精力,能有啥好处?!

没法子,用人家的手短,开工吧。备份、升级、改模版……,结果发现忘了备份模版,尽管模版还是原来那个,里面的中文却全变成了乱码。唉,看来Google的工程师也有搞不定编码问题的时候啊。模版是我的blog的短板,几度被诟病,这次仗着胆子换了一个新的,先在http://netcasper.blogspot.com/上尝试了一把,感觉还可以,才用到主站上。不过前者的宽度改成了1024,后者还是窄窄的一条。要调整的还有一些,我不喜欢小字体,另外还要为blockquote里面的内容加上滚动条,以便显示代码。

很不情愿把精力放在设计界面上,我只需要一个方便的方式发布一些东西,现有的系统相对复杂了些,我甚至愿意放弃评论功能(或者外包给其它站点,比如zh.reddit.com)。另外正在使用的阅读器(无论是bloglines还是google reader)也无法满足我的某些特定需求,我希望阅读器能够提供某种(可以是需要互动的)评价体系,这样我可以衡量出每个blog到底对自己有多大价值,从而优先、重点阅读那些价值大的,逐渐淘汰不甚感兴趣的,从而充分利用时间、保证阅读质量。

也许该试试抓虾,但还是决定自己写一个,取名feedman。名字是学着mailman起的,目前还是几个小的Perl脚本,备份了自己所有的订阅,发布在这里。鉴于车东警告过依赖feedburner的风险,所以我在脚本里也增加了备份主页链接和其它feed的功能,以“懒惰的程序员”为例,备份结果为:

懒惰的程序员
http://feeds.feedburner.com/casper http://www.wanglianghome.org/blog/atom.xml http://www.wanglianghome.org/blog/rss.xml

其中第一个feed是我订阅的,其它的是从blog首页的html文件head里面的信息提取出来的。

一月 25, 2007

It's MY phone, not YOURS

FIC neo1973

据说iPhone上不让安装第三方软件,有些人就很不满意,我花钱买的手机,想怎么用就怎么用,凭什么受你的无端限制?!于是又有人跳出来说,想玩手机的话,不如看看Neo1973。

Neo1973使用基于Linux的开放平台OpenMoko,想怎么玩就怎么玩。它现成还处于最后测试阶段,不过最新的计划已经出来了,估计9月份可以推向市场。到时候能不能来中国,咱们就拭目以待了。

随着开源软件深入人心,开放已经在更多的领域发展起来,对于消费者来说,将得到更能满足自己需求的设备,实在是件幸事啊!

注:点击右边的图片可以看到更多手机截图。

一月 23, 2007

manage financial life seriously

我们做事一板一眼,越来越职业化;我们费劲心思,追求事业上的突破;我们努力学习,提升工作能力。那么,我们又为自己的生活做了些什么呢?

读了Matthew Paulson的Run Your Financial Life Like a Business: Me, Inc.,感触非常深。我们没道理为了别人的事尽心尽力,却不把自己的钱当回事。就像我一向认为,我们不应该对其他人强装笑颜,却对亲人发无名之火。古人说:“不扫一屋,何以扫天下。”看来这话未必正确,君不见多少人为了工作起早贪黑、废寝忘食,成绩一大把,却疏于打理自己的小巢、照顾自己的健康、忽视自己的亲人、漠视自己的一生。

最近看了一些关于个人财务管理的blog,都是英文的,也难怪,中国人只关心如何赚钱,甚至骗钱,管钱谁不会啊?还用学吗?这些blog中谈得比较多的一条是不要过度使用信用卡,这条在中国也不适用,有多少中国人真的手上没钱要靠信用过日子啊?!然而,也正是这些人,愿意预支十年,甚至二十年的收入买一套房子。所以,管钱,实际上不仅仅是管钱,而是管理我们的生活、我们的一生。很多人年纪越来越大,梦想越来越少,究其原因是摸不到生活的法门,绝望便一点一点滋生出来。也有些人靠着精心打理,不仅老的梦想实现了,新的梦想也不断涌现,人生丰富多彩,命运掌握在自己手中。

还是那句话——always produce。努力过也许不会有结果,但不努力肯定没有结果。看过李连杰很多片,其中有两句话印象非常深,都是坏人(唉,都这么大了看片还分好人坏人的……)说的,一句是“我命由我不由天”,另一句是“做人要靠自己”,极其经典。然而,知道做什么是一回事,知道怎么做就是另外一回事了。如果对英文不发怵的话,推荐阅读the simple dollar的blog:

以及两篇短文:

最后,做一个小测验,两个同样是399美金的东西——诺基亚N800平板电脑和微软的Windows Vista,你究竟会买哪一个

一月 22, 2007

weapon my Moto E398 with 512M MicroSD card

作为一名程序员,整日与电脑为伍,然而对于硬件却不甚了解,手上拥有的数码产品更是少得可怜,为了改变这一落伍形象,准备在07年出手购置点装备。

百思买在徐家汇开了第一家店,于是去转了一圈,玩了一些mp4,看中了爱国者F335,可惜太贵,要2999元。后来盘算着不如先把手机装备起来,其它的以后再说。我现在用的是摩托E398,当初买的是简装版,只有手机、电池和直充。在网上查了许多文章,发现E398用的TF(TransFlash)卡,又叫MicroSD卡,但是E398最大只支持512M(本来想买1G的)。于是上周日又冲过去,买了一根数据线、一个512M MicroSD卡,顺便给相机的SD卡也升级到1G。

  • 凌凯手机数据线 49元
  • SanDisk 512M MicroSD卡 190元
  • SanDisk 1G SD卡 190元

但是没有耳机,真是郁闷啊,服务员说前一天还有。蓝牙的倒是很多,可惜咱的小E不能用蓝牙耳机听音乐。回家后只好直接用喇叭放出来,效果还不错,就是太耗点,一会就光了。另外发现一个问题,比特率大于200k的似乎就不能正常播放了,192k的没问题。

一月 19, 2007

list Perl core modules with Module::CoreList

Core Modules就是安装Perl时缺省安装的那些。既然下定决心每个月至少读2个Module的源代码,那总要先知道都有那些Core Modules吧。

最简单的办法就是打开文件夹看看,可惜这个方法对我无效,因为我装Perl的机器上肯定早就密密麻麻布满了很多我会用到的Module。幸好,还有Module::CoreList

更让人省事的是该Module里还带有一个写好的脚本——corelist。使用-v选项,该程序会打印出它支持的Perl版本,然后使用-v选项加上特定的版本号就可以显示那个版本有哪些Core Modules了,比如想看5.009003版本:

$ corelist -v 5.009003

其实Module::CoreList以前也关注过,但是它的帮助写得不太明白,看完了还是不知道它能干什么,该怎么用。后来发现有这么个脚本,肯定要看看人家是怎么写的。除了Module::CoreList,它还用了Getopt::LongPod::UsageGetopt::Long我用过好多次了,可人家那种用法没见过;Pod::Usage是在写基金计算器的时候第一次接触,遂爱不释手,Perl程序员果然是懒惰的天才,或者说天才般的懒惰,居然将文档、帮助和注释合三为一。

一月 16, 2007

utf8 flag must be off when using XML::Atom

使用XML::Atom可以很方便地为Perl脚本增加生成Atom Feed的功能。例如生成一个entry的代码如下:

use XML::Atom::Entry;

$entry = XML::Atom::Entry;
$entry->title('我的标题');
$entry->updated('2007-01-16T08:00:00+08:00');
$entry->id('my unique id for this entry');
$entry->summary('oops');

$link = XML::Atom::Link->new;
$link->type('text/html');
$link->rel('alternate');
$link->href('http://example.com/entry.html');

$entry->add_link($link);

print $entry->as_xml_utf8;

到目前为止,一切都很好。

在实际的代码中,我们不可能把内容静态地写在代码里,而是从其它地方获得的,这时,就有可能发生编码问题。比如,标题是从某个网页上提取出来的:

use LWP::UserAgent;

$ua = LWP::UserAgent->new;
$response = $ua->get($url);
$content = $response->decoded_content;
($year, $month, $day) = extract_date_from_web_page($content);
$entry->title("$year年$month月$day日");

这时打印出来的标题是乱码。

原因是经过decode后,变量$year、$month和$day的utf8 flag被打开了,应先将其关掉:

use Encode;
Encode::_utf8_off($year);
Encode::_utf8_off($month);
Encode::_utf8_off($day);
$entry->title("$year年$month月$day日");

这样,编码就正确了。

一月 15, 2007

new year resolution: 2007

新年新生活,表一下决心。

  1. 真的很想把Emacs排在第一位,因为觉得多学一点帮助会很大,可是现在一门心思都在Perl上,没法子,等明年吧,明年一定把学习Emacs排在头位。好,回到Perl。今年学习的重点在于Testing和OO,从功能上来说,开放式基金计算器已经发展得差不多了,下面的重点就是把测试做好;测试做好后看能否用OO的方式重写一下。再有就是开始第二个个人开源项目,初步设想是和feed管理相关。最后就是开始阅读Perl标配的Module,希望能够每个月至少读2个,一年完成25个。
  2. 解决房子问题,然后酝酿生宝宝,或者同时进行。虽然排在第二位,但这个决心实在很难下,一提房子就觉得自己钱少,一提生宝宝就觉得自己其实还小。然而人生不就是这么回事,有几次是全都准备好了才开始的,说不定不开始就永远也准备不好,非得赶鸭子上架。
  3. 重新开始——玩!这两年懒得要死,连玩都懒得玩。游戏不打了,数码产品不买了,电脑也不自己配了(买DELL了),景点哪也不去了,连书都很少读了。成天就是blog啊、rss啊什么得,单调得一塌糊涂。猪年要出游一次,买数码产品一个,闲书多读几本,游戏偶尔打打,最重要得,把家庭局域网弄得专业点,文件服务器,DNS服务什么得都架起来。
  4. 锻炼排在第四位,就是坚持不下来也不会太不好意思。把哑铃充分利用起来,上半年每周两次,下半年每周四次。天气暖和的时候到世纪公园慢跑,每周两次。
  5. Emacs不排在第一位,也不能排在最后一位啊?!因为版权问题,原来在英特尔写的一个Mode不能拿到Marvell来用,正好,咱重新写一个,这次搞个功能全点的,好好感受一下Lisp的魅力。
  6. 最后一个决心:不能老把Emacs排在最后!:-)

一月 14, 2007

experiencing Intel

离开Intel有些日子了,总算完成了一篇《感受英特尔》,算是了却一桩心事。

一月 04, 2007

Top 5 New in 2006

总结越写越短,不知道是不是越来越颓废的迹象。上次的已经够短了,这次总不会更短吧?!

  1. 第一次做投资,买了些基金,还为此写了一个程序,算是我第一个开源项目。随着股市长红,程序也不断得到改进,要不是海底光缆被震断,这两天本该有更大的变化。
  2. 仗着还有一台笔记本,硬是把Windows从台式机上赶了出去,装上Linux,先是Fedora后是Ubuntu,玩得不亦乐乎。然后把项目相关软件移植到Linux上,这样开发也跟了过来。从那以后,工作、学习、娱乐都是在Ubuntu on Core 2 Duo上。
  3. 从英特尔到Marvell,完成了第一次工作转换,而且是以部门出售的形式。事情已经过去两个多月,长远的效果还看不出来,只是工作地点换了,家也搬到了浦东。搬家之后要坐地铁上班,便买了些书在路上看,豆瓣也上的多了些。
  4. 到了Marvell之后尝试了一堆的软件,drupal, trac, activeCollab, subversion, gallery2, mediawiki,加上以前玩的wordpress, scuttle, bugzilla, oddmuse等等,彻底满足了我的装软件癖。
  5. 很少在外面凑合晚饭了,都是自己(和老婆)做,尽管还有些单调。

回顾一下2006年年初定的原则目标,勉强算是完成了一半,实在惭愧。其实应该说原因在于计划定得不好,一厢情愿。上面列的都是自己感觉应该去做的事,但是实际上可能没太大的兴趣,何况万事开头难,能做好其中一件并养成习惯已经很不错了。