2009-12-22

Java Now!

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

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

标签:

2009-12-12

countdown problem

"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!

标签:

2009-12-10

歪打正着

上周末接到一个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.

标签:

2009-12-07

vim技巧一则

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 还是相当惬意的。

      标签:

      2009-12-06

      ntemacs

      把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的设置。

      标签:

      2009-12-03

      拔丝鸡柳

      在奉献了一盘拔丝鸡柳后,LP今晚登上了回武汉的列车。这是结婚后第一次短暂的分离,第一个单身周末。可能是"希望越大、失望越大",LP的鸡柳和我梦想中的完全不是一个模样 -- 形状、味道都判若云泥。LP郑重其事的说,她做的这个叫"拔丝鸡柳"。对我而言,鸡柳是个能勾起回忆的东西,看看这个comment就明白了。

      我觉得自己又变瘦了几斤 -- 虽然这听起来有点NP难,毕竟下降空间太小。上周末被LP拉着在WalMart的体重计上端正的站着,而我楞是不肯放下手中的购物篮。而今晚买了一颗大白菜之后才发现,原来我俩之间的delta竟然卯足了也就是两颗白菜的重量。

      上海移动的在线充值系统似乎出了点问题,baidu一下"签权失败"(不知道移动咋选了这条出错信息,佶屈聱牙,相当拗口),发现这个问题还很普遍。

      标签:

      2009-12-01

      书非借而不能读

      我的工作台上放着一排书,有的已经蒙上了一层灰尘。下班时,随手拿起一本机械工业出版社的《计算机理论导引》。我记得这本书是2000年上大学前的那个暑假买的,在常州。扉页上有我的印章,那是我的曾用名。

      翻了翻,原来以前只看到27页。以前醉心于engineering,对这些理论化的东西不甚热心。后来从接触Scheme到Haskell,才发现那些形式化的东西原来是绕不过去的,冤家路窄啊。

      标签: