当前位置

技术

技术

今日发现

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: 

什么是 CFS

前不久猛然惊觉自己好久没有关注底层的技术动向了,每天想的都是 web 上的东西,于是恶补了一下英文新闻......

于是知道了 CFS 这个东西。看名字貌似一个和压缩或者加密相关的文件系统,其实不然,它是 Completely Fair Scheduler 的缩写,RH 的大牛 Ingo Molnar 的最新作品。

今天又读到了 CFS 的一个特性:"automatic renicing of kernel threads such as keventd, OOM tasks and tasks doing privileged hardware access (such as Xorg)." 还记不久前 solidot 上的热文 终于放弃使用Linux作为开发桌面了 么?对廖宇雷的观点和行为我不做评价,只是这里告诉大家,内核开发者还是在尽力去解决如何让 linux kernel + X 更好的一起工作的问题。

第一次关注 Ingo 这个名字是因为他的 O(1) scheduler patch,看人家改进 os scheduler 如吃饭睡觉一般稀松平常,同是地球人,差别咋这大呢?

Topic: 

【转发】关于合作翻译po文件的一点灵感

发信人(原著作权人):xiaotian wu

目前的po文件翻译无论采用maillist(i18n的方式), svn(gadt的方式)还是web页面(ubuntu, debian)的方式, 我觉得效率都不高, 普遍地问题是参与的人少, 而且需要翻译者主动去加入并翻译, 这种效率其实是很低下的.
因此, 我的想法是如何充分发挥每个网民的能力, 扩大翻译者的数量?

通过这段时间的思考, 我有以下两个想法:
第一种方式:
采用google广告的方式, 做一个链接, 只要任何网站都加入这个链接, 就具有在线翻译的功能.
这个链接的用户界面类似如下的方式:
如果一个词条未翻译, 将显示原文, 同时有输入框及提交按钮.
如果这个词条已经有翻译结果(可能同时会有多个不同的翻译结果, 如yes可能会被翻译成"是", "确定"等), 那么首先显示原文, 然后以类似投票的形式给出几个选项,如:同意; 不同意, 我要修改等等. 如果要修改就可以在下面的输入框中输入新的翻译内容并提交.

当然, 对于翻译结果的处理, 要采用版本控制系统. 对最终的翻译结果的采用则依据投票的结果来定.

另一种方式:
利用jabber的开放协议, 写一个机器人(可参考gtalk群的实现及小I机器人)来处理po文件, 任何人只要加入这个机器人为好友, 就可以根据机器人给出的信息进行翻译.
当然, 和第一种方式一样, 同样要采用版本控制系统.

以上两种方式的具体设计还没考虑过, 不知道大家对此有什么更好的建议没有, 若有人对此感兴趣, 可以尝试去实现一下.

Topic: 
订阅 RSS - 技术