文章

認識 Go 的 error 與學習判斷 error 類型的方法

Go 的程式設計中,透過回傳 error 型別的值告知錯誤發生是相當常見的模式,所以很多函式的回傳定義大多如下所示,其中 1 個會是 error 型別,用以告知執行時的錯誤:

func FunctionName() (結果的型別, error)

這也是為什麼我們如果閱讀各種以 Go 開發的開放原始碼專案會很常看到類似以下的程式碼的原因:

r, err := FunctionName()
if err != nil {
	// Error handling here
}

所以學會判斷 error 的類型並處理各種類型的錯誤,變成 Go 程式設計的重要課題。

本文將探討如何判斷 error 類型以及多種不同判斷的方法。

Posted on  Apr 16, 2024  in  Go 程式設計 - 初階  by  Amo Chen  ‐ 6 min read

LangChain 怎麼玩?用 Streamlit 打造 LLM 個人工具箱

每個程式設計師多多少少都有打造私人工具箱,不僅可以增加工作效率,還可以跟著職業生涯累積起來帶著走。

AI 時代來臨,工具箱當然免不了要多一些 AI 相關的工具,本文將介紹怎麼用 LangChain 結合 Python 知名套件 Streamlit 打造屬於你的個人工具箱!

Posted on  Apr 12, 2024  in  LangChain , Python 程式設計 - 高階  by  Amo Chen  ‐ 5 min read

領域展開!用 Google Colab, JupySQL, DuckDB 實戰分析數據

談到 Python 數據分析的工具,多數人應該使用 Jupyter Notebook 搭配 pandas 進行數據分析,不過使用 pandas 還是不及使用 SQL 來得直覺一些,如果能夠在 Jupyter Notebook 中直接使用 SQL 對資料進行查詢、分析,對於精通 SQL 的人而言,將會減少需要額外學習 pandas 的成本。

恰好 JupySQL 是 1 個能夠讓我們在 Jupyter 以 SQL 對資料進行查詢、分析的擴充套件(extension),而且 JupySQL 也整合 pandas, 因此可以將查詢結果轉換成為 pandas 的 DataFrame, 除此之外更整合 DuckDB, SQLite, MySQL, PostgreSQL 等常見資料庫,讓我們能夠輕鬆以 SQL 操作各種不同來源的資料庫。

本文將以 Google Colab 搭配 JupySQL 與 DuckDB, 帶你學習 Jupyter Notebook + pandas 之外的另一種方法!

Posted on  Apr 9, 2024  in  Python 模組/套件推薦 , Python 程式設計 - 中階  by  Amo Chen  ‐ 5 min read

Python 效能之鬼!你應該學會使用的 deque !

程式的效能並不是天生具備,而是榨出來的,特別是對於 Python 這門程式語言而言,如果想要做到 High Performance 的話,有些魔鬼就藏在細節裡。

舉常見的 list 為例,你知道 list 在執行 pop(0)insert(0, value) 是效率較差的嗎?如果你的應用必須經常呼叫 pop(0)insert(0, value) 的話,建議你換個資料結構吧!使用 deque 將會帶來效率的提升!

本文將帶你認識 Python 的 deque 以及它在何種特定情況下能夠帶來效率的提升!

Posted on  Apr 1, 2024  in  Python 程式設計 - 中階  by  Amo Chen  ‐ 4 min read

從 Python try except 的角度理解 Go 如何用 defer panic() recover() 處理例外/錯誤

學習 Go 的過程一定有人跟我一樣,對於 Go 用 defer(), panic(), recover() 處理例外/錯誤的方式感到困惑,特別是已經習慣使用 Java, JavaScript, Python 等程式語言的開發者來說, Java, JavaScript, Python 所提供的 try...catch , try-except 在可讀性相對友善很多之外,在開發時也直覺很多。

但要理解 Go 的 defer(), panic(), recover() 其實可以從已知的模式出發,如此原本無法輕易理解的事物,就會變成好理解許多。

本文將從 Python 的 try-except 出發,學習 Go 如何做到相同的例外(exception)處理。

Posted on  Mar 27, 2024  in  Go 程式設計 - 初階  by  Amo Chen  ‐ 5 min read

LangChain 怎麼玩?用 Hugging Face 結合 LangChain,做個英文對話機器人模擬面試吧

LangChain 作為 1 個框架,讓開發者可以很輕鬆地開發語言模型相關的應用,不過語言模型還是有其極限,有些功能仍須仰賴傳統的程式設計、機器學習等領域,譬如語音辨識、語音合成等等,所幸這些功能可以藉由 Hugging Face 等平台輕鬆實現。

本文將教導如何使用 Hugging Face 上的模型,並結合 LangChain 做出可以用英文對話的機器人,讓語言模型的應用跨出文字以外的領域!

Posted on  Mar 20, 2024  in  LangChain , Python 程式設計 - 高階  by  Amo Chen  ‐ 7 min read

LangChain 怎麼玩?如何做資料庫查詢機器人

作為軟體開發者,你開始發想任何語言模型可以應用的領域了嗎?

如果你沒有任何想法,也許可以先看看怎麼藉由語言模型,讓我們可以用對話方式,就能夠自動對資料庫執行 SQL 進行查詢,而且過程中完全不需要寫任何 SQL 喔!

也許看完本文,你會對語言模型的應用想像會有更清楚的畫面!

Posted on  Mar 14, 2024  in  LangChain , Python 程式設計 - 高階  by  Amo Chen  ‐ 5 min read

如何在終端機(terminal)漂亮地平行列印文字訊息(parallel output)?

在使用 multiprocessing, threading 等模組跑平行處理時,如果需要在每個執行單位(process, thread)列印一些字串的話,你會怎麼做?

我想大多數人都直接 print() 到 terminal 就好,但是輸出的文字太多太長時,通常都沒有太大助益,這時候最好將輸出寫到檔案,一旦有問題就可以從檔案中尋找問題。

但是,我們多數時候還是想知道執行單位最新的運作狀態,例如正在執行哪個步驟,這些輸出一直附加到 terminal 上的話,不免還是會讓 terminal 顯得難看⋯⋯。

因此,本文將介紹 1 種方法讓平行處理的輸出可以清掉舊的輸出(output),並覆蓋新的輸出(output)上去,如此一來不僅可以知道每個執行單位的最新狀況,還可以讓 terminal 顯得乾淨、優雅!

Posted on  Mar 13, 2024  in  Python 程式設計 - 中階  by  Amo Chen  ‐ 2 min read