A brief introduction to Machine Learning 投影片

這是我在今年 RubyConf China 2017 演講的投影片,錄影官方也釋出了在 Youtube。這場分享總結了這兩年業餘接觸機器學習的一些知識點和心得,希望能在 Ruby 圈推廣一下資料科學和機器領域,以及主流的 Python 工具鍊。同一天另一場還有一場關於機器學習的 姜鹏 – 金数据是如何鉴黄的 也講的非常好,介紹一個真實的應用案例,也推薦大家一看。

老實說,就像做 Web 用 Rails 很棒,做數據分析和機器學習,就是要用 Python 這套方案。這不代表整套 production code 都要從 Ruby 換成 Python ,就像 Apple 做機器學習的 Core ML 也是用 Python 方案作數據分析和機器學習訓練,在得到模型和參數後,實際運作的 production code 當然還是用 Apple 自家的 Swift 語言來進行預測。

另外,我覺得為什麼 Ruby 圈老是去黑 Python 呢?(的確,如果眼界只在做 Web 的話,我以前也是覺得學了 Ruby 就用不到 Python 了),我認為就培養個人技能來說,應該挑互補的,而不是挑做一樣的事。Python 可以做 A.I. 可以做數據分析,Ruby 有很好的 OO 物件導向設計,做應用程式非常適合,是可以互補的。反而例如去學 Elixir 跟用 Ruby 一樣是做 Web 開發,對個人的技能發展我認為是重疊的。

Tweets 整理 (2017 Q3)

2017/9

  • 2017-09-21 23:17 1. Python 是 Ruby 做 Data Science 最好的朋友 2. 透過 PyCall t.co/wbOpvsmP58 就可以調用 Pandas, seaborn, matplotlib, sciki… t.co/Bl37ZP7OfY
  • 2017-09-21 13:12 “科学式家|戴文渊:机器学习教科书的 7 大经典问题” t.co/b9zHC2xGeV # 神经网络不宜超过三层? 决策树不超过五层? 特征选择不超过一千个? 集成学习获得最好学习效果? 正样本和负样本均采样到1:1? 交叉验证是最好的测试方法? 过拟合一定不好?
  • 2017-09-17 17:27 @judithyhh 謝謝~~ ?
  • 2017-09-17 09:33 “Packing your Ruby application into a single executable” t.co/TThHLL6vLU 把 Ruby 專案打包成一個執行檔,支援 Mac/Windows/Linux,牛逼!
  • 2017-09-15 11:43 RT @peter_szilagyi: Two months in the work, but Geth 1.7.0 (Megara) is finally here! Faster, slimmer, Byzantium enabled! #Ethereum ;) t.co/GztSNeLbA2
  • 2017-09-06 11:58 Wi-Fi: No hardware installed + Bluetooth not available + SD卡插槽失能,是在提醒我該換 MacBook Pro 了嗎? # 已重置 NVRAM t.co/d0QOD7GlWr 還是沒用 :(
  • 2017-09-04 23:02 @cowboy_ryan 是 Ropsten test network 測試網絡啦,這裡的以太幣不值錢
  • 2017-09-01 11:47 每個想學怎麼用 geth 編譯智能合約的工程師好像都要踩一次這個雷啊 t.co/JGhEXlGB5A “eth_compilers, eth_compileSolidity are gone in go-ethereum 1.6.0”

2017/8

  • 2017-08-31 01:24 “Scalable Blockchain Infrastructure” t.co/Mx5ZR73sI2 # 1. 連 geth 或 parity 都不用裝了,發 HTTPS call 就好了 2. 為什麼背景圖用哥吉拉啊,是有一點點諧音啦… XD
  • 2017-08-30 02:33 ? mined potential block ? block reached canonical chain # 人生第一次挖到礦 # 挖了半小時拿到五顆以太幣 # 在 Ropsten test network 啦 # 真是太有趣了
  • 2017-08-29 22:13 在本機同步 Ethereum 或 Bitcoin 全節點的話,記得設定 Mac 的 TimeMachine 不要備份那些目錄啊 # TM 狂跑才想到這事
  • 2017-08-21 18:06 @jeffhung @number5 tig 太陽春啦
  • 2017-08-21 15:27 @number5 GitX 沒更新很久了….. 有bug沒人修啊
  • 2017-08-21 15:17 “Fork: a fast and friendly git client for Mac” t.co/wRbFIQo0LK # 看起來不錯,喜歡這種輕量級的
  • 2017-08-20 11:54 IBM 主推的 HyperLedger Fabric 區塊鏈跟它的智能合約是用 Go 語言寫的,然後官方安裝步驟是用 Docker 安裝,原來金融業也這麼潮了。
  • 2017-08-19 17:14 t.co/K12LueiFwV # 兩百行的 Node.js 區塊鏈簡單實作 1. 用 websocket 實作了 P2P 網絡 2. 用 express 做了 HTTP API 3. 可惜沒有實作共識系統,想看 PoW 機制
  • 2017-08-14 17:33 @hSATAC 快發一篇 LOGAN
  • 2017-08-07 21:35 “TodoMVC for the RealWorld” t.co/qMFcCguTFa # (任意前端框架 x 任意後端框架)的範例 app
  • 2017-08-05 23:25 RT @audreyt: 人們不再彼此相互信任,為什麼?我們怎麼改變這種情況?合作博弈論的互動講解手冊: t.co/gXKQ7LKOMP
  • 2017-08-04 10:36 RT @webmaxru: This day goes to #PWA history! Initial steps of #ServiceWorker in #Safari: t.co/WU4Uin6ZHP. Kudos to… t.co/VolDoNRo9O
  • 2017-08-04 01:39 記得你是何時加入 Twitter 的嗎?我記得!#我的Twitter週年紀念日 t.co/WyCkmOkq8d

2017/7

Git worktree: 同時開多個工作目錄

Git 的 worktree 是 Git 2.5 新增的功能,有點相見恨晚啊。

有在用 Git 的都知道如果工作目錄(working tree)修改到一半的話,是不能隨便切換 branch 的。解決方式是要麻是 git stash 先暫存起來,不然就是先暫時 commit 等會再 reset 回來。這都還好。

但是,還是會碰到一些需要同時處理不同 branch 的情況,例如想要同時修改或對照不同 branch,或是一邊跑測試一邊繼續寫code,甚至是想同時開發測試不同 branch 等等。這時候就得另外 clone 一個目錄,但這就是麻煩的開始,不同的 repo 目錄要怎麼同步最新的修改? 重新複製目錄? 先 git push 再 pull 一次? 總之就是有點繞啊。

git worktree 這個神奇的指令可以創造出另一個工作目錄,例如:

$ git worktree add -b hotfix ../hotfix master
Preparing ../hotfix (identifier hotfix)
HEAD is now at 46d363dc XXX

如此就會在上一層新建立一個 hotfix 目錄,並新建一個分支 hotfix。這種工作目錄叫做 linked working tree。

cd ../hotfix 就是一個乾淨從 master 分出來的 hotfix 分支,可以在這邊做事。最後 commit 完事之後,直接 rm -rf 砍掉這個 hotfix 目錄(放心,東西已經進 branch,這可以砍掉了),接著 git worktree prune 就會清除 linked working tree 記錄了。不清除也沒關係,三個月後也會自動清掉。

不過如果你把 linked working tree 放在會被移除的裝置上,例如外接硬碟上,這樣可能會不小心被 Git 清掉。這時候需要用 git worktree lock 指令。

最後,git worktree list 則會列出目前所有的工作目錄。

如何真正讓 Ruby Constants 常數無法被修改

大概翻了一下 Effective Ruby (中文原文),覺得其中第四個 Be Aware That Constants Are Mutable 有點意思,記錄下來。

在 Ruby 裡面大寫開頭的叫做常數,Ruby 開發者可能知道這個常數是可以被事後修改的,雖然會有警告啦,但是還是被修改到了,那有沒有辦法可以真正無法被修改呢? 原來要用 freeze,而且還需要點技巧。

讓我們看一下代碼:

閱讀全文〈如何真正讓 Ruby Constants 常數無法被修改〉

Tweets 整理 (2017 Q2)

2017/6

2017/5

  • 2017-05-26 16:36 @deduce 我不是說十年,你等了五年,自己算算看 ?
  • 2017-05-26 12:51 @deduce 一直都有默默更新啊,我的目標是從開始寫到完成出版,十年磨一劍。
  • 2017-05-25 01:08 RT @dhh: Webpacker 2.0 for Rails is out: t.co/QM1KaGn3gj – new config format, so some upgrading required. Kudos to @javan & Gaurav Tiwari ?
  • 2017-05-23 13:00 「第一性原理」(First Principle) t.co/LlTEGfr3eI 1. 學習前期用具體技術成長比較快,但後期就需要掌握知識本質才能突破,產生知識爆炸點 2. 知識從沒有爆炸,現在爆炸的只是垃圾資訊
  • 2017-05-20 08:45 抵達 Vue Conf 會場 t.co/whQcXJP9xs
  • 2017-05-19 17:45 “全球首届Vue.js开发者大会” t.co/SipsflETVV 跟 “VueConf 2017” t.co/y93BL8E6vI # 兩個都說自己是第一個 Vue Conference… XD
  • 2017-05-18 13:13 “程序员面试什么最重要?” t.co/bSqqouqdzn # 性格 > 经验 > 基础 > 算法
  • 2017-05-13 19:19 “王垠: 我为什么不在乎人工智能” t.co/Uy0hcRnHzm # 如果 A.I. 取代了人類工作,我認為 “無條件基本收入” 會是正解,只是我也覺得自動編程是不可能的事情 XD
  • 2017-05-04 16:39 “去年雙 11 期間的 1.7 億個 BANNER,都來自阿里的設計人工智能「魯班」” t.co/eotytDtEJk # 連廣告 banner 圖片也是個性化推薦自動合成的啊,厲害 # 讓天下沒有難擼的 banner,諧音就是「魯班」… XD
  • 2017-05-04 15:30 “开撕:亚马逊的推荐到底行不行?” t.co/9w5zGiHkR6 # 如何评价推荐系统的作用
  • 2017-05-04 12:24 “NCurses Disk Usage” t.co/6Y9AjSyzu4 # disk usage analyzer # 在 server 上找大檔案刪的好工具

2017/4

  • 2017-04-28 08:39 RT @dhh: Rails 5.1 FINAL has been released! Loving JavaScript, System Tests, Encrypted Secrets, and more. Happy @RailsConf ? t.co/M9KQlcLy4R
  • 2017-04-22 20:55 “因APCN2海纜障礙影響HiNet客戶連線歐美、日本部份網站之連線品質” t.co/xMbS2YSa23 # 多發生幾次後,就覺得要做生意的話,還是放島內的 Google Cloud Platform 比較放心啊
  • 2017-04-21 22:47 @larrylv 每個月會去一次北京待一週喔
  • 2017-04-20 16:17 “德鲁克谈真正的老师” t.co/Ecbx4TTDRu # 會教的老師少,會教你怎麼學的老師更少
  • 2017-04-20 13:43 有些人覺得付錢去上課是繳智商稅,學習技術就是要很苦逼一萬小時才能精通,任何加速學會的課程都是膚淺的。但是如果學習心態正確,花錢有個好老師可以善用,我認為進步會比自己摸索快很多。 t.co/Pf8c9tfJZ5
  • 2017-04-20 13:21 做開發還可以自己學,作維運 Operations 需要環境滋養啊 t.co/2fHeTgh01e
  • 2017-04-20 13:13 中國市場的話,用支付寶、微信支付比 Paypal 或 Stripe 更方便,手機逼一下 QR Code,按個確認就付款完成,比輸入信用卡卡號又更快了
  • 2017-04-20 12:55 “PayPal 台灣交易系統更新
    t.co/lIwJkvpD2R # PayPal 不能用、Stripe 也不能用。要好好收款只能把公司註冊在國外啊 XD
  • 2017-04-05 01:00 “Big List of Naughty Strings” t.co/joA6m1tKjk # 收集各種奇怪的字串,用來測試用戶輸入會不會弄壞系統 XD

北京一個月

在北京工作加起來一個月了(每個月出差去一次),各種新體驗。

結婚之後,覺得是沒機會離開新竹工作了。沒想到年初因緣際會得到一個不錯的工作機會,讓我可以用定期出差北京,在台灣 remote 工作的模式進行。

真的在對岸工作,果然是不同的生活環境。

分享一下北京生存需要的裝備:

  • 辦手機門號和銀行戶頭(我是辦中國移動和招商銀行)
  • 支付寶實名認證
  • 微信支付實名認證
  • 加濕器,北京室內有點乾
  • 3M 9002V 防塵口罩,出門有時候很🌫️啊….
  • 一件厲害的厚外套出門穿(室內有供暖,所以裡面穿薄即可)
  • 各種App: 微信、支付寶、百度地圖、滴滴出行、航班管家、餓了嗎、美團外賣、百度外賣、ofo共享單車、摩拜單車、在意空氣、天氣通、UU跑腿、大眾點評、QQ郵箱(有些服務不能用gmail,需要一個中國大陸的email的時候)

最好也學一下拼音輸入法,裝搜狗輸入法。

新的中國移動門號,要先儲值超過$500才能辦漫遊(回台灣才可以收簡訊),這些線上服務註冊使用都需要收手機簡訊。

還有,完全不需要帶人民幣現金! 都用手機支付,連社區樓下家庭式雜貨店都用手機支付… XD

Updated: 雖然這份工作到年底結束了,但整個大陸經驗學習了很多。