Archive for the ‘python’ Category

音樂軟體 Jokosher

Thursday, August 3rd, 2006

Jokosher  是一個用  pygtk  寫的音訊編輯軟體
Linux  在多媒體編輯這方面還是有很多東西可以開發的
不過拿  Goldwave  /  Cakewalk  之類的軟體來比較也不太公平
畢竟這些軟體都發展那麼久了,功能性會完整很多
所以目前我要編修多媒體檔案還是會回到  Windows  環境處理

Linux  上雖然也能找到幾個不錯的套件,但似乎都還不是很成熟
比較完整的軟體目前只找到  audacity,不曉得還有沒有其他選擇
有空再來搜尋看看。

Jokosher  [Link]

Audacity  [Link]
Audacity  教學  [Link]

O’Reilly CodeZoo

Friday, July 28th, 2006

剛剛在逛  Google  Code  時看到幾個好玩的套件
丟進  google  找相關資料時就找到這個  Code  zoo
目前只收集了三種程式語言的套件
有空再來挖挖看有沒有好玩的東西吧

Google  Code  [Link]
O’Reilly  CodeZoo  [Link]

Default python version in Debian

Tuesday, July 25th, 2006

這件事困擾我很久了,Debian  一直不把預設的  python  version  改到  2.4
雖然目前  2.3  2.4  都有,但有些套件還是相依於  2.3,要拿又拿不掉  :(

mail  list  上也有人抱怨這件事,但大概只能自己安裝  module  來解決了

Re-setting  Debian  default  python  version  [Link]
How  can  I  change  Debian’s  default  Python  version?  [Link]

不久前在  LWN.net  上也提過這件事
Debian  Python  packages  in  sid  [Link]

看起來要靠官方機制的話,一時半刻還等不到…

來看看把  python2.3  移除會變怎樣

#  apt-get  -s  –purge  remove  python2.3
[skip]
Purg  gazpacho  [0.6.5-2]
Purg  libglade2-dev  [1:2.5.1-2]
Purg  python-gtk2  [2.8.6-3]
Purg  python-support  [0.3.8]
Purg  python-pyx  [0.9-2]
Purg  python-numeric  [24.2-5]
Purg  python2.4-pysqlite2  [2.2.2-1]
Purg  python2.4-pexpect  [2.0-2]
Purg  python2.4  [2.4.3-7]
Purg  python2.4-minimal  [2.4.3-7]
Purg  python-cairo  [1.2.0-1]
Purg  python-central  [0.5.1]  [python2.3  ]
Purg  python  [2.3.5-11]  [python2.3  ]
Purg  python2.3  [2.3.5-14]

看吧,真是可怕的東西….竟然想移除所有  python  相關套件
我對於  Debian  這種自作聰明的做法一直很感冒,但這功能好像蠻受歡迎的@@
很多人厭惡  Windxxz  的  *貼心*,卻能容忍  apt  的雞婆?
也許趕快弄出一個  slackware  版本的  colinux  image  才是長久之計XD

Debian  Python  FAQ  [Link]
Debian  Python  Policy  [Link]
New  Policy  [Link]

lambda 的改進 2

Monday, May 15th, 2006

※  引述《letoh  (@heaven)》之銘言:

會去玩這個主要是因為要改  python  的  Expect  模組
我只試了  perl  跟  python
perl  的部份我沒仔細去看 python  的話是直接用  pty  實作
應該不算  binding 只是提供類似  Expect  的語法

不過語法上  perl-expect  會比較接近原本的  Expect
直接移植的話比較簡單一點
python  的寫法就不太一樣了 例如在  expect  一堆  pattern  的時候
在  Expect  裡是這樣寫的

expect  {
 pat1  {  action  1
}  pat2  {  action  2
}}

perl  寫起來很像

$exp->expect{
 [  pat1  =>  sub  {  action  1  }  ],
 [  pat2  =>  sub  {  action  2  }  ]
}

python  則是變成這樣

idx  =  exp.expect([pat1,  pat2])
if  idx  ==  0:
  action  1
elif  idx  ==  1:
  action  2

是沒什麼不好 但看起來就是很怪
所以為了把它改的跟  Expect  語法比較像 才去試了  lambda  的用法
要套用的話就如我之前寫的那樣 現在算是改得差不多了 可以這樣寫

exp.expect([
  [  pat1,  ”"”action  1″”"],
  [  pat2,  ”"”action  2″”"]
])

當然還是會傳回  idx  供後續處理 可惜沒把  exp_continue  弄出來  (perl  有處理這個)
目前大致上是可以動了 但是  timeout  handler  還是怪怪的 要再找一下問題在哪
另外  action  的寫法也有限制….因為  python  是用縮排來判斷  code  block
如果  action  是多行的話 要這樣寫

  exp.expect([
    [’login’,  ”"”
for  i  in  range(2):
  logfile  i,  ”get  login  prompt\r”
exp.send(”letoh\r”)”"”]
  ])

一定得從最左邊開始寫 縮排可以照樣縮  (第一層一定要在最旁邊)
然後換行要用  \r 如果一定要用  \n  的話要改用  \\n

看起來有點醜 所以也不一定要這樣寫 應該可以在別處定義好  handler
再傳進來…這個我還要再改一下
整個  trace  加上修改用不到幾分鐘 應該拜  python  語法簡潔之賜嗎@@
不過也因為改太快了 很多東西沒考慮完整 只是先讓它能動
而且目前要用舊的寫法也是大部份相容的

等我把  bug  修一修再問問原作者對這種語法的看法吧

lambda 的改進

Friday, May 12th, 2006

剛試著用  lambda  結果爛掉 找了一下發現這篇文章

Stupid  lambda  tricks
[Link]

python  的  lambda  有不少限制 如這篇文章說的

The  official  python  documentation  says,  that  you  can  only  use  expressions
in  lambda,  but  not  statements.

所以他就搞了一堆很有趣的寫法來突破這個限制
不過再怎麼搞還是有先天限制 不像  lisp  裡的那樣方便

perl  裡有一個類似的東西叫  anonymous  function
但本質上還是跟  lambda  有點不太一樣 比較像是  anonymous  code  block

如果只是要在  python  單純使用  anonymous  code  block  的話
我倒是想到一種作法

>>>  t  =  lambda:  eval(compile(”"”
…  i  =  5
…  while  i  >  0:
…    print  i
…    i  -=  1
…  print  ”done”
…  ”"”,  ’log’,  ’exec’))
>>>  t
<function  <lambda>  at  0xb7debd14>
>>>  t()
5
4
3
2
1
done
>>>

要傳參數進去也可以

>>>  t  =  lambda  x:  eval(compile(”"”
…  while  x  >  0:
…    print  x
…    x  -=  1
…  ”"”,  ’log’,  ’exec’))
>>>  t
<function  <lambda>  at  0xb7debdf4>
>>>  t(3)
3
2
1
>>>

缺點是不能傳回結果

decorator

Friday, March 24th, 2006

※ 引述《letoh (@heaven)》之銘言:
> $ python2.4
> … def goodbye():
> …   print “exit…”;
> …
> exit…
> $
> 2.4 以上版本限定

Decorators for Functions and Methods
[Link]