读《叫魂:1768年中国妖术大恐慌》

在弘历的这一任上,大清的盛世梦达到了最高潮。自17世纪开始,玉米、番薯、马铃薯等美洲粮食作物引入中国,战乱的平定和粮食产量的增长使得大清的人口数量翻了一番,从 1.5 亿达到了 3 亿之巨;由于西班牙人在南美的掠夺,导致白银大量流入,尽管带来的一定程度的通货膨胀,却也推动了贸易与土地交易的欣欣向荣。然而在这繁华盛世的背后,独坐龙椅的弘历叔叔却也感到了自己的中年危机。

Read More

协程与事件循环

最近研究了一下 es6 的生成器函数,以及传说中的 co。虽然网上关于协程、co 源码分析的文章数不胜数,但是将其与先前异步实现的事件队列结合起来说明的文章却很难寻觅。之前只知道协程是实现异步的一种方式,那其和之前的各种异步实现究竟有什么本质区别呢?本文将根据协程机制简要探讨一下引入协程之后的新的事件循环模型。由于笔者基础知识不够扎实,所以会先讲述一大堆协程产生的背景和原理,再进行模型变化的讲解。

Read More

Git 钩子

Git 钩子

Git 钩子是在一个 Git 仓库中,在每一次特定事件触发时自动运行的脚本。它允许我们自定义 Git 的内部行为,并在开发的生命周期的关键时间点触发自定义行为。

Read More

使用分支

使用分支

这篇教程对 Git 的分支进行了全面详尽的介绍。首先我们会研究下如何新建分支,其过程和获取一个新的项目历史有点类似;之后我们会了解到如何使用 git checkout 来选择分支;最后我们会学习到 git merge 命令是如何将几个相互独立的分支上进行整合的。

在阅读文本时,请记住 Git 的分支与 SVN 分支的不同。SVN 的分支是用来处理偶尔会进行的大规模开发才使用的,而 Git 的分支确是我们日常工作流不可或缺的一部分。

Read More

协作同步

同步

SVN 使用一个单独的中心仓库以作为开发者的通信枢纽,其协作的方式是开发者的工作副本与中央仓库互相发送变更记录。这与 Git 的协作模式有所不同,Git 中每个开发者都拥有仓库的副本,以及完整的本地历史和分支结构。用户通常只需要提供一系列的提交而不是单个的变更记录。Git 允许我们在仓库之间共享整个分支,而不是单单的从工作副本提交一个变更记录到中央仓库去。

下面介绍的命令可以帮助我们管理与其他仓库的连接:我们可以使用“推送”分支的方式将本地历史发布到其他仓库,也可以使用“拉取”分支的方式将别人贡献的代码获取到本地。

Read More

JSDoc 配置使用概览

尽管一个好的项目文档能让项目增光添彩,但文档的作用始终是锦上添花而非雪中送炭,对于开发者来说,费尽心神的整理项目文档似乎也并非是一件令人愉快的事情。在使用题中所述的工具——jsdoc和编写本文的同时,笔者也是几度懊恼:这东西在项目中真的有用吗?是不是有点浪费时间?但随着项目体量的增大和开发人员的增多,使用并自动化维护一份好的文档所带来的优势也是逐渐显现。笔者也决心写一篇科普小文,说一说文档工具的使用注意要点。

Read More

avalon 事件总线与依赖调度系统

在工作中经常使用到司徒avalon ,由于坑点太多,有时需要经常查阅其源码实现。而 avalon 由于方兴未艾,网上对其进行源码解析的文章并不多,查了半天也就只有这篇 MVVM 大比拼,以及这篇 avalon 源码分析。个人认为这两篇文章写得都并不算好,其一是成文较早,研究的源码还是 1.2.5 版本,而目前的新版本已经到了 1.4+,比之前不知道高到哪里去。其二是大比拼一文作者阅码无数,心中早已无码,写分析只观其大要,似乎在和原作者谈笑风生;而后者的分析仿佛又只是对源码的粗略通读,也没怎么经过实践,有些图样图森破。因此自己决定安下心来写点源码分析。

Read More

JavaScript Promise 探微

原文链接:JavaScript Promises … In Wicked Detail

我在 JavaScript 中使用 Promise 已经有一段时间了,目前我已经能高效的使用这一开始让我晕头转向的东西。但真要细说起来,我发现还是不能完全理解它的实现原理,这也正是本文写作的目的所在。如果诸位读者也处在一知半解的状态,那请读完这篇文章,相信你也会像我一样对 Promise 有更好的理解。

Read More