昨天的想法尚未深入探索,但已小有眉目。实践在gmchess项目上。
首先是建立了gmchess的开发邮件列表
http://groups.google.com/group/gmchess-dev?hl=zh-CN
感兴趣的同学可以定阅。我将尽可能将所想,所写,所改,都一一反应在列表上。
目前没有其它开发者的话,那就我一个人说啰。做到唠唠叼叼也不怕。
沉默是金这句话实在不适合开发者。
开源模式
bones引用的一句话” release early , release often”引发了我再次去查看《大教堂与市集》这篇经典文章。事实上我以前总与这篇文章擦身而过。我总高傲地认为,开源嘛,不就是开放源代码嘛。总是没有认真地阅读过里面的文字(这规于年少的轻狂)。于是扎头进去写一两个软件,发布出来,美其名是曰开源软件。
我总是痛恨国内环境如何之差,找不到一两个可以合作的开发者。却没有想过这一切是我自己造成的。我做的已经足够好了吗?发布了源码,就是开放环境了吗?
设身处地地想想吧,某人发布了一个x软件,我有些感兴趣,想参与。于是下载代码来看,发现代码已经挺多的了,但是却没有开发文档。那有没有讨论的论坛呢,也没有。那只有硬头皮读代码吧。有处不明白,那发封邮件给作者问问吧。嗯,算是解答了,但我怎么感觉态度一般而已啊,好像是我发邮件烦他一样,那没事还是别发邮件了。三天后,哎,代码太难看了。又没文档说清楚,算了,我自己到别处玩好了。
那我的情景,是不是这样呢。缺少文档。每次svn修改又不做过多说明,这无异于封闭开发。性格过于内敛,觉得还没个功能整天发关于软件的一些问题有张扬的嫌疑。有问题又不发布出来,自个儿躲起来研究。
像昨天说的,既然我不是天才,我无法一个人写出优秀的软件。那么我就应该尽全力调动开源的优势来完成项目。而对于目前的几个项目,我做的都不好,需要深思。
对于开源模式,迅速地提升个人编程能力不是最主要的,而是个人建立这个社区及开发群体的能力,我需要深思。
Some Jabber
有时候看到一些很牛的人,很年轻的时候就能干很杰出的事情。遥想一下自己当年,混混当当的,还真有些惭愧。
也许大家的智力水平相当,但付出的努力与精力也不可能一尽相同,于是结果也就不相同了。人家高中生时代就能成为一个黑客,而我高中时代只是一个高中生。
有时候写程序写着写着就会很沮丧。因为想到软件的生命期其实很短。一两年,没人再用了,没人维护了,这个软件不适合于当时环境了,也就会被人所遗忘。那目前所做的努力还有什么意义呢?但其实又和人生的意义的问题相重合,人这一生不也短暂嘛,无论多么灿烂,死后也归于寂静。谁人记得我,谁人不记得我,又于我何干。所以活在当下对于软件的意义也是如此吧。
昨天又做梦了,这次是关于美剧《24》的,梦到tony又做反角,最后最捉入狱,主角jack最后也进监狱了。那第八季就是出事了再把jack从监狱里调出来啊?
目前每晚一集《南方公园》,第十二季的。
第一集讲艾滋病的,切个扁桃体就被感染了hiv,最后用钱浓缩液治好,真能扯,及具讽刺。
第二集讲小甜甜,当时看着就好奇这动画片用真名还不会侵权啥的啊?这集非常扯啊,小甜甜的头直接爆了,这样也还没死。不过最后的寓意倒挺深的。
第三集讲磕猫尿的。因为小孩子们磕猫尿而把猫一并捉光,极具天朝相关部门的办事风格。
怀疑人生的会议1
通常最先在会议厅里呆着的是骨头。只要上班的日子他老人家总是风雨不改地端坐在会议厅的二号座位上。要不是阿广首先占了位,以他B字开头的姓名,再加上管理员的身份,还不稳坐在一号座位啊。
阿广倒是挺准时的,八点半之后吧。就会到会议室报道。
姗姗来迟的是会议常委之一的老犁。大多数时候怀疑人生的论题由他和阿广完成。
但我今天要说的是不一定天天来,一来一个精彩的特约嘉宾依依。
依依是irc会议里的常务委员。在那里呼风唤雨,马甲及fans众多。说两句话要动用三个马甲。或许是绝处不胜寒,在irc里无敌的日子太寂寞了,于是跑来这个聊天室怀疑人生了。
怀疑人生的第一件事是就是向骨头问候,用大别人三号的字体说,“烂骨头,炖烂骨头”,
然后骨头就回应:”烂依依“。接着大家讨论一下依依所用的客户端,为啥字体会比别人的大。但依依总说不知道,没得配置。三两句之后,字体灵异地缩小了。依依就会故作无辜地说一句:”妖精“。
在眼看气氛又沉静下去的时候,依依就会突然供献一个贴图,顺势看去是依依的字体。但是这字体也只能是在依依的客户端上显示,因为其他人都没安装,纷纷质问依依,你这不是折腾嘛。依依骄傲地说一句:“艺术”。事实上依依吸引众人目光的不可告人的目的早已达到了。
又有时候,依依会连续发几个“ xxxx”( 原来博客显示不了依依发的乱码符号),我们又在思前想后,这是啥意思呢,半天后,依依潇洒地扔下一句:“测试”,然后消失在众人惊讶的目光中。
八卦
刚才吃完饭在楼下等电梯,听到几个女人在那里八卦。
A: 我有个朋友生了两个女儿了,还要生。
B: 他们是一定要儿子吧。
C: 生这么多,那不如去照照,不是男的就落了它。
A: 落仔很伤身的。
B: 四个月的时候嘛,那时就可以照出来了。
A: 医院好像不帮你照吧。
C: 去外面照啊。
B: 听说是在肚子上打一针就搞定了。
C: 哪里啊,是拿个钳子伸进去把BB的脑袋剪碎。
我听到这里,毛骨耸然的。
天书棋谈
为gmchess想了个中文名字,天书棋谈。好像很熟悉是不,是以前一部国产动画片的名字。取了谐音。但我想也会挺配合gmchess的,表明重点在棋谱,棋书上吧。
所以下一步是添加棋书管理之类的功能吧。至于AI,还是慢慢来,虽然难度不大,但很烦琐,主要是解释ucci引擎的返回之类的东西。而这活需要耐性。
上星期用尽了激情,所以这星期开始情绪都很低落,甚至又开始怀疑人生了。
再次配置gtkmm交叉编译环境
Gtkmm有跨平台的特性。我决定发扬此特性,那先从port gtkmm到win
平台开始吧。那第一步就是配置gtkmm的win编译环境。网上大多文章都
介绍了在win下配置gtkmm的环境。而我之前也写过一篇介绍在linux下通
过mingw32来编译gtkmm程序的文章。
Gtkmm系列:交叉编译Window版本的Gtkmm程序示例
是的,我觉得这样才有意思,交叉编译嘛。
但是那一篇是参考别人的译作,方法有些繁琐,重要的是,已经不太适合
当前的环境了。主要是那个文章只支持到gtk28版本,目前的gtkmm已经
到2.16了。mingw32也是4.3的版本,众所周知,4.3版本的gcc语法严谨
多了。
经过昨天一晚上及今早的奋斗,和yetist双线合作,一人一种方法找环境配
置方法。目前完成了第一阶段的成功。
事实上,arch社区里是有gtk2的mingw32包,也就是说gtk+的交叉编译
环境是有人做好的了。只需要用yaourt就能安装配置完成。但gtkmm却
没有,yetist就循着这条线索,准备编译gtkmm的win32包。
而我在看了那些在win下配置gtkmm环境的文章后,想到,其实也只是下
载需要的库而已啊,而那些库,是组成gtkmm的基础,既然我现在是要编
译pe格式的程序,最终调用的不也是那些库嘛,那把win下的gtkmm开发
包转到linux下来给mingw32调用不就成了。于是照做,编译成功了又一个
gtkmm demo程序。
废话了这么多,那就正式开始交叉编译gtkmm之路吧。
很简单:
1.先下载gtkmm开发包
当然是for win的。http://ftp.acc.umu.se/pub/GNOME/binaries/win32/gtkmm/2.16/gtkmm-win32-devel-2.16.0-2.exe
2.16的开发包好啊,gtk+啥的都包含了。
但需要在win下安装解压出来,虽然是42M的大小,解出来有380M大。
安装完后从win分区里安装的gtkmm目录完整复制到linux分区中。我这里
放在/src/mingw32-gtkmm,你可以随便定义这个目录。只记住需要做个
链接即可,
sudo ln -s /src/mingw32-gtkmm /target
2.修正prefix路径
这是for win的开发包,所以还是需要修改一些东西的,主要是pkgconfig
的路径问题。
执行下面两个命令即可修正:
find /target/lib/pkgconfig -name "*.pc" |xargs sed -i 's#prefix=c:\/devel\/target.*#prefix=\/target#'
find /target/lib/pkgconfig -name "*.pc" |xargs sed -i 's#prefix=\/gtkmm_debug#prefix=\/target#'
3.安装mingw32
这步是安装编译器,pacman 也行,yaourt 也行.
sudo pacman -S mingw32
装好后执行下面命令可见:
i486-mingw32-g++ -v
Using built-in specs.
Target: i486-mingw32
Configured with: /home/sergej/community.cvs/devel/mingw32-gcc/src/gcc-4.3.0-20080502-mingw32-alpha-src/gcc-4.3.0/configure --target=i486-mingw32 --host=i686-pc-linux-gnu --build=i686-pc-linux-gnu --prefix=/usr --enable-languages=c,c++ --enable-sjlj-exceptions --enable-hash-synchronization --disable-nls --disable-libssp --disable-shared
Thread model: win32
gcc version 4.3.0 (GCC)
4.搞定
那么是搞定了吗?基本是完成了。
还是经典的测试代码:
#include
#include
int main(int argc, char **argv)
{
Gtk::Main main_obj(argc, argv);
Gtk::Window win;
main_obj.run(win);
return 0;
}
编译命令:
i486-mingw32-g++ test.cpp -o test.exe `PKG_CONFIG_PATH=/target/lib/pkgconfig pkg-config gtkmm-2.4 --cflags --libs`
生成了的test.exe放到win下跑吧。win的环境需要有gtkmm支持,把一开始下载的开发包装上就有了。
目前来说,工作正常,下一步可以把精力放在跨平台代码上了.
看图:
![]() |
发件人 lerosua' blog |
GMChess 0.10.1
经历几番奋斗,努力修正bug,重要的是关于多于两个兵在同一纵线上的表示方法,可苦人了。目前似乎能正常表达了。
奉上gmchess 0.10.1, 主要是bug修正。
下载地址: gmchess.0.10.1
arch用户可通过 yaourt -S –aur gmchess来更新。
而rpm包,deb包等,周末我联络下网友,看看谁有空做出来。
PS.最近还真是热情高涨啊。
有BUG是好事
gmchess 0.10一经发布,马上就发现bug了。呵呵。而之前,我是左思右想找不到问题。这当然是由于个人眼界所限脑力有限及先入为主等等原因。也是缺少必要的测试的原因吧。
当时发布gmlive 0.20的时候,就觉得很完善,但一发布就被发现有个比较严重的bug,后来马上补了一个bug修正版本。后来我不强求自己了,不过靠发布来找bug,似乎是比较邪恶了。
当然是软件就会有bug,何况刚发展中的,找到bug就是好事。意味着解决。开放开源就是要大家都能看到,有错就改,有bug就fixed,错误中成长嘛,捂着藏着不让人知道,那个bug只会深深隐藏,在关键时候给你致使一击。我想做人也是这个道理吧。
话说,修正了好几个bug,还是汗下自己,竟然有这么多错。不过热情倒是调动了起来,昨晚修到一点半啊。这两天会再出个bug fixed版本。
对了,还要教一下大家如何观察谱是否读对了。
gmchess其实只支持utf8编码的pgn棋谱,读其它软件的棋谱是通过将它转化成
pgn棋谱来读的,因为如果打开一个xqf格式的棋谱,会在/tmp/下生成一个临时
棋谱gmchess.pgn,大家用文本编码器打开这个gmchess.pgn,看看里面的棋步
与gmchess右侧的棋步是否对得上号就行了,都是跑二平五之类的棋步描述。
另外,大家可以去gdchess.com的论坛里下载棋谱,那里有大量专业的棋谱,很发我菜鸟深省。只是要注册了才能下载。
Gtkmm关闭窗口续
上一篇文章中讲到的窗口,点击关闭后只是隐藏了而已。窗口会一直存在。也许会觉得这样占用资源。当然也可以让它点击关闭即销毁它。只需要在run调用后detele掉它。但注意还需要把窗口指针置0
代码如下修改
about->run();
//about->hide();
delete about;
about=0;