当前位置

技术

技术

用 python 查询纯真 IP

http://blog.daviesliu.net/2005/05/18/192847/ 的留言里面找到 scaner(我想留言的这个is应该就是'一个好白萝卜的坑') 写的一个 python 程序:http://scaner.googlepages.com/iplocater_20060301.py

下载后首先试的是我刚工作那2年长期占据的静态 IP: 202.113.18.2,就发现了结果有乱码,对比着 Luma 关于 QQWry.Dat 格式的文档,写了一个小 patch,目前工作良好

  1. 8c8
  2. <               f = file(dbname, 'r')
  3. ---
  4. >               f = file(dbname, 'rb') #windows platform
  5. 49c49,53
  6. <                       aArea = self.getString(o)
  7. ---
  8. >                       byte = ord(img[o])
  9. >                       if byte != 1 and byte != 2:
  10. >                               aArea = self.getString(o)
  11. >                       else:
  12. >                               aArea = self.getString(self.getLong3(o + 1))

不过还是觉得这种二分查找法稍微慢了点,最好是能把所有数据 load 到一棵 radix tree 里面去,这两天有空试试看

Topic: 

失败

周末因为国民党立法委员选举大败民进党,从而准确地预测到台湾股市大涨。却没有联想到连带福建版块和三通概念股也会大涨。

厦门港务(000905)和厦门空港(600897)连续两天都是涨停。

还是不够敏感啊!继续修炼ing……

Topic: 

从瘾科技上看到的两款产品

一个是打着 Swarovski 品牌的科技产品,Philips 制造

虽然已经有瑞士军刀USB闪盘在前,但看到 Swarovski 的东西那叫一个惊艳。

兴冲冲的告诉老婆这东西的存在,但被告知更喜欢 LG-Prada 手机(同时也更贵),立刻心里拔凉拔凉的

另一个好东西是 D-Link 的数字相框。我确实很喜欢这个主意:把数码相片通过 RSS 发布,然后在湖北的爷爷奶奶,在天津的姥姥姥爷,就可以很方面的透过这个产品看到我们达达最新的成长照片啦。

如果有什么节日祝贺也不要用短信或电话这么恶俗的工具,直接用手写板写上祝福语,转成图片更新过去就成了。

不知道这玩意儿耗电怎么样,俺们可是要建设节约型社会的啊...

Topic: 

家庭存储

我家有5块硬盘,除了笔记本里的那块外,还有2个3.5寸,2个2.5寸的躺在硬盘盒里.

昨晚需要用一个3.5'盘里的数据,手忙脚乱的接上线,通电,然后闻到一股糊味,大惊赶快断电,后来检查才发现是变压器烧了,而不是我的硬盘,真是万幸。

但移动硬盘就这么用着,说不定哪天就出了问题。现在硬盘是够便宜了,免费的网络存储服务好像也不少,但怎么还没有一套特别好的家庭存储解决方案呢?

从我自己的需求来讲,我希望的方案是这样的:

* 首先是需要一个很强悍的客户端软件,根据用户每天产生的数据,判断出用户的行为模式,自动去收集整理用户可能要备份的文件
* 文件分三类:文本的(doc、pdf、xls)、私人多媒体文件(主要是来自数码相机、DV)、公共型多媒体文件(mp3、flv、wmv、avi...)
* 文本的可以通过收费的网络存储服务存储起来,而且是可搜索的
* 公共型多媒体文件完全可以考虑利用 p2p 网络实现分布式存储。
* 私人多媒体文件比较麻烦一些。单单说数码照片这部分吧,少量是可以存储在收费服务上的,更多的恐怕是要刻录在光盘上了;因此这个软件需要能对光盘进行管理,包括索引、tag 等等的功能。DV 数据也差不多是如此,需要能对光盘进行管理。

综上所述,该解决方案应该包括:
a. 客户端软件(这个是核心)
b. 网络存储服务
c. p2p 分布式存储服务
d. 可刻录光盘销售及其质量保证服务
客户端软件从功能上看则大概是 google desktop search、picasa、nero、emule 等等综合起来的一个怪物

驯服这个怪物不是件简单的事情,会有哪个厂商来干这件事情?现在已经有人在做类似的东西了吗??

Topic: 

最简单的 python web server

有时候希望在机器上起一个 web server,用来做文件共享。前两天在邮件列表上看到一个好方法:在希望共享的目录下运行

python -m CGIHTTPServer

BTW: 最近练习《上海滩》中,觉得如果有可以自定义键盘区域音色的电子琴就好了,可以玩两种乐器合奏... 可能这就属于比较专业的设备了.

Topic: 

让 del.icio.us 每天自动 post 到 Drupal

del.icio.us 有一个 "daily blog posting" 的功能,就是通过 blogapi,每天某个时间自动把内容发表到 blog 上。如果要在 Drupal 站点上启用,步骤如下

1. enable blogapi module
2. 配置 blogapi(admin/settings/blogapi),使之支持 blog 类型的发布
3. Drupal 对 blogapi 的支持和 del.icio.us 不太一样,主要是对 XMLRPC 的数据类型申明不同,需要修改 modules/blogapi/blogapi.module:
 3.1 找到 metaWeblog.newPost,把它下面第二行的

  array('string', 'string', 'string', 'string', 'struct', 'boolean'),

  改成

  array('string', 'int', 'string', 'string', 'struct', 'int'),

 3.2 找到 mt.setPostCategories,把它下面第二行的

  array('boolean', 'string', 'string', 'string', 'array'),

  改成

  array('boolean', 'int', 'string', 'string', 'array'),

4. 设置 del.icio.us:
 4.1 out_name 和 out_pass 就是用户名和密码
 4.2 out_url 是 http://yoursite/xmlrpc.php
 4.3 out_time 随便设,我用的是 0,这样每天早晨 8 点自动 post
 4.4 out_blog_id 我用 1 (虽然我在 Drupal 里面的 userid 是 3)
 4.5 out_cat_id 我就是为其创建了一个专门的 taxonomy/term 的 id

进一步的技术细节:
我发现在启用 blogapi 后,首页里面的 head 标签内就自动增加了一个 type 是 "application/rsd+xml" 的 link 标签,地址是 "http://www.dup2.org/blogapi/rsd",这样支持 blogapi 的软件,比如 MS 的 Live Writer,就可以从中获得该站点支持的 API 类型。
如果不做 hack,del.icio.us 传递的参数将无法被正确识别,会报一个"服务器错误。无效的方法参数" (server error. invalid method parameters)

推荐一个数据恢复公司

记得佳盛修过两回硬盘,虽然每次海波和我也忙得鸡飞狗跳,但直到自己来承担业务的主要责任,才能真切体会佳盛当时郁闷和无奈的心情。

RAID5 + Hotspare,每天定期早晚各一次机房巡视,按理说已经很安全了。但偏偏不知道哪里出了故障,掉了2块盘后没有报警,等第三块盘坏,一切都 over 了。

供货商检查后声称,RAID5信息已经被破坏,完全不可恢复!

最后同事介绍到护航时代,经过一天的处理,居然数据被完整的恢复出来了!!

根据人品守恒定律,开始怀疑未来几年的运气是不是已经这次提前用完。:)

附:黑色星期一带来的好处是,看到俺很郁闷的样子,晚饭后家人很宽容的把碗洗了,省去一次家务劳动,hohoho~~~

再附:这里发下宏愿,2008上半年一定要拿出邮件的存储备份方案,下半年实现部署,再也不想体会那种绝望的感受了(NO的同事不太信任新来这批DELL的柜子)

Topic: 

不是死循环的死循环

碰到一件怪事。

是测试某软件产品,在我们的 4-cpu 的服务器上运行,用 top -H,可以监视到其工作主进程的每个线程的情况。

问题是不定期的有一个(甚至2个)线程占满 cpu(100% usr),看起来是典型的死循环;但怪就怪在这个死循环的线程能自己恢复正常,我设置了 top 每 10 秒输出日志,结果还发现每次占满 cpu 都是大约整整 3 分钟的时间,然后负载就下来了。

很容易得出结论,这里还有一个控制线程,每隔一定的时间检查各个 worker 的情况,发现不对了就恢复之...

于是把这个现象报告给 ISV,对方觉得奇怪,我们没有这种定时检查的机制啊?怎么会每次都正好 3 分钟?

显然这是一个诡异的 bug,到现在还没有查出。
而我有时候就想,如果没有主动控制?我怎么才能写出一个正好执行 3 分钟的死循环 bug 呢?

昨天突然想到这么一段代码:

  1. int main()
  2. {
  3.     int i = 1;
  4.     while (i != 0) i++;
  5. }

在 PIII 700 上跑了一下,嗯,成功的写出一个正好 45 秒内占满 cpu 的死循环。

不晓得最后找到的 bug 是否如我的猜测

Topic: 

Memory fragmentation

Firefox 吃内存的问题已经困扰它的用户很长一段时间了,每次无奈的看到 Task Manager 里占三四百兆的 Fx,程序员的心里恐怕都会浮起 "memory leak" 这个词。但是,据 Mozilla 开发人员 Stuart Parmenter 最新的调查表明,问题根源未必全是程序员粗心大意忘了 free,而很可能是内存碎片占了很大因素

怎么来避免内存碎片呢?只能去寻求更好的 malloc/free/realloc 库了。在 Windows 平台上,自 XP 和 Server2003 开始,微软提供了一个叫 Low-fragmentation Heap 的机制,以解决碎片问题。Stuart Parmenter 已经编译了一个基于 Low-fragmentation Heap 的 fx3-b1 build 供大家测试。【Stuart Parmenter 还提供了一个叫 RAMBack 的插件来回收内存】

在 Linux 或其它平台上怎么办呢?有热心人在评论里面提到 "Use Doug Lea's malloc. It's far better than Windows Low Frag heap",而且还指出了另外的一个方案: reaps (http://www.cs.umass.edu/~emery/pubs/berger-oopsla2002.pdfhttp://slashdot.org/comments.pl?sid=120623&cid=10160124)

另外,感觉由于 webkit 在 Mobile 平台上的成功 (iphone 和 gphone),Mozilla 也开始重视移动终端了,要不怎么这么费劲的去找用户早就抱怨了很长时间的内存问题,并且计划重新启动 Minimo

Topic: 
订阅 RSS - 技术