一月 30, 2008

New habits

养成新的习惯总是很难,比如我原来计划每周举两次哑铃,但是经常忘记,有时候一次都没有。现在每天晚上8:45准时运动,因为我定了闹钟。通常我晚上要么读blog,要么写点代码,兴头上来的时候,别的事情就全忘记了,所以能养成一些好习惯全靠闹钟了。我举哑铃的时间并不长,大概就5分钟,然后再花10分钟左右把刚才打断的事情收个尾,就去洗澡了。

9:30开始学英语,这也是最近才养成的习惯,每天一课新概念(第二册),磁带听两遍,自己读两遍,课后的练习做一遍,最后在背诵一遍。学完英语之后就上床玩我的Nokia N800,内容之一就是阅读Perl 5.10的文档。

在这三个新的习惯中,学英语是最容易放弃的,因为不感兴趣,而且内容浅,收获比较少。

其实生活中有好多习惯需要养成,由于没有坚持,多数都半途而废了。坚持总是一件很痛苦的事情,但是如果有一种方法能够减轻痛苦,甚至还能增添乐趣的话,那么它对我们养成更多的好习惯是非常有帮助的。

一月 29, 2008

Attach file for html mail

上次说到可以用markdown配合gnus来发HTML格式的邮件,可是当需要添加附件的时候,上述方法就不起作用了。附件部分的信息被当成邮件的正文转为HTML格式。解决方法是当没有附件时自动将邮件正文转为HTML格式,否则手工转换。实现方式如下:

(setq markdown-command "markdown")

(defun mimedown-region (beg end)
(interactive "r")
(save-excursion
(let ((orig-txt (buffer-substring-no-properties beg end)))
(shell-command-on-region beg end markdown-command nil t)
(insert "<#multipart type=alternative>\n")
(insert orig-txt)
(insert "<#part type=text/html>\n<html>\n<head>\n<title> HTML version of email</title>\n</head>\n<body>")
(exchange-point-and-mark)
(insert "\n</body>\n</html>\n<#/multipart>\n"))))

(defun mimedown-message-body ()
(interactive)
(save-excursion
(message-goto-body)
(mimedown-region (point) (point-max))))

(add-hook 'message-mode-hook
(lambda ()
(add-hook 'message-send-hook 'mimedown-message-body)))

(defun remove-message-send-hook ()
(interactive)
(remove-hook 'message-send-hook 'mimedown-message-body))

(defadvice mml-attach-file (after remove-mimedown-message-body
(file &optional type description disposition))
(remove-message-send-hook))

(ad-activate 'mml-attach-file)

手工转换使用命令`markdown-region',而message-mode-hookmml-attach-file(添加附件的命令)的after advice分别负责HTML自动转换的打开和关闭。使用advice是因为mml-attach-file没有hook可以使用。

一月 23, 2008

No right Alt key on PuTTY

Cygwin对国际化的支持有限,比如当SSH到另一台语言环境为zh_CN.UTF-8的linux机器上时,中文没法显示。解决方法是使用Cygwin之外的工具,比如PuTTY。我下载了Portable PuTTY,设置好对UTF-8的支持,然后SSH过去,中文完美显示出来。解决了语言问题的最大好处是可以使用GNU Screen的attach/detach功能。

不幸的是,另一个障碍出现了,PuTTY不认识右侧的Alt键。这对我来说是几乎不可以接受的,尽管在命令行下使用右侧Alt的机会很少,只有Alt+F、Alt+B或Alt+D等,但使用非常频繁。难道又要回到过去那种用左手搞定两个键的习惯吗?太难了,曾经沧海难为水啊!

一月 20, 2008

API eliminates manual work

本来以为,“2008”是我今年一个重要的tag,用它在del.icio.us上标注自己写的blog、在豆瓣上标注读过的书。就在我为自己变得越来越有条理而感到得意时,看到了人家是怎么统计一年读过的书的——使用豆瓣API。这个结合使用了Google Chart和豆瓣API的应用让我更深刻地认识到什么叫“科学技术是第一生产力”。

是时候删除2008这个tag了。

我通过Net::Delicious使用del.icio.us API生成标签云的时候,没有想到可以利用其中的时间信息统计自己一年到底写了多少东西,更没想过可以用Google Chart图形化地显示出来。当然,这是我第一次使用web 2.0意义上的API,暂时还不具备职业web程序员的思维方式和职业敏感,或者说,web也可以编程这个事实还没有真正被我接受,尽管网站推出API已经不是一天两天了。

既然暂时还没有Net::Douban来包装豆瓣API,还是用Net::Delicious练练手吧,结合使用Chart::StackedBars,图形化了过去几年的写作频率和数量,以及del.icio.us收藏的频率和数量。这之后,甚至盘算着是否可以自己来实现Net::Douban,使其成为自己在CPAN上的第一个模块!

先yy着……

一月 16, 2008

Hook your emacs

用emacs是会上瘾的,用得越久,瘾越大。

前面提到可以使用如下代码让gnus自动收邮件,可是用了一段时间,发现根本不起作用,一定要在gnus启动之后再运行一遍。

(require ‘gnus-demon)
(setq gnus-use-demon t)
(gnus-demon-add-handler ‘gnus-group-get-new-news 3 1)
(gnus-demon-init)

既然一定要在gnus启动后执行这段代码才有效,那么怎么样自动化呢?用Hook!在源代码里搜寻一番,发现了gnus-started-hook。于是上述代码调整为:

(add-hook 'gnus-started-hook
(lambda ()
(require 'gnus-demon)
(setq gnus-use-demon t)
(gnus-demon-add-handler 'gnus-group-get-new-news 3 1)
(gnus-demon-init)))

一月 13, 2008

Programmer or administrator

Steve说size does matter,可是穿惯了短打的人,弄了件长袍,还真不知从何穿起。blog从来都写得很短,如今决定写篇长的,但坐在电脑前,却不知该写点什么。长而不散,难啊!

ESR的What a modern collaboration toolkit looks like让我动了心,便自己安装了一个irc服务器。想想自己还真是有装软件癖,2006年的时候就装了一大堆,07年安装了DNS服务器,08年一开头又弄了个IMAP服务器。作为一个程序员,做了这么多系统管理员的工作,到底是为了什么呢?单单是好奇吗?

读了Getting work done despite the enterprise,终于豁然开朗了。归根到底,我只是想有更多的时间来写程序而已。

公司有三大宝:MS Exchange、ClearCase和ClearQuest,据说还有可能上MS Sharepoint。不知道别人有什么感受,反正我感觉束手束脚。单独拿出哪一个来看,仿彿都很不错,可放在一起却像一盘散沙,没法集成在一起。07年我提出尝试drupal做我们的讨论组,试用下来感觉不错,老板就提出推广到其它组,因为公司里确实缺少保存项目文档的地方,并且在更多老板的推动下,IT终于同意维护硬件和做备份,而应用上的问题则由我来负责。严肃的软件开发,可不是有了编辑器和编译器就可以的,需要很多软件平台来协调、理顺整个开发流程。遗憾的是,很多人以为只要再加上电子邮件、版本控制和缺陷管理就够了。

不够,远远不够。这也是为什么我们要推drupal,我们需要一个地方记录开发过程中的讨论,以及讨论的结果。可是我们仍有很多滥用电子邮件的地方,ProjectPier是我正在关注的一个开源项目管理软件,用于协调项目开发进程。作为个体,我已经熟练地使用emacs org-mode管理自己的开发进度,然而,“各扫自家门前雪,不管他人瓦上霜”对团队项目开发有百害而无一利,所以,尽管困难,我还是打算试一试,如果这个软件真得合适,至少要先在组里面展示一下。

我所在的组有8个人,其中三个有自己的subversion repository,真不知道是谁的悲哀。可见,在版本控制工具上,也是有文章可以做的,然而,推陈出新总是比填补空白难很多,何况是替代官方工具。只是让程序员在这种事情上花费很多精力,而不是全力以赴去编程,很是低效。程序员的所长是写程序,而不是协调、沟通、谈判。IT部门目前的职责只是维持现有状态,维护新的软件都不一定乐意,更别提开发了。只是公司的计算资源、网络资源都在IT手里,没有他们的支持,开发团队所能做的比较有限,而且,软件正常工作之后的维护工作,也要开发团队自己承担。

如果一个老板手下的不同项目组之间都缺乏交流,那么开发部门和IT部门之间存在巨大的鸿沟也不足为怪了。该怪谁呢?谁又能改变这一切呢?

一月 09, 2008

Setup your own IMAP to MS Exchange

如果公司的IT愿意打开MS Exchange的IMAP支持,一切都好办了,只要选择一款支持IMAP协议的邮件客户端就好了,否则的话就要费一番周折。

  1. 首先,按照Converting All Your MS Outlook PST Files To Maildir Format建立IMAP服务器,并配置好MS Outlook。
  2. 然后,建立一些Outlook Rules,将想要用IMAP方式收的邮件自动复制一份到IMAP服务器的Inbox里面。由于是客户端的规则,所以必须要MS Outlook打开才有效。
  3. 用支持IMAP的邮件客户端链接IMAP服务器。如果使用Gnus收邮件的话,可以参照How to be like me #2的Just get it already小节,设置自动定时查收新邮件。如果想用Gnus发HTML邮件的话,可以参照Emacs Tip #8 : markdown,注意:在ubuntu上的执行程序为markdown,而不是文中使用的Markdown.pl。如果想缺省发送html邮件的话,可以将(add-hook 'message-send-hook 'mimedown)加入.emacs文件。markdown的文法参见Markdown: Syntax;Emacs还有一个markdown-mode

一月 06, 2008

What did I post to del.icio.us?

del.icio.us有些年头了,链接提交了一堆,却很少起到什么作用。其实刚开始用的时候,只提交那些自己非常确定会(或者应该)回过头来再看的东西,后来发现有些东西想找的时候却根本没有保存,于是但凡有点意思的东西都存起来。存是存起来了,可很少会真得回头再来找,因为前脚存,后脚就忘记了;感觉自己仿彿拥有宝藏,仔细想想,却弄不清楚到底是些什么东西。

知识和智慧,不会随着收藏的时间越长越有价值,必须经过整理、提炼,最后放到自己的脑子里,才能体现出价值。所以,我准备写一个程序,定期、随机地从del.icio.us里选取一些文章回顾一下,并顺便整理一番。整理的方式就是加星标,像豆瓣那样。del.icio.us没有相应的功能,我就使用tag,从一颗星到五颗星,星越多越值得学习、吸收。对于新提交的链接也采用同样的方式。

  • *****: 极具价值的思考。也可用于标注技术类文章,但必须是非常具有洞察力或创新性的内容。
  • ****: 有价值的技术类文章,或技术评论。
  • ***: 技巧类文章,或对时事的评论。
  • **: 信息类文章,有一定参考价值。
  • *: 其它,区别于没有星标的文章。

对自己的blog,还要加上写作年份,如2007,2008等,方便统计一年写了多少。

del.icio.us简洁的界面很容易造成一种错误的印象,貌似它只能用来做些简单的事情,其实不然。像我以前根本没有使用过subscriptions功能,现在精心选择了几个非常感兴趣的tag,并在google reader里订阅收看。可惜目前还没有机会使用network功能,当然,我这个人一向没有什么network,无论使用什么网络服务(也许豆瓣是个例外)。《Programming Collective Intelligence》里面还介绍了一些通过编程实现对del.icio.us的高级应用方法,对我来说也是很有帮助的启发。

学习、提高是个长期的、持续的过程,对工具的使用也是一样。但愿能够随着使用方式的不断改进,从del.icio.us里面寻出更多的宝藏!

一月 02, 2008

2008 new year resolution

2008年的主题是Getting Things Done。

  • 技术
  • 生活:坚持锻炼身体,每周三次;为生宝宝做准备;留意第四个季度公司对住房补贴的兑现方式。
  • 工作:做有利于涨工资的工作,好让2009年有个好收成,跑不过刘翔,总要跑过CPI吧!
  • 投资:读股市趋势技术分析;股市投资回报达到10%。
  • 开源:为maemo sdk和parrot报bug,并尽量修复。
  • 网站:每周2篇blog,1个wiki页;做应用时考虑移动设备;充分利用购买的虚拟主机的资源,付了钱,总不能浪费吧。

A list of programming language articles

经常一头钻入代码堆里,专注于细节,偶尔翻出这几篇文章看看,却也有点醍醐灌顶的感觉。

一月 01, 2008

My 2007 is not that bad

一度觉得2007年可能是我又一个非常颓废的一年,不过经过年底的疯狂反扑,结果还不算太糟。

  1. Getting things done:尽管还没有读完这本非常有名的书,但已经从实践中感受到收获颇丰。Remember the milk和Emacs Org Mode是我使用的主要工具,前者主要用来管理个人事务,后者用来管理工作相关的事务,毕竟工作上的事不适合放在网上。
  2. Subversion repositories:2007是版本控制深入我心的一年,一共建立了7个仓库,并开始尝试分布式版本控制工具,如SVK。
  3. 个人开源项目:4个项目用Perl,1个是common lisp的学习项目。但目前还没有参与其它的开源项目。
  4. 年初定的决心完成的还算可以。没有阅读Perl标配的module,没买房也没生宝宝,没有出游,也没有写emacs mode;但是,闲书读了一堆,摩托E398听歌上网全不误,买了诺基亚N800,架了DNS服务器,锻炼更是取得了前所未有的突破,对Emacs Org Mode的学习也算是个意外的惊喜吧。
  5. 工作转型初步获得成功,不再局限在调试信息上,开始接触实实在在的优化实现。由于RIM这个大客户的存在,碗饭暂时端得还算稳,最近更是有新项目做。
  6. 趁着难得的牛市,一年的投资回报不错,尽管被年底的暴跌实实在在地教训了一把。