Watch "Sometimes in April"
上週某日早上 (近來閒賦在家,不知今日何日) ,無意中在 HBO 頻道上看到一部關於 1994 年廬安達種族屠殺事件的半紀錄式電影,片名為「Sometimes in April」。這部片不是日前獲得奧斯卡提名的「廬安達飯店 (Hotel Rwanda)」,但兩部電影都是在描寫廬安達種族屠殺事件,而「廬安達飯店」也確有其事其地。
上週某日早上 (近來閒賦在家,不知今日何日) ,無意中在 HBO 頻道上看到一部關於 1994 年廬安達種族屠殺事件的半紀錄式電影,片名為「Sometimes in April」。這部片不是日前獲得奧斯卡提名的「廬安達飯店 (Hotel Rwanda)」,但兩部電影都是在描寫廬安達種族屠殺事件,而「廬安達飯店」也確有其事其地。
RUP (Rational Unified Process) 的內容又大又多,令人望而卻步。在「透過類比介紹 IBM Rational Unified Process 的要點」一文中,作者嘗試以電影製作過程為喻,說明 RUP 各項設計工作的概念,全文並不涉及 RUP 各項工具的使用。如果想了解更多關於 RUP 的內容,可以拜訪「Rational software developer resources」。瀏覽「The Rational Edge: Browse by category: Rational Unified Process (RUP)」中精選自至 Rational 社群的相關文章,亦甚有助益。
Borland C/C++ 5.5 Compiler 是由 Inspire (前身是 Borland) 免費提供下載與使用的 C/C++ compiler 和相關工具 (我記得大約在 2000 年時就已經發佈這項免費下載的資訊)。檔案不大,下載包約 8.7MB ,但已包含了完整的 ANSI/ISO C/C++ 的核心,包括 STL (Standard Template Library) ,對 ANSI C++ 的支援涵蓋到 C99 的規範內容。就 C/C++ language and programming 教學用途而言,已是非常完整的工具。 如果要開發應用軟體,其實也足夠,只是要自行下載與安裝各式 SDK (Software Development Kits) 罷了。
在 IBM developerWorks 中,有一系列 AJAX 入門文章,短短五篇並附上詳細範例以及參考資料,抵得上坊間數百頁的書籍。我個人就是從這學 AJAX 。
當衍生類別 (derived class) 繼承了基底類別 (base class) 的成員時,常常忘了要初始 (配置) 那些成員,亦即呼叫基底類別的建構函數。這是 OOP 初學者,也是 JavaScript programmer 在實作繼承關係時易犯的毛病。
在 AJAX 中,用 while 檢查 readyState 是同步模式的做法。這將使整個程式陷在 while 迴圈中,直到 readyState 的狀態符合脫離迴圈的條件為止。最明顯的缺點是頻繁地執行檢查動作,造成程式負載提高。而且這實際上就是同步模式,實作上,還不如明確指定以同步模式執行,即指定 XmlHttpRequest.open() 的第三個參數為 false ,反而較有效率。
日前我參加了 2006 IBM 開發者大會,有幸聽聞尖端軟體工程團隊成員介紹最新的軟體開發趨勢「議程:大師看未來-軟體開發趨勢展望」。原本安排由 Dr. Ivar Jacobson (UML 創始人之一) 主講,可惜因颱風作梗,改由陳博士 (從 Rational 時代就跟隨 Dr. Jacobson 的團隊成員) 主講。這樣也好,陳博士以中文講說,省去了現場翻譯的語言隔閡。
JSON 是一種輕量級且可讀性高的資料轉換中介格式。已成為 IETF RFC4627 規範內容。
What is JSON (JavaScript Object Notation): Introducing JSON
目前已有多種方式可在 PHP 中運用 JSON 。個人建議使用 php-json ,這是 C 語言實作的 PHP extension 。
依據 PHP::serialize and unserialize with Form 實作的 serialization class 。
使用 PHP 的 serialize, compress 及 encode 函數,將 serialized object 儲存在網頁表單中。有 ASP.Net 使用經驗者,這即是 ViewState 的原理。
根據 W3C 關於 HTML DOM 的建議,我使用下例的 ECMAScript 建立 Radio input element 。使用新版瀏覽器,如 Firefox 也得到了我需要的效果。但在舊版瀏覽器,即 M$IE6 中,卻出現了錯誤。 M$IE 會建立 Radio input element ,但是卻無法選取...
繼續第一部份內容。除了單引號 (') 外,允許使用反斜線 (\) 的字元編碼,也屬於遭受此 SQL injection 攻擊的高危險群。而且,由於部份 programmer 的不良習慣,提高了危險程度。這個不良習慣,就是不用標準的方法做 escaping ,而抄捷徑地直接使用字串替代函數。例如 PHP 的使用者,常常用 addslashes() 做 escaping 。前文中我提到的那位客戶,我在檢查他們的程式碼時,就發現到他們的 PHP 程式碼,全部都是用 addslashes() 做 escaping ,而不是用 PHP 建議的 pg_escape_string() 。該客戶的 CMS 系統是 Xoops 再加上額外的修訂以支援 PostgreSQL 。不過,當我進一步追查下去時,很驚訝地發現 Xoops 中,連 MySQL 部份的程式碼,也是用 addslashes() ,而不是用 mysql_escape_string() [Xoops 在 2006/6/26 發佈的最新版本中的 class/mysqldatabase.php 還是用 addslashes()。]。很久以前, PHP 就提供了 mysql_escape_string() 函數,甚至可能比 Xoops 的發展時間還早。儘管如此, Xoops 中仍然沒有使用 mysql_escape_string() ,真是令我無言。
最近公司客戶網站的內容管理系統被惡意入侵,因為客戶是用 Linux + PostgreSQL 系統,而我恰好是公司中較熟悉這兩套系統的,公司就派我去處理。我查了一下,答案就在不遠處,我就在 PostgreSQL 的網站上找到了答案,這是一個新型態的 SQL injection 。
回應「對SqlParameter的不求甚解」一文。SqlParameter 和 Ad-Hoc 這兩種用法的選擇,嚴格來說是 programmer 的態度與技術問題,而不是安全性問題。我的習慣是 Ad-Hoc ,但我同時強調,資料的驗證與查核是 programmer 的份內工作,所以我的程式風格如下。試問這種 Ad-Hoc 寫法的安全性,會比 SqlParameter 差嗎?
基於工作需要,我翻了一下 .Net Framework 中對 XML Schema (XSD) 的支援,想找在程式中維護 XML Schema 的方法。找到了兩種方法,一種是使用 System.Xml.Schema 類別,另一種是透過 DataSet 。以下是分別用這兩種方法產生同一份 XML Schema 的程式。
因工作需求,近日來專注於用 ECMAScript/JavaScript 強化 web application 的互動性。發現了幾套強力的 ECMAScript 工具,可以簡化不少常用功能的開發,更可讓 programmer 無需關注不同新、舊版瀏覽器的行為差異。說明一下,我所稱的「舊版瀏覽器」包含 M$ IE 6 。
對一個個體導向 (Object-Oriented) 的老手而言,敏捷編程和輕量級開發的原則與原理,應該是似曾相識,非常熟悉的。敏捷編程所揭示的原則與原理,和個體導向是分不開的。事實上,那正是個體導向技術所追求的目標。