2005年7月30日星期六

glib2,gtk2,pygtk2 reference in CHM format

I modified devhelp2chm a little, to workaround a problem I found when using gnochm to read the CHM files generated by it.

And updated two CHM files generated by it:
glib2/gtk2 gtk-2.6.8, glib-2.6.5, including FAQ and tutorial
(source: package libgtk2.0-doc, libglib2.0-doc)
pygtk2 reference pygtk2ref 2.6.0, and GtkSourceView, GtkSpell, GnomePrint, GnomePrintUI, GtkMozembed
(source: pygtk2 website)


----------------

How to build:

gtk2.chm:

apt-get install libglib2.0-doc libgtk2.0-doc
cd /usr/share/gtk-doc/html/
DIRS="gtk/ gdk/ gdk-pixbuf/ gtk-faq/ gtk-tutorial/ glib/ gobject/"
find $DIRS -name '*.devhelp.gz' | xargs gunzip
for d in $DIRS; do
(cd $d;
echo $d
for f in *.html; do
sed 's#/usr/share/gtk-doc/html/#../#' $f > $f.tmp
mv $f.tmp $f
done)
done
find $DIRS -name '*.devhelp | xargs ~/bin/devhelp2chm-v2.sh
-p gtk2 -T "GTK+ Reference Manual" -t gtk/index.html

...Then use HtmlHelp Workshop to build it.

pygtk2ref.chm

wget http://www.pygtk.org/dist/pygtk2reference.tbz2
tar jxf pygtk2reference.tbz2
find . -name '*.devhelp' | xargs ~/bin/devhelp2chm-v2.sh
-p pygtk2ref -T "PyGTK2 Reference" -t pygtk2reference/index.html

2005年7月29日星期五

报复

不知道是在哪里看见这么一句话:“幸福地活下去是最大的报复”。

应该是这两天看到的。


2005年7月28日星期四

Salut d'amour

多听两遍,发觉其实这首Elgar的Salut d'amour很不错。

这首曲子据说是“爱尔加题赠给新婚妻子的一首小品,音乐绮丽婉转、甜蜜温馨,旋律优美动人极富歌唱性”(Salut d'amour = Hello of Love),但我听来怎么就感觉到有一丝哀伤。

也 许是跟演奏者用的乐器有关(大提琴? 俺也不知道是不是),因为我听的是《麦兜II》里面的版本。电影里面它出现于片尾,菠萝油王子的故事讲完之后,马友友与麦兜的同台表演之前。画面上是城市 上方黑云压顶的天空,只有贴近地平线的地方有一点亮光,一辆出租车在画面下方穿梭着前进。

2005年7月26日星期二

几个画UML图的工具

Dia

前两天工作时需要画UML图,所以折腾了一下dia。功能比较少,其实它只是一个画图工具,不过也可以画UML图。这个东西倒是满简单的。另外还有一个dia2code,可以把dia画出的UML图转换成C/C++/Java/Python/SQL/C#代码框架。

Gaphor

这个东西是用Python+Gnome写的,说是比较适合Gnome环境。功能也不太多,但似乎UML2.0里面的大部分都支持了。另外也提供了Windows版本。

TCM

自己折腾了半天将dia移植到了cygwin,回头才留意到cygwin原来早收录了一个建模工具tcm。这个工具是用Motif库写的,界面难看一点。具体功能怎么样,还不太清楚。

Umbrello

这是一个KDE上的建模工具,风格上做得跟Rational Rose比较接近(我觉得KDE下的仿Windows商业软件的东西比较多,这样习惯了Windows下一些软件的人迁移过来就容易一些。而gnome在这方面就做得比较差,一个例子就是Gnome OfficeKOffice, 前者这么久了就只有AbiWord和Gnumeric,没有做幻灯片的,没有画流程图的... )。手头没有KDE环境,还没试过。

BTW: Debian里面收录了一个软件包uml-utilities,不要误会,这个东西跟这里说的UML没有什么关系,而是User Mode Linux的意思。

2005年7月25日星期一

apt-get (should be) everywhere

Planet Debian TW上看见yungyucapt (should be) everywhere一文中说:

portage 和 arch 也都??真很好用,不咿有便利的 apt,?L??新事物的?恿φ媸谴蟠??p低了。

还真是。我的laptop上装的是Mandrake,在Debian社区看见很多新东西都只能看看,不能尝试了。(也许我应该多去Mandrake的社区逛?似乎没有几个啊。)

还是什么时候有空在上面搞定debian,直接安装不行的话,就试试原来在Planet Debian上看见有人用过的sidegrade方法(嘿,这算个新词,就是先装Ubuntu,它的内核对laptop支持似乎问题少些,然后再apt-get改为debian)。

2005年7月23日星期六

试试quilt

作为一个偶尔的hacker,维护一个软件包的一堆patch是非常痛苦的事情,尤其是有的patch对另外一些有依赖时。一个例子是原来对 dillo感兴趣时搜集了第三方patch,另一个例子是目前在维护的sylpheed-claws的cygwin移植版本。结果是:1. 我放弃了对dillo-enhanced的cygwin版本的维护; 2. sylpheed-claws的cygwin我现在也只提供一个all-in-one的补丁,不再提供各个改动分开的patch了 :-(

看见Debian Planet上有DD说已经在用quilt来维护一个软件包的补丁,说是很不错。于是找来玩了一下。

quilt就是为了解决前面那一类问题诞生的。它基于原来Andrew Morton为维护内核补丁而制作的一堆脚本(想想维护1000个补丁是什么感觉?)


我按照文档试用了一下,感觉这个东西大致是这样工作的
首先,quilt只需要一个源代码树, 其次,quilt的工作对象是patch
quilt new foobar1.diff 开始一个新的patch,然后你就应该在这个patch上工作
quilt edit some/file.c指定要对some/file.c做一些修改,quilt会自动备份这个文件
如果你后面还要修改some/file.c,可以直接用vi some/file.c,不一定要再quilt edit some/file.c
quilt refresh 完成当前的patch工作,生成输出foobar1.diff
当然,在你开始一个新的patch之前,你还是可以继续修改,然后用refresh重新生成补丁
quilt add foobar2.diff 如果你要在foobar1.diff的基础上开始一个新的patch,就用这个命令
quilt pop 抛出当前的patch,如果当前栈内只有一个,那么原来树就复原了
quilt push 将series中下一个补丁压入栈,就是apply那个补丁
quilt import some-patch.diff 从一个patch文件中导入一个补丁

举个例子,某个源代码包我通过quilt维护了1.diff, 2.diff, 3.diff三个补丁,但现在新的upstream release来了
quilt push 应用第一个补丁
quilt push 应用第二个补丁,
但这个补丁应用失败,怎么办? 用quilt push -f强制补丁,然后编辑源代码,修复被拒绝的文件,然后
quilt refresh 刷新第二个补丁
然后
quilt push 应用第三个补

2005年7月22日星期五

My Cygwin Repository Updated

New:

  • vim-gtk2-6.3.071
  • dia-0.94 Dia is a gtk+ based diagram creation program (screenshots)
Updated:
  • leafpad-0.8.2
  • notecase-0.9.3
  • gtkpod-0.94.0


2005年7月21日星期四

Which Fantasy/SciFi Character Are You?

也凑个热闹。这是我的结果,

Which Fantasy/SciFi Character Are You?

A naturally skilled companion to those around you, you earnestly use your prowess out of concern to those you care about.

This forest is old. Very old. Full of memory... and anger.

Legolas is a character from the Middle-Earth universe. A biography is available at TheOneRing.net.

2005年7月18日星期一

高版本pkg-config的问题

Briefly, on my cygwin, `pkg-config --libs gtk+-2.0' would output:

0.17: -Wl,--export-dynamic -lgtk-x11-2.0

0.15: -Wl,--export-dynamic -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgdk_pixbuf-2.0 -lm -lpangoxft-1.0 -lpangox-1.0 -lpango-1.0 -lgobject-2.0 -lgmodule-2.0 -lglib-2.0 -lintl -liconv

I think the latter is right. Perhaps cygwin port forgot to specify '--enable-indirect-deps' option while building.




这 几日在公司做设计,需要划UML图,于是就想用dia,装了个windows版本,谁知道老崩溃,于是想念起cygwin版本来。原来在cygnome2 已经做过移植,但跟现在cygwin自己的gtk2用了不同的prefix,就重新编译一下吧。 因为在公司空闲时间不多,于是就在家里先搞好了build script和cygwin patch打算然后重新在公司直接编译一遍。

谁 知道在家里弄好的patch到了公司就不用了,configure的时候报告gtk+-2.0不存在,检查config.log,发现是测试gtk+- 2.0时没有g_xxx等函数的定义,也就是说缺少-lglib-2.0。手工添加了一把,到了生成lib/libdia.la时还是出错,这回说是没有 gdk_xxx的定义。

觉得有问题,回头再查看config.log, 看到pkgconfig --libs gtk+-2.0的时候就只输出了-Wl,--export-dynamic -lgtk-x11-2.0. 怎么回事?gtk+-2.0依赖于gdk,glib等,它应该自动将它们的libs也提取出来啊,总不能让我在应用程序中自己来调用吧(比如我怎么知道该 添加gdk-x11还是gdk-win32,我怎么知道它有没有使用libintl?)

回到家一试验,果然家里的pkgconfig输出的 是正确的(有-lpango-1.0 -lglib-2.0.....)。但pkgconfig是个小程序,好像没有什么配置上的不同导致这个问题啊?难道是版本问题?一检查,家里用的还是 0.15版本,而公司里用的是较新的0.17。奇怪,老版本居然没问题,而新版本有。

2005年7月14日星期四

如果当年郑和征服了西洋,世界将会怎样?

7.11 中国航海日

郑和, 600年前

西洋》,刘慈欣,震撼,悲哀

搞笑: iPod Flea

跳蚤大小的iPod?

也算是把苹果给狠狠揶揄了一把

quilt

quilt is a tool for managing a series of patches by keeping track of the changes each patch makes. Patches can be applied, un-applied, refreshed, etc.

gquilt is a PyGTK GUI wrapper for quilt.

See also: meld

Unfortunately, quilt could be successfully built on cygwin :-(

2005年7月12日星期二

拉格朗日点

新闻: 占领拉格朗日点(english)

拉格朗日坟场》,王晋康:

姚 云其恍然大悟道:“噢,我知道了,那个地方应该叫作拉格朗日点。一位天文学家拉格朗日发现,距地球和月亮各38万公里,与地球和月亮成等边三角形的两处空 间,由于受到地球和月亮引力的双重约束,此处的天体处于稳态平衡,它们只会绕着这个点振荡而不会飞离。天文学家发现,这儿聚集了一些太空微粒,在阳光下显 得比别处明亮。太阳系中还有更典型的例子,像太阳和木星系统中就有阿基里斯卫星和普特洛克勒斯卫星处于这种稳态平衡。”

“飞船向那儿运什么?”

姚 云其奇怪地问:“这一点都不了解吗?你父亲就是靠这种运输业发家的。自21世纪初,人类就把地球处理的核废料送到那儿作永久保存地,因为在那儿不怕它飞 走。当然,它们对过往飞船有一定的危险,因此也有人称它为拉格朗日坟场。能把核废料直接投入太阳熔炉才是最保险的,但那样费用太高,航行也太危险。不过, 温室效应造成文明衰退后,这个行业也几乎衰亡了,人类只顾口腹,已经顾不上什么环境保护了。

2005年7月8日星期五

自己写个PodLyrics?

最近听歌听腻了,想用iPod来听英语了,然后就把《新概念英语》塞了进去,不过有时想听不明白时看看文字。想起原来试过PodLyrics, 它生成歌词文件时上方有mp3文件的链接,可以点击开始播放 (链接是这样的: 播放 A HREF="ipod:music?song=lesson 07&NowPlaying=true", 停止 A HREF="ipod:music?song=Tears in Heaven&NowPlaying=false")。

但PodLyrics的问题在于对CJK支持很差。所以我想自己写一个了,iTunesDB的读取代码在gtkpod里面有,移起来应该比较容易(gtkpod刚刚在0.93里面对iTunesDB的读写代码做了重写,说现在是completely self-contained,方便其他项目使用)。或者干脆在gtkpod上做。还有一个想法就是不做UI,用命令行来,当然用我喜欢的Python, 反正iTunes借口也都有(1, 2)。

不过麻烦的是找一个歌词网站,以便可以下载歌词(当然,允许自己输入歌词肯定是必要的,因为哪个网站上也不会把《新概念英语》的课文作为歌词放着。)

Links:
Apple iPod on Linux

GNOME图标主题: 太极脚

GNOME中国站上翻到一个极具中国特色的GNOME图标主题: 太极脚

里面用的是围棋子、算盘、算珠、包袱、葫芦、中国结......




可惜作者没有开发完成(这半年多也没有见新的版本发布),可能很多东西要找个对应的传统物件还是比较困难。至少"目录"的图片就很难看,似乎根本不是一类。

2005年7月5日星期二

Help! 怎么批量转换svg图片到其他格式?

我现在想把一个GNOME的Icon theme里面的图片在其他地方借用一个,但svg格式的支持比较少,所以得转换到其他格式(png, gif什么的)。

我试过ImageMagick:
for f in *.svg; do
f2=`basename $f .svg`
convert -resize 24x24 $f $f2.png
done
但有些图片转换后右方和下方的一些象素会丢失,比如gartoon主题里面一个gtk-stock图片
gnome-stock-export icon in gartoon theme
转换后就变成这样了
gnome-stock-export icon in gartoon theme, bad ouput

用GIMP试了一下,转换结果倒是很正常,只是因为要转换的文件比较多,用GUI一个个操作是不太现实的。
(或许可以用Script-Fu? 只是我还不知道这个东西怎么用:-( )