星期六, 6月 21, 2008

[link] mysql now use bzr !

http://blogs.mysql.com/kaj/2008/06/19/version-control-thanks-bitkeeper-welcome-bazaar/

又一個重量級軟體投入DVCS的懷抱,
不過我倒是沒預期到mysql會倒向bzr,
因為sun之前的專案如Openjdk,OpenSolaris等, 大多都是用hg,
而mysql被sun買走, 似乎被水銀化的機會很大,
所以這次使用bzr可以說是意外的驚喜.
這麼一來dvcs三強天下三分的局勢似乎已經形成了.

剛好svn 1.5.0也正式release, 如此一來bzr-svn之前不方便安裝的問題也解決了(因為bzr-svn用到了svn1.5.0的python-binding才有的功能, svn1.4要打很多patch, 如今只要升級到最新的svn 1.5就好了),對於我這個bzr的使用者來說可以說是好消息不斷.

另外話說Emacs要從cvs轉換到bzr其實已經講一陣子了,
目前可用的是Jason Earl每小時更新的bzr readonly repo (http://bzr.notengoamigos.org/emacs/trunk/) , 似乎要等到一些merge-history的問題解決後, 官方才會完全轉換過去. (當然這還是未定數, 不過以RMS強烈支持bzr的態度來說, 應該是遲早的事)

星期五, 6月 13, 2008

[link] 有吵有糖吃... Django 1.0 is coming...

根據這篇Roadmap的說法, Django 1.0 會在7月alpha, 8月rc, 9月release. 雖然不知道到底準不準時, 但是"準備好了就會出來"這種話我已經聽膩了... XD

星期四, 6月 12, 2008

[link] django's problem.

http://metajack.wordpress.com/2008/06/11/the-problem-with-django/

基本上我還滿贊同這篇文章的觀點,
事實上我甚至覺得大部分正在開發中的軟體專案都應該建立一個以時程為主的release週期, (即regular release)
而非是現在主要是以功能完成度為主的週期.
因為開發者通常都過於樂觀還有自信太強,
常常低估了完成軟體的時間, 對於沒做過的功能不管聽起來再怎麼簡單都最好還是保守點比較好,
像django的1.0也實在是拖太久了 難怪ticket#2070會被拿出來鞭... 一個http streaming upload 的patch前前後後改了兩年多還是沒進trunk...真不知道是該說追求完美還是太龜毛了... :(

像Ubuntu這樣的release週期我就覺得滿不錯的, 儘管每次的新版變動不會太大, 然後或多或少都會有bug, 但是至少是在建立一個正向循環並且能鼓勵新的開發者投入.

當然還是要說Django真的很不錯就是了. :)

星期二, 6月 10, 2008

Acrobat大冒險.



沒有替Acrobat廣告的意思, 只是發現原來Acrobat比折凳更強.. XD



Acrobat大冒險

[tips] evaluate python dictionaries from file safely.

有時候程式設計師總是會有點奇怪的潔癖,
例如這個讀設定檔的module就是這一類的產物,
說真的python有內建csv,ini跟xml之類的parser,
3rd party的parser也到處都是, 特定情況下其實execfile,exec,eval也都沒什麼錯,如果設定檔可以用.py結尾, 直接import 就可以了,再加上其實python 2.6就要支援direct modify ast tree了...實在看不出有什麼必要硬要用python的parser來讀進設定檔,不過話說回來如果只是想要安全的從檔案裡取出一個dictionary,這個小巧的module倒也不失為一個好方法.

# -*- coding: utf-8 -*-
#!/usr/bin/env python
"""
safe_dict
~~~
The `safe_dict` module helps you read a dictionary from a file using python syntax.

The key and values in dictionary are string only.

File `dict.file` (file which we read dict from) should only contain an anonymous dictionary.

Support only Python 2.5+.

reference:
http://docs.python.org/dev/library/_ast
http://dev.pocoo.org/hg/sandbox/file/08541da989dd/ast/ast.py
http://pyside.blogspot.com/2008/03/ast-compilation-from-python.html
~~~
:Author: http://timchen119.blogspot.com
:license: Python License
"""

from __future__ import with_statement
import _ast
#need python 2.5+

def safe_eval_literal(node_or_string):
"""
Safe evaluate a literal.
"""
_safe_names = {'None': None, 'True': True, 'False': False}
if isinstance(node_or_string, basestring):
node_or_string = compile(node_or_string, "<unknown>", "eval" , _ast.PyCF_ONLY_AST)
if isinstance(node_or_string, _ast.Expression):
node_or_string = node_or_string.body
def _convert(node):
if isinstance(node, _ast.Str):
return node.s
elif isinstance(node, _ast.Dict):
return dict((_convert(k), _convert(v)) for k, v
in zip(node.keys, node.values))
elif isinstance(node, _ast.Name):
if node.id in _safe_names:
return _safe_names[node.id]
raise ValueError('malformed string')
return _convert(node_or_string)


def safe_read_dict_from(file):
"""
Safe evaluate a dictionary from a file.
"""
try:
with open(file,'r') as f:
source = f.read()
node = compile(source, "<unknown>", "eval", _ast.PyCF_ONLY_AST)

if isinstance(node.body, _ast.Dict):
return safe_eval_literal(node.body)
else:
raise
except:
raise

if __name__ == '__main__':
try:
dict_we_want = safe_read_dict_from('dict.file')
except Exception,e:
print e



用法: 只要在你的dict.file裡加上一個python dictionary即可, 就可以用這個module讀入dict.file,為了安全性考量,也只讀入字串.

星期三, 6月 04, 2008

"""習武不是拿來傷害別人的..."""

"""
「習武不是拿來傷害別人的!」陳夆昀(卅七歲)說,被打時他曾一度很火大,曾朝其中一人鼻子出拳,而勾倒另一人後,也起腳要往頭部踹下去,但兩次都忍下來,硬是把拳腳縮回來。

身高一百八十一公分、體重超過一百公斤的陳夆昀,十三歲開始練習各種格鬥武技。民國八十六年被已故日本知名摔角選手「馬場」選為「台灣唯一接班人」,還到日本接受訓練;後來因傷回台,成立「風雲」隨扈公司,在李敖參選總統及藝人林青霞父喪回台時擔任隨扈工作。

二○○二年美國大西洋城舉行的國際職業摔角大賽,陳夆昀以「白獅」身分出賽,僅花了四分鐘,就用自創絕招重創美國好手「愛國者」,拿下台灣第一座世界職業摔角冠軍。

去年八月三日凌晨,陳夆昀騎機車載女友,在板橋市館前西路四十六巷,與正在倒車的徐祥恩(廿八歲)、黃梓曦(廿八歲)擦撞,當時陳夆昀與女友未受傷,機車受損輕微。陳夆昀說,原本不想追究,徐祥恩卻持鋁棒攻擊,黃梓曦也對他揮拳毆打,兩人還警告他「如果敢報警,就到醫院堵你」。

陳夆昀說:「如果我真的出手,我擔心被害人變成他們。」他要保護女友,才用左手格擋,「我算一算,左手大概擋了五十多下鋁棒,手才斷了」。

後來陳夆昀提出傷害、恐嚇告訴,檢方起訴徐、黃兩人,並具體求刑七月。

板橋地院昨天開言詞辯論庭,徐、黃否認恐嚇,陳夆昀的辯護律師才揭露陳夆昀世界職業摔角冠軍的背景,並稱因他有體格優勢才不致受重傷,若一般人可能會被打死。兩人得知打的是世界摔角冠軍,甚感訝異。公訴檢察官以徐、黃兩人下手兇殘,又不知悔悟,當庭加重求刑至十個月有期徒刑。
"""

轉自聯合新聞網

看到聯合新聞網的新聞, 覺得這位陳夆昀實在真了不起.

令人打從心底佩服. 這才是真強者啊...

要我是世界職業摔角冠軍大概就會搞個炸彈摔然後徒手把對方劈成兩半再扔到垃圾筒了...

還好我只會摔車還摔的不大好看 XD

==

突然想起國小那位很兇的老師常講的話: "讀書不是爽就好..." 嘖嘖...

星期二, 6月 03, 2008

[tips] add bzr sftp support when you have no compiler on target platform (pure python )

bzr depends on paramiko to provide sftp support. While paramiko itself is pure python, its dependency pycrypto is not. PyCrypto have lots of C-extenstion and you'll need a compiler to install it. However since we only use part of pycrypto (to have sftp support for bzr), we could just add some stub files to prevent the [deploy] problem.

I have made a modified pure python version pycrypto and packaged it with paramiko 1.7.3, so after you installed bzr (use standard python setup.py or easy_install), you just extract paramiko-1.7.3-bzr-sftp-purepy.tgz
at your python site-package directory (make sure you don't have paramiko and pycrypto already exists, if you do, you don't need to install this package anyway) and happy bzr...!

This also makes bzr only depend on python so you could easily deploy it on a machine which doesn't have c compiler and still have sftp support.

Warning: this pacakage only add bzr sftp support and provides nothing besides this, and these COULD break other python packages which also used paramiko and pycrypto, so don't use it if you don't really need it. And the only tests I've done is on my own (embedded linux) machine, Basically it's just for my own use, I have warned you.