Category Archives: Develop

software development

Linphone Android 编译

准备搞搞VOIP的业务,看了一下开源的VOIP客户端,觉得Linphone还是不错的,同时提供Android和IPhone客户端,所以决定下源代码编译一下。

我用的是我的T400上32位的CentOS 6虚拟机,首先当然是git下载源代码,不知道是我的无线网卡抽风还是公司的无线路由抽风,反正那几天网不停的掉,每次下载到半路就失败了。看了一下.git文件夹下的config文件,实际上它也是根据这个config文件分submodule递归下载的,所以理论上下载失败之后是可以分submodule下载的,但他是递归的,实在是太麻烦了,而且也容易出问题,放弃。

最后没办法,只好去我自己的服务器上下载,共享主机也没法用yum,不过自己编译安装也不麻烦,后来遇到无法连接的问题,发现是防火墙封了git默认的9418端口,居然连往外访问也封,下班前给HostMonster客服发了个邮件,第二天早上来收到回复说已经打开了。美国的网速就是快啊,几分钟就搞定了,顺带下载了iphone的源代码,然后scp到本地虚拟机上。

后面的准备过程就比较简单了,按照README操作即可。那些依赖库直接yum安装即可,ndk我用的是最新的r8b。prepare_sources过程中还要下载一些东西,网络不好的话也容易出问题,比较大的一个是SILK_SDK_SRC_v1.0.8.zip,可以用工具下载之后放到./submodules/mssilk/sdk/里头。

最后编译的时候报错:
jni/..//submodules/linphone/build/android/../../coreapi/linphonecore.c:49:40: error: expected ‘,’ or ‘;’ before ‘Devel’
jni/..//submodules/linphone/build/android/../../coreapi/linphonecore.c:1519:29: error: expected ‘,’ or ‘;’ before ‘Devel’
主要其实是常量LIBLINPHONE_VERSION没有定义,不知道是版本管理问题还是故意留着让你修改的,看了一下也就这两个地方定义了,所以直接复制一个字符串就行了,我用的是”1.3.2-20120919″

然后是另外一个错误:
jni/..//submodules/linphone/build/android/../../coreapi/linphonecall.c: In function ‘linphone_call_start_audio_stream’:
jni/..//submodules/linphone/build/android/../../coreapi/linphonecall.c:1236:64: error: expected ‘)’ before ‘Devel’
jni/..//submodules/linphone/build/android/../../coreapi/linphonecall.c: In function ‘linphone_call_start_video_stream’:
jni/..//submodules/linphone/build/android/../../coreapi/linphonecall.c:1334:64: error: expected ‘)’ before ‘Devel’
这回是LINPHONE_RTCP_SDES_TOOL,他用到的LINPHONE_VERSION没定义,直接赋值”Linphone-1.3.2-20120919″了事儿。

后面的就很顺利了,就是稍微有点慢。

有点奇怪的是我第一次编译成功的时候没有缺一些包,包括liblinphone.so等,当时也没报错啊,第二次编译就好了,但是已经不能重现了,不知道为什么会这样。

Win7下安装SqlServer2000和VC6.0

由于硬件平台API的限制,还在用Visual C++ 6.0开发MFC程序,还在用SqlServer 2000,其实这俩虽然老但是在Win 7上用起来一点问题都没有,安装的时候选兼容模式用管理员权限运行即可,安装VC的时候注意不要选Tools下OLE/Com Object Viewer就不会出现问题,那些兼容性的提示不用管它,直接运行即可。

有人提到另外一个问题是打开文件的时候VC会崩溃需要安装一个微软提供的补丁,我没遇到

SQLServer 2000是Develop版再加SP4补丁

VC6是企业版再加SP6补丁,装完VC之后会提示是不是要安装InstallShield for Microsoft Visual C++ 6,这个是用来制作安装程序的,要是不需要的话就别装了,我记得好像会引起问题。

JiaThis插件添加自定义分享按钮

打算美化一下网站,加了一些插件,社交现在比较火,于是想加一些分享按钮上次,先试了一下Digg Digg插件,不太好使,速度比较慢,而且没有国内的,后来看了一下,装了JiaThis,他的按钮可以全站显示或者只在文章详细页显示,像我这种在目录页显示文章全部内容的博客当然需要全站显示,但是他默认的全站显示只针对于侧栏式起作用,按钮式、工具式和图标式都不行,而且他的侧栏式按钮在分享的时候也不能定位到文章每一篇文章,于是只能自己去改代码试试。

首先去JiaThis的网站定制自己的嵌入代码,我选择的是工具式小按钮,默认显示媒体就选了微博、Facebok、Google+和twitter,自定义分享浮窗选了一些国内常用的,复制代码到JianThis选项里头,选择文章头部居右,提交之后就可以在阅读文章页面看到分享按钮了。

然后查看详细页的源代码,他其实只在前面加了一个<div style=”float:right”>,想在文章列表页把按钮加在发布时间(Posted on)同一行的右侧,在themes里头找了一下,这个是一个叫twentyeleven_posted_on的函数输出的,打开content.php把那段代码加在这个函数后面就可以了,这样在文章列表页就可以看到分享按钮了

PS: duoshuo也比较热,但是他更多的是一个自动发布到其他SNS的工具,国外几个的好像还不支持

20120704:发现不管在那篇文章上点击评论按钮,结果评论的都是网站首页,而不是各篇文章,而且评论的次数也都一样。看了一下帮助,可以自己定义jiathis_config中的url和title,结果评论数倒是正常了,但是评论的是最后一篇文章不能准确定位到每一篇文章。改来该去总是不行,最后问了一下客服,他给了一个帮助 一个页面中添加多组分享代码,主要做法就是用一个onmouseover的事件来动态设置title和url,主js放在页面的最后就可以,不用重复放。于是在content.php里头放html代码,在几个列表的php文件(archive,author,category,search,showcase,tag)里头放js,这样分享的时候没问题了,但是计数器还是有问题,所有都显示一样的值,帮助上面没有计数器,客服说也不支持,因为计数器的classname是固定的(jiathis_counter_style)。还是有点不死心,既然静态的不行那就用js来试试,后来试着在html代码里头也加一些js,感觉好像也还可以,但是可能会导致主js(jia.js)会被调用多次,回头看看到底行不行

VC下CMap和ADO的性能

周五整理语音服务端的程序,发现原来在程序启动的时候导入黑名单到内存(CMap)的那行代码被注释掉了,一看类实现发现查找黑名单也改成了实时查数据库的方式,于是试着去掉注释执行了一下,结果导入黑名单整整花了1000秒,怪不得要去掉呢;可是一看数据库里面也就是29万条记录,这个也不应该这么慢啊

首先想到的会不会是CMap在频繁的reallocate以至于耗费太多时间,一看这个类里头还真有个函数叫InitHashTable,果然MSDN里面写到:
For best performance, the hash table size should be a prime number. To minimize collisions, the size should be roughly 20 percent larger than the largest anticipated data set.
调用之后发现时间提高到了70秒,感觉还是不够快,应该也就是几秒的事儿,于是继续看代码。

果然看到原来的代码再用ADO读取SQL Server数据的时候为了简单起见,所有的代码打开数据库的时候用的都是一样的参数,而这里显然是只读的,所有游标打开的时候不需要是adOpenDynamic,用adOpenForwardOnly就足够了,再执行一看时间提高到了4秒,这些算是靠谱了。