沒原生Thread Pool,那我們自製Worker Group

可以先看看上一篇沒Thread Pool,Limiter也好?真的嗎? 來個前情提要。

Worker Group其實基本概念跟Thread Pool很像,就是:

  • 一堆Worker在跑,等著接收參數並且輸出結果
  • 單一Worker擁有一個用來輸入參數的channel,以及一個用以輸出結果的channel
  • Worker可被context的Done()終結,或者:
  • 可被WaitGroup終結

不過由於go沒有generic(目前版本是1.16,在1.17/1.18會支援),所以這兩個channel都沒辦法寫得很漂亮,這也是大多數Worker Pool要不就是得用chan interface{}來寫,不然就是寫不出來。不過Worker Group這種東西其實夠輕量,輕量到其實自己打造都是可以的,這邊就介紹一下怎麼自己打造一個Worker Pool,以及揭秘為什麼很多CLI/UI都需要有一個自己的UI Thread(go沒thread,所以稱為UI routine吧)。

Read more “沒原生Thread Pool,那我們自製Worker Group”
One Comment

沒Thread Pool,Limiter也好?真的嗎?

眾所皆知Go是沒有原生的Thread Pool這種東西,這在寫Crawler的時候會造成一些小小的不便。比方說你想要crawl PTT,這樣打一打大概2秒內DDoS protection就把你擋起來了:

docUrlList, _ := GetDocUrlList() //拿到某個版的文章列表
for _, docUrl := range docUrlList {
	go func() {
		docUrl := docUrl
		p, _ := ParseSingleRawDocument(docUrl)
		parseChannel <- p
	}()
}
Read more “沒Thread Pool,Limiter也好?真的嗎?”
2 Comments

把資料(包含本站)從崩潰的Linode VM救出來

大約在2021.05.26的時候,我架在Linode上的站做了一次升級從Ubuntu 17.10=>20.04,我本來打的如意算盤是,我既然每個月都有額外交五塊錢給linode做備份,那升級後要是有什麼問題,理論上從備份回復就沒事了吧!

我先直接講結論,他的確是有備份,但是…. mount不回去,乾,那我要你這備份幹嘛!

Read more “把資料(包含本站)從崩潰的Linode VM救出來”
Leave a comment

來聊聊今年的主力卡 : 花旗Citi Prestige

今年疫情的關係,把旅遊相當好用的國泰世華長榮聯名卡停掉了。說真的這張卡完全對得起他的價值,兩萬塊錢的年費,但是兩年來,不但在我手上得到了超過30萬哩的里程:其中還賣掉了15萬哩,足足賺回兩年的年費 — 讓我去日本韓國玩一圈全程商務艙幾乎只花了機場稅跟燃料附加費,外加普通人難以進入的The Gardan貴賓室,後期又附帶Sogo停車跟VIP讓老婆可以毫無後顧之憂的去逛街(然後把老公park在貴賓室,順便充當購物倉庫),這張卡真的即使沒有開卡禮(差三萬哩)都划算。 不過手邊總是需要一張頂卡的,滿剛好的花旗在2020年末有個很有力的促銷:新辦卡刷滿10萬送Studio A禮券2萬塊,或者18萬點TYR(花旗的ThankYou Reward點數),而平常只有12萬點TYR的開卡禮…所以衡量一下以後就決定拿它來取代國泰卡了(bye bye國泰,我們會再見的~),雖然年費又多了4000(20000 vs 24000),不過試試看吧!

雞肋

雞肋

你的某個比你矮10公分以上,且長得像半獸人的仰慕者。他/她集合你最討厭的五官之大成,不過,同時,他/她住別墅、開藍博基尼、特長是用錢砸人。如果你實在幻想不出有這樣的人,請參考馬雲。

嘲骚:一个时尚圈人的大实话

這句滿好笑的,以前google莫名其妙跑出來的結果,不過現在已經找不到了,所以放這邊留念。

Leave a comment

解決GoLand在M1 Mac上delve的問題

前陣子delve終於把m1 support給integrate到main branch了,不過由於一來他還沒tag release,二來GoLand並沒有讓你選擇外置delve的選項,所以只能用它內置壞掉的delve。

不過其實是可以使用外置delve的,也一併可以經由compile新的delve解決m1相容問題。這邊有提供一些解法,翻譯成中文大概就是這樣:

  1. 安裝arm64版本的go,最簡單的方法就是直接brew install golang.
  2. 確認安裝的是Apple Silicon版本的GoLand
  3. 抓下並且編譯delve main branch。具體的做法是 git clone https://github.com/go-delve/delve,然後進入delve目錄make install。他會把delve執行檔放到 ~/go/bin/dlv。
  4. 打開GoLand,選單選Help->Custom VM Options,增加一行 -Ddlv.path=/Users/<你的ID>/go/bin/dlv
  5. 重啟GoLand,恭喜,你的GoLand的debugger正常了。
One Comment

今年信用卡展望

本文所有連結都「沒有」推薦碼。

去年是疫情爆發的一年,由於航空旅遊變得相當困難的關係,哩程卡顯得非常非常不吃香。然而,如果去看ptt點數版(points)的話,其實買賣都還是有一點需求的,只是價格跟成交都遠不如以前熱絡。以我來說,就剛賣了150000的BR里程,以0.32的比例賣了48000(最早到期日是2022.04.01),所以其實也沒有到完全停滯啦,只是價格真的很糟——以往的話,通常15萬里可以賣到0.41-0.42左右,長榮的里程是單筆里程數越高,單價越高。

Read more “今年信用卡展望”
Leave a comment

煉瓦:應該是截至目前吃過最好吃的鐵板燒

這次渡個小假,第一站就先選擇了南部非常有名的法餐Thomas Chien,隔天晚餐選擇下榻的大員皇冠假日酒店內小有名氣的煉・瓦日式料理的鐵板燒。

這家煉瓦其實在網路上的評價相當的兩極,不過兩極主要是他吃到飽的部分。煉瓦消費的方式是吃到飽(1188+10%),定食,以及鐵板燒(1580-3280 + 10%),而鐵板燒是消費最高的,但是評價卻是壓倒性的好評。其實對我來講比夏慕尼(1080+10%)高的,我就會把它歸類於高價位了(遠目)。

Read more “煉瓦:應該是截至目前吃過最好吃的鐵板燒”
One Comment

初訪高雄Thomas Chien法式餐廳

這次放鬆小旅行,安排了一個fine dining當作旅途的第一站。Thomas Chien算是很久以前就有注意到的餐廳,一部分原因是因為他在高雄軟體園區 —— 我有一些工作合作的機會就是在那裡,所以我有稍微注意一下周邊的高級餐廳。餐廳前面有專屬停車位,不過這次沒注意到所以停到旁邊的停車場了。

本來要訂晚餐,但是晚餐被包場了(驚),所以就訂了個午餐當作旅程的第一站。完整的菜單可以參考他們的官網,常常有更換,去之前可以先看一次。

由於有使用Citi Prestige的優惠,這家餐廳顯得相當划算。不過整體表現來看,即使沒Citi Prestige的半價優惠,我依然會再訪。

Read more “初訪高雄Thomas Chien法式餐廳”
2 Comments

目前Macbook M1開發環境測試

這是一張列表,從今天(1/11)看我用到的開發工具的測試,看看能不能使用。

Jetbrains IDEs

可用,而且有特別的Apple Silicon版本。目前僅有AppCode(取代Xcode)沒有而已,其他主流開發的IDE應該都有了。

OpenJDK

目前無法從Homebrew安裝OpenJDK,AdoptOpenJDK似乎也還沒跟上(雖然x86版本似乎是可以用)。普通來講是建議從azul去取得arm64的OpenJDK來跑比較好。

其他版本可以參考Azul的官方公告

Go

從homebrew裝的沒啥問題,不過delve(go的debugger)目前沒有m1 build,會造成go無法debug。根據小道消息表示應該要等到二月delve才有辦法支援m1,不想等的人可以到這裡去取得arm branch自己編譯一個,也可以取代掉GoLand裡面的delve

Docker

需要使用Technical Preview 3.0.0才能正常使用,使用上沒什麼問題。

Homebrew

沒太大問題。有不少keg/bottle會出現ad-hoc signature sign fail(比方說你試圖安裝wget就可重現),不過似乎沒碰到太嚴重影響開發的套件問題就是。

C++/Clang

用起來沒啥問題,也不該有啥問題就是…

Xcode / CocoaPods

CocoaPods會無法安裝,這邊有workaround讓你的系統能裝起來CocoaPods,跑起來沒碰到啥問題。Xcode12就….不說了,IB出來一個樣,Application出來一個樣,這個版本在編譯傳統obj-c有相當嚴重的問題(可能跟M1無關),非常不建議使用。

Leave a comment