Long term = 永遠不會發生?

April 30, 2011 (Saturday) 3 comments

常常聽到有人說,”現在沒有辦法,那是 long term” 或是 “現在沒時間想這麼多,那是 long term”。

有很多事情日復一日,都在不停的重覆發生。原本應該很麻煩,很痛苦的事情都變成麻木了,變成常態化了。

遠古人們要走到河邊挑水,後來有井的發明,近代有了自來水。要是自古至今大家都只想到,我每天都去挑水已經很忙很累了,不要再想些有的沒有的,乖乖休息明天再繼續挑水,很難想像會有今日方便的自來水可以用。很多大大小小的進步來自於最求更好的希望以及絕不放棄的決心。

每次聽到”那是 long term”,”現在沒有辦法”。都很想說,是真的沒有辦法?還是只是不去想辦法?

沒有時間思考,是進步的殺手。只要不思考,絕對不會相信有進步的可能性,無法想像事情可以變得更好。所以愈常聽到”那是 long term”,似乎也意味著事情愈有可能永遠不會發生。畢竟進步不會平白出現,必需經過人的思考與努力。除非這些 long term 都有放到某一個計劃表裡,而且確實執行,定期檢視。不過如果有這樣做,通常就不會說出 long term 了,那應該是列在馬上執行的分類裡吧。 (笑)

有時真的很怕遇到無暇思考的人,往往就代表著事情不會再有進展了,只會日復一日。不過轉念一想,本來就不是每個人都有這樣的特質,面對較難相信有希望可以更好的人,行動往往勝過千言萬語。如果有人在你面前打開水龍頭,自來水真的流出來,大概再也不會有人覺得天天去河邊挑水是必然的吧。

順便分享,這段影片以及最後的話實在是太棒了!

If not now, then when; If not me, then who?

http://www.ted.com/talks/mick_ebeling_the_invention_that_unlocked_a_locked_in_artist.html

Categories: 閒聊, Free Talk

April 18, 2011 (Monday) 2 comments

當看到更多,接觸到更遠的地方。世界是變大還是變小?

當訊息好像可以到達很遠處時,關心是否變得比以前更少?

時間似乎讓很多事情都改變了~

最近很多的事情真的了解到不放棄,不退縮的執著才是最讓人佩服的

戴佩妮的一首歌 – 路,在不願放棄時,特別有感覺

我知道這一路的風風雨雨 它總是讓人跌倒
也知道這一路的曲曲折折 會模糊了我的想要
未來也許飄渺 我的力量也許很渺小
要讓你知道執著是我 唯一的驕傲

Categories: 閒聊, Free Talk, Mood, 心情

人生如何評量?

June 4, 2009 (Thursday) 3 comments

之前 William 寄了一篇文章 “幸福課“ 給我,看了真的覺得很有感觸。

的確評估企業我們就應該用錢去評量,相對的人生就要用幸福快樂去評量。我完全同意人生是要用幸福去評量的,也終於懂為什麼很多時候被人問一些問題時我根本答不出來。答不出來不是因為我沒答案,而是答案不被提問的人接受,價值觀完全不同,我沒有更好的答案可以讓他們接受我的想法了。大家常常不自覺的用錢去評量人生,幸福很難被量化,金錢容易多了,而且比評量人比評量企業還不客觀,大家都只看收入不看支出 (?)。

另一個讓我很認同的觀點是,大家都習慣認為快樂必需付出痛苦換取,好像只要後面能有一點點快樂,再苦再痛都值得?在華人圈更是很多古人的故事都一直提到必需要 “吃得苦中苦,方為人上人“ 只不知這些人上人是幸福還不幸福就是了。幸福課的開課者在得到比賽冠軍卻沒有感到真的幸福,看來別人認定的成功也未必就是幸福。努力是必需要的,但因為要努力就不幸福好像就有點太超過了。

評量人生也許有很多觀點,但至少我相信,用財務報表來評估人生絕不是唯一的路,而且財報是一條讓人快樂不起來的路。不過幸福快樂怎麼評量真的很難,很考驗人的智慧。不過應該不會是填幾題問卷就決定誰快樂誰不快樂吧?

Categories: 閒聊, Free Talk

Google AppEngine for Java Announced

April 9, 2009 (Thursday) 1 comment

Today is a great day while Google announced the Java version of AppEngine.

The first thing to keep in mind is the security sandbox on the AppEngine server. And obviously it would be the challenge for many Java frameworks to run on AppEngine server out-of-the-box.

After having a brief run, here are something I found:

  • SiteMesh cannot work since it called javax.naming.InitialContext somewhere.
  • Stripes cannot startup by default because the DefaultMultipartWrapperFactory delegate to somewhere called System.getProperty(“java.io.tmpdir”). By providing a empty implementation of MultipartWrapperFactory, this could be solved easily. (Without considering the multipart function really works, since the AppEngine sandbox locked the file writing).
  • Freemarker works fine except there is an error on using JSP tags.
  • Spring framework seems fine as far as I go.

Looks like most of the issues can be solved. But the local environment does not work as the sandbox on AppEngine server. This makes the debug harder and the cycle longer.

即時共同 Coding – Cola

June 28, 2008 (Saturday) 1 comment

自從 Web 2.0 時代以來,share editing 是一個常見的應用,像 Zoho Writer 就可以即時共同修改同一個文件檔。但在程式開發方面,雖然一直都有 Collaboration 的觀念,但工具方面一直都沒有看到可以 share editing 的 (可能是有,不過我還沒有看過)。

Eclipse 的新版 Ganymede 最近 release,主打的除了更強化 Mylyn 的功能以外,ECF (Eclipse Communication Framework) 也出了一個新版。在這個版本裡,名為 Cola 的的 share editing 環境是主打的功能,有一段清楚的 demo 在這裡,也可以看 DocShare Plugin 的介紹。其實一堆名稱我也覺得很困擾,到底哪個代表什麼,不過既然作者在 demo 裡都說是 Cola,那就跟他一樣叫 Cola 吧。

使用時必需案裝 ECF plugin,可以在這裡找到。其實目前 Cola 的功能並不算強大,在 ECF 使用 XMPP (Google Talk) 或 Skype 的 provider 時,才能使用 Cola 的功能。在 communication perspective 中連上 XMPP 或 Skype,之後加入好友名單,就可以選要要 share editing 的好友,檔案內容一開始只要有一方擁有就好,coding 時雙方的修改都會即時被看到。

實際操作時覺得還蠻順暢的,不過如果沒有配上同時使用 Skype 語言溝通的話,那感覺上就像有個不知名的人在偷偷亂改你的檔案。憑心而論,這個功能目前趣味性大於實用性,我能夠想像的是搭配語音溝通的情況之下,讓身處兩地的一位老手帶著一位菜鳥去寫 code,這樣子對菜鳥的進步是有很大的幫助。若是實際上開發 project,大多不必如此大費周章去搞 share editing。但是我還是很樂見這樣的功能終於能夠看到比較成形的產品,畢竟先有了技術平台,運用就有機會出現。

Google App Engine – 新時代來臨的震撼

April 28, 2008 (Monday) 4 comments

Google App Engine (GAE) 月初在公開發表,announce 的那幾天每天都佔據了各大技術網站的版面。一個全世界都在看,全世界都在玩的產品,一定有它獨到之處,當然一定要來研究研究。Download 了 SDK,試著開發了一個簡單的程式,其實我對 python 並不熟,加上對 Django 一無所知,但卻不會覺得開發很困難,反而覺得比開發 Java 還要快還要順。雖然使用 GAE 的經驗很淺,不過 GAE 給人一種新時代來臨的感受。

在 Business model 方面,其實有太多太多的討論跟介紹了,一定很容易找到。會覺得是一個新時來的來臨,不是因為這是一個可以跟 Amazon S3 / EC2 對抗的 service,而是在開發技術上面 GAE 也做了一些突破。

跟 Java web development 比較起來,GAE 在開發上讓人覺得最驚艷的地方就是修改 code 的 feedback 速度。一般的 Java web development 在修改 code 之後,需要 compile -> deploy -> restart web container 才能看到修改,但使用 GAE,基本上你的修改馬上可以 apply,沒有 compile、沒有 restart server。這個說法也許有點落伍,很多人馬上就會想到 Ruby on Rails (RoR);也有人會想到這不是本來 Python + Django 就有的能力?就算是 Java 界,Groovy / GrailsJRuby 等也可以做到同樣的事情,何必大驚小怪呢?

GAE 當然不是只是拿 Python 跟 Django 出來騙騙小孩的玩意,真正強大的就在 Big Table 的部份。不要問我 Big Table 是什麼,我答不出個所以來,但站在 GAE developer 的角度而言,沒有 DB 這個東西。使用 GAE 在開發時,你的 code 中的 domain model 就是唯一的 model,沒有 DB,也沒有 DB schema、版本等問題。修改 domain model 的 code 馬上反應在下一次執行裡。GAE 的 domain model code 建立在 Django data model 之上,用起來很方便,類似 RoR 的 Active Record,但是少了 DB 的麻煩。

即使使用 RoR,在 domain model 上還是有得頭痛,因為 DB 的 schema 如何跟 code 裡的 domain model 保持同步就是一個大問題,一般 DB Migration 可以應付這個問題,在 domain model 改變的同時,準備一段 migration 的 code / description 就可以讓開發架構幫你把 DB 改到同一個版本。在 Java 也有 liquibase 可以做到這件事。但免不了要下去改東西,更嚴重的是,這個修改很可能沒有辦法即時反應 (至少在 Java 應該還是免不了要 compile -> db migration -> restart),所以又掉回了比較慢的 development lifecycle。

那麼用 Big Table 有什麼 trade off 嗎?有的,就是大家熟悉的 SQL / relational model 等等武功全廢。雖然 GAE 提供了一個叫 GQL 的東西,語法類似 SQL,但沒有 join 等等在 SQL 裡威力最強大的功能,思考也不宜使用 relational model 去想你的 data,因為這樣會完全想不通要怎麼辦。會不會有什麼事變成做不到了?我想有可能,但絕對不會太嚴重,因為絕大部份講究 OO 的 code 本來就很少直接運用 relational model 在操作,所以才有 OR mapping 的出現。如今 GAE 一不做二不休使用了 Big Table,除了宣示它在 scalability 上舉世無雙以外,也帶領 GAE 的 developer 進入一個新的時代,一個不去用 relation model 思考的年代。

我不是花了很多的時間在 GAE 上,寫進階的系統會不會出問題我沒有辦法知道,但以基本 web 常見的功能而言,很容易開發。Big Table 完全不會影響到我的思考,反而在 development lifecycle 上給了很大的進步,幾乎所有修改都能馬上看到 feedback。Agile development 中,fast feedback 佔了很重要的一個地位,愈快有 feedback 代表了開發的速度愈快。拿 Java 作比較,在 code 的修改上 Python + Django 的 feedback speed 就已經快了一大段,再加上 Big Table 又勝過了所有使用 DB 的 solution (包括 RoR、Django、Grails and JRuby 等等)。這個開發速度上的震撼讓我一直在想,用 Java 開發 web 是不是已經過時了呢?在 GAE 的範圍以外又如何去趕上這個突破,跨入這個新的時代呢?我想世界上有其他更多的人已經在想這個問題,新的工具、機制我想很快就會出現,open source big table 的技術也慢慢的浮上來了,新時代也許會靜靜的到來。至於這個新的突破跟誰會有關?是不是只有如 Google 般大的公司才適合用 Big Table?這個就留待日後驗證好了。

Spring framework 市場持續擴大

January 29, 2008 (Tuesday) 1 comment

SpringSource (以前為 Interface21) 接二連三在市場上有大動作。

首先是推出認證機制,通常能夠推出認證的都應該是市場上比較主流的技術,而且能夠被多數人所學習的。而且認證對於教育的市場有非常大的相關,也代表了將會有更多更多的人學會 Spring framework。

第二是在 SpringSource Team Blog 上公佈了 Spring framework 與 EJB 工作職缺的比較,內容發現了:

  1. EJB 職缺需求持平
  2. Spring framework 需求大幅提升
  3. EJB 與 Spring framework 總需求有一定幅度的成長

這點正好呼應了為什麼 SpringSource 敢推出認證機制。

最後就是今天的新聞,SpringSource 買下 Covalent,Covalent 是一家做 Apache HTTP server 或 Tomcat 等等的技術顧問公司,也有在推 Terracotta。技術顧問公司本身沒有產品,SpringSource 買下來主要一定是看重它在市場上推廣技術的資源,而且有顧問公司,也可以更有力的深入企業客戶。

以往 JBoss 也是走顧問導向的方式,SpringSource 也走向這一步,是否能夠比 JBoss 的顧問方式做得更成功呢? 如果 SpringSource 真的能夠再把市場擴大的話,就很有可能成為 Java enterprise development 的必要條件了。也許真的有那麼一天,所有的 Java developer 幾乎都會使用 Spring。當然到時會 Spring 也就不是什麼了不起的事情了。不管是不是真的有那麼一天,Spring 在市場上繼續擴大是沒有問題的,就技術而言,Spring 有很多替代品跟競爭者,但就市場面去看,Spring 目前是沒有什麼對手呀!

Xuite.net Personal Portal 的新風貌

January 2, 2008 (Wednesday) Leave a comment

最近連上 Xuite.net 會發現首頁又有了新改變,這個 personal portal 的首頁進入 Beta II。如果有使用過 Netvibes, iGoogle 等服務的人當然不會陌生。國內對於 personal portal 的做法一向很愛用鎖國政策,portal 上的元件再怎麼設定都只讓客戶連到自己的服務,對於外面的服務大都不願提供連結方式。Xuite.net 在這方面就好多了,有 RSS component 可以連結外部,至少有達到一個 personal portal 的最基本要求。版面可以自由拖拉設定,新增 tab 等等。每個 tab 能有自己的 layout 以及背景的設定,這點是很多國外的 personal portal 也沒有的。

另一個比較特別的地方是它有一個 public 的個人首頁。 一般的 personal portal 只能由 portal 的 owner 連入去,而 Xuite 提供了一個個人首頁的機制,可以讓別人連進來看到你所設定的首面。這個算是一大特色,算是結合了國內很多個人網站以及國外 personal portal 兩方好處的一個想法。至於日後有什麼發展,就要看能夠提供多少吸引人的元件了。

LiquiBase – A Database Refactoring Tool

December 16, 2007 (Sunday) Leave a comment

Change is the only thing unchanged. 軟體當然也脫離不了這個道理,但改變通常是會對軟體造成一些衝擊和影響的,有名的軟體技術很多都是教導如何面對改變而出現的。Refactoring 的技術鼓勵大家勇於面對改變,只有發現有不夠好的地方,馬上藉由 refactoring 的手法讓 code 變得更好。因此我們可以經由 refactoring 讓程式一步一步的改善,但 enterprise software 一般都會有 database,如果程式能夠一直改進,但 database 的 schema 沒有辦法修改的話,在改善的程度上會有很大的限制。因此 Database refactoring 也是有被研究討論的技術,Refactoring Database 正是討論這部份的一本好書。

既然 refactoring code 的時候需要使用工具的幫忙 (Eclipse 等 IDE 都有 support source code refactoring),那麼 Database refactoring 也需要有工具才會容易使用。LiquiBase 就是做 database refactoring 的工具,由 developer 提供的 change log file,裡面寫上想要做的 change set (如:Step 2 的樣子)。在執行 liquibase 的時候,它會去看目前的 database 是在哪一個 change set version,執行還沒有 apply 的 change set。當中 change set 版本的管理也是由 liquibase 來做。來舉一個實際的例子:

如果我想要建立一個 Table PERSON, 裡面的 column 有 ID, NAME。那我把它寫成 change set 1。這時執行 liquibase,由於我的 DB 裡本來沒有任何 table  所以 liquibase 會幫我執行 change set 1,也就是建立 PERSON table,同時會在 DB 裡記錄目前是在 change set 1。

接下來我可能覺得 PERSON 需要記錄更多的東西,所以想要增加 AGE 這個 column ,我就把它寫成 change set 2。這時執行 liquibase,它會發現剛剛的 DB 是在 change set 1 這個 version,所以就執行 change set 2。如果我把 DB 砍掉再執行 liquibase,這時它就會一次執行 change set 1, 2。

有了這個工具之後,我們對於 database 的修改都可以一一被記錄下來,加上 VCS (Version Control System) 的機制,就可以回去任何一個 DB 的版本。另外,liquibase 支援 MySQL, PostgreSQL , Oracle, MS-SQL, Sybase, DB2, Derby, HSQL, H2 等等,即使使用不一樣的 DB 也可以用同樣的語法寫 change set,這也是 liquibase 的一大功能。有了 liquibase 再搭配上針對 database schema 所做的測試,就可以隨時做 database refactoring,而且就跟 refactoring source code 一樣的簡單又有保障。

Unitils — 一次滿足所有 unit test 的需求

December 2, 2007 (Sunday) Leave a comment

談到 unit test,大家馬上想到的應該會是 JUnit;又或許是比較新一點的 TestNG。有些比較有經驗的人可能就會提出,那 servlet 如何測試?Spring bean 又如何測試?DAO 又如何測試,怎麼去建立 DB 的資料?如何去 mock 一個物件?

這些問題早就出現了,也早就有解法了,只是每一個問題可能都會對應到一個  library 或小型的 framework。 一直都沒有一個一次把問題解決的方案,直到 Unitils 的出現。Unitils 發源於 Ordina J-Technologies 的一個 unit test discussion group,會中他們討論出一份 Unit testing 的 Guidelines,而 Unitils 正是這份 guideline 的實作。

在 unit testing framework 的部份,Unitils 是 JUnit3, JUnit4, TestNG 三種都支援,所以不管你最熟悉的是哪一個都可以順利的使用 Unitils。在功能方面,Unitils 主要 support 以下幾項功能:

這些功能的文件都寫得很簡單易懂,其實觀念也很簡單,歸納一下只有幾個:

  • 使用 Java 的 equals 去 compare 通常不會是我們真的要的狀況,所以提供了比較寬鬆的比較
  • Unit Testing Database 必需要能夠自動的維護 (建立與更新版本)
  • DB 的資料必需要能夠在測試中自動加入
  • Test fixture 像是 Spring bean, mock object 等等盡量使用 annotation 標註,由 framework 自動產生

另外,Unitils 本身是由一堆 module 所組成的,如果它所提供的 module 還是無法滿足你的需求的話,要擴充其實很簡單。有興趣的人看一下 Unitils 的 source code 以及 unitils-default.properties 這個設定檔應該就知道怎麼做了。其實很難得一個小小的 unit testing framework 居然在模組化上做得這麼精美。

以前在這裡討論過 full stack application framework 的興起,同樣的 Unitils 這個可以滿足所有 unit test 需求的 framework 也很有可能慢慢會變成主流。只要一種技術成熟到一個程度之後,將會有整合的環境出現。在 JUnit、TestNG 都沒有太多的突破之後,Unitils 補足了這個空缺的需求。 如果你還在煩惱要怎麼開始做 unit test,那就用看看 Unitils 吧!