[Coursera] How Google does Machine Learning

Machine Learning with TensorFlow on Google Cloud Platform 系列上課心得 How Google does Machine Learning (本篇文章) Introduce Tensorflow How Google does Machine Learning 課程鏈結: 這裡 文章鏈結: 課程僅有一個禮拜。本篇文章。 前言: 這是第二次的 [ML Study Jam 培訓計劃] 的免費課程,也是可以透過免費學習的經驗來拿取 Tensorflow T shirts 的計畫,當然我是不會錯過的。但是這次的課程是透過 Coursera 來完成,所以整體的課程上比重變得比較多,而且需要有更多影片與相關課程內容的討論。 課程大綱: 第一週主要都是 Machine Learning 經常會遇到的問題,以及 Google 在這方面是如何解決的。算是比較簡單的常識,這裡就不贅述。幾個需要注意的部份如下: 許多在實驗室產生的數據模型 (model) 拿到實際上線無法正確使用,是因為資料的產生方式。不夠新,不夠實際。最好的改善方式是透過批次建立模型與 streaming data。 這邊有討論到一些建立數據模型的時候,如果發現效果不夠好的時候應該要如何處理。一些建立的方式有: 找出尚未發現的影響力特徵( Feature ),將其加入。 增加適當的訓練數據。 到後半段主要介紹在 Google Cloud 裡面的一些基礎運用,由於大部分東西重複性有點高,在這裡就不贅述。 小結: 整篇課程算是相當的基本,不小心選錯了。就當作是複習吧! Reference: How Google does Machine Learning
繼續閱讀

[TIL][Golang] 如何在你電腦上安裝嘗鮮版本的 Go(lang)

Go 1.13rc1 在 08/22 推出,裡面包含了一些新的功能讓人想試試看。但是僅僅想要測試新的語言功能卻不希望更改工作環境的設定。這裡提供一個新的方式,就是直接將最新版本到 Go binary file 下載,而不直接替換你工作環境。 Download Go binary by using go get 透過 go get golang.org/dl/go1.13rc1 的指令(後面也可以快速更換成任何你需要的版本),你就可以下載安裝檔案在你的 $GOBIN 下,透過執行 go1.13rc1 download 就會下載完整的執行檔案。 預設的安裝路徑會是 /Users/YOUR_NAME/sdk/go1.13rc1/ 。 之後就可以透過 go1.13rc1 直接嚐鮮最新版本的功能。 安裝多個版本的 Compiler 透過這樣的方式,你也可以快速的安裝多個版本的 Go(lang) binary 來做相關的 regression testing 或是跑一些 performance benchmark 。以下為一個簡單的範例來安裝舊版本的 Go 1.11 : go get golang.org/dl/go1.11 $GOBIN/go1.11 download 希望這些能幫助到大家,一起來嚐鮮吧!!
繼續閱讀

[Golang] 你也喜歡 Golang 嗎? 一起來當 Go GDE (Google Developer Expert)

前言 三年前(2016/08/21)第一次報名的大型研討會演講,就是在 COSCUP 講「如何透過 52 個專案來學習 Golang 」 。 之後就是舉辦 golang.tw 的社群活動,並且在許多地方持續地講解跟 Golang 相關的議題 (參看我投影片整理鏈結 https://github.com/kkdai/slides)。 終於也在三年後的同一天,就在 Go 在五月之後正式成為 GDE 的項目之一之後,筆者通過了 Google 的相關面試成為 Golang 全球首波的 Google Developer Expert 的一員。 這篇文章會跟各位分享一下什麼是 GDE (相關的權利跟義務),並且不免俗的在這篇文章裡面會再介紹一次什麼是 Golang (大多是投影片整理),最後分享該如何成為 Google Developer Expert 。 什麼是 GDE (Google Developer Expert) Google 擔任 Developer Relations Program Manager - Eric 這篇文章不能錯過 ( 為什麼你應該申請成為 Google Developers Experts (GDE) ) ,為了保持資料正確性,在此都會節錄一些官方統一宣傳的義務跟權利。 成為 GDE 後的福利 GDE 計劃以及背後支持的產品單位會依據當時的資源與活動狀態來安排活動或給予 GDE 福利。平時您可以與您所在地區的 Google Developer Relation Regional Lead 來討論活動的各種資源協助,而以全球活動來說 : GDE 計劃每年都會舉辦至少一次全球峰會(GDE global summit),可以認識其他一樣有熱情的人(興奮)。 邀請該領域的 GDEs 參加 beta program / focus group / … 等活動來與 GDEs 們互動,讓 GDEs 有一定的份量能影響產品或技術的發展。(Golang 這邊希望可以參與更多討論跟分享) GDEs 可能會優先嚐試或取得 alpha/beta 期的產品或免費使用額度。 參加 Cloud Next 或 Google I/O 的機票住宿補助等等。 (我個人是希望有 GopherCon :p ) 當然這些福利都是視情況而定。 以上都是擷取自 Eric 的文章“為什麼你應該申請成為 Google Developers Experts (GDE)”,但是筆者本身的原因如下: 認識其他 GDE : 就像筆者不喜歡只參加研討會而沒有機會上去講(當初去 Google I/O 其實我也弄了投影片想衝上去 XD ) ,因為想認識講者最好的方式就是當講者。你想認識其他強到爆炸的方式,就是你也要當上 GDE 跟著他們到 GDE Submit 裡面去相認。 讓台灣 Go 社群有更多曝光度: 本次入選很榮幸是在全球第一批,應該也是少數的華人之一。主要當初很積極要爭取的原因,除了筆者超愛這個 Go 這個語言之外,就是也希望讓台灣 Golang.tw 社群能獲得更多的注意,因為每次要辦活動來找國際級的 Golang 講者都無法被注意到。 身為社群的主辦人之一,這次一些私心 :p 。 主要是這兩個個人因素,在此跟大家分享一下。 成為 GDE 伴隨來的義務: 因為這是一個鼓勵性質的計劃,計劃希望認可專業開發人員的付出,並不是要找免費的勞務資源,我們知道開發人員都有可能因為忙碌或是工作關係而無法安排太多的活動。...
繼續閱讀

[研討會心得] 20190730 GolangTW @M Space - Introducing the go channel and pipeline buffered/unbuffered channel

前言 大家好,我是 LINE Taiwan 的 Technical Evangelist - Evan Lin。這次很開心回到 Golang 社群參加了 “GolangTaipeiGathering#423” 的聚會活動。 社群 GolangTW Meetup: https://www.meetup.com/golang-taipei-meetup/ 本次活動網頁: 活動網址 這次參與社群的聚會主要是希望透過分享一個資料處理上容易所面臨的問題,來解釋 Go(lang) 裡面一個經常讓人困擾的問題,也就是 Buffered/UnBuffered Channel 的差異,如何應用與如何透過 Channel 來完成 Data Pipeline 。 Introducing the go channel and pipeline buffered/unbuffered channel / 資深開發技術推廣工程師 Evan Lin 投影片 以前在做 Machine Learning Platform 的時候,有機會可以開發資料處理的 pipeline 。開發能處理資料處理的相關功能的時候,最重要的就是希望能夠讓資料處理的速度能夠越快越好。假設一張照片要做人臉判斷的話,正常的做法是讀取圖片(假設需要花費時間 100 ms ) 然後將圖片做人臉判斷 ( 300 ms ) ,最後要將資料儲存在資料庫或是中介媒體(檔案)(10 ms) 。這樣可能一個圖像檔案需要花費 100 + 300 +10 = 410 ms 的時間,如果要處大量的數據的時候,這樣的時間花費就無法計算。 所以這時候就需要透過 goroutine 與 channel 來大量處理這些資料。 接下來就從頭來稍微解釋 Buffered/UnBuffered Channel 的差異與使用方式。 Buffered/UnBuffered Channel 通常在講解 goroutine 與 channel 的時候,最常與人討論與瞭解的問題就是「什麼是 UnBuffered Channel ,什麼又是 Buffered Channel ? 兩者的差異與應用的地方在哪裡?」。在講解 Buffered 與 UnBuffered 之前,先來了解 Channel 具有的基本特性: Channels are goroutine safe Channels carry messages between goroutines FIFO semantics Channels cause blocking and unblocking 接下來讓筆者透過幾個範例來讓讀者能有清楚的了解: 首先先來舉個 UnBuffered Channel : 這個範例可以在 Playground 直接執行。 這是一個簡單的 UnBuffered Channel 的使用範例,使用的方法就是在 main() 裡面呼叫一個 goroutine 去將一個 channel ch 給值 (send) ,而最後就在從 ch 接受(receive) 數值。 這邊有一些小地方需要注意: 由於是 UnBuffered Channel 所以傳送 (send) 與接受 (Receive) 都會造成 block ,尤其當...
繼續閱讀

[研討會心得] 20190723 Chatbots 11 at 天瓏書局 Coding Space

前言 大家好,我是 LINE Taiwan 的 Technical Evangelist - Evan Lin。這次很開心受到 chatbot 社群的邀請,參加了 “Chatb10ts meetup 聊天機器人小小聚 11 @ 天瓏書局 Coding Space” 的聚會活動,並且分享 LINE API 更新與個人開發的心得。在此也跟各位分享本次參與的心得,並且也希望透過社群分享的力量能夠讓聊天機器人的開發動能更加的盛大。 社群 Chatbots Meetup: https://chatbots.kktix.cc/ 本次活動網頁: 活動網址 由於 Chatbots Meetup 本身屬於社群自主性的活動,裡面也有許多社群朋友所贊助的閃電秀。裡面的所有內容也是相當的難得與有趣。也希望能夠透過本篇文章讓大家稍微了解 Chatbots Meetup 社群閃電秀的魅力。 LINE Social API in Go / 資深開發技術推廣工程師 Evan Lin 投影片 首先先跟所有的來賓分享新的 LINE Login API 更新 並且也分享透過更新後的 API 所撰寫的範例網站 https://login-tester-evan.herokuapp.com/ 。 透過以下三個新的 API 可以讓你更了解聊天機器人的相關訊息,分別有: Get number of message deliveries Get number of followers Get friend demographics 由於是新的 API 所以 LINE BOT SDK 相關開源套件還沒有加入這些 API ,如果讀者也是開源貢獻者的話,也歡迎各位直接到各個語言的 SDK 去貢獻。 (參考: Python, Go) 第二個部分就是透過 Social API 來完成 LINE Login 的流程,因為 Social API 並沒有官方套件提供給大家來使用,在這裡開發了一個 LINE Social API Go 套件來方便大家開發使用,並且也有更多的詳細內容在於如何透過 Social API 來開發一個 LINE Login 的範例文章在這裡。 想要直接感受的開發者也可以直接透過 https://login-tester-evan.herokuapp.com/ 這個網站來做一些測試與了解。 首先在這裡分享透過 Social API 兩種的取得使用者資訊的方式,分別為: 透過 OpenID 的方式與透過 Social API 。 使用 OpenID 來取得使用者資訊 以上循序圖是根據 LINE 官方文件中的 ““Integrating LINE Login with your web app” 教學文件所繪製的循序圖。透過這個流程可以了解,如果在 scope 之中指定好了 openid之後拿到的 access token 之中就會有一個欄位稱為ID Token 可以透過這個欄位來解析出使用者的資訊。 使用 Access Token 來取得使用者資訊 以上循序圖是透過 Access Token 再去取的使用者資訊的方式。如果是透過...
繼續閱讀

[TIL][Golang] go/build 與 golang.org/x/tools/go/packages 的差異

前言: 一開始主要是因為看到這個 tweet ,不禁想了解到底什麼是 go/build 而什麼又是 golang.org/x/tools/go/packages 。 TIL: Use https://t.co/eImdr3M4th instead of go/build. It is support modules, easier to use and faster. #gophercon pic.twitter.com/EruKtWest0— Jaana B. Dogan (@rakyll) July 25, 2019 因為 “Developer tools should now use that instead. It support both go path and Go Mod.” 這句話從 @_rsc 講出來更讓筆者想了解這些工具的差異。 What is go/build? 根據 go/build 的 GoDoc 上面解釋,其實 go/build 主要是幫助你取得 Go packages 資訊之用的,當然本身也可以直接拿取原本 binary 的 GOARCH, GOROOT 跟 GOPATH 的相關資訊。 當然也是可以取得 packages 相關資訊,至於使用上可以參考以下 sample code. Sample code for go/build 這個片段程式碼可以解析使用者輸入的套件參數,並且應出所有的套件資訊。比如說你輸入 gobuild flag 就會解析 flag這個套件的相關資訊。 What is golang.org/x/tools/go/packages? 而golang.org/x/tools/go/packages 比較專注做套件的解析工作,可以透過 GoDoc 相關資訊來了解,主要透過 packages.Load() 來讀取所有的套件資訊,並且可以透過 packages.Visit()來將所有套件的 dependency 找出來。 而當初設計這個套件主要就是為了 Go Modules 而設計的,大家可以參考相關文件 The Go Blog: Go Modules in 2019 ,裡面的相關敘述。 在 Go 1.11 的 Release note 其實也有提到,在作為 Package Loading 的工具查詢上,雖然 golang.org/x/tools/go/packages 還沒納入 standard library ,但是強烈建議要做 package loading 相關事項的時候應該就要改成 packages 。 Sample code for golang.org/x/tools/go/packages 小結: golang.org/x/tools/go/packages 在查詢套件資訊的時候,會先透過 GoPath 來查詢,如果找不到就會透過 Go Modules 來查詢。 而 go/build 只要 GoPath 找不到就會顯示套件無法查詢。 這兩個工具在做一些 DevOps 工具或是一些 CICD...
繼續閱讀