因為在 porting 某支程式,所以用 MSDN 找 read(),想要確定該 include 哪個 header,link 哪個 library,結果 MSDN 的 read() 頁面,僅僅顯示這麼一行:
This POSIX function is deprecated beginning in Visual C++ 2005. Use the ISO C++ conformant _read instead.
這真是活見鬼了,什麼時候 ISO C++ 裡有以底線開頭的 API 了?更別提 _read() 根本不是 ISO C++/POSIX 的 function。
好吧,他說的是 conformant,所以不是在說 _read() 是 ISO C++ 的標準,而是說用 _read() 的方法呼叫 read(),才符合 ISO C++ 的一些規定。但即使如此,這個解釋,還是怎麼聽來就怎麼怪。
勉強為其解釋,我記得 Microsoft 平台有一種 [...]
看到這篇《Tree-structured FSFS repositories》真的必須記錄一下。不過還是先前情提要一番,再來記錄重點,與自己的想法好了。
Subversion 的 FSFS 原本是把每個 revision 存成一個檔案,放在同一個目錄下。所以,如文中舉例的 Apache Software Foundation (ASF) 的 repository clone,如果總共有 500k 個 revisions,就會有 500k 個檔案,塞在同一個目錄裡。而即將推出的 Subversion 1.5,會改進 FSFS,將檔案以 1000 為單位,分散在不同的子目錄下。
本篇文章值得記錄的有以下幾點:
"Macro-benchmarks using a clone of the ASF repository (about 500k revisions) showed that the new scheme might be slightly (<1%) slower than the old scheme for reads"
"VFAT exhibits roughly O(N) behaviour, and [...]
看到這篇《網頁程式碼美化程式 Google Code Prettify》的介紹,我也試裝了一下。果然所有程式碼的列表,自動有了 syntax highlighting。
Google Code Prettify 的特色是,用的時候不需要指定語言,會自動偵測。我們「唯三」需要做的,就是:
在 <header> 引入 google-code-prettify 的 css 與 javascript 檔。
將你要做 syntax highlighting 的程式碼,寫在 <pre> 裡,並賦予 prettyprint 的 CSS class。
在文件全部載入之後,呼叫 prettyPrint() 函式。
由於我有一堆文章,已經把程式碼放在 <pre>,使用 code 這個 CSS class 標示,因此,我需要做一些額外的處理,把這些 <pre class="code"> 找出來,再多加上 prettyprint 的 CSS class。
將 google-code-prettify 抓下來解開後[1],會有兩個檔:prettify.css 與 prettify.js,一起放到 theme 目錄下即可。因為 Y!UI 很好用,所以我就偷懶直接依靠 Y!UI。修改 wordpress 佈景主題的 header.php 檔[2],在 </head> [...]
第一集《不求甚解》還在撰寫中[1],今天又上演第二集了。
某人宣稱,若用 C# 寫 COM 包 C 寫的 library,因為 C# 有記憶體管理機制,記憶體會自動 free,所以就可以不用呼叫 C library 提供的 uninit() 了喔。
最好是這樣啦,這回我不跟你玩了,出問題不要怪我沒提醒過。
老毛病,寫著寫著,就會想要把技術細節寫清楚,以便以後自己可以查閱,都忘了文章的主要目的了。 ↩
自從啟用 footnotes plug-in 以後,我在編輯時,就方便了許多。不過,原本的 footnotes 0.91 版,還是有一些小問題,讓我有些困擾。所以,剛剛我找了一下官方的 wordpress plug-in directory,發現 footnotes 已經更名為 wp-footnotes。測了一下,並照著原本的改法,將 <span class="footnote"> 的標示法修正進去,再加上修了一些小 bug 後,順利升級到了 wp-footnotes 1.4 版。
在原本的 footnotes 0.91 版裡,是使用 while 迴圈搭配 strpos() 尋找註腳,也許是因為這樣,有時候在後台編輯時,會發生程式陷入無窮迴圈的錯誤。新版的 wp-footnotes 改用 preg_match_all() 搜尋註腳,希望效果會好一些。
不過,也許是因為改用了 preg_match_all(),原本只要修改 $footnote_open 與 $footnote_close 兩個常數變數的技法[1],反而失效了。因此我鑽了一下,發現這兩個常數,在丟給 preg_match_all() 之前,有先用 preg_quote() 先處理過。這本來是件好事,但壞就壞在,preg_quote() 預設會替很多 delimiters 前面加反斜線,包括 < 與 > 等。然而,在 preg_match_all() 這行的 regular expression 裡,FOOTNOTE_OPEN 與 FOOTNOTE_CLOSE 所在的部份,其實式不需要替 [...]
剛剛發現,我的這篇《Detect & post-build for Intel C++ Compiler》,被一個中國人全文抄錄到他的 blog 裡。由於整個排版,仍然是原來的樣子,甚至連裡面的 footnotes,連結也都是連回到我的 blog,因此可以合理推斷,是被直接「複製/貼上」全文抄錄的。
被全文抄錄不打緊,因為反正我用的授權模式是 CC:by,也就是只要有明確標示出,原作者是我,即可全文抄錄,任意使用。事實上,被抄其實是我的榮幸。
不過,在看到對方甚至連「轉載自」的字樣都沒寫[1],卻剛好得以符合 CC:by 的規定的原因是,因為直接使用「複製/貼上」,所以連文章標題下面那一小塊,標示分類、作者以及發表日期的區塊,也一併複製,因而恰好符合了,須標示原作者的條件。這不禁讓我感到,啼笑皆非。
2007-09-05 更新:又被另一個中國人無視著作權規定地全文抄錄。這次他忘記把「posted by」這段也抄到,所以明確地違反了 CC:by。
2007-09-06 更新:Kenneth 已經加上來源說明了。
2007-09-26 更新:
再兩例:《練習寫 TracMacro - [[TicketStatus]]》與《Implementing dprintf() with __VA_ARGS__》。一樣因為是直接「複製/貼上」全文抄錄,含作者資訊,所以符合 CC:by。該 blog 許多文章看起來也都是「複製/貼上」來的,其他的來源,不一定允許這種全文抄錄,就看那些被抄的作者,決定怎麼反應了。
又,訪客留在我的 blog 的留言,也被抄錄了。理論上我站上的訪客留言並沒有做任何版權宣告,故應被視作是 copyright reserved,這部份因為也被抄錄了,所以請敝站也被抄襲的訪客留言作者,自行向該 blog 聲討囉[2]。
要到對方 blog 的首頁,才會發現「本空间文章,未经原作者同意,请勿做商业用途。未注明的文章均为转载。」的字樣。又,就算對方有註明「未经原作者同意,请勿做商业用途」,但該篇文章「真正的原作者」其實是我,而我用 CC:by,允許商業使用。所以有需要的人,請隨意,不必理會抄錄者的授權宣告。 ↩我不擁有訪客留言的智慧財產權,故無法代為聲討。 ↩
剛進大學時,聽說 UltraEdit 是 programmer 必備的編輯器,也用了一段時間。不過後來遇上了 Editplus,從此把 UltraEdit 完全捨棄,從大四一直用到現在,也將近七個年頭了,剛剛在看 BBS 上的舊文章,發現自己雖然提到過很多次,但從來沒有在 blog 上跟大家介紹 Editplus,因此特地寫這一篇,勸說大家離開 UltraEdit 的懷抱。
簡單先用一句話介紹:「除了 binary(hex) edit 以外,UltraEdit 有的 Editplus 都有,Editplus 有的 UltraEdit 不一定有。」
在七年前,如果把 UltraEdit 與 Editplus 的功能列出來比較的話,基本上 UltraEdit 是被「巴」假的。一直慢慢等到 UltraEdit 陸續新增了四、五個版次[1],UltraEdit 的功能,才漸漸地追上 Editplus。而 Editplus 的版次,從七年前到現在,都還是 2,從以前就一直強悍到現在。
Editplus 好在哪裡?先來貼一下 BBS 上的舊文:
作者 JeffHung (御風只配做笨木頭), 信區: BBS_History
標題 Re: 最近.....
時間 淡江資工地上站 (Fri Jun [...]
本文拖太久了,斷斷續續寫,寫到後來都忘記本來想寫什麼了。不過我發現,好像 thegiive 自己分多次,把很多我要寫的都寫完了。:-p
剛剛看到這篇《Twitter , Rails , Scalibility...More》,我哈哈大笑三聲。所謂的 scalability,就是「有沒有能力在短時間內應付突然爆增的流量成長」嘛!結果 thegiive 最後的結論竟然是:
那麼一時之間無法解決也是非常正常的事情。所以,他們應該也不是太懶惰,只是成功的太突然,沒辦法吃下來。…至於 Ruby 是不是真的太慢,Rails 是不是真的不夠 Scalibilty 呢?這個問題我也不知道…
既然這樣子,那我也沒辦法了,寫再多,又有何用,情人眼中出西施咩。所以剩下的我也就懶得寫了,各位看官自行斟酌吧。
這篇是為了回應 thegiive 的這篇《簡單的回應 JeffHung 的文章》,thegiive 對於我在《COSCUP2006》裡對 RoR 的一些意見,不表認同。不過在談技術之前,我想先澄清一點的是,這種很明顯地就是會沒有結論,甚至容易陷入 flame war 的問題,其實並不適合在那種場合提出 challenge,因為不會解決任何事情。用 challenge 這個字眼,其實也不太對,COSCUP 是個可以讓大家 up up 的場合,真的沒有必要白刀子進紅刀子出。事後的交流,也是可以產生火花,而且更為持久,一切由心,端看我們怎麼想,個人覺得實在是沒有必要那麼亢奮。
再好的 template engine,也解決不了套版的問題
我們先來看看套版的問題好了。也許是雙方對「套版」兩字的定義不同吧?我的意思是,在一般網站的開發過程中,程式設計師將動態網頁的功能寫好時,通常網頁的畫面是「素」的,非常陽春不經任何裝飾。接下來要做的就是,將轉交給版面設計師,也就是俗稱的美工,所設計好的華麗版面,套在這個「素」的版面上。對於程式設計師來說,這個「套版」的過程,通常是非常痛苦無聊的,但又不可能交給版面設計師處理,因為通常版面設計師,並無法處理到「碼」的層級。面對美麗的美工姊姊,小小工程師只好乖乖地與複雜的 HTML 混碼奮鬥。
更恐怖的是,通常來說,這個過程不會只做一遍,通常會形成一個循環,程式改好後套版,版面或程式稍微改寫之後,又要重新套版,循環不休。這當然是因為,在專案進行的過程當中,通常不可能很幸運地可以一條鞭式地順著瀑布溜下來。
對於套版問題,目前已經成熟的技術,是各式各樣的 template engine,如 PHP 的 Smarty。除了解決了 security-concern、separate-from-login 與 caching 等需求之外,簡單的語法,也讓套版的困難度,降低了少許。但無論如何,template 仍然是以「碼」的形式存在,要處理套版,仍然是只能讓程式設計師會版面設計,或者是讓版面設計師會寫點程式。
幸好,這個世界有在慢慢地改善,隨著 CSS/W3CStd. 的普及,以及 Ajax 的流行,套版的問題,將可以得到相當大的改進。如果網頁是功能性的,像 Gmail 那樣,比較好的解法會是使用如 ZK、GWT 這類的 Ajax [...]
舊聞新發,不過我弄丟了原來寫文章時的 timestamp。
Windows Mobile 6 SDK 開放下載了,分 Standard 跟 Professional 兩個版本,兩者主要差在支援的平台不同,不過因為 Professional 版沒有包含 Standard 版,所以最好還是兩個版本都安裝。
花了一天下載後,嘗試安裝。安裝程式跟我說,需要安裝下列三樣東西:
Visual Studio 2005 SP1 or later
ActiveSync 4.5
.NET Compact Framework 2.0 SP1
前兩者很好理解。Visual Studio 2005 是用來當作開發平台用的,SDK 提供 header files、libraries 以及 emulator 等,Visual Studio 2005 則提供 compiler 與 IDE。而 ActiveSync 4.5 的角色,當然就是負責傳輸編譯好的程式,到 mobile device 上,以及負責 debug 時所需要的協同傳輸。
但 .NET Compact Framework 2.0 SP1 就讓我搞不清楚啦,我不是已經裝了 .NET Framework [...]
在做 cdrtools 時,看到這個 message:
===> Building for cjk-cdrtools-2.01.20041227_2
W A R N I N G Messages like:
gmake[2]: Entering directory `/tmp/cdrtools-2.01/libschily'
../RULES/r-gmake.dep:76: OBJ/<arch-dir>/cvmod.d: No such file or directory
../RULES/r-gmake.dep:76: OBJ/<arch-dir>/dat.d: No such file or directory
../RULES/r-gmake.dep:76: OBJ/<arch-dir>/fcons.d: No such file or directory
../RULES/r-gmake.dep:76: [...]