前言:
Linux桌面環境中的SSH Tunnel GUI工具極少,以前找了一陣子後找到gSTM,但這套在2006-08-05就停更了,只支援到GTK2.0,gSTM-1.3.7幫它續命到GTK3.0,但也更新到2020-12-16。
很早前就想過重構gSTM,但它是GTK2.0或GTK3.0寫的,還用了GTK的glade GUI設計器,GTK的C Library與C的實做,讓gSTM的UI分佈在整個程式各個角落,glade GUI設計器現在幾乎失傳了,而且只支援GTK,這造成要重構它得要重畫整個界面,因此難度等同於重寫一套GUI應用程式。
有了AI,正好可以用AI嘗試重構既有程式,改用新的程式語言以及新的UI Framework重寫,又能讓AI分析既有程式的程式碼邏輯。
成果:
整份專案在
https://github.com/codyfu/dot-gstm
實做過程:
實做過程還算順利,目前覺得AvaloniaUI給AI實做還不錯,目前的盲點是,AvaloniaUI的Debug,還是它改了,我編譯我執行我測試,有問題截圖後貼給AI,流程比Web用playwright慢得多。
儘管如此,claude-code分析能力相當不錯,請它分析gSTM,問它底層呼叫ssh指令的程式碼位置和程式邏輯,大概有9成正確,讓它分析後,再要求它按照原始邏輯在.NET實做,基本上八成正確。
目前程式設計通常被推薦用async/await的非同步模式,但我要求.NET完全按照gSTM原始設計,使用執行緒+Process的方式實做,Queue的處理則要求使用mutex,初步看起來應該還ok。
AI用AvaloniaUI實做UI時,雖然它會說,跟原始的gSTM界面一致,但實際上根本就他自己亂想亂畫,要貼執行畫面給它,並且一來一回讓它修修修,才能改到和gSTM界面接近。
結論:
這次用AI重構了一個既有程式,一方面實現了願望,一方面也實測了AI重構既有軟體的能力和過程。
重構的對象是C + GTK Library,看起來效果還不錯。