博客

cPickle 和 marshal 到底哪个快?

为了将 python 对象得以持久化保持(比如为了 web app 的 session/cache 需要),我们不得不将其序列化后转成字符串扔进文件或者数据库里。

Python 提供了两个基于 C 的模块 cPickle 和 marshal 来做这个序列化反序列化的操作。marshal 貌似仅限于少数几种 python 内置数据对象,所以想象起来好像 marshal 比 cPickle 要快一些,而且我们自己做的几次benchmark好像也证明了这点。但实际上果真如此吗?

scaner 也曾写 blog 说明他的测试是 marshal 比 cPickle 快,但有留言说用同样的程序得到了相反的结论..

今天在搜索中发现有老外做过比较全面的测试(07年10月18日的文章),结论是在某些情况下--比如浮点数、长的字符串--cPickle 是比 marshal 要快滴。最后他的建议是: "...even for simple data structures, for a caching layer you might as well use cPickle; you are not particularly slower for the thing you're going to be doing a lot, and you get a bunch of (potential) benefits in return."

其测试程序在http://utcc.utoronto.ca/~cks/programs/python/marshal-vs-cpickle.py

Topic: 技术

Python for S60 1st Edition 1.4.0

Python S60 对 1st 的支持在 1.3.1 之后就不再提供官方支持了,可能觉得这部分用户群实在是太少了。

不过还是有某牛自制了 1.4.0 的 sis,让老机器用户仍然可以享受最新版 PyS60 的功能(比如对中文 SMS 的支持)

其地址是:http://cyke64.googlepages.com/pys60distribution (注意:发表本文时 googlepages 貌似正在被盾中...)

这个哥们还提供了一堆有意思的库(http://cyke64.googlepages.com/),有些不错的东西

Topic: 技术

trick or treat!!!

不得不说,启明幼儿园是一个相当西化的幼儿园。10/31 有例行的万圣节活动,让小朋友们去社区里(当然华清嘉园里面的老外是挺多的)敲门要糖果。

其中要求家长想法准备万圣节妆(halloween costumes)。前不久我同学从美国寄了一袋牙仙子(tooth fairy)硬币回来,老婆这次将 Fed Express 信封废物利用做了一个 mask。

虽然这是 9 年多以来头一次看她做美术工作,但不得不说,她的彩绘技艺是相当的不错,作品很有日式风格,一下子让我想起了《阴阳师》里面的插画。

该作品今早在幼儿园里引起了轰动。哈哈

Topic: dada 生活

开源观察:Linux 社区 和 Mozilla Corporation 的分裂进行时...

Linux 社区对 Mozilla 的商业化行径一直抱有微词早就不是什么新鲜事了,前不久 Mozilla 的 Alex Faaborg 在兴致勃勃的介绍 Firefox 3 将和各个 OS UI 结合得更紧密/native的时候,只提到了 Vista/XP 和 OSX,这引发了 Linux 社区的强烈反响。

虽然作者紧急更新了 blog 反省自己犯下的错误,但还是有人发出了诸如"...Mozilla Corporation 还会继续把 Linux 用户看作二等公民的..."的言论

Mozilla 项目的 Robert O'Callahan 开始辩护,声称 Gecko 1.9/Firefox 3 为 Linux 集成做了重大的努力,包括 pango、dbus、native gtk2 widget 等方面,而且,不少东东都是来自 MoCo 的贡献。他还声明了他对 Linux 的态度,"...虽然我们很多 Mozilla 的人转到了 OSX 平台上工作,除了苹果的软硬件确实很棒外,还有一个原因是因为我们可以在 OSX 上虚拟化 Linux,但不能反过来(Apple is evil)...我一直认为 Linux 对于 Mozilla 来说是非常非常非常重要的,因为专有客户端平台对开放 Internet 来说是个威胁,制造商总会想法把它们的控制扩展到网络之上..."。文章中也酸溜溜的提到了 Linux 社区 的新宠 Webkit:"Webkit 是个不错的引擎,它被移植到 GNOME 上确实是个好事情,但是别忘了(gecko 1.8.x)是一个已经被应用了 2 年多的引擎,而 webkit(在 gtk 上)仅仅才刚刚开始。另外,我不认为 Apple 对自由桌面有太多的控制是个好事情..."

Linux、Mozilla、Webkit 的经历很像典型的家庭破裂——经过了好几年和 Linux 发行版的相依为命后,Mozilla 突然发现自己已经重新回到 windows 桌面而且占据了相当大的市场份额,特别是还挺能挣钱,MoCo 显然在朝着占更大市场份额收更多 google 过路费这个目标而前进;而社区也感觉 MoCo 似乎更看重其对 Firefox 商标和产品的控制权而不是推进社区合作,加上 Apple 适时的将 Webkit 独立出来...于是感情出轨了。

我的看法是,合久必分分久必合,没准哪天 Linux 又和 Mozilla 好得蜜里调油。关键是自由竞争,正因此我们可以无限期待明天。

一个消息是 Debian sid 现在已经包括了 epiphany-webkit,如果你被 IceWeasel 这名字倒了胃口,不妨一试。

Topic: 商业

读书

如何了解一个人的品味?看他穿什么衣服,平时聊什么话题,和什么人混在一起,...网络时代还可以偷窥其 blog,但都比不上检视他的书架来得深刻。个人阅读这东西,实在是很私密;虽然有些人也弄个网摘或者豆瓣什么的把他的阅读列表一一展示,但总有些东西是希望藏在自家书架里永远不让别人知道的。

我老婆真真是爱书之人,家里的书基本上都是她买的。而我则一边当起了搬运工——有几年都是她在卓越或当当上下单,把书送到我单位,然后一趟趟把书搬回家里——她也不想让同事知道她买了许多奇怪的书引起非议,而且书实在是很沉的啊;一边本着书非老婆买不能读也的精神,把所有的书囫囵看了个遍。

其实我好像也应该是一个喜欢读书并买书的人,老爸第一次给零用钱就去买了《牛虻》。工作后虽没什么工资,但结婚前也颇积攒了一些书,除了约翰克里斯多夫、麦田守望者、22条军规、白痴、杰克伦敦小说集外,甚至还包括了《社会契约论》、《论美国的民主》,两本黄仁宇,一本哈耶克。现在回过头看真是汗颜,买书这个功能因为长期不使用现在快完全退化了。

前不久同事到我家做客,其间参观了一下俺家的书架。看来看去一言不发,俺心中惴惴,因为书架上的东西实在是包罗万象:从《最遊記》到《罗马帝国衰亡史》,从《波隆那插画年鉴》到《天工开物》;不晓得会把我们归到哪一类读者群。过了一周后回访,俺也一样被书架吸引,一排排看了半天,估计我这同事也被我看得心头发毛,连忙解释:还有大批的书放在父母家太占地方没有搬过来云云...

现在回想起其书架:印象最深的是最上面一排柏杨的白话文资治通鉴;然后是经典小说——追忆似水年华、名利场、大卫科波菲尔...好像还有静静的顿河;两本石头记,忘了什么评本了;其它还有卢梭、杜拉斯、村上春树...通俗小说也有,比如4本斯蒂芬.金...总体上来说,还是挺令人敬畏的书架。

我这同事迟早会看到这篇 blog,因此老老实实写出读书架后感放在最后,嘿嘿

Topic: 文化 生活

生成 Google 翻译效果页面工具

这个题目有点长还有点拗口似乎。

话要说到去年底我翻译的这篇 web.py 0.2 教程,这个页面发布不久后,收到一封陌生人的 email,问我这个页面是手工做出来的,还是用工具做的。我据实回答。他说能不能做个工具自动做呢?我还真没想过这个问题,平时也很少翻译东东,所以就不了了之。但他的“拷问”倒是一直敲打着我。

最近 jQuery 玩了玩,于是做了这个工具来练手。如果要做到跟被翻译的页面风格一致,应该要另写一个程序去解析页面,把什么 <h1>、<p> 之类的拆出来,万一页面要是用 <div id="..."> 去控制格式,那就更不知该如何处理了,困难不小,头比较大,没有继续这个更高的需求。

欢迎有需要的人试用生成 Google 翻译效果页面工具

Topic: 技术 网络

思维跳跃 -- 重新审视 .NET Framework

HttpWatch 一个很酷的功能就是告诉你哪些内容是直接 cache 的,哪些是 304 缓存的

Fiddler2 做不到这一点.... 那么何不俺自己开发一个?

但涉及到开发 BHO... 还是用 python + comtypes 来搞吧...

可 BHO 是要 dll 的,貌似 python 只能玩个 py2exe。

难道采用 C embed Python ?? 还是看看 IronPython 吧。

在 IronPython 网站上找到了 Pyc 这个例子。成功的按例子把脚本编译成 .exe(winform 的 HelloWorld 例子编译后不过 6kb 大小),看起来生成 dll 是没有问题的。

没有继续下去开发 BHO (经过这么一番浏览后俺已经很累了)。 只是想,按照这样方法做出来的 dll 大抵也可以做得很小,只不过需要运行系统上有一套 .NET Framework 罢了,这算什么,貌似很多软件现在都需要 .NET Framework 呢。

IronPython 主页上的一则消息吸引了俺的注意:Silverlight v1.1 Alpha includes IronPython support!

Silverlight 是什么?以前只知道它是 MS 推出的一项类似 Flash 的技术。Flash 是用 ActionScript 开发的,而 Silverlight 用什么语言开发,却一直没有研究过,想来也是一个 js-like 的语言而已。但......可以用 python 来开发 Silverlight 应用???????

立刻合上笔记本屏幕,仔细的想了想这里面的关系。
* .NET 是套完整的运行环境,所以 6k 的 exe 文件就可以画一个窗体
* .NET 是跨平台的(跨平台其实不太稀奇,但跨平台的运行环境就很稀奇了)
* .NET 是跨语言的 (这一点比 Java 强太多了)

* 而 Silverlight 是基于 .NET 的,跨浏览器的,RIA执行平台

我这才觉得自己算是稍微有点理解 .NET Framework 了。真是了不起,在PC终端上,微软的理念无人能比。(但它的公关经理好像不怎么称职,hehe)

附: 这段时间我每天有相当长的时候是用 IE7,而不是 Maxthon or Firefox。老实说,IE7 确实是一款不错的浏览器——对普通用户而言。今天尝试了最新的 Safari(310A18) + 最新的 WebKit,支持了中文输入,除了某些页面上中文显示有问题外,还是蛮顺手的。

Topic: 技术

推荐一款 IE 下的 JS 调试工具

前不久从 Ajaxian 上看到一个叫 Companion.JS 的东东发布了 0.2 版本。今天得空测试了一下,相当不错强烈推荐。

有意思的是这个工具支持 Firebug 的 console API. 感觉 Firebug 现在是确定了 JS 调试的权威地位,后来者都以它为标杆来追赶。

IE Developer Toolbar + Fiddler2 + Companion.JS,现在 IE 终于有了一个还过得去的调试环境。说不定哪天 MS 把 Companion.JS 也收购了,反正比 Facebook 便宜多了,哈

Topic: 技术

PhotoRec 恢复照片的功能还不错

前不久,向 U 盘上拷了一张照片打算去冲洗,但就在出门前,突然发现 U 盘无法访问,提示未格式化的驱动器...

这有何难,立刻想起曾两次挽回俺分区的 TestDisk,正好用来恢复分区。于是信心满满的执行,它也发现了 U 盘上的 FAT 分区表,预览前看了看分区表里的根目录信息,完全正确,写入!

随即俺就傻眼了,虽然恢复后的 U 盘可以访问了,看起来文件也都一个不拉的挺好,但文件内容统统都不对了..

懊恼中突然想起 TestDisk 作者还提供了一个数码照片恢复工具,在 TestDisk 目录里面就有,于是试了试,效果还不错,把丢的那张照片找回来了!!

PhotoRec 的工作起来是扫描所有磁道信息,发现可疑的曾经存有文件的数据(而且格式它能识别的)就 copy 出来,这样甚至可以起到一个 Undelete 的效果。俺 1G 的 U 盘最后恢复出的数据有好几G,当然实际上不少文件实际上数据是错误的了。

PhotoRec 除了能恢复照片,还能恢复 pdf、txt/html、doc、甚至 rm 等许多格式,强烈推荐!!

附:最后去冲洗店,把俺的 U 盘一插,就看见里面除了 1 张照片外又多了 2 个 .exe 文件和一个 autorun.inf。恶心的是和店员反馈他们的机器有木马,竟然满不在乎的说到处都是,也懒得管。真恐怖! 以后去数码冲印要小心

Topic: 技术

jQuery 初探


记得两年前刚开始玩 flickr 的时候,贴心的使用体验一下子就征服了我。其中对一个更改照片主题的效果印象尤其深刻:鼠标移到照片的主题上,这条文本背景变成淡黄色;左键点击,文本变成输入框;输入新名字后回车,名字更改完毕。整个过程不像在操作网页,倒是像在使用文本编辑器。

由于对 html,javascript 所知甚少,隐藏在这神奇效果后面的技术令我叹服不止且念念不忘。随着后来看了一点点 Ajax 方面的东东,感觉到这应该是页面上的元素替换。这两天尝试了一下 jQuery,想起了这个当年让我耳目一新的页面效果,实现之:

  1.  
  2. $(document).ready( function() { //网页 ready 后加载此方法
  3.     $('span[id=email]') //定位到<span id="email">元素
  4.         .mouseover( function() { $(this).css("background-color",
  5. "#ffff90") }) //鼠标移上<span id="email">元素后改其css里background-
  6. color的值
  7.         .mouseout( function() { $(this).css("background-color",
  8. "white") }) //鼠标移离<span id="email">元素后改其css里background-
  9. color的值
  10.         .click( function() { //给<span id="email">元素绑定 click 事件
  11.             var origEmail = $(this).text() //取得<span>元素包含的文本
  12.             $(this).hide() //隐藏自身
  13.             $('<input name="email" value="' + origEmail + '" type="text"/>') //创建
  14. 一个<input>元素其值为原来的 email
  15.                 .appendTo("div#email") //把该元素添加到<div id="email">中
  16.                 .focus() //把焦点移到该元素上
  17.                 .keydown( function(ev) { //绑定 keydown 事件
  18.                     if (ev.which == 13) { //回车的键盘 key code 为 13
  19.                         var email = $(this).val() //取出<input>元素此时的值
  20.                         $(this).remove() //移除该<input>元素
  21.                         $('span[id=email]').text(email).show() //显示
  22. 原来的<span>元素并将 email 添加其中
  23.                     }                  
  24.                 })
  25.         })
  26. })

完成后,心情一阵悸动,哈哈,好久没这么爽了,两年来压在心头的谜团就这么解掉了。

示例页面:input_replace_span.html

更新:

上面的代码是精炼过的,本来面目可不是这样,花了许多时间 refine,将收获总结如下

1.用 hover 的方法可以替换 mouseover 和 mouseout,将两句话写在一句里面。但是在这个地方,hover 却还有些问题,input 变成 span 后,有时鼠标不在 span 上,它的背景色仍然是淡黄色(Fx 有此问题,IE 没有)

2.attr 修改属性的方法固然好,但是对于 style 属性因为 css 里面又有各种描述,所以 jQuery 做一个 css 方法不是白做的,理由见回复

3.在匿名函数里面,本元素用 $(this) 表示就 ok 了,没必要再用 selector 定位一次

4.span 在被 input 替换的时候,不用 remove,只用 hide 即可,到需要它的时候再 show 出来。这种方法明显对性能有好处,否则如果 remove 掉再 appendTo 进来时,还要重新绑定一系列事件响应函数

5.jQuery 的 API 文档里面对事件响应内的匿名函数的参数没有言及,它是可以传递参数的,代码里的 keydown 事件就传了 ev 进去

6.对于键盘响应的 key code,Fx 和 IE 支持的标准不同,网上的示例基本都是 key=window.event?ev.keyCode:ev.which 这样解决的。jQuery 包装了一层,所以在这里用 ev.which 即可

7.可以将 appendTo,keydown,focus 这些函数写在一条语句里面,不过保证性能的同时也要兼顾代码可读性

Write Less, Do More. Let's Go!

Topic: 技术 网络
订阅 RSS - 博客 | BT的花