2008年12月20日 星期六

jQuery Html table manipulation


  • Dynamic get the content of the table

  • JSON data(json.js):

    [{"AGE":"18","NAME":"Austin"},{"AGE":"20","NAME":"Leo"},{"AGE":"16","NAME":"Ting"}]

    You could visit JSON website for reference.
    Get ready for the skeleton.

    < table id="table1" width="200" border="1">
    < tr>
    < td width="30">& nbsp;< /td>
    < td width="100">Name< /td>
    < td>Age< /td>
    < /tr>
    < /table>

    Insert data:

    $.getJSON("./json.js",{},function(json){
    var i = 0;
    $.each(json, function(){
    $("#table1 tr:last").after(""+i+""+$(this).attr("NAME")+""+$(this).attr("AGE")+"");
    i++;
    });
    $("#table1").fadeIn("slow");
    });


  • Add New Row from First


  • $("#table1 tr:first").after('< tr>< td>& nbsp;< /td>< td>& nbsp;< /td>< td>& nbsp;< /td>< /tr>');


  • Add New Row from Last


  • $("#table1 tr:last").after('< tr>< td>& nbsp;< /td>< td>& nbsp;< /td>< td>& nbsp;< /td>< /tr>');


  • Remove Row from First


  • if($("#table1 tr").length == 1){
    alert("You can't delete it anymore!!");
    }else{
    $("#table1 tr:gt(0):first").remove();
    }


  • Remove Row from Last


  • if($("#table1 tr").length == 1){
    alert("You can't delete it anymore!!");
    }else{
    $("#table1 tr:last").remove();
    }


  • Change the Background of Row


  • $("#table1 tr:gt(0):odd").css({background:"#DDDDDD"});
    $("#table1 tr:gt(0):even").css({background:"#FFFFFF"});

2008年10月29日 星期三

Dynamic double combo implementation by jQuery, JSON and Java

About the "Dynamic Double Combo", I wrote it before by using DWR. And now I don't think using DWR is a good idea. If your project is combined by frameworks, like Struts, Spring ...etc. To maintain the all xml configuration files will cost lots of time.

In this example, I use jQuery, and the jQuery plugin jQuery - Select box manipulation, JSONObject, and the basic Java Servlet.

In web.xml, add these period of codes.


HelloServlet
HelloServlet


HelloServlet
/Hello



About the JSP file, remember to make the encoding consistent with the servlet.
And we have to include two javascript files, "jquery-1.2.6.min.js" and "jquery.selectboxes.pack.js". Please ignore the ".".

<%@ page language="java" pageEncoding="UTF-8"%>

< html>
< head>
< title>Dynamic double combo< /title>
< meta http-equiv=content-type content="text/html; charset=UTF-8">
< script type="text/javascript" src="<%=request.getContextPath()%>/js/jquery-1.3.2.min.js">< /script>
< script type="text/javascript" src="<%=request.getContextPath()%>/js/jquery.selectboxes.pack.js">< /script>
< script type="text/javascript">
$(document).ready(function(){
$("#select1").change(function(){
$("#select2").empty();
$("#select2").addOption("0","------");
$("#select2").ajaxAddOption("<%=request.getContextPath()%>/Hello",
{selVal:$("select[name='select1'] option[selected]").val()},false);
});
});
< /script>
< /head>
< body>
< select id="select1" name="select1">
< option value="A">A< /option>
< option value="B">B< /option>
< option value="C">C< /option>
< /select>
< select id="select2" name="select2">
< option value="0"> --- < /option>
< /select>
< /body>
< /html>


HelloServlet.java

package servlet;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.json.JSONObject;

public class HelloServlet extends HttpServlet{

public void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException{

try{
String val = request.getParameter("selVal");
JSONObject obj = new JSONObject();
if(val.equals("A")){
obj.put("A-1", "A-1");
}else if(val.equals("B")){
obj.put("B-1", "B-1");
}else if(val.equals("C")){
obj.put("C-1", "C-1");
}
response.setContentType("text/html;charset=UTF-8");
response.getWriter().print(obj.toString());
return;
}catch(Exception e){
e.printStackTrace();
}
}
}

2008年10月25日 星期六

「海角七號」觀後感

電影剛出時,實在是沒什麼感覺,印象中的國片,不是沒內容,就是高深到看不懂。

不過隨著口碑傳出,一面倒的讚揚聲響起,票房屢創新高,卻激起了我的好奇心,到底是什麼片子啊,誇張的是,連網路論壇都禁止會員分享,這下可好,百年難得一見,就當是我湊熱鬧,三個星期前的星期五就去信義威秀排隊買票,我下午六點到售票窗口,想買七點的場次,小姐居然跟我說,九點四十才有座位,我當場傻眼,雖然很不情願,還是放棄,不過心裏默想,你好樣的,老子看賣座洋片都沒遇到過這種情況。

三個禮拜後又去威秀,看來人潮已逐漸散去,因為沒看過的人在台灣已算是少數了。

電影要賣座,媒體的強勢露出已不是萬靈丹,口耳相傳類似老鼠會的感染,才是會造成票房的一飛沖天。

來談談電影的內容吧,"真實"是我第一個感想,很貼近生活,感覺就像是發生在週遭的故事,"驚喜",一般的市井小民,像是警察、賣酒的業務甚至是修機車的黑手,還有不可不提的郵差國寶,居然都是道道地地的音樂人。

我最感動的一幕,是在演唱海角七號(國境之南)的時候,中間阿嘉停了下來,勞馬將孔雀之珠給了友子,她戴上時,眼中泛著淚光,那種眼神,就是訴說著"我愛你",此幕的穿透力極盡強勁之能事,我想我深深地愛上友子了。

2008年10月17日 星期五

jQuery plugin : Taiwanese ID Checker 身分證字號檢查器


/*
Program: Taiwanese ID Checker
Author: Austin, Cheng-Chun Chang
Blog: http://austinccc.blogspot.com
*/
jQuery.fn.checkId = function(){
var moduleCnt = 10;
var inputId = $.trim($(this).val()).toUpperCase();
if(inputId.length != moduleCnt){ //If the length is not 10, return false
return false;
}else{
var str = new Array(moduleCnt);
switch(inputId.substring(0,1)){
case 'A':
str[0] = "1";
str[1] = "0";
break;
case 'B':
str[0] = "1";
str[1] = "1";
break;
case 'C':
str[0] = "1";
str[1] = "2";
break;
case 'D':
str[0] = "1";
str[1] = "3";
break;
case 'E':
str[0] = "1";
str[1] = "4";
break;
case 'F':
str[0] = "1";
str[1] = "5";
break;
case 'G':
str[0] = "1";
str[1] = "6";
break;
case 'H':
str[0] = "1";
str[1] = "7";
break;
case 'I':
str[0] = "3";
str[1] = "4";
break;
case 'J':
str[0] = "1";
str[1] = "8";
break;
case 'K':
str[0] = "1";
str[1] = "9";
break;
case 'L':
str[0] = "2";
str[1] = "0";
break;
case 'M':
str[0] = "2";
str[1] = "1";
break;
case 'N':
str[0] = "2";
str[1] = "2";
break;
case 'O':
str[0] = "3";
str[1] = "5";
break;
case 'P':
str[0] = "2";
str[1] = "3";
break;
case 'Q':
str[0] = "2";
str[1] = "4";
break;
case 'R':
str[0] = "2";
str[1] = "5";
break;
case 'S':
str[0] = "2";
str[1] = "6";
break;
case 'T':
str[0] = "2";
str[1] = "7";
break;
case 'U':
str[0] = "2";
str[1] = "8";
break;
case 'V':
str[0] = "2";
str[1] = "9";
break;
case 'W':
str[0] = "3";
str[1] = "2";
break;
case 'X':
str[0] = "3";
str[1] = "0";
break;
case 'Y':
str[0] = "3";
str[1] = "1";
break;
case 'Z':
str[0] = "3";
str[1] = "3";
break;
default:
//not characters, return false
return false;
}
for(var i = 2; i < moduleCnt; i++){
str[i] = inputId.substring(i-1,i);
}
var sum = parseInt(str[0]) * 1;
for(var i = 9; i > 0; i--){
sum = sum + (i * parseInt(str[moduleCnt - i]));
}
if((moduleCnt - (sum % moduleCnt)) == parseInt(inputId.substring(moduleCnt-1,moduleCnt)) ||
(sum % moduleCnt) == parseInt(inputId.substring(moduleCnt - 1, moduleCnt))){
return true;
}else{
return false;
}
}
}

How to use:

$(document).ready(function(){
$("#hi").click(function(){
if($("#custId").checkId()){
alert("ID is correct!!");
}else{
alert("ID is NOT Correct!!");
}
});
});

If you would like to understand the rule, you could visit
身份證字號規則

2008年9月17日 星期三

jQuery Tips


  • select


  • //Empty options
    $("#select1").empty();

    //Get Text
    $("select[name='select1'] option[selected]").text(); //1.3 +
    $("select[@name='select1'] option[@selected]").text(); //1.2.6 -
    $("#select1 :selected").text();
    $("#select1").text(); //This will get all the options

    //Get Value
    $("select[name='select1'] option[selected]").val(); //1.3 +
    $("select[name='@select1'] option[@selected]").val(); //1.2.6-
    $("#select1").val();
    $("#select1 :selected").val();

    //Set Value -> By value (If value is 0)
    $("#select1").attr("value","0");

    //Set Value -> By index -> the second element
    $("#select1")[0].selectedIndex = 1;

    //Count the options of select
    alert($("select[name='select1'] option").length); //1.3 +
    alert($("select[@name='select1'] option").length); //1.2.6 -


  • radio button


  • //Get Value
    $("input[name='radio1'][checked]").val(); //1.3 +
    $("input[name='@radio1'][@checked]").val(); //1.2.6 -

    //Set Value -> By value (If value is radio_0)
    $.each($("input[name='radio1']"),function(){ //1.2.6 - => @name
    if($(this).val() == "radio_0"){
    $(this).get(0).checked = true;
    }
    });

    //Set Value -> By index -> the second element
    $("input[name='radio1']").get(1).checked = true; //1.2.6 - => @name


  • checkbox


  • //select All
    $(":checkbox[name='checkbox_1']").attr("checked","checked"); //1.2.6 - => @name

    $.each($("input[name='checkbox_1']"),function(){ //1.2.6 - => @name
    $(this).attr("checked",true);
    });

    //unselect All
    $(":checkbox[name='checkbox_1']").attr("checked",false); //1.2.6 - => @name

    $.each($("input[name='checkbox_1']"),function(){ //1.2.6 - => @name
    $(this).attr("checked",false);
    });

2008年3月4日 星期二

恐懼戰馬頒獎典禮

現在頒發恐懼戰馬獎。
入圍的有:時間迴旋齊克果阿盾
得獎的是...時間迴旋
啪啪啪,啪啪,啪啪啪啪.....
現在請時間迴旋上台領獎...

首先,我要感謝父母的不小心,女朋友的貼心,以及<光明頂>的熱心。
曾幾何時,就在我接到術士任務那一剎那,那是我人生中最黑暗的時刻,在虛擬世界中,由解任務一點一滴累積的自信,正慢慢流失,我一度想放棄,不過想起曖昧同事說的,「只要逃一次,就會一直逃下去」,經過了足足兩天的沉澱,我重新拿起滑鼠,再次開啟讓人又愛又恨的WOW,先在拍賣場備齊所有材料,接著是蓮皇的鼎力相助,紅血之月的鼓勵,齊克果資金的挹注,還有隊友,哇哈哈大王夢語骨牌隊長,願意帶我連闖兩個副本,以暴力的打法殺遍所有敵人,比起藍波IV是有過之而無不及,在解完任務當晚,腦中縈繞著通靈、西厄,以及廝殺後的快感,躺在床上,輾轉反側無法入眠,我想是興奮與感激使然吧。

感謝<光明頂>,感謝巴哈!!!

2008年2月23日 星期六

Java & MySQL on Fedora 8


  • Fedora 8

  • Check the default JRE environment,

    [austin@localhost ~]$ java -version

    If the version is 1.7.0, remove it.

    [root@localhost ~]$ rpm -qa | grep java
    java-1.5.0-gcj-1.5.0.0-l7.fc8
    java-1.7.0-icedtea-1.7.0.0-0.l9.b21-snapshot.fc8

    [root@localhost ~]$ rpm -e java-1.7.0-icedtea-1.7.0.0

  • Java

  • Go to Sun's website, you could find two linux jdk files:

    • jdk-1_5_0_14-linux-i586-rpm.bin

    • jdk-1_5_0_14-linux-i586.bin

    • For installing one of above,

      [austin@localhost ~]$ chmod +x jdk-1_5_0_14-linux-i586~.bin
      [austin@localhost ~]$ ./jdk-1_5_0_14-linux-i586~.bin

      If you install non-rpm file, just follow the instructions. The jdk folder will install on your current location.
      On the other hand, if you choose the rpm file, you will get jdk-1.5.0_14-linux-i586.rpm.

      [root@localhost ~]$ rpm -ivh jdk-15.0_14-linux-i568.rpm


      The JDK will install on /usr/java/jdk1.5.0_14


      Next, we will edit the environment variables.

      [austin@localhost ~]$ vi .bashrc


      In .bashrc, increase three lines below:


      export JAVA_HOME=/usr/java/jdk1.5.0_14
      export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
      export PATH=$PATH:$JAVA_HOME/bin\


      Save it and re-login.

      [austin@localhost ~]$ export | more


      Check if there are "JAVA_HOME", "CLASSPATH" and "PATH" existed.


  • Eclipse

  • Download the eclipse-jee-europa-fall2-linux-gtk.tar.gz from Eclipse official Site. Just extract it and execute eclipse/eclipse.

  • MyEclipse

  • Download MyEclipse_6_0_1GA_E3_3_1_Installer.bin from MyEclipse.


    [root@localhost ~]$ chmod +x MyEclipse_6_0_1GA_E3_3_1_Installer.bin
    [root@localhost ~]$ ./MyEclipse_6_0_1GA_E3_3_1_Installer.bin


    And then error occured.

    java: xcb_xlib.c:50: xcb_xlib_unlock: Assertion `c->xlib.lock' failed
    Aborted.

    To solve it,

    [root@localhost ~]$ yum --enablerepo=development update libxcb
    [root@localhost ~]$ export LIBXCB_ALLOW_SLOPPY_LOCK=true
    [root@localhost ~]$ ./MyEclipse_6_0_1GA_E3_3_1_Installer.bin



  • MySQL


    1. mysql-libs-5.0.45-4.fc8.i386.rpm -> Fedora 8 DVD

    2. perl-DBI-1.58-2.fc8.i368.rpm -> Fedora 8 DVD

    3. mysql-5.0.45-4.fc8.i386.rpm -> Fedora 8 DVD

    4. perl-DBD-MySQL-4.005-2.fc8.i386.rpm -> Fedora 8 DVD

    5. mysql-server-5.0.45-4.fc8.i368.rpm -> Fedora 8 DVD



    [root@localhost ~]$ /etc/rc.d/init.d/mysqld start

    We could use "setup" to config system services and let mysql start as booting.

    [root@localhost ~]$ setup

    Download mysql-gui-tools-5.0r12-fc5-i386.tar.gz from MySQL.com
    Extract it.

    1. mysql-gui-tools-5.0r12-1fc5.i386.rpm
    2. mysql-administrator-5.0r12-1fc5.i386.rpm
    3. gtkhtml3-3.16.1-1.fc8.rpm -> from rpm.pbone.net
    4. mysql-query-browser-5.0r12-1fc5.i386.rpm


    If you need to connect MySQL from other hosts, remember to open the firewall on Port 3306.

2008年1月21日 星期一

搭便車?!

前情提要:
話說97.01.20(Sun)是我們校友團團練的日子,也就是我展現翩翩二胡英姿的風光日,我之前的交通方式,是從汐止坐火車至台北車站,換捷運到景美站,然後再走路到世新,自從前兩個禮拜買新摩托車,就盤算著來個萬里長征。

  • 12:10

  • 整裝出發,菊花享受定速巡行的灼熱感,身旁阿伯的野狼呼嘯而過,望塵莫及。

  • 12:30

  • 佇足在市政府的紅綠燈口,非刻意的看一下後照鏡,有位妙齡小姐在照鏡子,她胸前的黑線實在是太明顯了,讓我忍不住多看了十多秒,最後是被萬聲齊鳴的喇叭打斷。

  • 12:45

  • 直行基隆路,改變既定路線,於辛亥路口待轉。

  • 12:50

  • 馳騁在辛亥路上,突然感覺到後輪有飄移的現象,第一個念頭,該不會輪胎沒氣吧,新車都還沒過試用期,就給我漏氣,起初不以為意,不過晃動的程度越來越大,演變成以前後輪為直線,成扇形15度左右搖擺,此時正經過殯儀館門口,我一度想停下車來檢查,不過還是打消此念頭,繼續往前騎。

  • 12:55

  • 進入辛亥隧道,感覺速度突然慢了下來,油門催不太動,但不管三七二十一,勇往直前。

  • 17:30

  • 團練結束,說什麼都不走辛亥路,決定走羅斯福路,一路上倒也平安無事。

隔天摩托車剛好到三百公里,是既定進廠日,我就問老闆,是什麼原因使得摩托車會晃,老闆說,胎壓不足,等會兒會幫你檢查,結果老闆檢查完畢說,前後輪都不足。

只是奇怪的是,就只有那段是這樣...

2008年1月14日 星期一

JBoss 4.2.2 getJspApplicationContext(ServletContext) is undefined for the type JspFactory

When I start up the JBoss 4.2.2, I didn't see any exceptions on the console.
But if I enter the link on browser, it displayed

getJspApplicationContext(ServletContext) is undefined for the type JspFactory

About the web framework, I used Struts 2.0.
And the environment is Eclipse 3.3 and MyEclipse 6.0.1.
-------------------------------------------------------------------
The reason is the "jar" confilcted between the project and JBoss.
If you use the "Export" function of Eclipse, check the "*.war" file with WinZip or WinRAR.
See if there is a "javax.servlet.jsp.jar" existed in WEB-INF/lib, if yes, removed it and re-zipped.
Of course, you have to keep the original folder structure.

2008年1月10日 星期四

被搭訕了

距離上次被搭訕,已經睽違2年10個月15天又6個小時,我都已經忘記被搭訕時,那種心情忐忑不安,深怕應答失禮,白白錯失一次機會。

話說兩年前的邂逅,是在永和的河濱公園,那時的我在台中受訓,假日放假,我在偌大的操場馳騁,速度差不多與風速相當,我沉浸在與空氣阻力搏鬥的過程,渾然忘我,就在逐漸減速時,說時遲,那時快,一個聲音從旁邊傳來,我使出ABS,身體的動能才慢慢消失,一回頭,是個女孩耶,長髮,穿著T恤及運動長褲,她問說,你是田徑隊的嗎,看你跑的很快,又跑了很多圈,(我想她應該是被我跑步的英姿所吸引吧),我嚥下了口口水,答道:不是耶,(這時我看見她驚訝的眼神,應該是覺得不是田徑隊,居然也可以這麼神勇),我現在在當兵,假日放假自己來練體能,(這時她的眼睛閃爍著光芒,應該是覺得中華民國國軍有希望了),我們就沿著操場散步,詳細的對話我也不記得了,接著我們一起去吃早點,互留電話及地址,我到馬祖的時候,有寫信給她,不過是石沉大海,沒消沒息了。
附註:括號內的形容純屬臆測

就在今天,搭上215號公車,我上車時只有一個人,到下一站有個人上車,她就坐在我前面,她才坐定幾秒鐘的光景,便轉頭望向我,問道,請問你在哪站上車,我思考了一下,便把我從汐止走路至火車站,搭上原訂8點21分延誤至28分才到的復興號,結果又因為松山站號誌故障,又delay 7分10秒,終於抵達台北車站後,走捷運地下街至承德路出口,之後往前走50公尺,等了9分39秒車才來,只有我一個人上車,一五一十巨細靡遺地向她稟告,她點了點頭,向我微笑,旋即坐定。過了三站,我也要下車了,很巧,她居然也跟我同一站,下車後,她又問了我一遍,我又不厭其煩地陳述這段過程,她笑的更開心了,她後來先過馬路,而我也要過馬路去買早餐,我看她躊躇了一會兒,又走向我,我跟她已經產生默契了,於是乎我說了第三次,這時她真的滿意了,帶著微笑離開,講了三段,害我上班差點遲到,不過助人為快樂之本嘛。

很多人一定會問,續集呢,那個女生如何,我只能說,她年輕時應該還不錯...

請法官大人評評理

時間:2006年01月26日 19:37
地點:大安森林公園溜冰場
案情陳述:
話說Austin與一妙齡女子於上述時間在大安森林公園閒晃,途中行經位於公園北側之溜冰場,有若干人在那盡情馳騁,包括身強體壯之年青人,以及年不過十之小朋友,就在這兩位的注意力都在小孩子上時,一位年輕人以美妙的姿勢滑溜過來,想當然爾,他並沒有摔個四腳朝天,也沒跌個狗吃屎。
他風度翩翩地停在我前面兩步,對著該名妙齡女子說道:
小姐,對溜冰有興趣嗎,我們每天都會在這裡喔,只要自備器材,就可以來學,免費教學呢,(這時,他拿出名片,遞給該名女子) 這是我的名片,有興趣的話可以打電話詢問。
霎時,Austin並無異樣,但
妙齡女子:(撒嬌狀) 我可以來溜冰嗎^_^?
Austin:(嗅到些許異樣的味道,大聲地) FINE
妙齡女子:可是我是初學者,很容易跌倒耶
Austin:有護具啊,再者,一定也有人會扶持妳啊
妙齡女子:如果溜完冰,肚子會餓啊
Austin:有人會請妳吃飯啊
Austin決定控告該名年輕帥哥,意圖破壞他倆的感情。

判決:
【裁判字號】 96 , 康熙 , 32
【裁判日期】 960126
【裁判案由】 妨礙家庭
【裁判全文】
臺灣台北地方法院民事裁定        九十六年度康熙字第三二號
  上 訴 人 Austin
  被 上訴 人 年青人
主 文
控告成立。
理 由
由於該名年青人對該妙齡女子身旁之Austin居然視若無睹,實在罪無可恕,奧斯汀大法第三百六十五條第二項第一款,判決該名年青人必須尋找一位身材火辣之美女,穿著比基尼以及溜冰鞋,以嬌嗔的聲音及溫柔的態度,邀請Austin參與溜冰課程,期間必須悉心照料,噓寒問暖,不得讓Austin蒙受一丁點風寒。
中  華  民  國  96 年  1   月 26 日

作文:難忘的初夜

這段塵封已久的往事,埋在我心深處已經三年多了,午夜夢迴時,總是會想起這段不堪回首的際遇,且聽我娓娓道來吧。

時間回朔到三年前,那時我剛退伍,正是一個風靡萬千少女,令多少師奶淚灑蘭桂坊的優質青年,烏黑亮麗的秀髮,澄如明鏡的一雙眸子,吹彈可破的肌膚,除了肚子大了點之外,大家給了我一個令人聞風喪膽的外號,小亮哥。

那時對社會充滿了希望,因為剛從鐵牢出來嘛,工作時幹勁十足,但就是少了些什麼,絕對不是ㄟ片,因為我已經很多了,喔,不是啦,我想我缺乏的是異性的調和,以及缺乏自信及勇氣吧,不敢開口跟女性搭訕。

我親戚,給他個稱號,叫做Antony,小我不到一個月,碩士口試剛結束,終於可以放鬆一下了,有天他感受到我無與倫比的寂寞念力,問我,要不要去MOS跳舞,可是我不會耶,沒關係啦,介紹女生給你認識,我一聽到,頓時血脈噴張,全身汗毛瞬間直立,難掩興奮之情地問,對方是誰你見過嗎,有啊,在BBS上認識的,陽明的,之前有一起去唱過歌。

雖然沒說確切的日期,不過那晚我就睡不著覺了,我躺在床上,腦中閃爍的綺麗的幻想,嗨,這麼巧,你好,我是Austin,很高興認識你;Hello Baby,寂寞嗎?找我就對了;Hey,來跳個舞吧,我的手可以扶妳的水桶腰嗎?到底該用哪句話作為開場白呢,真難決定。

隔天,Antony應該感受到我的電波強力放送,隨即為我送上夢寐以求的一晚,說約星期五晚上十點,我跟你約九點半在捷運中山國中站,我隨即問我最關心的問題,要怎麼穿啊,我出娘胎還沒去過這種不良場所耶,唉喲,隨便穿就好啦,Antony說道。

咦,隨便穿的定義是什麼啊,放了幾年退色縮水的T恤,被老鼠咬個洞的海灘短褲,一雙穿了兩年沒洗過超臭的涼鞋,不過穿這樣去Disco,應該不好,一接近人家,人家就閃了,連人家的髮香都還沒聞到呢,我得穿好一點,出門前,我再確定一下我的穿著,藍綠色Baleno Polo杉,領子有一邊已經洗皺了,LEVI 深藍色牛仔褲,舊舊髒髒的DC網路買的仿冒滑板鞋(我先聲明,當初不知道是仿的,只覺得一雙外面賣1600的居然只賣800,不買是白痴),嗯,這樣的穿著比隨便穿好太多啦,哈。

經過了一番折騰,到了中山國中捷運站,這一路上又在思考我與Antony的對話,她們幾個人啊,會問這個是有道理的,因為Antony高高帥帥的,又是碩士,如果只有一個女生,那我豈不是沒什麼搞頭,大概兩三個吧,哇,如果是兩個,剛好一人一個,如果是三個,好歹會有一個女生可憐可憐我,跟我聊聊吧,老天真是待我不薄,YA!

這時有台摩托車向我靠近,嗯,應該不是Antony,他穿白色帶有黑色花紋襯衫,戴條項鍊,手上還有配件,褲子是黑色皮面,還有皮鞋,這麼帥氣,絕對不是他,咦,他怎麼停在我面前,這個人該不會是想跟我搭訕吧,雖然我很缺女伴,不過不到最後關頭,我是不輕易接受男性的邀約的,他脫下安全帽,甩了一下頭髮,哇靠,就是他,頓時,我的心涼了,從來沒有那麼灰心的感覺,我沉重地一字一字的血淚控訴,你穿的還真隨便啊,他說,還好啦,隨便穿穿,(迷之聲:騙肖耶,光那條金光閃閃超緊身的皮褲,穿就要一個小時了吧),沒想到我倆對隨便穿的定義竟是如此天壤之別,事到如今,雖然今晚把到妹的賠率已經高到1:100000,也只好硬著頭皮上了,我坐上他的摩托車,雙手環繞著他的腰,頭靠著他厚實的臂膀,輕聲問道,她們來幾個人啊,三四個吧,哇塞,人變多了耶,如果是三個人,他兩個,我一個,如果是四個,我搞不好會分到兩個,帥呆了,這時又開始謝天,我就在這美好回憶下,讓臉輕迎著晚上的微風,伴隨著摩托車的呼嘯聲,緊靠著他靜靜的睡去...

隨著摩托車時速開始減慢,我的心跳開始加快,快到了,我告訴自己別緊張,平常心,就像上大號一樣,深呼吸,我睜開了眼睛,從那一刻起,到十點二十五分,我從沒閤過眼,這時在外面,已經一堆人在排隊了,映入眼簾的,是數不清的的辣妹,以及我視而不見的男性,這時,看了錶,九點四十五分,我們提早到了,Antony打電話給跟她接頭的女性,問她們在哪裡,好像說快到了,十點前入場票價有優惠,她請Antony先買票,我們先進去,準備進去時,有 X光掃描,還有身高八呎的阿都啊當保安,耳朵塞著耳屎造型的耳機,彷彿像是FBI,真酷,接著是進入一條類似隧道,此時舞曲已經震耳欲聾了,講話都要靠的很近,我想,舔耳案就是這樣產生的吧,因為還要等人,所以我跟Antony就找個地方站著,我環顧四週,原來我認定的不良場所竟是這番景象,年輕人俯拾即是,嗯,為了替天下父母站穩把關角色,我決定每週要來報到一次,仔細研究為什麼大家總是流連不去。

這時,Antony手機響了,講了幾句話,跟我說,她們到了,我出去帶她們,這時我開始緊張了,臉上的表情極度不自然,來回踱步,就像麥可傑克遜的月球漫步般,等著她們到來,我的左眼注意著舞池的靓妹,右眼看著隧道出口,幾秒後,Antony身後跟著一個女生,細肩帶,牛仔褲,那個應該是跟他接頭的吧,後面跟著一女三男,而其中一男一女應該是男女朋友,手牽手,後面那兩個男的,看到我,表情就跟我看到他們一樣,(迷之聲:怎麼是男人,該死,Shit!),那對男女朋友,走近,我眨了數眼,看看錶,十點二十五分,那個女生竟然是我大學同學,更尤甚者,我們是屬於"超級"不熟的那種,會不會太巧了,第一次的把妹就鍛羽而歸,故事敘述至此,後面的事情我都不太清楚了,也不想去回憶了,不論怎麼嚴刑拷打,就讓它成為無頭公案,石沉大海吧。

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

分數:59分
評語:標題為難忘的初夜,老師以為是洞房花燭夜的情形,原來是把妹的初夜,害老師失望一下,所以只給59分,等你真的描述洞房那天,再補你分數。前面過程精采至極,吸引著讀者隨著你的心情七上八下,結局卻因極大的震撼而神智不清趨於馬虎,整篇文章詳述了滿心期待而落空的心情,雖有虎頭蛇尾之虞,仍舊不失詼諧風趣,加油,把妹不是罪啊!

五三慘案

民國十六年(西元1927年),國民革命軍北伐推進至山東時,日本一度出兵山東暗中幫助軍閥張宗昌,隔年四月,革命軍克濟南,日軍再度出兵山東,以武力阻止北伐進展。五月三日,日軍突然射擊濟南軍民,更衝入外交特派員公署,慘殺交涉員蔡公時,凌辱外交部長黃郛及其他高級將領。直到隔年三月,簽定協約後,日軍才撤出濟南,此次事件,中國軍民死傷者達五千人,財產損失約二千六百萬元,是為五三慘案。

民國九十四年(西元2005年),一代美男子奧斯汀遭受到一生都難以抹滅、慘絕人寰的遭遇,歷史上稱五三慘案Part II。

奧斯汀,姓奧,名斯汀,字笑年,號稱螺絲釘,生於民國六十八年九月三日,出生時,東方天空閃過一道北極光,注定了他不平凡的一生,本網誌特地邀請奧斯汀口述五月三日的經過,詳盡的過程請各位慢慢品嚐吧。

要由事發前一個月說起,民國九十四年四月十九日,我任職於一家磁碟陣列公司,職掌為軟體相關,由於該部門只有一位人力,所以相當忙碌,而此時社會瀰漫著一股風氣,單身就該死,不過 我依舊不為所動,汲汲營營做好職務的本分,不與他人起舞,堪稱公司的模範員工。

同事傑瑞,姓傑名瑞,字虎男,號甘谷,不忍見我的生活全被工作填滿,便要介紹二專同學與我相熟,當時,網路已相當普及,普羅大眾皆用微軟公司提供的免費即時通訊軟體,隔天,四月二十日,於網路上遇到同事傑瑞的同學,一時興高采烈不能自己,但又要隱藏對異性的渇望,此時絕對不能露出真面目,不然顯得自己沒有行情,所以先小心翼翼的聊天,話題也都僅止於基本的問答,就跟釣魚一樣,放長線才能釣大魚,我就抱著如意算盤沉沉地睡去...

隔天,四月二十一日,在網路上等了整晚,沒有見到她的蹤影,直到四月二十五日,同事傑瑞觀察到我的悶悶不樂,我哭哭啼啼地說她都不上線了,傑瑞說怎麼可能,現在她就在線上,說罷,就問她同學,「妳為什麼要封鎖小螺絲釘,不論再巨大的機器,少了一顆螺絲釘便不能運轉了」,「我知道啊,但螺絲釘終究是螺絲釘,爛泥扶不了牆,他永遠也不會變成食神」,原來我又被封鎖了,創了被封鎖速度的金氏世界紀錄,之前最快也是一個月的光景,沒想到這次才一天,這樣記錄接下來要給誰破呢,任何想破紀錄的人要含恨而終了,在此先跟大家說對不起。

傑瑞對我過意不去,說有個乾姐要再次介紹與我熟識,此時我對人性已失去希望,萬念俱灰的同時,同事傑瑞再三保證,這次她絕對不會再把你封鎖了,我哽咽地說道,長的帥不是罪啊。

四月二十二日傍晚八點十分,在網路上見到那位乾姐,前車之鑑歷歷在目,我已經不抱任何希望,聊天也僅僅是點到為止,內心的獸性如同在動物園裡的獅子已被折磨成消失殆盡,但是這次不一樣,奧斯汀心中慢慢感覺到,女方這次蠻熱絡的,似乎燃起一線希望,單身了三年十個月八天十七小時,真的要終結了。

四月二十三日,同樣時間,我已經與那位乾姐有說有笑,此時,積壓已久的我已經按耐不住,說道,這星期天沒有路跑,要不要出來吃飯,那位乾姊遲疑了幾秒,「我不確定假日有沒有空耶,我明天再跟你確定好嗎」,原來她假日這麼忙啊,一定很多人追,嗯,這個答案已經讓我陷入瘋狂,我頭也不回地衝上頂樓,淚光
粼粼,對著皎潔的明月大喊,老天終究待我不薄。

終於確定了時間,這時好奇的我做了男人都會做的事,就是要照片,終於傳來,在傳輸的過程中,仔細端詳縮圖,發現,好瘦的女子,傳完後,打開一看,久久不能自己,我雙眼直視前方,嘴巴微張,娟娟細流從嘴角滿溢,半响後,女生說,喂喂,怎麼沒反應呢,此時我回過神連忙道歉,說正在忙,其實內心深處有兩股力量彼此拉扯,魔鬼說,取消吧,天使說,都約好了,絕對不能失約。

我畢竟是見過大場面,並沒有被逐漸萌芽的愛情沖昏頭,每日還是辛勤的工作,就在拖著疲憊的步伐走回家時,心想,明天就要碰面了,難得打扮的我還是得有個造型,買了罐髮膠,心想要給對方個好印象。

上午十點,起床後,內心的悸動無法平復,連家人都感受到異樣,我顫抖的手緊握著滑鼠,查詢火車時刻,恩,就搭三點十分那班電車,到台北車站後換捷運,到SOGO應該會在下午三點五十五分,時間綽綽有餘,就這樣,時間不知不覺地過了,急忙梳妝打扮,咦,該怎麼抹髮膠呢,我向來都是以素顏著稱,嗯,終於抹了個過時的貝克漢頭,看了時間,不禁瞠目結舌,已經三點了,下班電車是三點半,第一次約會就遲到,印象一定會很差,顧不了那麼多了,決定搭計程車到昆陽站,一路上喃喃自語,沒關係,一切都是值得的。

風塵僕僕趕到SOGO,三點四十五分,離四點之約還有十五分鐘,非常有紳士風度的我暗
忖,這時候打給她一定很失禮,畢竟時辰未到,牛頭馬面也不會這樣失了方寸,於是乎先傳了封簡訊,「我已經先到了,你到了就打給我吧」,我沿著手扶梯,一層一層往上逛,逛到唱片行,我的磁場與古典唱片產生共振效應,佇足良久,突然被電話聲嚇醒,是她,「我到了,你在哪邊,我在一樓服務台等你。」

我看了錶,四點四十五分,早知道搭下一班火車就好了,算了,一切都是值得的,男人這麼計較怎麼成大器,從容不迫地走下電扶梯,一定要鎮定,絕對不能讓人家知道我是要見網友。

走到了一樓,這時外面剛好下起滂沱大雨,全台北市民都跑到這來躲雨,一時間鶯鶯燕燕,好不熱鬧,我睜大了眼睛,四處端詳,那個腿好長,這個胸部好大,那個臉蛋超可愛,但是都不像是我的網友,我站在人群中間,隨波逐流,冷漠的人群從身旁呼嘯而過,緊湊的步調,連掉一塊錢都不會停下來駐足,我決定打電話給那位乾姐,再次詢問她的座標,就在電話中,看到一個背影掛掉電話,緩緩轉向我,就在那十分之ㄧ秒,我彷彿進了百慕達三角洲的電子迷霧,墮入了時間錯亂的漩渦,一個影子把我拉回殘酷的現實,我的心跳加快,腎上腺素分泌了三加侖,我捫心自問,這是她嗎,為什麼比照片肥三倍,她穿著黑色蕾絲薄紗洋裝,裡面穿件T恤,感覺牛仔褲的縫線已到了壓力的臨界點,鞋子是踢到男生會跳的老高的尖頭鞋,我發現我無法將目光停留在她身上超過千分之一秒,霎時,全世界靜默了起來,我的人生已是黑白,我向包青天擊鼓鳴冤,為什麼要這樣對我,我做錯了什麼事,要這樣懲罰我,(迷之聲:天將降大任於斯人也,必先苦其心志...),不過本持著紳士風度,我還是得咬著牙關完成這趟天堂路。

我倆逛上了二樓,此趟路程竟是如此漫長,不知不覺我倆已漫步到三樓,她突然冒出一句話,陪我逛內衣好不好?我呆立半响,隨即堅決地說,不要,我不陪女性逛內衣的,她開始嬌嗔的說,好嘛,我是吃了秤砣鐵了心,不要就是不要,我倆在電梯拉拉扯扯,路人的眼光在我倆身上游移,彷彿在猜想我們倆的關係,最後我的決心感動天,她凹不過我,只好繼續往上走,她說她要去換贈品,在頂樓,我心想,我們出來是逛街吧,是什麼贈品那麼有吸引力啊,本著好奇的心理,跟上去瞧瞧吧。

有獎徵答:猜猜看贈品是啥?
1. 化妝品試用包
2. 小絨毛玩具
3. 小首飾

時間到,您猜的出來嗎?答案是以上皆非,贈品是一個黑色的小桶子,壓克力材質,一體成型壓注猶如高級工法的教科書,外觀頗有質感,俗稱垃圾桶,我有點亂了方寸,不行,要鎮定,雖然有點接近崩潰邊緣,心想得把今天的行程徹底壓縮才行,走出了SOGO大門,我提議,我餓了,去吃飯吧,她回答,才五點四十分耶,我心想,得趕快吃飯才能結束這場噩夢,對啊,我真的餓了,遠眺兩百公尺處,麻布茶坊,就去那吃吧。

走在忠孝東路上,她心情很好,彷彿中了樂透彩,而我像是連摃百次龜,我謹守分際,與她保持三步之遙,說實話,這是我出娘胎以來,走路不敢抬起頭的一刻,若要抬起頭,是要查看在熙熙攘攘的人群中,會不會被熟識的人堵到,想到這,我的冷汗直流,一生的英名就要葬送,隱忍多時的淚水終於潰堤,這時,她興高采烈地走來,說道,陪我去逛屈臣氏吧,我趕緊拭去眼角的淚水,心想,我有說不的權利嗎?算了,吃完飯我們將會老死不相往來,就陪你這一趟吧,在屈臣氏,她又要買東西了。

有獎徵答:猜猜她買了什麼?
1. 香水
2. 化妝品
3. 衛生棉

時間到,相信大家經過上一題的洗禮,會選擇3,不幸地,錯,她買了蛋黃派,不是三個一包,是十二個一包的蛋黃派家庭號,排隊結帳的同時,我問,你為什麼要買啊,她說這邊買很便宜啊,吃不完順便帶回家孝敬父母,(謎之聲:要買三包,要買三包),真是不可多得的孝順少女,我不禁聞之動容,各位看倌,敘述到此,有誰想認識她的,我幫你介紹介紹。

歷經了SOGO與屈臣氏的大屠殺,她兩手都提著搜括而來的戰利品,秉持著男女授受不親,依舊沒有忘記要與她保持距離,這時,她又開口了,「喂,你看我手提著大包小包,為什麼不會幫我提呢,一點都不體貼」,我一時語塞,答不上話,天啊,我怎麼會不體貼呢,好人卡不是拿假的耶,任勞任怨的我,聯誼時可都是烤肉大廚,一聲令下,哪個人不拿盤子來跟我要肉,朋友一起出去玩,我可是專業的攝影師,情侶拍照還不都要靠我,敢說我不體貼,而且一手垃圾桶,一手蛋黃派,不符合我的風格啊,應該是一手拿黯然消魂飯,一手捧碗瀨尿牛丸才對,就在陷入自我冥想中,她硬生生將兩手的的物品硬是塞到我的手上,小蝦米果然無法與大鯨魚抗衡。

真是度秒如年,短短的兩百公尺,盡頭竟是如此遙遠,我的淚已濕了衣襟,提著沉重的腳步終於到了麻布茶坊,我倆在櫃檯前駐足良久,她撒嬌地說,我不太餓耶,不然點個半雞飯,而我,點了個最便宜的拉麵。

店員領我倆到座位上,那個是兩人面對面的位置,我不斷安慰自己,牙一咬,就忍過去了,這時她又開口了,「我想再加點一隻螃蟹耶」,不會吧,為了讓那隻歹命的螃蟹逃離她的血盆大口,我憐憫的天性油然而生,我不斷地遊說,「吃這樣就好了,點了吃不完很浪費,況且你不是不餓」,她點點頭,當餐都送來時,她開始滔滔不覺講述他與興農牛的淵源,當然還提到介紹我倆認識的那位同事傑瑞,說罷,便拿起電話,撥給傑瑞,講沒兩句,就把電話塞給我,傑瑞劈口就說,「奧斯汀,很爽喔」,我簡直七竅生煙,但還是要保持紳士的風度,回答道,「還好啦」,草草結束這段談話,回到現實,她依舊滔滔不覺講述她與球員間的曖昧關係,而我,面對著她,簡直難以下嚥,我心生一計,那就一直深情款款地看著她,看到麻痺,加上我有先見之明地選了湯麵,就一口一口往肚裡吞了,才吃到一半,望向她的半隻雞飯,雞骨頭靜靜平躺在棺材裡,身上的衣服已經剝了一件不留,一粒米也不留給廚房的老鼠光顧,好險我剛剛救了螃蟹一命,渾渾噩噩中,結束了這頓飯,她很識趣地拿出她的飯錢,其實我老早有心理準備要請她,既然她主動,我也不便推辭。

走到了樓下,天已經黑了,夕陽已經將我的事一五一十交接給月娘,連月娘都在笑我,乾姐說道,要去哪好呢,我急忙回應,我還有事,妳騎車來吧,我陪你去騎車,又走在忠孝東路上了,經過了一頓酒足飯飽,我也看開了,就當作日行一善,敞開心胸與她聊天吧,真是哪壺不開提哪壺,她說,為什麼不陪我逛內衣呢?怕我試穿給你看啊?就在這萬分之ㄧ秒,我脫口而出,一天中的屈辱都在這句話發洩殆盡,吼道:「我也不想看」,而她也不是省油的燈,「哼,你好壞喲」。

今天,就在我倆打打鬧鬧的戲謔下結束了。

經過這件事,我覺得我還是回故鄉火星,地球太險惡了。
若各位執意要住在地球,請注意幾點我的肺腑之言:
1. 不要聽信同事的話
2. 見網友一定要找好朋友當後盾(有狀況隨時把你接走)
3. 約會的地點最好選電影院(進可攻,退可守)

共勉之~~