台灣資訊軟體業缺乏資深programmer
七月底參加2006IBM開發者大會時,有個議題是「軟體前景大師談」,對一個我已知的事實,提出了一份數據。資訊軟體先進國家,如美、歐、印度、乃至日、韓,資訊軟體與資訊硬體的產值比平均是 2: 1 ;臺灣的情形卻是 1: 15 ,不但相反,而且是數倍大的落差。從這個數據來看,則臺灣的資訊軟體業在全球的地位,只能排在第三流以後。
七月底參加2006IBM開發者大會時,有個議題是「軟體前景大師談」,對一個我已知的事實,提出了一份數據。資訊軟體先進國家,如美、歐、印度、乃至日、韓,資訊軟體與資訊硬體的產值比平均是 2: 1 ;臺灣的情形卻是 1: 15 ,不但相反,而且是數倍大的落差。從這個數據來看,則臺灣的資訊軟體業在全球的地位,只能排在第三流以後。
"MinGW" 是取 Minimalist GNU for Windows 計劃之意,其目標為提供一個可在 Win32 平台上開發 Win32 native code 的 GNU GCC tools ,而非提供 Unix 程式移植到 Win32 平台之用,此即為其 Minimalist 之意。 2000年時,我曾在「安裝 GCC 2.95/Mingw32」說明過 MinGW 。不過那篇文章中的資訊已經過時了,現在 MinGW 的正式網址為 http://www.mingw.org/ 。
我日前看了「那些 Bug 是怎麼找來的?」這篇文章,裡面提到用 Bug 數量作為軟體品質的管理指標。管理學有云「可量化者方能管理」,可量化者就是指標項目,諸如一小時的產品生產數量、一天完成的工作項目等等。然而,錯定指標的例子也比比皆是。在軟體工程上,最經典的採用不適當管理指標的案例,就是用「程式行數」來管理工作進度了。就我所知,在理論或實務上,都不是用 Bug 數量作軟體品質管理的指標。此處所說的軟體品質管理,指的是開發過程中的品質管理,交貨時,理論上是無 Bug 的。既然選擇了不適當的指標項目,自然就產生「Bug 多,品質好;Bug 少,還是品質好!」這種無助於管理的結論。
米塞斯 (Mises) 在其著作中一再反覆駁斥的多邏輯論是什麼,又帶來了什麼不可挽回的錯誤。透過記錄片形式的電影「Sometimes in April」(See also: Watch "Sometimes in April"),我終於了解了。在此,我嘗試簡述之。
上週某日早上 (近來閒賦在家,不知今日何日) ,無意中在 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 。