APPLE M1 上使用 PODMAN 遇到的問題
會發現這個問題其實是我在用 mongodb 的 atlas cli 做 local deployment 時,發現卡在這一步很久(hanging),都沒有下面的 output 喔!

然後才一路查到問題是在 podman,修正 podman 啟動的 vm 後,就可以成功 deploy atlas 了


問題與解決
- 啟動 vm 時一直遇到啟動不了的錯誤,vm 砍也砍不掉,一直卡在 currently starting
作法:ps auxwww | grep podman 然後 kill 那個 process 強制重啟 podman (edited)
2. 重啟後可以砍掉了,重新 podman machine init 後,可以建立,但是當要 podman machine start podman-machine-default 時,出現以下錯誤
➜ podman machine start podman-machine-default
Starting machine "podman-machine-default"
Waiting for VM ...
Error: qemu exited unexpectedly with exit code 1, stderr: qemu-system-aarch64: VCPU supports less PA bits (36) than requested by the memory map (40)
這也是 M1 的問題!但是與其花幾萬塊更新 iMac 到 M3,還不如想辦法透過修改啟動設定或是改本機源碼解決問題
雖然網路上的討論不多,但果然最後找到方法了
要去修改這個檔案:
APPLE/SWIFT-EVOLUTION 上關於 GUARD 的有趣討論
不久前在使用 guard 的時候,因為忘記加上 return,發生了常見的低級錯誤:

什麼!guard 一定要 return 喔,不能直接跳轉就好?
查看到彼得潘大大的討論文:
else { } 的程式執行後,必須離開 guard 所在區塊,如此才不會繼續往下執行條件成立時要做的事。就像剛剛的例子,我們利用 return 離開 function motherSay。
奇怪,那怎麼不設計成 guard 的 else 中預設最後面就會自動 return,不需要 explicitly 寫出 return?
我想說查看一下 swift-evolution 有沒有關於這個設計理念的說明,果然被我找到了。
- infer return for omitted guard body
It has been proposed many times to allow omission of the guard body for the sake of brevity.
而官方的說明是:
However, a core principle of Swift is to make control flow explicit and visible. ….. Implicit returns would violate this principle
我的解讀是之所以不採用 infer 的方式忽略掉 return,應該是因為要遵從 swift 的設計理念,讓程式碼好讀懂。
RAILS PUMA + NGINX 的組合
Rails Puma + Nginx 的組合
首先要認識一下兩者分別是什麼東西:
- Puma 是一個專為 Rails 設計的高併發 web server
- Nginx 是一個廣泛使用的 reverse proxy
這個時候可以去查一下什麼事 reverse proxy,就可以發現一張圖說明了兩者之間的關係

所謂的反向代理,是在 server-side 根據 client-side 的 request,向後端的 web server 取得資源,然後再將這些資源 response 給 client-side
另外所謂的前向代理,通常是在 client-side 的軟體,例如瀏覽器會代替 client web page (program)去向CDN請求資源
使用後端代理伺服器的好處是,假設你有很多個 web server,都統一要由單一入口給 client-side 存取,則可以把存取的工作交給 reverse proxy,例如:
Web Server:
- Home Page Web Server
- Forum Web Server
- Wiki Web Server
然後你的客戶會連線到 www.my.domain.com,此時應該存取 Home Page Web Server,但當他連線到 www.my.domain.com/forum 時,應該要存取 Forum Web Server,可是如果把你的網域綁定到 Home Page Web Server,就無法另外連線到不同伺服器了,因此可以改用反向代理伺服器,把網域綁定到這台機器上,當反向代理判斷是要存取 Home Page,就會由他向那台伺服器請求資源,而要存取 Forum 時,就另外再向論壇的伺服器請求資源
昨天出去跑步時發生兩耳只有一耳接得上,回來後電腦也是,而且會有左邊接上右邊就斷,反之亦然,藍芽關掉或是忘記此裝置後重新連線(閃白燈)都沒用,甚至發生左邊接上 IPHONE 右邊接上 MACBOOK…
昨天出去跑步時發生兩耳只有一耳接得上,回來後電腦也是,而且會有左邊接上右邊就斷,反之亦然,藍芽關掉或是忘記此裝置後重新連線(閃白燈)都沒用,甚至發生左邊接上 iPhone 右邊接上 MacBook 同時兩個不同音源的現象,而且假這先讓一邊接上裝置了,這邊會時不時出現中斷或雜音干擾,就好像裝置一直試圖在重新接上另一耳。
睡前想說放棄了,起床後再上網找一下資料,這次直接只看 Apple 官網的一份技術支援文件,一樣四個步驟:
- 將 AirPods 放入充電盒:關上盒蓋。等待 30 秒,然後打開盒蓋。
- 忘記此裝置設定:在 iPhone、iPad 或 iPod touch 上,前往「設定」>「藍牙」,點一下 AirPods 旁的「i」圖像。然後點一下「忘記此裝置設定」,再點一下以確認。
- 重置 AirPods:在盒蓋打開的情況下,按住充電盒背面的設定按鈕約 15 秒,直到狀態指示燈閃爍琥珀色。
- 重新連線 AirPods:在盒蓋打開的情況下,將 AirPods 放在靠近裝置的地方。按照裝置螢幕上的步驟操作。
仔細在研究一遍發現,看到第三步這裡說的重置所需的 15 秒

跟第一步的 30 秒不同,稍早網路上找的其他平台資料很亂,有些只說靜置30秒再重新打開連接,有些說按 15 或 10 秒重置,這些資料都沒有說到兩個都要做,而且說按了15秒後會是琥珀色,我晚上試的時候有看到這個,但我只按了幾秒就變色,而且是變白色,我以為是我對顏色的認知錯誤,所以就直接重新連線裝置,結果還是失敗…。
這是我半信半疑,總之先照著步驟一靜置 30 秒後打開,接著忘記此裝置後,按著盒子按鈕超過 15 秒,一開始還是直接從綠色變白色


但超過 15 秒後,果然出現近似橘色的琥珀色!

然後重新連線,先嘗試iPhone,果然就恢復兩耳都同時連接有聲音了!接著再暫時關閉 iPhone的藍芽(不關閉好像無法),改去連接 MacBook (我按到出現白色就鬆開按鈕)也恢復了!
用 S3 管理團隊成員個人檔案儲存空間
需求架構
你是一間公司的 IT Manager,你被要求提供每個新來的員工一個雲端空間,你最後選擇了 Amazon S3 作為員工的雲端儲存空間,因為有以下幾個優點:
- 公司有一組 Amazon Web Service 的帳號 vcompany,可以在此帳號下針對每個員工建立各自的 IAM account,如此可以統一管理員工的存取
- 可以整合內部系統(如果也是採用 AWS 服務則整合會更好)
- Pay as you use.
你不希望員工自己建立一個私人的 AWS 帳號來存取公司資料,且限制每個員工只能存取自己的資料夾或是指定的公共資料夾
依照需求,你會在 vcompany 的帳號下:
- 先建立一個 bucket 叫做 employee
- 進入 employee,建立多個資料夾
因為你是希望限制資料夾層級的存取權限(folder-level permission),所以需要透過設定 Policy 來達到目的,假設你要針對新員工 David 指定他只能存取 employee bucket 下自己的資料夾,你需要以 vcompany 的帳號進入 IAM console,建立一個 Policy 如下:
假設命名此 Policy 為 s3_for_David

接著繼續以 vcompany 進入 IAM console,建立一個 user 叫做 David,並將剛剛建立的 s3_for_David 這個 policy attach 到這個 user

如此一來,登入 David 以後,雖然還是可以看到其他資料夾

但 David 就無法進入其他 user 的資料夾了
- 1
- 2