2012-04-17

評《雲端運算網路程式入門》

書名:雲端運算網路程式入門
ISBN:978-986-201-444-8

我是不知道看這本書能不能練出雲端,不過拿來練腹肌倒是挺不錯的......

假日陪女友走了趟圖書館。不過最近因為找工作的事情有點懶散,不太想借書,但是來了都來了,就隨便抓一本吧。回家翻了一下,只能讚嘆
好書啊!以後看不到這麼好笑的書怎麼辦啊? <囧>
一些「雲端」定義上前後矛盾、很廣告說詞的部份就略過;書名都標注「入門」了,也暫不探究到底要從哪裡開始才算「入門」。先來看一下 p.1-2 這段:
凝視桌前電腦(Computer),望向窗外天空白雲(Cloud),真的可以將這台電腦拋向那朵白雲嗎?雲端計算(Cloud Computing)之意義,是將原應儲存在本地電腦(Local Machine)的資料(Information),推向雲端網站(Cloud Site)儲存;原應本地電腦運算解決的問題(Problem),交由雲端網站運算解決。
還有 p.1-5 這段:
前節所列之各項技術,都可謂是雲端運算的前輩(Older Generation),是電腦技術的里程碑(Landmark),因為曾經有這些技術(Technologies),循其經驗研發的累積,才有今日雲端運算之發展,但都因無法滿足下列兩項基本條件,不能歸屬為“雲端計算(Cloud Computing)”
Cloud Computing、Cloud Site 秀個原文我是不反對啦,但是 Computer、Information、Problem、Landmark、Technologies...... 你是來教英文的嗎?還是在向相聲瓦舍的《東廠僅一位》致敬?

第二章在教 JDK 安裝設定、Hello World,第三章在教 Tomcat 安裝設定、Hello World(btw... 實在很少看到有人光碟是用 C:\ )。看到 p.3-13 時候,我不禁噴了一嘴茶:
<%@ page contentType="text/heml; charset=big5" %>
big5 編碼的雲端,還真是稀有奇特啊...... 然後這段:
Tomcat 是 JSP 之專屬網站網頁系統,只要將 JSP 程式置入 Tomcat 指定目錄,即自動編譯、自動推向網站網頁。
翻到 p.3-14(才隔一頁),卻發現:
為了將新複製 JSP 程式有效納入 Tomcat 執行系統,每當完成新程式設定後,必須將 Tomcat 重新啟動。
太酷了!集合前後矛盾與脫離現實於一身,真是神作(拜伏之 Orz)。再看到 p.3-16 這段:
當完成前述步驟之後,即可在任意使用者端開啟瀏覽器,使用網址 http://163.15.40.242:8080/examples/Ex02.jsp,其中 163.15.40.202 為雲端網站之 IP,8080 為 port。(注意:讀者實作時應將 IP 改成自己雲端網站之 IP)
不教用 127.0.0.1 這蠻妙的,我懷疑現在有多少人電腦不是躲在 IP 分享器後頭。重點是,這樣就算雲端網站?那前頭定義雲端運算特性「多個大規模資料中心與大量處理器」、「無憂服務」又是啥?

接下來第四章不意外的在教 OO 概念,但是!(p.4-7)
我們已經認識到所有資料型態(Data Types)都是類別物件,源自各自之類別程序(Class Procedures)。常用的資料型態(如 int、char、float、boolean、String 等)是由系統彙整之複製新物件,其宣告變數可以直接被使用,是謂“內建物件(Built Objects)”。
我為了怕自己孤陋寡聞,還特地去 google 了一下,看起來根本沒這詞啊?等等,我偏離重點了:int、char、float、boolean 是 object?這真是太酷了,要不是前面有看到 Oracle 跟 Tomcat 的商標,我還不太敢相信這本書真的是在講 Java...... lol

再來看看這本書怎麼講 session(p.4-32、p.4-33):
預設物件 session 之所屬類別為 javax.servlet.http.HttpSession,用在網頁間之驅動接續。JSP/Servlet 雲端網站(Cloud Site)之系列各網頁,可依 Session 之設計,有調理而不混亂地貫穿網頁間之關係,當主網頁驅動次網頁時,同時也傳遞一個 Session 值,我們可依此 Session 值了解網頁間之驅動關係。 
本節範例設計 Ex23_1.jsp 驅動 Ex23_2.jsp,我們將發現因兩者為驅動接續關係(如同父子血脈),因而也擁有相同之 Session(如同遺傳 DNA)
這簡直比 Luke 聽到「I am your father」還要震撼啊!所以我已經不打算思考為甚麼「OO 概念」是在教這些東西了...... lol

第五章~第八章基本上就是 File、JDBC 的簡單應用,只是介面改成 JSP 作輸入,就直接跳到了第九章的範例 82。這是要介紹以 session 檢測是否登入的概念,但是處理輸入的頁面完全沒檢查帳號密碼是否對的上,就一律 session.setAttribute("ex82", "true"),而第三個頁面重點程式碼如下:
session = request.getSession();
if(session.getAttribute("ex82") == "true" )
    out.print("本網頁為合法認證網頁" + "<br>");
else
    out.print("本網頁為非法認證網頁" + "<br>");
字串比對用「==」,真是高潮一波接一波,厲害厲害......

到了第十一章的範例 95,我徹底地腹部抽搐、被擊沉了。這個範例要「即時」展示線上使用者人數及各個使用者 IP,作法是「每五秒鐘」 refresh 一次頁面,每次 request 頁面時就塞一筆資料 (date, ip) 進入資料庫、刪除十秒前的資料、然後 select 資料時對 IP 作 distinct、迴圈統計人數。要說現在通常是用 AJAX 或是 server pushing,但這是「雲端運算入門」也就不用太計較,但是為甚麼不用 application 物件咧?而整個範例最神來一筆的地方:
//註:只節錄重點
Date T = new Date();
long timeL = T.getTime();
int timeInt = (int) timeL; //註:這行就是第 20 列
String sql1 = "INSERT INTO onlineVisit(時間,網址)" + 
    "VALUES(" + timeInt+", '"+userAddr +"')";
int timeDInt = timeInt - 10000;
String sql2 = "DELETE FROM onlineVisit WHERE 時間 <= "+timeDInt+";";
後頭解釋:
列 20:將時間值調整至 Access 可接受之型態。
什麼?Access 不支援 Long 這種 data type?M$ 有惡搞到這種程度?喔... 原來是因為 onlineVisit 是這樣開的(p.11-16):
CREATE TABLE onlineVisit ( 時間 INTEGER PRIMARY KEY, 網址 TEXT(20))
這真是筆墨難以形容的感動,直達大音希聲的境界了...... lol

其餘精彩片段還有:
  • p.4-12:在 JSP 程式編輯上,out.print() 與 out.println() 功能相同,由本例可知,out.println() 並無自動換列之功能。(批:是啊... 即使在 <pre> 裡頭用也一樣呢......)
  • p.5-3:Get 方式將會於 URL 顯示參數,使用者可清楚看到其鍊接參數,優點為透明執行過程;缺點則為較不安全,且傳遞資料不得多餘 255bytes。(批:都在講雲端了、快死光的 IE6 的祖父 IE4 也號稱能支援 2083 characters 了,你去找只能處理 255 bytes 的 browser 給我看...... lol,喔對了,後頭的範例也非常有趣 lol)
  • p.5-12:建立雲端目錄(mkdir)。(批:...... 「偽端雲科技」還比較先進一點)
  • p.11-14:於 Html/Java 網頁程式中,<%! xxxxx %> 標籤內宣告之便,可保持每次開啟網頁輸入之訊息,並累積給予下一個開啟之網頁。我們可利用此特性,累積網頁拜訪人數,如此設計也是一種最簡易之設計方法。(批:不用說 servlet 的 instance 被 GC 掉,光你這麼愛重開 Tomcat......)
回頭翻一下「序」當中寫的:
本書是以大專院校課程教學需求,配合一學期 18 周,每周 3 小時教學時數,精要編撰 15 章共 4 篇:
現在大學生真是幸福的,有如此精要的課本,而且一學期後,就可以跟別人說:「我也學過雲端技術」了呢......

有時候也該看看這類超越 WTF 的書,除了有益身心健康之外,還能提醒自己:「其實你沒有你想像的那麼弱...... lol」