自架 CMS 系統:Ghost + Mailgun
今天來把我們的讀書會《一個讀書會》的網站從 Halo 搬家到 Ghost。其實 Halo 算是不錯用的 CMS(內容管理系統),也提供多用戶協作管理,但可惜權限顆粒不夠細緻,除非大家都設為管理員否則沒辦法協作同一篇文章,不盡理想。而 Ghost 就提供 Admins, Editors, Authors, Contributors 四種身份,其中的 Editor 恰好就是我們需要的——同一次讀書會,分享者們能把內容丟進同一篇文章之中。 那你說文章協作為何不直接用 Notion?其實,Notion 會是相當理想的解決方案。作為協作平台,他甚至還能將文章上線,完美整合了我們想協作又想上線(觸及外網交朋友、同時方便我們自己隨時訪問複習)的需求。不過若能自架,我還是會更願意先走自架的方案,萬一讀書會舉辦到第三十個年頭結果 Notion 倒了,那就不舒服啦。總之,我們來架設 Ghost 網站吧! 透過 Docker Compose 架設 Ghost 官方對於自架提供了完整的文檔指引,然而嘛,官方的預設做法綁定了 Caddy 作代理,並且整合了 Tinybird 跟 ActivityPub ...
讀書筆記:《佛畏系統》
奈特不確定性 來自 Frank Knight 1921 年出版的《Risk, Uncertainty and Profit》。其中解釋了風險、不確定性的差異,並找到了「利潤」真正的來源。 車禍是風險、賭博是風險;但未來十年是否能發現新能源是不確定性、新創事業會不會成功是不確定性。企業承擔不確定性,創造利潤。 思維密度 簡單的例子:一篇花了一個小時寫出來的文章我用一分鐘讀完,那思維密度為60。 所以書籍的思維密度可就非常可觀。某個大師濃縮了他二十年來的心血寫出的一本書,我們花一個禮拜把它看完,思維密度極高,賺翻。 心流的本質 進入心流會關閉前額葉皮質。以《快思慢想》的模型來說,心流狀態下,系統二(前額葉負責的慢思考)關閉了,省出來的能量都跑去運作快思考的系統一,創造出無比流暢的體驗。 時間管理的最高境界:不做「必須做的事」 如果有一個 deadline 在禮拜五的 case,它在禮拜五就是「必須做的事」,但它在禮拜一就是一件可做可不做的事情,此時你就有主動權。主動權有什麼用呢? callback回去《致富心態》:幸福跟對生活的掌控感彼此呈正相關。 時間就像金錢,你花掉了就不是你...
Docker 更換掛載點:將 immich 資料搬遷到外接 SSD
docker 更換掛載點其實非常方便,倒不如說這部分就是 docker 會那麼好用的其中一個重要因素。一般來說,我們只要在 docker-compose.yml 中把 volumes 欄位設定一下,重新運行,一切就會像沒事人一樣,無痛搬家。 隨便拿一個簡單的 docker-compose 來看: 1234567891011services: glance: container_name: glance image: glanceapp/glance restart: unless-stopped volumes: - ./config:/app/config - ./assets:/app/assets ports: - 5678:8080 env_file: .env 我們可以看到在 volumes 跟 ports 裡面都有著 host:container 這種格式的寫法。在 volumes 中,這就表示你的容器會直接把宿主的 ./config 當成 /app/config 來取用。而在 ports 中,你的容...
在 Windows 系統上架設 NTP 伺服器
需求背景 此例中,我們要替電影院架設 TMS 系統,所以我們會有一台作為中控的 Windows 電腦,跟數台放在各個影廳的投影機伺服器。 一般來說,設備只要能上網,時間就能透過網際網路定時進行校準,一片蛋糕。但電影院的投影機伺服器為了做到內容保護,在 DCI 認證的規範之下,通常就只用封閉的內網來進行控制、傳輸與播放,於是我們就得迂迴地提供正確的時間給它們。 如果我們的中控電腦有兩張網卡,一張上網去讀時間,一張內網作為 NTP 伺服器,把時間資訊傳給投影機們如何? 挺不賴的,我們開搞。 安裝 NetTime 雖然 Windows 系統本身就自帶 NTP 的功能,但使用方式有點不直觀,本文選用簡單快速的第三方小工具 NetTime。 安裝開啟後,程式就可以開始從網路上抓取時間進行校準。此時我們進入設定: 把 Allow other computers to sync to this computer 的選項打開,化身為 server: 噠啦,就是那麼簡單。 防火牆設定 至此,Windows 電腦已經可以作為 client 從外網讀取正確時間,並同時作為 server 提供該時間...
讀書筆記:《致富心態》(金錢心理學)
沒有人真的是瘋子 指數基金的歷史不到五十年、避險基金才差不多二十五年,房屋貸款、信用卡、汽車貸款都是二戰後才出現。美國401退休金賬戶在 1978 開始運行,台灣勞退則是 1986——都只是初生之犢。所以我們如果做出奇怪的財務決策,那也是在所難免。(而因為入不敷出,台灣在 2005 年改成了新制。) 比如說,美國人購買樂透的金額,超過電影、遊戲、音樂、體育、書籍的消費總額。並且,樂透的消費群體,主要集中在收入最低的那群人。書上的數據是,最低收入家庭平均每年花四百美元在買樂透,但四成的美國人遇到緊急事故時卻湊不出四百美元,所以整體而言,花四百美元買樂透的人跟湊不出四百美元的人,是同一群人。 但他們真的是瘋子嗎?如果我們用他們的角度來看,也許也沒那麼奇怪,買樂透可能是他們唯一能擁抱美夢的時刻了。 運氣與風險 作者問諾貝爾經濟學獎得主 Robert Shiller 有什麼關於投資我們無法參透的道理,他認為是「運氣在投資成功的結果中所扮演的確切作用」。 鐵路巨擘康內留斯·范德比爾特(Cornelius Vanderbilt)成就斐然,但他幾乎每一筆商業交易都違反法律,不過成敗論英雄,我...
透過 GPIO 來控制 BrightSign 播放器
本文我們來實作可以進行互動的螢幕。怎麼個互動法?這次以兩種為例: 透過 RFID ,刷卡感應後,讓本來循環播放 A 影片的螢幕,改為播放 B 影片。 透過超聲波回聲判斷,人靠近(或手懸浮在感應區域)時,讓本來循環播放 A 影片的螢幕,改為播放 B 影片。 為了達到以上效果,我們這次需要的設備除了顯示器以外還需要: 數位看板播放器(Digital Signage Players),此處我們選用 BrightSign 的 HD225。 感應 RFID 並回傳訊號的傳感設備。此處我們不買現成產品,選用微控制器 ESP-WROOM-32 + RFID 傳感模塊 MFRC522 來土炮一個。 感應超聲波並回傳訊號的傳感設備。此處我們也不買現成產品,選用微控制器 NodeMCU + 超聲波傳感模塊 HCSR04 來土炮一個。 RFID 互動螢幕 我們的邏輯很簡單:RFID 模塊感應讀取輸入,把 ID 傳入 ESP-WROOM-32 判斷,如果是我們要的 ID,則輸出高電平訊號。當 HD225 讀到高電平訊號傳入,觸發後續影像內容。 首先來搞定 RFID 的部分。我們 ESP-WROO...
容器化實務操作,以 Taiko-Web 為例
本篇我們要把一個稍微陳舊的項目 Docker 化,方便沒有 Linux 伺服器的使用者們也可以快速運行服務。 此處我們選用的服務是 2011 就推出,但在 2020 以降才開始紅起來,但也因此被萬代版權方盯上,後來被全網封殺掉的 bui 製作的 Taiko Web。 但開源的力量是無比強大,我早已 fork 了一份備份出來,所以依然保有其原始碼。開源社群的迷人之處就在這裡,你說是吧。 該項目是一個大部分使用 JavaScript 刻出來的網頁版太鼓達人模擬器,其透過前端技術就可以讓用戶流暢地遊玩,十分方便,令人印象深刻。但今天我們不討論其服務內容,本篇我們將著重在將一個運行在 Linux 上的服務給容器化——以便用戶快速自行架設服務,或甚至跨平台運行——的過程。 各位可以一邊對照原作者的 manual setup,一邊看我們 dockerfile 的對應做法,方便理解。那我們開始咯。 安裝過程與重新打包 Installing the requirements 原始的安裝方式為: If you have not already done so, install the above...
自架推播通知伺服器:ntfy
原本我的 NetAlertX 跟 Uptime Kuma 使用的通知方式都是透過 gmail,用 SMTP 的方式,自己寄信給自己。但後來發現,收件箱因為這樣而充滿了一堆通知,十分雜亂也不方便管理。 所以此篇我們要來架設 ntfy,並將 NetAlertX 跟 Uptime Kuma 的通知方式設定成 ntfy,最終透過 ntfy 的 ios app,從 iPhone 接收通知。 安裝 ntfy 此處我們採用 docker compose 的安裝方式,yaml 如下: 123456789101112131415161718192021222324services: ntfy: image: binwiederhier/ntfy container_name: ntfy command: - serve environment: TZ: Asia/Taipei # optional: set desired timezone NTFY_BEHIND_PROXY: true NTFY_BASE_URL: http...
台語小筆記:留意輕聲,詞義差很多
台語作為一門標準的聲調語言(tone language),不同的聲調會有不同的意思表達。 上次回外婆家被催婚,其中就有一句: senn nn̄g-ê--ah gín-ná(生兩個啊gín仔) 我就說好啦,不要急,但為什麼是兩個?才知道此處的 nn̄g-ê--ah 跟 nn̄g-ê 的意思可差多了。前者是「兩三個」的意思,而後者是切確的「兩個」。 讀音上,前者 nn̄g-ê--ah 的 ê 讀輕聲,後者 nn̄g-ê 的 ê 則讀五聲。 所以如果有人跟你說: lâi lim nn̄g pue(來喝兩杯) 這裡如果遇到 nn̄g--pue(三聲輕聲)就是喊你來喝個兩三杯,幾杯不重要。但如果遇到的是 nn̄g-pue(三聲一聲),那就真的是指「兩杯」了。 其他輕聲改變詞義的例子 買無 bué-bô(買不到) bué--bô(買不買?) 驚死 kiann-sí(害怕死亡) kiann--sí(嚇死) 有影無 ū-iánn-bô(真的沒有) ū-iánn--bô(真的假的?)
智能家居 EP11:用反向代理取代端口轉發(NPM+DuckDNS)
我們在 智能家居 EP9:利用DDNS、通訊埠轉發進行遠端控制 已經透過 Port Forwarding 的方法實現外網訪問,可以成功在外面控制家中設備。 但實際上,在網路安全的領域中,端口轉發意味著 port 的暴露,其實大家都看得到你有哪些 port 是開的。例如,我用外網透過 nmap 來掃描我家可以看到: 開放的 port 那是一個清清楚楚明明白白。 對此,我們使用 Nginx Proxy Manager (下稱 NPM)來替我們進行反向代理,減少我們直接開 port 的需求。假設我架設了五個服務,本來我要分別開五個 port 來訪問。現在透過 NPM,我可以只開 80 跟 443 出來給 NPM,往後需要訪問什麼服務,通通都去問 NPM,讓 NPM 統一替我們處理請求。這就是所謂的代理(proxy)。 在此架構中,NPM 可以運行在與 HA 同網路的另一個設備中、與 HA 同一個設備中的不同容器(如 docker)中、或甚至以 add-on 的形式裝在 HA 身上(該附加元件在這裡)。而我此處是運行在與 HA 同網路的另一個設備中,可以參考一下我目前的拓撲: 編輯...
