開源的 Email 樣板 — Free Responsive HTML Email Template
如果說前端的工作裡面有 2 件麻煩的事, 1 件大概率會是跨瀏覽器測試,另外 1 件大概就是 email 的 HTML 版面開發與測試。 Email 的 HTML 版面開發與測試之所以麻煩,是因為
Posted on Dec 2, 2023 by Amo Chen ‐ 1 min read
輕鬆學習程式語言和最新技術趨勢,踏上從小工到大師之旅!
如果說前端的工作裡面有 2 件麻煩的事, 1 件大概率會是跨瀏覽器測試,另外 1 件大概就是 email 的 HTML 版面開發與測試。 Email 的 HTML 版面開發與測試之所以麻煩,是因為
Posted on Dec 2, 2023 by Amo Chen ‐ 1 min read
有些程式語言屬於腳本(script)語言,完全不需要經過編譯,所以散佈這些程式時就直接以原本樣貌散佈。舉個最常見的例子,就是網頁上的 JavaScript 程式碼
Posted on Dec 1, 2023 by Amo Chen ‐ 2 min read
之所以說這個題目很經典,是因為現代太多應用都是用 HTTP 協定進行溝通,例如每個人每天都一定會開啟的網頁瀏覽器,背後就是使用 HTTP 協定,所以這個題目可以
Posted on Nov 30, 2023 by Amo Chen ‐ 1 min read
為了方便除錯,通常我們會在程式裡留下一些方便除錯的資訊,包含是哪個 commit 或者哪個系統編譯、哪個版本號等等⋯⋯。
你是手動更改這些資訊的嗎?
本文將透過實際範例教導如何自動化帶入這些資訊到 Go 的執行檔中,讓你徹底解脫手動之苦,效率 up up!
Posted on Dec 7, 2023 in Go 程式設計 - 中階 by Amo Chen ‐ 4 min read
現代開發應用(application)或多或少都會使用到第三方套件,不僅減少自行開發的成本,也加速開發應用的速度,所以各種程式語言都會有所謂的 package manager, 幫助開發者安裝/管理各種第三方套件與套件相依性,例如 npm, yarn, pip, go mod 等等,甚至作業系統也有 package manager 例如著名的 APT(Advanced Packaging Tool), Homebrew 等等。
但是隨著第三方套件越用越多,每次重新編譯(build) Docker 映像檔(image)的時間也會越來越長,因為每次重新 build docker image 都要花費不少時間重新下載並安裝第三方套件⋯⋯。
針對這個問題, Docker 官方文件有提到可以使用 Cache mounts 優化 build 的速度。
一起認識什麼是 Cache mounts 吧!
Posted on Nov 26, 2023 in Docker by Amo Chen ‐ 3 min read
江湖闖久了,遇到資料處理相關的工作是常有的事,譬如為一堆 jpg 圖檔產生縮圖(thumbnail),或者把一堆 TSV 檔轉換成 CSV 格式,又或者把一堆資料夾分別用 tar 指令壓縮起來,諸如此類的。
針對這些情況,我個人很常用 awk 指令(詳見 awk 指令教學)產生所需要的指令,再丟到 shell 逐一執行,例如:
$ ls -l *.jpg | awk '{ print "tar -czvf "$9".tar.gz "$9}' | sh
上述指令中 ls -l *.jpg | awk '{ print "tar -czvf "$9".tar.gz "$9}'
的部分是為每 1 個 jpg 檔案產生 1 個對應的壓縮指令的字串,例如當前資料夾下有 a.jpg
與 b.jpg
2 個檔案的話,就會產生下列 2 行字串:
tar -czvf a.jpg.tar.gz a.jpg
tar -czvf b.jpg.tar.gz b.jpg
上述字串再以 | sh
交給 shell 執行。
不過這種用法的缺點就是指令會逐一執行,如果有 300 個檔案,每個處理要 1 秒,那麼就得等待 300 秒才能完成工作。
如果能夠將這些工作平行處理,將可以大大減少執行時間,這就是本文要介紹的 parallel
指令的最大用途,讓人能在 shell 中平行處理多個指令,增加執行速度。
Posted on Nov 23, 2023 in Unix-like 命令列教學 by Amo Chen ‐ 8 min read
Apache Spark 是現今處理巨量資料(large-scale data)分析、資料處理、機器學習(machine learning)的主流叢集運算框架之一,其主打簡單、快速、可擴充(scalable)、統一介面(unified) 4 大特點,更支援多種語言(Python, Java, R, SQL)可供靈活選擇運用。
Spark 採用的是 In-memory 運算技術,運算的資料存在於記憶體之中,相對於使用硬碟等儲存媒介的運算框架(例如 Apache Hadoop)而言, Spark 具有運算速度的優勢。
此外,除了提供核心運算功能的 Spark Core, Apache Spark 更在其基礎上衍生 Spark SQL, Spark Streaming, MLlib, GraphX 四大功能:
引用自 https://databricks.com
綜觀來說,Apache Spark 是相當值得投資學習的一套運算框架。
本文將透過 Docker 以及 PySpark 為初學者提供接觸 Apache Spark 的一條捷徑。
Last updated on Dec 16, 2022 in Python 模組/套件推薦 , Python 程式設計 - 高階 by Amo Chen ‐ 5 min read
自從 Python 3.4 推出 asyncio 模組之後,開發者在提升 Python 程式效能的解決方案上又多了 1 種選擇。
不過相較於較為人所熟知的 multiprocessing 與 threading 而言,大多數初學者並不習慣非同步式(asynchronous)式的開發思維,但只要能夠掌握 asyncio 模組中幾點重要的概念,即使是從未接觸過的初學者,也能夠慢慢掌握 asyncio 的使用方式。
本文將重點介紹 asyncio 模組中的重要概念,並透過實際範例理解 asyncio 的運作,從而學會如何使用 asyncio 模組。
Last updated on Oct 1, 2023 in Python 程式設計 - 高階 by Amo Chen ‐ 13 min read
Python 內建的 multiprocessing 是相當重要的模組,如果有平行(parallelism)處理的需求,除了內建的 threading 模組之外,另一個就屬 multiprocessing 。
使用 multiprocessing 的好處在於能夠很大程度避開 Python GIL 對於程式效能的影響,但壞處則是對於記憶體的耗用程度也較高,即便如此也是一個必須了解的模組。
本篇將實際透過幾個範例學習如何使用 multiprocessing 模組。
Last updated on Aug 8, 2023 in Python 程式設計 - 初階 by Amo Chen ‐ 5 min read