• 最近在学用vim,居然发现作者也是《银河漫游指南》爱好者。

    :help 42

    你会发现:

    What is the meaning of life, the universe and everything?  *42*

    Douglas Adams, the only person who knew what this question really was about is

    now dead, unfortunately.  So now you might wonder what the meaning of death

    is..

     帅呆了

  • 2009-07-06

    Shanghai Skyline IV - [lomo]

  • 一直都没搞定

    直到发现了  http://odin.himinbi.org/MultipartPostHandler.py

    写得相当漂亮,爱不释手吖。

  • 2009-06-09

    Taki Easi - [涂鸦]

  • 2009-06-07

    楼下的花都开了 - [lomo]

  • 2009-04-24

    plurk被墙 - [瞎78搭]

    太无情太无趣太无聊太无耻了

  • 说起来简单,但也是经过好几个项目,来来回回出问题得出来的。

    • 最终转成UTF8输出是毋庸置疑的。
    • 抓的如果是中文页面的话,用GB18030来decode是比较正统的方法,gb2312是一个误区,其实我们的页面中使用的字符编码已经早就超出2312的那些了。
    • 明明是中文页面抓回来却没法用18030来decode的话,一般是因为页面中混杂了非法字符的原因,可以用ignore忽略掉非法字符。(还是最近在邮件列表里偶然看到的)

     

  • 其实关于这个内容DIP里写的很清楚,只是看的时候完全没有遇上问题时记忆那么深刻。本来是想把开心网各群的人数都抓回来看看,到底哪些群人数比较多,(呆子开心网居然不提供人气排序之类的一缸~),结果httplib去GET回来的数据都是gzip压缩过的,这才想起这茬。

    照DIP的说法做就没有问题了,其实就是不要把getresponse回来的内存数据直接解压,而是用StringIO转成一个临时压缩文件来解,虽然不大明白为什么要这么做,我想人家应该有人家的难处吧……

    1 import StringIO
    2 compressedstream = StringIO.StringIO(compresseddata)  
    3 import gzip
    4 gzipper = gzip.GzipFile(fileobj=compressedstream)     
    5 data = gzipper.read()
           

     

  • 刚才Plurk抽风,没有出页面,倒是直接把一个Dict推出来了,这不就是Python么。可以参看一下世界先进水平的数据结构~

     [{"lang": "cn", "content_raw": "\u8fd9\u4e2a\u5e8a\u620f\u8fd8\u662f\u62cd\u5f97\u4e0d\u9519\u7684\uff1a http:\/\/www.youtube.com\/watch?v=sLlcBFNpQd8", "user_id": 793125, "plurk_type": 0, "plurk_id": 10112046, "response_count": 2, "owner_id": 793125, "qualifier": ":", "id": 33941811, "content": "\u8fd9\u4e2a\u5e8a\u620f\u8fd8\u662f\u62cd\u5f97\u4e0d\u9519\u7684\uff1a <a href=\"http:\/\/www.youtube.com\/watch?v=sLlcBFNpQd8\" class=\"ex_link youtube\"><img src=\"http:\/\/i4.ytimg.com\/vi\/sLlcBFNpQd8\/default.jpg\" alt=\"\u738b\u7d39\u5049&amp;amp;\u5c0f\u55ac\u6fc0\u60c5\u7206\u7b11\u5e8a\u6232\" width=\"40\" height=\"30\" \/><\/a>", "responses_seen": 2, "posted": "Mon, 20 Oct 2008 05:54:07 GMT", "limited_to": null, "no_comments": 0, "is_unread": 0}]

    后来证实了,的确是py的。

  • 其实单从纯粹的浏览器角度,我是非常喜欢opera的,典型的北欧风格,简洁、高效。它的速度优势可以轻易的从很长的表格页的读取速度上略见一斑。可惜在linux下的opera字体的设置一直是个硬伤,一直以来都没有搞定,中文显示的时候总是大大小小虚虚实实的相当不着调。今天opera发布了9.60,于是又学着搞了一下,终于可以了。 

    将/usr/share/opera/ini下的font.ini文件中的Known fonts that solves specific problems一栏的内容改成: 
    ;family:mincho|gothic=japanese good try-first
    ;family:kochi*=japanese good try-first
    family:WenQuanYi Bitmap Song=chinese-s good try-first
    ;family:baekmuk*=korean good try-first

    其实主要就是chinese-s这一行,前面的字体family可以按照喜好设置。其他行通通用分号注释掉就ok。

    看看效果

  • 其实这个是最方便的截图功能了,但是compiz设置里面有个小埋伏,默认图片保存目录是"Desktop",因为根本就不存在这个目录所以造成截图功能一点反应都没有,让我几次放弃了这个插件。其实只要把目录改成"桌面"就一切ok了。还有截图的快捷键不能改,改了也不起效果。现在只要win+鼠标左键拖拽就可以截图了,不用等QQlinux版的截图功能了。

    compiz截图功能设置的图示

  • 2008-09-04

    ubuntu安装ibus - [ubuntu]

    还没成功,先写下来。 已经顺利安装了。见更新部分。

    作者的readme里对于ubuntu用户来说信息太少了。首先需要安装一下python2.5-dev,可是不知道为什么,手头的8.04版本不能直接安装python2.5-dev,用sudo apt-get和新利得都不行。幸好找到https://launchpad.net/ubuntu/hardy/i386/python2.5-dev/2.5.2-2ubuntu5上的安装包。此外还需要作以下安装:

    sudo apt-get install python-gobject-dev
    sudo apt-get install libgtk2.0-dev
    sudo apt-get install python-gtk2-dev
    sudo apt-get install libdbus-glib-1-dev

    另外还要去载一个dbus-python安装一下。以及所需要的输入法引擎。

    编译安装都通过了,ibus-setup也可以看到设置界面了,浮动条图标也看到了,pinying引擎也装了,可就是切不出输入法。郁闷,太晚了,明儿再说。

     更新:

    邮件列表里看到ubuntu-cn的源里面更新了ibus, 直接下载ibus,python-dbus,ibus-table,ibus-pinyin安装,然后用 sudo im-switch -c,选择ibus为输入法既可。体验下来的确不错。

    又及:ibus在freemind中似乎有些问题,写到第三层以下的脑图就会呼不出输入法,freemin假死,不知道有没有人也是这个情况。

  • 2008-08-31

    urllib.unquote() - [python]

    字符串被当作url提交时会被自动进行url编码处理,在python里也有个urllib.urlencode的方法,可以很方便的把字典形式的参数进行url编码。可是在分析httpheaders的传输信息时,很多已经被url编码的字符串,不是我们这些菜鸟一眼能看出来的,于是乎,urllib.unquote()

     s = "url=%2F&email=imtesting%40tempmail.com&password=hereispassword"
    print urllib.unquote(s)

     >>> url=/&email=imtesting@tempmail.com&password=hereispassword

    python很nice ^^

     这就是所谓的“urlencode逆向”,之所以要写这句是因为我一开始也是这么搜索的,都没有搜到结果。

  • windows下Gmail开双帐户最常见的方法是Firefox里用IETab,或者干脆直接拿个IE开就是了。Linux下有点闹心,关键是除了主力在用的Firefox,Opera啥的在设置中文字体时总是不得其法,字体混乱让人撮气。于是将Linux下的浏览器挨个试过来,最终Gnome默认的Epiphany满足了我的需要。但是需要设置一下,把“让网页指定自己的字体”前面的勾选去掉:

    于是乎,这个世界和谐了:

    估计也有人有这个困扰,是以记之。

  • 2008-08-09

    Shanghai Skyline III - [skyline]

  • 2008-08-06

    Shanghai Skyline II - [skyline]

    Shanghai Skyline II
  • galaxium比emesene启动和获取列表的速度要慢,应该是因为它要获取信息要来的多的原因。打开galaxium就能看见在xp登录msn时的昵称和图片,看样子已经把msn的协议分析的很透彻了。聊天窗口支持很cool的adium风格,不过adium条上的非ascii字符显示有问题,好在作者已经注意到这个问题。最近就暂时抛弃emesene了。

    更新:

    • 选头像的时候发现一个好玩的,galaxium会自动保存别人用过的头像。呵~
    • 和emsene默认的一样,galaxium在群聊时显示的是群名称,而非群用户的昵称。还没有找到解决的方法。
  • 2008-08-01

    Shanghai Skyline - [skyline]

     

    上海的skyline有时还是蛮不错的,都是手机拍的。

  • 看见tombkeeper大的校验函数,才想起在学python的第二天也写过一个类似的东西,翻出来晒晒。虽然现在看很不pythonic,按照壮一点的写法估计6、7行就可以了,不高兴改了,python的在解决问题时显示出来的清晰程度可见一斑,不管认字不认字都能看懂一二。

    def id15to18(id):
        """change an old IDnumber to new 18 digit one~"""
        sid = str(id)
        a = []
        w = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2,1]
        NumTable = ["1","0","X","9","8","7","6","5","4","3","2"]
        sum = 0
        result = ""

        for i in range(15):
            a.extend(sid[i])
        a.insert(6,"1")
        a.insert(7,"9")
        for n in range(17):
            sum = int(a[n])*w[n] + sum
        j = sum % 11
        a.extend(NumTable[j])
        result = "".join(a)
        return result

     

     

     

  • python好处在于易于上手,大多数人应该和我一样,一个简明教程加一个DIP没读完就开工干活了。等遇到问题再回头去找答案。这是优势,也是缺点。准备今天开始重新精读《core python programming》和《Dive into python》,希望能够静下心来用时间换厚度。

     

    print语句后加','(逗号),输出无换行符的元素排列:

    print 'I like to use the Internet for:'
    for item in ['e-mail','net-surfing','homework','chat']:
        print item,
    print
    I like to use the Internet for: 
    e-mail net-surfing homework chat
     
    enumerate,枚举函数:
    for i,ch in enumerate('thereisastring'):
        print ch,":",i,
    t : 0 h : 1 e : 2 r : 3 e : 4 i : 5 s : 6 a : 7 s : 8 t : 9 r : 10 i : 11 n : 12 g : 13
    交换两个变量的值:
    x,y = y,x 
     
    学着变得pythonic:
    • 0-7中复数的平方。简洁而漂亮的写法:
         sqdEvens = [x**2 for x in range(8) if not x % 2]
    • 用os.lineseq替代Unix下的'\n'和Win下的'\r\n'这些换行符,使得代码得以跨平台运行。 
  • 2008-06-18

    ISOTIMEFORMAT 设置 - [python]

    %a    Abbreviated weekday name
    %A    Full weekday name
    %b    Abbreviated month name
    %B    Full month name
    %c    Date and time representation appropriate for locale
    %d    Day of month as decimal number (01 - 31)
    %H    Hour in 24-hour format (00 - 23)
    %I    Hour in 12-hour format (01 - 12)
    %j    Day of year as decimal number (001 - 366)
    %m    Month as decimal number (01 - 12)
    %M    Minute as decimal number (00 - 59)
    %p    Current locale's A.M./P.M. indicator for 12-hour clock
    %S    Second as decimal number (00 - 59)
    %U    Week of year as decimal number, with Sunday as first day of week (00 - 51)
    %w    Weekday as decimal number (0 - 6; Sunday is 0)
    %W    Week of year as decimal number, with Monday as first day of week (00 - 51)
    %x    Date representation for current locale
    %X    Time representation for current locale
    %y    Year without century, as decimal number (00 - 99)
    %Y    Year with century, as decimal number
    %z, %Z    Time-zone name or abbreviation; no characters if time zone is unknown
    %%    Percent sign
  • emesene这个名字很搞,很难记,不过一次偶然发现,写成eMeSeNe就好记多了,有没有发现,其实就是MSN用e全部分开来。hohoho不知道作者是不是这个意思。emesene是目前在ubuntu下我觉得比较好的msn替代了,关键是它长得比较好看^^

    emesene在默认状态下参与msn群聊时不会显示群组成员的nickname而是代以群组名称。说是出于安全原因,网上找了一圈,找到了原版的解决方案(鄙视一下那些转贴不写明的淫。) ps:emesene也是拿python写的,开源软件。python真是帅吖。

  • 2008-06-07

    Dell D500入手 - [ubuntu]

    最后还是下决心定了一台被我称为比手机还便宜的Dell D500,原因如下:

    • 需求只是上网,写程序和简单应用而已。这种配置足够了。
    • 不用为操作系统付钱是件很不错的事。
    • 剩下钱还可以等小本本出来的时候跟风去。

    Dell D500预装的是7.10,直接用8.04的光盘重装了,不到20分钟,更新软件,安装软件捣鼓了一圈,基本上ok了,顺便把显示效果全开,非常帅,运行很流畅,知足了。安装软件有:

    • emesene
    • picasa
    • pythonIDLE
    • eva
    •  AdoberReader

     一路顺风顺水一点问题都没有。乐一下。

  • 2008-05-16

    终端彩色输出 - [linux]

     邮件列表里看到的,受教。。(是linux下的)

    终端的字符颜色是用转义序列控制的,是文本模式下的系统显示功能,和具体的语言无关。
    转义序列是以 ESC 开头,可以用 \033 完成相同的工作(ESC 的 ASCII 码用十进制表示就是 27, = 用八进制表示的 33)。

    \033[显示方式;前景色;背景色m

    显示方式:0(默认值)、1(高亮)、22(非粗体)、4(下划线)、24(非下划线)、5(闪烁)、25(非闪烁)、7(反显)、27(非反显)
    前景色:30(黑色)、31(红色)、32(绿色)、 33(黄色)、34(蓝色)、35(洋红)、36(青色)、37(白色)
    背景色:40(黑色)、41(红色)、42(绿色)、 43(黄色)、44(蓝色)、45(洋红)、46(青色)、47(白色)

    \033[0m 默认
    \033[1;32;40m 绿色
    033[1;31;40m 红色

    print "\033[1;31;40m%s\033[0m" % " 输出红色字符"

  • csvreader = csv.reader(file("csvfile.csv"))

    for row in csvreader:

        process

    错误提示:

    Traceback (most recent call last):
      File "<interactive input>", line 1, in <module>
    Error: line contains NULL byte
     

    看了一下模块_csv.c的代码,原来是不能有 “\0”,所以csv文件不可以是unicode编码的。把导出的csv用ansi保存就ok没问题了。

    为什么python啥模块都有尼?真是拿它没办法~ 

  • UnicodeEncodeError: 'ascii' codec can't encode characters in position 42-44: ordinal not in range(128)

     提取html保存txt出现如上错误。比较典型的重定向问题,中文永远是二进制世界的痛。无奈……

    解决方法: 

    import sys
    reload(sys)
    sys.setdefaultencoding("utf-8")

  • 2008-04-08

    bullshit

    大巴没有恶俗面板,注定了大巴只有洋葱小白领,永远都不会有真正的文化人……
  • s = [1,1,1,2,3,3,4]
    print sorted(s, key=lambda x: s.count(x))
    lambda是个好东西,要学习! 
  • can pyhton plus with Air? 

    What a cool idea!

    pair "is python for air." (pair is two shoes in fact - -",a suck name how about pyair)

    Developing AIR Applications with HTML and Ajax

    Developing AIR Applications with Adobe Flex 3

    air wiki

    and then……

    Python for s60 too! ola python~ go ahead !