Simplicity is prerequisite for reliability

上一篇博文「魔改 pip 的快乐与痛苦」中,我提到魔改开源代码,一个需要时刻考虑的事情,就是如何方便地合并上游变更。为了合并上游变更,我们要尽量克制自己乱写代码的冲动,不要作出那些使得合并代码变得困难重重的事情,比如像我曾经干出的修改包目录的蠢事。

为了修正我犯下的错,我决定在 mpip 代码仓库中保持基本 pip 一样的包目录,改换包目录这种事情放到编译过程里做。于是我不仅要在编译过程里把代码复制一份,还得把包目录从 pip 移动到 mpip,然后把代码里各种和 pip 相关的包目录、文件路径、常量定义、环境变量,总之一切有可能让 pip 和 mpip 之间不清不楚互相干扰的,都得改干净,这样才能让 mpip 和 pip 和平共处。

Read More...

半年前我做了一个 side project,把 pip 魔改一番,使得我能够将 Maven 的 Nexus 仓库作为 pip 的后端仓库。于是原本通过 pip install xxx==version 命令,我们可以从 https://pypi.python.org/simple/ 把指定版本的包下载下来然后安装,我可以用 mpip install xxx==version 从公司内网的 Nexus 仓库下载包然后安装。

之所以做这么个工具,是因为公司没有提供一个内部的 pypi 服务器。Python 不是公司的主流语言,公司自然不会投人力物力去维护这么一个服务,如果由我所在团队自行维护,又得付出额外的人力物力,并不是十分划算。于是我们之前的做法是将系统依赖的三方包,不管是 whl 还是 tgz,直接放在代码目录里,然后在生成部署包的时候再复制、安装。

Read More...

很长一段时间里,我一直以为,对于同一个时间格式,我们把一个时间对象序列化成字符串之后,还能反序列化成和原对象表达同一个时间的时间对象,至少在不考虑时区之类的问题时,这个命题应该成立。

$$ \forall F \in DateFormat, F(D)=S \rightarrow F^{-1}(S)=D $$

然而就在这两天,我遇到了一个打破上述认知的奇怪问题,Date 对象格式化之后再解析回来,就完全乱套了。

Read More...

我使用 Grav 作为博客系统已经好几个月了,基本上还算满意,除了一直没法愉快地在手机上写博客。

Grav 的 Admin 插件是一个功能完善的后台系统,在电脑上的用户体验尤其不错,可以说是我尝试过的各种博客系统中最让我满意的。最让我满意的是它的扩展性,允许用户通过增加 YAML 语法的 blueprint,为系统增加可视化配置编辑页面,靠着这个功能我已经把 Pastime、Links、Author 等页面或者 Sidebar 的内容做成可视化编辑的配置文件,从模板中剥离了。美中不足的是,Admin 插件集成的一个代码编辑器,在移动端输入中文时有致命缺陷。

Read More...

就像自从我用手机以来就一直被「找不到 SIM 卡」困扰一样,自从两年前我开始置办苹果三件套以来,就一直被一个说大不大说小不小的问题困扰着,这个问题就是我的 iOS 设备一旦使用 USB 数据线连接上 Macbook 之后,有九成以上概率会不停地发出难以形容的声响,伴随着 iTunes 不停地弹出提示框,看起来像是 iOS 设备和 Macbook 直接在不停地断开、连上,断开、连上,断开,连上。然而在预期的行为中,这个声响只在连上的时候发出一次。

长期以来我都尽量避免将 iOS 设备和 Macbook 使用 USB 线直连,各种数据传输都走 Wireless,直到今天我想要把一部电影拷贝进手机而又不愿意在传输上等个五分钟,于是我鬼使神差地再次使用 USB 线,毫无悬念地遭遇了上述的奇怪问题。

Read More...

After working as a software engineer for two years, I find writing weekly report a really tough experience.

I spent lots of time doing trivial daily works and finally I can't recall them when I need to write the fucking report.

I have to spend time writing what I did this week instead of creating useful code pieces, reading some books or having some fun.

Read More...

如果你是一个开发者,那么你拥有至少一台 Mac 的可能性大约是 1/4。如果你是拥有 Mac 的开发者,那么你使用 Homebrew 来安装和管理软件的可能性几乎 100%。

如果你恰好和我生活在同一个国度,头顶同一片天空,怨念同一堵墙,那么你使用 Homebrew 的 cask 子命令来管理 GUI 软件的体验,想必也是不那么愉快的。

于是我写了一个软件,自认为能够提升使用 Homebrew 批量安装软件时的体验。如果你开始感兴趣了,请继续往下看。如果对我的扯淡没兴趣想让我赶紧 show code,也可以直接访问 JamesPan/tmux-parallel

Read More...

多图杀流量,非 Wi-Fi 环境慎入。

不知道多久没有这么废寝忘食地玩游戏了。国庆假期的后面几天,我在玩一个叫做 Human Resource Machine 的游戏。最开始得知这个游戏的消息,还是收听的 内核恐慌 最新一期播客 双侧轮流肾移植

给小职员编程来让他们解决难题。当一名好的员工吧!机器正在过来……夺走你的岗位。

Human Resource Machine 是一个解谜游戏,玩家使用某种简陋的汇编语言,控制小职员去完成各种工作任务。每一关除完成任务外都还有两个目标,一个是要使用尽可能少的指令(不多于 N 个指令),另一个是在运行时使用尽可能少的步骤(不多于 M 个步骤);

Read More...

国庆假期的头三天去朋友家做客,感受了一下富二代「奢靡腐化」的生活。但是,作为一个想要成为 PPT 架构师的好程序员,即使在假期里,也是要写代码的,这一点古今中外概莫如是。

我是个程序员,今天我休息。猜猜我在干嘛?虽然我很想告诉你我在巴哈马享受鸡尾酒,但实际上我休假的时候还是在写代码。

因此所谓的“休假”只是对 HR 来说的——我只是放下工作,好专心让我的游戏重新上线。这个游戏我写了快 10 年,开发的时间差不多有 7 年。这个游戏下线已经好一段时间了,现在重新上线,部分原因是为了摆脱那些一直追在我屁股后面的玩家。这至少要花一个星期,所以我只好休一星期的假来搞定它。

Steve Yegge,程序员的呐喊

Read More...

春花秋月何时了?往事知多少。小楼昨夜又东风,故国不堪回首月明中。雕栏玉砌应犹在,只是朱颜改。问君能有几多愁?恰似一江春水向东流。

问君能有几多愁?为了一份周报想破头。

要说工作之后最让我头大的事情,其中一件就是每周都得写周报了。实习的时候,还曾经因为周报太简单,被大老板批评「要是再这么写周报,以后都别写了」。

Read More...