2011年11月18日 星期五

米妮愛上哆啦A夢

世界上有很多人都愛我 男孩和女孩還有小朋友
可愛蝴蝶結搭上迷人的笑容 讓每個人都快活

偏偏我愛的人他不愛我 我多想依偎在他的懷中
但他看到我就拚命閃躲 一切都怪我的前男朋友

世界上有很多人都愛我 不分性別種族還有血統
經典白手套加上逗趣的動作 讓大家忘記憂愁

偏偏我的女朋友被迷惑 心思總被那隻貓咪左右
所以我狠狠咬掉他耳朵 讓他變成blue的大光頭

世界上有很多人都愛我 也喜歡我的一群好朋友
胖虎小夫靜香還有野比大雄 讓大家樂在心頭

偏偏有個女孩老纏著我 她朋友甚至吃掉我耳朵
儘管大家說她可愛溫柔 但她一靠近我就想逃走

米妮愛上了哆啦A夢 是否註定是一場空
雖然她的癡心讓人感動 無奈感動不等於心動
更何況 他一看到她就發抖

2011年10月31日 星期一

公仔家家酒

瑪利歐快步走 踹開龜殼往前衝
擊碎空中的磚頭 吃了火焰的花朵
變成黃澄澄的皮卡丘

看我發射十萬伏特的電流
擊退所有的煩惱憂愁

史迪奇吐舌頭 大口吞下棉花球
眨眨眼啊揮揮手 扭扭腰啊擺擺頭
翻個筋斗變成孫悟空

讓我轟出超級的龜派氣功
消弭任何的苦痛執著

每個公仔都是一個小英雄
身懷絕技也懂得彼此合作
米老鼠擁抱著哆啦A夢
小丸子親吻著keroro

每個公仔的演技都是一流
內心戲超輕鬆也能夠扮醜
凌波零不介意扮成阿婆
胖虎他也可以很溫柔

2011年10月1日 星期六

又想起妳

塵封在鏽蝕鐵盒裡的回憶
遺忘的過去隨著鐵盒開啟
繁雜的思緒宛如海嘯來襲
我閃躲不及只能站在原地

一切又回到那一年的夏季
切換後的畫面是馬尾的妳
安排好的劇本是和妳相遇

好簡單的一句謝謝不客氣
妳說我在妳心裡留下記憶
想當然而我的心飛向天際
我卻因為妳的下句話墜機
嗎啡都不能將我徹底麻痺

我和妳認識在錯誤的時機
好比中獎的彩卷卻已過期
想當作是自娛娛人的玩意
妳說我們只能做朋友而已

我們之間天各一方的距離
好像彼此從來都不曾熟悉
想像只是自欺欺人的把戲
妳說偶爾騙騙自己沒關係

想像平行時光下的我和妳
妳和我攜手共度許多甜蜜

2011年6月21日 星期二

蘭嶼詩篇

環島公路沿途是奇形巨岩
山羊輕鬆跳躍在崖壁之間
野豬山雞在路上隨處可見
大自然盛宴 美不勝收的呈現

燈塔水晶玻璃的彩虹光圈
蔚藍天上點綴著白雲纏綿
朵朵浪花輕輕吻著海岸線
在遠方山巔 山嵐飄渺的白煙

陽光灑在黝黑的純真笑臉
孩子們圍在一起跳舞轉圈
相機拍下歡欣鼓舞的瞬間
停格的畫面 每個人都笑很甜

光著腳丫浸沐在清澈冷泉
鏡頭一轉已走在山林之間
登天池路線每步都是考驗
要有驚無險 步步為營是重點

海風吹拂沙灘上我們的臉
台灣啤酒現烤披薩在聊天
南十字座與北斗七星爭豔
在夏日時節 就該這麼的悠閒

遠方朦朧湛藍的海天一線
美麗的景緻讓人依依眷戀
好朋友們都捨不得說再見
假期有期限 但友誼可以永遠

蘭嶼的詩篇 是一輩子的紀念

2011年6月16日 星期四

JasperReports data source

前言
所謂的JasperReports data source,我們可以想像成是一個database,其內的資料依顆粒度大小,可以依序想像成table、record。本文會介紹四種JasperReports data source(可以想像成四種database),他們有各自的table和record格式,程式設計師可根據不同程式使用不同的data source。

版本
JasperReports和iReport版本為4.0.1。(本文發表時最新版本為4.0.2)

JREmptyDataSource
請想像成是一個空的database。當報表中不須要使用到任何的table和record時使用。例如報表中沒有detail band(不用顯示多筆records),又或者是報表中只需要顯示參數或變數,就可以使用JREmptyDataSource。以下是範例說明:

2011年6月8日 星期三

開會啦

這場會議已經開了三個小時啦
每一個人都在各說各話
你說你的想法非常偉大(不見得吧)
他說他的看法很值得誇(是這樣嗎)

這個話題已經討論三個小時啦
交集共識只是一種神話
投影片上的字密密麻麻(重點在哪)
報告好像道士唸經作法(饒了我吧)

南無觀世音菩薩
南無觀世音菩薩

救救我吧 不要讓我像個傻瓜

周圍的喧嘩 好像在吵架 火氣愈來愈大
我緊閉嘴巴 用沉默表達 做無聲的掙扎

資淺的人只能閉上嘴巴 人微言輕能有什麼辦法
我早已彈性疲乏 冷眼看待這一場笑話

2011年6月1日 星期三

JasperReports/iReport中,Text Field的字串長度過長,如何自動斷行(換行),避免值被截斷

版本

JasperReports版本為4.0.1。

前言

有個報表設計如下,其中紅框處的Text Field其寬度為226。


此份報表的資料來源,包含了三筆記錄,其中有一筆記錄的ADDRESS為「大台南市永康區永元路123段456巷789弄876號543樓之21室」。如果報表不做任何設定,則產生出來的報表,這筆記錄的ADDRESS會被截斷成如下圖紅框處(之21室消失了):


2011年5月27日 星期五

如何在JasperReports中製作分組(Group)加總

版本
JasperReports版本為4.0.1。

前言

因為本文的範例,有使用到Subreport,
所以如果閣下還不清楚如何製作Subreport,
請先閱讀如何在JasperReports中製作Subreport

本文介紹分成二部份,分別是Java程式碼和iReport設計畫面。

報表預覽
在看程式碼和iReport設計畫面時,
先來看一下預期會產生的報表長相。


2011年5月14日 星期六

知足

說明
這首歌的詞是依照五月天的知足的曲來填,
但原詞中的"才發現 笑著哭最痛",
在我的詞裡,AB段都採用"才發現 笑著哭最痛 哦...哦..."的旋律來填。

歌詞
曲:五月天 - 知足

工作了五天 才到週末 
兩天的休假 雖然不太夠 
折騰了一週 總算能放鬆 
不用設鬧鐘 不用怕睡過頭 
看深夜的重播 無厘頭的幽默 
過生活 要放空 要自由 要享受 
多希望上天保祐我中大樂透 
那折磨 
那憂愁 
我 
才能擺脫 
才能解脫 
 
才關上了燈 靠上枕頭 
突然我手機 就鈴聲大作 
奪命連環call 讓神經緊繃 
若漏接一通 會被罵到臭頭 
凌晨時分工作 時間都被偷走 
為生活 要沉默 要忍受 要低頭 
結果我大樂透只中四百零頭 
有on call 
沒補休 
我 
做錯什麼 
這樣整我 
 

2011年5月10日 星期二

Design Principle - Open Close Principle

前言
本文要介紹的OCP,不是指證照考試中的Oracle Certified Professional,
而是OOD(物件導向設計)中的Open Close Principle(開放封閉原則)。

精神
系統的變動幾乎是必然的(沒有一成不變的系統,因為使用者是善變的),
開放封閉原則的精神在於面對系統的變動時,儘量不要修改既存的程式碼,
而是增加新的模組、類別來處理系統的變更。

2011年4月20日 星期三

Design Pattern - Prototype

Prototype Pattern顧名思義,
就是定義出一個prototype(原型),
然後利用這個原型,來產生物件。
產生的方式不同於Factory Pattern中使用的new,
而是利用clone(複製)。

因此,在介紹Prototype pattern之前,得先了解何謂clone。

2011年4月19日 星期二

Design Pattern - Factory

Factory Pattern(工廠模式),在某些介紹中,會被稱為Simple Factory Pattern(簡單工廠模式),
看到名稱,就知道這個模式非常的簡單,很可能閣下已經不知不覺地使用工廠模式很多年了。
在介紹此模式之前,我們先來看一個沒有套用工廠模式的例子,然後設法將這個例子加以修改成工廠模式。

2011年4月18日 星期一

Design Pattern - Bridge

本文要介紹的是bridge pattern(橋樑模式、橋接器模式、橋模式),
其精神在於降低abstraction和implementor之間的coupling(耦合度)
讓abstraction在延伸子類別時,
不用擔心因為implementor的改變,而須修改子類別的程式碼。
接下來,使用正反兩個例子來說明bridge pattern。

要設計Android上的遊戲叫做AngryBee,要怎麼做呢?

2011年4月13日 星期三

Design Pattern - Template Method

簡介

template method(範本方法)顧名思義,
就是定義好method的內容,當作範本,讓其他程式使用。
也就是說,利用抽象類別宣告要供子類別實作的method,
然後在不能夠被繼承的(例如final)method中呼叫須被實作的method。
這個final method就是所謂的template method。

其精神即透過繼承(inheritance)的方式,讓子類別能夠實作不同的邏輯區塊,
然後在父類別的final method中,依相同順序執行不同區塊的邏輯。

如此一來,不同的子類別,能夠實作各自的方法細節,
然後統一利用父類別的final method,來執行任務。

讓我們用例子,來解釋template method pattern.

範例說明

2011年4月12日 星期二

Design Principle - Liskov's Substitution Principle (LSP)

簡介

LSP指得是在程式中使用base class(基礎類別)的地方,
都能夠改用其derived class(沿生類別),
而且不會讓程式出現非預期的結果(例如RuntimeException),
也不會影響程式原本的功能。

亦即,derived class能夠做為base class的substitution(替代品)。

反面範例

最常見的例子,就是正方形與矩形之間的關係。

數學上來說,正方形是一種(is-A)矩形,

假設有個數學系統,
須新增一個能夠計算矩形面積的程式,
會直覺地設計成:

2011年4月11日 星期一

如何在JasperReports中製作Subreport

本文介紹分成二部份,分別是Java程式碼和iReport設計畫面。

JasperReports版本為4.0.1。

首先介紹Java程式碼。

製作Subreport(子報表)的方式之一,
是使用JRMapCollectionDataSource作為Subreport的data source(資料來源)
根據官方API文件
JRMapCollectionDataSource建構子的參數為Collection,
所以,將資料放在List裡,List中的每一個元素,則用Map來存放,
因此,存放資料的Collection的結構為:


然後,將資料塞進這個list:


就可以把list放到JRMapCollectionDataSource中:


以上,可以想像成JRMapCollectionDataSource是Database,
List是Table,Map則是Record。

完整的程式碼如下:

2011年4月10日 星期日

Design Principle - Interface Segregation Principle (ISP)

ISP除了有Interface Segregation Principle也就是介面分離原則外,
當然最為大家熟知的就是Internet service provider,也就是網際網路服務提供者,
這裡要介紹的當然不會是後者,而是OO(物件導向)設計原則中的ISP。

所謂的ISP,就是希望programmer在設計介面時,能夠考慮到介面中的方法,是否要放在同一個介面。

請見以下的例子: