rlwrap – 命令行下readline的封装

发现了rlwrap这个好东西。

在Mac OS和Linux下一直都用bash,bash下命令的输入都是通过readline这个库来处理的。也就是说,上下箭头查看历史命令,Ctrl+r反向查找匹配历史输入,以及Ctrl+w, Ctrl+a等等操作都是由readline提供的。rlwrap提供了readline的封装!

rlwrap runs the specified command, 
intercepting user input in order to provide readline's line editing, 
persistent history and comp[......]

Read more

在latex中调整hyphenation

用latex写英文论文的时候,可能会遇到断字符 (hyphenation) 在不该断开的地方断开的问题。因为英文单词长短不一,latex排版的时候为了让论文整体上看起来比较美观,可能会把落在行尾的单词从中断开,一部分留在当前这一行并且以一个短横线(-)也就是Hyphenation结尾,剩下的部分新起一行。

在英文文章的排版中,hyphenation是很重要的,特别是当行尾的单词很长的时候,如果不作断字,把单词都放在当前行就显得挤,新起一行就显得松。因为中文文章不存在这个问题,所以自己平时也没注意到。至于各个单词具体应该怎样断字,我还没有完全弄清楚,似乎也没有一个明确的规则,而且对于美式英[......]

Read more

橡皮鸭调试法

偶然在StackOverflow上看到Rubber duck debugging (wiki) 这个概念,有点儿意思,不过直译成橡皮鸭调试法好像比较弱啊。

按照wiki上的说法

传说中程序大师调试代码的时候会在桌上放上一只玩具橡皮鸭,调试的时候他会不断地,详细地,向鸭子解释自己的代码…

如果没有玩具小鸭子也可以考虑向其它东西倾诉..比如桌上的花花草草,键盘鼠标 (汗)。

好吧,正经地说这也是软件工程里的一个概念,一边阐述修改代码的意图一边做调试,就会更容易发现自己的错误。

类似的,有一种现象叫做Cone of Answers,不知道如何翻译这个词。这是一个常见[......]

Read more

Linux Swap文件

想象一下,两个实验进程跑了两天,还有一天就跑完了,这个时候你发现如果再跑一会儿内存就要爆了…怎么办? (好惊险的感觉 XD)

好吧,其实用到的只是很基本的操作系统知识,不过还真难得用到一回。

程序面对的都是虚拟内存。64位的操作系统下,虚拟内存非常大,但是实际物理内存相对而言小得多。所以,操作系统对内存分页 (就是分成一块一块的,每一块儿叫做一页) 物理内存一旦满了,把暂时不需要的页写到硬盘里。过了一会儿程序又要访问被写到硬盘里的那部分内容,操作系统就在物理内存中选一个页 (怎么选很讲究的),把硬盘里的那个给换回来。程序不停的运行,操作系统就换来换去…

所以,上面我们[......]

Read more

利用摄像头判断手机移动方向[MPMotionPattern]

这部分代码是做原型用的,现在已经不在项目里。
也没有什么特别的算法,所以就放在这里吧。
https://github.com/pppoe/MPMotionPattern

需要用到之前的“iOS逐帧处理录像-MPVideoProcessor”
主要的算法是从TinyMotion这个项目来的,用到的也是他们的算法。
功能很简单,就是通过iPhone摄像头拍摄的图像,判断手机当前的移动方向。

Screenshot

现在也只是支持上下左右。因为iPhone本身就有传感器可以取到这种动作,所以用图像似乎也没有什么特别的优势…
只是感觉挺好玩的。XD

libstdc++ 4.6 type_traits 的一个bug

如果你的编译环境和我一样,然后又在用C++11的时候,不小心直接或者间接用到了<chrono>这个头文件,应该就会遇到这个bug。

完整的错误信息如下:

|| In file included from /usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../include/c++/4.6/thread:37:
/usr/include/c++/4.6/chrono|240 col 10| error: cannot cast from lvalue of type 'const long' to rvalue reference ty[......]

Read more

iOS逐帧处理录像-MPVideoProcessor

一般在iOS上做录像都可以直接使用UIImagePickerController。
但有时候难免需要做逐帧的处理,比如实时的滤镜之类的。

参照这个帖子: A (quasi-) real-time video processing on iOS 把使用AVFoundation做录像的代码,做了一个简单的封装。

Delegate可以得到逐帧的彩色或者灰度图,然后就可以加上自己需要的处理了。

代码放在Gihub上:MPVideoProcessor
具体使用请参见Github上的Readme.

[Keep Alive Post] SharpSight

居然已经快两个月没有更新了..之前是太懒,最近又太忙。
赶紧弄一篇凑数,希望最近有时间写点认真的东西。

今天看到的视频: SharpSight V2

以前实验室的一个师兄做的东西,非常酷的手势识别,其实对手指位置捕捉的精度已经远高于通常说的手势识别了。

git submodules

刚刚知道的一个用法,记录一下。

git可以把另一个git工程作为子项目(submodule),如果项目很大的话可以把一些子项目独立出来,单独作为一些个git项目,最后再作为库提供给主工程使用。遵照这个做法正好也能培养个好习惯。

几个命令:

$git submodule add git://github.com/chneukirchen/rack.git rack

submodules由.gitmodules文件管理。内容如此:

[submodule "rack"]
      path = rack
      url = git://github.com/chneukirchen/rack.git

如果你clone了一个有submodules的git工程,需要额外的操作来clone其中的submodules.[......]

Read more

CVPR 2012 酱油记

没有文章,老板还是很nice的给了一次去参加CVPR的机会。虽然只是去酱油一把,但是可以到CV三会之一的CVPR看看,还是很高兴的。

提前一天到了罗德岛,这里貌似是美国最小的一个州。风景不错,但是也不觉得有什么很特别的地方。按照会议进程,头两天是Workshop和Tutorial。Tutorial是集中时间讲一个话题,比如这次有Deep Learning, Gaussian Process这种,这里列出了所有的Tutorial,有很多很吸引人的题目。Workshop是做一个小领域的人们讨论这个方向的文章。一趟下来感觉,除了很偏工程的Tutorial,没有事先看看相关的东西就去听还是比较吃[......]

Read more