在現代開發環境中,熟練掌握各種工具的快捷鍵能顯著提升工作效率,本筆記整理了自己常用開發工具的基礎操作與進階快捷鍵,幫助更高效地進行開發工作。由於自己現在開發主要環境都是使用 mac os,所以快捷鍵會以 mac 的鍵盤配置為主,筆記會列出的重點工具為 :

  • MacOS Terminal
  • Visual Studio Code (VSCode)
  • Vim

然後可能也會補充一些 Windows PowerShellIntelliJ IDEA。在日常開發中可有意識的多使用快捷鍵來加深記憶,若遺忘時這裡可以快速查看筆記,鞏固快捷鍵的知識。

Continue reading

GitHub Flow

雖然使用了 Git 作為版本管理工具,但每個人對於分支的認知可能不同,故造成每次 commit 到不同分支之後,要合併要回哪個分支可能會有歧義,這時就可參考一些已存在的 Workflow 規範,只要團隊遵守這樣的 branch 的 commit 和 merge 規則,就可以有一致性。

每個 Workflow 規範都不太一樣,常見有: Git Flow、GitHub Flow、GitLab flow ,主要都是希望就算 Project 越來越大協作人員越來越多,也能有效管理 Git Branch,那這邊會以 GitHub Flow 為主要說明,但也會筆記分析了解其他不同策略的優缺點。

Continue reading

軟體工程師每天都會用 Git 進行版控,雖然是經常使用,但有一些差異可能還真的沒有好好想過,所以前面有文章補充了一些名詞解釋和功能比較。Git 使用會遇到這是各樣的情形,雖然大部分都千篇一律,但有一些實際面對到的情況,是蠻值得記錄下來的! 所以這篇文章就筆記一下做一些 CLI 操作補充,另外也把一些踩坑的筆記統整。若以後有想到類似情境,就直接來參考這篇文章。

Continue reading

一般來說 Git 的操作會涉及到幾個區域

  • 硬碟區 disk : 檔案存放的一般資料夾,也會被稱為 workspace
  • 暫存區 staging : 保存 git add 紀錄的地方,也被稱為 index
  • 本地端 git local : 保存 git commit 紀錄的地方,也被稱為 repository
  • 遠端 git remote : git push 的倉儲,如 GithubGitlab 等等

而各個之間狀態變化的簡單關係如下圖所示 :

以上就是最基本的使用和定義。

Continue reading

SSH Key

SSH 是 Secure Shell 的縮寫,為一種通訊協定,會對裝置之間的連線進行驗證加密,安全地傳送 command。通常用於遠端控制伺服器、管理基礎架構和傳輸檔案。SSH 是在應用層和傳輸層上執行的,透過稱為公開金鑰加密,「public key 可供任何人使用」 ; 另一個金鑰為「private key 由其擁有者保密」,兩個 key 相互對應。此外傳輸的數據是經過壓縮的,所以可以加快傳輸的速度。並且許多作業系統,包含 macOS、Linux 都天然支援。

Continue reading

Dictionary 是 Python 用來儲存 key → value 的對應關係,其他語言類似的資料結構為 : HashMap(Java) ; Object/Map(JavaScrip) ; Map(Go) 等等,以下筆記一些 Dictionary 小觀念和使用時機。注意 Dictionary 底層是 hash table,所以其 key 必須是不可變的 (Immutable),這要特別注意 ; 另外自 Python 3.7+ 起,Dictionary 有保證會「保留插入順序」,但還是盡量不要依賴這個行為會比較好。

Continue reading

我們都知道 Python 是一個動態的語言,代表每一個 variable 是什麼型別是在 runtime 的時候決定的,雖然很靈活可是當 code 量級上去之後因爲類型不正確引發的錯誤也會逐漸增加。但 Python 也是可以做到型別要求的,就是使用 「 Type Hint 」 或者叫 「 Type Annotation 」,中文稱呼蠻多種的例如「型別標註」、「型別提示」等等。 若有寫 Type Hint 的話,比較現代的 IDE 都會有一些自動顯示或補全輔助 :

Python 的 Type Hint 是從3.5開始萌芽逐漸引入直到現在,故有一些發展的歷史脈絡和演變,有一些寫法也漸漸更替,故簡單介紹和分析一下。

Continue reading

Python 的 Coroutine 發展已經逐漸穩定成熟,已經成為了提升 Python 程式效能的優秀解決方案之一,在之前簡單介紹 Coroutine 和 await/async 時,我們在範例 code 中一直有用到一個 Python buildin 模組 asyncio,它提供了一套完整的工具和接口,用於建立非同步應用程式,其核心是 Event-Loop,會追蹤所有註冊的任務,並根據任務的狀態調度它們的執行。 故接著來了解 Event-Loop 和其工作的執行單位 Task 吧 !

Continue reading

之前有介紹了 Asynchronous ,而 Python 的 Coroutine 是實現 Asynchronous 的一種設計方式,且 Python 目前已經有非常直觀簡單的語法糖來定義 Asynchronous Code,使得程式寫起來就像普通的 「 Sequential Processing 順序執行 」任務那樣,但同時卻也可以對目標函數標註做「等待」的動作,並在「等待」期間可以先去做其他任務,達成非同步的功效,提高程式的並發性,而其重要的關鍵字就是 :

  • async : 用來宣告 function 能夠有異步的功能成為 Coroutine function
  • await : 用來標記 Coroutine 切換暫停和繼續的位置

而這兩個關鍵字是在 Python3.5 引入且在 Python3.7 成為保留關鍵字。它們在著名的 FastAPI 框架下的 path operation function 下也經常使用,接下來就簡單介紹一下吧。

Continue reading

前面基本介紹了 Process 、 Thread,而在現實世界中 Process 、 Thread 的任務是更加複雜的,都會是需要「多執行緒(Multithreading)」和「多進程(Multiprocessing)」來協調達成的,再來是要如何更高效更多工的處理多個不同的工作,變成是經常需要思考的問題,這時 :

  • 非同步(Asynchronous) : 執行 Non-blocking 操作,允許程式在等待某些操作完成時可執行其他任務,之後可再回頭處理之前等待操作剩下的部分
  • 併發(Concurrency) : 是系統能夠在一段時間內處理多個任務,這些任務可能交錯執行,不一定要同時發生

兩個關鍵字會經常一起出現,因為 Concurrency + Asynchronous 是許多高效能應用的關鍵,接下來就簡單談一下吧!另外可以稍微注意一下其他相關名詞的中文英文對照。

Continue reading

Author's picture

李昀陽 YunYang Lee

Welcome to my Tech Note. You can read some of the chapters below.

Software Engineer

Taiwan