Openfetion近期开发手记(相关功能实现技术)

2010年10月18日 29 条评论 8,424 人阅读过  

离上Openfetion上一个版本发布至今过了有将近一个月的时间了,上个版本放出的时候本以为已经解决了很多bug,但发布之后才发现用户遇到的问题还是很多,软件测试还是很重要的,当然有些协议上的问题只能交由用户去测试,我没有那么多飞信号,有些问题有很难遇到的,也很难复现的,所以就在这样不断地与用户沟通中解决问题。

其实做共享软件是件很开心的事情,不管你做得好不好,都会有人支持你,这个是很重要的,因为在最初开发openfetion的时候并没有想过要把它做为一个专业的飞信客户端放出来大家一起使用,可发布之后得到了广大linux用户的支持,即使那时候的bug比现在多得多,仍然有用户乐此不彼地帮我测试,反溃问题,提供建议,当然我也乐此不彼地修改程序,希望有朝一日它能让所有的用户都能稳定地运行,这也是自由软件的优势,如果当初这做为一个商业软件发布,我想毫无疑问,收到的会是一片骂声,然后这个项目也便会匆匆截止,而现在即便很忙也会拿出一些时间来加强它,因为总会有用户支持着它,也会有开源爱好者加入进来做一些贡献。

Openfetion下一个的版本号应该是2.0了,我想2.0应该和之前的1.x版本有所区别,功能上这个不是特别重要,因为之前的版本已经有了几乎所有的基本功能,其它的一些不常用的功能我也没考虑过,因为开发那些功能是一件性价比很低的事情,现在所能想到的2.0和1.x的区别应该是让2.0更加稳定,功能再丰富如果不能稳定运行这个软件就永远成不了优秀的软件,因为我在新版本里面做了大批量的代码修改,甚至包括以前一些很不专业的编码习惯,尽可能将所有潜在的问题都消灭掉,当然也加了一些用户一直以来要求的功能,下面简单地说一下。

...
分类: C/C++ 标签: , , ,

印象杭州

2010年10月9日 14 条评论 9,924 人阅读过  

近日因出行杭州而导致博客疏于管理,很多网友留言都未能一一回复,恳请见谅。

十几个小时旅途奔波终于活着回到了北邮校园,杭州一行搞得我疲惫不堪,如果不是小卉非要跑到离我1600Km的地方去读书,我宁愿在这个漫漫的十一长期里面好好享受待在宿舍里睡觉的乐趣,第一次选在这种旅游高峰期出行,也因此体会到了我央央大国庞大的人口压力。

第一次去杭州,很早以前就想去一次,因为五年前想去浙大读计算机,结果却沦落到青岛混过了四年,也因为小卉在那里,它也因此一度成为我未来工作生活的备选地之一,这次也算是去做一个实地考察,不过结果却着实令我失望。

一下火车给我的第一感觉是来到了济南,不过也还好,济南怎么说也是山东的省会,而且火车站这种地方本来就比较复杂,也无可厚非。但最让我不爽的是这里的风土人情,一下火车便跟公交车司机吵了一架,那人一脸的傲慢,而且还出言不逊,让我想不明白是区区一个公交车司机到底有什么了不起的?后来我慢慢明白了,杭州中下层的人民普遍都会觉得自己很了不起,当然上层人和有文化的人我没机会接触,特别是服务业餐饮业,从业人员态度都极其恶劣,言语表情中都透露着一种不屑,仿佛是回到了计划经济时代,业主都是上帝,顾客都他妈的是孙子。唯一收到笑脸的地方是服装店,各家都是一如既往地热情,所到之处无异。

...
分类: My Life 标签:

写给OpenFetion用户(相关说明和常用问题汇总)

2010年9月11日 86 条评论 26,427 人阅读过  

OpenFetion从去年发布第一个版本到现在已经正式更新了将近10次,首先感谢大家对OpenFetion的支持,最初开发这个软件的时候是因为在Linux下找不到用得舒服的飞信客户端软件,而且也想找点事情打发一下无聊的研究生时光,突发奇想就写了这么个小东西,第一个版本刚发布的时候错误百出,当时没有专门做过测试,只是在自己机器上用自己的账号跑起来没有问题,用了几天就发布了,结果是网友报各种各样的bug,这也是自由软件的好处,总会有很多热心的网友帮助你测试软件,也正是有了广大网友的支持我一直以来才会不断地维护更新着它。

关于OpenFetion的版权问题

OpenFetion是遵循GPL协议的共享软件,但一直惭愧的是本人不善美工,在早期版本里面用了很多飞信官方的小图标,直到最近这个问题才开始慢慢地解决,也正是因为图标问题我到现在才迟迟没有正式发布新版本,如果大家在使用Openfetion的时候遇到登录问题或者想试用一下新版本里面的功能,可以到svn上下载最新开发版本使用:

$svn checkout http://ofetion.googlecode.com/svn/trunk/ ofetion-read-only
...
分类: Linux 标签:

linux0.11里面发现的好玩的链表指针迭代方法

2010年8月30日 2 条评论 7,484 人阅读过  

linux的内存管理一直是让我最困惑的,2.6版本内核里面各种复杂的机制搞得我云里雾里,甚至搞不明白内存管理最基本的原理是什么,于是翻阅早期版本的内核0.11,最底层的内存分段和分页我都已经在我的plinux上实践过了,读到malloc的时候发现了linus用了一种很好玩的指针迭代方法,至少我以前没见过,见识短浅,大家莫笑。

linus把一页内存分成一个个具有相同大小的内存块,然后又将这些个内存块组成一个链表,而这些内存块都是将来要分配出来的空闲内存,它们内部并不包含有任何对象,要组成链表就必然要求有指针,linus把每块内存的前4个字节拿出来作为指针,指向下一块内存的首地址:

char  *cp;
/* 在这里获取一页空闲内存 */
(void*)cp = get_free_page();
 
for(i = PAGE_SIZE/bdir->size; i > 1; i --){
/* 我觉得这里很有意思,把一个字符指针强制转换成指向字符指针的指针,
然后再对其解引用赋值,相当于把cp开始的前4个字节作为一个指针并对它进行定向 */
    *((char**)cp) = cp + bdir->size;
    cp += bdir->size;
}

然后在指针迭代的时候用了下面这种方法,不复杂,只是觉得挺有意思的:

void *retval = (void*)freeptr;
freeptr = *((void**)retval);

这样freeptr就指向了下一块空闲内存。

...
分类: C/C++ 标签: ,

统计使用频率最高的10条指令的脚本

2010年8月22日 5 条评论 8,759 人阅读过  

说实话,自己脚本能力太差了,于是利用周末的时候读了读《sed&Awk》,记得什么时候在byr上看到一贴子,是个统计最常用的10个命令的一句话脚本,于是自己写了一个,不过看上去挺臃肿的,如下:

#! /bin/sh
 
cat ~/.bash_history | awk -F" +" '{ print $1 }' | sort  | awk '
!/^$/{
	if(cur != $1) {
		if(cur != "")
				print sum , cur
	   	sum =0
	}
	cur = $1
	sum ++
}' | sort -nr | awk '
BEGIN{
printf("%-20s%s\n" , "Command" , "Frequency")
print "-------------------------------"
}
{
	if(NR <= 10)
		printf("%-20s%d\n" , $2 , $1)
}'

输出如下:

...
分类: Linux 标签: ,

slackware13.1安装配置手记

2010年8月17日 9 条评论 10,612 人阅读过  

近日实验室一台thinkpad挂在我名下,为了防止资源的闲置浪费我决定拿过来用一段时间,正好也是项目需要,之前的程序需要gnome NetworkManager的支持,我前一段不得已时间在slackware13.0上将xfce换成了gnome,然后又装NetworkManager,后来还是没有成功,装是装好了,可 dbus仍有问题,程序跑不起来,不得已用了在这台机器上装了个ubuntu用了几天,现在项目中期已过,差不多该回过头来整理一下操作系统了,还是钟爱于slackware,而且早就想试一下13.1,正好借这个机会尝试一下。

从slackware官网上下了前两个cd,把vmlinz和initrd.gz解压出来放到了ubuntu的某个目录下,然后把第一个cd解压出来或者在安装的时候临时挂载也行,我是解压出来了,然后就是硬盘安装的各种熟悉的步骤了,只不过这次的grub是ubuntu的grub2,有一点不一样,在加载内核文件的时候需要用linux命令,而不是kernel命令,其它的都一样,之前在安装系统的时候分区用的是cfdisk,这次联想把这个分区表弄得很乱,cfdisk打不开,于是用fdisk分区,其实我已经划好了一块分区准备留给slackware的,只要用mkfs格式化成ext3或者ext4就可以了,格式化完之后还不行,slackware还是检测不到linux分区,需要修改分区的system id:

1
sudo fdisk /dev/sda

然后选择t将分区的system id修改为83,也就是linux分区,w写进分区表就可以啦,fdisk就会显示分区是Linux,而不是FAT12了,这样就可以进行系统安装了,setup就可以了,其它的就没什么特别的了。

这次在系统安装的时候我只安装了cd1,cd2是系统安装完成之后手动安装的,里面有linux source和一些常用的软件还有xorg,这次没有安装xfce,xfce已经让我审美疲劳了,而且这台机器配置也不错,装gnome也不会慢多少,接下来就要安装gnome了。

...
分类: Linux 标签: ,

近期飞信开发手记(群相关介绍)

2010年8月14日 22 条评论 11,621 人阅读过  

实验室项目中期检查结束,两天一夜的超负载工作换来了额外两天的休息时间,时间不敢随意浪费,飞信好久没有更新了,软件总不可能没有bug,用户的需求也不可能有止境,还是得赶紧把这么长时间以来网友提出的问题和要求给解决一下,用了近三天的时间完成了飞信i18n和飞信群功能,宅在宿舍里面写代码时间长了果然会觉得无聊,闲话少说,切入正题,写一下飞信群的开发过程。

另外,现在还不打算发布新版本,还想再测试两天看看,这里就截两个图先展示一下吧

image image
...

C语言获取汉字拼音首字母

2010年7月14日 6 条评论 13,687 人阅读过  

很多网友提意见让我给小飞信加上好友搜索功能,这几天太忙,抽时间把其它的功能加了一下,现在就剩下这个功能没做好了,想做成按汉字首字母搜索的那种,于是查了查资料写了个把汉字转换成首字母的程序,贴一下有需要的可以拿去用,也顺便给自己做个备份。

下面是程序,用了glib里面的一个函数g_convert,用iconv也可以,g_convert更方便一些就直接拿来用了。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <glib.h>
 
gchar getpychar(guchar uword0 , guchar uword1)
{
	gchar pychar;
 
	int i1 = (short)(uword0 - '\0');
	int i2 = (short)(uword1 - '\0');
 
	int tmp = i1 * 256 + i2;
 
	if(tmp >= 45217 && tmp <= 45252) pychar = 'A'; 
	else if(tmp >= 45253 && tmp <= 45760) pychar = 'B'; 
	else if(tmp >= 45761 && tmp <= 46317) pychar = 'C'; 
	else if(tmp >= 46318 && tmp <= 46825) pychar = 'D'; 
	else if(tmp >= 46826 && tmp <= 47009) pychar = 'E'; 
	else if(tmp >= 47010 && tmp <= 47296) pychar = 'F'; 
	else if(tmp >= 47297 && tmp <= 47613) pychar = 'G'; 
	else if(tmp >= 47614 && tmp <= 48118) pychar = 'H'; 
	else if(tmp >= 48119 && tmp <= 49061) pychar = 'J'; 
	else if(tmp >= 49062 && tmp <= 49323) pychar = 'K'; 
	else if(tmp >= 49324 && tmp <= 49895) pychar = 'L'; 
	else if(tmp >= 49896 && tmp <= 50370) pychar = 'M'; 
	else if(tmp >= 50371 && tmp <= 50613) pychar = 'N'; 
	else if(tmp >= 50614 && tmp <= 50621) pychar = 'O'; 
	else if(tmp >= 50622 && tmp <= 50905) pychar = 'P'; 
	else if(tmp >= 50906 && tmp <= 51386) pychar = 'Q'; 
	else if(tmp >= 51387 && tmp <= 51445) pychar = 'R'; 
	else if(tmp >= 51446 && tmp <= 52217) pychar = 'S'; 
	else if(tmp >= 52218 && tmp <= 52697) pychar = 'T'; 
	else if(tmp >= 52698 && tmp <= 52979) pychar = 'W'; 
	else if(tmp >= 52980 && tmp <= 53640) pychar = 'X'; 
	else if(tmp >= 53689 && tmp <= 54480) pychar = 'Y'; 
	else if(tmp >= 54481 && tmp <= 55289) pychar = 'Z'; 
	else pychar = ' ';
 
	return pychar;
}
 
gchar *getpystring(const gchar *in)
{
	gsize inlen , olen , i , j = 0;
	gchar *gword = g_convert(in , strlen(in)
			, "gb2312" , "utf8" , &inlen , &olen , NULL);
 
	guchar *uword = (guchar*)gword;
	gchar *out = (gchar*)malloc(olen);
 
	memset(out , 0 , olen);
 
	for(i = 0 ; i < olen ; i++){
		if(uword[i] >= 0xa1){
			if(uword[i] != 0xa3){
				out[j++] = getpychar(uword[i] , uword[i + 1]);
				i ++;
			}
		}else{
			out[j++] = (gchar)uword[i];
		}
	}
 
	return out;
 
}
 
int main(int argc , char **argv)
{
	printf("%s\n" , getpystring("linux是一个出色的操作系统"));
	return 0;
 
}

程序输出:linuxSYGCSDCZXT

...
分类: C/C++ 标签:

近期生活小记

2010年7月2日 18 条评论 8,557 人阅读过  

貌似有一段时间没更新了,最近忙着复习万恶的期末考试,虽然只有两三门需要考的,也足以让我焦头烂额了,一次课都没上 […]

...
分类: My Life 标签:

xelatex安装使用简单配置小记

2010年6月21日 5 条评论 11,330 人阅读过  

前几天用了一下LaTeX,中文支持是用CJK来解决的,前几天有网友留言告诉我xelatex用起来比方便多了,这两天又要写个文档,试了一下果然非常方便,我真是太out了,记录一下自己的使用过程吧。

在某个厦大的mirror里面下到了压缩的texlive包,http://mirrors.xmu.edu.cn/CTAN/systems/texlive/Images/texlive2009-20091107.iso.xz,1.4个G,验证md5之后解压,xz的压缩比真高,解压出一个3个G的iso,好不容易才放得下,然后随便找个地方挂上了,接着开始安装。

安装可以用图形界面的形式,不过需要安装perl-tk,安装的时候执行sudo ./install-tl –gui,我系统里面没有装perl-tk就直接在命令行下安装了,安装过程很简单,几乎都是默认配置,没怎么做改动,然后就安装完成了。

安装完成后需要添加几个环境变量,安装程序会给出提示,具体内容我也记不清了,反正就是按照它说的做的。

xelatex可以直接使用系统中的字体,不再需要像CJK那样自己去制作字体,而且也不会出现种乱码的情况,以前用CJK的时候总需要在vim里面反encoding设成gb2312然后再打开文件编辑,否则就会乱码,而且以前使用hyperref宏包的时候总会出现各种冲突,非常麻烦,左侧的树状目录中文也会乱码,现在这些问题全都解决了。

...
分类: LaTeX 标签: