用 rst2wp 来写 WordPress

很久没有写 Blog 了,没想到一下子拉了这么长时间。 想想最初停止的原因,是因为在看到 reStructuredText 之后, 觉得用来写文章、文档或者 Blog 非常好,就想学着用用。 谁知 rst 太复杂了,光 说明文档 就那么长, 也没有完整的中文版,就想来翻译一下,翻译的结果还是用 rst 来写。 结果卡死在这里了,后来忙了就没有再继续了, Blog 也就没有再更新,翻译也没有进行完。

现在,随着一切在发展,似乎 WordPress 有些没落了, 原来的 rst 支持插件居然也几乎没有了。 大家都热衷于使用 Jekyll, Octopress, Pelican 类似的软件来生成静态 Blog, 摈弃了以前 PHP+Mysql 的动态网站方式, github 还提供配套的 托管服务 。 我不喜欢全静态化的实现方式,网站大了以后更新效率肯定会降低, 好在这些生成工具大多都支持 MarkdownreStructuredText , 继续使用 rst 来写 Blog 也不会太影响将来可能的迁移。

继续 Blog 吧,懒人又开始面临一个不是问题的问题:网络不好,连接速度慢, 直接登录 WordPress 后台写简直太痛苦了。 所以有一段时间我都是在本地编辑,然后粘贴到后台看效果。 这种方式在 rst 在线预览工具 的帮助下还算凑合 (原来有个 rst2a 也挺好用,但已经挂了很久了)。 看过一些 Blog 客户端软件,感觉大多仍然不理想,功能不足, WordPress 推荐工具 多半也不好用, 很多都很长时间没更新了。 于是,继续搜索,找到了现在用的 rst2wp

rst2wp 的工作方式是在本地用任何你喜欢的编辑器写 rst 文档, rst2wp 帮你转换成 html、预览或者上传到 WordPress 中。 rst 文件中可以指定 Category 和 Tag, 上传时会自动记录 Post Id 用于以后的编辑。 我 Fork 之后还增加了记录 date 和 slug 的功能。 一个比较完整的 rst 文档示例如下:

..  -*- mode: rst -*-
..  -*- coding: utf-8 -*-
 
:id: 6
:title: 用 rst2wp 来写 WordPress
:slug: 201211-test-rst2wp
:date: 2012-11-27 00:19:37
:publish: yes
:categories:
    - Blog
    - Tools
:tags:
    - blog
    - git
    - github
    - WordPress
    - RestructuredText
 
 
blah 测试 中文。
 
+---+---+---+
| a | b | c |
+===+===+===+
| 1 | 2 | 3 |
+---+---+---+

先用着吧,顺便熟悉 reStructuredText 的语法。

压缩网页图片

不压不知道,一压吓一跳,大部分图片几乎都能在近似无损的情况下压缩掉 65% 原始大小左右,如果指明有损压缩,比如 jpeg 的 85 %,还能更小。

Smush.it

smushit 现在已经属于 Yslow 的一部分了,可以通过 firefox 插件使用,也能在线用,缺点就是你的图片必须能够从公网访问。

可以压缩各种图片,按照官方的解释,它会尝试各种工具和算法,找到最优的方式。因此,smushit 是一种很安全的压缩工具,几乎看不到差别,就是用起来麻烦些。

imagemagick

不同的图片格式有各自的特点,比如 gif 善于存储颜色较少的图片,也是动画图片的首选;png 善于存储能够矢量化的图片,jpg 则善于存储颜色、图片变化都比较多的图片。根据不同的图片特点,进行类型转换,有时能收到不错的效果。

图片 convert 之后,还可以利用其它工具进一步压缩,不过效果不大了。

另附一个转换图片类型之后,批量替换模板中调用文件名的脚本:

grep logo.gif * -R | awk '{print $1}' | sed 's/://' | xargs -I '{}' sed -i 's/logo.gif/logo.jpg/' '{}'

jpegoptim

这是今天刚发现的好东西,ubuntu 源中有,主要可以用它去除 jpg 图片文件当中的 comment exif IPTC 等无用标记,我测试的情况压缩率比 smushit 略低一点点。由于能够通过命令行使用,所以易用性更强。

一般我喜欢用 --strip-all 参数去除所有无用内容,实际压缩之前可以用 -n 参数预测一下压缩率(默认直接压缩覆盖源文件了),24bit Adobe 类型的图片基本上都能够压缩掉 65% 原始大小,碰到 24bit JFIF 这种类型的图片一般压不动,但带上有损压缩参数比如 -m85之后,依然能够达到较理想的压缩率,并且图片损失效果不明显。

遇到无法压缩的图片、压缩后体积反而增大的图片会自动跳过,很贴心。

基本上,有了上面三种方式,就能够处理大部分网页图片了。

小巧的编辑器Geany

我对PHP编辑器的要求不高,不过很多软件却不合我意:

首先,最好是免费的,所以挺好用的Zend Studio落选了。并且我发现似乎Zend Studio与ibus或者ubuntu jaunty有点冲突,有时候中文就出不来了。

其次,小巧,java的最好不要,所以Eclipse也落选了。

最后,最小功能集:语法高亮(废话)以及类函数列表(可以帮助我快速定位)。就这两项功能,淘汰了gedit(支持得不好)、vim(无法列出类函数)等工具。

当然,隐含要求,支持中文输入法,所以gphpedit也不能用,正好也不喜欢它的颜色高亮模式(色彩搭配)。

所以,选来选去,今天才算碰到一个比较满意的────Geany,ubuntu源中有,目前版本0.14,看来开发历史并不长。使用gtk2,操作流畅。除了类函数列表以外,还有一些贴心的小功能,比如自动补齐文件末尾的空行、保存时自动删除行尾空格等。

geany screenshot

默认的,Geany的快捷键Complete Word与中文输入法冲突,还好,可以通过设置删掉:双击-->Del-->回车

geany-solve-conflict-with-input-method

可怜的gphpedit也是这种快捷键冲突,不过我没找到设置方法。

其实Geany不仅能够处理PHP文件,还能够编辑多种脚本文件,新建文件时有内置模板可选,能够自动生成文件头的copyright及GPL声明。

总之,到目前的感觉,挺好用的。

Update @ 2009-12-29

ubuntu 中 geany 的版本更新较慢,喜欢追新的可以自行添加它的 PPA源

安装ibus输入法

编译太麻烦,直接从ppa的源安装,把下面这句加入/etc/apt/sources.list

	deb http://ppa.launchpad.net/ibus-dev/ppa/ubuntu intrepid main

然后安装就是了,不过ppa的源下载真的好慢啊:

	$ sudo aptitude install ibus ibus-pinyin

装好以后,修改/etc/X11/Xsession.d/95xinput,把原来fcitx的部分注释掉,换成ibus的:

	# ibus
	export GTK_IM_MODULE="ibus"
	export XMODIFIERS="@im=ibus"
	export QT_IM_MODULE="ibus"

然后切换系统的默认输入法:

	$ sudo im-switch -c

最后重启系统,一切ok。

一点感受:

  • 速度比fcitx要慢,但似乎用着反而更舒服了。
  • 没有软键盘,无法输入特殊符号(前提:我用自然码双拼,得切换到全拼下用i开头输入特殊符号,如果有全拼/双拼切换快捷键就好了)。
  • haha xixi rq xq lb sj bsn 这些很贴心啊,呵呵。

选用目前并不一定比fcitx好用的ibus,主要是看中它更新比较频繁,相信问题会不断得到修复,功能也会不断完善的。使用python开发也能够让更多的热心人介入。

Update @ 2009-04-21

如果在firefox等程序里无法实现光标跟随,可以试试装上ibus-gtk, ibus-qt4包,然后重启X。

好玩有趣又有用的Mockups

Balsamiq Mockups For Desktop

见过flash游戏中,鼠标画个圆就是球,画个方块就能站住,画条线就能成跑道(这个很经典了,滑雪橇的游戏),也见过一个视频,老师讲课的时候画个斜块、小车、轮子就能够产生物理动作,看到Mockups以后,就也有类似的感觉,不过这个是用来设计软件界面的。

以前设计界面的时候用什么?想过但用的相对比较少,笨办法就是文字描述,左边放什么,右边上面放什么,右边下面放什么等等,高手会用ps画,只要不嫌累,还有画在纸、黑板上的,这些手段都有个共同的缺点────不方便管理和变更。现在不易管理、不可变更的工具用起来太累了,Mockups正是很好的解决了这个问题。

就像上面这张图片一样,在Mockups里,提供了很多用户界面设计元素,拖过来调整、搭配就能形成一张设计示意图,在设计阶段、持续变更阶段应该都是很好的表达工具,毕竟一图胜千言嘛。风格上是手绘的草稿风格,让人感觉和在纸上没区标,估计打印出来蒙人也没问题。技术实现上,依赖Adobe AIR环境,所以也是跨平台的。从图上也能看到,只要选中了菜单里的View -> Use System Fonts,中文支持还是可以的,好像不能选字体,不过够用了。

缺点首先是没有我想像中的“手工画线”,毕竟直接画和使用预制物件的感觉和灵活性还是有区别;第二就是速度,2006年买的电脑用起来都不算十分流畅;第三就是技术平台,个人对AIR不感冒,当然这个也没得改了,呵呵。

转换静态图像为视频

需要把100+张大小不一的图片,转换为视频,上网查了些资料,关键词一般用still images或者image sequence,结果用mencoder就能作:

mencoder mf://*.jpg -vf scale=800:600,harddup -ofps 25 -ovc xvid -xvidencopts bitrate=800 -o dbb.avi

结果出来的影片每秒25帧,也就是切换每秒切换25张图片,120多张一共耗时4秒,没法看。把fps调整为1或者0.1之类的数,mencoder运行就出错。没办法,我想了一笨办法。

按照每秒25帧算,那么如果一张图片想显示2秒,那么就把它复制(用ln更快,别傻傻的cp)2×25=50份,比如001.jpg.001, 001.jpg.002…按照这种方法把图片都整到一个目录中,然后再使用上面那个命令就能够正常转换了。

不过,当图片大小不一的时候,还是会出现错误,比如这个:

VDec: vo config request - 800 x 463 (preferred colorspace: Planar 444P)]
VDec: using Planar 444P as output csp (no 0)
Movie-Aspect is 1.33:1 - prescaling to correct movie aspect.
[CROP] Bad position/width/height - cropped area outside of the original!
FATAL: Cannot initialize video driver.

mencoder转变源尺寸的东西我不熟悉,试了一些参数都不行,刚想放弃,从这里发现有images2mpg这个好东西。

images2mpg是在kipi-plugins这个包里(属于kde桌面下的插件),需要安装imagemagic等包,如果提示:

Can't find ppmtoy4m, please install it or check -M parameter

这是缺少包mjpegtools,如果提示找不到ogg123,那是缺少包vorbis-tools。images2mpg就是利用这些包完成图片转换、压缩视频等工作的一个脚本。可以这样用:

images2mpg -o mzj.avi -t 4 -d 1 -S 420mpeg2 -M /usr/bin/ -i ???.jpg
  • -t 4是淡入淡出的效果,4对应的时间消耗在帮助里面,约1秒
  • -d 1是每张图片停留1秒,很遗憾这个参数不能用小数
  • -S 420mpeg2指定mpeg2压缩方式
  • -M /usr/bin/指定mjpegtools的可执行文件位置,不知怎地images2mpg自己不会到/usr/bin下找
  • -i ???.jpg是源文件,必须放在最后

转换结果很贴心,图片自动都按长、短边缩放到了视频大小,空白的地方是黑色,淡入淡出效果也还能接受,就是转换速度有些慢。

有了这个素材,再进行添加声音、分段设置间隔时间等操作就都能够很简单的用mencoder完成了。附上一个视频片段合并,并且引入外部声音的例子:

mencoder -audiofile mzj.mp3 -ovc xvid -xvidencopts bitrate=800 -vf harddup -idx -oac copy -o mzj.avi mzj_1.avi mzj_2.avi

不过这样声音在播放的时候会重复,如果合并完再加声音就没事了。