谨慎使用代码注释

封装 接口 算法 注释 重构

最令程序员头痛的事情莫过于阅读别人的代码,但其实时间一久阅读自己的代码也会很痛苦。 问题不是出在『自己或别人』,而是在代码本身。 必要的注释可以阐明实现细节和设计意图,以此节约自己和别人的时间。 然而很多时候注释起的作用却适得其反,比如自动生成的过多的注释分散阅读者的注意力, 而过期的失效的注释更是误导阅读者。

Express.js 性能优化

Express.js Chrome HTTP 缓存 性能

本文讨论如何提高Express在生产环境的性能,包括HTTP响应的压缩与缓存, 视图与样式的缓存,以及调试信息优化。

静态文件缓存

可通过缓存静态文件来提高页面载入速度,同时也减轻了服务器负载。 比如设置缓存时间为一天:

var app = express();
app.use(express.static('./assets', {
    maxAge: 864000  // one day
}));

常用 MongoDB 命令手册

JavaScript MongoDB 数据库

MongoDB与JavaScript天然的兼容性使得在Node.js下使用MongoDB及其舒服。 我们通常会使用类似mongoose的ORM工具来操作MongoDB。 然而手动查看数据库在很多场景下仍然很有用,例如Debug模型间关系,清空用户表,重置数据库。

本文列举了这些常用的MongoDB命令。MongoDB文档:https://docs.mongodb.com/

Mongoose 中实现虚拟字段查询

MongoDB mongoose Schema

mongoose为数据模型提供了虚拟属性, 借此可以更加一致地、方便地读写模型属性,类似于C#或Java中的访问器。 我们知道虚拟属性在Query阶段一定是查不到的,因为事实上MongoDB并没有存储这些属性。 但是否可以通过一个拦截器来实现虚拟属性的查询呢?

这个问题很有趣,而且在很多场景下都相当方便。例如:

  • 实现一个暴力的全文检索时,需要对多个字段匹配统一查询词,该查询词可抽象为虚拟属性;
  • 多处都需要进行同一个复杂条件的查询时,可以用虚拟属性封装该查询条件。

事实上,虚拟属性查询和虚拟属性读写都是为了代码复用。

Mac 下编写中文 Beamer

Mac 字体 LaTeX XeTeX 中文

TEX 是一个文档排版系统,通过内容与样式的分离使作者能够专注于文本内容。 例如:可以使用\chapter{<title>}来添加一个章节标题,而不需手动地去选择18号粗体。

TEX is a document preparation system that enables the document writer to concentrate on the contents of their text, without bothering too much about the formatting of it. For example, chapters are indicated by \chapter{⟨title⟩} rather than by selecting 18pt bold. – texdoc clsguide

不得不承认LaTeX的学习曲线堪比VIM,但熟悉LaTeX带来的回报也是其他排版工具难以企及。 神奇的是LaTeX最大的门槛居然在于中文排版。 本科时与LaTeX一起度过的那些昼夜,基本都是在从Windows到Ubuntu拷贝字体, 以及调试CTEX宏包或者XeLatex配置。

本文给出如何在Mac下舒服地编写TEX演示文稿,包括引入中文,以及使用Beamer。

实现 Mongoose Schema 间继承

JavaScript mongoose 继承 数据库 原型继承 Schema

在创建数据库模型时我们希望这些模型能够互相继承或扩展, 例如一个银行网站可能所有模型都需要实现逻辑删除、 都需要记录创建人、最后修改人,以及删除人的信息。 通常可以通过扩展(比如 mixin)和继承(inherit)两种方式来实现。

对于小规模网站(比如 20 个模型以下)来讲, 继承的方式已经足够通用而且继承的代码复用方式编写代码更加方便。 Mongoose 并未直接地提供改选项,本文实现一个基本的模型间继承关系。

保存和恢复 TMUX 工作区 —— The Hard Way

Bash Session Tmux

我们知道使用 TMUX 后状态会保存在 Server 端,你的 Terminal 重启不会丢失任何东西。 但 Server 重启后 Session 会全部丢失,如果你像 Harttle 一样在开发 PC 本地运行 Tmux Server 的话, 每次开机后都需要重新建立各种会话和窗格。

但没有什么是不能自动化的,我们可以通过 Tmux 配置文件(即初始化脚本)来自动建立工作区。 本文便来手动编写一个初始化工作区的 TMUX 脚本。

上一页 下一页