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]。
雖然不甚完美,但毋須苛求了。 ↩
雖然自從 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 [...]
有時候,在搭配 conditional operator (?:) 輸出資料時,我們會依據資料的值,來決定輸出什麼東西。例如:
#include <iostream>
using namespace ::std;
int main()
{
int delay_time = -1; // negative for "random" delay time.
cout << "delay: ";
if (delay_time < 0) {
cout << "random";
}
else [...]
(舊文)
看到 Max.Taiwan 的這篇《sitemeter加入第三方連結》,我決定也把 SiteMeter 也關掉。可惜這陣子渡蜜月去了,所以拖了十來天才有反應,在此向本站的訪客致歉。
雖然說在 SiteMeter 的 Privacy Statement 裡面有這麼一段:
Third Party Advertisements
The advertisements appearing on our website from time to time are provided by a variety of our third party advertising partners. We only share website usage information about our users with reputable third party advertisers for the sole purpose of better targeting our website [...]