wxJavaScript - 以 JavaScript 開發視窗與 Web 應用程式的工具

雖然 Microsoft 的 .Net Framework 就提供了一個 JScript.Net comipler (jsc.exe),透過 JScript.Net 就可以開發 .Net 平台下的視窗與 Web 應用程式。不過知道的人應該不多,而且對 .Net Framework 架構感冒的人也不少。所以在 OpenSource 界中,就有人做了 wxJavaScript ,一樣可以寫視窗與 Web 應用程式。

熟悉 OpenSource 軟體的開發者,在看到 "wx" 這個字首後,應該就會聯想到 wxWidgets 這個老牌的跨平台 GUI 應用軟體開發工具了。 wxJavaScript 正是以 wxWidgets 為核心,並使用 Mozilla SpiderMonkey 為 JavaScript 引擎的 JavaScript 開發工具。

JavaScript in Seriver-side 發展現況, Rhino 和 wxJavaScript

去年6月, Google 員工 Steve Yegge 指出他打算開發一套基於 JavaScript 語言的 'on Rails' 框架,主要選定的工具是以 Java 實作的 JavaScript 引擎, Mozilla Rhino。故計劃定名為 Rhino on Rails。隔月,又有一個使用 Rhino 實作的 Web 應用開發框架 Helma 釋出。這讓我開始注意到 JavaScript 在 server-side 的開發工作。

前幾天又讓我找到一套將 JavaScript 應用於 server-side 的開發工具: wxJavaScript (See also: 《wxJavaScript - 以 JavaScript 開發視窗與 Web 應用程式的工具》)。Rhino, wxJavaScript 再加上 JScript.Net ,顯示 JavaScript 在 server-side 開發工作上的基礎工具已經漸趨成熟,現在就缺少一個殺手級的應用開發框架了。

JavaScript 需要類別繼承概念嗎?

這2天在找 JavaScript 在 server-side 的軟體開發工作文件時,找到 Peter's Blog,我看完其中的《Transitioning from Java Classes to JavaScript Prototypes》一文之後,很佩服 Peter 這位作者,能夠擺脫過去使用 Java 時的類別繼承思維,認真去研究 JavaScript 的 OO 哲學。

Peter 原本嘗試要在 JaavScript 上實作基於類別繼承(Class-Based Inheritance in JavaScript) 的功能,但隨著他對 JavaScript 的了解日深,他最後放棄初衷,因為:I struggled and struggled but simulating class-based inheritance in JavaScript really doesn't work and makes the code...well...very un-JavaScript-ish.

TWPUG - cakephp換頁效能與架構回應之二

於 TWPUG 之回應內容,點擊連結參閱: 原文章串之回應內容

本文內容主要討論 PHP 資料查詢函數的記憶體管理機制。

FIEND:

如果 我的 db 有 一千萬筆資料 我全部都要入 變數 再 count ... 應該會 error ....

1. count 陣列變數太誇張了..
我在 db 而且 findall 我己經下 limit 了說
塞入 變數 的想法 真的很酷 不敢用會被打死 .

FIEND 不了解查詢結果的記憶體管理機制。當 PHP 向 DB 查詢資料後,資料內容就已經被儲存在 PHP 這方的記憶體內容了。說的更明白些,例如: $resource = mysql_query($query);。此時 $resource 已經是一個儲存了查詢結果的變數(但型態不是陣列)。如果查詢結果有一千萬筆資料,那麼 $resource 就會配置那麼多的記憶體空間儲存那一千萬筆資料。接著再使用 mysql_fetch_array() 等方法取出個別資料記錄。

TWPUG - cakephp換頁效能與架構

本文起於 FIEND 於 TWPUG 上發表之《小弟寫的 cakephp 換頁 排序 功能》。

FIEND 寫道: 而 CAKEPHP 的架構 是很漂亮的 畢竟也是抄 ruby 的架構 . 雖然只做到三層式架構 將 : 資料邏輯層 和 頁面邏輯層 清礎的切開運用 .

這說法挺奇怪的,基本上 "三層式" 只是概念性的說法,以有別於主從式架構明顯的二層結構,並不是 "只有三層"。所以後來更常見的說法是 n-Tier 或 "分散式架構"。"層數"並不是愈多愈好,因此它"雖然"只有三層,並不表示它做的比較差。

還有一點,三層式並不等於 MVC ,雖然同樣是分三塊。

中共建政頭三十年 ~ 死"一小撮人"的歷史

不久前到大陸探親,返程在香港等候轉機時,在機場內的書店中找到了兩本書,分別是《陽謀: 反右派運動始末》、《文化大革命圖典》。這兩本書在國內似乎是找不著的。

加上我原本的《人禍: 大躍進與大饑荒》、《文革十年史》及《天安門》。這五本書大致上可以拼湊出中共建政頭三十年的各種運動之輪廓。這一段歷史我以為可以這麼形容:「死"一小撮人"的歷史」。

湖南祭祖行雜談

前一陣子趁著失業無事之便,去大陸湖南祭祖。從高雄到香港,再從香港轉機到長沙。沒三通就是不便,這一折騰又是一筆開支。接著由堂兄和他的外孫女婿接上車,一路行到祖藉地桃源縣。就是陶淵明不小心迷路進去,出來後寫了篇桃花源記的那縣。但我祖藉地不在桃花源,桃花源還隔了好幾座山頭呢。

我是在台開枝立葉的第一片葉子,更通俗的稱呼是「外省囝仔」、「外省第二代」。我不喜歡這個稱呼,畢竟我確實是在台灣土生土長的人。更何況從小到大,只要我自己不說,沒人看得出我是外省仔。我為什麼要接受那些福佬沙文主義者的稱呼?

無效連結偵測器 - Brokenlink detector

利用 Ajax 技術實作的無效連結偵測器。基本上,它是純 JavaScript 實作品,在 IE 和 Firefox 上都測試過。只有一個外部資源不是用 JavaScript 實作的,就是供 XmlHttpRequest 讀取其他網頁內容的 proxy 。

WebFlow UserInterface

流程編輯器。使用 JavaScript 實作的使用者介面,未附伺服端儲存與載入功能源碼。

使用 wz_jsgraphics.js 繪製線條。當時曾試過 SVG ,但效果與瀏覽器相容性皆不理想,所以還是用 wz_jsgraphics.js 。它是以 1px 大小的 div node 為畫素,構成圖形。

bbslib~~pool - 以小換大的設計啟學

bbslib::pool 是一個簡單的記憶體配置功能 (源碼: bbslib-20010331.tar.gz/strexp/pool.c)。乍看之下,像是一個動態長度字串,但實際上,卻是簡單的動態記憶體管理模組。bbslib::pool 當初在設計時,是有多種考量的,例如安全性。當它要複製或銜接一個字串時,如果原先的空間不足,就會自動重配置夠大的空間去儲存,如此可避免 buffer ovewflow 的問題。而在使用效率上, bbslib::pool 是用 page 為單位向系統要求配置記憶體空間。

起訴天下圍攻,我要自首

新聞報導去年發動天下圍攻的要角,有16人被起訴了。那我也要自首,因為我那天也參了一腳。

我去年十月八日赴台北考乙級軟體設計技術士證術科考,考完之後就在台北火車站夜宿了二夜。因為我要參加天下圍攻。十月十日那天,我違反集會遊行法,還違反道路交通規則,行人站在快車道上。

我是拍照者。從這個角度可以證明,我確實站在快車道上。

在 C 程式中,使用 Regex (Regular Expression) library

我以前維護學校的 Firebird BBS 系統時,寫了一套 library ,其中字串處理部份包含了 Regex library 的使用函數。源碼可於此下載: bbslib2 sources tarball。接下來的 Regex library 說明內容,都取自其中的源碼,不另行列出。

Regex 於其他程式語言中之應用現狀,可見《Regular Expression (RegExp) in JavaScript》、《PHP Manual:Regular Expression Functions (POSIX Extended)》等。

PHP 可用命名慣例避免名稱衝突

PHP5 目前不提供名稱空間(Namespace)功能,但普遍藉由命名慣例 (Name convention) 避免名稱衝突。名稱空間是語法功能;命名慣例則是編程技巧或準則(coding standard)。最常用的慣例是,把你的名號、公司名號或專案名號加在類別名稱前。例如 john 寫了一套 DB 層,那麼類別名稱當為 John_Db ;Xos 專案有一套 DB 層,那麼類別名稱當為 Xos_Db 。甚至於,要學 Java 以 domain name 為命名慣例 (Java 把這套命名慣例應用於 package) 也無不可,例如把類別名稱取作 Tw_Com_ABC_Db 。

在實際撰寫程式碼時,用命名空間和命名慣例的效果是差不多的。如下所示:

$o = new John::Db; //namespace:

$o = new John_Db; //name convention:

名稱空間只得一項好處,就是可以用關鍵字(using or import) 宣告預設名稱空間,讓程序員少打一些字。然而,即便語法支援名稱空間,老練的程序員仍然會採用上述的命名慣例為名稱空間命名,以避免名稱空間的名稱衝突(真拗口...)。

The Austrian View of the Business Cycle

有人說 "The Austrian Model of Business cycle"。嚴格來說,沒有所謂的 Austrian Model 。Model 是數學經濟學家在搞的玩意;對 Austrian School 而言,談的是 Process 。關於 Business cycle 的內容,可參考《人的行為》第20章「利息、信用擴張和商業循環」(Mises著/夏道平譯);線上英文版:《Human Action - Chapter XX. Interest, Credit Expansion, and the Trade Cycle》。Wiki 有一段簡短的說明: Austrian School Business cycle

數字感之數不過三

目前已知的文字系統,都以重複相同的符號來表示前三個數字,例如中文的「一、二、三」,羅馬符號的「Ⅰ、Ⅱ、Ⅲ」。幾乎所有文字系統都在表達三或四以上的數字時放棄此一原則。「數不過三」,一百多年前,心理學家就知道這是人類對數字了解的瞬時極限。 Bertrand Bourdon 的實驗方式顯示,人眼辨識一、二、三個物體不需要半秒,超過三以後,速度和準確度開始劇減。(Stanislas Dehaene/王麗娟譯,《數字感》,pp.73-80)

人的本能,只能分辨「1,2,3」這三個數。這一點從心理學上說明了中文賦予一、二、三等數的意義。一單、二雙、三眾。就本能而言,三以上的數目在分辨時就不準確了,故用「三」就表示數量眾多。「一生二,二生三,三生萬物」(《老子》)。

SQL tips review

jaceju 提到 一篇關於 MySQL 查詢效率的文章: PHP Mysql tips。基本上,該文所列的最快語法,我全部都不建議使用。因為都是 MySQL 特有語法,不具有可移植性。雖然該文主要就是在談 MySQL tips ,但基於可移植性的理由,這種語法能不用就不用。

其他的 SQL 系統,如 PostgreSQL, SQL Server 等等,都針對標準語法(ANSI SQL)做了最佳化。使用同樣的標準語法查詢時,它們的表現不比 MySQL 差。

教育部自己要先考憲法與法律

日前報導 (2007/07/23) 教育部在美國方面施壓下,要求大專院校測考學生的智慧財產權觀念,未通過者不發圖書館證,並要求校方監控學生電腦的網路傳輸內容。

我看教育部的官員自己要先考考憲法與法律吧。檢察官要搜索嫌犯的住所、監聽嫌犯的通訊內容,尚且要備齊證據向法官申請搜索票與監聽。教育部只憑一紙行政命令就要監控學生的網路通訊內容,這是依什麼法、憑什麼權力?如此侵犯個人隱私權的行為,真虧教育部官員想得出來。同樣的,不發圖書館證,也妨害了學生的受教權。

教育部不是警察機關,別把自己當成智財權警察。再者,就算智財權重要,可也和個人隱私一樣,僅是一種私權。豈有令智財權凌駕個人隱私之理?豈能為了保護一部分人的私權,就侵犯另一部分人的私權?而且,另一部分人根本還未發生犯罪事實。軟體業者要保護自己的利益,應先發明有效率的財產權形式,找尋適當的銷售模式。不是把責任都往政府推。

歡迎加入THK

絕望啊! 我對這個只會炒房炒股的政府絕望啦!

工資漲、股價漲、房價漲,物價也漲。失業率也會漲,難道他們不知道嗎?

那也是陰謀嗎?這也是陰謀嗎?這也是、這也是、這也是。全部都是陰謀嗎?陰謀。陰謀。對,這一定是陰謀! 為什麼以前從來沒有察覺到這麼簡單的事呢!? 這都是把我們捲入臺灣家裡蹲協會(Taiwan Hikikomiri Kyokai) 的陰謀。

因為公司裁員,所以我下星期換工作。新職稱是家裡蹲,英文是 NEET ,日文是ひきこもり。THKにようこそ! 歡迎加入THK!

TWPUG問答 - PHP5 個體指派動作的陷阱

前幾天在 TWPUG 上,有位網友提了一個問題。大意是如何以一個個體為正本,透過指派動作複製多次到陣列中,每個陣列元素的內容應該不相同。我看出他碰到了一個語言陷阱,我也回答了。可惜,我當時的答案是錯的... 我重新思索了一下,本文才是正解。

在 PHP5 之後,個體(object)的指派動作皆是使用參照。換言之,當指派來源的資料型態是object時, PHP5 就會用參照;故 $a = $o 的動作實際上等於 $a =&$o