今天再次在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(), 這樣就可以順利完成刪除動作了.
PageIndexChanged on mono 1.1.9.2
FeedGator之二
走錯了很多路,最後在參考了Patterns of Enterprise Application Architecture
之後,總算是確定.
否則以我胡思亂想的個性,可能還在亂寫中(真的寫的很亂,慚愧…).
直接利用人家已經想好的 Pattern, 整個大方向會比較快確定下來.
大致的 Class diagram 就長這樣.

喝酒小遊戲之二
非常接近這個小遊戲
取兩顆骰子,中間放一公杯,大家輪流骰,以點數的加總來決定加酒,減酒,喝
6 點代表回轉,本來順時鐘,則改為逆時鐘;反之亦然.
7 點代表往公杯添酒
8 點代表可以減少公杯的酒
9 點代表喝!!把公杯的酒全都喝完!!!
但是不用骰子,使用比較容易取得的撲克牌.
於是就變成翻牌的遊戲,每人輪流從牌堆中翻牌,點數代表意義相同.
以下是我的想法…
想搞刺激的話,可以把牌減少.
想多點樂趣的話,可以再爲一些特殊牌增加特殊意義,如: J 換酒 , Q 表示所有女生分掉, K 表示所有男生分掉…等等的.
蘋果日報圖表
今天亂逛的時候看到這篇文章: “Richy’s Blog(最近很忙): 何止100種?”,真是令人噴飯…
直接想看相簿的話,在這裡:蘋果日報示意圖


