RSS 時刻表 (feedgator)

目的:收集 feed, 然後依照時間顯示最近的 50 筆
主要部份:
1. Crawler, 抓取 feed, 並安插到 Database
1.1 Remover, 週期性刪除,刪除資料庫中超過 30 天或特定天數的 feeds ( This is setting is in web.config, FeedExpiredDays )
2. 主頁面, 從 database 取資料出來顯示
3. Manage:
3.1 新增 feed url
3.2 編輯/修改 feed url 資料
Table 規劃:
feeditem ( author, guid, link, pubdate, title )
feedurls ( link, lastbuild )
其他事項:
1. 頁面美觀, 可以參考 lilina; 另外記得 DataGrid 可以做 grouping.
2. manage 部份可以引進 tab panel, 這樣就可以把 add 與 browse/edit/delete 放在一起了
3. 是否要支援 log4net 來存放 crawler 的 log??
4. 支援 atom?
後記:
其實這個小 project 已經進行一段時間了,都是間斷的寫…到現在還沒弄完…
寫的過程裡面學到不少東西:
1. Mono xsp 可以直接在 httpd 的 configuration 中設置就好(/etc/httpd/conf.d/mono.conf), httpd 會負責把 xsp(mod-mono-server) 叫起來.沒有以前那麼麻煩了.
2. Mono xsp 的 default encoding 需要在環境變數中指定, mod_mono 的設定裡面可以指定 (MonoSetEnv “LANG=en_US.UTF-8”),否則將會是 Apache 的預設 encoding (ASCII)
3. RSS 的 pubdate 用的是 universal time, 而非 local time.
4. MySQL 3.x 不支援 unicode, 或者應該說, bytefx.Data mysql data provider 會依賴 MySQL database 內的 codepage 設定來決定是否要轉碼,而 php mysql library 並不會.
5. nHibernate 尚未移植到 Mono
參考資料:
*Mono
*Mod_mono”
*RSS.NET: An open-source .NET class library for RSS feeds

About Web Crawler

什麼是 Web Crawler?? 其實就是一般慣稱的 bot.
定期在網路上漫遊,將網頁的部分(全部)資料以及特徵值放到自身的資料庫裡面,做為 Search engine 的資料來源.
所以你大概會這麼想,使用一部或多部 server, 以 multiple thread 甚或 multiple process 的方式,去網路上漫遊.
當遇到網頁中有連結的時候,先排程到 Queue 裡面,讓其他有空的 thread/process 能從 Queue 裡面循序取出來,進行漫遊.
設計這樣的一個程式,所需要考慮的一些事情:
1. Multiple database server的考量:一個 database server 可能會承受不住這種情況,所以需要考慮 replication 或是更適合用來取資料的 database engine.
2. Multiple host + Multiple thread 的考量:網路上現今的資料量絕對超過你的想像,所以你不可能使用一台機器甚或一個 thread 去做漫遊,這樣會花費太多時間.另外也要考慮 lock, resource …等等的問題.
3. Queue 實作的方式: 有些立即性的連結,可能需要放在 thread/process 自身的 queue 裡面,比較不具立即性的連結,就可能放在 database server 上. (Priority Queues)
我想我考慮的可能還太淺.
其他一些可以參考的或可能用上的技術:
* Lucene
* Google Desktop search API
* MySQL replication
* Thread pool
* DDJ 2001 April: Web site searching & Indexing in Perl

MSN messenger+ foolbar2000

早先就知道可以讓 Windows Media Player 播放的曲目資訊顯示在 MSN messenger 上.
可是…我並不喜歡用 Windows Media Player 來播放歌曲啊.
之前也逛到讓 foolbar2000 播放的曲目資訊顯示在 MSN messenger 上的方法,可是我並沒有去試.
今天心血來潮了,上網搜尋了一下:
*PCDVD數位科技討論區 – [教學]如何不慣WMP9啟動MSN歌名同步
節錄步驟如下,照著作就對了.
1. 先到這裡 HKEY_CURRENT_USER\Software\Microsoft\MSNMessenger\PerPassportSettings000000000\
把 “ShowTransientPSM” 改成 dword:00000001.
2. 下載 MSN Messenger Now Playing Plugin (gen_msn), 解開以後,放到 foolbar2000 目錄下的 components.
3. 收工.

Mono ByteFX.Data 與 encoding

ByteFX.Data 是 MySQL 的 .Net Data Provider, 同時提供有 monoMicrosoft.Net 的版本(微軟版本好像叫做 Connector/.Net).
這兩天在試著用 mono 與 ByteFX.Data 來存取 MySQL 資料庫.
但卻發現中文的字串在存入資料庫之後,全部都變成問號了.
原本以為是我編碼的處置或設定有問題,在經過 Trace mono 與 ByteFX.Data 的 source code 之後,才發現並不是.
我開始懷疑是 MySQL 的問題,我首先去問 Google 大神.
Google 大神告訴我,MySQL 在 4.0 以前並不支援 unicode, 資料庫預設的編碼是 latin1.
ok, 那麼為什麼使用 MediaWiki 或是一些 blog 卻可以存入 unicode 的字串??
又稍稍的 Trace 了 MediaWiki 的 source code, 並無驚人之處,也沒有什麼特別的處理,純粹就是 insert, update 而已.
最後我再回頭看 ByteFX.Data 的 source code, 終於找到問題所在.
ByteFX.Data 在丟封包到 MySQL 之前,會先依據 MySQL 的 encoding 進行編碼.
所以不管怎麼樣,我在 client 怎麼轉碼,到最後 ByteFX.Data 都會轉成 latin1,再進行存入.
是故,可能的解法如下:
1. 升級 MySQL 到 4.0 以後的版本.
2. 在丟資料庫之前,先把字串轉為 byte[], 如果是 byte[], ByteFX.Data 就不會進行轉碼,而直接存入. 但這樣在取出資料的時候,還需要再作一次工,將 byte[] 轉回 string.
解法 2 相當費事,而且以後如果要更換資料庫的時候,又會再受到一次衝擊.
看來解法 1 才是王道. 但是,懶得升級說… =_=

在 .Net 指定 proxy 的方法

其實只要在 Machine.config (也就是 xxx.exe.config) 裡面指定就可以了.
範例如下:
<configuration>
  <system.net>
    <defaultProxy>
    <proxy
      proxyaddress = “http://proxyserver:80”
      bypassonlocal = “true”
    />
    </defaultProxy>
  </system.net>
</configuration>
此方法, .Net 與 mono 均適用.
參考資料:
*dotnetJiNi.com – Blogs @ Jignesh Desai

又中了一個莫名奇妙的二獎

今天中獎了
真是令人喜出望外啊…
可惜….不是真的.
前兩星期,接到電話是作問券調查
居然是作手機調查,說我們公司有作手機 (見鬼,我自己在公司都不知道公司有作手機),所以需要做一些手機使用的調查…
哈拉半天,給他一個假名字,就掛掉,不以為意
上星期又打電話來,說要寄小贈品,萊爾富禮券 (萊爾富有禮券嗎??不曾聽過)
並且說星期二,也就是昨天,好像在淡水捷運站吧,有抽獎晚會活動.
老樣子,又給他同一個假名字跟假地址.
今天居然就打電話來說中二獎了, 120 萬.
Oh! My God. 買彩券跟統一發票都沒這麼好運.
他哈啦了八分鐘,這中間,我的話裡完全沒興奮的感覺,他應該也心裡有數吧.
最後我丟下一句,我不要.
僅此紀念一下,我曾經中過 120 萬.

The LINQ Project(心得)

懶得把 LINQ 裝起來試….
目前只把 LINQ 與 DLINQ 的 overview 看完而已…
這邊做一個簡單的說明
LINQ ,實作類似 SQL Query 的語法來操作 collection
DLINQ, 解決 Relational DB 與 collection 之間的轉換與對應.
XLINQ, 解決 XML 文件與 collection 之間的轉換與對應.
VFP, 以 SQL Query 直接操作工作區或 Relational DB
看出 LINQ 與 VFP 的不同了嗎??
VFP 的確很強大,已經把 Query 資料庫的技術發揮到極致,但缺點是很難對應到物件導向世界,物件導向的世界裡面一切都是物件,只有 class / object, 而沒有 database. 很多同類的物件在一起,是 collection, 是 container, 而不是 database.
LINQ 則是直接對 collection 操作.
目前很多人對 DLINQ 頗有微詞的地方,是在於 DLINQ 使用了 attribute 去為 class 的 member 貼上資訊,在與 Relational DB 對應的時候,就依照這些 attribute 來做對應.這樣會使得相依性過高.
這部份,我也不知道怎麼樣會是比較好,但 nHibernate 看起來是一個不錯的選擇.
其他可以參考的開源ORM專案:
*Gentle.NET
*iBatis
*nHibernate