搜尋

搜尋結果

Coding中的AI輔能2 | Ai 寫測試用例
科技新知
MacauYeah・2026-01-21

繼之前筆者介紹使用AI Chat問一些技術問題後,筆者亦試著用AI直接參考code的改動。 先講結論 目前筆者只針對自己熟悉的技術,叫AI幫忙做事。那怕它做錯,我也有條件驗證及修正。而結果是,。 優點:它的確有幫上忙,省了我一些時間。省時不多,但有省得不多。總比全人力Google來得舒服。 缺點:很慢,有點鈍。它的答案也可能很直觀,需要手動再調整。 寫測試 為免一下子挑戰太大,筆者先從寫測試開始。使用一個現有的專案,去掉secret等敏感資訊,然後針對新做的function,叫GitHub Copilot 幫忙寫Test Case。Copilot Agent就會開始檢驗你現有的測試,學著你之前的風格,為新的function寫測試。Copilot會結合你現有的程式,也了解一些框架的知識,例如Hibernate Entity, Repository之間的關係,試著寫一個符合你剛才文字表述的邏輯。就是因為這也是一個整體掃瞄和學習的過程,筆者覺得不論付費還是免費的AI額度,可能都會一樣慢。 為什麼要在這個地方上使用AI幫忙呢 因為Test Case中,通常因應不同的情況,有不同的預設值。很多時,Test Case相似,又無法直接覆用預設值。所以找AI幫忙起草,後期自己再修正一些,總比全力自己設計要省心一點。 Maven pom依賴升級 筆者亦都有試過找GitHub Copilot 解決一些因版本升級帶來的依賴不相容的問題。同樣地,筆者對於這些問題,有一定的了解,只是不想每個版本逐個比較。筆者想靠 Agent 找到相近或相容的版本,結果算做得不錯。這些問題本身沒有難到需要大量Google去做資料搜集,但至少Troubleshoot時,要回憶幾個不同的maven指令。平常pom 版本分析的指令很少機會會用,一時三刻要重新好好理解一下,也是費神。這個場境,似乎AI也勝任,自己最後驗證也簡單。就像解一元多次方程式一樣,找解很費神,但驗證就很簡單。那怕驗證時真要追蹤 pom file,也有IDE幫忙。 總括來講,筆者沒有叫AI大量創作,在控制問題範圍的情況下,免費額度的GitHub Copilot也能找到一些幫助。

Coding中的AI輔能
手機‧電玩
MacauYeah・2025-12-20

早排跟一位外國的朋友聊天,發現對方公司大力地推動開發工作與AI結合,而且實務上亦幫到忙,可以解放生産力。 既然大家在AI上有得益,筆者亦試用一下。就礙於安全性問題,目前筆者暫時都經過chatbot的發散問題的方式,問AI取得方向性的建議。以下,筆者就分享一下自己的使用心得。 Github Copilot Chat 道理上可以直接安裝VSCode上,但不知道是否不版本更新問題。筆者的Ubuntu 24.04 VSCode 無法運行。反而匯出vsix 後,筆者的codeserver open source VSCode 可以運行。 有相同問題的朋友,可以留言找codeserver的詳細安裝方式。 初次使用下,GPT5 mini 的性能不錯。作為發散問題,可以幫筆者快速地梳理筆者想要了解的技術。(前題是這個技術很成熟,只是筆者不太了解) 例如:筆者會問它關於一些 builder pattern 的必要性。與原本的做法有什麼差異。通過一輪來回對答,筆者對於使用情境也有一個更全面的了解。相對於傳統,筆者要多輪Google,之後再在腦海中梳理再追問,的確快好多。 GitHub Copilot Chat 唯一的問題是,免費的額度需要每個月才會補充。長期用需要付上月費,而且它內置的Model並不包括 DeepSeeks 和 Claude。 我們可以經API KEY隨時加的外部的Model,不過這就等於我們需要多頭付費,GitHub 充一份錢,外部算力也是。 Poe.com 因為筆者暫時也只是使用開放式問題,做一些思維上的整理。筆者還試過 Poe 的第三方Claude Bot。除了策略問題外,範例寫Code效果也行。(當然是限制在筆者未了解,但其實已面世很久的技術。如果好像現在問它一個spring boot 4的問題,就不太推薦) 由於不是直接由Bot改Code,所以算力消耗不高,Poe也每日補充免費額度,可以更方便用來試水看看。 還想用AI嗎? 筆者直接給答案,想,很想。不過這並不代表我們就輕鬆很多。 對於傳統開發框架,我們還是要先理解、學習。就算未來筆者試用Bot生成Code,筆者還是要負責驗證的部份。驗證的能力,其實就是基於過去的理解和學習。面對一些新問題,筆者還是需要去官方網站找實際的資料、範例,以判斷AI生成的結論是否合理。也依靠這些資訊去修正AI的結果。 對於筆者已知的問題,若筆者過去的專案已有答案,筆者還是寧願自行複制貼上,去做一些手動修改,去適配新的場景,因為這需要的驗證工作量還更少,風險更低。

Visual Studio Code 才是 coding anywhere的基礎?
科技新知
MacauYeah・2025-10-25

筆者過去就有發表過使用 VM docker code server 作為 coding anywhere的基礎, 現時也有一直使用。code server 有效,但對於Web App 開發,仍有所不足。 那個藏在瀏覽器的IDE Code Server 使用 code server 的好處,就是筆者只需要一個有瀏覽器的客戶端,就可以連線到雲上的VM中使用 code server 。不論多重的功夫,交給外部的雲去做,自己的客戶端就可以盡可能輕便。不想自己攪一套code server開發環境?github codespaces in browser 也是一個很類似的替代器。它也是隨時經雲建立一台專用的 VM,之後就可以經瀏覽器進行開發。 一切看來都很好,所有東西都可以在 VM docker 中進行。如果你的 VM docker,可以有齊所有除錯工具,應該就真萬能了。現實就是不太美好,因為雲上的 VM ,docker 中的容器,主要都是沒圖形介面的。如果你想要利用的除錯工具,例如 chrome,你就未必可以順利在 headless VM docker conatiner 中安裝了。很多除錯工具,要麼就需要圖形介面,要麼就要有條件連到本地硬碟,所以筆者就 code server 本身,真的沒有太多解法。 Web App 開發,回到原始的基本步 Visual Studio Code 回到原始的基本步,本地Visual Studio Code VM docker ,就好好地可以利用本地的 chrome 等進行 NodeJs 的除錯。它就跟本地Visual Studio Code 本地開發類似,本地能用的 chrome,可以經過 vscode 連到 VM docker 內,只要Remote Development 插件就可以了。筆者測試過,真的很簡單,vscode連線後,會在你的VM docker 內,安裝一個很細的 client。然後其他事就像本地開發一樣了。Remote Development 除了用自己的VM外,官方還稱它可以連上github codespaces。筆者就未有詳細測試,有興趣的朋友可以建立一個codespaces看看。 雖然 Visual Studio Code 並沒有保證完整地解決所有問題,但至少它提供了一個橋樑可以作為接口開發。coding anywhere 還是有條件實現,只是我們的客戶端並不如一開始的單純,只少要有一個完整的桌面電腦環境OS ,可以做到 port forward,做一些簡單的對接。只是單純的移動端 Web 界面,就未能夠做到那些複雜的跨機轉譯。

git submodule 的那些坑
科技新知
MacauYeah・2025-09-26

submodule 設定 有些時候,我們並不想追蹤submodule的預設分支。對於初次新增時,我們可以 git submodule add b YOUR_BRANCH REPO_URL_OR_RELATIVE_REPO_PATH git submodule add b featuredevcontainer httpsgithub.commacauyeahspringbootmultipledatasource.git git submodule add b featuredevcontainer ..springbootmultipledatasource 若在初始化後期,想改branch,可以直接修改設定檔。首次做,還是建議使用指令方式加入,因為第一次總要把submodule整個歷史記錄取下來。 # file .gitmodules submodule quot;springbootmultipledatasourcequot; path = springbootmultipledatasource url = httpsgithub.commacauyeahspringbootmultipledatasource.git branch = YOUR_BRANCH 關於上述 url 的部份,如果是公開的倉庫,當然可以以完整的方式存取。例如你可以直寫 url = httpsgithub.commacauyeahspringbootmultipledatasource.git。 若為私有倉庫,道理上要本機有權限存取才行,對於持續整合持續部署就有些麻煩。正常解決方向就是 CI Server 有齊所有倉庫的存取權限,具體要根據不同 CI Server 的設定,有時候還要跨 Docker 的方式去接入。那是有夠麻煩的一件事。但若果 main module 與 sub module 剛好為同一個倉,我們也可以使用相對路勁來解決。 # file .gitmodules submodule quot;springbootmultipledatasourcequot; path = springbootmultipledatasource url = ..springbootmultipledatasource.git branch = YOUR_BRANCH 但這是有代價的,我們在本地 checkout 時,也必需要模疑類似的文件夾架構,也就是 sub module 也要獨立 checkout 。

VCP策略改良版|短炒勝率86.67%|5萬本金獲利31856元|麥振威
創富坊
程式交易 www.quants.hk (導師: 財經書藉作家: 麥振威)・2025-09-07

VCP策略改良版|短炒勝率86.67%|5萬本金獲利31856元|麥振威 之前的影片提及的「VCP策略改良版」已推出,Patreon會員可因應使用條款來選擇。今天的影片便用這個策略檢討過去一個月的回報。 在過去一個月交易NvidiaUSNVDA,用5萬港元本金,1.5倍槓桿交易,購買力有7.5萬港元,在過去一個月的回報有2387.5港元。 但若交易TeslaUSTSLA,以用樣的本金及購買力,在過去一個月的回報有38855港元。兩隻股份的沽空金額都很大,也十分適合短炒,若全年計算其實兩者的回報不會有太大分別。 至於港股,在過去一個月交易泡泡瑪特9992,同樣用5萬港元本金,1.5倍槓桿交易,在過去一個月交易了5次,win rate有100%,獲利15330港元。 另外騰訊700及靈寶3330,同樣用5萬港元本金,1.5倍槓桿交易,在過去一個月交易騰訊,只交易了4次,win rate也是100%,獲利6959港元。交易靈寶則在過去一個月交易了15次,win rate有86.67%,獲利31856港元,以5萬本金計,月回報有63%。 今天的影片重點是教大家運用「VCP策略改良版」時應如何選股,必需選走勢比大市強的股份,可以運用Trading View的圖表做比較,也可以使用我們在課堂上教的Compare Indicator。

如果把一款課金手遊當成單機speedrun遊戲玩會怎樣?03
手機‧電玩
MacauYeah・2025-05-19

前兩期筆者分享了前個4個故事線的心得,(連結一、連結二)。本篇分享一些素材關卡及挑戰關卡的情況 之前一直著重解主線,但如果主線無法突破,團素材也是無可以避免的事。首先我們簡單講一講這遊戲的最基本素材 開發素材 通過主線故事取得,可以自動重複刷,但效率很低。解主線時,每一關若得到三星評價,每天可以跳過首三場的重複刷,直接用體力換素材。第四次需要用鑽石免費或付費的課金道具重置數次,或者當作普通遊戲,掛機自動刷 基本等級強化素材 分為機體強化、角色強化、支援人員強化,可以經素材關卡取得,但一天只能打三場,不論使用跳過還是掛機刷。也可以隨時間經過,基地會補足一些免費的強化素材。 資本 多種取得方式,但因為通常在資本用完之前,開發或強化素材已經用完。沒有很特別研究它的消耗性。 挑戰關卡永恆之路 現時筆者經過團素材,升級必要機體,再去通關少量的故事Hard關卡或挑戰永恆之路Normal關卡,目的是解新手任務,因為完成它可以取得GQX的突破界限三,突破後會有40%增幅。不過跟前述一樣,這並不一定是最優解,因為GQX是攻擊屬性,未來還要計算一下,是否多台的支緩屬性機體,可以堆到更多發攻擊。 難題 因為之前的Speedrun規則限制,我們無法經過鑽石買體力或重置跳過次數,我們若想取得開發素材,只能盡量在不同的主線中關卡中最得三星評價,取得定量的開發素材。而且等級強化素材的機制,一天有上限,所以若真要Speedrun的話,不可能依靠它們。但現時暫時無解,只能先用正規方式體驗一次遊戲,再計算一下目標機體的最低等級要求,再倒推開發素材的最低要求。 就筆者現時對遊戲機制的了解,Speedrun時,可能只開發SR機體,並突破N或R系列的機體,以達到加成效果。

Swarm mode 上線 6 - 2| 升級陷阱
科技新知
MacauYeah・2025-04-14

上一期筆者就介紹寺過swarm的相容性,可以任意地刪除其中node、加入新的node,系統會自動同步各機狀態。今日,我們就來討論一下加減的流程吧。 實戰輪調流程 假設我們有5個 node,都為manager,各個 docker 版本都為28.0.4 ,我們將要關掉node 5 ubuntu 22,並加入node 6 ubuntu24,輪調流程如下 如果node5有vvip,login node 5,關掉vvip systemctl stop keepalived login node1, 把node5降為drain模式,變為worker,並從群集中刪除 docker node update availability drain node5 docker node demote node5 若然node5不是直接關機、刪除,只想好好地離開群集,可以 login node5, 在node5上預先執行 docker swarm leave docker node rm force node5 如果之前node5有好好地離開群集,而且狀態已經轉為down,那麼就不用quot;forcequot;了,用最保守的刪除指令就可以 docker node rm node5 login node1, 取得manager token docker swarm jointoken manager node5關機,新增node6,使用相容的ip段,或者使用node5的ip login node6, 加入群集,設定vvip docker swarm join token xxxx XX_IPXX_PORT systemctl stop keepalived 這陷阱這陷阱 偏我遇上 上述的操作,有一些可能的陷阱,筆者就剛好踩過,未來不知道會不會有官方保證 docker的版本需要相同,不同版本可能不能加入群集,例如 docker 28.0.4 不能加到 docker 27.5.1。 docker 27.2.x 不能加到 docker 27.5.1。 docker swarm,官方雖然宣稱支援不同版本共存,但這指的是已加入的node,在不解綁的情況下原機升級。 在swarm已有多版本共存的情況下,有一個node選擇完全脫離,它想再加入,也是會失敗的。可能這不是docker自身的限制,而是底層library的相容性問題。筆者在實測不同版本時,就得到這樣的error。docker credentials cannot check peer missing selected ALPN property

學習寫程式,除了複制貼上還有什麼?
科技新知
MacauYeah・2025-02-07

不知道大家是如何學習特定程式語言框架的建構 也不知道大家可如何保持程式庫框架的最新狀態 筆者就分享一下最新的經驗,看看對大家有沒有得著。 制作自己的範本 跟著程式框架的導覽教學Tutorial走一偏 從零起一個新專案 設定專案,該用的基本功能全部設定好,作為概念驗證Proof of Concept,也作為日後範本Template之用。 有需要用新專案,就複制之前的範本,再逐一修改名字或路徑的設定。 上述做法,是筆者過去比較常用的策略。面對很統一要求的專案,都有效。當程式庫有更新,我們可以選擇只局部修改,範本就可以長期用。我們也不需要經常從零走一篇。 練手的Code 從零起一個新專案 上述的範本做法,對於現時需求多變的專案,可能不是很有效。例如有些專案使用Session Auth,有些則是Api Auth,有些則是Open Auth。同一個範本中有齊多種Auth的設定,原本難度就有夠高,之後複制完還要自行禁用不相關的部份,也是相當的煩人。當範本中多有個地方都有互相衝突的地方,複制範本就不是一個很易的做法。 面對那些複雜的配對,我們務必要真正了解技術的運作原理,然後為每個功能都從零建一個專案,做一個最簡單的Proof of Concept。重點不是在未來拿它們複制貼上,而是用來厘清概念,哪段程式對這個功能至關重要,哪段其實沒有作用。 如果可以,每次程式庫框架升級時,都從零建一次。這樣一來可以練手,加深記憶,二來是每次版本的變動,有些程式碼可能已經變得沒有作用,原本的寫法並不再是最簡的。當然這個也可以為每個功能獨立做成範本,到有需要的時候再抄少量的程式碼就好。 其實練手的過程中,我們亦會慢慢熟習IDE的功能,有些IDE或Plugin已經很方便地自行完成一些設定。所以筆者漸漸的也習慣了不抄程式碼,改為以IDE Plugin的方式建立,某些真的很不熟練的部份才會維持範本複制的型式。 這是筆者最近學習vue3 的練習清單,還在持續新增中。讀者們有興趣也可以一起來修訂。 httpsgithub.commacauyeahAProgrammerPreparesblobmainsrcvuejsTimeAttack.md

Steam OS 3.5更新,內建 podman, distrobox
科技新知
MacauYeah・2024-12-10

之前筆者有介紹過如何在Steam OS上安裝podman,但都必需要自行折騰一番,特別是遇到一些依賴缺失時,還要逐個除錯。在Steam OS 3.5更新之後,官方已經有預安裝的 podman,筆者建議,如果有機重刷OS,就直接使用預安裝版本就好。更重要的是,不但有預設podman,連另一個神器distrobx,也在Steam OS 3.5之後引入。 podmancompose Steam OS 3.5,雖然已經有預安裝 podman ,但在實際環境下,多安裝一個 podmancompose 可以更方便地一體化操作。 我們可以經 python 安裝。 剛安裝 podmancompose ,會出現在自己的 home 目標的隱藏目錄。最後一步就是要加到自己的 PATH 環境變數裏面。 修改保存後,就重啟。之後 podmancompose 的指令就可以任意存取了。 要補充一點,就是官方預安裝的 podman 還是缺少了一些 DNS 的元件,大家會看到 warning 提示。不過在筆者單個 container 的使用情境下,並不受影響。之後要在其上二次引用的 distrobox 也可以順利執行。 神器 distrobox 在 Steam OS 3.5 中,除了 podman 外,還有預裝 distrobox 。 distrobox 其實是基於 container 技術的擴展應用,它目標是讓用經過 container 就可以輕鬆使用到不同 linux 的發佈版本。例如我想在 Steam OS 中使用 Ubuntu ,經過 distrobox 就可以用到。道理上, distrobox 基於 container podman 操作的,所以它能做到的,其實自己手動經 podman 也是可以做到。但若果大家想使用跨 Linux 版本的 GUI 程式,筆者還是建議優先使用 distrobox 。因為 distrobox 預設已為不同版本的 Linux 的 Image 來源影像檔 加入部份調整,在運行時亦有x11等互通,指令也較為簡單。 以下做來例子,示範在 Steam OS 中就執行 Ubuntu 版本的 vscode。 註 Distrobox 也不是萬能的,例如它的 Ubuntu 版本內沒有 snap ,所以不能執行 Ubuntu 版本的 Firefox。 snap will not works firefox not works

Swarm Mode 上線番外篇:Ceph
科技新知
MacauYeah・2024-08-20

在預設Docker和K8s的容器主導世界裏面,其實一直都缺少了直觀的儲存空間。當你的程序需要讀寫故定的來源資料,該來源就必需是外部的穩定儲存空間,例如是資料庫、NFS。但資料庫、NFS等,要做到真的正穩定,其實就要走Cluster叢集模式,確保它們自己本身不是做成single point of failure 單點故障的元兇。 坊間,只要付得起錢,其實找個穩定的資料庫或NFS,也是有的。但如果你像筆者一樣,只有一塊或多塊【鐵】,就要試試開源的儲存引擎Ceph Storage。 Ceph Storage,有自己特有的CephFS格式,但也支援NFS httpsdocs.ceph.comenquincycephadminstall。也就是,只要我們有足夠多人力,道理上可以自己用實體機去模擬一個穩定的NFS。 因為只是試裝,筆者暫時只用VM來測試,完整的安裝script,可以在這裏找到。script使用Multipass VM,大家有條件的話,可以使用其他VM引擎來看重複。以下是一些官網上沒有提的重點 Ubuntu 24.04 還未能正式使用。在筆者做POC的當是,Ceph v18 在 Ubuntu 24.04上需要先解決,即使大家使用Curl base下載 binary,也未必能成功。 筆者成功測的版本是 Ubuntu 22.04 Ceph v17,全使用Ubuntu 發佈的內置版本。但大家也要留意自己的Ubuntu apt 有沒有更新到最新版,過去的 cephadm,引用的container image url也變更。記得更新到v17 的最新版,cephadm 指令才能成功取得image。 在官方說明文件的【Deploying a new Ceph cluster】中的【Adding Hosts】httpsdocs.ceph.comenreefcephadminstall#addinghosts 節章可能有些誤導,大家應該要看 【Host Management】中的【Adding Hosts】 httpsdocs.ceph.comenreefcephadmhostmanagement#cephadmaddinghosts 在每個節點內,可以直觀地連接地Ceph Dashboard,但若大家需要Port Forword,要注意你的Network Interface,筆者就只能經過預設的IPv4的public ip 進行ssh port forward,不能經過0.0.0.0。 Script 位置 httpsgithub.commacauyeahubuntuPackerImageblobmaininitCephCluster.sh

何謂 Infrastructure as code - IaC
科技新知
MacauYeah・2024-06-07

在雲端服務出現後,好多新的名字,或許大家都聽過,筆者也稍為再簡介一下。 Software as a Service Saas。就像我們的Web App,不用下載體件,可以直接經雲進行業務操作。 Platform as a service Paas。這個概念可能最含糊,筆者理解就是,雲端供應商提供一些底層的軟件,供IT人使用。像是資料庫,Web Engine。 Infrastructure as a Service Iaas。這個更底層,雲端供應商給出CPU, IP, Memory, Storage等,頂多就再多個預安裝OS的選項。IT人自己去配搭使用。 多得這些彈性服務,雲端應用才真的跟過去租用實體伺服器有所差異。 但對於IT人來講,要使用這麼多不同的服務,實在也不簡單。對於IT消費方,用錢換來實體硬件的靈活性,但因為硬件沒有邊界之後,軟件的量就暴增。管理也不能說是很方便。 在Docker, Kubernetes等Container容器出現後,又為這些管理問題帶來另一種希望,就是Infrastructure as code IaC。它的目標是,管理基礎設施,要像管理原始碼一樣,checkout 就可以回覆到指定狀態。 初聽之下,大家可能覺得好玄,但其實這個概念,在之前筆者的Docker 教學中,已經有出現過。Docker compose 、Docker stack 指令,它們都是基於yaml檔的IaC。 當筆者更新了yaml 檔,執行一次stack deploy ,docker 就會對比之前狀態,如果replica分身不夠多,就自動增加所欠數量,如果image 也更新了,就排隊輪流重起換image 。最重要的是,當我們checkout 舊的yaml 檔,回到過去某個狀況,只要還是執行同一句stack deploy ,系統就自然減少所需的replica數量,下戴過去的image。這就代表,我們對於container 構建而成的環境,都可以放入Git等版本控制中,整個管理模式,就像管理程式碼一樣GitOps。 對於更進階的Kubernetes更是如些,除了container外,多種不同的network,storage配置,都通過yaml檔進行控制。這樣,架構即使複雜,但只少可以測試、重現和管理。還有一個,它比Docker stack要強的是,它某程度上支緩刪除的概念。雖然不完全,但總比完全沒有方便。 這個IoC的概念,可能還未達到一定廣泛地應用的階段,但它的核心在於,基建項目有檢測試差異的功能,自動去因為這個差異去加或減資源。用Programmer的講法,就是系統有Diff的功能,自動多除少補。