avatar
蕭富云行動應用開發者 · Android & Flutter

文章

2026

大預言時間軸:那些說要改變世界的話,後來怎麼了

2026-09-16-(3 min read)
說明: 本文由 AI(Claude)根據我的初始筆記與想法完成。 有天突然想到,過去有過好多「大預言」。世界末日、人口爆炸、AGI 何時降臨——講的人都很篤定,但後來呢?沒人回頭算過。 於是就有了這條時間軸。二十五則,橫跨宗教末日論、世俗災難預測、科技與 AI 的時程表。每一…

#AI #History #Fun

繼續閱讀...

一條規則該住在哪裡 — 四個容器,一道我們自己搭的梯子

2026-09-02-(9 min read)
說明: 本文由 AI(Claude)根據我的初始筆記與想法完成。 上一篇提到教訓有升遷流程:先落在記憶裡,等它糾正過同樣的錯誤兩次,才升進規則文件。那一段只寫了第一階。 實際上有四階。 產品給了容器:自動記憶、會自動載入的 CLAUDE.md(連同 @path 語法)、技能、…

#Claude Code #Agent #Workflow

繼續閱讀...

把個人設定當產品養 — 不是因為它有測試,是因為它會壞

2026-08-31-(13 min read)
說明: 本文由 AI(Claude)根據我的初始筆記與想法完成。 前兩篇談的是一輪工作怎麼跑、以及怎麼量它有沒有守規矩。跑那個迴圈、量那個分數的東西,其實是一個 git repo:依它自己的 README 數,一百二十來個 hook、五十三個技能、十九份規則文件。 它已經大到…

#Claude Code #Agent #Workflow

繼續閱讀...

分母才是難的那一半 — 怎麼量 agent 有沒有守規矩

2026-08-31-(10 min read)
說明: 本文由 AI(Claude)根據我的初始筆記與想法完成。 上一篇〈唯一一道等人的閘〉的結尾留了一句話——我沒辦法證明模型守得住那八段。所以下一步不是再加規則。是去量它到底守了多少。 這篇就是量了之後的心得。先講結論:打分不難。難的是決定分母。我改了三次分母,分數從 1…

#Claude Code #Agent #Workflow

繼續閱讀...

唯一一道等人的閘 — 一輪 agent 工作的八個階段

2026-08-29-(9 min read)
說明: 本文由 AI(Claude)根據我的初始筆記與想法完成。 上一篇〈把計畫寫在票上〉談的是 agent 的狀態該存在哪裡。結論是抬到 issue tracker 的留言串上。但票上記的只是階段之間的交接——計畫、核准、PR、合併。一輪工作內部怎麼跑,票根本管不到。 這篇…

#Claude Code #Agent #Workflow

繼續閱讀...

把計畫寫在票上 — 用標記協定串起 Plan / Forge / Review

2026-06-25-(9 min read)
說明: 本文由 AI(Claude)根據我的初始筆記與想法完成。 最近我在整理自己跑 AI agent 的方式,發現一個一直被我忽略的問題:agent 的狀態到底存在哪裡? 大部分時候,它存在聊天視窗裡。你在桌面 app 開一個對話,跟它討論一個功能,它幫你規劃、寫程式、改 …

#Claude Code #Agent #Workflow

繼續閱讀...

離線失敗的請求,為什麼重連網路後又自己送出去了?

2026-06-17-(8 min read)
說明: 本文由 AI(Claude)根據我的初始筆記與想法完成。 這個問題困擾了我好幾年:一個理應失敗的網路請求,為什麼有時候在我把網路接回來之後,竟然自己送出去了? 最近在一個 Flutter app 上又遇到,這次總算把來龍去脈弄清楚了。結論很掃興——它不是什麼「重連自動…

#Flutter #Network

繼續閱讀...

Frame0、HTML、ASCII —— 線框的三種畫法

2026-05-23-(6 min read)
這兩天在跟 Claude 討論一個 GPS app 的設計,講到「接受半徑」應該設多少。20m?50m?100m?光講數字不夠直覺,想畫個圖比較看看。 前兩天才剛量過 Frame0 對上 ASCII 的成本,那是 93 個形狀的複雜 UI 線框;這次的場景簡單得多——一個十字路口…

#AI #Software #Tools

繼續閱讀...

Frame0 對上 ASCII 線框圖:同一張畫面的成本實測

2026-05-22-(6 min read)
最近開始把 Frame0 接到 Claude Code 的 MCP 工具集裡,想法很簡單:讓 AI 在對話裡順手畫個線框圖,溝通起來會比文字描述快。 但這也帶出一個問題 —— 畫一張線框圖到底會花多少 token? 我拿自己的 side project Heimdall(一個 J…

#Frame0 #MCP #Tooling

繼續閱讀...

Iris — 螢幕上的小窗

2026-04-21-(3 min read)
我做了一個新的 app,叫做 Iris。 它是一個 macOS 上的懸浮視窗——永遠置頂、可拖曳,能同時顯示 Spotify 的同步歌詞、專輯封面,還有 CPU、記憶體、磁碟這些系統指標。 為什麼做這個 寫程式的時候我習慣一邊聽歌。遇到喜歡的段落,常常會想看一下歌詞是什麼—…

#Iris #macOS

繼續閱讀...

AI Agent 到底是什麼?

2026-04-14-(3 min read)
最近身邊很多人在討論 AI Agent,各種場景都有:自動審查 PR、自動寫測試、自動產生 release notes、自動回覆客服…… 這讓我開始思考:「Agent」這個詞,到底指的是什麼? 拆開來看 如果把一個 PR review agent 拆解,大概長這樣: PR 開啟 …

#AI #Software

繼續閱讀...

2025

一個好的軟體專案該有的幾件事(Flutter)

2025-06-28-(3 min read)
在日常開發中,我們常常著重於功能的完成與 UI 的華麗,但真正能走得長遠、方便維護與協作的軟體專案,往往在工程基礎上更下功夫。本文將以 Flutter 專案為例,介紹一個我認為好的軟體專案應該具備的幾個重要元素,幫助團隊打造高品質的程式碼基礎。 1. 清楚且一致的命名(Namin…

#Softaware #Flutter

繼續閱讀...

Flutter substring with emoji

2025-06-28-(2 min read)
假設你有一串字串 String text = "Hello 👋🌍"; 假如你使用 print(text.substring(6, 7)); 你可能預期會得到 "👋",但實際上可能出現亂碼或截斷的 emoji,例如 �,這是因為: Da…

#Flutter #Emoji

繼續閱讀...

使用App Distribution發布iOS版本測試遇到的問題與解決

2025-01-07-(2 min read)
TL;DR; 用ad-hoc 輸出 各位有用Firebase App Distribution上發布iOS app嗎? 如果你剛好又是使用Flutter去做開發的話,這篇可能對你有一點點幫助。 平常我們在發布ipa時,其實就是跑flutter build ipa就可以將其上傳到T…

#Flutter #iOS #App Distribution

繼續閱讀...

2024

Flutter清單內實做懸浮視窗

2024-04-06-(2 min read)
這邊分享我在實做長按清單顯示懸浮popup window的作法。 這邊會使用CompositedTransformFollower、CompositedTransformTarget以及LayerLink加上OverlayEntry來達到此目標。 首先,我們在建構清單時,使用多個…

#Flutter

繼續閱讀...

如何使用Nginx將多個Web app架設到子path上

2024-02-09-(3 min read)
這邊分享個方法讓你能夠在不打擾MIS或者不需要新的subdomain的情況下,架設多個互不相關的app在不同的path上。 首先,嚴格來講,你還是會個別使用1個port給每個app。但是透過Nginx的rewrite,你可以讓你的app互相切開互不受影響。(沒有301或302的轉…

#Nginx #Quickstart

繼續閱讀...

快速上手 Linode Object Storage

2024-02-05-(3 min read)
S3 Object Stroage我想大家多少都有聽過或者使用過,當然也對於那高昂的使用費多有耳聞. 剛好Linode提供了可以相容於S3又不用那麼多費用的Object Storage服務.這邊我就來分享透過API快速進入Object Storage的世界,希望能為你省去看文件/…

#Linode #Object Storage #S3 #Quickstart

繼續閱讀...

2023

Metis - 日誌

2023-11-23-(4 min read)
我想分享前兩天我把我手邊的app完成了一版上架了,它叫做Metis,是一個日記app,你可以透過你的照片輕鬆寫日記。如果有習慣寫日記,常常苦於用了一段時間資料就不見了,可以參考看看。 功能: 雲端存儲:Metis 的所有數據都存儲在雲端,保障您的記錄安全且容易存取。這…

#Metis

繼續閱讀...

Metis 第一次嘗試上架失敗了

2023-11-16-(2 min read)
說明: 本文由 AI(Claude Sonnet 4.6)根據我的初始筆記與想法完成。 Metis 第一次送審就被 Google Play 退回了。 原因:位置權限的請求流程不符合規範。Play 的政策要求,在呼叫 requestPermissions() 之前,必須先向用戶…

#Metis #Google Play

繼續閱讀...

設定 PostgreSQL 資料庫與使用者

2023-11-02-(2 min read)
說明: 本文由 AI(Claude Sonnet 4.6)根據我的初始筆記與想法完成。 一些快速筆記,記錄怎麼在新機器上把 PostgreSQL 設定起來,建立資料庫、使用者,並開放連線。 安裝 # Debian/Ubuntu sudo apt install postgre…

#postgresql

繼續閱讀...

一個 Bug 多久會被修正

2023-11-01-(2 min read)
說明: 本文由 AI(Claude Sonnet 4.6)根據我的初始筆記與想法完成。 答案是:可能要 21 年。 這個 Firefox 的 bug 於 2002 年被回報:在 macOS 上,當 Firefox 切到背景後,tooltip 仍然會浮在其他視窗上方。聽起來是個…

#Software Development

繼續閱讀...

在Flutter專案新增平台支援

2023-07-11-(5 min read)
跨平台app,很多時候第一個印象就是跨Android與iOS平台的開發。然而最近在平板app的開發上,微軟的平板加入了我們的跨平台戰局。 此篇將會涵蓋使用純dart pacakge新增windows平台實作,不會有原生程式碼,但是我想對於想了解整個脈絡的人有所幫助。 要做的事情有…

#flutter #federated plugin

繼續閱讀...

工程設計與選擇 - 以二戰鋼鐵巨獸為對照

2023-06-07-(6 min read)
前言 身為工程師,我們每天都會下很多決定,如這一段程式碼要用什麼結構撰寫,要使用何種技術、框架? 我們每天都在面對這樣的抉擇。在這條路上,我們從錯誤中汲取經驗,並且承擔著這些錯誤帶來的後果。 我想分享一下我過去看到的一個案例與最後怎麼了: 導入Rx Rx Rx 是什麼? 可以用一…

#Philosophy

繼續閱讀...

Decorator Pattern有符合SOLID原則嗎?

2023-05-22-(3 min read)
前言 在物件導向的世界裡,我們常常掛在嘴邊的五大原則每天聽每天看。網路上也有很多人分享SOLID怎麼寫、怎麼設計。 這篇將會先以程式碼展示,可能符合SOLID的設計與開發流程,我們一起來看看吧。 我將以幾段程式碼呈現我認為有符合SOLID原則的設計(以 Dart 語言為例) 定義…

#OOP #Decorator

繼續閱讀...

Go 驗證 Google ID Token

2023-04-23-(2 min read)
說明: 本文由 AI(Claude Sonnet 4.6)根據我的初始筆記與想法完成。 在 Metis 後端用 Go 驗證 Firebase ID Token 時,踩了一個坑:公鑰必須先 parse 過才能使用,否則會拋出 key is of invalid type。 背景…

#golang

繼續閱讀...

入門Flutter需要知道的幾件事

2023-04-22-(2 min read)
最近我開始學習Flutter,這邊分享幾項我認為對入門有幫助的事情 建立應用: flutter create <project name> --platforms=android,ios 使用參數--platforms 指定要建置的平台種類,既有專案可可以再次執…

#Flutter

繼續閱讀...

一次查驗沒辦法連線WebSocket的經驗

2023-01-31-(3 min read)
使用語言Jvm(Java/Kotlin),連線WebSocket時(OkHttp)遇到加密protocol版本 沒辦法連線的問題,以及查驗的經驗分享。 首先在連線時就失敗了,我收到了以下的信息。 javax.net.ssl.SSLHandshakeException: Recei…
繼續閱讀...

2022

Initialize() 寫法在 Android app 的影響與優化建議

2022-07-28-(6 min read)
說明: 本文由 AI(Claude Opus 4.7)根據我的初始筆記與想法完成。 我們的應用使用了許多元件,不管是自己寫的,或者是第三方提供的函式庫,有時不免就需要在應用啟動後做初始化的動作。而在 Android 的世界,很多時候呼叫這個初始化的方法都會放在 Applica…
繼續閱讀...

我的Android ViewModel實作建議

2022-06-28-(5 min read)
近來,MVVM已然成為原生Andnroid開發的主流,Google也提供了相對應的工具達到目標。網路上與Google的官方網站上也有許多作法與改版(如:MVI)給大家參考。在這樣琳瑯滿目的做法中,我想分享幾個我認為實作ViewModel時,我認為比較順手的作法。 方法名稱說明用戶…
繼續閱讀...

我的升級PostgreSQL的經驗(9.5升級到14)

2022-06-15-(4 min read)
這幾天的Side Project開發時遇到了升級PostgreSQL的小障礙,我最後把它排除了。覺得很有成就感,在這邊分享一下我的解決歷程吧。 這個升級,似乎不是更新執行檔就可以了,有時候會遇到如我現在遇到的問題一樣,我們沒辦法自動轉移到新版本上,必須使用PostgreSQL提…
繼續閱讀...

2021

解決在Android開發中使用時間作為版本號碼的成本

2021-04-14-(2 min read)
在開發Android app的過程中我們時常使用時間來區分app的版本。但是此做法有些缺點將造成我們開發成本變高。 時間會不斷地推進,對吧?所以我們每次建置專案的時候,因為變動的版本號碼(時間)會讓建置工具認為我們應該要做當我們修改build.gradle後所需要做的事情。 這樣…
繼續閱讀...

Android 鬧鐘應用程式實作

2021-02-17-(5 min read)
說明: 本文由 AI(Claude Opus 4.7)根據我的初始筆記與想法完成。 這年頭要在 Android 上做一個鬧鐘 app,痛點其實不少。電量優化、背景限制、權限要求這幾年一路收緊。這篇文章會走一遍我的實作方式,以及要讓鬧鐘準時響、並且真的在畫面上跳出來的幾個小撇步…
繼續閱讀...

2020

在Android TextView上自訂超連結

2020-04-16-(3 min read)
超連結,像是這串字。我想在所有類型的app上很常見。不過要怎麼在Android上實做呢?我可以自定義點擊事件嗎? 首先,Android的TextView本身就支援超連結文本,來看看我們怎麼玩弄SpannableStringBuilder吧。 val builder = Spann…
繼續閱讀...

RecyclerView使用Decorator模式實做無項目提示

2020-03-28-(5 min read)
使用RecyclerView實做清單,在現在的原生Android app開發上已經成為一個必須。相較於ListView元件,RecyclerView提供了較高的效能以及動畫的支援。但是相較於ListView,RecyclerView沒有單純的setEmptyView(),我們必須…
繼續閱讀...