歷史 + 科學 + 推理 + 記憶 + 搜尋 + 整合 + 耐心 = 艾西莫夫 Issac Asimov

12:32上午 九月 20, 2008 in category General by yaocl

艾西莫夫科普教室(上:The Roving Mind 跟隨大師遨遊知識殿堂、中:The Tyrannosaurus Prescription 暴龍處方、下:Past, Present And Future 過去、現在與未來)共三本,我現在看了兩本,我對艾西莫夫的印象,就如同葉李華在第三本的封面底部寫上的註腳:後世子孫將很難相信,在「前網路時代」的地球上,曾經出現過這麼一位血肉之軀的百科全書。

雖然艾西莫夫以科幻故事與科普文學聞名,這樣的成就,我認為是 歷史 + 科學 + 推理 + 記憶 + 搜尋 + 整合 + 耐心 的知識與能力交織出來的成就,要能寫出通俗的科普文章,而不是專業生硬的科學介紹,必須要有鑑往知來的基本能力,艾西莫夫對科學與人類發展的歷史,非常有研究,也能根據這些存放在他大腦記憶體的知識,動態地搜尋與整合出他所想要表達的意思,再加上「合乎常理」的推理能力,才能「有所本」地預測未來。

這樣全面的知識能力,就像他在第一本page 183頁「藝術與科學」這篇文章所說的:知識是不可分割的事物,一個人如果在某個方面變得更聰明,他們必然可以更容易在其他方面也變得更聰明,反過來說,當他們將知識分割,只專注於他們自己的領域,並蔑視或忽略他領域,他們便會變得較不聰明。真正的藝術家除了具有想像力外,還都相當理性,真正的科學家除了具有理性之外,還都相當具有想像力。我想以上這些理念,都是以他自己為例,推理出來的結論,真正的聰明是全方面的聰明(多元智能)。

正因為艾西莫夫是個古人,所以在他的年代,他能以他自己的推論,寫出許多對未來的預測文章,身在現代的我們,就能以逸待勞地檢視這些預測,也因為艾西莫夫的預言已經有很多都成真了,他作為一代大師當之無愧。已經成真的預測舉例如下:以磁浮的方式達到高速行進的運輸列車、垂直起降的飛機、全球化的公司、全盤索引編目的中央圖書館、更深層的電腦化、死亡率降低與出生率下降造成人口結構的老化、電子郵件與線上消費、個人化的資訊與廣告、無性繁殖、DNA重組工程、個人飛行器、高速通訊與視訊會議。尚未實現的例如:核融合取代污染的化石燃料作為下一代替代能源、互補的人腦與電腦、太空殖民地、月球旅行,我們就當作指引的方向,並期待未來的某一天真的會實現。

艾西莫夫雖然有沒有界線的想像力,但是他非常不喜歡搭乘飛機,也不常旅行,一個兩個小時車程的旅行,他自己就能當作是一次冒險,更特別的是,他自己說他從來不曾根據任何有關電腦的實際知識來進行論述,他對於機器一竅不通,甚至是一台新的文字處理機,就讓他掙紮好久,才讓他放棄最常使用的打字機。這些對他自己的描述文字,讓我們知道他的日常生活跟一般人沒有兩樣,他也是正常人過著一般的生活,也讓人更佩服這樣的狀態下,還能提出許多正確的預言。或許「從來不曾根據任何有關電腦的實際知識來進行論述」這句重要的註腳,正是他能跨越時代限制的主要原因。

另外有一篇說明科學與技術的文章,一般是以二分法區分科學與技術,科學是「基礎、純粹、理智、完美」,而技術是「應用、衍生、商用、拙劣」,但是他以歷史來說明科學與技術的共生關係,例如伽利略以許多不同長度單擺,檢驗了單擺定律,而惠更斯利用單擺定律,發明了第一座現代化時鍾,有了製作時鍾的技術,改進了天文學的研究,可以容易地為天體運行計時。科學與技術是相輔相成的,不應該視為兩種不同的東西。

特地說明這個概念,是要比對我們現今的教育體系,就是以科學與技術分類,來區分一般學院的理論教學,與技職體系的技術教學兩種教育體系,事實上我們知道,做研究必須要有實驗的技術能力,才能為理論做驗證,深耕技術也要有相當的理論認知,才能瞭解自己的技術瓶頸在哪裡。會說也要會做,才是真正的科技人。

秋葉原@DEEP by 石田衣良

12:53上午 八月 31, 2008 in category General by yaocl

秋葉原,是類似光華商場的一個地方,但又比光華商場涵蓋的範圍更廣,它整合了所有的電器、零件、資訊與軟體,在這個地方生活的人,有很多都是些御宅族,這個故事的主角,個個都是怪人,但似乎也只有怪人,才有辦法創造出擁有人工智慧的搜尋引擎crook酷克。嚴格說來,這本小說並不是很好的作品,因為某些故事內容的銜接過程,有一點牽強,但我也能感受到作者所提供的一些巧思。

阿頁會口吃只能用電腦交談,但卻是這群人的首腦,阿欄是平面設計專家,但有潔癖,太鼓是音樂天才,但有個宿疾,就是可能在任何地方任何時間點,遇到週期性的光線或聲響時,突然當機去了另一個只有他的音樂的個人星球,小光是個格鬥專家,達摩是法律專家,泉蟲是個駭客,除了小光之外,其他人都是御宅族的成員。

也就是這些人創造了酷克,酷克的前身,就是當初將他們連結在一起的結衣大姐的分身,也就是泉蟲製作的人工智慧程式,但是遇到了數位資訊的中込威,由於他企業家的個性,原本希望吸納酷克為數資的版圖,但是遇上了開放搜尋的精神,吃了閉門羹,後來就直接用搶奪的方式,把所有成員的電腦跟數位資料在一次設計好的偷竊中全數偷走。

這六個夥伴,為了釋放酷克也就是結衣,設計了耶誕節的一次解放行動,成功地將結衣大姐連接上網際網路,讓他自由沉潛在網海之中。

為了提供小光的偶像網站一些特殊的工具,而製作出一個搜尋引擎,這個人工智慧搜尋引擎,一開始有四種人格,根據不同的人格就有不同的搜尋結果,這些人格就是要將酷克使用者的人格拼湊起來,以便達成最精確的搜尋結果,所以每一個人的搜尋都是個人化的,設計出人類的各種性格,才以這些性格為素材組合出使用者的個人化性格,這個想法很好。故事最後讓酷克跟結衣大姐結合起來,擁有了個人的意識,重回網海這個結局,還算不錯。

半澤老教授只在故事中途跟最後面有出現,這個角色似乎是太薄弱了,以他們一天的認識,就能讓教授在數資7樓幫助他們,我覺得很奇怪。小光的角色也似乎是為了最後一場數資大樓的侵入戰,才刻意設計出來的,因為她的格鬥技巧,讓侵入大樓的行動能順利地完成。達摩的法律專長,在整個故事裡面完全沒有派上用場。

搜尋引擎本身就是在搜尋網海中的資訊,他本來就應該跟網路有管道互相連結的,搜尋引擎也要跟使用者連結起來才有作用,因為他必須要刻劃出使用者的人格,所以他必須要有網路連結,並跟使用者有直接的接觸,但是解放行動的目的,卻是要解放酷克進入網海,這似乎有點說不通,其實只要等到數資的SCOPE(源自酷克)正式對外開放,酷克就自然能夠進行那一段幾分鍾的人工智慧進化,根本不需要這個解放行動。

中央集權

01:36下午 八月 11, 2008 in category General by yaocl

北京奧運的開幕式,實實在在地讓人體驗到泱泱大國的態勢,節目項目以中華民族的千年歷史支撐,使用的表演人員數量非常地多,整齊的動作讓人想知道,究竟花了多少時間完成這些設計與排演,用了這麼多人力,讓人想知道,究竟每一個環節花了多少金錢,個人得到多少回饋,還是只有京奧的光榮,民族的光榮,個人的光榮?

中央集權的組織,上令下達的速度與執行力絕對是毋庸置疑的,只要主事者能正確地接收資訊,下達正確的指令,就因為中央集權,所以不需要太多討論與質疑,就能在短時間內,執行這些指令,完成工作。但每一個人都不能保證自己不會做出錯誤的判斷,每一個組織也不行,一旦發生錯誤,就因為中央集權,主事者也要有擔當地承受錯誤的後果,甚至是道歉。若要一意孤行,若反而造成了民意反噬,擋不過的也只有下台了事。

軟體其實也會見到中央集權的設計,最有名的MVC,View的面向與Model的資料多樣化,而最重要的Controller就可以作成中央集權的,單一的Front Controller,可以讓伺服器端以單一入口接收Client端的所有指令,再藉由分配處理的Command,派送執行細節與命令,讓負責某個特定項目的後端程式完成工作,在這樣的狀況下,controller當然得保證,自己不會有錯誤判斷,下達錯誤的指令的狀況,不然就得承受出錯的後果。

身在組織當中,每一個組織難免都有中央集權的影子在,這就是管理階層的存在與價值,管理階層得負責帶領整個團隊,朝向最有利的目標前進,就公司來說,當然是以營利為目的,管理階層就是要讓公司賺錢,再回饋給股東、員工(maybe)與自己,能有很多回饋的,就不需要談理想,因為大家賺錢都賺得很高興,沒能轉錢的,就只能談未來,要讓大家知道,在不久的將來,有可能會成功,這些努力,都是為了讓大家對工作有凝聚力與專注力,不會隨意的移動。

不管是怎麼樣的組織,管理就是在處理人的問題,處理政治的問題,體貼與尊重,能讓人與人之間的關係,在利益衝突之間,還能維持鏈結的關係不會破裂,再來是要上下一同凝聚出共識,就能發揮力量,突破難關。

燦爛登場 體現中國4大發明
張藝謀:開幕團隊演出100分
既悶又失望 大陸網友一片罵聲
開幕式
鳥巢設計師拒出席:中國太極權
鳥巢設計師的憤怒宣言
開幕表演 評價兩極

京奧/原住民歌舞表演驚豔 央視特別專訪高金素梅

Alaways Think about Your Customers/Clients

12:32上午 五月 13, 2008 in category General by yaocl

最近上了一次有關「客戶服務」的課程,再加上又看了How To Design A Good API and Why it MattersKeynote)這一段教學,其實這都是在說明一件事情,就是不管發生什麼事情,都該要讓你的客戶高興。

身為軟體工程師,在設計與製作API的時候,就要一直思考一件事,因為API就是要讓其他的developer使用的,當然得致力於要讓API簡單、好用、不容易誤用、容易維護,而且一旦產出了錯誤的API,又已經交給客戶使用了,這個錯誤可能會影響好一陣子。但即使看過這個影片,要能身體力行也是很難,也痛苦的,回想去年曾經花了很久製作的ACL API,雖然這個API運作得不錯,也適當地簡化了ACL的開發,一直用到現在沒出問題,但其實這個API是很容易被誤用的,但短時間內就只能以code review的方式,盡量能在開發期間就發現錯誤。

在專案上,就是要面對所有stakeholders,這包含了sponsers, project team memebers與end users,在專案上的努力,最終都得要面對並滿足所有stakeholder的需求與期待,讓大家都高興。講很容易,但做起來就很難了,並不是有了技術一切都能解決的。

「客戶服務」那堂課給我最重要的概念,就是要以「利他」的方式,跟客戶/主管或是其他人溝通,也就是說,講話的時候與說明的角度,假裝自己就是客戶,提出的建議,以客戶的客戶為依歸,這樣客戶就比較容易接受你的建議與意見。例如這樣的說明:如果要修改這項功能,因為這個修改,我們必須同步檢查並修改其他五個地方,這個修改要花上一點時間,可能會影響到你的使用者上線測試的進度。或許我們先以另外一種比較快速能解決問題的方式處理,這樣專案比較能符合上線的時程。

上課很輕鬆,聽課很容易,看看教學影片也不難,但實際接到客戶抱怨電話的時候,如果遇到了蠻不講理的客戶,就會非常容易因為情緒的影響,而擦出火花,失去冷靜判斷的態度。這樣的錯誤即使是事後的道歉,可能都會造成了某一部份永不磨滅的嫌隙,引以為戒。

MDM (Master Data Management) 主資料管理 的概念

01:25下午 五月 02, 2008 in category General by yaocl

Master Data (主檔資料) 是企業內部最主要的資料檔,例如客戶資料、產品資料、員工資料等等,為了改善資料品質與一致性需求,提昇Master Data被運用與維護的效率,所以需要一個MDM的total solution。以一個小企業來說,一開始導入系統,應該是視情況與當時的需要,購入某些特定功能,跟主要業務有關的資訊系統,接下來企業慢慢地成長,資訊系統增加,這些資訊系統之間的資料轉換與溝通問題,就會慢慢地浮現。

對所有的資訊系統來說,一開始要面對的就是帳號跟權限,所以員工帳號應該是符合Master Data條件又最常見的一種資料,MIS遇到越多系統就有越多帳號得要整合,要整合帳號,就會想到帳號同步與SSO的產品,但如果公司的規模不夠大,或是業主無視於帳號同步的需求與重要性,SSO會是非常難推行的一種產品。

MDM所要面對的資料,是企業內部跟業務有關的核心資料,雖然用起來可能會跟帳號同步的概念很像,但得要更一般化地將所有可能的狀況,都規劃到產品的功能上,然而產品的規模越大,能夠運用的企業就越少,因為他們並沒有足夠的資訊人員能量可以撐住整個MDM的solution維護。

SUN的Mural將 MDM 解釋成,Master Index Studio (index -> search)、Data Integrator (資料整合與收集) 、Data Quality、Data Mashup (展示與使用)、Data Migrator (轉移)這五個子專案。Microsoft的roadmap中,則是將MDM product codename稱為 Bulldog,但還沒看到整體的產品線,如何整合出一個完整的MDM solution,目前只有在Roadmap中舉例,他會以PerformancePoint, Dynamics, MS Office Excel, Office SharePoint Server整合出整套solution。

資訊產品如何能夠將產品的進入門檻降低,又能解決企業主關鍵的業務問題,就是成功的唯一要件。雖然SUN以開放程式碼的系統,作為產品的行銷策略,但對企業主來說,如果真的有這樣的需求,有個方便又好用的產品,又能讓資訊人員快速上手,才是重點。這個部份,相信未來最會包裝產品的微軟,會提出最厲害又簡便的軟體工具。

Master_Data_Management in wikipedia
The What, Why, and How of Master Data Management November 2006
微軟將進入主檔資料管理領域 2007/7/20
嶄新Teradata MDM 2.0方案問世,隨即贏獲首張客戶訂單 2008-03-26
美商甲骨文宣佈推出資料整合套裝軟體 三月 26, 2008
Sun Microsystems Announces Mural: Open Master Data Management
Mural - Open Data Management Community
MDM (CDI, Data Governance) Vendor Products
Master Data Management - Microsoft

cursor bug in FF

11:42下午 四月 29, 2008 in category General by yaocl

當我們在使用yui的dialog的時候,卻意外發現一個奇怪的問題,只有在Firefox才會發生,就是dialog裡面的input的cursor,在dialog放在一個iframe網頁上面的時候,即時用滑鼠點了一下input,但是cursor還是不會出現,經google後發現,這是firefox的一個bug,而且沒有一個適當的解決辦法。

Cursor disappears in Firefox這篇文章建議以調整 overflow 的style解決,我試過了沒有用。Infamous Firefox cursor bug - Info and possible workaroundsCursor (caret) sometimes fails to appear in input text fields這邊有人建議以 position:fixed 還有 overflow:auto; position:absolute的方式解決,但是dialog的位置就沒辦法任意地拖動了,目前的結論還是無解。

Tomcat 5.5.26 6.x的 cookie problem

03:25下午 四月 29, 2008 in category General by yaocl

最近原本程式在Tomcat 5.5.25可以運作正常的Cookie,最近在Tomcat 5.5.26上測試卻發現出了問題,原因在我們在Cookie的數值上,是以Base64編碼,然而base64的編碼結果會在最後面產生多個 = 字元,這個等號,在Tomcat 5.5.26取得cookie value時,被視為cookie規格中的等號。

舉例來說 cookie1=value= ,應該取到有個cookie1,數值為value=,但在Tomcat5.5.26上卻是,有個cookie1,數值為value。在Cookie V0的規格中,他告訴我們cookie裡面的資料必須要自己用URL style %XX 的方式編碼。

我懶得再用java.net.URLEncoder去轉換,直接replace所有的 = 為 $,取到cookie資料時再把 $ replace 成 = 就可以解決了。

至於 V1 的cookie,應該是不要用,相容性可能會有點問題。

New: Tomcat 5.5. 26 - cookie with colon in name is parsed incorrectly
Cookies behave differently between Tomcat 5.5.25 and Tomcat 5.5.26
Cookies are broken in 6.0.16?

用支援UTF-8 BOM的Reader解決proxool設定檔UTF-8 with BOM的問題

08:54上午 四月 22, 2008 in category General by yaocl

在使用 proxool 的時候,如果用JAXPConfigurator來啟動proxool,通常會用 JAXPConfigurator.configure(new InputStreamReader(proxoolInputStream), false); 這種寫法,但是java.io.InputStreamReader在遇到UTF-8 with BOM的檔案編碼格式的設定檔時,就會產生問題。

在遇到BOM(byte-order mark)的時候,通常都是找個支援修改檔案編碼的Editor來處理,例如我們常用的Emeditor或是EditPlus(參考網站 BOM (Byte Order Mark) 的問題BOM BOM BOMUTF-8),我們的作法,原本就是採Emeditor來使用,但是程式交出去的時候,就常常會遇到客戶直接使用Windows預設的文字編輯器notepad來編輯proxool.xml設定檔的狀況,導致程式在啟動DB Connection Pool就會出問題。

ROME實作了com.sun.syndication.io.XmlReader這個類別,在文件一開始就提到,"It looks for the UTF-8 BOM first.",另外這個類別又是extend java.io.Reader,這就省事多了,因為JAXPConfigurator.configure正好是需要一個java.io.Reader,所以只要把 JAXPConfigurator.configure(new java.io.InputStreamReader(proxoolInputStream), false); 這種寫法,改為 JAXPConfigurator.configure(new com.sun.syndication.io.XmlReader(proxoolInputStream), false); 就可以讓proxool設定檔也相容於惱人的BOM問題。

不想使用ROME的話,也可以使用UnicodeReader and UnicodeInputStream提供的程式。

RequestDispatcher 在 weblogic 9.2 的問題

12:10上午 三月 25, 2008 in category General by yaocl

因為用了filter寫cookie登入,又因為用了RequestDispatcher作轉頁,又因為用了weblogic,從首頁進來的request,因為cookie登入,但cookie的資料因為別的原因錯誤了,本來寫清除cookie後,再用RequestDispatcher轉到首頁,出問題了,成了無窮迴圈。

這種寫法在Tomcat運作正常,Tomcat在我寫RequestDispatcher之後,並沒有再apply一次Cookie登入的filter,所以可以傳回首頁的網頁跟清除cookie的response,但是神奇的weblogic,在我forward到首頁時,又apply了一次cookie登入,哇,無窮迴圈出來了。

weblogic真的是神奇的ap server跟免費的就是不一樣,只好改用sendRedirect,強制把response送回到瀏覽器,這樣就能把cookie清掉,再讓瀏覽器取一次首頁,這就正常了。

經過這樣的事件,不知道還有沒有信心......

miroko網路硬碟

03:13下午 三月 14, 2008 in category General by yaocl

同學當PM做的網路硬碟miroko,這種消耗頻寬的東西,還真是普通公司沒有辦法做的,現在他們正在舉辦50G抽獎活動,有興趣的人可以參加。

安裝client端軟體後,就能提供一些功能,例如檢視本機硬碟的資料,同步等幾個功能,功能列表在這裡。朋友之間可以互相分享網路硬碟資料,這個功能很方便,相信未來開放BT下載後,會成為消費頻寬最大的網站。

測試的過程中出現一些問題:
1. 加入好友的連結放在留言頁籤裡面,而且藏在右邊,這有點奇怪,應該預設把好友的目錄打開才對
2. 我的預設瀏覽器設定為IE,安裝了client端的軟體,用IE打開miroko時,可以偵測到軟體,但用FF打開miroko時,就測不到了
3. 我的IE一直開著在下載檔案,同時開FF上傳檔案,速度就有點奇怪,上傳的地方,有時會一直是0%,畫面一直開著,等一下才能上傳上去
4. 相簿的地方有點奇怪,產生相簿後,得點選開啟相簿,才能看到,右邊的相片預覽似乎是沒有作用

在公司的下載速度還蠻快的,一個700MB檔案,流量為170KB~200KB,不過這可能是因為使用者還不多的關係,相信以後頻寬與速度配合上BT,會是這個服務最大的賣點,也是最重要的議題。

MountainView商務旅行

12:38上午 三月 09, 2008 in category General by yaocl

才剛上完PMP的課程,明天就要飛去美國了,已經五年的時間沒有出國了,出國要準備的一些瑣碎事情大都是主管處理的,包括訂機票,跑簽呈,選飯店,處理交通工具等等問題,不過他跟我一樣,這是第一次商務旅行。

辦護照還好,但得跑兩趟才能拿到。最麻煩的就是得親自到AIT辦理簽證,雖然約的時間是8:00AM,七點半一到門口,排隊的人還是超多,有好幾個關卡得過,每個都得排隊,一開始是繳資料處理費的收據,然後繳驗文件資料,印兩手及大拇指的指紋,最後是面試。

面試的時候,前頭有一個女生,被官員說"You are not qualified....",後面就聽不懂了,我們兩個人一起面試的,蠻奇怪的,官員只問了我們兩個問題,「你們公司有幾個人?」「100個」「你是碩士嗎?」「我是碩士」講中文的,然後就OK了,我們離開時,旁邊那一對父女,還一直在被問東問西的,「你去那裡做什麼?」「你一個月賺多少錢?」...

換了美金,印了Montain View當地的地圖,帶了字典跟一堆衣服,準備明天要出門了。
----------------------
MountainView第一天 2008/3/3

MountainView第一天交通旅遊日,明天才開始主題,重點在於看懂地圖跟問出答案,還得從下飛機開始,就一直不睡覺直到現在,現在已經是舊金山的晚上。

首先一到舊金山國際機場,我就因為回答帶了一包餅乾,讓我們得通過行李的X-Ray檢查,還好沒有被要求打開行李箱,不過我有時會突然不知道用英文怎麼講,突然講話結結巴巴的。本來就是另一個語言,又不常使用,當然難免有用得不好的狀況發生,遇到受不了的人,聽不懂就算了,反正我只是問個事情而已,大不了再找下一個問。

出了機場,就坐上坑人的藍色Super Shuttle,途中看到了幾家公司,不過都沒照起來,包括了Oracle、Salesforce.com,車子繞阿繞,到了之後,我們得一人給他30 元,還跟我們要小費5元。車子在馬路上,常常會走走就突然停下來,尤其是沒有紅路燈的十字路口,只要看到STOP指示標誌就得把車完全停住,才能再繼續往前走。

到了Hilton Garden Inn飯店已經中午,行李放好後就馬上出門,先到了一家小超商買了水跟一包餅乾,再來就開始一連串的問路跟坐車的過程,先坐了22公車到Palo Alto Transfer Center,再來就換成Caltrain坐往舊金山市,到了那邊,走路到Cable Car Barn總站,然後坐上Cable Car到漁人碼頭,晃了一下吃了點東西,就準備回程了。回程先搭Cable Car回總站,然後坐BART捷運地鐵到Millbrae,再換Caltrain回到Palo Alto,然後坐公車回Hilton Garden Inn。

整個路程換來換去,一邊看地圖一邊問人,也搞清楚舊金山的交通設備有哪些,但市區內的交通,還沒有很瞭解,輕軌電車應該是跟Cable Car不一樣的吧?

----------------------
MountainView第二天 2008/3/4

一早吃完早餐,就準備要出發前去上課,因為今天的時間還蠻充裕的,還是用公車解決交通問題,這裡的公車除了22號車子很多,而且很特別的是兩截的巴士之外,要轉換的40號公車,就很難等,30分鍾才有一班車。到了目的地,果然是很荒涼的地方,旁邊一大片空曠的草地。

一開始我們找錯地方,到了40號Building,在lobby問了一下才知道我們走錯地方了,櫃臺小姐還熱心的問,你們把車停在哪裡?我們坐公車來的, Oh,那你們走路過去大概要走10分鍾。這裡很奇怪的是,Lobby的位置都不是面對馬路,從那一區建築物中走出來的時候,還驚動警衛過來關心,到底你們在這裡幹嘛。

到了1501號Building,我們是最早到的,一度以為不會只有我們參加吧!只好在lobby等了好一陣子,後來才陸續有其他人進來。Lobby很特別的,都有一台投影機,一直把搜尋引擎的關鍵字,用類似console mode的方式列印在畫面上,上頭有英文、日文,偶爾也會看到簡體跟繁體中文。在裡面我是不敢照相的,因為有攝影機對著我們,事實上,後來也知道,裡面是禁止照相的,這當然,因為是商業機密嘛。在lobby都有一台按摩機,沒事就有員工上去按摩一下,building 40還有一個員工,一邊按摩一邊拿NB敲敲打打。

主持人開場沒多久,就帶大家去吃不用錢的中餐,隨便你吃,但是我吃起來覺得很怪,那個土耳其口味的東西,有很怪的香料味道,水、果汁、點心也是隨便你吃,但我沒吃多少東西。

今天上了一些tutorial,還有講到security的部分,他們是被併購的Postini,他們目標是面對Open Mail Server,並不限定哪個特別的Mail Server,聽到最後,就是累,因為全場都是英文來英文去的,雖然還有6、7成聽得懂,但聽起來很辛苦。

很快的結束半天課程,還有明後天要奮戰無聊的課程內容跟英文轟炸,希望能趕快回家。回程的時候,轉車時看到Wallmart,到裡面買了幾包上頭都是英文字的東東,要騙騙小朋友。然後就是簡單的Subway晚餐,回飯店休息了。

今天認識了兩個來自泰國tangerine的人,一個是Watt職位是architect,另一個就忘了,黃種人只有我們四個人。

----------------------------
MountainView第三天 2008/3/5

一早4:00就醒過來,有點睡不著的感覺,後來才知道可能是時差的關係,還好再撐一天,就要回家了。

昨天晚上試著請飯店櫃臺人員幫忙叫計程車,這裡的計程車跟台灣的差不多,開車的速度超快,連開上高速公路後,還能利用交流道超車,跟平常的馬路上的車行速度差別超大。坐計程車果然輕鬆多了,10分鍾就能到目的地。

今天也是一整天密集的課程,整個房間都是講英語的,根本不知道怎麼問問題,只有把聽得懂得、投影片上該記的都記一記。今天只有一個session是講 gears,他帶了幾個網頁上都看得到的sample,而且當場trace程式碼,講得飛快,感覺得出來是交差了事而已,本來就不需要大費周章把大家叫來的,也許有些人覺得出國可以玩,但我覺得出國是很麻煩的。

也是昨天才知道,研所同學從紐約來到Fremont,他說這就在Mountain View附近,所以要他下課時來載我們去吃飯,他帶我們到Castro Street上一家西班牙菜餐廳,吃西班牙海鮮飯,加上兩道菜,吃起來還可以,但飯有點硬,這裡的消費水準真的很高。

現在已經凌晨一點了,應該要強迫自己去睡一下,希望明天講API的課程能平易近人一點。但似乎很難,整個房間都是英語語系的,誰理你!

-----------------------------
MountainView第四天 2008/3/6

一大早才吃完早餐,就看到計程車怎麼開來了,原來昨天叫同學幫忙打電話預約計程車的時間,我們說是 Seven Fifty,結果他聽成 Seven Fifteen。只好叫他再等十分鍾,我們提早出門。

跟昨天一樣,課程的行程很準時地在8:30開始了,今天的主題還算平易近人,都是在講API。還有一些新功能的說明,主持人一直跟大家說,某些資訊是機密,還沒release,要大家不能寫上blog。中午的食物口味還是一樣的怪,快受不了了,吃台灣泡麵還比吃這個好。不過這裡的果汁跟水,大都很好喝,隨便你怎麼喝都沒關係。

下午就精彩了,上課上到一半,這邊的sales跑來問我們要不要一起聊一下,這我就頭大了,我們三個人一起講了大概 20分鍾,我雖然有時候還結結巴巴的,但大致上還能把要講的意思講出來,真是謝天謝地,希望對方不要誤解我的意思。講的時候我偶爾還能幽默一下,希望他能接受講公事時還有這種幽默,合作不要出問題。

我也在一個session中試圖問了一個資料授權的問題,因為這是我先前沒有注意到的功能,雖然我沒問,大概也知道答案是什麼,就是想嘗試問問看,不然這幾天的課程上,大家都不會理我們,問問題雖然很順利,不過我答案就聽不大懂他在講什麼,只好含糊的點頭,就這樣結束。

後來坐隔壁的泰國人突然問我中國字的問題,他說他們的泰文有44個拼音字,類似英文,但一串字的意思會因為斷句的方式不同,而意思就不一樣,他問我中文字的搜尋會不會有問題,因為泰文在搜尋的時候,word segmentation是有問題的。

回飯店途中,經過一家WHOLE FOOD超市,進去買了幾包巧克力準備帶給同事,還有兩罐帶給老人家當禮物的沙拉醬(不知道要買什麼了),跟晚餐要吃的派,還有一盒有點大的小蕃茄,派還不錯吃,小蕃茄雖然大了一點,不過味道吃起來跟在台灣的差不多。

問飯店櫃臺能不能幫我們叫車去機場,結果他竟然跟我們說,一個人要85元,比來的時候還誇張,只好回房間自己打電話給Super Shuttle, 原本已經準備好要怎麼講了,一打過去竟然是語音,叫我們自己上網訂車,用信用卡訂了車,兩個人坐加上小費只要47元,這也差太多了吧!價錢差這麼多,希望明天不要出包,可以順利坐車到SFO。

總算解決,不管合作的結果如何,明天要回家了。

-------------------------
MountainView第五天 2008/3/7

今天一早很順利地坐上SuperShuttle,司機一聽到我們講華語,就問說你們也是中國人阿!他是個大陸人來自湖南,在網路上訂車很方便又不會被坑,真的蠻不錯的。

到了SFO,在UA check in的時候,辦事員突然又說我的行李有問題,我心想入關時一句話講錯,影響這麼大,後來他才又說,這個已經cancel了,才鬆了一口氣,順利劃位準備出關。

一堆人準備要過行李檢查這一關,身上所有東西都得拿出來,鞋子也得脫掉,一到我們的行李時,突然他又停下來講了一句話,我嚇了一跳,他又講了一次,這時才聽懂他是在問,是不是有帶laptop,我回答說有,他把我的行李拿出來,說laptop拿到外面另一個盒子單獨檢查。

行李沒問題了,人過去的時候,我下意識把手舉了起來,那個官員笑了笑講了一句,"Put your hands down. You're not under the arrest."。

過了檢查站,就開始逛商品店,買些東西回家,然後就上了飛機。回程的時候,飛機的航道得往北繞道沿著蘇聯,通過日本才能到台灣,時間得花13個小時,比去的時候多了3小時。除了時間比較久,還有一件最麻煩的事,吃完第一餐牛肉後,我就覺得肚子怪怪的,開始拉肚子了,快到台灣的第二餐更糟糕,是吃奇怪的義大利麵,不吃肚子會餓,只好還是吃下去。這次的行程就是以拉肚子為終點。

第三天晚上就透過email跟對方要求要有某個網路群組的授權,不過一直到現在都還沒有收到回信,不知道是不是第四天的面談講得不對,還是有什麼特別的狀況,希望不是白白去這一趟。

經典的動畫需要好劇本,成功的網站需要好題材

12:30上午 一月 25, 2008 in category General by yaocl

最近開始在看鋼之鍊金術士,故事的設定背景,就是「等價交換」,也就是這句經典對白「人不付出犠牲,就無法得到任何回報。如果想要得到什麼,就必須付出同等的代價。那就是鍊金術中所說的等價交換。」也就是這樣一句深刻的對白,反應了整個故事的主旨,造就了這部經典的動畫。

網路服務也是一樣,每一個特別的網路服務通常都會有個核心的概念,例如Flickr就是相簿,Google就是搜尋等等。這個核心的概念,就等於專業的服務,在深耕這個服務概念之後,就造就了一個成功的網路服務網站。成功的網路服務,都能用一句簡單的話描述它。

上週末看到電視訪問群聯潘健成總經理(參考文章:創業成功因素),討論的主題是創業,主持人問他一個問題,群聯未來會不會走向建立品牌,他回答群聯的專業是在IC設計,未來還是focus在這個專業上,但希望未來能領導規格。設計是他們的核心價值。

雖然我們腦袋裡面印象最深刻的,是某個動畫的故事內容,是某個網站的核心功能,是某個人的專業知識,是某家公司的核心技術,但也不能忽略,要實現一部完美的動畫劇本,得有專業的動畫媒體製作團隊與技術,要實現一個特殊的網路服務,得要有專業工程師的協助。

專業力、執行力、抗壓力、努力...,成功真的不是從天上掉下來的。

JS OO programming筆記

11:30上午 十二月 31, 2007 in category Java by yaocl

原本我們都是使用JS framework的包裝,但在這兩篇說明javascript對OO的支援方式的文章中,我們可以看到最原始的javascript

Part I: Inheritance http://www.webreference.com/js/column79/
Part II: Methods http://www.webreference.com/js/column80/

OO的基本特性 inheritance, encapsulation, polymorphism
提供 objects, prototypes, implicit inheritance,沒有classes, instances
prototyping 是瞭解inheritance的核心概念
以js定義function,在function中定義methods
保護 private field data element
context, scope, context switching

***********************
OO的特色 encapsulation 封裝(data and methods), inheritance 繼承, and polymorphism 多型, class, superclass, subclass, override

js 不直接支援inheritance,有兩種方法
1. 用function來實作
function superClass() {
this.bye = superBye;
this.hello = superHello;
}

function subClass() {
// 這兩行用來定義superclass
this.inheritFrom = superClass;
this.inheritFrom();
// override bye這個 method
this.bye = subBye;
}

2. 用prototype
function superClass() {
this.bye = superBye;
this.hello = superHello;
}

function subClass() {
this.bye = subBye;
}
// 這裡用prototype指定 superclass
subClass.prototype = new superClass;

************
object1.prototype.isPrototypeOf(0bject2); 判斷object2裡面是否有object1為prototype
netscape: 以 __proto__ 紀錄 prototype物件

************
用__proto__來模擬 instanceOf

//for NS only
function instanceOf(object, constructorFunction) {
while (object != null) {
if (object == constructorFunction.prototype)
{return true}
object = object.__proto__;
}
return false;
}

************
Object object supports the constructor property

************
js 支援三種object: native, host, and user-defined

native: js 語言支援的物件,包含 Object, Math, and Number
host: browser在載入頁面時產生的物件,包含 document, window, and frames
user-defined: 自訂物件,case-sensitive


The Object object is the base object for all native and user-defined objects. All objects inherit from this superclass.

Object的內容
1. property: constructor
2. methods: isPrototypeOf, hasOwnProperty, toLocaleString, toSource, toString, valueOf
propertyIsEnumerable

*****************
列印 物件property
for (property in ken) {
alert(property);
}

*****************
產生物件
function Employee() {
var registerA = "Initial Value";
function setRegisterA(param) {
registerA = param;
}
this.setRegisterA = setRegisterA;
this.dept = "HR";
this.manager = "John Johnson";
}

***************
定義function的三種方法
1.
function first(param) {
alert(param + " method to define a function");
}

2.
second = function(param)
{alert(param + " method to define a function")};

3.
third = new Function("param",
"alert(param + ' method to define a function')");

****************
Functions in javascript can modify global variables from the outer context.
定義method的時候,就會希望是使用private data member,第三種方法(用Function)會產生錯誤,
所以只能用第一與第二種建立function的方法

function myGlobal() {
var global = 5;
function first(param) {
global += 10;
alert(param + " method shows global to be " + global);
}
this.first = first;
this.second = function(param) {global += 10;
alert(param + " method shows global to be " + global)};

this.third = new Function("param", " global += 10;
alert(param + ' method shows global to be ' + global)");
}
var x = new myGlobal();

***********************
定義Context
有三種context: Global code, Eval code, and Function code
當browser進入一個新的context的時候,就會建立新物件(variable object),保存新context的變數與function,當browser跳出此context的時候,variable object就會被刪除

global code: 在functions外面執行的codes
eval code: 是透過eval function執��的code
function code: 是在function定義中的code

當browser切換context的時候,就會決定新的scope,進而決定可以存取哪些variables, objects與functions

************
判斷scope

global code的scope包含了兩種物件: global object and variable object
global object就是window這個variable物件,也可以用this來代表window,ex: window.location也可以寫成this.location

eval code的scope等同於calling code的scope,包含global and variable object

function code的scope包含
(1) calling code's execution context的variable objects,包含該function被呼叫時,所定義的所有的variables
(2) outer function的variable object
(3) global object,也就是window
(4) arguments object,包含了所有參數

通常this就代表window,但在object method中,this就是這個method所屬的object
ex:
function ObjectConstructor() {
// 這裡的this就不是window
alert(this.location);
}
// 物件
function createObj() {
// method
var newObject = new ObjectConstructor();
}

***********
強制建立object 的方法

function Employee(a) {
if (!(this instanceof Employee)) return new Employee(a); // 如果這行沒寫的話就會error
this.name = a;
}

function init(){
John = Employee("Johnson"); // 沒有寫 new
alert(John.name);
}

*********
在subclasses之間共用private data
function Shape() {
var area = 50;
this.setArea = function(a) {area = a;};
this.getArea = function() {return area;};
}

function Square() {
}

Square.prototype = new Shape();

var shape1 = new Square();
var shape2 = new Square();

shape1.setArea(100);

****************
保護private data的兩種方法
1. 用call()
function Shape() {
var area = 50;
this.setArea = function(a) {area = a;};
this.getArea = function() {return area;};
}

function SquareB() {
Shape.call(this);
}
var shape1B = new SquareB();
var shape2B = new SquareB();

shape1B.setArea(100);
//shape2B's 的area變數就不會被影響還是50

2. call a constructor from within a constructor
function Shape() {
var area = 50;
this.setArea = function(a) {area = a;};
this.getArea = function() {return area;};
}

function SquareA() {
this.Shape = Shape;
this.Shape();
}
var shape1A = new SquareA();
var shape2A = new SquareA();

shape1A.setArea(100);
//shape2B's 的area變數就不會被影響還是50

轉轉球迷宮 130關 100% 紀念

01:29上午 十二月 26, 2007 in category General by yaocl

這是個好玩的遊戲,需要穩定的雙手控制Wii Remote(單手拿比較不穩),但偶爾也能耍些小技巧,例如第一部份最難的第E關,要在那麼小的路上走滑水道,簡直是天方夜譚,就直接想辦法讓球從某一個中繼點跳到另一個中繼點,事實上也要感謝遊戲設計者沒有那麼刁難我們,因為可以一直接關,比較難的關卡設計了中繼點。 大多數特殊的球都沒有用,只要用一開始的彈珠就行了,只有為了要拿25個金盃的時候,有時候就會用排球(重量輕、速度快、但會彈跳)、或是土星(重量重、穩定、速度快)。 前50關 前50關的鏡像關 後15關 後15關的鏡像關 所有的球

Ghost Squad Level 99 紀念

01:33上午 十二月 18, 2007 in category General by yaocl

工作上已經好一陣子都在處理,產品功能面的東西,沒有什麼好說的。

前一陣子唯一的娛樂,就是每天晚上拿槍掃射,這是Level 99的紀念。其實這個遊戲也沒什麼,就是一直開槍跟接關而已,反正也是消磨時間。

Level 99 元帥的Gold服裝,和一把貫穿能力高,100發連發的機槍 三個關卡都是Lv16 熊貓裝的正面 熊貓裝頭部 熊貓裝背後的那隻貓