由於內建了 WYSIWYG 的 HTML editor,Wordpress 2.0.* 的 posting bookmarklet 也可以直接以 WYSIWYG 的形式編輯文章了 (之前的 WYSIWYG 靠的是 plug-in,posting bookmarklet 沒有 plug 到)。
但是,官方的 posting bookmarklet 會取代掉目前的網頁,這樣在編輯文章時很麻煩,沒辦法回來參照原文編寫。所以只好下手改改這個 posting bookmarklet。基本上關鍵在這裡 (其中,Q 是目前被選取的文字,如果有的話):
location.href
= 'http://www.jeffhung.idv.tw/blog/wp-admin/post.php?text='
+ encodeURIComponent(Q)
+ '&popupurl='
+ encodeURIComponent(location.href)
+ '&popuptitle='
+ encodeURIComponent(document.title);
因為是更改 location.href 來啟動 blog 編輯,所以目前頁面會被替換掉,換成 window.open() 開新視窗,應該就可以了。所以我把這段改成這樣:
window.open(
'http://www.jeffhung.idv.tw/blog/wp-admin/post.php?text='
+ encodeURIComponent(Q)
+ '&popupurl='
+ encodeURIComponent(location.href)
+ '&popuptitle='
+ encodeURIComponent(document.title)
);
卻沒想到,雖然新的 blog 編輯視窗有正確出現了,但原來的頁面卻被切換成這樣:
[object Window]
研究了網路上其他的 bookmarklet 的寫法,才恍然大悟,如果 bookmarklet 的最後一個 statement 有「值」的話,browser (firefox) 就會把這個值顯示在頁面上。所以在最後加一個 [...]
從反微軟資訊新聞的這篇《要付費的軟體發展工具即將成為歷史?》看到的消息,原始來源是 The Register 的這篇《Borland rides Segue on trip out of IDE biz》:Borland 要賣掉他的 Windows/Java 開發工具了,改行搞 software performance 了。
真是令人惋惜但不意外的消息。因業務挫敗導致政策的搖擺,繼而導致產品品質的不穩定,再加上一向秉持的封閉軟體特性,當沒有夠成熟的開放軟體與之競爭的時候,還可以叱吒一時,但若是人們有得選擇時,天平就會擺到不會被綑綁的開放軟體的那邊。
趁著春節假期的空檔,傍晚努力了一番,把我的 blog 給升級到 wordpress 2.0.1 了。雖然一樣是使用 Subversion 安裝,但為了保險起見,我並沒有直接使用 svn switch 的方式,而是另外 checkout 一份,照著 Wordpress 官方網站的這篇《Upgrading Wordpress》一步一步慢慢升級。我的步驟如下:
備份資料庫:使用前陣子寫的 mysql-dump.sh 備份資料庫。
下載:使用 svn checkout 下載 trunk 版 Wordpress 至 wordpress-trunk 目錄,把 blog 目錄改鍊結到此目錄。
執行升級程式。
將原本的 theme 複製至新目錄。
測試,一切正常。
將原本用的 plug-in,除了 HTMLArea 外,皆複製至新目錄。
測試,一切正常。
為了使用 rich editor 的 dialog 功能,將 tab mix plus 設成 allow all popups[1]。
安裝 editormonkey,發現會找不到 toolbar 設定,經查發現是該 plug-in 的 editormonkey/include.php 檔用了 <? 而非 [...]
本系列目前有四篇文章,建議依照以下順序閱讀:
wcfind - avoid find(1) into subversion meta directories
use grep(1) accompany with my wcfind via xargs(1)
Setting svn:keywords in many files simultaneously
再探 wcfind — 用 find2perl 實作
因為同事「發現」了 Visual SourceSafe 的 keyword expansion 的功能,很開心地要用在「檔頭註解」[1]裡,於是我就推薦他使用 Id、Date、Revision 與 Author 這四個 keyword,因為這四個 keyword 在 VSS、CVS 與 Subversion 裡都可以用,且用法一樣。既然終於要正式用了,那我寫的那些程式早已經在用的「檔頭註解」,也要跟著對應過去才行。在剛開始的時候,Subversion (SVN) 只可以使用 Id、LastChangedDate、LastChangedRevision/Rev 與 LastChangedBy 等,所以我也都是用這幾個一直到現在。不過既然後來較通用的 Id、Date、Revision 與 Author 也可以用了[2],就趁此機會換回來。
理論上,我自己在 SVN 這邊用的時候,這些 keywords [...]
本系列目前有四篇文章,建議依照以下順序閱讀:
wcfind - avoid find(1) into subversion meta directories
use grep(1) accompany with my wcfind via xargs(1)
Setting svn:keywords in many files simultaneously
再探 wcfind — 用 find2perl 實作
Sorry, the comment system do not allow me to use rich-format styles. So I reply Laurent's comment of "wcfind - avoid find(1) into subversion meta directories" here.
Hi, Laurent, There are [...]
最近一直很忙,工作環境裡的一些困境一直在困擾著我,並不是沒有技術可以滿足種種需要,而是這些技術都無法被使用,猶如「被綁縛了雙手的俠客」一般,頓時失去了練在雙手上的功夫,連三歲小孩也打不過。看來,要能武功大成,無論在何種境界皆能自在充裕,還有好大好大的一段距離要努力啊。
拜讀 Jserv 的這篇《思索 C++》,裡面引的這句「just say "No" to bad old platforms」挺有意思的,可惜在軟體工程上,決定一切的通常不是技術因素,而是「錢」。「錢」最為優先,次之為「人」,最後才是「技術」。
小弟我有幸身在一個比較沒有市場壓力的研究單位,因此不需要直接面對「錢」的問題。但相對地,「人」的問題,便首當其衝。這兩年來的整理思考,讓我明瞭了,在實務工作上,除了常要 cross platforms 外,還常常需要 cross programmers,不僅 platform 要跨,連 programmer 也要跨。期待所有會使用到你的程式的 programmers 都能具有某些基本能力,就跟期待碰到的 platforms 可以支援基本的 C99/C++98 一樣,緣木求魚。
更慘的是,我們無法 just say "No" to bad old programmers,因為,不僅 team members 會碰觸到你的程式,你的 customer 也有可能會碰到你的程式。在客戶至上的大前提下,是沒有可能因為客戶不懂 template,就 just say "No" to dummy customers 的。最終,還是得弄出一套 pure C 版本朝聖才行。喔,客戶的問題可能還好解,大不了另外寫個 library [...]
研究過 BBS source 的人應該都知道一個很有名的 BIG5 衝碼問題:"壞蛋許\\n"。由於 GCC 跟 VC6 在此處的作法不太一樣。對於 GCC 而言,輸入的程式碼,是一串 bytes,而 VC6 在中文 Windows 裡,則是會把輸入的程式碼,看做是一串 big5 字元,而不只是一串 bytes 而已,所以必須用醜陋的 #ifdef 法,特別為含有「許功蓋」的 string literals[1],各寫一個版本,像這樣:
#if (ADK_COMPILER == ADK_COMPILER_MSC)
printf("壞蛋許\n");
#else if (ADK_COMPILER == ADK_COMPILER_GCC)
printf("壞蛋許\\n");
#endif
把輸入的程式碼,看做是一串 bytes,因此,含有反斜線的「許」字放在 string literals 裡,就必須多加一個反斜線在後面。這樣其實很難用,我常為了要讓程式可以同時 porting 在奮鬥。不過,難用歸難用,但按照 C++98,GCC 的作法,才是比較對的 (雖然也沒有算是完全正確)。
在 Standard C++ 2.2.1 裡指出:
The basic source [...]
本系列目前有四篇文章,建議依照以下順序閱讀:
wcfind - avoid find(1) into subversion meta directories
use grep(1) accompany with my wcfind via xargs(1)
Setting svn:keywords in many files simultaneously
再探 wcfind — 用 find2perl 實作
Ben Reser contributed a bash script called wcgrep that is useful for greping in a Subversion working copy by ignoring the Subversion meta directories .svn/ and vi(m) backup files. We may [...]
我在《Javascript include guard》這篇有提到在 Javascript 裡怎麼寫 include guard,今天再來介紹一下 Bourne Shell 的版本。
一般而言,include guard 的關鍵在設立變數,以及檢驗變數存不存在。在 javascript 裡我們靠的是 typeof() 檢查變數是否存在,但對於 Bourne Shell 而言,卻無法如此套用。因為不存在的變數,在 Bourne Shell 裡會被解譯成空字串。不過還好,空字串也夠用了。這回我們用的是 test 指令的 -n 參數:
SHELL> man test
...
-n string True if the length of string is nonzero.
...
靠著 -n 指令,我們可以判斷給定的變數,解譯後是否是長度為零的空字串。如果變數不存在,便會被解譯成空字串,也可以偵測的出來。所以, Bourne Shell 版的 include guard 就可以寫成這樣:
if [ [...]
我在這篇《Fixing wordpress plugin - recent comments》介紹了怎麼樣修正以便安裝 recent comments 在某些比較新版本的 wordpress 裡。然後網友 1614 留訊息問可不可以解決中文字切一半的問題,所以我就研究了一下,然後就不小心解決了。
首先,先把 PHP 的 multibyte string extension 裝起來,對於 FreeBSD 來說,就是把 converters/php5-mbstring 裝起來即可。如下:
SHELL> cd /usr/ports/converters/php5-mbstring
SHELL> make install
...
基本上,我們將使用 mb_strimwidth() 幫我們切文字,這個函式知道一段字串在 terminal 上會有多「寬」,好比說兩個全形字加三個半形字,會被認知為寬度為 (2*2+3*1)=7,然後依據給定的寬數「切」字串。所以,只要改用 mb_strimwidth() 來作真正的切字串的動作即可。
請修改 recent comments 的 kjgrc_excerpt() 這個函式如下:
function kjgrc_excerpt ($text,$chars_per_comment,$chars_per_word,$tag,$output)
{
$length = strlen(str_replace($tag,"",strip_tags($output)));
[...]