跳至主要内容

備份所有 GitHub Repositories

· 閱讀時間約 1 分鐘

備份檔案

今天在做(大約)一年一度的備份,把一些資料和電腦檔案備份到行動硬碟裡。

其中也包含雲端服務的資料,像是「Google Drive」、「Google Photos」這類的,用 Google Takeout 就能直接下載成 ZIP 檔,相當方便。

GitHub

至於 GitHub 嘛,就得自己想辦法處理了。

老實說,我原本是覺得好像沒有什麼 Repo 是一定要備份的,尤其在這個「大 AI 時代」,一些偏筆記型的 Repo 好像也沒那麼重要了,我甚至還順手砍掉了好幾個。

而且就算 GitHub 真的哪天掛了、資料不見了,也會有很多人一起陪葬啊,就像前陣子的一些 AWS、Cloudflare 故障一樣,大家要死就一起死,好像就沒那麼痛了?(好糟糕的心態 XD)

不過,從今年開始就不一樣了。

現在的 Repo 還包括我的「部落格」跟現在這個「文檔 + 部落格」,這些是我真的花了大量心血在上面的東西,就像日記本、照片一樣珍貴,所以還是要備份一下啦!

筆記

Cloudflare 即時聊天室

· 閱讀時間約 2 分鐘

聊天室

前陣子想說看可不可以用 Cloudflare Worker 來做個簡單的聊天室,因為我發現 Cloudflare Worker 雖然是 serverless,但是它的冷啟動時間超短,幾乎可以忽略不計。

總之,一般聊天室做法大概有三種:

  1. Polling
  2. Long Polling
  3. WebSocket

Polling

  • 資料儲存:使用 Cloudflare D1(基於 SQLite 的資料庫)
  • 讀取訊息:Worker 定期查詢 D1 獲取新訊息(每 4 秒查詢一次)
  • 傳送訊息:直接寫入 D1 資料庫
  • MOD 功能:可在 env 設定管理員密碼來刪除訊息
  • 安全限制:限制 API 速率、只能在指定網域使用等等

嗯...這個方法呢,稍微有點沒效率,尤其是一直去查詢資料庫的部分。

不過,以我這個小網站來說,用起來確實是沒問題的~

Long Polling

Long Polling 的原理是:Client 發送請求後,Worker 會等待一段時間(比如 30 秒),如果在這段時間內有新資料,就馬上回傳;如果時間到了還是沒資料,就直接回傳,然後再重新連接一次。

這個方法的問題是會一直占用 CPU,這樣非常浪費 Worker 的時間額度,所以感覺不太實際,就沒有去試了。

WebSocket

WebSocket 是一般比較正規的選擇。

  • 資料儲存:使用 Cloudflare Durable Objects 的 SQLite 方案
  • 連接管理:客戶端通過 WebSocket 建立持久連接到 Durable Object 上面
  • 傳送訊息:接收到訊息後直接 broadcast 給所有連接的人
  • 聊天歷史:通過 state.get()state.put() 等 Storage API 持久化到 SQLite

備註:如果是自己處理的話,就要架一個 WebSocket 伺服器;若想省事,就是用 Pusher 這類的第三方服務。

Bonus:交給別人來做

直接在網頁中崁入一個 Twitch 的聊天室就好了呀~(蛤?)

心得

因為我這次只是想試試看可行性,最後就只有做 Polling 而已,因為它足夠簡單,也已經夠用了。

再加上,我原本查 Durable Objects 好像是要付費的,不過現在好像有免費方案了!

如果未來真的有需要,可以直接用一些現成的、別人已經寫好的 Cloudflare Durable Objects 版本,這樣就能直接爽用啦~

Windows 環境測試 Safari 瀏覽器

· 閱讀時間約 1 分鐘

WebKit

前陣子在「DVD 彈跳動畫」這篇文章中,使用到 marquee 這個已經被棄用的 HTML 標籤,結果貼文發出後,才發現蘋果的 Safari 不支援這種作法,超級尷尬。

由於我手邊沒有蘋果的裝置可以拿來測試,於是在網路上搜尋了一下,發現在 Windows 的環境底下,可以透過 Playwright 內建的 Webkit 引擎來做測試。

有了這個方法之後,以後就很方便可以測試煩人的 WebKit(Safari 的引擎)啦~

筆記

FFmpeg 壓縮影片

· 閱讀時間約 1 分鐘

FFmpeg

上週在部落格上放了一些「復古遊戲的影片」。

我希望能夠兼顧支援度與畫質的同時,檔案也盡量不要太大。(Cloudflare Pages 檔案上限是 25 MB)

最後將影片都壓縮到 4 MB 左右,並維持 60 FPS 的流暢度,效果還算不錯。

我的小訣竅是:把編碼速度調到最慢,然後慢慢去調 CRF,直到「檔案大小」與「畫面品質」達到可接受的範圍就好囉~

筆記