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

CodeTengu Weekly 碼天狗週刊 - Issue 68 這個人老是在寫程式,是不是有 bin 啊? - Nov 14th 2016

$
0
0

Hello World

CodeTengu Weekly 碼天狗週刊

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

以下是目前的 curator 陣容:

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

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

@saiday

Programming Principles

文章裡列了一些程式設計的原則跟模式。 (KISS, YAGNI, ...) 每條原則下會有概略的介紹跟「為什麼」、「如何做」,篇幅精簡非常值得一滑。

這些軟體開發原則就像是口訣一樣,是不應該脫離實作的,有些比較抽象的東西過一陣子再看會有新的體悟。 像楊過就很痛恨趙志敬只背口訣,不授武功的教法

除非都是自己一個人寫程式,不需要討論也不參與其他人的專案開發,那也許真的不需要確切地知道這些名詞,會用就好。否則適當使用這些軟體開發裡大家都有共識的名詞,可以讓我們省下很多溝通的成本也更精確,人生苦短,不用再因為一些已經存在的問題再創造新的問題了。

github.io

Popping into UIViewPropertyAnimator

iOS 10 的 UIViewPropertyAnimator 是一個重要的更新,新的 UIKit 動畫解決方案,用來取代大家習慣的那個 animate(withDuration... API。

以往在 iOS 需要做到暫停、回復及透過外部狀態控制進度的動畫的時候,只有兩種選擇,官方的 Core Animation 或是 Facebook 的 POP,以後就可以把這些情況的動畫交給 UIViewPropertyAnimator 做了。

推薦大家可以看一下內文,裡面對 Core Animation 及 POP 有簡短且精要介紹,再更複雜一些的動畫,還是得用它們不可。

holko.pl

Understanding code signing for iOS apps

對 iOS 開發者來說,第一次碰到這個複雜的 Code Signing 流程時一定都被搞得一頭霧水,但反正亂弄一通也就解決了,下次再碰到的時候可能是設定 CI 環境、換電腦開發,甚至是憑證到期時。

雖然每次胡搞瞎搞其實也不會有什麼嚴重的不可逆的後果,頂多就是為團隊製造了一些麻煩,但了解 Code Signing 還是蠻必要的啦。

如果你對 Code Signing 的運作沒有完全了解的話,這篇講得非常的詳細,也包含了一些大家對於 Code Signing 常見的問題跟回答。

nodesagency.com

400% faster layouts with Anko – Medium

Anko 是一個用 Kotlin 寫的函式庫,主要目的是要取代在 Android 上的 XML layout 系統。

比起 XML,用程式碼產生視覺元件當然會比較快,畢竟 XML 是在 runtime 才被解析,所以 findViewById 後還需要再指定型別,這其實也很不安全,用 Anko 的話就沒有這個問題了。 再加上我覺得程式碼比起 XML 更適合在版本控制上看 diff。

而 Anko 是用 Kotlin 寫的,大家也知道 Kotlin 是 IntelliJ 開發的語言,所以 Android Studio 裝個 Anko Preview Plugin 就可以在 IDE 直接預覽。

其實 Kotlin 跟 Java 的整合使用一直都沒有什麼問題,從 Anko 來導入 Kotlin 到既有專案是很適合的選擇。

medium.com

Finally understanding how references work in Android and Java

If you are an Android developer and you do not use WeakReferences, you have a problem.

有一個朋友對作者說了這句話,促使他寫下這篇文。

我非常同意記憶體管理的重要性,它的影響相當深遠。
當一個專案不重視記憶體管理,在導入 Rx 或是 EventBus 這類可以 observe, subscribe 的 framework 之後,你就可能得開始 debug 那些因為 leak 造成的怪事,完全不只是「我記憶體很大我不怕」這麼簡單的事情而已。

文章介紹了四種 reference type:

  • strong
  • weak
  • soft
  • phantom

其實這是我第一次聽到 phantom reference~

medium.com

@uranusjr

Awesome Falsehood: Curated list of falsehoods programmers believe in.

整理了對於各種事情常見的錯誤假設,程式設計上這些錯誤假設帶來的問題,以及解法。

因為每個人的成長環境使然,我們對這個世界總是有一些根據經驗得來的假設;但是當系統被放到比較大的 scale,例如原本自己用的程式要給公司用、公司內部的程式要公開、本地市場要往外拓展、台灣市場的產品要拿給全世界等等,就會發現原本的假設開始不成立。根據我自己的經驗,常見的 falsehood 包括:

  • 時區。因為台灣只有一個時區、領土很小、也沒有日光節約時間,台灣人對於時差、時間調整、跨日等方面的知識很鬆散,通常需要砍掉重練。
  • 日期。台灣人習慣 yyyy/mm/dd 格式,但世界上絕大多數地方的慣用格式都不是這樣。「噢,我知道!應該寫成 mm/dd yyyy 對吧!」不對喔。請愛用 ISO-8601。
  • 編碼。英文文本一定可以用 ASCII 編碼?。只要把 UTF-16 放到 array 裡,就可以 O(1) 算出某個字的位置,以及字串長度?。(提示:你慣用的程式語言與開發框架的字串實作是錯的。除非你用 Swift,而且從來不碰 NSString API。)
  • 人名。中文人名的格式非常固定,所以常見到許多人對人名有不合理的假設,例如人一定有姓名、哪個要放在前面、以及應該會有合理的長度。但這其實在台灣就不適用了,更何況世界這麼大。我現在做系統都放棄治療了,只給使用者一個不限長度的 text input。

好像太長了,先到這裡。:p 總之建議至少先把引文裡的連結全部讀過一次,你的世界會變得寬廣。

順帶一提,我們的主編大大 @vinta 可是 Awesome 文章類型的始作俑者創始人呢。

github.com

Parsing JSON is a Minefield

說到 falsehood,我在網頁開發常遇到一個說法:「JSON 是 JavaScript 的子集」。然後就會有人利用這個特性,寫出類似這樣的程式。這是錯的。JSON 不是 JavaScript 的子集,因為它們的 key 規則不相容。

喔,不過這不是你的錯,錯的是這個世界 JSON spec。因為 JSON spec 本身的設計問題,JSON parser 實作需要處理非常多 edge cases。作者根據 spec 整理了一套 test suite 測試市面上主流的 JSON parsers,並整理它們的相容性。

Spoiler alert:結果很令人哀傷。

對了,前面那個問題的「正確」解法是這樣:

<script id="dumpedJson" type="application/json>{{ dumped_json|safe }}</script>
<script>
var data = JSON.parse(document.getElementById('dumpedJson').textContent);
</script>

seriot.ch

A Better Pip Workflow™

Pip 的 requirements.txt 要不要明確指定版本號,一向都是意見分歧的話題。Kenneth 提出了一個解決方案:你應該有兩個 requirements 檔,一個盡可能讓版本號寬鬆,提供良好的 dependency management;一個指定明確版本號,用來保證 deployment 的穩定性。

這是個極好的主意。一個檔案不夠,那你有沒有用兩個呢?根本是突破盲點的思考啊!Kenneth 94 帥戀愛惹 >///< 不過如果你有用過 Bundler,或者受它啟發的套件管理工具如 CocoapodsCarthage,其實這根本是一樣的邏輯 —— Gemfile 使用寬鬆的版本號,但執行 bundler install 後會產生 Gemfile.lock,其中包含明確的本地函式庫版本,方便重建開發環境。只是 Pip 沒有直接提供這個行為,所以我們得手動作。

但這個 workflow 想法還是很聰明啊。後來也有人提出了一些變種,例如把不 pin 版本號的檔案叫做 requirements.in,或有 pin 版本號的稱作 requirements.lock 等等,不過基本想法就是這樣。

至於有 pin 版本號的檔案該不該進版本控制,就是另一個話題了。這在 Bundler 與 Cocoapods 也是長久爭論的話題,事實上也滿試狀況而定,所以就看看雙方意見,自己選擇覺得有理的一方決定吧。

kennethreitz.org

The Long, Remarkable History of the GIF

GIF。讓人又愛又恨的 GIF。在 2000 年前統治網路,因為 Flash 而淡出,卻又在 2010 年後再度統治網路的 GIF。如果你像我一向從小就泡在網路上(或者比我大很多歲),說不定還會記得那個傳說中的 Burn All GIFs Day。這篇文章從技術開始,順著時間軸一路說出 GIF 的故事,以及圍繞著它的網際網路故事。同時是篇優秀的講古文、鄉愁文、與技術文。

popularmechanics.com

PyCon Taiwan 2017 志工招募

明年的 PyCon Taiwan 也開始籌備啦!!歡迎大家一起來幫忙。這次多了個 task 想做 mobile apps,如果有這方面專長的就過來吧我們真的很需要你!

我們預計會和 PyCon JP 的人合作,先 fork 他們的專案來改,然後加上中文翻譯。之後應該會整合回去,不過還沒有完整的計畫。iOS 用 Swift 3 (!),Android 是 Java。另外 mobile app 使用的資料庫會與 PyCon CZ 的專案整合使用 Firebase,所以也需要做後端的人幫忙,我們用 Django

有興趣的人(不論 app 或其他組別)請填招募表格,或者直接 emailTwitterFacebook 聯絡我。

CodeTengu Weekly

@yhsiang

GitLab, Consumer Driven Contracts, Helm and Kubernetes

這篇在講用多種技術來實現 CI/CD,如果剛好有在用 gitlab 和 kubernetes 可以花點時間研究一下文章裡面的技術。

除了 gitlab 跟 kubernetes 以外,還有用到 traefik 作為 proxy,helm 來管理 Kubernetes。另外,Pact 也算一個很有趣的技術,Consumer Driven Contracts Testing,幫你做兩個 service 之間的 integration test。正在煩惱 microservice 間的 integration test,或許可以參考看看 Pact。

medium.com

Instant Messaging at LinkedIn: Scaling to Hundreds of Thousands of Persistent Connections on One Machine

Linkedin 如何實現 Instant Messaging 的技術,他們選用了 Server-sent events,搭配 Akka 和 Play framework。

文章後半很詳敘的敘述所遇到的限制跟如何調整,對 JVM 或機器 tuning 有興趣的人建議可以深入研究。

linkedin.com

Single Page Web Apps in Elm

這篇著墨在 Client side routing,在 Elm 裡面可以使用 elm-lang/navigation 這個 package。

Elm 在 navigation 上面的設計非常簡潔,例如將 route path 轉成 List String。接著 view function 可以對應 List String 產生相對的 Html Msg。

等於 url 的 parse 跟 update 過程都可以轉成 Elm architecture 的一部分,讓 routing 變得相當自然。

becoming-functional.com

How to Use Animation to Improve UX

此篇講述如何利用動畫來增進使用者體驗,像是不要只給一個 loading 的轉盤 icon。可以放畫面的框架作為動畫,讓使用者更能掌握畫面的變動,而不單單只是等待。

描述更多狀態的改變,而不是單單地跳頁,像是可以移動 Menu bar 的 highlight 位置,做更多的畫面 scrolling。讓使用者更了解畫面配置或 UI 的 flow。

當事情發生錯誤,或使用者完成某些任務的時候,透過動畫可以讓使用者更清楚知道那裡有問題。

uxplanet.org

A Visual Guide to State in React

算是一篇 React 入門的文章,如果對於 React state 還不熟悉的朋友可以研究看看。

非常生動地將 React state 改變的過程畫出來給你看。

也有提供簡單的 Code 供大家參考。

daveceddia.com

工作機會

Python Web Developer at StreetVoice

開發與維護 StreetVoice 旗下相關網站,開發流程包含 Code Review、CI 與自動化部署,團隊內有專職的 DevOps 和前端工程師。主要技術棧:Python、Django、MySQL、Redis、Elasticsearch、Ansible 和 AWS。

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

streetvoice.com

PHP 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.


Viewing all articles
Browse latest Browse all 109

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>