Symbol Navigation in Atom Editor

There is a “Go to Declaration” in context menu of Atom Editor, but it doesn’t work by default. It is because Atom doesn’t scan the project to generate symbols, it depends on tags, tags can be generated by run command “ctags -R in project root”. cmd-r can lookup symbols in current buffer (file), it doesn’t requires tags pre-generated.…

在 Mac OS X 系统里使用 Docker

目前的 Docker 实现是建立在 Linux CGroup 等技术之上,因此无法在 MacOS X 上原生使用(不过都折腾libcontainer了,不久应该会很快会有原生版本了吧)。需要建立一个 Linux 虚拟机,然后在虚拟机内的 Linux 上安装使用。为了简化整个安装使用,boot2docker.io 提供了一个完全自包含的安装包,它会: 检测 Virtual Box 虚拟机软件,如果没有则安装之,有则启动运行之。 创建名为  boot2dock-vm 的 headless vm,这个 vm 非常精简,只提供了运行 docker 所需要的基本环境,比自己从头安装一个 Linux 省很多。 在 Mac OS X Host 上安装 boot2docker  及 docker 命令。 在 Mac OS X Host 上安装 boot2docker app。这个 app 其实就打包了一个 Apple Script 脚本, 它会打开一个系统 Terminal 并启动虚拟机并做一些环境设置。在初次运行时会把 /usr/local/share/boot2docker/boot2docker.iso  复制到 ~/.boot2docker/ 里,然后调用boot2docker init完成初始化。 因此,在习惯使用的Terminal 软件如 iTerm2 里,自己调用boot2docker up 也是一样的。boot2docker 启动之后,就可以在 Mac OS X 的环境里使用 docker 命令工作了,用法跟标准的lxc-docker 一样,它知道通过ssh将工作转发给虚拟机里的 docker 实现。如果想要直接在虚拟机内工作,用 boot2docker ssh 就要以获得一个运行在虚拟机内的shell了。 在 Mac OS X 下,除了 boot2docker.io 外,还有一个 skitematic  也可以提供 docker 环境。Skitematic 实际上是在 boot2docker 的基础上又做了一层包装并提供 GUI 方式管理docker 以及访问 docker hub 。Skitematic 挺好用的,但是它其实是个web app,并且内部依赖http://fb.me/react-devtools,所以第一次使用需要翻墙否则界面不正常。更重要的时,它带的 boot2docker 注意了会用 dev 做为 Virtual Box 虚拟机的名称,但是放在 Mac OS X 里的其它文件跟 独立安装的 boot2docker 是有冲突的。 在配置好 boot2docker之后又使用Skitematic 的结果是先后出现了以下2个问题: docker 命令版本(1.1.8)变得比独立安装的 boot2docker-vm 里的(1.17)要高,访问boot2docker-vm会报以下错误: FATA[0000] Error response from daemon: client and server don’t have same version (client : 1.18, server: 1.17) 由于 Skitematic GUI没有关闭VM的界面,需要File…

Iron-Router auto routing by name conversion

Once got the idea of Iron Route routing method, Conversion over Configuration popped up in my mind immediately. I have named the templates same as their path, it is boring to type it again in JavaScript code. Iron Router’s document mentions catchall route with path-regex syntax, but thing can be way far simpler: Route.route(‘/:path’, function…