我最近在玩一個 side project,在正式動工之前,我想先用 AI 工具快速生一版測試 UI 感受一下。於是我做了一個小實驗,把同樣的設計規格丟給 Claude Code 和 Gemini CLI,看看誰交得出可以用的東西。
結論先說:差很多。而且差別相當大
我給的任務
Prompt 不是隨便一句話,我把完整設計規格都餵進去了:色彩系統、字型規範、各難度的 HP 和傷害數值、UI 元件風格,包含「背景要用程式生成山脈風景,不使用任何圖片」這種很具體的要求。
我最近在玩一個 side project,在正式動工之前,我想先用 AI 工具快速生一版測試 UI 感受一下。於是我做了一個小實驗,把同樣的設計規格丟給 Claude Code 和 Gemini CLI,看看誰交得出可以用的東西。
結論先說:差很多。而且差別相當大
Prompt 不是隨便一句話,我把完整設計規格都餵進去了:色彩系統、字型規範、各難度的 HP 和傷害數值、UI 元件風格,包含「背景要用程式生成山脈風景,不使用任何圖片」這種很具體的要求。
2025 年經過了投資決策重大改變,以結論來說是可行的,今年市值增加 34.2%,表現勝過台股和美股(台股大盤 27.71%,NASDAQ 18.75%),報酬有貼著大盤在走,其實我就很滿意了,算是有符合預期,重點是把多點研究投資的時間移走,放到我覺得更想花時間的地方,才是最值得的事。
重點數字
市值增加:34.2%
平均現金水位:6.16%(比去年低)
台股大盤投報:27.71%
NASDAQ 投報:18.75%
2026 年的策略:定期定額 指數型 ETF
2025 年標的
006208、0050、QQQ
2025 年市值變化圖
不知為何覺得這次訪問還蠻喜歡的,好像有些事情值得整理一下
成長並非單純地「變得更好、更厲害、更強」,有時更是因為累積了經驗和想法,能夠對過去的自己或發生的事情有新的看法或理解
相當有感,無論是大到人生觀或價值觀,小一點到職場,再小一點到玩個傳說對決,都很適用的想法
侯文詠在30歲前後擔任末期癌症病人的疼痛控制醫生,這讓他從「生命終點」的視角來看人生。他發現金錢、名氣、權力都不是最重要的,親密關係才是病人最放不下的
真的是如此,我覺得,認清你最重要的親密關係,從平常就開始好好守護,就算突然有個意外發生也不會有任何遺憾
金錢有時會限制想像,重要的是「不要去追錢,只有錢追著我」。把喜歡的事做好,並想辦法持續喜歡它
每天上班覺得累,只有發薪水那天才有短暫的快樂,是追錢的思維,試著改變一下,訓練心態把工作成喜歡的事,把喜歡的事做好,或許會有不同發展,或是換個不同工作
他強調金錢最大的用處是「買選擇權」,能讓你「有得選」,例如有能力拒絕不喜歡的百萬演講
就跟文憑的概念一樣,或許能讓你有機會了解更多事情,讓你知道未來其實有更多選擇;遇到問題時的思路也可以同樣套用,若這件事情做了能讓你有更多選擇的話,會是比較好的
要成為自己不討厭的大人,必須保留一小部分(如5%-10%)的時間,允許自己「沒效率、耍賴、耍廢」,去做自己喜歡的事,甚至只是嘗試沒去過的餐廳
效率至上的人,也不是做所有事都很有效率,而是做出沒效率的事情時會格外痛苦,試著平常就讓自己不要這麼有效率,或許會有不同的心態,這想法蠻不錯的
【#博音】EP186 | 誰要聊歡樂三國志啊!我只想聊怎麼成為自己喜歡的人 ft. 侯文詠
| 書籍圖片:來自 Kobo |
書中重點在分享觀念,沒有太具體的做法,畢竟每個人情況都不同,有觀念應該更勝於做法。
看完最大的的收穫在於,對於退休有規劃的人,或許可以想得簡單一些,不要對自己太苛刻了,重點在於金錢是否能帶來較好的收獲,書中強調的是記憶複利,把錢花在美好的回憶是非常值得的,像是旅行。
下面也分享一些覺得不錯的段落
你享受體驗的能力,取決於你的經濟能力和你的健康,持續累責財富並不一定能為你帶來更多的體驗,因為無論你多有錢,日益惡化的健康狀況都會限制你享受某些體驗。健康衰退和財富增加的黃金交叉約為 45 歲。
把錢給孩子的最佳時間是 26 ~ 35 歲之間,不會太早到他們會揮霍殆盡,也不會太晚到拿到這筆錢沒什麼感覺,能給在他們真的需要一筆錢的時候,會是較佳的時機,可能會是他們需要買房子或者是賺業的時候。
![]() |
| Photo by Pixabay |
以後就只買 006208 和 QQQ
還是得面對一個投資上長久以來的問題,那就是最終我只想買 ETF 就好,若知道最終要這麼做,那為何不現在就這麼做呢?這樣可以讓我再花更少時間在投資上,關注個股有無出問題,真的要處置時還要考慮一次賣出或分批賣出,當時是賺還賠等等棘手的問題,實在還是會花太多時間了,而且重點是花時間下去研究,也不見得會有相對應的報酬,這時間花下去的投報率實在不高
再跟 Claude、Perplexity 和 ChatGPT 討論了一下長期投入和單筆投入的風險和選擇優缺後,大致歸納如下
這個月會將 00878、中華電、合庫金、AAPL、TSLA、ARKW 一次賣掉,然後把錢一次投入 006208 和 QQQ,接著就繼續每月持續定期定額
![]() |
| Photo by Andrea Piacquadio |
決定了,把合庫金和中華電逐漸移出我的投資組合
原因與風險思考
其實這件事我已經思考了很久。雖然我每月只花一天處理投資決策,但這個問題常會讓我多花時間,因此,我決定在 2025 年將這件事想清楚並做好決策。
關於中華電和合庫金,自 2022 年起,我採用 "定期定額 + 再平衡" 的投資方式,主要目的是透過它們來領取穩定的股息。回顧過去的投資表現,這兩個標的在市場大漲大跌時都能保持小漲小跌,確實是一種穩定軍心的概念股,非常符合我保守的投資屬性。但隨著我逐漸理解到,退休後也可以透過賣股票來獲得現金,而不一定需要完全依賴股息收入,這讓我開始思考,是否還有必要繼續持有它們。
定期定額的確是一種平滑市場波動的策略,而當投資組合中再加入防守型標的時,這種平滑效果會更加明顯。但從 2021 年到現在,經歷了股市的起伏,再回頭檢視每年的投資報酬率,我發現其實不需要讓投資組合「這麼」平滑。我認為可以嘗試減少部分平滑因子,讓組合稍微承擔更多波動,同時追求更高的潛在報酬。再加上去年中,我已經開始逐步移出一些美股中風險較高的標的(link),這更加堅定了我進一步調整投資組合的想法。
所以,我決定把合庫金和中華電移出標的,最後會只留下 006208、00878、AAPL 和 QQQ
如何逐漸賣出
賺錢時,賣掉一份,同時也買一份本月要買的標的,讓資金轉換過去
賠錢時,因為我不想賠錢,繼續投入,讓虧損平滑一些,也能持續參與
Reference
[投資] 2022 年投資回顧與未來展望
[投資] 定期定額過程中改變投資標的
![]() |
| Photo by Matheus Bertelli |
2024 年繼續使用 定期定額+再平衡 的操作,今年市值增加 47.93%,表現小贏台股,超越美股(台股大盤 45%,NASDAQ 30%),到去年都還一直在想這樣的投資策略,到底會不會持續打贏大盤,我今年真的是想通了,就是我找不出答案 😂,只要投資策略能讓我能持續在市場上,報酬率能跟著大盤走其實就足夠了,所以今年的策略也開始做些調整,我想把 TSLA 和 ARKW 這種風險較高的慢慢移出,換成其他目前手上風險較低的標的,可預期的是整個投資會漸漸往大盤靠,蠻好的
重點數字
市值增加:47.93%
平均現金水位:11.77%
台股大盤投報:45%
NASDAQ 投報:30%
2025 年的策略:定期定額 + 再平衡 + 慢慢移出風險較高的標的
定期定額:每個月操作一次,輪流投入每個標的,當標的歷史價格低於十年前太多時,當次投入兩倍
再平衡:每半年將投報超過 20% 或平均的標的,賣出賺錢的部份
2025 年標的
006208、00878、5880 合庫金、2412 中華電、QQQ、ARKW、AAPL、TSLA
2024 年市值變化圖
![]() |
| Photo by Ketut Subiyanto |
投資標的裡有包含一些高風險的像是 TSLA & ARKW,在心裡想了一套適合自己的做法,想要在未來慢慢的減少佔比,做到持續不影響心情和不增加研究投資時間
賠錢時繼續定期定額
未來會如何真的不確定,能確定的只有我不想賠錢 😂,既然已經定期定額一段時間了,就繼續在賠錢時投入,讓虧損平滑一些,也能持續參與
賺錢時把部份賣出換成其他標的
有賺錢的時候,把定期定額的金額從這些標的裡賣出,直接轉換成其他標的,以我為例,就是轉到 QQQ
使用 chrome driver 第 6 個月後,第一次遇到這個問題,記錄一下處理過程,遇到問題如下圖
![]() |
| 攝影師:Pixabay |
為了增加百貨公司品牌爬蟲的內容, 近期開始研究台北 101 網站,找到這裡可以看到全部的品牌,把這些都爬出來就行了
從下圖可看出,這些品牌存在於 "listarea logo" class 下面的 "cardobj lazyload show" class 中
![]() |
| 攝影師:Walls.io |
2023 年使用了定期定額+再平衡的操作,今年用市值來看績效比較單純,市值增加 62.5%,若不計算入金也就是純投資的部份,市值增加 51%,表現超越台美股大盤(台股大盤 24%、NASDAQ 43%),記得去年投資回顧有提到,大盤投報好的時候,我的投報可能會落後,看來打破了這個預期;既然時間用的少,大盤好與壞時的績效都還可以接受,那就繼續這麼做下去吧。
重點數字
市值增加:62.5%
市值(不含入金)增加:51%
平均現金水位:11.7%
台股大盤投報:24%
NASDAQ 投報:43%
2024 年的策略:定期定額 + 再平衡
定期定額:每個月操作一次,輪流投入每個標的,當標的歷史價格低於十年前太多時,當次投入兩倍
再平衡:每半年將投報超過 20% 或平均的標的,賣出賺錢的部份
2024 年標的
006208、00878、5880 合庫金、2412 中華電、QQQ、ARKW、AAPL、TSLA
2023 年市值變化圖
非常歡迎您使用百貨小工具,為了讓您安心使用百貨小工具的各項服務,特此向您說明百貨小工具的隱私權保護政策,以保障您的權益,請您詳閱下列內容:
| Error message |
升級到 iOS 17 後,也得升級到 Xcode 15 才能使用了,但原本的 project 卻無法 build 了,遇到的就是上圖的 error,以下是解決方法
Reference
![]() |
| Photo by Ketut Subiyanto |
簡單記錄一下實作搜尋建議的方法,完整的程式在下方
struct ContentView: View {
@State private var searchText = ""
@State private var selectedSuggestion = ""
// 建議列表
@State private var suggestions: [String] = ["Apple 蘋果", "ALLSAINTS", "BOTTEGA VENETA", "COSME DECORTE 黛珂", "Nike 耐吉", "Dell 戴爾", "COS", "Zara", "Emilie Louis", "L.ERICKSON", "SPRAYGROUND", "gubami Social-法式tapas餐廳", "Sarabeth's"]
@State private var showSuggestions = false
var body: some View {
VStack {
// 搜尋欄位
TextField("Search", text: $searchText)
.padding(.horizontal, 15)
.padding(.vertical, 10)
.background(Color(.systemGray6))
.cornerRadius(8)
.padding(.top, 10)
.padding(.bottom, 5)
.onChange(of: searchText) { newValue in
showSuggestions = !newValue.isEmpty
}
// 選擇搜尋建議後的顯示
if !selectedSuggestion.isEmpty {
Text("Selected: \(selectedSuggestion)")
.padding(.top, 10)
}
if showSuggestions {
List {
ForEach(filteredSuggestions, id: \.self) { suggestion in
Text(suggestion)
.onTapGesture {
selectedSuggestion = suggestion
searchText = "" // 清空 TextField
showSuggestions = false // 隱藏建議列表
}
}
if filteredSuggestions.isEmpty {
Text("找不到品牌")
.foregroundColor(.gray)
}
}
.background(Color.white)
.cornerRadius(8)
.shadow(radius: 5)
.padding()
}
Spacer() // 添加一個間距,以便頁面內容和建議列表不重疊
}
.padding()
var filteredSuggestions: [String] {
if searchText.isEmpty {
return []
}
return suggestions.filter({ $0.localizedCaseInsensitiveContains(searchText) })
}
}
}
![]() |
| Photo by Ketut Subiyanto |
我在整合 Google AdMob 時卡了超久,Google 了也沒找到很直接能解決的方法,想說在此做個記錄,讓以後的我能照著做,也讓遇到類似問題的人能夠有個解法,以下是參考 官方說明 做的
第一動,Import the Mobile Ads SDK
先在 xocde project 的根目錄下(.xcodeproj 檔案的路徑)執行 pod init,這樣就能產生一個 Podfile 檔案,若沒安裝 cocopods 可以 follow 這裡 安裝,然後再按照 這裡 的做法,加
pod 'Google-Mobile-Ads-SDK'
在 Podfile 檔案,然後執行下面,記得此時要將 xcode 關閉
pod install --repo-update
這邊我遇到一個問題
[!] Unable to determine the platform for the `your project name` target.
解決方法是將 Podfile 檔案裡的第二行 uncomment 就可以了,完成後如下
platform :ios, '9.0'
第二動,Update your Info.plist
遇到的第一個問題是,我找不到 Info.plist 檔案
參考 這邊,原來 info.plist 變成了 project 設定裡的 tab
然後將 GADApplicationIdentifier (1個) 和 SKAdNetworkItems (49個) 輸入(如下圖紅框)
import GoogleMobileAds
struct BannerVC: UIViewControllerRepresentable {
var bannerID: String
var width: CGFloat
func makeUIViewController(context: Context) -> UIViewController {
let view = GADBannerView(adSize: GADCurrentOrientationAnchoredAdaptiveBannerAdSizeWithWidth(width))
let viewController = UIViewController()
view.adUnitID = bannerID
view.rootViewController = viewController
viewController.view.addSubview(view)
#if false
/* Simulator */
let request = GADRequest()
let extras = GADExtras()
extras.additionalParameters = ["suppress_test_label": "1"]
request.register(extras)
view.load(request)
#else
/* Real device */
view.load(GADRequest())
#endif
return viewController
}
func updateUIViewController(_ uiViewController: UIViewController, context: Context) {}
}
struct Banner: View {
var bannerID: String
var width: CGFloat
var size: CGSize {
return GADCurrentOrientationAnchoredAdaptiveBannerAdSizeWithWidth(width).size
}
var body: some View {
BannerVC(bannerID: bannerID, width: width)
.frame(width: size.width, height: size.height)
}
}struct ContentView: View {
var body: some View {
VStack {
Image(systemName: "globe")
.imageScale(.large)
.foregroundColor(.accentColor)
Text("Hello, world!")
}
.padding()
Banner(bannerID: "ca-app-pub-3940256099942544/2934735716", width: UIScreen.main.bounds.width)
}
} 實作方式如上,這邊用的 bannerID 是測試使用的,請參考這邊,順利的話就可以看到下面的畫面
Simulator
![]() |
| Photo by ThisIsEngineering |
記錄一下使用 scrapy 遇到的一些問題
問題:
用 browser 打開這個網頁明明就能看到畫面,但使用下面方法後
scrapy shell https://info.sogo.com.tw/tp1/floors/B2
view(response)
卻只能看到下面錯誤
處理方式:
在 settings.py 裡找到 USER_AGENT 設定,將一個正確的 user agent 填入即可,這邊我是參考 chrome 的 user agent 填入(如下)
<div class="tab-content">
...
<a href="xxxx" class="brandBox">...</a>

![]() |
| Photo by Ben Taylor |
在 [App] iOS 傳說小工具誕生以及網頁版結束維護 有提到,網頁版傳說小工具會想 open source,好讓有興趣的人可以繼續維護,現在完成開源了。
開源傳說對決網頁版
https://github.com/bradchow/toolsofrov_web
開源的程式碼原本是在 Heroku 上運作在 php 後台的,所以只要有 php 環境,放上這些檔案就可以直接使用,我只有把下面程式拿掉,然後加上一些 readme.md 和 LICENSE.md
1. Firebase
2. Google Analytics
3. Google Adsense
![]() |
| Photo by Brett Jordan |
網頁版傳說小工具使用的主機 Heroku,已經停止免費提供網頁服務了,傳說小工具一直以來的變現能力都不好,所以也不打算花錢買 Heroku 的服務,雖然網頁版傳說小工具就這樣畫上句點,但未來有打算將他 open source,讓有興趣的人可以繼續維護。
網頁版從 2017 年開始服務,當時還提到若要開發 iOS 版必定要花上很長一段時間,我一直沒有忘記這件事,工作緣故讓我必須多接觸 iOS 相關環境,這也正是我著手進行 iOS 版的契機,雖然變現能力不好,Apple Developer 的保護費費用也相當高(每年 100 美金),但在 Android Play Store 後台看到還是有不少人在使用,決定還是要完成這件事,2017 年推出了 Android 版,在經過了 5 年多之後,iOS 版傳說小工具終於上架了,同樣的,第一版功能還蠻陽春,讓我們慢慢改進
傳說小工具 App Store 連結
https://apps.apple.com/app/id1664793884
傳說小工具粉絲專頁
https://www.facebook.com/toolsofrov/
![]() |
| Photo by Engin Akyurt |
2022 年使用了定期定額+再平衡的操作,已實現投報 1.87%,未實現投報 -20%,從台股大盤 -22%、NASDAQ -33% 看來,表現雖是有比大盤好,但這可能也代表大盤投報好的時候我的投報可能會落後。一個月操作一次的期望都有做到,花的時間也比以前再更少,過程跟績效都符合預期,就這麼繼續做下去吧。
2023 年的策略:定期定額 + 再平衡
定期定額:每個月操作一次,投入月 KD 較低的標的
再平衡:每月若有投報超過 20% 的標的以及每半年做整體再平衡
標的(與去年相同)
0050、00878、5880 合庫金、2412 中華電、QQQ、ARKW、AAPL、TSLA
最後附上 2022 年市值變化圖,資產還能往上的原因是,每個月都有持續投錢進來,只能說金額不多的時候,每個月的存錢會佔較高比例 XD,數字比例上比較好看
舊版 Xcode 升級後,打開 Xcode 按下既有 project,遇到上面問題,莫名其秒
解法也不難,從 Finder 裡找到 project 位置,直接執行 <你的 project>.xcodeproj 就能打開了