Hello World
CodeTengu Weekly 碼天狗週刊
CodeTengu Weekly 會在 GMT+8 時區的每個禮拜一 AM 10:00 出刊,每期會由三位不同的 curator 負責當期的內容,每個 curator 有各自擅長的領域,如果你在這一期沒有看到自已感興趣的東西,可能下一期就會有了。你也可以瀏覽一下前幾期的內容。
目前的 curator 陣容:
- @vinta - I failed the Turing Test - 科幻迷,最近在讀 Singularity Sky
- @saiday - Imnotyourson - 最近在看禪與摩托車維修的藝術
- @tzangms - Oceanic / 人生海海 - 衝動型購物
- @fukuball - ImFukuball - 有新工作了,但歡迎直接挖角
- @mingderwang - Ethereum enthusiast
- @kako0507 - 熱愛嘗試新事物的前端工程師
- @chiahsien - 在這裡寫歡迎挖角真的有用嗎🤔 有讀者留意過這一區塊嗎 XD
- @hiroshiyui - 您可能是 Mastodon 爆紅而對 side project 頓時意興闌珊的受害者
- @uranusjr - Smaller Things - PyCon Taiwan 2017 門票熱賣中
- @kkdai - 態度萬歲 - 喜歡 Golang 的略懂工程師,最近在學機器學習 (疑?)
- @yhsiang
你也可以關注我們的 Facebook、Twitter、GitHub(Open Source 專案)或微博,有很多 Weekly 看不到的內容。有任何建議或疑問也歡迎來 Gitter 聊聊。
@vinta
List Comprehensions and Generator Expressions (Python)
Python 的 List Comprehensions 大家可能都很熟悉了,不只 list,其實 dict 和 set 都有類似的語法。不過我前陣子才知道原來 generator 除了使用 yield 之外,還可以寫成 (x ** 2 for x in range(10) if x % 2 == 0) 啊!
Celery Tasks Checklist
類似前幾期提到的 Django Apps Checklist,Vinta Software 這家公司的人也整理了一份 Celery Tasks Checklist,底下的 Resources 更是值得一讀。看樣子叫 Vinta 的都是好傢伙呢。
延伸閱讀:
Spark RDD methods (PySpark)
最近的 side project 是在用 Spark 做一個 GitHub repositories 的推薦系統。雖然書上和官方的文件都推薦使用 Spark SQL 的 DataFrame / Dataset,因為能夠更好地被優化,但是難免還是有些操作需要用到 RDD functions(例如 reduceByKey() 或 aggregateByKey()),所以寫了一篇文章簡單地記錄了一下用法。
延伸閱讀:
How to write excellent Dockerfiles
這篇文章教你如何寫出一個良好的 Dockerfile,TL;DR
- Write
.dockerignorefile - Container should do one thing
- Understand Docker caching! Use
COPYandRUNcommands in proper order to utilize that - Merge multiple
RUNcommands into one - Remove unneeded files after each step
- Use proper base image (alpine versions should be enough)
- Set
WORKDIRandCMD - Use
ENTRYPOINTwhen you have more than one command and/or need to update files using runtime data - Use
docker execinside entrypoint script - Prefer
COPYoverADD - Specify default environment variables, ports and volumes inside
Dockerfile
就算是有了 multi-stage builds 的功能之後,以上大部分的技巧也還是適用的(靜態語言真是好啊)。
延伸閱讀:
A developer’s guide to interviewing
大家總說「面試」是雙向的,徵才的一方在面試求職者,求職的一方當然也需要面試徵才者。這正是一份針對「軟體工程師應該如何面試公司」的參考指南,作者列出了很多你應該在面試的過程中向公司詢問的問題,尤其是那些 follow-up 的問題也都很精華,能夠很大程度地幫助你判斷這究竟是不是一家值得去的公司。無論是被面試的人或是負責面試的人都應該好好讀一下。
像我自己在被面試的時候就會問這家公司「針對某某專案,你們最近一個重大的功能從發想到最終上線總共經過了哪些流程?歷經多久?」(面試別人的時候就會問對方在之前待過的公司同樣的問題),這中間可以問的東西很多,比如說技術部門跟 PM、設計師之間怎麼合作(誰有決定權)?如何進行 code review?CI 和 deployment 自動化到什麼程度?怎麼做資料庫備份和 migration?如何監控錯誤訊息?反應不錯的話還會順便交流一下業界八卦產業動態。
P.S. 這篇文章的作者有主持一個 podcast,叫 Soft Skills Engineering,裡頭談的話題寫實到不行,大家感受一下。
@hiroshiyui
Statically Recompiling NES Games into Native Executables with LLVM and Go
一篇窖藏舊文。不同於模擬器的手法,作者透過 LLVM 將紅白機程式(ROM binary,非原始碼)重新編譯成直接在電腦上跑的原生可執行檔。整個開發過程非常精彩,是一份很有料的 LLVM 實戰範例。
可以參考 @jserv 的原理講解投影片:「LLVM 總是打開你的心:從電玩模擬器看編譯器應用實例」。
Nintendo Ninja - An FPGA-Based Mario Bros. A.I.
一個透過 FPGA 實作的 AI,專門處理「超級瑪莉歐兄弟」遊戲,分析遊戲畫面後,做出對應的操控。軟體實作的超級瑪莉歐兄弟挑戰 AI 我之前看過幾個,這是我頭一次看到用外部硬體來做的。
同場加映:
PX8: Open source Fantasy Console in Rust (with Python and Lua)
一個 PICO-8 平台的 Rust 開源相容實作。以當今的商業遊戲聲光表現來看 PICO-8,很多人自然是看不上眼,不過這個軟體定義平台麻雀雖小、五臟俱全,對學習遊戲設計來說是很好的入門管道。
同場加映:
Reproducing Go binaries byte-by-byte
Reproducible builds 在安全稽核的重要性不在話下,但是實務上卻是若任一處有個閃失,就會造成建置結果不符。作者透過建置 rclone 這個 Go 專案具體示範了整個 Reproducible building 過程,值得在 CI/CD 重視這方面問題的大家參考。
@kkdai
iThome Chatbot Day 2017 - Google 簡報
又到了自肥時間,小弟將我在 iThome 的 Chatbot Day 的投影片分享出來.希望沒有報名到的人也可以去看看,希望能帶給各位一些想法.
這份投影片從無到有來教導各位:
- 架設一個 Chatbot 免費
- 結合 LUIS.AI
- 就算不懂的資料科學原理,我們怎麼使用 Tensorflow 來幫你建置 Chatbot
並且結合三個 Chatbot 的範例,希望能讓聽眾能了解如何快速的建置一個 Chatbot.當然所有的原始碼都是開源的,而且都是 Golang 寫的.
設計高效能的 Hash Table(一)
還記得當初在寫 Consistent Hashing 的時候,一直不願意拿人家寫好的 Hash Function 來改,硬要自己寫一個.結果發現寫出來的 Hashing 一直出問題.才知道原來 Hash Function 是實作 Consistent Hashing 的一個重點.
這一篇文章有了一些基本對於 Hashing Function 的介紹,也把幾個好用的 Hashing Function 一一的列出來.
其中包括了最近被移到了 Google 的 "highwayhash"
或是之前有介紹過在 Uber/ringpop 下作為 Consistent Hashing 的 farmhash
這篇文章相當推薦,原因如下:
- 作者 (Felix Chern) 目前似乎在 Google 工作,部落格文章都相當有深度.
- 有 Hash Function 列出的清單並且有簡單的介紹.
參考:
mattn/go-mastodon: Mastodon client for golang
Mastodon 是一個分散式的類似 Twitter 的 microblogger,這是 mattn 出的 Golang client.
本來沒有太注意到 Mastodon 是什麼,一直到一堆 tweet 再討論 Mastodon ,我才專心的去看了一下. 於是又找到 Poga 的這一篇文章.架設你自己的 mastodon instance.
也才知道 G0v 其實有架設自己的 Mastodon 伺服器 g0v.social.
究竟 Mastodon 是什麼?
簡單的來說,他就是一個類似 Twitter 的 microblogging service.
它具有去中心化的概念,也就是他的主機並不是一個類似 Twitter 那樣集中的伺服器,而是分散在幾個點的伺服器. 比如說台北可以建一台 mastodon.taipei ,高雄也可以建一台.
但是你可以跨伺服器來 follow, reply 跟 reblog.讓整個變得具有自由化與自主性.
而且它具有以下跟 Twitter 差異很多的地方:
- 時間軸按時序顯示文章,不作多餘處理
- 公開時間軸
- 每篇文章最多 500 字
- 支援顯示 GIFV 短片
- 可逐篇文章調整隱私設定
- 完善的封鎖使用者、靜音功能
- 良心設計︰沒有廣告,不追蹤您的使用行為
其中 500 字跟可以每一篇決定隱私權這件事情很對許多 Twitter 使用者的胃口.讓本來風行 Twitter 的日本,在短時間內就紅了起來.
在日本紅的主要原因:
要知道他為什麼會紅,這個還是要找到熟悉日本的一些人.在臉書好友的文章討論串裡面整理出來的原因如下:
- 因為東西方對兒童色情的認知差很多,Twitter 會封鎖發二次元 H 圖的帳號,很多日本繪師的帳號常常一夜消失.
- Twitter 只能全公開或全鎖推, Mastodon 可以個別鎖文(類似私噗)、加上內容警示,而且一則可以發500字. 對於使用者自由度比較高.
- Mastodon 就剛好對上了日本人胃口,然後 Pixiv 又跳下來自己開了 Pawoo.
- 先前有個 Twister ,是基於 P2P 跟 Blockchain 的技術做出來的 Twitter clone.目前還是有在持續開發,可是為什麼沒紅呢? 我覺得關鍵就是 Mastodon 可以直接上網註冊使用,而 Twister 則需要下載 client 才能使用.後者的加入阻力很大.
參考
JustForFunc
justForFunc 是由 Google 傳教士 - Francesc Campoy 所主持的 YouTube 頻道,裡面的內容都是講解 Golang 相關的部分,歡迎大家來訂閱.
此外: Google Cloud Platform Podcast 也是 Francesc 的另外一個的項目,主要就是 Google Cloud Platform 的 Podcast.這也是我經常收聽的.Francesc 跟 Mark 的對談很有趣.
TIBCOSoftware/flogo: Project Flogo - Open Source Framework for IoT Edge Apps & Integration.
今年有一個廠商 GoherCon India 2017 挺有趣的,TIBCO 這家公司作出了一個類似 Node-RED 但是完全使用 Go 改寫的 IOT 平台 “Flogo” .
這一篇官方部落格有 demo 並且指導如何跟 Flogo 來對接.IDE 用的是 LiteIDE.