很久以前就想要好好地重整一下我的 blog 了,剛好趁著搬家重灌系統的機會,好好地整理一番。那時的目標有
真正的版本控制
資料庫瘦身
升級後台編輯用的 FCKeditor
與 Sidebar Widget 相容
IE 下的畫面極為慘烈
其中,「升級後台編輯用的 FCKeditor」已經在《Wordpress 編輯器升級到 FCKeditor 2.5.x》時搞定,theme 的問題暫時先不解決,所以剩下「真正的版本控制」與「資料庫瘦身」兩個目標。
真正的版本控制
以前的作法是,用 Subversion 管理我的 Wordpress 目錄,不過只是簡單的直接 checkout 出 Wordpress 程式。雖然升級或更換版本很方便,svn update 或 svn switch 一下即可,不過自己在 local 端,因應自己的喜好而做的更改,就沒辦法有好的版本控制機制,加以管理了。
也就是說,我希望在能夠隨時將 Wordpress 主網站的更新同步回來之外,還能夠保有自己因喜好而產生的一些小改變。如果 Wordpress 主程式和我自己的改變,是存放在同一個 subversion repository 裡,那這一切就可以做到。
簡單講就是,如上圖,我希望能夠隨時 incrementally 從 Wordpress 主 subversion repository 將最新的修正,mirror 到自己電腦上的 subversion repository 裡,成為一條 mirror branch。然後,又能夠有自己的一條 local branch,儲存自己的喜好,同時又能夠隨時視需要,將 mirror branch 裡的東西,merge 進我的 local [...]
Android 甫推出,就受到極大的矚目,尤其是 Google 還辦了一個 Android Developer Challenge 的計畫,拿出一千萬美元的獎金,獎勵在 Android 平台上的好 idea。
我簡單地瀏覽了一下 Android 的 API,發現在上面寫 AP 實在是簡單到不行。可能學過 java 幾個月的大學生,都有辦法寫出不錯的 application。好用的 API 實在是平台興盛的要素之一啊。
然後我就不小心寫出了個(還不是真的) Android 中文注音輸入法來。這實在是因為 Android 已經準備好了一個 TextInputMethod 的 class,只要繼承之,實作出自己的 keys to input 的轉換規則,然後要用的地方再 setInputMethod() 或於其 layout xml 裡設定一下 android:inputMethod,一切就搞定了。
不過,由於我還找不到,怎樣讓這個輸入法,能夠在任何不是自己寫的程式裡開啟。在不能夠 globally activable 的情況下,還只能算是個「還不是真的」輸入法。這個問題,是目前最需要被解決的問題。
除了不能 globally activable 之外,我本來想要把輸入法表格先匯入 SQLite 資料庫裡,然後於輸入時查詢對應。一來能夠享用 SQLite 的快速查詢能力,二來 SQLite 也是 Android 官方的資料儲存方式。不過,資料庫都建好了,也用 adb push 放在文件說的標準位置,也直接用 [...]
我的 Recent Backlinks 自從升級到 wordpress 2.3 之後,就一直有問題,會多顯示出 kramer_pre%--> 的字樣。用這個奇怪的字樣去找,發現是 Kramer 這個 plug-in 的問題。當初會裝主要是因為 trackback 壞掉了,所以乾脆裝了 Kramer,會直接到網上找 back links,找到後代替 trackback auto-discovery 機制,插入資料到 wp_comments 表格。既然 Kramer 壞掉了,只好先拔掉再說。
沒想到拔掉 Kramer 之後,問題依舊,即使關掉 get-recent-comments 的 cache 也一樣。於是就直接進 database 裡找,發現不曉得為甚麼,Kramer 把製造出來的 wp_comments.comment_content 內容,前後加上了 <!--%kramer-pre%--> 與 <!--%kramer_post%-->。所以,只好辛苦地,寫個 script 修正 database:
#!/usr/bin/perl -w
use strict;
use utf8;
use File::Basename;
use Getopt::Long;
use DBI;
my ($__exe_name__) = (basename($0));
my ($__revision__) = ('$Rev: 26 [...]
今天看到的,讚:TracWiki WYSIWYG Editor Plugin。
能夠真正產生 Trac 的 wiki 語法存在資料庫裡,故能完美地與 Trac 協同合作。不像 TinyMce Wiki Plugin 會存入 html,造成相容問題。
經測試,能夠直接從 word 把內容複製貼上,樣式會盡可能地保留[1]。
雖然不甚完美,但毋須苛求了。 ↩
這篇是從 drafts 裡挖出,一直沒發的老文章,起始撰寫日期是 2005 年 12 月 30 日。沒發的原因可能是因為還有一些想寫的碎碎念,不過事過境遷,現在也忘了。也幸好,快兩年後的今天,事情已經很不一樣了[1]。
我以為盡可能地使 compiler 不產生 warning 是資訊相關科系都該有的基本常識,可能有危害的 warning 要盡可能改用較安全的寫法排除,沒有危害的 warning 則要記得用 #pragma 關掉。但看到這洋洋灑灑的 794 個 warnings,實在傻眼。不過沒辦法,人微言輕,既然菜,還是只好乖乖擦馬桶去。
雖然若某種奇怪的技術手段硬是被施行的話,warning 數還是會多到嚇死人的地步。 ↩
雖然自從 Wordpress 2.x 開始,就內建了 TinyMCE 這套 WYSIWYG 的編輯器,但因為之前使用 EditorMonkey 裡面的 FCKeditor 功能實在強大,又能依據我的需要進行 customization,因此我仍然還是使用 EditorMonkey。可是,EditorMonkey 內附的 FCKeditor 是 2.2 版,已經很舊了,在使用的過程中,也一再地發現某些 bug,甚至培養出了迴避這些 bug 的編輯行為。
是故,我一直在思考著,是不是什麼時候,來升級一下。就在編寫 dprintf() 系列文章的過程中,實在是受不了了舊版 FCKeditor 的一些 bug 的情況下,再加上 FCKeditor 就在 2007-10-10,剛剛釋出了 2.5 Beta 版,所以一不小心,就把 editormonkey 拔掉,搞出了個 FCKeditor 2.5.x 的 wordpress plug-in 來。
當然,我並沒有那麼厲害,能夠無中生有的憑空造出一個 plug-in 來,主要還是參考了 Dean's FCKEditor For Wordpress,這是官方的 wordpress plugin directory 裡用 fckeditor 當關鍵字,所可以找到的唯一一套真正的 fckeditor [...]
在程式寫作的過程中,通常我們會需要輸出一些訊息,方便我們瞭解程式的運作情形,以便偵錯。因為這些訊息,對程式的真正使用者,也就是我們開發者的客戶,並沒有意義。是故,通常我們會將程式分成測試版 (debug version 或 debug mode) 或釋出版 (release version 或 release mode),然後只在測試版裡輸出這些訊息,而在釋出版裡完全抑制這些訊息的輸出。本文介紹如何實作完美的 dprintf() 來傾印偵錯訊息。
Rafan 在問,怎樣在 screen 裡顯示 ssh 出去的 hostname。這個以前我有搞過類似的:在 screen 裡顯示 vi 正在編輯的檔案。
怎樣使用 screen 的 shelltitle 功能
Screen 可以利用 shelltitle 功能,只要畫面上出現規定的 pattern,就可以抓取其中指定的區域,當作 shell window 的 title。Screen 的 manpage 是這麼說的:
TITLES (naming windows)
You can customize each window's name in the window display (viewed with
the "windows" command [...]
因為我們常要寫 wiki page 以便追蹤專案的進度、列出待辦事項等等,由於在 Trac 裡寫 #1 只會顯示 ticket number,往往我們必須要手動把 ticket summary 加在後面,當 ticket 有所變動時,wiki 與 ticket 兩邊就會不同步,維護起來非常麻煩。所以剛剛練習寫了一個 WikiMacro,取名為 TicketStatus.py,列出 ticket number、summary、status 與 owner,開會時一打開,所有事情一目了然。
WikiMacro 不難寫,不過因為我不太熟 python,所以比較麻煩的地方在於怎樣抓取資料。可能是由於 dynamic language 的特性,很難直接從原始碼追蹤,了解手上可以用的參數,其型別與屬性分別可以輾轉得到哪些資料。不過這對熟悉 python programming 的人,應該不是問題。因為多半有現成的工具,如 ipython 等,幫助我們直接取得、分析、追蹤整個物件結構。
TicketStatus.py 的原始碼如下:
"""
Display status and summaries of specified ticket numbers. Useful for listing
TODOs.
Example:
{{{
[[TicketStatus(#1,#7,#31)]] [...]
今天看到了這篇《Theory P: The Philosophy of Managing Programmers》,真是經典啊,害我相關的文章一直看下去,無法收手。
這位 Time Bryce 老兄發明了一套「P 理論」,描述了管理者應該要怎樣「管理 programmer」比較好,不過卻被許多路過的 programmers 圍剿,最後關閉了 blog 的回應功能。Time Bryce 認為(節錄 Andriy Solovey 的整理):
programmers often bamboozle others and heighten their own self-importance (程式設計師們常會哄騙他人,以提高個人的重要性)
the average programmer has a lower IQ than any other worker with a college degree (比起其他大學程度的工作者,一般程度的程式設計師的 IQ 比較差)
programmers show signs of sloppiness and mental laziness (程式設計師的日常表現,總顯的邋遢草率又懶惰)
they [...]