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

CodeTengu Weekly 碼天狗週刊 - Issue 119 小明面試時自述他寫程式有高可預測性跟一致性,到職後果然沒有人看得懂,小明很誠實 - Mar 19th 2018

$
0
0

Hello World

CodeTengu Weekly 碼天狗週刊

只要命運的齒輪沒有出差錯,CodeTengu Weekly 都會在 UTC+8 時區的每個禮拜一 AM 10:00 出刊。每週會由三位 curator 負責當期的內容,每個 curator 有各自擅長的領域,如果你在這一期沒有看到感興趣的東西,可能下一期就有了。當然你也可以瀏覽一下前幾期的內容

目前的 curator 陣容:

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

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

@uranusjr

So you want to write a package manager

最近講了一些關於套件管理的事情,這次就來個專題,整理一下相關的文章。

首先是 Go 的套件管理工具 dep 的主要貢獻者 Sam Boyer 寫的文章。從時間推算起來,這篇大致上是他為了 dep 做的一些研究整理,加上一些自己的想法。這篇文章十分完整,把套件管理從各種維度都切割、分別探討了一次,包含了你對一個套件管理所有應該知道的主題。如果你想進入套件管理這個領域,或者想知道你用套件管理工具時,系統到底做了什麼事情為什麼做這麼爛,這篇算是必讀。套件管理真的非常、非常難,寫不好才是正常的,不要怪開發者不然你來加入啊,賭你做不出來辣

medium.com

setup.py vs requirements.txt

前一篇文章提到(欸對我假設你有讀,否則話題持續不了),語言套件管理(language package manager,LPM)通常也會包含專案/應用依賴管理(project/application dependency manager,PDM)。這個想法十分合理,但也就代表管理工具需要同時考慮兩種使用狀況。在大多數情況下,這倒不是問題(也是為什麼它們會被做在一起),但有時候就會出現兩個看似衝突的規則。

以 Python 為例,這個衝突就來自 setup.py 與 requirements.txt。這兩個檔案格式都可以被 Python 的套件管理器 Pip 接受,用來安裝依賴。這就讓大家覺得它們的功能重複,也有很多人開發了工具,專門用來同步它們。但是它們的用途並並不一樣。根據 Python 套件管理生態(Pip、Setuptools、PyPI 等等)的主要開發者 Donald Stufft,setup.py 與 requirements.txt 分別應該被用來管理 abstract 與 concrete dependencies;前者是函式庫應該有的依賴策略(因為要與其他函式庫和諧共存),後者則是應用程式的策略(為了盡可能維持應用永遠能夠正確運作)。對應到 Boyer 的術語,把 Pip 當成 LPM 使用時,應該使用 setup.py 安裝 abstract 依賴;當成 PDM 使用時,則用 requirements.txt 安裝 concrete 依賴。

caremad.io

Clarifying the Roles of the .gemspec and Gemfile

跟上一篇差不多,不過是 Ruby + Bundler 版,作者是 Yehuda Katz,可能是這年頭最知名的套件管理專家,Bundler 和 Cargo 後面的設計都有他的身影。文章的概念和 Stufft 相同(其實這篇成文比較早,說到依賴管理 Python 還得叫 Ruby 一聲前輩),不過 Bundler 在 concrete 依賴管理上多了一個 locking 概念(又稱 version-pinning)。在這裡,Gemfile.lock 對應 requirements.txt,而 Gemfile 用來「指導 lock file 應該如何被產生」,與專職控制 abstract 依賴的 .gemspec 之間沒有明確界線——Bundler 也確實提供了防止重複的策略,亦即在 Gemfile 直接參照 .gemspec。這個思路在 Cargo 更加明顯;.gemspec 在 Rust 完全沒有等價存在,而只有控制 abstract 依賴的 Cargo.toml,以及指定 concrete 依賴的 Cargo.lock。

Bundler 與 Cargo 的策略在概念上很好,但是實行上還是有點問題。套件管理有超過一半是在處理人的問題。如果你用 Gemfile 提供依賴,就要記得不能一起提供 Gemfile.lock,否則你實質上會是在 library 中使用 concrete 依賴,與其他函式庫的相容性變差。Cargo 採用的做法略有不同;它只會參考最上層(使用者程式)的 lock file,更深的所有依賴都只考慮 Cargo.toml,所以即使函式庫開發者提供了 lock file 也沒關係(因為它根本不考慮)。但這也代表 Cargo 的規則檔案在不同情境下,會有不同的效果——仍然很容易造成使用者困惑。

yehudakatz.com

PEP 518 – Specifying Minimum Build System Requirements for Python Projects

Python 的套件管理在最近也有很多類似的發展。我之前介紹過用來取代 requirements.txt 的 Pipfile 格式(以及相關的專案管理工具 Pipenv)。在 LPM 方面,則是由 PEP 518 制定了取代 setup.py 的 pyproject.toml。這個格式會從 Pip 10 開始被支援,但是如果你現在就想採用,可以用 Flit 這個工具,自動根據 pyproject.toml 產生等價的 setup.py(有點類似 JavaScript 的 Babel,只是不是 transpile 程式,而是套件 metadata)。

所以一個 Python 套件在未來會有三個依賴相關設定檔:pyproject.toml、Pipfile、Pipfile.lock。為什麼?前面提到的「人的問題」歸根究底起來,我覺得還是出在 abstract 與 concrete 依賴設定之間沒有很明顯的分界,使得 concrete 設定在某些狀況下要直接參照 abstract 設定。在 Python 的狀況中, LPM 只需要考慮 pyproject.toml,就永遠只會讀到 abstract 依賴;PDM 只需要考慮 Pipfile.lock,讀到的就是 concrete。同步問題則可以借鑑 Bundler 的做法,在 Pipfile 表達「加入 pyproject.toml 裡的依賴」。這樣使用者更新 lock file 時,仍然是從 Pipfilefile 的修改開始;這通常是直接參照 pyproject.toml,所以可以同步,但是如果需要脫鉤,也可以很簡單辦到。而如果你用 Pipenv,這只要一行就能搞定

$ pipenv install -e .

Python packaging is good now. 誰反對?

python.org

@johnlinvc

Stackoverflow Servey 2018

大家的好碰友 Stackoverflow 一年一度的開發者調查結果出爐了。 每年他們都會對開發者們做對技術和工作方面想法的調查,今年有超過十萬人參加。 調查結果顯示最熱門也是最高薪的就是 DevOps 和 Machine learning, 所有相關的技術也都非常熱門。

stackoverflow.com

Power of Prolog

最近看到了一題邏輯題 ,讓我決定好好研究一下一直都很想學的 Prolog。 Prolog 是一個邏輯編程語言,和一般我們熟悉的程序式語言完全不同,非常有趣。 Power of Prolog 非常詳盡的介紹了現代 Prolog。有興趣的人可以用線上編輯器 寫寫看練習題

metalevel.at

Google colab

上週 @drumrick 有提到的 colab, Colaboratory, 是 Google 新推出的免費線上 AI 開發環境。 免費提供長達 12 小時的免費 Tesla K80,而且沒有次數限制。 可以從 google drive 匯入資料,從 Github 匯入程式碼,還可以使用 BigQuery,整合得相當好。 想玩 deep learning 但卻買不到顯卡的人可以照著下面這份教學免費玩看看。

google.com

Tensorslow

TensorFlow 搭配 GPU 跑起來就像魔法一樣。魔法的表面是和藹可親的 Python API,背後卻是複雜的 CUDA 與 C++。有人寫了一個純 Python 的 Tensorflow,讓大家比較容易理解背後的運作原理。不過人如其名,跑的超慢。

github.com

REXEGG

正規表達式 (Regex) 總是讓你摸不著頭緒嗎?這個網站解釋了許多進階技巧,還有不同語言中 Regex 的差異。工作無聊之餘可以研究一下 Regex 的博大精深。

rexegg.com

工商服務

33 場議程 + PyCall 工作坊 + 雙語言之父,您不可錯過的 Ruby + Elixir 語言年度盛會

自 2010 開始的 RubyConf Taiwan 是台灣最大且唯一的 Ruby 語言年會,今年和 Elixir 社群合併舉辦並更名為 RubyElixirConf Taiwan 2018,本屆大會的亮點如下:

  1. 兩個語言之父(Matz / Jose)同時作為 Keynote Speaker 登場
  2. 大會史上第一次的三軌共 33 場議程,講者中有多達六位的 CRuby Committer
  3. 加入了 Ruby Data Workshop,介紹如何使用 PyCall 這個 Rubygem 在 Ruby 程式中呼叫 Python 程式做機器學習(Machine Learning)

大會已開始售票,議程與講者陣容請參考:https://2018.rubyconf.tw

rubyconf.tw

工作機會

Senior Frontend Developer at Swag

薪資範圍:年薪新台幣 100 ~ 200 萬元。

能力需求:

  1. 精通 JavaScript、CSS 與 HTML
  2. 相容主流瀏覽器的前端整合開發經驗
  3. 前端 framework / library 的使用經驗
  4. 熟悉 React
  5. 模組化開發經驗

github.com


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


Viewing all articles
Browse latest Browse all 109

Trending Articles



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