Lua script for Geany to view manpage of functions

Requirement

When editing when Geany, you need some document of system library functions at hand. So you want to browse manpage at any time.

Solution

Just two lines:

sel=geany.selection()
geany.launch('rxvt-unicode', '-e', 'man', sel)

http://gist.github.com/591279

Install

Make sure you have geany-plugin-lua installed:
sudo apt-get install geany-plugin-lua

Create a lua source file named ‘ShowMan.lua’ in ~/.config/geany/plugins/geanylua/ . If the direcotry does not exist, you should create it first.

Copy two lines of lua code into this file, save and close.

Create a file named hotkeys.cfg in ~/.config/geany/plugins/geanylua/, add following content:
ShowMan.lua

Restart geany, then open Preferences->Keybindings, Lua Script-> ShowMan, bind a key, for example, Alt+m

Usage

Select the function name, and press Alt+m (or from menu Tools->Lua Scripts->ShowMan), then you see the terminal and the manpage.

geany-lua-manpage

The post is brought to you by lekhonee v0.7

GUI Debugging tools

想了解一个C程序的运行,打算用gdb来单步看一下流程,发现直接用gdb不太方便,然后模仿偶像用emacs的gdb支持(M-x gdb)。但是境界实在是比不上偶像,emacs的操作都还不熟练。最后选择了geany。geany是一个简单的C/C++ IDE,它有一个geanygdb插件可以帮助你在geany的图形界面里调试。

但是最近安装在仓库里的geanygdb插件有一些问题,会导致很高的CPU占用。不过这个问题被报告在这里,现在已经修复了。因为新版本还没有release,所以如果急着用的话,可以从svn签出代码:
svn co https://geany-plugins.svn.sourceforge.net/svnroot/geany-plugins/trunk/geany-plugins
然后执行:

cd geany-plugins
./autogen.sh
./configure
cd geanygdb
make
sudo make install

重启geany,打开plugin manager,看到geanygdb的版本已经变成0.20就可以使用了。

geany现在还不支持ctags,是因为它内部有一套自己的tags实现。代码导航可以用过上下文菜单 Go to tag Definition 或者 Go to tag Declaration 实现,最好是到Preference中给这两个命令设置一个快捷键,比如Ctrl+],再对Navigate back 设置一个Ctrl+t,就如同vim+ctags一样了。

实际上在GNOME桌面还有一个专门的GDB图形界面,叫做Nemiver。Nemiver对gdb的常用命令都有快捷键操作,把鼠标移动到代码上还可以查看变量的值,效果和eclipse调试java程序一样,非常强大。

The post is brought to you by lekhonee v0.7

beanstalkd

beanstalkd是一个极轻量级的消息队列服务,作者的说法叫做Work Queue。

概念

Beanstalkd里包含以下几个概念:

  • Producer
  • Worker
  • Job
  • Tube

Producer 与传统的消息队列服务中的概念类似,是Job的生产者。这个角色通过put命令来创建Job。

Worker 即消费者,worker通过reserve / release / bury / delete 等命令操作job的生命周期。

Job 是beanstalkd中的基本单元,一个job包含id和body,从属于一个tube。Job的生命周期是beanstalkd中的核心概念,它包含DELAYED / READY / RESERVED / BURIED / DELETED等状态。beanstalkd文档中的这个图对Job的声明周期进行了说明:
http://github.com/kr/beanstalkd/blob/master/doc/protocol.txt#L81

Tube 是类似namespace的概念,Producer在生产Job前通过use指定相应的Tube。而Worker通过watch / Ignore命令来决定从哪些Tube中获得Job。

安装

Beanstalkd 可以通过很多Linux发行版的包管理器直接安装。依赖libevent 1.4.1 以上版本。
通过以下命令启动即可

beanstalkd -d -p <PORT>

协议

Beanstalkd在各方面都继承memcached的风格,协议也与memcached类似,同样是基于文本的:

命令 参数 [参数...] [命令体字节数]\r\n
[命令体]\r\n

beanstalkd很多命令的返回是yaml格式,但是系统对命令体的格式并没有限制。

客户端

Beanstalkd协议见简单,有各种语言的客户端实现。python有一个非常简单的beanstalkc,可以通过easy_install安装。不过,这个客户端缺少断线重连机制,正式发布的0.2.0版本也有一些严重的bug。可以从github上下载源代码安装,并在使用时控制重连。

The post is brought to you by lekhonee v0.7

用markdown书写文档

写文档是头疼事,没人愿意写文档。在word里写文档,时间长了都怀疑自己是不是搞技术的。我阅历有限,在我的印象里就没有用word格式看过什么有价值的东西。只要一打开word想到的就是连篇累牍的废话、码字。word最重要的功能是什么?保存。其次呢?字数统计。我所写过的word文档绝大多数都是“只写”的,通常作为流程里的一个附件,没有人真正去看。

以上是人身攻击,接下来比较实际的问题,word文档不是符合unix哲学的东西。格式不开放,你就没有办法进行diff操作,把word文档放到svn里,只能使用最基本的版本控制,没法查看changeset,只知道改了,不知道改了什么。

为了改变这种情况,我试过用docbook格式。docbook用xml书写,定义了一套复杂的Schema,详细到作者的email都有定义。docbook还有丰富的工具集,可以通过xsl把docbook转换成所有你知道的文档格式。Maven: the Definitive Guide就是用docbook写成的。不过用docbook也存在一些问题,docbook太复杂了,用纯文本编辑器很难处理,作者的学习曲线也比较高,需要所见即所得的编辑器支持。与docbook相类似的DITA,也存在这样的问题,它们是重量级的格式。

轻量级的Wiki格式不错,但是Wiki格式很让人头疼就是没有统一的规范。举例,dokuwiki里顶级标题是6个=,而moinmoin里顶级标题恰恰相反是一个=,不portable,文档维护起来就非常麻烦。

铺垫了这么多,委屈以上格式了,该markdown出场了。markdown是简单的html原型,用来生成html,它的设计目标就是为了KISS,兼容html。看看一些必要的格式吧:(或者直接看Wikipedia
标题
# 标题
## 二级标题

###### 六级标题

对于一级标题还可以这么写
headline
========
二级标题可以
headline
——–
这个怎么输入呢,我想起来前几天看vim hacks里的一组快捷键
yypoVr=
yypoVr-
谁用谁知道

段落:
一段文本以两个换行结束。
换行:
一行文本行末两个空格。

图片
![alternative text](image-url “image-title”)
用markdown,图片的alt你不写都不行。

链接
[Linktext](link “linktitle”)

列表
ul 无序列表
*
*
ol 有序列表
1.
2.

以上就是主要的格式支持。用标题来划分文档层次,没有多余的格式,没有机会让你五颜六色。

在linux上可以安装markdown的处理脚本:
apt-get install markdown
安装vim的语法文件:

http://www.vim.org/scripts/script.php?script_id=1242

这里是一个简单的例子:

http://github.com/sunng87/exaile-doubanfm-plugin/blob/master/README.mkd

The post is brought to you by lekhonee v0.7

Exaile-doubanfm-plugin 0.0.2

Exaile doubanfm plugin 0.0.2 预览版,目标是在Linux桌面提供豆瓣电台的完整体验。

目前插件只能运行在Exaile 0.3.1版本上。

0.0.2增加了豆瓣电台专用的视图:
screenshot_001

相比第一版通过rating来实现豆瓣电台喜欢、跳过和删除的功能,在专用视图上有专门的按钮来操作。

其他细节更新:

  • 当剩余曲目超过15首时不再增加播放列表
  • 当播放到最后一首歌曲取新播放列表时增加重试机制
  • 修正libdbfm跳过曲目bug一个

安装:
打开Exaile Preference,Plugin页,点击按钮Install Plugin,选择doubanfm.exz即可。如果存在问题,可以执行以下命令:
mv doubanfm.exz douban.tar.gz
tar xf doubanfm.tar.gz
mv doubanfm ~/.local/share/exaile/plugins/

转到doubanfm设置页面,填写用户名密码重启Exaile。
screenshot_002

打开File菜单,选择豆瓣电台频道
screenshot_001

选择曲目就可以开始播放了,选择视图中豆瓣电台视图可以切换到豆瓣电台视图。

项目地址:
http://github.com/sunng87/exaile-doubanfm-plugin

下载:
http://github.com/sunng87/exaile-doubanfm-plugin/downloads

另外,doubancovers插件也有一个针对豆瓣电台的更新可以快速获取豆瓣电台音乐的封面:
http://bitbucket.org/sunng/exailedoubancovers/downloads?highlight=9265

The post is brought to you by lekhonee v0.7