2014 IBM Master the Mainframe World Championship



“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?"


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.


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.)


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 大型主機世界盃心得



「請問是 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 語法,所以還做了一些跨瀏覽器的調整呢。









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

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





「請問是 OOO 嗎?」


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