智能家居之实践篇

装修了半年多,两个月前正式入住,可以开始好好折腾智能家居了。现在用的一些方案和之前写的智能家居之计划篇差了不少,于是有了这篇博客聊聊现在的设计。这里直入主题,之前的计划篇里有更多的背景介绍。

阅读全文 →

智能家居之计划篇

二月中旬开始装修房子,做了不少智能家居的研究,分享一下。坐标湾区,项目目前还在计划和购买阶段,欢迎拍砖,欢迎种草。

阅读全文 →

本地 Markdown 预览工具

最近一直用 iA Writer 做笔记,用不同的文件保存不同的主题,由于 iA Writer 并没有很好的管理和浏览功能,于是就想做个 Web 工具方便浏览和管理。

markdown-wiki 是我用 Sinatra 做的一个简单的预览工具,它可以把某个目录下的 Markdown 文件以 Wiki 的形式呈现出来。界面上借用了 Ghost 的 CSS,可以在 http://markdown-wiki-demo.herokuapp.com/ 预览(因为是非本地的内容,上方的 Edit 按钮没有作用)。

Markdown 语法方面,由于用了 redcarpet 所以有不少语法扩展,包括代码块、删除线、下划线、上标等,另外包含了 Wiki 内部链接支持。

阅读全文 →

用外接 PC 键盘控制 Mac 音量

写了个 Alfred 插件,用于外接 PC 键盘控制 Mac 的系统音量。

阅读全文 →

马尔代夫 Dusit 岛

Kindle 推送知乎日报

知乎日报每天都会更新有意思的问答。我比较习惯用 Kindle 看这样的文章,就写了一个 calibre 的插件抓取每天的内容。

阅读全文 →

Ruby 命令行中快速查看函数源码

如果要查看 ActiveRecord 的 update_attribute 函数的源代码,一个比较常见的方法是直接在 Rails 源码中搜索 def update_attribute。博客 The Pragmatic Studio 介绍了一个更方便的技巧,在 Ruby 命令行中就能启动编辑器直接访问。

通过 Object#method 方法可以获得 update_attribute 方法的对象,而 Method#source_location 则返回这个方法定义的文件和位置。有了这个信息后,就能启动编辑器查看源代码了:

阅读全文 →

清除 zsh steeef 主题的未追踪标记

我用的 zsh 提示符是 oh-my-zsh 自带的 steeef。最近发现用这个主题时,有些 Rails 项目即使把所有改动都提交后,还是会有红色标记表示存在未追踪文件:

使用 git statusgit diff,都看不到任何未提交的改动。一开始我以为是 zsh 或者 git 的 bug,把它们的版本都更新到最新版后还是有这个问题。于是看 steeef 主题的源码,发现了红色标记的判断依据:

阅读全文 →

为 Emacs cscope 加入 Java 支持

Emacs 的 xcscope 插件默认不会扫描 Java 文件,另外 Android 源码里有不少 .aidl 的文件,默认也不包含在 xcscope 的扫描范围里。解决这个问题的一个方法是在项目根目录下手动创建 cscope 索引:

$ find . -name "*.java" -or -name "*.aidl" -or -name "*.cpp" > cscope.files

$ cscope -b
阅读全文 →

Rails 中关于 respond_to 不同格式的顺序

以前没注意过 Rails controller 中 respond_to 的格式顺序,后来碰到了一个诡异的 bug,才发现这里的顺序对程序行为是有影响的。bug 的现象是用某个应用商店桌面端浏览网站时,会出现返回 JSON 而不是网页的情况。由于当时报告错误的用户给出的 bug 描述是「点击链接后出现乱码」,导致 debug 一开始没找对方向,废了不少功夫才解决这个问题。

问题就出在不同格式的声明先后上,有问题的代码是:

respond_to do |format|
  format.json { render json: @items }
  format.html
end
阅读全文 →