好久沒文章了,最近真的忙到炸掉,哭哭
剛睡前突然想到這句話 "能力越大,責任越重",深有感觸。
之前我家養了阿毛的時候,他相當黏我,所以我舉手投足都要隔外小心,特別是睡覺要翻身時,都要再三確認不會壓到他,才能行動。當 "能力" 不過是 8x kg 的體重時,對應的責任大概就是這個 scale。
當人類在操縱交通工具時,這能力可就大得多,一但發生意外,後果也不像阿毛頂多在地上滾個兩圈而已。然而太多人對手上掌握的能力,並沒有負起足夠的責任。所以馬路上超速、闖燈、開車講手機、過彎不打燈、隨意變換車道、恣意停車、市區/校區內打遠燈/霧燈、這樣的行為比比皆是。
我總喜歡說,三個人以上的問題,就是政府的問題。當民眾違規時,政府未能以有效的教育遏止,亦未能檢討規範本身的適應性,只會想到要嚴加掃蕩增加預算,這樣的政府也算是未能盡責了。但由電視上的作秀、攻訐、結黨、牟利事項來看,或許要求他們能盡本分,也算是種過分的苛求。至於依照充滿了可笑假設與假想推論的經濟學思維來建構市場,放任炒作結果被戳破造成經濟衰退,這樣的問題大概也很難歸咎於任何人吧。
人民沒有智能和道德,就會選出這樣的政治人物;媒體與政府自然會投其所好,也阻絕了人民進步的唯一機會。照這樣說來,既然人民嘗了經濟發展(炒作)時的甜頭,那麼泡沫破滅時嘗到蕭條的苦,也只能說是公平的待遇。世界上的人類要到什麼時候,才能學會地球資源有限,多取只會造成他人匱乏,只有放棄私我謀求眾利才能夠共同發展呢....
還記得以前的課本裡提到過一些 "捨己救人" 的故事,這些故事在近十年內大都被刪除。我認同無謀的救人行為不該被過度美化,但若不以政令教育的方式,為人民樹立良好榜樣的話,他們就只會去學習電視上所見的那些 "明星" 而已。
說實話,比起那些賣臉賣肉賣聲音,飽食終日言不及義的傢伙,或許路邊的清潔工還更值得欽佩些。
順道亂罵,與其叫學生上服務課,做些狗屁倒燥學不到東西的事情,倒不如叫那些學校長官自己去抱垃圾袋等垃圾車。讓一群人去訂定另一群人的規則,不鬧大笑話者幾希。台灣的機車與車道政策如此,經濟政策如此,學校到垃圾與服務課的規定亦是如此。
2008-11-30
能力越大,責任越重
2008-11-19
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
- Table 1
有些 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)
但在某些情況下,一個 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),因此若其中任一磁區損壞,資料仍然能夠讀取。
- 電腦上安裝正確的作業系統。Windows XP Home 已知無法建立動態磁碟,Vista 的各版本我不確定 XD 另外,要確定至少有某顆磁碟有足夠且未分割的空間。若是要對某磁碟機 (而非磁區) 建立鏡像的話,可能會需要有兩顆同樣型號的硬碟機;如果要對某磁區建立鏡像的話,需要有大於或等於該磁區大小的未分割空間。
- 進入控制台 -> 系統管理 -> 電腦管理 -> 磁碟管理。
- 將牽連的所有磁碟機 (包含有未分割空間的那顆) 都轉換成動態磁碟 (右擊 "磁碟#" 的區塊就會有這個選項)。只有動態磁碟機上的磁區,才能夠成為鏡像或跨距磁區。如果轉換的磁碟機包含系統碟的話,需要重開機。
- 在要建立鏡像的磁碟機或磁區,或是要轉換成跨距的磁區上按右鍵,點選想要的選項
- Windows 會幫你帶出可能使用的磁碟,點選後便完成。
2008-11-06
什麼叫 "賓至如歸"
就是當陳雲林來台灣時,給他看看戒嚴還有台灣版的六四事件。
台灣人民已經連續選出三次不適任的總統了,(若無適合的候選人,應該以投廢票或不投票的方式,表達自己的意見),希望這次的經驗能讓這些人們開始使用他們的大腦;或者,負責任的處理掉自己造成的麻煩,盡可能盡快的罷免掉吧。
回想中國國民黨前後兩任總統言行,令人不勝唏噓:
- 李登輝:中共再大也不會比我老爸大
- 馬英九:我是喝中國奶水長大的
這篇懶得拉連結了,有興趣的自己翻 Google or Wikipedia。
2008-10-31
Matlab 的編碼與中文顯示
雖然 Matlab 官方宣稱字串在變數 (Workspace) 與二進位儲存檔 (.mat) 是使用 Unicode 編碼,據稱為 UTF16be,不過使用 Editor 編輯儲存時,似乎沒這麼回事 T_T
在 Vista 底下,預設使用 C950 (Big5) 編中文就算了,在 Mac OSX 上 (明確設定 LANG, LC = zh_TW.UTF-8) 還是給我存成 Big5 就有點過份了。更糟的是,餵 Unicode 給它 (UTF8, UTF16, UTF16be) 通通看不懂 !!!!!
也就是說,預設 Matlab 的主程式基於 Unicode 運作,自帶的 Editor 只看得懂 Big5 編碼。有空再試試這樣的限制是來自於 Editor 還是
另外,在網路上也看到了一些關於 Matlab 使用中文發生問題的解決方式,簡單整理如下。Matlab 7.x (2006 以後的版本) 確定支援中文 (只是編碼很笨而已 XD),若無法正確顯示,多半是字型設定的問題 (Windows / Un*x 都是)。只要更換為包含中文的顯示字型便可以正常輸入顯示。順便推薦網路上爬到的 雅黑 + Consolas Hybrid 字型,畢竟寫程式用的字型,一定要能清楚區別 "I,l,1", "0,o,O", "i,j" 這幾個不同的字元。該字型中文部份使用微軟雅黑,為了避免授權的問題,請需要的人自行 Google 吧 XD (認識的當然可以直接要啦 :p)

