Gone to a better place
Posted at 2011-10-07 18:33
我好像没有哪个 blog 能存活超过一年的 = =
我已经把 blog.iwinux.info 指向 Heroku 的 app 了,不知道 GReader 能不能聪明地更改一下 rss 订阅地址呢(原先是 /feed,现在是 /atom.xml)……
My technical stuff.
Posted at 2011-10-07 18:33
我好像没有哪个 blog 能存活超过一年的 = =
我已经把 blog.iwinux.info 指向 Heroku 的 app 了,不知道 GReader 能不能聪明地更改一下 rss 订阅地址呢(原先是 /feed,现在是 /atom.xml)……
Posted at 2011-07-19 03:51
在自己电脑上老是要输入 sudo 的密码是比较烦人的事情,而出于安全的考虑,又不能 root 裸奔或不设置密码(Linux 里貌似不可以?),之前一直是用 alias sd='echo PASSWORD | sudo -S' 这种暴力方法,但对于需要交互操作的命令,这招就不管用了,比如 sd apt-get upgrade 这样的就无法正常执行,因为要你输入 y/n,至于 sd vim 更是想都别想……
今天早上研究了一下 expect 这个神器,拼凑了一个简单的脚本,搞定了这个问题,完美支持交互命令和 vim。这个脚本的难点在于如何将命令参数 $argv 分别传入,而不是以单一的字符串传入。举例来说,假如这个脚本名字是 ssd,那执行 ssd rm -i /tmp/whatever 的时候,如果在脚本里写的是 spawn sudo $argv 的话,实际的执行效果将会是 sudo "rm -i /tmp/whatever",所有参数都被当成是 sudo 的参数传进去了。Google 了一下,找到方法是写成 spawn sudo {*}$argv,问题解决。可惜的是没找到 {*} 的具体含义,貌似是 Tcl 8.5 里新增的一个操作符,没学过 Tcl,不懂。
Posted at 2011-06-06 07:54
手上有好用的工具的话,会情不自禁地想干活,比如用了 Github 之后,就一直想多写几个 开源的项目。Github 的 Issue Tracking 系统太赞了,对于开源项目来说,完全不再需要 其他项目管理工具。而且我还有个小癖好,就是喜欢看代码库的 commit log,看着那长长 的一串特别有成就感……
回正题,最近写了个小工具叫 Tomato,名字来自于“番茄工作法”(Pomodoro Technique ),用于辅助实践番茄工作法的工作流程。这里不打算介绍番茄工作法的细节,有兴趣的话 可以去它的官网看看,或者读一读 Pomodoro Technique Illustrated这本书。
一开始我打算用 Python + PyQt 写,却不想去翻 Qt 的文档,于是就改成用 JavaScript 了。用到的工具有:
目前这个工具的功能还很原始,计划添加的功能包括服务端同步,记录统计数据等等。代码 在 Github 上,地址是 http://github.com/iwinux/tomato ,由于我启用了 Github Pages ,所以可以在 http://iwinux.github.com/tomato 在线试用。
Posted at 2011-05-28 17:47
我的旧 Blog 里最后一篇文章(不包括迁移通告)的发表时间是去年11月。如果不是我在几 个 SNS(Twitter, 人人网,etc)里都持续活跃的话,很可能会有人以为我被外星人劫持了 ……现在我想写篇稍微长一点的东西,回顾我“失踪”这段时间里所学的东西,顺便把 Blog 这大半年的缺口给补上。
说实话,从去年11月到现在,我大半的时间精力都花在了手头的几个项目上(基本都以失 败告终),其余的在被 SNS、吃喝玩乐等琐事瓜分之后,只剩下很少的时间用于学习, 过得很颓废。下面就来列举一下我学了些什么东西。
11月接手一个项目,负责后端开发。受虚拟主机环境限制,被迫用 PHP。一开始打算找开源 程序来改,却发现网上现成的同类程序代码质量都惨不忍睹,只好自己从头开始写。这(居 然)是我第一次用 PHP 做开发。之前一直在玩 Google App Engine,SQL 语句都没写过几 行,而 PHP 只在改 WordPress 的时候接触过……
为简化开发,决定找一个 PHP 的框架。当时不知道为什么一眼就看中了 CakePHP,读了两 天文档之后就开始写了。现学现卖真是不得已而为之,一边写程序一边不停地查文档,效率 极其低下。
CakePHP 仿 Rails 的设计仿得很像,不仅有 MVC 的结构,连 ActiveRecord 风格的 ORM 都学了过来,确实很适合快速开发。对于我这种被 ORM 宠坏了不喜欢写 SQL 的人来说,它 提供的数据查询接口简直是救星一般的存在。
不过,CakePHP 的缺点也很明显:
之后帮学院做的两个网站用的也是 CakePHP,因为服务器是 Windows Server 2003,跑 PHP 是我唯一的选择(不想为此去学 ASP.NET)。我的感受是,即使 CakePHP 帮我解决了很多 问题,写 PHP 仍然是很糟糕的体验,我会尽量避开 PHP……
经常读 Paul Graham 的文章,被他“洗脑”之后对 Lisp 非常着迷,却苦于找不到一个“现代 ”的 Lisp 实现,而 Clojure 让我眼前一亮。
去年暑假的时候看过一本 Programming Clojure,半懂不懂的,趁着12月上半月有一点空闲 ,找来 Practical Clojure 重新开始学。我重点关注了它与 Java 的互通,玩法是把 Core Java 这本书里讲 Swing 部分的 Java 示例代码翻译成 Clojure。而为了熟悉语法,我还用 Clojure 来做 Project Euler 上的题目。
比较可惜的是之后又在忙别的事情,就没有继续深入学习了,像 macro 和 STM 这些有趣的 特性都没有机会玩到。后来有想过拿它来玩 Robocode, 也一直没有付诸行动。
Clojure 的“现代”在于它是基于 JVM 平台的,不用担心跨平台的问题,类库资源很丰富 (理论上现有的 Java 库都能直接使用),Web 开发框架也逐渐成熟。之前看到 The Deadline 这个GAE 应用就是用 Clojure 开发的(GAE 有 Java 支持,稍微折腾一下就可以让 Clojure 跑起来)。
十二月底开始做 Textrade 项目。由于这次有自己的 VPS 主机,程序员又只有我一个,很 大胆地选用了 Rails。玩过山寨的 CakePHP,想看看真正的 Rails 是长什么样的。之所以 说大胆,是因为我连一行正经的 Ruby 代码都没写过。
花了四天时间,一边看 Ruby on Rails Tutorial, 一边照着敲上面的代码。又一次现学现卖。之后写 Textrade 时遇到不懂的,就查官网的 Guides 和 The Rails 3 Way 这本书。偶尔还会重新翻看 Tutorial 里的示例代码。前期写 Textrade 都是怎么快怎么来,代码写得很混乱。在读了 Rails Antipatterns 这本书后我 才逐渐重构自己的代码,使其真正地符合 MVC 结构。
Rails 的好话我在 Twitter 上说过太多,这里就不啰嗦了。
学习技术的时候实在太多意外状况,像 CakePHP 和 Rails 都没有出现在我之前订下的技术 学习路线图里,完全是因项目需要才学的。这样不时地偏移路线,搞得 essential 知识为 non-essential 知识让道,不是我想要的。必须继续探寻学习与工作之间的平衡点。
Posted at 2011-05-23 14:26
Tublog 上一次较大的改动是去年8月发布的,之后由于手头总有各种事情在忙,不仅没时间更新 Blog 的内容,连 Tublog 代码的维护都荒废掉,自己在 TaskAnt 里记录的许多待实现的功能看起来都遥遥无期。虽说 Tublog 的版本号已经到了 1.0,其实功能仍然非常原始,我不甘心它在这个阶段就烂了尾。
酝酿了一段时间(我的拖延症作祟),三月份的时候终于抽出空来处理 Tublog,决定把代码库从 Google Code 迁移到 Github,然后重写所有代码。这是第二次重写 Tublog,理由如下:
原先的代码写得很烂,这是我初学 Web 开发时的作品,上一次重写时(2009年高考完之后)自己无论是对后端开发还是对前端设计都了解得太少。过去半年我在这些方面有较多涉猎,希望能运用上这些新知识。
Tublog 在功能上有很多模仿了 plog 和 Micolog 的设计——当初只是想写个 blog engine 练练手,现在我却想把它做成一个有自己特色的东西。
上一次重写我从 Uliweb 转到了 web.py,这一次则选择了 tipfy,这是一个专门为 GAE 打造的框架。抛弃 web.py 的理由是它太轻量,稍微复杂一点的事情折腾起来就会比较麻烦(比如 GAE 上的 session 支持),而 tipfy 正好能满足我的需求。
三月份到现在,又是两个月过去了。断断续续的,终于重写到勉强能用的程度,就迫不及待地把它部署上来。预计月底能发布重写后的第一个正式可用版本。
忘了说,代码在 http://github.com/iwinux/tublog,目前很多地方还是硬编码的,暂时不推荐使用。