Tags: unit_test selenium
在 Web 應用系統的開發工具中, Selenium Core 是一套相當著名的測試工具。它的特點是 "直接在真實的瀏覽器中測試各項動作" 。由於現行各家瀏覽器的實作狀況各有所異,所以這項特點可以真實反應 Web 應用系統對各家瀏覽器的相容性。也正由於它是直接在真實的瀏覽器上進行測試,所以它也不可避免地受瀏覽器的功能限制,其中最主要的限制就是 "Same origin policy"(相同來源政策)。
凡是 Ajax 的開發人員,對於 "Same origin policy" 一定不陌生。這是瀏覽器保護使用者資料的重要安全措施。而 Selenium Core 是一套以 JavaScript 實作的測試工具,所以也受 Same origin policy 限制。這就使得開發人員在使用 Selenium Core 測試 Web 應用系統時,必須要把 Selenium Core 安裝在 Web 應用系統的目錄之下,以符合瀏覽器的相同來源政策。如果 Selenium Core 和 Web 應用系統的來源不相同,瀏覽器就會回應 Selenium Core 沒有權限載入 Web 應用系統的頁面。如此一來也就無法進行測試工作了。
今天看 iThome 的報導,知道 Jazz 開放申請使用。我也是這時才知道, Jazz 原來是一個軟體協作平台。
去年10月底,我參加 2007 IBM開發者大會時,雖然知道大會主題是 "Jazz" ,不過一直以為那是一個形容詞。在當天的議程中,完全沒有看到所謂 "Jazz" 軟體的影子,那天談的是 Web 2.0 和 SOA 。今天才知道原來那還是一個軟體協作平台。IBM 的宣傳也差了點吧...
Tags: CodeIgniter
I extend core libraries of CodeIgniter to detect the request file type and load applicable view.
The other way is use URI Route, see '文件格式之 URI Route Rule 與 CodeIgniter 之實作示範'.
What I want to do is that if user request 'http://localhost/ci/blogs/index.xml', it will try to load a view for XML. In other cases:
- If request 'blogs/index', load 'views/index.php' to render HTML document (default type).
- If request 'blogs/index.xml', load 'views/index.xml.php' to render XML document.
- If request 'blogs/index.pdf', load 'views/index.pdf.php' to render PDF document.
- and so on.
Tags: php CodeIgniter
我習慣將控制元件行為的最後一個參數,設為文件(呈現內容)的"格式",如使用者想要 XML 格式的回傳內容,則傳入 'xml'。例如:
程式定義:
class Controller {
function method( docType ) {
// return result as a XML document.
}
}
var controller = new Controller;
調用控制項時的 URI:
controller/method/xml
# invoke controller->method('xml');
不過,我更喜歡將"文件格式"這個參數放在 URI 的副檔名部份。這部份我放在文章後段。
在 HTTP 協定(RFC2612) 中提到, Host 可用於得知使用者存取主機資源時會使用的主機名稱,供 HTTP Server 判斷虛擬主機設置。Accept-Language 可用於得知使用者的地區語文清單。服務者可根據此清單內容,呈現最適用於使用者的地區語文內容。
在 PHP 中,可藉由全域變數 $_SERVER['HTTP_HOST'] 、 $_SERVER['SERVER_NAME'] 取得 Host 內容。$_SERVER['HTTP_ACCEPT_LANGUAGE'] 取得瀏覽器適用的語文清單。
HTTP_HOST, SERVER_NAME should be the same. However, SERVER_NAME looks like only available in Apache2.
Tags: jquery web_design ui
結合下一步、上一步, Step by step 的步驟引導方式與頁籤UI (Tab UI),設計使用者的資料輸入表單。
本文使用 jQuery 的 UI library。
Update: 2008/02/22
jQuery UI 1.5 移除了 tabsClick() 方法,將它改為 tabs() 方法的 'select' 功能。
Using XSLT, PHP, or Ruby on Rails to transform XML documents into XHTML documents. 展示 XSLT, PHP 與 Ruby on Rails 的樣版撰寫風格。
在使用樣版引擎之前,我們需要先將資料自外觀中分離,因此 A Note of HTML Form and XForm 算是本文的前置文章。當我們將資料和外觀分離時,我們將更進一步考慮如何將外觀樣版化。
Tags: xml xform ajax web_design
如何分割 "資料"(Data)與 "表單外觀"(呈現層,Presentation)。
HTML Form 之中,資料與表單元件的陣述混雜在一起,增加文件編寫與閱讀複雜度。此複雜度不僅是針對人工輸入與閱讀,對應用軟體亦然,例如網頁編輯工具、Famework 工具等等。混雜的陣述方式,增加了前述工具的開發者之工作 - 編程難,除錯難 。
Tags: php CodeIgniter gpl
CodeIgniter 使用自定的授權書, CodeIgniter License Agreement。基於授權內容, CodeIgniter 不能被 GPL 傳染 copyleft 特性。(因為 GPL 的授權方式使其他使用 GPL 源碼的軟體也必須採 GPL 散佈,故人們戲稱這是一種病毒傳染行為)。基於此種限制,我個人認為不能將 CodeIgniter 包裝為我們應用軟體的一部份。CodeIgniter 和我們的應用軟體應該分開散佈。亦即,使用者必須另外下載取得 CodeIgniter 源碼。
故我寫下這份記錄,以說明如何將採用 GPL 授權書的源碼與 CodeIgniter 的源碼隔離散佈。
有些人認為不必如此做。 CodeIgniter 的作者就認為沒有問題。不過我還是傾向於將兩者分開散佈,不將 CodeIgniter 包裝在一起。
基於以下系列討論內容的一大串源碼追蹤。以印證討論內容。
Remember this: Open your mind, use the source.
Tags: JavaScript wxWidgets jscript spidermonkey ecma262 webdev
雖然 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 開發工具。
Tags: JavaScript rails webdev
去年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 開發工作上的基礎工具已經漸趨成熟,現在就缺少一個殺手級的應用開發框架了。
Tags: javascript oop 繼承
這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.
。
Tags: php5 spl sql 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() 等方法取出個別資料記錄。
本文起於 FIEND 於 TWPUG 上發表之《小弟寫的 cakephp 換頁 排序 功能》。
FIEND 寫道:
而 CAKEPHP 的架構 是很漂亮的 畢竟也是抄 ruby 的架構 .
雖然只做到三層式架構 將 :
資料邏輯層 和 頁面邏輯層 清礎的切開運用 .
這說法挺奇怪的,基本上 "三層式" 只是概念性的說法,以有別於主從式架構明顯的二層結構,並不是 "只有三層"。所以後來更常見的說法是 n-Tier 或 "分散式架構"。"層數"並不是愈多愈好,因此它"雖然"只有三層,並不表示它做的比較差。
還有一點,三層式並不等於 MVC ,雖然同樣是分三塊。
前一陣子趁著失業無事之便,去大陸湖南祭祖。從高雄到香港,再從香港轉機到長沙。沒三通就是不便,這一折騰又是一筆開支。接著由堂兄和他的外孫女婿接上車,一路行到祖藉地桃源縣。就是陶淵明不小心迷路進去,出來後寫了篇桃花源記的那縣。但我祖藉地不在桃花源,桃花源還隔了好幾座山頭呢。
我是在台開枝立葉的第一片葉子,更通俗的稱呼是「外省囝仔」、「外省第二代」。我不喜歡這個稱呼,畢竟我確實是在台灣土生土長的人。更何況從小到大,只要我自己不說,沒人看得出我是外省仔。我為什麼要接受那些福佬沙文主義者的稱呼?
利用 Ajax 技術實作的無效連結偵測器。基本上,它是純 JavaScript 實作品,在 IE 和 Firefox 上都測試過。只有一個外部資源不是用 JavaScript 實作的,就是供 XmlHttpRequest 讀取其他網頁內容的 proxy 。
流程編輯器。使用 JavaScript 實作的使用者介面,未附伺服端儲存與載入功能源碼。
使用 wz_jsgraphics.js 繪製線條。當時曾試過 SVG ,但效果與瀏覽器相容性皆不理想,所以還是用 wz_jsgraphics.js 。它是以 1px 大小的 div node 為畫素,構成圖形。
bbslib::pool 是一個簡單的記憶體配置功能 (源碼: bbslib-20010331.tar.gz/strexp/pool.c)。乍看之下,像是一個動態長度字串,但實際上,卻是簡單的動態記憶體管理模組。bbslib::pool 當初在設計時,是有多種考量的,例如安全性。當它要複製或銜接一個字串時,如果原先的空間不足,就會自動重配置夠大的空間去儲存,如此可避免 buffer ovewflow 的問題。而在使用效率上, bbslib::pool 是用 page 為單位向系統要求配置記憶體空間。