为什么应该使用 Stacked Diffs / Stacked PRs

Meta 与 Google 内部的代码管理工具都支持一种被称作 "stacked diffs / stacked PRs" 的 workflow. 然而, 基于 git 的主流平台 (github, gitlab) 都不支持这种 workflow. 许多离开 Meta 后不得不使用 github 的朋友表示, stacked diffs 对于工程师是一个 "ultimate productivity tool", 我也深有同感. 这篇文章介绍一下什么是 stacked diffs workflow, 以及为什么它能够极大的提升团队开发效率.

Read more

Effective Use of Python 'logging' Module

In large systems, logs can be terrifying: they are huge in volume, and hard to understand. This note lists some suggestions and common misuse of Python's logging module, with the aim of:

  • Reduce redundant logs & spams from libraries.
  • Allow more control of logging behaviors.
  • Make logs more informative to users.
Read more

Patching STB_GNU_UNIQUE of Buggy Binaries

开源工具链里有很多陈年小 "feature", 最初由于各种原因 (例如作为 workaround) 实现了之后, 即使语义模糊或设计不合理, 也因为兼容性被留到了今天.

Read more

On Environment/Package Management in Python

Python's package management is a mess. I'm involved in a few open source projects and I often help users address their environment & installation issues. A large number of these environment issues essentially come down to incorrectly / accidentally mixing multiple different python environment together. This post lists a few common pitfalls and misconceptions of such.

Read more

写House3D渲染的时候踩过的坑

House3D 是一个用于 research 的交互式 3D 环境. 用户可以载入一个来自 SUNCG 数据集的房子的模型, 然后在里面走来走去, 并获得 first-person view 的图片输入.

我写了 House3D 的渲染代码, 过程中踩到了不少神奇的坑, 坑踩的多了就觉得干脆记下来吧.

Read more

Explode Tuple in C++11

std::tuple 是 C++11 中的一个好东西. 它功能上算是std::pair 的扩展, 但有一些其他的用法.

例如, 可以借用 tuple 来模拟多值返回 (Python 中也是这样), SugarCpp 中就是使用 tuple 实现了简洁的多值返回语法:

tuple<T, T> sort<T>(a: T, b: T)
    return a < b ? (a, b) : (b, a)

tuple 也可以用于模拟 Python 中的 Parallel Assignment:

Read more

My Vim

vim 折腾了很久了, 好像有必要写一写我的 vim 配置.

大概就按照 vimrc 的顺序, 只挑一些好玩有趣的来讲好了. 完整的还是去 github 上看吧:

话说... 语法高亮非常悲催因为 highlight.js 不支持 vimscript 怎么办..

写了一个 hexo 插件: hexo-tag-vimhighlight, 现在可以用 vim 高亮代码了. 谢谢 @Alick Zhao 同学告知 vim 内置的 2html.

Read more