Quantcast
Channel: CodeTengu Weekly 碼天狗週刊
Viewing all 109 articles
Browse latest View live

CodeTengu Weekly 碼天狗週刊 - Issue 43 Perl 是唯一一門在 RSA 加密前後看起來一樣的語言 - May 16th 2016

$
0
0

Hello World

CodeTengu Weekly 碼天狗週刊

CodeTengu Weekly 會在 GMT+8 時區的每個禮拜一早上 10:00 出刊,每一期會從目前的 curator 名單中選出三位來負責當期的內容,每一位 curator 各自負責不同的領域,如果你在這一期沒有看到自已感興趣的東西,說不定下一期就會有了。

你也可以瀏覽一下前幾期的內容,有價值的東西是不會過時的。

以下是目前的 curator 陣容:

大家也可以 follow 一下 CodeTengu 的 FacebookTwitterGitHub,有很多 Weekly 看不到的內容。有任何建議或疑問也可以來 Gitter 聊一聊,歡迎亂入 👺

致力於解決開發者之間的資訊不對稱

@fukuball

理解 Dependency Injection 實作原理,以 PHP 為例

PHP、Programming:中級

當系統越來越龐大複雜時,會慢慢發現程式之間的依賴關係越來越重,不僅使得程式漸漸沒有修改的彈性,也會造成程式無法很容易地被測試。這時我們可以使用依賴注入(Dependency Injection)這個技巧來減低程式之間的藕合性。

本篇文章用 PHP 撰寫了一個簡單的例子來說明怎麼做到依賴注入,並介紹了實務上會在大型系統使用 DI 容器來更容易地做到依賴注入,不過記得現在已經有許多 Framework 有提供很好的 DI 容器,就不需要自己再自幹一個了,這篇文章是為了幫助初學者更容易地了解 DI 的概念,如果看完文章你還是覺得一知半解,那可以看看這個生動的影片幫助了解。

jaceju.net

MySQL 5.7 Introduces a JSON Data Type - 簡介 MySQL 5.7 的 JSON Data Type

MySQL:初級

其實我個人蠻喜歡寫 SQL 的,比起使用 ORM 提供的 Query Builder,總是覺得 SQL 一次 Query 出想要的資料省事多了,而 MySQL 5.7 推出的新 Feature - JSON Data Type 可能又會讓 SQL 變得更好用,所以好好磨練一下寫 SQL 的技巧還是非常重要的。

JSON Data Type 的使用時機是在你需要一些比較不需要結構化的資料時可以考慮使用,比如像是標籤、可有可無的 metadata 等等,這些資料設成自己一個資料表像割雞用牛刀,設成自己一個欄位又會造成資料表中這些欄位的資料很稀疏,這時我們就會想要用一個 JSON 文件存在一個欄位就好了。

但僅僅將 JSON 用 String 存到資料表,並無法很簡易的 Query 出資料,而且也不能很簡易的操作資料,可能都需要先將資料撈出來之後,再用程式語言對 JSON 做操作,簡直是找自己麻煩。但如果是存成 MySQL 5.7 的 JSON Data Type,MySQL 提供了許多方法可以在 SQL Query 中操作 JSON 欄位的資料,瞧瞧這個 Query:

SELECT name, profile->"$.direct_reports" reports, profile->"$.salary" salary FROM people WHERE profile->"$.direct_reports" >= 10;

很方便就可以把資料欄位的 JSON 文件當條件來查詢啊!感覺超棒的!

lornajane.net

Finding Similar Music using Matrix Factorization - 利用矩陣分解來推薦相似音樂(藝人)

Machine Learning:中級

本篇文章展示了如何使用矩陣分解方法來快速做到相似音樂(藝人)功能,首先作者先使用了 LSA 這個矩陣分解方法,LSA 是 Latent Semantic Analysis 的縮寫,字面上的意思就是「潛在語意分析」,當你要分析兩個資料之間有沒有什麼潛在的語意關係(比如同意字、資料間的相似性),都可以使用這個矩陣分解方法來分析。不瞞各位說,本宅的研究論文就是使用了 LSA 來分析歌曲於歌詞之間的情意相似性,用以對歌曲推薦情意相似的歌詞,或是反過來用歌詞推薦情意相似的歌曲。

不小心講了太多本宅的事,言歸正傳,本篇文章寫得言簡意賅,首先作者先利用使用者播放藝人歌曲建立藝人與使用者之間的關係矩陣,然後對這個矩陣進行 LSA 分解。LSA 需要指定參數說要將矩陣分解成幾個主要因子,作者選擇了 50 個因子,如此可以得到藝人跟 50 個因子的關係矩陣,以及使用者跟 50 個因子的關係矩陣。其實藝人跟 50 個因子關係矩陣的潛在意義就是藝人受到使用者歡迎的原因因子,它是抽象的,但大家可以想成藝人因為這 50 個因子,能夠與使用者關係矩陣線性組合成原本的播放矩陣,這 50 個因子造就了使用者如何播放藝人的音樂。

得到 50 個因子的關係矩陣之後,每一個藝人都可以表示成 50 維的向量,我們就可以使用 cosin similarity 來計算每個藝人的相似程度(潛在意義就是被使用者播放的相似情況),大家可以看一下作者提供的一些結果,像是 The Beatles 推薦出 John Lennon、Paul Mccartney,真的還蠻準的。然後作者又進一步做了一些調整,因為從使用者播放藝人音樂的關係,我們可以定義這是種喜歡藝人音樂的關係,但如果使用者都不放某位藝人的音樂,那是否就代表了是一種不喜歡的關係,為了嚴謹的計算這樣的關係,他使用了 Collaborative Filtering for Implicit Feedback Datasets 提出的方法來做到這點,作者有提供相關 Source Code,大家有興趣可以去玩玩看噢~

benfrederickson.com

林軒田教授機器學習基石 Machine Learning Foundations 第十五講學習筆記

Machine Learning:初級

在上一講中我們學習了如何推演正規化演算法來避免 Overfitting 的發生,總結前面所有的演算法加上正規化的技巧,我們會發現各種學習演算法都有一些參數需要去做調整,但到底要怎麼挑參數才能得到最好的效果呢?這一講中介紹了 Cross Validation 這個技巧來幫助我們選擇合適的參數,比起自己憑感覺挑參數客觀許多,在理論上也證明未來預測的效果會接近 Cross Validation 測試出來的結果,這是學會機器學習這門學問相當重要的一個技巧。

fukuball.com

@mingderwang

用 docker 來玩 GPU

怎麼可能? Docker 不是用來分享 CPU 或記憶體資源的嗎, 怎麼可以用 Docker 來玩 GPU 呢? 答案是: 兩年前就已經有很多人在繪圖卡上試過 Docker 了。還比較過在 Docker 裡跟 Docker 外執行 CUDA 效能相差多少。現在 nVidia 也推出官方版 CUDA Docker images, 想在 Docker 裡玩 GPU 的人, 可以 Docker pull 下來, 直接使用。

一定有人會問, 繪圖卡不是只能用來打 games 的嗎? 為何還要支援 Docker? 如果你也這麼認為, 那你就大錯特錯了。最近不是流行 Machine Learning 或 Deep Learning 嗎? 用 GPU 可以讓運算速度快上百倍。加上 Docker 可以幫你解決很多安裝 drivers 的問題, 再加上官方版 nVidia Docker image 還提供內建 cuDNN - Deep Neural Network 附程式庫, 可以讓你事半功倍, 很快成為用 Docker 跑 Deep Learning 處理 Big Data 的資料專家。

CodeTengu Weekly

Automating your development environment with Ansible

每次有 RD 新進人員報到, 最高興的是又可以採買新電腦或筆電給這位新員工。但頭痛的是, 又要重新安裝一個跟其他 RD 一模一樣的開發環境給他, 不管是誰裝, 幾乎都要耗掉一天的時間, 而且還未必能用。

所以最好的解決方法就是, 自動化安裝你的開發環境。Ansible 也許是個人安裝自己筆電最簡單的方法, 不必像 Chef 或是 Puppet 還要安裝 server, 或是用 push pull 的模式才能使用。Nick Hammond 這篇文章只是一個範例, 它用 Ansible 就能在 Mac 上安裝 Ruby 的開發環境, 還順道幫他架設 pow, MySQL 和 Elasticsearch, 並且能確保跟其他工程師一模一樣的開發環境。最棒的是, 這個設定只要做一次, 以後就輕鬆了。

nickhammond.com

@kkdai

Go best practices, six years in (學習 Golang 六年後,這裡有些秘訣)

作者分享學習 Golang 六年後(喔!一開始就學) 的一些實際演練上的好範例.

  • Development environment (環境的設定)

    • 建議把 $GOPATH/bin (其實也就是我們常說的 $GOBIN 加入你的 $PATH 這樣做任何事情都會相當方便.
  • Repository structure (專案的檔案組織架構)

    • 如果你的套件是執行檔 (舉例: 臉書相簿小幫手 :p ) 把執行檔寫在主要目錄下,你其他函式庫寫在套件資料夾中.
    • 如果你的套件是函式庫 ( 舉例: CoAPMQ ) 就把相關執行程式的部分 ( server 或是 client 或是其他 CLI 工具) 寫在資料夾中.
  • Formatting and style (關於 Coding Style 部分)

  • Configuration ( 有效的參數設定)

    • 作者建議如果要使用 flag.Parse() ,建議放在 func main() 因為這樣最直覺也最清楚.並且把所有的設定變數都在該地方存取好當作參數傳到各個函式.
  • Program design (針對物件設計的討論)

    • 如果要起始一個物件( ex: foo ),比較建議的方式不是直接拿結構( new(foo) ) 來用,而是使用建構函數 NewFoo()
    • 有其他針對該物件的設定,可以當作建構函數的輸入參數.這樣在 NewFoo() 裡面可以有效地避免疏忽的初始化.比如說 map 沒有初始化,變數初始化.
  • Logging and instrumentation ( 關於 Logging )

    • 關於 Logging 的小技巧,以下幾個都還蠻有用的:
      • Logging 只需要紀錄意外狀況.
      • 避免太多的 Logging Level ,很多時候使用 Info 跟 Debug 已經很足夠.
      • 使用結構性的 Logging 套件,比如說 go-kit/log
  • Testing (關於測試)

    • 測試只測試需要被測試的部分.比如說你要測試一個空值,就不要測試極大值與極小值的部分.
  • Dependency management ( 套件相依管理 )

    • 這大概算是很困難的部分,不過作者也建議幾個相依套件可以給大家參考. (比如說我也很推薦的 govendor )
  • Build and deploy (編譯跟部屬方面)

    • 作者建議使用 go install 而不要使用 go build ,因為它不僅僅會把相依套件都安裝好.也會把可編譯的執行檔一併複製到 $GOPATH/bin 的目錄下.

這篇介紹有點長,不過很推薦大家好好研讀一下本文.

bourgon.org

goserv - A lightweight toolkit for web applications in Go

不少人一直都在詢問有沒有好的 ‪#‎Golang‬ Web toolkit ,這個 goserv 看起來還不錯.剛剛在 05/03 達到 1.0 正式版的 goserv 提供以下的功能:

  • Fast & Lightweight
  • Flexible Routing
  • Centralized Error handling
  • 跟原生 net/http 是相容的

並且可以很快速的架設 File Server,也可以很快速地透過 MongoDB 架設 REST Server 大家可以看看有沒有符合需求

goserv.it

[podcast] Go on the Cloud with Andrew Gerrand and Chris Broadfoot

昨天才剛上架最新一期的 Google Cloud Platform Podcast 請到了兩個大神:

Andrew Gerrand: 身為 Gopher 你很難沒聽過這個名字,就是 Golang 的創始團隊之一,並且專注在 Golang 使用者經驗上的持續推廣.

Chris Broadfoot: 去年加入 Go 跟 Google Cloud Team 的 Chris 主要是負責 Go App 在 Google Cloud Platform 上面的開發.

裡面有談到為何 Golang 受歡迎? 為何幾乎所有重要的雲端的開發系統( Docker Kubenetes ) 都使用 Golang 作為開發語言.

很推薦一聽....

此外: 主持人是有來台灣參加 Golang Taiwan 的 Francesc Campoy 跟 Google Cloud team 的 Mark Mandel

gcppodcast.com

google/zoekt: Fast trigram based code search

Zoekt ( 唸成 "zooked" ): Fast trigram based code search by Google"

背景介紹: 這是 Google 官方釋出的 trigram based code search tool ,其實之前 Russ Cox 就有寫過類似概念的東西(並且支援 REGEX)

如果想簡單的瞭解 Trigram 是如何在 code search 中運作,可以看小弟我之前的簡單介紹文章

github.com

kovetskiy/manul 透過 git submodule 來方便達成 Go Vendoring 的工具

Go 1.6 之後已經預設將實驗性質的 Vendor (也就是相依套件管理功能,更多資訊請參考 Wiki ) 功能當作預設打開了.那麼該如何有效地使用 Vendoring 呢? 不論是透過 Godep 或是透過 GoVendor 都會複製一整份套件原始碼在你的 Golang Repo 下.難道沒有更好的方式嗎?

manul 就是一個這樣的工具,他使用 git submodule 的概念來實作.將每個相依的套件當作是 submodule 來管理,這樣一來不僅僅可以減少許多的 Repo 空間,也可以更有效地做套件版本的控管. 並且 git submodule 本身就支援 go get

還在煩惱套件管理嗎? 不仿試試看這個工具吧.

github.com

工作機會

GoAnimate - 資深軟體設計工程師

年薪範圍 NT$ 720,000 至 NT$ 1,080,000

sudo.com.tw

Random Cool Stuff

來動手玩玩 Amazon Echo 吧 ? 透過 Raspberry Pi 來模擬 Amazon Echo,並且開發個人化的 Alexa Skill

上週的 Random Cool Stuff 有提到透過 Amazon 藍芽喇叭語音控制設備 Echo 來控制你的電動車 Telsa S .那麼本週就讓我們來動手透過 Raspberry Pi2 做一個 窮人版 開發者版本的 Amazon Echo 吧?

這一篇文章整理了一些文章列表,並且敘述該如何從 Raspberry Pi 2 的設定到建立自己的開發版本的 Amzon Echo ,甚至到架設自己的伺服器與 AWS Lambda 的部分.來開發個人化的 Alexa Skill ( 也就是 Amazon Echo 上面的 App )

其實 Amazon 所提供的手把手說明文件相當的清楚,但是可能會有些問題發生的時候不知道該如何去檢查.作者提供了一些簡單的檢查方式.希望能幫助大家儘快的開發出自己的 Amazon Echo 客製化技能.

Post by @kkdai

evanlin.com


This RSS feed is published on http://weekly.codetengu.com/. You can also subscribe via email.


CodeTengu Weekly 碼天狗週刊 - Issue 44 為了不讓 Google 的 AlphaGo 專美於前,微軟也將在近期推出自己的圍棋 AI,名叫 AlphaC# - May 23rd 2016

$
0
0

Hello World

CodeTengu Weekly 碼天狗週刊

CodeTengu Weekly 會在 GMT+8 時區的每個禮拜一早上 10:00 出刊,每一期會從目前的 curator 名單中選出三位來負責當期的內容,每一位 curator 各自負責不同的領域,如果你在這一期沒有看到自已感興趣的東西,說不定下一期就會有了。

你也可以瀏覽一下前幾期的內容,有價值的東西是不會過時的。

以下是目前的 curator 陣容:

大家也可以 follow 一下 CodeTengu 的 FacebookTwitterGitHub,有很多 Weekly 看不到的內容。有任何建議或疑問也可以來 Gitter 聊一聊,歡迎亂入 👺

致力於解決開發者之間的資訊不對稱

@vinta

Useful Python tips!

作者每天會在這個 GitHub repo 更新一則關於 Python 的短文(所以其實你可以 watch 這個 repo),而且是用 IPython notebook!主題從 metaclass、Enum(Python 3.4 以後才有)、context manager、generator 到 threading,值得一讀。

github.com

AWS Cloud Design Patterns

這個 wiki 網站滿有趣的,上面列舉了很多 Amazon Web Service 的 "Cloud Design Pattern",不過白話一點的說法其實就是 AWS 各種服務的 use case 和它們之間可以怎麼搭配,用來解決哪些問題。

clouddesignpattern.org

AWS DynamoDB notes

上禮拜心血來潮突然想玩一下 AWS Lambda 和 DynamoDB,也順便自動化一些 CodeTengu 的例行事項,然後這篇文章和延伸閱讀的那一篇就是我在過程中做的筆記,雖然有點雜亂,不過應該還是對大家有點幫助的。但是其實 AWS 的官方文件寫得很完整,就是內容實在多了點,看完都過了八年馬英九都下台了。

AWS Lambda 毫無懸念地很容易上手,不過我沒有用最近很熱門的 serverless(他包了太多東西了,我的需求沒那麼複雜),而是用了 @tj 大神寫的 apex,簡單好用,不愧是出自名家之手啊~

除此之外反倒是花了不少時間研究 DynamoDB 的 index 該怎麼下,有興趣的人可以看一下 Design Patterns using Amazon DynamoDB(也有影片),豁然開朗撥雲見日吶!

延伸閱讀:

vinta.ws

mysqldump with Modern MySQL

這篇文章專門在講 mysqldump(用來備份 MySQL 資料庫的指令)那些五花八門的參數的用法。

serversforhackers.com

The Elements of Good Commit Messages

這個簡報在講好的 commit messages 會有哪些要素,最棒的是他舉的例子都是從各大 open source project 挖來的 "Real World Examples"。

作者提到的好幾項都挺不錯的,其中我覺得最重要的可能就是「在 commit message 中提供 context(上下文)」,例如:

  • error message(或者至少是 exception class)
  • 這個 bug 會在什麼情況下發生
  • 為什麼選擇這個做法(這個方式可能犧牲了什麼?)
  • 你還嘗試或考慮了哪些做法

不過如果什麼都寫上去,正常人也是受不了,所以另外很重要的一點是要在 commit message 裡標記 issue number(票號,例如 Fixes #42),因為當初在專案管理系統裡可能就有很多關於這個 issue 的討論或是更詳細的前因後果,這些對 code review 和將來的 debug 可都是很重要的資訊啊。不過,程式碼背後的 why 和簡報最後提到的 reference,我覺得除了寫在 commit message 裡之外,其實更適合寫在註解裡。

延伸閱讀:

speakerdeck.com

@wancw

簡單設計 4 準則(Kent Beck's 4 Rules of Simple Design)

過度設計(over design)一直是個大問題,但是怎樣才叫簡單?

極致編程(XP)的大師 Kent Beck 提出一套準則:

  1. 通過所有測試(Passes the tests)
  2. 清楚地表達意圖(Reveals intention)→ 易讀
  3. 沒有重複(No duplication)
  4. 最少元件(Fewest elements)

當發生衝突的時候,以前面的準則為優先。

本文是 Martin Fowler 對這份準則的詮釋與討論。

另外還可以參考 DZone 上面的 The 4 rules of simple design 和微信上 WXCOP 无限靠谱的简单设计原则

martinfowler.com

一道常被人轻视的前端 JS 面试题

簡單的一道題目,卻蘊含了 JavaScript 無數的坑,值得一讀。至少提醒自己不要寫出模稜兩可或是不確定語意的程式碼。

像我前兩天就踩到 JavaScript 的運算子優先順序的雷 —— < 竟然優先於 & ?!只能說我實在太天真了啊~ 還好不是用在 production 上的程式碼。

cnblogs.com

[中文導讀] Facebook 的時間序列資料庫 - Gorilla

這是碼天狗策展群之一 @kkdai 讀完 Facebook 的時間序列資料庫 Gorilla 論文後的心得摘要。

不但每週有專案產出、還有時間閱讀複雜的論文,kkdai 實在很猛啊!大家可以參考一下他的時間管理心得

如果各位對於讀 CS 領域的論文有興趣的話,也可以參考 Papers We Love 這個社群。

evanlin.com

如何有禮貌地拒絕會議邀請(Polite Ways to Decline a Meeting Invitation)

碼農最討厭的事情之一就是無止境的莫名其妙會議來干擾自己的生產力。 這篇文章給了是否參加會議的判準,並提供一些建議的回應方式。

首先是評估你是否該參加該會議:

  1. 評估會議的價值:事前資訊是否足夠?是否重要、有意義?
  2. 你是否是正確人選:權責是否相符?你的意見可否發揮作用?
  3. 衡量自己手上工作的優先順序:手上是否有其他更重要的事情?

然後作出適當的回應:

  1. 阻止你覺得根本是無用的會議
  2. 推薦更適合的人選
  3. 在會議前提出你的看法與建議 或是 只出席部分會議

習慣這套準則、清楚說明拒絕原因,讓同僚習慣這樣的做法,一起打造更有效率的工作環境吧!

hbr.org

Instagram - Elaine Yong™ (@elaineyongg)

本來不打算放 Instagram 推薦了。

但請各位容忍五月病發作的我貼篇讓自己心情愉快的內容。

這笑容多療癒啊~

instagram.com

@kako0507

Higher Order Components: Theory and Practice

High-order component 概念來自 funcitonal programming 的 high-order function ,是將一個 function 轉成另一個 function 的運算,同樣的 High-order component 能將一個 component 轉換為另一個 component ,可以減少重複的 code ,方便 compose ,在使用 React 實可用來取代 Mixin 的效果。

blogfoster.com

CSS coding techniques

這篇文章大略的講解了容易讓開發者混淆的幾個部分,以及對撰寫 CSS 的建議:

  • CSS specification (權重)
    • 透過對權重的了解可以避免寫出的 CSS 被其他 Selector 所覆蓋,也因此可減少對 !important 的依賴
  • 長度單位
    • em and rem
    • vw and vh
  • 使用 flexbox 簡單拉出 layout
  • CSS preprocessors
    • Do not let nesting generate CSS rules you wouldn’t type yourself.
    • Include vs extend

mozilla.org

What's new in Node v6?

Node.js 改版速度飛快,日前又發佈了 v6 版本,號稱速度較目前的 LTS 版本 (v4) 提升四倍!且支援大部分 (93 %) 重要的ES6 新特性,在十月也會變為 LTS 版本,屆時就可以將 Product 換上了。

risingstack.com

Webpack & The Hot Module Replacement

Webpack HMR (Hot Module Replacement) 讓瀏覽器可以在程式碼被變動時自動更新當前畫面狀態,在開發時非常方便。本篇文章介紹 HMR 的運作原理和流程。

medium.com

Front-End Performance: The Dark Side

影片探討 performance 有時候會造成安全性問題,影片一開始會透過 string compare performance 來介紹 timing attack ,以及介紹透過 timing attack 來達成的攻擊。

opera.com

Random Cool Stuff

Reverse Engineering A Mysterious UDP Stream in My Hotel

作者無意間在旅館發現神秘的 UDP 廣播封包,決定追根究底找出它們的來源與目的……竟然是旅館電梯的音樂!

解謎過程很有趣,值得一看。

@wancw 分享。

gkbrk.com


This RSS feed is published on http://weekly.codetengu.com/. You can also subscribe via email.

CodeTengu Weekly 碼天狗週刊 - Issue 45 我女朋友說她最近需要一些時間跟距離,請問她是不是要算速率? - May 30th 2016

$
0
0

Hello World

CodeTengu Weekly 碼天狗週刊

CodeTengu Weekly 會在 GMT+8 時區的每個禮拜一早上 10:00 出刊,每一期會從目前的 curator 名單中選出三位來負責當期的內容,每一位 curator 各自負責不同的領域,如果你在這一期沒有看到自已感興趣的東西,說不定下一期就會有了。你也可以瀏覽一下前幾期的內容,有價值的東西是不會過時的。

以下是目前的 curator 陣容:

大家也可以關注 CodeTengu 的 FacebookTwitterGitHub微博,有很多 Weekly 看不到的內容。有任何建議或疑問也可以來 Gitter 聊聊,歡迎亂入 👺

致力於解決開發者之間的資訊不對稱

@saiday

The New 10-Year Vesting Schedule

新創公司的其中一個特色就是會給比較低的實質薪水,用其他的方式來補償員工,股票選擇權是常見的方式之一。

這篇文說的是新創圈的創辦人跟 VC 是怎樣技術性地操作股票選擇權,讓他們獲得最大利益,當然犧牲的就是持有選擇權的員工了。
先有四年期的股票選擇權,兩年後告訴你當初給的股票太少,提高之後再重新來一輪四年期。
更不要說這些創辦人跟 VC 都不希望公司太早上市,這讓員工沒辦法把股票換成現金啊。

大家可以參考看看,雖然說台灣的情況比較特別,因為我們還會有這樣的工作型態需要去思考 全職工作 薪水自備 可簽約定股權,唉。

註:這一季的 SILICON VALLEY 美劇也剛好都在演那些 CEO 跟 VC 們都是怎麼在看待軟體公司的,真的好壞喔。

zachholman.com

Reflections on six months of Swift

Khanlou 是一個我很喜歡的 iOS 開發者,最近寫了一篇關於 Swift 的文章,跟大家分享為什麼開始寫 Swift 跟為什麼不寫 Swift。

Steve Yegge 說軟體工程師跟所有的立場一樣,有分成保守派跟自由派,關於自由派讚揚 Swift 的言論已經看過很多了,Khanlou 在我心中是一個典型保守派的代表,他專注的領域偏向效能、架構、pattern、best practice,這樣的人來評價 Swift 值得參考。

I still think the prudent choice is to continue writing apps in Objective-C.

繼續使用 Objective-C 開發,這是他寫了六個月 Swift 的心得。 只不過前提是在 Swift 做到可以版本向下相容之前,當 Swift ABI compatibility 的那一天他就會義無反顧地使用 Swift 了。
他的理由也很務實,如果是一個長期的 project,在做 Swift 版本升級的期間你可能得維護兩份 swift-2swift-3 之類的 branch、升級也會受制於你的 dependencies,好不容易升級完了,想要 trace 一個 bug 你用 git bisect 或是手動 checkout 回去,連 compile 都無法,這樣不優啊。

khanlou.com

[Swift] Pattern Matching

Swift 被稱讚的彈性很大部分來自於 case 這個關鍵字可以很靈活,而這個 case 就是 Swift 對 pattern matching 的實作。這篇對 pattern matching 說明得很詳細,如果你對這個詞還不太有把握的話,那麼看完你就明白了。

當然也介紹了大量的 enum, switch, case 用法。

註: Swift 的 pattern matching 不像純正的函數式語言可以在 function declaration 實作 pattern matching,全部都是透過 case 關鍵字實作的。

github.io

ConstraintLayout 101 & the new Layout Builder in Android Studio - Riggaroo

這次 Google I/O Android 的部分讓我感興趣的除了 Instant Apps 之外就是 ConstraintLayout 了。

以往的 Layout 功能相較之下比較單純,一個 Layout 不容易處理太複雜的視覺,所以 Layout 嵌套的狀況很常見,這樣除了增加開發 XML 的複雜度之外也影響了效能。
這次新引入的 ConstraintLayout 就是想要解決這些問題,甚至還在 Android Studio 提供了更強大的編輯方式,看起來簡直就是另一種 layout design 的方式,難怪在 Google I/O 的標題叫做 Android Layouts: a new world

想要直接感受一下的話,可以參考另一個 GitHub repo hitherejoe/Constraints

riggaroo.co.za

@hiroshiyui

Erlang 執行速度好慢好慢嗎?

一個很經典有趣的例子,計算、列舉畢氏定理的可能值,以我彆腳的數學程度也只能想出原始的版本,覺得能夠想出改良版本的人真的很厲害。但我想不僅是 Erlang、函式語言如此,很多語言用了更巧妙、或者說更貼近電腦計算方式的演算法,效能表現就會有顯著的差異。

wordpress.com

Elixir-koans by elixirkoans

之前提過 Elixir School 這個 Elixir 學習資源,這次要介紹的是 Elixir-koans,透過 TDD 的方式帶您學習 Elixir,類似的資源有 Python 的 Python Koans、Ruby 的 Ruby Koans、Clojure 的 Clojure Koans… 等。學程式語言順便學 Test-driven Development,一兼二顧,摸蜊仔兼洗褲,真的很推薦。

我是很崇尚「測試先行」這件事的,測試不是萬能,但是缺少測試,您的產品 QA 就是無法給人(無論這人是他人還是您自己)一個保證。

同場加映:重談「佛祖流」敏捷軟體開發

elixirkoans.io

Static Markdown blog posts with Elixir Phoenix

這篇教您用 Phoenix 做出類似 Jekyll 的靜態網誌,有使用 GitHub Pages 的人應該對 Jekyll 這個產品不陌生。

sebastianseilund.com

@uranusjr

My time with Rails is up

長期在 Ruby 社群活躍的 Piotr Solnica 宣布自己受夠 Rails 了,決定以後再也不在自己的 Ruby 專案中支援它。他舉出了一些原因:

  • Merb 與 DataMapper 的消亡,使得 Rails 缺少競爭
  • Rails 過於擁腫且複雜
  • 高度耦合,無法單獨使用任何元件,同時使得測試困難
  • 無法很好的與任意 Ruby 專案共存

他同時也講了很多使用 Rails 的心路歷程(以及 Rails 的許多優點)。如果你也有用 Rails,應該會感到共鳴;如果你想考慮學習 Rails,也很值得看看。

我個人主要還是用 Python,和 Ruby 只是偶爾玩玩(很久沒碰 Rails 了),所以看到這類文章第一個直覺就是把其他社群與 Python 比較。感覺每個社群都有一些很獨特的地方,不知道是否因為語言和主流函式庫會吸引相同性質的人,還是一開始在同一社群裡的人會更容易接納同類。像 JavaScript 尤其 Node 的社群感覺就是混亂(不是貶義,是 D&D 屬性的那個意思,相對於守序)。

另一方面 Ruby 給我的的感覺就是集中。例如 Matz 本人和 DDH 等等,有很多「他說了就算」的狀況。當然集中有集中的方便——尤其是效率——但在某些時候就會有這次的問題,因為領導人的鮮明人格特質,以及大家的附和,而排擠了不同聲音。原文發出後隔天,就有人發出了一篇⋯⋯或許可以說是反擊?DDH 本人也有一些意見,更進一步讓人感受 Rails 對於集中的擁護,以及他們依據這個偏好做出選擇的各種理由。當然這不是出於惡意,只是社群的特點,喜不喜歡就看個人了。我還是比較偏守序、中立、分散的風格,所以就繼續留在 Python 社群囉。

solnic.eu

I hate the term “open source”

作者認為「開源」這個詞已經無法反映大家在做的事情。字面上來看,開源就是,呃,讓大家看得到/可以用你的源碼,但其實當我們說開源社群的時候,指的並不只是這件事,而隱含一個更重要的性質:這個軟體是由大家共同完成,且任何人都可以加入。或許公共軟體會是個好詞?

medium.com

Seldomly Used SQL: bool Aggregate Functions

SQL 中有一類特殊的運算函式叫 aggregation,可以把很多的結果合併成一個,例如 sumavg 等等。這篇文章舉出兩個大家比較少用到的函式:bool_andbool_or,用來對所有資料做 andor,類似 Python 的 allany,並舉出一些好用的範例。

neovintage.org

The surprising cleverness of modern compilers

#include <stdint.h>
int count(uint64_t x) {
  int v = 0;
  while(x != 0) {
    x &= x - 1;
    v++;
  }
  return v;
}

你絕對猜不到 Clang 對這個函式的編譯結果!(內容農場口吻)

本文是一個 C 編譯器有多麽變態(良い意味で)的例子。事實上這個寫法在 LLVM 被視為一個特例來優化,所以如果你用錯算法,效率會莫名得差非常多。

這讓我想到 Guido 說過 Python 的 compiler 做得很笨,但反而很有用。你基本上可以把程式源碼直接對應到 Python compiler 吐出來的 op codes,也因此更容易從判斷一段源碼執行的效率,不會有神奇的非預期效果。

相對的,因為 C 實在太 bare-metal,編譯器為了補救標準庫沒有的東西,就必須對你的程式做出各種奇奇怪怪的事情。如果 C 函式庫包含一個 size_t bcount(uint64_t x, bool positive),不就沒這個問題了嗎?有特殊 CPU 指令的平台可以使用該有的實作,其他平台也可以使用最有效率的演算法,使用者負責使用就好;若不知道這個內建函式,而寫出不好的程式,那是使用者自己的問題。真希望活在這樣完美的世界啊。

lemire.me

@kkdai

The Netflix Tech Blog: Application data caching using SSDs

Netflix 最新的技術部落格文章:

Netflix 的技術部落格,一直都是相當值得挖寶的地方.如同 Google 一樣, Netflix 不斷的在建立自己的系統. 本篇文章提到有一個 ‪Golang‬ 寫的 application data cache proxy

Rend

透過 Rend 決定資料要存放 memcached 或是 SSD,同時他們也把 Rend 開源出來. Rend Github

ANT 提出一個很好的思考題: 為何 Netflix EVCache 用 Memcached 而不是 Redis

netflix.com

Dropbox's Magic Pocket with James Cowling - Software Engineering Daily

分享一個最近聽到的 podcast:

幾個月前 Dropbox 離開 Amazon S3 離開到自己建立的 Magic Pocket 硬體架構,被稱為是史詩般的故事. Dropbox storage lead James Cowling 來談談當初的轉換過程.不少有趣的架構討論與經驗談(包含測試). 會放在這裡是因為在 (32:55) 開始會討論到使用 Go 與 Rust 在的選擇上.

大家都知道 Dropbox 本身是使用 Python 起家的,但是他們喜歡 Go 的 Concurrency 跟 Strong type system ,架構語言選擇上:

  • 整體架構使用 Golang 控管整個流程.
  • 商業部份的邏輯仍舊使用原來的 Python
  • 硬體相關與記憶體相關操作使用 Rust ,因為 Rust 在記憶體部分比較有彈性也容易控制 Low-level API .

有考慮使用 Go 與 Rust 的人可以聽聽那一段.

softwareengineeringdaily.com

Random Cool Stuff

希特勒使用 Docker

這個影片真的 超!好!笑!如果你有在用 Docker 的話(沒有在 production 環境用過 Docker 的現在就給我滾!)。

@vinta 分享。

weibo.com


This RSS feed is published on http://weekly.codetengu.com/. You can also subscribe via email.

CodeTengu Weekly 碼天狗週刊 - Issue 46 不能信任那些 Terminal 或編輯器用白底的人 - Jun 6th 2016

$
0
0

Hello World

CodeTengu Weekly 碼天狗週刊

CodeTengu Weekly 會在 GMT+8 時區的每個禮拜一早上 10:00 出刊,每一期會從目前的 curator 名單中選出三位來負責當期的內容,每一位 curator 各自負責不同的領域,如果你在這一期沒有看到自已感興趣的東西,說不定下一期就會有了。你也可以瀏覽一下前幾期的內容,有價值的東西是不會過時的。

以下是目前的 curator 陣容:

大家也可以關注 CodeTengu 的 FacebookTwitterGitHub微博,有很多 Weekly 看不到的內容。有任何建議或疑問也可以來 Gitter 聊聊,歡迎亂入 👺

致力於解決開發者之間的資訊不對稱

@tzangms

Great Software Isn’t Built To Last, It’s Built To Die Gracefully

這篇文章中我覺得 「Don’t build for the future, build for future change」 這段很不錯:

  • Monitoring over scalability
  • Test behaviour, not implementation
  • Keep error logs squeaky clean
  • Write less code

我最近的想法是這樣的, 程式寫得越久, 反而會想得太多、考慮的太遠, 而現在世界變化這麼快, 想那麼遠做那麼多, 反而會限制自己向前的速度。

medium.com

The secret ingredient behind a successful tech lead

一直到看完文章後, 重看一遍才懂裡面一直在提的 VTL ( Vice Tech Lead ) 的意思, 成功的 TL 背後的秘密就是要有 VTL!

實際想像一下這個情況, 有點像是我們家 @vinta@saiday 在幫我的感覺一樣。

原本我也不是非常懂 Tech Lead 的定義啦, 而這篇文章開頭就提到了其他關於 TL 的文章, 看過一輪之後大概懂了! 這幾篇也蠻值得一讀的:

medallia.com

Jam.py - the fastest way to create a web database application

截圖看起來真的好棒, 有時候我們需要的不就是這些而已嗎!? 好啦, 手上有個專案似乎很適合跑一下這個 XD

jam-py.com

A Primer on Giving Critical Feedback

身為一個主管, 在當要給有問題的同事 ... 一些負面的回饋時該怎麼說才好? 這一篇給了一個很棒的入門跟架構, 以及清楚的範例, 真是難能可貴!

tombartel.de

@fukuball

Latent Semantic Indexing: How I Built PUBmatch.co - LSI 潛在語意分析的應用

Machine Learning、Data Mining:初級

在 CodeTengu Issue 43 中我曾經分享過 Finding Similar Music using Matrix Factorization - 利用矩陣分解來推薦相似音樂(藝人) ,現在分享的這篇文章也是使用同樣的技術,只是應用在不同的地方,之前是應用在計算藝人的相似性,這篇是應用在計算文章的相似性。

其實這個技術核心就是使用奇異質分解(Singular Value Decomposition),如果了解奇異值分解的物理意義,那就可以知道為何這樣可以分析出潛在語意,比如本來是文章與單字的對應關係,可以轉換成文章與概念的對應關係,本篇舉的例子算是蠻清楚的,經過 LSI 分析之後,將每篇文章都對應到一個二維的概念空間,每個概念會是由原本的文字線性組合而成(所以才稱為「概念」),如此每篇文章就可以用二維向量來表示,也就可以比較像似性了~

延伸閱讀:

  1. 奇異值分解 (SVD)
  2. Corpora and Vector Spaces

ryanglambert.com

林軒田教授機器學習基石 Machine Learning Foundations 第十六講學習筆記

Machine Learning:初級

在前面十五講的內容中,基本上所有機器學習基石的理論及方法已經教授完畢了,這一講主要是分享林教授在這門領域上的一些經驗及建議,並且回顧機器學習基石的所有內容。林教授將內容整理成 power of three 來做一個總結,我個人覺得蠻有用的,在自己實作機器學習演算法或做實驗時,會讓自己有個方向感。

完成了這門課程,接下來我會繼續向大家分享後續的機器學習技法課程。大致上有三個方向,一個是更多不同轉換方式的算法,不再只有多項式轉換;一個是更多的正規化算法;最後一個是沒有那麼多標籤的算法,比如說非監督式學習算法等等。

fukuball.com

FukuML - 簡單易用的機器學習套件

Machine Learning:中級

有人跟我說,看完了機器學習基石所有的分享及課程,結果還是不會機器學習,這... 如果沒有動手下去自己寫程式寫看看,那當然就還是不會。

不過大家別擔心,我在分享機器學習基石課程時,也跟著把每個介紹過的機器學習演算法都實作了一遍,原始碼都放在 GitHub 上了,所以大家可以去參考看看每個演算法的實作細節,看完原始碼會對課程中的數學式更容易理解。

如果大家對實作沒有興趣,只想知道怎麼使用機器學習演算法,那 FukuML 絕對會比起其他機器學習套件簡單易用,且方法及變數都會跟林軒田教授的課程類似,有看過課程的話,說不定連文件都不用看就會使用 FukuML 了。不過我還是有寫 Tutorial 啦,之後會不定期更新,讓大家可以容易上手比較重要!

github.com

Dynamic dependency injection - 動態依賴注入以 PHP 為例

PHP、Programming:中級

上次在 CodeTengu Issue 43 分享了 理解 Dependency Injection 實作原理,這篇又是一個應用 DI 的例子,大家可以對照參考一下,基本上程式架構蠻類似的,即使是小小的一個 Command 程式實作,也可以使用 DI 的技巧。

這邊所謂的「動態」依賴注入,其實也是應用 Resolver 這樣的方式來做到,基本上就類似 DI Container 在做的事,大家多看多比較~

github.io

PHP 如何使用 Closure?

PHP、Closure:初級

程式開發時我們有時會需要使用到 Closure,尤其前一陣子大家都在談 functional programming,幾乎都會應用到 Closure。回頭看看 PHP,其實 PHP 也很早就有 Closure 可以使用了。本篇文章鉅細靡遺地介紹了 PHP Closure 發展的脈絡及語法,更比較了 JavaScript Closure 與 PHP Closure 的異同,非常值得參考的一篇文章!

oomusou.io

@mingderwang

Greg Young - The art of destroying software

一個禮拜的重寫, 是我的上限。

vimeo.com

Inside OpenAI, Elon Musk’s Wild Plan to Set Artificial Intelligence Free

研究人工智慧, 其實就是搶人大戰; 竟然還有誰可以搶贏 Google 和 Facebook? 大概只有 Elon Musk 了. 我想吸引 Zaremba 加入 OpenAI 公司的不是高薪, 而是 Musk 與 Altman 成立這家公司的理念: "要讓 AI 更好, 就不能把最新的發現只留給自己 “。 他們把 OpenAI 公司比喻為 1970s 年代的 Xerox PARC, 當年 Apple 的 Steve Jobs 就是到 XeroX PARC 參觀, 才發明了後來的麥金塔電腦的 GUI。 這又是另一個電腦科技世代的開始; 你想要成為下一個 Steve Jobs 嗎, 可以先偷看一下他們的第一個發明 "reinforcement learning"。

wired.com

15 Things You Should Know About Ansible

當你學會了怎麼使用 Ansible, 就來玩一點技巧吧。這篇文章教你一些小撇步, 我尤其喜歡第 12 項; 一個簡單的方法, 就可以叫 Ansible 部署哪一些 Amazon EC2 主機, 現在才發現為何 AWS 要讓你替每一個 EC2 instance 定義 tags。

codeheaven.io


This RSS feed is published on http://weekly.codetengu.com/. You can also subscribe via email.

CodeTengu Weekly 碼天狗週刊 - Issue 47 沒有什麼問題是重開機不能解決的,如果有,那就重灌 - Jun 13th 2016

$
0
0

Hello World

CodeTengu Weekly 碼天狗週刊

CodeTengu Weekly 會在 GMT+8 時區的每個禮拜一早上 10:00 出刊,每一期會從目前的 curator 名單中選出三位來負責當期的內容,每一位 curator 各自負責不同的領域,如果你在這一期沒有看到自已感興趣的東西,說不定下一期就會有了。你也可以瀏覽一下前幾期的內容,有價值的東西是不會過時的。

以下是目前的 curator 陣容:

大家也可以關注 CodeTengu 的 FacebookTwitterGitHub微博,有很多 Weekly 看不到的內容。有任何建議或疑問也可以來 Gitter 聊聊,歡迎亂入 👺

致力於解決開發者之間的資訊不對稱

@vinta

[Python] 原来你是这样的修饰器

這一篇介紹 decorator 的文章寫得還不錯,提到了帶參數、不帶參數的 decorator 的寫法和 decorator 其實也可以用來裝飾 class。不只這樣,decorator 本身也可以是一個 class ── 所謂的 class-based decorator

除此之外,文章裡用 decorator 來做欄位的 validation 的想法好像挺不錯的啊。

延伸閱讀:

jianshu.com

Machete-mode Debugging

上禮拜心血來潮決定,每天上班都先看個一管技術 conference 的 talk 影片再開始工作,學學新技術也順便練一下英文,推薦所有工作量不飽的上班族可以試試這個方式。然後再跟大家分享一下,我特別喜歡看一些歐洲 conference 的影片,因為總是有很多口音各異的講者,聽他們講程式術語別有一番風味。尤其是一些英國人,特別浮誇,一上來就吼了一段莎士比亞。

nedbatchelder.com

Mastering Python Design Patterns

最近在讀 Refactoring,果然這種書是要寫過一陣子程式之後才適合讀的啊(但是作者話真的超多),小時候看的時候根本沒感覺。而且一邊讀會一邊發現自己還有哪些知識需要補強,像我讀到一半就發現對作者提到的幾個 design patterns 不太熟悉,所以又決定先跑去讀 Mastering Python Design Patterns。

Mastering Python Design Patterns 這本書不錯的地方是它在介紹每個 design pattern 的時候都會各用一個 real-life example 和一個 software example 來舉例,例如作者會告訴你某某知名的 Python library 就是用了某個 pattern。

amazon.com

ES6 Promise 筆記

這禮拜在寫 LambdaBaku 的時候踩了不少 Promise 的雷,就像所有 JavaScript 的那些容易使人犯錯的特性一樣,所以就花了一點時間研究一下 Promise 的用法,順便整理成筆記(這些筆記的重點向來都是 references 啊,希望大家不要錯過那些 ref: 底下的連結)。

延伸閱讀:

題外話,常常看到有初學者在問該學什麼程式語言比較好的時候,就會有人跳出來說什麼「語言只是工具,學什麼語言不重要」之類的屁話,誒,是在供殺小,語言怎麼可能不重要!先不要談社群風氣、學習資源和之後好不好找工作之類的實際問題,就語言本身,難道你用靜態語言寫程式的「套路」會跟用動態語言的時候一樣嗎?一定不會嘛,因為不同語言的風格、思想、原則,甚至是語言本身的設計理念都不同啊。所以,要嘛你真的厲害到看透了程式設計的本質,要嘛你就是把不同的語言都當成是同一種錘子。

vinta.ws

We need tool support for keyset pagination — No Offset

我們都知道 OFFSETLIMIT 可以在 SQL 裡做分頁,但是 OFFSET 有幾個缺點,一是要 skip 過的數量很大時就會效率不好(但是也不能怪他,幾乎所有我們平常用得很開心的東西,只要大到一個數量級之後效能都會不好啊,總之至少要加個 index 啦);二是在撈下一頁的時候,如果這一批數據有增減,你用 OFFSET 拿到的分頁後的數據就可能不是你預期的。

所以有另外一種不需要用到 OFFSET 的分頁方法叫做 Keyset pagination(又稱 seek method),簡單說就是當你要撈下一頁的時候,用目前這一頁的資料在 WHERE 過濾出那些你還沒看過的資料(當然還要加上你原本的 WHERE 條件)。

延伸閱讀:

use-the-index-luke.com

@wancw

Eight Ways Your Android App Can Leak Memory

8 種 Android App 常見的 memory leak 情境,以及該注意的地方:

  1. Static Activities
  2. Static Views
  3. Inner Classes
  4. Anonymous Classes
  5. Handlers
  6. Threads
  7. Timer Tasks
  8. Sensor Manager

也有中文版

nimbledroid.com

让 Code Review 成为一种习惯

作者在騰訊廣點通參與 code review 導入的過程與心得分享。包含 code review 可以帶來哪些好處以及一個良好的 code review 文化應該是什麼樣子。

如果你還在懷疑 code review 的好處或是在團隊中推行遇到阻礙,都值得一看。

延伸閱讀:

flickering.cn

[Tool] Find potential bugs in your services with Diffy

繼續分享有趣的專案或工具, 這是是 Diffy —— Twitter 自家的 HTTP/API server 除錯工具。

它會從 3 台 server(2 台執行穩定的舊版、1 台執行新版)的輸出中找出比較值得關注的差異,以判斷新版的 code 是否運作正常。

專案放在 https://github.com/twitter/diffy ,也有 Docker 跟 docker-compose 設定可供參考。

github.com

[求職] Questions to ask your interviewer

找工作的時候該問面試官 (1) 什麼問題才能切中要害,得到你想知道的資訊?作者建議問題應該具體、不要太籠統,才不會讓對方靠話術呼攏過去。也列出了一些範例供作參考,以下依個人偏好摘錄:

  1. (Red Flag) How often are you pulled off your primary task?
  2. (Technical) How does your development/deployment process work?
  3. (Culture) What does it take to succeed at this company beyond “hard work”?
  4. (Culture) If I’m not meeting expectations, how will I know?

我自己喜歡問開發流程、部署流程、溝通工具,大概就可以知道這個團隊運作方式跟我合不合得來。

延伸閱讀:

  • 如果你是要代表團隊面試求職者的話,作者也寫了 How I Interview

備註:

  1. 大家不覺得中文用「面試『官』」實在太貶低求職者了嗎?

rkoutnik.com

本週 IG: 이은혜 (@eunhyeato)

對不起,本週我又靠 IG 妹子騙了一篇。

instagram.com

Two Legs Bad

此處有 bug:程序員統治的黑暗世界

在攫取收益的同時,這些互聯網企業常常拒絕對為他們工作的勞動者承擔責任。在國內,我們看到一些分享經濟「平台」以「解放手藝人」、「實現財務、時間、心靈三大自由」等口號吸引勞動者,卻並不提供國家明文規定的勞動保障。這些企業有一個常見的邏輯:他們提供的只是「平台」,在平台上提供服務的勞動者並非企業的僱員。然而隨著平台壟斷程度的提高,越來越多的勞動者實際上已經在為某個或一兩個平台全職工作。例如一個針對美國網租車司機的調查顯示,超過 90%的 司機服務於 Uber 和 Lyft 兩家平台。當勞動者實際上全職為一家公司服務,再用「平台」的說辭拒絕承認勞動僱傭關係,就純粹是企業轉移風險的手段:將收入不穩定、不可逆轉的資本投入、潛在的犯罪、突發事件的風險都轉嫁到了個人身上。

延伸閱讀:

@vinta 分享。

groundbreaking.tw

Random Cool Stuff

Making the world a better place

這是 HBO 拍的美劇 Silicon Valley 第一季裡的一個橋段,這是一部少見地以軟體工程師為主角的電視劇,目前拍到第三季,如果你到現在都還沒看過這部美劇,那可是不行的啊,因為這部戲,真的!超!好!笑!

聽說現在矽谷的公司已經開始禁止員工說 We're making the world a better place 了。

不過仔細一想以程式設計師為主角的作品其實也沒那麼少見,畢竟隨便一部 Cyberpunk 作品的主角其實都是程序員啊,我還看過一部男主角是軟體工程師而女主角是 DBA 的太空歌劇小說呢。

@vinta 分享。

youtube.com

如何用 IBM Watson 來躲掉視訊會議

作者利用 IBM 的 Watson API 將語音轉成文字,等到會議中出現自己的名字時再透過 HipChat 提醒自己。

這個專案已將開源放在 GitHub 上了: joshnewlan/say_what

延伸閱讀:

@WanCW 分享。

cnn.com


This RSS feed is published on http://weekly.codetengu.com/. You can also subscribe via email.

CodeTengu Weekly 碼天狗週刊 - Issue 48 做高級工程師好多年了,沒想到今天忽然就被升職成傳說級工程師 - Jun 20th 2016

$
0
0

Hello World

CodeTengu Weekly 碼天狗週刊

CodeTengu Weekly 會在 GMT+8 時區的每個禮拜一早上 10:00 出刊,每一期會從目前的 curator 名單中選出三位來負責當期的內容,每一位 curator 各自負責不同的領域,如果你在這一期沒有看到自已感興趣的東西,說不定下一期就會有了。你也可以瀏覽一下前幾期的內容,有價值的東西是不會過時的。

以下是目前的 curator 陣容:

大家也可以關注 CodeTengu 的 FacebookTwitterGitHub微博,有很多 Weekly 看不到的內容。有任何建議或疑問也可以來 Gitter 聊聊,歡迎亂入 👺

致力於解決開發者之間的資訊不對稱

@saiday

Top developers can have a life outside coding

軟體產業跟其他產業有一點相當不同,這個產業很在乎你在業後的表現,就像這篇文章說的,你沒有 open source project、pet project 就會遭受許多非議,好像自己多不入流一樣。

雖然我不完全同意這篇文章的觀點,但我同意這個產業確實存在這個偏見。

而貼這一則主要是因為我想分享這一篇文被貼在 Hacker News 其他人上有意思的評論:

Would you tell someone they can be a "top sports player", if they have a life outside of playing that sport? ...

I'm from China, where hard-working with a lot of overtime work is advocated in almost every internet-related company ...

I am a recruiter and always ask this question - "Is programming just a job for you to get the bills paid, or do you have a broader interest?" ... (大家好生氣一直嗆他)

belenalbeza.com

What’s New in Swift 3?

Swift 3 傳說是最後一次包含大量 breaking change 的版本了,這一次也確實是改得夠痛快,不過我想大多數的語法改變都可以透過 Xcode 8 帶的 Migration Assistant 來幫忙吧,問題不大。

這次改版大量處理了 Swift 使用既有的 ObjC 或 C 寫的 frameworks 在名稱上對 Swift 不友善的地方,經過新設計的 NS_SWIFT_NAME 加持,現在 Swift project 程式語法的一致性上變得更好。
一個語言的 naming convention 是很重要的,會讓團隊跟社群不用花那麼多力氣在 coding style 上面,像 ObjC 就以其 強烈且特別的風格 為人稱道。

而這篇文章在 Methods that Return or Modify 這一段提到,method 用名詞跟動詞來明示這個 method 會不會有回傳值跟操作對象,蠻有意思的。

raywenderlich.com

Queues are not bound to any specific thread

Cocoa 的 main thread 跟 main queue 是同一件事情嗎?

有人在 ReactiveCocoa 開了一個 issue 說他操作 MapKit 時非得要自己 dispatch 到 main queue 才不會 crash,而 ReactiveCocoa 的 UIScheduler 只會確保你在 main thread 而已,並不合用。

雖然說這應該是 MapKit 的 bug,因為像 UIKit 的文件上從來都只有說必須要在 main thread 上執行而已,沒道理 MapKit 甚至要在 main queue 上執行。

不過大家就開始就開始討論 main queue 跟 main thread 的差異了,直接截取結論: 在 Cocoa application 上,main queue 一定是跑 main thread,但 main thread 不一定跑在 main queue 上。

延伸:如果你想確定妳跑在 main queue 上,可以參考這個做法 GCD's Main Queue vs. Main Thread

krzyzanowskim.com

Clean Android Code

這是一個系列文,主要在寫出 testable, re-usable, maintainable 的 Android app,我認為是近期我看到質量最高的 Android 技術傳教文。

值得注意的是這個系列全程有寫 Tests、開發中混用了 Kotlin、大量使用 Databinding、上半年社群中火熱到不行的 buzz word: RxJava 當然也是其中的技術選擇。

對於以上這些技術實作感興趣的人,這是一個不錯的系列教程,像我就是來看 Kotlin 跟 Databinding 的!

medium.com

@kako0507

26 Impressive web projects built with CSS only

筆者整理了 26 個在 Codepen 上透過 CSS 達成的強大實例,幾乎每個範例都沒有使用到 JavaScript 和 Image !

mybridge.co

Dan Abramov - The Redux Journey

Redux 因為作者 Dan Abramov 在去年的 React Europe 上的介紹,開始火紅了一年,在這個影片, Dan 會回顧 Redux 的各個好用的功能,生態系,以及在開發時學到的一些經驗。

youtube.com

Web Component Challenges

本篇文章並不會大略簡介 Web Components,有興趣可以先透過連結理解一下。雖然不是每個瀏覽器都支援 Web Components ,還是可以透過 webcomponentsjs 這個 polyfill 來實作。

因為目前 ES6 語法已經支援 modules, classes 和 template strings ,這裡就不探討 templateHTML import ,著重在 shadow DOM 需要注意的幾個點:

  • 如果透過 polyfill 實作在沒有原生支援 shadow DOM 的瀏覽器上,會造成 style 共用的情況,必須要將 shadow DOM 的 style 加上對應的 prefix 避免畫出錯誤的畫面。
  • 反之,如果是原生支援的瀏覽器上實作, style 無法共用,造成撰寫上可能會有重複的 code ,為了避免這種情況,可以透過內文的 injecting style sheets 、 styling considerations at design time 、 CSS Variables 來解決。

revillweb.com

JavaScript Testing: Unit vs Functional vs Integration Tests

自動化測試一直是 Continuous Delivery 中非常重要的一環,本篇文章整理了不同類型的測試,文中使用 Tape 來作為範例工具:

  • Unit Tests

    • 確保各個 components 可以正常的獨立運作,可以選擇在開發階段使用 lint 和 unit test ,當檔案改變時自動執行,立即回報當下更改是否有造成錯誤,不過使用此方式必須要確保測試可以快速完成,所以盡量避免使用像是 network 與 file I/O 等非同步操作。
  • Integration Tests

    • 確保不同的 components 可以在互相合作下正確運作。
  • Functional Tests

    • 從使用者角度來確保程式能得到預期的結果。

sitepoint.com

@uranusjr

Kotlin Programming Language

最近因為工作關係需要寫 mobile app。iOS 技術有稍微在追所以還好,花了一週就先做了個 prototype,但 Android 就很爆炸,以前用的 toolchain 現在好像都沒人在用了,API 似乎也改了一大堆東西,就決定重學。稍微找了一些資料,就發現這個有趣的程式語言。

Kotlin 是由 JetBrains 主導開發,主要的編譯 target 是 JVM byte code。這個語言幾乎可以說是專門為 Android 開發設計,用來補足 Java 5 不足之處。用了一下發現確實滿順手,設計上一些有趣的選擇也讓人很容易把 Java 源碼翻譯過去,我即使看 Java 的 tutorial 也幾乎無痛使用。因為 Android Studio 的基礎——IntelliJ IDEA——也是由 JetBrains 開發,所以套件支援也不錯。建議可以學一下,應該會對 Android 開發頗有幫助。

另外他們最近也在推 Anko。這是個基於 Kotlin 的 Android UI DSL,目標是用來取代主流的 XML layout。因為是基於 Kotlin,所以這個 layout 方法基本上可以直接寫在程式裡,一方面容易擴充,一方面速度也會比 runtime 解析 XML 更快,我覺得應該滿有前途。因為還不成熟,我應該是不會在現在的 project 用。建議持續關注。另外 project 名一直讓我想到這個

kotlinlang.org

Intentional Communication — Keynote at PyCon Taiwan 2016 by Steve Dower

今年的 PyCon Taiwan 也結束啦。這次聽到最好的 keynote 是壓軸的 Steve Dower。這個演講和 Python 本身其實沒太大關聯,但提到了 programmer 常被忽略的重要技能:溝通。這個演講提出了一些方法,讓別人能共容易接受你的想法。這個可以應用在很多方面,最主要的是站上講台演講,但不少技巧在一對一溝通時也很有用。

Steve 在微軟工作,負責了很多 Python 對 Windows 支援的東西(包括那個超優秀的新版 installer!)。我在工作上一直有用到 Python on Windows,但實在很少能找到機會和人討論,所以一直很期待 Steve 的演講。結果他講了個完全無關的內容⋯⋯但聽完之後什麼無法抱怨啊,值回票價。幸好後來也有堵到他聊了不少 Python on Windows 的話題,沒有遺憾了。他也提到微軟與他的 team 近期會注意的項目,有些頗有趣,但他說不見得會成功所以不能爆料哈哈。

另外這次的錄影是直接從直播存下來的,所以目前都是很闊氣的六小時一刀未剪。徵求影片後製!主要的工作就是把每個 session 分成不同檔案,然後在前面加個字卡(已有設計)。有興趣者歡迎聯絡議程組長亮亮

youtu.be

pynsist: Build Windows installers for Python applications

承上篇,上次被 Steve 推坑的 project。如果要 deploy 一個 Python 程式(尤其在 Windows),目前主流的方法是用 cxFreeze 或 PyInstaller 之類的工具,把源碼與 interpreter 打包成一個 standalone executable(.exe)。對於小程式而言這通常沒有大問題,但因為各種原因,我工作上的專案不適合用這個方法,而是用 NSIS 製作一個安裝程式,直接把源碼和 Python interpreter 拷貝進 target system,然後建立一個 shortcut 來執行。Python 自從 3.5 開始為 Windows 提供了 embedded distribution,可以大幅縮小這類安裝法需要的資源,我認為和單一執行檔的作法各有勝場。

如果你也有類似的需求,但不想像我一樣特地跑去學 NSIS(或其他類似的東西),或許可以考慮這個工具。這個專案只需要你提供想安裝的源碼,並用一個 INI 檔(符合 Python 內建的 config parser 格式)指定 dependency list 和一些參數,就會自動幫你根據現在的 interpreter 建立安裝檔。目前的功能其實有點陽春,所以我也沒在工作上用,但微軟最近也對這個專案頗有興趣,之後可能會加上一些特別的支援(應該可以講吧)。

github.com

TVアニメ『NEW GAME!』オフィシャルサイト

「今天一天也要加油喔!」

又到了推坑新番的季節啦~~~這季有幾部都滿期待的,但還是決定選了有(一點點)相關的作品。得能正太郎的 NEW GAME! 是藉由新人遊戲繪師涼風青葉的角度,描述員工們在製作電腦遊戲同時發生的故事。你問相關在哪?因為裡面很多事會讓你心有戚戚焉啊!例如專案各種 delay 最後加班之類的(眼神死)。裡面也有個角色是程式 team,看他和主角的 team 互動感覺就像和 web designer 合作一樣,有開心也有各種翻白眼。動画工房做這種小品應該滿安全的,推薦。

同時參考巴哈姆特的介紹

newgame-anime.com

Random Cool Stuff

なんで愛が生まれるのか

"生" 跟 "死" bitwise AND 的結果是 "愛"!!!

線上驗證:
Go playground

在 terminal 自己驗證:
perl -E 'say "生" & "死"'

@saiday 提供。

qiita.com


This RSS feed is published on http://weekly.codetengu.com/. You can also subscribe via email.

CodeTengu Weekly 碼天狗週刊 - Issue 49 There are only two hard things in Computer Science: cache invalidation and naming things. - Jun 27th 2016

$
0
0

Hello World

CodeTengu Weekly 碼天狗週刊

CodeTengu Weekly 會在 GMT+8 時區的每個禮拜一早上 10:00 出刊,每一期會從目前的 curator 名單中選出三位來負責當期的內容,每一位 curator 各自負責不同的領域,如果你在這一期沒有看到自已感興趣的東西,說不定下一期就會有了。你也可以瀏覽一下前幾期的內容,有價值的東西是不會過時的。

以下是目前的 curator 陣容:

大家也可以關注 CodeTengu 的 FacebookTwitterGitHub微博,有很多 Weekly 看不到的內容。有任何建議或疑問也可以來 Gitter 聊聊,歡迎亂入 👺

致力於解決開發者之間的資訊不對稱

@fukuball

Marijuana through the lens of the New York Times - 大麻觀感的歷史變化

Machine Learning、Data Science:中級

近來美國大眾對於大麻合法化的呼聲越來越高,其實大眾對於大麻的觀感是有在變化的,本篇文章分析了 New York Times 上 1926 年到 2016 年關於大麻的文章,將文章以年代分群後可以觀查看出每個年代對於大麻的觀感變化,整個做法是一個很標準的文本分析方法。

具體做法就是將每個年代的文章使用 TFIDF 算出每個關鍵字的重要性之後表示成一個向量再進行比較,可以預見這樣的向量一定是一個非常稀疏、維度又很高的向量,所以需要使用主成分分析(PCA) 方法來將向量進行降維。PCA 這個降維方法在統計、機器學習及資料科學是非常常見的降維方法,能夠將高維度的向量整合至低維度且各維度有正交性質的向量,所以才稱為主成分分析。

至於最後的分群,作者很簡單地對向量計算 cosin similarity 來分群,當 PCA 取 9 個主成分的時候,可以看出五個明顯的分群,如此就可以對這些分群進行更進一步的文本分析,這個部分當然就要人去觀察解釋啦!整個分析的過程作者有放到 GitHub 喔,大家參考一下~

github.io

Teaching Robots to Feel: Emoji & Deep Learning - 讓機器了解 Emoji

Machine Learning:初級

類神經網路被 Facebook 用在照片中的臉部辨識、被 Google 用在辨識照片中的任何東西、被 Apple 用在辨識人們說了什麼,那麼我們可以用同樣的技術來讓機器了解 Emoji 的意涵嗎?Dango 就是一個結合 Machine Learning 與 Emoji 的有趣應用。

Emoji 在現今的訊息或社交軟體中幾乎無所不在,很多人也習慣使用 Emoji 來表達與溝通,當機器能夠透過 Machine Learning(這邊是使用類神經網路方法)了解 Emoji,便可以用以了解句子與 Emoji 的語意連結,推薦合適的 Emoji 給使用者。推薦 Emoji 乍聽之下好像沒有什麼神奇的地方,像是 Line 也是可以推薦貼圖,但仔細觀察 Line 的推薦其實是使用關鍵字做推薦的(應該是),Emoji 似乎也可以用同樣的方法做推薦。但只用關鍵字做推薦的效果並不佳,Emoji 會根據句子的上下文有不同的含義,且 Combo Emoji 也常常被使用來表達更多意思(如果所示),所以需要讓機器了解語意層次上句子和 Emoji 的關係。

使用 Dango 將句子及 Emoji 經過類神經網路的學習之後可以 mapping 到一個高維的語意空間,如此就可以將句子和 Emoji 進行向量相似推薦,也就可以做到 Combo Emoji 的推薦了!大家如果對這樣的應用有興趣也可以去下載來玩玩看~ 像這樣使用 Machine Learning 技術幫助溝通表達的工具也越來越多了,像是 FoxType 這個應用還可以教你怎麼寫信比較好,真的很酷!Machine Learning 還有許多有趣的應用等大家去發掘!

延伸閱讀:

  1. The Unreasonable Effectiveness of Recurrent Neural Networks
  2. T-SNE

getdango.com

林軒田教授機器學習技法 Machine Learning Techniques 第 1 講學習筆記

Machine Learning:中級

在 CodeTengu 分享 Machine Learning 相關文章不知不覺也將林軒田教授的機器學習基石課程完成了,若大家都有跟上腳步應該也有辦法寫出一些基本的機器學習演算法,若還是寫不出來,我開源的機器學習套件 FukuML 大家可以參考一下,多少會有幫助。

基礎的課程之後才是真正的重頭戲,我會繼續帶著分享林軒田教授的機器學習技法課程,一些目前在機器學習領域常用的算法像是支持向量機、決策樹、類神經網路等等都會在課程中介紹到。首先登場的就是支持向量機(Support Vector Machine),第一講中我們將先介紹最簡單的 Hard Margin Linear Support Vector Machine。

fukuball.com

PHP 實務上如何活用 Closure?

PHP、Programming:中級

本篇文章是 CodeTengu Issue 46 PHP 如何使用 Closure? 的延伸,了解了 Closure 語法後,當然要知道實際上我們怎麼使用它。

以觀察 Laravel 上如何使用 Closure 並實際舉例說明,大致可歸納出使用 Closure 的三個時機:

  1. 由使用者執行一段邏輯
  2. 由使用者決定一個布林
  3. 由使用者改變一個物件

蠻深入潛出的一篇文章,不過我其實會認為只要函式中有需要讓使用者客製處理的程式碼,應該就可以寫成 Closure。

oomusou.io

@hiroshiyui

Erlang/OTP 19 帶來新的 state machine behaviour module: gen_statem

本週雙 E 語言皆有大事,Erlang/OTP 19.0Elixir 1.3 釋出。我發現的亮點之一,是 Erlang/OTP 19 帶來新的 state machine behaviour module: gen_statem

在 Erlang 既有的 gen_fsm 之外,gen_statem 以另外一種設計哲學來提供實作 state machine 所需的要素,我不覺得有孰優孰劣的差別,就是設計哲學不同、看各人覺得哪個順眼而已。順道一提,Elixir 已有人為 gen_statem 包了 gen_state_machine

同場加映:Rage Against The Finite-State Machines | Learn You Some Erlang for Great Good!

erlang.org

Erlang/Elixir on Docker and Hot Code Swap

之前跟同事討論,恰巧也被問到與這則 Stack Overflow 問答一樣的問題:「既然現在我們有了 Docker,軟體版本升級就是包個新版 image 換掉舊版 container,那麼 Erlang 強調的 Hot Code Swap 賣點,還能算得上是賣點嗎?」

我覺得 Amiramix 這位的回答很好,給了很務實的建議:如果你的產品性質容不得中斷再開、追求好幾個 9 的 HA、zero downtime,那麼用 Erlang 的 Release Handling 機制做更版是再適合不過的;反之,採用 Docker 方式抽換 container,簡單、快速、近乎無腦,也沒什麼不好。

stackoverflow.com

每个架构师都应该研究下康威定律

這篇寫的真好,非身經百戰的人寫不出這樣的心得文章,推薦給各位同是(或自認是)架構師、有心想做好 DevOps 的讀者。最初分享這篇給我的是強者同事 Ash Wu,對於當時有點見樹不見林的我,猶如當頭棒喝。

我覺得做架構、DevOps 這件事,真的要時時思考、念茲在茲「我這樣『做』,可以對『誰』產生什麼樣的『價值』?」而不光是在工具、架構圖上兜圈子。

infoq.com

"How should I design my Android application? What kind of MVC pattern should I use? What should I use for an event bus?"

在 Google 工作的這位 Dianne Hackborn 曾經發文解釋 Android 為何就是無法給人像別家那樣流暢的使用體驗(當然隨著版次更迭,如今的 Android 已經非吳下阿蒙了)。

這篇是她近期的又一力作,解釋 Android Framework 之所以解耦成 Activity, BroadcastReceiver, Service, ContentProvider 四大天王,除此之外不硬帶入特別的 design patterns 之設計緣由,非常值得還未能理解「Android 為何如此設計」的開發者一讀,頗為發聾振聵。

google.com

@yhsiang

Integrate Stylelint Into Your Workflow For Better CSS

如果你有用 ESLint 或 JSLint 來檢查你的 JS code 的話,你的 CSS 是否也有使用 CSSLint 之類的工具來幫助你呢?這篇文章介紹了一個新的 CSS 檢查工具,Stylelint。若你剛好也有在使用 Webpack ,可以花點時間按照文章的設定流程,替你的開發環境中加入 stylelint 吧!

web-design-weekly.com

Understanding the Elm type system

這篇很完整的介紹了 Elm 的型別系統。相對於 JS 的弱動態型別,Elm 是強靜態的型別系統,帶來的好處就是沒有 Runtime Exception。因為所有可能發生的錯誤都能 Compile time 的時候幫你抓出來。

Elm 最有趣的是能夠使用 Type alias 幫你建立易讀性高的型別。這使得 Elm 能夠寫出簡潔優美的程式碼,如果有機會,各位一定要嘗試看看。

adamwaselnuk.com

Promises: All The Wrong Ways

Promise 已經是前端工程師必備的知識,本篇指出許多錯誤的 Promise 用法。

作者從基本的錯誤到 Side-Effects 都有範例,建議看完後也可以檢查一下自己的程式碼是不是也犯了這些錯誤。

getify.com

Quick Tip: How z-index and Auto Margins Work in Flexbox

這篇介紹了 flexbox 進階的兩個小技巧。

  1. z-index 也可以作用在元素是 flex 的情況下。
  2. 使用 margin-right: auto 也是一個將相鄰元素置右的方式。而 flex-grow: 1 也可以達到一樣的效果。

sitepoint.com

How we do visual regression testing

不知道各位有在做 CSS Regression Testing 嗎?本文介紹了他們怎麼選擇 Regression Testing 的 tool,並開源了他們的工具 Spectre。Sepectre 是基於 Ruby on Rails 的一套工具,能幫助你管理 regression test suites。

文中提到了他們如何整合 Selenium 跟 Jenkins 幫助前端跟 QA 建置整個 Visual Regression Testing 的過程,如果剛好你也想導入 Regression Testing 在公司的開發流程當中,可以嘗試一下 Spectre。

medium.com

Random Cool Stuff

The Making of a Cheat Sheet: EMOJI Edition(Machine Learning)

這是一個將 Machine Learning 與 Emoji 結合的 Cheat Sheet,作者挑選的 Emoji 是有那麼一點道理,Machine Learning 分成這幾個部份也算蠻清楚的,關鍵字再配合上 scikit-learn 提供的相關 methods,用在查詢相關資料會很有幫助!

@fukuball 分享。

emilyinamillion.me


This RSS feed is published on http://weekly.codetengu.com/. You can also subscribe via email.

CodeTengu Weekly 碼天狗週刊 - Issue 50 Use the --force, Luke - Jul 4th 2016

$
0
0

Hello World

CodeTengu Weekly 碼天狗週刊

CodeTengu Weekly 會在 GMT+8 時區的每個禮拜一早上 10:00 出刊,每一期會從目前的 curator 名單中選出三位來負責當期的內容,每一位 curator 各自負責不同的領域,如果你在這一期沒有看到自已感興趣的東西,說不定下一期就會有了。你也可以瀏覽一下前幾期的內容,有價值的東西是不會過時的。

以下是目前的 curator 陣容:

大家也可以關注 CodeTengu 的 FacebookTwitterGitHub微博,有很多 Weekly 看不到的內容。有任何建議或疑問也可以來 Gitter 聊聊,歡迎亂入 👺

致力於解決開發者之間的資訊不對稱

@tzangms

Monitorbook  - From side project to profitable company, a journey into sales

Monitorbook 是一個滿有趣的服務, 像是他們首頁上的影片範例, 幫你追蹤 Amazon 上面 iPad 的價格, 可以設定你想要的價格然後提醒你。

這篇主要是在講 Monitorbook 從一個 side project 到變成一間獲利的公司其中的心路歷程, 特別是在行銷這件事。 一開始文章就提到, 作者本來認為, 如果一個產品如果真正解決了某個問題, 那麼它就不需要行銷人員, 因為用戶會被你的產品吸引... 但是事情不是那麼簡單的。

Monitorbook 從一開始上了 Product Hunt, Hacker News, 可是後來真正付費的卻不到幾隻小貓, 所以作者開始研究、實驗各種行銷的方式跟技巧, 包含了各種心路歷程, 而我覺得這篇吸引我的是他們所使用的銷售工具, 特別是 Amplemarket

你只要跟他們說:「I’m looking to contact VPs of Marketing at Bay Area SaaS companies that have raised between 2M and 10M.」他們就幫你處理好了... Amazing XD

關於行銷這件事呢, 我也是在現在這家公司待久了才越來越覺得重要, 產品要怎麼推呢? 真的懂得, 有管道的, 力道可是差很多的, 當然有時候技術人員跟行銷人員看的東西也是差滿多的就是了 :p

medium.com

A Manager’s FAQ

很棒的一篇文章, 把 Manager 會想問的問題都提出來並回答了, 這篇值得看上好幾遍, 我就不多說了, 而裡面我覺得最棒的一句:

Promotion increases responsibility but never privilege. Responsibility means sprinting toward fires, doing more shit work, and preventing bigger problems.

readthink.com

A Simple Content-Based Recommendation Engine in Python

用簡單的方式解釋 Collaborative Filtering 跟 Content Based recommendation, 可以分別用在哪些情境, 也直接丟上 GitHub, 甚至可以直接 deploy 到 Heroku 了呢~

untrod.com

@mingderwang

Trying out rkt

Rkt 原名叫 Rocket, 是 CoreOS 公司用來對抗 Docker 的東西。Rkt 也是一種 Container, 但它設計的出發點就以安全為考量。比如說, 它利用簡單的 gpg 數位簽章加上 https 伺服器, 就可以提供安全的下載機制, 就不會因為執行網路上被竄改的 container images 而造成駭客入侵。

另一個優點是, rkt 採用一個 open source container format 叫 "appc"。未來如果你想要將 docker images 移植到別的 (新的)container 系統, 只要都是使用 "appc" 格式就能相容。

"appc" 是 App Container 的縮寫, 而 ACI 就是 appc image 的格式, 就像另一種 docker image 一樣, 可以直接被 container 執行, 更好的是它格式是公開的。當然為了大家方便使用, 它也提供了 docker2aci 的轉換工具, 能將現有的 docker image 改成 aci 格式。更簡單的方式, 就是在放棄安全保證的選項下, rkt 也能直接執行原先 docker hub 上的所有 docker images。例如: rkt --insecure-options=image run docker://redis 就能啟動一個 redis server。

github.com

利用 CertBot 幫你設定 HTTPS

CertBot, 其實就是以前官方 Let's Encrypt 的最新版的 client, 它能幫你去 CA 拿到網站的證書, 並且很快的幫你在 Window 以外 Linux 作業系統用 http 的 Web server 改成用更安全的 https。

它的原理很簡單, 是利用 ACME protocol, 收集資訊並去 Let's Encrypt 這個 CA 免費拿到證書, 並且幫你設定好。在 Apache, 還會自動幫你將 http 導向 https, 實在太貼心了。

如果你已經有了 80 port 的 http web server 正在運行, 還可以選擇用 --webroot 選項在完全不停頓的情況下裝好 443 port 的 https, 太神奇了。平常需要一年花約 50 美元買的證書, 這裡完全免費。目的就是要推廣使用 https, 因為他們認為 http 不再是安全的, 所以才大力推動 HTTPS Everywhere

eff.org

How Does the Blockchain Work?

Blockchain 這個專有名詞就機器學習, 需要在學校上一個學期的課才能完全了解。但這篇文章用了一個最簡單的例子, 介紹我們為何在 Internet 上還需要另一個叫做 blockchain 的東西, 還有它是如何運作的?

這裡是以 Bitcoin 為例做說明, 因為 Bitcoin 是一個到目前為止運作最久且最大的 blockchain 實作。這裡最值得介紹的是 Fig 9, 它告訴你雖然平均每 10 分鐘產生一個新的 block, 被登記在該 block 裡的交易雖然是紀錄在該 block 裡了, 但在理論上還是有可能被竄改。但如過過了一個小時以後, 也就是 6 個 blocks chain 在一起, 以地球上的電腦運算能力, 已經不太可能一次重新算出 6 個 blocks; 因此你可以很肯定的, 它不會再變了。所以你在 Bitcoin 的世界裡, 當你電子錢包剛收到貨款通知, 要等 1 個小時以後才能出貨喔!

medium.com

@kkdai

[Podcast][Software Engineering Daily]Death and Distributed Systems with Pieter Hintjens

又要來推薦 Software Engineering Daily 的 Podcast 這次請到的來賓就是之前以 A Protocol for Dying (中文:臨終協定 ) 獲得大家注意的程式設計師與佈道者並且是 ZeroMQ 公司的 CEO - Pieter Hintjens 來談談兩個主題:分散式系統與死亡.

關於分散式系統已經是 Pieter Hintjens 十幾年來不斷努力的部分,裡面有不少見解是相當有趣的.講到了死亡,只能說癌症末期的他看得真的很看.除了臨終協定裡面有提到的部分之外,他希望自己能夠像個完美被結束的 Proccess 般,沒有任何沒有釋放的記憶體(我想他指的是遺憾,或是壞名聲).

最後,他也建議每個程式設計師應該要試著去開源(Open Source)透過開源你的程式碼.你才會開源你的眼界,並且擁抱這個世界.身為癌症末期的他,雖然身體有些虛弱聲音有點微弱,不過卻無法淹蓋她勇敢並且偉大的靈魂.很推薦大家聽聽.

softwareengineeringdaily.com

關於除錯,大神給工程師最重要的建議 - "The Best Programming Advice I Ever Got" with Rob Pike

Rob Pike(早期參與 unix lab 並且是 Golang 主要開發者之一),在前幾年接受網路媒體的時候分享了這段小故事.Rob Pike 早期曾經與 Ken Thompson(也就是 C 語言共同發明者跟參與開發 unix 系統與 Golang 的大神)一同 Pair Programming.

每次遇到問題需要除錯的時候,Rob Pike 就開始準備各種工具.不論是準備 Log 或是準備查看各種 stack 資訊.而 Ken Thompson 卻什麼也沒有做,只是在不斷的思考.每次到最後,Rob Pike 就會發現他辛苦追下去的結果往往比不上 Ken Thompson 透過他心裡思考整體運作架構.

Thompson 告誡著 Rob Pike:“思考相當的重要,尤其你在思考問題的時候.他可以避免你只是找到區域解(也就是僅僅找到發生問題的地方,並沒有找到問題的根本)" .這句話是說由於一般人很急著會開始找問題.這樣一來,當你找到問題發生的點就以為是問題的根本.如果不是仔細思考整體的運作流程,那麼很難找到真正的問題所在.

這句話很重要,不論是在除錯或是在開發新的產品.跟大家一起分享.

informit.com

使用 Golang 與 Heroku 幫助你快速架設 FB Bot 的樣板: kkdai/FBBotTemplate: A simple Golang Facebook Bot Template and tutorial

繼之前分享給大家的 Line Bot 樣板之後,最近把 Facebook 的 Messenger Bot 搞懂之後也弄了一個可以快速一件部署的 Messenger Bot 樣板系統.

透過這個樣板,你可以一行程式碼都不寫就可以在五分鐘之內架設好一個最基本的 Messenger Bot .並且附上最簡單的圖文教學,希望可以讓大家更容易地學習如何透過 Heroku 與 Golang 來架設一個 Facebook Messenger Bot .

有任何問題,歡迎大家來 gitter 詢問

github.com

Go Tooling in Action

Francesc Campoy 介紹了一些 Golang 的小工具,包括了:

  • 很基本的樣式控制: goimport
  • IDE: VS Code for vs-for-Go
  • Go-wrk : http benchmark tool
  • Go-torch: 透過 profile 結果來顯示隨機的火炬圖.

很建議大家看看,順便瞭解一下這些工具該如何使用.

medium.com

[影片] etcd over gossip: strongly-consistent semantics in a weakly-consistent world -

這是一篇 CoreOS(他們最受歡迎的產品就是 etcd)在他們的研討會 FEST 2016 裡面的一個主題: "etcd over gossip: strongly-consistent semantics in a weakly-consistent world"

也就是架設在 Gossip Protocol 上面的 etcd.並且底層是透過 Docker 的 weave net

這一篇裡面有將 etcd 裡面的 raft-example 做一些基本的講解,如果你對 Raft-Consensus 有一點瞭解,卻不知道該如何寫一個具有 Raft 能力的服務.可以參考一下這篇文章.

youtube.com

Random Cool Stuff

Lossless compression with Brotli with Rust for a bit of Pied Piper ( Dropbox: 我們寫出了類似 Pied Piper 的壓縮演算法)

最近最熱門的 Silicon Valley 第三季完美的結束了,也恭喜他們如願的 XXXX (消音,我當然不會透露劇情。)

去年就跟大家宣布,其實他們就像是現實社會中的 Pied Piper 的 Dropbox.在去年他們寫出了類似的演算法,透過了類似的思路,他們反覆地將資料拿出後重新壓縮,得到的效果相當不錯,除了比起 gzip 更少了 4.4 % 之外,並且得到了第一季裡面得分 (Weissman score) 6.5%.

這篇文章其實有點硬,並且透過 Huffman Tree 的範例來解釋要如何讓壓縮能夠更上一層樓,不過整個文章相當的有趣啊....

kkdai 分享。

dropbox.com


This RSS feed is published on http://weekly.codetengu.com/. You can also subscribe via email.


CodeTengu Weekly 碼天狗週刊 - Issue 51 小明以為自己是中產階級 - Jul 11th 2016

$
0
0

Hello World

CodeTengu Weekly 碼天狗週刊

CodeTengu Weekly 會在 GMT+8 時區的每個禮拜一早上 10:00 出刊,每一期會從目前的 curator 名單中選出三位來負責當期的內容,每一位 curator 各自負責不同的領域,如果你在這一期沒有看到自已感興趣的東西,說不定下一期就會有了。你也可以瀏覽一下前幾期的內容,有價值的東西是不會過時的。

以下是目前的 curator 陣容:

大家也可以關注 CodeTengu 的 FacebookTwitterGitHub微博,有很多 Weekly 看不到的內容。有任何建議或疑問也可以來 Gitter 聊聊,歡迎亂入 👺

致力於解決開發者之間的資訊不對稱

@vinta

Is Python call-by-value or call-by-reference? Neither.

官方的說法叫做 call-by-assignment,也有人稱之為 call-by-object。雖然看起來有點抽象,但是有人總結得很好:

If you pass a mutable object into a method, the method gets a reference to that same object and you can mutate it to your heart's delight, but if you rebind the reference in the method, the outer scope will know nothing about it, and after you're done, the outer reference will still point at the original object.

If you pass an immutable object to a method, you still can't rebind the outer reference, and you can't even mutate the object.

再補充一下,例如 def foo(bar): 這個 function 的參數傳遞其實是在 foo 的 local namespace 裡幫傳進去的物件綁定了一個叫做 bar 的名字(所謂的 assignment);如果你在 foo 裡 re-assign 了一個新的物件給 bar,實際上是把 bar 這個名字綁定到那個新的物件。

延伸閱讀:

jeffknupp.com

Idiomatic Python: EAFP versus LBYL

跟某些語言不同,Python 對於錯誤處理的方式更偏好 EAFP(Easier to Ask Forgiveness than Permission)而不是 LBYL(Look Before You Leap)。簡單說,EAFP 就是 try-except 而 LBYL 就是 if

這篇文章的重點其實是在講「可讀性」,說得更精確一點是 Explicit is better than implicit。作者的論點是,對在讀程式碼的人來說,try-except 其實能夠比較直覺地意識到那段 code 要做什麼事,因為你會先看到那段 try 接著看到可能會發生哪些例外,而不是先看到一串複雜的 if 判斷式。不過 exception 的另一個重點其實是它應該要是 exceptional 的,所以也不是要你把所有的 if 都改用 try-except 吶。

延伸閱讀:

microsoft.com

hasattr() – A Dangerous Misnomer in Python 2

作者強烈地建議大家不要在 Python 2 裡使用 hasattr(),至少是不要對用 @property 裝飾的 method 使用,因為一旦你的 @property method 會拋出任何 exception,你的 hasattr() 的結果永遠都會是 False(而那些 exception 會默默地被 catch 掉),嘖,這個 bug 也太靠北。

不過所幸在 Python 3 就沒有這個問題了。

hynek.me

You don't need Lodash.js / Underscore.js

You Might Not Need jQueryYou Don't Need JavaScript 之後,又出現了 You don't need Lodash.js / Underscore.js 了。

這篇文章就是在告訴你哪些 lodash 和 underscore 的功能其實 native 的 ES5 或 ES6 就支援,不過最棒的是他竟然還為了這個做了一個 ESLint plugin,喔,所有 JavaScript 的事物裡,最喜歡的就是 ESLint 了。

github.com

Finding Time to Become a Better Developer

這是一篇在談時間管理的文章,而且讀起來還挺療癒的。尤其是第 5 點,讓我想到當兵的時候讀過的「親愛的臥底經濟學家」書裡提到的一句話:「意志力跟其他東西一樣,都是稀有資源,無法超額使用」,大家感受一下。

對一個 developer 來說,決定在什麼時候學什麼(以及不學什麼)其實是個很重要的軟技能啊。像我最近就有意識地不太去追那些 buzzword 新技術,而是多花了一點時間在那些相對更本質、更基礎一點的知識,例如資料結構、Refactoring、SQL 以及更重要的,英語。比如說我這陣子終於找到一個適合自己的學英文的套路,就是「打電動」。媽的,打電動學英文的成就感實在太高,才兩個禮拜我就已經玩完兩款 RPG 了(質量效應 2 和 3),效果顯著啊。

延伸閱讀:

freecodecamp.com

@saiday

Good coding instincts will eventually kick you in the teeth

上一期 @kkdai 分享了一篇關於 debug 的文章: "The Best Programming Advice I Ever Got" with Rob Pike 是在說開始用工具 debug 之前,先在腦中思考一次程式運行整體的狀況。

不過還是會有毫無頭緒的時候,這種情形在接手別人的 project 時特別常見,作者分享了一些他在這種情況下 debugging 的紀律跟技巧。

其中對於用測試來 debugging 的部分,我認為的確是很好的紀律,比在 production code 上硬改跟強行 log 來得合理,而且也可以透過 mock object 的使用一次針對一個方向去猜。

文章裡面沒有提到,但我認為更重要的是,透過這種方式 debug 完之後,你自然也有了針對這個 bug 的 test case,避免這個 bug 還會再次出現。

註:文章裡面有提到 RTFM (read the fucking manual),我看到 RTFM 就忍不住想說一個笑話:

菜鳥工程師:我要怎麼做這個 ...
資深工程師:RTFM!
菜鳥工程師:npm install RTFM

freecodecamp.com

Machine Learning for iOS in Swift

文章的引言直接就說 WWDC 16 除了 Swift 3 之外,其它的更新無論是給使用者的功能或是提供給開發者的工具幾乎都跟 AI 有關。

這幾年 Machine Learning 的趨勢化除了運算效能的提升跟成本的下降之外,最重要的還是 神經網路模型 的應用。

這篇文章也對於 AI, Machine Learning, Neural Network 的背景跟基礎知識做了簡單介紹,特別適合沒有相關經驗的人。

Apple 這次在 AccelerateMetal framework 提供了 Convolutional Neural Networks 在 CPU 跟 GPU 上的實作,這個模型適合處理圖片跟聲音,剛好手機裝置可以錄音跟拍照,正好可以拿來做深度學習。

當然文章裡也用 Swift 簡單地實作了一個神經網路。

其實我是現在才猛然注意到 Machine Learning 跟 iOS 開發有關聯,後來一想其實很合理啊,果然長期做 client side app,想法都窄了呢。

延伸:Neural Networks in iOS 10 and macOS (Big Nerd Ranch)

invasivecode.com

Little Bites of Cocoa - Tips and techniques for iOS and Mac development

每個平日早上 9:42 都會發出一篇 iOS 或 Mac 相關的文章,篇幅不大,比較大的 topic 可能會拆開分好幾天發。非常適合每天上班先花五分鐘看一下這個再上 Facebook。

我覺得這系列就還不錯:
#223: Standard Setup
#224: Standard Architecture

littlebitesofcocoa.com

No More findViewById — Google Developers

利用 Data Binding 來取代 findViewById(),看起來比較清爽、不需要再強制轉型 view type 更保險,而且效能也提高了一些些。

Data Binding 這個套件庫野心很大,像是在 xml 裡面 import packages 或用它的 expression language 這些功能我還是感覺蠻猶豫的,但至少就這個取代 findViewById() 的特性我是非常同意的,也從這個誘因開始,先把 Data Binding 的環境處理好。

medium.com

@wancw

白石ゆうか (@shiraishi_yuuka) • Instagram photos and videos

本期我的部分多半是自己的書籤或是看到一半的內容分享,心得較少。 只好先附上 IG 推薦來充數了。

instagram.com

Tensorflow tutorial Python (Eng Sub) 神经网络 教学 学习教程 - YouTube

用 Tensorflow 建構類神經網路做 deep-learning 的教學系列影片。 (好吧,我自己還沒開始看……)

英語版: https://www.youtube.com/playlist?list=PLXO45tsB95cJHXaDKpbwr5fC_CCYylw1f

youtube.com

用 Scheme 實作一個Tensorflow (1)

在用 Tensorflow 來做 deep-learning 之前,先自己刻一個簡單版來了解它的構造吧!(大誤)

P.S. 文中提到 SICP,最近同事也在讀 The Scheme Programming Language。讓我又想把 Scheme 撿回來複習一下了。

github.io

“Function” objects are not a thing

這又是一篇 OO 基本教義派文章。

TL;DR 不要寫出當 function 用的 class/object。

到底 helper/util class 是否算不良的 OO 設計? 是個歷久不衰的話題,隨便搜尋就可以找到一堆討論文章:

medium.com

Big-O Complexities / Poster of common algorithms used in Computer Science

常用演算法與資料結構的時間複雜度海報,可以印出來貼在牆上參考用。

github.com

Random Cool Stuff

When someone says "You don't need a library for that!" then shows you how to implement it manually.

@saiday 提供

twitter.com


This RSS feed is published on http://weekly.codetengu.com/. You can also subscribe via email.

CodeTengu Weekly 碼天狗週刊 - Issue 52 一週年!當一個軟體工程師宣稱他已經完成了 90% 的工作,意思是他還需要相同的時間來完成剩下的 10% 的工作 - Jul 18th 2016

$
0
0

Hello World

CodeTengu Weekly 碼天狗週刊

CodeTengu Weekly 會在 GMT+8 時區的每個禮拜一早上 10:00 出刊,每一期會從目前的 curator 名單中選出三位來負責當期的內容,每一位 curator 各自負責不同的領域,如果你在這一期沒有看到自已感興趣的東西,說不定下一期就會有了。你也可以瀏覽一下前幾期的內容,有價值的東西是不會過時的。

以下是目前的 curator 陣容:

大家也可以關注 CodeTengu 的 FacebookTwitterGitHub微博,有很多 Weekly 看不到的內容。有任何建議或疑問也可以來 Gitter 聊聊,歡迎亂入 👺

致力於解決開發者之間的資訊不對稱

@saiday

Advanced programming languages

作者是猶他大學 CS 的教授,因為有很多學生會問他 接下來 應該要學哪個語言,所以有了這篇文章。

推薦了四個他覺得進階的程式語言 (Haskell, Scala, ML, Scheme),不只是提高視野、陶冶心靈,也在各自特定的條件下是很強大的工具。

文章內介紹了這四個語言適合的領域、作者喜歡的語言特性、學習的資源。

我想有不少 CodeTengu 的讀者都是有經驗的開發者,已經掌握一門以上主流的程式語言,這篇文章可以做為下一階段學習程式語言的參考,新學程式語言最棒的體驗就是可以用不同的思維來理解同一件事情,在學第二個以上的程式語言時也許不一定要以實用為主要考量,那些啟迪人心但比較不主流的語言也許也是適合你的選擇。

在這部分我的經驗也不夠多,大家一起努力!

might.net

@fukuball

Chinese Search Sharing - 中文搜尋經驗分享

Machine Learning、Natural Language Processing:中級

本篇簡報是 Liang Bo WangPinkoi 實習的經驗分享,負責的工作是 Pinkoi 站上的搜尋功能,從工作內容的成果來看,感覺比起許多公司的正職工程師對於搜尋功能的研究還深入許多了,Pinkoi 居然連實習生的質量都這麼好!

說到為網站加上搜尋功能,大部份人都是想到使用 Elastic Search,本篇簡報也是從 Elastic Search 開始介紹,然後從 ES 的原理以及不足繼續深入討論,進而引入 Jieba 中文斷詞,以及最後為了做到 Word to Vector 語意搜尋而使用基於 LSI 算法的 gensim(之前我分享的文章有不斷介紹到 gensim 的核心 LSI 算法,有興趣可以去看前幾期的 CodeTengu)。整個發展的脈絡很清楚地在這篇簡報深入淺出的分享給大家,如果大家造著去實作看看,也可以在自己的網站做到語意搜尋功能喔!

liang2.tw

@wancw

3 Reasons AWS Lambda Is Not Ready for Prime Time

最近用 AWS Lambda 搭配 API Gateway 的經驗不是很好,只想說一句「OK 好 」(*)。 主要缺點是可控制和可掌握的部分太少,處理 background task 還可以,拿來做 API 就……

在我的心得文出來之前,先看一下其他人的心得吧。雖然這是幾個月前的文章了,但我覺得目前狀況沒有改善多少。作者認為以下三點是 Lambda 還不成熟的原因:

  • Lambda is Only a Building Block
  • Lambda Is Not Well Documented
  • Lambda Is Terrible at Errors

同場加映:使用 AWS ECS 的慘痛經驗—— Our Nightmare on Amazon ECS


*: 請參考附圖(來源: https://fb.com/1609581499354062

datawire.io

@chiahsien

Thread Sanitizer and Static Analysis

WWDC 2016 都過去這麼多天了,各位工程師們應該把影片都看完了吧!還沒?沒關係,別的 session 可以不看,這一個一定要看,看完之後就會知道 Xcode 提供了多麼出色的工具幫我們抓蟲。

多執行緒永遠是工程師們的惡夢,現在 Xcode 提供了出色的 Thread Sanitizer 幫忙抓出多執行緒讀寫資料時可能會產生的錯誤。另外也強化了原有的 Static Analyzer,可以幫你找出顯示介面上忘記提供多國語言的字串、檢查 Objective-C 程式碼的 nullability 一致性、以及古老的 MRR 程式碼裡頭的 memory leak(當然如果可以的話,換成 ARC 才是正解)。

apple.com

@hiroshiyui

架构腐化之谜

另一篇收在我瀏覽器書籤裡的窖藏好文,特別選在碼天狗 52 期來貼。大家有沒有覺得我誠意滿點?

產品大了,什麼鳥事都有,如何在爛到失控、改不動之前,重新把產品架構的「秩序」找回,是本文通篇要旨所在。過程中如何拿捏權宜利害,如何不挖東牆補西牆、治絲益棼、即使是 workaround 也要 round 的漂亮,在在考驗架構師的能耐。

個人經驗是,做架構改進這件事,「時間」與「人心」是頭號兩大敵人。實務場景當中,新的功能還沒做完,要切時間回頭去重構、補測試,往往是 PM 為難、RD 覺得你吃飽了找麻煩、老闆說先求有再求好這件事以後再來。滿足產品用戶需求,與試圖讓產品可長可久,後者往往被推遲,久而久之,技術債累積為還不起的鉅額。

但是如同文中所講的,架構的改進是因時、因地、因人制宜、漸次到位的,並不是一次就來個大推翻,何妨將改進架構所花的時間視為一種「投資」,投入在維持基礎建設的健全?

thoughtworkers.org

@kkdai

我完成了我的 Side Project -- Project52 ,現在該你了

恭喜碼天狗到了第五十二期(話說我女兒上個月也滿了五十二週... 離題 :p ). 這一期應景的想說要來分享跟數字 52 有關的專案,於是就把自己在上個月完成的專案( Project 52 )拿來的分享一下心得.(謎之音: 可是瑞凡, @wancw 好像有分享過.. )

當初看到 Jefferson Lam 的這篇 slide Reflections from 52 weeks, 52 projects ,剛好也覺得想要考驗自己是否有堅持的毅力, 於是就開始了這個專案 -- 在五十二個禮拜中,完成五十二個 Golang 專案.

一開始主要都是寫自己有興趣的抓圖軟體,也透過仿效海大的 我愛卡提諾 或是 lazywei 的 我愛卡提諾 Go 版 來學習一些元件的使用法. 為了想要寫得更好,想要更多志同道合的人,於是也參加了 Golang TW 社群.透過不斷地詢問與討論,也有機會在第十三個禮拜分享了自己現階段的心得 .最終在 2016 的六月中完成了這個專案,也有幸能得到在 COSCUP 2016 分享的機會.而我的 GitHub 不僅僅有破百人 followed ,更在 Golang 台灣地區的開源貢獻度擠上了前十名

當然事情沒有那麼輕鬆.除了面臨著每個禮拜沒有點子的危機之外,更有時間管理上的挑戰.每天晚上哄完小孩後挑燈夜戰,中午用餐時間人家在看新聞的時候,我在埋頭想點子,不然就是在想該怎麼寫程式.上班時間同事可能會聊天,會討論團購的東西.我卻獨自一人打開著 GitHub 不斷地詳讀人家的程式碼,企圖想出任何一個可能別人沒有想過的小專案.

最後分享一個小故事: 老婆常常問我半夜不睡覺是不是在趕公司專案,但是我是笑著回答說:“我在寫我有興趣的專案”.

完成這個專案,不一定會帶給你莫大的知名度或是有許多研討會的分享機會.至少,你也有了 52 個屬於你自己的專案.

github.com

@yhsiang

"Real" Mixins with JavaScript Classes

Dan 最近在 Reactjs 官方出了一篇文章 Mixins Considered Harmful,所以推薦大家重新了解一下 Javascript 的 Mixins 是什麼。

延伸閱讀:

justinfagnani.com


This RSS feed is published on http://weekly.codetengu.com/. You can also subscribe via email.

CodeTengu Weekly 碼天狗週刊 - Issue 53 要 mock 的物件太多了,只好 mock 罵號 - Aug 1st 2016

$
0
0

Hello World

CodeTengu Weekly 碼天狗週刊

CodeTengu Weekly 會在 GMT+8 時區的每個禮拜一早上 10:00 出刊,每一期會從目前的 curator 名單中選出三位來負責當期的內容,每個 curator 各自負責不同的領域。如果你在這一期沒有看到自已感興趣的東西,說不定下一期就會有了。你也可以瀏覽一下前幾期的內容

以下是目前的 curator 陣容:

大家也可以關注我們的 FacebookTwitterGitHub微博,有很多 Weekly 看不到的內容。有任何建議或疑問也可以來 Gitter 聊聊,歡迎亂入 👺

致力於解決開發者之間的資訊不對稱

@kako0507

JavaScript variables lifecycle: why let is not hoisted

Hoisting 是 JavaScript 容易被混淆的一個機制,就像字面上的意思,是將 Declarations 提升到 Scope 的頂端,如果對這個機制不熟悉,就很可能寫出錯誤的邏輯,文內會探討 var 與 function 宣告時的 lifecycle ,分成以下三個階段:

  • Declaration phase:在此 scope register 一個新的變數。
  • Initialization phase:配置記憶體空間並且初始化變數值為 undefined。
  • Assignment phase:賦予變數新的值。

在 var 的 lifecycle,Declaration phase 與 Initialization phase 會合併在 scope 最頂端執行,而 function 則是三個 phase 同時執行, ES6 的 let 可以將 Declaration phase 與 Initialization phase 這兩個步驟 decouple ,從而打破 Hoisting 的機制。

rainsoft.io

Create Apps with No Configuration

@Dan Abramov 提出一套無須任何設定,幾道簡單指令即可開始練習撰寫 React 專案,想開始入門的朋友可以試著玩玩看。

github.io

React.js in Patterns

這個 repo 介紹許多使用 React 時的 Patterns 以及 Anti-Patterns , 能幫助使用更好的方式開發 React 專案,會以以下幾個觀點切入:

  • Communication
  • Composition
  • High-order Component
  • Event Handlers
  • Dependency injection
  • Data Flow

github.com

@uranusjr

Don’t add your 2 cents

當你沒什麼有用的意見時,閉嘴。說起來簡單,但卻是極度容易犯的錯誤。尤其當位置越爬越高,有時候總是會覺得好像沒有意見,好像就暴露出自己其實也不太懂;隨口講幾個無關痛癢的屁點,展示出自己其實也是略懂,才不會丟臉啊。

但這樣其實對大家都不好 —— 無謂的批評傷了創造者,而真正懂的人一聽就知道這毫無營養,對講話人的評價也相應下降。被滿足的只有自尊,以及早該遠離的同樣草包同伴。世界上要學的事情太多了,每個人都會有不懂的事情;只有看透這件事情,才不會落入這個陷阱

sivers.org

HyperTerm — JS/HTML/CSS Terminal

HyperTerm 是個基於 Electron 的 terminal,目標是為三大平台提供美觀且可擴充的 command line 介面。我從用 Mac 起就一直使用內建 Terminal,確實沒有很好用,一直也有人叫我跳槽其他工具(例如 iTerm2),可是我就一直覺得介面哪裡怪怪的,不太好看,一直不想換。

但這個好像不錯啊,有點願意換了!現在功能還有點差,也不支援中文輸入法,所以用了一天之後送了幾個 bug reports 就先放旁邊,不過開發團隊還滿 responsive 的,也有不少 contributors,過一陣子會再看看。還有就是最近也有用 Windows,不論 Command Prompt 或 Powershell 都很難用,希望它也可以解決這個需求。

大家也幫忙試用一下,回報點東西啊!

hyperterm.org

Can't code, won't code - cracking the secret of gender imbalance in STEM

性別平權近年在很多領域都有大進展,除了一個例外:科技界。這篇文章描述了非男性在科技業界持續遭受,且幾乎沒有改善的受歧視處境,從高等教育領域人數、招募刻板印象、玻璃天花板、一直到 Apple 最近推出的 HealthKit 包山包海,就是沒有考慮月經、更年期、以及懷孕。

講這種話題在台灣一向都很引戰。中文界對女性的歧視表現不太一樣,所以常聽到國情不同,我們沒這麼做,所以不是歧視。也有很多人看到女性工程師因為較低標準被錄取,而認為女性根本比較吃香,男工程師才是受壓迫。「國立私立不如兩粒」。

是啦台灣的男工程師確實被壓迫得很慘,但這不代表其他人就比你好啊。壓迫你的是資方,別搞錯敵人了。我知道很多人不會認同,在這裡寫一小段也說服不了人。但我還是想把這篇放上來,希望有人願意讀。

telegraph.co.uk

9 Non-Threatening Leadership Strategies for Women

有女上司的人,大概很多都會抱怨上司太強勢吧。女人實在是很麻煩,尤其是老女人。或者你就是那個女上司?這篇文章提出了九個領導技巧,讓女性主管更得人心,不會太具攻擊性。多學著點!

身為女生能力太強就是錯了,沒什麼好說。就算你很厲害,也記得不要讓別人知道啊。

thecooperreview.com

How Not to Offend Men’s Delicate Feelings When Talking About Being Harassed: A 5-Step Programme

反過來,如果在職場受到騷擾,要怎麼處理,才不會傷到男人們的自尊呢?

  1. 千萬要安靜。不要讓你的受害者角色太明顯。
  2. 隱藏你能得到的任何好處。
  3. 避免表達你的感受。你有什麼感受,大家已經幫你決定好了。
  4. 語氣很重要。最好聽起來不太確定,不然會被誤解成你自以為。
  5. 記得強調你只針對那一個人。這是個案。

乖喔,男生就是調皮,偶爾犯點錯無傷大雅。原諒人家,不要那麼情緒化,不要無理取鬧,好嗎?

theladiesfinger.com

@yhsiang

Structuring CSS in large projects

CSS 很好寫,但是通常也很難維護。前端領域中,已經有許多人提出各種方式,企圖要解決 CSS 可維護性的問題。像是 OOCSSSMACSSBEM。此篇作者根據在 peergrade.io 的經驗提出三個簡單的原則。

  1. class 命名需要有前綴 (prefix)
  2. 不要使用巢狀選擇器
  3. 採用 BEM 命名規則

這邊比較特別的是採用 BEM 命名規則後,可允許 1 層的巢狀選擇器。這樣可以避免重複指定區塊裡面的修改器。

medium.com

Coding mobile-first emails

如何寫出能適應各種 email client 的模板,一直以來都是設計師或前端工程師的挑戰。本篇作者一步一步教你如何設計出,適合手機上的 email 樣式。

先從手機上的畫面開始設計,簡單的 div 和 css,確保每個 email client 都有支援。而 Margin,注意是大寫的 M,即使是舊版本的 Outlook 也支援這個寫法。

接著使用 media query 製作桌面版本的樣式,這邊用到了 display: table 能讓我們製作出多個 column 的效果。但是這邊有幾個 client 不支援,像是 outlook 和 gmail。

但是對於新的 outlook.com 可以使用 [owa] 的 attribute selector,來讓樣式成功套用在 outlook.com 上。 配合 IE 常使用的 conditional comments 和 table element,遇到 outlook 的時候,就可以 fallback 到 html 的 table 樣式。

最後透過 calcmax-widthmin-width 讓 gmail 相關的 client 也可以完美的呈現之前的設計。 width: calc((Desktop Width - Mobile Width) * 100% - (Desktop Width - Mobile Width) * Breakpoint - Desktop Width); 作者提供了一些公式告訴你 layout 或 column 該怎麼計算。使得這個方式能夠修正 gmail 上面的顯示。

用以上的方式,就可以製作出適用各種 client 的 email 樣式,工作上有在製作電子報的朋友,務必花點時間閱讀!

medium.com

What ORMs have taught me: just learn SQL

ORM 提供了我們一個方便的介面,而不需要學會 SQL,即可從資料庫中取得需要的資料。實際上你還是需要學會 SQL,若是 Object 有許多 attribute,ORM 的遍歷 attribute 就會帶來效能問題。除非你的 data model 簡單到不需要 join,不然 ORM 會讓你花更多時間在理解其產生的 SQL 語法。

ORM 也會造成兩份 schema 維護的問題,作者建議還是放在 DB,然後讀到 Application 裡來用會比較好。針對 identity 和 transaction 作者也有提出見解。最後作者說使用 stored procedures 不見得是壞事,但如果你在使用 RDBMS,最好還是學會 SQL 比較好。

wozniak.ca

Let’s build a Productivity Timer App with Elm

作者因為接觸了蕃茄時間工作法,以及 Elm。決定要使用 Elm 來開發一套有關計時器的生產力工具。

一開始作者先畫了草稿,並且擬定簡單的 Data model 跟 App message。藉由這樣的 planning,作者感受到了和 OOP programming 不一樣的方式。接著作者介紹他使用的環境跟如何開始一個簡單的專案。

透過 update 函式的撰寫,並一一完成需要用到的函式。確保了 message 跟 model 的功能後。最後再將 view 的部分勾勒出來。就這樣作者很順利地完成了 Elm App 的開發。

有興趣的人可以閱讀一下作者的原始碼,感受一下 Elm 是不是真的很容易閱讀呢?

medium.com

How to correctly use context.Context in Go 1.7

本篇在教你如何使用 Go 1.7 的新套件 Context。建議先讀完官方介紹文件

目前有兩種方式整合進你的 API:

  1. 當做函數的第一個參數
  2. request 結構下可選擇的 config

幾種情況正好適合使用 Context

  1. 不想將東西存進 struct
  2. 長時間的阻塞操作

有些東西不適合放進 Context.Value (request-scoped values)

  1. database connection
  2. logger

文章的後半部都在講解如何正確使用 Context.Value,有興趣的朋友可以仔細閱讀。

medium.com


This RSS feed is published on http://weekly.codetengu.com/. You can also subscribe via email.

CodeTengu Weekly 碼天狗週刊 - Issue 54 歡迎大家來到碼天狗的烘焙雞,(狀態列跑馬燈)最佳觀看解析度為 800x600,建議使用 IE 5.0 以上瀏覽器 - Aug 8th 2016

$
0
0

Hello World

CodeTengu Weekly 碼天狗週刊

CodeTengu Weekly 會在 GMT+8 時區的每個禮拜一早上 10:00 出刊,每一期會從目前的 curator 名單中選出三位來負責當期的內容,每個 curator 各自負責不同的領域。如果你在這一期沒有看到自已感興趣的東西,說不定下一期就會有了。你也可以瀏覽一下前幾期的內容

以下是目前的 curator 陣容:

大家也可以關注我們的 FacebookTwitterGitHub微博,有很多 Weekly 看不到的內容。有任何建議或疑問也可以來 Gitter 聊聊,歡迎亂入 👺

致力於解決開發者之間的資訊不對稱

@tzangms

The Foundation of Technical Leadership

這篇應該是這半年來看過最切合心聲的技術主管文了, 大推!

alistapart.com

@mingderwang

minikube 線上教學

每次都介紹別人的文章, 趁爸爸節寫一篇自己的教學網頁來讓大家利用 minikube 簡單的設定, 安裝一個 kubernetes 的學習環境。kubernetes 可以讓你在本機或雲端, 甚至多台主機同時管理和安裝部署 dockers, 需要更進一步了解 kubectl 指令的人可以在安裝好環境之後, 利用這 cheat sheet

hackpad.com

Hour Of Code 冰雪奇緣介紹

我也要介紹冰雪奇緣, 看完連結裡的影片說明後, 就可以帶你的小孩 (如果沒有小孩 , 帶你女朋友, 或另一半) 來玩 hour of code。不管是憤怒鳥或冰雪奇緣, 過關後就能得到寫程式的證書喔! 爸爸節快樂...

junyiacademy.org

@chiahsien

用 Objective-C 實作 Redux 架構

最近因為工作上的需要,所以找了一些資料來研究該如何管理 app 的程式狀態,讓每個頁面在存取資料時可以維持資料的一致性,結果讓我找到了 Redux 這個架構。

最初是 Facebook 提出了 Flux 架構,而 Redux 是其改良版,因為它簡單好懂好實作所以提出之後就大受歡迎。這個架構提出的時候是針對網站設計的,後來有人把這個概念搬到 Swift 實作,但我一直沒找到有人分享 Objective-C 的實作心得,所以我就自己動手做了一遍並寫了這麼一篇心得,用起來的感覺其實滿舒服的。

另外工商服務一下,敝公司正在找 iOS 工程師與其它優秀人才,歡迎來跟我當同事!

延伸閱讀:

logdown.com

图说设计模式 — Graphic Design Patterns

Design patterns 這種東西,在小時候懵懵懂懂剛接觸程式設計的時候覺得它很重要,但看完之後卻無法體會它的重要性,也不知道該怎麼運用。長大之後碰的程式多了,才越發瞭解它的重要性,也越覺得該學的東西還有很多。

這個網站列出了 16 個常用的 design patterns,並且針對每個 pattern 的定義、背後動機、優缺點、使用情境、代碼分析等等,都有詳細說明。獻給所有覺得自己不懂 design patterns 的人,你並不孤單。

readthedocs.io

Enums as configuration: the anti-pattern

相信很多開發者一定都有用過 enum 來列出所有選項,然後再用 switch-case 來判斷每個選項並做出後續動作,通常在做 UI 相關的設定最常見到這種做法。但是作者認為這不是一個好作法,理由是:

  • 你在 switch-case 漏了幾個選項,compiler 也不會有 error,但有可能你的程式就這麼錯了。
  • 如果你修改或刪除了幾個選項,其他用到的程式碼也要跟著改,不然可能會導致錯誤結果或編譯失敗。
  • 使用者只能用固定的這幾個選項,無法自行新增,這樣不夠彈性。

所以作者認為不應該使用 enum 作為設定選項,而是要設計一個 configuration object,所有可以讓使用者調整的設定都包在裡面,開發者只要接受這個 object 並做出相對應的調整即可。像是 URLSessionURLSessionConfiguration 就是很好的例子。

jessesquires.com

Writing High-Performance Swift Code

Swift 官方 repository 所提供的最佳化奇技淫巧,它的目標讀者是編譯器跟標準函式庫的開發者,所以有些方法不適合用在一般的程式開發,但多瞭解一下也是好的。

github.com

Design patterns for safe timer usage

Timer 絕對是 iOS 開發過程中最常用的到元件之一,它看起來非常的簡單,用法也是很直覺,但它的坑卻是意外的多。這篇文章列出了使用 Timer 的一些正確姿勢,帶你躲過一個又一個的地雷。雖然文章是用 Swift 3 寫成,不過它的概念是共通的。

延伸閱讀:

cocoawithlove.com

LFLiveKit

一個 iOS 的 RTMP streaming SDK,支援了不少功能,現在直播那麼紅,或許有人開發上正好需要。

github.com

@kkdai

Write in Go (Fall 2014) - YouTube

孩子的教育不能等... 父親節的今天.快讓你的小孩搭配著冰雪奇緣的主題曲來學 Go. XDDD

youtube.com

BuntDB is a fast, embeddable, in-memory key/value database for Go with custom indexing and geospatial support

參考著 BoltDB 並且使用一樣的 Raft Consensus 做一致性管理. BuntDB 打著以下特點 (跟 BoltDB 有些許的不同處):

想瞭解更多的與 BoltDB 的差異可以看看原作者在 HN 上面的討論 ..

github.com

I Love Go; I Hate Go

Delphix 的 CTO - Adam Leventhal 分享他對 ‪Golang‬ 的又愛又恨的情緒.

喜愛的部分包含著: Gofmt , Go 很直覺, Toolchain 很強大. 討厭的部分包含著: Go 沒有 Assertion , Go compiler omits frame pointers ...

雖然有愛也有恨,但是 Adam Leventhal 也說到你不能因為一些小小的缺點就跟你的愛人分手. Golang 依舊有許多令人讚賞的地方,快來仔細看看這篇介紹吧..

dtrace.org

dgryski/talks: consistent hashing in go

Damian Gryski 身為 Books.com 的資深工程師.dgryski 除了是重度的 Golang 愛好者外,還喜歡讀很多資訊科學的論文與研究各種進階的資料結構.

這份 Talk 從原來的問題 Load Balancer 或是 K/V 存放的問題來出發.介紹了一開始的解決方式 Hashing Mod N ,再來探討 Consistent Hashing 如何解決 Hashing Mod N 與的節點新增與刪除帶來變動的問題,最後帶到 Jump Hashing 與 Maglev Hashing . 想要好好瞭解 Ring Hashing 資料結構能如何幫你解決 Load Balancer 問題的話,一定得好好的閱讀這篇.

github.com

uber/ringpop-go: Scalable, fault-tolerant application-layer sharding for Go applications

Uber RingPop 是他們在去年開源的一個應用架構. 本來是使用 Node.JS 來做開發的,這次推薦的是 Golang 版本的.

RingPop 具有相當多的功能,簡單條列如下:

透過這些方式可以建置出具有可擴展性,分散式的應用程式架構.

想瞭解更多資訊,可以查看以下鏈結:

github.com


This RSS feed is published on http://weekly.codetengu.com/. You can also subscribe via email.

CodeTengu Weekly 碼天狗週刊 - Issue 55 Life is what happens to you while you're busy making other plans. - Aug 15th 2016

$
0
0

Hello World

CodeTengu Weekly 碼天狗週刊

CodeTengu Weekly 會在 GMT+8 時區的每個禮拜一早上 10:00 出刊,每一期會從目前的 curator 名單中選出三位來負責當期的內容,每個 curator 各自負責不同的領域。如果你在這一期沒有看到自已感興趣的東西,說不定下一期就會有了。你也可以瀏覽一下前幾期的內容

以下是目前的 curator 陣容:

大家也可以關注我們的 FacebookTwitterGitHub微博,有很多 Weekly 看不到的內容。有任何建議或疑問也可以來 Gitter 聊聊,歡迎亂入 👺

致力於解決開發者之間的資訊不對稱

@saiday

Goodbye, Object Oriented Programming

"The problem with object-oriented languages is they’ve got all this implicit environment that they carry around with them. You wanted a banana but what you got was a gorilla holding the banana and the entire jungle." Joe Armstrong, the creator of Erlang

作者是一個資深的開發者從 OOP 移情別戀到 Functional Programming,在文中對 OOP 做出了指教,從繼承、封裝,一路嗆到多型。
雖然我對封裝的那一段不是很同意,但總體還是看到蠻多有趣的東西,而且寫得滿生動的,值得一讀。

medium.com

Reference and Value Types in Swift

這篇文章深入淺出 reference type 及 value type 的完整性滿高的,適合還沒有完整概念的讀者入門。

幫大家節省時間,以下列出一些 keyword,如果你已經都有所掌握就不需要點進去看了,嘿,就是你想的那樣。

  • shallow copy (reference) vs. deep copy (value)
  • heap allocated (reference) vs. stack allocated (value)
  • Immutability of reference type and value type

不知道為什麼,我一直想到王垠的這篇: Swift 语言的设计错误

medium.com

Shared Web Credentials

Shared Web Credentials 不算是 iOS 的新東西,不過直到最近才看到比較多人在用,而體驗上確實蠻好的。

如果你的服務有 web 跟 app 兩個 client,兩邊都會登入,那麼也許就值得你花點時間來實作這項功能,只要使用者在 Safari 上填過帳號密碼並儲存在 iCloud Keychain,那麼你的 app 就可以拿到這個資訊加速登入的過程。若是使用者是先在 app 登入,我們也可以把它存到 iCloud Keychain 裡去讓 Safari 去取用。

這項功能需要在 server side 透過 /apple-app-site-association/ endpoint 回傳一份 apple-app-site-association 的 JSON content,明示這個網站下連動的 app 的 bundle id。

註:建議在支援 iOS 9+ 以上的 app 實作會省下比較多麻煩事,只需要 server side 是透過 HTTPS 提供 apple-app-site-association 就好了, iOS 8 還要再簽署證書。

apple.com

Google's Awareness API in action. Make your application be User's Context-Aware.

今年 Google IO 中提到的 Awareness API 在上個月上線了, Awareness API 可以讓 app 在你預設好的條件下主動開始做事並發通知給他。

你可以對它註冊 callback 或者是自己透過 polling 來取得使用者目前的狀態,目前有七種狀態可以被觀測:Time, Location, Place, Activity (walking, running, biking), Nearby beacons, Headphones, Weather。

Google 在 Create Intelligent, Context-Aware Apps with the Google Awareness APIs 也介紹了兩套整合 Awareness API 的 app 當作案例示範:

  • 天氣好,你又在附近的時候會主動叫你去賞屋的房地產 app (煩死了買不起啊幹)
  • 發現你跑完步、開車中、上健身房的時候會推薦你特別的播放清單的音樂 app

雖然感覺非常的痴漢,但是如果你的 app 有合適的應用場景的話,這種主動互動的方式是很棒而且不可取代的。

Awareness API 也特別寫了一份 Best practices for the Awareness API 建議大家不要拿來濫用,摁摁好!

inthecheesefactory.com

StateListAnimator

老實說我一直覺得 Android 要處理 UI element 不同狀態的視覺呈現非常麻煩,而且過程很枯燥,通常大家都是做一個 drawable 然後透過 selector 針對不同的狀態做對應的顏色變化。
我在做這件事情的時候都非常拖延,可能是因為這樣做完之後效果也不怎麼好,就是啪啪瞬間換顏色或底色。

一樣的做法,如果是在 selector 裡面放 animator 做起來就有趣一點,看起來也更舒服。

stylingandroid.com

@fukuball

Dreaming of names with RBMs - 使用機器學習來命名吧!

Machine Learning:中級

大家都知道命名是電腦科學最大的難題之一,其實各種事物的命名都是難題啊!身邊的朋友生了小孩子要命名都很苦惱,簡直就是人生難題!

這個 Project 非常有趣,作者是用了 RBMs(Restricted Boltzmann Machine,一種類神經網路模型)來訓練命名機器學習模型,完成了 GitHub repo generatorPlace name generatorActor name generator,這跟一般的產生器不太一樣(可能只是用隨機產生),機器會根據數學原理做出合理的命名並加上自己的創意,這也就是「學會了舉一反三」,所以呈現的效果有點微妙,基本上相同的技術用到其他領域的命名應該也都沒問題,只要有訓練資料一切就好辦,哪位勇者要來做一個中文命名產生器啊?

github.io

An experiment in trying to predict Google rankings - 運用機器學習預測網頁在 Google 搜尋中的排序

Machine Learning:中級

這是一個有趣的實驗,作者嘗試使用機器學習的方法來預測網頁在 Google 關鍵字搜尋中的排序,我們直覺會想到使用迴歸模型來進行預測,不過這樣難度相當高,這意味著作者可能需要 Google 大部份的排序資料才能過訓練好夠準確的模型。

因此作者重新定義了問題,預測網頁在 Google 關鍵字搜尋中能不能排到 top 10,將問題轉換成一個二元分類的問題。大家可以看一下作者實際是怎麼做的,雖然不能夠準確預測排序,但至少預測網頁能不能排在 top 10 其實對 SEO 也就很有幫助了,我們可以依據預測的結果調整網頁的內容,讓我們要宣傳的網頁更有機會排到 Google 關鍵字搜尋的 top 10。

searchengineland.com

林軒田教授機器學習技法 Machine Learning Techniques 第 2 講學習筆記

Machine Learning:中級

第一講介紹了 Hard Margin SVM,這是 SVM 最基礎的模型,其核心概念就是可以做二元分類的線其實會有很多條,因此 SVM 定義了一條最好的二元分類線,也就是最胖的分類線,將其定義成數學模型之後就可以用 QP Solver 來解最佳解。

第二講我們會將這個二元分類「直線」延伸到「非線性」的分類線,我們可以使用以前學過的非線性轉換來做到非線性分類線,但這會有限制,當轉換的空間越高維的時候,計算複雜度會成長得很快,因此第二講中將 SVM 的問題推廣到 SVM 的對偶問題(Dual SVM),如此計算複雜度將不再會因為特徵轉換而增加,甚至可以讓我們做到無限多維的特徵轉換!我們就來看看 Dual SVM 如何推導吧~

fukuball.com

PHP 深入探討依賴注入

PHP、Programming:中級

之前在 CodeTengu 分享了不少篇有關依賴注入(Dependency Injection)的文章,本篇文章大概是我目前看過最清楚淺顯的一篇了!從最基礎的依賴實作物件設計,再透過依賴反轉重構成依賴抽象物件設計,最後導入依賴注入方法,讓抽象依賴物件可以被置換,一步一步引領,非常建議要邁向進階物件導向程式設計的碼農朋友們閱讀這篇文章!

oomusou.io

@hiroshiyui

The symptoms of low internal software quality « Plataformatec Blog

Plataformatec Blog 上的 Low Internal Software Quality 系列文,截自目前有以下三篇,主要講如何透過「大刀闊斧重構」或「釜底抽薪砍掉重練」來改進軟體品質:

  1. The symptoms of low internal software quality
  2. Key points to consider when doing a big software refactoring
  3. Key points to consider when doing a software rewrite

其中以第 2 篇對我而言最受用,提示了很多處理重構時的技術面、非技術面(人事面、精神面…)應該注意的地方,推薦給大家。

第 3 篇講砍掉重練這件事,雖然有時拋掉包袱、重新打造系統很爽,以前接到爛攤子的 legacy code 時,我也寧願這樣做;但是現在的我更佩服把既有系統透過軟工(用測試滿足相容需求、用 design patterns 形塑秩序與規範…)改造重生的工匠技藝,像是日本電視節目「大改造!! 劇的ビフォーアフター」(全能住宅改造王)那樣。

plataformatec.com.br

Elixir — Supervisors: A Conceptual Understanding — Medium

Supervisor 在 Erlang 與 Elixir 扮演了「子 process(-es) 監督者」的角色、是 OTP 容錯機制中的重點設計。這篇文章概觀地介紹了 supervisor 是如何運作的。

同場加映:

medium.com

Building a Game with Phoenix Channels — Medium

透過一個簡單的多人線上對戰遊戲範例,示範 Phoenix 的 Channels(與 Elixir 的 Agent) 用法,很有趣的一篇文章。

Channels 是 Phoenix 伺服器端程式與客戶端之間達成即時互動的重要機制,假設客戶端支援時下的 HTML5 WebSocket 協定,就優先採用它,不然就退回到傳統的 LongPolling 作法。

外行人看熱鬧,內行人看門道,這範例遊戲本身沒有什麼吸引人的華麗聲光效果,但是總有人(有吧?有吧?)會從這些沒幾行的程式碼當中,發現類似 Facebook 為何買下 WhatsApp 所看中的那個「東西」價值之所在。

medium.com

Phoenix Channels vs Rails Action Cable

接著上一篇文提到的 Phoenix Channels,最近推出的 Rails 5.0 也有類似 Channels 的機制,稱為 Action Cable。這篇文章作者拿了兩者各做出一個相同功能的聊天室系統,然後拿 Tsung 去暴力壓測。

為了避免落入 flame war 的對穿腸窠臼(即使很多搞 IT 的人就愛這一味,可喜孜孜的),如同原作者結尾所講的,就請恕我不做太去脈絡化、武斷的結論了,選這篇文只為了「他山之石」的引介用意。

同場加映:

dockyard.com


This RSS feed is published on http://weekly.codetengu.com/. You can also subscribe via email.

CodeTengu Weekly 碼天狗週刊 - Issue 56 The best place to hide a dead body is page 2 of Google search results. - Aug 22nd 2016

$
0
0

Hello World

CodeTengu Weekly 碼天狗週刊

CodeTengu Weekly 會在 GMT+8 時區的每個禮拜一早上 10:00 出刊,每一期會從目前的 curator 名單中選出三位來負責當期的內容,每個 curator 各自負責不同的領域。如果你在這一期沒有看到自已感興趣的東西,說不定下一期就會有了。你也可以瀏覽一下前幾期的內容

以下是目前的 curator 陣容:

大家也可以關注我們的 FacebookTwitterGitHub微博,有很多 Weekly 看不到的內容。有任何建議或疑問也可以來 Gitter 聊聊,歡迎亂入 👺

致力於解決開發者之間的資訊不對稱

@wancw

本週 IG - 電獺少女 Lala

instagram.com

SOLID Go Design

Dave Cheney 在 GolangUK 分享如何在 Go 中實踐 SOLID 原則的文字內容。

Chenney 認為 Go 勢必會愈來愈普及、會有愈來愈多用 Go 寫的程式碼,其中肯定有好有壞。所以不能再只考慮效能;而更要考慮如何寫出架構清晰、適合復用的高品質架構。

cheney.net

Load Balancing Websocket Connections

WebSocket 現在已經被廣泛應用,但是你知道要對它做 load balance 有多麻煩嗎? 看看這篇文章吧。

如果你的服務架構在 AWS,那麼恭喜你!新的 Application Load Balancer (ALB) 已經幫你搞定了。

deepstream.io

Trello Android Schema Upgrades

Trello Android 版處理 DB migration 的方法。幫 DB migration 加上測試不是甚麼新奇的方式,但我想這樣做的人可能不是很多。

其中, 測試 DB_VERSION 這個小訣竅還不錯,提醒 developer 不要漏寫測試。

danlew.net

書籍推薦 —— 演算法統治世界

這本技術含量比較低的科普書籍,簡要地指出資訊科技如何深深影響現代社會。特別是金融界的盛衰如何帶起一波科技技術的發展。

順便推薦另外一本與 演算法 內容較為相關的科普書籍 —— 改變世界的九大演算法;適合非技術背景的朋友瞭解這個圈子的人都在處理什麼樣的問題。

taaze.tw

@uranusjr

Is this my interface or yours?

作者從 Windows 上「我的電腦」圖示的設計切入,觀察如何在 UI 上適當使用所有格修飾名詞。文中比對了許多軟體和網站的用法,發現「使用者的東西」在不同情境下會可能稱作「我的」、「你的」、甚至直接省略冠詞,例如 Dropbox 只會單純寫「檔案」,而不會特別說明。

整體而言:

  • 如果你想強調使用者與產品互動的關係,就用「我」,但若沒有絕對必要,最好省略。
  • 當產品問問題、引導使用者、或者描述事情時,用「你」,強調對話的感覺。

medium.com

Designing Pythonic APIs

寫 Python 的人應該多少都知道 Requests 這個 library 吧。它很好用,但其實 Requests 能做到的事情,大都可以用內建函式庫 urllib 辦到。這篇文章試著探討為什麼大家都討厭內建函式庫,卻喜歡 Requests——API 設計。

其實我不太同意文中幾個觀點。例如在簡單的 GET 與 POST 狀況下,urllib 不會比 Requests 長(差一行吧),這個在 comments 也有提到。Requests 在這裡確實還是比較好,但我認為主要是 GET 和 POST 的區別很 explicit,而不是短。

有些東西則比較像是 design decision。作者認為 Requests 把 HTTP 與 JSON operations 做成強耦合是優點,但用這個講法,十年前的人就會把 XML parsing 和 HTTP 強耦合——然後現在的人就會大翻白眼,吐槽這種沒人在用的協定為什麼要內建。當然每個時代有各自的需求,Requests 整合 JSON parser 確實讓它成為當代最合適的工具,但我不認為這代表它的 API 較好。預設不 raise exception 的選擇也是,或許在 HTTP 上這樣設計確實不錯,但這仍然不能成為通則。一般而言,exception 通常是比 error code 與 sentinel value 更好的報錯方式,至少在寫 Python 時如此。

另外像 Response.textResponse.json() 這種年輕犯下的過錯已經被吐槽過很多次,這裡就不多說了。

但我還是推薦讀一下這篇文章。你不需要同意作者(我就不同意),但至少他對 Requests 與 urllib 設計差異的觀察還是有價值。看看兩者,下次設計 API 時就能有更多想法。不要完全照抄 Requests 就好。

noamelf.com

在 Mac 或 Linux 上用 command line 與 Git 開發

朋友寫的 GitBook。我覺得我沒辦法介紹得更好(絕對不是懶得寫!),就看他自己的介紹吧:

這本線上書主要是給不熟悉 command line 而想要在 Mac 或 Linux 上開發程式的人。內容涵蓋從最基礎的「如何打開終端機」到常用 command line 指令、使用 brew / apt-get 安裝套件, 以及基本的 git 使用。

Mac 的部分會以開發者本身的電腦作為目標教學, 而 Linux 則是以雲端 (遠端) 主機為目標, 我們所使用的 Linux Distro 會以 Ubuntu 為主。

會看這個週刊的人或許也不太需要這個。如果有朋友問你怎麼入門,就試著推薦看看吧。

gitbook.com

轉眼、24 年

上週吃飯時有個朋友在教高中生,聽他講了很多現在高中生的問題,例如不太主動,講一步才會做一步之類的。其實我一向不喜歡這個話題,如果是「我們當年哪會這樣」的抱怨,通常都是當成老人自爽直接無視;但這不太一樣,是人家看了很多年高中生才做出的觀察,有一定的參考價值。我自己也是有接觸一些教學,雖然年紀沒那麼大、教得人也少、尤其對高中生的接觸更比不上,但就我的超小樣本,感覺並沒有很糟啊,至少不比我自己以前差。似乎不太符合他的觀察。

遇到這種認知不匹配時,第一個要考慮的就是母群體差異:我會接觸的人也都是寫程式相關的人,或許因為 self-selection bias 而和一般樣本有偏差。

似乎也沒錯。台灣在這塊領域沒有所謂科班,學校也沒教相關的基礎知識,所以如果走上程設路(然後沒有換跑道),肯定是因為本身受到什麼啟發,產生了獨特的興趣,才會主動學這方面的東西。

也剛好前陣子 Twitter 在流行 #firstsevenlanguages,才回憶了一下我誤入歧途踏進程設的歷程:一開始是為了做喜歡東西的網頁,後來想做簡單工具,最後一根稻草是換了 Mac,發現以前習慣的軟體都沒有,只好自己寫。然後就變得好想聽聽別人的版本。你為什麼會開始寫程式?為什麼現在還在寫?

你的故事是什麼?

medium.com

@yhsiang

Write Code to Rewrite Your Code: jscodeshift

在開發的時候,為了增加效率會使用一些 framework 或 library 來加速。但是隨著 codebase 越來越大,一旦碰上了 library 的 API 改變。此時,就會開始痛苦無比的搜尋、選取、貼上來把全部的 API 做升級。厲害一點的工程師會使用正則表示式來加快這些工作的進行。但是正則表示式總是會有極限和困難的地方,可能光是寫出正確的正則表示就會花費不少時間。

codemod 通常是此時最佳的助手,透過程式碼轉成 AST (Abstract Syntax Tree),再藉由操作 AST 的 node 和 path得到你想要的結果。這樣做可以處理很大量的程式碼,在龐大的 codebase 下面升級 API 變得比較輕鬆。 jscodeshift 就是 javascript 的一個 codemod 工具,是 facebook 的一個開源專案。

文章提供了三個練習: 1. 移除所有的 console,找到 callExpression 中 object 的 identifier 是 console 將其移除。 2. 改變 import 的 method call,找到需要 importDeclaration 和他的 localName,最後修改成需要的 property name。 3. 把函數的參數串列改成單一 object。

透過三個練習,對於 AST 的操作就會有基本了解,可以嘗試寫你自己的 codemod script。 當然你有在寫 react 的話,facebook 也提供了不少 react codemod 可以使用。

toptal.com

GraphQL Concepts Visualized

GraphQL 由 facebook 所推出的 language,希望能透過一次的 request 來得到想要的 data。不論背後的資料庫是使用 SQL 或是 NoSQL,通常資料間都會有相依性,而透過 GraphQL 的查詢語言來得到查詢結果樹的資料。

文章透過圖解的方式來解說 graphql 實際上是怎麼查詢你的資料,並且還說明 apollo client 是怎麼做 graphql 查詢結果樹的快取。

medium.com

WTF, forms?

Bootstrap 的作者 Mark Otto 所開發的套件,提供友善的 Form control。適用 IE9 以上的瀏覽器。

wtfforms.com

Single-Page Web Apps in Elm: Part Four - Side Effects

這篇是在介紹 Elm 如何處理 ajax request,而因為 Elm 是靜態型別的語言,所以處理 JSON 也必須事先定義好 type。雖然處理 JSON 會比 javascript 麻煩,確定能保證資料的正確性。

作者在這篇也示範一些處理 JSON 的測試程式碼。而對 Elm 不熟的朋友也可以閱讀這系列的前三篇文章。

linkedin.com

萬事萬物皆是 LOG  —  系統架構也來點科普

台灣開源界的年度盛會 COSCUP 2016 在昨天剛結束。

poga 演講的逐字稿,歡迎沒參與到的朋友仔細品味,有在現場的朋友還可以再次回味!

medium.com

工作機會

Python Web Developer at StreetVoice (台北、北京、上海)

開發及維護 StreetVoice 旗下相關網站。

意者請來信:tzangms@streetvoice.com

streetvoice.com


This RSS feed is published on http://weekly.codetengu.com/. You can also subscribe via email.

CodeTengu Weekly 碼天狗週刊 - Issue 57 Any application that can be written in JavaScript, will eventually be written in JavaScript. - Aug 29th 2016

$
0
0

Hello World

CodeTengu Weekly 碼天狗週刊

CodeTengu Weekly 會在 GMT+8 時區的每個禮拜一早上 10:00 出刊,每一期會從目前的 curator 名單中選出三位來負責當期的內容,每個 curator 各自負責不同的領域。如果你在這一期沒有看到自已感興趣的東西,說不定下一期就會有了。你也可以瀏覽一下前幾期的內容

以下是目前的 curator 陣容:

大家也可以關注我們的 FacebookTwitterGitHub微博,有很多 Weekly 看不到的內容。有任何建議或疑問也可以來 Gitter 聊聊,歡迎亂入 👺

致力於解決開發者之間的資訊不對稱

@kako0507

The Marvellously Mysterious JavaScript Maybe Monad

如果對 Functional Programing 不熟,建議先看 Douglas Crockford 在 YUIConf 2012 的介紹影片,以及 Aditya Bhargava圖解教學

因為 JavaScript 的 Promise 其實也是一種 monad ,所以文章一開始會先重述 Promise ,以便理解 monad 的概念。

再以凌亂的 if statement 當作例子,一步一步的套用 maybe monad ,改善 null/undefined checking 的流程。

jrsinclair.com

A few HTML tips

這篇文章點出了一些 HTML 上的小建議:

  • 段落
    • 斷行使用 <p> ,避免使用 <br> ( <br> 適合用在詩或歌的斷句 )
  • 標題
    • 為了表示正確的語意,必須按照順序使用 <h1> ~ <h6> ,如果是需要調整字型大小,可以透過 CSS 更改
    • 在次標題上避免使用較低層級的 heading ,改用一般的文字 markup 。
  • 表單
    • placeholder 建議放入正確格式的範例而非說明
    • 使用正確的 type 在 mobile 顯示對應的鍵盤
  • 使用 <svg> 取代 <img> , 使得向量圖也可以透過 CSS 來改變樣式

mozilla.org

Introducing React Native Ubuntu

日前 Ubuntu 公布了 React Native for Ubuntu 的 source code ,現在可以利用 React Native 來實作 Ubuntu 的 Desktop App 了!

有興趣的朋友可以照著官方教學玩玩看。

ubuntu.com

How to Handle React Context in a Reliable Way.

當需要將 properties 傳遞到多個 level 底下時, React 提供了一種方式來解決參數需要層層傳遞的問題: Context ,已經被一些較熱門的 libraries 使用,如 React-ReduxReact-Router

不過使用上還是有一些缺點:

  • 因為目前還在實驗階段,將來 API 很有可能會變動
  • 假設 context value 更新了,使用到該 value 的 descendant component 與 provider component 間如有其他 component 進入 shouldComponentUpdate 並 return false ,則該 descendant component 並不會 re-render ,使用上容易出錯。

對此 Dan Abramov 在他的 twitter 上面給了一些意見

可以藉由 High-order component 的方式,將 context 寫在較外層的 component ,這樣 API 更新時,就只需要改一個地方。

medium.com

@chiahsien

Managing Consistency of Immutable Models

資料不一致一直都是程式設計師的惡夢,也是 bug 最常發生的原因之一。LinkedIn 的工程師分享了他們對 Core Data 的評價,以及如何透過 immutable model 達到資料的一致性。說穿了就是「真相永遠只有一個(Single source of truth)」,建議可以配合最近很紅的 Redux 架構一起看,會有更多體會。

延伸閱讀:

realm.io

活久见的重构 - iOS 10 UserNotifications 框架解析

九月即將來臨,Apple 下一代產品也將要發表,這也代表著 iOS 10 正式版要上線了。在 iOS 10 裡頭對於 notification 相關的 framework 做了一個大更動,變得對開發者更加友好了,如果你還不知道改了什麼,是時候瞭解一下了!

onevcat.com

The iOS bug chase

遇到 bug 總是一件令人喪氣的事,尤其是遇到很難重現或者是系統的 bug 更是如此。有位開發者就遇到一個這種 bug,它是 Apple MapView 的一個老問題,存在好幾年了。多虧這位開發者,這個 bug 已經在即將正式推出的 iOS 10 被修正,他把 debug 的過程詳細的紀錄了下來,讀起來非常有趣。

allegro.tech

MVVM Is Quite Okay at What It Is Supposed to Do

MVVM 應該是這幾年 iOS 開發最熱門的關鍵字之一,網路上對它的褒貶不一,也有不少人以此為基礎提出了所謂的「加強版」。我個人是覺得它會背負這一些罵名,一部分是因為它的名字取的不好,另一部分是因為使用者沒有完全理解它就硬把它導入到專案裡頭。

MVVM 所描述的是關於部分 UI 的架構,更精確的說,是關於「如何回應使用者動作(View 呼叫 View Model)」以及「如何將資料顯示到畫面(View Model 通知 View)」。但因為沒有明確的說明該怎麼設計 View Model,結果很多人把原本在 View Controller 的一大坨程式碼搬到 View Model,這對程式碼完全沒有幫助啊!

正確的作法應該是:依照需要你可能會有 Network Manager、Data Parser、Data Center、有的沒的 Service,你的 View Model 呼叫這些元件做事,然後把回傳資料轉換成適當的格式,再通知 View 更新畫面。

christiantietze.de

Xcode 8 Extensions

Xcode 作為一個 IDE,它所提供的功能雖然一直都很不符合大多工程師的期待,但因為蘋果也沒有禁止我們幫 Xcode 開發 plugins,所以 plugins 生態圈也是蓬勃發展,大家也用的很開心。

想不到在今年的 WWDC 蘋果放出了一個震撼彈,正式支援讓人開發 Xcode 套件,但也禁止舊有 plugins 執行。只是三個月過去了,大概是蘋果開放可控制的東西太少,所以目前看到的套件還是寥寥可數啊 :(

延伸閱讀:

theswiftdev.com

@kkdai

[研討會心得][COSCUP] COSCUP 2016 上台初體驗

曾經聽人提到這兩年參與大大小小研討會,越來越少看到參與者來寫心得了. 所以就算是身為講者,我也提出了我的心得 :p

裡面有附上兩場主要跟 Golang 有關場次的投影片,並且有把直播影片也附上,歡迎想看的人可以直接點取觀看.

evanlin.com

[研討會] Modern Web 2016 - Day2 上台日

今年的 Modern Web 2016 一共有三位碼天狗的 Curator 上台,你們有沒有參加呢? 這是我參加第二天的心得整理 ( 內容有連接到第一天的心得 ) ,裡面也有我這次上台的投影片,希望對大家有些幫助...

evanlin.com

Go Traps

列出了許多 Golang 的陷阱 (trap) ,舉例而言:

  1. range 一個 slice 第一個回傳值不是 value 而是 key (最常犯 XD)
  2. map 忘記初始化
  3. goroutine 如果沒有等待,直接結束 app 的話是不會執行的.

試著看看你能不能看出每一個陷阱的原因吧.

go-traps.appspot.com

GopherCon 2016 - Playlist

今年最盛大的 Gopher 聚會, GopherCon 2016 在 07 月 10 ~ 11日已經結束了. 但是影片在這八月底終於釋出.

這裡有播放清單,快來看看:

推薦 Session :

  1. Rob Pike - The Design of the Go Assembler
  2. Francesc Campoy - Understanding nil
  3. Daniel Whitenack - Go for Data Science

youtube.com

Why I consider if/else idiomatic Go

這一篇講解了很基本的 IF / ELSE 的使用方式.特別是在 Golang 的 Error Handle 部分. 大家在判斷回傳值中的 Error ,是否有注意到他的變數生命週期? 有沒有想過如何寫會讓人更容易了解?

很推薦這一篇來好好學習一下

nicerobot.org


This RSS feed is published on http://weekly.codetengu.com/. You can also subscribe via email.


CodeTengu Weekly 碼天狗週刊 - Issue 58 我審查了自己的程式碼,得到了一份更好的程式碼跟更好的自己 - Sep 5th 2016

$
0
0

Hello World

CodeTengu Weekly 碼天狗週刊

CodeTengu Weekly 會在 GMT+8 時區的每個禮拜一早上 10:00 出刊,每一期會從目前的 curator 名單中選出三位來負責當期的內容,每個 curator 各自負責不同的領域。如果你在這一期沒有看到自已感興趣的東西,說不定下一期就會有了。你也可以瀏覽一下前幾期的內容

以下是目前的 curator 陣容:

大家也可以關注我們的 FacebookTwitterGitHub微博,有很多 Weekly 看不到的內容。有任何建議或疑問也可以來 Gitter 聊聊,歡迎亂入 👺

致力於解決開發者之間的資訊不對稱

@saiday

so-fancy/diff-so-fancy: Good-lookin' diffs.

前陣子有把 git remote 的 commits 在 local rebase 後再看 diff 的需求,而 git 自己帶的 diff 的輸出格式我個人真的無法欣賞,於是開始了尋找 diff 工具之旅。

最後我的選擇是 diff-so-fancy
主要原因是它的輸出格式還算可以,而且不必為了看 diff 再裝一個 GUI 工具,也可以透過修改 git 的 core.pagerdiff-so-fancy 這樣往後只需要跟以前一樣用 git diff 就可以了。

github.com

Structs and mutation in Swift - Chris Eidhof

Chris Eidhof 深入淺出地談 Swift struct,重點在為什麼 struct 需要 mutating function 以及它的原理,也解釋了為什麼 struct 的 mutating function 不會造成所謂災難式的 side-effects

我有買作者寫的 Advanced Swift,儘管有些篇幅對我來說真的過硬,但他的寫作風格我很喜歡,不太想教你怎麼用倒是一直在說為什麼跟還能怎麼做。

eidhof.nl

Xcode Visual Memory Debugger

Xcode 8 的新功能:Debug Memory Graph、Runtime Issues。

在 debug 的過程中使用 Debug Memory Graph,會暫停執行進到一個觀測的狀態,然後視覺化地把這個 app 在 heap 中的記憶體使用關係圖畫出來。

Runtime issues 可以在我們 debug 的過程中自動幫我們找到潛在的 memory leaks。

這些功能以往必須要進到 Instruments 裡才能做到,現在直接整合在 Xcode editor 上對基本的使用更方便了。

WWDC session: Visual Debugging with Xcode

useyourloaf.com

Using Java 8 Lambda expressions in Android

Android studio 2.1 就支援 Java 8 了 (雖然目前只支援了一部份,但終於有 lambda expressions 了)

如果我們要用 Java 8 的話就必須改用 Jack toolchain compiler,其實這個新一代的 compiler 是一個蠻大的改進,不只萬年老梗的編譯速度更快,也自帶或整合了一些以往要分散使用的工具 (ProGuardJaCoCo)

註:lambda expression 只要是 API 9 以上都兼容,大家不用擔心。

github.io

@mingderwang

10 個原因我喜歡用 Swagger spec 來定義新開發的 RESTful APIs

CodeTengu Weekly

@hiroshiyui

OCI 对 Docker 真的没有意义?

這篇是看人吵架,容器技術界大亂鬥。相信折騰過一陣子 Docker 的人看了都會會心一笑。

我個人是偏好「鏡像格式」、「容器格式」與「容器執行環境」都能抽象、解耦合、分而治之的。實在是很討厭被特定廠家綁架啊,給我一點選擇的自由吧!?

qq.com

Elixir Isn’t Hipster

標題大概可以意譯為:〈Elixir 可不是個假掰、假文青(意謂「只會打高空、不實用」)的語言〉。雖然是篇 2013 年的舊文,然而內容、觀點放到今天來讀依然準確,為 Elixir 的特點辯護,但是不流於「賣藥」。

如果你周遭有那種「這什麼沒聽過的怪東西啊?我才不想碰咧!我用(某某主流技術)就好了」的技術圈朋友,又或者先承認你就是這樣的朋友,我覺得這種「釋疑、但不賣藥」的行文風格,對於介紹一個相對冷門的技術是很有幫助的。

這年頭太多 hype,久而久之,「糖來了」都變成「狼來了」,先別說別人,我自己都對賣藥文敬謝不敏。

alexrp.com

Understanding Elixir's recompilation

本篇用很詳細的篇幅,解說了 Elixir 為什麼不同於 Erlang,有時候會需要對程式做大量重新編譯的原因所在。很有趣,讀後會對 Elixir 的運作特性又多了一分認識。

可能是我手上的 Elixir/Phoenix 專案規模還小,還沒撞到這樣的天花板。

milhouseonsoftware.com

Rate Limiting a Phoenix API

限流 (rate limiting) 這種機制在很多地方都會用到,這篇是用 Phoenix 搭配 ExRated 實作 API 限流的範例。

danielberkompas.com

5 female coders who changed the world

本文介紹了幾位在人類史上不該被忽視、遺忘的女性程式設計師。

讀這篇文章,讓我想起了遇過的幾位優秀的女性程式設計師,撰寫程式時心思極為細膩,考慮各種例外可能,產出很可靠的程式。

這個行業就如此文開頭引述的,投入其中的工作者性別比例失衡,我還沒有仔細找過相關的研究文獻,還不能太斬釘截鐵地指出可能是哪些原因,只是同樣覺得這現象不太合理。

對了,如果妳看到這篇,且還不知道「WoFOSS 好自由 - 台灣女子自由軟體工作小組」的,真心推薦給妳。

weforum.org

工作機會

Python Web Developer at StreetVoice (台北、北京、上海)

開發及維護 StreetVoice 旗下相關網站。

意者請來信:tzangms@streetvoice.com

streetvoice.com

Random Cool Stuff

L10N ? I18N ? G11N ? A11Y ?

無意在 Twitter 發現一張圖才恍然大悟原來這些縮寫是這樣組成的,雖然應該很多人都知道了,但一定還有人跟我一樣不知道這些縮寫竟然是這樣組成的吧?!

L10N = Localisation
I18N = Internationalisation
G11N = Globalisation
A11Y = Accessibility

@saiday 提供

CodeTengu Weekly


This RSS feed is published on http://weekly.codetengu.com/. You can also subscribe via email.

CodeTengu Weekly 碼天狗週刊 - Issue 59 你在每個 commit 裡修改的程式碼越多,你在 code review 時被發現的錯誤就會越少 - Sep 12th 2016

$
0
0

Hello World

CodeTengu Weekly 碼天狗週刊

CodeTengu Weekly 會在 GMT+8 時區的每個禮拜一早上 10:00 出刊,每一期會從目前的 curator 名單中選出三位來負責當期的內容,每個 curator 各自負責不同的領域。如果你在這一期沒有看到自已感興趣的東西,說不定下一期就會有了。你也可以瀏覽一下前幾期的內容

以下是目前的 curator 陣容:

大家也可以關注我們的 FacebookTwitterGitHub微博,有很多 Weekly 看不到的內容。有任何建議或疑問也可以來 Gitter 聊聊,歡迎亂入 👺

致力於解決開發者之間的資訊不對稱

@vinta

10 Modern Software Over-Engineering Mistakes

作者列出的這十個過度工程、過度設計的現象,不可不慎吶!雖然過度工程的分寸實在不好難捏,但是還是有一些常見徵兆,比如說你對你的程式未來的演變做了「過多的假設」,甚至是毫無根據的假設。#BornToDoOverengineering

延伸閱讀:

medium.com

Walking the Microservices Path Towards Loose Coupling? Look out for These Pitfalls

採用 Microservice 的目的就是為了解耦,讓各服務能夠彼此獨立開發、獨立部署。而重點其實就是在界定 Microservices 的 Boundaries(邊界),白話一點的說法是到底該怎麼拆分服務。

這篇文章就列出了幾個「痛點」,當然,最麻煩的始終還是資料庫。

延伸閱讀:

dzone.com

The Security Checklist

這是一份關於 Web 和 Mobile app 的安全性或隱私權的 checklist,建議大家在服務上線前都核對一下。

github.com

Hidden features of Python

這個 Stack Overflow 的一大串回答裡列出了超多可能不是每個 Python developers 都知道的小技巧。裡頭有幾個我還真的不知道,例如原來 re.sub() 可以接受 function 當參數、可以在 regular expression 裡寫註解(透過 re.VERBOSE) 以及 from __future__ import braces,大家可以自己在 REPL 裡試試看效果如何。

延伸閱讀:

stackoverflow.com

Makefiles in Python projects

當然不只是 Python,所有的語言都可以用 Makefile。絕大部份的情況下,你根本不需要什麼額外安裝的 build tool 或 task runner(望向 JavaScript),真的,你真的只需要一個 Makefile 就夠了。

krzysztofzuraw.com

@fukuball

林軒田教授機器學習技法 Machine Learning Techniques 第 3 講學習筆記

Machine Learning:中級

上一講中我們介紹了 Dual SVM,將 SVM 問題轉換成對偶問題來做計算,但上一講中仍未完全講解為何 Dual SVM 能減少計算量增加效能,在這一講中將會從 Dual SVM 引入 Kernel 的概念,將特徵轉換透過 Kernel function 來做處理,讓 SVM 可以做到無限多維的特徵轉換。

其實平常大家在說的 SVM,通常就是指 Kernel SVM,所以 SVM 工具通常會有提供許多種 Kernel 來讓我們做不同的轉換,每種 Kernel 會有不同的性質,可以調的參數也會不同,所以了解 Kernel function 本身是做了什麼轉換,也會比較容易明白怎麼去調參數。

fukuball.com

Large scale matrix multiplication with pyspark

Machine Learning:中級

本篇文章利用模糊比對公司名稱的例子來說明如何使用 Spark 做龐大矩陣的運算,從最簡單的方法開始嘗試,然後一步步導引之後,引出做 NLP 常常會遇到的稀疏龐大矩陣運算,可能造成記憶體不足的問題,進而使用 Spark 來做到分散式運算處理,由於例子簡單,蠻適合讓大家模仿他的做法自己嘗試看看~

yodas.com

A Response To PHP- The Wrong Way

PHP:中級

關於 PHP 這個語言,網路上一直充斥著大量的過時資訊並且傳播著錯誤的實踐以及不安全的代碼,很容易讓 PHP 新手誤入歧途,所以有了 PHP the right way 這個最佳實踐電子書,讓 PHP 新手可以有一個良好的入門之道。

而最近也出現了一個 PHP the wrong way,與 PHP the right way 相比,PHP the wrong way 比較偏向心法或是一些經驗法則,沒有提供比較具體的實踐或是建議,因此本篇文章作者對於 PHP the wrong way 很不以為然,簡而言之,就是認為 PHP the wrong way 是「廢文」一篇。所以其實這篇回應「廢文」的文章嚴格來說也是一篇「廢文」呢~

medium.com

Human readable regular expressions for PHP 5.3+

PHP:中級

我個人最討厭寫 Regular Expression 了,既不直覺又難維護,但偏偏還蠻常遇到的。這個 PHP 套件某種程度解決的 Regular Expression 不直覺又難維護的問題。

如果看 Read Me 覺得不夠詳盡的話,也可以看看 wiki

github.com

@wancw

(影片) Don’t Build a Distributed Monolith

Facebook 工程師談 microservice 裡很容易犯的 anti-pattern: Distributed Monolith ,如果你懶得看影片的話,重點在於他引用的這句話:

The evils of too much coupling between services are far worse than the problems caused by code duplication

補充資料:

Microservice 之間應該要能獨立地運作,連程式碼也該是如此;嘗試在 (micro)service 之間維護一份共用程式碼只會帶來更多的問題。我近三年的工作經驗也不斷驗證這個觀點(其中還包括嘗試在 server、Android、iOS App 間共用一份 core-library,那真是艱鉅的挑戰……)。

microservices.com

谈谈互联网后端基础设施 - 后端技术杂谈

本文提及了快取(缓存)、資料庫(数据库)、搜尋引擎(搜索引擎)、消息队列、日誌(log)收集、資料分析、服務監控等主題,以及目前廣為採納的工具或解決方案。

原標題說是「基礎設施」,我覺得適合拿來作為後端(backend)的鳥瞰地圖。不管用來當作培養自己技能樹的指引或是拿來檢視自家產品哪邊需要補強都是不錯的起點。

不得不說,後端的水真是有夠深;好處就是因為要做的事情太多了,總是會有位置可去。與各位共勉之。 :)

rowkey.me

Testing, for people who hate testing

如果你的系統都沒有測試,要嘛是你的系統太簡單了、要嘛就是你的膽量太大了。 假如你不喜歡、不知道如何寫測試,那花點時間看一下這篇,然後開始幫你的系統補上測試,有一天你會感謝你自己的!

作者先談了些喜歡上(至少不要這麼討厭)寫測試的方法,然後討論該測試什麼東西以及該如何寫測試。最後也提及了軟體系統中一些較難測試的部分,如外部狀態(資料庫)、Web 頁面、GUI 等。

eev.ee

Falsehoods Programmers Believe About Names

姓名是軟體系統中很常見的欄位,但是你知道有很多理所當然的假設都是錯的嗎?

從文章中隨意挑幾個,像是:

  1. 我的系統裡不會出現中文、日文、韓文、…… 名字
  2. 每個人都有剛好 1 個(或 N 個)名字
  3. 人名一定有辦法以 Unicode 字元表示
  4. 人名是分(或不分)大小寫的

延伸閱讀:對電話號碼的錯誤假設——
Falsehoods Programmers Believe About Phone Numbers

kalzumeus.com

本週 IG:Jovin Chan (@jovin26)

instagram.com

工作機會

Python Web Developer at StreetVoice (台北、北京、上海)

開發及維護 StreetVoice 旗下相關網站。

意者歡迎來信:tzangms@streetvoice.com

streetvoice.com

Random Cool Stuff

Transistor on Steam

上禮拜剛玩完這款遊戲,忍不住要跟大家分享一下。

這應該是一款程序員會覺得很親切的獨立遊戲(Indie Game),比如說遊戲中的城市叫做 Cloudbank、男主角在看到某個景色之後脫口而出的第一句話是「Hello, World」、女主角使用的招式就是一個個的 Functions(裝備 Functions 還會消耗 Memory)、遊戲中的主要敵人叫做 Process 以及破關之後開始二周目稱為 Recursion()。畢竟這可是個 Cyberpunk 題材的遊戲呢,不過不是 Blade Runner 那種,而是 The Matrix 那種。

但是這款遊戲真正讓人想推薦的原因其實還是它在美術和音樂兩個方面的表現簡直登峰造極,尤其是配樂,好聽到我的耳朵都要懷孕了。總之大家有空可以買來感受一下。然後如果你聽了我的建議跑去玩了,發現很喜歡,我覺得你也可以試試 Life Is Strange。哎呀,Steam 上的 Overwhelmingly Positive 的評價是錯不了的。

@vinta 分享。

steampowered.com


This RSS feed is published on http://weekly.codetengu.com/. You can also subscribe via email.

CodeTengu Weekly 碼天狗週刊 - Issue 60 There is no place like 127.0.0.1 - Sep 19th 2016

$
0
0

Hello World

CodeTengu Weekly 碼天狗週刊

CodeTengu Weekly 會在 GMT+8 時區的每個禮拜一早上 10:00 出刊,每一期會從目前的 curator 名單中選出三位來負責當期的內容,每個 curator 各自負責不同的領域。如果你在這一期沒有看到自已感興趣的東西,說不定下一期就會有了。你也可以瀏覽一下前幾期的內容

以下是目前的 curator 陣容:

大家也可以關注我們的 FacebookTwitterGitHub微博,有很多 Weekly 看不到的內容。有任何建議或疑問也可以來 Gitter 聊聊,歡迎亂入 👺

致力於解決開發者之間的資訊不對稱

@tzangms

前端自动化测试探索

這篇是 @vinta 在 CodeTengu 分享過的連結, 只是沒在電子報出現過, 老實說現在連我自己都看 CodeTengu, 然後分享已經分享過的東西, 這樣好像不太對啊 (笑)

在敝公司 StreetVoice, 後端早已經有所謂的單元測試, 有一套還算是完整的 CI / CD 流程, 也這樣跑好幾年了, 但是其實現在網站越用越多 javascript, 甚至也沒在管所謂的 no javascript fallback, 所以即便後端有足夠的測試, 有時還是免不了因為 javascript 少一個逗號, 因而某些功能壞掉。

所以前一陣子我們家前端工程師有一些空擋時, 便請她研究一下前端測試, 不過她先朝了測試 React 元件的方向去, 不過我想的是這篇文章的方向。

只是在看了這篇文章之後, 我才真的知道原來連像素比對的測試方式都有, 實在是太狂了, 真的是學習了, 大開眼界啊。 不過剛好這幾天也在玩 Splinter 來做前端的自動化, 似乎這塊已經滿成熟的了呀。

baidu.com

Knowledge Debt

現在要一個開發人員, 除了技術債之外, 還得背知識債, 我相信大部分的開發人員都有所謂知識債的困擾, 現在這個世界, 當一個開發人員, 實在是太多東西要學的了。

所謂的知識債, 點像是 ... 你先找一個人家寫好的套件, 但是你不知道他底層是怎麼運作的, 可是你可以使用它先完成功能。 或是找到一篇文章, 先照著設定, 讓東西先可以跑。 之後再去補足不懂的地方, 或是底層的知識。

這篇文章說到下面兩點, 我還滿認同的, 而且其實把所謂的知識債換成技術債, 我覺得一樣可行。

  • Knowledge debt is like financial debt. It’s a tool - you need to use it wisely to make a profit.
  • Great programmers don’t settle on not knowing; but they are also not obesessed about learning right now.

我覺得不管是知識債或是技術債, 區別好的開發人員跟一般的開發人員, 就是看你會不會去還債了。

rachum.com

Refactoring - Not on the backlog!

不知道大家有沒有重構的習慣, 以前工作如果有空擋就會想要重構, 或是調效能。 後來時常會有人跟我說沒時間重構, 導致我也覺得需要一整個區塊的時間都拿來做重構,其實我比較偏好的是一小段、一小段的做, 有點類似這篇文章, 不過沒那麼精闢 :p

又或是特地開 issue 寫著「Refactoring」, 但實際上, 如果有東西要開發, 這個 issue 很快就又被淹沒了, 後續也很難想起來要做這件事。

這篇文章畫了好幾張圖, 描寫著一個產品從無到有, 開始生出了一堆技術債, 接著後續開發會需要去繞開技術債, 接著又生了更多技術債, 最終導致開發速度緩慢, 心情不愉快。

這篇文章主要的概念說的是, 每次開發某些功能時, 就先花一點時間清除掉這個功能會碰到、相關的技術債。 然後重複做這件事, 日子久了, 技術債也清的差不多了(誤, 因為會有新的技術債)

基本上我滿認同這個方法的, 也算是我早期在開發時的做法, 每次就做一點。 不過還是要先提醒大家, 重構之前, 先寫測試, 謝謝!

ronjeffries.com

ntfy - A utility for sending notifications

用來寄送推播通知的工具程式。

現在被動通知這件事應該算是已經變成是基本動作了, 像是我們在 StreetVoice 以往跑 cronjob 跑完都透過 email 寄送通知, 後來大部分都改成送 Slack 通知。

而 ntfy 看來滿適合拿來做個人用的工具, 因為除了 slack 之外, ntfy 還支援各種不同的 backend, 像是 pushbullet, pushover, telegram 等, 甚至還有 Linux, Mac 跟 Windows 的桌面通知。

再來厲害的應該就是 shell 整合了, 可以自動送「跑超過 10 秒的指令」的完成通知, 這樣一下, 就可以等被通知指令完成後再回來看了啊!

不過麻煩的應該是, 雖然它安裝上只寫著一行 pip 裝完後就可以, 但是實際上在 Mac 上, 得先裝 pyobjc, 而這個前提就是得裝整個 Xcode, 光是裝 Xcode command line tool 還不夠呢 ...

github.com

@uranusjr

Is reference counting slower than GC?

作者比較了自動資源管理最常見的兩種策略:reference counting 與 garbage collection,分析它們的策略差異與 trade-offs,然後⋯⋯就沒有然後了。其實我覺得這標題有點騙人,文章內容根本沒回答問題本身啊。不過作者對這兩種管理策略的描述很全面,如果你不熟它們的運作方式,這篇應該可以解答很多疑問。

簡單整理:(真的很簡單,千萬不要看了就不點進去讀內文)

  • Reference counting 和 garbage collection 是完全不同的策略,其實不太能直接比較。
  • Reference counting 會在每個 pointer assignment 造成 overhead,主要來自 CPU cores 之間的記憶體同步,以及額外的儲存空間(每個 object 都需要一點額外的位址儲存一個 counter)。
  • Garbage collection 隔一段時間就需要 scan 記憶體,以決定要清理哪些東西。這需要大量記憶體同步,在多數實作中會造成整個程式暫時停頓,但在絕大多數應用中微不足道。
  • Garbage collection 的速度與記憶體用量成反比(因為要 scan 的記憶體變多)。Reference counting 沒有這個問題,但 cycle detection(例如 CPython 和 D 的實作)會讓這個問題更複雜。
  • 在 reference counting 下,所有記憶體用量都是必須的(除了存 counter 的 overhead 外);garbage collection 會讓程式的記憶體整體用量增加,因為垃圾沒有馬上被清掉。

mortoray.com

Let’s Build Reference Counting

難道我私底下是狂熱的 reference counting 信徒也要告訴你嗎?

說到 reference counting,我最喜歡的 implementation 就是 Objective-C runtime 了啊。那些說什麼 reference counting 效率不好問題一堆的人都該去看看它的實作再來說嘴,是你自己不會 optimise 做出來才那麼慢好嗎。(白眼

Mike Ash 在這篇舊文裡用一個簡化過的實作,大概解釋了 Apple 是怎麼設計他們的 reference counting 系統。推薦所有剛接觸 Objective-C、Swift、或者想了解 memory management 的人一讀。Comments 裡還釣到那時候一點也不有名的 Chris Lattner 出來吐槽他的實作和 ARC 不相容。XD

不過如果你就只照著這篇文章的做法,那麼你的系統要嘛只能手動記憶體管理(像沒有 ARC 的 Objective-C),要嘛肯定會很慢。Objective-C,尤其 ARC 出現後,實作了一些很瘋狂的最佳化,才能達到這麼優秀的效率。但這些最佳化雖然很猛,也難逃 leaky abstraction 法則,在一些 edge cases 裡會做錯事,即使最有經驗的人也可能中招。

mikeash.com

Why wind turbines have three blades

我總是會問「為什麼要這麼做」,但得到的回答總是「喔因為這本來就是這樣做」。沒人知道為什麼自己為什麼要這麼做。沒有人仔細想過商業上的事情。
— Steve Jobs

你有想過為什麼現代的螺旋槳和風力發電機都是三片扇葉嗎?其實在看這篇文章之前我是沒有啦。不過如果你去 Google,就會找到很多資料告訴你這是因為 shadow effect:當扇葉旋轉時,會帶動經過空間的空氣,進而影響到下一個扇葉對風的轉換效率。類似的概念也適用於風車間擺放的距離:如果放太近,風車就會互相干擾,讓發電效率降低。

但航空學家 Paul Lipps 相信重要的不是發電效率,而是發電量——即使效率較低,只要扇葉夠多、風車夠密,總能量就能贏。但他設計的系統打不過大廠,並沒有受到廣泛採用,然後⋯⋯就沒有然後了,他在 2011 年因肺癌過世,後無傳人。

把主題拉回軟體工程,這種莫名其妙的信仰也是俯拾皆是。最著名就是 Un*x 系統的 /bin/usr/bin/usr/local/bin 等路徑。有人會告訴你這是為了分類系統工具、distribution 工具、使用者工具、site 工具一堆有的沒的,但其實一開始 /usr 出現的原因只有一個:Thompson 和 Ritchie 的磁碟空間用完了,所以買了個新的掛在 /usr,並在裡面 duplicate 了 root directory 架構。之後的系統只是盲目照抄了這個 implementation detail,並自己為這個毫無道理的區別賦予理由,當作教條遵守。這種不問原因的教條代表少了可能性,可能也讓我們錯過了更好的選擇,誰知道。

我們需要更多 Paul Lipps。不是因為天才能看穿凡人無法克服的障礙(見標題文章的 Reddit 討論;很多人提出反論),而是沒有根據的盲目信仰需要被勇敢地挑戰。

cringely.com

I’ve begun giving ominous responses to catcallers.

教你怎麼應對路上亂搭訕的混蛋。以下節錄。

「你好漂亮」
「最危險的生物通常如此」

「你有男朋友嗎?」
「你知道螳螂的交配習性嗎?」

「我可以請你吃晚餐嗎?」
「好啊,最近的殯儀館在哪?」

「有男人了嗎?」
「我在衣櫥裡放了幾個當存糧。」

twitter.com

@yhsiang

Designing Great UIs for Progressive Web Apps

三個 Progressive Web UX 的關鍵

  1. 永遠要在真實設備上做測試

    可以利用 chrome remote debugging

  2. 從 Native apps 學習 UX

    忘記你所有的 web design 知識,想像你在寫 native app。可以透過 Dribbble 找靈感或者多看一下 Material Design 強化 UI 相關的知識。

  3. 使用查核清單

    作者列了十一項建議,從畫面轉移到字型都有需要注意的地方,有興趣的人再點進去看。

medium.com

Building Resizeable Components with Relative CSS Units

作者示範了許多 responsive 的例子。 利用 % 和 em,讓你的 UI 元件成比例,就可以做到動態調整的元件。

結論

  • 使用 px 作為尺寸單位,會難以維護。
  • 使用 em 可以讓所有事情都跟著 font-size 成比例。
  • font-size 使用 px 會造成不好的 accessibility,因為使用者可能會改預設的字型大小。

css-tricks.com

So You Want to be a Functional Programmer (Part 1)

近來 Functional Programming 日漸盛行。

還在擔心 FP 只屬於理論派的朋友們,可以看看這一篇。就像李連杰的張無忌學太極拳一樣,面對 FP 就是把你過去所有學到的事情都忘掉,你就成功了一半。

Part 1 指出了 FP 裡面很重要的兩件事情,Purity 跟 Immutability。 Purity 就是指所有 function 都是 pure function,簡單說就是 stateless。 Immutability 就是所有的變數都是不可變,也就是 FP 裡面其實沒有變數的概念。

對 FP 有興趣的人可以繼續看 Part 2

medium.com

When Card UI Design Doesn’t Work

因為 Material Design 的關係,卡片式的 UI 也越來越流行。

作者用了許多例子和熱區比較告訴你,使用者真正關心的資訊。

卡片式 UI 比較不建議用在,使用者不需要比較圖片或文字。

theuxblog.com

Why Use Flow?

簡單的介紹了型別系統和比較強型別及弱型別和靜態型別和動態型別的差異。

最後再用幾個簡單的例子介紹 flow 怎麼幫助你檢查錯誤。

如果無法轉換到 typescript 的朋友,或許 flow 可以嘗試看看。

aria.ai

工作機會

Python Web Developer at StreetVoice (台北、北京、上海)

開發及維護 StreetVoice 旗下相關網站。

意者歡迎來信:tzangms@streetvoice.com

streetvoice.com


This RSS feed is published on http://weekly.codetengu.com/. You can also subscribe via email.

CodeTengu Weekly 碼天狗週刊 - Issue 61 大家都喜歡高測試覆蓋率,只是剛好大家都討厭寫測試 - Sep 26th 2016

$
0
0

Hello World

CodeTengu Weekly 碼天狗週刊

CodeTengu Weekly 會在 GMT+8 時區的每個禮拜一早上 10:00 出刊,每一期會從目前的 curator 名單中選出三位來負責當期的內容,每個 curator 各自負責不同的領域。如果你在這一期沒有看到自已感興趣的東西,說不定下一期就會有了。你也可以瀏覽一下前幾期的內容

以下是目前的 curator 陣容:

大家也可以關注我們的 FacebookTwitterGitHub微博,有很多 Weekly 看不到的內容。有任何建議或疑問也可以來 Gitter 聊聊,歡迎亂入 👺

致力於解決開發者之間的資訊不對稱

@saiday

Testing, for people who hate testing

這一篇文章的目標族群是不喜歡寫測試的人,內容涵蓋你討厭測試的原因跟改善的方法、你應該對什麼樣的東西做測試、測試的道理。

我覺得 Hating testing less 這個段落寫得還不錯。

從這個段落做延伸,很多人在測試這件事上就是卡在連第一步都啟動不了,覺得值得測試的 module 完全是一個很難寫測試的狀態,說要測那些比較容易被測試的 module 嘛,卻又覺得測它一點意義都沒有。
我會覺得第一個測試從你覺得重要的 module 開始會比較好,即便要改寫的東西很多,但也因此才能比較好地感受測試的方法、道理跟好處。

工作了好幾年,總覺得習慣寫測試的工程師的程式風格大概就是一種樣子,而不習慣寫測試的工程師們卻有各式各樣的程式風格。

以寫不寫測試來評斷一個軟體工程師的優劣是不精準的,但我相信好的工程師都可以掌握測試帶來的優點跟影響。

PS. 王垠前陣子也寫了一篇批判測試形式主義的文章 测试的道理,風格還是一如往常地激烈,當然所有的形式主義都應該被討厭,但還是有很多人可以把測試這個工具發揮地很好的。

eev.ee

Immutable models and data consistency in our iOS App

Pinterest 分享他們將 iOS app 重新設計成 immutable models (entities) 的經驗。
主要動機是想要 models 可以 thread safe。

文章也揭露他們在 API response 跟 model initialization 之中還擋了一層 model cache,這樣的優點是可以從多個都不完整的 API response 合成出一個包含全部最新資料的 model。

重新設計後得到的 immutability object 也影響以往他們是用 KVO 來處理資料的更新,現在得改用 NSNotificationCenter 來發送特定 model 需要更新的 event。

PS. 在 app 擋一層 persistence layer 可以讓 remote API 的設計更有彈性,可以像 Pinterest 一樣塞到 cache 裡,或者是 app 自己維護一份 client 的 DB。

pinterest.com

openURL Deprecated in iOS10

iOS 9 開始,我們就必須要把 app 會使用到的所有 openURL: 的 scheme 加到白名單裡面,關於這件事,可以參考一年前的這篇 Quick Take on iOS 9 URL Scheme Changes

而這次 iOS 10 更是直接棄用了 openURL: 改以非同步的 openURL:options:completionHandler: 代替。
相信這個改動會影響大多數 iOS 的開發者。

useyourloaf.com

Make your build.gradle great again

一些 build.gradle 的小技巧,列了一些可以透過 build.gradle 處理那些能在 build time 做的事情、將那些獨立的 task 拆成不同的 scripts 再用 apply 讓主要的 build.gradle 保持精簡跟閱讀性。

有一些比較有意思的技巧:

  • Android library 庫用 jcenter 會比 mavenCentral 來得反應速度更快,作者建議大家唯一使用 jcenter
  • 如果 app 的 minSdkVersion 小於 21,可以只在 debug 的時候將 minSdkVersion 指到 21,這是 build tools 優化的一個 API level 分水嶺,可以讓 build 的速度變快

medium.com

拆轮子系列:拆 RxJava

我用過不少種的 Reactive framework,但其實一直都不明白它從 Observable 開始到我最喜歡的 onNext 中間是怎麼設計的,這篇文章對我來說是一個很好的觀念引導。

作者從最間單的 Observable.just().subscribe() 開始觀察 justsubscribe 的實作,再慢慢加入 mapobserveOnsubscribeOn

piasy.com

@kako0507

Is Your JavaScript Function Actually Pure?

本篇文章探討 JavaScript 的 Purity 、 Referential Transparency ,最簡單的解釋方式就是,將同樣的參數給同個 function 或 expression 可以保證獲得相同結果。 文內舉了一個簡單的 sum 例子探討該 function 內的行為是 pure 或 impure ,最後的答案是不確定的,必須依據 runtime 的行為,而大部分人之所以認為該例子是 pure 的,是因為對該 function 有了一些假設(如 sum 是用來加總數字的,其餘參照內文),而 functional programming 和 JavaScript 相比的好處就是讓你很容易把這些假設變成限制,進而讓行為更可預測。

staltz.com

You Might Not Need Redux

學習 Redux 前可以先評估自己是否真的需要用到這樣的 framework ,在使用 Redux 時有很多限制:

  • 使用 plain objects 或 arrays 來組成 application state
  • 使用 plain objects 來描述 state change
  • 處理程式邏輯和 state change 都必須透過 pure functions

不過不論是否使用 React ,上面這些限制都不是必要的。 如果你剛接觸 React , 應該先去搞懂 think in React ,等真的需要了,再來使用 Redux。

然而就算你沒有使用 Redux ,你也可以自己將它的精神實作出來, Redux 把「發生了什麼」與「怎麼發生的」完整的 decouple ,但每次都需要這樣做嗎?或許應該自己先權衡利弊。

medium.com

Descartes, Berkeley and Functional Reactive Programming

本篇文章從兩個西洋哲學家的理念,來探討 functional reactive programming,一開始先從一個思想實驗轉換成兩種不同的程式實作,再和 René DescartesGeorge Berkeley 的哲理一一對應,算是一個有趣的(?)切入點,有興趣可以看看。

freecodecamp.com

@kkdai

我的社群之路: 參加,參與,受到啟發與啟發別人的道路

又到了 Curator 自肥時間. 來分享一下我的研討會與社群心得給大家.

在參與研討會的演講中,其實我們會遇到很多熱情的讀者.有的甚至會來感謝講者,不過其實身為講者受到這些人的感謝.自己往往感謝最多.

很多時候,當你啟發別人的時候.其實,最受到啟發的將會是你自己.

evanlin.com

Go + Docker = ♥

Docker 界的大大 jpetazzo 寫了篇講解如何透過 Docker 而不安裝 Golang 的方式來編譯,執行甚至是跨平台編譯的相關指令. 但是有些地方需要注意:

  1. cgo 與 net : 使用 Docker-Golang 來編譯與執行 Golang 程式碼,需要注意到是否有使用到 netcgo 的部分,如果有你的 base image 可能要換成 from debian 雖然會比較大,但是就比較不會有平台上的問題.
  2. 關於使用 ssl : 處理 SSL certificate 一直都是很麻煩的事情,這裡建議透過 alpine 來安裝 root certificate
FROM alpine:3.4
RUN apk add --no-cache ca-certificates apache2-utils

github.io

gravitational/teleconsole: UNIX shell broadcasting tool

類似 tmate 有自己帶網路伺服器的 SSH console sharing 小工具.

透過一個自己建立的 SSH Public 伺服器,甚至可以提供防火牆內的使用者來分享自己的終端器介面.

此外,補充一下 原來不需要 tmate , tmux 跟 screen 就可以。

github.com

使用 gofmt 與 golint 將 snake_case 換成 camelCase

由於 Golang 還算新,所以許多人原本都是從 java 或是 python 來學 GO . 就容易在程式碼裡面看出一些蛛絲馬跡 ( 使用 python 的 snake_case 或是 使用 foo().bar().do() 這樣類似的用法.

這個工具可以幫你把 GO 程式碼裡面所有的 python snake_case 轉換成 camelCase.

golint |
   awk '/should be/{printf("gofmt -w -r %c%s -> %s%c .\n", 39, $9, $12, 39)}' |
   sh

github.com

[Podcast] Rust with Steve Klabnik

Podcast 分享 Software Engineer Daily Podcast: 由 Steve Klabnik 介紹 Rust 透過淺顯易懂的方式來介紹 Rust ,並且介紹三大 Goal:

  • Safety
  • Speed
  • Concurrency

如果你還在觀看 Rust ,針對以下三個角色講者也提出一些 Rust 會吸引你的地方:

  • 如果你是 C/C++ 的使用者
  • 如果你是 FP 的使用者
  • 如果你是 Web App 的使用者 ( Python/Ruby)

並且有介紹為何 Rust 沒有 GC 與 使用 LLVM 的優點,也有介紹到 LLVM 與其優點. 蠻適合新手聽聽看

雖然本人是熱愛 Golang 的,但是 Rust 的許多優點也是我們要好好重視的.

延伸閱讀: 王垠: 对 Rust 语言的分析

softwareengineeringdaily.com

Random Cool Stuff

fogleman/primitive: Reproducing images with geometric primitives.

這是一個用 Go 寫出來的工具,用 geometric primitives 來繪製輸入的圖像,效果蠻好的。

可以研究他的演算法或是直接拿來做一些圖片的效果。 它有一個 Twitter 帳號 @PrimitivePic 每 30 分鐘會上傳一張作品。

@saiday 提供

github.com


This RSS feed is published on http://weekly.codetengu.com/. You can also subscribe via email.

CodeTengu Weekly 碼天狗週刊 - Issue 62 就算有九個女人也沒辦法在一個月內就讓孩子出生 - Oct 3rd 2016

$
0
0

Hello World

CodeTengu Weekly 碼天狗週刊

CodeTengu Weekly 會在 GMT+8 時區的每個禮拜一早上 10:00 出刊,每一期會從目前的 curator 名單中選出三位來負責當期的內容,每個 curator 各自負責不同的領域。如果你在這一期沒有看到自已感興趣的東西,說不定下一期就會有了。你也可以瀏覽一下前幾期的內容

以下是目前的 curator 陣容:

大家也可以關注我們的 FacebookTwitterGitHub微博,有很多 Weekly 看不到的內容。有任何建議或疑問也可以來 Gitter 聊聊,歡迎亂入 👺

致力於解決開發者之間的資訊不對稱

@fukuball

林軒田教授機器學習技法 Machine Learning Techniques 第 4 講學習筆記

Machine Learning:中級

前三講介紹了 SVM 的基礎及 Kernel 的概念,但這些 SVM 模型都是「Hard Margin 」,這種模型在訓練時會將所有資料點都完美分類,也因此非常容易發生 Overfitting,所以平常大家所使用市面上的 SVM 程式工具其實都不會是 Hard Margin SVM,而是可以容許一些小錯誤的「Soft Margin」SVM。

這一講將介紹如何將原本的演算法推導到 Soft Margin SVM,基本上學完這一講,SVM 分類模型的基礎知識就已經學了大部份了~

fukuball.com

How a Japanese cucumber farmer is using deep learning and TensorFlow - 使用 Deep Learning 挑選小黃瓜案例分享

Machine Learning:中級

大家一定都知道愛之味牛奶花生會用電腦來挑花生,但大家知道怎麼自己做一個嗎?這是一個日本工程師使用 Google TensorFlow 教電腦挑小黃瓜的真實案例,看到這樣的真實故事,真的也想自己動手做一個來玩玩看啊!

google.com

Bay Area Deep Learning School

Machine Learning:中級

上週生日從臉友的祝福中得知這個活動,講者都是 Machine Learning 相關領域有名的學者,雖然活動已經結束,但兩天的活動都有影片直播也都上傳到 Youtube 了,讓我為在苦命鬼島的大家獻上灣區傳送門

bayareadlschool.org

The art of using Repositories in Laravel 5.3 - Laravel Repository 模式與快取

PHP、Laravel:中級

有在寫 Laravel 的人應該都知道在取用資料庫資料時推薦使用 Repository 模式來控管資料取用邏輯,因為將資料庫邏輯都寫在 Model 的話,可能會造成 Model 的肥大而難以維護,所以建議將相關的資料庫邏輯封裝在不同的 Repository 方便中大型專案維護。

本篇文章便是以 Laravel Repository 模式為切入點,但重點是介紹如何在這樣的模式將資料快取起來,當然我們都可以自己寫快取邏輯,畢竟 Repository 已經是一層封裝了,要寫快取也會比較容易一些,但永遠別忘了可能已經有人寫好了相同的功能,所以作者介紹了 Rinvex Repository 這個套件,可以很直覺的在 Repository 模式將資料快取起來,而且 Cache Invalidate 也都會自動幫忙做好喔!這可就幫忙解決了電腦科學的最大難題之一耶!

omranic.com

如何使用 Null Object 模式?

PHP、Laravel、Design Pattern:初級

初學者要成為進階者,就該學一些 Design Pattern。Null Object 模式算是一個比較小的 Design Pattern,但卻還蠻常見也蠻好用的,學好這個 Pattern 就可以拿來說嘴自己會 Design Pattern 了(如果不怕被笑的話)~

oomusou.io

@mingderwang

Logspout 與 go-extpoints

在研究 Logspout 這個可以把 Docker Container 的 logs 導出來的 原始碼 時, 發現它使用 go-extpoints 這個 Go generator 來實現擴充模組的功能。它也利用 Dockerfile ONBUILD 的特性, 讓使用者非常容易的抽換模組, 以這 custom build 為例, 技巧的在不安裝 go 的環境下, 重新產生客製化 logspout 的 docker image。

gliderlabs.com

我在看哪些 YouTube 節目

突然想跟大家分享,我都訂閱哪些 YouTube 在看。它們成為我生活的一部份,也是我快速學習新知識和技術的方法之一。

CodeTengu Weekly

Security Enforcement of the Microservices

如何強化微服務的安全性,變得日趨重要。原本以為把傳統 Monolithic 程式,改用 Microservices 方式來寫,事情會變簡化,更容易橫向擴充,程式更容易重構。沒想到服務數量變多,要處理安全性問題,就變得更加複雜。所以挑選對的安全規範或正確的使用 security framework 和 API 的管理方法,反而成為改用微型服務成敗的關鍵所在。

本文章介紹了常用的三種方法,Interceptor,Web Container,以及 Api Gateway。在不同的 frameworks 裡,基本上會提供其中一種方法,而不少公司也選用前兩種,但第三種方法卻是作者最推薦的,也幾乎成為業界的標準。選擇一套最適當的 API 管理平台,來管理你所有的服務,也比較不會被 framework 或程式語言綁死,未來即使使用 OpenShift 或 Kubernetes 來部署,也能繼續延用下去。

github.io

@chiahsien

Introducing the Realm Mobile Platform: Realtime Sync Plus Fully Open Source Database

iOS 開發過程中可以使用的資料庫種類始終是一種百花齊放的狀態,在這麼多種選擇當中,Realm 一直擁有非常高的人氣。之前它的資料庫核心的程式碼因為某些原因所以遲遲無法開源,就在最近它終於解禁,Realm 變成完全開源了。與此同時,它還推出 Realm Mobile Platform,號稱可以讓開發者不費力氣就擁有實時同步的功能(一定要看它的 demo 影片,超酷的),看來在 Parse 收掉之後我們又多了一個新選擇了!

realm.io

HubFramework: Spotify’s component-driven UI framework for iOS

Spotify 最近這幾天釋出了它們的 component-driven UI framework,看起來是個非常酷的東西,可以讓開發者非常有彈性的動態調整 UI layout。想了解更多的話,可以看看它們團隊的 iOS Lead 前一陣子的這個 talk

github.com

Swift 3.0 Released!

Swift 3.0 終於在眾多貢獻者同心協力下,正式推出 3.0 版本了,不得不承認這真是近年來開源界的一個重要里程碑。為了讓各位開發者儘快上手,官方也提供了升級指南,但難免還是有些坑要踩,例如這裡就有人分享了一些經驗。另外,命名方式在 Swift 3 也有了大幅度的改變,你有想過 Delegate methods 要怎麼命名才符合 Swift 3 風格嗎?

swift.org

Fatal Error by Soroush Khanlou & Chris Dzombak on iTunes

這是最近我很喜歡的一檔 Podcast,主持人是 Soroush KhanlouChris Dzombak,他們的更新速度大約是兩週一次。我喜歡他們的原因是他們每次都會針對一個 iOS 開發相關的主題來討論,而且他們很認真在討論,不會在那邊東拉西扯一堆有的沒的,也不會閒聊耗時間。

順帶一提,我用來聽 Podcast 的 app 是 Overcast,它是免費的,也可以透過 IAP 捐錢給作者,我喜歡它的原因是因為它可以調整播放速度,同時還能盡量保持人聲聽起來很自然,這技術真的很棒!

apple.com

Awesome iOS | LibHunt

這一個網站收集了許多 iOS 的函式庫,最棒的是它還將這些函式庫分門別類,並且還告訴你各分類裡頭比較熱門的是哪幾個函式庫,實在是工程師的好朋友,建議你立刻將它加到書籤!

libhunt.com

工作機會

Python Web Developer at StreetVoice (台北、北京、上海)

開發及維護 StreetVoice 旗下相關網站。

意者歡迎來信:tzangms@streetvoice.com

streetvoice.com

Python backend, QA, and iOS engineers at iCHEF

iCHEF 專注於提供簡單有效的 POS App,以提昇小餐廳的經營績效,客戶人數每年以倍數成長。現在 iCHEF 正在找 Python backend / QA / iOS 工程師,歡迎各路高手一起來打造最好用的 POS App!意者請將履歷寄到 hr@ichef.com.tw

104.com.tw

Random Cool Stuff

軟體開發災情現場

那些一言難盡的工程師日常。漫畫主角就是你,不信看看就知道了~

@fukuball 分享。

gitbooks.io


This RSS feed is published on http://weekly.codetengu.com/. You can also subscribe via email.

Viewing all 109 articles
Browse latest View live