JeffHung.Blog

(My smile insists of having nose. :-)

Program development should have clear baseline, and scope

本篇主旨在抱怨,不喜請略過。
剛剛同事跑來跟我說話:

同事:「你那個程式根本不能用嘛,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 開發者的難與累。 ↩

Creating menu bar in PPC2003 dialog based APP, in VS.2005

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,將之強制 [...]

Ideogram sensitive PostTeaser

睡到一半口渴睡不著,所以就來裝裝 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 的長度。如果是中文字比較多的文章,很容易就帶出一大票文字,喪失了使用 [...]

Doxygen syntax coloring in Vim

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 [...]

Right libiconv version for Windows

最近在整合 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,並沒有這個問題。換用了這個版本,跑一遍所有的 [...]

啟用「footnotes」

前幾天我在裝「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 的寫法,於指涉處與註解處,皆使用方刮號 ( [ 和 ] ) 包裹註解編號,並加上超連結在兩者之間跳躍。這篇《升級到 [...]

啟用「Did You Pass Math?」

今天 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 [...]

Logging in Javascript

寫程式的時候,通常我們可以利用 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) 跑來抗議。強烈推薦一讀。

Save current visio page as PNG and SVG files using VBA

為了要在 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 [...]

 Prev 1 2 3 4 5 6 7 8 ...11 12 13 Next