Contents ...
udn網路城邦
使用 AI 來輔助「寫程式」:以 SiaTaigi GTK 3 程式為例
2026/02/25 19:18
瀏覽86
迴響0
推薦1
引用0
筆者從昨天晚上 6 點 (2026 年 2 月 24 日) 到今天下午 6 點 (2026 年 2 月 25),花費一天的時間,透過 Microsoft Copilot 以及 Gemini 的輔助 (主要還是 Copilot),把 English to POJ 的基本功能完成;Well,有 AI 來輔助寫程式真地可以少掉許多查詢與閱讀的時間,感覺真的很不錯!

新增功能:

在 GTK 3 TextViewWidget 當中鍵入一個英文字,cursor 緊停在該字後方的情況下,按下 Ctrl+Enter 組合鍵,就透過 Hashing 去找對應的「台語白話字」(POJ),若有找到就將該英文字代換成 Pe̍h-Ōe-Jī。

例如:鍵入 fish 之後按下 Ctrl+Enter 鍵,第一次會代換成 hî,再按一次 Ctrl+Enter 會代換成 hî-á,繼續按就是又回到 hî (looping)。

來看一下測試的截圖畫面:





第一次按下 Ctrl+Enter:




第二次按下 Ctrl+Enter:


第三次按下 Ctrl+Enter 會回到 hî (looping);

來看一下 GTK 3 的程式碼,如何在 TextViewWidget 當中由 insert cursor 所在位置去抓出前一個字 (測試用的程式碼,測好後整合到 SiaTaigi):


再讓大家看一下筆者所建立的 Eng2Poj 資料庫 (a static array),這些資料會經由 Hashing Function 存放到對應的 bucket 當中,collision 發生時採用最簡單的 linked list 方式來解決。




然而,上述的程式碼遇到 "daughter-in-law" 時會發生問題,因為 GTK 3 的 API:

   gtk_text_iter_backward_word_start()  與 gtk_text_iter_forward_word_end()

會將 hyphen "-" 當成 word separator,以致於往回抓到的字是 "law",而不是完整的 "daughter-in-law"。





怎麼辦呢?其實 GTK Official Site 的 Documentation 寫得不太好(GTK 做得很不錯,但 Documentation 寫得很爛),因為其說明實在是太過簡略而常常說得不清不楚,相關的APIs 如何協同合作以完成一個小工作的 code snippet 非常非常少,以致於大多數還得自己寫測試程式去 try APIs,那實在是非常花費時間與心力,於是筆者就想說「找 AI 問看看」,沒想到問了之後,Copilot 的回答還蠻清楚扼要的,而且大部分其所回答的 code snippet 都還蠻切題的,真的是幫筆者省下了不少時間與心力!(真的很感謝 Copilot,沒想到免錢的版本就已經這麼好用)






筆者將 Copilot 所回答的 code snippet 整合到 SiaTaigi 程式中,測試後的確可以達成功能。






繼續測試:





AI 實在是太棒了,利用它們來輔助寫程式,的確可以省下不少心力,筆者還就此順便要求它們寫一些程式,例如 system UUID、system GUID、MAC addresses ... for MSYS2 platform 等等;就目前的測試結果而言,筆者覺得 Copilot 的程式能力比 Gemini 好上一些,雖然兩者是互有輸贏 (有時候 Copilot 的 code snippet 可以運作,Gemini 的不行,有時候是 Copilot 的不行,而 Gemini 的可以運作)。



第一項新增功能已經完成,剩下的就是要建 database,不知道 AI 懂不懂台語白話字,不然就可以要求它幫我建立資料庫。

心中還有另一項功能是:如果 TextViewWidget 有 Selection,就先以 Selection 來做搜尋與置換(
Selection 可以涵蓋多字到完整的一個句子),如果沒有 Selection,就以 Cursor 之前的字來做搜尋與置換。這部分就等有空再做了!


好了,今天的分享就寫到這裡!Have a nice day!



有誰推薦more
全站分類:創作 其他
自訂分類:GTK+ Programming
下一則: Model-View-Controller and GTK Tree View