在SD Times上面看到,根據Evans Data Corporation的調查報告指出(新聞稿在此),過去兩年內開發人員使用資料庫的比例從32%提升到40%,其中MySQL所佔的比例增加了25%,值得注意的是調查顯示2006年秋季在北美有65%的開發人員採用開放原始碼的工具,因此在新聞稿中推斷MySQL將會持續攀升。
其實這樣的結果並不令人意外,光是PHP的高市佔率,就可以幫MySQL卡下不小的位子,加上這給年來多種XAMP(我指的是XP/Linux+Apache+MySQL+PHP)的簡易伺服器軟體包風行,許多人不知不覺就用了MySQL,高市佔率是很正常的結果,但我比較思考的問題是,這樣的市佔率似乎沒有在書籍的銷售上反應出來?以中文書來看,脫離PHP而專門講述MySQL的書多半沒有好的銷售成績。
我心目中有個答案是許多不小心使用了MySQL的人,只希望MySQL可以做出正確的結果就好,至於MySQL的進一步探究,也許並不那麼重要?
highlight.js
星期五, 3月 23, 2007
編輯作品:網頁程式駭客攻防實戰--以PHP為例

近一兩年來,網頁開發無疑是技術書籍領域中獨占鰲頭的主題,不過有個有趣的現象,就是大部分的書籍都只是教導如何開發網頁程式,但是卻很少著墨在如何開發高安全性的網頁程式。本書就是針對這一點,以實際的程式碼來展示各種可能的漏洞與防禦對策。
本書一開始概略介紹網頁安全的觀念之後,便本著「不了解駭客就不可能防駭」的精神,以一個尋常的留言版程式,透過實際的攻擊,示範大家隨手都可能寫出來的程式裡,淺藏著多少的漏洞,凸顯網頁程式與一般應用程式在面對安全性時本質上的劇烈差異。
接著,作者彙整了14種駭客的攻擊手法一一詳解,並提出可能的對策。更重要的是,作者還舉出許多活生生的例子,都是在開發人員以為已經徹底封鎖駭客的攻擊之後,仍然存在的許多漏洞,更有許多知名軟體曾經範過的疏忽,再次提醒讀者仔細檢查程式的重要性。
經過上述的震撼教育後,作者再透過telnet直接連上HTTP伺服器直接溝通的方式,赤裸裸展示了前述各式攻擊手法運作的實況,同時也讓讀者瞭解到瀏覽器並不能限制駭客的攻擊方式,只要透過telnet連線,駭客更能夠以各種令人驚嘆的手法進行攻擊,切勿以為瀏覽器的限制可以成為一道值得信賴的防線。
全書到了這裡,算是已經完全體會到了駭客的無孔不入。因此,本書接著提供了多種檢查漏洞的方法,讓讀者可以針對自己所開發的程式,滴水不漏找出所有可能存在的漏洞。除此之外,作者也提供了兩個防駭工具,可以透過程式自動找出漏洞,不但可以提昇效率,也可避免人為的疏忽。
本書雖然是以PHP為主要討論的對象,不過書中所討論的主題,大體上也都適用於ASP、ASP.NET、JSP等這類伺服端的開發技術。對於網頁開發者來說,本書應該是迄今為止對於網頁程式安全性主題探討的最全面的中文書,頗值得一讀。延伸閱讀:
- 本書日文原著《PHP サイバーテロの技法 攻撃と防御の実際》
- 本書日文原著作者支援網頁。
星期日, 3月 18, 2007
書介:Ajax Patterns and Best Practices
如果發揮到極致時,整個網頁應用程式在用戶端就只剩下一個空的HTML網頁,加上建構網頁內容並擔負程式邏輯的JavaScript,以及伺服器端負責擷取資料與傳送資料的簡單程式。正由於如此,整體程式架構的好壞,就不只是會不會使用XmlHttpRequest物件的問題而已,Ajax Patterns and Best Practices這本書就是希望能夠幫助大家解決這個問題。
本書透過作者所彙整的9種pattern,提出建議的解決方案,所使用的工具在用戶端就是以JavaScript為主軸,而伺服端則以C#所撰寫的ASP.NET 2.0網頁或者是Java Servlet為例,主要的內容如下:
- 第1章是簡單介紹AJAX的淵源與要素,並且比較相關技術,如果您並不是AJAX新手,大可跳過這一章。
- 第2章主要是作為後續各章的基石,透過factory pattern建立了一個產生XmlHttpRequest物件的跨平台機制。在後面的章節中,凡是需要與伺服端溝通的部份,都是透過這一章的機制來完成,不需處理XmlHttpRequest物件的細節,而將焦點集中在每一章所要解決的問題上。
- 第3章處理的是content chunking pattern,簡單的來說,就是將網頁區分為單獨的個別區塊,並透過AJAX技術載入個別區塊需要展示的內容。
- 第4章提出的是cache controller pattern,主要解決的是如何為AJAX建立快取機制,使得AJAX的運作更有效率。
- 第5章的permnutations pattern讓您可以建立一個資源封裝的機制,使得網頁應用程式可以依據用戶端的特性,以最適切的資料格式傳回同一份資料,確保用戶端可以為使用者展示正確的結果。舉例來說,如果用戶端使用的是WAP瀏覽器,那麼如果可以傳回特製的格式,就會比傳回一般的HTML格式要好,也能保證用戶端能夠閱讀結果。
- 第6章可以視為是第3章的變化,談的是如何讓網頁中不同的區塊產生互動的機制,也就是當某個區塊因為使用者的操作或是其他原因造成狀態的變化時,讓相關聯的其他區塊也能夠產生對應的改變,這樣的問題稱為decoupled navigation pattern。
- 第7章的presentation morphing pattern則是針對同樣的一份資料,讓它能夠在網頁上依據不同的目的或是功用,以不同的面貌同時呈現,並且可以在資料有所變動時,同時更新個別面貌的展現結果。舉例來說,當你透過表單來讓使用者輸入資料時,如果能夠同時以預覽的方式展示目前輸入的資料未來展示的樣子,就能讓使用者更確信輸入資料的正確性與適當性,而不需要等到資料輸入完畢送到伺服端後才發現錯誤而重新修改。
- 第8章要解決的是與伺服端保持連線傳輸資料的問題,稱為persistent communication pattern,股票行情顯示的網頁就是最典型的範例。
- 第9章的state navigation pattern則是對於如何為AJAX取得的內容建立瀏覽紀錄提出可能的解法,而不會在使用者按下熟悉的『上一頁』按鈕時,產生出乎意料的結果。
- 第10章透過infinite data pattern處理伺服端會送來大量資料的狀況,建立分段接收與展示結果的機制,像是搜尋網頁就是大家耳熟能詳的例子。
- 第11章提出了REST-based Model View Controller pattern,其實就是建立marshup的機制,讓網頁可以彙整外部來源的資料,重組後展示在網頁上,就像這些資料是從單一伺服器傳回的一樣。
整體而言,本書所提出的問題與解法頗具參考價值,不過作者本身的解說能力我個人覺得有頗大的進步空間,同時所下載的原始碼也很散亂,許多與書中的內容不符合。雖然如此,我還是很建議想要將AJAX列為網頁應用程式開發主要工具的程式員都可以讀讀這本書,未必要採用作者提出的程式碼,但參考一下其中的想法,應該也會有很大的幫助。延伸閱讀:
星期六, 2月 03, 2007
Eclipse攻陷Java開發社群?
根據SD Times在Two-Thirds of Developers Now Use Eclipse一文中所披露,由BZ Research所進行的Eclipse Adoption Study調查中顯示,Eclipse的採用率年年升高,從2004年九月的53.9%躍升到2005年十一月的62.5%,2006十一月又小幅提升到66.3,往後加上Borland的JBuilder轉向Eclipse平台,後勢絕對看漲。
根據報告中顯示,受訪者中超過六成是因為成本低廉、開放源始碼、或者是外掛繁多而採用Eclipse,所以我推測如果要花錢去購買同樣建構在Eclipse上的JBuilder,除非加上了什麼殺手級外掛或是整合功能,不然開發人員應該也很難說服老闆撥下預算買一個大家都不需要花錢的開發環境吧?
這份報告美中不足的一點是受訪者是以SD Times的訂戶為對象,並使用email方式調查,所以對於有效問卷的受訪者背景沒有明確的說明,這是比較可惜的地方。
延伸閱讀:
根據報告中顯示,受訪者中超過六成是因為成本低廉、開放源始碼、或者是外掛繁多而採用Eclipse,所以我推測如果要花錢去購買同樣建構在Eclipse上的JBuilder,除非加上了什麼殺手級外掛或是整合功能,不然開發人員應該也很難說服老闆撥下預算買一個大家都不需要花錢的開發環境吧?
這份報告美中不足的一點是受訪者是以SD Times的訂戶為對象,並使用email方式調查,所以對於有效問卷的受訪者背景沒有明確的說明,這是比較可惜的地方。
延伸閱讀:
星期五, 2月 02, 2007
詞辨:type selector與class selector
type selector與class selector也是很容易因為翻譯之後而弄混的兩個詞,有些人不知不覺中就把這兩個詞都翻譯為「類別選擇器」,使得文章讀來意思完全混淆。
若是依照這兩個詞的原意,type selector是依據HTML標籤(tag)種類來選擇要套用樣式的元素、而class selector是依據class屬性值來選擇要套用樣式的元素,其中HTML標籤可以當成是元素的資料型別(type),因此我個人建議type selector可以譯為「型別選擇器」,而class selector就譯為「類別選擇器」。
當然,您可能會覺得型別和類別不是也容易混淆?但首先,使用兩個不同的詞彙,至少在同一篇文章中可以明確表示這是兩個不同的東西。其次,如果以人來比例,你可以用膚色來分類,也可以依據個性來分類,因此「型別」就可比擬為「膚色」,而「類別」則可比擬為「個性」。所以每一個人只會屬於某一種膚色,但卻可以歸屬於多種個性,就如同頁面上的某個元素只會屬於某一種標籤型別,但卻可能歸屬於多種類別一樣。
若是依照這兩個詞的原意,type selector是依據HTML標籤(tag)種類來選擇要套用樣式的元素、而class selector是依據class屬性值來選擇要套用樣式的元素,其中HTML標籤可以當成是元素的資料型別(type),因此我個人建議type selector可以譯為「型別選擇器」,而class selector就譯為「類別選擇器」。
當然,您可能會覺得型別和類別不是也容易混淆?但首先,使用兩個不同的詞彙,至少在同一篇文章中可以明確表示這是兩個不同的東西。其次,如果以人來比例,你可以用膚色來分類,也可以依據個性來分類,因此「型別」就可比擬為「膚色」,而「類別」則可比擬為「個性」。所以每一個人只會屬於某一種膚色,但卻可以歸屬於多種個性,就如同頁面上的某個元素只會屬於某一種標籤型別,但卻可能歸屬於多種類別一樣。
合約到期的注意事項
在之前的文章(圖解最後一刷後半版稅計算法)中曾經提到合約到期時的議定處理方式對於作者或是譯者的版稅收入有影響,一般的作法會在合約到期前另外簽訂一份終止合約書,載明合約到期時各項處理事務。今天朋友在整理文件的時候,剛好看到某出版商一份大約七年前的終止合約書,上面有一條條文很有意思,特列列出來給大家參考:
...簡單的來說,意思就是合約到期後,剩下來所有的書都可以繼續賣,而且不用給作者版稅。這個條款有幾個問題:
三、滯銷書之販售:乙方(指作者)同意甲方(指出版商)得繼續販售本著作物至完全售完為止;惟該剩餘未販售之滯銷書版稅歸甲方所有。
...
- 此份合約並未載明剩餘書的數量。
- 通常這種不付版稅的銷售應該是折價出售的商品,求的只是回本,但此份合約也沒有對於售價有任何限定。
- 如果以小人之心度君子之腹,若是這本書是長銷書,那麼合約到期前再多印一些,甚至到期後還偷印,又不用給版稅,豈不是太棒了?
訂閱:
文章 (Atom)



