牽妳走過世界的盡頭

客製化 Flutter Image Provider

之前在 flutter app 中使用 Optimized Cached Image 來展示圖片,選擇他的原因也很簡單,因為當時剛學 flutter 沒多久就要直接上陣了。先選一個看起來簡單好用的再說;而且他還可以設置 cache key,避免重複抓取,感覺起來就不錯。

然而後來圖片一多起來之後,就發現問題了,往往 app 打開滑沒幾下就 crash。看 log 是 OOM 問題,上網查了一下,有人說是 memory leak。大致上就是 image disposed 之後,沒有正確的釋放 ram,app 佔用的 ram 越來越多,就直接觸發 OOM killer。測試了一下原生的 NetworkImage 沒有這個問題。所以應該就是 Optimized Cached Image 的問題了。

另外就是在我的程式裡,widget 只拿到 media id,需要先到後端去查 media 的 presigned url 返回給 app,app 再用 presigned url 抓圖片資料。也就是原來的程式碼裡一直都是 future builder + image,這造成的問題就是頁面一刷新就要重新抓 presigned url,大大降低了效率,也大大提升了後端的負載。

因此決定客製化一個業務專用的 image provider。

Read more...

OpenIM 整合(踩坑)筆記 01

OpenIM 號稱是由一群前微信等技術專家一起出來打造的開源 IM 系統。撇開政治不談,個人覺得微信在 IM 領域確實是佼佼者,因此決定整合 OpenIM 到現有的產品中,以減少浪費時間重複造輪子。

本篇目標是串連原有的帳號系統與 OpenIM 的帳號系統,完成 自動註冊用戶到 OpenIM (下圖中的第 3 ~ 4 步驟)。

[Open-IM用户注册]https://doc.rentsoft.cn/images/server-register.png

Read more...

OpenStack Heat 使用筆記

Heat 是 OpenStack 中,負責提供 Orchestration 服務的 component。

Heat 用 resource 來描述 OpenStack 的狀態。例如你設定一個 network resource,在這個 resource 中,設定名稱為 default。接下來 Heat 將會在你的 project 中,檢查是否有一個名稱為 default 的 network;如果沒有,則 Heat 將會在 project 建立 network。除了 network 之外,image、volume、port、instance 等都可以是 Heat 的 resource。

Resource 之間可以建立關連性,例如你可以先建立一個 volume resource。接下來再設定一個 instance resource ,並且在 instance resource 的 block_device_mapping 的屬性中,設定與 volume resource 建立關連性。這樣 Heat 就會先檢查 volume 是否存在,然後檢查 instance 是否存在並且 volume 是否已掛載到 instance 中。

這個想法與許多 deployment 軟體相同,例如 Puppet 是讓使用者設定 resource,然後 Puppet 根據 resource 的描述去配置 Linux;而 Saltstack 則是根據 user 設定的 state 來配置 Linux。

Read more...

Page 1 of 4