3 分鐘為英語學習神器 Anki 部署一個專屬同步伺服器

2023-06-27 12:01:03

原文連結:https://icloudnative.io/posts/anki-sync-server/

Anki 介紹

Anki 是一個輔助記憶軟體,其本質是一個卡片排序工具--即依據使用者對卡片上的自定義內容進行主動測試、自我評判後,其內部演演算法根據評判結果更改每張卡片下次測試時間的排序工具。

所謂的卡片,專業說法叫 Flash Card(抽認卡或閃卡),是一小塊紙片,分為正反兩面,將問題和提示寫在一面,將答案寫在另一面。使用方法就是先看正面的問題與提示,在腦中回想答案,然後翻出反面進行對照驗證。

閃卡的核心製作原則就是:一個知識點一張卡。因此非常適合用來學習英文,也可以用來記憶歷史事件時間、公式等等。給大家看下我製作的閃卡:

每張卡片只有一個英文單詞,與之配套的是該單詞的音標、發音、圖片、英文解釋、例句。所有的版塊都是英文,絕對不要出現中文! 卡片的核心是圖片和例句,通過圖片可以猜到這個單詞大概是什麼意思,通過例句可以驗證自己對單詞意思的猜測是否正確,如果還不放心,可以看下英文解釋,這一套流程下來絕對可以正確理解單詞的意思,完全不需要中文的干涉,這才是學習英文單詞最完美的方式

即便如此,大家在熟悉單詞的過程中可能還會有一個誤區,比如上面這個單詞,你在學習的過程中可能會忍不住去想這個單詞在中文裡究竟是什麼意思,甚至可能會在心裡默唸它的中文意思,即使你看了圖片和英文解釋,你心裡可能還會忍不住去想:哦,這是轉瞬即逝的意思。建議大家最好不要這麼做,要想做到這一點,記住一句名言:只可意會,不可言傳。你去看這張圖片,然後用心去體會:哦,大概就是這麼一種感覺,對對對。你能 get 到這個單詞所表達的那種感覺就行了,不要再去思考如何用中文來描述它,那樣反而吃力不討好。


下面言歸正傳,相信有很多小夥伴和我一樣在使用 Anki 來學習英文單詞或者其他的知識,但是 Anki 的同步伺服器在國外,還是一個個人專案,頻寬很小,同步速度很慢,如果我們想在多個使用者端之間同步學習進度和新增的知識點,那將非常痛苦。

為了解決這個問題,我們需要部署一個自定義的同步伺服器,然後讓使用者端去使用這個同步伺服器。

Anki 同步伺服器部署

自從 2023 年 2 月份,Anki 釋出了 PC 端 2.1.57 版本以後,Anki 的 PC 端,安卓端,iOS 端使用者都可以自定義同步伺服器了,並且不再需要安裝外掛。從此 Anki 小夥伴再也不用擔心 Anki 同步的問題了,困擾 Anki 使用者多年的同步問題終於得到徹底解決。

自 PC 端 2.1.57 版本以後,Anki 官方退出了鑲嵌在 Anki 使用者端的同步伺服器端和通過 Python 安裝的同步伺服器端。

但是我並不想用官方的這個破玩意,人生苦短,我不用 Python

我選擇用社群的高大上同步伺服器端,目前只有 anki-sync-server-rs 這個專案支援最新的 Anki 版本,其他的同步伺服器專案基本上都失效了。這個專案是用 Rust 寫的,追蹤 Anki 官方 同步伺服器端的進度,它們都是基於sqlite c 作為資料儲存後端。最重要的是:它有 Docker 映象!

有了映象,部署起來就簡單了,不就是 Docker 一把梭嘛!

不懂 Docker 也沒關係,不就是 Sealos 一把梭嘛!樓下的老奶奶都會用 Sealos 一把梭

你把我下面的步驟教給你家樓下的老奶奶,如果她不會你來找我,我現場給你表演大便活人

首先在瀏覽器位址列輸入網址 https://cloud.sealos.io/ 進入 Sealos 桌面。然後開啟「應用管理」:

點選「新建應用」:

依次輸入應用名和映象名,容器暴露埠是 27701,並開啟外網存取:

繼續向下,展開「高階設定」,點選「編輯環境變數」:

將以下內容貼上到環境變數輸入框中:

ANKISYNCD_USERNAME=<USERNAME>
ANKISYNCD_PASSWORD=<PASSWD>

請將 <USERNAME> 替換為你自己的使用者名稱,將 <PASSWD> 替換為你自己的密碼。

點選「新增儲存卷」:

掛載路徑填入 /app,然後點選確認:

最後點選右上角的部署應用即可。

部署完成後點選「詳情」進入應用詳情介面。

這裡可以看到範例的執行狀態,一定要等到狀態是 running 才算是部署成功。如果一段時間以後狀態還不是 running,可以點選「詳情」檢視故障原因:

部署成功後,可以看到應用的執行情況,包括 CPU 佔用、記憶體佔用等。點選外網地址即可通過外網域名直接開啟同步伺服器的 Web 介面。

如果出現以下的介面,則表示部署成功:

檢視紀錄檔的方法也很簡單,直接點選範例右側的「三個點」,然後點選「紀錄檔」即可檢視紀錄檔:

使用者端設定

桌面端

桌面使用者端(macOS/Windows/Linux)設定方法如下:

  1. 先開啟「偏好設定」

  2. 點選「網路」,往下看,可以看到標有 self-hosted sync server(自定義同步伺服器) 的方框,在裡面填寫您的伺服器端的地址:

  3. 重啟 Anki,然後點選「同步」:

  4. 這時候會彈出一個輸入框讓你輸入使用者名稱和密碼,你需要將你之前設定的使用者名稱和密碼輸入進去:

  5. 點選確認後,就會開始同步了。

安卓端

安卓端也是直接設定即可,我的 AnkiDroid 版本是 2.15.6。你可以通過「設定 -> 高階設定 -> 自定義同步伺服器」找到設定頁面。

再填寫使用者名稱和密碼:

設定 -> 常用設定 -> AnkiWeb賬戶

這樣就算設定完成了,所有的牌組都同步過來了。

官方的版本實在是太老了,如果你想使用更激進的社群版本,可以到這個頁面下載最新的 Beta 版:

建議下載 arm64-v8a 版本。

安裝完成後,可以通過「設定 -> 同步 -> 自定義同步伺服器」找到設定頁面:

再填寫使用者名稱和密碼:

設定 -> 同步 -> AnkiWeb賬戶

iOS 端

AnkiMobile 也已經支援和自建的同步伺服器同步了。至少對於版本 Ankimobile 2.0.90(20090.2) 來說,似乎是可行的,這是一位 iOS 系統使用者在 Anki 論壇報告的

如果設定完成後發現不能同步可以參考下面的內容再試一次:

If you're using AnkiMobile and are unable to connect to a server on your local network, please go into the iOS settings, locate Anki near the bottom, and toggle "Allow Anki to access local network" off and then on again.

上面的內容摘自 ANki tutorial

題外話

大家如果對我的卡片模板比較感興趣,可以掃碼關注公眾號:

後臺聊天框傳送暗號 anki,即可獲取我的卡片+模板。