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

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.


Viewing all articles
Browse latest Browse all 109

Trending Articles



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