2008年12月11日 星期四

[ 科技 ] - 十大最差勁科技預言

當今的世界是個資訊爆炸的時代,也是個各類資訊都會被記錄且被未來檢驗的時代。知名的英國科技時尚雜誌《T3》日前就選出史上十大最差勁科技預言(The worst tech predictions)。《T3》指出,這些來自名人菁英腦中所提出的看法,事實證明往往跟不上實際科技的發展。這十大最差勁科技預言包括了:

第一: 2005 年,英國富商亞倫.休格爵士(Sir Alan Sugar)的:「iPod 絕對不會成功」(The iPod will never take off)

第二:1977 年,迪吉多(DEC)創辦人肯.奧爾森(Ken Olsen)的:「家裡不需要電腦」(No need for a computer in the home)

第三:1955 年, Lewyt 吸塵機總裁亞里士.盧伊特(Alex Lewyt):「核能吸塵器在十年內誕生」(Nuclear-powered vacuum cleaners will probably be a reality within ten years)

第四:1946 年,影劇大王與福斯總裁達爾.柴納克(Darryl Zanuck):「電視不會長久存在,因為人們將會因每晚盯著這木板盒子看而感到厭煩」(TV won't last because people would soon get tired of staring at a plywood box every night)

第五:1933 年,首架可運載十人的波音 247 飛機首航,波音工程師表示:「不會再有比這更大的飛機了」(There will never be a bigger plane built)

第六:1959 年,美國郵政總長亞瑟.桑莫菲爾(Arthur Summerfield):「我們即將進入太空郵遞時代了」(We stand on the threshold of rocket mail)

第七:1981 年,微軟創辦人比爾.蓋茲(Bill Gates):「個人電腦記憶體需求將不會超過 640KB 」(Nobody would ever need more than 640KB of memory on their personal computer)

第八:1878 年,英國郵政總局局長威廉.普利茲爵士(Sir William Preece):「美國人需要電話,但我們不用,因為我們有許多郵務員」(The Americans have need of the telephone, but we do not. We have plenty of messenger boys)

第九:2004 年,微軟創辦人比爾.蓋茲(Bill Gates)說:「垃圾郵件將在兩年內會解決」(Two years from now, spam will be solved)

第十:1883 年,英國皇家協會凱文主席(Lord Kelvin):「所謂的 X 光將被證明是個笑話」(X-rays will prove to be a hoax)

[ 程式 ] - flot - 用 jQuery 畫圖的 library

利用jQuery來畫圖
支援大部分的瀏覽器.
參考網址如下

2008年12月10日 星期三

[ 轉載 ] - PHP之父的開發祕訣

PHP之父的開發祕訣
文/王宏仁 (記者) 2008-12-10

要讓網站具備擴充性,必須建立分離、模組化的獨立端點,而不是全部放到同一個大籃子裡。


PHP語言的創始者Rasmus Lerdorf認為,程式不用寫得完美,而是要簡單有效,這是最重要,也是最困難的事。

PHP是全世界上使用率最高的網頁開發語言,臺灣每4個網站,就有1個用PHP語言開發。1995年發明PHP語言的Rasmus Lerdorf,也是打造出Yahoo全球服務網站的架構師之一,他首度來臺分享如何架構網站擴充性、安全性和效能的祕訣。

Q:越來越多Web 2.0網站走向應用平臺,你認為打造這類平臺的關鍵為何?

A:簡單來看,應用平臺就是API,任何Ajax或 Web 2.0類型的網站,都是在應用平臺上運用了API來創造出視覺介面的互動效果。例如Yahoo Mail,透過簡單的Request呼叫,來讀取後續的信件。打造這類網站,如何規畫解決問題的方式,會決定了網站未來的擴充性 (Scalability),而非效能決定網站的發展。

Q:如何規畫網站架構,才會具有擴充性?

A:將一個網站應用,分成幾十個獨立小程式,前端透過 API提供服務,後端是應用程式引擎,這樣做自然會有擴充性。因為應用的每一個部分,都有不同等級的使用方式,需要有不同的擴充程度(scaling level),需要不同的機制來處理。以開發Yahoo Mail而言,是要開發一個地址服務程式、一個讀信服務、一個送信服務,而送信程式完全和讀信程式無關。以Yahoo的規模而言,需要讓這些工作完全分 離,才有擴充性。

Q:這種規畫網站的方式,什麼是最重要的關鍵?

A:關鍵是你必須建立分離、模組化的獨立端點,而不是全 部放在同一個大籃子裡。大多數現今MVC架構(MVC framework)的開發框架(Framework),使用所謂的前端控制器(Front Control),每一次瀏覽器提出Request請求時,就會呼叫這個前端控制器,再由前端控制器來分辨,使用者想要執行哪一支程式。這樣做,一點意義 都沒有。

在瀏覽器層次,程式完全能知道使用者想要做什麼事情,例如使用者只是要讀信,程式就不用再把需求送到伺服器,讓伺服器判斷使用者要讀信還是送信。 將這類決策工作拉出瀏覽器,由伺服器處理,就會浪費大量伺服器資源,來處理那些對使用者沒有實際功用的工作。擴充性來自架構,很多開發框架,將所有事情綁 在一起,限制了架構。選錯開發框架,你就沒有擴充性。

Q:你是說MVC模式不利於網站擴充性?

A:MVC模式比較適合用在網頁控制器(Page Control)的層次。基本上,每一個網頁控制器都是獨立模組,讀信和查地址是不同的網頁控制器,所以,讀信程式就不會干擾到查地址程式。所以,在每一 個端點使用MVC模式來打造小型的網頁控制器,是不會有問題。但是,大多數採用MVC模式的框架,預設在網站中採用前端控制器,而非用網頁控制器的方式, 這樣的MVC模式,只適合在小型或單一伺服器的網站。

Q:你會如何選擇開發框架呢?

A:一個框架都不要用。但是,我會從這些開發框架中,找出我需要的功能,拿出那個我需要的程式模組來用,或者參考其中的設計想法,而不是套用整個框架。我所看到的大多數框架,都沒有專注在打造有效能的擴充性和可模組性。

Q:難道開發者不需要框架或架構嗎?

A:網站的確需要有架構,每一個人都需要框架,框架是一 種解決問題的方法。但是你並不需要通用型框架,用一個前端控制器,來解決所有問題,這樣通常沒辦法成功。每一個問題都不同,你需要引導框架,使用正確的設 計模式,直接解決真正要處理的問題。只生產一款汽車,怎麼可能滿足全世界人的需求!

用框架開發雛形系統就好,但真正的產品就不要全部套用。從框架開始比較容易,但你要拆開全部的框架,移除Runtime檢查、拿掉不需要的功能,只留下你會用到的程式模組。你不需要一個通用型框架,因為它無法提供未來的擴充性,但也不用重頭寫起,你需要的是介於兩者之間。

Q:網站需要規畫到多久以後的擴充需求?

A:我總是痛恨要幫未來考慮太多。當你無法預測未來,你就無法幫未來作決定。
網路變化太快,我通常只規畫半年內的事情。現在決定半年以後的事情,可能會做出錯誤決策,反而讓事情更糟。如果你沒有解決當下的問題,而是想像未來會發生的問題,我認為不值得,我寧可解決眼前看得到的問題,真正聚焦在當下需要的產品。

Q:那麼,有任何準則是架構人員可以遵循的嗎?

A:最主要的原則是,仔細考慮如何分配程式模組,盡可能 將程式拆解成更小的元件,調校出適當的API,你應該規畫的是使用者端點的事情,例如瀏覽器請求的類型是什麼?應用程式要如何回應?是否可以切割?是否可 以把這些工作分配到完全分離的伺服器上執行?即使是在同一臺伺服器上,你也能從使用者端點的角度來架構應用程式,有一天,當你的規模變大後,就可以很容易 加入第二臺伺服器,只要在前端伺服器不儲存任何資料,就能進行流量分擔。一般開發者最大的錯誤是,讓程式碼之間的交互關連(interrelation) 太深,每個不同的元件都需要和其他外元件溝通,這樣做很難調校出很乾淨的API。開發者會無法抽離出效率慢的API放到輔助伺服器中,而讓主要伺服器只執 行必要API。

Q:切割服務、拆解程式的難度是什麼

A:必須在開始之前,就要非常了解問題。當你寫完第一個 版本的程式,才著手拆解問題,那幾乎是不可能,很難事後處理。這的確很難,因為問題會一直改變。但是,若你從簡單的架構開始,並且保持這個精神來區隔程式 模組。每次當網站發生變化時,問題的變化也只會影響到一小部分,你就能夠非常清楚那個地方,能夠直接解決問題。就好像樂高遊戲一樣,蓋好每一個小塊積木, 哪邊還有不足,就只需要再補上一小塊就好,不用對整體改變太多。

Q:除了擴充性以外,如何提高網站效能呢?

A:要提高效能,得先知道每一支程式花了多少時間。我會 問,使用者送出Request請求後,要多久才會收到第一個Byte的資料?很多開發人員不曉得這個時間(First Byte Latency)是多久,不曉得自己的程式碼用掉多少時間?可以透過Profile來追蹤效能,畫出視覺化的效能流程圖,來了解瓶頸在哪。

甚至要考慮到單一機器上的延遲,透過系統層級的追蹤程式,知道程式執行的每一個系統呼叫(System Call)耗費多久。還要考慮瀏覽器中的延遲,從使用者實際感受的速度來改善網頁執行方式等。
每次你增加一個新功能,要能計算出新功能會增加多少毫秒,想一想這麼做值不值得。

Q:那麼,網站的安全性又需注意哪些原則?

A:基本精神很簡單,只要用資料防火牆的概念來設計網站。網路防火牆會嚴密監控每一個通訊埠,只讓沒有安全疑慮的封包通過,但網站開發者剛好相反,只擋掉自以為有危險的內容。開發者不能信賴任何從外部取得的資料,借用防火牆概念和手法,建立資料防火牆,就能提高網站安全性。

Q:好的架構師需要什麼樣的條件?

A:必須非常了解技術,了解每一個細節,例如設計資料儲 存機制,要了解哪種資料可以儲存、可以存多大的檔案,放多少資料、每秒鐘可以放多快?如何複製資料?前端必須使用哪種資料格式等。架構師可以不用像 DBA,知道如何修復Oracle資料庫的錯誤,但是要能夠了解Oracle資料庫擁有的能耐。這種人很難找,必須要失敗過很多次,才會有足夠的經驗。

Q:臺灣還有不少舊網站使用PHP 4,他們應該現在升級到PHP 5嗎?還是等待PHP 6?

A:盡快升級到PHP 5。只要作一些測試和修改,就能得到更好的效能和安全,為什麼不做?不需等待PHP 6,開源社群的運作方式,無法承諾推出時間。很多新功能已經放到PHP 5.3版中,趕快從4升到5最重要。

採訪整理⊙王宏仁

[ 生活 ] - 老天的玩笑

最近應該算是人生的低潮吧!!

最近iphone 3G要在台灣開賣了,
聽到這,沉寂已久,宅宅的熱血都沸騰了起來.
就在星期六看到中華電信的費率,
心都涼了半截,
看來~~手拿傳說中的把ㄇㄟ機,
是沒有希望了.
就在絕望的同時,
上天給我了機會.
那就是~~~

我的生日禮物 SE k800i掉了.
= =|||
說出來沒人信,
就再中華電信公布費率的隔天,
也就是我對中華電信失望的隔天.
手機就掉了....
我的小寶貝,我的同事們,
全部都認為是我自己刻意將手機給丟掉.
大人,冤旺阿~~~郎母喜挖台ㄟ~~~

事情告一段落後....
俗話說的好,
禍不單行阿~~~
老天真是愛開玩笑 = =||

隔天上班,買東西(airwave),結果放在櫃檯....要不然就是掉在路上....

星期五的時候,出門去家樂福採買,結果,車子有問題,引擎燈亮,
心想,完了.....這可能又要一筆很大的開銷.
想說星期六去修理,
在星期六出門去打球的時候,被停車場的門給鎖住,出不去.
= =|||
馬的,都什麼時候遙控器也欺負我阿......
在停車場呆了十分鐘,遙控器突然可以用了.
就去打球,打完球後就去修車了.
修了三個多小時,花了快六千塊.

希望,到此為止.
也希望花錢能夠消災.....

更希望,我的好運趕快來阿,
讓我中個大樂透的頭彩吧!!!!

2008年12月3日 星期三

[ 生活 ] - 摳摟~摳摟~摳摟~

什麼是 摳摟~摳摟~摳摟~
是一群馬在奔跑的聲音.

今天我再看HBO的億萬未婚夫~
男主角是一群在草原上自由自在奔跑的馬匹.
隨著結婚的關係,比喻自由自在的馬群漸漸變少,
都被繩索給套住了.

看到這段,心中真的有 摳摟~摳摟~摳摟~的聲音,迴盪在我耳際.

裡面男主角搞砸了兩次求婚,
但在牧師的開示下,男主角回想到了兩人最原始,最簡單的愛情.
並且,在老的時候,有個伴陪在旁邊.能記得你年輕時的長相,糗事,趣事.
我相信,這真的是最棒的.

呼~
摳摟~摳摟~摳摟~~

2008年11月30日 星期日

[ 生活 ] - 我最心愛的手機遺失了

最近iphone 3G在台灣開始開賣,
心裡癢癢的,總希望自己的手上能夠擁有一隻.
結果,就在星期六早上,hinet公佈購買的價格.
心都涼了半截,真是有夠貴.
看來得存錢買.

結果,星期天晚上,回到家的時候.
我的手機就不見了.
寶貝,我真的沒有為了iphone,偷偷把手機給丟掉阿.
大人,冤望阿.小人是無辜的阿.

2008年11月26日 星期三

[ Flash ] - 自動偵測 Flash 版本並下載

描述: 自動偵測版本並下載
Flash Player Detection Kit
語法: 下載解壓縮Flash Player Detection Kit
將playerProductInstall.fla 裡面的AutoUpdater和AutoUpdaterLoaderClip兩個Movie Clip 複製到您的fla檔案裏
複製 playerProductInstall.as 和 player ProductInstallCallback.as到您製作的fla 目錄

只要這三個動作就可以做到自動偵測下載囉, 建議要做Flash 8 效果的人都加一下方便觀看囉

1. Add the "AutoUpdater" and "AutoUpdaterLoaderClip" MovieClips to an open Flash document. Drag the "AutoUpdater" MovieClip from the libray of this FLA, or copy and paste the MovieClip on the stage into an open document.
2. Position the MovieClip at the point in which the player should check for the latest update.
3. Make sure that "playerProductInstall.as" and "playerProductInstallCallback.as" a

[ Flash ] - 列印頁面

描述: 在flash裡面列印頁面
語法: getURL("javascript:parent.printpage();");

[ Flash ] - 文字區塊設定

描述: 困擾最久的文字區塊設定
語法:

//設定欄位可以支援html語法
mytext.html=true;

mytext.htmlText="文字變色效果";

//此種就沒有變色的效果,而把整段code寫出來。
mytext.text="文字變色效果";

//可選擇
mytext.selectable = true;

//多行
mytext.multiline = true;

//文字換行
mytext.wordWrap = true;

//控制文字欄位的自動調整大小和對齊方式。autoSize 可接受的值為 "none" (預設值)、"left"、"right" 及 "center"。設定 autoSize 屬性時,true 是 "left" 的同義字,而 false 是 "none" 的同義字。
mytext.autoSize=true;

var my_fmt:TextFormat = new TextFormat();

//紅色的字
my_fmt.color = 0xFFFFFF;

//courier字體
my_fmt.font = "Courier";

//套用文字顏色
this.type_name.setTextFormat(my_fmt);

[ Flash ] - combobox的問題

描述: combobox的bug (ctrl+enter)看的到~但是被loadmovie的時候就無法使用了
語法:
這個bug主要就是當把有包含comboBox的swf被另ㄧ個swf載入的時候,Combox就無法做下拉動作,
而Rainny的解決方法就是在要load的那個swf也放入ㄧ個combobox就可以正常使用了

[ Flash ] - Flash支援big5不會亂碼

描述: 有時在load檔案的時候,編碼為big5的檔案會亂碼。就使用這個吧 System.useCodepage = true;
語法:
System.useCodepage = true;

[ Flash ] - 測出textfield文字的高度

利用f1查詢textfield 可以查出許多動態文字區域的屬性。以下列出偵測文字的高度,並將textfield的高度動態改變。
//讓文字可以被偵測到
textfield.autoSize=true;
//將高度變更為文字的高度
textfield._height=textfield.textHeight;

[ Flash ] - 用迴圈跑btn,偵測案btn的狀態

this["mv_"+i].btn.onRelease = function (){
index=(Number(this._parent._target.slice(-2))) ?
this._parent._target.slice(-2):this._parent._target.slice(-1);
trace("index="+index);
clean_btn(index);
_parent._parent._parent._parent.man_do();
}

2008年6月22日 星期日

[ Google Android ]

Phase 1 - First Week : Introduction.
Kai : Introduce GPS (software/hardware) used in Taiwan taxi coporation, and compare our business module with Singarpore taxi business module .
Rax : Introduce the GPS service(Software/Hardware) in Server(Windows/Linux).
Neil : Introduce/Example the GPS service in Google Android.
Songhwi : Introduce/Example the GPS service in JAVA/J2ME.
Kevin : Introduce/Example the AJAX,JavaScript/HTML/CSS.
Conandoyle : Prepare the SOP about Install/Download Android,JVM,Eclipse for everyone.
Www1036 : Introduce/Example the UML(Use case Diagram,Sequence Diagram).