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

CodeTengu Weekly 碼天狗週刊 - Issue 63 雙十特刊:♫ PPAP! I have a China~ I have a Taiwan~ Ahhh, Republic-of-China-Taiwan-Chinese-Taipei! - Oct 10th 2016

$
0
0

Hello World

CodeTengu Weekly 碼天狗週刊

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

以下是目前的 curator 陣容:

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

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

@vinta

Basic Housekeeping for MySQL Indexes

Percona Database Performance Blog 科普了幾個找出 MySQL 中無用的、重複的或欄位順序有問題的 indexes 的方法。除了透過 MySQL 的 sys schema 之外,還有大家的好朋友 Percona Toolkit,不只 pt-duplicate-key-checker,還有其他像是 pt-query-digestpt-online-schema-changept-archiver 都是好東西啊。

percona.com

Speed up Python and Node.js builds on Travis CI

因為前陣子都在重構公司的專案,清理了不少陳年老碼和前朝遺表,也順道補了不少測試(目前測試覆蓋率達到 83% 啦)。這時候就覺得跑 CI 的速度不夠快了,後來想到其實可以在 Travis CI 上把整個 site-packagesnode_modules 目錄都 cache 起來,這樣一來,跑 pip installnpm install 的時間加起來從一百多秒變成只要 5 秒,開心。

另外再跟大家分享一個好東西:django-slow-tests。把這個 Django app 設為 test runner,它就會在跑完所有的 test cases 之後自動幫你列出前 n 個最慢的測試。正所謂射人先射馬、擒賊先擒王、罵人先罵娘,要改善測試的執行速度,當然是從最慢的測試下手啦!

延伸閱讀:

vinta.ws

HTML5 Form Validation Examples

只要有使用者輸入的地方,就少不了要驗證資料。這篇文章就介紹了不少 HTML5 新增的有關 validation 的 <input> 屬性和 CSS pseudo-classes。除了大家應該都已經在用的 required 和各種新的 <input> 類型之外,還有可以直接指定 regular expression 的 pattern 屬性。也示範了如何透過 CSS 做到簡單的 valid 和 invalid 效果,畢竟能使用 HTML/CSS 解决的问题就不要使用 JavaScript。當然前提是瀏覽器有支援,比如說 Safari,它雖然支援 pattern 屬性,但是如果輸入的資料不符合指定的格式,它還是會讓使用者提交表單... OK,好。

不過,當你需要更複雜的 validation 時,就可以試試所謂的 Object Schema Validation 了。例如 Joi,它的 API 用起來真的舒服,可惜目前只支援 Node.js。至於瀏覽器環境可能可以用 Yup 擋一擋,雖然我還沒用過 Yup。

延伸閱讀:

the-art-of-web.com

Tuning AWS SQS Job Queues

StreetVoice 我們有好幾個專案都是用 Amazon SQS 來當 Celery 的 broker,用了很長一段時間都沒出過什麼大問題(不過當然也是有在某個我們都沒發現的地方其實出了錯的可能性,也或許在立下了「XXX 已經很久都沒發生過問題了」這樣的死亡 flag 之後常常那個 XXX 就會很神奇地壞掉),所以一直沒什麼機會仔細研究 Amazon SQS 的各項配置和使用情境(慚愧),剛好看到這篇作者在講他們針對 Amazon SQS 的 debug 過程,應該是挺有參考價值的。

simontaranto.com

Founder's Guide to Automation

雖然 CodeTengu 基本上是個越多人訂閱就越虧錢的 project(超過 5000 人訂閱的話每個月要噴 129 美金,而現在已經四千多人啦),不過因為虛榮心作祟,三不五時也是會想著還可以怎麼推廣。正好就看到這篇文章,忍不住想知道國外的 startup 是如何自動化 Marketing、Social Media 和 Sales 等任務,不過讀完才發現,他們竟然把買廣告和 SEO 也稱為自動化(雖然也不能說不對啦),果然所謂的 founder 講的話都不能盡信啊。不過裡頭提到的幾個服務我恰巧也有在用,例如目前 CodeTengu 在各個社交平台上的貼文就是透過 Buffer 發佈的。

說到自動化,我上禮拜為了把豆瓣上多餘的電影標籤刪掉,還特地用 CasperJS 寫了一支 script 還開了 remote debugging mode 用來輸入 captcha,完美體現了工程師的浪漫與過剩的生產力 ── 畢竟所謂的自動化就是花比手動操作還要多一倍的時間寫一支你這輩子可能只會跑一次的程式。

P.S. CasperJS 封裝了 PhantomJS 並加了一層更友善的 API,可以讓你用 JavaScript 操作一個 headless 的瀏覽器環境。有興趣的人可以看一下 Integrate with webpages using CasperJS。靠北的是,我寫完這個 script 之後就發現了另一套類似的工具叫 Nightmare,是用 Electron 寫成,還附帶了一個 Chrome 外掛可以「直接把你在 Chrome 裡的操作錄製下來變成 script」,幹。

P.S.2 雖然跟主題無關,但是看到 FundersClub 這個名字,就讓我想到以前讀過的伍迪艾倫的散文集「门萨的娼妓」(門薩 Mensa 是一個只有各地人口中智商最高的前百分之二的人才可以加入的同好會)裡面的一段話,大家感受一下。

fundersclub.com

@tzangms

How to successfully grow a code review culture

這份投影片是一份非常、非常好的 Code Review 指南啊!!!!

裡面提到的許多的建議, 都是我這幾年在 StreetVoice 推行 Code Review 幾年後所體認到的心得, 只是沒能把這些心得給寫下並分享出來, 不過看完這篇之後也強化了我先前對 Code Review 應該要怎麼做才好的認知。

例如, 下面這幾點是這幾年在 StreetVoice 推行 Code Review 這件事, 在這篇投影片也提到, 讓我最有感觸的事:

  • 要盡快 Review, 因為隔太久的話, 原本的發起人可能會因為時間太久而遺忘, 需要比較久的時間回想, 再來就是, 因為這功能被擺太久都沒上線, 久了就越不想去看, 發起人也會覺得氣餒。
  • 大的 PR 做到一半之前 ( 30% ~ 50% ) 就得先送 PR, 這樣除了可以讓 reviewer 知道你在做什麼, 如果方向、架構對不對, 可以提早修正, 然後把 PR 的 title prefix 一下 [WIP]
  • push commit 之前自己先 diff review 過, 自己也是 reviewer, 不要因為有人會做 Code Review 就把找問題的責任丟到別人身上
  • PR 來回討論太多次, 就離開電腦, 直接當面溝通

看來得趕快找時間把這份投影片寫一篇中文手冊讓內部使用才行啊 ...

slideshare.net

pre-commit by Yelp

這個 pre-commit 是 Yelp 所開放出來的「可維護的 pre-commit 框架」 簡單來說就是用 yaml 寫設定檔, 就可以方便地維護 pre commit hooks, 讓你的 team member 也可以透過簡單幾個指令便可以快速安裝、使用同一份 pre-commit hooks。

兩個禮拜前看到這個, 當時就很想試試, 後來則是因為發現一些 team member 還是會有一些基本的 coding style 的問題, 所以才認真開始研究 pre-commit 這個工具。

目前覺得真的很方便, 下禮拜要來正式強迫開發人員們開始採用。 只要格式不對, 便會沒辦法 commit, 需要把有問題的地方修正才能真正 commit, 從最根源的方式處理起, 我們的 code base 應該又會更棒了吧! 特別是用上了 autopep8-wrapper 這個外掛來自動修正格式了 (笑)

pre-commit.com

@hiroshiyui

Interview with Jim Hall of FreeDOS

這篇專訪了 FreeDOS 專案創始人 Jim Hall。對,是 FreeDOS 不是 FreeBSD,不要眼花看錯了,就是那個 DOS,已經成了某些不明究理的人對「提示字元」、「命令列介面」慣稱的那個 DOS。

即使到了 2016 年,仍有不少人透過 FreeDOS 或 DOSBox 運行那些換不掉的、捨不得丟掉的應用程式與遊戲(但是已經看不到有人還在用 OS/2 了…)。這篇專訪讓我覺得最發人深省的一點,就是他人說服了 Jim 讓 FreeDOS 保持「就是那個 DOS」,而不是引入各種酷炫夯的新特性,讓它成為一個「現代」的 OS。聽得進去這種「不冒進」意見的 Jim 也是不簡單。

畢竟,大家都看多了那種不斷想要給用戶帶來新意、證明自己還活躍著的產品團隊,不知不覺間把產品邯鄲學步弄得四不像,或是功能變得無比繁複、眼花撩亂。

opensource.com

Using GPG with Smart Cards

日前終於收到了千里迢迢、過鹹水而來的 Yubikey Neo,除了是因為在 COSCUP 2016 聽了「深入淺出 Google/Dropbox/GitHub 都採用的 FIDO U2F」這場啟發的興趣之外,另外就是看中這款可以當成 OpenPGP card 的緣故,算是目前最好買的 OpenPGP card 吧?我一直很想要有個 OpenPGP card,方便我跨環境使用 OpenPGP/GnuPG。

這篇就是講解如何設定、使用 OpenPGP card,寫得很清楚。

同場加映:Yubikey NEO 入手小计

jfry.me

Everything You Should Know About Progressive Web Apps

Progressive Web Apps (PWA) 讓網站(頁)長得像一個原生應用程式、用起來像一個原生應用程式,這篇文章算是 PWA 的懶人包,闡釋了 PWA 的特性。對用戶而言,PWA 增進了 UX,對開發者而言,PWA 減低了因為不同平台間的技術 stacks 差異,導致需多重投入開發資源的各種成本問題。

說實在的,很多行動 Apps 被使用的頻率極少,但是要用到時你又希望它隨傳隨到,總而言之,最好是「呼之即來,揮之即去」不要佔去手機寶貴的空間,這類的 Apps 其實更適合以 PWA 的形式滿足供需。

同場加映:Progressive Web App 會是未來趨勢嗎?

tutorialzine.com

Adaptive Layout

前陣子因為某電子書平台在台灣設點開業,於是我去下載了一本書嘗鮮,在 Twitter 上訐譙感嘆這本又是 PDF 原封不動直接搬上來,不知何時這些出版業者才會意識到「電子顯示設備不是一張有著固定大小的紙」這件事?中間還跟其他人有些爭執意見交換,我在意的點是「現有科技、技術就是要你們(出版業者)適應 box model, RWD 與 Adaptive Layout,而你們卻是貪圖自己方便、因循苟且、輕忽讀者的閱讀體驗!」

這個網站就是在講解 EPUB 規格當中的 Adaptive Layout

sorotokin.com

Rise From the Ashes — Incremental APIs With Phoenix

這篇講解了如何使用 terraform 讓 Phoenix 可以整合既有的 API,達成漸次過渡,是想要導入 Phoenix、又有不少 legacy code 包袱的產品團隊可以借鑒的一篇好文。

medium.com

Welcome, adventurer! — BEAM VM Wisdoms 1.0 documentation

這個網站整理了 BEAM VM 的相關知識,對於想要瞭解 BEAM 工作原理的人來說是很好的指引文件。

clau.se

Languages, and about languages, on the BEAM

除了 Erlang 以及近來能見度愈來愈受矚目的 Elixir 之外,其實還有一些基於 BEAM 的語言,這篇整理、羅列出這些語言。

github.com

Elixir Maze

一個以 Elixir 移植自 ruby-maze 的迷宮產生器。

一個有效(有解)的迷宮,需符合「不論效率,沿著單邊牆壁走,要能夠走到出口」的設計原理,觀察這個程式的算法設計(溫馨提示:從 lib/maze/maze.ex 這裡開始看),蠻有趣的。

同場加映:如果身处一个迷宫,且看不到出口和入口,且不可翻越迷宫墙。那么,怎样快速的离开迷宫? - 数学建模 - 知乎

github.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 64 奧卡姆剃刀法則:因為需要改的地方太多了,那就改天吧 - Oct 17th 2016

$
0
0

Hello World

CodeTengu Weekly 碼天狗週刊

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

以下是目前的 curator 陣容:

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

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

@uranusjr

Asynchronous Python

這篇文章簡單介紹了異步程式的概念,以及異步程式中的技術與 paradigms,並帶出許多常見的關鍵字,例如 greenlets、event loop、callbacks、coroutines 等等。

異步程式並不難,但它是許多過去技術的結合,所以我們在介紹它時,常會扯到太多相關的東西;沒有相關背景知識的人會因此卻不,因為一上來就聽不懂了。這篇文章很適合當起點。看完了大概還是不會寫異步程式,但可以藉此知道一些基礎知識,把學習曲線降低後,就不會被其他文章搞得昏頭轉向。

hackernoon.com

The decline of Stack Overflow

你看 Stack Overflow 嗎?這是個蠢問題,現在哪個寫程式的人不看 Stack Overflow。但你有在上面問過問題嗎?你有在上面解答過別人的問題嗎?

根據 2015 年六月的數據,Stack Overflow 目前有超過四十萬註冊使用者,以及將近十萬個問題。但根據 2013 年的研究,77% 的使用者只問過一個問題,65% 只回答過一個問題,只有 8% 使用者回答超過五個問題。這個參與數據對一般網站是非常糟糕的數據,作者認為代表 Stack Overflow 的衰敗。

就我自己的經驗,Stack Overflow 確實在許多方面有問題。它的 single sign-on 機制非常糟糕(雖然現在似乎修好了),新使用者登入之後的動線也非常不明確。即使你找到了可以回答的問題,Stack Overflow 的規則也會讓你難以完整、正確地回答,而容易被其他使用者搶快。重複的回答,即使更完整或更正確,只要速度輸人,就很容易得到負面評論、甚至 downvote。沒有得到 accepted 回答的舊問題也缺乏管理,很多問題其實早已有好的回答,但只要發問人沒有回來 accept,它們永遠都會維持 unanswered 狀態。

如果你想問問題,情況也不太好。站上已有的問題數量很容易讓 moderators 找到相似的舊問題,進而將你的問題提報為 duplicate——即使它們並不是。Stack Overflow 完全民主、公開、存粹只靠分數決定使用者權力的規則,讓 moderators 完全不需相關領域經驗,也可以審查所有文章。只要有規則,就會有玩弄規則的人。這兩個因素結合起來,使得 Stack Overflow 充斥著專業不足,又擁有過大權力、無法制衡的 privileged trolls

當然,Stack Overflow 仍然是非常成功的網站。他為我們帶來極大量、非常有用的資源,原文下面的留言有非常多的成功案例,許多有名氣的使用者也指出它在許多方面仍然做得非常好。這些都是真的,毫無疑問。最近新推出的文件功能也能夠活用這些零碎資源,組織成更有系統的知識。這也是好事。但它最原本的目的 ——問答網站——也似乎確實走到了瓶頸,那套 Atwood 引以為傲、從遊戲發想的完全公開、民主、有機、自治系統,在 scaling 上也顯現疲態,似乎需要重構。我們需要 Stack Overflow,過去如此,現在如此,未來也仍然如此。但它並非完美,仍然需要反省與改善。

hackernoon.com

A critical analysis of the iOS 10 lockscreen experience

iOS 10 最大的改變應該是 lock screen 吧,畢竟它是所有使用者最常看到的畫面。作者詳細分析了 iOS 9 與 10 裡 lock screen 的差別,並評價各種操作模式的優劣。幾個教訓:

  • 在可以水平捲動的視窗中加上水平滑動手勢不是個好主意。
  • 尼爾森啟發法告訴我們:
    • 好的錯誤訊息很重要,但以細心設計避免錯誤產生則更為優秀。
    • 使用者不應需要理解不同字詞、狀況、動作是否代表同一件事。
  • 在不同 z-index 中加上多餘的訊息,會導致過度複雜的概念模型。
  • 過少的視覺提示與標誌可能造成錯誤使用。

uxdesign.cc

Ruby vs Python, the Definitive FAQ

該選 Python 還是 Ruby?這絕對是我看過最中肯最客觀的比較文。不服來戰。

hackernoon.com

@kkdai

[影片] GopherCon 2016: Renee French - The Go Gopher A Character Study

Rob Pike 的老婆 Renée French 也就是眾所皆知的 Gopher 圖形發明者,

講解了 Gopher 的發明過程.這段影片沒有任何程式碼但是相當有趣.

也可以看到許多可愛的 Gopher 圖案,還有 Gopher 圖案的設計規範與理念.

youtube.com

Take a REST with HTTP/2, Protobufs, and Swagger

GRPC 大家用了沒? 是不是因為還不想把手邊的 RESTful API 換掉而沒有改到 GRPC ? CoreOS 展示如何透導入 GRPC 後,依舊有 RESTful API 並且有 Swagger 的服務。

相關議題,其實有上 Google Cloud Platform Podcast,想聽聽訪問的可以聽聽看 CoreOS CTO 如何解釋:

gRPC at CoreOS with Brandon Philips | Google Cloud Platform Podcast

此外,如果有人想了解為何要從 Rest API 換到 GRPC  ,可以參考 GRPC 的 FAQ

gRPC largely follows HTTP semantics over HTTP/2 but we explicitly allow for full-duplex streaming. We diverge from typical REST conventions as we use static paths for performance reasons during call dispatch as parsing call parameters from paths, query parameters and payload body adds latency and complexity. We have also formalized a set of errors that we believe are more directly applicable to API uses cases than the HTTP status codes.

coreos.com

smallnest/rpcx: rpcx is a distributed RPC service framework based on net/rpc like alibaba Dubbo and weibo Motan. One of best performance RPC frameworks.

這個 RPC Service 透過分散式的方式來提供更好的 RPC 效能,甚至遠遠超過 GRPCAlibaba DubboWeibe Motan

除了速度快,更有以下的特點:

  • 支援多種資料格式 json, protobuf, gob
  • 支援多種 discovery service: zookeeper, etcd
  • 由於根據 net/rpc 寫成,使用原生套件的人可以很快速的轉換過來.
  • 支援 Load Balancer

github.com

I’m joining the Go team at Google

Steve Francia (spf13) 也就是 viper , cobra 與 Hugo 的作者.

寫文章宣布他加入了 Google Golang Team .

長達九年在做身為自我創業 spf13 lab 的經營者,也當過 docker 顧問的 .

Steve Francia 也講解了,之後他在 Google Go team 的角色扮演與期許. 很值得一看.

spf13.com

huichen/wukong: 高度可定制的全文搜索引擎

huichen/wukong 悟空: 簡體全文搜尋引擎 支援簡體斷詞,變且可以客製化的全文搜尋引擎. 至於全文搜尋引擎那麼多,為何還要做一個? 以下來自官方的解釋:

  • 需要有客製化的全文搜尋功能
  • 要能夠垂直整合
  • 即時反應
  • 結果排序法則需要訂製

github.com

@yhsiang

Your team needs a UX engineer

因為標題的緣故就聯想到,最近有你可能不需要 JS 你可能需要 JS 這兩篇。

不過這篇跟前面兩篇文章都沒關係,主要在講團隊中必須要有一個 UX 工程師。 要注意這篇特別強調的是 UX 工程師,所以這位工程師必須要會寫 js 和 css。

作者說當團隊人數長到 4~5 個人的時候,你就必須要考慮有一位專職的 UX 工程師負責撰寫 css。 這位 UX 工程師必須負責 CSS 和 accessibility ,還要維護團隊的 pattern library,讓其他工程師負責商業邏輯的部分。

個人之前很幸運有跟 UX 工程師合作過,所以希望各公司也可以考慮一下 CSS Developer 或 UX Engineer 這樣的職缺。讓團隊的分工更明確,使彼此都能有更多的產出。

keithjgrant.com

styled-components

Glen MaddernMax Stoiber 共同開發的新作品。 有在接觸 React 社群的朋友對這兩位應該都很熟悉,前者是 CSS Modules 的貢獻者之一,而後者是 react-boilerplate 的作者。

styled-components 利用 ES6 語法的 tagged template literalscss-in-js 的語法更接近本來寫 CSS 的時候。而且可以複寫原本元件的樣式。除了支援 media-query 也可以 inject global 的 @font-face,有在寫 css-in-js 或 react-native 的朋友,也許可以考慮用用這個新套件。

styled-components.com

Developing Transactional Microservices Using Aggregates, Event Sourcing and CQRS - Part 1

最近 microservice 越來越受到關注,作者 Chris Richardson 有弄了一個 microservices.io 也歡迎大家上去找答案。

這篇作者在講怎麼解決 microservice 的 transaction 問題,過去在 monolithic 架構下,可以使用 transaction lock 的方式確保資料一致,但是在 microservice 中卻不適用。

作者建議採用 DDD (Domain-Driven Design) Aggregates,也就是透過 aggregate 把 microservice 下面的 domain objects 視為一個單位,這邊要注意 Primary Key 的使用以及一個 Transaction 配合一個 Aggregate。最後透過 Event 來保持資料的一致性,也就是 CQRS (Command Query Responsibility Segregation) 或 Event sourcing。

infoq.com

海納百川:Node.js Streams

對 Stream 非常完整的介紹,建議還不知道 stream 是什麼的朋友務必花時間閱讀。

當初 gulpjs 可以快速獲得大家支持就是靠 stream 的魔法!英文好一點的朋友也可以閱讀一下 substackstream handbook

blogspot.tw

From Callback to Future -> Functor -> Monad

對 Functional Programming 想深入了解的朋友,建議可以看看這篇。

當然如果還只是入門階段,可以參考 hannahpun 的從零開始認識 functional javascript 系列。

而一直搞不懂 Functor 或 Monad ,但是對於 javascript 很熟的朋友,這篇會教你從 callback 的概念帶到 Future (Promise),過程中會讓你明白什麼是 Functor 和 Monad。

hackernoon.com


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

CodeTengu Weekly 碼天狗週刊 - Issue 65 上班的人太多,下班的人太少 #職場不等式 - Oct 24th 2016

$
0
0

Hello World

CodeTengu Weekly 碼天狗週刊

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

以下是目前的 curator 陣容:

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

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

@saiday

Why vacation at tech companies should be mandatory: better code, happier people

If you know your team will have to maintain your work while you’re gone, you’ll produce better systems and code.

軟體公司應該強迫員工休假,對大家都有好處。

對公司的好處引援的例子是金融業為了防止員工在內部做一些偷雞摸狗的事情,強迫休假讓每個人平時做的事情交給他的職務代理人,防止一些不好的事情藏在日常的工作之中。
體現在軟體業上,如果員工意識到自己寫的東西要給大家維護 (而且是自己不在的時候),那他平常就會更把寫出好的 code 當成一回事。

另一個好處跟 Travis CI 之前討論過的休假政策調整一樣 (From Open (Unlimited) to Minimum Vacation Policy),讓員工因為強迫休假而沒有虧欠感。

Travis CI 在調整成最低休假政策之後,有 25 天帶薪休假日。
如果是在台灣,以勞基法規定第一年沒有特休、滿一年七天到滿第三年才有 10 天特休,中間還不能換公司,就算改成強迫休假也是辦公椅都還沒涼,人又回來了,對公司藏污納垢的排除非常不利啊,希望各位資方在這件事也要硬起來。

sourcegraph.com

Core Data in iOS 10

這次 Core Data 在 iOS 10 的更新做了很多使用上跟 APIs 的改善,以往被批評的部分幾乎都做了調整。

首先是 Core Data stack,這是剛入門的人最慘烈的痛,只是想要弄個 persistent store 為什麼要逼我設定 NSManagedObjectModel, NSPersistentStoreCoordinator, NSManagedObjectContext,而且沒有主流的 best practice,很可能在還沒有原因的情況就選擇了不一樣的 Core Data stack 實作方式,可以參考 Big Nerd Ranch Core Data Stack 列舉的幾種常見設定。

現在有了一個新類別 NSPersistentContainer,我們可以透過它設定一開始的 Core Data stack,而它也只是封裝了以往使用的東西,帶了一些預設的值跟行為而已。fetch 的行為也直接透過 NSPersistentContainer 操作就可以,非常方便。

詳細閱讀: Core Data in iOS10: NSPersistentContainer

這次 Xcode 8 也解決了以往在 xcdatamodel 的介面定義好 entity 後得自己建立對應的 NSManagedObject subclass 的問題,透過 codegen,在新增或變更後就產生一份給你。其實就是陽春版的 mogenerator

併發的問題也可以透過一個新的類別 NSQueryGenerationToken 來處理,讓以往繁瑣的事情變簡單。

延伸閱讀:NSQueryGenerationToken 官方使用範例

Core Data 經過這次的大調整後,導入門檻終於降到一個合理高度了,已經採用 Core Data 的朋友下次做新的專案也可以用新的方法囉!

Real World Swift Performance

這是一個只有 15 分鐘的 talk,內容蠻有趣,在談 Swift 的 struct, class, protocol, enum, generic 如何影響效能。

結論是 struct 套 protocol 會對效能造成大量影響 (與不套 protocol 的差異為慢了 1300% ~ 15000%),原因是 protocol 用了一種 Existential Container 的結構來處理 struct,而這個結構又有一個 three word buffer 的設計,假如 struct 超過這個設計限制,就會被分配到 heap 上 (就是這個情況效能差異達到 15000%),再由 Existential Container 儲存的 protocol 方法調用實體方法,效能就是在這些地方喪失的。

而泛型因為在 compile time 就可以知道型別,編譯器可以做優化,所以沒有太大的效能問題。

其實這個 talk 是從今年的 WWDC Session 416 Understanding Swift Performance 濃縮一部分出來的,所以省略了很多細節,說明的部分會聽不懂是正常的。

realm.io

JRebel for Android

近期都在開發 Android,而整個 Android 開發的環節最讓我有意見的就是 build app 的時間。

Gradle 優化過後,公司的專案 build 的時間還是接近一分半鐘,這個時間長到足夠讓我把注意力分散又集中在那些奇奇怪怪的影片或動態了。向我的同事抱怨這個困擾之後,他推薦我用了 JRebel,驚為天人!太晚發現了!

簡單來說就是實作了 hot swapping [wiki],而且除非有改動到 inheritance, interface 或是 AndroidManifest,多數的情況下新 patch 的 build 會直接 reload 當前的 Activity,超棒的!

「蛤,那跟 Instant Run 有什麼不一樣?」
「比較快啊!」

延伸:JRebel for Android and Instant Run: Hot Swaps, Warm Swaps, Cold Swaps, all the Swaps!

zeroturnaround.com

@mingderwang

JWT authentication with Vert.x, Keycloak and Angular 2

傳統上,幾乎每個網站應用程式,都自己寫客戶資料管理,含認證與授權等功能。到目前為止,很多人的專案應該都是這樣做的,但想寫好這個部分,又要能重複使用,真談何容易? 加上系統如果還需提供 RESTful API,又要會管理 JWT tokens 或 OpenID 連線,甚至帳號還想跟多家 OAuth 2.0 提供商整合,例如 FB,Google,github,twitter 等,幾乎是小公司或小開發團隊無法在有限的時間內達成的任務。

看看這篇文章,建議用開源的 KeyCloak (Single sign-on) SSO 軟體,來幫你做到幾乎所有使用者及 tokens 授權與認證的管裡,專心做你商業邏輯的部分吧!

paulbakker.io

Use Docker Machine with the Azure driver

雖然 docker-machine 不是只能在微軟 Azure 雲端開 Docker 主機,但台灣還是很多 Windows 的使用者,不妨用這最快的方法,在他們已經購買的 Azure 雲上,來使用 Docker。而如果想用別家雲端部署,也只有 drivers 不同,docker-machine 還支援 Amazon AWSDigital OceanGoogle Computer EngineOpenStack微軟 Hyper-VIBM Softlayer,還有本機的虛擬主機 Oracle VirtualBox,或其他像 VMware vSphere、Fusion、或 vCloud Air 等。

Mac 或 Windows 使用者,如果已經裝過 Docker Toolbox,就會附贈 docker-machine 指令。 如果只想裝 docker-machine 也可只安裝 docker-machine。 以前使用 boot2docker 的人,也可以利用 升級 方式,把自己本機的 Docker engine 改成 docker-machine,如此一來,不管是要部署 containers 到本地或雲端,變成一件非常簡單的事。

簡單的測試過 docker run hello-world 沒問題後,就可以開始使用 docker。但建議多用 docker-compose 來做部署, 而非單純用 docker 指令。

microsoft.com

Interview with Status: A Mobile Light Client Ethereum Messaging App

Status 是一個利用 Ethereum 開放原始碼的電子錢包 Mist,開發出來的一個輕量手機聊天軟體。其最終目的還是希望能做出一個聊天軟體,除了聊天以外,還能做支付,以及執行智能合約。從這公司訪談可以看出,總部在新加坡的這個 8 人團隊,花了很長的時間,希望能找到一個讓 blockchain 能夠輕量化到可以在手機上執行,確又要能保證資料的安全與正確性的方法。

它幾乎是善用了 blockchain 本身的加密特性,還有 Ethereum 本身的 P2P 技術,巧妙地發展出一個新一代的聊天軟體。很明顯,未來的手機,絕對不只是聊天而已,它還能做我們平常做的所有事情,這類的軟體可以讓我們拭目以待。

有興趣開發類似的軟體的人,可以到 status-im GitHub 做協同開發。

ethnews.com

@kako0507

Yarn: A new package manager for JavaScript

JavaScript 實作中常常會使用到不同的相依套件,這些套件通常會透過 package manager 來管理,近幾年最熱門的就是 npm 了,Facebook 最近發表了一套新的套件管理 - Yarn ,用以改善 consistency、security 與 performance 的問題。

這篇文章對 install 的效能做了一些比較。

而 Yarn 除了速度比 npm 快以外,lockfile 也是很重要的一個功能,npm 裡重複的相依套件,在不同的環境下可能有不同的檔案結構,造成有時會發生有些 bug 只在特定電腦的狀況,透過 Yarn 的 lockfile 就可以將相依套件鎖定版本,確保每個環境的結構都是一樣的。

facebook.com

A Javascript journey with only six characters

透過 "[" 、 "]" 、 "(" 、 ")"、 "!" 和 "+" 這六個字元就可以寫 JavaScript !

三個基本的規則:

  • "!" 用來轉換成 Boolean
  • "+" 用來轉換成 Number
  • "[]" 用來轉換成 String

文內會經過不同轉換讓大家理解是如何得到各個英文字母,也可以透過 JSFuck,自動轉換程式碼。

jazcash.com

Tesseract.js: Pure Javascript OCR for 62 Languages

Tesseract.js 是一套 Pure JavaScript 的文字辨識 library ,因為是 Pure JavaScript ,所以不只可以在 NodeJS 上執行,也可以單獨運行在瀏覽器上。

Source Code

projectnaptha.com

ES proposal: global

JavaScript 已經可以運行在許多不同的平台,而存取 global variable 的方式也各有所不同,本篇文章會簡略介紹存取方式以及 ES6 新的變數宣告方式,以及存取 global 的 polyfill 。

2ality.com

工作機會

Python Web Developer (後端) at StreetVoice

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

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

streetvoice.com


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

CodeTengu Weekly 碼天狗週刊 - Issue 66 學海無涯,回頭是岸 - Oct 31st 2016

$
0
0

Hello World

CodeTengu Weekly 碼天狗週刊

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

以下是目前的 curator 陣容:

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

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

@tzangms

The Problem with Tech Leads

領導、帶團隊跟寫程式差不多, 只是:

  • 你沒辦法寫測試, 只能偶而做一下調查
  • 抽象化 (Abstraction), 現在叫做 Delegation
  • 繼承 (Inheritance), 現在叫做, 別人的問題就是你的問題
  • 你通常得重複做一件事, 所以忘掉 DRY
  • 你沒辦法用 monitor 來測量

然後以上這些事情通常會有延遲。 通常還要幾週你才會知道你的實驗有沒有效果。

這篇文章, 我節錄了 22 重點, 真心覺得寫得很棒, 也心有戚戚焉。

以下列其中幾個重點:

  • 每個人都應該可以領導他們自己,並且帶領一個會議。
  • 如果你沒辦法帶領你自己,你怎麼帶領別人?
  • 團隊的潛力不是在於把 IQ 最大化,而是集體智慧。
  • 90% 的高績效人士,通常有高 EQ
  • 由高 IQ 的人組成的團隊不一定會保證高產出,結果通常是相反的。
  • 跟任何新技術一樣,有很多關於領導力的文章、部落格、書、論壇跟專家。你可以用以前學習任何新技術的方式來學習領導力。

除此之外, 這篇文章還提到了一些很早就存在的一些理論, 像是:

我覺得也都是分別需要再花時間深入研究體會的, 而且都非常有見地。

想來加入我的團隊嗎? 傳送門

medium.com

Management in ten tweets

十則推文談管理的 Twitter moments。

溝通、信任、挑戰。

做過才會知道, 溝通的力量比你想像中的還要有力。

twitter.com

When should you a hire a Product Manager?

其實我的工作生涯中完全幾乎沒跟 PM 工作過, 所以其實一直以來對 PM 的想像都有點不太對, 不知道一位真正好的 PM 到底該是怎麼樣子。

曾經也有碰過幾個主管說「我們沒有 PM 沒辦法進行下去」, 但這產品已經經營了 10 年了, 「當初為何不需要 PM 現在卻一定要」我心裡這樣想。

這篇文章給出了幾個痛點, 如果沒踩到, 那可以先不用找 PM, 不過我目前幾乎都踩到了 XD

  • Struggling to keep track of what to build next (lack of a prioritized backlog).
  • Building solutions that don’t work because no one had time to think about them (and you should have caught it).
  • Shipping has slowed down due to mismatched priorities between teams or poor communication between teams.
  • People on the team don’t feel a sense of “why” we’re building something.

嘿, 沒錯! 我也正在找 PM! 最近讀了非常多關於 PM 的文章, 歡迎來跟我聊聊, 來加入 StreetVoice 跟我一起工作吧!

medium.com

rambler - A simple and language-independent SQL schema migration tool

一個用 go 寫的 SQL migration tool, 因為習慣了用 Django 開發, 有內建的 migration tool, 但是老實說產生出來的 migration file 實在是太令人眼花撩亂, 所以以前傾向用 django-nashvegas 而不是 South (後來內建進 Django)

而 rambler 就是類似, 而且不被特定語言、框架綁住, 小專案使用也是挺方便的, 而且 migration file 清楚明暸啊!!

github.com

easyargs - A python module to make handling command line arguments easy

因為一直做 web, 所以挺少寫 command line 的, 唯一比較有人知道的就是我愛卡提諾 iloveck101 這個 open source 專案了 XD

當初其實想要加上一些參數, 跟寫一些說明的, 可是發現實在是有點麻煩, 也沒有太多時間就沒做了, 這幾天看到 easyargs 便覺得, 啊, 早一點有這個就好了, 簡化太多了, 太方便了啊!

github.com

@fukuball

Estimating Delivery Times: A Case Study In Practical Machine Learning - Postmates 使用機器學習估算運送時間案例分享

Machine Learning:中級

Postmates 是一個媒合快遞運送服務的平台,本篇文章分享了 Postmates 如何運用機器學習相關的技術來預估運送時間。其實他們使用的方法超簡單,就只是很單純地使用了 Regression,沒有什麼高深的 Deep Learning 之類的。有看過我之前分享的機器學習基礎課程的話,一定都會這個方法。

文章最值得一提的地方就是他遵守了「Simple is first」這個原則,用最簡單的 Regression 及僅僅用了運送地點距離這一個 Feature 就跳下去做了,先看看結果,然後慢慢加入合理的 Feature 增加準確度,看了這篇文章就覺得機器學習真的不難嘛!

postmates.com

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

Machine Learning:中級

前四講的課程中 SVM 所有的概念大致上已經介紹完畢,而我們也知道 SVM 就是一個用來訓練機器分類的演算法,那如果想用 SVM 來做 Regression 或是 Logistic Regression 是可行的嗎?這一講將介紹如何將 SVM 算法中用到的 Kernel 概念轉換應用到 Logistic Regression。

fukuball.com

CS231n: Convolutional Neural Networks for Visual Recognition

Machine Learning:中級

大家現在都知道 Deep Learning 很紅,尤其是用在視覺的應用上簡直就是兇殘(太多顯而易見的應用,令人印象深刻),因此大家都想學 Deep Learning。我個人目前只從林軒田教授的機器學習技法課程知道一些很粗淺的知識(爆雷一下,機器學習技法介紹 Deep Learning 的課程只有一講,真的很粗淺啊),如果要再深入了解 Deep Learning 的話,我推薦這個課程,雖然我也都還沒看,不過就一起來學習吧!光是看課程中分享的範例程式碼就覺得會有很多收穫啊!

github.io

Useful PHP Library rinvex/country - 好用的萬國套件

PHP:初級

介紹一個好用的萬國套件,舉凡國家的地理位置、使用幣別、網域等等資訊應有盡有,目前使用是覺得少了 ip 區段的資訊,不過大家可以去幫忙貢獻一下喔!

github.com

PhpCompatibility for PHPCS – Are You PHP7 Ready? - 準備好升級 PHP 7 了嗎?

PHP:中級

PHP 7 發布一陣子了,根據調查許多開發者都傾向在新的 Project 使用 PHP 7 而不會將舊的 Project 升級,原因當然是 PHP 7 與 PHP 5 的差異有點大。但如果真的想把舊的 Project 升級到 PHP 7 要怎麼做呢?PhpCompatibility 這個工具或許可以帶來一些幫助!

sitepoint.com

@chiahsien

Speeding up Development Build Times With Conditional dSYM Generation

一個加快 Xcode 編譯速度的小技巧,簡單又有效。

holko.pl

PDF Viewer for iOS & Android - Reading, Reviewing, Annotating - Made Easy.

你有聽過 PSPDFKit 嘛?它應該算是 iOS 跟 Android 開發圈中最有名的 PDF framework 了,有超多知名 app 跟公司都使用這套 framework。就在前不久,它們釋出了自己的 PDF Viewer,閱讀、註記、編輯的功能通通都有,而且完全免費沒有內購。

根據他們官方說法,免費的原因是為了要讓所有人都能擁有最頂級的 PDF 體驗,然後使用者就會發現某些 app 內建的 PDF 功能太弱了,進而要求開發商也要提供出色的體驗,然後開發商發現這真是太困難了,就只好去購買他們的 PSPDFKit,這樣他們就能因為免費而賺錢了。

pdfviewer.io

讓 Xcode 8 再度支援 plugins

你是否為了 Plugins 的支援而遲遲不肯升級到 Xcode 8 呢?其實現在已經有不少 Xcode extension 了,不過因為蘋果目前開放的 Source Editor Extension 能力實在少得可憐,所以相對的也沒有什麼戲法可變 :-(

還好透過 unsign Xcode.app 的方式,就可以解開 Xcode 的封印,讓原有的 plugins 再度生效。但也由於 unsign 的原因,所以你的 Xcode 會變得比較不安全(其實就是安全性退回跟以前一樣),所以「解鎖一定有風險,使用前請詳閱公開說明書」!

logdown.com

28 Metrics That Matter for Your App

早期開發 app 的時候,統計資料分析還是一個很陌生的名詞,現在已經變成開發時的標準配備了,畢竟有了資料才知道使用者是怎麼使用你的 app,以及要從何處改善 app。這篇文章列出了 28 個重要的統計指標,每個指標都有淺顯易懂的說明。你不一定要全部都用上,但至少你應該知道它們是什麼意思。

另外 Ray Wenderlich 還有一篇入門教學教你如何收集這些數據,可以搭配一起閱讀。

savvyapps.com

Touch Bar on the new MacBook Pro

Mac 的新品發表會結束了,你還滿意嗎?不出所料的,新版的 Macbook Pro 果然有個酷炫的 Touch Bar,同時相關的開發資源也都已經準備好了,包括 Xcode 8.1macOS 10.12.1HIG、以及 NSTouchBar Class Reference,想嚐鮮的人可以開始研究囉!

apple.com

工作機會

Python Web Developer (後端) at StreetVoice

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

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

streetvoice.com


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

CodeTengu Weekly 碼天狗週刊 - Issue 67 小明白天只是一名普通的軟體工程師,但是只要一到了夜晚,他就會搖身一變,成為一名加班的軟體工程師 - Nov 7th 2016

$
0
0

Hello World

CodeTengu Weekly 碼天狗週刊

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

以下是目前的 curator 陣容:

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

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

@vinta

open-guides/og-aws: Amazon Web Services — a practical guide

這是一份非常全面的 AWS 使用指南,如果你正在用或打算用 AWS,必須好好讀一讀。

github.com

What's the difference between utf8_general_ci and utf8_unicode_ci?

上禮拜遇到一個 MySQL 的 Cannot add foreign key constraint 的問題,但是兩邊明明都有 index 而且 column type 也都一樣。後來突然想到我好像在哪裡看過一篇在說因為 collation 不同導致 index 失效的文章(雖然我其實只看了標題,根本沒點進去看內文),一查發現果然是這個原因:因為從正式環境 dump 出來的資料是用 utf8_general_ci,但是我在開發環境建立的 table 卻用了 utf8_unicode_ci

問題解決之後忍不住研究了一下這兩個 collation 有什麼不同,順便跟大家分享一下。

然後雖然可能沒有人想知道,但是這些 utf8_xxx_cici 其實是 case insensitive 的意思啊。

延伸閱讀:

stackoverflow.com

Upgrading Django

因為前陣子也才升級了 StreetVoice 的 Django 版本,這就看到有人整理了從 Django 1.3 到 Django 1.10 各個版本的升級注意事項,雖然大部分內容都可以在官網的 Release notes 找到,但是有人幫你畫了重點整理成冊還是挺不錯的。

thosecleverkids.com

Machine Learning: An In-Depth, Non-Technical Guide - Part 2

最近在研究 Machine Learning,一邊上 MOOC,一邊自己讀書(這時候 Safari Books Online 的優點就體現出來啦:某個概念搞不懂,可以隨時找其他書來看)。對初學者來說,機器學習除了多得嚇人的演算法之外,最煩的就是那些層出不窮的專有名詞了(雖然任何學問都是這樣),這個系列的文章就(概略地)解釋了不少常見的 Machine Learning 專有名詞和概念,讓你有個粗淺的理解,不至於在閱讀相關文章的時候寸步難行。

然後,忍不住要提一下,Kaggle 的 Kernels 真的不錯啊,會有很多人分享他們對 Kaggle 上的比賽題目的解題過程,例如 Titanic: Machine Learning from Disaster

innoarchitech.com

10 Minutes to Pandas

Pandas 的第一印象就是它的 API 實在是太他媽魔術了(雖然後來發現其實真正魔術的是 Numpy)。總之一開始完全看不懂,後來才發現官網上的這篇入門指南,雖然標題說只要 10 分鐘,但是那是騙你的,讀完 Indexing and Selecting Data 就不止了。

延伸閱讀:

pydata.org

@hiroshiyui

Docker in Production: A History of Failure

對 Docker 滿滿的血淚控訴,事實上裡頭列的坑,我也幾乎都遇過,所以讀了特別地感同身受:

  • 每次大更版,都隨著亮眼的新功能夾帶了小臭蟲,以及一些不向前相容的坑。
  • 無法對 image 儲存空間做有效管理,為了這類小而惱人的問題,甚至要自己 call Docker API 寫個輔助程式處理。
  • 類似上一點,至今若要自架 Docker Registry (v2) 依舊很難做 image 的空間管理。最後若不是轉到付費的解決方案 (Docker Trusted Registry, AWS ECR...),就是放棄使用 Docker Registry,改以 save & load 另走自己的一套 image 派送流程、迂迴曲折地 shipping。
  • 莫衷一是的 storage drivers,選了任一個,就代表你被強制同梱了那一個 storage driver 適用的、特定版本的 Linux distribution。
  • 資料庫之類仰賴 permanent disk storage 的應用,在 production 場合尤其不適合使用 Docker,無論哪種 workaround 都用起來綁手綁腳。

如果要做 immutable infrastructure,現在的我會比較偏好用 Packer 做 VM image,仍以 VM 為應用程式的主要宿主,但是一些適用 container 的應用,我也不排斥使用 container。綜合考量適用場合、資源調度整合的便利性等因素,分別給予最合適的部署方式,而非一味地追逐酷炫潮夯、人云亦云、通通上 Docker。

wordpress.com

Lita: ChatOps for Ruby

前陣子,我們單位終於把先前在此介紹過的 Cog 架了起來,感受到它設計上的一些強大之處,譬如完善的權限系統、不同用途的 command bundles 可部署在特定的 relay groups 區隔開來等。但是過沒幾天,就被一些毛邊給刮得滿手傷痕,誠實地說,我覺得 Cog 在目前(2016 年末)還沒成熟到可以運用在 production 環境中。

於是我們又回頭去用雖然不那麼酷炫潮夯、但是掌握度高的 Lita。透過我們熟悉親切的老朋友 Ruby,無論是從頭撰寫,還是將之前既有的 DevOps 相關工作的 scripts 改寫為 Lita plug-in,相比之下真是無痛,且權限分野之類的需求,除了 Lita 基本的支援,我們還是能夠自行運用 Ruby 實作出更細緻、切合自身所需的管理邏輯。

如果您的單位也想導入 ChatOps,我很誠心推薦您參考看看 Lita。

lita.io

Developer interview: How Haiku is building a better BeOS

BeOS 曾經是 Apple 公司次世代作業系統的可能選項之一,但是後來的歷史如各位所見,Steve Jobs 帶著 NeXTSTEP 回鍋,包著 Mac OS 皮、骨子裡是 NeXTSTEP 的 Mac OS X 最後上了位,技術優異卻時不我與的 BeOS 黯然退場。

不過因為 Haiku 專案出現、延續了它的靈魂,於是我們有了這麼一個 open source 版本的 BeOS。

這篇採訪長文介紹了 Haiku 專案的緣起、設計決策、組織文化,雖然是一篇四年前的舊文,但是我還是覺得值得推薦給大家,此後還是會找一些類似的開源專案專訪文與大家分享,體會別人在程式碼以外,執行專案時是如何處理其他各種面向的議題。

techworld.com.au

Anatomy of an Elixir Process

簡潔有力地以圖解方式從微觀到巨觀介紹了 Elixir 的 Process,因為太簡潔有力了所以我也要寫得簡潔有力,直接點擊進去看吧!

medium.com

Introducing Changelog 2.0

Changelog 這個 Podcast 很有趣,我也是訂戶之一。這篇文章介紹了他們使用 Elixir/Phoenix 製作的新網站(還預定會把這個 CMS 開源!)、以及新節目,包括 Go Time 這個針對 Go 語言的主題節目。大家感受一下。

changelog.com

@kkdai

Golang Taipei 2016/10 第十七次聚會的投影片與錄影鏈結

各位好,編輯只好自肥一下.身為 Golang.tw 的共同主辦人之一,在這裡告訴各位我們十月地的聚會投影片與影片已經出現了.

可以來這裡查看相關的投影片與影片內容,之後相關的聚會也會在這裡顯示出來.

本月份的聚會有提到 GRPC 也有講到 gomobile ,內容相當的精彩.

十一月的聚會將會定在 11/29 號,歡迎大家來報名講者與協辦攝影師.請各位踴躍來報名啊

github.com

Why you should not use iris for your Go projects

Iris 是一個號稱地表上最快的 Web Framework,擁有 5000+ star 的專案,但是想要申請 Awesome-Go 卻被 ban 掉的整個故事. 這篇文章,從多個角度建議你不應該把 Iris 當作你的專案中,故事精彩就直接看內文吧.

懶人包:

  1. Iris 被 Awesome-Go 移除
  2. Iris 的 Kataras 申請重新加入.
  3. 被人發現把 PR 改掉,License 亂寫
  4. 被 Awesome-Go 拒絕並且 Ban 掉
  5. Kataras 把 Iris commit 改成只有兩個 (哪招?)
  6. Kataras 修改自己在 git issue 裡面的發言

參考 : Awesome-Go Github PR

florinpatan.ro

rekihattori/awesome-programmers: A list of history's greatest

傑出程序員(捲舌音) 清單

裡面有四個人跟 Golang 有關係

在作業系統分類中:

  • Ken Thompson: Go 創始人之一,也是 C 語言的共同發明者.
  • Rob Pike: Go 創始人之一,主要管理整體架構與之後發展.
  • Russ Cox: 許多好用的 Go 工具都是他起頭撰寫,不論是 gofmt 還是 goimport .
  • Brian Kernighan: 賣最好的 Go book作者 . 書本的鏈結

還有一個在資料庫的分類:

  • Brad Fitzpatrick: LiveJournal 的創辦人,並且是 OpenID 制定協定的人.目前主要負責 Golang net/http 的相關開發.

github.com

Learn Kubernetes the Hard Way (the Easy and Cheap Way) – Medium

Kelsey Hightower (Google Kubernetes 的傳教士) 的文件 kubernetes-the-hard-way (透過硬派方式來安裝 Kubernetes) 一直都是了解與安裝 Kubernetes 最基本的安裝手冊.但是由於真的太困難而變成許多人望而卻步.(不然就是透過 minikube 或是直接使用 GKE)

這篇文章,透過相同的方式來安裝.但是卻幫你透過 Vagrant 來安裝的方式幫你把 Kubernetes 安裝起來.不僅僅可以一鍵可以輕鬆完成,還可以在中間了解如何安裝並且一步步指導你相關步驟,實在相當的方便啊.

medium.com

chain/chain: Chain Core Developer Edition

Chain 是一個 BlockChain 服務的公司,提供透過 blockchain 技術的金流與安全的資訊服務.

相關訊息之前有板友貼過, 不過在這裡增加一些其他資訊:

  1. Chain 公司內部人員有一位是 Keith Rarick 是之前是 Heroku 做出 Go official buildpack 的大大 KR Github

  2. 根據 Reddit 上面的討論,如果你使用這個服務而沒有 AGPL 的話,你就得付企業的 License 費用 Reddit link

github.com

工作機會

Python Web Developer at StreetVoice

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

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

streetvoice.com

Frontend / Backend Developer at KKTIX

負責開發與維護 KKTIX 服務,可自由遠端工作。團隊採行 Scrumban 敏捷開發流程,並實踐 Pair Programing、Code Review、整合 CI 作自動測試與佈署。讓你可以參與產品開發,並且能專注程式實作。團隊使用的技術包括但不限於 Golang / Ruby on Rails / JavaScript / ReactJS / AngularJS / AWS / PostgreSQL / Redis / Elasticsearch 歡迎自主管理能力強大的你,一起加入 KKTIX,開發更好用的售票報名服務。

意者請將履歷寄到 hr@kkbox.com 或到 http://jobs.kktix.cc 報名。

kktix.cc


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

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.

CodeTengu Weekly 碼天狗週刊 - Issue 69 澳門首家線上賭場上線啦 - Nov 21st 2016

$
0
0

Hello World

CodeTengu Weekly 碼天狗週刊

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

以下是目前的 curator 陣容:

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

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

@fukuball

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

Machine Learning:中級

在上一講中,我們了解了如何使用 SVM 來解 Logistic Regression 的問題,一個是使用 SVM 做轉換的 Probabilistic SVM,一個是使用 SVM Kernel Trick 所啟發的 Kernel Logistic Regression。這一講我們將繼續介紹如何延伸到解 Regression 的問題。

fukuball.com

20 Weird & Wonderful Datasets for Machine Learning - 20 個有趣的機器學習資料集

Machine Learning:初級

大家都在講 Data Science、Machine Learning,但談這些之前有一個最重要的一環就是 Datasets,本篇文章分享了一些有趣的 Datasets 連結,沒想到居然還有 UFO 目擊報告的資料集!

說到 Datasets,幾乎沒有看到台灣的軟體公司或是開發者在 Datasets 這一塊有開源貢獻,所以敝公司 iNDIEVOX 近期拋磚引玉開源了 iNDIEVOX Datasets!這些 Datasets 可以做到 iNDIEVOX 的 Valence Arousal DJ RadioEmotion Radio、Buy Together 等功能喔!至於怎麼做,大家可以自己摸索看看,當然也可以想想看可以用這些資料做出什麼其他有趣功能,這就是開源好玩的地方~ 如果有做出什麼有趣的實驗,也請告訴我們、分享一下喔!

medium.com

Top-down learning path: Machine Learning for Software Engineers - 給軟體工程師的機器學習手冊

Machine Learning:初級

這是一位 Mobile Developer 為了轉職學習 Machine Learning 而整理的學習筆記,學習資源真的很豐富,全部看完應該會不得了!其中我覺得「Don't feel you aren't smart enough」這一點真的蠻重要的,盡量去學學看、做做看吧!

github.com

The Non-Technical Guide to Machine Learning & Artificial Intelligence - 給非技術人員的機器學習/人工智慧指南

Machine Learning:初級

雖說是給非技術人員的機器學習/人工智慧指南,但很多資源對技術人員也是很有幫助的,文中的 News Sources 有蠻多其實說不定要懂技術才看得懂,例如:Google Research BlogDeep Mind Blog 等等,而介紹搞機器學習/人工智慧的 Startups 也很有用,可以大概了解一下目前產業在機器學習的應用上會在哪些方向。

medium.com

PHPConf 2016 筆記

PHP:初級

PHPConf 2016 在十月底已經落幕了,今年由於一些私事沒辦法參與(感謝 @shengyou 邀請參與 QA Track 會談人),只好在網路上找相關筆記來了解一下今年的會議內容,今年請了 Modern PHP 作者 Josh Lockhart 及 PHPUnit 測試框架作者 Sebastian Bergmann 來分享演講,現場應該很精采吧~

hackmd.io

@mingderwang

All you need to know about Elasticsearch 5.0: Index management

如果你還沒用過 ELK,你可以就從最新的 5.0 版開始安裝和使用。新的 Elasticsearch 5.0 幾週前正式 released,它讓一個開放軟體成功轉變成商用版來運行。也就是說,不想一而再,再而三更新版本的人,現在可以正式開始使用了。但相反的,也開始會收商用版的 license 費用 (如果你願意付的話)。如果你想知道 Elasticsearch 5.0 有什麼新功能,All you need to know about Elasticsearch 5.0: Search。它主要功能還是在幫你做全文檢索的 indices,所以本篇文章介紹一些技巧和 indices 的種類,如果有興趣研究的可以參考。

code972.com

Using Kubernetes Minikube for Local test deployments

kuberenetes cluster 有點難設定,如果不是 production 用,可以改用 minikube 安裝單機版 kubernetes。本篇文章教你很快架設測試或教學用的 kubernetes 環境。如果還缺少 kubectl 指令,可以參考 hereSetting up kubectl 安裝。

安裝好了 minikube, 你可以拿 nsolid-kubernetes 原始碼來試試看。

wordpress.com

Running a Parity Ethereum node in Docker and connect safely

如果你想學 Solidity 語言,這個影片由 Ethereum 發明人 Vitalik Buterin 親自在 Taipei Ethereum Meetup 教我們如何用 Solidity 語言撰寫智能合約與除錯技巧。但撰寫智能合約與開發一般電腦語言程式,最大不同之處,在於你要先有一個 Ethereum 帳號,以及一個電子錢包,每次執行一個合約,即使是測試你的程式對不對,都要定義你的 gas price,且告知你想花多少 gas 來執行你的程式。

這篇文章,就是介紹你如何用 Docker 開一個 Ethereum 電子錢包,以確保你開的帳戶和使用電子錢包匯錢時,是比較安全的。最後你只要在 browser-solidity 上撰寫以及編譯程式,再 cut and paste 到電子錢包裡執行就好。對了,錢包裡還沒有半毛錢,是無法轉換成 gas 來執行你的程式,快到全家便利商店,買一點比特幣換成 Ether 匯到你剛開好的帳戶即可。

docker pull ethcore/parity:beta-release

medium.com

@chiahsien

Understanding code signing for iOS apps

Code signing 應該是絕大多數蘋果開發者心中的痛,無論是對老手或新手都是。就算最新的 Xcode 在這方面已經有所改善,搞懂 code signing 仍舊是開發者必備知識之一。這篇文章以深入淺出的方式,解釋 code signing 的原理以及每個步驟代表的意義,讀懂之後就會有種豁然開朗的感覺。

nodesagency.com

Xcake: Describe and generate Xcode projects in a human readable format.

如果你們的 iOS 開發團隊稍具規模,一定曾經發生過多條 branch 同時進行,最後要 merge 回去時發現 Xcode Project 檔產生衝突無法自動合併,或是能夠合併但結果卻不是完全正確。

我曾經施行了以下方法來避免這個情況發生:

理論上來說這三點應該可以避免 conflict 產生了,不過最後一點實在是太難達成,所以...你懂的 :(

因此最近我在嘗試另一個解決辦法:不要提交 project file 就不會衝突了。在研究過一些工具像是 Facebook - BuckGYP - Generate Your Projects 之後,我最後選擇了 Xcake 這個比較輕量化的工具。

它有以下優點:

  • 可讀性高的設定檔
  • 可設定 Build Settings 的各個設定
  • 可設定 Build Phases 的 scripts
  • 根據檔案的目錄架構產生對應的 Group,如果你的檔案原本都丟在同一個目錄下,建議可以先用 synx 整理一下
  • 作者回應非常快速,也是因為這個原因,所以我願意使用它

github.com

PPTs for iDEV 2016

前一陣子在中國大陸舉辦的 iDev 全平台開發者大會 落幕了,這個活動主要面向 iOS、Mac OS 以及相關生態鏈的開發者。最近它們釋出了每個講者的投影片,大家可以找自己感興趣的議題研究研究。

github.com

Dash for iOS

經過了一連串的事件(1, 2, 3)之後,作者最後決定要開源 Dash for iOS 了。是說我還想不到要在手機上查看 API 文件的理由啦,不過有需要的人可以去下載原始碼然後編譯到自己手機上了,或是你單純只想要看看人家是如何開發的,這也是一個很好的學習機會。

不過話說回來,透過閱讀它的程式碼就會發現,一個軟體是否成功跟程式碼寫得好不好,其實沒有直接關係 XD

kapeli.com

katana-swift

Katana 是一個最近推出的 framework,它受到 ReactRedux 的啟發,類似的東西還有 ReSwift。假如你的軟體達到了一定的複雜度,的確可以試試看這些做法,它會讓程式架構更好維護、程式碼更穩定,但如果你的軟體一點都不複雜,那還是乖乖地用 MVC 架構就好了。

延伸閱讀:

github.com

工作機會

Python Web Developer at StreetVoice

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

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

streetvoice.com

PHP Developer at StreetVoice

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

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

streetvoice.com

Random Cool Stuff

Quick, Draw! Google AI Experiments - 你畫我猜實驗應用程式

Google AI Experiments 推出的你畫我猜實驗小遊戲,使用 neural network 訓練機器學習辨識手繪塗鴉,辨識率非常高!不過在幫大家辨識塗鴉時,其實大家也一邊在幫 Google 餵訓練資料,未來辨識率會越來越高吧!Google 要慢慢用 AI 統治世界了嗎?

@fukuball 分享。

withgoogle.com


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

CodeTengu Weekly 碼天狗週刊 - Issue 70 恭迎 Final Fantasy XV 上市,故下週的 CodeTengu Weekly 將再度停刊一次 - Nov 28th 2016

$
0
0

Hello World

CodeTengu Weekly 碼天狗週刊

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

以下是目前的 curator 陣容:

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

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

@tzangms

Managing Engineers in less than 200 characters

Hire motivated people. Trust them. Set high standards for everything. Lead by example. Get out of their way and let them be the heroes of the day. That’s it.

在看了一大堆跟管理有關的文章, 其實大部分的前提都預設在「你找到對的人」, 這篇其實也是。

這篇第一句就是 Hire motivated people. 其實真的就是這樣, 只是對的人不好找, 要辨識出對的人也不容易。

hackernoon.com

Sidekiq on Indie Hackers

Sidekiq 的作者 open source 了 Sidekiq 不過另外提供了 Pro 跟 Enterprise 版本來盈利, 並支持他繼續開發 Sidekiq。

作者文中提到關於 open source 專案的困境的確很有見地:

  1. start project with much enthusiasm
  2. build something valuable, give away for free
  3. get overwhelmed with support requests and issues
  4. burn out and walk away

因為我有 open source 幾個專案, 其實大概可以體會 XD 很多 issues 都沒時間回了, 嗚嗚。

所以 Sidekiq 的作者開始就計畫著盈利, 這篇文章講了他的收費策略 (我覺得挺有道理的), 像是你買好用的套件, 總不會只用一個月就從你架構拔除, 所以他用年來賣, 還有因為信用卡要容易刷, 所以定價不能訂太超過。

最後就一人公司, 專門做這件事了, 好像也挺不錯的。

indiehackers.com

Recalibrate Your Productivity Sensors

Management is about communication

我從技術開發人員轉為管理職後, 最容易感受到就是"生產力"這件事, 因為當你真的做管理者該做的事的時候, 跟以往寫程式最大的差異就是, 你看不太到你做完的事情。

這篇文章提到, 你團隊的生產力就是你的生產力, 所以你應該要衡量的是團隊的生產力, 而不是你個人的生產力。我說: 如果你花很多時間寫程式, 那就是在逃避 XD

I am tempted to say that the more time you spend away from your desk, the better, but that is an oversimplification, of course. Quiet time to think and strategize is also important.

本文後面也列了許多有生產力的管理者該做的事, 這一、兩年已經可以體會, 雖然還得多練習。

tombartel.de

@kako0507

The 100% correct way to do CSS breakpoints

現今網頁技術配合各種不同螢幕大小的 device 呈現適當的畫面 (Responsive Web Design) ,本篇文章提出一些 設定 CSS media query 的 breakpoint 的建議。

freecodecamp.com

Generate Google Slides from markdown

又一套支援 Markdown 的 presentation 工具: md2googleslides 只需要簡單的指令就可以直接將 md 檔轉換並上傳成 google slides

也順便推薦一下其他好用的前端簡報工具:

github.com

Node.js Tutorial Videos: Debugging, Async, Memory Leaks, CPU Profiling

本篇會透過影片來介紹如何解決在開發 Node.js 可能會遇到的幾個痛點:

  • Debugging
    • 透過 debug module 和 Chrome DevTools 來解決 issues 。
  • Async programming
    • 介紹 asynchronous 操作的 error handling 與如何同時處理多個 callback 。
  • Memory Leaks 與 CPU Profiling
    • 透過 v8-profiler 來做 CPU Profiling 與 Memory Heapdumps ,並使用 Chrome DevTools 來分析。

risingstack.com

Building a Shop with Sub-Second Page Loads: Lessons Learned

網頁讀取的 latency 直接影響使用者的滿意度與網站利潤,影響網頁 latency 的原因主要有:

  • Backend processing
    • 透過 load balancing 來分散 request , 各個 application server 竟可能最小化 shared state 。
  • Network latency
  • Frontend processing
    • 影響 frontend processing performace的最主要因素為 critical rendering path (CRP) ,文內會詳細介紹 CRP 流程與最佳化 CRP 的幾個概念。

baqend.com

@hiroshiyui

Writing a Profiler

Profiler 是軟體開發現場最倚賴的效能量測工具之一,協助我們找出瓶頸所在。本文先是介紹了 profiler 的兩大型態之原理與差異,之後著重在較不影響程式執行流程的採樣型 (sampling) profiler,介紹其實作的概念。

之所以最近會去找這類的文章,也是因為在產品效能調校的過程中,我這個半路出家、非本科的碼農突然對 profiler 的工作原理好奇了起來,而這是其中一篇我覺得寫得很不錯的科普文,分享給大家。

wordpress.com

How GameCube/Wii emulator Dolphin got a turbocharge

這篇專訪了 Dolphin 這個 GameCube 與 Wii 的模擬器開源專案,其效能突飛猛進的功臣 Fiora Aeterna,談及一些模擬器的相容度改進手法,進而改善模擬效能與正確度。

特別值得一提的是,Fiora Aeterna 她起初之所以想對這個專案做出貢獻,是因為 Dolphin 已經有個同為女性的專案成員,才讓她比較能卸下心防。科技圈的性別議題,包括性別比例失衡在內,還是有很多地方值得我們關注、並投入心力改善。

pcgamer.com

Changelog.com is Open Source

先前提過 Changelog 的網站改版,會將他們開發的這個網站 CMS 開源,現在已經釋出。本文大略地介紹這個 CMS 的特點,並希望這個 CMS 能作為一個登上 production 環境的 Elixir/Phoenix 成品供他人借鏡學習。

在此斗膽佔個版面,由衷地表達我對他們的敬意與謝意。

changelog.com

What I learned migrating a Rails app to Elixir/Phoenix

本文作者分享了他將一個 Rails app 轉換到 Elixir/Phoenix 的經驗談,其中不免有兩者設計哲學上的差異適應,我自己也遇過不少相同的情境,讀來心有戚戚焉,當中最大者當屬從 ORM (ActiveRecord) 轉換到一個函數式的資料庫處理介面,以及衍生的「model 不盡然是您以前在 Rails 裡想的那個 model」。

如果您也是一個已有 Rails 基礎、想學 Phoenix 的開發者,這篇文章頗有引導的作用。

medium.com

工作機會

Web Developers at Dcard

Dcard 是一支致力於讓分享更自由,讓資訊流動更美好的國際團隊。在這邊你將負責開發與維護 Dcard 的核心命脈,並提供使用者啵棒的網站體驗,你會和在 GitHub 上破萬的大神、很年輕的奶奶、剛深造回來的小神童及淡水阿莫比司一起合作,若你對參與改變、創造有興趣,對新鮮的事物保有好奇,不要猶豫!一起加入我們打出千萬人喜愛的產品,創造出更好的 Dcard Experience!

履歷請寄到: welcome@dcard.cc 或到 http://join.dcard.today

dcard.today

Python Developers at StreetVoice

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

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

streetvoice.com

PHP Developers at StreetVoice

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

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

streetvoice.com

Random Cool Stuff

FINAL FANTASY XV – 101 Trailer Extended Cut

為了慶祝 Final Fantasy XV 即將在本週的 11 月 29 日上市,所以下禮拜的 CodeTengu Weekly 將再次停刊一週(誤)。

Square Enix 已經幫大家把假條都準備好了

@vinta 分享。

youtube.com


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


CodeTengu Weekly 碼天狗週刊 - Issue 71 如果你覺得自己的工作環境裡沒有機歪人,那你就是那個機歪人 - Dec 5th 2016

$
0
0

Hello World

CodeTengu Weekly 碼天狗週刊

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

以下是目前的 curator 陣容:

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

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

@vinta

What happens when you type google.com into your browser and press enter

(因為趕著回去玩 Final Fantasy XV,這一期就不多廢話了,PSN ID vintalines,大家多多指教。)

我之前在面試工程師的時候,常常會問一下標題的這個問題,但是老實說能夠答得好的人真的不多呢,了解這個問題對於你平常 debug 其實是很有幫助的。不過除了技術問題之外,我也會好奇地問一下來面試的人他們是怎麼準備這次的面試的,不過讓我訝異的是,其實有不少人都支支吾吾地表示他們沒有特別準備,嗯,也不是說不行啦,只是有時候面試你的人也是花了不少時間在看你的履歷和 GitHub 上的 code,專門準備要問你哪些問題。而且更重要的是,從你怎麼準備面試,多少是可以看出你平常是怎麼做事的嘛。

github.com

9 DevOps Tips for going in production with MySQL / MariaDB Galera Cluster

StreetVoice 的資料庫前陣子換成了 MariaDB Galera Cluster,因為需要跨 data center 又得支援 multi-master 讀寫(其中一個 data center 還是在連外網路異常險惡的中國),而 Galera 基本上是對我們整個後端的程式來說改動最少的方案。

這份 Severalnines 的簡報提到了很多用 Galera Cluster 需要注意的地方,非常值得一看。如果你是 Severalnines 的會員,也可以看看他們的 Webinar 的影片

slideshare.net

htop explained

想必很多人都用過 htop,不過你真的都知道畫面上每個欄位或數值是什麼意思嗎?不懂沒關係,看完這篇文章你就懂了。

peteris.rocks

Introduction to Machine Learning with Python

最近在讀這本書,真的不錯,跟大家分享一下,作者就是 scikit-learn 的核心開發者之一,讀起來(幾乎)沒有挫折感,這對初學者來說是很關鍵的啊。不過這本書並不是在教你怎麼一步一步地 implement 各種 Machine Learning 的演算法,畢竟他整本書都在用 scikit-learn 了。就像你在讀 High Performance MySQL 的時候,它也不是在教你怎麼 implement 一個資料庫的嘛。

這本書最棒的地方是他在說明每個演算法的時候都會有好幾幅精心繪製的圖表,可以讓你用非常直觀的方式了解到不同演算法之間的差異。甚至是在示範調整演算法的參數時也有把結果做成圖,所謂的 Visualization 真的很重要呢。

延伸閱讀:

amazon.com

@saiday

Google Testing Blog: Just Say No to More End-to-End Tests

在 app 的領域是比較少看到 End-to-End Testing 的方法討論跟工具,但參加了好幾次 MOPCON 都有 UI Testing 的議程,而 End-to-End Testing 免不了一定會包含到 UI Testing 的部分,所以下面就混在一起說好了。

這個標題乍看之下是有點重,但重點是 more End-to-End Tests,End-to-End Tests 有它不可取代的必要性,但不要因為 UI Testing 或是 End-to-End 的概念上很吸引人而做了過多不必要的測試,這樣並不會帶來等量的助益,只是在消耗你的開發資源。

附圖是 Testing Pyramid,轉載自 Martin Fowler 的部落格 TestPyramid,大概就是說越高階的測試跑得越慢、要花更多資源去寫跟維護。這個測試三角形跟 Google 在文章裡提到的測試方法分配分別是 70% unit tests, 20% integration tests, 10% end-to-end tests 也是不謀而合。

而我個人認為這篇文章的精華在這句:

Thus, to evaluate any testing strategy, you cannot just evaluate how it finds bugs. You also must evaluate how it enables developers to fix (and even prevent) bugs.

googleblog.com

Intelligence in Mobile Applications

機器學習現在非常熱門,相關的平台跟服務也是大量的湧現出來。

如果想要做 語音辨識臉部辨識自然語言處理預測系統 這類的東西,有哪些第三方的服務可以加速你的開發呢?

這篇文介紹了 mobile app developer 可以應用的服務:

medium.com

面向协议编程与 Cocoa 的邂逅 (上)

面向协议编程与 Cocoa 的邂逅 (下)

王巍 對 POP (Protocol Oriented Programming) 的介紹跟想法。標題寫的是「與 Cocoa 的邂逅」,表示這不只是一篇關於 POP 的理論介紹,包含了一些日常中很實際的應用。

用 POP 而非 OO 的原因王巍列出這三點:

  • 動態派發安全性 (Dynamic dispatch)
  • 橫切關注點 (Cross-Cutting Concerns)
  • 菱形缺陷 (Diamond Problem)

POP 的應用上,你所需要掌握的工具:

  • protocol extension
  • protocol associatedtype

這兩篇網誌是由他自己的 這份簡報 延伸出來的,簡報十分完整,推薦可以先看簡報。

延伸閱讀:Protocol Oriented Programming is Not a Silver Bullet

onevcat.com

Mastering the Terminal side of Android development

不多說了,直接用文內的 TL;DR

  • Install iterm2, a better terminal than the default one
  • Use the oh-my-zsh shell with autosuggestions
  • compact the commands ./gradlew iDD
  • Run the commands faster by using the offline flag --offline
  • Pretty print your tests
  • Don’t manually open the app on the phone after install, use this plugin to automate it
  • Attach the process to debugger without restarting the app in debug mode
  • Enjoy a more convenient logcat output with pidcat

medium.com

@kkdai

GDG DevFest Taipei 2016 - In Love with Golang

GDG Dev Fest 是 Google Developer Group Festival Taipei ( Google 開發者群組嘉年華會 ) GDG DevFest 之前在 GTG 有人問我,為何大家投影片不用 Golang Present 來做.所以我為了 GDG Dev Fest 做好了 Golang Talk 的投影片.

go-talks.appspot.com

How to avoid Go gotchas (如何避免 Golang 的雷(坑) )

如何避免 Golang 的坑?

一半而言坑的原因有兩種: 錯誤的語言跟錯誤的直覺。

而錯誤的直覺往往在於對於語言本身的架構與原理夠不夠了解。

這篇文章詳細了介紹 slice 與 interface 的原理,並且講解常常會踩到坑的原因。

簡體中文翻譯文

github.io

Go 1.8 toolchain improvements | Dave Cheney

Dave Cheney 解釋預計在 2017/01/31 將要釋出的 Go 1.8 主要在 toolchain 上的優化. 其中包含有:

編譯得更快: Go 1.7 就支援了 SSA(Static single assignment) 但是由於相容舊的方式,留了不少舊的架構. 1.8 完成了所有的優化並且拔光舊有的架構. 可以讓你編譯得更快, 雖然比不上 Go 1.4 (因為當時用 C 來做底層 Compiler 1.5 之後換成 Go 原生來編譯 Compiler ) ,但是也有長足的進步.

Code Generation 的優化: 對於 Code 分析與產生 (go gen) 有著些許的優化與速度提升.

Defer 與 cgo 的效能提升: Defer 提升 33% 而 cgo 提升 45%

平台支援: Go 1.7 支援 64-bit mips, Go 1.8 支援 32-bit mips

cheney.net

How to write your own Go tool

Fatma Arslan (vim-go 的作者) 介紹了如何透過 go/ast go/parser 與 go/printer 來製作 golang 的小工具, 並且透過 gofmt 的 use case 來解釋如何透過這些工具來製作.

speakerdeck.com

FromXToGo

如果你正從某個語言(PHP, Python, Ruby...)想要換到 Golang 卻又害怕嗎?

這邊有一連串文章搜集好相關的故事,可以給你們一切參考。

github.com

Random Cool Stuff

Language Spam – The Latest Google Analytics Spam

上次打開 Google Analytics 發現來訪的語言欄位有大量 Secret.ɢoogle.com You are invited! Enter only with this ticket URL. Copy it. Vote for Trump! 紀錄。

當下忍不住笑了出來,詭異的句子有一種莫名的喜感。

這篇是我看到比較詳細的說明也提供了解法。

@saiday 提供。

analytics-toolkit.com


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

CodeTengu Weekly 碼天狗週刊 - Issue 72 Workaround 雖可恥但有用 - Dec 12th 2016

$
0
0

Hello World

CodeTengu Weekly 碼天狗週刊

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

以下是目前的 curator 陣容:

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

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

@fukuball

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

Machine Learning:中級

前 6 講我們對 SVM 做了完整的介紹,從基本的 SVM 分類器到使用 Support Vector 性質發展出來的 Regression 演算法 SVR,在機器學習基石中學過的各種問題,SVM 都有對應的演算法可以解。

第 7 講我們要介紹 Aggregation Models,顧名思義就是要將多種模型結合起來,看能不能在機器學習上有更好的效果。

fukuball.com

大神 Yann LeCun 親授:如何自學深度學習技術並進階成專家

Machine Learning、Deep Learning:初級

如何自學深度學習?我想這應該是很多沒學過機器學習的開發者心中的疑問,Facebook AI Research 首席 Yann LeCun 給大家的解答非常值得一看。其中幾點我看到時其實覺得不解,大神居然要我們盡量去上物理課、量子力學等等,我們不是要學深度學習嗎?原來物理學的許多數學建模方法,在建構機器學習演算法思維上也有共通之處。

我本來半信半疑,但有人在我寫的機器學習基石第 6 講筆記留言說「這些證明好像量子物理」,我嚇得都尿褲子了...

bangqu.com

数据挖掘十大算法详解

Machine Learning、Data Mining:中級

Machine Learning 跟 Data Mining 有許多重疊的部份,Data Mining 在字面上可能又較著重於從資料中挖掘出一些有趣的特性,也因此有一些在 Data Mining 領域的演算法會是依據 Data 而去設計的,有些演算法甚至是一些人類直觀的想法但卻沒有理論上的保證,不過,在許多應用上也是有出色的表現,例如 Apriori、knn、PageRank 等等。

「数据挖掘十大算法详解」介紹了 Data Mining 領域大致上會碰到的十大演算法,寫得非常淺顯易懂。

gitbooks.io

[DSC 2016] 系列活動:李宏毅 / 一天搞懂深度學習

Machine Learning、Deep Learning:中級

上週去參加了台灣最大的人工智慧盛會「人工智慧與應用研討會 TAAI」,報名了近來在網路上評價非常好的專題演講 - 台大李弘毅教授的一天搞懂深度學習,原本是抱著來聽聽看的心態,想說也許能夠聽得懂 60% 就不錯了,結果李弘毅教授講得超清楚的,應該 90% 都聽懂了,什麼 CNN、RNN、LSTM、GAN 等等,感覺都被李弘毅教授點通了,有種想跑去台大聽李弘毅教授講課的衝動!

對了,這場演講也是李弘毅教授的封麥之作了,之後要聽就真的要去台大聽了!還好李弘毅教授會不定期分享課程內容到 YouTube 上~

slideshare.net

iNDIEVOX Open Data/API 智慧音樂應用

Machine Learning:初級

前幾天受邀去政治大學、中山大學演講 Music Information Retrieval 領域相關講題,於是就分享了 iNDIEVOX 如何使用近期開放出來的 Open Data 及 API 實做出一些有趣的智慧音樂應用,例如辨識音樂情緒、推薦購買關聯音樂等等需要機器學習演算法才能實現的功能。

由於面對的學生有博士班及碩士班的同學,其實實作面及研究面都要顧及,所以除了說明一些演算法之外,也一步一步地帶著大家如何跑完一整個機器學習流程,甚至擔心大家沒跟上還寫了一些範例程式碼提供參考,詳情請大家自己看簡報內容吧。

與現今許多神奇的機器學習應用比起來,也許這些音樂推薦功能也不怎麼神奇了,畢竟這也只是我工作之餘自己做的一些實驗性產品,技術深度要跟投入大量研究經費及人力的大公司比起來可能不算什麼,但對於想要入門機器學習做出些什麼有趣的應用系統,我想這是一個非常好的手把手教學與展示!

speakerdeck.com

@chiahsien

My Favorite Xcode 8 Shortcuts

有人分享了一份他常用的 Xcode 快速鍵(還有第二集第三集),作者很貼心的提供了 gif 檔展示每個快速鍵的功用。

我從中學到了幾個之前沒注意到的快速鍵,例如 Command Option Left/Right 可以收合展開程式碼,Control L 可以將游標那一行程式碼置於畫面中央,Control K 可以刪除下一行程式碼。另外提供兩個我常用的快速鍵:Control Shift J 可以切到專案瀏覽器並選中目前編輯的檔案,Control Command Up/Down 可以在 .h/.m 檔之間切換。

medium.com

Watch Swift and the Legacy of Functional Programming

Rob Napier 分享了他對 Swift 的看法,他認為 Swift 直至今日依然不是 Functional Language,所以如果用 functional 的思維去寫 Swift 會很不自然。他認為 Type 才是 Swift 的組成單位,要用 Type 來思考並組合你的 Swift 程式碼。講得非常簡單好懂,很值得一看的演講。

realm.io

Composite Validators - Hot Cocoa Touch

常常會聽到這麼一句話:「多用合成,少用繼承」,使用合成模式 (Composite Pattern) 真的可以避免許多麻煩、讓程式碼更有彈性、各個元件的職責更加明確。這篇文章的作者舉例說明,如何用合成模式來驗證使用者輸入的 Email 跟密碼,是個很常見的使用情境。

延伸閱讀:

  • 有人覺得作者這樣的設計還有改善空間,所以寫了一篇文章來回應
  • 配合上一篇 Rob Napier 的演講一起看會更有體會

hotcocoatouch.com

Hiding Your Action and Share Extensions In Your Own Apps

iOS 提供了 UIActivityViewController(就是按下「分享」按鈕後會跳出來的那個界面),讓使用者可以用別的 app 來處理當前的檔案。但是假如使用者已經在使用你的 app 了,此時跳出來的 UIActivityViewController 如果還列出你的 app 選項,就會顯得很不合理。PSPDFKit 的開發團隊找到一個很有趣的方法來解決這個問題!

pspdfkit.com

Would Async/Await Work In Swift/iOS?

「非同步操作」基本上已經是每個 app 都需要面對的問題,有些程式語言提供 async/await 語法來處理非同步操作,但目前看起來 Swift 尚未打算提供類似的語法。本文作者 Joe Conway 分享他的思路,說明 Swift 底下該怎麼實作這個特性。

stablekernel.com

@uranusjr

Debugging Your Operating System: A Lesson In Memory Allocation

Requests 是 Python 上最受實戰驗證的 HTTP 客戶端函式庫。但它的主要維護人之一 Cory Benfield 最近卻收到一個神奇的 bug report

iter_content 在 HTTPS 連線收到很大的內容時會變得很慢

這一點也不合理 —— Requests 歷史如此之長,使用者如此之多,怎麼到現在才冒出這麼基本的問題?Cory 跟著 reporter 一路追下去,才發現這牽扯到非常多因素:使用 CFFI 配置記憶體的實作、C 標準庫對 calloc 的實作malloc 的差異、一直到蘋果需要針對記憶體極端受限的硬體,而對它的極致優化

Abstraction is leaky. 不論你的應用有多麼高階,總是有些問題會需要一直往下挖,才能找到真正原因。希望大家都能擁有足夠的自我修養,不要漏點了底層的技能樹。

lukasa.co.uk

The 100% correct way to do CSS breakpoints

三個實作 CSS 斷點的原則:

  • 正確規劃斷點位置
  • 為斷點取好名稱
  • 要有描述性

第一點根本一上來就打爆所有你既有的斷點概念啊!我之前和各大網站的 layout 掙扎了滿久,才決定我筆電上的所有瀏覽器視窗都要是 1225 px 寬,不多也不少,就是因為很多網站的斷點都設得不太好(包括 Twitter),讓使用者體驗整個糟。希望大家都能被這篇文章啟發一些想法,進而改善自家網站的 layout。

freecodecamp.com

Why I’m Making Python 2.8

有個人把所有的 Python 3 新功能都 backport 回 Python 2,然後把專案名稱作 Python 2.8。他的原因是自己的程式碼都在 Python 2,而與其把所有程式都改寫成 Python 3-compatible,不如把新功能移植回現在這個直譯器上,然後就可以用了。喔耶!

嗯,不論你對這個專案的想法如何,至少不需要否認它的存在價值啦。作者有個問題需要處理,然後別人無法(不想?)解決,所以他就用自己的方法找了出路。這就是開源的基本精神,不是嗎?

比較有趣的倒是 Python 社群的反應。Hacker News 和 Reddit 一堆瘋子就不用看了,許多 Python 大名們也都有討論。話說前陣子也有某大手發表自己對 Python 3 的厭惡,宣稱 Python 2 才是正道,自己永遠不會升級,也不會教任何新手 Python 3。好啦其實 Zed A. Shaw 在技術界早就頗黑,雖然很受一部份人愛戴 怎麼有點像某人,但畢竟他的 reach,尤其對許多初學者的影響力還是很大,所以雖然文章內容根本錯誤百出無從吐槽,但(幸好)還是有人跳出來反駁,其中不乏比較情緒的發言。反觀起來這個專案大家就比較能接受,普遍的反應比較接近「雖然不樂意,但這是個人自由,反正就冷處理」。最多的討論倒是圍繞在不該用 Python 這個名稱,主要是商標因素。好像也是有道理。

naftaliharris.com

H.264 is Magic

為什麼桌面上顯示一張 1 MB 的 PNG 檔,錄成 5 秒鐘影片之後反而只剩 175 KB?因為 H.264 很神奇。這篇文章會帶你走過 H.264 所使用的各種技巧,解釋究竟要怎樣把影片中如此大量的資訊,壓進比圖片還要清亮的檔案尺寸。

上次引了一篇介紹 GIF 歷史的文章,裡面也有提到 GIF 的一大問題就是難以壓縮;為了解決這個問題,現代服務提出了各式各樣的解法。舉例而言,當你把一張 GIF 上傳到 Twitter,出現在你 timeline 上的其實是⋯⋯一個 H.264 編碼的無聲 MP5 影片!因為現代的影片壓縮技術實在比 GIF 厲害太多啦。

文中的主題大致可分成幾個階段:

  • 頻域壓縮(量化壓縮 quantization)
  • 色度抽樣(chroma sampling)
  • 動態補償(motion compensation)
  • 熵編碼(entropy encoding)

如果你很熟悉上面這些名詞,恭喜你 XD 如果你都看不懂,那才是正常不過;不過這篇文章就是來解釋它們的,所以完全適合好奇又沒有任何基礎知識的人。雖然看完大概對工作也不會有什麼立即幫助,但還是很酷的閒暇閱讀。

sidbala.com

工作機會

Web Developers at Dcard

Dcard 是全台灣最大的學生社群,每天有超過百萬人在使用,是近年來台灣崛起最快的本土團隊。同時在技術上努力追求突破,是國內數一數二早將 Kubernetes 用在 production 的公司。使用架構:Kubernetes, Node.js, Golang, Elixir, PostgreSQL, Redis, Scylla, React/Redux。

履歷請寄到: welcome@dcard.cc 或到 http://join.dcard.today

dcard.today

Python Web Backend Developers at StreetVoice

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

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

streetvoice.com

Random Cool Stuff

PPAV - 搜尋、推播 AV 的 Facebook Messenger BOT

這大概是近期最熱門的一個機器人了吧!簡直就是殺手級應用啊!怎麼使用這個機器人我想附圖已經說明得很清楚了,如果還是不會用,那就直接去這個 PPAV 粉絲頁傳私訊看看就知道了~

我來改改 CodeTengu 的副標:

PPAV 適合所有患有資訊焦慮症、氣血循環不順以及性受挫的軟體工程師們。

@fukuball 分享。

github.com


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

CodeTengu Weekly 碼天狗週刊 - Issue 73 Merge branch 'develop' - Dec 19th 2016

$
0
0

Hello World

CodeTengu Weekly 碼天狗週刊

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

以下是目前的 curator 陣容:

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

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

@mingderwang

Scanning Live Ethereum Contracts for the "Unchecked-Send" Bug

智能合約安全嗎?我也常被問到,怎麼寫智能合約才安全?其實是因為一般軟體處理的是 data (資料),智能合約處理的是 value (價值);因此,小小的錯誤,就有可能造成非常大的損失。因此正確的程式寫法或安全的設計模式 (Secure Design Patterns),在智能合約裡變得更加重要。不巧的是,剛開始 Solidity 的範例程式,也跟 C++ 的教科書一樣,為了方便讀者學習,拿掉許多檢查錯誤的程式碼。這樣的錯誤示範,更嚴重的影響到後來陸續開發出來的合約,theDAO 是最典型一個有程式漏洞的智能合約,它也是有史以來最大的眾籌募資 (1.5 億美金),但沒多久就被駭客偷走了 5,300 萬美元。

這篇文章,簡單的介紹什麼是有問題的程式寫法,當然也建議怎麼寫最好。目前這種問題的解決方法,就是利用工具來檢查這些錯誤的寫法,找出程式裡的安全漏洞,還有研究怎麼樣的設計模式,能避免類似的問題再次發生。

hackingdistributed.com

Debugging Node.js in Chrome DevTools

介紹大家一個簡單易用的 node.js 開發、除錯以及 profiling 工具,devtool。它功能之多,真的很難用言語形容。你們可以自己下載下來用用看,就知道它真的有多好用了。

svbtle.com

Jenkins Pipelines: What I Wish I Knew Starting Out

初學 Jenkins 者可能會覺得門檻很高,尤其是新的 2.0,最好用的應該是 Jenkins Pipeline 功能,但又要學一個語言叫 Groovy 才能使用。

這篇文章介紹為何他們選擇 Jenkins pipelines 當他們連續部署 (continuous deployment) 的工具,在使用過程中,他們也踩了不少雷。因此藉由分享他們的使用經驗,希望能省下大家學習與嘗試錯誤的時間。如果大家想更近一步的學習,可以從 Pipeline Examples 找到更多範例與樂趣。

medium.com

@kako0507

The Inner Workings Of Virtual DOM

Preact 是 lightweight 版本的 React library ,本篇文章會透過流程圖一步一步仔細探討 Preact 在 create 、 update 、 remove DOM 的流程,以及跟 React lifecycle 的關聯。

medium.com

Learning Progressive Web Apps Step by Step

Progressive Web App 透過 App Shell 的概念讓使用者在任何環境都可以順暢瀏覽網頁,這裡提供一個懶人包,除了介紹外,也有幾個 boilerplates 與 generators 方便玩玩第一個 PWA 網頁。

github.com

HTML Interactive Form Validation

HTML5 的 form validation 終於被實作在 Webkit 上,將來的 Safari 瀏覽器終於也可以使用原生的 validation attributes 以及 JavaScript API ,文內提供幾個簡單的例子以及 DEMO 。

webkit.org

Writing Efficient JavaScript

本篇文章提出了一些 rule ,經由 JIT compiler 的角度探討,透過確保 compiler 正確執行一些 code optimization ,以及撰寫更有效率的指令,來提升程式的效能,概念都非常簡單,值得一讀。

medium.com

@yhsiang

Functional Programming Patterns

非常值得一看的 Slide,重新把 functional programming 的基礎再重新走過一次。搭配一些簡單的範例,讓你更了解 functional programming 的優點。投影片以 typed language 作為主要範例,所以 clojure 或 javascript 的朋友如果沒有 haskell 或相關家族的語言經歷,可能會沒那麼容易體會。

slideshare.net

How SAML Authentication Works

企業中常常使用 SAML 作為 Single Sign-On (SSO) 的協定。文中介紹了 SAML 的優點,並且簡單講解了 SAML 是如何運作。

其實只需要看前面說明的部分,就可以了解 SAML 的運作,後面的篇幅在介紹如何使用 Auh0 的 SAML 功能。 有在尋找 Single Sign-On 解法的朋友也可以參考 OpenID Connect,不是之前曾經熱門過一陣子的 openid 2.0,他們是不同的協定。openid connect 是基於 Oauth2 加上了 JWT (JSON Web Token),也可以達成 SSO 的功能。想了解更多的朋友,我會在 GTG19 (Golang Taiwan Gathering #19) 有更多的介紹。

auth0.com

Trying out Postgres Bloom indexes

Postgres 9.6 新增了一個功能叫 Bloom indexes,可以先閱讀過前一篇 So what are Bloom indexes for Postgres? 來了解其作用。

這篇主要真的實驗了 Bloom indexes 的效果。就這篇的測試資料來說,結果算是很不錯。但在 summary 裡面有提到一些問題,所以使用上還是有要注意的地方。

cybertec.at

The Saga of Go Dependency Management

說明了 golang 套件管理的發展,以及目前成立了一個套件管理委員會。說明委員會的任務,還有他們第一次開會完的一些目標。

看起來 golang 的管理套件會採取和其他現代化的套件管理工具類似的做法。像是 SemVer、扁平的相依性、兩個檔案,一個作為套件版本號,另一個作為 lock 檔案。

這篇蠻適合剛接觸 golang 的新手了解目前 golang 發展的情況。

gopheracademy.com

For User Engagement, Forget Flow. It’s All About Fiero

Flow 是使用者體驗裡面常提到的,通常包括四個元素。

  1. 明確的目標
  2. 回饋
  3. 挑戰與鍛鍊的平衡
  4. 低風險的失敗

但是作者說明前兩個很容易,但是一般對於非遊戲化的系統,要做到遊戲化根本上缺少了第三項。 所以在嘗試遊戲化的過程中,你很難達到 flow 的設計精神。

作者說,重要的其實是 Fiero (成就感),當你越過任何難過時候達成的感受,才是讓你不斷努力的原因。 下次在你的設計中,試著嘗試加入一些成就感的體驗吧。

prototypr.io

Webpack Performance Budgets

medium.com


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

CodeTengu Weekly 碼天狗週刊 - Issue 74 只有兩種產業的人會把他們的客戶稱為 User,軟體工程師和毒販 - Dec 26th 2016

$
0
0

Hello World

CodeTengu Weekly 碼天狗週刊

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

以下是目前的 curator 陣容:

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

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

@tzangms

YesSQL, Process and Tooling at Scale

GitHub 在用 MySQL 時的流程跟相關工具的投影片, 真的是整合了很多東西進 Slack + hubot。

當中比較感興趣的是已經出來一陣子的 gh-ost - GitHub's Online Schema Migrations for MySQL, 先前沒好好看他, 看了這份投影片之後覺得實在厲害, 應該研究下, 因為目前部署後 migration 應該是我們 StreetVoice 部署流程中, 最後需要完善的一個部分。

speakerdeck.com

The Ops Identity Crisis

可能從我第一份工作開始, 對於 Dev 跟 Ops 的界線就是模糊的, 除了寫程式之外, 也得搞 Server, 所以我從一開始就認為 DevOps 對於開發人員來說是基本的, 一直到後來認識一些在大公司任職的開發人員才知道他們的工作、職責被切得這麼細。

這篇文章在講 Ops 身份危機, 像是 DevOps 的崛起, 還有許多工具的出現, Ops 這件事對於 Developer 來說簡單了許多, 一直到近年的 microservice 及 serverless, 導致 Ops 的工作越來越少, 被 Developer 直接搶走了, 但是這個 Ops 這個職位會消失嗎? 我覺得是不會的啦, 只是負責的事務不該跟 Developer 分的那麼開, 而是越來越像, 只是主要負責的東西不同, 畢竟 Dev 跟 Ops 兩這之間的工作本來就有一定的重疊。

其實 StreetVoice 在一、兩年前還是找了一個專職的 Ops, 但是他也寫一些程式, 實際上, 因為 Ops 有很多東西需要花時間去測試、調教, 在 mindset 上跟 Developer 對比起來有一些不小的差別, 我覺得還是需要專職的人來負責。

但, 你覺得程式部署上線之後、出問題時該 on call 的是 Ops, 還是寫程式的 Developer? 其實這答案很簡單吧。

susanjfowler.com

Maya - Datetimes for Humans™

requests 的作者 kennethreitz 另一個給人類的禮物。

github.com

@hiroshiyui

One Sure-Fire Way to Improve Your Coding

提升自己編寫程式的能力,除了多寫,就是多讀、多觀摩、研究那些優秀的程式之所以優秀的緣由何在。本篇是一份很完整的指南,指引您如何挑、如何讀、如何領會那些優秀程式的設計之道。

changelog.com

Etsy CTO Q&A: We Need Software Engineers, Not Developers

本篇專訪 Etsy CTO,談及 Etsy 的技術架構與 DevOps 文化,以及如標題所示「我們想要的是工程師,而不是軟體開發者」,而這也是本篇最值得一讀的一節。先別因為這有點標題黨的風格而倒了胃口,裡頭寫得非常好。

thenewstack.io

"Tell, Don't Ask" in Elixir: A Story of Pattern-Matching

我是一個資質駑鈍的人,有些東西,像是 Object Oriented,就花了很久才領會。小時候讀《世紀末軟體革命 2》說 OO 是「模擬世界,加以處理」,也由於我腦子轉不過來,加上被 BASIC, C, Assembly 這種「照著流程跑」的程式運作邏輯制約,始終不覺得我何以需要 OO 這樣的 paradigm shift。一直要到讀了 matz さん的《松本行弘的程式世界》才又在裡頭的內容之中領悟了「物件 = 把資料與程式封裝起來」這種設計的奧義所在。

而這樣的後知後覺也一度讓我有「用 Ruby 這樣的 OOPL,卻寫出了不 OO、怪抽象、壞氣味程式」的弊病,也是直到我讀了 Tell, Don't Ask 才有大徹大悟之感。

這篇文章講的是 Elixir 雖然一般咸認是函數式語言,要寫出遵循 Tell, Don't Ask 原則的 declarative (not imperative) 程式可能第一印象會覺得有點困難,但是透過合理的程式邏輯規劃,我們還是可以用 Tell, Don't Ask 原則寫出好寫好懂的程式來。

thoughtbot.com

"Thinking in AngularJS" if I have a jQuery background?

之前在 Twitter 上道出了我不太理解這些前端框架之於 jQuery 的精神、出發點差異所在,推友 @caasih 寫了好幾則 tweets 為我釋疑,讓我有了一點基礎認知。

這篇 Stack Overflow 上的問答恰好也跟我的問題極為相像,底下幾個被讚爆了的解答都很有啟發我這種前端麻瓜的參考價值,推薦給同為「被 jQuery 慣壞、同時沒做過有一定規模的前端專案」的各位。

stackoverflow.com

Wolf – Gameboy cartridge with co-processor

在 Gameboy Color 上移植德軍總部 3D,作者用了很多早期遊戲機上突破硬體先天限制的常見途徑:特製處理晶片。我們在紅白機上、在超任上玩過的某些大容量、音效特佳、畫面特效令人驚豔的遊戲,很多是仰仗了這種「開外掛」的方式,另外則是取決於遊戲製作者對主機的掌握度,盡可能以軟體手法做出效果。

我一直很敬佩這些遊戲創作者在有限的資源底下,盡可能豐富我們玩家的感官享受。遊戲機與電腦的遊戲運行環境,向來就是一個相對拮据、一個相對充裕,於是我們常常在電腦上無論是開發遊戲還是其他軟體,都太過於揮霍,這台跑不動,就要你開另一台更好規格的去跑。也許,三不五時可以反思:「是否我可以把手上這個軟體,寫得再更有效率、更省資源些?」真的情非得已時,再去開外掛?

同場加映:

happydaze.se

@kkdai

kkdai/luis: Microsoft Luis.ai API Golang package

編輯自肥的時間又來了!!

LUIS.AI 是微軟提供出來具有 NLU (Neural Language Understanding) 的一個服務,可以讓一般使用者輕鬆建立與使用微軟建立好的語言學習模型.

目前還提供一些 free-tier ,具有良好的繁體與簡體中文的支持,很推薦大家用用看. 這裡有一篇教學文章

花了幾天的時間,稍微把微軟的 LUIS.AI Golang package 包裝好了. 主要可以讓大家透過 LUIS Golang 套件來做以下事情:

  • 增加一個新的語句 (utterances)
  • 訓練模型
  • 透過已經訓練好的模型來預測結果
  • 選出最高分的結果

目前僅僅完成我需要用的接口,還需要大家的幫忙能夠讓它更好!!

github.com

第十九次 Golang 台灣聚會的投影片跟錄影

又要自肥一下 (喂!)

Golang.tw 是台灣 Golang 社群的官方網站,我們目前持續每個月一次的聚會頻率 ( 如果沒有找不到講者的話 (笑) ).

第十九次的聚會 (GTG19) 日前在 2016/12/20 剛剛聚會完,講者陣容強大包括:

  • Hawk
  • g0v 爆炸頭 LY

閃電秀也跨領域請到

  • Data Scientist - Summit Suen
  • HackMD 作者 Max
  • Guesslin1986

大家如果錯過,可以來看看投影片跟錄影檔.

下一次聚會預估是在 2017/01/24 (如果如期找得到講者的話.... #^___^#)

github.com

comma.ai research 無人車自動駕駛 AI 系統開源了

comma.ai 提供一個無人車自動駕駛的 AI 系統,他們開放了他們 AI 方面的原始馬來提供給大家試試看.包括自動跟車等等系統都在裡面.

開放項目還包括了 80 G 的 Dataset (包括七小時十五分的駕駛資料還有其他的) ,系統使用 Anaconda, Tensorflow 與 CV2. 很有趣的專案.

這個專案有以下特性:

  • 不需要建模與圖形函數 (CV2 僅僅拿來比對相片相似度)
  • 適用於小解析度相機 (160 x 320 灰階)
  • 透過 RNN 來分析

comma.ai

DeepMind AI Reduces Google Data Centre Cooling Bill by 40%

其實 Deepmind 雖然為人所知的就是 AlphaGo 打敗世界棋王,其實前幾個月 ( 2016/07 ) 也公布另外一篇文章.就是講解 Deepmind 透過 AI 的方式來省掉 40% 的冷氣電費.

其實 Google Datacenter 很省電一直都不是秘密,這也是為什麼 GCP 可以比其它同業便宜的原因. ( GCPUG.TW(Google Cloud Platform User Group Taiwan))

這邊有個有趣的舊聞:

這個鏈結裡面有 Google Datacenter 省電的方式,裡面有

  • Measure PUE: 仔細分析 PUE
  • Manage airflow: 管理冷氣的通道
  • Adjust the thermostat: 調整溫度控制
  • Use free cooling: 使用天然冷氣
  • Optimize power distribution: 透過 將 UPS 放在主機上,來減少 AC/DC 轉換

其中... 如果你去搜尋 AC/DC 的話就會找到一個知名人士

恩恩... 就是 「智慧城市委員會」顧問 - (翟神) 翟本喬

deepmind.com

Open-sourcing DeepMind Lab

這兩天最紅的 (ML) 新聞之一,大概就是以 AlphaGo 打敗世界棋王而聞名的 DeepMind .要把他們的 3D 平台的實驗室開源了,這一個 3D 平台中,使用者(玩家)就是擔任裡面的一個浮在空中的攝影鏡頭,並且可以在裡面解開一些謎題.

是不是有點熟悉? 沒錯!就是類似於 OpenAI 的方式.

目前代碼已經開源在 Github
懶得看英文? 這裡有中文

題外話:

此外,其實大家都會想說 DeepMind 下一步是不是要挑戰 3D 遊戲呢?

其實早在三四個月前,就已經有 Data Scientist 研究透過 Reinforcement Learning (Q-Learning) 來玩 DOOM (毀滅戰士) 的 Deathmatch 模式,相關網址

方式是透過兩個邏輯:

  • 遇敵邏輯: 就是經由 3D 圖像的判斷,透過 Q-Learning 來自我學習如何透過最少的時間找到敵人.
  • 戰鬥邏輯: 一樣是透過 Q-Learning 的方式來找尋到最好的戰鬥方式.

只是這次 DeepMind 想要挑戰什麼?大家可以猜猜!!

deepmind.com


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

CodeTengu Weekly 碼天狗週刊 - Issue 75 程式寫得爛沒關係,技術奇點來臨之後,你程式裡的 bug 電腦都可以自己解決,如果沒有,至少你會被電腦解決 - Jan 2nd 2017

$
0
0

Hello World

CodeTengu Weekly 碼天狗週刊

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

目前的 curator 陣容:

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

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

@vinta

Best Practices for Building a Microservice Architecture

跟作者的另一篇文章 Best Practices for Designing a Pragmatic RESTful API 一樣,列舉了很多非常值得遵循的最佳實踐。而且不像其他講 Microservice 的文章,其實不需要一上來就跟讀者吼一堆 Domain-Driven Design (DDD) 的術語也是可以把很多重要概念講得很清楚的嘛,不過當然缺點就是篇幅稍微長了一點。基本上就是精華版的 Building Microservices

不過說到底,在把 Monolith 改造成 Microservice 之前,其實你應該得先有一個「高內聚、低耦合」的 Monolith 才行啊,不然事情只會變得更複雜。

vinaysahni.com

MySQL 5.6 Reference Manual - InnoDB Locking and Transaction Model

上禮拜都在研究 MySQL 的 deadlock 問題,但是卻發現自己對這方面的理解不夠扎實,看了一些文章之後才發現其實還是官方的文件寫得最完整(這不是廢話嗎?!)。大家有空也研究研究,不要讓別人笑我們不懂資料庫。雖然說 lock 的實作也只是冰山一角就是了。

mysql.com

Handling Unicode Strings in Python

說到 unicode 應該是很多 Python Developers 心中永遠的痛,讀了這篇文章應該可以稍微緩解一點。作者不像其他的 unicode 科普文那樣,他沒有講太多其實你根本也不想知道或是看不懂的 unicode 標準的前世今生和實作細節(當然還有那些和你的 OS 有關的眉眉角角)。好吧,不過至少你讀完就會知道什麼時候該用 .encode() 什麼要用 .decode() 了。

emacsos.com

Become a pdb power-user

雖然在 Issue 2 也有分享過 pdb,但是這篇文章介紹得更詳盡,例如 .pdbrc 這個用法我還是看了文章才知道,值得再分享一次。而且因為前陣子面試了一些 Python Developers,卻發現用過或是聽過 pdb 的人比我想像中要少得多,正所謂「工欲善其事,必先利其器」啊諸君。

延伸閱讀:

medium.com

Dev Tips - Chrome DevTools Tips by Umar Hansa

這個網站的作者每個禮拜會發布一則 DevTools 的實用小技巧(而且會把使用方式做成 GIF 圖!幹人也太好!),一直有聽說 Chrome 的 DevTools 很強,但是直到看了這個網站之後才真的知道 DevTools 究竟有多強,嚇到尿褲子了。不過有些新一點的功能可能只有在 Chrome Canary 才會出現。這裡列了幾個我真心覺得實用的小技巧,大家感受一下:

有時候還真的有點羨慕前端工程師啊,竟然有像 DevTools 這麼棒的工具可以用,但是轉頭一看 JavaScript,嗯,好吧,上帝可能還是公平的。

umaar.com

罗辑思维 - 即将到来的阶层社会

因為 Issue 75 正好是 CodeTengu Weekly 在 2017 年的第一期內容,不免俗地要跟大家說聲新年快樂!說幾句吉祥話,祝福大家在新的一年裡不要再對自己有不切實際的期望了,如果用著一樣的心態,你在 2016 年做不好的事情到了 2017 年多半也還是做不好。衷心地希望各位可以早點接受自己所在的階級位置然後心安理得地活下去。就像是那個你每天汲汲營營追求的夢想中的生活,對某個上層階級的小孩來說他不費吹灰之力就能得到,而你卻還覺得這一切只是因為你不夠努力。

延伸閱讀:

最後,順道一提,CodeTengu Weekly 接下來會休刊四個禮拜,不過也可能更久。

youtube.com

@saiday

Your Git Log Should Tell A Story

有時候光是看到好的 commit message,連 diff 都不想看就想 merge 了!

commit message 不應該是 murmur 而應該是跟另一個人講事情,就算只有自己一個人在做。半年後的你 (還沒有放棄的話 (不能加這種附註吧) ) 會感謝自己的。

mokacoding.com

Behind the Scenes of iOS Security

這是 Apple 的安全架構師 Ivan Krstić 在 Black Hat conference 的 talk,深度地介紹了 iOS 的安全機制跟實作方法,看完之後有種肅然起敬的感覺。

  • Hardened WebKit JIT Mapping
    iOS 10 的新特性,JavaScript 編譯出來放在記憶體一個設定成只能執行不能讀寫的地方,這讓同一個 process 也沒辦法讀跟改最後執行的版本。
  • Secure Enclave Processor
    有指紋辨識的 iPhone 就會有 SEP,SEP 是一個獨立的硬體跟軟體用來管理你的登入資訊 (指紋、passcode),不僅如此,他還介紹了從裝置開機到解鎖到再鎖起來相關的 key 的產生、派發跟儲存。
  • Synchronizing Secrets
    HomeKit、Apple Watch 的 Auto Unlock、iCloud photos 同步的安全系統,聽起來是滴水不漏,甚至為了安全性不惜自斷經脈將系統的實體 admin cards 用強力攪拌機粉碎了(?!),也就是說之後這個系統若要更新,所有裝置都必須做軟體升級。
    另外,Cloud Key Vault 在 server side 也是用專用的硬體機制隔離,就像是上面提到的 Secure Enclave 在我們的 iOS 裝置上的那樣。

關於把 admin cards 粉碎的解釋:
"Why do we take this last step that's extremely unusual? We go to great lengths to engineer the security systems to provide trust. When data leaves the device, the stakes are even higher. We need to maintain that trust. If we keep possession of those admin cards, there's the possibility that's not true. That's how seriously we take our mission about user data."

youtube.com

Make an android custom view, publish and open source.

Android 自定義 view 的實作跟設計,還包含了將 library 加入到 JCenter 的詳細解說。

這是一篇給有心想開源視覺元件的人很好的參考文。

medium.com

@fukuball

A framework agnostic PHP library to build chat bots - 一個打十個的訊息機器人開發 PHP 套件

PHP:初級

訊息機器人這樣的服務相信大家都不陌生,近期這樣的服務又慢慢火熱起來浮上檯面,可能因為天時、地利、人和,又可能是因為 ChatOps、AI、Deep Learning on NLP 的發展等等因素,我不知道,我不是趨勢專家,所以什麼原因我們就不要去深究了!但我相信大家在工作上多少會有開發訊息機器人的需求,甚至有些開發者問你有沒有寫過訊息機器人,如果回答沒寫過那就太遜啦~

mpociot/botman 這個 PHP 套件可以讓 PHP 開發者用同一套寫法來串接各個訊息平台,包含 Slack、Telegram、Microsoft Bot Framework、Nexmo、HipChat 及 Facebook Messenger(不過沒有 Line 及微信,沒辦法,西方高階種族不用這些),幾乎所有知名的訊息平台都可以串接了,所以才號稱一個打十個啊!大家自己玩玩看吧!

github.com

The major advancements in Deep Learning in 2016 - Deep Learning 在 2016 的大躍進

Deep Learning:中級

相信大家一開始接觸 Machine Learning 及 Deep Learning 一定都是從監督式學習開始,非監督式學習在這個領域一直都是一個較為進階的問題,而 Deep Learning 在 2016 的大躍進主要就是非監督式學習 GAN 的發展(Generative Adversarial Networks 生成式對抗網路),主要概念就是 generator (G) 會透過 discriminator (D) 漸漸改進他的效果,而這個過程不需要人類標示來評估,像這樣的模型可以用在語意理解、自然語言處理、為文字產生圖片、為圖片產生文字等等應用。

這篇文章算是對 Deep Learning 在 2016 大躍進的一個總結,其中 Open AI 這樣還 A.I. 於民的非營利組織及越來越活絡的 A.I. 社群似乎也揭示了未來 A.I. is new energy。

tryolabs.com

Finding the genre of a song with Deep Learning - 使用 Deep Learning 辨識音樂風格

Deep Learning:中級

本篇文章展示了如何使用 Deep Learning 來辨識音樂風格,其實有時使用 Deep Learning 的哪個算法可能不是重點,由於音樂是一個時間序列,且長短不一,了解這個特性將資料轉換成可以用來訓練的形式反而是關鍵。這裡的作法就是先將音訊轉換成頻譜之後,產生頻譜圖再切成固定大小的圖片,使用頻譜圖片特徵來進行訓練,預測時再用各個小段落的預測結果投票產出一首歌的音樂風格預測。作者也將原始碼分享出來了,大家有興趣可以去 GitHub 載來玩玩看。

chatbotslife.com

The Great A.I. Awakening - A.I. 的覺醒

Artificial Intelligence:初級

這篇刊在 The New York Times 的文章介紹了 Google 在 A.I. 領域 - 特別是 Google Translate 的發展,類神經網路在近幾年成果豐碩,A.I. 也在這樣的成果中從幾十年的黑暗中看到了曙光,雖然這些成果在人類想像中的 A.I. 還只是弱人工智慧,但或許人類正在喚醒 A.I. 中。大家可以把這篇文章當成是科幻小說的序章在閒暇時看看吧~

nytimes.com

手把手的深度學習實務

Machine Learning、Deep Learning:中級

台灣資料科學年會舉辦的手把手系列真的質量都蠻高的,今天再跟大家分享一下手把手的深度學習實務,這份簡報非常詳細,使用 Kaggle 上的 Predict'em All 資料集帶著大家一步一步使用深度學習練習訓練出一個有效的預測模型,如果想要趕快上手深度學習,這是一個很棒的捷徑!

目前這門課程一月也有開,大家有興趣可以去報名!(這不是廣告啦,單純就是我覺得很值得分享給大家)

slideshare.net

@mingderwang

Why are suicides used in contract programming?

誰說在 blockchain 上寫一個 "Smart Contract" 就永遠不會消失,那你就被騙了。該合約還是有可能被刪除的,也就是合約有可能因此終止。在 Solidity 101 教學裡就有提到方法,就是 call suicide() 這個 function,但後來改用 selfdestruct(),怕用 suicide (自殺) 大家有可能聯想到傷心事。Anyway,這討論有提到它的用途,也有提到它的缺點。記得不要把錢往已經中止的合約送,那就有去無回了!

stackexchange.com

Blockchain Predictions for 2017

Ethereum 跟比特幣的對抗預測將會在 2017 年結束。但 Ethereum 要到成熟,也還有一段很長的路要走

fee.org

Testing API Examples with Dredd

一個適用多種語言的 API 測試 framework,Dredd。目前可以測 Go、Node.js、PHP、Python、Ruby、以及 Perl 所開發出來的 API 程式。且支援用 api blueprintswagger 定義出來的格式。也就是說,不管你用哪一種語言開發 API backend,要先從定義 API 開始,但不是用 word 文件來寫 API 規格,而是用 apiary editorswagger editor 的線上方式直接撰寫,就可以邊寫邊產出 API 的互動畫面。有了 apiary.apib 或 swagger 的 yml 檔,就可以用 Dredd 直接測試,最後再跟 Jenkins 或其他 CI 整合,真是一個非常理想的開發 API backend 的流程。 本文用 Python 跟 Node.js 當範例,簡單的做了個示範,希望能挑起你使用 Dredd 做 API 自動化測試的興趣。

codeship.com

@kako0507

Code-splitting your way to better perf with Webpack

在使用 webpack bundle JavaScript 時有可能會產生過大的檔案,這個短短六分鐘的影片介紹 Webpack 的 code splitting (Lazy loading) 的一些小技巧:

  • CommonsChunkPlugin: 將一些共用的 module 提取出,產生 common bundle file。
  • AggressiveSplittingPlugin (for HTTP/2): HTTP/2 下每個 request 都是同一個 TCP 連線,所以靠減少 requests 這個目前還算主流的網頁最佳化方式反而會造成反效果,這個 plugin 可以用來切割 bundle file 成多個較小的 chunks 來增進快取的效率。

youtube.com

Tail call optimization (TCO) in Node v6

Node.js v6 支援了 Tail call optimization (TCO) ,因為在 Tail call 執行後 caller 已不需要執行任何指令,在 tail call 前即不須保留 stack,所以就不會產生 stack overflow 的問題。

medium.com

@chiahsien

fantastic-ios-architecture: Better ways to structure apps

開發 iOS 這麼多年了,越來越感受到架構的重要性,尤其是當產品越長越大的時候,更能體會「好的架構帶你上天堂」這句話的辛酸血淚。新年第一波就為各位帶來滿滿的架構大禮包,祝福各位在新的一年能夠準時下班、荷包滿滿!

github.com

@uranusjr

The ‘Say Thanks’ Project

偶爾會在 Email、Twitter、其他 SNS 收到、甚至當面跟我說欸你是那個什麼什麼的作者,那個超棒的!謝謝你!之類的話。雖然會做軟體玩社群辦活動之類的也不是想得到什麼回饋,但是這種時候真是超級開心的啦。 >///<

然後就會想,其實大家都是這樣吧。我這麼喜歡他做的工具,如果能對他說聲謝謝一定很棒!如果你喜歡某個專案,趕快上去說聲謝謝!如果你是專案作者,那就快把這個按鈕放上你的專案,好讓我謝謝你!!

[![Say Thanks](https://img.shields.io/badge/say-thanks-ff69b4.svg)](http://link.codetengu.com/yoT6cJ8?m=rss)

感謝 Kenneth 帶來這麼棒的服務。✨🍰✨

saythanks.io

The .zip file specification is flawed

Node 的 ZIP 解壓縮函式庫 yauzl 收到下面的 bug report:

我在解壓縮一個使用者上傳的 zip 檔時遇到問題。我試過的所有程式都打得開這個檔案。下面是錯誤訊息:

Error: invalid comment length. expected: 12298. found: 0
    at /usr/src/app/node_modules/yauzl/index.js:125:25
    at /usr/src/app/node_modules/yauzl/index.js:539:5
    at /usr/src/app/node_modules/fd-slicer/index.js:32:7
    at FSReqWrap.wrapper [as oncomplete] (fs.js:681:17)

如果我把拋出錯誤的 index.js 第 25 行註解掉,檔案似乎就能正常解壓縮。有想法嗎?

在短暫的訊息交換後,作者給了一篇破千字的解釋,從 ZIP 標準開始談起,描述其中對 magic number 位置定義的問題、實作如何處理這個問題、使用者檔案中包含特殊格式而觸發的 bug、一直到可行的解決方案。這同時是對 ZIP 檔案結構的基本介紹,提醒制定標準時需要注意的事情,也描述了各實作方對模糊標準的不同處理風格,當小故事看也十分有趣。

github.com

Intro to the 8-Point Grid System

作者介紹了一個排列 UI 元件的基本準則:八點系統,也就是把所有 UI 上的尺寸都做成 8 pt 的整數倍。這會讓你的 UI 看起來更一致,被縮放時(不論你自己或客戶端的設備)也會更準確。

我一直都在做 UI 的時候把單位做成 8 的倍數(偶爾在小區域用 4),但從來沒想過背後的道理,只是做久了就直覺認為這樣特別方便,畫面上的東西很容易對齊。原來這有個專門的稱呼,還被系統化了啊。推薦給大家。

medium.com

Grace Hopper and the psychological drain on the gender minority

作者單槍匹馬參加 Grace Hopper Celebration of Women in Computing 後,寫下了一些感想。

一點 context:Grace Hopper Celebration of Women in Computing 是世界最大的科技界女性集會,會議名稱來自世界上第一批電腦工程師之一、COBOL 創造人,美國海軍准將 Grace Hopper。會眾幾乎都是女性,而作者(直男)一個人去參加,嗯⋯⋯。

我對文中提到的一點特別感同身受:當你與眾不同的時候,那種沒辦法融入、讓你懷疑自己不屬於這裡的感受,是最難熬的情緒。作者在會議最後溜出 closing party 思考他在會議中的經歷,這個舉動就說明了很多。我不知道大家有沒有這種經驗,但我完全能從自身經歷 reflect 他的感受。雖然非常讓人討厭,但也很重要的體驗。

medium.com

@kkdai

如何成为一名人工智能产品经理?

這篇文章主要介紹做一個 AI (ML) 的 PM 與一般軟體(或是服務)的差別在哪裡,如何做好一個?

也會一並建議如何自我進修的部分.

引用 Andrew Ng 的一段話:

「对我而言,无论何时,当我觉得我不知道下一步应该如何做的时候,
我将会尝试大量的学习和阅读,和某些领域的专家谈话。我不知道我们
的大脑是如何工作的,但它非常的神奇:当你读了足够多的书,或者和
足够多的专家谈话之后,换句话说,当你的大脑有了足够多的输入信
息,新的想法就会随之产生。」

36kr.com

The 12 Factors of Go

12FA (12 factor app) 是 heroku 提出建制 modern app 的方法論。

這篇作者試著用 Go 與 Docker 來實作並且寫了一本書

scene-si.org

fern4lvarez/piladb: Lightweight RESTful database engine based on stack data structures

piladb (pila: 就是西班牙文的 stack): PilaDB 是一個輕量化的 RESTful DB ,並且提供 stack structure 的架構,也就是說你可以透過 Push/Pop 來存取資料.

github.com

Infrastructure for Deep Learning

OpenAI(一個提供平台給大家做 AI 練習的公司) 公佈了他們的基礎架構,一個基於 Kubernetes 所部署出來的分散式的 Tensorflow .

這篇文章除了介紹 Tensorflow 之外,也介紹了一個透過 Deep Learning 完成的範例. 其中系統架構是透過 Kubernetes 加上分散式的 Tensorflow cluster ,並且透過 Kubernetes-ec2-autoscaler 來做到機器的 Auto-Scaling .

openai.com

Why Red Hat makes more money on Docker than Docker does

"Red Hat 透過 Docker 賺的錢,比 Docker 自己都還要多"

這篇章從商業的角度上來探討為何 Docker 很難賺到錢,相反的身為系統服務商 Red Hat 卻透過 OpenShift 賺進大筆的鈔票 ($2 billion in annual revenue ).

本文中認為 OpenShift 其實在內容上跟 Docker Datacenter 的服務並沒有太大差異,而 Red Hat 憑著是良好的 Docker Container 的運作熟悉度 ( BTW: Redhat 是第二大的 Docker open source 的貢獻者) 搭配著 Kubernetes 在底層的服務就賺進了大筆的器業服務與諮詢費.

常跟幾個商業夥伴在笑說,Red Hat 的服務費是很貴,那是因為當以要找他的時候,就是你需要服務( 解 Bug ) 的時候.所以就像是軟體服(ㄌ ㄜ )務(ㄙ ㄨ ㄛ \/ ) 費一樣.

techrepublic.com

geohot/lolrecaptcha: We try to break the recaptcha for the Merry Christmas for all!

喬治·霍茲 (geohot) 是美國的知名駭客,目前在 Google 的 Zero Project 團隊中專門發現所謂的 Zero-Day Bug.

之前比較知名的事件就是他是第一個破解 iOS 跟 PS3 的人,並且也開源了 comma.ai

在聖誕節前夕,他忽然想來學 Golang,於是就把 recaptcha (Google 開發的是否是機器人的判斷器) 破解了.

快來看看他怎麼破解的..

github.com


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

CodeTengu Weekly 碼天狗週刊 - Issue 76 心裡想的是 Microservice,手裡做的是 Distributed Monolith - Feb 20th 2017

$
0
0

Hello World

CodeTengu Weekly 碼天狗週刊

CodeTengu Weekly 會在 GMT+8 時區的每個禮拜一 AM 10:00 出刊,每期會由三位不同的 curator 負責當期的內容,每個 curator 有各自擅長的領域,如果你在這一期沒有看到自已感興趣的東西,可能下一期就會有了。你也可以瀏覽一下前幾期的內容

目前的 curator 陣容:

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

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

@vinta

Parallel tasks in Python: concurrent.futures

在 Python 中如果想要平行或並發地執行許多任務,常常會用 multiprocessingmultiprocessing.dummy(其實就是 threading)。不過如果你的任務是所謂的 Embarrassingly Parallel,就是指每個任務之間不需要相互溝通或依賴,其實有更簡單的方式:concurrent.futures

寫起來跟一般同步的寫法幾乎一樣,一個 for loop 打完收工,清爽。

延伸閱讀:

vinta.ws

Inside Cloud Spanner and the CAP Theorem

上禮拜最值得一提的消息無疑是 Google 發表了 GCP 的新服務 Cloud Spanner。幾乎就是一個理想的資料庫該有的樣子啊,global distributed (not pure) relational database,支援 ACID transaction、SQL: 2011 和他媽的 horizontal scaling,看完都要尿褲子了。

Eric Brewer(就是提出 CAP 定理的人)在這篇文章提到,Spanner 嚴格來說是 CP 啦,而不是 @googlecloud 推文宣稱的 CAP,畢竟只要是分散式系統,network partition 是無可避免的。只是 Google 透過他們的技術和資本實力能夠把 A 拉高到你幾乎可以假設他們的服務不會出事(或者說是還沒等到 Google 的服務掛掉,你的服務先掛掉的機率還比較高)。

不過 Cloud Spanner 其實是跑在 Google 自家的 private global network(Eric Brewer 說這是最關鍵的一點),而不是我們這些平民平常在用的 public Internet;在 white paper 裡面還提到 Google 透過在各個 datacenter 裝備 GPS 和原子鐘實現了一套 TrueTime API,解決了分散式的 MVCC 機制在全球範圍內的不同機器之間的 timestamp 誤差。是說軟體開發搞到最後,拼的反而是硬體了啊。

延伸閱讀:

(這一期難得有兩個 curator 都寫了同樣的主題啊)

googleblog.com

Building Recommendation Engines

之前趁春節假期的時候讀完了這本專門講推薦系統的書,從古典的 Collaborative Filtering、Content-based 到利用機器學習方法的 Model-based,提到了不少搭建推薦系統常用的機器學習和自然語言處理的「套路」,也分別示範了如何使用 Spark、Mahout 和 Neo4j 來實作推薦系統。雖然每個部份並沒有太深入,但是勝在給出了一個整體的、概觀的學習路徑,適合入門。

而且不知道為什麼,竟然還有附一系列的教學影片,影片內容就是書的精華版。何必呢。

不過專門講推薦系統的書也真的是不多,之前也讀了老牌的 Collective Intelligence in Action 和项亮(他的英文名字是叫 Vector 嗎?)的「推荐系统实践」,前者有點過時而且不太實用,後者很扎實但是就相對難啃,所以最先讀完的反而是這本書。

packtpub.com

About debugging: 8 things I wish I knew earlier in my career

作者總結出來的 debug 應該有的「心法」,尤其是第二點。

其實只要不是那種 typo 等級的錯誤,你每解完一個 error / bug / issue,你其實就是學到一項新的知識,當然這個新知識可大可小。我自己的習慣是只要解決掉一個我之前沒遇過的問題或任務,就會開一篇 Evernote 的筆記記錄下來,不只是對以後的查詢、溫故知新很有幫助,長久累積下來,也是挺有成就感的,像我目前就囤了快 1800 篇的筆記。大家有空可以試試。

不過這個其實就是所謂的 TIL (Today I Learned) 的概念啦。

themarketingtechnologist.co

Growing Your Tech Stack: When to Say No

如果你也讀了前陣子那篇引起無數人共鳴的文章 Hype Driven Development,多半也會發現有些工程師就是ㄏㄧㄠˊ咖稱,你不讓他們三不五時玩一下新玩意兒他們是坐不住的,所以下一步要考慮的問題就會是:該如何評估要不要採用某項技術?

有個簡單的方式就是根據引入的新技術對產品可能造成的風險來判斷,例如從最輕微的開發工具的改善、中等程度的部署流程的變動到最重大的改用新的程式語言或採用新的資料庫。雖然這篇文章是把改用新的程式語言列為 moderate risk 啦,但是考慮到團隊成員對新語言的掌握程度和能不能即時從人力市場中找到足夠多而且足夠好的人來接手開發等等的因素,更重要的是導入新的程式語言通常也意味著新的工具鏈與整個生態系,所以怎麼看都不會只是 moderate 吶。

codeship.com

@kkdai

Golang Taipei Gathering #21: Go 1.8 release party 投影片與影片

這個月的 Golang 社群聚會號稱聚集了台北,台中與高雄的夥伴們一起歡慶 Golang 1.8 正式發行. 雖然當台北時間舉辦 Release Party 的時候還沒有正式發行(後來在半夜就出了正式版,可見專案管理能力萬歲)

這次主要請到 Umbo CV 的 David 跟 Kent 來講 Go 1.8 的一些新功能,內容包括新的語法,工具,甚至有提到 plugin 或者是 dynamic loading 的部分.

歡迎大家一起來看看.

github.com

Grumpy: Go running Python!

Google open source 為了解決很多 legacy 的 python code ,開發了一個工具可以讓你將 Python 轉換成 Go ,或是在 Python 裡面跑 Go 的套件.

一些重點整理:

  1. Grumpy (脾氣暴躁 XD) 把 令人討厭的 GIL (Global interpreter lock) 拿掉了.換成 Go 的 GC 來管理.可以讓跑 python 的時候 multiple thread 更快. Grumpy 也不是第一個把 GIL 拿掉的 Python runtime, IronPython / Jython 都這樣幹過

  2. 目前 Grumpy 支援度不夠,所以大家使用前看一下 issue list (光是 import "/", "." 就有些問題 refer issue 11)

  3. Grumpy 不知道 CPython 的部分,所以 numPy 跟 opencv 都不能用. (其實還不少不能用的,畢竟還 alpha)

  4. 也是可以跑 Interactive shell "make run" 就可以了...

  5. 目前僅支援 Python 2.7 (畢竟還有四年可以活 XD)

最後,為了呼應拿掉 GIL , Russ Cox 也發了篇十年前的 C 語言文章.來解釋 lock 有多痛苦 XDDD

想清楚了解 Python GIL 是什麼,可以看看這篇 slide

googleblog.com

uber/cherami-server: Distributed, scalable, durable, and highly available message queue system.

Uber 將他們的 Task Queue - Cherami 開源. 原本 Uber 是使用 Celery (Python) 作為他們的 task queue . 由於業務的增加,對於 HA 的需求增加,於是用 #Golang 重寫成過,

並且與 Uber 許多好用的套件 TChannel (管 RPC) 與 RingPop (負責 Health Checking 與 Membership ) 結合在一起.

成為一個具有 Distributed, scalable, durable, 跟 highly available 的 task/message queue 系統

說明的部落格在這裡

github.com

[ATC: Podcast] 專訪 Swift 與 LLVM 的創造者,剛離開 Apple 到 Tesla 的 Chris Lattner

最近剛離開 Apple 到 Tesla 的 Chris Lattner 接受 ATP (ACCIDENTAL TECH PODCAST) 的邀請來談談 LLVM 跟其他相關科技. 記錄一下一些重點摘錄:

  • 關於職涯轉換:
    • 當然有談一下關於 Apple 跟 Tesla 在職業生涯上面的轉換. 對於 Chris Lattner 從工程師到管理階層的轉換,他自嘲不是一個所謂的 People person 但是他喜歡這方面的轉換.
  • 有討論到 Apple 對於 Objective C 想要改善的想法,一直到了 ARC 甚至談到了 Swift 誕生的起因.
  • 關於 Swift 的開源 (Open Source):
    • Lattner 提到原本在他心中就覺得會發生,但是礙於公司政策無法來運作.
    • 其實從一開始的 Commit 到相關工具的開發,都有顯示出來 Lattner 是從 Open Source 的角色來思考.
    • 但是 Swift 2 Open Source 後, 公司無法規劃到說會得到那麼多的回饋.

從 HN 找到一些,關於 Chris Lattner 的八卦:

備註一下: Chris Lattner 是 LLVM 跟 Swift 的發明者跟主要維護人.

參考:

atp.fm

Google Cloud Platform Blog: Introducing Cloud Spanner: a global database service for mission-critical applications

Google 改變世界的幾篇論文中 (MapReduce, BigTable, Chuppy, Borg, Spanner) ,總算又有一個從論文變成商品了.參考: 五大神論文

當然宣傳內容很讓人驚訝,CAP Theorem 可以完全 (強) 滿足嗎? 可以看看這篇文章

當然我們都知道 CAP 無法都完全支持,大部分會選擇某些比較弱,當另外兩項選擇強支持的時候.

"Spanner does not actually beat CAP theorem. It chooses C over A when P happens. But the infra team in google manages it so well so they could still deliver high Availability to most users."

但是,當然這麼好的神器便宜嗎?

"開一台 0.9 usd/hour,儲存和傳輸另外算錢" refer kaif

難道 Spanner 論文出來後沒有人試著把 Spanner 做出嗎?

當然有!就是之前很紅的小強資料庫 CockroachDB,所以他們當然趁著風頭繼續推廣他們的 Open Source 小強資料庫

最後,別忘記 CockroachDB 使用 Golang 寫的!! 歡迎加入 Golang.tw 社群

googleblog.com

@yhsiang

A deep dive into children in React

詳細地介紹 React children,還有 React 內建的 Children helper 函式。 沒有用過 React children 的話建議可以看一下這篇,善用 React children 對於 component 組合會很有幫助。

mxstbr.blog

UI component explorers  —  your new favorite tool

告訴你為什麼應該要用 UI Component explorer,主要以 Meteor 的 Chromatic 為介紹,最後也有帶出其他幾個知名的工具,像是 Storybook、Devcards。

如果你們前端團隊還沒導入類似的工具,建議趕快導入。對於前端開發協作有很大的幫助。

hichroma.com

RethinkDB versus PostgreSQL: my personal experience

作者介紹他從 RethinkDB 轉移到 PostgreSQL 的心路歷程。

使用 RethinkDB 相當長一段時間,即使中間有碰到許多問題,還是相信 RethinkDB 最終會解決這些問題。直到 RethinkDB 的公司喊停為止,加上客戶要求產品中不能有 AGPL 相關授權的東西。此時,才重新思考用何種技術取代 RethinkDB。

最後選中了 PostgresSQL,因為有比較自由的授權,而且擁有 LISTEN / NOTIFY,比較符合他原來的使用方式。比較了轉移前後的速度,CPU 使用量,還因此省下每月約 $800 的費用。

sagemath.com

WebPack is not the only way

webpack 出現以後,改變了前端開發的生態。過去要靠 make、grunt、gulp 或者自行寫 shell script 解決,都因 webpack 出現而改變。當然因為 webpack 還是有許多被人詬病的地方,例如文件寫得不是很好。而 webpack 出現的時候,babel 也還沒出現而且 ES2015 還沒被廣泛地使用。後來也出現許多類似的工具,像 JSPM,Rollup 但始終不像 webpack 這樣能解決 html、css 甚至圖片的打包問題。

Fusebox 除了強調他快速以外,透過 plugin 也能夠打包 html 跟 css。雖然 webpack 前陣子終於釋出第 2 版,但看來 fusebox 來勢洶洶。希望能繼續良性競爭,造福廣大的前端開發工作者!

medium.com

An Update on ES6 Modules in Node.js

雖然 node 上面已經實現了不少 ES2015 的語法,但是 module system 卻遲遲不見蹤影,因為 node 當初採用的是 CommonJS 跟 ES2015 的 module system 有很大的不一樣。

像 node 裡面是當執行到該行 code 的時候才同步地載入,而 ES2015 採取異步的策略。當然他們也正在嘗試解決這個問題,像是採用新的副檔案名 mjs,別名為 Michael Jackson Script ,透過這個副檔名,該檔案可以被認為是 ES6 module 而原本的 js 就採用 CommonJS 的系統。

medium.com

工作機會

Python Web Backend Developers at StreetVoice

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

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

streetvoice.com


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

CodeTengu Weekly 碼天狗週刊 - Issue 77 清鄉是指政府派遣軍隊去清查任何可藏匿之處所,並針對可疑人士實行拘捕,必要時可立即處決 - Feb 27th 2017

$
0
0

Hello World

CodeTengu Weekly 碼天狗週刊

CodeTengu Weekly 會在 GMT+8 時區的每個禮拜一 AM 10:00 出刊,每期會由三位不同的 curator 負責當期的內容,每個 curator 有各自擅長的領域,如果你在這一期沒有看到自已感興趣的東西,可能下一期就會有了。你也可以瀏覽一下前幾期的內容

目前的 curator 陣容:

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

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

@saiday

Lottie

Lottie is an iOS, Android, and React Native library that renders After Effects animations in real time, allowing apps to use animations as easily as they use static images.

Airbnb 新 Open Source 專案,這真的把在 mobile app 上加入動畫的難易度往下拉到了新低點。 (但你需要學會用 After Effect)

透過一套 After Effect 的 plugin Bodymovin 產生的 JSON 檔案,餵給 iOS, Android 的 Lottie library,它就會 render 出來,除了全頁的動畫之外,lottie 還支援 cache,這很適合介面上的狀態改變加入固定動畫。

光是看 GitHub 上面的 star 數就知道這種解決方案打到了以往 native app 支援動畫的痛點了。

詳細的說明:Introducing Lottie

airbnb.design

Overcast 3: Design walkthrough

Marco ArmentOvercast 的作者,比較廣為人知的身份是前 Tumblr co-founder 跟 lead developer、創立 Instapaper 最後賣掉。是一個擅長獨立開發的朋友呢!

我個人很喜歡這篇文章,它給了關於介面調整很好的例子,比起要變成什麼樣更重要的是為什麼要變成這樣。

有根據的設計或改版,後續才可以檢討調整。

marco.org

Enumerating The Ways I Love Swift Enumerations

Enum 在 Swift 是 first-class type 這大概是跟其他語言最不一樣的基本類型吧。

很強大的 Enum 可以有 associated value, method, extension, interface,很容易讓剛學習 Swift 的人走火入魔,這篇文章舉的 Enum 的例子我覺得是很適合的。

註:我現在在做的 Swift project,就因為剛學習 Swift 時被 Enum 的新特性過分吸引,把 model layer 都用 Enum 來處理,現在擴充實在是苦不堪言,這就是分不清楚場合硬用的下場。

caseyliss.com

Android Security: The Forgetful Keystore

「我們的 Android app 沒有把敏感資訊存在 Keystore」 「猴~ 你們是爛的開發團隊」

Keystore 看起來就是 Android SDK 提供的最好的敏感資訊儲存方案,可是為什麼很少聽到有人在用?因為它除了有不少的 bug 之外還有奇怪的 feature

文末還是有整理出一些還是可以採用 Keystore 的情況,但我想大多數 app 想要存的敏感資訊在那樣的條件下都是不可行的。

這一欄如果可以讓大家可以少走一點冤枉路,就是我最大的功德。

github.io

How “Effective Java” may have influenced the design of Kotlin

作者重新看了一次 Effective Java 然後思考這些 items 在 Kotlin 上是否還適用,顯然有些書上提供的 best practice 已經在 Kotlin 設計時就採用了。

他於是列了 Java 跟 Kotlin 的語言設計相異處跟說明,無論你有沒有開發 Kotlin 都值得一看。

medium.com

@kako0507

Redux 4 Ways

本篇文章透過 fetch data 的畫面變化做範例,並用下面四種不同的 Redux libraries 來 handle side effect 與 asynchronous actions :

  • Redux Thunk :用來 delay action 的 dispatch 。
  • Redux Saga :利用 ES6 Generators 讓 asynchronous flows 容易讀、寫與測試。
  • Redux Observable :利用 RxJS observables 來 create asynchronous actions 與 data flow 。
  • Redux Promise Middleware :處理 Promises 並在 reject 觸發時返回應有狀態 (conditional optimistic updates)

medium.com

How Flexbox works — explained with big, colorful, animated gifs

CSS flexbox layout 使得網頁排版更加的方便簡單,本篇文章利用圖形動畫來帶領初學者快速理解 flexbox ,有興趣也可以看作者的另一篇進階版 flexbox property 動畫圖解

freecodecamp.com

Variables declared using const are not immutable

JavaScript (ES6) 的 const 可以避免 variable renferencing 新的值,但是對於像是 array 或 object 這類的 reference types ,其內部資料是可以被更動的,要達到真正的 immutable ,可以透過 Object.freeze 這個 function,來避免值得的更動,不過要注意的是,如果物件本身是 nested ,那底下的所有 reference type 物件都必須要透過 Object.freeze 來賦值。

ponyfoo.com

Optimising the front end for the browser

這篇文章詳細介紹瀏覽器產生網頁的各個步驟以及如何最佳化這些流程:

  • HTML - 利用 HTML 產生 Document Object Model (DOM)
  • CSS - 利用 CSS 產生 CSS Object Model (CSSOM)
  • JavaScript - 執行 Script
  • Render Tree - 透過 DOM 與 CSSOM 來組成 Render Tree
  • Layout - 利用 Render Tree 來排列各個 Elements 的大小與位置
  • Paint - 畫出畫面

除了上述 Render 流程外,也透過 Critical Rendering Path (CRP) 來對 Network call 做介紹與最佳化。

hackernoon.com

@uranusjr

Code review checklist

最近 MacDown 終於有了固定的 contributors(除了我之外),現在 review 的時間都比自己寫的要多了,看到這篇就很有同感啊。要接受一個功能是很簡單的事情,尤其如果是認識的人,就更會有偷懶的衝動,反正他應該知道自己在做什麼吧。但即使這在當下很容易,未來卻可能後患無窮,讓你在維護和修復時耗掉更多功。這時候有這種 checklist 就最方便了,反正從頭到尾跑過一遍就好啦,省了一堆腦力。

相關閱讀:十個 pull request review 最常見的錯誤 最後一項讓我震驚了

github.io

Forms Need Validation

做使用者介面的時候,最重要的就是驗證使用者的輸入。一來因為使用者輸入不可信,另一方面如果使用者的輸入有問題,也必須要盡快讓使用者知道問題在哪裡,並盡可能讓人知道應該怎麼修正。

這篇文章描述了當使用者輸入時,應該如何提示使用者的錯誤輸入,並正確呈現這些提示。作者舉出了一些常見的 validation 情境,並提出可能的提示方法。我覺得最重要的一點就是他指出不應該在使用者做出部分輸入(例如開始輸入 email,但尚未完成)時,就提示輸入無效,而要等到使用者暫停輸入、或者離開輸入框。這做起來有點麻煩,但這樣一說,就覺得的確是好做法啊!

uxdesign.cc

How to break Python

如果你有寫過 Python 函式庫,大概就知道使用某些語法與內建函式庫時要特別注意,才能支援不同的 Python 版本,尤其是 Python 2。但如果想讓自己的程式無法支援某些版本,又應該怎麼辦呢?

我知道你想說什麼。「為什麼我要這麼做?」通常是因為你不想被不想支援的使用者打交道。假設我今天做了一個函式庫,只想支援到 Python 2.7。但我並沒有用到很特別的功能,所以在 2.6 上好像也可以動⋯⋯直到使用者遇到某個 Python 2.6 的 bug,造成函式庫行為錯誤。這時候你就得處理送來的 bug report。麻煩。

更好的做法是,讓使用者明確知道你並不想支援他現在使用的版本。所以這裡列出了各 Python 版本「不」支援的語法,讓你可以保證自己的程式在錯誤的版本中無法執行,一勞永逸。

b-list.org

Legacy systems are everywhere

我們軟體工程師最愛抱怨其他人(或者三年前的自己)寫的程式根本是一團垃圾,要我維護不如下地獄算了。可是上面的人就是死腦筋,不肯讓我們砍掉重練。唉唉你知道軟體就是跟其他工程不一樣啊,沒辦法像蓋房子那樣事先規劃好才動手,所以維護 legacy systems 才會那麼痛苦。

作者最近接的專案就是這樣。專案超龐大超複雜,維護人轉了好幾手,到處都是 hacks 和技術債,還有一堆過時的技術。

這個專案是他們幾個月前剛買的新房子。如果你略懂電工(建議這年頭技術宅最好懂一點,不然跟不上潮潮的 maker movement 會被瞧不起R),應該會對裡面的內容感到⋯⋯廢到笑,然後笑一笑怎麼我就哭了。為什麼我要維護這種爛東西,可以砍掉重練嗎。QQ

你軟體工程師還有一絲絲可能呢,房子蓋了就蓋了,上線之後就是永遠,即使有可能整棟倒下來,也只能硬著頭皮維護。惜福啊各位。

postlight.com

Random Cool Stuff

How I Ruined Office Productivity With a Face-Replacing Slack Bot

一個會把上傳到 slack 中圖片的臉換掉再重新上傳的 slack bot ...

go-opencv 來辨識臉部位置跟貼上去,是用 golang 寫的,source code 相當精簡。

@saiday 提供

zikes.me


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


CodeTengu Weekly 碼天狗週刊 - Issue 78 小明相信最好的代碼本身就是文檔,他才不需要註解,他的函式名稱有 100 個字元 - Mar 6th 2017

$
0
0

Hello World

CodeTengu Weekly 碼天狗週刊

CodeTengu Weekly 會在 GMT+8 時區的每個禮拜一 AM 10:00 出刊,每期會由三位不同的 curator 負責當期的內容,每個 curator 有各自擅長的領域,如果你在這一期沒有看到自已感興趣的東西,可能下一期就會有了。你也可以瀏覽一下前幾期的內容

目前的 curator 陣容:

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

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

@fukuball

This Machine Turns Trump Tweets into Planned Parenthood Donations

Trump Driven Development:中級

目前為止我所看過最經典的 Trump Driven Development 案例! 由於美國選出了有史以來最愛上推的總統,Trump 在推上的每個訊息都牽動著產業的動盪,因此作者想出了一個點子:監控 Trump 推特帳號的訊息,透過 Google 自然語言處理 API 判斷訊息會對某家公司帶來什麼樣的影響之後,自動在交易平台上買賣股票(TradeKing 有 API 可以使用,好先進!),目前的投資報酬率是 7 %!相關程式碼都放在 GitHub 了,有沒有人要一起去開一下 TradeKing 的帳號啊?真想玩玩看!

medium.com

基于 TensorFlow 让机器生成赵雷曲风的歌词

Machine Learning:中級

最近看到的一篇有趣的實驗,作者使用了 RNN 等類似演算法訓練出了一個可以生成趙雷歌詞風格的歌詞產生器,文章將原理講述得蠻清楚的,雖然最後做出來的效果並不算好,但就是有趣!有燃起我做做類似實驗的念頭!學一項技術最快的方式就是動手做做自己覺得有趣的事啊!

qq.com

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

Machine Learning:中級

上一講我們介紹了如何使用 Blending 及 Bagging 的技巧來做到 Aggregation Model,可以使用 Uniform 及 Linear 的方式融合不同的 Model。至於以 Non-linear 的方式融合 Model 就需要依據想展現的特性去調整演算法來做到,這一講將介紹 Adaptive Boosting 這種特別的演算法。

fukuball.com

Testing Conventions - 測試的慣例

PHP:中級

作者用一些簡易的範例講述了測試的一些慣例,分成 Structure、Naming、Arrange-Act-Assert 三個面向來說明,其中 Naming 的部份蠻受用的,一般 PHPUnit 上的說明在 test method 的命名會使用類似 testPostCanBeCommented 這樣的格式來命名,但作者卻使用類似 it_can_be_commented 這樣的格式來命名,目的是為了增加可讀性。對了,LaracastsJeffrey Way 也是使用這樣的方式寫測試喔~

nikolaposa.in.rs

jmolivas/phpqa - PHP QA 工具大全

PHP:中級

這個套件將 PHP 中一些好用的 QA 工具都整合在一起了,我自己是沒有全部都用到,但大家也可以先全部用用看之後在看自己想將哪些 QA 工具導入就好~

github.com

@mingderwang

使用 Node.js 部署智能合約 (Smart Contract)

Taipei Ethereum Meetup 專欄, 開始有很多人在這裡寫繁體中文 Ethereum 相關的文章, 不能再用看不懂英文或簡體中文來當藉口, 不學習新技術。這篇文章, 一步一步地教您如何用 node.js 部署一個簡單的 smart contract, 其中 Proof-of-Authority (PoA) Ethereum Chain 連結, 還教你如何利用 parity 自己蓋私有的 Ethereum 區塊鏈 (blockchain), 有了自己的鏈, 就不必花錢去買或花時間去 mining 才能使用真正的 Ethereum blockchain 了。

medium.com

The complete list of Alexa commands so far

2017 年起改變我生活的新東西, 她叫 Alexa (硬體叫 Amazon Echo 或 Echo Dot)。 玩了幾天, 發現聲控的世界真的來臨了。更應該說, 已經可以感受得到人工智慧 (A.I.) 帶給人類生活的方便性, 是指日可待了。

Alexa, what new features do you have?

它有無限多的擴充能力, 我們稱它作 skills。人類幫她累積很多技能, 目前她已經學會了上萬個 skills。我覺得最有趣的遊戲, 叫 "The Magic Door”。無聊時真的可以跟她玩玩…

Alexa, enable The Magic Door

你也能透過 IFTTT 利用 Alexa 跟所有 IFTTT 能做的事情介接, 你也可以自己教他新的技能, 有興趣的人, 不妨可以研究一下 Alexa Skills Kit

如果你玩 Arduino, 想利用 Alexa 聲控你家裡的 IoT 設備, 那已經是輕而易舉的事了。

最後, 你一定會說, 台灣還買不到 Amazon Echo 或 Echo Dot 啊? 怎麼玩? 用 Raspberry Pi 3 做一個 Alexa 吧。註: AVS (alexa voice service) 服務, 目前只有 US, UK 跟德國。你可能要想辦法翻牆了。

cnet.com

How to make your React app fully functional, fully reactive, and able to handle all those crazy side effects

你還在用 MVC 方式寫前端嗎? 之前有介紹過 cyclejs, 也有人介紹過 Redux. 這篇文章介紹如何利用 redux-cycles 在 React 裡寫比較 pure functional 而且比較 reactive 的程式。雖然用很多動畫圖片加以說明, 但還是需要一段時間理解, 也值得花時間研究, 因為現在的 front-end code, 還是太難測試。把程式寫的 pure (functional) 一點, 可能有更有助於理解與測試。這也許是個終極的方法!

cyclejs 的 community 也膨脹得很快, awesome-cyclejs 已經不少東西可以讀了。而 awesome-redux 更已經有 7,747 個 stars 了. 如果能合併使用, 應該會更好。

freecodecamp.com

@chiahsien

所有权宣言 - Swift 官方文章 Ownership Manifesto 译文评注版

Swift 團隊前一陣子對社群的人寄出了一封郵件,是關於記憶體所有權相關的討論,主要是在說明未來打算改變的方向。這是一篇很長很長的文章,也提到了不少比較細節的部分,很值得仔細閱讀。

onevcat.com

Avoiding Accidental Complexity When Structuring Your App State

最近在規劃產品的新架構,我打算使用 Redux 作為資料流的處理方式。如何設計資料模型對 app 開發來說是很重要的一環,它可以說是整個 app 的地基,一開始沒做好,後來就很容易歪掉。因為 Redux 整個就是圍著資料模型運轉,所以如何規劃模型,以及如何讓團隊裡的其他成員遵循規劃原則,就顯得相當的重要。

延伸閱讀:

hackernoon.com

谈谈 iOS 中图片的解压缩

有在開發 iOS app 的人一定有做過用 table view 顯示一堆圖片,然後就會遇到滾動卡頓的問題,然後爬文就會發現可能是因為顯示圖片時需要解壓縮所以很耗時間,然後就會看到大家建議的做法是先在背景解壓縮再回到前景顯示,然後你最終會被指引到 CGBitmapContextCreate 這個函式。

你會發現這個函式需要一大堆參數,看了文件之後還是似懂非懂,谷歌大神一下還會發現許多知名的 library 像是 YYImage、SDWebImage、AFNetworking 都用到它來解壓縮圖片,可是各家傳入的參數卻又略有不同。看完這篇說明你就會懂了。

leichunfeng.com

Introduction to Protocol Buffers on iOS

現在開發 app 免不了要跟後端或是其他客戶端傳遞資料,最常見的資料格式就是 JSON 跟 XML 了。它們非常適合有架構的資料,也提供了高度可閱讀性,但是相對的它們的檔案尺寸通常會比較大,序列/反序列化也會消耗比較多的資源。 Protocol Buffers 是 Google 開發的結構化資料交換格式,它生成的資料體積小、處理的效率高、擴充彈性佳,早已被 Google 以及許多公司廣泛使用,尤其適合用在需要頻繁傳輸資料的場合。

其他相關或類似的服務還有:

raywenderlich.com

Twitter Image Pipeline is a robust and performant image loading and caching framework for iOS clients

圖片絕對是 app 開發當中不可或缺的重要角色,但是要如何優雅而且正確的處理它卻始終是個大難題,還好目前已經有許多出色的 library 可以幫我們解決「下載 / 緩存 / 顯示」三大問題,最廣為人知的大概就是 SDWebImageYYImageKingfisher 這幾個。近期 Twitter 也公開了它們自家的圖片管理庫,讓廣大的開發者們又多了一個選擇,真是可喜可賀!

github.com

Random Cool Stuff

sgolemon/table-flip 翻桌例外

這是一個可以丟出翻桌表情符號作為例外的 PHP 套件,作者是從一個 Twitter 討論串 中獲得靈感的,希望大家也能時時刻刻保持著幽默感~

@fukuball 分享。

github.com


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

CodeTengu Weekly 碼天狗週刊 - Issue 79 我們將在近期推出一份新刊物:CodeTengu Lite,每期的 email 只會有主旨,沒有內容,適合大部分只看標題不看內文的讀者訂閱,敬請期待! - Mar 13th 2017

$
0
0

Hello World

CodeTengu Weekly 碼天狗週刊

CodeTengu Weekly 會在 GMT+8 時區的每個禮拜一 AM 10:00 出刊,每期會由三位不同的 curator 負責當期的內容,每個 curator 有各自擅長的領域,如果你在這一期沒有看到自已感興趣的東西,可能下一期就會有了。你也可以瀏覽一下前幾期的內容

目前的 curator 陣容:

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

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

@vinta

A Review of "Designing Data-Intensive Applications"

最近在讀 Designing Data-Intensive Applications 這本書,各方評價之好,忍不住要跟大家分享。這本書幾乎涵蓋了關於資料庫和分散式系統的所有你應該知道的基礎知識,重點是還講得淺顯易懂。有興趣的人可以先看看這篇書評(嚴格來說應該叫導讀了)。

延伸閱讀:

marksblogg.com

Google - Cloud API Design Guide

Google 出品的 API 設計規範,適用 REST 和 RPC API。

我覺得比較有實踐意義的是 Custom Methods 這個章節,是嘛,要把所有的操作邏輯都 mapping 成 REST 風格的 CRUD 根本就不現實嘛。

google.com

Secure Web Development With Django (and Python!)

這是 DjangoCon US 2016 的一個 talk,專門在講 Web 開發常常遇到的安全性問題。雖然是簡報,但是內容的份量很足。作者先解釋了老生常談的 OWASP Top 10 漏洞(是說這個 Top 10 都是 2013 年的版本了啊),再分別介紹這些問題在 Django 裡可以怎麼應對。作者 James Bennett 就是 Django 的 core developers 之一,所以他在簡報的最後也提到了不少 Django 曾經血淋淋地犯過的錯誤的技術決策。

雖然說只要是成熟一點的 Web Framework 應該都能夠防範大部分常見的安全性問題(或者至少漏洞會比較快被修正),當然前提是你有啟用而且有正確地使用那些機制。不過還是有很多細節必須由 developers 自己留意。尤其是現在的系統的技術棧和 infrastructure 越來越複雜,可能出錯的地方也越多,有些甚至是非常低級的漏洞,比如說直接把 AWS root key 上傳到公開的 repo 或是讓 Redis、Elasticsearch、RabbitMQ 可以被 public access 而且還沒有設定 auth。

延伸閱讀:

b-list.org

Overview of Online DDL in MySQL

MySQL 的官方文件裡非常清楚地整理了各種 DDL (Data Definition Language) 的執行特性,例如需不需要 rebuild 整個 table 或是只需要修改 metadata,以及在執行的過程中能不能允許 DML (Data Manipulation Language)。強烈建議每次要做資料庫的 schema change 前都先檢查一下。就算你是要用 pt-online-schema-change

不過某些支援 ALGORITHM=INPLACE 的 DDL 的行為在 Galera Cluster 裡可能會有所不同,如果你是用 TOI (Total Order Isolation) 的話,Galera 還是會 block 寫入操作。

延伸閱讀:

mysql.com

Bash Shell Scripting

雖然平常開發和做一些 DevOps 的任務時常常需要寫 shell script,不過因為一直沒有好好地學過 Bash,每次寫起來都不是很踏實,最近終於趁著放假好好地惡補了一下 Bash 相關的知識和寫法。

延伸閱讀:

wikibooks.org

@hiroshiyui

id Software Programming Principles

id Software 不消多說,電腦遊戲玩家幾乎不可能不知道這家公司。這篇文章摘錄了他們在 GDC 2016 發表的演說中提到的、小型團隊規模的產品開發思維:

  • 不要想著先做 prototype,不要有「先求有,再求好」的苟且心態,要想著持續產出「品質隨時都可交貨」的程式
  • 你寫的遊戲程式,要能隨時讓團隊裡的任一成員都可執行(即 CI/CD 的精神)
  • 你寫的程式,要盡可能追求讓函式簡單
  • 讓好工具幫忙你製作更好的遊戲,把時間花在尋找更好的工具永遠是件好投資
  • 自己的程式碼提交出去前要先好好測試過,維持一定品質,不要浪費其他人的時間在幫你 debug
  • 自己生的 bug 自己修,馬上修!
  • 專注在你眼前的產品,為這個產品寫程式就好,不要為了八字都還沒一撇的新作考慮程式碼重用之類的問題,等到你要開發新作品了,到時候你寫的程式品質通常會比現在更好
  • 透過封裝函式來確保設計的一致性
  • 多溝通,讓團隊其他人知道你寫的這段程式是在幹什麼,保持程式的透明,不要讓它黑箱化
  • 一種米養百樣人,每個程式設計師的養成與思維各有不同,尊重彼此差異與產出的成果

felipe.rs

Design Patterns for Humans™ - An ultra-simplified explanation

以淺白的敘述講解幾種 Design Patterns,類似的資源還有《深入淺出設計模式》(Head First Design Patterns) 這本書。

Design Patterns 就像武功祕笈,你的拳腳功夫練到一定程度了,發現自己沒個套路、總像在亂打一通時,就該來翻一翻了。只是像我此類資質駑鈍之輩、知道 Design Patterns 重要、但買了《物件導向設計模式 - 可再利用物件導向軟體之要素》卻還是讀不透箇中精髓時,這類科普讀物就有很好的引導作用。

github.com

A Programmer’s Introduction to Unicode

一篇講解 Unicode 的懶人包,帶過字面、BMP、編碼方式 (UTF-8, UTF-16...)、動態組字等概念,非常值得一讀。

身為一個 IT 從業人員,搞懂字元集 (character set)、字元編碼 (character encoding) 是基本功,如果你讀到這裡,對這些主題的認知還是一張白紙,趕快去補足!我個人的經驗與建議是,可以拿個十六進位編輯器,看看一份你認為再尋常不過的 plain-text 檔案,「字」在裡頭究竟是怎麼儲存的。

題外話,學會利用十六進位編輯器這種工具去看資料逐位元的組成,這種工夫能夠讓你在對照規格書下,瞭解某種檔案格式,也能幫你在除錯時省下不少通靈、瞎猜的時間。

同場加映:

reedbeta.com

The Story of Firefox OS

本期我最想分享的一篇文章。我自己身為一個 Firefox OS 腦殘粉,見證了從專案公佈到它在市場上鎩羽而歸的過程,雖然也有很多故事與心得可講,但總是比不上這位身為專案成員的作者寫的。他從時間沿革的面向、從產品設計的面向、從參與者的面向、從市場的面向去看 B2G(Boot to Gecko,Firefox OS 的專案名稱,Gecko 是 Firefox 的 rendering engine)這個專案,以及從中習得的經驗、教訓。

內容非常精彩,雖然文長,但是推薦給每一位同樣在做產品專案的人閱讀,不要直接 END。

medium.com

@yhsiang

Testing React Components Best Practices

對 React Component 測試有興趣的朋友,建議可以先看 Integration Testing React and Redux With Mocha and Enzyme

而這篇講得比較深入,甚至搭配了 Jest 的 snapshot,並且告訴你要注意的地方。

  1. 測試的組織性
  2. 最小的測試確認 Component render
  3. 除了 renders 以外還需要測什麼?
  4. 用明確的 setup() 取代 beforeEach()
  5. 測試行為
  6. 使用 helper function

medium.com

Functional Programming (FP) By Any Other Name…

Kyle Simpson 介紹他新的 Library,FPO。裡面提到蠻多有趣的 FP 觀念,一般 ramda 或 lodash,我們都是先定義 mapper function 才丟 array,如果想要反過來要怎麼做。可以利用 named arguments 達成,雖然許多語言都有這個語法,但是 javascript 卻沒有,所以要用其他方式來達成。

對 FP 有興趣的可以深入一看。

davidwalsh.name

Creative Initiatives Made By Women, For Women

3/8 婦女節剛過,僅用此篇獻給碼天狗的女性讀者們!

推薦所有男性讀者必看!

magenta.as

Implementing Critical CSS on your website

Critical CSS 是現代前端工程師必須知道的,這篇文章提到許多跟網頁 performance 有關的觀念,例如 AMP、google speed insights,也有提到 SEO 的連結。

最後介紹他們怎麼在 CraftCMS 上面實現 Critical CSS,主要使用 critical 這個 npm package 搭配 gulp 來做 automation 的部分。

建議還在為網站載入效能苦惱的朋友一看。

nystudio107.com

API Design: Think First, Code Later

算是一篇 RESTful API 設計的最佳實踐大全,如果你不確定自己撰寫出來的 API 是不是好的設計。 建議先停下來,把這篇文章看完,避免文章裡面提到的錯誤。相信會讓你的前端工程師更開心!

適合學習撰寫 API Server 的朋友一看!

ckl.io


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

CodeTengu Weekly 碼天狗週刊 - Issue 95 Information wants to be free - Jul 10th 2017

$
0
0

Hello World

CodeTengu Weekly 碼天狗週刊

CodeTengu Weekly 會在 GMT+8 時區的每個禮拜一 AM 10:00 出刊,每期會由三位不同的 curator 負責當期的內容,每個 curator 有各自擅長的領域,如果你在這一期沒有看到自已感興趣的東西,可能下一期就會有了。你也可以瀏覽一下前幾期的內容

目前的 curator 陣容:

你也可以關注我們的 FacebookTwitterGitHubOpen Source 專案,有很多 weekly 看不到的內容。有任何建議或疑問也歡迎來 Gitter 聊聊。

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

@fukuball

Beginner’s guide to Ethereum (1) — Build a smart contract on a private network

Blockchain:初級

雖然 @mingderwang 一直都有在 CodeTengu 推廣 Ethereum 相關技術開發,但我一直沒能好好靜下心來好好學習,這近看到這篇遊港正妹工程師李婷婷的教學文章之後,我終於寫出了我人生第一個 Smart Contract 了!難道正妹寫的教學文效果比較好嗎?

Beginner’s guide to Ethereum 系列文章:

medium.com

Kaggle 心得分享

Kaggle、Machine Learning:初級

這是 Kaggle數海獅競賽第一名 Kaggler 的心得分享,參加比賽直接練習解 ML 問題真的是學習 ML 最快的方法,而且如果得了前幾名還會有優渥的競賽獎金!比如這個數海獅競賽的總獎金就有 25000 美金,第一名可以獨得 12000 美金,真的超爽,我應該也要來找時間比 Kaggle 來賺賺外快啊!

延伸閱讀:

ptt.cc

KKBOX Data Game - 17.06 1st place Solution

Kaggle、Machine Learning:初級

最近 KKBOX 集團新服務 - KKTV 在 Kaggle 上第一次對外舉辦了資料分析競賽,比賽內容是這樣的:「以前四個月的資料為分析基石,推測用戶在接下來一個月花最長時間觀看的是哪部劇」,希望藉由 Kaggler 的競爭中來找出增進推薦系統預測準確度的方法。本篇文章是這個比賽第一名 Kaggler 的分享,雖然只是將準確度從 0.27 提升到 0.28,但寶貴的分析過程很值得參考。

不過,忍不住要說一下,前三名的獎勵只有精緻米其林主廚料理體驗暨交流餐敘跟 KKTV 6 個月免費看序號卡好像真的有點虛啊~

medium.com

Startup SaaS Stack

Business:初級

想要創業開一下公司(網路、軟體開發相關)都會面臨一些共同的問題,像是公司要如何發工資、要怎麼記帳、怎麼報稅等等問題,這篇文章分享了公司處在各種規模時可以考慮使用的 SaaS 工具服務來解決上述的問題,雖然在台灣不一定能用,但還是可以參考一下,或者是自己創業做一個在台灣可以運作的相同服務出來(推坑)。

medium.com

@uranusjr

Checklist for Python libraries APIs

源自 Flávio Juvenal 在 PyCon 2017 的演講 How to make a good library API。這個 talk 探討了一些好 library 值得學習的特點,包括簡易性、一致性、彈性、安全性四個大項,並提供了一些該注意的細節與實例。為了讓大家在每次設計 API 時不要漏掉東西,作者把他提到的項目整理成一個清單,並用 checklist 方便逐項確認。

雖然是 PyCon 的演講,但這些項目只要稍微調整一下,在其他語言也適用,而且我覺得不只是 library,很多設計上的重點在跨元件 interface 設計上也同樣需要注意。網頁用了 LocalStorage 儲存狀態。

我還沒機會用,不過感覺很方便,應該會把它加入下一個專案的檢查項目裡。如果下次有什麼需要設計介面的狀況,也絕對要試試看。

Flávio 目前任職於 Vinta Software,一家巴西軟體公司,與 Vinta 沒有任何關聯。

apichecklist.com

pydantic: Data validation using Python 3.6 type hinting

Python 3.6 在 PEP 3107 Function Annotation 基礎上發展的 typing module 受到不少關注。可以指定型態在很多時候確實很有用,尤其對沒辦法精確掌握維護狀況的大型團隊裡,可以把 code review 部份標準化(例如 Guido 共同開發、Dropbox 大量使用的 mypy)就特別方便。但 dynamic typing 也有它的好處,如果只是把 type annotation 像 static typing system 那樣用,總是感覺不太痛快。

幸好強大的 Python 社群馬上開始發揮創意。就我所知的第一槍是 Django REST Framework 作者 Tom Christie 開發的 API Star。這是一個 web API framework,讓你可以用很少量的宣告做出 web API。「如果 Django REST Framework 的作者覺得有需要開發新工具,那它肯定是好東西。」我忘了是從哪裡聽到這句話,但 API Star 確實很酷。這是另一個獨立題材了,有機會再另外分享。

回到 pydantic。Data validation 最重要的 interface 就是要能方便宣告怎樣的資料才合法。我之前也用過不少工具,例如 Django 的 Forms APIWTForms(主要用來與 HTML forms 互動)和 Voluptuous 等等,不過 pydantic 的宣告方法感覺特別舒服。Type annotation 提供型態、assignment 提供 default,這比傳統的 declarative API 要漂亮太多啦!大家也來用用看吧,然後我覺得更重要的是,不要掉入 static vs dynamic typing 的陷阱啊,一起想想 type hints 有什麼創意用法才是正途。

helpmanual.io

5 ways to make Django Admin safer

我常常嘴 Django Admin 其實就是個比較好看客製化程度比較高的 phpMyAdmin,所以也有很多同樣的問題。這篇列出了五個能讓它安全一點的方法,其實都是老生常談,不過因為太重要,還是值得提醒:

  • 不要用預設的 /admin/ 路徑。
  • 覆寫設定與 template,讓每個環境的 admin 外觀有差異。
  • 為你的 admin 取名字,不要用預設的 Django Administration
  • 不要開放 admin 給任意來源。
  • 強化 authentication 機制(文中的例子是 2FA)。

其實我也不能說我都有做到,尤其第四個雖然很想這麼做,但實務上還是很不方便啊。倒是文中提供的 2FA solution 感覺頗值得。

hackernoon.com

Antisocial Coding: My Year At GitHub

Coraline Ada Ehmke 回顧了他加入 GitHub 一年多一點,最後被開除的經歷。這個故事與技術無關,而是描述他如何被其他人批評具有攻擊性,最後在各種事件交織下離開公司。

最近覺得建立團體文化實在是條非常非常細的鋼索。一方面我們需要找到適合的同伴,才能在舒服的環境發揮出能力,但當團體裡無可避免地發生衝突,要如何正確處理各種議題,這個價值觀無比重要,也無比難拿捏。前陣子有個朋友分享並贊同 Mark Zuckerberg 的用人哲學,簡單來講就是「如果角色交換,我願不願意為他工作」。我完全不同意。這個想法在初衷上可能不差,但對於一個本來就在公司文化內、又身為主管的優勢位置,實在太容易否定別人。老闆挑員工比起員工挑老闆,應該用更絕對的對錯標準來判斷。你自己想不想為他工作根本不重要,這是你的責任;真正重要的,是你的員工們能不能合作,以及如果不能,該讓誰離開,或者該怎麼讓他們不會互相影響。

這篇文章本身也只是一面之詞,我其實不覺得你應該用這篇文章支持 Coraline 或者否定 GitHub —— 有很多證據指出 GitHub 需要受到批評,不過這是另一碼事。但這個故事裡透露的衝突點,以及主角們面對衝突的方式,還是透露了許多事情,能讓人反思。

coraline.codes

Two sql developers walk into a bar & then walk straight out...

來自最近發現的 subreddit /r/ProgrammerDadJokes

Dad joke 是英文俚語,用來稱呼那種長輩裝年輕講的,一點也不好笑的笑話,通常是雙關語或音相似的字,就像你爸沒話題的時候會跟你講的那種。寬鬆翻譯成日文就是ダジャレ,中文好像沒有類似的,反正就是廢到笑的那種。我很喜歡這類笑話 初老症狀,連結這個是我看到最好(最廢?)的,分享給大家。

reddit.com

@kkdai

十年磨一劍: etpan 的故事

工作生涯也過了 10年,經歷了不少公司和團隊,遇過許許多多的人,在這麼多人之中,只有一個人跟我說過『基礎的重要性、很多東西的關鍵要願意捲起袖子鑽進去,像是 RFC 或是各種 Spec,就會獲得答案』。大部分遇到的人都是喜歡玩新技術、新語言,快速的做出一個有趣的專案,而這種求快的想法,也造成了一堆公司都是用 open source 組一組,然後想趕快賣錢、結案。這種形式的軟體公司在台灣是多數,但想想其實也頗合理,我想這就是所謂的製造業的血液吧,總認為輪子買來裝一裝,可以動就可以賣錢了。

下面連結這個人,他只做了兩個 open source 的 project,第一個 libetpan - 用 C 語言實作郵件收發功能的組件。第二個是 mailcore,一樣是郵件收發的組件,屬於比較高階抽象化的組件。簡單說,他就是利用這兩個 project 做完所有郵件收發的功能。也就是實作了郵件相關的 RFC。

libetpan 從 2001年開始,mailcore 是 2013 年開始,一直到現在仍持續在維護。他在 2010 年推出了一款 Mac 郵件軟體 Sparrow,評價很好,然後 2012 年被 Google 買走。在很多領域或許都有類似的現象,沒有中心思想哲學的人,就像草一樣隨處蔓延,吹不死也長不大。期待在島上的人們,可以把自己當作一個種子,往土裡深深地種下去,然後可以茁壯成大樹,進而成為一片森林。

[本文引用自臉書陳信邦]

etpan.org

開發人員的面試指南 - A developer’s guide to interviewing

如何面試一家公司 (開發人員的面試指南 – A developer’s guide to interviewing)

最近面試不少人,也有一些工讀生.發現學生不知道要問公司什麼.. 於是把這一篇貼上來分享給大家. 老生常談的是,大家都說不僅僅是公司面試你.你同時也在面試公司的.你應該要把握任何一個跟面試官交流的問題,來問出來自己究竟適不適合(或是喜不喜歡)這一間公司.

歡迎大家來看看這一篇文章.. 也歡迎大家丟履歷來敝公司..

  • Data Scientist (senior)
  • Frontend (senior)

快來丟履歷... 大家快來面試我.... (鞠躬..)

louie.lu

Rob Pike 在 Twitter 分享了一個笑話

Go 大神 Rob Pike 講的笑話一則 :

當初在做 Java 與 Go 發現 Go 竟然比 Jave 慢了十倍,不過再細看之後才發現. 測量 Go 的速度單位原來是 micros 而不是 millis .

[編按: 由於看錯,其實該測量結果 Go 比起 Java 快上了一百倍]

twitter.com

mattn/sudo: sudo for windows

在 Windows 下要切換 administrator 的 console 來執行某些指令其實很麻煩, mattn 弄了一個 windows 的 sudo 版本.

當你跑 sudo 需要權限的指令,就會跳出 UAC

意外的實用說... 總覺得稍微修改,可以給 drag and drop

github.com

Golang Jobs in Taiwan

你的公司想要找台灣的 Golang 人才嗎?

你不知道到底一個好的 Golang 工程師到底應該值多少錢?

不妨來這個 Github issue 看看吧,裡面有包括來自 Blockchain, 直撥產業的各種職缺.

而且薪水都超過 80K 以上喔,快來應徵吧 (?

github.com


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

CodeTengu Weekly 碼天狗週刊 - Issue 96 ♫ 登等,登登登等,登登登等,登登登等登,登登登等登 - Jul 17th 2017

$
0
0

Hello World

CodeTengu Weekly 碼天狗週刊

CodeTengu Weekly 會在 GMT+8 時區的每個禮拜一 AM 10:00 出刊,每期會由三位不同的 curator 負責當期的內容,每個 curator 有各自擅長的領域,如果你在這一期沒有看到自已感興趣的東西,可能下一期就會有了。你也可以瀏覽一下前幾期的內容

目前的 curator 陣容:

你也可以關注我們的 FacebookTwitterGitHubOpen Source 專案,有很多 weekly 看不到的內容。有任何建議或疑問也歡迎來 Gitter 聊聊。

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

@mingderwang

After one year I have more followers on Medium than after nine years on Twitter

為何我常常要介紹 Medium 的文章。這篇文章為例,他用了 8.5 年的 Twitter,寫了 3,200 個 tweets 才有 1,650 個 followers。但他只花 1.5 年就在 Medium,寫了 34 個 PO 文,就擁有 1,650 個 followers。我們只能說 Medium 的商業模式不錯,所以會吸引這麼多人來這裡寫文章。我相信未來公司找人,絕對會參考類似在 medium.com 有寫幾篇文章,在 github.com 有貢獻幾個開源專案,來決定否是要跟你進行面試。

unsupervisedmethods.com

I’m scared.

"If you’re a coder, I implore you to join me in brainstorming ways to increase civic engagement." 這句話感動了我的心,而且他指名我們寫程式的人。從兩個層面來思考這個問題,不管是美國還是台灣,以前都覺得選完總統,不管做的好壞就讓他做做看; 不論藍綠,總是覺得有些還是做得不好。不知除了上街頭跟網路抱怨,還有什麼方法可以讓政府做得更好? 也許公民參與,未來會變成主流。但又從工作忙碌的角度來看,coders 應該也是容易爆肝的一群,我們還有時間去參與公民活動嗎?我們技術都學不完,哪有時間管政府好壞?所以我不再一直介紹技術文章,先看看這年輕人的想法。

extranewsfeed.com

亂數夠不夠亂

虛擬幣世界,帳號是自己錢包產生的。就像銀行金庫的鑰匙 (這裡是私鑰) 都要自己管。如果亂數不夠亂,私鑰產生也有可能重複,那電子錢包的錢就有可能會被偷走。所以我才想研究一下,什麼亂數才夠亂?

medium.com

@kako0507

ES8 was Released and here are its Main New Features

ES8 標準已經正式 release 了,這裡整理了幾個主要的 feature ,更詳細的內容可以看規格書

hackernoon.com

How to use Memoize to cache JavaScript function results and speed up your code

Memoization 是將需要昂貴計算取得 function result 儲存起來已加速執行的最佳化技術,雖然 memoize 可以運用在所有 function 上,但實際上是有一些限制的:

  • 必須是 pure function
  • 必須在空間跟速度間權衡,所以 function input 最好是限制範圍的,以便更頻繁的利用 cache 下的值
  • 不需要特別為了 API call 做 memoization ,瀏覽器已經有 HTTP caching 的機制
  • 適合用在需要較大計算的 function 上

freecodecamp.org

Webpack’s import() will soon fetch JS + CSS— Here’s how you do it today

Webpack 的作者 Tobias Koppers 在最近發表的文章 “The new CSS workflow (step1).” 中表示, CSS 將會被實作為 first-class module ,可以直接透過 “code splitting” chunks 取得 CSS ,且呼叫 import() 時會同時取得對應的 JS 與 CSS files 。

本篇文章會透過 Babel-Plugin-Dual-ImportExtract CSS Chunks Webpack Plugin 以及 Promise 實作出替代方案。

medium.com

Ink: React for CLIs. Build and test your CLI output using components.

Ink 這套有趣的工具能讓開發者利用 React component 在 command-line interface 輸出,可以使用 div 與 span 來排版以及支援不同的顏色表示。

github.com

React Pattern: Extract Child Components to Avoid Binding

在寫 React 的 render function 時,為了避免不需要的重畫,各個傳入 child 的 properties 盡量不要在非必要時改變 reference 。

文中利用 array mapping 成 DOM 的例子,說明了重複宣告 arrow function 造成的問題,可以透過拆分 child component 來解決。

freecodecamp.org

@chiahsien

User Breakpoints in Xcode

Breakpoints 是個很強大的工具,我們在 debug 階段會時常用到它,但或許很多人不知道它還有很多實用的小技巧:例如你可以共享某些 breakpoint 並且提交到版本控制系統裡,讓團隊的每個人都能使用;或是把某些 breakpoint 搬到 user space,之後你開啟的每個專案都會自動套用這些 breakpoint。文末作者也列出了他們團隊有在用的幾個超實用範例,非常值得一試!

pspdfkit.com

如何確保每個人用的 CocoaPods 版本是一樣的

CocoaPods 毫無疑問是目前 Mac/iOS 開發中,最熱門的第三方套件管理工具之一。有用過的人就會知道,當團隊成員使用的 CocoaPods 版本不一致的時候就會發生一些問題:小一點的像是 Podfile.lock 會一直發生衝突,大一點的像是不同版本對 Podfile 的解析結果不一致等等。

既然 CocoaPods 其實只是 Ruby 的一個 gem,很理所當然的我們會直覺想到用 Bundler 來管理版本,這的確也是最被建議的做法,但問題是要怎麼確保團隊成員每個人每次都會記得要用 Bundler 來執行 CocoaPods 呢?其實你可以透過 Podfile 來解決這個問題!

github.com

Refactoring Reveals Truths

知名的 iOS 開發者 Khanlou 寫了一篇文章,分享一個實際的例子,說明他如何透過 refactor 來找到隱藏的 bug、挖掘該函式真正的意圖、以及如何讓設計更有彈性。我就不多做介紹了,直接去看文章就對了!

khanlou.com

iOS 10.3 to 11.0 API Differences

雖然蘋果推出了新版的 API Diff 網頁,看起來也的確很賞心悅目,但我個人還是覺得以前的傳統頁面比較適合工程師閱讀,還好有這種想法的不只有我一人:)

codeworkshop.net

Management Philosophy

作者總結了他近年來對於管理團隊的一些想法,大致分為以下幾點:

  • 建立團員間的信任是最重要的事,你得一直努力於建立與維持團員間的信任感。
  • 取得回饋,越早越好、越常越好、並且是各方面的(好的壞的)回饋。
  • 給團員足夠的空間去成功或失敗,每個人都有潛力,不要讓團員變成只會說一步做一步的人。
  • 建立一些 SOP,不要太多也不要太少。
  • 確保團員知道我們的願景跟方向,公司的方向很有可能會改變,你的責任是確保每個成員隨時都清楚接下來的方向是什麼。

3002.ca

Made With ARKit (@madewithARKit)

ARKit 是蘋果公司最新推出的一套 framework,現在已經有許多人用它做出令人驚嘆的成果了,這個推特帳號就是專門收集這些作品。

twitter.com

Two Legs Bad

你是戒嚴時代的誰呢?

聽說戒嚴時代治安好,經濟成長高,家家夜不閉戶、人們路不拾遺,看起來是個令人懷念的時代,現在社會是不是真的太自由了呢?《沃草》製作《你是戒嚴時代的誰呢?》專題,讓你親身體驗戒嚴時代的人生,看看你最像當時的誰!

@vinta 分享。

watchout.tw

wangchunming/2017hosts

Repo 持有者因意外被捕,并且以扰乱公共秩序名义被警方拘留。

@vinta 分享。

github.com


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

CodeTengu Weekly 碼天狗週刊 - Issue 97 騙人,日出怎麼會是早上,我明明都是在晚上看到日出的 - Jul 24th 2017

$
0
0

Hello World

CodeTengu Weekly 碼天狗週刊

CodeTengu Weekly 會在 GMT+8 時區的每個禮拜一 AM 10:00 出刊,每期會由三位不同的 curator 負責當期的內容,每個 curator 有各自擅長的領域,如果你在這一期沒有看到自已感興趣的東西,可能下一期就會有了。你也可以瀏覽一下前幾期的內容

目前的 curator 陣容:

你也可以關注我們的 FacebookTwitterGitHubOpen Source 專案,有很多 weekly 看不到的內容。有任何建議或疑問也歡迎來 Gitter 聊聊。

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

@saiday

Apple Machine Learning Journal

Apple 在這個月開始了 Apple Machine Learning Journal 這個 site,似乎不打算用 blog 的形式而是用比較正式的 journal 來刊登跟 Machine Learning 相關的內容。

第一期已經出來了,Apple 真的很會寫這類的文件啊,雖然這不是我熟悉的領域,但看起來也是有所收穫。
相信對許多人來說是個很好的資源。

apple.com

Reducers - Chris Eidhof

又是 Chris Eidhof!總覺得他一直在幫 Swift 增加難度。
學 Swift 的時候總是會看到一些魔幻的 code,這個是我近期看到最帥氣的。

這篇文章的用意是對很常見的有 async task 的 project 做重構,把 async task 的 state 抽離出來,增加可測試性。
因為是 async task,為了要處理 state 中的 side effect,作者引入了一個 Reducer 的模式,這個在 Redux, Elm (update function) 很常見的模式,是一種很 functional 的模式。 在這樣重構之後,測試的時候就不需要引入任何種的 Test Doubles,直接 assert input, output 就好了。

作者還把 enum 當成 method 來用,在這個範例的條件下,理由也很說得過去,之前還真的沒想過呢。

註:Reducer 用 higher order function 的 reduce 來聯想的話,很快就理解了

eidhof.nl

Ricky Mondello on Twitter: "iOS 11 Beta 3 adds SFAuthenticationSession"

Apple 在今年的 WWDC What's New in Safari View Controller 說 iOS 11 之後的 Safari, Safari View Controller 不會再共享 cookie, local storage 了,不愧是業界最重視用戶隱私的公司。
但這樣就讓有些事情很難做啦,特別是本來拿 Safari View Controller 來做 SSO 的,於是,嘩,iOS 11 beta 3 多了一個 SFAuthenticationSession,專門處理這件事。

有人已經做了 範例,這個新的 API 運作起來其實真的很不錯,那麼剩下的就是開發者要關心的版本兼容問題了。

twitter.com

Kotlin: Integrate it with your complex Android project (Dagger, Mockito)

Kotlin 的 100% java interoperability 是很讚的一件事情,這讓你忽然福至心靈想要在既有的 Android Java 專案導入的時候,摁摁,它就導入了。

我想最近應該很多人已經或考慮導入 Kotlin 了,這篇是針對這個需求的主題:整合既有的 3rd party library。

@wangyung 很早期就投入 Kotlin 開發,他寫了一篇 為什麼我們使用 Kotlin 開發 LINE Creators Studio,在 Mokito final class mocking 這個問題上,他採取的是 interface oriented,我覺得比較理想。

medium.com

facebook/device-year-class: A library that analyzes an Android device's specifications and calculates which year the device would be considered "high end”.

if (year >= 2013) {
    // Do advanced animation
} else if (year > 2010) {
    // Do simple animation
} else {
    // Phone too slow, don't do any animations
}

簡單、粗暴、做得到

github.com

@hiroshiyui

How We Solved Authentication and Authorization in Our Microservice Architecture

作者分享了他們在 Microservice 架構下如何處理認證與授權的問題,我覺得這篇提到很多場景都是多產品、多子系統的公司在實務上會碰到的,像是處理跨子系統、行動版 App、開放第三方存取 API 等,很值得一讀。

medium.com

Rust Performance Pitfalls

本文作者列舉了一些 Rust 常見的效能坑,值得使用 Rust 語言的程式開發者參考。

不過裡頭有些做法是拿安全換效能,我個人實在不願意這樣搞就是了…。(若不是為了安全,為什麼要用 Rust?)

github.io

Because Browser Diversity Is Good For The Web

作者因為一則 Twitter 回應而寫了這篇,關於瀏覽器產品的多樣性為何重要的文章。當然,我絕對明白處理多瀏覽器的相容工作很煩、有時更會覺得痛,可是我還是跟作者一樣認為,瀏覽器產品的多樣性,正是 Web 之所以為 Web 的明證。

我們不想要回到那個 IE 獨大的時代,此時的我們也不該認為「Chrome 是『市場最大手』,網頁在它這裡看起來沒問題、能動就好」。

(想起以前曾經為了單位網站的選單是 IE-only、而跟主管吵架的往事,我真的好衝。)

medium.com

Rapid DHCP: Or, how do Macs get on the network so fast?

以前我剛接觸到 Mac OS X (現在要改稱 macOS 了…)時,扣除那些絢麗的視覺效果不談,印象最深刻的就是它用 DHCP 設定網路組態真是爆猛無敵誇張地快,進度指示的圓圈才剛快速地跑過一輪,就好了,相較之下我在 Windows, Linux, FreeBSD 底下可要等個好幾秒,於是我就很好奇,OS X 的網路設定是怎麼做到這種效果的?這篇文章談的就是這個主題,很有趣,如果您沒看過,現在讓您看看。

是說有人也曾跟我有同樣的好奇心嗎?

cafbit.com

@yhsiang

Life of a GraphQL Query — Lexing/Parsing

作者從 GraphQL Ruby 使用的 Ragel 切入,帶你理解如何解譯 GraphQL 的語法。

處理語言的 lexing 和 parsing,算是很入門的一篇。

作者下一篇是關於 GraphQL query 的驗證,有興趣的朋友可以繼續追蹤。

medium.com

An Almost Static Stack (Building Static Sites with create-react-app)

作者手把手地教你如何用 React 完成一個靜態網站。

用到的 tech stack 如下:

  • create-react-app
  • react-router
  • react-helmet
  • react-snapshot
  • styled-components

若是你剛好都有用以上的專案,而且正在找尋靜態網站的解決方案,不妨試試作者的方法。

medium.com

CSS Isn’t Black Magic

從瀏覽器如何產生畫面開始說起,也就是所謂的 Browser render pipeline (The pixel pipeline)。

除了提到 CSSOM 的產生過程,後面也有提到權重、定位跟 Z-index,建議 JavaScript 寫很熟,CSS 卻一直苦手的朋友,可以用心閱讀體會!

freecodecamp.org

Measuring web performance; it’s really quite simple

一篇較長的文章,在說明如何定義好 performance,並且正確地測量網站的 performance。

後面也有實際使用 webpagetest 測量,建議對 web performance 還不熟悉的朋友可以花時間閱讀。

hackernoon.com

Random Cool Stuff

Wat

這是一個五分鐘的 lightning talk,是在開一些語言 (Ruby, JavaScript) 的玩笑,但節奏的掌握好好,超好笑。

這個作者自己有做一個 screencast 的網站 Destroy All Software,真材實料啊!

@saiday 提供。

destroyallsoftware.com


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

Viewing all 109 articles
Browse latest View live


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