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 為單位向系統要求配置記憶體空間。
新聞報導去年發動天下圍攻的要角,有16人被起訴了。那我也要自首,因為我那天也參了一腳。
我去年十月八日赴台北考乙級軟體設計技術士證術科考,考完之後就在台北火車站夜宿了二夜。因為我要參加天下圍攻。十月十日那天,我違反集會遊行法,還違反道路交通規則,行人站在快車道上。
我是拍照者。從這個角度可以證明,我確實站在快車道上。
Tags: php5 namespace name_convention coding_standard
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) 宣告預設名稱空間,讓程序員少打一些字。然而,即便語法支援名稱空間,老練的程序員仍然會採用上述的命名慣例為名稱空間命名,以避免名稱空間的名稱衝突(真拗口...)。
Tags: 奧地利經濟學派 Austrian_school 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。
Tags: 心理學 數字
目前已知的文字系統,都以重複相同的符號來表示前三個數字,例如中文的「一、二、三」,羅馬符號的「Ⅰ、Ⅱ、Ⅲ」。幾乎所有文字系統都在表達三或四以上的數字時放棄此一原則。「數不過三」,一百多年前,心理學家就知道這是人類對數字了解的瞬時極限。 Bertrand Bourdon 的實驗方式顯示,人眼辨識一、二、三個物體不需要半秒,超過三以後,速度和準確度開始劇減。(Stanislas Dehaene/王麗娟譯,《數字感》,pp.73-80)
人的本能,只能分辨「1,2,3」這三個數。這一點從心理學上說明了中文賦予一、二、三等數的意義。一單、二雙、三眾。就本能而言,三以上的數目在分辨時就不準確了,故用「三」就表示數量眾多。「一生二,二生三,三生萬物」(《老子》)。
Tags: SQL
jaceju 提到 一篇關於 MySQL 查詢效率的文章: PHP Mysql tips。基本上,該文所列的最快語法,我全部都不建議使用。因為都是 MySQL 特有語法,不具有可移植性。雖然該文主要就是在談 MySQL tips ,但基於可移植性的理由,這種語法能不用就不用。
其他的 SQL 系統,如 PostgreSQL, SQL Server 等等,都針對標準語法(ANSI SQL)做了最佳化。使用同樣的標準語法查詢時,它們的表現不比 MySQL 差。
Tags: 著作權 隱私權
日前報導 (2007/07/23) 教育部在美國方面施壓下,要求大專院校測考學生的智慧財產權觀念,未通過者不發圖書館證,並要求校方監控學生電腦的網路傳輸內容。
我看教育部的官員自己要先考考憲法與法律吧。檢察官要搜索嫌犯的住所、監聽嫌犯的通訊內容,尚且要備齊證據向法官申請搜索票與監聽。教育部只憑一紙行政命令就要監控學生的網路通訊內容,這是依什麼法、憑什麼權力?如此侵犯個人隱私權的行為,真虧教育部官員想得出來。同樣的,不發圖書館證,也妨害了學生的受教權。
教育部不是警察機關,別把自己當成智財權警察。再者,就算智財權重要,可也和個人隱私一樣,僅是一種私權。豈有令智財權凌駕個人隱私之理?豈能為了保護一部分人的私權,就侵犯另一部分人的私權?而且,另一部分人根本還未發生犯罪事實。軟體業者要保護自己的利益,應先發明有效率的財產權形式,找尋適當的銷售模式。不是把責任都往政府推。
絕望啊! 我對這個只會炒房炒股的政府絕望啦!
工資漲、股價漲、房價漲,物價也漲。失業率也會漲,難道他們不知道嗎?
那也是陰謀嗎?這也是陰謀嗎?這也是、這也是、這也是。全部都是陰謀嗎?陰謀。陰謀。對,這一定是陰謀! 為什麼以前從來沒有察覺到這麼簡單的事呢!? 這都是把我們捲入臺灣家裡蹲協會(Taiwan Hikikomiri Kyokai) 的陰謀。
因為公司裁員,所以我下星期換工作。新職稱是家裡蹲,英文是 NEET ,日文是ひきこもり。THKにようこそ! 歡迎加入THK!。
Tags: php reference object
前幾天在 TWPUG 上,有位網友提了一個問題。大意是如何以一個個體為正本,透過指派動作複製多次到陣列中,每個陣列元素的內容應該不相同。我看出他碰到了一個語言陷阱,我也回答了。可惜,我當時的答案是錯的... 我重新思索了一下,本文才是正解。
在 PHP5 之後,個體(object)的指派動作皆是使用參照。換言之,當指派來源的資料型態是object時, PHP5 就會用參照;故 $a = $o
的動作實際上等於 $a =&$o
。
Tags: metaprogramming 動態語言 generic template
cf 的回應 中提到了 polymorphism 和 generic 的看法。我的看法稍有不同。
我眼中的泛型(generic),若用非常簡化的方式來表達,就是不管型別,只看程式形式,亦即演算法。如稍候例舉的 max() 就是一種泛型演算法 (STL 也有一個同名的演算法)。我的說法和其他人的說法應該沒什麼不同。那麼多型(polymorphism)、泛型和樣板(templete)之間有什麼關係?端視程式語言的特性而定。
首先,多型(polymorphism)具有類別繼承的性質,是個體導向(OO)的概念,但泛型(generic) 不是個體導向概念。我們同樣可以在只有基礎資料型態,沒有繼承觀念的環境中使用泛型設計,只是彈性就低多了。在個體導向語言中,藉由類別繼承與動態連結的能力,才能充分發揮泛型設計的優點。
Tags: C++ STL
最近在練習使用 C++ STL 中的 Container 功能。嗯,寫著寫著,覺得很不順手啊。例如不能用 Vector/Set/Map 直接建表。Stack 的 pop() 方法沒有回傳值;我用 C 寫的 stack 功能, pop() 是會推一個值出來的。
挑了兩個 STL Container 的練習程式碼,再用 Ruby 寫一段相同的。兩相比較,也算在吐槽吧。