技术

Postfix 之 tcp_table

目前运行的 MTA 是在 Postfix 的一个很古老的版本上修改而来,再加上长期以来断断续续打了不少补丁,原始代码和修改代码纠缠太深,以至于很难把这些修改合并到最新的 Postfix 版本上;这次 MTA 改造的目标就是不修改 Postfix 任何代码,完全通过 Postfix 所支持的接口或协议实现需要的特性,这样以后可以跟着 Postfix 进行同步升级。

首先要解决的就是收件人地址查询的机制。

Postfix 支持一大票查询表(lookup table)格式,包括什么 unix、nis、bdb、cdb、ldap、mysql、pqsql 等等,但是对搜狐来说,能用的只有 tcp_table

简单地说,tcp_table 只是一个面向网络连接的协议描述,可以用它来封装任何形式、任何目标的用户查询。只可惜 Postfix 一直没有对它提供正式的支持,需要打开 SNAPSHOT 定义才能获得这个功能。

为了提高性能,可以在实现 tcp_table 的 daemon 里面加入用户名查询的缓存,以及连接用户名数据库的连接池。还要说的是,这个 daemon 很适合用 Python 来实现,:)

今日发现

http://ftp.apnic.net/stats/apnic/delegated-apnic-latest (将近1M的文本文件) 就可以得到亚太地区的 IP 分配详情...大概是详细到各个 CIDR 的分配时间。

CN 的 IPv4 分配目前共有 1252 条记录,从里面简单分类一下,倒是很容易把省份都挑出来,虽然不如纯真IP牛,但做个天气预报什么的还是没有问题的。

BTW: 说到纯真IP,突然觉得它的运作很类似 wiki。

Topic: 技术

今日发现

1. safari 3.0.2 beta 发布。不但中文显示好了,搜狐通行证的登陆框也不再 crash 了。

搜狐通行证在 safari 3.0 beta 下崩溃的问题害我担心了好多天,还以为所有 Mac 用户都是这个体验呢,后来问了霍炬 知道 Safari 2 没有问题才放下心来。

2. 从 IEBlog 上看到一堆 IE 的 Web 开发工具列表,里面提到一个免费的工具 Web Development Helper,包括 HTTP Traffic 功能,强烈推荐!

不过介绍的工具没有包括 sohu 开发人员用的比较多的 HttpWatch,莫非我们至out了???

3. 亨利转会巴塞罗那!!!!阿森纳前景暗淡....祝亨利能在西甲获得成功。

Topic: 技术 运动

今日发现

1. 从 sf 的 Hottest 10 Apps 里面发现一个叫 Zenoss 的项目,和 Nagios、OpenNMS、Zabbix 类似,属于网管平台。

吸引我的一点是它是用 python/zope 实现的..

2. 知道 Ubuntu 的 No.1 bug 是什么吗——Microsoft has a majority market share

Microsoft has a majority market share in the new desktop PC marketplace. This 
is a bug, which Ubuntu is designed to fix.

Non-free software is holding back innovation in the IT industry, restricting access 
to IT to a small part of the world's population and limiting the ability of software 
developers to reach their full potential, globally. This bug is widely evident in 
the PC industry.
  Steps to repeat:
    1. Visit a local PC store.
  What happens:
    2. Observe that a majority of PCs for sale have non-free software pre-installed.
    3. Observe very few PCs with Ubuntu and free software pre-installed.
  What should happen:
    1. A majority of the PCs for sale should include only free software like Ubuntu.
    2. Ubuntu should be marketed in a way such that its amazing features and 
benefits would be apparent and known by all.
    3. The system shall become more and more user friendly as time passes.

3. 找到一个查询 DNS 记录的在线工具。可以知道国外是怎么解析你的域名记录的,除了 DNS 之外,该网站也提供 traceroute 等在线工具。

Topic: 技术

Javascript 识别 Opera Mini

自从搜狐通行证上线后,搜狐所有的产品就无法支持 Opera Mini 的登录了。对于一个 Opera Mini 用户来说,这事就成为俺一个很大的心病,现在终于有时间来考察怎样来支持 Opera Mini

解决方法就是对于这种 js 支持比较落后的浏览器,更改 Ajax 认证方式为 HTTP POST。就 Opera Mini 而言,麻烦之处就是如何在 html/js 端把它识别出来。

mini 3.1 很有意思,window.navigator.userAgent 得到是 "Mozilla/4.0 (compatible; MSIE 6.0; ; Linux i686) Opera 7.50[en]"(去 http://www.operamini.com/demo/ 访问 passport.sohu.com/testindex.jsp),估计在服务器端的引擎是在 Linux 版的 Opera 7.5 基础上进行的,因此搞了这个乌龙。

后来又查询了一下 window.screen.width,发现它的宽度是 800,于是再增加这个判断条件来做 Opera Mini 的识别...预计支持 OperaMini 登录的搜狐通行证将于下周正式上线。

btw: Opera Mini 4 看起来这方面的支持完善了很多,userAgent 显示为 "Opera 9.50 (J2ME/MIDP; Opera Mini/4.x.xxxx/x; U; en)"。可以去 http://www.operamini.com/beta/simulator/ 体验一下小屏幕浏览的乐趣!

Update: 刚刚测试中发现 OperaMini 3.1 的高度是 5000,这个特色比较显著,可以利用在 js 端做识别。不过 OperaMini 4 的高度和宽度就和设备上的像素一致了
如果要遍历 javascript 的 host object,这里有个在线工具挺不错

Topic: 技术

Opera Mini 4 Beta ... 以及其它

Opera Mini 4 Beta 现在已可以公开下载

最新特性是 Zoom View. 功能类似 Nokia 基于 Webkit 的 OSS Browser. 用起来确实很酷,稳定性看起来也远远比 Nokia 强。不过在这种模式下的翻页操作就不能再用→和←了,必须用数字键,对于 E61i 的键盘用户来说,是个挑战。

说起 Opera Mini,就不得不同时想到 Minimo 开发者半年前神秘的声明:"...help improve the lives of Firefox users that have mobile phones without having to build a full browser for the mobile handset..."

这段声明怎么看怎么像 Mozilla 打算做一个 Firefox Mini,或许会类似 Opera 那样部署一个中央的 Proxy 服务器,但我觉得更酷的应该是能够通过自己机器上的 Firefox 进行网络冲浪——这样的话不用担心浏览隐私被 Mozilla 或者 Google 拿到,而且也可以自己定制一套 Adblock 之类的规则控制在手持设备上看到的内容。

BTW: 在苹果正式发布 iphone 之前做个简单预测——它不大可能会如同 apple fans 所想象的那样成功,顶多顶多就是当年 Moto V3 的势头。况且,每卖出一部 iphone,就少卖一部 ipod

Topic: 技术

浏览器混战

节选一下最近一周内我看过的和浏览器相关的新闻

6月5日
Mozilla release Camino 1.5,一个 Mac 平台上的 Gecho 内核的浏览器

6月7日
Opera 洋洋得意的指出,根据某市场报告显示,OperaMini 的占有率已经超过了 Mozilla(是 Mozilla,不是 Firefox)

其实这个趋势挺正常,即使俺的E61i上已经内置了一个很夸张的基于Webkit的浏览器,但基本上俺平时还
是用OperaMini,因为它比缺省的浏览器稳定太多,流量还小。
以后手机、游戏机、冰箱微波炉、咖啡桌什么的上网设备数量肯定远远超过PC,这个市场前景广阔啊

6月8日
Opera 即 Wii 之后,又发布了可在任天堂掌机 NDS/NDSL 上跑的浏览器。

6月11日
Apple 推出 Safari for Win32,虽然仅仅是 Beta 版本

......

再考虑上什么微软的 Deepfish,Mozilla 的 Minimo for WM(还有热心人将其移植到OLPC上),Safari for iPhone。现在的浏览器市场已经不再局限于 MS vs Mozilla vs Opera 的桌面大战,而是随着 Apple、Nokia 的加入,手持设备的兴起形成了全方位的混战。

Topic: 技术

解码 HTML 中的 unicode entity

中午 zzh 发来一个问题,如何对抓下来的网页中的 unicode 字符串,诸如北京市一二八中学
进行解码?

首先想到的是最熟的 libxml2/HTMLParser。简单试了试 xmllint,无解;又大致看了看源代码,貌似没有专门处理的部分。

再转到 Python 的 BeautifulSoup。看了看文档,也貌似无解。

最后只好 google 之,发现 php 的 html_entity_decode 是一个现成的函数。赶快推荐给 zzh,发现他已经自己动手写了一个解析函数了,汗....

最后要说的是,在 google 过程中,发现 Perl 似乎也有现成模块来做这个工作,不过偶不会 Perl,没有尝试。另外就是发现一个叫李卫公的 blogger 在 Python 上也写了一个简单的程序来解码,看起来是一个正则表达式牛人,推荐一下。

Topic: 技术

S60 导入地址本

已经入手 E61i !!!

地址本数据来自古老的 3650,格式见用 Python 备份 S60 的地址本

开发过程中碰到这么几个问题:

1. 第一次安装 1.3.x 高版本的 PyS60,一共需要两个 sis 包,分别是 PythonForS60_1_3_21_3rdEd_selfsigned.SIS 和 PythonScriptShell_1_3_21_3rdEd_selfsigned.SIS。一开始不知道还需要 PythonScriptShell,找了半天 python 图标,还以为自己弄错了。另外我一开始安装在卡上,程序无法执行,删除后安装到内存上就好了。

2. PyS60 的从 UTF-8 字符串 decode 成 unicode 有问题。单独的“张”这个字是无法 decode 的,但完整的名字或哪怕是“张\n”都可以正确 decode。还没有测试是不是单独的汉字都有这个 bug;反正是为了这个问题调试了半天。

3. 从文档所说,contacts.open(mode = 'n') 应该是创建一个全新的、空白的联系人数据库。实际上不是这样,效果和 mode = 'c' 是一致的。可能对于系统的联系人数据库的确是有这个限制。

  1. import contacts
  2. f = open("E:\contacts.txt")
  3. db = contacts.open(mode = 'c')
  4. n = 1
  5. count = 0
  6. for line in f:
  7.     count = count + 1
  8.     if n == 1:
  9.         n = 0
  10.         contact = db.add_contact()
  11.         title = line.split(", ")
  12.         #print title[0], title[1].decode('UTF-8')
  13.     else:
  14.         if line.strip() == "":
  15.             contact.commit()
  16.             n = 1
  17.         else:
  18.             info = line.split(", ", 1)
  19.             try:
  20.                 v = info[1].decode('UTF-8').strip()
  21.                 #print info[0], v
  22.                 contact.add_field(info[0], v)
  23.             except:
  24.                 print 'add_field', title[0]
  25.                 break
  26.  
  27. f.close()
Topic: 技术

用 Python 备份 S60 的地址本

前几天 PuTTY 发布了 0.60,升级后发现 蓝牙终端和 IVT BlueSoleil 连接没问题了,兴奋之余,写了一个备份地址本的程序(俺的是最古老的 S60 系统,还好可以用 1.3.1 的 PyS60)。

  1. import contacts
  2. f = open("c:\contacts.txt", "w")
  3. db = contacts.open()
  4. for i in db:
  5.     contact = db[i]
  6.     #print contact.id, contact.title.encode('utf-8'), contact.last_modified
  7.     f.write('%s, %s, %s\n' % (contact.id, contact.title.encode('utf-8'), contact.last_modified))
  8.     fields = contact.find()
  9.     for i in fields:
  10.         if i.value != '':
  11.             #print i.type, i.value.encode('utf-8')
  12.             f.write('%s, %s\n' % (i.type, i.value.encode('utf-8')))
  13.     #print
  14.     f.write('\n')
  15.  
  16. f.close()

回头买了新手机后再写一个导入 contacts.txt 的程序,目标初步定在 E61i

Topic: 技术
订阅 RSS - 技术 | BT的花