[研討會心得] 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: https://github.com/ksimka/go-is-not-good
繼續閱讀

[心得] FOSDEM 2020 - Advanced debugging techniques of Go code

前提 日前 2020/02/01 ~ 02/02 (FOSDEM: Free and Open source Software Developers’ European Meeting ) 也就是歐洲最大的開源開發者大會(可以解釋成歐洲版本的 COSCUP 嗎?) 裡面有一個專門的 Go DevRoom ,所有的投影片跟影片都有公開出來。 歡迎大家來裡面挖寶!! 投影片與影片鏈結: https://fosdem.org/2020/schedule/track/go/ Advanced debugging techniques of Go code / Andrii Soldatenko 投影片與影片: link 除了 “The state of Go” 這種 keynote 類型的主題之外,第一個讓我想要了解的就是這篇。在 Golang 上面的進階除錯技巧部分。 裡面提到的 debugging skill 主要是透過 https://github.com/go-delve/delve 所提供的相關技巧。相關的技巧包括了: 如何 attach by delve 如何設定 conditional breakpoint 如何透過 delve 來跑 unit test ,就是透過 delve 來跑 test function 我個人很愛用這個,也很常使用。 甚至可以使用 Goland 裡面的 eval 來快速查詢相關數值 最後介紹的技巧就是透過 delve 來 remote debugging docker container ,透過了 docker port expose 將 web app 的 port 轉給 delve (e.g. port 40000) 使用。然後就可以透過 port 40000 來 attach delve debugger 。 參考: link1 link2 最後當然你也會好奇,這些不是 GDB 就可以了嗎?但是其實 GDB 有一些小問題: GDB MacOSX 需要 codesign 如果再 MacOSX 10.13 使用 GDB 舊的版本 8.0.1 才能正常 attach Go app 由於 Golang 在 MacOSX 上面有使用 compress dwarf 這樣會使得 debugging info 無法正確在 GDB 上面顯示出來。 需要再 compiler 的時候加上以下參數。 go build -ldflags=-compressdwarf=false -gcflags=all 才能讓 GDB 看到...
繼續閱讀

[好書分享] 騰訊傳 - 中國互聯網公司進化論

騰訊傳 - 中國互聯網公司進化論 作者: 吳曉波 出版社:天下文化 出版日期:2017/07/04 語言:繁體中文 買書推薦網址:http://moo.im/a/28EIKW 前言: [2020 所閱讀的第三本書] 十個億的用戶,全球前十大企業,到底是如何透過 QQ 來達到這樣的帝國? 騰訊一直都是我很想要了解的公司,也是因為日本同事貼了這本的日文版,才讓我知道有這樣的一本傳記書。 雖然目前服務的公司 ( LINE ) 其實某種程度就是追隨著騰訊的成長路線來走。 但是仔細的去摸索與思考之後,你就會發現。其實騰訊是成長路途是一條全球互聯網公司的典範。 而這本書從創始人馬化騰從學校畢業後開始講起,除了將當時中國大陸的網路環境敘述得相當清楚之外。 也能夠透過這本書來瞭解從 1995 之後大陸互聯網企業彼此如何競爭與成長的過程。 內容簡介: 從QQ到Wechat 不到20年的時間 騰訊成為十億用戶的世界級公司 為什麼技術出身、羞澀文靜的馬化騰 能帶領騰訊超越搜狐、百度等勁敵, 打造出中國市值最高的公司和全球前十大企業? .騰訊的成功,是必然、還是偶然? .馬化騰如何贏得一次次商戰,成為眾人眼中的「全民公敵」? .華人科技公司,會走出不同於美國的生存之道嗎? 這三個問題的答案,將指向你我的未來 揭開中國第一大網路公司騰訊成功崛起的祕密! 簡介來自讀墨:http://moo.im/a/28EIKW 創業 整本書算是相當清楚,有條理的紀錄了騰訊的成長過程。從中國的第一批互聯網人開始談起,講述著一開始騰訊也不是一創業就一帆風順,反而也有走錯路,做錯方向,並且走得狼狽的第一段歲月。 不過由於 ICQ 的崛起,那時候做了 OICQ (OpenICQ) 到了後來的 QQ ,才有了爆炸性的互用成長。 並且透過與網路咖啡興盛的年代,並持著快速迭代的方式不斷的改善著使用者體驗的方式。抓緊著第一批大量網路用戶大多為網路咖啡的使用者。開發者離線訊息,線上通訊錄,並且也有虛擬角色 (Avatar) 的機制來讓每一位在網際網路的用戶能夠找到自己的空間。 就獲得了爆炸性的成長,並且取得上市。 出擊 但是騰訊能擠身全球前十大互聯網公司(事實上也是前十大科技公司),絕對不僅僅只是靠 QQ 一個軟體起家。騰訊採取的方式就是多頭進擊(多開戰線)的方式,靠著 QQ 來開發類似臉書的 「QQ空間」,也有類似於掏寶的電商平台,並且也有面臨來自於中國其他互聯網公司的圍攻,甚至大家也都知道一開始最強勢的 IM 平台其實是微軟的 MSN ,本書也有詳細的分析為何最後在中國微軟的˙ MSN 會敗下陣來。 後來臉書開放了平台讓許多廠商進駐,開發出許多有趣的遊戲,也就是大家熟悉的「開心農場」。那麼在中國其實那時候透過 「QQ空間」的開放平台也讓許多類似開心農場的遊戲能夠大紅,並且帶動了整個平台的用戶生態與獲利。也開始了騰訊遊戲的開端,到了後來並且開發許多賣座的網路線上遊戲,也併購了許多全球知名的遊戲公司。 最後的強大轉型就是透過廣告收入的產業改善,來讓廣告主能夠知道該如何有效地投放廣告,即時監測廣告的收看方式。並且透過使用者資料的分析與精準投放來擺脫原來 QQ 的用戶有著三低的印象。讓廣告轉身一變成為騰訊的另外一個金雞母。 巨頭 第三部分的騰訊,已經是中國互聯網的巨頭。並且掌握著許多賺錢的事業線。在中國如果要成立新創公司,就準備好答案是 - 如果騰訊要跟你做一樣的東西? 你打算怎麼應戰? 騰訊一直以來並不是市場的開創者,反而他們是屬於保守的後發者。但是卻是不斷優化,快速迭代,最短時間內讓使用者馬上愛上服務,進而取得市場上的領先角度。 這個都得歸功於馬化騰這位騰訊裡面最強大的產品經理,對於用戶體驗的挑惕與體認。能讓產品快速的更新,不段的朝向使用者喜愛的方向前進。 騰訊有那麼多的戰線,但是馬化騰都會每天去玩玩看新的產品線,並且給予完整的修改建議。讓全部事業體的方向是朝向使用者的體驗至上來開發。 而「微信」的出現,更是移動通訊上的新突破。原本在桌機版與網頁版的 QQ 大成功之後,騰訊本來就想要開發好的移動通訊相關通訊體驗軟體。 但是無奈 QQ 的移動版本並沒有在第一個時間成功,反而是崇尚著極簡風的陳小龍帶著新的提案找了馬化騰,獲得了允許之後便開發出了現在的「微信」,另一個超過好幾個億的用戶體驗。 而「微信」的成功也體驗了,就算是靠 QQ 起家的騰訊。也可以再靠新的通訊軟體的方式再度大鳴大放。於是相關的遊戲,電影,甚至是漫畫,動畫或是書籍的產業,都有看到騰訊的進攻。秉持著 「連接一切」與「互聯網+」變成了世界級的公司。 心得: 就如同我一開始提到的,看著騰訊的成長過程。就會了解到 LINE 目前許多的路途都是正確的。因為從事著互聯網擁有著大量互用的公司。 就是需要透過多角化經營來讓使用者能夠更方便,更便利的取得自己需要的事物。 就如同騰訊的「連接一切」與「互聯網+」,而 LINE 也是有著 「 Closing the distance 」,到了今年的「 Create WoW for the world 」。都能夠了解到,多角化經營並不會有力量分散的疑慮,而後發者並不會一定都是趨於劣勢的。 如何透過產品的快速迭代,真正的找到使用者喜愛的,需要的與想要的功能才是重點。 如同馬化騰依舊每天會花時間來當著一般的使用者來把玩公司的產品。 每一位開發者,員工應該要喜愛,熟悉,並且實際使用自己開發的功能。才能讓你的使用者也愛上你開發的產品與服務。
繼續閱讀

[研討會心得] 2020/01/15 Chatbots 16 at Dcard

前言 大家好,我是 LINE Taiwan 的 Technical Evangelist - Evan Lin。這次很開心受到 chatbot 社群的邀請,參加了 “Chatbot meetup 聊天機器人小小聚 16 @ Dcard” 的聚會活動,並且分享 LINE API 更新與個人開發的心得。在此也跟各位分享本次參與的心得,並且也希望透過社群分享的力量能夠讓聊天機器人的開發動能更加的盛大。 社群 Chatbots Meetup: https://chatbots.kktix.cc/ 本次活動網頁: 活動網址 本次活動的共筆紀錄: https://hackmd.io/@chatbot-tw/meetups-016 由於 Chatbots Meetup 本身屬於社群自主性的活動,裡面也有許多社群朋友所贊助的閃電秀。裡面的所有內容也是相當的難得與有趣。也希望能夠透過本篇文章讓大家稍微了解 Chatbots Meetup 社群閃電秀的魅力。 這次場地感謝 Dcard 贊助在 Dcard 的 14 樓辦公室,有一個專門提供給技術社群分享的空間。相當的不錯,也希望有更多的社群來這裡分享。 LINE Platform Update 202001 / 資深開發技術推廣工程師 Evan Lin 投影片 本次的分享主要是跟大家分享一下近期平台的相關更新,希望能讓大家第一時間的收到最新的相關消息。 iOS 9.19.0 之後 scanCode 與 BLE 相關功能暫時關閉 在去年十一月的時候就有做過相關的宣傳,但是 iOS LINE 9.19.0 一直到了 2020/01/06 才正式上線。所以在這裡也要跟開發者們再三勸說,因為 iOS LINE 新的版本 App 由於技術問題將 scanCode() 與 BLE 相關功能都暫時移除掉,所以也建議開發者們在撰寫相關的技術的時候需要做相關的 error handing ,才能確保不論是在 iOS 還是在 Android 都能有完美的使用者體驗。 相關鏈結: 如使用已中止的 LIFF SDK API,請調整程式碼 部分 LIFF 功能暫停使用 透過 Messaging API 的 LINE 官方帳號,將於用戶資料下方顯示開發者註冊的 provider 名稱 為了讓使用者更清楚辨別官方帳號的正確性,Provider 名稱預計在 2020/01/16 要顯示在 Messaging API 的官方帳號上。 請確認您所開發的聊天機器人的 Provider 名稱。 相關鏈結: [Updated] 請確認 provider 名稱正確 LINE Developer Relations 2019 Update / 資深開發技術推廣工程師 Evan Lin 第二部分帶來了 LINE Developer Relations 2019 相關貢獻的整理, 2019 年在 LINE 是一個開發者社群的一年。並且在 2019 年初在台灣啟動「LINE開發社群計畫」,將長期投入人力與資源在台灣舉辦對內對外、線上線下的開發者社群聚會、徵才日、開發者大會等,預計全年將舉辦30場以上的活動。更有更多部分可以參考這篇文章。 相關鏈結: 投影片: LINE Developer Relations 2019 Update LINE Taiwan Developer Relations 2019 回顧與 2019...
繼續閱讀

[TIL][Golang] 使用 jQuery 來解析需要 cookies 的網頁內容

前言: 就在農曆的除夕夜因為家裡的電視壞了好幾天,所以開始看自己的 Github 專案。想說來弄弄 Go modules ,結果發現這個專案已經不能用了。 iloveptt 是我有一個專門在爬 PTT 版面的小專案 ,最近拿起來用的時候忽然發現不能用了。 經過追查之下發現原本透過 GoJQuery 的功能套件忽然無法找尋到正確到資訊。 這一篇文章就是記錄著該如何尋找,還有該如何解決問題。 相關專案: 我愛批踢踢 A PTT Crawler and Photo downloader which written in Golang: https://github.com/kkdai/iloveptt Golang: A photo download package for gomobile in Golang: https://github.com/kkdai/photomgr 問題發生了 原本要解析目錄的 jQuery 卻忽然無法成功,但是很確定找尋資料是正確的,也另外透過瀏覽器來查詢過網頁原始碼,沒有發現有相關的變更。 這個時候首先需要把資料全部印出來,透過的方式可以先將所有資料的˙html 列出來,看看 jQuery 所得到的資料有什麼不同。 可以透過 doc.Find("*").Each(func(i int, s *goquery.Selection) { 的方式,並且使用 s.Html()來列印出目前搜尋到的真正結果問題在哪裡。 原來是網頁有使用者同意條款 這時候會發現這邊出現的 HTML 原始碼部分跟你在瀏覽器看到的不同,原來是 PTT 有顯示使用者同意條款,必須要使用者同意相關內容為 18歲以上的內容。 而能夠正常讀取網頁的內容是因為你的瀏覽狀況有 cookies 。 而檢查 cookie 的方式可以透過 Chome Developer Console 透過 Networking 來尋找 Request Cookies 來查看是否有 Cookies 。 參考相關文章: https://bryannotes.blogspot.com/2015/07/python-crawler.html 把 JQuery 加上 Cookie 來查詢 那要回過頭來思考透過 github.com/PuerkitoBio/goquery 套件能不能夠加入 cookies ? 首先來查看一下文件好了。 https://godoc.org/github.com/PuerkitoBio/goquery#NewDocument 你會發現他有以下的方式。 func NewDocument func NewDocumentFromNode func NewDocumentFromResponse 其中 NewDocumentFromResponse 可以使用,我們就要開始思考如何透過 net/http 來取得具有 cookies 內容的資訊呢? https://siongui.github.io/2018/03/03/go-http-request-with-cookie/ 這邊文章給了一個不錯的範例。 最後修改方式 參考以上的修改方式,我們需要將程式碼修改如下,才能夠正常的運行。 最後附上相關 issue number: https://github.com/kkdai/photomgr/issues/6 結論: jQuery 很方便的可以直接透過 selector 來操作一些網頁上的資料,但是有時候透過 app browser 去抓取的資訊可能跟自己開瀏覽器的不同。 在除錯的流程上可能需要更加的小心才不會讓自己陷入找不到真正問題的所在而盲目猜測。 本篇文章希望能讓想透過 jQuery 寫 Golang 爬蟲的人一些點子,也可以幫助大家了解相關知識。 Reference: Related issue https://github.com/kkdai/photomgr/issues/6 https://bryannotes.blogspot.com/2015/07/python-crawler.html https://dometi.com.tw/blog/jquery-teach/ https://siongui.github.io/2018/03/03/go-http-request-with-cookie/
繼續閱讀

[LINE DevRel] LINE Taiwan Developer Relations 2019 回顧與 2019 開發社群計畫報告 (part 3: Technical Branding and Hiring)

前言 大家好,我是 LINE Taiwan Developer Relations 團隊的 - Evan Lin。 經過了一年多來的 LINE Developer Relations 的努力,想要在這篇文章裡面稍微整理一下整個團隊做了哪一些的事情,也希望為了「LINE 開發社群計劃」做年度報告。 根據原先 LINE Developer Relations 所寫的介紹文章 (Introducing Developer Relations team) 裡面很清楚地定義了這個團隊的主要目標如下: External Evangelism: 鼓勵開發者使用 LINE 的平台,API與SDK 來開發出具有魅力與有趣的應用服務。 (Encouraging people to make attractive and interesting services using the APIs and the SDK by LINE) Internal Evangelism: 透過一些方式使得工程師們自我成長與磨練自己 (Doing whatever our engineers feel difficult to do themselves in making improvements at work) Technical Branding and Hiring: 讓更多人了解身為 LINER(LINE 員工的自稱) 有許多有趣與令人興奮的事情。 (Letting people know how fun and exciting it is for engineers to work at LINE) 上一篇文章,已經明確的定義了 External Evangelism,接下來將更進一步的解釋 Technical Branding and Hiring。 文章列表: [LINE DevRel] LINE Taiwan Developer Relations 2019 回顧與 2019 開發社群計畫報告 (part 1: External Evangelism) [LINE DevRel] LINE Taiwan Developer Relations 2019 回顧與 2019 開發社群計畫報告 (part 2: Internal Evangelism) [LINE DevRel] LINE Taiwan Developer Relations 2019 回顧與 2019 開發社群計畫報告 (part 3: **Technical Branding and Hiring) (本篇文章) Technical Branding and Hiring: 讓更多人了解身為 LINER(LINE 員工的自稱) 有許多有趣與令人興奮的事情。 LINE...
繼續閱讀