Code 2011

Sat 31 December 2011
  • 当时 tags:
  • Life
  • programming published: true comments: true

成功人士是不写总结的,所以我来写个总结。

今年的coding从ABAP开始,这个很多人现在不知道以后也不用知道最好永远也不要知道的语言和他的平台,是一个脱胎于Pascal,在发展过程里又杂糅了SQL和C++的怪物,最后几乎变成了满屏幕关键字。再加上缺乏文档,实在是一段不堪回首的记忆。

3月份开始,我又重新开始了一个python项目叫做jip,他兼容maven,可以与virtualenv和setuptools集成,帮助你解决jython项目的java依赖,简化jython项目的发布,提高工作效率。这个小工具倾注了我不少时间,如果你某一天要和jython打交道的话,可以试试看。

今年还尝试了coffeescript,它恰到好处地消除了javascript里一些ugly的部分,大大提高了编码速度。我用它改写了网站首页的js

6月份我又重拾起1年前的javascript库heatcanvas,和lbt05协作完善了程序。通过HTML5的Web worker API改善了渲染canvas时的用户体验,增加了对Google Maps,OpenLayers,Baidu Map以及Leaflet的支持。这个项目的介绍被顶到hackernews的首页,这是一种前所未有的感觉。

7月份开始迎来了一个重大的转折。断断续续学习了一年半的clojure,终于开始写第一个库,reddit.clj,用clojure封装reddit网站的API。通过这个入口算是真正走进了clojure的世界,七月底reddit.clj基本完成之后我开始写他的第一个应用,rageviewer。这是个clojure的web项目,借着这个契机又接触了compojure和ring。而且写rageviewer的时候恰逢clojurescript公开,一不做二不休,于是这个项目就成了一个full stack的clojure项目:前后端都是clojure。最后rageviewer部署在当时刚刚开始邀请测试的cloudfoundry上。

8月参加了在上海的cn-clojure列表第一次聚会后,我开始用clojure克隆一个已有的并不复杂的程序,当时选择了beanstalkd,一个轻量级的task queue。这个项目取名为clojalk。最后它成功地支持了beanstalkd协议的所有命令,支持了通过Write-ahead log做持久化和恢复。这个项目用到了aleph,见识了一把clojure思维下的网络编程。

另外我还帮clojure-control写了一个leiningen的插件,现在这个插件已经合并到clojure-control项目里了。clojure能有这么快的发展,leiningen作为构建工具也有很大的帮助。就好比上半年做jip时,感受到jython的小世界里就没有一个好的方案来同时解决java和python的项目管理问题,而且人们也不重视这个问题。

年底还有一个clojure RPC框架的诞生,这个项目叫做slacker。项目还没有到总结的时候,我的org file列表上还有一长串的TODO。

总得来说,我觉得今年学习clojure的这个过程很有借鉴价值。对于一个新语言新平台新生态系统,如何入门并且getting real。你可以从一个功能简单的库开始,比如包装一个网站的API,或者(对于clojure来说),包装一个已有的java的库。在完成之后,利用这个库,写一个web应用,进而去了解这个平台上的web开发。再下一步,可以去克隆一个其他平台上的项目,规模不要太大。如此循序渐进,学习的效果很不错。另外,无论做了什么,只要是有用的,就应该说出来,这不仅是自我鼓励,有时候也能找到志同道合的朋友一起参与。

最后除了clojure之外,今年还接着gnome-shell的发布和更新,接触了gnome-shell的gjs扩展开发。又是一个不堪回首的平台,也许是还没有finalize吧,没有任何文档,而且一个平台上的库连变量拼写的风格都不一样!我是不会再浪费时间了,当然,以后的这个豆瓣电台的control还是会继续跟着gnome-shell的发布一直维护的。

除了上面提到的,今年还尝了一些groovy,common-lisp,甚至octave,不管怎么说都算是一个big year了。但愿明年能把这种状态保持下去,享受这种愉悦。