KKBOX 的 WWDC 2017 讀書會影片

又到了歡樂的 WWDC 讀書會時間,今年我們挑選了12個主題來研讀。相信大家也跟我們一樣,每年到這個時候總會很『開心』的學習 Apple 發佈的新技術 \O/

  1. Swift and Foundation
  2. Xcode Debug
  3. Xcode IDE
  4. UIKit
  5. UIKit-Drag and Drop
  6. WatchOS (watchOS, webView)
  7. Notifications, Layout
  8. SiriKit, Core Spotlight
  9. Security (Networking, Apple pay, Device check)
  10. Performance, Testing
  11. Audio, AirPlay 2
  12. Core Image

Swift and Foundation – Liyao


Xcode Debug – Oliver


Xcode IDE – Hardy


UIKit – QQ


UIKit-Drag and Drop – Mario


WatchOS (watchOS, webView) – Dada


Notifications, Layout – Jefferey


SiriKit, Core Spotlight – Seraph


Security (Networking, Apple pay, Device check) – Antony


Performance, Testing – Hokila


Audio, AirPlay 2 – Dolphin


Core Image – Daniel Tien


Posted in Code, iOS, KKBOX, Uncategorized | Tagged , , , , , | Leave a comment

[KKS Tech. talk] 輕輕鬆鬆認識專利

之前在整理隨身碟裡的文件時,看到一份在前公司時做的投影片,是有關專利知識的介紹, 身處科技爆發時代的大家,對於了解一些專利常識滿有興趣,所以當時的反應不錯。因此,有了把文件做增修後,於KKStream再次介紹的想法,也希望透過一些專利實例,讓研發人員們理解一些發明概念及創新的可能方向。

從過去案例中(Polaroid vs Kodak, eBay vs MercExchange),可體認到專利制度對於產業的影響,其實除了採主動積極的保護專利權人權益外,將手上的專利權作為談判籌碼的”護身符”模式也是一種專利的應用方向(HTC vs Apple透過交互授權達成和解協議)。但是將發明申請專利,有其伴隨的義務要付出: 公開發明內容與繳納各項費用,公開發明內容在申請18個月後進行,以發明專利審查期長達2~4年來說,也就是專利核准前(還不知未來是否會過關)就得公開。將來若有他人侵權發生,是否有能力/財力去維護專利權也會是申請專利時的考量,只能說這是有錢人才能玩的遊戲啊~

撇開這些考量,那什麼可以申請專利呢? 基本上只要不在專利法裡負面列表,且符合專利實質審查所要求的三大專利要件:新穎性(無習知技術(prior art)). 進步性(非顯而易見). 具產業利用性。

那究竟發明難不難呢? 從現有的專利中,我們可以整理出幾個較為簡單的創新方向:
* 組合發明- 將多個現有產品組合出新用途。
* 逆向思考- 思維轉個彎,也許會就有新作法。
* 使用上的痛點,表示有改進空間,是可以研究的地方。

因此,透過專利,除了是理解現今產業的遊戲規則外,也是一種能快速了解別人技術. 產業方向,以及幫助自身發展創新的途徑。

整理了一下今天下午分享會裡的一些討論, 以及附上今天的投影片:
Q: 若是在台灣申請到了發明專利,兩三年後才想到要去美國申請專利,這樣還適用WTO會員國的國際優先權嗎?
A: 不適用,發明專利的優先權期是12個月。所以產品在未來要上市前就需要規劃好將來的專利佈局,包含產品裡哪些技術是需要申請專利的,以及將來產品是要銷往哪些市場,事先就規劃好在將這些技術在哪些國家申請專利。

Q: 如P.19頁投影片裡,假設我發明了配有鉛筆的帽子,但是帽子本身的專利是握在其他人手裡,那這樣我還可以生產配有鉛筆的帽子嗎?
A: 不行,雖然你握有鉛筆帽子的發明專利,但是也同時踩在別人的專利權上,所以必須先得到帽子的授權,才能生產鉛筆帽子。

Q: 申請專利大概要花多少錢啊?
A: 各項目的價目表:台灣專利規費清單美國專利規費整理

Q: 既然專利法是屬地主義,那如果我在某個小國家裡,看到一個東西不錯,拿去美國申請專利,這樣會過關嗎?
A: 如果在2011年美國專利法修法前申請的,可能會過,之前的prior art範圍限於美國境內,但2013年開始實施新法後,prior art範圍擴張到全球,只要審查時被發現,申請案便會因新穎性不足而被駁回,或是事後被他人舉發(新穎性不足)導致專利無效。

Q: 將來如果英國脫離歐盟,會影響他在歐洲專利局的成員身份嗎?
A: 歐洲專利局(EPO)是歐洲國家處理專利申請的統一窗口,有自己的會員國組織,也非歐盟機構,所以將來英國脫離歐盟,不會影響他EPO成員身份。

 

Posted in KKStream, KKV | Tagged , | Leave a comment

Google I/O 2017 Android 相關 Session 摘要 – 上集

部門內總是習慣大家分著看東西,再互相分享,這是我們團隊內保持快速移動的有效方法之一,今年我們也針對 Google I/O 2017 上百部影片中的 Android 相關議題做了分享,算一算這是我們第四年分享懶人包了呢 :P
Continue reading

Posted in Android | Leave a comment

Google I/O 2017 Android 相關 Session 摘要 – 下集

部門內總是習慣大家分著看東西,再互相分享,這是我們團隊內保持快速移動的有效方法之一,今年我們也針對 Google I/O 2017 上百部影片中的 Android 相關議題做了分享,算一算這是我們第四年分享懶人包了呢 :P
Continue reading

Posted in Android | Leave a comment

Brainstorming, Brain Storming, Brain and Storming

So the story started like this. CMS team has been developing some first-class and highly customized content management system at enterprise level for some time now. We have reached a point where we can boldly called our product stablized, of which allows us to explore more with experiences gained from current product. It was a simple casual small chat with Drake one morning that there has always been a blind side of engineers to view a product from users’ perspective while eighty or even more percent of CMS users are not engineers. Drake suggested to hold an event much like coding day we had few months ago to inspire creativity in constructing CMS v2. One small chat led to consequent discussions with various personnels to bring brainstorming into reality. Big thanks to Vicky and Elaine of all the planning, suggestions, and mostly, their effort to offer anything within or without their personal boundaries. Without them, there would not be an event hosted in KH nor would there be an elegant afternoon tea time.

I did not sense much excitement the first time CMS v2 brainstorming event was announced to CMS team in KH. Since CMS team will play an important role in the event, I have secretly considered myself doomed from the beginning. I myself was a virgin of event planning. I have little to none experience in ordering food and even for the few times I did, I never could get the numbers right. This is just how much I was doomed. In the area, where in my narrow mindedness, was considered a wild wild west (and here I missed all my capable friends in Taipei), I have no event planning skills with a team of shy engineers like me. If it has been a declaration of a war, after much deliberation, as Spark would say, it would only seem logical to simply surrender.

6:30 Friday night before Monday event.

Timing is a tricky thing. To CMS team, production release is a big thing. We have zero failure tolerance policy for production release. Testing usually lasts around a week if everything goes well. On top of regular production release effort, we are also a scrum team. Sprint tasks are expected to be carried out on-schedule by all means. Brainstorming event was caught in the middle of our release cycle, which means even with careful plannings, the team still would have to suffer much overtime work to accommodate any additional effort for the event. As always, a great achievement comes with much hard works and sacrifices. It was then I realized I have worked with some really talented people with much endurance and willingness. It was Friday night close to the end of the day, last working day before the event took place. I stood up hoping to grab someone for an update on preparation on brainstorming event, and I realized all CMS team members has vanished from their desk. To my amazement, all of them has managed to find themselves a quiet corner to craft for the event.

There were 12 participants for this event where we decided to equally divide them up into three competing groups. With each competing group, there is going to be a owner leading and answering questions. Team owners are responsible to design a logo and motto for their team. Every CMS team members were also asked to do a bit of background research on each participant.

Songs on demand

QR code to help people access songs-on-demand system. A brief instruction is listed below QR code. Instruction was placed on each table.

In order to better facilitate this event, we asked Dada, an intern engineer in CMS team, to assist us with music that matched theme of each session. Much to my surprise, not only did he made a decent selection of music to play, he managed to assemble a songs-on-demand system that allowed participants to order songs of their preferences.

Brainstorming event was scheduled at 12 o’clock but team started arranging meeting place three hours prior to the beginning of the event. We wanted to kick start the meeting with more casual settings, to ease participants into thinking mode after a long trip with some mild constraints. Hence there were six categories named from our past experience with content management system development. Every category was assigned an owner responsible in conducting their own sales package. This part of activity was designed with dual purposes. First of all, owners were to gain more insightful knowledge on their designated category. In the meantime, participants received digested information in understandable representation through interactions with category owners. To make this activity even more challenging for CMS team, category owners were asked to act as sales representatives of their category. They need to gather enough ideas from people to fulfill his or her sales target. Otherwise category owners had to draft ideas to make up their sales target.

Categories specially designed by each CMS team member.

It was 9:30, out of blue moon, Drake slacked to ask for KH office address. He was in the U.S. for Google conference only a day before and decided to come to us directly from Taoyuan international airport after 14 hours of flight. Upon arrival, he went through event programme one last time before everyone arrives in the hopes to refine it with more insights. He has pointed out that the last part of the programme, which consisted a 1.5 hour long of idea crafting session, might be dreadful to participants while regular human concentration span lies around 30 minutes. As an agile team, we were accustomed to changes. Although it was not in my nature to embrace sudden change to the plan, I bowed to the suggestion for it did show a blind spot in our programme. Hence one idea crafting session was splitted into two sessions with the first one lasted thirty minutes and the second one forty-five to sixty minutes. This change was later on proven a success. People were more clear on how to present and implement on their ideas after brief retrospective session of the first idea crafting session.

Weekly meeting.

We started out with weekly meeting. It was a memorable time in the history that KH team has generally equivalent number of personnels in comparison with Taipei team. We invited all the POs, key personnels of the operation teams, one designer, QA leader, and HR to join us in KH. The first time KH is no wild wild west anymore. We may be wild but we are no longer a deserted place where one has to memorize hard enough to bring up in a conversation.

KKStar team logo

I have prepared myself with some worse case scenarios. After all, all that it counts for algorithm is computation of Big-O, the worst-case scenario. As proud engineers, we calculate for the worst.

The first bad thing that could happen would be people spent too much time eating lunch. Officially, CMS v2 brainstorming event started right after lunch. Time was tightly planned with each session precisely scheduled. With possible delay in return from lunch, meeting might be strained off time and there goes worse-case scenario number one.

Apple team logo

In the first session, we would ask people to start drafting their ideas as individuals on post-it and stick it to the category where it belongs. I could almost foresee for those who has no prior experience with content management system, drafting individual ideas would be a conversation killer. With too many people wondering blankly on the side and our shy CMS team as sales representatives, the whole session would easily pass by in silence. There! I can see how this would end. The meeting died and the rumors passed around like this, KH is not a fun place. The team is boring. Worse-case scenario number Two!

I lost count of worse-case scenario after number two. It was all too depressing. So I crossed my fingers, waited for people to scatterly return from their lunch. At around 1:30, people have all returned from lunch satisfied and happy. Worse case scenario one pass!

Kiwi team logo

The first session, we named it “I have a dream session”. That is to say, if you do have a dream. From my point of view, if you do not know the existence of an Extera-Terrestrial, i.e. ET, would you even dream of it coming to you?

Albeit all the speculations and dramas that took place in my head, the first session went interestingly well. People were curious. They showed interests in the things unheard of. People were attentive. Lots of individual conversations went on with each category owner. By the end of the first session, every category had reached its sales target.

In the following session, three pre-chosen group owners played back-to-back scissors, paper, and rock to pick out members for each competing group. This would be one of high peaks of the day. Each group owner demonstrated their mottos before the game started. Each group was paired with a recorder who would not participate in any activity but serve as a neutral observer. Recorders would share what they have learned from observing interactions among group members the next day.

In the following session, three pre-chosen group owners played back-to-back scissors, paper, and rock to pick out members for each competing group. This would be one of high peaks of the day. Each group owner demonstrated their mottos before the game started. Each group was paired with a recorder who would not participate in any activity but serve as a neutral observer. Recorders would share what they have learned from observing interactions among group members the next day.

Proudly presented by Kiwi team.

First round of idea presentations, each team was able to present an idea with roughly 60 ~ 70 % of completion level. The idea itself was innovative and interesting. They are fresh but a bit immature. People were groaning at limited amount of time and resources that had prevented them from producing a perfect result. It was, however, deliberately designed. We had given the approach of this part of the event with deep considerations and decided to resemble real-world scenarios where you never get enough time and resource to do a job. However, for the times we made something unsatisfactory, we reflect and learn from our failures. It was from reflective experiences that we learn to do better each time.

Proudly presented by Apple team.

Brainstorming is an exploration and extraction of ideas deeply buried in our minds. It was through intense conversation and listening that the ideas are to be shaped into presentable forms. Almost every team picked on one or more ideas related to AI (artificial intelligence) or ML (machine learning), however nature of abstraction the ideas were. Ninety percent of the AI or ML ideas were unfortunately dropped after group discussion. AI or ML is something we got a hunch that tells us it is the future but we are probably not matured to the point to implement a product base on it.

Afternoon tea time was another highlight of the day. Fried chicken, fries, hot pressed toast and lots of cake.

Because we decided to split one discussion session into two, afternoon snack arrived exactly around the time after our first retrospective.

The second idea crafting session started after snack time. This is something of a bliss. In the original plan there was no break time at all due to our tight schedule. Albert, our brainstorming consultant thoughtfully introduced to us by Peter, mentioned it might stress people out without even a single break. I did not put too much thought into basic human needs. People really need a break as it turned out. By the end of first session, people were agitated and ready to do more but they are tired. We took around 30 mins break which end up a great result on the second session.

Proudly presented by kkStar team.

All three competing groups seemed ready to jump on the second chance to prove the excellence of their ideas by the end of 30-min break. In this round, group discussions were optimized. As it seemed, members of each group has obtained the mind of a best friend to each other. People simply turned telepathic.

At the end of second session, we have one group with two different implementations on two relatively distinct ideas. Two groups expanded further on their original thoughts. Since each group has to answer questions for their own implementations, it was clear that this time, speakers were more well-prepared and sophisticated for their own topics.

We concluded the first day of the event with a retrospective of the day and arranged the morning time on the second day to announce the winner, decoration of the winning team, and a reflection initiated by three recorders from three groups.

Something we would always remember.

A perfect conclusion was tough. There are few options to initiate and conclude an event. We could lecture for lessons we learn, raise an open question, sing a song, ask people to sing a song, or provide another round of happy meal for satisfaction. Since Drake has fully regained his consciousness after a night of rest. He was able to engage into the lessons we learned with open questions at the end.

Crowning

More or less this event was a success of which I marked a success level around 75%. The lost of 25% depends on the level of impact this event has brought upon people. The result would be a continuous counting then.

Posted in Events, KKStream | Leave a comment

MPEG-DASH 開源專案

據說,在參加了某一場 AWS Taiwan 舉辦的活動後,
我們曾對著一群人,豪邁的說出了「我們來在台灣辦例行性的 streaming workshop」吧!
然後,與大部分的政客一樣,只有發聲,沒有行動,遲遲沒有任何動作。
當時一時興起,以為,只要有人先說出口,
就自然會有其它人出來接棒,執行。當然,我也會全力協助與參與…

但就像 g0v 的座右銘

「不要問為何沒有人做這個,先承認你就是『沒有人』」。
因為,「沒有人」是萬能的。

過了快一年,似乎沒有因此產生什麼變化,
想說先做點什麼一個人可以做的,簡單一點的事好了。
於是有了這麼一篇,從分享簡單而公開的資訊開始。
夾雜點個人觀點,然後期待有人跳出來指正我哪寫錯了,
或是提供 patch ;D

MPEG-DASH 起始於 2010 年,2011 年有了草案。
同年,成為國際標準。於 2012 年以 ISO/IEC 23009-1:2012 的型式發佈。
這樣的一個標準,因為 video streaming 成了新世界的載體,漸漸成為基礎建設。
於是有不少開源專案:

Continue reading

Posted in KKV, Streaming, Video | Tagged , , , | Leave a comment

The Issue About Using MPChangeRepeatModeCommand

Apple’s MediaPlayer framework has two APIs in iOS 10 to let you control your player’s repeat mode (to repeat a song, or a list, and so on) and shuffle mode (sequential or shuffle play) with CarPlay. They are MPChangeRepeatModeCommand and MPChangeShuffleModeCommand.

We tried to integrate these two APIs into our product, KKBOX’s audio app on iOS, but then we removed them, since they are conflicting with some popular in-car system.

Continue reading

Posted in Code, iOS | Tagged , | Leave a comment

使用 Slather 產生 iOS/Mac 專案的單元測試覆蓋率報告

在 Xcode 6 以及之前的版本中,如果你使用蘋果內建在 Xcode 當中的 OCUnit/XCUnit 等測試框架撰寫單元測試的話,Xcode 會在測試的過程中產生 gcc 格式的覆蓋率(coverage)報告,叫做 gcda (意思是 gcov data file)檔案;如果我們想將產生測試覆蓋率的流程整合到 Jenkins 等持續整合系統中,我們可以用 gonvr 等工具,將測試報告轉換成 XML 或 HTML 格式,這將我們就可以在系統中,看到每個 build 的覆蓋圖表,以及覆蓋率變化的趨勢。

但是在 Xcode 7 之後,蘋果將 gcc 的工具換成 llvm 的工具,這種幾年前的方案便變得不敷使用。在 Xcode 7 中,雖然我們可以指定要求產生 gcc 格式的覆蓋率檔案,似乎可以與我們過去的工作流程相容,但是產生出來的結果非常不準確;而蘋果的立場大概是,反正 Xcode Server 可以正確顯示覆蓋率報告,如果你用的不是 Xcoder Server,他們就不管了。而現在要將 Xcode 7 中 llvm 工具產生出來的報告,轉換成 XML/HTML 等格式,我們大概會選擇 Slather

Slather 是一套用 Ruby 開發的 command line 工具,是 llvm-cov 工具的前端,我們可以使用 gem install slather 指令安裝。

Continue reading

Posted in Code, iOS, Mac | Tagged , , , , , | Leave a comment

使用 Groovy 語言自動操作 Jenkins

有時候我們會發現,當我們想要做一些事情的時候,光透過 Jenkins 的 Web GUI 介面很難做到,而會想知道 Jenkins 是不是有 API 可以讓我們操作,比方說。

  • 我們在一個 Jenkins 主機上面跑了很多 build job,然後我們享用另外一個頁面 / app,彙整每個 build 的狀況,像是列出我們指定範圍內的 job 中失敗的 job。
  • 或是,我們有好幾個單元測試的 job,我們想要知道這些 job 最近幾次 build 的覆蓋率是多少。
  • 批次刪除:因為某個緣故,我們可能一次失敗了好幾次,我們想把這些失敗的 build 全部刪掉,但如果只從 Jenkins 的 Web GUI,卻只能夠一筆一筆刪除,這點再 Jenkins 的官方論壇上經常有人討論,但是 Jenkins 官方並沒有加入這個功能的計畫。

Jenkins 並沒有提供我們所習慣的 Web API,但是我們可以透過要求 Jenkins 執行特定的腳本(script ),達到上面我們想要做的事情,而如果我們想要撰寫自己的 client,讀取 Jenkins 上的資料,或是其他的操作,也可以透過 HTTP Post 的方式,把腳本送到 Jenkins 上執行。—說起來這還頂危險的,如果沒有對 Jenkins 加上保護,等於可以讓人很容易就破壞了整套 Jenkins 上的資料,所以,不管怎樣,Jenkins 主機都應該放在內網,而且加上密碼保護。

我們使用 Groovy 語言撰寫 Jenkins 上的腳本,Groovy 是一套可以讓我們操作 Java 物件的物件導向腳本語言,要學習這套語言,最快的方式應該是去 Learn X in Y minutes 網站上,參考 Learn Groovy in Y Minutes 這一篇。

接著,連往你的 Jenkins 主機的 /script 目錄下,就可以看到一個文字輸入區域,在這邊可以輸入你要執行的程式碼,你也可以從 Manage Jenkins -> Script Console 進入這個畫面。而如果你要用自己的 HTTP client 要求 Jenkins 執行指定的工作,也可以把要執行的程式,post 到主機的 scriptText 路徑即可。

Continue reading

Posted in Uncategorized | Leave a comment

KKV Programming Contest 2016

2016/11/11,有一群愛台灣的人進電影院看李安導演的比利‧林恩的中場戰事 Billy Lynn’s Long Halftime Walk 。有更多人受到商人的鼓吹與店家的特惠活動,在當天貢獻了不少商業行為,買了不少東西,活絡了市場。然後有一群來自 KKBOX 子集團 – KKV (KKStream & KKTV) 的人,窩在台北的一個角落,他們有的是在寫程式 PK;有的下注手指彩卷。至於喝 Orion 啤酒、聽台灣的故事,聆聽現場的演奏,則是每個人共同享受這個下午時光的方式。
是的,我要記錄的就是我們這一群人下午的一個小故事…

哥來拍照的

A post shared by KKV Programming Contest 2016 (@kkvcodecontest) on

緣起

KKStream 與 KKTV 在今年的 3 月正式宣佈成立,以 KKBOX 集團子公司的形式問世。是個好理由,可以來做點什麼不一樣的,平衡一下每天工作之餘的左右腦,順道把大家帶離開辦公室(這才是重點)。於是,我說,我們來辦個程式設計比賽吧。KKV Programming Contest 2016!

上半年就提出要來個程式設計比賽,然後一路發懶,拖到下半年,驚覺到再不捲起袖子來執行,就要跳票了!趕緊號召人組成籌備組,相較於 PyCon Taiwan 的籌備,我們運氣比較好,彈指間就處理好了金援、場地、攝影、娛樂,以及最重要的人手。

不好意思 其實我想押自己 😆

A post shared by KKV Programming Contest 2016 (@kkvcodecontest) on

Steve : 撒💰囉

A post shared by KKV Programming Contest 2016 (@kkvcodecontest) on

接下來的一個難題,是要怎麼讓整個活動成功。整個活動叫 KKV Programming Contest 2016 (#kkvcodecontent),活動報名頁有兩種組別,分別是競賽組以及歡樂組。
競賽組負責程式設計比賽以及吃喝玩樂;歡樂組參與手指彩卷(感謝 Vicky)以及吃喝玩樂。

我們成功的偷拐搶騙,組了 18 隊競賽組,一組至多兩人,但想要獨挑大梁的也可以一人參賽。

我賭 ____ (咦?

A post shared by KKV Programming Contest 2016 (@kkvcodecontest) on

目標

整個活動的目的很簡單,就是:

  • 離開辦公室。
  • 程式設計比賽。
  • 非競賽組的人也可以同樂。
  • 愈刺激愈好,愈好玩愈好。
  • 替接下來的 KKV Hackathon 來個暖場。

嚴肅點說的話,就是想把我學生時代的 ACM ICPC 的感覺,帶進我們的團隊。ACM ICPC 是大學時期,有幸跟著同學一起參與的一個年度活動。五個小時,八個題目,一台電腦,一組四個人,同時只能三位進場,旁邊有小點心,每完成一題就有一顆氣球,可以一路從區域賽比到世界總冠軍賽,題目都很難,不乏數學,資料結構,演算法比重很高的題目,而且對程式的執行效率非常要求。

ACM ICPC 的活動,是個非常特殊的一個過程。雖然可以同時有三位團員進場,但是只有一台電腦可以用,而且題目多達八題,難度是那種你五個小時內解不完的程度,挑戰性十足,不是目前網路上的面試考題所可以比擬的。

於是你為了在這種限制下勝出,就會發展出不同的團隊合作方式,其中像是 paper coding, pair programming, printed implementation for algorithms, cooperation of different fields of questions, … 就現在軟體產業來看,是會覺得非常詭異的一種比賽的。它一方面強調考題的困難度,而且情境是要求你自己從無到有刻出來,沒有什麼 library 可以用。另一方面,它又只給你一台電腦,讓你的隊友想幫你都很困難,隊友甚至無法幫你 google 或是上 stackoverflow!?事實上,在那個時代,stackoverflow 根本還沒有出現!聰明如你,一定會覺得辦這種程式比賽要幹麻,一點用處都沒有,還不如辦個 hackathon 比較有意義。

但如果我換個方式說明,你可能就不會這麼想了。大家都知道 Google 是一家非常優秀的公司對吧?雖然有 Facebook, Amazon, Apple, Microsoft, Twitter, Netflix 等這些一樣非常厲害的公司,但是一但聊到「比較硬派的軟體公司」或是「基礎技術比較深厚的公司」時,大部分人應該會覺得還是 Google 拔得頭籌的吧?那你知道有個叫 Google Code Jam 的活動嗎?!

Google Code Jam is an international programming competition hosted and
administered by Google. The competition began in 2003 as a means to
identify top engineering talent for potential employment at Google.
The competition consists of a set of algorithmic problems which
must be solved in a fixed amount of time.
Competitors may use any programming language and development environment to obtain their solutions.

In 2008, over 11,000 people from more than 128 countries competed for
prize money totaling over $80,000, including a top prize of $10,000.

wikipedia

KKV 並不是要這麼不務實,喊著要朝向 Google 為目標發展,但實際上卻只做著技術整合的公司。相反的,KKV 更像是在朝向商業成功的同時,持續花力氣在某些領域深耕,同時以各種形式來提醒自己,我們是一群要求在技術上有不同觀點與堅持的公司。某種程度上,是傳承著 KKBOX 這家以「技術著手,產品著眼」的公司文化的一群人。

競賽規則

  • 會一次收到三封 codility 的邀請函(題組)。點開聯結,就差不多開始了。
  • 只能有一台電腦,同時開啟三封信來比賽。
  • 總共有 18 (3組 * 6) 題,不用擔心太快就沒事了。
  • 比賽時間總計 137’(是個質數)。
  • 可以選擇最擅長的程式語言比,但你的英文一定要 Ok。
  • 每題只能 submit 一次,多多善用 test run。
  • 每一題的得分是 0~100,總分 1800,最高分得獎。
  • 每完成 [1, 3, 5, 10, 15, 18] 題,就有一顆氣球!60 分算完成。
  • 拿到所有組的第 [10, 30, 50] 顆氣球的組別,一樣有獎!
  • 不欣賞作弊行為,但是,我們也不阻止互相騷擾的行為 :D

不要說我沒努力

A post shared by KKV Programming Contest 2016 (@kkvcodecontest) on

至於歡樂組規則呢…這點我們就跳過,當作營業祕密吧 :D

發🎈的小女孩

A post shared by KKV Programming Contest 2016 (@kkvcodecontest) on

場地

感謝後台Backstage Café的協助,在這個舒適的場地,渡過了一個下午。

現場演奏

天空下 by 盧芸

另一首安可曲(忘了名字) by 盧芸

沒 Youtube ;p

阿春仔伊阿嬤 by 進錕

228 by 進錕

沒 Youtube ;p

黃昏的故鄉 by 進錕

母親的名叫台灣 by 進錕

沒 Youtube ;p

回顧與反思

我想…我們這樣硬是拿 codility 來作為程式競賽的系統,應該算是及格了。codility 原本只是 KKBOX 集團拿來做為輔助面試時的一個工具:主考官出幾題程式題目,應徵者在規定的時間內,上機 live 解答,整個過程都會被錄下來。它目前有約 15x 個題目,其中 coding 與 algorithm 是比較適合,加起來約有 100 題可以挑選。這些題目支援的程式語言很多,從 C/C++/Java/JavaScript/Python/PHP 到 Go/Scala/Swift 2&3 都有。

美中不足的,是一個題組只能有 6 題,這也是為什麼我們的比賽規則要求選手要一次開三個題組。如果以 codility 一個 credit 約台幣 200 元來看,
我們這一次的活動用掉了 18 * 3 * 200 = 10,800 TWD :D

另一個非常不 ok 的,是每一個題目你只能送件一次,這點與 ACM ICPC 很不同 :p要求參賽者每一題只能送件一次,有點太嚴苛~

另一個讓人覺得有點可惜的,是啤酒實在太少了!有競賽組的同事表示,沒有啤酒他無法專心下來寫 code…更有表演的進錕自己掏腰包買杯冰啤上台表演的…

對了,我有沒有提到,整個活動能完成,全歸功於所有 KKV 成員?!

參考

原文刊登在KKV Programming Contest 2016 on Drake’s weblog

Posted in Events, KKV | Tagged , , | Leave a comment