[Golang][LINE][教學] 使用 Icon Switch 來變更聊天機器人的暱稱與圖示

(圖片來自: LINE Developer News )

前言

曾經在 TECHPULSE 2018 的演講上有出現過的 Icon Switch 功能,當時受到相當多開發者的詢問。但是由於當時 Icon Switch API 仍然算是 Partner API (指的是需要透過跟 LINE 申請合作的開發廠商,才能使用的功能),所以能使用的開發者並不多。

很開心的這樣的功能總算開放給所有的開發者來使用,本篇文章就是透過一個簡單的範例來讓開發者們了解該如何使用這樣的功能。

範例程式碼

https://github.com/kkdai/line-bot-icon-switch

如何部署範例程式碼:

  • LINE Developer Console 建立相關的 Provider 跟 Channel

  • LINE Developer Console 建立一個 LINE Messaging API Channel 並且打開 Message API 的功能,並且將以下兩個資訊記住:

    • Channel Secret
    • Channel Token
  • https://github.com/kkdai/line-bot-icon-switch 按下 Heroku Deploy ,建立該帳號並且部署該服務。這時候會要輸入三個資訊:

    • CHANNEL_SECRET
    • CHANNEL_TOKEN
  • 記得把 https://test-api-1234.herokuapp.com/callback 加到 LINE chatbot web hook 才能正確地啟動聊天機器人。

實際跑一個範例 (demo)

  • 先 Deploy 該範例專案,或是直接加入測試機器人 @656gvdsu (也可以掃描以下 QR Code)

  • 輸入任何字,聊天機器人會提示你要可以選擇回覆的人「Brown」,「Cony」或是 「Sally」。

  • 輸入「Brown」,「Cony」或是 「Sally」 就會看到機器人更換他的圖示與暱稱來回覆你。

程式碼解釋

(註: 相關程式碼展示透過 Go)

{
    "type": "text",
    "text": "Hello, I am Cony!!",
    "sender": {
        "name": "Cony",
        "iconUrl": "https://line.me/conyprof"
    }
}

這段由 Icon Switch 的文件上面擷取的範例,可以了解 Message Object 新增了一個 sendeer 的物件,裡面包含了兩個資料:

  • name: 修改的暱稱,但是請注意“避免混淆使用者”,所以全名會是 "暱稱 from OA 名稱" 這樣的全名顯示方式,可以確定發言的是官方帳號(不是某個真人),不容易讓使用者混淆。
  • iconUrl: 圖示的修改,圖片的來源必須是 HTTPS 。

找出 LINE Friends 的圖示

//For LINE Friends images, please refer to https://developers.line.biz/media/messaging-api/sticker_list.pdf
const (
BrownImage string = "https://stickershop.line-scdn.net/stickershop/v1/sticker/52002734/iPhone/sticker_key@2x.png"
ConyImage string = "https://stickershop.line-scdn.net/stickershop/v1/sticker/52002735/iPhone/sticker_key@2x.png"
SallyImage string = "https://stickershop.line-scdn.net/stickershop/v1/sticker/52002736/iPhone/sticker_key@2x.png"
)

相關的圖示來源可以參考這個 LINE Sticker 文件 ,在這份文件可以找出公開且免費使用的貼圖(請注意,除了這些開放的,其他都需要驗證與購買才能在 LINE 視窗內看到)。

發送修改暱稱

//If user already select the sender feedback, prepare user nick name and icon here.
switch {
case strings.EqualFold(message.Text, "Brown"):
sendr = linebot.NewSender("Brown", BrownImage)
case strings.EqualFold(message.Text, "Cony"):
sendr = linebot.NewSender("Cony", ConyImage)
case strings.EqualFold(message.Text, "Sally"):
sendr = linebot.NewSender("Sally", SallyImage)
default:
//User input other than our provide range, notify user by quick reply.
if _, err = bot.ReplyMessage(event.ReplyToken, linebot.NewTextMessage("Please select following LINE Friends to reply you: Brown, Cony and Sally.")).Do(); err != nil {
log.Print(err)
}
}
if sendr != nil {
//Send message with switched sender.
if _, err = bot.ReplyMessage(event.ReplyToken, linebot.NewTextMessage("Hi, this is "+message.Text+", Nice to meet you.").WithSender(sendr)).Do(); err != nil {
log.Print(err)
}
}
view raw icon.go hosted with ❤ by GitHub

這段範例程式碼該如何如何使用 Icon Switch 的功能,最重要的就是以下這段:

linebot.NewTextMessage("Hi, this is "+message.Text+", Nice to meet you.").WithSender(sendr)

也就是每次送訊息得時候,需要指定發送者的相關資訊 WithSender() 即可。

如何使用 Icon Switch 來推廣你的官方帳號

接下來這邊開始介紹幾個可能很適合使用 Icon Switch 功能的應用場景。

客服業可以透過 Icon Swtich 讓使用者有更好體驗

比如說銀行的客服官方帳號,可以如果使用者在聊天過程中希望有「真人客服」可以幫忙協助的話,可以透過 Icon Switch 來切換圖示代表轉換到真人客服。

LINE 官方帳號活動或遊戲透過 Icon Switch

有一些人透過 LINE Bot 來玩一些網路遊戲的想法,透過 Icon Switch 可以讓使用者更容易了解跟誰在對談。或是這時候是的遊戲狀況。

比如說: 狼人殺類型遊戲,桌遊等等相關類型。

此外,透過 Icon Switch 也可以來做一些活動公告,讓使用這更有親切的感覺:

  • 透過嫦娥來發送中秋節優惠
  • 透過年獸來發送過年活動訊息

總結

Icon Switch 是一個免費,並且可以讓使用者相當有感的功能。希望開發者們能夠一起來發揮創意,來開發出有創意的 LINE Bot 吧。

『Create WoW for the world!」

參考

[研討會心得] 2020/03/17 Chatbots 17 at Dcard

前言

大家好,我是 LINE Taiwan 的 Technical Evangelist - Evan Lin。這次很開心受到 chatbot 社群的邀請,參加了 “Chatbot meetup 聊天機器人小小聚 17 @ Dcard” 的聚會活動,並且分享 LINE API 更新與個人開發的心得。在此也跟各位分享本次參與的心得,並且也希望透過社群分享的力量能夠讓聊天機器人的開發動能更加的盛大。

由於 Chatbots Meetup 本身屬於社群自主性的活動,裡面也有許多社群朋友所贊助的閃電秀。裡面的所有內容也是相當的難得與有趣。也希望能夠透過本篇文章讓大家稍微了解 Chatbots Meetup 社群閃電秀的魅力。

這次場地感謝 Dcard 贊助在 Dcard 的 14 樓辦公室,有一個專門提供給技術社群分享的空間。相當的不錯,也希望有更多的社群來這裡分享。

由於防疫的要求,這也是我第一次參與到全程配戴口找的線下實體活動。感謝主辦單位準備完善的酒精消毒與口罩配戴叮嚀,讓參與的人與工作人員都能夠受到良好的保護。

LINE Platform Update 202003 / 資深開發技術推廣工程師 Evan Lin

傾聽開發者反饋,以 LIFF Server API 為例:

LINE 對於開發者的反饋是相當重視的,歡迎每一位開發者與我們共同成長,互信與互惠的經營著這個平台。在 2020/01/21 的時候曾經在網站上宣布著 LIFF Server API 即將在三月底停止功能之後,收到了許多開發者的回覆,對於與客戶之間的合作方式將會因為 LIFF Server API 的停用而造成莫大的困擾。

DevRel 團隊蒐集到相關的案例與討論後與總部的開發團隊討論之後,也很開心的獲得了計畫團隊的了解。將時程停止了,更多訊息可以參考 LIFF v1 API 及停用日期變更。

更好用,讀取更快速的 LINE Developer 網站

2020/01/27 我們曾經宣布開發者網站 (LINE Developer) 有了大幅度的改版,變得更快!更好用!最近有一篇更詳細的文章敘述,他們如何從 Middleman 轉換到 VuePress 的過程,歡迎觀看。

相關文章:

更有效地分眾訊息 - Narrowcast 與 Custom

“我們不是不喜歡廣告……我們只是不喜歡與我們無關的廣告。” 同事 Tan 在文章「透過 Narrowcast API 在 LINE Chatbot 上發送”精準”且”討喜”的訊息」裡面有介紹到這個事實。 使用者們並不討厭廣告,但是討厭被跟自己無關,自己不在意的廣告騷擾。經常出現無關的廣告訊息會增加使用者的好友封鎖率。

因此, LINE 在一月底推出了分眾管理的相關 API ,透過主要提供的三種分眾方式:

  • 人口資料挑選方法:
  • 透果使用者的統計資訊來分眾,年齡,性別,甚至是地區,都是可以讓開發者可以根據來分群的方式。
  • 點擊再行銷:
  • 根據發送過的訊息內網頁鏈結的點擊用戶,針對該用戶再來做相關的行銷。
  • 曝光再行銷:
    • 根據發送過的訊息有收到並且已讀的用戶,針對該用戶再來做相關的行銷。

針對以上所以的三種方式還可以做相關的運算比對( OR, AND ) 的方式,更可以讓商家可以找出想要針對的客戶:

  • 九十天前加入的好友,並且為男性的年輕人
  • 點擊過鞋子類商品鏈結的女性好友

這些都是相當好用的範例,更多的範例可以看由廣告與商業部門同仁提供的「LINE 生活圈」官方粉絲團的相關介紹影片

相關資訊:

新的 LIFF App 將不在支援 LINE Things 中的 BLE (藍芽)通訊功能

LINE Things Developer Trial 已停止提供 LIFF app BLE 新功能,且未來將不會恢復提供; 目前僅提供自動通訊功能 (automatic communication)。

2020 年 2 月 10 日之後建立的新 app 將無法於 LINE Things Developer Trial 中使用 LIFF app BLE 新功能。

相關鏈結:

LIFF: Share Target Picker

自 LIFF v1 時代以來透過 liff.sendMessages() 將消息發送回聊天室(以用戶的名義)或的功能,僅打開該LIFF的聊天室。

不少開發者建議 LINE 增加 LIFF 與朋友或群組分享消息的能力。這就是 liff.shareTargetPicker()

開發前需要了解的五件事

  • 從 10.3.0 版開始,LINE App 將支持 “Share Target Picker” (註解: 如果在外部瀏覽器,則不需要等待 LINE App 更新)
  • “Share Target Picker” 僅在 LIFF v2 中可用。
  • 來自 “Share Target Picker” 的消息將代表用戶發送(就像我們向朋友發送消息一樣)
  • 純文字圖像視頻音頻位置Template Message(僅URI操作)Flex消息是可以通過 “Share Target Picker” 發送的消息。
  • 可以在外部瀏覽器中使用 “Share Target Picker” ,但必須先使用LINE Login 進行身份驗證

關於 Share Target Picker 的版本支援部分:

  • LINE 裡面打開網頁 -> IAB (In-App-Browser) ,依賴於 LINE App 版本。 iOS 需要 10.3.0 (目前還沒上架)
  • 外部瀏覽器打開網頁 -> External Browser 不依賴 LINE App 版本。

所以建議大家可以把 LIFF v2 開發在各位的電商網站之中….

相關展示:

或是觀看以下的展示影片:

相關資訊:

LINE Bot 案例分享 - 口罩查詢 / David 董大偉

投影片

最近由於新冠病毒的盛行,全國都一起在忙碌著防疫。董老師也不落人後,透過製作一個口罩查詢機器人來教導大家關於快速部署一些心法。

相關的開發過程:

  • 資料轉換: 衛福部的資訊是 csv ,需要轉換成資料為 JSON 。
  • 方便查詢: 透過 LINQ 來對資料做相關的查詢。
  • 如何定期更新資料: 由於資料剛上線的前幾天,資料查詢需求爆量。需要保存一次資料在 local storage,避免資料因為查詢不到而無法顯示。 並且透過外在服務去測試服務是否還在線上(方式就是 Refresh 相關資料)。

除了開發之外,其實部署跟維運的流程也相當重要:

  • 需要能夠負擔大量用戶:打造具有 HA (High Availability) 的架構,能夠自動水平擴展(Auto-Scale) 。
  • 部署的穩定度: 自動更新版本(自動上版),藍綠部署(Canary Release: 也就是將新功能部署給某一些用戶,可以了解是否有問題發生,避免因為大量部署造成停用的問題)。
  • **服務的可量測性(Measurability) **: 透過外在服務 Azure AppInsights 來幫助量測服務的健康度。

如何 LINE Notify 來主動通知使用者(免費的方式):

LINE Notify 是 LINE 提供具有訂閱的免費服務,許多的開發者除了拿來做訂閱服務外,更可以拿來通知使用者。但是要如何讓使用者能夠「主動訂閱」 LINE Notify 呢?

其實是可以透過 Action Button 來訂閱,但是有一些需要注意的部分:

  • 訂閱服務畫面,拉到最下方需要同意使用者條款。並且確定訂閱。
  • 使用者經常不小心把 LINE Notify 的 OA 封鎖,造成無法訂閱其他資訊。

閃電秀

三個講者之後,接下來就是介紹這個社群最有魅力的部分就是閃電秀。所有的閃電秀可以參考這篇共筆文章 https://hackmd.io/@chatbot-tw/meetups-017,由於都是五分鐘的閃電秀,主要內容快速用條列介紹給各位:

  • 防疫駭客松,4小時創作「尋找口罩」LINE Bot!/ 陳佳新
    • 投影片
    • 簡介:
    • 講者介紹如何在四個小時內透過最快速的方式來打造出一隻「尋找口罩」的聊天機器人。
  • 跨群組尬聊一波!/ 卡米哥
    • 投影片
    • 簡介:
      • 透過一個 LINE Chatbot 結合 LINE Notify 的服務來打造跨聊天室的聊天機器人。不同群組裡的對話都會透過 LINE Notify 來相互轉傳。相當有趣的創意!!
  • 用 LINE 玩桌遊 - 殺手遊戲 / Dairan
    • 投影片
    • 簡介:
      • 透過 LIFF 與聊天機器人來打造一個線上殺手遊戲(一個類似狼人殺的遊戲),遊戲過程相當的有趣。
  • LINE 防翻群機器人 / Dairan
    • 投影片
    • 簡介:
      • 講者在開發殺手遊戲的同時所激發的靈感,一樣是透過 LIFF 與 Chatbot 來讓使用者可以在被翻群機器人翻出的時候,收到加回群的鏈結。

活動小結

社群分享永遠是讓創意激盪的最佳方式,而 Chatbots Meetup 是一個很熱情與充滿創造力的社群組織。也希望有更多有創意的開發者願意加入 LINE Chatbot 的開發行列,更希望能熱情的參與社群的活動與一起來分享。

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

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

關於「LINE開發社群計畫」

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

[好書分享] 被討厭的勇氣:自我啟發之父「阿德勒」的教導

被討厭的勇氣:自我啟發之父「阿德勒」的教導
原文: 嫌われる勇気 : 自己啓発の源流「アドラー」の教え
作者: 岸見一郎、古賀史健  
譯者: 葉小燕  
ISBN: 9789861371955

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

前言:

這本書大概算是一本相當知名的書籍,也一直出現在我的推薦清單裡面。其實這一本也看了很久,每每看一個章節都需要不少的時間去反芻裡面的內容,思考許多不同層面的問題。 經常裡面有一些對話,都會讓人掉入過往的時空情境而不斷的思考與反省。

即便我現在的工作職責可能是最不怕被人討厭的(?),但是我之前在工作的時候其實相當的在意人家的看法。所以一直常常聽到人家跟我講過這本書。 但是卻一直沒有想讀完的勇氣(怕被討厭?),所以也一直無法分享。去年買來之後,間斷地看了這本書,時而讓我開心,時而讓我心有戚戚焉。

如果你很怕被同事(朋友)討厭,很怕講錯話被人輕視,很怕問錯問題? 或許你也該來看看這本書。

內容簡介:

為什麼人們一直無法改變?
為什麼自卑感總是揮之不去?
為什麼我們總是活在別人的期待之下?
為什麼現在無法真實感受到幸福?
或許是因為,我們缺少了被別人討厭的勇氣!

一名憤世嫉俗的年輕人來到哲學家的小屋。
當他聽聞哲學家主張「世界無比單純,人人都能幸福」,便決心前來推翻這種謬論。
這個世界明明複雜混亂,哪裡單純了?
如果幸福真的這麼容易,為什麼他還會過得這麼痛苦?

他們開始了你來我往的思考與論辯。
年輕人原以為哲學家不過是昧於現實的昏庸老頭,
但是一夜又一夜過去後,年輕人反而陷入沉思:這世界到底是什麼樣子?
「所謂的自由,就是被別人討厭。」哲學家說。
怎麼會這樣?怎麼會有人想被別人討厭?
想得到真正的自由,又為什麼非得被別人討厭不可呢?
這個世界,究竟是單純,還是複雜?人,到底能不能得到幸福?……

問題不在於「世界」是什麼樣子,而在於「你」是什麼樣子。

簡介來自讀墨:http://moo.im/a/biuGKR

本書的內容主要透過兩個人的對談,一個是年紀很大的長者「哲學家」跟一個由於環境變化開始自我懷疑的「年輕人」。

兩個人一來一往的對談,從傾聽著「年輕人」的煩惱開始。慢慢的到不同深度與方向的人生哲理的對談。主軸都是圍繞著「阿德勒的心理學」。

了解心理創傷

一開始年輕人相當的沮喪,他遇到了「哲學家」而「哲學家」首先也先跟他分析了心理創傷是如何造成的,心理創傷究竟是誰造成的? 心理創傷往往都是都是有某種「目的性」所造成的習慣。孩子的心理創傷是因為渴望著父母注意的習慣。 阿德勒心理學就堅決的反對心理創傷的存在。

不甘現況

許多人都經常為了現況而煩惱,經常的怨天尤人。「年輕人」有著一樣的疑問,而「哲學家」也很有智慧的回答他,有許多人的不安現況都是自己選擇的,自己造成的。 不安於現在的環境,卻又選擇「不去改變」。不安現況的不幸狀態很多時候只是對於自我的憤怒所造成的。

人際關係

接下來討論的就是許多人都有的困擾:「人際關係」。「哲學家」說人際關係是無法避免的困擾,只要你不是孤零零的生活在宇宙中,人就一定會有「人際關係」的困擾。對於自我認定的困擾,其實也是「害怕別人對自我的觀感」所造成的,許多時候的問題,其實都自己所帶來的困擾罷了。 害怕被人討厭,害怕被人排斥,很多時候也是對於自我的懷疑所造成的。

活在當下與舞動人生

人生不是目的論,像是有許多小漣漪的線性才是。會有不段的新事件產生,所以產生了許多的人生的高潮與低潮的交錯。讓每個人都無法以目的性來評論你的人生。重要的是享受當下,每一步慢慢地踏出像是舞蹈一樣的享受著你的人生才是。

心得:

現在終於把這一本書看完,「被討厭的勇氣」講解的裡面與想法或許你我的知道。 但是能夠真正的打動內心深處的又有多少人呢?哲學心裡書籍大概就是如此吧,道理可能被你所知道,但是你卻從來無法同意的。透過這一本書裡面的對談,語言中的激盪,呼應著過往的情境。也或許你才能「稍微」的感受到作者希望你能夠感同身受的一些想法。

把幾個章節的重點打出來很快,但是許多的對談內容其實會衝擊著你的想法,打動到你的內心。 雖然是敘事般的對談,卻能夠透過許多的對話內容讓你深刻的記憶著。像是從底層呼叫出你的記憶般。

很推薦大家看一下這一本書籍,但是又不推薦一口氣把它閱讀完。或許慢慢地閱讀,仔細地品嘗每一個段落,每一個對談想要表達的意境。或許才能體會作者想要表達的道理。

如此一來才能夠真正的把這本書的意境吸收起來。

[心得] Strange Loop 2019 - Networking and Go: An Engineer's Journey

前提

聽 Podcast 是我一個培養聽力跟學習的管道之一,而 Software Engineering Daily 更是我相當喜愛的 Podcast 頻道。 這一次我聽到一個蠻有趣的議題,就是「Go Networking with Sneha Inguva」,內容就是來自 Digital Ocean 的工程師來分享為何 Digital Ocean 要透過 Golang 來打造他們 Networking Team 網路相關的工具。

而這一篇文章主要是以 Sneha Inguva 在 Stange Loop 這個研討會的錄影內容為主,而 Software Engineering Daily 的 Podcast 為輔。 希望能幫大家整理一下相關的內容。

影片鏈結: https://www.youtube.com/watch?v=XqKvgzXCoXc

Podcast 相關內容: Go Networking with Sneha Inguva

“Networking and Go: An Engineer’s Journey” by Sneha Inguva

Networking and Go: An Engineer's Journey (Strangeloop 2019) from Sneha Inguva

介紹主要分成幾個主軸,作為說明為何 Digital Ocean 使用 Golang 作為 Networking programming 的程式語言。

When to use Go

這裡講者總結了一些 Golang 的優點,這邊不詳細介紹了。

  • Concurrency
  • Server-side
  • Great for CLI tools
  • Easy-To Fuzz-test
  • Easy to write REST/RPC services

上圖解釋了 Digital Ocean 如何 golang 來打造相關的工具。

The network stack

這邊介紹 OSI 的七層架構跟 TCP/IP 的五層架構。這邊就不詳述基本常識的部分。

延伸閱讀:

Networking primitives

接下來就開始介紹如何用 Golang 來打造一些網路原生的工具。

先以 Layer 7 的 Load Balancer 來介紹:

  • Use HTTP protocol.
  • Accept client-side connections.
  • Pass client-side request to one of backends.
  • Return server-response back to client.

介紹到套件:

  • net/http

這邊算是蠻基礎的,也就是透過讀取 HTTP request connections 內容後,去後方找一台 backend (這邊有挑選的方式,或是更多細節可以實作) 連接,也就是透過發送另外一個 HTTP request 得到回覆後,將結果回傳給 client side。

這邊可以看到收到 http.request 之後,馬上透過亂數挑選出 backend ,然後將需求往後端來傳送。

接下來講解,如何開發 Layer 4 的 Load Balancer:

下一個階段,就開始開發一個 Layer 4 也就是 TCP 的 Load Balancer: (並且是支援 streaming socket)

  • Use TCP protocol
  • Accept client-side connection
  • Open backend connection
  • One gorutine to shuttle packet from client-side to backend.
  • Another one gorutine to shuttle from backend to client-side.

因為 TCP 需要有 SYN, SYN/ACK 跟 ACK 三個階段,所以需要透過兩個 gorutine 來持續服務完成整個流程的資料傳遞。

介紹到套件:

  • net

這邊 listen 部分要改用 net.Listen() 這樣才能收到 TCP packet 。

這邊就是開啟往 backend 的連線。

這邊將兩端的 connection 拆分成兩個 gorutine :

  • client –> backend
  • Backend –> client

這一個部分則是一簡單地將資料從一端複製到另外一端。

打造 DHCP Server

從 Layer7 到 Layer4 之後,講者接下來分享如何透過 Golang 來開發 DHCP 上面的相關應用。當然大家也都是知道 DHCP (Dynamic Host Configuration Protocol) 其實是架構在 Layer7 上面的,但是講者分享一個可能會需要使用到 Layer2 API 的部分,就是他們需要檢查發訊息的 MAC Address 是否就是登記的資訊是同一個人。

介紹到套件:

  • syscall
  • os
  • golang.org/x/sys/unix
  • github.com/mdlayher/raw https://github.com/mdlayher/raw

這幾個套件主要用來:

  • unix套件用來解析 Socket 用來讀取 IP address。
  • raw 用來 ListenPacket ,可以針對 IPv4 或是 IPv16 。講者解釋主要都是先使用 IPV4 的部分。
  • syscall 作為系統 Error Code 偵測。

這一段就是講者提到透過 dhcp4 套件來將請求的來源 MAC Address 跟需要 binding 的 MAC Address 做比對。確認請求的人跟他的內容一致,才會發送 IP 給他。

總結

講者主要分享自己在 Digital Ocean 工作上使用 Golang 的經驗,並且也舉了一些例子希望讓聽眾能了解, Golang 除了能做系統小工具之外,要做比較複雜(或使底層)的網路操作其實也是可以的,並且效率也都是游刃有餘。這一篇演講相當的有趣,因為除了了解了 Golang 也可以做一些底層網路操作外,講者也很清楚的做了一些基本的科普,讓聽眾可以從沒有太深入的網路架構概念到瞭解能透過 Golang 開發一些小工具。

[LINE DevRel] 2020 年 LINE 開發社群計畫活動時程表 (持續更新)

大家好,我是來自 LINE 台灣開發者關係與技術推廣部門 (Developer Relations) 的資深開發技術推廣工程師 Evan Lin。 LINE 從 2019 年初在台灣啟動「LINE開發社群計畫」,長期投入人力與資源在台灣舉辦對內對外、線上線下的開發者社群聚會、徵才日、開發者大會等。 經過了一年多的努力,舉辦了超過三十場的社群聚會,並且有相關的活動。更多細節歡迎參考: LINE Taiwan Developer Relations 2019 回顧與 2019 開發社群計畫報告

關於什麼是開發者關係與技術推廣部 (Developer Relations)與開發社群計畫的三個主軸,也歡迎查看一下 2019 年LINE 開發社群計畫活動時程表

希望在這裡跟大家分享一下,今年度的開發社群計畫的主軸與一些令人期待的活動。

#更多人參與的可能性:線上互動直播與錄影

收到許多參與者的回饋表示,因為時間與場地距離的限制,許多次的活動都無法及時趕到現場而無法參加, 並且活動後也不容易找到相關的錄影資源。 也由於新冠病毒(COVID-19)疫情的爆發,許多社群的線下活動都受到影響。今年團隊將嘗試開放 LINE 官方帳號 「LINE開發者官方社群」線上直撥的部分,並且也會在之後的官方頻道中(後續補充)補充相關的錄影資源。

校園菁英們看過來: LINE TECH FRESH - 技術新星人才計劃

今年開發社群計畫將計畫往校園開發,除了計畫與相關學校舉辦的學術競賽外,也會舉辦一些跟學校招募與宣傳相關活動。 希望讓許多學校的菁英們更了解 LINE 平台之外,對於打造能夠乘載這些服務的跨國合作方式能夠更了解。也歡迎更多的學生們能加入我們的行列。 更在此年也擴大展開了 LINE TECH Fresh 計畫。

LINE 台灣工程團隊每年透過 LINE TECH FRESH - 技術新星人才計劃,招募資訊科技相關科系,或對此領域有所涉略的大學生 / 研究生加入 LINE 團隊進行長期實習 (一年期),讓同學們有機會在國際級科技公司中觀摩學習。LINE TECH FRESH 由兩位經驗豐富的技術專案經理帶領小組團隊,接觸多元化的專案與產品開發,學習業界實際的軟體專案分工,並體驗跨國團隊合作。往年工作內容包含 server、web、mobile app、chatbot、IoT、data、DevOps 等領域,並透過實習熟悉 LINE 平台系統、SDK、API 等.對於軟體開發有熱情、有想法的同學們,千萬別錯過這個任你揮灑創意與衝勁的機會!

更多的內部開發者活動

今年將針對 LINE 內部開發者有設計相關的程式競賽,讓大家在趕專案的同時依舊能發揮創意。一起打造出讓使用者 WOW 的產品。 更多相關計畫正在緊鑼密鼓籌辦中。

如何取得第一手 LINE 開發者關係與技術推廣部資訊

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

「LINE開發者官方社群」官方帳號ID:@line_tw_dev (點擊這裡 加入好友)

關於「LINE開發社群計畫」

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

[研討會心得] QCon - The Why Of Go

前提

為什麼要學 Go(lang)? Go 有很多缺點說: 沒有 Generic,error handling 很麻煩, Dependency Management .. 種種問題經常被討論。 但是,各位有沒有想過 Go 帶來的優點會是什麼? 當初我們喜歡上 Go(lang) 又是什麼?

Carmen Andoh 在 2017 的 QCon 的這篇演講非常的棒,當時的他還在 Travis CI 任職。這篇演講包含了許多的語言層面的整理與效能評比的數據分析。 最近一次我遇到她是在 Golang Meetup Organizers 聚會上,他代表 Google Go 團隊一起跟大家討論著 Go 十週年慶祝活動的討論。

歡迎各位好好閱讀這篇:

https://www.infoq.com/presentations/go-concurrency-gc/

QCon2017: Carmen Andoh - The Why of Go

網址

講者一開始先就語言層面敘述了程式語言的開發演進,每個語言都有人認為可以演進的部分,所以有著不同語言的演進過程。 到了 2009 年 Go 語言的發展也是如此,一開始 Go 語言經常被抱怨的項目如下:

(參考網址: https://github.com/ksimka/go-is-not-good)

  • 缺少語法糖: 相較於其他語言, Golang 並不存在語法糖。

  • No generics (沒有泛型) : 這就不解釋了

  • error handling:

    • 被抱怨的就是會寫太多的
    err := foo()
    if err != nil {
        ......
    }
    
  • No macros or templates

更多部分可以看這篇 https://github.com/ksimka/go-is-not-good

這一頁提到了,現今的環境已經跟三十年前不同了,需要有更適合的程式語言,並且專注解決以下的相關文題:

  • Multicore processor: 多處理器執行緒
  • Networked systems: 網路相關處理系統
  • Massive computation clusters: 大型運算的執行叢集。
  • Web programming model: 網頁程式的模型。

這邊列出了 Go 對於 21 世紀需要的部分所增強的部分,這也是這一篇演講最希望專注的幾個特點。

  • Concurrency: 指的是 goroutine 與 channel
  • Distributed Systems: 對於分散式系統中,需要的 cross compile 。很適合在分散式系統裡面作為 micro-service 部署之用。
  • Garbage Collection: 這邊就不解釋了。
  • Code Readibility:

最後這張截圖~來自於 Dave Cheney 在研討會裡面的一句話,個人相當喜歡這句話。 裡面是說「工程師應該是被雇用來解決商業上的問題,而不是再試著維護某些人的程式碼」。

但是經常我們會聽到「通靈工程師」(代表由於交接,或是文件的不足,造就維護人家的程式碼就像是需要通靈一樣)的説法,這些都是 code readibility 的問題。

由於 Golang 本身沒有複雜的「語言糖」,對於代碼的維護上也能夠相對的簡單許多。

這篇演講相當不錯,很適合大家好好專研一下。

Refer: