本篇主旨在抱怨,不喜請略過。
剛剛同事跑來跟我說話:
同事:「你那個程式根本不能用嘛,iconv 那麼大,怎麼用?」
我:「要跨平台解決 encoding/unicode 的問題,不用 iconv 會很累。」
同事:「這平台根本沒 unicode,你綁那麼大的一個 iconv 根本沒辦法用啊!」
我:「...」
啃~誰理你那個鳥平台啊?那是不是哪天又碰到一個平台沒 <stdio.h> 的,所有大家寫的 libraries 就都不准用 sprintf() 了[1]?
做任何事都應該要有個限度,如果超過了,那就不好了。寫程式開發軟體也是一樣,應該要先有個基本的共識,決定好「底線」在哪裡。就好像功能不能任由 sales 無限飆高一樣,作為程式基礎的底層平台,也應該在經過取捨之後,做好清楚的定義,不再隨意地更動。
這篇剛好也可以用來回應 nekobe 的這篇《能夠當人, 誰還要來寫程式?》,我承認,我必須這樣亂搞的時候,都會在註解裡加上 TODO 的字樣。唉,亂搞的原因千百種,也許時程上來不及,也許是政治的因素[2],也許是奇蒙子的因素,也許是道德上的考量[3],也或許,原始的需求根本沒有這一項……
如果能夠被當個人看,那寫程式時會快樂一些。
這個倒蠻常見的。:-p ↩E.g. 微軟派 vs. 開放原始碼派。 ↩因為沒有達到「Open Source 軟體應該 release soon, release often」的要求,而被認定是白爛,以致於後來對人不對事地繼續窮追猛打,這種種的現象,讓人不禁體會到,LifeType 開發者的難與累。 ↩
C++/MFC 在新版的 Visual Studio 上真是多災多難啊,不曉得是不是因為微軟要推崇 .Net 的關係。最近我就碰到了這個問題,還好最後透過神奇的股溝大神,找到了個神秘的討論串,再經過奇妙的測試過程,終於搞定了這個莫名其妙的問題。
我需要的是,在 PocketPC 2003 Dialog based 的 MFC 程式上,裝上 menu bar。
可是 Visual Studio 2005 不讓我把 Menu 綁在 Dialog 上,找 Pocket PC Developer Network 得到這一篇文章:《QA: How can I insert menu in a dialog?》,說按照這一篇《QA: How can I use a command bar in a dialog?》的說法,MFC 在 CDialog 裡留了一個小尾巴,放了一個叫 m_pWndEmptyCB 的 protected member variable,將之強制 [...]
睡到一半口渴睡不著,所以就來裝裝 wordpress plugins,找到一個 PostTeaser 看起來還不錯,所以就裝起來試試看。PostTeaser 是一個 excerpt 的加強版,其簡介是說:
Post Teaser generates a preview or "teaser" of a post for the main, archive and category pages, with a link underneath to go to the full post page. It includes features to generate a word count, image count, and an estimated reading time.
可惜,裝起來後發現,他的 word count 對中文字感冒,連帶地也算不準 excerpt 的長度。如果是中文字比較多的文章,很容易就帶出一大票文字,喪失了使用 [...]
Vim 的 syntax coloring 功能強大,讓人愛不釋手;而 doxygen 的出現,讓 C、C++ 甚至 Perl,也都能有像 Javadoc 那樣的 in-code documentation solution。如果能夠兩者結合,如許多 Java IDE 在 editor 裡對 Javadoc 的支援那樣[1],連 comment 裡的文件內容,都能夠把 syntax coloring 弄得漂漂亮亮的,那就更棒了。
剛剛在逛 doxygen 網站,被我發現這個 script:《DoxyGen Syntax : DoxyGen Highlighting on top of c/c++/java》。簡單說,就是能夠在原本 Vim 對 C/C++/Java/... 的 syntax coloring 的基礎上,再增加對註解裡 doxygen 文件內容的 syntax coloring。於是趕緊抓下來試試。
網頁上的安裝方法比較複雜,我試了幾次沒有成功。所以就研究了一下 Vim 的 online document,發現 *mysyntaxfile-add* 這一節這麼說道:
If [...]
最近在整合 libiconv,希望能夠解決一些跨平台[1]文字轉碼的問題。程式寫得很高興,結果移到 Windows 上一執行,卻不能執行,檢查的結果,是不支援 WCHAR_T,嘗試改轉成 UCS-2LE 或是 UTF-16LE,雖然可以轉,但有些字還是會爛掉。經過追查的結果發現,一切都是版本的問題。
對於曾經體驗過 GNU、Linux 以及其他 Open Source 軟體的好處的人來說,如果能夠也在 Windows 平台上,使用這些工具,那可真是一大樂事,多少能夠讓 Windows 變得稍微好用一些。因此,一直以來,這些 open source 軟體,不斷有官方或非官方的人或組織,在進行著 windows porting 的工作。大喀的有 Cygwin/MingGW,小喀的也有 UnxUtils 這類計畫存在[2]。而在 libiconv 的官方網站裡,也可以下載的到一個叫做 libiconv-1.9.1.bin.woe32.zip 的特別版本,將這個版本解開後,通常是放到 C:\usr 下,設定好 PATH 環境變數,即可使用。這正是原本我在 Windows 上使用的 libiconv 版本。
但今天卻發現,這個 1.9.1-woe32 的版本,compile/link 程式都沒有問題,但就是沒有 WCHAR_T,也會讓 UCS-2LE 或 UTF-16LE 的某些字爛掉。測了一下從 google 找到的幾個 libiconv for windows implementation,發現 GnuWin32 所提供的 libiconv,並沒有這個問題。換用了這個版本,跑一遍所有的 [...]
前幾天我在裝「Did You Pass Math?」的時候,其實也一併裝了「footnotes」,不過這個套件可以討論的東西比較多,所以遲至現在才發表。
我一直認為,寫文章用 HTML 實在是用錯了格式。如果可以的話,我希望 blog 裡的文章,是使用 DocBook 格式為其原始格式,然後再經過某種機制,好比說 XSLT,轉換成 HTML 在 blog 裡呈現。理想狀況是,blog 的後台,內建 Web-based WYSIWYG DocBook editor。但這是理想,在現實上,連 stand-alone 的版本都沒有了[1],遑論 blog 後台的整合。因此,遷就於工具的問題,也只好將就[2]。
是故,退而求其次,我希望至少能夠在 (X)HTML 裡,呈現出我常用的文章樣式。對偏向技術性文章的我來說,最重要的就是 program listing 與 inline code 的呈現了。這個我已經藉由 FCKEditor 可自訂 CSS 的功能達到[3],若需要更進一步的 syntax coloring 或 line numbering 的花俏功能,我認為直接在 client 端藉由 javascript 達成[4]即可。
而第二常用的文章樣式,則是 footnote,我個人喜歡使用論文 reference 的寫法,於指涉處與註解處,皆使用方刮號 ( [ 和 ] ) 包裹註解編號,並加上超連結在兩者之間跳躍。這篇《升級到 [...]
今天 comment spam 狂襲,砍到手軟。我不喜歡用 Spam Karma 這類東西,誤判機率蠻大的,重點是其介面又不方便把被誤判的 comment 救回來。另外,為了 web accessibility 考量,AuthImage(trac) 這類機制也不考慮。因此,先裝一個 Did You Pass Math? 試試看效果如何。
Did You Pass Math? 是在發表回應時,要求未登入的使用者,必須回答一個簡單的加法數學題。不像使用圖片的 AuthImage 之流,由於題目是以文字方式呈現,故在 text mode browser 上也可以達到 CAPTHA[1] 的效果。使用 lynx[2] 看的效果如右圖。
目前看來,只有一個問題,就是若不小心答錯了,按上一頁回去時,原本填寫的回應內容,都會遺失。這個還要研究一下 Did You Pass Math? 是怎麼做的,看看可不可以補強。在有結果之前,只好先加點文字說明警告[3]。
CAPTHA: an acronym for "completely automated public Turing test to tell computers and humans apart", trademarked by Carnegie [...]
寫程式的時候,通常我們可以利用 printf() 之類的函式,把一些程式內部的資料印出來,以追蹤程式的運行狀態。以程式設計的術語來說,這個叫做 logging。對於有 console 可以使用的程式來說,printf() 通常便已足敷使用,但若寫的是視窗程式之類沒有 console 的程式,就很麻煩,因為用以替代的 MessageBox() 可以顯示的資料不多[1],又沒辦法將訊息內容複製到剪貼簿裡。當「簡易法」無法奏效的這個時候,就必須啟用「真正的」logging 機制,把 logging 確實當作一個程式運作所必須的 component 來處理。
SHELL> find /usr/ports/devel -type d -name 'log4*' -maxdepth 1
/usr/ports/devel/log4c
/usr/ports/devel/log4cpp
/usr/ports/devel/log4j
/usr/ports/devel/log4cplus
/usr/ports/devel/log4cxx
/usr/ports/devel/log4sh
如上所示,常見的程式語言,我們有 log4* 系列的函式庫可以用,log4j 是其濫觴。對於商業軟體開發工具而言,也通常會有其對應的 logging solution 可用。
言歸正傳,最近我在用 AJAX 寫一個加強 trac 的程式時,發現 logging 之於 javascript 寫作,也很重要,因為 alert() 就跟 MessageBox() 一樣地不方便。安裝 debugger 之類的網頁整合開發環境,是個不錯的辦法。不過,其實我們也可以自己來。
簡單講,logging 其實就是把指定的資料,送到某處顯示,以便於當下或事後檢視。因此,logging 基本上必須有「傳送」與「顯示」這兩個步驟,若要做的好一點的話,可以再加個「記錄」,以便於事後檢視。因此,不考慮進階的「記錄」功能的話,要在 javascript 裡做 logging,其實很簡單,基本把握「傳送」與「顯示」兩原則即可:
function JSLogPrint(msg, tag)
{
var JSLogEnabled = document.JSLogEnabled;
if (JSLogEnabled [...]
剛剛看到 Patrick 介紹的這篇文章:《胡子决定编程语言运势》,原文應該是這篇《Why Microsoft can Blow-Off with C#?》,不禁想大叫,喔喔喔,這真是太八卦了。最好笑的是最下面,Ruby 的創造者 (Mr.Yukihiro Matsumoto) 跑來抗議。強烈推薦一讀。
為了要在 OpenOffice.org2 裡用 Visio 畫出來的圖,我總是得先在 Visio 裡 save as 成 PNG 格式,然後再在 OpenOffice.org2 的 writer 裡插入並設定連結。由於要不斷地在 Visio 與 OpenOffice.org2 之間修改,所以每次都要另外設定存檔格式,十分麻煩。所以簡單地寫了個 VBA,簡化這個步驟:
將目前正在編輯的 Visio 檔案的目前頁面,以目前檔名去掉延伸檔名的部分,存檔成 PNG 格式的圖檔 (當然要再加上 .png 副檔名)。
理想上,透過 SVG 格式會更好。但是因為目前 OpenOffice.org2 對 SVG 的支援,只有一個半官方的 XML filter 叫 SVG Import Filter for OpenOffice 2.0 勉強可以用,所以暫時還是在 Visio 裡同時存檔成 PNG 與 SVG 檔,先用 PNG,以後有機會再用 SVG。
用 macro [...]