LINE 開發社群計畫: TWJUG#201904@LINE

前提 大家好我是 LINE 台灣的 Technical Evangelist - Evan Lin 。「開發社群計畫」是今年一個開發者關係與技術推廣部門一個重點,將在今年一整年中,在台灣舉辦對內的技術交流、教育訓練,對外的社群聚會、校園演講、開發者徵才日與開發者大會等各式各樣超過30場的活動。我們希望創造更多技術分享與跨國串連的機會,同時,持續招募優秀的人才加入LINE台灣的開發工程團隊。 四月第一場社群活動邀請到 TWJUG (Taiwan Javsa User Group) 社群到 LINE 來舉辦。也請到 LINE Pay 的 Webber Su 來分享,除了讓更多人能夠了解 LINE Pay 工作經常用到的工具外,也希望能夠引發一些討論甚至可以互相交流。 Where is the ghost in the ghost island? Explore by Java and Mongo/ LINE Pay - Webber Su 投影片 首先上場的是 LINE Pay 的同仁 Webber Su 所帶來的透過開放資料集的一個案例分享。在 LINE Pay 的開發經驗上其實會遇到大量資料的處理與分析,但是由於許多的客戶資料都是屬於機密資料無法公開,所以透過開放資料集的案例來分享 LINE Pay 團隊日常遇到的相關問題。 透過開發資料將全台灣的事故資料匯入資料庫中,並且透過 LINE Pay Merchant Map 的部分的相關技術可以幫我們找出比較容易發生事故的問題區段。 在開始處理資料的之前,講者也分享了他會用到的相關開發工具如下: 以下稍微介紹每個工具的功能與相關作用: 資料的分析: Spring Web , Spark 與 MongoDB 。 資料批次處理: Spring batch 與 MongoDB 。 網站的後台系統: Node.js , Loopback 與 MongoDB 。 前台顯示部份: Vue.js 與 D3.js 。 這些開發工具也是 LINE Pay 團隊在開發上經常使用。除了開源專案工具之外, LINE Pay 也首次分享了 LINE Pay Merchant Map 的功能: LINE Pay Merchant Map 提供了地圖話資訊的條列與搜尋。包括了: List: 條列式的列表。 Nearby: 透過地圖是覺化的列出。 Search: 甚至透過關鍵字的搜尋方式。 在文字資料的搜尋上,究竟要使用 Elasticsearch 或是 MongoDB 作為文字搜尋呢?這裡講者也分享了當初在內部開發系統上,是透過哪些的評量方式來決定的。 由於許多效能的測試與評量上最後決定是 Elasticsearch 。而在地點鄰近搜尋 (Nearby) 上最後則是決定使用 MongoDB。 這個 Ghost Island 的架構其實也將 LINE Pay 開發團隊許多用到的工具分享給大家。裡面包括了資料該如何處理,該如何有效地處理與資料的讀取跟儲存? 這邊講者也分享了一些經驗談,就像是這個案例一樣,對於資料的處理上要有許多小地方要好好處理。如果是開放資料的時候,對於資料的處理要更加小心。資料可能有誤,資料可能有缺甚至資料可能是空的。所以可能將資料多儲存在其他地方也是一個可以變通的方式。這樣可以避免在資料清洗的時候造成程序的錯誤。後端針對文字搜尋與鄰近地圖搜尋則是透過兩個不同的儲存工具( Mongo 與 Elasticsearch )來處理資料。 而且講者也分享了在各個階段可能會踩到的雷(指的是遇到的問題)。不論是剛剛 Batch Spring process ,Spark 資料的處理上還是 Cargo 的部分。 整個主題雖然是使用開放資料的事故來做講解,但是不論是整個流程用到的相關開發工具還是可能會遇到的問題。講者也都分享出來 LINE...
繼續閱讀

[研討會心得] 2019/03/29 LINE Developer Meetup 7

前提 嶄新一年的第一場開發者小聚,特地離開大台北地區,將在新竹的清華大學舉辦 ; 更請到 LINE台灣的許多開發團隊來跟開發者們分享在LINE的開發流程與經驗。 不僅僅有 Developer Relations 的本年度的活動規劃分享,更有來自日本的團隊來解釋什麼是 LINE Private Cloud 。當然不會少的有本地產品開發團隊來跟大家見面與分享,除了有 LINE NOW 與 LINE TODAY 的團隊之外,更有 iOS 與 Android 的開發團隊。機會實屬難得,也很開心能夠跟新竹的開發者一起來討論與交流。 2019 年開發者關係與技術推廣部年度計畫分享 / 資深開發技術推廣工程師 Evan Lin 投影片 首先登場要介紹的部分就是由我所分享的 2019 年度開發者關係與技術推廣部門( Developer Relations )的年度計畫,大家也可以參考這一篇文章的介紹。 這一段介紹主要先講解身為開發者對於 OA 2.0 需要知道的部份。自從 OA 2.0 方案公佈之後其實開發者們都很擔心,不知道會不會有任何變革的部分。在這裡首先分享兩個鏈結給各位。(OA 2.0 全面升級,OA 2.0 FAQ ),這兩篇文章其實能解決大多數開發者的疑慮,如果還是有不清處的部分。可以看看投影片內的整理。 Developer Trial 會如何改變? 會轉移到 “低用量” 不限制好友數,發訊超過 500 則會無法發送 (不會收費)。 這樣的改變對於只是想測試功能的開發者是相當貼心的,不用擔心不小心寫錯 Push Message 被收費之外。更可以使用到人數更多低用量方案。 再來就是要介紹 Developer Relations 本年度的一些計畫與每個月的行程給開發者們。其中最重要的計畫就是「LINE 開發社群計畫 」,詳情請看新聞稿。我們將在今年一整年中,在台灣舉辦對內的技術交流、教育訓練,對外的社群聚會、校園演講、開發者徵才日與開發者大會等各式各樣超過30場的活動。我們希望創造更多技術分享與跨國串連的機會,同時,持續招募優秀的人才加入LINE台灣的開發工程團隊。 「 LINE 開發社群計畫 」 裡面除了親近開發者社群之外, LINE 也積極在各個開發者盛會中參與,不論是各種大大小小的研討會或是一些社群的 meetup 。都是透過參與社群來使得開發者更能夠了解 LINE 開發的過程與製造更多技術交流的機會。其中也分享 LINE 內部的開發者活動,包括了「技術寫作訓練日」或是內部的其他訓練與 Workshop 。 這個 Session 的最後要跟大家分享就是 LINE 年度開發者招募大會 “LINE Developers Recruitment Day” 即日起也展開,歡迎各位開發高手來報名,一起打造 WoW 使用者體驗的產品。 Developer Relations 相關職缺: Technical Evangelist Technical Writer How We build Kubernetes service by Rancher in LINE / LINE 東京 Verda Team, 李飛翔 投影片 來自東京 Verda Team 的李飛翔也跟大家分享 LINE 是如何透過 Rancher 來打造 LINE 自己的 KaaS (Kubernetes As A Service) 。本文一開始先介紹了 Rancher 的一些功能與 Rancher 2.0 的目前狀況,也會介紹我們如何使用 Rancher 來打造 KaaS 。 LINE 如何透過 Rancher 打造 KaaS API Server: 首先左方可以看到,有一個...
繼續閱讀

[Coursera] Decentralized Applications (Dapps) (一)

Blockchain Specialization 系列上課心得 Blockchain Basics Smart Contract Decentralized Applications (Dapps) Blockchain Platforms Decentralized Applications (Dapps): 課程鏈結: 這裡 文章鏈結: Decentralized Applications (Dapps) (一): Week 1 Decentralized Applications (Dapps) (二): Week 2 Decentralized Applications (Dapps) (三): Week 3 Decentralized Applications (Dapps) (四): Week 4 前言: 剛忙完本年度公司第一次的 Meetup ,其實每天都忙著在寫文章,感覺逐漸邁進量產化技術部落格作家邁進。不過還是得要花點自己的時間好好把該讀的課程讀完,畢竟也已經付錢了。所以回過頭來還是得每天努力地啃, Blockchain Specialization 系列的課程。第三期開始感覺更加多的作業與實作著部分,應該也會變得輕鬆一點吧(咦?)。 課程內容: Week1: Dapp 架構圖 Ethereum 相關環境安裝 sudo apt-get install software-properties-common sudo add-apt-repository -y ppa:ethereum/ethereum sudo apt-get update sudo apt-get install ethereum 參考: https://github.com/ethereum/go-ethereum/wiki/Installation-Instructions-for-Ubuntu GETH 相關初始化指令 geth --datadir ../eth_node account new geth --datadir ../eth_node init genesis.json genesis.json 範例如下: { "config": { "chainId": 88888, "homesteadBlock": 0, "eip155Block": 0, "eip158Block": 0 }, "coinbase" : "0x0000000000000000000000000000000000000000", "difficulty" : "0x1", "extraData" : "0x00", "gasLimit" : "0xfffffffffffffff", "nonce" : "0x0000000000000042", "timestamp" : "0x00", "alloc" :{ "account-address": {"balance": "0xffffffffffffffffffffffff"} } } 參考: https://medium.com/infrageth/practical-steps-for-go-ethereum-setup-27b8d64903fc 名詞解釋: enode: 用來給其他節點連接到 bootnode 之後,透過 P2P 方式來跑 blockchain operation。也可以當成是 ethereum 世界裡面的 URI 。 Definition of Dapp: A Dapp, or decentralized application, solves a problem that...
繼續閱讀

[TIL] 在 vscode 上面安裝並且使用 PlantUML

前提 寫作技術文章的時候,經常需要各種 UML (Unified Modeling Language) 所繪製出來的圖形。雖然學生時代都會學過這個,但是工作之後其實不容易透過良好的工具來繪製。 通常在 MacOSX 繪製經常使用 OmniGraffle(其實我有買)或是 Lucidchart ,但是要安裝這些軟體可能沒有那麼方便,或是拉來拉去本身也是很讓人困擾(美工苦手)。 使用文字敘述來繪圖的工具一直是我最愛 ( LaTex 愛好者),所以進了公司之後聽說過了 PlantUML 就一直很喜愛。 但是這兩天好奇因素之下研究了一下跟 vscode 整合,並且把可能遇到的問題分析給大家。 什麼是 PlantUML 可以快速看一下什麼是 PlantUML 介紹 ,或是去 PlantUML 官方網站了解。 PlantUML 透過簡單的語法可以繪製出 UML ,對於要做系統設計架構圖或是要做系統說明的人其實很方便。 比如說一個 use-case diagram 如下: 而且 PlantUML 支援相當多種 UML Diagram 时序图 用例图 类图 活动图 组件图 状态图 对象图 部署图 定时图 相當的方便。 如何在 VSCODE 上面安裝 VSCode 的 PlantUML 具有相當多的特點: Preview Diagram Export Diagrams Format PlantUML code (我很需要) All type syntax highlight. Auto Include. MarkDown integrating support. View Demo (有點威) 安裝 PlantUML plugin 套件節點 想要試著跑但是會跑出錯誤。 No Java runtime present, requesting install. 請看以下方式解決。 問題除錯: 1. 解決在 OSX 10.11 之後無法順利更新 Java 的錯誤 一開始試著在 vscode 裡面跑 java 相關指令會跑出 No Java runtime present, requesting install. 就算你試著更新 MacOSX 的 Java (參考這篇官方文件) 還是會跑出錯誤,那麼就要安裝”下載 - Java for OS X 2017-001”這個套件。 完整錯誤請查看這個說明。 更新: 安裝 Java 在 Mac OSX Catalina (2020/10/15) 下載新版 AdoptOpenJDK 解壓縮 tar -xf OpenJDK11U-jdk_x64_mac_hotspot_11.0.8_10.tar.gz 換到 opt 去: mv $PWD/jdk-11.0.8+10 /usr/local/opt/jdk 設定系統位置: export PATH=/usr/local/opt/jdk/Contents/Home/bin:$PATH 更新 PlantUML.jar 如果...
繼續閱讀

[Coursera] Smart Contract (三)最終作業

Blockchain Specialization 系列上課心得 Blockchain Basics Smart Contract Decentralized Applications (Dapps) Smart Contract 課程鏈結: 這裡 文章鏈結: Smart Contract (一): Week 1 ~ week2 Smart Contract (二):Week3 ~ week4 Smart Contract (三) : 期末作業 前言: 拖了兩個禮拜,總算把題目看完跟寫完了。今天很開心的將作業繳交上去的時候,卻發生錯誤。只好花了一兩個小時把整段程式碼整個看過,還是找不太到,最後到了論壇看了討論才把問題解決掉。 這個問題其實也讓我點出來,目前 Smart Contract 由於使用的 Solidity 的版本不同,其實功能的支援上也會有許多的差異。 不知道真正在 Smart Contract 的開發上是否會因為 Solidity 的版本變化造程碎片化 ? 請有實務經驗的朋友再好好分享。 這篇文章將 Smart Contract 作業裡面稍微整理一下幾個需要注意的地方跟可能會踩到的雷。 測驗內容: 透過 Smart Contract 來撰寫一個小型的拍賣決標,它具有以下的一些特性: 固定只有四個競標者 競標的商品只有三個 (0, 1, 2) 每個競標者有五個 token 來競標他的商品 透過這些規矩底下,要完成這樣的 Smart Contract 需要了解以下的部分: 要初始化所有的競標商品 需要初始化所有的競標者資料 完成最後結標的規則與算法 透過 Modifier 來做一些檢查。 小訣竅: Require() 跟 Revert() 會使用到要了解他的差異與使用方法。 一開始寫題沒有想到使用 revert()造成最後計算的測試一直無法順利完成。 總結: 雖然課程作業繳交花了一點時間,但是整體還是相當推薦這台課程。 下一次的課程也來到了 Decentralized Applications (Dapps) 的內容,希望會更有趣。 Reference: https://www.coursera.org/learn/smarter-contracts/home/welcome 6 test cases passed.3 test cases failed. Technical Introduction to Events and Logs in Ethereum https://solidity.readthedocs.io/en/v0.5.2/solidity-by-example.html?highlight=require Coursera: Decentralized Applications (Dapps) 比較 require(), assert() 和 revert(),及其運作方式。
繼續閱讀

[研討會心得] 2019/03/28 CNTUG#14@LINE

前提 三月第一場社群活動邀請到 CNTUG (Cloud Native Taiwan User Group) 社群到 LINE 來舉辦。也請到遠從東京的維運開發團隊 Verda Team 來台灣分享,除了讓更多人能夠了解這樣的架構之外,也希望能夠引發一些討論甚至可以互相交流。 How We build Kubernetes service by Rancher in LINE / LINE 東京 Verda Team, 李飛翔 投影片 來自東京 Verda Team 的李飛翔也跟大家分享 LINE 是如何透過 Rancher 來打造 LINE 自己的 KaaS (Kubernetes As A Service) 。本文一開始先介紹了 Rancher 的一些功能與 Rancher 2.0 的目前狀況,也會介紹我們如何使用 Rancher 來打造 KaaS 。 LINE 如何透過 Rancher 打造 KaaS API Server: 首先左方可以看到,有一個 API Server 負責收發使用者的指令。 除了作為 Proxy 之外,也可以限制使用者使用有限的 Rancher 功能之外也可以整合一次對於多個 Rancher 的操作。 Kubernetes Provider: 透過 Kubernetes Provider 是一個 Kubernetes 集群來管理多個使用者的集群( User Kubernetes Cluster) User Kubrernetes Cluster: 每一個服務或是產品會使用一個或是多個 User Kubernetes Cluster 。裡面都是透過 OpenStack 來建立 VM ,並且透過 Rancher 來部署。 如果今天一個開發者需要一個新的集群來部署一個新的服務。他透過 API Server 下指令部署新集群,這時候會透過 Kubernetes Provider 來運行 Rancher 來開啟新的 VM 並且來部署 Kubernetes 設定到該集群。 如此的輕鬆容易嗎? 透過一個問題來講解整個 Kubernetes 的架構與容易出錯的地方 架構雖然清楚又明瞭,但是事實上要運行卻沒有那麼的容易。這邊講者也分享藉由 “Websocket 無法正常建立“的錯誤,來分享如何追蹤這個問題來解決真正的問題。 如同上圖提到 Kubernetes Provider 是透過 WebSocket 與 Kubernertes User Cluster 溝通。有一天忽然發現了 WebSocket 忽然斷線的狀態,回過頭來看 Kubernetes DNS 的設定, Container 網路的架構甚至也解釋了flannel 網路架構。透過這些架構的解析,聽眾會了解在實體機 (Baremetal) 上面架設 Kubernetes 其實遇到的網路問題其實更多更複雜,因為牽扯跨實體機器與跨網路節點。 找到問題之後,試著做出一個 patch 來修正問題。確定成功之後也將這個問題回饋到 Rancher 的 OSS 來貢獻 LINE 研究的結果。 類似的問題就是...
繼續閱讀