什么是 CMake
All problems in computer science can be solved by another level of indirection.
你或许听过好几种 Make 工具,例如 GNU Make ,QT 的 qmake ,微软的 MS nmake,BSD Make(pmake),Makepp,等等。这些 Make 工具遵循着不同的规范和标准,所执行的 Makefile 格式也千差万别。这样就带来了一个严峻的问题:如果软件想跨平台,必须要保证能够在不同平台编译。而如果使用上面的 Make 工具,就得为每一种标准写一次 Makefile ,这将是一件让人抓狂的工作。
Read More
我在年初把博客迁移到了 ruhoh,用了一段时间之后,也开始感觉到各种不满意的地方。
就我个人的感受,ruhoh 有以下几个不足:
- 页面生成速度太慢。到目前为止我的整个站点总共写了100来篇文章,在生成的时候花了将近半分钟的时间。
- 定制性有限。由于作者一开始就把 ruhoh 定位在 language agnostic 的目标,因此在采用的模板语言也选用了最平台无关的 mustache。但 mustache 的语法能力实在有限,只支持简单的逻辑判断。像传参、循环之类的特性都不支持。比如我想实现类似 octopress 这样的 tag 插件,直接用 mustache 是不可能的,只能动 ruhoh 的 ruby 源码,而这样又和作者的设计目标相反了。
- 太小众。用 ruhoh 的人太少,插件相应也少,不像 Jekyll 或 octopress 那样有丰富的扩展。
- 不跨平台。ruhoh 在 Windows 下总会遇到一些奇怪的问题而无法运行。如果我因为特殊原因而需要在 Windows 下写文章的话就会很不方便。
- 更新缓慢。在我写这篇博客之前,ruhoh 的已经半年没有什么重大更新了。我在 4 个月前给作者提交了一个给文章生成 postid 的功能性建议,到现在的标签依然还停留在 next-release
阶段。
- 最致命的一个问题是,是连作者自己都很少用 ruhoh!在一个 issue 页面里,作者跟我们承认他自己平常也很少使用 ruhoh 。可想而知,如果一个产品连开发者自己都不用的话,很难保证这个产品会做得好。
Read More
现在这个bug已经被修复,见
#10205。如果你正在使用最新的bootstrap版本,应该不会再遇到这个问题。
Twitter-Bootstrap有一个名为scrollspy的脚本,顾名思义就是可以帧测页面的滚动,然后自动更新导航条的状态。见下面这个实例(请自动忽略最上面JS Bin的工具条):
JS Bin
Read More
我在撰写上篇博文的时候遇到了一个有趣的问题:如何根据ip所在地选择视频源?
由于你很了解的一个原因,国外流行的视频网站(e.g.YouTube)在国内一般不能访问。为了同时照顾大陆和其他国家地区的视频观看者,@李扬彦博士把我们的视频分别上传到了优酷和YouTube上。于是,作为一名勤奋勇敢的大陆人民(我自豪!),我当然是优先选择嵌入优酷上的视频。但我随后又萌生了一个念头:如果访问者是个外国朋友,访问优酷不一定能像 YouTube 般顺畅(尤其是前者还有万恶的30秒广告!)。能否根据ip所在地的不同,让ip地址不在中国的朋友使用YouTube上的视频源呢?
于是我就基于 jQuery 和 AJAX 写了这个插件。思路很简单:
- 默认先加载优酷上的视频;
- 读取访问者的ip信息,判断其所在的国家(或地区);
- 如果所在地不是
地大物博,千秋万代的大陆地区,就自动将视频源切换到YouTube上;
- 用户还可以通过下方的选择按钮切换视频源。
Read More
最近扔了不少笔记在 wiki 上。笔记一多就出现了查找定位的问题。比如,当我学了 awk 后想回过头来再看一下 mysql ,我可能就已经忘记了 mysql 的笔记的结构,于是为了定位到某个关键词,我可能得花半天时间在查找上。我想这种情况会随着我日后笔记的增多而越发严峻,所以最好就现在就动手解决它。
最简单有效的办法是实现站内搜索功能。ruhoh这类静态博客的一个缺点是没有自带搜索的能力。一个解决方案是动用 Google 来生成站内搜索。实际上 Google 的自定义搜索还可以进行一些定制,不过最简单的样式已经满足我的需求,我把它加到了 wiki 首页的底部。
Read More