2007年4月4日

决定把blog搬到baidu去,baidu的速度和空间容量都不错,就是不知道怎么把原来写的东西移过去。

新地址:http://hi.baidu.com/antzhi

posted @ 2008-02-18 11:16 小蚂蚁 阅读(165) | 评论 (0)编辑 收藏

服务器换了程序后手机上的Client出问题了,每次连接后只能播放第一个frame,今天抽了点时间检查程序,发现问题出在服务器在每一frame后加了个\r\n,手机上的程序在getHeader时没考虑到,加了几行代码搞定。

posted @ 2008-02-13 12:51 小蚂蚁 阅读(165) | 评论 (0)编辑 收藏

花生壳的IP地址和实际公网的地址不一致问题一直没得到解决,询问客服也没有解决的办法,通过观察,我发现不是每次拨号都会出现IP不一致的情况,说明我的ISP只在一定范围内安装了NAT转发的设备,自己写了个脚本,比较花生壳和wan ip,如果不一致,就从新拨号分配一个新IP,运行了半个月,效果蛮好,可惜了我花100元升级专业用户.

--------------------------------
#!/bin
# wan.sh
#get wan ip from TP-LINK route

wanip=`wget --user=admin --password=admin -q -O - http://192.168.2.1/userRpm/StatusRpm.htm |\
grep "00-50-FC-77-C9-06" |\
awk -F, '{print $3}' | tr -d ' "'`

echo "$wanip"


----------------------------------------------

#!/bin/sh
# fixip.sh
#fix vicp ip

export PATH="/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/phlinux"

disUrl='http://192.168.2.1/userRpm/StatusRpm.htm?Disconnect=断%20开&wan=1'
conUrl='http://192.168.2.1/userRpm/StatusRpm.htm?Connect=连%20接&wan=1'
wg='wget -q --user=admin --password=admin -O - '

c=0
while [ "$c" -lt "5" ]
do
  wip=`wan.sh`
  vicp=`nslookup myhome.vicp.net | tail -n2 | grep "Address" | awk '{print $2}'`

  if [ "$wip" == "$vicp" ]; then
    echo "Match done."
    exit 0
  fi

  echo "my wan ip : "$wip
  echo "myhome.vicp.net : "$vicp
  echo "Fix ip ..."

  if [ -n wip ]; then
    echo "  disconnect PPPoe ..."
    `$wg $disUrl > /dev/null`
    sleep 3
  fi

  echo "  connect PPPoE ..."
  `$wg $conUrl > /dev/null`
  sleep 37

  c=`expr $c + 1`
done

posted @ 2008-02-11 18:36 小蚂蚁 阅读(772) | 评论 (1)编辑 收藏

半夜醒来睡不着,干脆穿上衣服倒腾我的PSP,研究了PSPTube的通讯协议,发现其实是依靠youtube网的xml文件来实现节目列表,数据结构很简单.正好原来想用PSP PMPlayer Advance来当Motion的Client计划一直没成功,于是对PSPTube做了点调整,在服务器写了个生成xml的脚本,整个过程花了四个小时,完工时刚好天亮.
 

posted @ 2008-02-08 23:55 小蚂蚁 阅读(223) | 评论 (0)编辑 收藏

kmip解释的IP老有问题,没办法换成vicp

posted @ 2008-01-18 11:49 小蚂蚁 阅读(141) | 评论 (0)编辑 收藏

打算把服务器的timezone由UTC改成CST,但修改了/etc/timezone、/etc/default/rcS和/etc/localtime都没有用,在/etc/profile里加上export TZ='Asia/Shanghai'后普通用户登陆没问题,但用su切到root后timezone又变回UTC,实在没办法了在/etc下执行grep -e "UTC" -f *,结果在environment里发现TZ="UTC",原来是前几天做实验改后忘改回来了,又是一个因忘事犯的错误,浪费了不少时间,晕啊。

posted @ 2007-12-23 12:13 小蚂蚁 阅读(150) | 评论 (0)编辑 收藏

直接从deb里安装只得到btsco,snd_bt_sco要从source里编译,真是麻烦,服务器的硬盘太小,不想装linux-source了,只好等明天从本子编译好再拷贝过来.

posted @ 2007-12-22 01:02 小蚂蚁 阅读(278) | 评论 (0)编辑 收藏

今天家里 服务器连不上了,对VectorLinux早已看不顺眼,但一直懒得换掉,刚好乘这机会换成比较顺手的Debian,把分区设置成ext3格式,apt-get的确好用,用Mini Install CD安装了基本系统后从网上装shttpd、gspca、subversion、java,公司的2M带宽节约了不少时间。内核就将就用安装盘上的,重编译内核太麻烦,以后有时间再说了。

posted @ 2007-12-18 01:03 小蚂蚁 阅读(178) | 评论 (0)编辑 收藏

前几天有个大学生找到我要写个程序,又不想让我知道程序用在什么地方,画了半天xyz 我大概知道他的意思,我问他是不是用来买彩票的,他不好意义的确认了.真想和他讲讲概率论,但看他研究得这么起劲也不好打击他,何况写这程序我可以收一笔小钱来买点书.算法是这样的:某个游戏有总数个N球,每次将会出M个球,如果你买B个球的话就能挣钱.现在要写个程序,随机在N个球里找出A个球(N>M>A>B),A个球里找出所有B个球的组合,并用这些B个球去匹配出M个球的历史记录,找到最远没出这B个球的买法A.看起来复杂,其实可以通过一个镶套的递归算法来解决,我用了单独一个线程来和处理界面的程序分开,把递归算法用个Recusion的C++类封装起来(幸亏没用C的写法,不然写到后面就惨了),加上点ADO的数据库代码,完工!
但我不认为那小伙子能用这程序挣到钱,因为概率论的精髓就是:本次发生的事件和上次无关.

posted @ 2007-11-28 00:51 小蚂蚁 阅读(228) | 评论 (0)编辑 收藏

VCam SDK正是我要找的东西,除了那个水印外没有其他限制,估计加密机制在驱动层里,我要学的东西已经够多了,没打算为了解这东东专门去学windows的驱动编程,但还是想碰下运气,跟踪了设置授权码的函数,找到DeviceIOControl的时候脑子里有个念头闪了一下,找来IDA反编译VCam的驱动,查找Function Code,接下来继续看...写这程序的老兄估计和我一样懒,为了调试方便加了句...呃...加了句"芝麻开门"!呵呵,美好的一天.

posted @ 2007-11-23 23:15 小蚂蚁 阅读(417) | 评论 (5)编辑 收藏

收到从当当发来的汪德贝多芬交响乐全集,自从听了汪德指挥的舒伯特第八就开始对他感兴趣,这套碟也没让我失望,录音的质量很好。三十块的价钱算是超值了。

posted @ 2007-07-20 12:02 小蚂蚁 阅读(172) | 评论 (3)编辑 收藏

VIDEO 
接了两个USB摄像头后,用了延长线的工作不正常,估计是USB的供电问题,回头换根好点的试试看。

posted @ 2007-07-13 08:53 小蚂蚁 阅读(112) | 评论 (0)编辑 收藏

posted @ 2007-07-11 08:27 小蚂蚁 阅读(146) | 评论 (0)编辑 收藏

看了一大堆书后开始写vmotiond,基于多线程并发TCP守护进程还真不好写,要处理的东西很多,signal、mutex、IO timeout ...,头有点晕,写了一下午程序好歹可以运行起来了,代码很乱,有时间再整理,看到开几个窗口同时跑live video让我兴奋了好一阵子。目前用spca5xx的库用USB Cam做,bt8x8估计问题不大,起码FreeBSD下有bktr的东西,视频录制打算用berkeleyDB做载体,如果直接保存jpeg的话一天下来一个点有24*60*60个文件,太可怕了,对于我这简约主义者来说是不能忍受的。前两天被一大堆问题困扰得差点放弃在FreeBSD做改换Linux,幸亏坚持下来了。

posted @ 2007-07-10 23:44 小蚂蚁 阅读(129) | 评论 (0)编辑 收藏

本打算写个HttpConnection的子类HtdigestConnection把MD5的摘要认证封装起来,但发现因为HttpConnection是用Connector通过工厂模式生成的,让Connector.open()生成HtdigestConnection是不可能的,更糟糕的是认证操作必须在一次连接里完成,HttpConnection里没“Keep Alive”的机制。看来要用SocketConnection来自己实现HTTP层的东西,#$%^&*(

posted @ 2007-06-16 14:30 小蚂蚁 阅读(166) | 评论 (0)编辑 收藏

研究htdigest有一段时间了,在网上能找到的资料对具体的算法描述都很模糊,硬着头皮看RFC 2671对算法大概有了认识,然后参考shttpd的源代码终于搞清楚了,其实也很简单:
response=MD5(ha1:nonce:nc:cnone:qop:a2)
其中:
ha1=MD5(username:realm:password)
a2=MD5(method:uri)

学习源码是硬道理,网上写这些东西的人不是相互对抄就是对RFC 2671简单的翻译,要不然就是我太笨了,郁闷...

sniffer备注:
GET / HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)
Host: obol.kmip.net
Connection: Keep-Alive

 

 

HTTP/1.1 401 Unauthorized
WWW-Authenticate: Digest realm="My Site",
 nonce="3266a84c73f7e0e13f4fa6ba1d52d4ce",
 qop="auth"
 
Content-Type: text/html
Content-Length: 351
Date: Sun, 10 Jun 2007 23:52:57 GMT
Server: lighttpd/1.4.13

<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
         "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
  <title>401 - Unauthorized</title>
 </head>
 <body>
  <h1>401 - Unauthorized</h1>
 </body>
</html>

 

 

GET / HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)
Host: obol.kmip.net
Connection: Keep-Alive
Authorization: Digest username="test",
 realm="My Site",
 qop="auth",
 algorithm="MD5",
 uri="/",
 nonce="3266a84c73f7e0e13f4fa6ba1d52d4ce",
 nc=00000001,
 cnonce="5886b782b452993f7559cbd83b6b611b",
 response="932dd7f51f34d766997923876508e620"

 

 

HTTP/1.1 200 OK
Content-Type: text/html
ETag: "972667827"
Accept-Ranges: bytes
Last-Modified: Sun, 22 Apr 2007 05:10:52 GMT
Content-Length: 2878
Date: Sun, 10 Jun 2007 23:56:44 GMT
Server: lighttpd/1.4.13

posted @ 2007-06-11 10:40 小蚂蚁 阅读(203) | 评论 (1)编辑 收藏

写了个小MIDlet测试Image在我的NOKIA 3230上是否能加载jpeg文件格式,为把WebCam的Client移植到手机上做准备,写好的程序在模拟器上可以正常使用,但在手机上老报“版本错误”,倒腾了半天才发现NOKIA 3230是CLDC1.0的设备而不是1.1,超低级的错误,晕@#$%^&*(

posted @ 2007-06-10 20:59 小蚂蚁 阅读(173) | 评论 (0)编辑 收藏

因为MySQL的授权问题,想把手上的程序换成PostgreSQL,但装了PostgreSQL发现它比MySQL复杂多了,一下移植过去不太可能,要花些时间弄清楚后再说.

posted @ 2007-04-13 22:59 小蚂蚁 阅读(175) | 评论 (1)编辑 收藏

python升级到2.4.4后发现所有牵涉到socket的模块都无法使用,上网找相关资料,发现居然连作者也不知道原因,没办法从package-6.1-release里装回python-2.4.2,但py24-bsddb3无法使用,只能用py24-bsddb-2.4.2_2,被这奇怪的问题折腾到半夜3点,原来想倒腾berkeley db的兴趣被弄得一点也没了。

posted @ 2007-04-13 12:02 小蚂蚁 阅读(202) | 评论 (0)编辑 收藏

用spca5xx做的Livecam通过CGI在lighttpd下实现总有个问题:client网速慢的时候lighttpd的内存用量会不断增加,一直到把系统榨干,没办法硬着头皮看lighttpd的mod_cgi源码,通过分析发现:
 while(1) {
  int n;

  buffer_prepare_copy(hctx->response, 1024);
  if (-1 == (n = read(hctx->fd, hctx->response->ptr, hctx->response->size - 1))) {
   if (errno == EAGAIN || errno == EINTR) {
    /* would block, wait for signal */
    return FDEVENT_HANDLED_NOT_FINISHED;
   }
......
  } else {
   http_chunk_append_mem(srv, con, hctx->response->ptr, hctx->response->used);
   joblist_append(srv, con);
  }

mod_cgi通过hctx->fd从cgi读取数据,然后由http_chunk_append_men()提交到后台,但chunk_append却没有限制内存的使用,当从cgi读取的速度快过提交给client速度时内存用量就会不断增加。本来想通过signal来同步cgi的采样,但这样太麻烦而且会破坏mod_cgi的结构,试着在read(hctx->fd...前加个阻塞判断:
if (http_chunkqueue_length(server *srv, connection *con) > 102400) {
  return FDEVENT_HANDLED_NOT_FINISHED;
}
if (-1==(n=read(hctx->fd...

然后在spca5shot里每采样一frame加个sleep(1),运行几天看效果再说

posted @ 2007-04-04 12:09 小蚂蚁 阅读(783) | 评论 (0)编辑 收藏