[好書分享] 臺灣史上最有梗的臺灣史

(圖片參考 讀墨 )

臺灣史上最有梗的臺灣史 
作者:黃震南  插畫:壯兔  出版社:究竟出版
出版日期:2016/08/01 語言:繁體中文 ISBN: 9789861372242

《臺灣史上最有梗的臺灣史》電子書 - 臺灣這塊土地上,曾發生過數不清的鳥事蠢事搞笑事傷心事正經事,想更了解臺灣、更珍惜我們所居住的地方,不如就從本書開始,一起對臺灣史動真感情吧!

買書推薦網址: http://moo.im/a/6eilCT

前言:

當初會買這本書,是因為好像是某一次讀墨的推薦文章裡面有摘錄一篇文章。透過 ptt 鄉民的口語來敘述台灣的歷史,相當的有趣。 在看的過程中由於輕鬆的口吻,很快的就會把整本書當成休閒的書籍來看完。 很推薦喔

內容簡介:

當真一槍在手希望無窮,只要龍五的手上有槍誰都動不了他[14]。而這些軍警大多來自中國的貧窮省分,對於現代化的臺灣鬧出頗多土包子笑話,例如有人目睹軍官搶了小孩的腳踏車,但因為不會騎只好扛著走,小孩就跟在身邊哭鬧,軍官一急跳上腳踏車硬要逃脫,結果一頭栽進水溝。士兵沒見過自來水,於是買了水龍頭釘在牆上,以為這樣就有水喝(那是哆啦A夢的道具好嗎)。

這段文字節錄於這本書的某一個段落,就可以看得出來作者除了相當認真的做歷史書籍之外,也希望透過 ptt 上面時下人們喜愛的口語來敘述台灣的歷史。

這本書敘述台灣歷史相當的早,從第一批的台灣著名(大概是原始人的時代)。慢慢地到了荷蘭人經營台灣的歷史。 除了有敘述相關背景之外,也有相當多有趣的歷史。比如說鄭芝龍曾經是海盜,荷蘭人其實建造了不少的制度與硬體設施。 許多的故事都讓讀者感覺新奇跟引人入勝。

隨著時代的經過,這本書也會到了清朝開始有了鄭成功的故事。也有了許多相關的故事。甚至連清朝為何會來經營台灣都有稍微敘述到。

最後到了國民黨退守台灣的故事也有提到,讓人難過的故事有提到但是儘量地輕描淡寫。有興趣的人作者都有列出相當多的相關文獻跟資料,可以讓讀者去查詢更多的資訊。

心得:

想要邊讀 Joke 版面邊學歷史嗎? 這本書很適合推薦給讀者。在輕鬆的過程中就可以把台灣的歷史整個走過一次,也有許多 ptt 有趣的梗。就等各位去慢慢發現了。

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

前提

大家好,我是 LINE Taiwan 的 Technical Evangelist - Evan Lin。很開心在這裡跟各位分享本年度的第二場開發者小聚。這次的場地又回到台北的 GO92 志業中心,並且邀請了兩位 LAE (LINE API Expert) Will 保哥與 David Tung 董老師來分享 LINE Notify 與 LIFF (LINE Frontend Framework) 。

KKTIX 活動網頁: 活動網址

LINE Developer Meetup 開發者小聚系列活動將邀請 LINE 台灣工程師、開發者工具平台,定期分享內部開發技術,並安排優秀案例分享開發經驗,持續促進 LINE 技術平台開發與交流,歡迎對 LINE 技術平台有興趣的開發者參加。

官方帳號 2.0 開發者需要知道的事 / 資深開發技術推廣工程師 Evan Lin

投影片

首先一上場,來回顧一下自從上次 (03/29) 的開發者小聚之後,到本年度第二次開發者小聚之間究竟發生了哪些的訊息。對外的活動有:

兩個大程式語言社群先後來 LINE 舉辦活動相當的熱鬧,並且也跟 LINE Pay 的開發者 LINE SPOT 的開發者相互交流。

除了對外的活動之外,其實也有相當熱鬧的對內訓練活動:

這種難得一見的訓練活動,除了提升 LINE 內部開發者的技術寫作技巧之外,也希望增進開發者之間的技術溝通能力,讓同仁們在交流時可以更加的順暢達到更好的產能。

除了對內的訓練之外,當然也有本年度第一次的:

也希望透過這樣的活動可以讓更多有才華的開發者能夠加入這個充滿開放思想的開發環境,一起打造最好的產品。

而距離上一次聚會之間最大的新聞就是官方帳號 2.0 (OA 2.0) 正式上線。透過官方帳號 2.0 的上線,開發者除了不再有好友的上限之外,更有了許多嶄新的功能。

(圖片來源: LINE@生活圈 全面升級 | 全新官方帳號2.0計畫)

除了好友上限再也不受限 50 人的關卡(LINE@ 也不怕八萬人的限制)之外。更有許多新功能,不僅僅有分眾訊息,一對一聊天,圖文訊息,圖文選單之外,更有行動官網,集點卡與 Messaging API。讓開發者在開發上能接觸到更多的使用者,更有許多的功能可以選擇。

(升級的時程表來自於: 全新官方帳號2.0計畫 問與答)

當然官方帳號的升級時程上也是相當具有彈性的,除了 Developer Trial 是預計在六月中開始逐步升級之外,LINE@ 的商家更可以在 05/22 就開始將帳號升級到新的官方帳號 2.0 ,第一手感受無限好友的好處與許多新功能所帶來的市場。

而在 LINE@生活圈開放手動升級至官方帳號2.0(上篇)這篇文章中也介紹了,對於要將帳號升級的開發者務必需要了解以下的事項:

  • 重要資料備份
  • 先結束進行中的活動後再執行升級
  • 升級後無法恢復到舊版的LINE@
  • 手動升級需要的時間大約數分鐘,請保留足夠的作業時間,執行升級過程中,切勿關閉畫面
  • 下載新版的官方帳號2.0 App

緊接著在接下來的文章 - LINE@生活圈開放手動升級至官方帳號2.0(下篇)也講解了如何開始手動升級帳號。除了指示該如何正確的升級之外,也讓讀者可以搶先了解官方帳號 2.0 新的管理後台並且知道相關的功能切換方式。

當然就開發者的角度來說,最重要當然就是了解新開放給開發者的 API。除了原先就有開放給 Developer Trial 的 Push MessageMulticast Message 之外,這幾個新的 API 分別是:

  • Get the target limit for additional messages
    • 透過這個 API 可以取得目前方案能夠發送的訊息 (也就是 Push Message) 的上限。 比如說,低用量將拿到 500 。
  • Get number of messages sent this month
    • 透過這個 API 可以取得目前已經發送的訊息數量。
  • Send broadcast message
    • 透過這個 API 可以發送訊息給該 Chatbot 所有有效好友。
  • Get number of sent broadcast messages
    • 透過這個功能可以知道從某個時間到目前為止所有 Broadcast 收到的訊息。

希望這一次的總結介紹能夠讓開發者更了解官方帳號 2.0 ,更能夠善用相關特性製作出更有創意的聊天機器人。

更多相關內容:

使用免費的 LINE Notify 機制,為你的網站服務發送大量通知訊息 / LINE API Expert -David Tung

投影片

20190524 LINE Notify (LINE Developer meetup) from David Tung

第二個部分由 David Tung 董大偉老師介紹的就是如何透過 LINE Notify 來讓你的網站服務發送免費的通知訊息。首先講者先介紹 LINE Notify 適合使用的一些場景,舉凡系統警示,到貨通知與優惠折扣都建議使用 LINE Notify 來達到免費傳遞通知訊息。

首先如果使用者想要訂閱 LINE Notify 的話,可以透過訂閱網頁的鏈結導向到 LINE平台,讓使用者決定想要收到通知的頻道。選擇的頻道可以是一對一,也可以是任何一個聊天室。

此外董老師也將相關資訊轉寫成一篇文章,也歡迎大家去詳讀。

Angular 與 LIFF 共舞 / LINE API Expert - Will 保哥

投影片

Angular 與 LIFF 共舞 (LINE Developer Meetup) from Will Huang

最後的講者是 Will 保哥,講者介紹 LIFF (LINE Frontend Framework) 的主要功能並且也介紹了 LIFF 能夠有的相關功能:可以讓你透過前端網頁的功能與使用者進行互動。 並且也介紹了每一個 API 的相關功能,不論是: liff.init()liff.getPRofile()… 都有詳細的介紹與範例程式碼。

最後身為開源貢獻者保哥也貢獻了 LIFF Snippets 到 VSCode 的商城裡面,對於想要在 VSCode 開發 LIFF 應用的開發者是一個相當有用的工具。

活動小結

本場活動是本年度第二次的開發者小聚,除了讓開發者能夠更了解官方帳號 2.0 之外,也希望能夠透過 LINE API Expert 的分享可能讓更多開發者了解 LINE Notify 與 LIFF 的相關應用。除了希望讓更多使用者能夠了解 LINE Notify 與 LIFF 之外,也希望更多開發者能夠使用這兩個技術開發出更有趣的應用。

立即加入「LINE開發者官方社群」官方帳號,就能收到第一手Meetup活動,或與開發者計畫有關的最新消息的推播通知。▼

「LINE開發者官方社群」官方帳號ID:@line_tw_dev

關於「LINE開發社群計畫」

LINE今年年初在台灣啟動「LINE開發社群計畫」,將長期投入人力與資源在台灣舉辦對內對外、線上線下的開發者社群聚會、徵才日、開發者大會等,預計全年將舉辦30場以上的活動。歡迎讀者們能夠持續回來察看最新的狀況。詳情請看 2019 年LINE 開發社群計畫活動時程表 (持續更新)https://engineering.linecorp.com/zh-hant/blog/line-taiwan-developer-relations-2019-plan/)

[TIL] 介紹一個好用的剪貼簿軟體 PasteApp

前言:

最近有一點久沒有寫技術相關文章,因為大多數的文章都在撰稿中,而且自己在忙碌 LINE Developer Meetup 的相關投影片。 回過頭來自己答應一週要寫一篇文章的,就來專文分享自己近幾年有花費買的好用的軟體吧。首先第一個就是 PasteApp

為什麼需要一個好用的剪貼簿軟體?

這邊的剪貼簿並不是指實際上的剪貼簿,也不是在隨意貼的軟體。而是專門儲存複製貼上的歷史紀錄的工具軟體。

經常在筆電的操作上,因為有太多資料需要複製與貼上,往往會在視窗間切換花費了太多的時間。比如說在購物得時候,可能需要輸入地址跟電子發票。常常會花費很多時間回去原來的視窗為了複製原來的資料。這個時候,就需要好好思考與尋找一個剪貼簿軟體來協助。

但是其實剪貼簿軟體何其多,之前也經常撰寫個人的剪貼簿功能後台。那該如何挑選一個實用的剪貼簿軟體呢?

“蓋紹哩後又” (介紹你好藥) ,在這裡就跟各位介紹一個個人相當喜愛的剪貼簿軟體 — PasteApp

軟體功能:

在這裡簡單介紹幾個強大的功能:

Unlimited history

可以有相當長的剪貼紀錄,並且可以看得出來。這個軟體可以清楚地條列出剪貼簿裡面的資料。不論是文字,圖片,檔案,還是圖片。都可以一目了然,清清楚楚。

讓我最喜歡的功能(沒有之一)就是可以搜尋剪貼簿的內容。如果想要在剪貼簿裡面尋找三天前的某段內容,使用其他的軟體可能需要不斷的向下拉,向下尋找。但是使用 PasteApp 就相當的簡單,可以透過某些關鍵字來搜尋,使用上更加的方便與順利。

iCloud sync

最後一個功能是,就是可以透過 iCloud 同步來讓你的手機與電腦同步相同的剪貼簿。實在是太方便了。在使用上可以讓你的手機馬上貼上你在桌機的鏈結,再也不需要任何 note 來暫存。 XDD

買下去!不會後悔

這個軟體是付費軟體,但是採取買斷的方式其實相當的佛心。$14.99 的費用其實真的很超值。筆者自從買了之後,換電腦的第一件事情就是裝 PasteApp,之前電腦壞掉要換到測試電腦也是裝這個。真的好用到覺得沒裝好像殘廢一半一樣。 推薦給大家!!

Reference:

[Google] Google ML Study Jam - Machine Learning APIs

前言:

Google ML Study Jam 是 Google Developers 所設計的免費機器學習培訓計劃。

在這個初級培訓課程中,參加培訓的學員僅須運用 Qwiklabs 線上學習平台,按照自己的步調及時間,實際動手操作由培訓計劃所指定與機器學習相關的 Hands-on Labs,便能自我學習而擁有基礎開發 AI/ML 應用程式的能力。

只要完成指定課程中的四項,就有機會獲得最新版本的 TensorFlow T-Shirt 。看起來實在相當棒就忍不住把 Machine Learning APIs 都上完了。

這邊分享一下相關內容吧!

課程內容:

整篇課程其實相當的實用,也由於整個 HANDS-ON LAB 透過 qwiklabs 逐步教學從登入帳號,開啟 cloud console 都很容易可以完整。 而 Lab 重點也在希望能夠讓使用者整個走過一次相關的使用流程。 所以每個步驟力求簡單明白,不需要任何的程式設計基礎。

課程特點:

全部的 hand-on lab 在設計上相當友善,只要完整跟著做一次通常可以順利完成。整個課程有以下的優點。

完全免費的帳號與清楚登入流程

每個小課程有專屬的帳號,不用擔心你不小心學任何 GCP 的功能因為忘記關掉伺服器而花了大錢。

清楚的指令提供複製貼上

由於 GCP 許多功能除了啟動與狀態回報之外,大多數的功能都還是透過 console mode 的指令來溝通(或許說不少是透過 API 呼叫方式)。

這時候最怕就是指令過時或是需要自己摸索,這邊的指令全部都是清楚條列,並且可以一個按鈕複製讓學習上完全沒有障礙。

完整了解許多 gloud console 提供的功能

雖然說之前很常使用 GCP 上面的許多功能,必須得說這次的課程讓我清楚更多平時不常使用到的功能。

  • 透過 gcloud console 編輯檔案
  • 透過 gcloud console 來跑一個 local web server ,並且使用 web preview 來查看 8088 的輸出。

但是學習上也不是沒遇到問題啦~分享一下我遇過的問題。

課程遇到的問題

Scanning User-generated Content Using the Cloud Video Intelligence and Cloud Vision APIs

https://google.qwiklabs.com/focuses/1831 Scanning User-generated Content Using the Cloud Video Intelligence and Cloud Vision APIs 課程好像會卡住。

> gcloud beta functions deploy GCStoPubsub --stage-bucket gs://${STAGING_BUCKET_NAME} --trigger-topic ${UPLOAD_NOTIFICATION_TOPIC} --entry-point GCStoPubsub


ERROR: (gcloud.beta.functions.deploy) Missing required argument [runtime]: Flag `--runtime` is required for new functions.

原因是因為 gloud beta function deploy 的時候需要標註 runtime ,這裡的範例是使用 nodejs 只要改成以下即可。

gcloud beta functions deploy visionAPI --runtime nodejs --stage-bucket gs://${STAGING_BUCKET_NAME} --trigger-topic visionapiservice --entry-point visionAPI

參考相關 stackoverflow: https://stackoverflow.com/questions/51699289/gcloud-functions-deploy-unrecognized-arguments-runtime-did-you-mean-timeo

Reference:

  • https://siddharam.com.tw/post/20190509/
  • https://darkaries.github.io/2019/05/13/gcpmljam1/

第一屆 LINE Taiwan Technical Writing Day

前提

LINE 台灣開發者關係與技術推廣團隊 (Developer Relations) 除了對外部的開發者推廣之外,有另一個很重要的使命就是希望能夠透過相關的開發者活動能夠激發內部的開發者的潛力,不論是透過內部訓練或是相關的活動。而這次的活動就是希望能增進內部開發者技術文件的寫作能力外,更重要的是希望能夠增加開發人員彼此的溝通技能。也期許透過本次的訓練能夠增進內部開發者彼此技術文件分享的能力,也希望增進對外文件的撰寫品質與數量能夠更好。

什麼是技術寫作日 (Technical Writing Day)

身為開發者對於文件的寫作總是有許多困難的地方,不論是不知道該如何撰寫之外就是經常不確定如何撰寫讓使用者能夠淺顯易懂的文件。開發者經常認為程式碼能夠表達許多事情,而無法有效的將讀者或是使用者需要的資訊寫在文件上。 在開發者部落格寫作上,開發者們經常不知道該如何安排他們的文章內容,順序與如何有效地表達。

技術寫作日其實是一個由 LINE 技術文件作家 (Technical Writer) 團隊所籌畫的一系列活動。日前不僅在韓國有舉辦過(請參考這篇文章),其實在日本也舉辦過。這次很開心能遠從韓國與日本邀請到他們來到台灣舉辦。 不僅僅邀請了所有的內部開發者,連經常需要撰寫技術文件的團隊也都邀請一起來了解,並且增進我們技術文件的寫作能力。

關於技術寫作日的課程簡介

技術寫作日是一整天的訓練課程包括了早上的基礎訓練之外,下午有許多進階的訓練課程。在這裡簡單的分享幾個重要的課程與相關的介紹,分享給各位讀者。

Introduction to Technical Writing

首先登場的是由 Technical Writing Team Lead 所帶來的 Introduction to Technical Writing 。透過帶出軟體開發的流程 ( Concept, Analyze, Design, Development and Test ) 帶出其實技術寫作應該視為軟體開發的流程。需要有足夠的構思,設計之外,更需要詳細寫作後的測試。也就是重新檢視寫作內容,測試所有範例程式碼確認所有技術細節都是正確並且是最新的狀態。

LINE 的開發者有以下幾種方式是透過技術文件方式來做溝通:

  • Wiki: 為開發者內部溝通最主要的管道,透過可以容易分享,共同編輯的 Wiki 系統。 許多的技術相關的溝通與討論往往是在 Wiki 上面而不是 Email ,讓許多的變更與分享更加有效果也能夠允許更多人開發同仁能夠一起協作。
  • README 文件: 每個專案的負責人都會撰寫相關的介紹文件,不論該專案是內部專案還是開源的專案。
  • API 文件: 平台團隊與 SDK 團隊經常會準備的相關技術文件,不論是內部專案或是外部的公開 API 。都會有清楚的 API 文件。

這些部分的文件撰寫都很需要 Technical Writing 的技術寫作概念的持續增進。

Introduction to P.O.W.E.R. Writing

第二部分介紹的是相當有用的概念 P.O.W.E.R Writing , 而 POWER 其實是五個字的縮寫。

  • Preparing
  • Organizing
  • Writing
  • Editing
  • Reviewing

在寫作技術文件的時候,透過使用 POWER 的原則可以讓寫作更加的順利,也可以增加文章的可讀性與減少錯誤的產生。這五個字就像是一個心法一樣,相當的重要而且相當的有用。方便我們可以準備技術的素材,組織整個文章架構,寫作更清楚的文字,透過使用更易懂的方式來修改,最後要不斷的審核。相當有用的一堂課程。

Writing Blogs

這一段的教學主要是簡介 LINE Engineering Blog 的發布流程,與為何要撰寫 Engineering Blog 與有哪些好處。

為何要撰寫 Engineering Blog 的部分。透過將技術文件分享在文字的過程,可以從頭到尾仔細地審視了解的技術,遇到的問題與解決的方法。這邊也鼓勵每個開發者都應該要試著撰寫部落格,除了可以增進每個人對於技術溝通能力之外,更可以清楚了解自己是不是還有不清楚的地方。 而且相當建議每個開發者透過公司的平台來發表相關的文件。因為除了平台的比較受到大家的重視之外,每一篇文章的發行需要透過許多專家層層的把關。從每一個文字的校對到資訊安全的審核,讓每一位開發者只需要專注在自己的文字表達部分。

每個開發者透過 Engineering Blog 還可以獲得許多同仁對於技術文字表達方式與內容的排列方式有著更深層的交流,真是獲益良多。

Organizing and presenting information using the wiki

Wiki 是 LINE 開發者作為內部技術溝通很重要的一個工具,不論是會議記錄,產品規格,甚至到部落格文章草稿。如何能夠有效地呈現卻是困難的,所以如何展現與擺放足夠的資訊在 Wiki 上面就是一門學問。這一場分享中,講者講解了如何透過 Wiki 的一些工具告訴大家該如何來有效的將資訊作為有效的相互鏈結,分享並且協作的方式。最後講者也分享一個很有趣的例子:

就在出國六個小時前,忽然找不到護照。不論在行李箱裡面,或是他的辦公桌上都找不到,最後卻在舊衣服堆裡面發現了。

這個故事就告訴我們,除了資訊的足夠之外如何有效地「擺放」你的 Wiki 頁面讓大部分的人能夠透過關鍵字或是階層式資料夾排列方式來尋找到文件就是一門大學問。

Writing developers guide

如何要開始撰寫開發者指南,永遠都是開發產品或是微服務 (microservices) 的很痛苦的地方。而這一段分享就是透過分享如何撰寫微服務的開發者指南來分享該文件應有的架構與特點。撰寫開發者指南講者建議就要由讀者的面向來出發。如果要撰寫一個微服務的安裝手冊,安裝需求與如何安裝就是每個使用者第一次看文件馬上會著眼的地方。那麼就開從這些地方開始準備,而且要不斷的反覆測試你的開發者指南,並且清楚地記錄下每一個容易犯錯的地方。不要讓使用者發生了錯誤而不知道該怎麼自行解決問題,這就是開發者指南最重要的幾個部分。

總結

身為 LINE台灣資深開發技術推廣工程師(Technical Evangelist) ,深刻的認為撰寫良好的技術文件的技巧也就是在磨練著開發者彼此對於技術的溝通能力。許多的開發者在文件撰寫上往往不知道該如何開始,如何將整個來龍去脈做有效與系統化的呈現。 透過技術寫作日的訓練,希望就是能夠讓開發者們的溝通能力更上一層樓。彼此能夠更精進文件撰寫能力與系統思考的組織力。 開發者關係與技術推廣部 (Developer Relation) 將持續引進與推逛更多內部開發者的相關課程訓練,對外也將持續的努力提供更好的,更友善的 「LINE開發社群計畫」。

關於「LINE開發社群計畫」

LINE今年年初在台灣啟動「LINE開發社群計畫」,將長期投入人力與資源在台灣舉辦對內對外、線上線下的開發者社群聚會、徵才日、開發者大會等,預計全年將舉辦30場以上的活動。歡迎讀者們能夠持續回來察看最新的狀況。詳情請看 2019 年LINE 開發社群計畫活動時程表 (持續更新)

LINE台灣持續招募中

你是有能力的開發者嗎? 如果喜歡開發系統卻對於文件撰寫不知道該如何起頭,在 LINE 台灣會有相關的課程與訓練有系統的指導內部的開發者。想要加入我們嗎? 快到以下的地方尋找你有興趣的職缺。

LINE 開發社群計畫: 2019/04/23 GolangTW#40@LINE

前提

大家好我是 LINE 台灣的 Technical Evangelist - Evan Lin 。「開發社群計畫」是今年一個開發者關係與技術推廣部門一個重點,將在今年一整年中,在台灣舉辦對內的技術交流、教育訓練,對外的社群聚會、校園演講、開發者徵才日與開發者大會等各式各樣超過30場的活動。我們希望創造更多技術分享與跨國串連的機會,同時,持續招募優秀的人才加入LINE台灣的開發工程團隊。

四月的第二場社群邀請到 Golang Taipei Gathering 社群的朋友來到 LINE 台北辦公室,並且一起來分享與討論 LINE 內部開發流程上針對 Golang 使用上的心得分享。這次的相關資訊可以在 meetup Golang Taipei #40 找到所有的內容介紹,

Go GraphQL in LINE SPOT/ LINE - Denny Tsai

投影片

首先上場的是來自 LINE Spot 的工程師 Denny Tsai 。他也介紹了即將在 LINE 2019 下半年上限的全新服務 – LINE Spot 。提供消費者輕鬆搜尋所在地鄰近的店家資訊,以及店家進行中的特惠活動,消費者想要的資訊、店家想曝光的資訊都可以在 LINE SPOT 一站完成。這樣的服務將在 2019 年的第三季上線,敬請大家期待。

img

接下來講者開始分享如何透過 Go 跟 GraphQL 來當作微服務( Microservices ) 的 API Gateway 的經驗分享。由於產品的微服務漸漸增加,各個微服務都會提供個別的 API 供前端使用。除了 HTTP 的 API 之外還會多出了其他溝通的介面 (gRPC, Thrift…) ,如此一來造成前端與微服務間的串接複雜度提升。這時候會使用 API Gateway 當作統一進入點 ,進而使用 GraphQL 提供前端更好更有彈性的查詢方式,希望能夠 GraphQL 解決聽眾們經常遇到的問題。

GraphQL 是一個 Query Language 並且具有以下的優點:

  • 單一進入點 (Single Endpoint):
    • 不論是各種的不同的 API 需求,通通透過單一的進入點。
  • 由客戶端來定義需要的資料型態 (Response shape defined by the client):
    • 客戶端(通常指的就是前端)可以修改自己需要的資料型態,順序與排列方式。不需要修改任何的後端代碼。
  • Transport Agnostic:
    • GraphQL 並不是一種語言而是一種標準,可是其實他並沒有限制所使用的傳輸層,因此可以使用任何適合的方式作為 GraphQL 的傳輸層。

此外講者也介紹了許多關於 GraphQL 有用的開發工具:

  • GraphiQL: 一個在瀏覽器上的 IDE 可以讓你查詢與瀏覽 GraphQL 的工具。
  • GraphQL Playground: 開發 GraphQL 的 IDE 與測試工具,提供許多良好的介面與具有互動式的文件。

除了這些工具之外,由於本場分享關於 Golang 的開發者。講者也分享了市面上比較熱門的 GraphQL in Go 的開發套件:

  • https://github.com/graphql-go/graphql
  • https://github.com/graph-gophers/graphql-go
  • https://github.com/99designs/gqlgen

這三套大概是搜尋 Golang 與 GraphQL 最容易被人找到的三個套件(因為 star 數也最高),但是講者最推薦 gqlgen 原因如下:

  • Schema first
  • Type safe
  • Less boilerplate

而使用上也相當直覺,建立 schema 後,透過 gqlgen 初始化之後它會把所以相關需要的框架都建立好。只要進去將相關的 Resolver 內容填寫正確就可以跑起這個 GraphQL server 。

最後 LINE Spot 其實也希望有更多對於 Golang 有熱情的夥伴一起加入。

LINE Now/Spot 相關職缺:

認識 Go 的 morestack/ Lee Xun (SRE@KKTIX)

投影片

(本部分會不截圖,請各位去投影片內部找尋相關內容)

第二位講者是李洵,他所帶來的題目相當的硬但是也相當的有趣。討論的是 Golang 裡面的 morestack ,細節因為相當的硬且深入建議大家還是要去投影片鏈結細讀講者提供的投影片。

首先講者先分享了他自己為什麼喜歡 Golang 的原因: 除了 Goroutine 之外,就是 Golang 是編譯的程式語言。可以很容易地從組合語言來了解程式碼的執行細節。 講者也透過了比對了 C 語言的 Hello world 與 Golang 的 Hello 讓大家了解組合語言解讀的時候, Golang 的編碼上還要複雜的許多。接下來就拿了一個 C 語言與 Go 對於變數生命週期的管理來討論 Golang 在變數生命週期的管理是不同的 (這個在 Golang 裡面稱為 escape)。 由於在 Golang 裡面 :

  • return A{}:將記憶體放在 gstack
  • return &A{} :在 compile 的時候記憶體放在 gheap 之間。

所以 Golang 記憶體的位址並不會因為變數的生命週期結束後,傳回記憶體位置而會拿到已經被佔用的記憶體位置。可以在 func 前面加上 //go:noescape 來關閉這項操作,這樣就會出現和 C 一樣的現象。

接下來講者又丟出了一個大家常有的疑問:「 goroutine 雖然好用,但是有沒有開發者會想了解目前正在執行的 goroutine thread ID? 」 因為在 C 語言中,每次 Create Thread 都可以拿到 thread ID 來清楚知道目前執行的 ID ,那麼 goroutine ID 呢? 接下來講者就分享了如何透過 getgoid() 來取得 TLS (Thread Local Storage) 資料方式,並且講解如合透過 Memory alignment 來解讀目前的資料結構進而找出 getgoid() 。

接下來透過一個 deadloop 的範例程式開始要帶入本次演講的正題: 什麼是 Golang morestack。

在 Gorotine 裡面加入一個 deadloop (也就是 for {} 什麼事情都不做) 發現如果在裡面做記憶體位置處理的話。某些情況下會發現你的 deadloop goroutine 又會被其他 goroutine插隊(preemptive)。 那麼要多大的記憶體操作才會造成整個 goroutine 是可以被插隊呢? 這時候先跳去討論了在不同的平台上面的 GOMAXPROCS ,也講解了不同平台上面如何取得你的CPU 數目的方式。 透過這些處理方式才能了解,由於有 StackGuard 當一個 goroutine 裡面的變數資料大過於 4KBi 由於超過了 gstack的資料空間大小,就會呼叫到 morestack 來搬移資料的方式會有極大的可能判定這些資料是比較少使用的。 就會將該 goroutine 是修改為可以被插隊的。 當 goroutine 內的資料空間大小介於 128Bi 與 4KBi 之間在 morestack 的判斷中,由演算法決定該不該被插隊。反之,比較小的區域變數空間就絕對不會被插隊。

或許這樣的設計也提醒開發者,如果發現 goroutine 本來跑的一些流程莫名其妙被中斷去跑另外一個 Goroutine ,也或許就是因為區域變數佔用太多記憶體而呼叫到 morestack ,造成系統判定該 goroutine 是可以被插隊的。

很有深度,相當硬但是又有趣的分享。

總結

很開心邀請到 Golang 社群來到 LINE 台灣辦公室舉辦 meetup , 也很開心第一次能夠請到 LINE Spot 的工程師來跟社群們分享開發上的經驗。

關於「LINE開發社群計畫」

LINE今年年初在台灣啟動「LINE開發社群計畫」,將長期投入人力與資源在台灣舉辦對內對外、線上線下的開發者社群聚會、徵才日、開發者大會等,預計全年將舉辦30場以上的活動。歡迎讀者們能夠持續回來察看最新的狀況。詳情請看 2019 年LINE 開發社群計畫活動時程表 (持續更新)