软件改名为 iCalk
为啥叫这个名字?本来是想叫iTalk的,不过,这个名字已经太滥了。
就我所知就有好几个产品叫这个iTalk了,有硬件,有软件。为啥一
定要 i 开头。说实话我实在不是起名字的能手。关于命名的东西都很
麻烦。所以随便把个 T 改成 C 就成了。在Google里一搜,这名字还
算不常见。用着也无妨。
这两天实在是没有心情写。前天刚做了一个签名管理的窗口,可以
把一些消息签名的文件读到窗口中,然后通过双击更改签名,这样的话,
可以收集并方便地更换签名消息了。也算是有趣的小玩具吧。不过,能用
得上这个功能的,也算是无聊的啦。加上超时函数让它隔一段时间就动态
更新也不错。
软件的另一作者wind又不能回归了吧。消失又三个月了。上次消失的时
间是一年。也许这次要等他生儿子了才能在网上见到他吧。哈哈。
互联网这么多热闹,我怎么感觉到这么寂莫呢?
雅虎提供无限容量邮箱
雅虎开始提供无限制容量的邮箱。但偶要说的是,偶不会
去注册。因为雅虎曾经发生过出卖用户邮箱的事情。虽然说
偶不会搞什么违法的事情。但对于这样的服务商,不值得信任。
也许Google以后也可能因为在中国的策略问题而发生类似的事情。
但现在来说,它还不算太evil,而雅虎已然是做过一次恶了。
虽说企业的目的是赢利。但你要即赢利又赢口碑那就难了。百度,
腾讯这样的企业就是光要利而得恶名了。而google,apple这样的
企业,基本上已然宗教化了。
星期天闲聊
令人想不到的事。Blogspotc又解封了。这倒没有令人兴喜的。因为偶对于这件事
已经习以为常了。起码不以此为喜,不以此为悲。谁知道它明天是不是又会被封呢。
总不能因此被GFW调着偶的心情吧。
专心于开发 iTalk后就比较少写博了。大概是找到了一个比较固定的玩具吧。有事
做了,就没有那么多唠叨与胡思乱想了。
关于这个 iTalk,我是想把它视频,音频,传文件功能啊,什么的都加进去的。因为在
Linux,这样丰富的聊天程序不多。而一些又不让我满意。于是就有了自己做一个的念头。
第一次做开源项目。的确学习到很多东西。看着iTalk从一个小小的测试程序,只能登录,
到能收发信息,到列表的丰富化。就好像看着自己的宠物成长一样。每实现一个小功能
都兴喜不已。每遇到 一个BUG就忧愁半天。呵呵。
倒是学会子一招。在遇到BUG时,最好放一放,通常我都是轻松一下,过一会再看,才
猛然地发现问题的所在。如果一味地研究,反而跳不出圈圈子。这也算是一种思维方式
吧。虽然以前有人对我说过。不过,还是要自己体会才会深刻。
在此之前,总以为自己做不子项目 。 而且有种程序员洁癖。所谓程序员洁癖,就是指
实现一个功能时,总想着要用最好的代码,最巧妙的方法。不然,就会觉得办法很粗陋,
代码很脏。在写任何代码前,总不自觉会有这种想法。因而总为想一个好的结构,算法
烦恼半天。现在来说,不应该害怕写这种代码。写代码第一要素就是先实现功能。优化
的事留在以后考虑。当然这是对于新手来说的。因为新手不可能一开始就计划好大的结构
。要做开源的程序,就得先把功能搞上去。然后才后考虑优化。当然不是说不要考虑优化
,但那是在力所能及的方面了。
For循环中iterator不可乱删除
今天写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
前面我已经发过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来启动程序了。
libglade中的Notebook控件不要有空页
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的人多吧。
Project Temporarily Name Italk Preview
Pgrep Can’t Search String Which Out of 15 Chars
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
无题
在feedburner绑定了feed。地址是:
http://feeds.feedburner.com/lerosua
说说话题博客。这是什么呢,在我看来,这些博客都成了托。
也就是谁给钱帮谁说话。虽然这和明星代言没什么两样。
但是,看着一群博客,在帮一傻B产品歌功颂德的德兴,偶就
感到恶心。而且这在国内还很时兴。很多人都很向往。真觉得
是为了钱啥都卖了。
钱其实也不是坏事,不过,偶还不想把偶的话语权给卖了当钱。
开篇画面
开篇画面
一大早,就被顶楼施工的声音吵醒。偶租的这幢楼,要在顶楼再建一层。
施工快一个月了。每天“兵兵棒棒”响个不停。在这样一个小区,已经
满是建筑的中间一幢,加高一层的施工。每天堂而皇之地进行着。这是
否已经得到批准的施工?但一天十二小时的挠民运动,让偶的耳朵不堪
重负。大多数居民和偶一样。只能忍。大概偶们知道,在这里,偶们从
来没有什么权利。
从住的地方到公司有一段路。路边总有些摆摊子擦鞋的妇女。偶一直都
没有穿皮鞋,所以也没有光顾过她们。她们起得比偶要早。大多在人们
上下班期间出现,做路过的人们的皮鞋的生意。一双眼睛有时也很警觉,
一发觉城管来了拿起家伙(擦鞋的工具)就走。今天也看见了城管在赶
她们。先是大声地呼喝她们走开。有一两个妇女正在帮顾客擦着鞋,不
愿离开。城管跑过去伸起就是一腿。擦鞋的妇女才跑开来。她这棕生意
也就黄了吧。
再走一会,路边总躺着一两个人。旁边会有一个小罐子,是用来装乞讨
的钱的。说真的,现在的乞丐也不太敬业了。基本上躺着那一动不动,
懒洋洋的。偶也习惯了,每天都能见到。大家都能见到。但没人问他们
的过去。似乎,大家都看不到他们的存在。
匆匆忙忙的人群中,还有些匆匆忙忙的中年人。手里拿着小标语纸条,
看见电线杆和树就上去贴。
如果偶要拍电影,上面就是偶的开篇画面。