Category Archives: Develop

software development

centos安装git

上次虚拟主机上没有yum,所以git是直接源代码编译安装的,略显麻烦;这次虚拟机上用yum install git居然找不到package。难不成非得要编译?按说git这样的东西应该包含进来才对啊。再仔细一找,原来是需要先添加EPEL(Extra Packages for Enterprise Linux) repository:

rpm -Uvh http://download.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm

然后就可以yum安装了。

具体参考:http://fedoraproject.org/wiki/EPEL/FAQ#How_can_I_install_the_packages_from_the_EPEL_software_repository.3F

git clone libvpx失败

在虚拟主机上git clone linphone的时候失败了,底下libvpx模块clone有问题:
Submodule path ‘submodules/externals/libupnp’: checked out ‘d0b16d056e0f681a2bc6bd70859303b4bba521dc’
Cloning into ‘submodules/externals/libvpx’…
error: Failed connect to git.chromium.org:80; Connection refused while accessing http://git.chromium.org/webm/libvpx.git/info/refs
fatal: HTTP request failed
Clone of ‘http://git.chromium.org/webm/libvpx.git’ into submodule path ‘submodules/externals/libvpx’ failed
试了试telnet git.chromium.org 80可以,但是git就是不行。
看了看以前下载的记录,应该是可以的,而且从公司网络直接git clone http://git.chromium.org/webm/libvpx.git也可以。
看样子是人家把我的IP给盾了,不知道为啥,有点坑爹。

SMS Backup+第一次连接Gmail账户时报错:无法从Google获取授权

一直用SMS Backup+来备份短信和通话记录,虽然这东西备份速度有点慢,但是备份到Gmail确实是非常方便的。这次刷机之后一直没有备份,结果下午一点连接到Gmail账户时就出错:

无法从Google获取授权:请确认您已连接到网络并设置了正确的时间或时……

网络应该是正常的,没仔细看后面的,后来想到似乎有篇文章讲到Google推送了一个叫Google Setting的App,看了一下手机上还真有,但是打开之后有一个”使用Google+账户登录的应用”,进去之后是空的,也没有什么选项,按理说这个只是一个列表,既然没改认证方式就不应该连不上。

后来查了一下,说把Gmail账户认证的方式从OAuth改成纯文本就可以,不过似乎功能上会有影响。正要试呢,忽然看到了提示的后半句:正确的时间或时(区)。一看果然我的时区已经变成+2区了,肯定是大宝干的,这小孩。。。。把时区改过来之后就可以了。

至于为什么时间/时区不对就无法通过验证,只看到有人说:

Even if your clock displays the right time, if it is in the wrong timezone, you won’t be able to authenticate.

具体原因待查。

一种轻量本地归属地查询的方法

我们的安卓客户端里头需要加一个归属地显示的功能,要对比较多的号码进行归属地显示,实时查询还是慢了点,而且还要流量,只能通过本地数据库来查询。

做客户端的同事找了找资料,结果说不是人家的代码不开源就是数据文件格式不开放,无法自己生成,而且人家的数据文件也不小;如果直接把数据都放到安卓的SQLite数据库里头的话也很大,好几MB,而且查询起来也很慢,根本不可用。

于是俺就说那行吧,既然这样那就直接直接弄吧,手机号段都是连续的,这个可以利用一下。

首先假定有这样一些归属地的数据:

编号

区号

归属地

1

010

北京市

2

0311

河北省石家庄市

全国一共大概应该有300多区号吧,这些数据可以放在一张表里头,这样先解决了固话归属地的问题,查起来速度应该也很快的。

然后再看手机的,比如说130这个号段的,1300000这个号段是北京的,1300311这个号段是石家庄的,那么就有一个叫130的二进制文件,每两个字节对应一个归属地的编号,也就是说130这个文件第0000个字节和0001个字节读出来转成一个int之后的值为1,然后去归属地表里查就可以知道是北京市;读第0311*2和0312*2+1个字节之后的值就是2,查出来归属地是石家庄的。这样的话每个手机归属地需要读一次文件和查一次数据库,但是读文件的时候是直接知道文件位移的,应该很快;数据库量小,查起来也很快,所以速度是有保障的。

再看数据文件大小,130有10000个号段,每个号段占2B,也就是说一共有20KB,全国13、15、18开头的三位数号段最多也就是30个,也就是说数据文件最多30个,大小最多600KB,再加上号段本来大部分是连续的,打包的时候可以压缩一下,估计可压缩率还是挺高的,压缩到100K以下都是有可能的。

其实总结以来就是一句话:把号段转成数字之后变成一个文件中的索引,这样就避免了查询。

程序切割超大日志文件

前阵子做的一个信令统计分析的项目,数据量实在太大了,信令日志入库之前需要根据LAC按地市切割之后分别入库,考虑到性能决定还是用C++写个小程序来切割,平台是Server2003,所以就拿VC6来做,不过对于MFC那些类都不太熟,也懒得去查,所以主程序基本上就是C写的,不过考虑到性能,不能一行一行读,还得有个buffer一次性读过来,然后处理,结果弱爆了,就这么一小程序半天也没搞定,总是有异常,而且错误都不知所云,debug也找不着个所以然来。最后一怒之下写了个java,用的BufferReader/Writer,半个小时就搞定,在笔记本上试了一下,切一个1G的文件用了49秒,也就是说读写都是20多MB/s,考虑的硬盘的速度,提升的空间已经不太大了。

不得不吐槽一下,VC6是我用过最烂的IDE,没有之一。哪天要是能摆脱Visual Studio我就去搞个mac去。

Buffer的大小是1MB,太大了对于速度也没多大影响,白白占用内存而已

Linphone iphone编译-iOS6

同事说上次编译的Liphone在某些SIP Server上有单通的现象,于是重新下载了代码编译一次,结果这回出现一个错误:

llvm-gcc-4.2: Invalid arch name : armv7s

对于水果的东西还真是不太熟,搞了小半天终于明白了,armv7s是IPhone 5的A6处理器的指令集,上次编译的时候还没有,用的是armv7,现在Linphone已经支持IPhone5了,所以是我的gcc太老了支持armv7s。我的XCode是4.5,用的llvm-gcc是XCode自带的,但是MacPorts好像也有gcc,所以昨晚走的时候一边port upgrade一边重新安装XCode Command Line Tools,结果早上来的时候已经可以编译了,只不过搞不清楚倒是哪个升级的gcc,:), 估计还是xcode的可能性比较大。现在的gcc版本是:

gcc version 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.11.00)

不过倒是也看到有老外说未经真机测试不要发布支持IPhone5的应用,说的也有道理,升级到iOS6的4s确实不能替代IPhone5来做测试,好吧,反正IPhone5快上了,搞一台来做测试吧。

20121207: 晕死了,发现上次编译成功是因为那天下班前我把Makefile里头的armv7s改成armv7了,然后又升级了port和xcode,结果就忘了Makefile这回事儿了,所以实际上新代码还是按照armv7编译的,不是armv7s。这个问题还在,还得再看看。

VS2008找不到windows.h和mt.exe

改了一个VS2008的C++ Project,结果编译的时候报了一个让我大跌眼镜的错误:

fatal error C1083: 无法打开包括文件:”windows.h”

这个windows.h看名字很牛x的样子,难不成是VS2008没装好?大概看了一下,有人说是路径问题,windows.h应该在c:Program Files (x86)Microsoft SDKsWindowsv6.0A下面,可是俺的下面没有啊,隔壁的V5.0下面倒是有,可是也不好用。有人说要装Platform SDK,结果说setup was started in a non-native or WoW environment。这个倒是好理解,估计是不支持win7,直接下了个Windows SDK for Windows 7,是下载安装的,全部安装的话有2.3G,有必要搞这么大么。。。我只选Windows Headers and Libraries,结果也有180M,搞笑的是我就算把所有的都不选他也需要110M的空间,似乎VS2008安装的时候也这样,就算是有非装不可Features那你列一下也不是太麻烦吧,何必搞这么诡异呢?

不过总算这个问题是解决了,然后就是说找不到msado60_Backcompat_x64.tlb,这个好办,直接下载一个就可以:http://download.microsoft.com/download/6/4/3/64318ED2-7E18-4A5C-80E2-9BDA0DF02DB3/msado60_Backcompat_x64.tlb

最后一个问题最搞笑:

error PRJ0003 : 生成”mt.exe”时出错。

让我愣了好久,我的项目里头没有一个叫mt.exe的目标文件啊,看了一下生成的日志文件,前面有一行说:

正在创建命令行”mt.exe @。。。。。。

老天爷啊,真是神一样的翻译啊,C盘搜了一下,没找到mt.exe。

找了一下,答案也是五花八门,有的说要清除一下解决方案,这个对我来说显然不是;也有人说权限不够,结果用管理员权限打开VS2008之后问题更多了,原来8个项目还有两个能编译的,结果那俩也不行了;也有的说要安装 ATL Server的,看了一下ATL Server的介绍觉得也不太靠谱;也有的说是要改环境变量,有的说加VS包含路径,这些都不行。最后看到有一篇文章上讲到:

3、error PRJ0003 : 生成”mt.exe”时出错

原因未明

解决办法:

中文版VS:右键点击工程,选”属性”==>”配置属性”==>”链接器”==>”清单文件”==>”生成清单”==>设为”否”

这个能解决问题,但只是把执行mt.exe的那一步省略了而已。最后看了一下,说mt.exe是Visual Studio自带的Manifest处理程序,可是打开VS2008安装程序之后也看不到是哪个组件,最后搜了一下,微软网站上找到一篇文章:http://msdn.microsoft.com/en-us/library/windows/desktop/aa375649%28v=vs.85%29.aspx,说了它属于Windows SDK的Side-by-Side Assembly Development Tools,原来还是这个Windows SDK啊,打开安装程序一看,里头有一个Windows Development Tools,装上就可以了。

说实在的VisualStudio还真是难用啊,感觉这些东西直接全部安装最靠谱。。。

Linphone iphone编译

前面已经在CentOS上编译过Linphone安卓的源代码,但是IPhone版的需要xcode with iPhone OS SDK and MacPorts,想来这东西在CentOS上是搞不定了,正好也不着急,索性等了几天让搞iOS的同事去试试看。

但是他还是比较擅长UI开发,对于底层编译之类的不太擅长,遇到了一些问题之后就走不下去了。那么还是自己来吧,连到他的Mac Mini上去弄。虽然没有用过OS X,不过既然是基于Unix的那应该也差不离吧。

首先试着shh到Mac上,结果22端口没看,搜了一下看到:Mac OS X 10.6.2 (Snow Leopard)中, OpenSSH Server是已经安装了的,只是没有启用而已。Systerm Preferences -> Shareing ,在左侧列表中选中 “Remote Login”即可。这个很快就解决了。

然后就是中文显示问号的问题,在Puttty里头我已经设置了字体和字符集了,还是不行,后来看了一下可以登录后:
LANG=zh_CN.UTF-8
export LANG
其实还是OS X自身设置的问题,不过我也不想去改别人的开发环境,而且有没有中文也没所谓。

README上说需要先安装xcode with iPhone OS SDK and MacPorts,这两个前面已经安装过了,后面就是安装一些编译的工具,和Android的类似。在自动安装doxygen的依赖包出错:
—> Configuring ghostscript Error: org.macports.configure for port ghostscript returned: configure failure: command execution failed Error: Failed to install ghostscript
找了一圈,这个问题似乎不太好界定,有人提到需要更新macports:sudo port selfupdate,但是也遇到问题:
Installing new MacPorts release in /opt/local as root:admin; permissions 0755; Tcl-Package in /Library/Tcl
后来加了-d参数以后得到:
configure: error: in `/opt/local/var/macports/sources/rsync.macports.org/release/tarballs/base’: configure: error: C compiler cannot create executables
这个说法也不一,也人说需要最新的xcode,让同事看了一下,说刚刚更新过iOS 6,应该就是最新的了,最后有人提到需要安装Xcode command line tools,一问果然没安装,从Xcode的设置里头安装就可以,就是需要下载,费点时间,也不去更新MacPort了,直接再安装doxygen,这次结果就不太一样了,一堆输出之后得到:
Error: graphviz cannot be built while nawk is active.
Error: Please deactivate nawk and try again.
这次的提示就很清楚了,直接sudo port install doxygen就可以了。

后面建连接libtoolize和/usr/bin/string的时候发现已经存在了,指向也对,那就可以了。

最后make all的时候还是遇到了网太慢SILK_SDK_SRC_v1.0.8.zip下载失败的问题,直接copy过去了事儿。

后来下载其他包的时候还是失败过一次,但是最后还是成功了,虽然make的过程还是很慢。

PS: 这篇是边编译边记录,所以到最后一看,其实很没有内涵,总结起来就一句话,别忘了装Xcode command line tools,但是好歹也写了这么多了,还是发吧。

解决新浪连接(sina-connect)插件无法自动同步微博的问题

刚才把新浪连接(sina-connect)装完之后也没有测试,就发了上一篇文章 WordPress连接新浪微博插件:wp-tsina和sina-connect,结果悲剧了,微博上没有同步更新。

于是找原因,上面要求说WordPress 3.0以上、PHP 5.2以上和支持CURL扩展,看了一下也都没问题。

后来在日志里找到一行:

[24-Oct-2012 07:39:22] PHP Fatal error: the-problem-when-sycn-wordpress-post-to-tsina-via-sina-connectin /home3/shelunet/public_html/wp-content/plugins/sina-connect/sina-connect.php on line 359

打开sina-connect.php 到359行是这样的:

function get_sina_short_url($long_url){
$api_url = ‘http://api.t.sina.com.cn/short_url/shorten.json?source=744243473&url_long=’.$long_url;
$request = new WP_Http;
$result = $request->request( $api_url);
$result = $result[‘body’];
$result = json_decode($result);
return $result[0]->url_short;
}
这行看不出问题来,但是应该是解析取短链接结果时出错了,所以就试了一下在浏览器中输入:

http://api.t.sina.com.cn/short_url/shorten.json?source=744243473&url_long=https://shelu.net/sync-wordpress-to-tsina-wp-tsina-and-sina-connect/

结果得到:

{"request":"/short_url/shorten.json","error_code":"401","error":"40109:consumer_key_refused!"}

看起来是这个AppKey出了问题,这个好办,网上找一个AppKey试试(我就不给具体的key了,可以自己搜一下新浪微博 AppKey,应该能找到一大堆的),结果就是

[{"url_short":"http://t.cn/zluzKQn","url_long":"https://shelu.net/sync-wordpress-to-tsina-wp-tsina-and-sina-connect/","type":0}]

应该就可以了,所以只要把sina-connect.php 354行的那个Source=后面的数字改掉就可以了。

当然最保险的还是自己去申请一个AppKey,那样你可以保证他不会过期,:)

PS: 刚才看到新浪连接下面的评论里头也有好多人说遇到了这个问题。。。希望大家能用我的方法解决