手头有个pyQT的项目里面使用QtWebKit, 用于在客户端中展示网页内容。虽然使用QtWebkit实现了基本功能。但是存在不少问题。 QtWebKit打开页面速度慢,一些js代码无法正常运行,需要自己去实现的东西太多。由于时间有点紧,所以就准备找第三方实现的库来做。

最后采用CEF(Chromium Embedded Framework)。 这个项目稳定(2008开始),社区活跃。而且还有python实现cefpython。

cefpython 使用cython 实现与libcef之前的交互。项目2012-05-08提交0.11,到最近2012-12-27提交0.51版本的cef1。

使用New BSD License 开源协议。目前只有czarek.tomczak一人维护。 cefpython项目分为cef1, cef3 。cef1的完成度比较高,cef3可用的api太少。 由于项目中对webkit的要求比较少。 所以直接拿来使用。

问题和不足

  • 项目完成度还不高,存在一些问题。好在作者开发热情很高,问题能很快解决。
  • 目前只支持windows和mac。
  • 编译需要安装windows SDK和vs2008。

更多链接


莫工厂的面试题之一古诗横转(二)

09-21-2011 by luw2007

要求横转古诗输出,输出的结果请运行一下程序。

之前使用列表解析实现,还可以用map + zip 实现矩阵转换。当然使用NumPy 也可以很方便实现。

代码如下:

string = u"""静夜思 李白
床前明月光,
疑似地上霜。
举头望明月,
低头思故乡。
"""

list_s=[L for L in string.splitlines()[::-1]]
out=map(list,zip(*list_s))
print '\n'.join([U'┊'.join(row) for row in out])
read more

python实现一个Stack类

09-16-2011 by luw2007

python 实现Stack类。

之前网上也有不同的实现,但是不是感觉版本太老就是感觉写的不好。自己写了一个,请大家指教。

# -*- coding:utf-8 -*-
class Stack(object):
    """
        Stack 类
    """
    def __init__(self, other=None):
        """doc test
        >>> s = Stack([1,2,3,4])
        >>> s.pop()
        4
        >>> s.count
        3
        >>> e = Stack([1,2,3,4])
        >>> s != e
        True
        >>> s.push(4)
        >>> s == e
        True
        >>> s += e
        >>> len ...
read more

莫工厂的面试题之一古诗横转

09-16-2011 by luw2007

要求横转古诗输出,输出的结果请运行一下程序。

string = u"""静夜思 李白
床前明月光,
疑似地上霜。
举头望明月,
低头思故乡。
"""

list_s=[L for L in string.splitlines()[::-1]]
row_num = max(map(len,list_s))
out=[[row[L] for row in list_s] for L in xrange(row_num)]
print '\n'.join([U'┊'.join(row) for row in out])
read more

计算当前目录下的子目录数量并打印子目录名称

09-08-2011 by luw2007

问题:

组里有人问,有什么好方法来统计当前目录下所有子目录的数量。

解决方案:

我大致综合大家提出的方法,做了一个对照。实现方法有4个 。其中test_diskwalk.py 是利用python 的os.walk 做的。

  1. time find /usr/ -type d |wc -l
  2. time python test_diskwalk.py /usr/
  3. time tree -ad /usr/ |tail -1
  4. ls -aR /usr/|grep ":$" |wc -l

大致结果是ls 和tree快, find 接近是ls 的1.5倍。 os.walk 更慢。测试不太精准,权当娱乐。

对照测试具体步骤:

利用python ...

read more