Cnangel: March 2009的归档

搬家小记

| 暂无评论

 终于搬到住处了,杭州滨江还是比较荒凉,小区的住户比较少,而且房子大都闲置状态,估计再没有人住,也慢慢变成了旧小区了。


本来想弄个大卡车把物品用具等的一股脑儿的搬过去的,但是托同屋的福,先弄过去了大部分的衣物杂物,后来的搬家就打了一个出租车,基本上搞定了。


原来的房东很小心眼,什么东西都婆婆妈妈的算,最后还扣押了我们300元,不喜欢。 现在的房东显然大方的多,不知道是我们刚住进去还是......其中原因估计还得等以后再了解了。



基础平台的重要性

| 暂无评论

从雅虎转到阿里巴巴,仍然做开发,做开发免不了与各种各样的基础库打交道。
开发了一个系统,准备上线了,sa给了一些机器,看系统版本,一般为rhel4或者rhel5。
准备安装系统,结果发现,没有数据库、没有openssl,没有boost库,没有适合gcc3的版本,还有大量需要依赖的perl模块,看样子给的是名副其实的“裸机”,
开始怀念雅虎yinst的日子,哎,没有yinst,但是还有yum,但是整个公司竟然连个线上的yum源都没有,每次下载n个包竟然去n个官方网站跑跑,跑了还需要make,make通不过还

需要看看有啥没有安装,有啥需要依赖,日子都没法活了,用rpm? rpm去哪找,线上机器不是测试机,随便到rpmfind网站找个包就可以安装,到时候出了问题还是自己的问题。

问sa,sa说这种包不是他们管,即使管也是给机器一顿make,幸好还没有实力申请1、2个集群,否则也没有实力去make。
在雅虎,有专一的团队维护这开发平台的可移植、可扩展以及可依赖性,这样使的开发和发布变得非常之简单,我觉得阿里巴巴应该像雅虎学习一下。
人微言轻,将就着吧!

轻松的一天

| 评论(1)

好不容易有了轻松的机会------去桐庐县采草莓。
桐庐县,浙江省杭州市属县,全国著名旅游县。位于杭州市西南,富春江斜贯县境。

奇怪的JNI的问题

| 暂无评论

在项目中遇到一个奇怪的现象,在java中使用jni调用c++的库时,总是会出现崩溃现象,java的堆栈一直显示错误在jni调用中,具体错误在strlen+0x10,看样子是strlen计算指

针所指的内容导致的一个错误,但是仔细查了一下,并不存在这种情况,一直找原因,看内存是否释放?看c++客户端是否存在指针为空指针,数组是否越界等等,结果都找不出原

因来,于是只好将java端传递的字符打印出来,并将C++库刚刚接收以及所有可能出现错误的日志打印出来,发现在java传递这种字串时:

String javastr = "abcde^@12345";

注意^@表示ascii字符为0的字符,此字串的长度为11;传递到客户端后,变成了:

char *key = "abcde<00>12345";

注意<00>表示null字符,此时用了一个指针,但是获得的字串长度为10了,这样到strlen处计算肯定会发生错误。

在c/c++语言中,数组字串中肯定不存在这样的字符串abcde^@12345,因为^@会截断12345,而java中允许出现^@,这样就导致了上述的这个问题。在jni调用c/c++库的时候,如果

用数组或指针获取,肯定会发生问题,这可能是jni的一个bug。jni部分调试代码如下:

    const char *key = env->GetStringUTFChars(string, 0);
    /* 
    int i, l = strlen(key);
    for (i = 0; i < l; i++) {
        printf("c[%d]: %u\n", i, (unsigned char)key[i]);
    }
    */
    unsigned short exists = jsClient->exists(key);
    env->ReleaseStringUTFChars(string, key);

那么在c++当中,如果用string来接收java的传递呢?有兴趣的读者不妨做做试验哟!

关于编译的几点须知

| 暂无评论

无论是C的编译还是C++编译,以及Perl或者Java的编译都可以通过make来完成。

 

rpm的一点学问

| 暂无评论
一般在linux下开发,在对源码进行二进制打包时,要用到spec文件,这个是rpmbuild的一个输入文件,暂且相当于配置文件吧。

进行打包时会出现:
Installed (but unpackaged) file(s) found:
/usr/bin/xxx
/usr/lib/xxx
/usr/share/xxx
这种现象一般属于文件files中未完全包含$RPM_BUILD_ROOT下的文件,检查一下看什么问题,可以使用:
rpmbuild -bl xxx.spec
调试时rpm会自动帮你检查文件是否包含完整,并且不需要进行编译;

另外,上述的环境确保$RPM_BUILD_ROOT的工程文件存在,否则会报错:
File not found: xxx/xxx.debuglist

老版本的linux下,rpmbuild可能替代的命令是rpm,老版本的$RPM_BUILD_ROOT路径一般是/var/tmp,很难通过$HOME/.rpmmacros来进行指定,所以一般需要使用sudo权限;
但如果一般用户编译,可以在spec文件中指定$_topdir和$_tmpdir,来确定你拥有权限的目录路径。

针对rpm一些疑难问题,大家不妨发表评论,相互交流一下。

好怀念leohacks

| 暂无评论

leohacks原来是LB插件与功能发布非常棒的一个非官方站点,站点的性质有些特殊,即非官方承认,又是官方采用最多的功能和发布官方补丁最多的一个站点。

leohacks的倡导人是花无缺,后来一直由路杨、Anthony、hztz、simonfamily和我维护,这里是以前的一个备份:http://opensource.huhoo.net/cgi-bin/leobbs.cgi

leohacks后来成为一些perl爱好者的天堂”,不过备份回退了2年,很多的修改都没有啦,遗憾中。

关于此归档

这里是CnangelMarch 2009发表的所有日记。

上一篇日记Cnangel: February 2009

下一篇日记Cnangel: April 2009

主索引归档页可以看到最新的日记和所有日记。

August 2012

Sun Mon Tue Wed Thu Fri Sat
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  
Powered by Movable Type 5.14-en