2010年10月27日

利害!!! 不笑很難

2010年9月15日

Poster練習

用GIMP製作的第一個Poster練習

2010年7月29日

Groovy 的檔案複製

Groovy 複製檔案的方法:

(1) 一般文字檔
new File(your_source_file).withReader { rdr ->
    new File(your_destination_file).withWriter { wtr ->
        rdr.readLine { line ->
            wtr << line
        }
    }
}
(2) Binary 檔案
def fos = null
def fis = null
try {
    fos = new FileOutputStream(your_destination_file)
    fis = new FileInputStream(your_source_file)
    fos << fis
finally {
    try { fos?.close() } catch(e) { /*ignore*/ }
    try { fis?.close() } catch(e) { /*ignore*/ }
}
(3) 用 ANT utility
new AntBuilder().copy(file: your_source_file, tofile: your_destination_file)
三者各有各的使用情境。

2010年6月26日

你, 必看的一齣戲 Java 4-ever!

Java 與 OpenSource 的世界, 你錯過了多少?
帶您回顧歴史, 並細數重要的人物; 精彩好戲預告: [ Java 4-ever ]



別忘了看幕後製作的卡司哦!

ps. 補充瀏覽網址 http://jz10.java.no/java-4-ever-trailer.html

2010年6月19日

精彩, 原來現在才開始

與美X夥伴一次的聊天時談起了自己的忘性, 才愰然查覺自己已是拒絕回憶的人了。
在脫離拼命加班的那段腦細胞不知死掉多少的日子之後,
在夜深人靜腦袋還清醒時, [回憶]起孩童與青少年那段不堪回首的日子;
媽媽就是一切, 如果她感到人生絕望, 就等於我的天要塌了。
從來也沒想過, 未來的我會是誰? 生活會怎樣?

生活上任何的作為, 都只是為了[活], 人生毫無目標; 而忙碌工作, 就成了唯一; 當然生活也就零蛋。

然而從有記憶以來、結婚生子, 以及上個公司長達14年半的工作, 經歷了許許多多的苦痛;
自認為那些起起落落的人生歷練, 比起別人可"精彩"多了;
有時認為無耐就是人生、時間就是別人的。

在接觸美X之後, 不斷不斷的正面訊息接觸與滋養, 才警覺原來我的"認命"是一種"放棄"。
而平時工作的"不放棄"幹勁, 只因自己的興趣使然。

開始經營美X之後, 也查覺了自己不擅長的事要時時面對, 也有點想逃避。
看了兩段影片的同時:



告訴自己, 除了要不斷保有並追求夢想、時時跟未來的自己對話外,
存著不斷試煉自己的心情來經營美X; 回首7個多月的點點滴滴, 嗯~~~
精彩, 原來現在才開始。

ps.感謝這三年半所有我交往過的朋友, 以及我的親人; 感謝有你、有你真好!

2010年6月18日

為 Grails service 物件宣告 logger

一般來說, Java class 中使用 logger(以 Log4j 為例), 會使用兩個方式:
private static final Logger log = Logger.getLogger(MyClass.class);

private static final Logger log = Logger.getLogger("MyClass");
而在 Grails 的 controller 中則可以直接使用 impicit 物件: log
主要是因為 Grails 已經幫忙做了 Dependency Injection; 而其 logger 物件已在 conf/Config.groovy 宣告

但是, service 物件怎麼辦呢?
此時的做法, 則會像一般 Java class 的方式(以 SLF4J 為例)來宣告, 如下:
private static final Logger log = LoggerFactory.getLogger(MyService.class)
同時, 規劃了 log 的輸出檔案; 也就是在 conf/Config.groovy 中設計一個 appender:
log4j = {
  appenders {
      appender new org.apache.log4j.DailyRollingFileAppender(
        name: "dailyAppender",
        layout: pattern(conversionPattern: '[%d{yyyy-MM-dd HH:mm:ss}] %p %m%n'), 
        file: "${System.properties['java.io.tmpdir']}/my-test.log",
        datePattern: "'.'yyyy-MM-dd")
  }
...
  info  dailyAppender: 'MyService'
...
但, 相關訊息輸出的執行結果未出現在 appender 所指定的檔案之中;
還好, console 仍有 service 物件的訊息輸出; 並且提示輸出的 class 名稱為:
service.MyService

於是修改 service 物件中的宣告:
private static final Logger log = LoggerFactory.getLogger('service.MyService')
但, 結果仍不是預期的; 經查明資料後發現, 在 conf/Config.groovy 中 logger 的宣告應該為:
...
  info  dailyAppender: 'grails.app.service.MyService'
...
同時, 要變更 service 物件中的宣告為:
private static final Logger log = LoggerFactory.getLogger('grails.app.service.MyService')
而此時測試的結果, 才真正輸出至預期的檔案之中。

ps.
原來, 我被輸出的訊息 "service.MyService" 給誆了

2010年6月10日

傳唱真愛

一位我的朋友楊森林, 是位熱愛照像的人, 經常會收到他的作品電子郵件。
這次不例外, 收到了黑白照像作品; 但很特別的, 是陪腦性麻痺病童過母親節的活動照片。
以下是電子郵件的這段話:


每年的母親節似乎都一成不變,買個禮物,吃頓大餐,切個蛋 糕,再拍幾張全家福照片,熱熱鬧鬧的過了這一天。今年的我提前過了一個不一樣的母親節,用相機幫幾十位辛苦的腦性麻痺病童媽媽,紀錄了一次溫馨的母親節活 動。

腦性麻痺病童是上帝最寵愛的小天使,上帝很偏心地安排了最偉大的母親來照顧每一位腦性麻痺病童,讓上帝最寵愛的小天使們,都能得到最好的照顧。每位偉大的 母親,也都無怨無悔的全心照顧這群上帝最寵愛的,誤入人間的折翼天使。為了感念這麼多偉大母親的辛勞,中華民國腦性麻痺協會安排了來自長庚技術學院幼保系 和歐德家具的志願愛心義工,用輕鬆而有趣的活動帶領著小天使們過了愉快的一天,在母親節代替辛苦的母親來照顧這群可愛的小天使。而台灣盲人重建院、樹德科 大流行設計系以及馬偕護專化妝品應用系更是為媽媽們提供免費的舒壓按摩和彩妝服務,在義工代為照顧腦性麻痺病童的這一段時間裡,讓這群平常全心照顧小天使 而疏於照顧自己的媽媽們,也能有機會好好寵愛一下自己。

當天的活動還安排了小天使們送自己製作的母親卡,對正常的小朋友來說,製作的母親卡是一件很平常的小事情,但對於病情比較嚴重的腦性麻痺病童來說,舉手轉 頭都已經很困難了,更不用說是要自己畫一張母親卡,來親手送給媽媽。只見小天使在義工大哥哥和大姐姐的幫忙之下,費盡力氣拿了彩筆在紙上畫了幾筆五顏六色 的線條,然後再次在義工大哥哥和大姐姐的幫忙之下,坐著輪椅來到媽媽的面前,搖頭晃腦地把母親卡親手交給了媽媽,雖然看不懂卡片上歪歪斜斜的線條究竟在畫 些什麼,但對於每位在場的母親來說,能夠收到自己小孩親手製作的母親卡,一定是全世界最好的母親節禮物。


像這樣紀錄人生、呈現照片中人物的愛與偉大; 讓人感動。
正如這個時代所強調的: 網路無遠弗界;
母愛及父愛的偉大, 一定要在網路上歌訟傳唱下去。


想要捐款幫助這群可愛的小天使嗎?

2010年5月1日

每日語錄 - YOU CAN DO IT.


[...
Our message is yes you can.
You can do anything you want to do as long as you make up your mind.

YOU CAN DO IT.
...]

2010年4月19日

每日語錄 - That's it.



《搶救黎明》電影中的主角最後一場台詞:

Empty what is full.
Fill what is empty.
Scratch where it itches. That's it.

人生本來就不儘是平順的一個旅程,
遇到挫敗、困境時坦然面對,即使是人性的考驗。
That's it.

2010年4月15日

每日語錄 - 渴望=能力

「能做自己想做的事,才算是真的人生。」

「每當你(我)心裡浮現想去做某一件事的渇望時,就代表你(我)內在潛藏著可以做到那件事的能力。」

「渴望就是能力的一種表現方式。」

2010年4月13日

每日語錄 - 選擇行業

「當機會來臨時,如果經過審慎的考量之後,仍認為是個好機會,那就不要再害怕立刻做徹底的改變。然而,如果你(我)心中有一絲猶豫,無法確定這麼做是否是明智時,那麼就不要倉促行事、貿然行動。」

「當你(我)心裡有絲毫懷疑時,請停下腳步稍事等候,回頭好好冥想你(我)的願景,提昇你(我)的信心與決心。如果心裡有所懷疑、覺得猶疑不定,那麼就請想盡辦法讓自己培養感謝的心情。」

2010年4月11日

每日語錄 - 有效率的行動

「一個人會失敗,是因為用沒有效率的方法做的事情太多,用有效率的方法做的事情太少」

「如果你(我)能在採取任何行動時,都懷抱著願景,並且將信心與決心的力量貫注於行動中,那麼每一個行動都會是即有力且有效率的行動。」

2010年4月10日

每日語錄 - 懂得感謝

「感謝的價值並不只是可以讓你(我)在未來獲得更多祝福。如果不懂得感謝,你(我)將無法拋開對於事情現狀的不滿想法。」

「而就在你(我)允許心中存在著對於現狀的不滿想法的那一刻,你(我)的心就開始失守了。」

「懂得感謝的人永遠都注意著最好的事物,因此會變得更好。」

「懂得感謝的人會不斷期望好事發生,而這期望會成為信心。當感謝力量的反作用力用於人心之上時,就產生了信心,而此後心中所傳出的所有感謝想法都會更強化信心。」

2010年4月8日

每日語錄 - 深入思考

「大部份人寧可去做勞務工作,也不願意做長時間的深入思考;思考是世界上最困難的活動,尤其是當真相與表相全然相反時,就更為困難。人在觀察到世上的表相之後,很容易會相信那表相,而唯有先了解真相,才能避免誤信表相。」

2010年4月3日

Prototype JS 的 Selector Expressions

學習 CSS 時就不得不認識 selector。

通常書上所提到的 selector, 大多為 Type selector、ID selector、Class selector 及 Pseudo-classes selector; 雖然這已經滿足大多的需求, 不過實務上還是需要其他的 selector 的支援,  而 maxdesign 的 Selectutorial 資訊可以供作參考 。

CSS selector 規則, 其中也包括了 Attribute selector, 在 CSS-Tricks web-site 中簡明扼要說明了一些實用範例

一般運用時, 除了使用 CSS file 做頁面外觀的處理之外, 仍需要 JavaScript 來進行 DOM element 的動態控制或資料處理。個人會選用 Prototype JS 做為主要的應用工具, 是因為它的 utility methods 使用上很直觀, $$(cssRule...) 提供了一些在 CSS 支援上的說明。

但, 在範例中都只使用了特定 attribute selector 規則, 如果讀者眼尖的話, 在說明的開頭處就已經提到 "cssRule ...", 也就是說: 可以使用多個 attribute selector 規則。方法是使用逗點(,)將每個 attribute selector 隔開即可。

例如: 將畫面上輸入的欄位值串接成 query string:
var reqStr = "";

$$('select[name^="cri_"]', 'input[type~="hidden"]:not([name^="cri_"])').each(
  function(ele) {
    if (typeof ele.name != 'undefined' &&
        typeof $(ele.name).value != 'undefined' &&
        $(ele.name).value != '') {

        reqStr = (reqStr.length > 0 ? reqStr + '&' : '') + ele.name + '=' + $(ele.name).value;
    }
  }
);

2010年3月22日

千騙、萬騙,不離ATM!

歹徒各式各樣的詐騙手法在新聞電台不斷的播出,要大家小心詐騙,勿聽信電話指示操作自動提款機!

最近同事說道又有歹徒謊稱是司法人員查案, 要她去"處理"; 其他同事則告知不要隨之起舞, 並且講述歹徒慣用的方法, 而其中的一個方法也是多年前我太太所經歷過的: 騙當事人持金融卡至 ATM 以「英文模式」進行操作, 索性沒有得逞。

不過, 好同學近來轉寄了一則更令人咋舌的新聞片斷-大陸犯罪新手法:


也是提款機犯罪的手法。看來歹徒善長人的心理(學), 一直在人家的背後施壓或語言操控。

我們可以在內政部警政署165反詐騙網站查看相關案例來做警惕。小心為上!

2010年3月21日

三種有幫助的人

人的一生中大多時候是需要幫助的。有三種人對自己會有幫助:

榜樣:
每個人需要榜樣, 別人的成就可以供自己觀察、分析和遵循。可以發現大多數成功的人都有模仿的對象, 他們「複製」對方成功的方法。

教練:
每個人至少需要一位教練。百分之九十九的成功人士都有教練。如果想在短時間內濃縮別人或甚至更多人的成功和經驗, 就需要一個好教練。

如何找到好教練?如何與教練相處?
(1)寫下為什麼需要教練的理由?自己能為教練作什麼?需要好理由和熱情。
(2)展現耐性。好教練會先測試。
(3)想清楚要問什麼?教練會激勵人家的長處, 而不是解決問題。
(4)與教練保持聯繫。尊重教練的時間。
(5)展現自己廣納意見的態度。贏得教練的心。立刻反應教練提出的訊息。
(6)回饋教練。用成功來報答他。
(7)模仿教練, 但也要保有自己的風格。

專家網路:
需要一個由專家組成的環境, 他們應該是可以和自己一同前進的人, 是了解責任準則的人。而且在自己的領域裡, 他們是把責任準則發揮到極致的人。



成功人士遵循以下準則:
1. 自己沒有完成某件事的人, 沒有權力提供別人建議; 所以不需要去聽取這種建議。
2. 和成功人士交往, 要成功就比較簡單。
3. 想要致富, 必須先讓自己習慣與財富相處。最簡單的方法就是與成功人士交往。
4. 判斷一個人智商的方法, 就是觀察他周遭的人。
5. 儘早尋找好的意見。
6. 只聽取自己欽佩的人的意見。

2010年3月17日

Groovy 中 Map 的鍵值型別

當了解到 Groovy 的 String 與 GString 物件的同時, 同時也要學到 Collection 物件的應用。

通常會用到 Map 物件來做資料存查(cache); 當資料存入 map 時, 會將 key 自動轉成物件, 而且一般會使用 字串 物件做為資料的識別(key)。理想上來說:
def key1 = 'aKey'
def key2 = "$key1"
def map1 = [:]
def map1[key1] = "some thing"

// key1 與 key2 等義(雖然型別不同)
assert map1."$key2" == map1[key1]

map1.remove("aKey")
assert map1.size() == 0

不過, 同時使用 groovy 語法又使用 Java Map 的 API 進行資料的操作 (在一處 code block 設值, 另一處 code block 取值或移除), 往往會稍不留意 key 的型別或自動轉換後的型別, 結果是存得進去卻取不出來; 也就是說:
// object_of_String 與 object_of_GString 值相同下
assert someMap[object_of_String] != someMap[object_of_GString]

此時, key 要保持型別的一致才能順利存取。目前的實際程式測試結果是如此, 得再進一步驗證。

2010年3月9日

認識 OPCs

說到非細菌性慢性疾病的發生, 多數人可能認為人體是隨著時間而衰老所引發的。在看過「活得更健康、更長久--OPCs神奇保健功效背後的科學」一書後, 其中提到已有大量的自由基病理學的研究指出, 很多致命性和衰弱性疾病與一類非常活躍的化學物質有關﹣自由基

多數自體因素的氧化過程或環境所引起的自由基, 會傷害人體的細胞膜、細胞蛋白質、DNA、RNA等, 而加速衰老以及有關衰老方面的疾病或引發癌症。

由於資訊的發達, 讓多人數知道"營養素"不僅能夠預防這些疾病的發生, 而且還能幫助那些已經患有這些疾病和障礙的人獲得改善。不像過去, 因為營養素沒有專利限制, 使得靠產品專利來回收利潤的醫藥公司不會加以宣傳營養素的好處。

從事水果生意的親戚告訴我: 水果皮最營養、選葡萄要挑深色的...等。除了有了這些觀念, 也從這本書瞭解到了深色蔬果富含生物類黃酮原花色素(Oligomeric Proanthocyanidins Complexes), 簡稱OPCs; 它會活化維生素C並間接活化維生素E, 用以阻止或減緩氧化過程, 來預防衰老、心臟病及其他慢性退化性疾病。OPCs的幫助有:
1.增強免疫系統
2.抵抗自由基
3.幫助維他命C、E的吸收利用
4.增強夜視力及保護眼睛
5.調節控制神經傳導物質的酵素
6.抗發炎
7.抗組織胺
8.抗癌
9.改善精液結構,增加生育率
10.促進血管暢通、皮膚健康
11.改善過動症、注意力不集中
12.增進循環系統
13.降低LDL膽固醇
14.減少紫外線的傷害
15.強化膠原蛋白
16.保護心臟
17.改善退化性老年癡呆症(可通過血腦屏障,故可以保護腦細胞)
18.改善靜脈曲張及水腫
19.減少行經前症狀
20.阻礙黑色素形成,有美白效果

OPCs對人體抗氧化的目標不在於延年, 益壽才是目的。

在使用了美X的OPC-3約5個月後, 十多年長期電腦工作的我, 因加班造成記憶力衰退、注力意不集中而耽憂了3年的情形, 逐漸好轉; 對於家中兩個小孩常在早晨打噴涕、流鼻水等過敏性鼻炎的情形, 也獲得改善。

OPC-3它的原料來自於專利產品: 碧蘿芷(Pycnogenol®), 並且擁有臨床研究證實的六大專利(USA Patent 4,698,36 / USA Patent5,720,95 / USA Patent 6,372,266 B1 / USA Patent 5,719,178 / USA Patent 6,565,851 B2 / ZL 00 1 30133.0); OPC-3主要萃取自葡萄籽法國西南部特有的海岸松樹皮紅葡萄酒等高活性的成分, 以及山桑(越橘)柑橘類等複合配方、純天然不含任何西藥成份, 加上等滲透(Isotonix)專利的飲用型式, 有效提高了抗氧化的能力。

2010年3月8日

看看別人、想想自己

蘋果日報2010年03月06日報導了《富比士》亞洲48慈善英雄 台東賣菜阿桑最棒, 一個在台東市中央市場靠賣菜為生的婦人-陳樹菊, 一輩子省吃儉用, 將辛苦賺的錢都存起來行善, 她近20年來捐出千萬元, 台東市仁愛國小圖書館更是她捐了450萬元蓋的。亞洲《富比士》(Forbes)雜誌公布亞洲慈善英雄榜, 其中陳樹菊最受矚目, 與億萬富豪蔡宏圖、企業家林宏裕和潘思源, 並列台灣四慈善家。

看到這裡, 想起了美X的夥伴們提過他們的人生夢想, 很多都是有大愛的; 無論是受崇高的宗教教化的、小時候曾聽過的、看到的一些事而感動的, 或受到很大的幫助而發顯的, 在在地看到很多台灣人是有愛心的。讓為了區區四口人生活費用而大傷腦筋的自己, 自嘆弗如!

我沒記錯的話, 像從事IT工作的恆毅教育中心講師蔡先生, 他就是默默貢獻所學所有, 持續支助偏遠小學的學童一些電腦設備; 更讓人覺得慈善不一定是財力雄厚的富人才能做到的, 而是跟我們一樣的是平民小百姓; 他們發光發熱照亮別人, 也因此, 陳樹菊的故事才令人如此折服感動。

看看別人、想想自己。

2010年3月4日

Spring UrlPathHelper 物件的第一次接觸

一般而言, 在 Java web-app 中要取得 browser HTTP 的 request URI [或 query string], 第一個念頭就是使用 Servlet API:

    HttpServletRequest 介面的 getRequestURI() [或 getQueryString()] method

索性, Grails framework 在 Groovy MOP 的支援下, 使得使用這些標準 API(getter) 是輕鬆、直觀的:

    request.requestURI [或 request.queryString]

而且同 JSP 的 EL 一樣, 在 GSP 中可以像 EL 一樣來取值:

    ${request.requestURI} [或 ${request.queryString}]

然而, 該取用 request.requestURI ? 還是取用 request.uri 或者是 request.request.requestURI 才正確呢?
一般的理解, 相較於 servlet API 來說, 直覺會使用 request.requestURI。但, 在 Jetty(開發環境) 與 WebLogic 10.2(執行環境) 兩者 web container 中, 實作上所回應的結果卻不一致, 真出乎我意料之外。

此時, 可以請出 UrlPathHelper class 來解決這樣子的情形:
def helper = new org.springframework.web.util.UrlPathHelper()

def reqURI = helper.getOriginatingRequestUri(request)
def qryString = helper.getOriginatingQueryString(request)

因此, 為避免使用 groovy/Java 與 web container 上實際結果的差異, 經由不斷測試、驗證而得到結果。
軟體開發的解決之道, 仍是老話一句: 測試再測試。這也就是為什麼 TDD(Test-Driven Development) 那麼重要。

2010年2月28日

什麼是宿便

上一篇提到了酵素能幫助腸胃的消化, 接著便要關心一下纖維素對腸道的幫助。

「宿」是一夜的意思,以此標準來看,只要是隔夜沒有排出的糞便就算是宿便。入口的食物經過消化道到排泄大約需要8-12小時,但Discovery頻道曾報導,與以前的人比,現代人的消化速度只有1/10,過去8-12小時就能消化完全的食物,現在則需要80- 120個鐘頭。妳或許不相信,3天前吃的東西,竟然得等到今天才會消化完全、廢物才能順利排出。

究竟是什麼原因造成現代人的消化速度越來越慢?
洪松齡中醫師表示,與農業社會相比,現代人明顯缺乏運動,長坐少動的生活型態讓妳腰酸背痛,下班後就更懶得運動了;但運動可以刺激腸胃蠕動,減少便秘困擾。

Q1:我每天都有排便,可是小腹還是很大,為什麼?
A1:體型中廣或腹部、下半身肥胖者是因大腸與小腸囤積過多的宿便。
許多人以為每天有排便,就沒有宿便的問題,那是大錯特錯的!根據醫學報導,不論胖瘦,人人都有宿便,正常人體內皆有3~6㎏的宿便,肥胖、便秘者則有5~11㎏的宿便存在

Q2:宿便是怎麼形成的?
A2:食物進入口腔,從完全消化完畢到變成糞便排出,需要約48~72小時。若長期飲食不當(如:好吃肉食少吃蔬菜或暴飲暴食、三餐不定時),攝取的脂肪過多,就會使膽汁無法脂解代謝及蛋白質代謝和脂肪分解無法充分進行,造成腸道的消化功能不足。加上大腸本身多皺摺,小腸內壁又佈滿了數以萬計的纖細絨毛,所以食物的殘渣,連同殘餘農藥化學色素及壞菌、病毒動物寄生蟲等有害物質,都以此皺摺及絨毛為依附,經年累月聚集一起,就形成《宿便》。經發酵變成毒素,再經由絨毛吸入體內毒化肝臟,造成肝臟及其他器官機能降低,使血液酸性化,久了以後,許多慢性疾病、癌症腫瘤就會形成,這就是為何要實施淨化腸道法的原因。

Q3:宿便若沒有排出,對人體會有什麼影響?
A3:宿便停留在溫度高達 37℃ 的腸道內,超過24或48小時以上,會產生自發性的中毒及衍生23種致病毒素,像是:產生惡臭的氨、硫化氫、糞臭素、二次膽汁酸...等及致癌物質。宿便會引起的慢性疾病,如:肥胖、面皰、黑斑、便秘、痔瘡、肝病、高血壓、心臟病、脂肪肝、冠狀動脈疾病、糖尿病、腎機能障礙、風濕關節炎、各種婦女病、結腸癌、憩室炎、大腸直腸癌及其他癌症、腫瘤。

清宿便的方法
不良飲食習慣造成宿便。宿便是造成大腸癌在國人癌症死因逐漸上升的主因。排除宿便後,可避免毒素帶來的重大疾病。促進大腸蠕動的方法...
1) 早起時喝 500cc 的冷開水
2) 每天至少吃 9 種巴掌大的蔬菜水果
3) 至少運動 30 分鐘.
4) 一天進水量至少 2000 cc.

每日飲食中必需攝取15%的纖維質,纖維質為人體每日必須的第六大營養素,多吃纖維素能夠增加飽足感,幫助消化道蠕動,食用後約四至八小時即有便意,纖維質還可軟便、清腸、清宿便、改善腹瀉、便秘、痔瘡,並減少結腸道有毒物質及重金屬與腸壁黏膜接觸,促進毒性物質排泄

活性乳酸菌 Bifidus 為高加索長壽村民長壽之道,這種雙叉桿菌對人體的好處可以抑制腸道內有害菌生長,防治腹瀉、腸炎。促進腸蠕動,清除宿便,清腸排毒。幫助鈣質吸收,幫助合成維生素B群。降低肝臟負擔。提高自然的免疫力,分解致癌物質,防癌抗癌。

永保腸道健康
眾多肥胖者常為「便祕」或「宿便」所苦惱,飲食過量,遂造成「宿便」的囤積,而由於營養不均衡的障礙,遂導致肥胖。若要消除肥胖,首先得排除「宿便」,「宿便」一經排除,那麼「便秘」也一定能根治,腸道順暢,超過的體重消失,腹部平坦,這不只是「減肥」療養,更是排除「宿便」療養。

其實呢,我們的飲食不正常、太油膩也是造成排便不易的最大原因。多吃一些高纖的食物、蔬菜水果,足夠的運動量,新陳代謝良好,均衡的營養素,順利的被腸道絨毛吸收,這時候腸道的消化、吸收、排泄皆暢通無阻,人體健康自然得到改善。消脂減重,代謝掉過剩的脂肪、排除體內廢物,皆是必然的作用。

2010年2月24日

腸胃保健

在2/5, 衛生署公布最新的癌症登記資料顯示, 96年國內共有近7萬6000人發生癌症, 平均每6分56秒就有一人罹癌。以發生率而言, 十大癌症前三名分別是女性乳癌、大腸癌、肝癌, 而發生人數則是以大腸癌最高;若以性別來看, 男性整體癌症發生率是女性的1.4倍, 其中最高的是食道癌。

也就是說, 除了女性最耽心的乳癌外, 最多的是因飲食與作息不良所引起消化系統(食道、胃、腸道)的疾病; 也讓我警覺到這5年來身體幾乎無時不刻感到倦怠、注意力不集中, 而且近2年發生的腹脹、便秘情形, 甚至開始出現肛門出血、痔瘡; 全然符合統計資料所指出該注意的現象。

在看過暢銷的不生病的生活一書; 其中提到神奇的酵素(enzyme)在人體中的量與活性度, 對健康狀態有極大的影響。經常吸菸喝酒、暴飲暴食、壓力大、使用藥物等, 都會大量消耗酵素。作者提到: 大量飲酒後, 肝臟會大量消耗分解酒精的酵素, 胃腸用來消化和吸收的酵素就會不足。另外: 如果消化酵素的分泌量不足, 即可能引起消化不良而增加器官的負擔。作者所預料的: 臨床結果顯示, 特別是罹患乳癌的女性和罹患攝護腺癌的男性, 出現大腸異常的比例相當高。

也就是說, 在處於生活環境、作息不佳的情形下, 新陳代謝會變慢、變差; 加上現今食物來源因種植、運送、加工、烹飪等因素而不再富含酵素, 造成消化不良、營養吸收不佳, 並且使得毒素停留在腸道的時間變長; 想當然爾, 相關的身體狀況會接踵而來。

作者建議: 充分咀嚼可自然抑食欲, 減少食量, 消化和吸數食物所使用的酵素的量也會減少, 整體而言, 可節約酵素。並且提到「補充酵素可避免飲食過量」。我對這句話感受相當明顯, 尤其是近3個月以來我補充了Isotonix等滲透的消化酵素之後, 除了不再感到腹脹不適, 工作時的心神相對的變得專注一些; 如同作者所說的一樣, 我不再那麼的貪口想吃東西, 也藉此來慢慢的調理身體的狀況。

正如俗語說的: 腸胃照顧好, 疾病不來找。關心健康的朋友, 可以參考不生病的生活這本書的正確飲食觀念與建議。

2010年2月23日

學習 CSS 的過程

想要使用 CSS 的動機, 是因為這兩年 coding 的焦點由 server side 轉往 client side。
剛開始是買了一些書看, 關於 CSS 及 HTML tag 在不同 browser 上的共同之處與寫作技巧, 但多半沒有什麼進展。
直到工作上真要開動時, 才發覺不知如何下手; 幸運的, 在 Google 大神的搜尋下找到了 YAML builder:
在取得 CSS code 之後, 試著調整 HTML tag 來感受一下變化之外;
也試著去理解 @import CSS file 之間的關係, 去除掉一些不會使用到的檔案。

其中, 察覺到了幾個重要的 hack 技巧, 主要是衝著 IE 而來的, 並且還有 IE6、IE7、IE8 的分別:
[CSS Hack]解決IE6、IE7、IE8、Firefox的瀏覽器相容性問題!

甚至, 在 HTML <link> tag 的使用上, 要稍加注意該 tag 前後的注解(Conditional Comments):
 

(待續)

2010年2月22日

JavaScript 的 eval() 使用

試著處理 browser 欄位輸入時與輸入後對 spinner 圖示進行顯示與取消, 在 Prototype JS 的用法為:
Effect.Appear('ele_ID_of_spinner',{duration:0.1, queue:'end'});
以及
Effect.Fade('ele_ID_of_spinner',{duration:0.1, queue:'end'});
此外, 還得為所有欄位/操作項目進行鎖定或取消處理; 必要時還得加上 cursor 的圖示變化。
所以, 模組化的結果為:
function disableAllInput(flag) {
  // 1.cursor 變化
  ...
  // 2.spinner 顯示或取消
  ...
  // 3.所有 input element 的 disabled 屬性值設定
  ...
}
不過, 上述第2段中 spinner 處理上的 API 用法只有一字之差; 因此, 是可以利用 eval() 來進行變化的:
eval("Effect."+(flag ? 'Appear' : 'Fade'))('ele_ID_of_spinner',{duration:0.1, queue:'end'});
模組化或 script code 的精簡情形, 一向是見人見智; 為日後的維護工作, 方法上得小心使用。

2010年2月16日

GORM 物件於 update method 後立即顯示資料

在學習 Grails 的過程中, 剛開始會比較專注於 scaffold 的樣板, 並從中去了解 GORM 物件的操作。
不知有沒有人發現, 在 update action 中的處理:
{
    ...
    if (!someInstacne.hasErrors() && someInstance.save()) {
        ...
        redirect(action: show, someInstance.id)
    }
    ...
}
往往在 show view 所查看到的 GORM 物件並非是剛剛 update 後的資料; 所以解決的方法是:
變更 save method 的參數: flush 為 true; 即
if (!someInstacne.hasErrors() && someInstance.save(flush: true)) {
        ...
但是, 每每在一個 GORM 物件進行 generate-all 後, 得再加以修改該行參數, 顯然不是一個經濟的做法。
於是進行預設 templates 的修訂來達到此一目的是合乎情理的。方法如下:

1) 先安裝 plug-in
grails install-templates
2) project 下, 找出預設 controller 的樣板
vi src/templates/scaffolding/Controller.groovy
3) 修改...
if (! ${propertyName}.hasErrors() && ${propertyName}.save()) {
        ...
    變更為...
if (! ${propertyName}.hasErrors() && ${propertyName}.save(flush: true)) {
        ...
4) 存檔完成

如此, 每當產生預設的 controller 之後, 都會含有此一作用; 省去為每個 controller 要加註 flush 參數。

不過 v1.3.x 版已加了上述的處理了。

2010年2月15日

這款的85度C咖啡 - 汐止建成店

在網路上不乏稱讚85度C咖啡汐止建成店的水準, 但去年年底為大兒子慶生的經驗中; 我僅能說85度C咖啡缺乏產品及服務的品質。看看他們的廣告與實際產品的圖片便知, 除了草莓少了外圈而用奶油取代外, 邊上的巧克力餅干也稀疏的可以

去電4次說明廣告與實物不符外, 店長避不接電話改由店員解釋(後來好像是店長自稱為"客戶服務專員"來電解釋)。聯絡上總店的負責人, 他在電話中說會處理, 但事後也不了了之; 顯然負責人根本不清楚該店的品質如此低落

這款的[在地]服務, 號稱人人都能享受的五星級的享受; 我僅能請大家看清楚真相, 平衡一下該店在網路上"憂~質~"的推薦 。






2010年2月11日

了解痛風

從事IT工作(尤其是軟體設計)超過18年以來, 健康情形每況愈下, 自己的身體至少有三次很深刻的感受。一直自認為體力超人的我(別人也如此說過), 約莫在34~5歲時明顯感到體力不支, 再來接著是連三年的冬天久咳不癒達3個月; 而近兩年則嚴重的消化不良、腹脹, 甚至便秘, 也常會因此無法專注工作; 所以我也開始注重飲食與營養補充了。

前不久, 到老公司去見了以前待我不錯的主管; 聊天的過程中, 主管提到他的痛風發作情形變頻繁了; 也讓我想起了另一位朋友, 年紀輕輕也得了痛風。於是查了一些營養保健的資訊, 整理得相當清楚, 健康有狀況的朋友可以參考一下:
痛風的營養療法經驗談
痛風的成因探討與調養參考

人體裡面有20-30%的尿酸是由食物攝取的, 70-80%的尿酸才是由身體的廢物生產而來的。當身體產生很多尿酸, 經過腸肝循環到達肝臟以後, 肝臟就會停止繼續合成尿酸。

對於痛風的患者來說, 尿酸是一種令人聞之色變的東西; 但, 用西藥來治療會造成相當的副作用, 除了會讓身體的抗氧化機轉喪失, 最大的影響是沒有透過正常的回饋抑制, 肝臟並不知道身體的尿酸濃度已經降低了, 就會一直製造尿酸。

所以, 保護肝臟是降低痛風發生的一個重要因素。透過補充腸道的益生菌, 讓小腸不要過度發炎, 身體就不去為了分解身體的廢物來製造尿酸; 降低尿酸的製造, 進而減輕肝臟的負擔。

2010年2月10日

Grails 中的 MOP 試驗

在臺灣Grails開發者論壇的技術分享討論區中, 提到使用一組特定欄位名稱做為查詢條件(查詢條件+分頁+排序)
引發了我試著做個測試的念頭: 可否直接使用輸入欄位進行 GORM 物件的 criteria 處理 ?

測試的程式片斷:
static YOURS_PROPERTIES = Yours.metaClass.properties

//使用 criteria builder
Yours.withCriteria {
  //取 cri_ 開頭的輸入欄位
  params*.key.grep(~/^cri_.*/).each{ p ->

    //取相對應於 GORM 物件的欄位名稱
    def field = ((String)p).split('_')[1]
    //取出輸入欄位的內容
    def value = params.getAt(p)
    //含有數值? (此為假設; 不過, 並非所有 model 都是如此設計)
    def isLong = value==~ /^[1-9][0-9]*/

    YOURS_PROPERTIES.each{ col->
      if (col.name == field) {
        //若 type 為物件
        if (col.type.name == 'java.lang.Object') {
          "$col.name" {
            eq('id', isLong ? Long.parseLong(value) : value)
          }
        } else {
          eq(col.name, col.type.getDeclaredConstructor(String.class).newInstance(value))
        }
      }
    }
  }
}
使用上述的方式, 僅限於簡單的資料查詢; 因為一般查詢作業不會如此簡化。
不過, 這樣子的試驗對於 MOP 的了解會有多一點的認識。

2010年2月9日

GSP 中使用 Hibernate Criteria Builder

使用 Grails 的經驗中, 處理 GORM 物件的查詢通常會使用 .withCriteria {} 來取得資料, 即便是用在 GSP 中。

可是我的經驗中, 在開發 GSP 程式使用 criteria builder 所得的結果是正常的; 但以 grails-war 來產生 WAR file, 並發佈至 WebLogic App server 後, 卻無法執行。

經研究後的變更方法是:
def yourList =
  new grails.orm.HibernateCriteriaBuilder(
        Yours.class, applicationContext.sessionFactory).list {
    ...
  }
其中第二個參數的 session factory, 它由 applicationContext 這個 bean object 所有, 所以可以直接取得。

2010年2月4日

超方便的影像擷取工具 - Mac OS X / Image Capture

我經常在一些優質的蘋友網誌上逛,發現了一篇超棒的工具使用分享:
深藏不露的內建超方便軟體!——影像擷取

原本還在猶豫是否升級我的小白(MacBook),體驗一下Snow Leopard作業系統的功能;看到這篇文章後試著依樣畫葫蘆,沒想到在原來Tiger作業系統中的工具軟體也具備有多數相同的功能(只不過在操作畫面上有些許的不同);除了驚訝之外,更讓我覺得兩年半前轉換系統到Apple平台的決定是值得的;於是,決定多察覺和好好利用系統的其他功能後,再來決定是否升級或換機。

OS X真是工作的好夥伴。