2008-11-30

能力越大,責任越重

好久沒文章了,最近真的忙到炸掉,哭哭

剛睡前突然想到這句話 "能力越大,責任越重",深有感觸。
之前我家養了阿毛的時候,他相當黏我,所以我舉手投足都要隔外小心,特別是睡覺要翻身時,都要再三確認不會壓到他,才能行動。當 "能力" 不過是 8x kg 的體重時,對應的責任大概就是這個 scale。

當人類在操縱交通工具時,這能力可就大得多,一但發生意外,後果也不像阿毛頂多在地上滾個兩圈而已。然而太多人對手上掌握的能力,並沒有負起足夠的責任。所以馬路上超速、闖燈、開車講手機、過彎不打燈、隨意變換車道、恣意停車、市區/校區內打遠燈/霧燈、這樣的行為比比皆是。

我總喜歡說,三個人以上的問題,就是政府的問題。當民眾違規時,政府未能以有效的教育遏止,亦未能檢討規範本身的適應性,只會想到要嚴加掃蕩增加預算,這樣的政府也算是未能盡責了。但由電視上的作秀、攻訐、結黨、牟利事項來看,或許要求他們能盡本分,也算是種過分的苛求。至於依照充滿了可笑假設與假想推論的經濟學思維來建構市場,放任炒作結果被戳破造成經濟衰退,這樣的問題大概也很難歸咎於任何人吧。

人民沒有智能和道德,就會選出這樣的政治人物;媒體與政府自然會投其所好,也阻絕了人民進步的唯一機會。照這樣說來,既然人民嘗了經濟發展(炒作)時的甜頭,那麼泡沫破滅時嘗到蕭條的苦,也只能說是公平的待遇。世界上的人類要到什麼時候,才能學會地球資源有限,多取只會造成他人匱乏,只有放棄私我謀求眾利才能夠共同發展呢....

還記得以前的課本裡提到過一些 "捨己救人" 的故事,這些故事在近十年內大都被刪除。我認同無謀的救人行為不該被過度美化,但若不以政令教育的方式,為人民樹立良好榜樣的話,他們就只會去學習電視上所見的那些 "明星" 而已。

說實話,比起那些賣臉賣肉賣聲音,飽食終日言不及義的傢伙,或許路邊的清潔工還更值得欽佩些。

順道亂罵,與其叫學生上服務課,做些狗屁倒燥學不到東西的事情,倒不如叫那些學校長官自己去抱垃圾袋等垃圾車。讓一群人去訂定另一群人的規則,不鬧大笑話者幾希。台灣的機車與車道政策如此,經濟政策如此,學校到垃圾與服務課的規定亦是如此。

2008-11-19

ipfilter 隨手亂記

ipfilter 可以從這邊下載,vista 下的放置點:

  • emule: %APPDATA%\emule\config (吧,忘了裝 XD)
  • uTorrent: %APPDATA%\uTorrent

2008-11-13

論語 :: 為政篇第二 210

原文自貼上

為政篇第二 210
子曰:“視其所以,觀其所由,察其所安;人焉廋哉?人焉廋哉?


這篇講的應該是孔先生的識人之術。以前課本總喜歡說,老孔對學生因材施教,如果不能明瞭學生們的個性,是不可能對每個人都搔到癢處的。所以這句解釋了孔先生是怎麼看清人的。

對於 "所以" 、"所由" 與 "所安" 的解釋似乎有不只一種,所以我決定再提一種 XD
我會把 "所以" 當作是動機解釋,而 "所由" 則看成手段。對於 "安" 這個詞,指得可能是他待了舒適的環境,或者是他處世的態度。"瘦" 在這邊念 "搜",指隱瞞,這應該是國文常考的題目 XD

這段的意義在於,若要看清一個人,應該去注意他做事情的動機與手段,以及所處的生活圈 (交友與生活環境)。從反面來解讀的話,則是說人不可能只靠著巧言令色與隱瞞,來偽造出不符合事實的形象。

我對這段的感觸是,如果媒體能在平時以更寫實、有意義的手法報導政治人物的行為與言談,而非在安泰時拍拍小狗狗,出事時又去抓誰上了手銬的鏡頭,那麼有智慧的人民將能看穿虛假的偽裝。至於人民、媒體、政府三方面要如何突破現況開始成長的問題,就以後再談吧。

換換口味

換換口味,來念些不一樣的語言吧 ^^;

還記得中學國文課最喜歡考默寫,寫錯一個字扣一分,扣完就沒了。我那時想說花半小時去記五六百字,然後考一段五十字十分,這樣念書好像不太合本錢,所以國二之後就都不背課文了。反正正常平均若有 85 分,少 15 分也還不致於會被當掉。好在當時的國文老師也算明理,因此能容許我做正確的選擇。雖然我對於引經據典背多分毫無興趣,不過我還是堅持要看懂每一篇文言文的。不只是知道某某人講了什麼 (充其量只是把翻譯也一併背下來) ,而是要弄清楚這樣說的意義在哪,並且在現代生活中能如何應用。

到現在過了十幾年,當時記性很好的同學們口中,似乎沒了這些古文的蹤影;那些應該也背過,想必也考得高分的 "大人物" 們,行為卻又完美的符合了古人對於遜砲的定義。在國文課修習古文,應該是讓學生了解千百年前的生活語倫理教材 (如論語) 、陳情書 (如出師表) 、信件 (超多的)、日記與幹醮 (詩經) 、哲學理論 (道德經) 究竟是怎樣,是否或應如何適用於現代社會,而不只是一堆又一堆的有序文字串列而已。

所以呢 ? 就因為這種 "酒肉穿腸過,佛祖心中留" 的態度,我們有熟知中華民國法律但又貪贓枉法的法官律師,我們有念過希波克拉底誓詞但又忽視病患權利的醫師,我們還有滿街跑通過職業或一般駕駛執照考核但又根本不會開車/騎車的各式駕駛人。我不敢說是 "默寫" 造就了這種表面功夫的文化,但兩者背後是同一種機制,這也是無可否認的。

越離題越遠,總之我對許多行為相當感慨,所以決定來重念一些很老的文章 (回舊文 !?),順便加上我自己的解讀。當然,我的解釋未必要和其它人相同:就我念過的文字總量,在古代應該也算得上是大師了吧 XD 爭論哪一家的解釋比較正確,這種事死無對證,老子是全無興趣的。

以下是古文原文參考來源 (不要想爭文章或解釋正確性的事情。本系列重要性依次為我的解讀、原作者的想法、原文,與其它人的想法):

SQLite + Python ?

前陣子想說,在 PHP 以外,應該學點其它的 Script 來用,所以選擇了 "There's only one way to do one thing" 的 Python ,而非 "There's MORE THAN one way to do one thing" 的 Perl。這是個人喜好問題,所以沒什麼好談的。

至於會想把重心偏離 PHP 的原因,是因為我堅信 "好的語言要基於良好的架構,以及寫得夠好的 manual (進入障礙低)"。十年前,PHP 的 Manual 相當易查易用,主頁面顯示兩層的內容,其中第二層便是函數名稱,且包含函數簡短說明。因此我在一夜之前 K 完其中的大半。幾個月前我又瞄了一下 Online Manual,發現整個架構變得難讀了。主頁面現在只顯示第一層分級,並且沒有說明;各函式的說明又跑到了第四層,而且在 1-3 層都沒有說明。也就是說,我必需要 Click 兩次才看得到函數名稱與說明;或者是,才知道我有沒有走錯分類。除了 Manual 變差以外,在 PHP 涵蓋越來越多功能以後,遲不引入 namespace (或 module) 的概念,會使得多人合作開發系統,或者是程式的引用越來越容易造成麻煩。

至於 SQLite 的故事就更簡單了。我一直有在摸 MySQL (雖然也只在爛使用者的水平),然後之前聽到 Izero 長輩說 KKBox 是用 SQLite 儲存資料,就對這個 Embedded DBMS 有點興趣啦。

然後幾週前,我想說既然平常都是用 PHP + MySQL 來寫東西,何不試試 Python + SQLite 呢 ? 網路上雖然有 Python 2.5 以後內建支援 SQLite3 的說法,不過我試的結果似乎不是如此 XD

  • Windows 版的 Python 2.6 內建 pysqlite2,所以支援 SQLite3。那個 "2" 是 pysqlite 的版本號。另外,我家 AMD AthlonX2 5000+ 跑 vista x64 裝 Python 2.6 AMD64 會當掉,真不知道這是給哪一家的 AMD64 裝用的 XD
  • FreeBSD 用 Ports 裝的 2.5 有包含 sqlite3 這個 lib 的目錄,不過似乎沒有加上 pysqlite2 的 dep。所以要再裝 /usr/ports/databases/py-sqlite3 這個 port
  • Ubuntu 裝太快了,我忘記當時有沒有點 py-sqlite 這個套件,下週應該會再組一台,到時候再看看;Mac 不在手邊沒得試 XD

2008-11-12

從 SQLite 看 SQL (2) :: 隨隨便便的資料庫說明

現在的 RDBMS (關聯性資料庫系統) 多半是長這個樣子:

  • Database 1
  • Database 2
    • Table 1
      • Column 1
      • Column 2
      • Column 3
      • * Index 1
      • * Index 2
    • Table 2
也就是說,資料庫系統底下有好幾個資料庫 (Database),每個資料庫底下有好幾個表格 (Table)。每個表格可以包含有好幾個欄位 (Column),然後每個欄位各自要設定名稱,資料型態,能不能為空值,等等的屬性。資料則是以列為型態在存表格內,稱為資料錄 (Record Set) 或是資料列 (Data Row)。為了加速搜尋,可以將表格的某些欄位設為索引 (Index),那麼在對這些欄位檢索資料時,速度就可能可以加快 (特別是對複雜的查詢)。

有些 DBMS 要求使用者先行登入,並且包含某種型態的權限系統;有些 DBMS (例如 SQLite) 就沒有這樣的設計。另外,有些 DBMS 會設計各種內建函式或語法,使查詢的方式變得更多樣化 (如果能透過下 Query 解決的問題,就不要把資料收到 Script / APP 裡用程式自己算),效能也更高;有些 DBMS 則因某種原因,而不提供某些語法。所以在使用時還是要 K 相關使用手冊。

另外在設計資料庫架構的時候,常有許多考量。這點就自己去 K Google 或翻書吧 XD 比較熱門的大概有正規化,還有寫程式碼時要避免 SQL Injection 等等。

SQLite 具有一些相當有趣的特性,大致上包含:
  • 無需設定
    SQLite 本身是嵌入式資料庫系統,因此無需繁瑣的安裝或維護資料庫系統本身的程序。其它資料庫系統雖然運作得也不錯,但光安裝就可以搞死人了。
  • 非主從式架構
    對大部份資料庫系統來說,你必需要先把它們裝起來,然後透過網路 (即使是連到 localhost) 登入進行作業。使用 SQLite 時,只要能有在硬碟讀寫檔案的權限就夠了。雖然如此,這也使得若程式有蟲,可能會影響到資料庫的正確性 (因為沒有 Server 來管理維護);並且資料庫檔本身的安全性也較差 (少了 Server 的權限控管)。
  • 資料庫只有一個檔案,而且可以跨平台
    SQLite 的資料庫是直接存在檔案裡的,而且檔案可以攜至各種平台使用。這樣備份,搬檔都很方便。
  • 精簡
    SQLite 在編譯後僅佔極小的空間,所以使用它的程式不會變得太過肥大。
  • Manifest Typing
    大多數 DBMS 讓 Column 指定型別,然後只允許符合型別的資料被儲存;SQLite 則讓每個值擁有自己的型別,因此你可以把字串塞進型別為 int 的欄位中。有人覺得這是 bug,不過 SQLite 堅持這是一項 feature。如果能被轉型的話,SQLite 還是會把資料轉成設定的型態的。唯一的例外是當碰上表格的 Primary Key 時,SQLite 會強制將值轉為 int。
    因為有這項特性,我在寫 SQLite 時都不太設欄位型別了 XD
  • 可變長度的欄位
  • 高級原始碼 -- 保證可以由人類看懂
  • 將 SQL 編成虛擬機器碼
    SQLite 會將丟進去的 SQL 指令先編成虛擬機器碼,再真正的去執行搜尋。使用 EXPLAIN 指令將能看到這些碼,有助於除錯等等。
  • 程式碼完全屬於公領域
    SQLite 是完全自由,不受著作權法干預的。(甚至不是 GPL,或是 CC !) 任何人可以將 SQLite 應用在他想要的地方。 (不過著作人格權應該還是受到保障吧,我亂猜的)
  • 對 SQL 的擴充性
    SQLite 提供一些提升效率的工具,例如前面提到的 EXPLAIN 與 Manifest typing。此外 SQLite 還提供了一些標準之外的語法,如 REPLACE, ON CONFLICT, ATTACH, DETACH 等。SQLite 甚至還有 API 讓你可以在 SQL 裡安插自定函數及 Collating Sequences (我不清楚這是啥 @@ 等 K 到這邊再說)

從 SQLite 看 SQL (1) :: 起頭

最近因為某種原因 (不是上次的幫 SPORE 蓋房子了),又回來碰了一下資料庫。隨手翻了一下,發現 SQLite 的官網文件中,關於 SQL 指令的說明相當淺顯易懂,因此打算沒系統的亂翻一下,順便給自己當個備忘。當然,網路上關於 SQLite 的特性與推廣已經夠多了,不需要在這複製貼上 XD

這系列文章的翻譯沒有時間表,更沒有行程表 ! 嚴禁摧稿 (OS: 其實跟本沒人要看吧,哭哭~) 預定之後會分別對 SQL 裡的指令,藉由翻譯 SQLite 文件中的對應項目來做說明。暫定可能照 CREATE, ALTER & DROP, INSERT, DELETE, UPDATE, SELECT, function, TRANSACTION 這樣的順序亂講吧。至於 JOIN, Sub-Query, EXPLAIN, VIEW 就看我能不能在寫到那邊之前,把它們弄熟了 XD

除了 SQLite 的官網之外 (那個指令結構圖還挺好用的),還可以念 MySQL 文件長知識 (2549 頁的知識啊 ~~~),或者看這邊的文章先有點概念。SQL 的歷史及說明可以翻 Wikipedia

另外,由於 SQL 標準允許各資料庫系統在某些地方自由發揮,並且 SQLite 也未必遵守 SQL 的所有標準,不同的 SQL 版本標準也可能有異,因此這系列的文章必然無法涵蓋所有版本的資料庫系統。

WinXP 使用跨距磁碟區的小心得

這幾天因為氣場不順的關係,把手上的幾台電腦都弄到需要重灌 (kukuku~)
其中有台 P4 2.8G 裝的是 WinXP,就順手拿它來玩玩 Windows XP 內建的磁碟管理模式。
(主力桌機 AMD AthlonX2 5000+ 則是在 vista 之外,還裝了 Ubuntu, 目前使用 Kubuntu 8.10 搭配 KDE 4.1 桌面,有空再來聊這個 XD)

為了避免造成混淆,先將以下的幾個名詞加上定義。下列定義僅適用於本文,與業界或各軟體的說明不保證相同 ! (事實上,MS Windows 對於 "磁碟機" 和 "磁碟" 的用法恰好和我相反,哭哭 T_T)

  • 硬碟機 (HDD):實體的硬碟,或者是硬碟的實體
  • 磁區 (Partition) :是在磁碟機中,由如 fdisk 等軟體劃分出的區塊
  • 磁碟 (Drive):指的是由單一或數個區塊組成的邏輯單位,能夠直接被掛載 (Mount) 到一個磁碟代號 (MS),或者是掛載成為另一個磁碟機的某個目錄 (Un*x, 或使用 NTFS 的 MS)
一般情況下,硬碟機最多能分割出四個磁區,包含主要磁區 (Primary Partition) 或至多僅有一個的延伸磁區 (Extended Partition);每個延伸磁區可以再被割出數個邏輯磁區 (Logical Partition)。其中的主要與邏輯磁區,可以當作 Drive 被掛載。平常的 Drive 都只包含一個 Partition。

但在某些情況下,一個 Drive 會包含多個 Partition,例如 RAID 。簡略的說,RAID 就是把數個硬碟機或磁區,經由軟體或硬體的方式,變成一個 Drive 的技術。透過不同的設定,RAID 能夠提高資料的可靠性 (自動的備份與錯誤較正)、加大硬碟容量且資料讀取速度、將 RAID 整體或其中的部份硬碟機取下或更換 (熱插拔、抽換) 等等--這些特性未必同時存在。

Microsoft Windows 從 2000 之後 (含 Server 2003, 2008, 特定版本的 WinXP, Vista ),內建支援某些軟體 RAID 模式,其中使用的名詞大略意義如下:(註:微軟口中的磁碟,指的其實是我的磁碟機,反之亦然)
  • 簡單磁碟:單純的,古典的硬碟使用方式,能夠被轉換成動態磁碟,以支援其它格式
  • 動態磁碟:轉換過的簡單磁碟,支援下列各種特性。無法被轉回簡單磁碟 !
  • 跨距:Spanned Volume,應該算是 RAID 中 JBOD 的一種實作吧 XD (兩邊都有 RFC 或 IEEE 標準啦,不過我懶得看) 注意:RAID JBOD 裡只要有任何一顆磁碟損壞或被拔除,可能會搞爛整個 RAID 的資料;MS Windows 沒有提供任何從跨距磁碟中取出資料的工具程式。系統碟似乎無法建立成跨距磁區。
  • 鏡像:對磁區的 RAID1 (Mirror),因此若其中任一磁區損壞,資料仍然能夠讀取。
接著是要如何在 WinXP or Vista 上建立跨距或鏡像磁碟的步驟簡述:
  1. 電腦上安裝正確的作業系統。Windows XP Home 已知無法建立動態磁碟,Vista 的各版本我不確定 XD 另外,要確定至少有某顆磁碟有足夠且未分割的空間。若是要對某磁碟機 (而非磁區) 建立鏡像的話,可能會需要有兩顆同樣型號的硬碟機;如果要對某磁區建立鏡像的話,需要有大於或等於該磁區大小的未分割空間。
  2. 進入控制台 -> 系統管理 -> 電腦管理 -> 磁碟管理。
  3. 將牽連的所有磁碟機 (包含有未分割空間的那顆) 都轉換成動態磁碟 (右擊 "磁碟#" 的區塊就會有這個選項)。只有動態磁碟機上的磁區,才能夠成為鏡像或跨距磁區。如果轉換的磁碟機包含系統碟的話,需要重開機。
  4. 在要建立鏡像的磁碟機或磁區,或是要轉換成跨距的磁區上按右鍵,點選想要的選項
  5. Windows 會幫你帶出可能使用的磁碟,點選後便完成。
重點在於要有未分割的空間,並且使用的磁碟 (包含原本與要擴充的部份) 都先轉成動態磁碟。否則選項可是會灰給你看喔 XD

2008-11-06

什麼叫 "賓至如歸"

就是當陳雲林來台灣時,給他看看戒嚴還有台灣版的六四事件

台灣人民已經連續選出三次不適任的總統了,(若無適合的候選人,應該以投廢票或不投票的方式,表達自己的意見),希望這次的經驗能讓這些人們開始使用他們的大腦;或者,負責任的處理掉自己造成的麻煩,盡可能盡快的罷免掉吧。

回想中國國民黨前後兩任總統言行,令人不勝唏噓:

  • 李登輝:中共再大也不會比我老爸大
  • 馬英九:我是喝中國奶水長大的
總而言之,我以做為馬英九統治下的中華民國國民為恥;我更以被外國人誤認成中共人民時,無法提出有力證據反駁為恥。

這篇懶得拉連結了,有興趣的自己翻 Google or Wikipedia。