博文

目前显示的是 八月, 2007的博文

大名鼎鼎的expat原来不支持gb2312

Catch EvalException: Couldn't open encmap gb2312.enc: No such file or directory at /usr/local/lib/perl5/site_perl/5.8.8/mach/XML/Parser.pm line 187 (in cleanup) Couldn't open encmap gb2312.enc: No such file or directory at /usr/local/lib/perl5/site_perl/5.8.8/mach/XML/Parser.pm line 187 我本来以为是perl5的xml::parser包的问题,后来查了下man和google才知道原来expat只支持4种编码:US-ASCII, UTF-8, UTF-16, and ISO-8859-1.而我的文档是gb2312。于是就……

发现freebsd 6.2的rpcgen的2个bug

重现方法:1、写一个简单的.x文件,保存为my.x
2、运行命令 /usr/bin/rpcgen -CMm -IP my.x -o my.c && /usr/bin/rpcgen -CMh -IP my.x -o my.h该命令的目的是为所写的.x文件生成合适的C/C++代码。但是它生成的代码有几个问题BUGS:1、某头文件位置错误#ifdef __cplusplus#include /* getdtablesize, open */#endif /* __cplusplus */sysent.h这个文件在freebsd中不是在/usr/include下,而是在/usr/include/sys/include下。所以此处最好是#ifdef __cplusplus#include <sys/sysent.h> /* getdtablesize, open */#endif /* __cplusplus */2、大量的使用了solaris的mutexmutex_t _svcstate_lock; mutex_lock(&_svcstate_lock); (类似于此的代码多次出现) 编译的时候会提示找不到mutex_t的定义。此处应该为pthread_mutex_t _svcstate_lock; pthread_mutex_lock(&_svcstate_lock);

使用mysql长连接的时候要注意

首先,如果使用了长连接而长期没有对数据库进行任何操作,那么在timeout值后,mysql server就会关闭此连接,而客户端在执行查询的时候就会得到一个类似于“MySQL server has gone away“这样的错误。一个好的解决方法是使用mysql_ping。在使用mysql_real_connect连接数据库之后,再使用mysql_options( &mysql, MYSQL_OPT_RECONNECT, ... ) 来设置为自动重连。这样当mysql连接丢失的时候,使用mysql_ping能够自动重连数据库。如果是在mysql 5.1.6之前,那么则应在每次执行完real_connect 之后执行mysql_options( &mysql, MYSQL_OPT_RECONNECT, ... ) ,如果是mysql 5.1.6+,则在connect之前执行一次就够了。有一种很自然的想法就是,新开一个线程,让它隔一定时间(如20秒)就执行一次mysql_ping.除此而外它什么都不用做。但是显然,这个线程必须与其它线程共享一个mysql连接,共享该mysql句柄。否则这样做一点意义都没有。但是,mysql_ping会改变mysql_affected_rows的返回值。所以最好是给该MYSQL句柄再加一个mutex(最好是读写锁)。当其它线程准备执行query的时候,就获取锁,执行完就释放。而这个执行mysql_ping的线程在执行ping之间先尝试获取锁,如果获取失败,则继续sleep,放弃这一轮的ping.

weekend

21:36 2007-8-11今天呆在屋里玩了一整天游戏哪里也没有去,懒得说话,懒得发短信。离开房门最远的一次是晚上出门直走再左转吃了碗羊肉泡馍。
昨晚又做了一个很重复的梦。梦见我和两个人拿了三把小手枪逃命。我们在一个村子里,被一群人包围了。我在门口偷听两个人的谈话说他们要派人去地道守着以免我们从哪里逃出去。于是我知道这个房子下面有地道。我找到了它,我决定冒险一试。但愿我们能赶在他们前面逃出去。那个地道很宽,很高,很像火车山洞那样,只是非常明亮。我带着他俩逃进去。不幸走了一大半的时候,突然对方冲出敌人。他们赶过来了,他们发现我们了。而这样的地形下,我们连个躲藏的地方都没有。笔直笔直的洞子。我手上那把枪不是我的是别人的,手感很不好。我惊恐万分。不知道怎么着我发现左面有窗子然后跳了出去。他们跟在我背后也跳了出来。出来之后是在一座山头上。周围是翠绿的一片崇山峻岭。我不知道我们在哪里。不知道是否已经逃出了敌人的包围。总的来说最近过得还是很不错的,上周就周四晚上加了几个小时的班,其它时间都是还比较轻松。周四下午还给内部做了一个spider的培训。第一次做讲座,没敢叫太多人所以信件就没有群发,但是没想到在讲座开始前3-5分钟头惊奇的发现我没有群发还是帮我群发出去了。然后来了10-20个人。很紧张,本来该2个小时的东西在事前被我压缩到1个小时然后实际被我半个小时就讲完了,后面就是交流讨论解疑。
唉,第一次,以后就好了。

再次哭死

下午花了3个小时,终于在gdb里面看见这条错误信息。
Perl v6.1000.2931959785526681268 required--this is only v5.8.8, stopped at /usr/local/lib/perl5/5.8.8/Exporter.pm
如果程序没有忽略SIGFPE信号,则得到的是这个
#0 0x28ae2716 in Perl_cast_ulong () from /usr/local/lib/perl5/5.8.8/mach/CORE/libperl.so
#1 0x28a61711 in Perl_pad_findmy () from /usr/local/lib/perl5/5.8.8/mach/CORE/libperl.so
#2 0x28a417bf in Perl_yylex () from /usr/local/lib/perl5/5.8.8/mach/CORE/libperl.so
#3 0x28a51153 in Perl_yyparse () from /usr/local/lib/perl5/5.8.8/mach/CORE/libperl.so
#4 0x28ab0c02 in S_doeval () from /usr/local/lib/perl5/5.8.8/mach/CORE/libperl.so
#5 0x28ab2492 in Perl_pp_require () from /usr/local/lib/perl5/5.8.8/mach/CORE/libperl.so
#6 0x28a801a9 in Perl_runops_standard () from /usr/local/lib/perl5/5.8.8/mach/CORE/libperl.so
#7 0x28a2a89c in S_call_body () from /usr/local/lib/perl5/5.8.8/mach/CORE/libperl.so
#8 0x28a2f26a in Perl_call_sv () from /usr/local/lib/perl5/5.8.8/mach/CORE/libperl.so
#9 0x28a2f617 in Perl_call_list () from /usr/local…

可恶的perl。。。。

唉,每次总是因为perl装的不知道怎么不对,编译我的库的时候常出这样的错误g++ -ggdb -Wall -Woverloaded-virtual -fexceptions -c -DHAVE_CONFIG_H -Wall -I/usr/local/include/mysql -fno-strict-aliasing -pipe -I`/usr/bin/perl -MConfig -e 'print $Config{archlib}'`/CORE -I/usr/local/include -o my_perl_interpreter.o my_perl_interpreter.cppmy_perl_interpreter.cpp: In function `void gsps::xs_init()':my_perl_interpreter.cpp:28: error: `my_perl' was not declared in this scopemy_perl_interpreter.cpp:28: warning: unused variable 'my_perl'my_perl_interpreter.cpp: In function `void gsps::my_perl_eval_sv(SV*)':my_perl_interpreter.cpp:44: error: `my_perl' was not declared in this scopemy_perl_interpreter.cpp: In function `void gsps::my_perl_eval_sv(SV**, SV*)':my_perl_interpreter.cpp:80: error: `my_perl' was not declared in this scopemy_perl_interpreter.cpp: In function `void gsps::my_perl_eval_pv2(SV**, const char*)':my_perl_interpreter.cpp:123: error: `my_perl' was not declared in this s…

查找没有符号的库

近来用gdb看core的时候常遇到很多"?"和错误的符号,我怀疑是因为我加载了很多动态库而这些动态库没有符号file `ldd xxxxxx | cut -d'>'-f2 | cut -d' '-f2` | grep ", stripped"嘿嘿,管道就是好。

这个该死的gprof究竟该怎么用?!

/usr/bin/ld: cannot find -lstdc++_p
gmake: *** [datagather] 错误 1

发现doxygen的一个“隐藏”选项

INPUT_ENCODING = GBK
默认的doxygen -g生的Doxyfile中没有INPUT_ENCODING 这个选项。我以前都是先用doxygen -g生一个模板然后慢慢修改。看来这样不行,里面还有很多隐藏选项呢

常用编码的编码范围

刚整理出来的,常用编码的编码范围注:
1、0x00-0x7f这样的是指这样一个整数区间[0x00,0x7f],其中包含0x00和0x7f
2、C语言规定,任何时候,凡是读到0x0,就意味着字符串结束gb2312:字长为1字节-2字节
0x00-0x7f
0xA1-0xFE,0xA1-0xFEgbk:字长为1字节-2字节
0x00-0x7F
0x80-0xFE,0x40-0xFEgb18030: (18030-2000)字长为1字节-4字节
0x00-0x7f
0x81-0xfe,0x40-0x7E或0x80-0xFE
0x81-0xfe,0x30-0x39,0x81-0xFE,0x30-0x39big5:字长为1字节-2字节
0x00 - 0x7F
0xA1 - 0xFE,0x40-0xFEutf-8:字长为1字节-6字节:
0x00-0x7F
0xC0-0xDF,0x80-BF
0xE0-0xEF,0x80-BF,0x80-BF
0xF0-0xF7,0x80-BF,0x80-BF,0x80-BF
0xF8-0xFB,0x80-BF,0x80-BF,0x80-BF,0x80-BF,
0xFC-0xFD,0x80-BF,0x80-BF,0x80-BF,0x80-BF,0x80-BF特征:每个字的第一个字节(开始字节)必定不以10开头,开始字节之后的字节必定以10开头。
如果某个字节高两位为10,则说明这个字节不是开始字节。
容错能力好,解析的过程中发现某个字节不正确,则跳过这个字,继续解析后面的字符就好。确定字长的方法:每个开始字节从高位向低位寻找第一个0。如果0在从高向低数的第i位,则此字的长度为
i+1个字节。用于检测字符串是否utf-8的perl正则:
http://www.w3.org/International/questions/qa-forms-utf-8.en.php$field =~ m/^( [\09\0A\0D\x20-\x7E] # ASCII | [\xC2-\xDF][\x80-\xBF] # non-overlong 2-byte | \xE0[\xA0-\xBF][\x80-\xBF] # excluding overlongs | [\xE1-\xEC\xEE\xEF][\x…

微软建议大家下载ie6.0

http://www.microsoft.com/downloads/ "Recommended Downloads"的第一条居然是 Microsoft Internet Explorer 6.0 微软对ie7失望了?