跳到主要內容

發表文章

目前顯示的是 2007的文章

將non-unicode編碼的資料轉換到unicode的sqlite資料庫中

在使用SQLAlchemy及Sqlite時遇到了一點小麻煩,主要是我的資料來源是big5/cp950的編碼,但是我希望在SQLite的資料庫中使用的是utf-8編碼。雖然最後的方法並不困難,不過著實費了我一番功夫。所以,就寫了這篇文章。如果你也遇上了編碼轉換的問題,就來看看這篇文章吧。

將non-unicode編碼的資料轉換到unicode的sqlite資料庫中

怎麼選擇適合你的Python GUI toolkit.

嗯...我不是要針對這個主題進行分析報告。我只是要推薦一個網頁 -- Choose Your GUI Toolkit 。這個網頁包含了下面這些可搭配Python使用的Toolkits:
PyGUITkinterEasyguiwxPythonPythonCardpyQtpyGTKJython(Swing & AWT)AnyguiFXPypyFLTK這個網頁並不能算一個文章,他有點像是一個評分系統。總之,你要針對下面的條件提供1-100的分數。這個網頁會根據你的需求及喜好來給您一個建議,讓您知道上述何者最適合您:
易學易用成熟,文件完整,廣大的Widget選擇普及程度,已經安裝的平台種類提供GUI建構程式及程式產生器支援Windows, 簡易安裝,原生的觀感支援Linux, 簡易安裝,原生的觀感支援Mac OS X, 簡易安裝,原生的觀感支援並且合適於PDA上使用如果您正在煩惱要選擇哪一個GUI Toolkit作為您的開發平台,這個網頁或許能夠給您一個客觀的分數,讓您可以做出正確的決定。

Doxygen十週年及新版release

Doxygen這套好用的程式文件製作工具已經堂堂邁入十週年了!作者Dimitri van Heesch特別選在這個十週年的時刻(2007/10/27)發表了一個新的版本1.5.4。這個版本更動的東西不多,不過最主要的變化是加入了Fortran 90的支援,這使得Doxygen可應用的領域用再擴展了一些。如果你不了解Doxygen,可以看看我以前為他所寫的一篇介紹

一篇有關wxPython的說明文件

wxPython -- 結合wxWidgets的跨平台及Python的強大。這是一個可以提供高生產力的GUI開發環境。可是,就像所有的Open source軟體一般,除了RTFC外,很難找到一個好的參考文件。目前我在撰寫wxPython程式時,有三個主要的參考來源:
wxWidgets的說明文件wxPython in ActionwxPython所附帶的Demo程式如果你有把整本的wxPython in Action看過一遍,那麼上面三個應該是夠用了。但是,對於初學者,而且又沒有這本書的人。下面這個網站值得去看一下:
The wxPython Guide這份文件份量不小。如果能夠重頭讀到尾,相信進入wxPython的領域就很容易了!還沒去看過的人,快點去看看囉。

一個用Python寫的HTA程式,用來執行Python script

將這個程式碼拷貝至文字檔中,並將副檔名設定為.hta。執行後,您會看到有兩個text box及兩個按鈕。您可以在上面的text box中輸入Python script來執行。如果想要輸出一些訊息,請用Print('msg')函式。結果將會輸出到下面的Text box中。

一個用Python寫的HTA程式,用來執行Python script。

在HTA中使用Python

所謂的HTA(HTML Application)就是所謂的HTML文件,只是副檔名取名為.hta而已。重點是透過pywin32與WSH的結合,我們可以在Windows下面以HTML為表,Python為裏。這樣就可以輕易的做出強大的工具。而且,在Windows下面HTA檔案與一般的執行檔無異。對於開發一些簡單的管理程式,實在是非常迅速的方法。

在HTA中使用Python

在WSH使用Python時,取得相關的參數

在Windows中,如果你有正確的安裝Pywin32的package,您就可以在WSH中使用Python(您的script副檔名得是.pys才行)。在寫一個Script時,最常遇到的就是要取得命令列參數。可是,如果在WSH中,您並沒有辦法透過sys.argv的方式取得命令列參數。您得利用WScript.Arguments物件才能取得參數。請到下面的網址看用法:

在WSH使用Python時,取得相關的參數

產生wxPython Color name列表的小程式

最近在撰寫wxPython相關的程式,發現好像沒有什麼地方有關於wxPython color name的資訊。所幸,wxPython有一個wx.ColourDatabase的資料庫,可以查詢有關於color name的資訊。於是,就寫了一個小程式將這個資訊以HTML方式列印出來。有興趣的人可以看一下:

WxPython的Color Name列表

#!/usr/bin/env python

import sys
import wx

app = wx.App()

if len(sys.argv) >= 2:
fd = file(sys.argv[1], 'w')
else:
fd = sys.stdout

print >> fd, '<HTML><TITLE>Color Database wxPython %s</TITLE><BODY>' % (wx.version(), )
print >> fd, '<TABLE BORDER=1><TR><TD>Color Code</TD><TD>Color Name</TD><TD>Color</TD></TR>'
colorDatabase = wx.ColourDatabase()
for i in xrange(0x1000000):
name = colorDatabase.FindName('#%06X' % i)
if len(name):
print >> fd, '<TR><TD>#%06X</TD><TD>%s</TD><TD bgcolor="#%06X"></TD></TR>' % (i, name, i)

print >> fd, '</TABLE></BODY></HTML>'

fd.close()

在RapidSVN中使用Plink或是TortoisePlink.exe

雖然,平常最愛用的SVN Client是TortoiseSVN。但是,有些時候只想操作SVN Server上面的東西,這個時候就會覺得RapidSVN比較好用。因為是使用SSH的方式存取我的Standalone SVN server。所以,一開始使用RapidSVN時就遇到了麻煩。看起來似乎是RapidSVN與Plink或是TortoisePlink之間的連結有問題。經過許久的實驗,才發現原來是RapidSVN對於環境變數中的反斜線沒有處理好。總之,如果你想跟我一樣用RapidSVN透過SSH來存取SVN server。就要加上如下的環境變數:
SVN_SSH=c:\\path\\to\\plink.exe重點在於要寫上兩個反斜線字元。不然,RapidSVN就無法找到這個Plink程式了。

Getting Things Done(GTD)

最近工作繁忙,雜事又多,再加上工作以外的一些私事。所以覺得自己生活的步調似乎是有點亂了起來。雖然說,從以前就會製作一些所謂的Todo list的東西,但是總覺得這個Todo List只會越來越長,永遠沒有減少的一天。

如何解決這樣的一個工作與生活上的兩難呢?一開始的時候,我想先找找看有沒有一個比較合用的Todo List工具。在網路上搜尋時,注意到很多關心這類問題的人,都提到了David Allen的一本書『Getting Things Done』。似乎這本書對於大家都有很大的啟發。於是去books.com.tw找了一下,發現這本書有中譯本叫做『搞定!-2分鐘輕鬆管理工作與生活』。當下就買了回來研讀。

的確!這本書所講授的觀念直指核心,提供的方法也簡單有效。首先,他點出了一個重要的心理上的問題--『當你的心頭上有很多件事情,就算你沒有在做。它仍然會干擾你現在的工作,進而造成工作效率上的影響』。基於這個一般人都忽略的事情,這本書重新定義大家對於所謂的Todo項目的管理方式。

這本書告訴你,Todo的管理工具(不管他是什麼,一個電腦程式,你的mail box或是實體的檔案夾),是你忙亂心靈的倚靠。你要把所有的代辦事項放入其中,然後將他們從你的心中放下或甚至遺忘他們。專心致力於你從這個Todo 項目中所取得的第一個項目。藉由這種作法來讓你的工作效率達到最高。

這本書也提供了明確的收集Todo項目,及管理分類的方式。而且它強調的是人生的Todo管理,而不是單純工作上的事情。因為作者認為,你根本不可能完全避開生活的雜事,埋首於工作中。所以把生活雜事也一併列入管理,藉由好的管理方式,還有適當的方式來決定當下該做的事情。可以讓你的工作與家庭還有夢想兼顧。

如果你覺得自己的工作及生活根本是一團混亂的時候,建議去看看這本書吧。沒有什麼讓人看不懂的專案管理,工作安排的高談闊論。都是淺顯易懂的實際作法。

一篇淺顯易懂的版本管理暨SVN使用簡介

下面這個投影片是Jim Huang所撰寫的關於版本管理的簡易介紹,其中也包含了SVN簡介。當然,網路上面對於SVN及版本管理的文章不知凡幾。但是,寫的淺顯易懂卻不多。如果您還不是很了解或甚至從未聽過SVN,建議可以從這篇開始。
http://jserv.sayya.org/writing/version-control-brief.pdf

電腦無緣無故變慢?!

今天我的Windows XP突然無緣無故的變慢了?原本以為是電腦中毒還是被種了後門。但是,用了好幾個掃毒程式及後門檢查工具後,卻一無所獲。

後來以為是硬體的問題,於是就想是不是硬碟快壞掉了。但是,看了很久還是不覺得硬體上有什麼問題。因為一切的運作都很正常,就只是變慢了而已。

後來在網路上面突然看到有人說Windows XP有時會自己將硬碟由DMA mode換成PIO mode來存取。而且,還不會自己換回來。於是趕快透過下面的操作將硬碟的設定調出來看。

裝置管理員->IDE ATA/ATAPI控制器->主要IDE通道->進階設定裝置管理員->IDE ATA/ATAPI控制器->次要IDE通道->進階設定如果設定畫面上的轉送模式不是PIO only,可是目前轉送模式卻是PIO模式,或者是較低的DMA模式(以目前較新的硬碟而言,跑不到Ultra DMA 5就有點怪了)。

根據Microsoft的說法,當Windows遇到超過6次的硬碟CRC錯誤,之後就會嘗試將硬碟以較低的模式運行。而且也不知道是否會自動回覆成較高的模式。所幸,在網路上面有人提供了一些有效的方法。我自己試過有效的就是修改下面的registry值。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\ {4D36E96A-E325-11CE-BFC1-08002BE10318}\000*其中,根據每個人電腦裝置的不同,可能會有0000到0005或更多的數字。透過其下的DriverDesc找到您對應的裝置。並在這下面新增一個型態為DWORD的鍵值:
ResetErrorCountersOnSuccess = 1如果這個鍵值已經存在,就把他的值修改為1。

另外也有人提出另外一種作法,就是把同一個Registry location下的MasterIdDataCheckSum及SlaveIdDataCheckSum的鍵值給移除。如果上述的作法不行,不妨試試這個作法。

雖然,在Microsoft網站上面表示這個問題在Windows XP SP2已經被解決。但是我的電腦已經是SP2了,而且所有該裝的update也都裝了。不過,還是有這個問題。

完成後,重新開機應該就可以感覺到系統速度恢復正常。如果系統仍舊沒有提昇速度,那就表示您的問題可能…

在Microsoft VC8寫的程式找不到DLL的問題

最近在新版的Visual Studio下面寫了一個小程式,本來測試是沒什麼問題的。沒想到換到另外一台電腦上面執行就出現問題了。花很多時間才把真正的問題找出來。原來是Microsoft的side by side技術所造成的。想知道怎麼解決的話,就看看下面這篇文章吧。
在Microsoft VC8寫的程式找不到的DLL問題

用Python控制你的Windows開關機

今天寫了一個讓Windows進入Suspend並且重新Wakeup系統的Python範例。透過這個範例,您可以知道如何讓系統進入suspend或是hibernate模式。並且可以指定電腦在指定的時間重新啟動。如果是進入hibernate模式,系統回復時,將會回到原來執行的狀態。這個用在測試程式中,是一個十分方便的工具。

範例

將 winreg包裝像dict的class

寫了一個Python Class,將_winreg module包裝成dict類似的存取方式,這對於存取registry將會更方便。
將 winreg包裝像dict的class
舉例來說,想要設定Windows啟動執行的程式,就可以這樣寫:

reg = WindowsRegistry()
reg[r'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\MyProgram'] = (ur'c:\Program Files\MyFolder\MyProgram.exe', _winreg.REG_SZ)
print reg[r'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\MyProgram']

介紹TortoiseSVN的使用

最近開始嘗試使用SVN版本控制系統。因為之前使用過TortoiseCVS,所以理所當然的想要使用類似的Client端工具,這個人選當然非TortoseSVN莫數了。這因為這個緣由,就順手寫了一篇TortoiseSVN的簡介,有興趣的人可以去看看。
TortoiseSVN使用簡介

Windows Installer死掉了嗎?

最近我的電腦發生了奇怪的事情。只要是與Windows Installer有關的東西,都無法動作了。也就是說,我無法安裝包裝成msi的軟體。也無法加以移除。搞了半天,始終沒有頭緒。一度動念頭想要將整台電腦重灌。

不過,經過一路追蹤問題,我發現是Windows Installer的服務無法啟動,而造成整個問題。透過系統管理工具中的『服務』,去啟動Windows Installer服務時,每次都看到代碼1067的錯誤訊息。無論怎麼重灌Windows Installer也無法解決。

今天突然靈光一閃,我開始把正在執行的程式一個接著一個砍掉,一邊砍一邊去啟動Windows Installer服務。試了好久,都快要放棄的時候。忽然我的Windows Installer就run起來了。趕快看一下是砍了哪個程式變成這樣的。終於被我找到罪魁禍首了!!就是下面這個程式造成的。只要把這個服務停掉,我的Windows Installer就復活了!!!


感謝匿名網友提供另外一個小技巧:
『只要在windows installer服務的內容裡,在登入那頁勾"允許服務與桌面互動" 就輕鬆解決囉!』

BTW, 我沒實際試過,有遇到這個問題的人,請試試看!然後好心的跟我回報一下!

有些網友找不到service的控制畫面。下面簡單說明一下:

service的控制是在
『控制台->系統管理工具->服務』

英文的話是
『Control Panel->Administrative Tools->Services』

再不然,用command line下services.msc /s也可以叫出來。

再不行...就試試吧
> net stop LVPrcSrv
> %WINDIR%\system32\sc.exe config LVPrcSrv start= disabled

PS: 如果需要重新安裝MSI installer,可以到Microsoft的下載中心

www.dev.idv.tw終於復活了!!

我的主站www.dev.idv.tw,從去年9月掛點到現在,終於復活了!!為甚麼掛點這麼久呢?其實是我比較忙,一直沒有時間去把我網站重建,還好今年年假比較久,利用年假終於把系統給重新弄起來了。而且,我把網站從原本的Plone轉換到了Mediawiki。希望,大家能用的習慣。

總之,有什麼建議就直接跟我說吧!

Standalone的Python執行環境

很多時候我們得在沒有預先安裝Python套件的電腦上面執行Python的程式。如果有一個能夠放在大拇哥裡面的Python環境可以使用,那麼一切就好辦多了。Stand alone Python for Windows就是一個這樣的東西。下載後,將檔案解開到大拇哥的目錄上。到別台沒有安裝Python的電腦上,只要插上這個大拇哥,就可以開始執行Python的程式了。

http://arctrix.com/nas/python/standalone.html

更新到新版的blogger了!

最近一直沒有等到blogger讓我更新我的blog到新版。正在想到底要等到什麼時候,注意到blogger的主頁上面寫著可以插隊。 插隊是吧!當然馬上就給他插下去囉...其他的功能還要努力實驗呢!

NB上面Wireless網卡的天線接法

最近老是在拆裝Notebook,每次都忘記那個Wireless網卡的黑線與白線到底是哪個顏色接在MAIN,哪個顏色接在AUX。經過上網查詢之後,得到的答案是

白線->MAIN黑線->AUX不過,話說回來,好像接錯了也沒有怎麼樣!有誰知道接對接錯有什麼影響嗎?