星期六, 12月 11, 2004

原來喝雞尾酒也是會喝到暈~

今天剛好是新公司的開幕酒會,
臨時被指派擔任攝影的角色,
拿著沒有防手震的相機,
還真是給它有點小擔心照出來的效果不佳。

沒想到來的來賓還真不少,突然面對一群不認識的來賓,
看著大家那麼認真的打屁聊天,突然有點心理障礙,
呃~到底啥時才是可切入拍照的時機呀~

於是在拍了一堆空景後,途中竟然還被72年次的小美眉指導 -__-|||
靠~把心一橫…不管三七二十一衝進去拍就是了,

開場白大概像是醬:「二位帥哥、美女一起照張相吧~」
呣~順利踏出第一步後慢慢就抓到訣竅哩~

基本上熟練後就很簡單,首先沒有人會拒絕跟美女合照,
所以幾位美女來賓及同仁就是我最好的切入點啦~ ^_^

再來就是找大頭囉~跟大頭合照也是無往不利的一種選擇,
不過還是有幾位看起來有點兇的來賓被我跳過啦~
呃~其實我內心相信你們都是面惡心善的好人,
不過為了整體畫面的美觀… :P

但是今天最後還是發生了件令人扼腕的憾事,
由於太常鎖定某位美女來賓當拍攝目標,
終於引得她的注意後,要交換名片時才發現自已忘了帶在身上的慘事 >_<

唉~真是白費工呀~站了一下午,竟然沒啥收獲,
不自覺口渴起來,一連喝了幾杯雞尾酒解解渴,
送完來賓後竟然開始暈了起來,原來喝雞尾酒也是會喝到暈呀~ XD

星期一, 12月 06, 2004

年後轉職潮的三大小心

一個蘿蔔一個坑,對人材召募短視而無規劃的要小心。
面談時自已講得很開心,完全沒問你想法。
此時切勿有過多的期待,你的想法及熱血只會隨著時光而消逝,
通常這類地方的流動率往往會隨著劣幣驅良幣效應而成等比級數升高。

空畫大餅但一問到實行面就開始耍花槍的要小心。
要判斷是否為空畫大餅,一方面可觀察該公司的市場規模如何。
另外是看有無完全超越該公司實力的規劃,例如連個團隊都還沒建起來,
就喊話說啥米三年內台灣制霸、五年後放眼國際云云。

一心想發展代工而無品牌觀念的要小心。
經由台灣近幾年來代工產業的起落,再到大陸的快速掘起,
還在倡言發展代工的大概真的會變成熱鍋中的慢熟的青蛙。

The Terminal

或許試試在對一部片子完全沒有認識的情況下進場觀賞也蠻有意思的,
就在這樣想法下,我竟然看到了一部在進場前讓我完全沒有期待的好片,
講真的,中文片名翻成【航站情緣】還真的是讓人有點沒力。

不過這部片真的很妙,出場後仔細看了一下海報上英文副標是Life is waiting。
回想一下的確在淡淡的劇情裡卻無時無刻不隱含這中心思想,
像Tom老爸等了一輩子的偶像簽名,Catherine等了一輩子的真愛,
老印清潔員每天唯一的樂事是等著看人滑倒 XD

其實愛情的成份在這部片子中著墨不多,但其中還是有段對話蠻有意思的。
或許執著於一段沒有未來的感情的人都是因為患了遠視的關係而看不清身邊的好人 :p

不過最扯的還是看著Tom扮演著無助,英語又不通的外勞?!
最後竟然也能把上Catherine這種超級美女。靠~這果然是美國夢的極致表現 XD

--
雖然像劇中主角這樣的遭遇很令人同情,想一想若是發生在現實中…
我咧~死老共,我出國時你可別亂來呀~ XD

星期一, 11月 01, 2004

邂逅日本美眉

話說今天原本想乘著最近換季折扣添購幾件新行頭,
走著走著不覺已到了傍晚,進了T大附近某G牌服飾店內閒逛時。
剛進去沒多久拿起一件外套正準備試穿時,
突然查覺到左後方有一陣不尋常的腳步聲接近著。

轉頭回去一看,不其然地跟一個小美眉四目相交望了一眼。
呵~小小被電了一下,不過還是馬上鎮靜下來裝著若無其事的繼續試穿。
小美眉突然走近問了句:
'請問你踢OX嗎?' 註:OX是因為她發音太奇怪一時聽不懂她在講啥。

怔了一下,"呣~妳說啥米?"
'喔~soccer、soccer,你有在踢足球嗎?'
重覆又問了一次,終於聽懂她在講啥。
"呃~沒有耶,我打籃球的…"

'喔~不好意思呢,因為你跟我男友身材有點像。'
'我想要買一件外套給他當禮物。'
'因為他現在人在日本所以可以請你幫我試一試這件外套嗎?'

"喔~沒問題呀~"
開玩笑美眉的指示怎敢不從。馬上以最快的速度脫了身上的外套,
試了試美眉手中所拿的外套。

'呣~你覺得這件外套怎麼樣呢?'
"呃~還不錯呀,蠻舒適的。"
心中OS:靠~我又不是你男友,問我覺得怎樣有啥用 :P

"對了,你是日本人嗎?"
'喔~是呀,我來台灣學中文的。'
"呵~那你中文算講得還不錯的哩~"
經由夜店之神Roberto的指導,我愈來愈能把握講謊…喔~不是,
是講甜言蜜語的時機及技巧。

接著哈啦了一陣有的沒的,沒想到這日本小美眉倒也挺龜毛的,
衣服是一件拿了又一件,搞的老子是脫了又換、換了又脫。
總是試不出一件她覺得滿意的。

當我心下正有所狐疑,四處觀望察看是否有攝影機存在。
該不會最近又出現啥米新型態的整人節目單元吧~
突然看到女店員在一旁偷笑,還虧我叫我不要臉紅。
呿~老子是因為被這小女生整得脫來換去,
搞得全身熱了起來,啥米臉紅不紅的。

最後我暗自下了個決定,看她又開始對這件外套猶豫不決想轉頭再去挑時,
趕緊鼓起三吋不爛之舌跟她推薦身上這件是有多舒適多好穿。
'呣~可是我男友好像比你矮一點點耶~'
'你再幫我試試這件size L的好嗎?'

靠~老子已經快受不了妳的龜毛了....
即將爆發的我還是耐著性子,裝著和顏悅色地神情幫她試了試M號的size。
"不過M號的好像袖子會短了點喔~"
'喔~應該還好,你好像還比我男友高一點點的樣子。'
"對了,你男友多高呀?"
'呣~好像是175的樣子。'
心中再度OS:小姐~我咧這叫身材很像嗎?我比你男友高了不止一個頭吧 \(╯▽╰)/

看到旁邊女店員幾乎已到了臨界點開始忍俊不禁爆笑起來。
我想也是時刻該結束這場鬧劇了。
直接拉著她往櫃台走去,強力推薦就是這件沒錯了。
"不然妳男朋友不喜歡妳買的禮物,妳乾脆跟他分手來找我好了" XD
總算在跟她約定了這個一生一世的誓言後,她滿意地買下了這件外套。
在門口與她說了聲"撒喲那啦~",互道珍重再會。

一陣雲淡風輕後,名偵探小P終於又了結了一件Case…
經此事件後得證,美眉們嬌縱任性的程度果然是不分國界呀~ XD

--

【以上故事中所提及任何個人、團體、場所,如有雷同,純屬虛構!!!】

星期日, 10月 31, 2004

【蛀蟲時間】老鼠起舞,大象當心

老鼠起舞,大象當心

剛在華納看完午夜場電影,興頭一起想著反正也睡不著了,
心裡想著想著就順道轉往蹲男誠品蹲蹲吧,或許有啥米新書剛出來也說不定。

雖然已是凌晨二點多,店裡人潮依舊擁擠,
嘿~突然在新書區發現令人期盼已久熟悉的封面。
原來洪老大的新書已經出來啦~

趕緊先A一本起來翻翻,內容果然十分精彩,一翻下去就停不了手哩。
尤其看到後來那段神奇公式:-1 + 1 > 0 時才發現,
原來還與前段提攜部屬的故事有前後呼應呀~

若以部屬比喻為水的話,正說明了水可載舟、亦可覆舟的道理。
適時給予部屬機會、激勵使得部屬得以水漲自然也得以船高囉~
不汲汲於爭功諉過更是顯現主事者管理技巧上的高明。

講起神奇公式還真有那麼點神來一筆的味道,
相信洪老二次在書中提到這個事件不是偶然。
應該算是職場生涯上蠻滿意的一次經驗分享。
再仔細想想作回頭客的生意,後續服務好壞與否可真是重要呀~
(雖然這又讓我想起買ViewSonic液晶螢幕時慘痛的送修經驗 >_< )

不過不曉得是否因有編輯介入,抑或是洪老已離開昇陽的緣故,
比起Java週報時期洪老專欄時常火力四射,引起許多話題。
感覺這次洪老大火力尚未全開,批判M牌公司的力道似乎小了許多 :p

俗話雖講外來的和尚會唸經,但比起啥米管理剩經,
笑佛學不到的管理之類的書籍。
洪老本土化的管理及職場經驗分享反而更值得一讀喔。

--
看起來存書並不多,手腳再不快的朋友可能得等二刷囉~

星期五, 10月 29, 2004

Embedded a Scripting Engine in Java Apps

在開發應用系統時,使用者有時往往會需要動態地執行程序或更新某些參數。
例如像是電信業的計費公式為了因應三不五時要推出特惠方案而更動、
或是銀行業核准信用貸款的判斷準則等。

但這個時候您可能又不想大費周章地自已搞一套Parser
來解析處理這些公式或規則,
嘿嘿~那麼最好的選擇就是內嵌一個Scripting Engine進來。
而且目前開源項目中已有許多使用Java實作出來各種語法的
Scripting Engine可供我們選擇囉~

更棒的是不但如此,大部份開放源碼的Scripting Engine
還支援了BSF(Bean Scripting Framework)。
http://jakarta.apache.org/bsf/index.html
不過講起來Java的世界就這點很奇怪,Framework特別多,
啥米東東不來個Framework這些人身上好像是會癢 :p

好了~再廢話我怕您會想扁我。言歸正傳…而這個BSF又是個啥米東東哩?
簡單講嘛沒啥就是提供一個共通的介面
將各家不同實作的Scripting Engine包裝起來。
於是乎我們可以很輕易地在系統中切換各種不同Scripting語法,
不過有個前提是這些Scripting Engine有支援BSF。

如此一來便可輕鬆提供多種不同語法供使用者選擇,
這一點相信可帶給系統使用者很大的便利。
甚或是我們可以內建一些predefine function
讓使用者能更直覺地用邏輯概念來組合出其所需的功能出來。

下面介紹一下,小弟實驗過確認可在BSF下執行正常的幾個Scripting Engine:

Rhino: JavaScript for Java

http://www.mozilla.org/rhino/index.html

註記:
雖說目前FAQ上寫支援BSF的版本為Rhino 1.5R2 or Rhino 1.5R3。
但經實測似乎只有Rhino 1.5R2這版可運行正常。


JRuby: Ruby for Java

http://jruby.sourceforge.net/index.shtml


Jython: Python for Java

http://www.jython.org/index.html


BeanShell: Lightweight Scripting for Java

http://www.beanshell.org

註記:
若是您覺得您不太想去重新學習或適應另一套Scripting語法,
想使用一個支援Java語法的Scripting Engine的話。
您可以選擇使用BeanShell。


最後提供一個Expression Evaluator的範例程式,大家可以參考試試看囉 ^_^
對了!!!執行前要記得將各個要用到的
Scripting Engine相對應的jar檔設定到classpath下喔~

import java.util.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import org.apache.bsf.*;

public class ExpressionEvaluator
extends JFrame implements java.awt.event.ActionListener {
private JPanel ivjContentsPane = null;
private BorderLayout ivjContentsPaneBorderLayout = null;
private JLabel ivjLabel1 = null;
private JPanel ivjPanel1 = null;
private GridLayout ivjPanel1GridLayout = null;
private JPanel ivjPanel2 = null;
private BorderLayout ivjPanel2BorderLayout = null;
private JPanel ivjPanel3 = null;
private GridLayout ivjPanel3GridLayout = null;
private JPanel ivjPanel4 = null;
private JButton ivjButtonClearResults = null;
private JButton ivjButtonClearScript = null;
private JButton ivjButtonEvaluate = null;
private JComboBox ivjLanguageChoice = null;
private JTextArea ivjTextAreaResults = null;
private JTextArea ivjTextAreaScript = null;
private String language = "javascript";
BSFManager _mgr = null;
Hashtable _htEngines = null;

public ExpressionEvaluator() {
super();
initialize();
}

public ExpressionEvaluator(String title) {
super(title);
initialize();
}

public void actionPerformed(java.awt.event.ActionEvent e) {
if ( (e.getSource() == getButtonClearResults())) {
try {
getTextAreaResults().setText("");
}
catch (java.lang.Throwable ivjExc) {
handleException(ivjExc);
}

}
if ( (e.getSource() == getButtonEvaluate())) {
try {
this.buttonEvaluateClick();
}
catch (java.lang.Throwable ivjExc) {
handleException(ivjExc);
}

}
if ( (e.getSource() == getButtonClearScript())) {
try {
getTextAreaScript().setText("");
}
catch (java.lang.Throwable ivjExc) {
handleException(ivjExc);
}

}

}

public void buttonEvaluateClick() {
evaluate();
}

public void evaluate() {

language = getLanguageChoice().getName();
String scriptText = getTextAreaScript().getText();

System.out.println("Evaluating: {\n" + scriptText + "\n}");
System.out.println("Language: " + language);
Object oResult = null;
try {
getTextAreaResults().setForeground(java.awt.Color.black);
oResult = _mgr.eval(language, "Evaluator", 0, 0, scriptText);
}
catch (Exception ex) {
getTextAreaResults().setForeground(java.awt.Color.red);
oResult = "Exception: " + ex.getMessage();
ex.printStackTrace();
}
System.out.println("oResult:’" + oResult + "’");
getTextAreaResults().setText(oResult.toString());
}

private JButton getButtonClearResults() {
if (ivjButtonClearResults == null) {
try {
ivjButtonClearResults = new JButton();
ivjButtonClearResults.setName("ButtonClearResults");
ivjButtonClearResults.setText("Clear results");
}
catch (java.lang.Throwable ivjExc) {
handleException(ivjExc);
}
}
return ivjButtonClearResults;
}

private JButton getButtonClearScript() {
if (ivjButtonClearScript == null) {
try {
ivjButtonClearScript = new JButton();
ivjButtonClearScript.setName("ButtonClearScript");
ivjButtonClearScript.setText("Clear script");
}
catch (java.lang.Throwable ivjExc) {
handleException(ivjExc);
}
}
return ivjButtonClearScript;
}

private JButton getButtonEvaluate() {
if (ivjButtonEvaluate == null) {
try {
ivjButtonEvaluate = new JButton();
ivjButtonEvaluate.setName("ButtonEvaluate");
ivjButtonEvaluate.setBackground(Color.lightGray);
ivjButtonEvaluate.setText("Evaluate");
}
catch (java.lang.Throwable ivjExc) {
handleException(ivjExc);
}
}
return ivjButtonEvaluate;
}

private JPanel getContentsPane() {
if (ivjContentsPane == null) {
try {
ivjContentsPane = new JPanel();
ivjContentsPane.setName("ContentsPane");
ivjContentsPane.setLayout(getContentsPaneBorderLayout());
ivjContentsPane.setBackground(new Color(172, 179, 191));
getContentsPane().add(getPanel2(), "North");
getContentsPane().add(getPanel1(), "Center");
}
catch (java.lang.Throwable ivjExc) {
handleException(ivjExc);
}
}
return ivjContentsPane;
}

private java.awt.BorderLayout getContentsPaneBorderLayout() {
java.awt.BorderLayout ivjContentsPaneBorderLayout = null;
try {
ivjContentsPaneBorderLayout = new java.awt.BorderLayout();
ivjContentsPaneBorderLayout.setVgap(10);
ivjContentsPaneBorderLayout.setHgap(10);
}
catch (java.lang.Throwable ivjExc) {
handleException(ivjExc);
}

return ivjContentsPaneBorderLayout;
}

public BSFEngine getEngine(String langname) {
if (_htEngines != null) {
return (BSFEngine) (_htEngines.get(langname));
}
return null;
}

private JLabel getLabel1() {
if (ivjLabel1 == null) {
try {
ivjLabel1 = new JLabel();
ivjLabel1.setName("Label1");
ivjLabel1.setFont(new java.awt.Font("dialog", 1, 12));
ivjLabel1.setText("Language");
}
catch (java.lang.Throwable ivjExc) {
handleException(ivjExc);
}
}
return ivjLabel1;
}

private JComboBox getLanguageChoice() {
if (ivjLanguageChoice == null) {
try {
ivjLanguageChoice = new JComboBox();
ivjLanguageChoice.setName("javascript");
ivjLanguageChoice.setBackground(Color.white);
ivjLanguageChoice.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
JComboBox cb = (JComboBox) e.getSource();
ivjLanguageChoice.setName( (String) cb.getSelectedItem());

}
});
}
catch (java.lang.Throwable ivjExc) {
handleException(ivjExc);
}
}
return ivjLanguageChoice;
}

private JPanel getPanel1() {
if (ivjPanel1 == null) {
try {
ivjPanel1 = new JPanel();
ivjPanel1.setName("Panel1");
ivjPanel1.setLayout(getPanel1GridLayout());
getPanel1().add(getTextAreaScript(),
getTextAreaScript().getName());
ivjPanel1.add(getTextAreaResults());
}
catch (java.lang.Throwable ivjExc) {
handleException(ivjExc);
}
}
return ivjPanel1;
}

private java.awt.GridLayout getPanel1GridLayout() {
java.awt.GridLayout ivjPanel1GridLayout = null;
try {
ivjPanel1GridLayout = new java.awt.GridLayout(2, 1);
}
catch (java.lang.Throwable ivjExc) {
handleException(ivjExc);
}

return ivjPanel1GridLayout;
}

private JPanel getPanel2() {
if (ivjPanel2 == null) {
try {
ivjPanel2 = new JPanel();
ivjPanel2.setName("Panel2");
ivjPanel2.setLayout(getPanel2BorderLayout());
getPanel2().add(getPanel3(), "South");
getPanel2().add(getPanel4(), "North");
}
catch (java.lang.Throwable ivjExc) {
handleException(ivjExc);
}
}
return ivjPanel2;
}

private java.awt.BorderLayout getPanel2BorderLayout() {
java.awt.BorderLayout ivjPanel2BorderLayout = null;
try {
ivjPanel2BorderLayout = new java.awt.BorderLayout();
ivjPanel2BorderLayout.setVgap(5);
ivjPanel2BorderLayout.setHgap(5);
}
catch (java.lang.Throwable ivjExc) {
handleException(ivjExc);
}

return ivjPanel2BorderLayout;
}

private JPanel getPanel3() {
if (ivjPanel3 == null) {
try {
ivjPanel3 = new JPanel();
ivjPanel3.setName("Panel3");
ivjPanel3.setLayout(getPanel3GridLayout());
getPanel3().add(getButtonEvaluate(),
getButtonEvaluate().getName());
getPanel3().add(getButtonClearScript(),
getButtonClearScript().getName());
getPanel3().add(getButtonClearResults(),
getButtonClearResults().getName());
}
catch (java.lang.Throwable ivjExc) {
handleException(ivjExc);
}
}
return ivjPanel3;
}

private java.awt.GridLayout getPanel3GridLayout() {
java.awt.GridLayout ivjPanel3GridLayout = null;
try {
ivjPanel3GridLayout = new java.awt.GridLayout();
ivjPanel3GridLayout.setColumns(3);
}
catch (java.lang.Throwable ivjExc) {
handleException(ivjExc);
}

return ivjPanel3GridLayout;
}

private JPanel getPanel4() {
if (ivjPanel4 == null) {
try {
ivjPanel4 = new JPanel();
ivjPanel4.setName("Panel4");
ivjPanel4.setLayout(new java.awt.BorderLayout());
getPanel4().add(getLabel1(), "West");
getPanel4().add(getLanguageChoice(), "Center");
}
catch (java.lang.Throwable ivjExc) {
handleException(ivjExc);
}
}
return ivjPanel4;
}

private JTextArea getTextAreaResults() {
if (ivjTextAreaResults == null) {
try {
ivjTextAreaResults = new JTextArea();
ivjTextAreaResults.setName("TextAreaResults");
ivjTextAreaResults.setBackground(Color.lightGray);
ivjTextAreaResults.setFont(new java.awt.Font(
"monospaced", 1, 12));
ivjTextAreaResults.setEditable(false);
}
catch (java.lang.Throwable ivjExc) {
handleException(ivjExc);
}
}
return ivjTextAreaResults;
}

private JTextArea getTextAreaScript() {
if (ivjTextAreaScript == null) {
try {
ivjTextAreaScript = new JTextArea();
ivjTextAreaScript.setName("TextAreaScript");
ivjTextAreaScript.setBackground(Color.white);
ivjTextAreaScript.setEditable(true);
}
catch (java.lang.Throwable ivjExc) {
handleException(ivjExc);
}
}
return ivjTextAreaScript;
}

private void handleException(Throwable exception) {

System.out.println(
"--------- UNCAUGHT EXCEPTION ---------");
exception.printStackTrace(System.out);
}

private void initConnections() {
getButtonClearResults().addActionListener(this);
getButtonEvaluate().addActionListener(this);
getButtonClearScript().addActionListener(this);
}

private void initialize() {
setName("ExpressionEvaluator");
setTitle("BSF Expression Evaluator");
setSize(426, 240);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container cp = this.getContentPane();

cp.setLayout(new BorderLayout());
cp.setBackground(new java.awt.Color(228, 223, 228));
cp.setForeground(new java.awt.Color(0, 48, 104));
cp.add(getContentsPane(), "Center");

initConnections();
initializeBSF();
}

protected void initializeBSF() {
if (_mgr == null) {

System.out.println("Initializing");
_mgr = new BSFManager();
_mgr.registerScriptingEngine("", "", new String[] {});
getLanguageChoice().addItem("javascript");
getLanguageChoice().addItem("ruby");
getLanguageChoice().addItem("jython");
getLanguageChoice().addItem("beanshell");
}
}

public static void main(java.lang.String[] args) {
try {
ExpressionEvaluator aExpressionEvaluator = new
ExpressionEvaluator();
aExpressionEvaluator.setVisible(true);
}
catch (Throwable exception) {
exception.printStackTrace();
}
}
}

星期日, 10月 10, 2004

願景VS畫大餅

夢想總是美好的而夢醒後的現實卻是那麼地殘酷。
描繪美好願景與畫大餅之間往往只是一線之隔。
但其實有沒有開誠佈公把如何實踐願景的部份,
拿出來與整個團隊討論是很重要的一件事。

往往看到一些領導者講好聽是在描繪願景,講難聽點就是畫大餅。
如果無法與伙伴們一起挽著袖口下來實踐,思想上的巨人、行動上的侏儒,
面對一意孤行的領導者最終我們只能對他說:千山您獨行、不必相送囉~

當然民主的討論對公司發展未必是件好事,
人多嘴雜往往導引而來天馬行空的意見更多。
但是一個好的領導者應該要像傳教士般不停地傳達自已的信仰,
慢慢引導及轉化讓追隨者真心相信這個願景,
接著才能一起努力實踐,
不是領導者的、你的、也不是我的,而是大家共同的願景。

若是上下交相賊,同床異夢的團隊。
那難保每個人的心態不會如同國共抗日時,
共產黨所謂七分發展,二分應付、一分抗日囉~
理想的狀況應該是讓理念相同的人自然結合,
而有不同理想的人就讓他去尋別的夢吧。
當每個人都為自已的理念奮鬥的時候,整個團隊自然能發揮最大效益。
即使最後不見得能到達夢中的彼岸,但至少大家一起努力過也能使心中無悔吧。

邂逅套裝美女

下午出門辦事情,辦完想說反正人都已經出來了,就順便去誠品逛逛,補充一下精神食糧吧~在雜誌區翻完當期雜誌,呣~轉去電腦資訊區看看有沒有出啥米新書。剛從架上隨便抽了本新書翻翻。突然背後冒了個聲音,

'先生,可以請教一個問題嗎?'
是個身著套裝的美女。真可憐假日還要上班,看起來有點像才剛下班的樣子。
有點被嚇到,回頭指了指自已。
"呃~妳在問我嗎?"
'是呀~我家裡的電腦有點問題,想請教一下'
(接著講了一堆啥米開不了機的狀況,聽起來有點像中毒的樣子)
心中OS:呃~不是每個站在這翻電腦書的人都懂怎麼解毒啦~

沒辦法,輸人不輸陣~美女當前面子還是要顧,
反正亂掰她也不懂,硬著頭皮開始掰:
"呃~有可能是電腦中毒囉~""你有開機片嗎?要用乾淨的開機片開機,然後再試試用掃毒軟體掃掃看喔~"
'.......................................................................................................................'
果然不出所料,看著她水汪汪的大眼睛一副無辜又無助的樣子,
一副就是聽我在講火星話的樣子,看來已經成功的唬住她了。
順手在架上挑了本那種199的PCHOME出的入門書。
"妳看喔~這本書有step by step,妳可以買這本回去試試看。"
'ㄛ~謝謝你ㄋ。'

看著她拿著書翻閱,呣~該是功成身退的時刻到了,正回頭準備要閃去找別的書翻翻。突然又被她叫住。
'ㄝ~你可不可以留電話給我呀~'
"呃~妳要我電話..........做啥?"
'ㄛ~醬我回家弄不出來還可以再打給你問呀~'
心中再度OS:我咧~大小姐,有沒有搞錯,我又不是在光華賣電腦的。
蠻無奈的留了電話給她。互道了珍重再見後。

看著她興高采烈抱著書去結帳,轉過身的我,心中還是不免有點忐忑不安地想著,
她該不會真的打來問吧。

待續.....(如果她有打來問的話)

- - - -
好吧~我承認這篇是很單純的嘴砲炫耀文
【以上故事中所提及任何個人、團體、場所,如有雷同,純屬虛構!!! 】

星期六, 10月 09, 2004

【蛀蟲時間】管理的樂章

管理的樂章
真是好久沒好好把一本書啃完了。
講起來會發現這本書還真有點故事,
其實這本書是宣明智先生在今週刊上的專欄集結整理而成,

而其實平常我是不看今週刊的,
多半我都是中午吃過飯經過便利商店買個飲料時,
順便翻翻架上的商業週刊或是壹週刊,

前幾天不小心翻到今週刊,咦~這專欄寫得真有意思。
有趣的小故事配上宣先生管理上實務的經驗。
再一翻翻原來都已經集結成冊啦。
二話不說就到誠品把它帶回家。

一口氣讀完除了一個爽字外,
還真是找不到第二個字來形容。
難得的是書中充滿著宣先生真誠分享其管理的心得與喜悅,
而非一般企業領導者所出版之個人公關形象書。

節錄幾段書中佳言:


‧簡報要秉持「解決問題,報告成果」的原則,而非「報告問題、解釋原因」
‧管理的秘訣就在於把複雜的事情簡化。‧管理就是共振,領導人扮演的就是共振源的角色,
就像樂團指揮,引領企業團隊奏出美妙的樂章。
‧市場常常無法用常理去判斷,遇有狀況,就面對它,
向它低頭,並趕快找出解決辦法。
‧用低價搶來的業務是最沒有價值的。真正的業務員應該要了解客戶的需求及公司的能力,
藉以提供客戶最佳服務,並獲得合理價格。
‧高科技成功的要素包含技術、團隊、創新、管理以及商業模式。
資金並不在其中,因為好的投資案不愁找不到資金。
‧管理的首要工作就是找到對的人,把人找對了,比做任何事情都來得重要。

--
喔~對了,即使是看過原先週刊上專欄的朋友,
這本書上還補充了不少後記及相關的照片及文件喲~
例如想看看宣先生五十年前是怎麼設計求職信嗎?
雜誌上沒有的,書中可是一樣都不少哩~ ^_^

憶起那段渾渾噩噩時期的童年往事

不知道為啥,今早起來時作了一個夢,
突然想到以前學生時代的一些事情。
那時實在非常的混,許多剛接觸BBS的人大概也會如此吧。
有段時間幾乎每天沉浸在打B的世界裡。

那時我老是呆在網路實驗室裡打B,
日也操,暝也操。最後連夜間部的學生都跟我很熟哩。
不過也因此發生不少趣事。

有次教師節要送卡片,身為班代的我想了一個點子,
在每張卡片上都附上一段打油詩。
記得上課最自由讓我印象最深的是教授組合語言的教授。
那時我寫的是:

最愛教授組合課,
可上網路真快樂,
只見教授賊賊笑,
網路統統被切掉。

呵~到現在我一想到教授剛收到卡片時的表情,
還是忍不住要從夢中笑醒~ XD

常態性加班管理症侯群

Type A:不思長進之標準豬頭
完全不會從錯誤決策中得到教訓,一而再再而三的反覆犯錯。
最後火燒屁股時反正就是這一千零一招。
沒有功勞也有苦勞、沒有苦勞也有疲勞,將帥無能累死三軍甚莫於此。

Type B:老奸巨滑之黑心羊頭
心機深沈以能壓榨員工最後一滴精血為樂。
凡事能拗盡量拗,規劃開發時程決不保留buffer time,
條條大路都是Happy Path一根腸子就可通到底。
美麗藍圖下盡是工程師的血淚,掛著羊頭賣狗肉甚莫於此。

有識者遇到患有此二種類型症狀的管理者,能即早看清現實就儘快轉換吧~
良禽擇木而棲,相信台灣還是有管理良好的工作環境在等著你。

該是到了停下腳步好好想想的時候

工作了幾年一直沒有好好休息一下,
終於逮著機會乘著這次準備轉換工作的空檔,
放了個長假到韓國玩了五天。

不過這次蠻冒險的,還沒找好後路,
就直接辭了目前的工作。
或許這樣也好吧,被工作填滿的生命,
已經漸漸失去了原有的光與熱。

富爸爸一書裡有個觀點不錯,
光憑著努力工作並不會導致成功,
唯有透過不斷的思考才能找出一條活路。

這個論點與孔子所言:「學而不思則罔,思而不學則殆」。
似乎有異曲同工之妙。乘著這段空檔好好看個幾本書。
沈潛一下充充電再出發。畢竟休息是為了走更長的路嘛。 ^_^
或許這段日子會比較有閒寫些遊記或讀書心得吧~

星期四, 9月 30, 2004

白い巨塔 占い

http://u-maker.com/37286.html

Poyaさんは、
「白い巨塔」のキャラでいうなら、 関口仁 です★

● [関口仁]なあなたは、人と違ったことをしたい、
奇抜なタイプです。自然とマイナー嗜好になり、
誰も知らない分野のことにカナリ詳しかったりします。
内面は誠実なのですが、普段の行動から誤解をされることはしばしば。
それでもあなた自身は、誤解されても仕方ないか、
と考えているフシもあります。異性に対しては、
自分と違った、ごく普通の相手に惹かれます。

怎麼會是關口!!!
我想當財前呀~ XD

--
還好不是鳥飼料教授 -_-|||

星期三, 9月 22, 2004

Java連線版之怒火燎原

沉寂以久的連線版最近又開始熱絡了起來,
在一陣你來我往的爭論中,果然牛肉就跑出來了。 ^_^

感覺上重點應該是擺在建立節省不必要記憶體浪費的觀念,
而非是GC是如何實作。尤其當一個團隊在合作開發時,
若成員中缺少這方面的共識,一旦出現OutOfMemory的問題時。
萬一起因為memory leak,不能裝闊加ram解決時,
靠~那可不是開玩笑,要debug起來真是會de死人 >_<

不過參與討論時,一個基本的態度應該是先把整個討論串看完。
不然真是會討論到張飛打岳飛、打的滿天飛~
沒想到為了這種鳥事還跟人吵了一架。

結論:Java果真是殺人於無形呀~ -_-|||

星期四, 7月 29, 2004

想偷偷推一下JBuilder

最近看到yoshi講他一氣呵成寫完程式再到Compile時,
只有幾個exception忘了catch,其它竟然完全沒錯。
突然覺得若是他平時習慣的是一套強力的IDE工具。
如Eclipse or JBuilder之類。
搞不好就真的一氣呵成寫完包jar直接發佈出去哩。

老實講是覺得習慣一套IDE工具對工作效率提升有很大的幫助,
當然工具好不好用往往跟習不習慣是正相關的,
我也見過真的有人就只用Ant + 純文字編輯器一樣工作效率很高。
只不過這樣的高人就像是天邊漂流的浮雲般令人望塵莫及,
記憶力薄薄大概只有如二張紙片的我,也只好想辦法尋求凡人的救贖之道。

先感謝Borland製作了JBuilder這般神奇的工具。
但其實也並不是對Borland有所信仰,每次聽說別家有一些神奇的新功能時,
也是會興致勃勃地去灌來試用看看。
但到目前為止最終留在硬碟裡的還是JBuilder。

讓人脫離不了JBuilder,主要是因為那些基本的語法自動檢查、程式自動排版外,
其它還有像是find Definition、find (Local) References等…
上述功能配上整合GUI環境的Debug mode,追流程、查bug真的是超easy

快速開發上提供了JavaBean Express及與各種framework整合的Deamon,
Deamon設定完順便還可產生簡單的Test Client。
另外對refactoring的支援也不錯,至少一般常用的都有了。
接下來習慣hot-key後,工作效率馬上再次提升至少一個檔次以上。
該怎麼說呢?這就好像一個用慣嘸蝦米輸入法的人開始學會打簡碼的感覺。

再加上還可設定與CVS的同步、簡單的DB Pilot,程式寫完自動包成jar檔…
好用的功能真是數也數不清,像是java doc那些,也是用介面簡單key-in就好,
不然誰記性那麼好去背那些tag呀 :p

在Borland買下Together後也有推出與JBuilder整合的版本。
爽的話還可以來個雙向工程作業,畫畫圖code框架就跑出來,
不然code寫完,像sequence diagram這類的鳥圖自動幫您生出來,
相信在為了緊急應付一些紙上作業時真的會讓您感到愉快許多 XD

廢話講了那麼多,講真格的有時夜半無人自已用用JBuilder都嘛會偷笑。
神呀~這世上怎麼會有這麼好用的IDE,
我真怕有個萬一Borland倒了以後用不到了要怎麼辦呀 XD

星期一, 1月 05, 2004

陰錯陽差上海行



八零年代看深圳,九零年代看上海,上海人有句順口溜是這麼說的。而在一般的印象裡上海是個薈萃了東方典雅和西方浪漫的遠東城市。前天中午才被告知可能要到上海一趟,沒想到隔天就得趕下午三點的飛機。講起來也真好笑,我根本是個零方向感的路痴,在台北都常常迷路的人。結果到了大陸反而得一個人到處跑來跑去的,害我老緊張的要命,腦細胞不知死多少。心裡常想著:靠~大陸那麼大,萬一迷了路那可不是開玩笑的。

為了趕時間打D到寶安機場,沒想到搭到輛瘋狂計程車,一上路就猛飆。我哩咧~大哥我們不是在拍終極殺陣TAXI-4,雖然我是想趕時間,但也不是醬子趕法好不。瞄一下時速表,最高到160,平均也有130…真懷疑這台破車真能飆那麼快嗎?不過的確比預估的時間快得多,本以為要1小時的車程,沒想到半小時左右就到。急急忙忙買了機場稅,check in機票後,沒想到大陸境內入關檢查那麼嚴格。全身掃描外還得脫鞋檢查,連帶瓶礦泉水都得倒一點出來檢驗一下。搞半天終於上了飛機,看著地表上漸漸模糊的建築物,慢慢的眼皮也開始沈重了起來。

聽到廣播得知即將抵達上海後,很興奮的從窗外望出去,只不過這一眼望下去卻都是田地,有點想像不出上海的繁華景象。一下浦東機場,猛的一陣冷風吹來。算算上海現在大概14度,比起深圳動輒20度以上的天氣的確是涼了點。出了機場東南西北都還搞不清楚,疑~前面不就是我要搭的機場六線巴士嗎?還好這次運氣不錯,竟然沒花多少功夫就找對路。這下終於可以放鬆心情,欣賞一下路邊風景了。不一會兒就到了彌漫著白玉蘭花香,中國軟體產業基地之一的上海浦東軟件園。

20031127