Archive for December, 2009

Java Now!

Tuesday, December 22nd, 2009

最近一个月的任务是为我们的API提供一套Java接口。因为“时间紧、任务急”,于是任务稍微轻松一点的我就被拉了壮丁。善哉!我不入地狱,谁入地狱!除了04年大学毕业时的暑假自己抱了本Java书啃了几百页,此后几乎再未接触过。我并不是个OOP的推崇者,我甚至强烈怀疑OOP有易于将简单事情复杂化的倾向。

随大流嘛,我顺便也用上了Eclipse,比起纯粹用裸vim/emacs确实方便不少,有些功能颇有点惊艳的感觉。就纯粹易用性和实用性来说,我目前最喜欢的语言应该是:C和Ruby;如果从语言洁癖上来谈,我喜欢Haskell和Scheme。

countdown problem

Saturday, December 12th, 2009

“Programming in Haskell” 的第十一章讲的是countdown problem,就是说给定一系列操作,比如加减乘除,和一系列自然数,比如2,5,9,17,求出可能的组合方法使得表达式的结果为给定数值,比如24。在这个简单的例子中,我们找到两种解法:

  1. (5-2)*(17-9)
  2. (5+9)/2+17

大家都知道,这就是在文曲星中常见的24点游戏。用Haskell写一道程序做这个工作只需近一百行代码。有兴趣的话,则可以去Channel9看视频,这一课的讲授者是Graham Hutton博士,也就是”Programming in Haskell”的作者。从问题的表述到求解,看着很清晰自然。(我后来花了点时间想自己写,一时之间却也写不出来,知易行难!)

最有趣的还是优化工作,给定六个数的时侯回比较慢一点。但Dr. Graham介绍了一些技巧使得原本需要45秒的计算最终降为1秒以内。Awesome!

歪打正着

Thursday, December 10th, 2009

上周末接到一个bug,大致内容是用户上传了新 Apache SSL 证书后会导致 WebUI 挂掉。吾大恐,虽然证书有备份可以恢复,可是这绝对是个容易让support phone愤怒的吼叫的bug — 如果UI的一部分功能失常,用户还可以鼓捣鼓捣,现在连 webUI 都起不来了,这又如何忍得?

几经折腾后,发现是证书有问题,而这有问题的证书正是我的脚本生成出来的。之所以以前没有出现问题,是因为旧的证书是可用的。因为过期了,所以需要重新生成,而且恰好我心情好,毛遂自荐了自己的脚本(以前学openssl编程的时候自己用的),遂导致了这个bug的出现。

另外还有一个不可思议的歪打正着。那是今天早上遇到的一个bug,我们的API日志中错记了shutdown system这些信息,而导致该bug被发现的原因是被测机器恰好有过重启 — 为了 cost-saving,某些服务器会在晚上自动关掉,然后上班前自动上电。因为QA不知道为何测试过程中机器被重启,于是仔细检查了日志,看到了它们。

好记性不如烂笔头,验证一个证书是否可以作为SSL Server证书:
# openssl verify -purpose sslserver -CAfile ca.pem server.pem

ca.pem是签名server.pem的CA证书,server.pem则是被测SSL Server证书。感慨一番:firefox遇到错误证书会提供详细信息,并让用户决定是否继续;而IE在证书签名错误的时候则直接挂断连接,显示页面无法显示,且无任何详细信息 — 让人看起来觉得WebUI挂了。最后,再次抱怨一把:openssl的文档实在是有待丰富!

附上:Open Source Documentation Doesn’t Have to Suck.

vim技巧一则

Sunday, December 6th, 2009

vim的用户应该都比较喜欢gf这个命令,直接编辑当前光标所在文件,方便快捷。其实还有另外两个类似的,只不过会在新窗口或者新标签中编辑。

    1. gf open in the same window (”goto file”)
    2. <c-w>f open in a new window (Ctrl-w f)
    3. <c-w>gf open in a new tab (Ctrl-w gf)

      比如,我用find/grep把一个匹配列表重定向到文件foo,然后在文件 foo 中用 <C-w> f 还是相当惬意的。

      ntemacs

      Sunday, December 6th, 2009

      把XP上的ntemacs更新到23.1.50.1后发现以前写在 site-list/default.el 中的配置似乎不起作用了。比如,我在其中写了:
      (setq default-directory "C:\Documents and Settings\liqun\Desktop\")

      现在这个设置楞是变得不起作用,枉我号称Emacs达人,折腾来折腾去都搞不定,传到江湖上岂不是丢大了。不过既然敢写出来,那一定是搞定啦!右击emacs的快捷方式图标,选择”Properties”,然后进”Shortcut”标签,下面有个设置是”start in”,一眼瞅过去,写的是”C:\Program Files\ntemacs23\bin\”,怪不得现在每次C-x C-f都用这个目录,应该是它捣的鬼啦!改回去后重启emacs,果然OK了。

      另外,一个起作用的配置文件:”C:\Documents and Settings\liqun\Application Data\.emacs”,把default.el直接重命名过去就得了。最后,”start in”中的设置会覆盖.emacs中对default-directory的设置。