程序员为何喜欢半夜工作?

有种流传甚广的说法:如果你想将咖啡豆磨成代码,那就去买台“程序员”好了。确实,如果你在一家编程高手云集的互联网公司工作,问问你身边那些 程序员们,他们一般什么时候效率最高,点子最好?得到的答案,大部分是半夜——不管前半夜,还是后半夜。有些习惯在早上四点起床,然后工作到日出,还有些 人则是习惯在早上四点后才睡觉。

如果只是为了避开无谓的干扰,何不关上门,带上耳机,为何一定要在深夜工作呢?

我认为主要有三条原因:创作者的日程表、困倦的大脑,以及闪亮的屏幕。

创作者的日程表

通常来说,这个世界有两种日程表,一种属于管理者,一种属于创作者。传统的管理者日程表将一天按小时划分,而通常十分钟的打扰,对于程序员来说,可能需要一个小时去重新整理思路。 阅读全文 >>

Play 2.0 中文资料 - Play WS API

有时候我们要在 Play 应用中调用其他的 HTTP 服务. Play 是通过它的 play.api.libs.ws.WS 库对此支持的, 该库提供了进行异步的 HTTP 调用.

任何由 play.api.libs.ws.WS 发出的调用都必须返回 Promise[play.api.libs.ws.Response], 我们可以接着可用 Play 的异步机制来处理它.

Unmi 注: 这里有必须挪出 Play 1 和 Play 2 的 WS 稍加对比:

Play 1 中  play.libs.WS 类,Play 2 里是 play.api.libs.ws.WS,Play 2 中许多给外部调用的 API 都放在 play.api.libs 包中了。

Play 1 的 play.libs.WS.WSRequest  中有 get():HttpResponse, getAsync():Promise<HttpResponse>, put():HttpResponse, putAsync():Promise<HttpResponse>,它把同步和异步调用分得很清楚。

而 Play 2 的 play.api.libs.ws.WS.WSRequestHolder 里只有 get(): Promise<Response>, post(): Promise<Response> 这样方法,在这个位置上,它不再分同步还是调用,这个任务交给 Async 方法去决定。

对异步请求的数据获仍然是由 Action 处理,如 Play 1 中 Action 的各个 await() 方法; Play 2 里的 Action 用 Async 方法。 阅读全文 >>

Play 2.0 中文资料 - Play 缓存 API

默认的 Cache API 实现是用的 EHCache. 你也可以通过插件来提供自己的缓存实现.

访问 Cache API

缓存 API 由 play.api.cache.Cache 对象提供. 它需要注册一个缓存插件.

注: Cache API 尽力保持自身最小化,而允许插入多种实现. 如果你需要一个更具体的 API, 那就通过你自己的缓存插件来使用它.

Unmi 注: EhCachePlugin 的注册方式可以查看 play_x.x.x.jar(比如 $PLAY_HOME/repository/local/play/play_2.9.1/2.0.4/jars/play_2.9.1.jar) 包中的 play.plugins 中的内容:

这是 Play2.0.4 默认注册的插件,其中就包含了 600:play.api.cache.EhCachePlugin 插件。 阅读全文 >>