阳光烂灿的日子

--记录所有碎碎念

软件改名为 iCalk

| Comments

软件改名为 iCalk

为啥叫这个名字?本来是想叫iTalk的,不过,这个名字已经太滥了。
就我所知就有好几个产品叫这个iTalk了,有硬件,有软件。为啥一
定要 i 开头。说实话我实在不是起名字的能手。关于命名的东西都很
麻烦。所以随便把个 T 改成 C 就成了。在Google里一搜,这名字还
算不常见。用着也无妨。
这两天实在是没有心情写。前天刚做了一个签名管理的窗口,可以
把一些消息签名的文件读到窗口中,然后通过双击更改签名,这样的话,
可以收集并方便地更换签名消息了。也算是有趣的小玩具吧。不过,能用
得上这个功能的,也算是无聊的啦。加上超时函数让它隔一段时间就动态
更新也不错。
软件的另一作者wind又不能回归了吧。消失又三个月了。上次消失的时
间是一年。也许这次要等他生儿子了才能在网上见到他吧。哈哈。

互联网这么多热闹,我怎么感觉到这么寂莫呢?

雅虎提供无限容量邮箱

| Comments

雅虎开始提供无限制容量的邮箱。但偶要说的是,偶不会
去注册。因为雅虎曾经发生过出卖用户邮箱的事情。虽然说
偶不会搞什么违法的事情。但对于这样的服务商,不值得信任。
也许Google以后也可能因为在中国的策略问题而发生类似的事情。
但现在来说,它还不算太evil,而雅虎已然是做过一次恶了。
虽说企业的目的是赢利。但你要即赢利又赢口碑那就难了。百度,
腾讯这样的企业就是光要利而得恶名了。而google,apple这样的
企业,基本上已然宗教化了。

星期天闲聊

| Comments



令人想不到的事。Blogspotc又解封了。这倒没有令人兴喜的。因为偶对于这件事
已经习以为常了。起码不以此为喜,不以此为悲。谁知道它明天是不是又会被封呢。
总不能因此被GFW调着偶的心情吧。
专心于开发 iTalk后就比较少写博了。大概是找到了一个比较固定的玩具吧。有事
做了,就没有那么多唠叨与胡思乱想了。
关于这个 iTalk,我是想把它视频,音频,传文件功能啊,什么的都加进去的。因为在
Linux,这样丰富的聊天程序不多。而一些又不让我满意。于是就有了自己做一个的念头。
第一次做开源项目。的确学习到很多东西。看着iTalk从一个小小的测试程序,只能登录,
到能收发信息,到列表的丰富化。就好像看着自己的宠物成长一样。每实现一个小功能
都兴喜不已。每遇到 一个BUG就忧愁半天。呵呵。
倒是学会子一招。在遇到BUG时,最好放一放,通常我都是轻松一下,过一会再看,才
猛然地发现问题的所在。如果一味地研究,反而跳不出圈圈子。这也算是一种思维方式
吧。虽然以前有人对我说过。不过,还是要自己体会才会深刻。
在此之前,总以为自己做不子项目 。 而且有种程序员洁癖。所谓程序员洁癖,就是指
实现一个功能时,总想着要用最好的代码,最巧妙的方法。不然,就会觉得办法很粗陋,
代码很脏。在写任何代码前,总不自觉会有这种想法。因而总为想一个好的结构,算法
烦恼半天。现在来说,不应该害怕写这种代码。写代码第一要素就是先实现功能。优化
的事留在以后考虑。当然这是对于新手来说的。因为新手不可能一开始就计划好大的结构
。要做开源的程序,就得先把功能搞上去。然后才后考虑优化。当然不是说不要考虑优化
,但那是在力所能及的方面了。


For循环中iterator不可乱删除

| Comments



今天写iTalk,想要把空组删除掉。
//tree_store就是列表中的数据(TreeStore)
//下面代码作用是扫描列表中的组,发现空组则删除。
Gtk::TreeModel::Children children = tree_store->children();
Gtk::TreeModel::iterator it_g;
it_g = children.begin();

for (; it_g != children.end(); ++it_g) {
Gtk::TreeModel::Children grandson = it_g->children();
if(grandson.begin()==grandson.end())
{
const Glib::ustring& tmp= (*it_g)[buddyColumns.id];
std::cout<<tmp<<”为空组=======================”<<std::endl;
tree_store->erase(it_g);
}
}

不过遇到了段错误。思前想后发现段错误的原因是因为那个删除 tree_store->erase(it_g);
执行了这句后,it_g所指向的数据已经失效,所以it_g++的话就会溢出。
把for 循环改成do while循环,用一个中间变量来得到it_g的值,并用它来删除。

do{
Gtk::TreeModel::Children grandson = it_g->children();
Gtk::TreeModel::iterator point = it_g;
it_g++;
if(grandson.begin()==grandson.end())
{
//const Glib::ustring& tmp= (*point)[buddyColumns.id];
//std::cout<<tmp<<”为空组=======================”<<std::endl;
tree_store->erase(point);
}

}
while(it_g!=children.end());
嗯。这样也算是解决问题吧。

如何编译iTalk

| Comments

前面我已经发过iTalk的截图了。为了让大家有更多的了解,现在发布编译的方法。
声明:由于这是一个开发中的版本,会遇到很多问题,强烈建议您有强壮的心脏和
心理准备来体验您将要做的事。

重要:由于测试的方便,代码里会有一个叫cyclonb@gmail.com的帐号和密码。我们
希望您不要用这个帐号登录和对这个帐号做密码更改之类的事情,这是我们用于测试用的。
谢谢合作。非常感谢。

iTalk是以gloox为协议基础。所以你必须编译安装好gloox库才能正常编译iTalk,
一般的系统可能已经提供了gloox库。但我强烈建议您卸载它。因为系统所提供的
gloox是一般比较过时。而iTalk所使用的gloox会比较新。因为是处于开发状态,iTalk
和gloox的svn版本变化会比较多。容易出现版本不兼容导致不能编译的结果,这也是
我之前建议您等待我们发布整合版本而不是自己编译的原因。

1.首先从源里取出gloox库的2420版本。(这是iTalk现在使用的版本)

svn co svn://svn.camaya.net/gloox/trunk gloox -r2420

然后是编译安装
cd gloox
./autogen.sh
./configure
make
sudo make install
(如果还有不明白的,请参考http://camaya.net/glooxdownload)

2.然后取出iTalk的源代码。(实际上,iTalk在申请项目名的时候叫geekr,当然关于
名字的问题我们以后再讨论)

svn checkout *http*://geekr.googlecode.com/svn/trunk/ iTalk
进入目录编译:
cd iTalk
./configure
make
sudo make install

现在您可以通过命令行italk来启动程序了。

如果您有好的建议请发到Cyclone_QQ@googlegroups.com邮件列表来。谢谢讨论。

libglade中的Notebook控件不要有空页

| Comments

libglade中的Notebook控件不要有空页

今天在写iTalk的时候。准备加一个显示登录状态时显示的
动画这样的功能。于是在主窗口上加一个NoteBook控件。
准备在登录中显示那个动画的页,登录成功则显示好友列
表的页。

用glade画好Notebook控件后。程序加载后显示有一个警告:

(italk:31101): Gtk-CRITICAL **: gtk_notebook_set_tab_label: assertion `GTK_IS_WIDGET (child)’ failed

(http://lists.ximian.com/pipermail/glade-users/2004-August/002014.html)
(查到的资料地址,解决方案)
google一下才知道。这是因为我画的Notebook控件有三页,
而我只用了其中两页。就是有一页为空。而libglademm处理
这个空页时产生的这个警告。只需要去掉这个空页,或者在空
页里随便加一个Vbox控件令它不为空就行了。这问题在Notebook
页设为0时也会出现。这对于libglade也是一样。所以标题用这个。
我看用C和libglade的人会比用C++和libglademm的人多吧。

Pgrep Can’t Search String Which Out of 15 Chars

| Comments

pgrep can’t search string which out of 15 chars

pgrep is a Linux command tool. it can search process id by its name.
one day , pypcjs tell it can’t search process name which out of 15 chars.

it means :
$pgrep hello1234567890
it return nothing.

i say , it may not a bug, just not necessarily. anyway , just remand it .

By the way , my company will move to a biger place. maybe it is
a good thing.

Good luck for anybody.

无题–feed

| Comments

无题

在feedburner绑定了feed。地址是:
http://feeds.feedburner.com/lerosua

这个似乎没有屏蔽什么。文章都很健康地输出了。

说说话题博客。这是什么呢,在我看来,这些博客都成了托。
也就是谁给钱帮谁说话。虽然这和明星代言没什么两样。
但是,看着一群博客,在帮一傻B产品歌功颂德的德兴,偶就
感到恶心。而且这在国内还很时兴。很多人都很向往。真觉得
是为了钱啥都卖了。

钱其实也不是坏事,不过,偶还不想把偶的话语权给卖了当钱。

开篇画面

| Comments

开篇画面

一大早,就被顶楼施工的声音吵醒。偶租的这幢楼,要在顶楼再建一层。
施工快一个月了。每天“兵兵棒棒”响个不停。在这样一个小区,已经
满是建筑的中间一幢,加高一层的施工。每天堂而皇之地进行着。这是
否已经得到批准的施工?但一天十二小时的挠民运动,让偶的耳朵不堪
重负。大多数居民和偶一样。只能忍。大概偶们知道,在这里,偶们从
来没有什么权利。

从住的地方到公司有一段路。路边总有些摆摊子擦鞋的妇女。偶一直都
没有穿皮鞋,所以也没有光顾过她们。她们起得比偶要早。大多在人们
上下班期间出现,做路过的人们的皮鞋的生意。一双眼睛有时也很警觉,
一发觉城管来了拿起家伙(擦鞋的工具)就走。今天也看见了城管在赶
她们。先是大声地呼喝她们走开。有一两个妇女正在帮顾客擦着鞋,不
愿离开。城管跑过去伸起就是一腿。擦鞋的妇女才跑开来。她这棕生意
也就黄了吧。

再走一会,路边总躺着一两个人。旁边会有一个小罐子,是用来装乞讨
的钱的。说真的,现在的乞丐也不太敬业了。基本上躺着那一动不动,
懒洋洋的。偶也习惯了,每天都能见到。大家都能见到。但没人问他们
的过去。似乎,大家都看不到他们的存在。

匆匆忙忙的人群中,还有些匆匆忙忙的中年人。手里拿着小标语纸条,
看见电线杆和树就上去贴。

如果偶要拍电影,上面就是偶的开篇画面。