Eco Manager是用python + pygtk寫的,當然這個管理程式希望能包成exe。因此就想到py2exe,自已有try了很久,但是怎麼包都失敗。後來學弟有找到方法,只要把Gtk這資料夾裡的etc、lib、share三個資料夾copy放到py2exe的build出來的dict資料夾中就可以work了。... Read more.
Waynec le monde
Saturday, August 02, 2008
PyGtk and Py2exe
Friday, August 01, 2008
Python subprocess
DataGrabber是之前參加es2008的作品,裡面的Sensor是Eco,host端目前使用window + python。主要内容是用來操控window圖型介面,其中會用到開啟資料夾的指令。
... Read more.







Thursday, July 31, 2008
PyGtk ProgressBar
在upload、dump、erase binary file到Eco上,我們會想知道現在進行的進度。PyGtk中有一個ProgressBar可以拿來使用,Upload的時候,會知道現在透過rs232已經送出了多少bytes,並且也知道整個要上傳binary file的總bytes。
def __init__(self,gladefile,bar_name):
self.gladefile = gladefile
self.dialogboxname = "progressbar_dialog1"
self.bar_name = bar_name
def run(self):
self.wTree = gtk.glade.XML(self.gladefile,self.dialogboxname)
self.progressbar = self.wTree.get_widget(self.dialogboxname)
self.bar = self.wTree.get_widget("progressbar1")
self.bar.set_text(self.bar_name)
def close(self):
self.progressbar.destroy()
def set_fraction(self,val):
if val <= 1.0 and val >= 0.0:
self.bar.set_fraction(val)
else:
self.bar.set_fraction(1.0)
#http://faq.pygtk.org/index.py?req=show&file=faq23.020.htp
while gtk.events_pending():
gtk.main_iteration()
因此create出來的bar object,只要使用set_fraction傳入目前已完成百分比。
... Read more.







Wednesday, July 30, 2008
Python Pyserial scan serial prot
之前替Lab寫了一個Python + PyGtk的GUI程式,目的是為了Lab的Sensor Eco要賣,所以要提供一個簡單的GUI環境,讓使用者能夠從Lab Server下載包好的binary file,並且對Eco的EEPROM做dump、erase、upload、verify等動作。Eco connection是透過RS232,因為usb driver還沒寫好0rz,目前先用RS232將就一下。下面是python套件pyserial掃windows and linux serial port我的寫法。
available = []
for i in range(256):
try:
if os.name == "nt":
s = serial.Serial(i)
available.append((i,s.portstr))
s.close()
elif os.name == "posix":
ser_name = '/dev/ttyUSB' + str(i)
s = serial.Serial(ser_name)
available.append((i,s.portstr))
s.close()
else:
pass
except serial.SerialException:
pass
return available
linux那邊是因為我們用的是usb轉rs232的chip,所以我們要用/dev/ttyUSB之類的device name去scan。... Read more.







Tuesday, July 29, 2008
How to use Subversion
如果os是linux base的話。只有一些instruction要背。$svn import
$svn list
$svn checkout
$svn commit
$svn update
$svn add
$svn rm
首先自已寫的project如果想要上傳到svn自已的repository中的話,要先用svn import這個指令把project import到svn自已的repository中。假設repository是waynec,local端project資料夾是GATE_0803,指令為:$svn import GATE_0803 svn://url/svnroot/waynec/GATE_0803
如果想要知道是否成功,可以用svn list這個指令。$svn list svn://url/svnroot/waynec
接下來,要做的事情是取得svn server上project的working copy,working copy是一份從資料庫裡check out出來的檔案,這份檔案除了含有原本的內容之外,svn會另外增加.svn資料夾,裡面存放著每個檔案的版本資訊等資料,所以我們要有working copy才能夠跟資料庫做同步的動作。$svn checkout svn://url/svnroot/waynec/GATE_0803
以上指令就會把svn server的project GATE_0803,copy一份到自已電腦上並且與svn server做同步。如果用ls -a指令看的話,會發現GATE_0803下面的每一個資料夾,都多了一個.svn的資料夾,這是svn加上去做控制的資訊。
之後在此資料夾下做某些檔案的修改之後想要到一個段落,可以用svn commit去更新server的project。$svn commit
如果project很多人一起修改,在進行編輯前,先使用svn update指令去確定目前自已project資料夾與server上是一樣版本。$svn update
因為svn會透過.svn這個資料夾來紀錄檔案的版本資訊,因此任何不在.svn裡面有紀錄的檔案,svn都無法進行版本控制,所以,當我們新增一個不在repository裡面的檔案的時候,我們必須要用svn add來把把資訊放到.svn裡面。
$svn add C.txt
這樣之後才能使用svn commit去更新svn server也新增此檔案。一樣如果要刪除某檔案,也要先通知自已資料夾的.svn。之後再svn commit通知server也刪除此檔案。$svn rm C.txt
另外,如果只是想copy一份project下來,並不想與svn server做同步,可以用svn export。$svn export svn://url/svnroot/waynec/GATE_0803
... Read more.







Monday, July 28, 2008
Subversion Introduction
最近Lab學長要畢業,我要接管Lab Server。第一個任務就是svn管理,除了開新帳號之外,還要教學弟他們怎麼使用。
開帳號部分,首先開repository,svn上repository就是存放project的地方。Lab的習慣是毎個人的ID是一個repository,毎個人負責的project、demo相關資料或論文都可放上去。
要建立一個repository,我們可以使用svnadmin create這個指令$svnadmin create /svnroot/id
之後切換到/home/svnroot/id/conf的資料夾下,設定passwd的使用者id and passwd。[users]
test = test
並且修改svnserve.conf,把三行註解拿掉。[general]
anon-access = read
auth-access = write
password-db = passwd
此id的使用者就能用設定的帳密去使用。
... Read more.







Sunday, July 27, 2008
Code Syntax HightLight
今天找了一下有關在Blogger上顯示Code Hightligt的方法。
Syntax-highlight
這個網站提供的,可以滿足大部份的程式語言。但是如果選擇顯示line number,post之後如果想要copy,格式在文字編輯器上會亂掉。
... Read more.







Friday, July 25, 2008
Linux Pthread Programming
在Linux上program要使用到Pthread其實很平常,Socket的相關程式大都會用到。以下是部分程式碼
{
unsigned char *strAddr;
unsigned int *tcpPort;
struct thread_data *data;
data = (struct thread_data *)threadarg;
strAddr = data->addr;
tcpPort = data->port;
}
void main()
{
//parameter for pthread
struct thread_data{
U8_T *opcode;
U8_T *addr;
U16_T *port;
};
struct thread_data trd_data;
trd_data.addr = inet_ntoa(UDPClntAddr.sin_addr);
trd_data.opcode = &(SearchPacket.Opcode);
trd_data.port = &(SearchPacket.TcpPort);
pthread_create(&nm_threads[thread_idx],NULL,NM_TCP,(void *)&trdData);
}
Reference
https://computing.llnl.gov/tutorials/pthreads/
... Read more.







Wednesday, July 23, 2008
Python Pygtk and Glade Event handle
使用Glade layout出想要的GUI介面之後,要處理的就是一些Button,像是Toolbar Button、Radio Button等的事件觸發。如下圖顯示,我們可以在Glade Singal Tab裡面,選擇GtkToolButton的Clicked Singal,然後填入自己想定義的Function Name。
之後在Python銜接的地方如下:
- def __init__(self):
- #Set Glade File
- self.gladefile = "EPLab_Manager.glade"
- #window Title Name
- self.windowname = "EPL Manager"
- self.Win = gtk.glade.XML(self.gladefile,self.windowname)
- #Create dictionary and connect to event handle function
- dic = {\
- "on_manager_destroy" : \
- self.manager_quit,
- "on_tb2_version_clicked" : \
- self.on_toolbar_version_clicked
- }
- self.Win.signal_autoconnect(dic)
- def on_toolbar_version_clicked(self,widget):
- print 'on_toolbar_version_clicked\n'
如此就能連接GUI的設定與Event Handler,當使用者按下設定好的Toolbar Button,便會trigger on_toolbar_version_clicked這個function運作。但是不知道哪理出問題,如果想要使用GUI上面close按鈕來關閉視窗,一定要用gtk.main_quit()來離開整個程式。因此上述程式的on_manager_destroy就是連接整個GUI GtkObjec的destroy singal。另外,想要不使用Glade的方式來連接,也可以透過程式直接connect。
- self.Win.single_connect("destray",gtk.main_quit)
這種方式也可以。... Read more.







Thursday, July 17, 2008
Python pygtk and Glade
會碰pygtk其實是因為Lab最近要趕出一個Project,並且對外發售的套件老師希望能夠open source,當初是想要用C#撰寫,不過老師特別偏愛Python,配上其他的GUI的話,當然首推GTK,只要runtime environment灌好就可以在任何平臺趴趴走。
首先到Pygtk下載套件,套件有三個Python、GTK environment、Pygtk三個。
安裝完之後新增test.py並import的地方可以這樣寫
- try:
- import pygtk
- pygtk.require("2.0")
- except:
- print 'error import pygtk'
- try:
- import gtk
- import gtk.glade
- except:
- print "You need to install pyGTK or GTKv2 ",
- print "or set your PYTHONPATH correctly."
- sys.exit(1)
Glade3是一個GTK的interface Designer,拖拉出來的檔案其實是xaml file、而且可以新增event handler,既然有現成的工具,除非是要動態新增或修改的,不然拖一拖就有個簡單的介面,其實非常方便。
在Glade拉出一個介面之後,Python這邊就要來把.glade的file吃進來。
- self.gladefile = "EPLab_Manager.glade"
- #window Title Name
- self.windowname = "EPLab Manager"
- self.wTree = gtk.glade.XML(self.gladefile,self.windowname)
如此就把整個glade file放入wTree當中,之後想要使用或是修改某個component,只要透過
- self.webview = self.wTree.get_widget("treeview1")
來get GTK裡面treeview component,之後就可以透過
pyGTK tutorial
PyGTK 2.0 Reference Manual
來查詢有哪些method或是property可以拿來使用。
... Read more.






