• 最长上升子序列长度的O(N*logN)算法推导

    关于最长上升子序列的O(N*logN)算法已经有不少文章表述,可惜大都不够“好”(甚至语焉不详):我认为“好”的算法描述不但应该清晰地说明计算步骤,更应该讲清思路——即,这个算法是怎样思考得出的。这种思考的过程和方式才是精华之处。我试图用我的理解对这个算法给出一个尽量“好”的推导和表述,使你我一样的普通人都可以理解它的思路。 继续阅读 »

  • Ruby Rack及其应用(下)

    Ruby Rack及其应用(上)对Rack的定义、基本原理和构建方法做了介绍,并且提到Rails、Sinatra等web框架都是在Rack之上构建的。现在让我们来看几个Rack作为中间件的典型例子,包括Auth、Session以及Log。 继续阅读 »

  • 电子书与跑步机

    我有不少电子书,其中一些还购买了纸质书——不(仅仅)是为了收藏,而是为了更好地阅读——把经常阅读的书放在手边、随手可以翻到感兴趣的地方是很重要的。另外,这对记忆也大有帮助——哪一天、在什么情况下你翻到了书的什么位置、看到了什么、想到了什么,这些信息都藏在你大脑深处,帮助你回忆。

    继续阅读 »

  • 作为缓存的Redis实例的备份和恢复

    听上去很简单,然而并不是——今天我要说的是为仅配置为缓存、没有persistence的Redis实例进行备份和恢复。为什么要对缓存进行备份和恢复?每个人的需求都不一样,其中一种是为了debug:你必须复原一个与production一模一样的环境——不仅是db,还有缓存,否则一些问题就没法重现。 继续阅读 »

  • 【译】示范,但不命令——一种管理风格

    在GitHub工作是怎样一种体验?GitHub工程总监Ryan Tomayko分享了他的管理经验——据说人人都是“经理”(不是那种“产品经理”)、没有人监督你工作、甚至都没人告诉你该干什么…… 继续阅读 »

  • 【译】“中等成功(Mid-Success)”导航

    创业就像跌下悬崖,而你身上只带着一口袋飞行器零件。你希望用这些零件造出一艘飞船,而有时候你手上的零件只够造架飞机。飞机也不错,但很多投资人看重的是宇宙飞船而不是飞机,他们往往愿意冒极大风险看看你能不能把飞机变成飞船。那么你该怎么办? 继续阅读 »

  • Ruby Rack及其应用(上)

    你可能听说过Rails、Sinatra这些Ruby Web框架,也可能尝试过其中一、两个,但如果你还不了解Rack甚至根本没听说过它,那么你的Ruby Web开发还停留在表面:Ruby Rack是前面这些Ruby Web框架的基础,Rails和Sinatra都建立在它之上;不了解Rack的原理就无法真正理解你的Ruby Web应用的架构与工作机制、对一些复杂的问题也无能无力。任何一个正经的Ruby Web开发者都应该了解、掌握Rack。 继续阅读 »

  • Sinatra + ActiveRecord = Really Lean Startup?

    为什么不是Rails?因为Rails太臃肿了!如果你有一个好创意,你应该从Sinatra轻快地开始。Sinatra十分轻盈——它只是在Rack的基础上添加了一些必要的辅助功能,如routes、views以及一些HTTP辅助方法,总共不到2500行代码(v1.4.7)——框架代码越少越好,这样你就容易掌控全局;相比之下,Rails仅ActiveRecord代码就超过35000行! 继续阅读 »

  • 在Ruby Rack应用中直接使用MongoDB Ruby Driver

    在Ruby程序中使用MongoDB你有两种主要的选择:Mongoid或者是MongoDB官方的Ruby Driver。有这么一种常见的说法:Mongoid一般用于Rack应用程序,如Rails,而MongoDB Ruby Driver则用在Rack应用以外的领域。然而,在Rack应用程序中直接使用MongoDB Ruby Driver也并没有什么问题,与Mongoid相比还有一些优点: 继续阅读 »

  • ActiveRecord批量写入(Bulk Insert/Upsert)的问题与解决

    Ruby ActiveRecord向数据库的批量写入效率很低:要插入一条记录,你只能先用model的`create`方法构造一个对象,然后保存到数据库;如果你有一批数据要插入,你就要循环调用`create`方法——这一过程可能缓慢到令人难以忍受! 继续阅读 »