2011/12/1

Delphi:使用record讓Function傳回兩個以上的值

記錄一下使用record的基本方法

步驟1:在uses下加入type end
 type
 TFunc = record  //TFunc自取名字,用T開頭就行了
  a :String;   //回傳的變數,需要回傳幾組就設定幾組,可以是各種型態
  b :Integer;
 end;

在uses下有一個TForm1 = class(TForm),加入的TFunc位置相當重要,如果TFunc在TForm1之後,那麼步驟2建立的Function可能無法使用TForm1裡的元件,所以建議TFunc要在TForm1之前。

步驟2:建立Function
type
 TForm1 = class(TForm)
  Button1: TButton;
  function GetRec(): TFunc;//建立function,回傳值設定為TFunc
  procedure Button1Click(Sender: TObject);
 private
  { Private declarations }
 public
  { Public declarations }
 end;
var
 Form1: TForm1;
 ...(中略)...

function TForm1.GetRec(): TFunc;
begin
 Result.a := '回傳值';     //.a與.b是對應TFunc下的變數
 Result.b := 1234567;
end;


步驟3:使用Function
procedure TForm1.Button1Click(Sender: TObject);
var tmp :TFunc; //建立一個變數,型態為TFunc
begin
 tmp := GetRec(); //將GetRec的值傳入tmp變數
 showmessage( tmp.a + ':' + inttostr(tmp.b) );
end;


最後輸出結果:
 回傳值:1234567


註:使用record不需要釋放,把它視為和String、Integer這種東西就可以,就像var x:String後不用釋放x一樣。

整個範例檔:
unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
 StdCtrls;
type
 TFunc = record
 a :String;
 b :Integer;
end;
type
 TForm1 = class(TForm)
  Button1: TButton;
  function GetRec(): TFunc;
  procedure Button1Click(Sender: TObject);
 private
  { Private declarations }
 public
  { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.DFM}

function TForm1.GetRec(): TFunc;
begin
 Result.a := '回傳值';
 Result.b := 1234567;
end;

procedure TForm1.Button1Click(Sender: TObject);
var tmp :TFunc;
begin
 tmp := GetRec();
 showmessage(tmp.a+':'+inttostr(tmp.b));
end;

end.

[+/-] 繼續閱讀...

2011/11/22

Oracle的Cursor寫法

  在Oracle下使用Update有諸多限制,之前有研究過使用兩個Table進行Update的語法。但是在真正資料量極大及SQL條件極複雜的情況下,常常有做到當機而未完成。後來真正遇到了要使用Update更新約一年份的交易資料時,這種寫法完全是擾人的作法,Update SQL一下去,全公司幾乎不用工作了,系統資源都被我佔用掉了(笑)。

  在學會Cursor語法後,覺得是方便又快速多了,加上有網友詢問使用兩個Table進行Update的語法,所以我就趕緊記錄下來,希望能幫助到有需要的人。


  Cursor的基本語法相當簡單,只要從基本架構去加入條件即可:

declare
 cursor c_rec is //建立一個指標
  [Select SQL]; //將需要Update的資料先篩選出來
 r_rec c_rec%rowtype; //在記憶體中建立一個臨時表來記錄Select出來的資料,使用指標來存取這個表
begin
 for r_rec in c_rec loop //開始把臨時表中的資料讀出來
  [Update SQL]; //對資料進行更新
 end loop;
 commit;
end;


  我用使用兩個Table進行Update的語法來作比較,但先將語法再複雜化一點。

  這一段語法的目的是找出在B表中B2欄位=2時的A表資料,並將A表中的A2欄位更新為B表中的B3內容,A3欄位更新為B表中的B4內容。
Update ( Select A.A2, A.A3
       From A
      Where A.A1 in (Select B.B1
                From A,B
                Where A.A1=B.B1
                 And B.B2='2'))
  Set (A2,A3) = (Select B.B3, B.B4
            From B
           Where A.A1=B.B1
            And B.B2='2')


  使用這種寫法時,如果AB表各有十萬筆,則在Update語法中就會執行十萬筆的比對(如果一對一而已),在Set語法中還會再進行十萬筆資料比對一次,所以相當費時耗資源。如果你還要加上Max、Min、Sum等函數,其效能之差足以讓資料跑上一般Update的十倍以上(我沒實際算過,但依邏輯來講應該就是會非常差)。

  因為效能極差,所以將它改成Cursor來作,這樣的寫法效能較佳,AB表第一次關聯後如果只剩下一千筆資料,那麼從單一表中找出一千筆資料來作事,絕對會比跑上十萬次或更多次來得好。
declare
 cursor c_rec is
  Select A.A1, B.B3, B.B4
   From A,B
   Where A.A1=B.B1
    And B.B2='2';
 r_rec c_rec%rowtype;
begin
 for r_rec in c_rec loop //這邊的迴圈只會跑有寫進臨時表中的資料,也就是Select後的筆數,在這個地方不會再進行一次Select去咬住系統資源作篩選
  update A
    set A2 = r_rec.B3,
      A3 = r_rec.B4
   where 1 = 1
    and A1 = r_rec.A1;
 end loop;
 commit;
end;


  如果你要寫的Update語法相當複雜,那麼可以考慮使用Cursor來簡化。
總結步驟就是兩個:
(1)下Select找出需要被更新、條件值、更新值之類的資料
(2)將Update語法中的Where條件與(1)中的條件作關聯,然後更新過去。


  以上是一點簡單的Cursor寫法,太艱深的我還沒學到(笑)。

[+/-] 繼續閱讀...

2011/11/18

MYSQL:UPDATE語法-使用SELECT

紀錄一下工作中使用到的程式寫法。



以下寫法是GOOGLE來的:來源Jax 的工作紀錄

整理了一下大概就是
如果要將表B001中的F1欄位的值寫到表A001中F1欄位值
在MYSQL中的寫法相當簡單
UPDATE A001 AS A, B001 B
SET A.F1 = B.F1
WHERE A.F2 = B.F2
AND A.F3 = B.F3


根據MYSQL官方裡說明,還有另一種寫法則是
SELECT F1 FROM B001 FOR UPDATE;
UPDATE A001 SET F1 = F1;

但這種作法比較不建議,而且我也覺得不太方便
相關說明可以參考這兩篇↓↓↓
Neo 's Blog - 使用 SELECT FOR UPDATE 做交易寫入前的確認
Neo 's Blog - SELECT FOR UPDATE 的 Row Lock 與 Table Lock



[+/-] 繼續閱讀...

2011/6/6

浪花



『浪花』/施達樂 著


  不擅寫讀後心得的我又來了,這一次是『浪花』。而對這本書的心得,其實內心有點複雜。


  這本書是施老師終於在多次落榜後得獎的作品,依然以台客武俠為主打,以臺灣歷史人物為要角。能獲得大獎,在這邊說聲恭喜。

  首先拋去金獎和施老師作品這兩個光環(笑),我對書名頗有微辭。本來的書名在比賽時應該是『浪花群英傳』,我覺得這個名字取得較符合故事內容,因為事實上整本看過後就會發現,浪花雖然是女主角,但故事卻不是圍著她轉的。和『小貓』不同,小貓的故事就真的是圍著林少貓轉。我一直都覺得書名如果直接使用角色名字或稱號是一件相當有氣魄的事,至少唸起來就很威風。但是如果搭配上內文劇情,卻發現不是那麼一回事時,就有種作文寫得文不對題的感覺了。本來的『浪花群英傳』就很符合內容,因為主角是浪花和她身邊的英雄們啊!

  另外,總感覺這次減少了台語的內容,雖然鄭芝龍、郭懷一都是閩南人,但講起話來還是鮮少用家鄉話。當然我也不是特別期待要一整本都台語啦,只是覺得這樣就不台了(笑)。

  而在角色方面,這就是我內心有點複雜的地方。就像前面說的,因為書名的關係,我認為浪花是主角,世界是圍著她轉的。我在看書之前,如果書的封面和書背有介紹文,我都會相當認真的看過,大約知道一點頭緒,然後才開始看內文。而這本書不只書名,連介紹文和封面都讓我認為會看見一位超級辣的俠女,不斷穿梭在歷史之上。事實上,一開始我就覺得我錯了,原來主角是鄭芝龍,是那個玩世不恭的大海賊。但後來,我又發現我錯了。劇情走到一半,我才驚覺主角是那個據說不怎麼帥、武藝比一官差、但是頭腦很好的郭懷一。那...浪花呢?浪花不是主角嗎?結果還是男主角重於女主角嗎?我怎麼感覺不到浪花主導一切?她守護過頭,變成背後靈了嗎?!所以說,我被書名和那美到殺死人的封面騙了(掀桌)。



郭懷一/蕭壠文化-西拉雅館



  至於這本書真正的重點,也就是劇情部分,其實和『本色』一樣,感覺上是人物與時間連貫的無主軸故事。基於這個理由,我依然沒什麼心得(笑)。『浪花』在整個劇情上來說,是相當趨近於歷史。再外加像同人誌般那樣,出現許多歷史人物,日中台均有。而其中又以日本人物最多,台灣人物頗少,看完整本書,比較像在看日本歷史人物同人誌(大笑)。



大明招討大將軍/蕭壠文化-南瀛開拓史館-大航海時代




風調雨順/蕭壠文化-南瀛藝陣館


  在讀完『浪花』之後,恰巧是中國的端午假日,因此趁著難得聚在一起的時間,和家人去了外婆家附近的蕭壠文化園區,裡面正好展出『南瀛開拓史-大航海時代』。裡面講得正是從鄭芝龍開始之後的台灣,以及荷蘭人、熱蘭遮城這些歷史故事。看完『浪花』,或許可以也去看看,對那一段台灣歷史,會更加的深刻有印象。





[+/-] 繼續閱讀...

2011/5/23

又是筆記(DELPHI 5 - CheckListBox)

公司舊有的程式裡有很多使用CheckBox來勾選店別的地方,都是那些可勾選多店別執行的程式。然而隨著分店越開越多,程式也老是增加店別選項。為了一勞永逸,我決定來改寫那些程式,把它們的店別選項用CheckListBox去抓取系統中的店別資料來解決。

  其實本來只是一件很簡單的事,就是把店別和店名都寫進CheckListBox去給User勾選就好,但是我還是很龜毛的打算讓它變得像原本舊有的程式畫面--只有店名。但是Delphi的CheckListBox並不支援一個選項有雙欄位記錄資料,也就是這樣顯示:
    口A1|B1
    口A2|B2
    口A3|B3

它只能這樣顯示:
    口A1
    口A2
    口A3

  有時候在B欄位我們會想要放置一些隱藏的值,只給使用者看到選項,而選中後我們再去依這些隱藏的值去做事。例如在A欄位是歌名,而B欄位則隱藏著那首歌的路徑檔名,當使用者選擇好歌曲後,我們就可以直接取得路徑和檔名來播放。

  上網搜尋了許久,找到了在DELPHI中解決的方法,那就是使用AddObject,參考這兩篇:第一篇delphi中AddObject的使用方法,第二篇listbox怎麼保存兩個字段值,且後一個字段隱藏。這兩篇都是使用AddObject方法,但是作法稍有不同,然而在實值上都是一樣。那就是向記憶體買一個小盒子,將選項其對應的隱藏值存放到裡面,當使用者選擇該選項時,指標就會去這個小盒子找到對應的隱藏值出來。

  經過實驗,rec的方法是可行的,不過我還沒研究出來要怎麼多選項。所以這個筆記只記錄了使用StringList的方法(第一篇)。

  第一步:建立全域StringList變數。實際上這個設定依程式而異,但是我認為通常使用CheckListBox的時機絕對不是在同一個動作(procedure或Function)中就會結束,所以StringList的壽命也必須要和CheckListBox一樣。如果撰寫程式的人員也較喜歡或習慣寫成模組化,使用CheckListBox值的機會也不局限在一個動作中,那麼使用全域應該是必然的。
var SL: TStringList;//宣告SL變數

  第二步:建立/增加CheckListBox選項。模式就是AddObject(選項, TObject(儲存位置))這樣而已,所以如果不使用StringList,要使用其他方式也是可以。
procedure TForm1.Button1Click(Sender: TObject);
var i:Integer;
begin
CheckListBox1.Items.Clear;//先清空
SL:= TStringList.Create;//宣告建立StringList

//不使用迴圈時建立
{SL.Add('B1');//隱藏值
CheckListBox1.Items.AddObject('A1', TObject(SL[0]));//建立
SL.Add('B2');
CheckListBox1.Items.AddObject('A2', TObject(SL[1]));
SL.Add('B3');
CheckListBox1.Items.AddObject('A3', TObject(SL[2])); }

//使用迴圈建立,適合搭配其他程式
for i := 0 to 9 do begin
SL.Add('B'+inttostr(i));//隱藏值
CheckListBox1.Items.AddObject('A'+inttostr(i), TObject(SL[i]));
Next ;
end;

end;


  第三步,有借有還,所以建立就要有刪除,否則這個程式會一直佔用記憶體,尤其是量相當龐大的時候。至於該在何時釋放,就要看程式使用CheckListBox的程度。如果取得隱藏值之後就不需再使用,那麼取得值後就可以釋放,如果在關閉程式時都還有可能使用,那麼最好就是在FromClose時執行。
FreeAndNil(SL);//釋放記譯體

  第四步,取得隱藏值。在原本參考的網站中,有提到儲存文字內容,在取值的時後變成亂碼的情況,所以在AddObject時是先將隱藏值放到SL[]再AddObject進去。但是後來經過實驗,發現還是會有偶爾出現亂碼的時候,尤其是第二次取得值的時候。
procedure TForm1.Button2Click(Sender: TObject);
var i:Integer;
begin
Memo1.Lines.Text:='';
Memo1.Lines.Add('你選擇了:');
for i := 0 to CheckListBox1.Items.Count - 1 do begin
if CheckListBox1.Checked[i] then begin //找出被選擇的選項
//Memo1.Lines.Add(string(CheckListBox1.Items.Objects[i]));//原本的程式
Memo1.Lines.Add(PChar(CheckListBox1.Items.Objects[i])); //取出Objects中的值
end;
end;
end;


  原本第一篇中是使用string的格式來取出,但再經過搜尋網路上的文章,發現string也會造成亂碼問題,所以將string改成使用PChar,問題就不再發生了。這一篇文章是從大富翁論壇來的(參考),雖然有點和我要問的不太一樣,不過其中PChar的論調卻派上用場了。以下就是最關鍵的一段回應:
將s:string;改為S: PChar就一切OK了, String是由Delphi自動管理的, 它不是簡單的指針, PChar才是指針


  以上四步大約就完成了一整個CheckListBox的程式,而以下是附加說明的,關於刪除選項的方法。
SL.Delete(5) ; //SL也要一併刪除,否則指標會指錯,而CheckListBox也會發生溢位問題
CheckListBox1.Items.Delete(5) ; //將第5項刪除




[+/-] 繼續閱讀...

2011/5/20

殘羹

  一碗殘羹,一天的份量,沉甸甸地。
  他捧著那碗殘羹,小心翼翼地走到牆邊坐下,輕啜了一口。不燙,已經冷了。他又喝了幾口,然後用紙板蓋上。剩下的是明天早餐和午餐。
  他一直在流浪。帶著一件蠶絲大衣,一雙黑皮鞋,一套白色西裝,現在它們全部都在當舖裡。身上唯一值錢的,剩下這只從回收廠偷來的綠色塑膠碗。
  ──他叫街友,外號是乞丐,名字沒有了意義。
  從前的財富都消失了,現在他縮在紙箱裡,那印著他從前公司名字的紙箱裡。上面沒有他的名字,只有那個從世界上消失的公司名字,從經濟部登記簿上被劃掉的名字,以及畫著甜美鳳梨的圖樣。
  他曾經擁有一大片的果園,在那個以農為業的年代裡,從父親手中接過的土地權狀,被他珍貴地放在錦盒中,放在銀行的保險箱裡。
  果園裡種滿了鳳梨,那是他的寶貝。果園裡還有近百位婦女與少年郎,那是與他一起打拼的兄弟。果園旁有兩棟農舍,小的是他的家,一幢簡單的三合院,左右護龍住的是兄嫂和兩個弟弟,繼承了父親的他和妻子則住在大房裡,二房住的是他那三個孩子。另一個大農舍是後來蓋的鐵皮屋,那是放置工具與鳳梨收成後集中擺放的地方,也是讓工人們休憩乘涼用的地方。
  豐收的日子,他和所有人一起將鳳梨分批包裝、送上車,然後送鳳梨去坐船或各個果菜市場。也將品相不好的鳳梨送去工廠,做成蜜餞和糖果,然後再貼上公司的名字,送去雜貨店販賣。
  那是他最甜美的寶物,但現在只是殘破的一張畫。
  他發著抖,今天比昨天更冷。為了忘記寒冷,他認為要快點睡著比較好。
  「喂!大哥!這邊不能睡覺!」一個身穿警察制服的男人搖醒了才剛睡著的他,甚至掀開了他的紙箱。
  「啊──」他無意義地發出聲音,然後坐了起來,第一件事是轉頭看那碗殘羹,確定它還在。
  「今天這麼冷,你不能睡在這裡。我帶你去收容中心。」警察的語調並沒有任何溫情可言,或許因為他也只是收到報案才過來而已。
  他端起殘羹,將紙箱挾在掖下,然後才站起身。
  「紙箱不要拿了!那邊有棉被的。」經過垃圾筒的時候警察抽去了他的紙箱,隨手往垃圾筒邊放。
  他征征地望著紙箱上的鳳梨,他甜美的寶物。
  默默地,他伸手將紙箱拿回,這次變成抱在懷裡。
  警察並沒有理會他,也不再搶去他的紙箱,繼續帶著他往警車走。
  「收容中心隔幾條街就到了,你帶他走過去就好啦!」在警車駕駛座上的警察對著帶著他走過來的警察這樣說著。
  「大哥我們再走一下就到了。」那個警察沒有向車內的警察抗議,而是繼續帶著他走在人行道上。
  其實他們走了快二十分鐘。因為天氣冷讓他的腳步頗慢,瑟瑟發抖的身體讓腳不聽使喚。
  「大哥你等一下。」警察突然這樣說完後就往超商走進去。
  他在超商外蹲了下來,心想究竟還要走多久,難道不能讓他就在這裡睡覺嗎?再不快點睡著,他會一直感覺到冷。
  路過的人朝他丟了一枚十元硬幣,他反射性地前後搖著身體表達感謝,然後伸手從地上撿起,看著那枚硬幣,他想到了從前。每次果園豐收,他就帶著鳳梨和工人們一起去義民廟大拜拜,那時候總是會有不少聽到風聲的乞丐和小朋友來,而他就會將拜拜的食物分送出去。他會給乞丐一些錢,給小朋友一些鳳梨糖果。那時候那些乞丐也會像這樣搖動著身體說謝謝。
  「大哥,走了。」警察從超商出來,將手裡的關東煮交給他,然後拿走了那碗殘羹。
  「啊……那是我明天的早餐……」他伸手想要拿回,如果警察把它丟掉或倒掉,那他明天又要餓著一整天了。
  警察低頭看手上的破碗一眼,然後說:「我先幫你拿著,你先吃熱的。這個到收容中心我會還你。」
  「……謝謝……」他連忙點頭道謝,抱在手心的關東煮熱得燙手。
  「你快吃啊!那個就不要放到隔天了。」警察邊走邊催促著他,他再一次道謝後才將關東煮拿近嘴邊喝了一口。
  兩隻黑輪和滿滿的一碗湯,比殘羹還熱。
  身體熱了,走起路來也輕快多了。他們又走了十幾分鐘。
  在收容中心門口,那警察手插在腰間,一臉無奈的和他們說了幾分鐘。他隱約聽見了天冷、客滿這些詞兒。手裡曾經裝著熱湯的紙碗都涼了,警察還是和他們在說話。
  他在收容中心前蹲下,抱著紙箱,邊摸著上面的鳳梨邊等待。
  後來警察又帶著他繼續走,警察說那間收容中心因為天氣冷所以客滿了,連走道和大廳都睡滿了人。
  寒流來襲的夜晚,要找到溫暖的地方睡本來就不容易。
  他想起以前,他讓幾個乞丐到大農舍裡去睡,還拿了乾稻草給他們蓋,結果有個乞丐隔天被發現還是凍死了,他只好替那乞丐作了法事,也供在義民廟裡。
  「真是!」警察罵了一聲,然後停下了腳步。
  大概是累了。在這麼冷的天氣裡,一整個晚上帶著他四處走,應該也快受不了了。
  「今天先睡我們警局好了。」警察說著,然後帶著他轉方向。
  雖然又走了十幾分鐘,但那警察真的帶他進了警局。
  「收容中心都滿了?天啊!」他聽見幾個警察不可思議地喊著,然後說要打電話問遠一點的收容中心,如果問到了就開車載他過去。
  「讓他睡局裡啦!明天早上再去找啦!」帶他回來的警察這樣說著,但似乎無法得到所有人的同意。他們都認為要早點安置比較妥當,日後也比較好解決三餐問題。
  「我帶他去洗澡,小豪和阿強拿我的被子去第二偵訊室。」那個警察不顧其他人七嘴八舌的意見便這樣說了。
  警察領他穿過警局的中廊,經過了擁擠的小廚房,後面是警察的休息室。他被帶到了裡面的盥洗室。
  「隨便洗一洗也好。你把衣服換下來我拿去洗,明天再還你。」
  「那……我今晚要穿什麼?」
  「反正你先洗就對了。」那警察將他推進去,順手將門給關上。
  他聽見警察離去的聲音後,望著蓮蓬頭許久。
  很久沒有洗過澡,全身上下發散出的臭味就和以前廟口的乞丐一樣。那個警察是好人,收留了他,但他身上實在很臭,所以警局裡的人不甚願意。他將紙箱放在門邊,脫下衣服,拿起香皂,躲在蓮蓬頭下洗,從頭到腳,他不能弄臭了那個警察好心拿來的棉被。
  洗著,他哭了。
  『好心不值錢啊!』他的兄嫂這樣說,然後拿出從銀行領出來的地契,告訴他,他們打算把地賣給政府。
  『你看!現在進口的東西多,出口的東西少,老天爺又不挺咱們作農的,三不五時作災害,讓咱們家的鳳梨一年比一年收得少、賣得少。再看看那些工人,他們賺了錢,一個一個搬去都市裡發展,誰還留在這裡收鳳梨?老弟啊!你要看開點、看遠點,現在政府要收地,咱們就快點賣了,我們家不可能永遠靠鳳梨的啦!把地賣了,拿了錢去投資房地產不是挺好?還是你要去作點小生意也行,總之這種從土裡種黃金的事該放棄了啦!』兄嫂一人一句說著,然後兩個弟弟也附和著,連他的妻子也參與其中。
  『爸!我們大家一起去市區裡找間透天厝住吧!市區裡很好,交通方便、你孫子也快有了,將來還要在鄉下過活嗎?你要他們也跟著你在大熱天種鳳梨嗎?我們去都市吧?』三個孩子和媳婦望著他,沒有人站在他那一邊。
  都市很好、都市很好,大家都這樣講著,但就是沒有人說他的鳳梨很好。
  搬到都市裡後,兄嫂和兩個弟弟他們拿錢去作生意,從此過年過節也見不到面。三個孩子的孩子出生後,開始想要各自擁有空間,於是留下了他和妻子,他們也各自發展,最小的孩子甚至出國去留學,在那裡拿到了新的身份。
  都市很好、都市很好,結果這裡只有孤獨。
  妻子的喪禮只有三個孩子出現,媳婦和孫子忙碌的無法參與。
  『爸,你輪流住在我和弟弟家吧!』最大的孩子這樣說,第二個孩子露出了為難的表情,支支吾吾地說『我老婆她有點不太適應外人』。於是三個孩子大吵了一架,最後他選擇了老人院。
  老人院的董事長捲款潛逃,老人院因此倒閉,那是在一覺醒來後的事。他每天都一邊洗澡,一邊聽著外面討債的聲音,直到老人院被查封,仍沒有人來接他轉院或回家。
  從那時候起他就在流浪。
  『好心不值錢啊!』兄嫂說得話像詛咒一樣地纏繞著他,讓他無法忘記。
  警察拿來了他的毛衣和休閒服,說要送給他。他穿著乾淨溫暖的厚衣服,抱起紙箱,跟著警察到偵訊室。椅子被收到一旁,桌上鋪著一條棉被,上面還放著另一條厚棉被。
  「今天晚上你將就一下睡這裡。」警察拖了張椅子,將那碗殘羹放在上面。
  年輕人,好心不值錢啊……
  一邊這樣想著,他爬到了桌上的棉被裡,縮在其中。
  警察留了盞小夜燈給他,然後走了出去。
  「……謝謝。」他在棉被中低聲啜泣地說著,但那警察似乎並沒有聽見。
  隔天一早清晨醒來,他拿起那碗殘羹,已經發酸發臭,但他還是把它吃掉了一半,剩下的是午餐。
  他走出偵訊室,外面就是警局的辦公廳,所以每個人都能看見他走出來。
  「阿伯!你等一下,昨天帶你來的人出去巡邏了,等他回來再帶你去收容中心。」一個年輕警察面無表情地說著,然後指著一旁的椅子:「你先坐一下。」
  他看了牆上的時鐘,現在是早上五點半,外面的天還是黑的。
  坐在警局裡,他再度想起了那個死在大農舍裡的乞丐。
  『好心不值錢啊!』
  端著殘羹,夾著紙箱,他蹣跚地走出警局。


--------------------------------------------------

入圍第四屆林語堂文學獎,獎品是一本紀念書(笑)

[+/-] 繼續閱讀...

2011/4/2

三連發完成

  最近很憂鬱,可能是超級月亮的關係(誤)。

  『三塊10元』的橡皮擦系列第三彈終於完成,再看看桌邊的『一包十二塊49元』,下一次要來個一系列了,但是我的技術還是很差,目前也想不出來要刻什麼,十二生肖?天干地支?十二星座?十二朵花?十二個月?總之,希望有完成它的一天。


這一次畫的圖也是半自創,因為長型的圖太少了,只好自己改變,而且這次懶得定稿,隨便畫一畫就開始刻了。



刻完後的模樣,一樣刻得亂七八糟



刻完後試印,這次改用藍色,但感覺起來不怎樣,所以弄了一次混色,感覺有好一點



刻完後的成品



三連發大合照



三連發印出來的結果大合照



本次參考圖樣:從某本書上照下來的照片來的



好吧,其實我後來兩次都忘了先把圖案反過來,結果變成印出來的東西都是和圖稿相反的,而且我都是在印出圖案的那一刻才發現,真的有夠蠢。

[+/-] 繼續閱讀...

2011/3/13

它是一朵花

  近日天災連連,讓我們為日本祈禱。

  上次為了刻印章而在十元商店買了三顆只賣十塊錢的橡皮擦,既然是三顆一組,那麼我的雕刻之路也該將目標訂定在雕完三顆才對,但事實上我卻沒有打算將它們變成一系列,因為太複雜的圖我不會,「新手」這個事實並不會因為刻過一顆就改變。人永遠都是新手。我始終相信,即使同一件事做了十年,它還是會有出錯的時候。就像吃飯吃了六十年還是可能會嗆到,夾蛋還是可能會掉,世界上還是有沒吃過的米。

  日本歷經阪神大地震後花了很長的時間重建,地震防災系統也更加的完備,但還是會有死傷的時候。世界在近日的這一場災難中,看見了日本冷靜處理的態度。首相再怎麼換來換去、民調再低,還是一樣可以不慌不忙地帶領整個國家進入災後處理,糧食、飲水、民生物品,甚至是電信通訊,也很快地啟動災難救助機制。

  雖然不少財經學者說日本將要再進入十年的低潮期,但我卻覺得日本或許將會再開出美麗的花朵。日本從很久以前開始,就一直在繁榮與毀滅之間交替,但每一次的毀滅性破壞,卻又像繼承著明治維新般的靈魂般,不斷地重生出更美麗的世界來。希望這顆種子能早日再度萌芽,再一次驕傲地綻放,告訴所有的人:嗨!我們又見面了。


  今日的印章-底稿


  今日的印章-確定線稿:打算採陽刻方式,所以一開始就把留白部分塗黑,避免發生上次的慘案


  今日的印章-刻完!!這個圖看似簡單,卻比上次的複雜,大概花了快一個小時


  今日的印章-印出合照,這個印章沒有留可以寫字的地方,也沒有簽名,花的樣子長得有點怪,而且因為某些地方刻太深,在清草稿痕的時候,花梗從中間就斷掉了,但其實不仔細看是不會發現的(才對)


  今日的印章-印章,陽刻真的不好刻,不過刻完後很有成就感


  原稿是個短圖,但是我的橡皮擦太長了,所以其實畫草稿時就已經變成了差不多自創,但我覺得至少那種感覺有出來了。


  一邊刻著這個印章,一邊偷看日本的消息,雖然知道一直注意消息無濟於事,但還是會想知道他們是否開始平穩下來了。我有一個在日本的朋友,她告訴我在日本的感覺其實是很平靜的,人們相當冷靜地面對著目前發生的事,秩序也都還是有的。我告訴她我看見日本的情況感覺很難過,她問我是不是想到了什麼傷心事。其實事實上並沒有,那種難過就和看到921和911時一樣,要說是為什麼,我也不知道。想當初921看新聞時,看到倒塌的房子我很難過,911時看見飛機撞下去的瞬間覺得「怎麼可以這樣?!」,這次日本,則是一種「不要這樣!拜託」的念頭。不過這些新聞畫面我不能看太多,因為我腦子不正常。昨天我也因為看了不少NHK畫面,結果晚上夢見我從堤岸邊跳下海裡,甚至重覆了好幾次,直到被門鈴聲叫醒,那一瞬間,我是正好又要往下跳的。

  

[+/-] 繼續閱讀...

2011/3/5

它不是雞,只是姿勢奇怪了一點的鳳凰

  在我們公司有一種說法,叫做三窮四絕。意思是三月的時候客人都很窮(因為二月過年花了很多錢),四月的時候該買的也都買了,也就差不多絕跡了--簡單說就是淡季兩個字。但今年的三月份對資訊來說卻是個忙碌的月份,因為我們正在變革。變革中的公司看起來很亂、很糟糕,但我很希望未來是美好的,即使合作的公司很機車。

  因為變革,帶來了許多問題,這個問題使得資訊部門相當忙碌,最近甚至讓我遇見了相當有壓力的問題。我很想逃避這件事,但是事實上是絕對不可能,一切該來得還是來了。我想大概接下來的整個三月,我會是滿頭包的渡過。其實或許大家都認為這件事並沒有什麼好害怕,但我卻是恐懼到了胃痛連連、想要永遠睡著。這大概和以前的我已經算是差上十萬八千里了吧?

  三更半夜,想要轉換點心情,所以動手做了很久以前就打算要嘗試的橡皮印章。

  預計使用到的工具:裝有2B筆芯的自動鉛筆、雕刻刀、美工刀(結果沒用到)、三顆只賣十塊錢的橡皮擦



  先在橡皮擦上畫底稿。原本參考的圖線條太細膩,所以打底的時候畫成粗略一點。

  確定線稿。到這個階段應該還不難看出它是一隻優雅的鳳凰。

  雕刻。這一段有個很大的問題,那就是應該要陽刻,結果我第一刀就下錯,也就變成了陰刻,而且一開始還忘記人家說得刻法,所以尾巴部分刻得有夠醜。後來刻到腳時突然刀就拿正確了,才想起來人家說過的刻法,但是這個時候的它已經差不多變成一隻雞了。

  印章、結果、原稿。原本如果是陽刻,在名字上面那個位置是蓋完印章後還能寫字的,但變成陰刻就會沒辦法,只好多刻了一塊空白。後來看這隻鳳凰,我覺得我如果刻得是龍應該就會很像了。

  正面大合照。一時不知道在空白處要寫什麼,只好用醜到爆的毛筆字寫年份。

  好吧,其實原稿本來真的是隻美麗的鳳凰。


  我一直都是個很容易衝動地去嘗試某些事物的人。去圖書館不小心翻到了自製印章的書,隔天就在十元商店買了橡皮擦想要雕刻。在網路上偶然看到簡單的食譜,放假就買了食材開始試。看別人拍出漂亮的HDR相片,我就拿著我的小DC去拍EV-3到EV+3的一大堆照片回家玩HDR軟體。如果有人問了我問題,我馬上打開Google開始搜尋相關知識,然後告訴對方。某人注意到了一首好聽的歌,或是說出了一個歌手的名字,我也是馬上找出相關的歌或影片,甚至是歌手的維基百科來看。看電視或看書時,如果看到了什麼歷史人物或典故之類,回到房間也是馬上開始查。

  林林總總一大堆,有時候我覺得我這樣根本就是一種病態,花了很多時間在看、嘗試這些東西,也就什麼都會一點皮毛,知道一點,但這些其實在工作上沒有半點是有用上的。我覺得真正必須要做的應該是去找我的萊諾醫師才對,不然我三月過完,可能也住進醫院了。



[+/-] 繼續閱讀...

2011/2/3

2011新年快樂



2011年,大家新年快樂!



[+/-] 繼續閱讀...