Sharon 的慶生會,當天喝掉兩瓶 Vodka ( 1.5 瓶 absolute vodka + 0.5 的思美樂 )
隔天,我宿醉,吐了,難過了一整天…慘…
好久沒這樣子了.
可是…被老婆念了一頓.
老樣子,還是從Tuboo 的相簿拉到flickr放.
想看全部的相片,請到這裡囉.

[新酷音]ChewingServer無法啟動
公司的電腦老是無法使用新酷音輸入法.
狀況是這樣子的,切換到新酷音輸入法之後,打任何字都會造成短暫的延遲,無法輸入.
大致的猜測,是因為 ChewingServer 無法載入.
利用 svn 下載 source code(包含 library) 之後
svn co https://svn.csie.net/chewing/win32-chewing/
svn co https://svn.csie.net/chewing/libchewing/
svn co https://svn.csie.net/chewing/libchewingpp/
進行 Trace, 花了不到十五分鐘,就找出原因.
答案是因為在載入家目錄下的 hash.dat ( 在 \Document and settings\xxx\application data\chewing\hash.dat)時,發生了異常,導致整個 ChewingServer crash.
這也是為甚麼會有短暫延遲的原因,每輸入一個字,新酷音輸入法就會試著去啟動 ChewingServer,每次啟動,每次都 crash, 因此就會有延遲.
刪除掉 hash.dat, 讓ChewingServer重新產生以後就行了.
這個問題也回報到這裡了…(很遺憾,第一次填寫,搞不清楚甚麼欄位要填啥,不小心把主旨填成自己的名字了,而且回報的內容也不夠好…下次改進)
Architecture
翻閱A UML Pattern Language的時候看到的,覺得很有道理.摘錄如下:
Architecture is what remains when you cannot take away any more things and still understand the system.
Architecture actually cover 3 similar but different ideas: architecture itself, framework, and toplogy.
Mono XSP 與 SSL
今天逛到的,Mono XSP 也可以支持 SSL,先收錄起來.
*UsingClientCertificatesWithXSP – Mono
演算法之絕佳應用
今天再次在Yahoo!奇摩知識看到經典…點圖看真相.

FoxPro over TCP/IP
VFP 雖然可以使用 ODBC/OLEDB 存取自己的 Database, 但是, 基本上,那還是 File base 的方式,所以如果你想使用 TCP/IP 方式來存取資料庫,那麼你就得被迫使用其他的 Database,如 Microsoft SQL server, Firebird, Oracle… 之類的.
我的 idea 大致就像這樣子…

裡面的 Custom ODBC Driver 與 Daemon/Service 就是要寫的部份.
本想找找看,要怎麼寫 ODBC driver 的.
結果不小心發現,已經有人寫了類似的東西了.
一個是 ODBC Socket Server,另外一個則是Open Database Transport Protocol),都跟我的 idea 相當類似.
ODBC Socket Server, 主要是 client 提供 connect string 與 query string, 讓 server 去做 query 的動作並傳回 xml.
這裡有一些可以參考的文章:
*ODBC Socket Server, PHPBuilder.com
Open Database Transport Protocol)的話,跟 PHP 比較相近,所以提供的範例都是 PHP.
嗯嗯,看來是不用多此一舉再寫一次了… 🙂
光復節的煙火
Regex 101 Exercise
Today, I found an article – Eric Gunnerson’s C# Compendium : Regex 101 Exercise S3 – Validate a zip+4 zip code.
I think that I can practice my regular expression skill.
How to match these patterns using .Net regular expression??
98008
98008-4893
My answer is:
[0-9][0-9][0-9][0-9][0-9]-?[0-9]*
It seems stupid. There should be better solution.
Mono 與 GNU GetText
Debian Wiki上有提供 Mono 的中文簡介說明,裡面有提到與 GNU GetText 合作的方法.
GNU GetText 是 Linux 世界裡作 i18n/l10n 的一組 library.
這意味著 mono 也可以藉由 GNU GetText 來達到 i18n/l10n.
mono網站上提供了詳細的Tutorial可供參考.
以 .Net 本身來說,一般使用的方法是 Resource,原理差不多.
該怎麼選擇,就看開發者個人囉.
Delete via DataAdapter
這是一個慘烈的教訓,我搞了一天半.
我始終不明白,爲什麼我確實地在 DataSet 裡的 DataTable 去刪掉了一筆 DataRow, 但 Update 的時候卻無法成功?
Open source 就是有這好處,於是我開始 Trace mono 的 ByteFX.Data.
大致看了一下,發現幾件有趣的事情:
*在我們呼叫 xxxDataAdapter.Update 的時候,其實是呼叫 DbDataAdapter.Update.各個 Provider 並不負責這件事情.各個 Provider 是負責提供必要的資訊給 DbDataAdapter, 讓她去完成這件事情.
*xxxDataAdpater 的 DeleteCommand, InsertCommand, UpdateCommand 在
xxxDataAdapter da = new xxxDataAdapter(); xxxCommandBuilder xcb = new xxxCommandBuilder( da ); 的時候並不會被馬上組出來,而是在內部被呼叫 RowUpdating (真正要 Update)的時候,才被組合出來.
這些都跟主旨無關.回到正題.爲什麼無法刪除呢??
我使用的語法是這樣子,在我找到我要刪除的 DataRow 之後,我使用的是 DataTable.Rows.Remove( 我要刪除的row ).
很不幸,這會直接從 DataRowCollection 裡面直接刪掉.
但是 DbDataAdapter.Update 依賴的是 DataRowCollection 裡面各個 Row 的 RowState 來判定要新增,修改或是刪除. 如果 DataRowCollection 裡面並沒有這個 DataRow,那麼 DbDataAdapter.Update 也不會知道這個 DataRow 需要被刪除.
因此你在找到要刪除的 DataRow 之後,得用 DataRow.Delete() 才行.
這邊需要特別注意的是, Delete() 之後,不要使用 DataTable.AcceptChanges(),這個命令同樣會使得 DataRowCollection 採取和 Remove() 一樣的動作.
Delete() 之後再呼叫 xxxDataAdapter.Update(), 這樣就可以順利完成刪除動作了.



