MyApollo

MyApollo

輕鬆學習程式語言和最新技術趨勢,踏上從小工到大師之旅!

60 秒新知

白話文解說 Code Obfuscation / 程式碼混淆

有些程式語言屬於腳本(script)語言,完全不需要經過編譯,所以散佈這些程式時就直接以原本樣貌散佈。舉個最常見的例子,就是網頁上的 JavaScript 程式碼

Posted on  Dec 1, 2023  by  Amo Chen  ‐ 2 min read

最新文章

Go 用 -ldflags -X 參數在編譯時自動設定程式碼內的字串變數值

為了方便除錯,通常我們會在程式裡留下一些方便除錯的資訊,包含是哪個 commit 或者哪個系統編譯、哪個版本號等等⋯⋯。

你是手動更改這些資訊的嗎?

本文將透過實際範例教導如何自動化帶入這些資訊到 Go 的執行檔中,讓你徹底解脫手動之苦,效率 up up!

Posted on  Dec 7, 2023  in  Go 程式設計 - 中階  by  Amo Chen  ‐ 4 min read

優化加速 docker build 的秘訣 —— 使用 Cache mounts

現代開發應用(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

超實用 parallel 指令教學

江湖闖久了,遇到資料處理相關的工作是常有的事,譬如為一堆 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.jpgb.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

熱門文章

零經驗也可的 PySpark 教學 - 初體驗

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 四大功能:

  • Spark SQL - 支援以 SQL 對資料進行操作、運算
  • Spark Streaming - 讓 Spark 能夠處理串流(streaming)形式的資料
  • MLlib - 增加機器學習(machine learning)的相關函式庫(library),讓開發者得以利用 Apache Spark 進行機器學習相關的運算
  • GraphX - 支援圖論(graph theory)相關的運算,像社群網絡(social network)相關數據分析就適合使用 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 asyncio 從不會到上路

自從 Python 3.4 推出 asyncio 模組之後,開發者在提升 Python 程式效能的解決方案上又多了 1 種選擇。

不過相較於較為人所熟知的 multiprocessingthreading 而言,大多數初學者並不習慣非同步式(asynchronous)式的開發思維,但只要能夠掌握 asyncio 模組中幾點重要的概念,即使是從未接觸過的初學者,也能夠慢慢掌握 asyncio 的使用方式。

本文將重點介紹 asyncio 模組中的重要概念,並透過實際範例理解 asyncio 的運作,從而學會如何使用 asyncio 模組。

Last updated on  Oct 1, 2023  in  Python 程式設計 - 高階  by  Amo Chen  ‐ 13 min read

用範例輕鬆學 Python multiprocessing 模組

Python 內建的 multiprocessing 是相當重要的模組,如果有平行(parallelism)處理的需求,除了內建的 threading 模組之外,另一個就屬 multiprocessing 。

使用 multiprocessing 的好處在於能夠很大程度避開 Python GIL 對於程式效能的影響,但壞處則是對於記憶體的耗用程度也較高,即便如此也是一個必須了解的模組。

本篇將實際透過幾個範例學習如何使用 multiprocessing 模組。

Last updated on  Aug 8, 2023  in  Python 程式設計 - 初階  by  Amo Chen  ‐ 5 min read