ECMAScript 各實作版本應用於程式設計工作之現況

jaceju 在 重新認識 JavaScript 一文的回應提到了 JScript 及其用於開發獨立程式的事。我先釐清名詞與觀念: JScript 是 ECMAScript 的實作版本,不是 JavaScript 的延伸。

ECMAScript 是一種語言規範。而 JavaScript 和 JScript 則是這種規範的具體實踐。除此之外 Adobe 用於 Flash 上的 ActionScript 也是 ECMAScript 的實作版本。

重新認識 JavaScript

說到 JavaScript ,大概每個程序員都會寫一點,但真正把 JavaScript 當作一個程式語言認真學習過的人卻不算多。還是有人分不清 Java 和 JavaScript 的差別,還是有人把 JavaScript 當作 Java 在寫。你知道 JavaScript 如何實現封裝與繼承嗎?你知道 JavaScript 如何作 Reflection 嗎?你知道 JavaScript 如何實現匿名遞迴嗎?如果你無法理解上述內容或者發覺它看似熟悉卻又如此陌生時,那麼就應該拋棄以前的錯誤認知,重新認識 JavaScript 這個老夥伴的真實面貌。

重新認識 JavaScript part 2, 互動環境 (command line mode)

繼《重新認識JavaScript》後,再介紹便於學習與測試的互動模式工具。

動態語言強調立即反應,最好使用者輸入什麼敘述,執行環境就立即顯示結果,發生錯誤亦可立即修改。然而 JavaScript 傳統的執行環境 (host) 是在瀏覽器上,所以我們通常習慣將 JavaScript 程式碼編輯儲存在檔案中,再開啟瀏覽器執行。這方式在學習時有些缺點,像是訊息輸出便非常麻煩。試想,如果你要練習用迴圈顯示一個九九乘法表,在上述環境中你可無法直接 print 、puts 或 echo 在瀏覽器上啊。最簡單的方式也要先指定一個文件節點,然後設定其 innterHTML 屬性才行。

軟體工程的 GPS

Tags: 軟體工程 agile-method RUP

在 Taiwan.CNet 上看到喲哪桑寫的《GPS與軟體流程》,我想到了軟體工程中確實存在著類似 GPS 的智能代理者 (Intelligent Agents) 。

認知「法律」的本質

Tags: 法學

守法是國民的義務嗎?守法是天經地義的,還是可以選擇的呢?

其實在中國道家與西方經濟學中,對法律這玩意就已經有相當深入的科學性探討 (道家原本就是在禮法崩壞之際發展出來的系統性理論;經濟學在一百多年前還是屬於道德科學或法學科目) 。雖然法律也有「規律」的概念,但它絕不是客觀規律、不是任何物理學運動規律。法律純然是主觀性概念之人為產物,法律的內容從來不是天經地義。嘛,有些人認為所有「規律」都是客觀的、天經地義。在那些人眼中,光講出「法律的內容從來不是天經地義」就是反動分子。

在我看來,要真正認真地思考什麼是法律,就要先釐清什麼是天經地義的客觀規律,什麼是人的規律。

CDD 式的 Framework - Andromeda

TWPUG.net (以定義為基礎的程式架構 - Andromeda) 提到一個 Configuration Driven Development 的 Framework: Andromeda。 Andromeda 開發流程像是在塑模,然後自動產生應用程式。讓我覺得像在 Eclipse 上用 UML 塑模然後產生程式碼一樣。所以我覺得它像是 application platform ,而不像是 framework 。而它在處理 Object/Relationship Mapping 時用自創的語法,不是中介資料格式、不是 UML 、不是 SQL 也不是 PHP 。這麼做有沒有好處呢?目前我還看不出來。

邊學邊翻 Ruby 的文件,翻譯工作真累

這一陣子一邊學 Ruby 語言,一邊翻譯它的文件。這翻譯工作還真累,明明一眼看過去就懂的東西,再用中文寫出來竟然要推敲半天。 Ruby User's Guide 裡的一節至少要花上我一小時。翻譯真累。回想起來,我當年翻 PHP Manual (PHP3/PHP4) 時都沒這麼勤奮,這跟 PHP Manual 的翻譯工作不方便也有關吧。 PHP 要用 XML 格式編輯,還要透過版本控制服務,還有一點,現在正體中文沒有維護者。我就懶得動手了。

現在也跟 Ruby 社群的人搭上線,開始幫忙翻譯 Ruby Programming@wikibooks 的內容了。這是 Ruby 官方網站列出的四本線上 Manuals 之一,有興趣的一起來 wiki 吧。

Ruby User's Guide 的翻譯初稿見此:Rock Say Ruby 。翻完之後,也會提交給 Ruby 正體中文官方網站的維護者。

御宅族不是家裡蹲,オタク≠NEET

御宅族不是家裡蹲,オタク≠NEET 。要不是今天看了聯合報的社會新聞「你好宅」(聯合報民國96年2月25日A3版訊),我還不知道台灣已經自創「宅男」一詞表示「家裡蹲 (NEET)」了。聯合報的記者還算敬業,至少 wiki 做足功課 (御宅族@wiki) ,明白指出「宅男」是台灣人望文生義之下自創的詞語,和「御宅族」的意義有所不同。ACG 愛好者在使用時要小心,對圈外人可別用「宅」這個字,當圈外人說自己很宅時,也要嚴正指出:你搞錯了,我可不是家裡蹲。

自由軟體不是慈善事業

標籤: 自由軟體

常常看到如下例關於自由軟體的觀點:

目前很多人對自由軟體的評價是:不好用。這剛好跟開發者的思維有關。許多自由軟體使用者喜歡功能精簡的軟體,自由軟體開發者自然也有這樣的思維。但是大多數的人想法剛好跟這些人相反。 許多自由軟體現有的問題探討

我以為此一「問題」其實是從以往商業軟體的使用習慣為出發點才存在,同時摻雜了使用者對自由軟體抱有「無私分享」之理想的「偏見」。

網路服務與純 JavaScript 應用之 JSON 資料包裹解決方案, Google 的方式

Tags: ajax json web2.0

我在 網路服務與純 JavaScript 應用之 JSON 資料包裹解決方案 提到的概念,其實最初也是在 Google 上看到這種概念。只是我那時寫著寫著,卻忘了 Google 的方式... 網友忘幽谷提醒才想起。

Google 查詢服務回傳的資料格式是它自家的 GData 文件 (GData uses either of two standard XML-based syndication formats: Atom or RSS) 。為了讓使用者能建立純 JavaScript 應用, Google 就提供了將 GData 資料內容改用 JSON 格式包裹在 JavaScript 程式碼中的服務方式。

網路服務與純 JavaScript 應用之 JSON 資料包裹解決方案

Tags: ajax json web2.0

在 Web 2.0 的浪潮下,有愈來愈多的網路服務推出,如網路相簿、網路書籤、網路書櫃等等。大多數網路服務都有提供 Blog 使用的小工具 (或稱 Badge) ,從軟體設計的觀點來看,這些小工具才是我們在談的「網路服務」、「服務元件 (service compoent)」。

我最近在玩網路書籤提供的這些服務元件,就我觀察這些服務元件主要分兩種形式:一、以一段固定的 JavaScript 程式碼輸出網頁內容;二、僅提供 XML/JSON 資料,讓使用者自己處理程式邏輯。這兩種形式各有限制。第一種包辦了資料和程式邏輯,使用者只需/只能用 CSS 調整外觀;而且因為包含了 JavaScript 的程式邏輯,所以不同服務者提供的服務元件放在同一個頁面時可能會相衝,有我無他、或者大家一起掛。第二種則受限於 XMLHttpRequest 的安全性限制,基本上不能做成純 JavaScript 的應用。

為 Ruby 設了個網誌

為 Ruby 在 Blogger 上加了個網誌,叫 Rock Say Ruby,主要用來放置我整理翻譯的 ruby 文件。目前我只整理同樣是以 GFDL 條款散佈的 Ruby User's GuideRuby Programming (這是 WikiBooks 上的 wiki 版) 。

作為我個人的 ruby 學習筆記,我的翻譯以「快」為主,不求信、達、雅。我在翻譯時最花時間的不是搞清句子的意思,反而是在一些術語、名詞上打轉。如 object ,我最初接觸時翻作「個體」 (資策會翻的) ,但後來反而是「物件」一詞普及。十幾年下來,不難看出「物件」一詞不夠達義,所以我堅持不用「物件」一詞。我秉持「言者在意,得意忘言」的態度,更不覺得一個英文詞就一定要固定對應一個中文詞才叫正確,所以我的翻譯內容可能不會有很多慣用譯詞。反正我都是用 GFDL 散佈,看不下去的人可以自己再重翻。

Load and Execute JavaScript on Demand, by createElement

在《Load and Execute JavaScript on Demand》一文中,我說明了利用 XMLHttpRequest 動態載入外部 JavaScript 程式的技巧。然而那技巧是用於應付某些特殊情境之手段,其限制與特點如下列所示:

  1. 受限於 XMLHttpRequest 之安全性管制,不能載入不同主機的外部程式。
  2. 易於掌握載入狀況及執行順序。
  3. 執行方式較具彈性,甚至可以選擇性執行片段。例如《Load and Execute JavaScript on Demand》之範例程式第74-79行之註解內容,原意是截取夾雜在一般 HTML 文件中的 JavaScript 程式碼,且僅僅執行此片段程式。此亦為該程式實作之最初用途,因為外部 JavaScript 程式碼並非位於純粹 .js 文件中,而是夾雜在網誌的文章中。

To Ruby From PHP, 中譯

PHP 普遍應用於 web 應用軟體環境中,但若你想用 Ruby on Rails 或只是想找一個更適於處理廣泛用途的語言, Ruby 值得看看。

函數設計準則

我們在設計函數時,通常要考量函數之中發生錯誤時應如何處理?這一方面的知識沒有捷徑,通常需要仰賴足夠的設計經驗以為準則。概略而言可分兩部份來談:其一是錯誤回報;其二是資源回收。

由於此文是我回應 Tokimeki 的 PHP 文章之內容整理而來,故會夾雜一些 PHP 的例子。