2014 IBM Master the Mainframe World Championship

ibm

Participation

“Is this OOO?"

“This year, we would like to hold a Master the Mainframe World Championship."

The beginning of this story was like a dream — just as I came up with the idea to finish my reflection on the 2009 Master the Mainframe contest, I got a call from IBM Taiwan. They asked me whether I would like to join the first-ever Master the Mainframe World Championship.

“We will invite students around the world who have won Mainframe contests in the past to join this IBM Master the Mainframe World Championship. Participant must still be a student and be willing to complete some introductory challenges remotely and to go to New York City for the final rounds. This is a great opportunity to meet talented people and all expenses will be paid by IBM. Are you willing to participate?"

“Sure."

It had been so many years since my last participation in the 2009 IBM Mainframe contest, so I was rather surprised by the call. Although I was not that keen on travelling, I still felt it would be a good thing to go to see the US. This could make me braver. The opportunity to demonstrate and present my work before everyone would also be a good way to improve myself.

The competition had three stages; and in addition to technical challenges, we had to write three reports and to demonstrate our work in person. The competition started from 3/10 and participant could complete different tasks at his own pace. But we did have specific deadlines for the reports. Preliminary rounds for demonstration were held in the US, and 6 finalists were selected. The final rounds were held on 4/7. All challenge documents can be found on the website.

Story

The technical challenges didn’t take long to complete, so it went pretty smoothly at the beginning of the competition. However, there were some ambiguous instructions. Since I always preferred it to be precise, I had many email conversations with IBM before I finally solved some problems. In this process, I figured out a logical error in the code of the tasks, so IBM changed the instructions to ask participants to fix it.

Meanwhile, I got a lot of support from IBM Taiwan, and we also had several oversea teleconferences, where we could ask technical questions and listen to lectures about the business trends that could help us write the analysis.

When I finally started the implementation of the bank application, I heard that someone asked whether it’s okay to use PHP instead of Liberty for the development and was given the permission. Since I was unfamiliar with Liberty development using Java, I also decided to use Django for the backend application. However, the DB2 driver given only had JDBC support and cannot be used with Django. So I searched for a while for Python drivers, but I had never succeeded in making it work. Finally I realized that a license file was needed to use the driver, so I sent an email to IBM, and they told me they would try to figure out the solution, but Liberty was still recommended.

But I didn’t want to give up. I spent more time searching, and I found that I could use Jython to execute an old version of Django. In this way, I could use JDBC. So I finally started to develop my web application. After some time, IBM released a trial license file for us to use, but the version did not match the software package on the website, so I spent some time to find the correct package. However, even if I solved the license problem, I still got permission problems when I connected to the DB2, and only after I contacted IBM for this did I make it work. So I finally could use the latest Django with Python. I think this might be the biggest challenge that I solved during this competition.

During the development of the application, I learned a lot about jQuery and Bootstrap. It had really been a long time since I was involved in front-end development in the past, and I had never had opportunity to learn these two libraries. I was really surprised by their capability to construct a beautiful interface in such a short time.

Since I only had 6~8 minutes for demonstration, I couldn’t demonstrate any advanced, complicated features even if I wanted to. So what kind of extra features should I make? I wanted to have a creative and easy-to-understand feature, so I finally decided to create a mobile app that could disable and enable a debit card in real-time. With this app, one could enable the card before an online purchase, and disable it immediately afterwards so nobody could make an illegal payment with her information.

Originally the instructions were that the final rounds were mainly about demonstration, and there was no need to do a presentation. But after a rehearsal, I realized that I was unable to state my ideas clearly during the demonstration. If I wanted to make a good impression, I must first do a presentation before the demonstration.

New York

After I finished my slides I soon started my journey to New York. I first arrived in Tokyo, Japan for a transfer, and finally got to New York in the afternoon. After I arrived in Waldorf Astoria, I only had some time to put my luggage. I then had dinner with other participants, and on the early morning next day, we must start our preliminary rounds.

I was a little excited and nervous before the presentation and kept checking my mobile phone and presenter. But after I got on stage, everything seemed to work smoothly and the time passed so fast. The judges seemed to be excited about the mobile app, and I got good feedback from them.

We then visited the zEnterprise plant, had dinner, and went to Times Square. I really felt that the amount of food provided by the restaurants there was so much that I often accidentally ordered too much.

The finalists were announced in the next day, and I was really happy to be selected.

Final Rounds

After some preparation and interviews, the final rounds finally began. I had to stay in one room, and 6 judges would come to different rooms one at a time, so I had to give 6 consecutive presentations. I was really tired after 6 rounds. Other students would go with the judges, so they would also be able to see the work of 6 finalists. The judging style of different judges were very different. Some judges were very strict, and some were very encouraging.

I still remember a judge asked an unexpected question: “How do you think programming can make the world a better place?"

I also gave an unexpected response: “Actually programming can solve many problems. For example, we can even make the government more efficient and more transparent. We can make every modification of the laws easily understandable (using something like a version control system), or visualize budgets of the government." (I don’t really remember exactly what I said, but right, I was paying a tribute to organizations such as Code for America, Code for Tomorrow, and g0v.)

Wining

Maybe it’s because of some news reports in Taiwan, I suddenly received a lot of congratulations on the Facebook. It really made me feel a little overloaded, and it took me several days to reply. The influence of the media could be really big, and I also felt very impressed after I read the reports. Haha, it actually seemed a bit unnatural. When I saw the word “genius", I suddenly recalled the conversation when I was being interviewed at IBM Taiwan before the competition:

An experienced member at IBM said that he felt that one must have the gift to be in the software industry. Not everyone would like to work so hard to study a problem. I said I didn’t really agree with this. I thought hard work and the time spent was more important. Considering the fact that I spent a lot of time on the computer since I was in the elementary school, it should not be surprising even if I did well.

Afterwards, someone said: “I think he didn’t mean you have to be gifted. What he meant was that personality was important." Maybe. But I couldn’t help but start to think that this kind of thinking implied that — “Personality itself is a natural talent. Or to be precise, the capability to work hard is innate." So it could also be interpreted negatively — If you didn’t have the talent to work hard, you couldn’t even try to work hard. To be honest, I didn’t really want to accept this kind of world.

It seemed to be again a deadlock between nature and nurture. Wasn’t there already a answer for this question? The two affected each other, and no single factor was unimportant. Every known and unknown factor worked hand in hand, it’s just that we humans tended to attribute to some simple reasons — just like what I am going to do next:

The Perfect Factors

When I was talking with students from other countries, I mentioned that I had been reading Thinking, Fast and Slow recently. I was unable to explain clearly what the book said, but I was surprised to meet someone who also had read this book. A passage in the book went like this:

A recurrent theme of this book is that luck plays a large role in every story of success; it is almost always easy to identify a small change in the story that would have turned a remarkable achievement into a mediocre outcome. Our story was no exception.

I felt, my story was also the same.

It took too many coincidences and factors to win this prize. Even if one factor had been missing, the result might not have been the same. I felt really lucky and thankful for this.

Everything started when I was a child. I was lucky enough to learn some web design. Because no one in my family was in the computer industry, I spent a lot of time learning by my own. Therefore, I acquired the ability to analyse a system by trial and error and became familiar with searching for solutions. That’s why I was able to solve the difficulties in the competition.

In the junior high school, I was bored by the English grammar courses, so I decided to find a new way to learn English and started to read a lot of books. English gradually became my interest. The long hard work enabled me to read technical documents efficiently and allowed me to write good reports. Moreover, the practical experience I got from Wenzao English Debate Workshops and National Taiwan University English Debate Society sharpened my communication skills. In the 2009 competition, I already felt that English was a great advantage to win. This time I felt this was even more true.

Even if my English was good, it’s still impossible for me to be better than native speakers. But there was another factor which might be even more decisive: the presentation skill itself. I got interested in presentation when I learned the Takahashi method in senior high school. Afterwards, I prepared every presentation thoroughly to sharpen my skills. In the last semester, I happened to take the course Speaking in the Disciplines, and learned some voice techniques. And I got a presenter as the prize of the final presentation on that course. This helped me a lot in the competition.

However, technical skills and presentation alone were far from enough. To write the analysis documents, I still needed background knowledge. I happened to take the course Introduction to Cloud Computing and Big Data last semester, and learned some ideas to help me write the reports.

Even the smart phone that played an important role in the competition was just bought for several days. I had been using my old traditional phone for more than 4 years, but it suddenly broke. That’s why I decided to buy a new one. Without the phone, even if I wanted to make a mobile app, I might not be able to borrow a phone to realize it.

And finally, about the idea to enable and disable the debit card in real-time. This idea actually originated from a feature of the Chunghwa Post debit card. It allowed us to use an integrated circuit card to sign in the webATM, and from the webATM, we could disable online transactions and foreign payments for the card. I really loved this feature, and I always disabled it until I really wanted to make a purchase.

In early January, I came across a post on the Bank_Service board on ptt.cc, and the author asked whether other banks had the same feature, but nobody seemed to know one. So I learned two things: (1) Other people also liked this feature. (2) Almost no banks had this feature.

But using webATM and an integrated circuit card was just too complicated. It didn’t make sense if we want to disable and enable the card frequently. Why not use a mobile app? So this became my final idea.

This feature could potentially save the bank a lot of money. Moreover, it could give a sense of security to people like us, and made us more willing to accept debit cards.

Just like this. Every factor worked together so perfectly. Even if just one had been different a little bit, the result might not have been the same. This itself was incredible.

廣告

2014 IBM 大型主機世界盃心得

ibm

參賽

「請問是 OOO 嗎?」

「今年,我們想辦一個大型主機的世界盃比賽…」

故事的開始彷彿夢般,就在我開始想執筆寫〈2009 IBM 大型主機校園競賽回憶〉的時候,接到了來自 IBM 的電話。詢問我參加第一次大型主機世界盃的意願。

「IBM Master the Mainframe World Championship 將會邀請曾參加過世界各處地區賽並得獎的選手一同參賽。競賽者需為學生身份,並願意在百忙之中先遠距接受挑戰,最後到紐約會師進行決賽。競賽者將可以和來自各國同樣鑽研技術的學生會面,且食宿全程免費。不知你是否有意願參加!」

「好喔。」

距離上次參賽已那麼多年,接到這樣的邀請其實也很意外。為什麼會想參加呢?雖然自己也不是很熱衷旅遊的人,不過總覺得能到美國看看總是件好事,能讓自己的膽量再提昇一些。而能有這樣的機會在大家面前展示自己,一定能成長許多吧。

比賽的內容共含三個關卡、三份文件撰寫和最後的成果展示。比賽從 3/10 正式開始,參賽者遠端按自己的步調慢慢過關,但文件撰寫則有限定的繳交期限。四星期後,4/6 在美國進行準決賽,選出 6 位決賽者,然後在 4/7 進行決賽。遠端競賽的所有文件都公開在網站上,也可參考「比賽內容」段落的簡單節錄。

過程

比賽剛開始其實是相當順利,前面的技術挑戰破的很快。只是有些題目有語意不清的敘述,總是追求精確的我和 IBM 經過許多的信件往來才慢慢解決一些問題。後來還發現了題目中程式碼的邏輯錯誤,IBM 知道以後就在題目中要求大家更正了。

在此同時,也受到台灣 IBM 的熱情支持,讓我可以用中文詢問問題而無語言之憂,其後也受到不少幫助,連沒有合適的筆電可以參賽也幫我處理。而比賽過程裡還有多場越洋的會議,可以提出各種技術問題尋求解答,也有資深的前輩幫我們惡補產業趨勢,好準備撰寫文件。

後來進入銀行程式的實做,聽到有人問說是否可以用 PHP 代替 Liberty 來開發網頁後端獲得了同意。由於我對 Java 配合 Liberty 的開發不太熟悉,我也決定採用 Django 來進行後端實做。只是原本的 DB2 連結元件只有提供 JDBC 而沒有 Django 的版本。於是我在網路上搜尋 Python 的 driver,但一直建置不成功,花了不少時間研究才發現需要授權檔。趕緊寄信通知 IBM,他們說會嘗試解決,但建議還是使用 Liberty。

但我怎麼會輕易放棄呢?後來經過一番搜尋,發現可以用 Jython 執行舊版的 Django,如此一來,就可以使用 JDBC,於是我就在這樣的情況下開始製作網站了。製作到了一半授權檔才終於釋出給大家,只是授權的版本跟網站上的最新版 driver 不合,又花了不少時間才找到正確版本檔案的下載點。好不容易通過授權,連上 DB2 還是出現權限問題,最後跟 IBM 聯絡後才終於解決。終於可以使用最新版的 Django 了。對我而言,這個相容性問題大概就是比賽中遇到的最大難題吧。

寫著寫著 App 覺得學到最多的其實是 jQuery 和 Bootstrap 的使用。太久沒有接觸網頁前端了,對這兩個曾有數面之緣的程式庫一直沒有機會深究。這次的開發也對他們能夠快速做好漂亮界面的能力感到十分驚訝。

只有短短的 6~8 分鐘,就算加上什麼複雜的額外功能也無法順利展示。究竟要加上什麼功能呢?我希望能找到一個容易理解又有創意的功能,最後決定用手機來實做 Visa 金融卡即時停用與啟用的功能。只要有了這個 App,就可以在網路刷卡前啟用卡片,刷卡後立即停用,即使別人擁有你的資料也很難盜刷了。

原本 IBM 的提示是最後的展示以 demo 為主,而沒有簡報的要求。然而實際預演過一次後我馬上發現 demo 時根本無法清楚表達自己的想法。如果要在短時間內達到好印象,一定得先簡報再 demo 才行。

紐約

很快的做好投影片,就啟程紐約了。先是經過日本東京轉機,到了紐約大約是下午。很快坐上接駁車,就到了 Waldorf Astoria 旅館。整理一下行囊並簽到後就和大家一起去聚餐,然後隔天一早馬上就是準決賽。

比賽前有點興奮也有點緊張,仔細檢查了簡報器和手機確定一切功能完好。上台的時候一切順利,感覺時間一下就過了。評審好像都覺得手機 App 的主意不錯,還有人覺得應該申請專利呢。

後來先去參觀工廠,再去聚餐和逛逛時報廣場。總覺得紐約的餐廳份量都好多,一不小心就會點到過量的食物呢。一直到了隔天才終於公佈進入決賽的選手,可以晉級真的很開心。

經過最後的準備和一些採訪,終於開始決賽了。決賽是自己待在一間房間,六位評審輪流到各房間評,所以要連續講六次啊,講到最後都有點累了。有的評審嚴格拷問,也有評審很親切的鼓勵我,感覺風格很不一樣。

還記得有個評審突然問了意料外的問題:「你覺得程式設計可以怎麼樣讓世界變得更好呢?」

我也給了自己都意外的回答:「其實程式設計可以解決很多問題,比如說甚至可以改進政府效能,或透過開放資訊的方式提昇公民參與。像是把所有修法紀錄用簡明的方式呈現,或是政府預算視覺化等等。」(其實我忘記確切的說詞了,不過沒錯,我其實是在向類似 Code for America, Code for Tomorrow, g0v 等組織致意。)

得獎

好像是因為有新聞的報導,臉書上突然多了很多道賀的訊息,讓我一時有資訊過載的焦慮。花了數天時間才一一回覆。想起來媒體的影響力真的很大。後來自己看了報導也覺得彷彿很厲害一般,哈哈,真有點不真實。看到「天才」這個詞,倒讓我想起當初比賽前在 IBM 接受採訪時的小對談:

記得 IBM 的前輩說,他覺得從事軟體業是需要天賦的,會願意這樣努力鑽研,不是每個人都辦得到。那時我說,我其實是反對這種看法的,我覺得努力和付出的心力比較重要,假設考慮到我從國小就花了無數時間研究,那麼現在看似表現不錯不也是很正常的嗎?

後來後來,有人說:「我想其實他的意思不是說天賦,而是說個性很重要吧?」嗯,或許是的。不過我總覺得這種說法背後隱藏著更大的假設。那就是,個性本身也是一種天賦。或者更進一步的說,努力也是一種天賦、一種天才。而這種說法似乎可以悲觀的解釋成,如果你沒有努力的天賦的話,那根本連努力都辦不到。老實說,我還沒有準備好接受這樣的世界。

這樣思考下去彷彿又會陷入先天後天的無限循環,這個問題不是本來就有答案了嗎?其實兩者是互相交互影響的。沒有一個要素不重要,所有已知或未知的條件環環相扣。只是人類有時總喜歡把事情歸因到些明顯的理由,就像我接下來要做的一樣:

對的要素

和其他國家同學聊天時提到,最近開始看《Thinking, Fast and Slow》這本書,雖然不太解釋得出裡頭在寫什麼,不過很巧的遇到也看過這本書的人。想到裡頭有句話是這樣的:

A recurrent theme of this book is that luck plays a large role in every story of success; it is almost always easy to identify a small change in the story that would have turned a remarkable achievement into a mediocre outcome. Our story was no exception.

我覺得,我的故事也一樣。

能夠得獎,實在是有太多的巧合與太多的要素匯集一地,如果少了任何一塊,就不會是這個結果了。對於此,我只感到十分幸運與感激。

一切都從小開始,幸運的接觸了網頁設計。由於家裡也沒有人從事相關行業,所以花了很多時間自己探索,也是這樣才養成了鑽研系統和搜尋解答的能力,所以才能順利解決比賽中的難關。

到了國中,為了克服枯燥的英文文法課,我另尋途徑,反而透過閱讀打開一片天。英文慢慢變成我的興趣,長年的累積讓我順利閱讀與撰寫文件。後來又經過文藻英語辯論工作坊和台大英辯社的洗禮,讓表達能力加強了不少。2009 年時就覺得英文和搜尋能力是贏得比賽的重要優勢,在這次國際性的世界盃更有同感。

但英文能力再怎麼好,也很難贏過母語的學生。所以,還有一個要素,就是簡報能力本身。感謝高中時接觸了「高橋流簡報法」,讓我嚐到甜頭。後來也因此用心鑽研,使得報告本身也變成了我的興趣。前學期還恰好上了「學術論文口頭報告」這堂課,學到許多口語技巧,剛好在比賽中派上用場。

但只有技術和簡報是遠遠不夠的。要能撰寫分析文件,還需要背景知識。恰好在前個學期上過「雲端運算概論」,學到不少產業趨勢和巨量資料的話題,讓我能源引許多知識在撰寫的文件當中。

而就連在比賽中扮演重要角色的智慧型手機其實也是在前不久買的。自己一直是用傳統的手機,但前陣子突然無法接聽電話了,這才下定決心買了智慧機。如果不是這樣,恐怕空有想法,也借不到手機實現吧。

最後最後,是即時啟用和停用 Visa 金融卡的點子,這點子的原型其實是來自郵局金融卡可以透過智慧卡進入網路 ATM,然後停用非過卡交易的功能。自己對這個功能情有獨鍾,平常總是將其停用,只有刷卡前才啟用。

在一月初,我在 ptt Bank_Service 版上看到有人詢問是否有其他家銀行有這個功能,結果似乎沒有找到。這讓我知道兩件事: (1) 有人跟我一樣對這個功能有需求 (2) 幾乎沒有銀行有這個功能。

只是用網路 ATM 實在太麻煩了。為什麼不用手機 app 隨時隨地停用啟用呢?這就是我最後完成的想法了。

這個功能除了可能有實質的安全保護外,或許更重要的是給像我們一樣的人有心理上的安全感,進而更容易接受 Visa 卡吧。

就這樣,每個要素完美的彼此扣合,匯聚於此。如果只是差了一點,也不會有此結果吧。

附錄:比賽內容

第一階段

由於這是個時程緊湊的比賽,只看前二階段的話,比起記憶中 2009 的大型主機競賽簡單許多。第一階段是大型主機的基本操作:包含 ISPF 界面、執行 JCL、編譯執行和修改 COBOL 程式、檢視系統 log、檢視 ZVM 系統資訊、用 SPUFI 以及 COBOL 程式存取 DB2 等等。

第二階段

第二階段先是執行並操作用 COBOL 寫成的簡單銀行程式,包含 ATM、後端界面等等。緊接著利用 z/OS Unix Services 來執行 Java 版的銀行程式,並進行操作。最後則是把這個銀行程式移植到 Linux on System z 上面。

第三階段

第三階段是要基於第二階段的文字版銀行程式,發展出網頁版的銀行程式。主要是利用 Eclipse 配合 Liberty,前端則用 jQuery 協助設計。在進到準決賽前僅根據螢幕截圖給分。

文件撰寫

首先分別以一頁為限制,撰寫兩份分析文件:(1) 什麼是 System of Record 和 System of Engagement (SOE)?而 SOE 的發展又會對 IBM Mainframe 造成什麼影響呢? (2) 當設計真正商業應用的銀行程式時,有哪些 middleware 需要被使用呢?

最後則是以「參加大型主機比賽,是否改變你對應用在大型企業的 IT 技術的看法?」為題,撰寫一頁的 Executive Summary。

成果展示

參賽者將會在評審面前進行約 10-12 分鐘的成果展示,其中包含 6-8 分鐘的銀行程式展示:

  • 餘額查詢
  • 存錢
  • 領錢
  • 交易紀錄
  • 停用帳號並觀察此時查詢餘額會發生什麼事
  • 其他額外功能

最後則是 2 分鐘的 IT 產業問題,及兩分鐘的 Executive Summary 及整體提問。

2009 IBM 大型主機校園競賽回憶

「你的筆電上怎麼有寫一些字啊?這是你自己用的嗎?」

「喔,不是啦,這是以前參加一個比賽的獎品,所以才有這些字。」

「是喔,是比什麼的呢?」

「這個嘛…」

時間過得真快,轉眼間這小筆電已陪了我四年。記得以前上課或到圖書館時偶爾會帶著它,返鄉時也是因為有他才能處理一些事情。如果少了它,好像很多事情都會不太一樣呢。

總是有人問起比賽的內容,但總是很難想起當初發生的許多事。回頭翻開網誌的草稿,發現其實裡頭躺了一篇寫到一半的心得文。除了心得,還寫了一些年少的煩惱與挫折。「所以這是當初沒有寫完的原因嗎?」我不禁莞爾。於是決定繼續把這篇心得完成,仔細回想這經歷的同時,彷彿也在回顧自己的成長與改變。

碰巧的是,就在我決定重新執筆的那幾天,我突然接到了一通電話。

「請問是 OOO 嗎?」

「對。」

「你好,我是 IBM 的 OOO,記得你曾參加 IBM 大型主機校園競賽…嗎?」

參賽

一切都得從大一開始說起,就是那時參加了「IBM 大型主機校園競賽」。這個經歷對我的未來造成了不少影響,當年不太成熟的我實在料想不到吧。記得最早,是在交大 BBS – bs2 上的 NCTU 看板發現了這個比賽的訊息,因為看到只要過了第二階段就能拿到一個隨身硬碟,想說或許有機會得獎,於是就參加了比賽。

記得那時的我剛上大學,還正在摸索如何分配突然多出的自主時間,使用了每週計畫表來規劃何時要做什麼事,並紀錄了實際完成的情況。由於大型主機比賽是透過線上闖關,所以我也把投入比賽的時間切成一小塊一小塊,散布在每週當中,成了我的例行事項。

比賽的內容共含三個關卡,每個階段的文件會公開放置在網站上。內容大略是:

第一階段

第一階段的目的是要熟悉大型主機的環境,文件上說只要一小時就能完成了。要透過文件的說明,利用 3270 模擬器連上遠端的 z/OS 主機然後建立一些資料,並執行程式。我們也拿到了一個填字遊戲,在三個階段分別會找到許多線索,就能慢慢將其填完。

第二階段

從第二階段開始,比賽的說明文件就不會記載達成任務的詳細步驟,只會有簡單的說明。挑戰者必須從許多參考用的電子書和資料庫中尋找教學,並仔細思考,才能完成任務。這階段的任務包含了利用 JCL 執行 REXX 程式、為 JCL 程式除錯、建立個人化的 ISPF 控制台設定、EBCDIC 編碼轉換、Unix 操作、撰寫數個 REXX 程式等等。

第三階段

第三階段有四個任務。首先是 DB2 的操作,要在 z/OS 環境中,透過 DB2 SPUFI 輸入 SQL 指令來建立指定的資料庫,或從資料庫中挖出指定的資料。還有透過 JCL 來執行較大量的 SQL 指令,將資料倒入資料庫等等。第二個任務,則是要利用 Interactive Problem Control System 來分析 IBM CICS Transaction Server Product 程式當掉之後的 dump 檔案,分析發生了什麼問題。第三個任務則是要操作 Websphere MQ 和 CICS,執行一些任務,並利用殘缺的程式碼完成一個伺服器端和一個客戶端的程式。第四個任務則是建立一個網站來呈現所有找到的填字遊戲線索。

得獎

老實說得了獎時還真覺得有點意外。一開始連大型主機是什麼都還不太明白,在過程中透過文件慢慢學習,竟也能一路過關斬將。能進入決賽是一開始萬萬想不到的。

仔細想想,因為大家對大型主機的了解並不深。所以獲勝的關鍵可能其實是:(1) 從一堆參考資料中找到有用資訊的搜尋能力 (2) 英文閱讀能力 (3) 一般性的資訊科技敏感度。這些能力以前為了學習 Linux 而在網路上大海撈針時真的有不少機會訓練。但除此之外,我恰好有學過一點點 SQL 可能也有不少幫助。

記得最後得建立一個網站來呈現填字遊戲,雖然文件上寫只要正確就好,美觀等等不影響評分。但我還是很堅持的做了點視覺設計,由於利用到當年還不被廣泛支援的 CSS 語法,所以還做了一些跨瀏覽器的調整呢。

撰寫此文時重新回去看文件,發現競賽規則上其實寫著「如果有多個人完成了填字遊戲,則呈現最好的網頁會得到額外的分數」,跟當時記得的美觀不影響評分似乎有所出入。由於中途確實曾修改過規則,不知是否就是那時新增的規定沒看到呢?或許,這變成了我最後領先的原因?

ibmmf2009當年的填字遊戲網頁

迷惘

或許真的太年輕,對很多事情的態度都太不成熟。

到了頒獎典禮只見大家盛裝打扮而感到有些格格不入、雖然有和大家聚餐的社交機會但總覺難以把握機會、和訪問者對談時實在也不知如何對應——當時還因為這些瑣事而有些迷惘。仔細想想那還真的是那時候的我很顯著的特徵之一:太在乎他人的想法。事隔多年,很多事情對現在的我來說好像也沒有那麼重要了。

那時害羞的我真的很低調。幾乎只跟一些親近的人提到了得獎的訊息,然後悄悄北上前往頒獎典禮,回來以後迅速的將獎品藏起,然後過著相同的生活。但後來接受了學校的採訪,照片放上了交大首頁,一切的故事也變得紙包不住火(?)。最多的反應倒不是從系上而來,而是在社團裡。彷彿一下子變成名人似的。非常認真的覺得一切有點不真實。

但到了下學期後,很快進入大學時代變化最大的時期。這些想法慢慢也被拋到腦後了。

影響

參加這個比賽,最直接的影響應該是找到了實作的樂趣。猶記得放假後在寢室認真寫程式的畫面,當時的室友似乎不太能理解呢。也是這樣的熱情,讓「自由行列」終於被實作了出來(見:〈從我的故事開始說起,自由行列實驗品: ibus-faft〉)。至今仍是我開發的比較完整的開放原始碼作品。

另一個特別的影響應該是被網羅到 117 實驗室幫忙開發手機專案,初次接觸了研究生世界,還認識了當時非常出名的學姐。後來我也繼續待在這裡進行專題的研究,一直到大四還常跟學長姊 meeting 呢。

因為待在實驗室開發手機軟體所以有機會把玩智慧型手機,這對我而言還算新鮮的經驗。若非如此恐怕我會對此浪潮一無所知。雖然離開實驗室後就沒有繼續接觸,不過等之後採購智慧型手機後應該還是會研究手機程式開發吧。

想起來實驗室的生活圈記憶還真算是佔了大學生活的一個重要部份,在這裡遇見了對程式有熱情又優秀的學生們。如果不是因為她們的背影,我對交大生活的想法一定會有很大不同。

從過去到未來

翻找了當時的往來信件,好多不復記憶的事真令人莞爾。就在這時候,原本以為會成為過往回憶的絲絲線線突然又開始交會。

「請問是 OOO 嗎?」

「今年,我們想辦一個大型主機的世界盃比賽…」

於是,接下來就是〈IBM 大型主機世界盃〉的故事了。

比完 2007 NPSC 的感想

npsc

這次的網際網路程式設計全國大賽恰好跟全國高級中學資訊學科能力競賽撞期,所以我的兩個隊友都無法出席。當然,許多高手也因此無法參賽。但自己並沒有想說有可能拿到多好的名次,所以這次十分反常的沒有特別緊張。最後的結果是第八名,離有「豐富」獎品的前六還差了一小段距離,不過倒是拿到了入圍決賽就有的 Microsoft Office 2007 標準教育版。

話說這可是生平第一次拿到正版的 MS Office 啊(別亂想,現在我用的是「正版」 OpenOffice.org 呢),內容完全一樣的非教育版好像標價 NT$14,390,而教育版只要 NT$2,990。不過國內似乎即使是一般人士也很容易買到教育版?就像隨機版也可以單獨買是一樣的情形。

這次上台北,最主要的目的該是吸取經驗吧,而且不只是比賽的經驗而已。

另外就是,Dev-C++ 的縮排超爛的呀,而且沒有 GVim 可用還真不習慣。忍不住會想,要是最後沒有把程式碼搞的亂七八糟的話,搞不好搞不好來得及解出數字拼盤呢!(雖說解出來名次也沒多大影響 XD)

前一晚,在台大的鹿鳴雅舍住的時候,因為和我同房的學弟們很晚才睡的關係,所以我也一直到半夜1、2點才睡著,嗯,雖說這是出外,比較不一樣。但我又想起了之前看過的幾篇文章:〈大學生,你是被煮熟的青蛙嗎?〉〈 想救大學生?關鍵在於「睡眠品質」〉

我開始擔心起我的大學生涯,因為有些事,跟室友溝通恐怕是沒有用的。特別是,像我這種,每天都大概十點到十點半就會上床睡覺的人。到時候也許可以調整睡眠時間,晚一點起床,但若要達到相同的睡眠時數,除非早上都沒課呀。所以,所以,真的很糟糕。

雖說可能大學會一直趕作業,以至於不得不熬夜。但也許我可以應付吧?至少我知道高中就已經有很多人說他們會熬夜讀書。而我,即使不熬夜,也能在南一中保持在組排十幾名上下。所以也許我可以應付吧?

所以,所以,不免會考慮,我是不是該放棄交大、台大。留在台南、留在家裡?

我只是想,活久一點。我只是想,保持在一個穩定的狀態、一個不斷學習前進同時能終身奉行的狀態。如果去了台灣大學,卻犧牲了睡眠,那真的會是我想要的生活?

還是要租房子,犧牲了金錢?呵呵,真可惜我沒有這種選項。

智慧鐵人,南區初賽

race

2007年7月14日,終於要出發前去崑山科技大學參加第五屆智慧鐵人創意競賽的南區初賽。早晨,下起了大雨。集合的時候經過許多小波折,幸好最後橘色香菇的成員們還是到齊了。

就這樣,抱著緊張的心情,我步入會場。即使到了這裡,我還是有點搞不清楚情況。等了數十分鐘,比賽終於正式開始。

第一關是要用一堆材料設計一個裝置讓雞蛋落下,卻不會破。嗯,我們的設計是用筷子築成一個支架,把蛋放在上面,然後整個支架用線綁著,繞過滑輪,利用吸管製作一種可以增加線的摩擦力的裝置,讓整個支架緩緩降下。不過一開始考慮不周,就埋頭開始做,結果遇到了不少問題:像是支架無法平衡以及支架旋轉無法使蛋落至指定地點等等。

最後是有點狼狽,時間到了,卻連測試都沒測過,急急忙忙的,又犯了一些小錯誤。

評審啟動裝置後,整個支架先是緩緩降了一點,然後所有的蛋突然都掉了出來,滑落地面。據我姊姊的形容是:

評審嚇了一跳,低頭看看腳邊。

三顆蛋都破了,不過有一顆蛋的裂口被夾鍊袋擋住(所有的蛋都是放在夾鍊袋裡的),所以蛋汁沒有流出來。回想起比賽規則:「蛋破掉的定義是蛋汁流出」,她對評審說:「沒有流出來耶、可是它沒有流出來耶」。

那評審轉頭和另一位評審交會了眼神,考慮了許久,最後終於決定讓我們過關。

總之,我們幸運的拿到了一顆蛋的分數,從初始高度算起來,大概有 20 分左右吧(滿分是 100 分)。

這下子,只好寄望第二關了?

休息的時候,看到一組竟然利用規則說明的紙建構出雞蛋滑行軌道,而且測試數次,雞蛋都沒有破呢,感覺真的好厲害。只可惜他們似乎沒有在時間內做完,真是為他們感到惋惜。

第二關是改錯字,一共有四題,剛開始看到題目的時候完全搞不清楚情況:這真的是古文嗎?怎麼完全看不懂?著急的和隊友交換了題目,更是驚恐,四題都讓人摸不著頭緒啊!

就在此時,終於有人發現其中的奧秘,原來,不只是框起來要我們改的部份,而是整篇文章都是錯字!所以不能從字,而要從音來理解,這真是折磨人!記得當時我一直想不起「甬道」的「甬」字怎麼寫,我明知這字是以前準備基測時我在參考書上學到的,想不到卻忘得這麼快呀。經過一番努力,最終還是只有陶淵明的桃花源記被完全解讀(畢竟有教過嘛)。

事後最令人驚訝的是,原來其中一篇竟是金庸寫的倚天屠龍記!原文如下:

他手執火把先爬了進去,招呼小昭入來。那甬道仍是一路盤旋向下,他這次學得乖了,左手挺著長矛,提防圓真再加暗算,約莫走了四、五十丈,到了一處石門。他將長矛和火把交給小昭,運勁推開石門,裡邊又是一間石室。

這間石室極大,頂上垂下鐘乳,顯是天然的石洞。他接過火把走了幾步,突見地下倒著兩具骷髏。骷髏身上衣服尚未爛盡,看得出是一男一女。

小昭和圓真都是要改錯的字,真是欺負人!小昭那句好像寫成「朝忽曉朝辱萊」之類的,當初我花了不少時間在解讀這句。

總之,接下來就是等宣佈進入複賽的名單了。好像因為某會場的作業緩慢的緣故(據說是工商展覽館),結果左等右等,竟然比預期還慢了一小時左右才公佈名單。

然後,我們橘色香菇隊……沒有在名單上呀……

所以,只好含淚退場。

最後,南區複賽的結果是,高中組的第一名為台南一中的「為什麼丁丁是嘴砲?你說說看啊你說說看!!」,裡頭好像有我認識的學長?然後接下來則是雄女和雄中的隊伍。

雖然最後我們沒能挺進決賽,但我還是很高興能參加,總之,這確實是一次很有趣的經驗。

今天,南一中,水上運動會

swimming

下午第一節,我在台南一中游泳池畔,一絲絲的寒意侵犯著身體,我懷著緊張的心情,望向對岸。

水上運動會,游泳接力——我,第二棒。

好吧,到底為什麼會出現這樣的場景呢?

其實從國小開始,就已經有游泳課了。實際上到底教了什麼,我已經忘了。只知道,多數的時間我都泡在水中,什麼事也沒有做。是的,我並沒有學會游泳,而我也無法開心的和別人一起玩。

國中的情形並沒有多大的改變,學會了水母飄,但還是十分怕水。記得一次暑假好不容易下定決心報名學校的游泳訓練班,以為終於能學會游泳了,但後來卻因人數不足無法成班,一切也擱了下來。

上了高中,終於能靠自己的雙手開創屬於自己的道路,正處在興奮時刻的我,終於突破水的恐懼,真正開始學習了。我進步的很快,但還不夠快,終於意識到,多年的差距並不是幾節課就能彌補的。

學校的考試,我竟通過不了。連浮版打水都無法到達 25 公尺,又何談捷式呢?

「我不想停止,我想成長。」抱著這樣的心情,我開始尋求一切我能找到的資源,在網路上找到了「e世代游泳課」以及名為「在生活中讓自己的生命向上提昇^^」的 blog,我學習著每一個動作的要領。

每個週末的早晨,我騎著腳踏車,往南一中那委外經營的游泳池前進。就這樣練習著,一開始就只是打水,一小時、兩小時,游了好多次,卻似乎一直沒有進展。後來遇到了位親切的男子,他說:「一直打水挫折感不會很大嗎?因為打水是最難的部份。」我才終於了解,不過無論如何,還是要學習啊。大約到了第七次的時候,我終於結束打水的階段,進入手部動作。在那之後,果然進步的快多了。

後來考慮到交通時間的浪費,轉到星期五的下午游泳。不久之後,得知了水上運動會的訊息,伴隨著的,是件瘋狂的事實:我們的康樂股長竟然說什麼因為沒人想參加,所以選手要用抽的!而且,我竟然被抽到了!

當時我根本不會換氣,更遑論要游到對岸了。康樂股長器定神閒的表示,停在水中不算犯規,只要別走路,再重新開始游即可。

什麼跟什麼啊!

生活還是得繼續,世界不會停止轉動。就在比賽前一個禮拜,我竟恰好第一次用捷式游過 25 公尺了!只是回來之後,我也感冒了。即使這樣還是要參賽嗎?對。

裁判鳴槍,比賽開始。而我,竟不知自己到底能不能成功游至對岸。我往前一躍、身體打直、雙腳打水、雙手划動,然後,然後,嘿!我成功了!

雖然,我們的隨機隊伍顯然沒有得到太好的成績;雖然,我的動作還是不太協調。但,我成功了呢。

智慧鐵人創意競賽

前些日子姊姊興沖沖的找我和她一起組隊參加比賽,所謂的「第五屆智慧鐵人創意競賽暨第三屆國際邀請賽」

race

「智慧鐵人創意競賽」是以國內與國際高中、職學生團隊為對象……它以充滿未知數的人生為藍圖,將電玩世界的英雄與電影的情節拉入日常生活,它像迪士尼樂園 (Disneyland) 一樣充滿新奇有趣的遊戲,也像電玩遊戲一樣有刺激、冒險的闖關競技與真實且存在的任務。

主辦單位說道:題目包括國文、歷史地理,自然科學,美工等,更重實作、創意與體能,鼓勵不同專長成員共組隊伍。看了一下歷屆題目,看到:製作一結構物,以飲料包將礦泉水瓶抬起,並將橡皮擦發射至指定範圍內什麼?這確實是充滿創意,但同時也好難呀!

細讀比賽詳則,似乎真的非常非常有趣,非常非常具有挑戰性,所以我就答應姊姊參加啦,每隊最少四人,最多六人,而我們這隊目前包括我姊姊的某位同學,只有三人,也不知何時會成軍呢。我們決定組成六個人的隊伍,隊名就叫「橘色香菇」!

然後,它的決賽竟然是三天三夜連續不中斷挑戰關卡呀:

決賽比賽規則

  1. 參賽隊伍在 72 小時的比賽時間內完全與外界隔離,以確保競賽的公平性,並合乎「智慧鐵人」的原意。
  2. 比賽為「支軸關卡」與「主軸任務」雙合一,時間連續進行 72 小時不中斷的活動,由參賽隊伍自行分配運用,來完成最後主軸任務。
  3. 「支軸關卡」參賽隊伍每通過一支軸關卡,即可依所獲成績取得「虛擬貨幣」,而參賽隊伍可以用「虛擬貨幣」進入「虛擬商店」購買主軸成品所需材料。闖關過程全程由電腦與螢幕顯示各隊進度,以增加競爭與刺激性。
  4. 魔法卡與王牌提高競賽的趣味性與變化性。魔法卡可用於使獲得之「虛擬貨幣」或闖關所需要的時間加倍,或可換取一樣「虛擬商店」沒有陳列的商品,但有其價格限制。王牌則用於無條件通過所指定關卡。
  5. 「主軸成品」為主軸任務完成的作品,評審乃依據作品之創意、主題展現、功能性及美觀評分。製作主軸成品所需之材料應為大會所提供之物品,初賽時所分發的材料與完成的作品,亦可帶入決賽會場使用。

好玩歸好玩,但要過關大概沒那麼容易吧?就當作是一次新鮮的經歷嘍。