我一直相信,懶惰的程式設計師就是好程式設計師。 為什麼? 因為讓一個努力的人去做一件事,他就會去做。 一個懶惰的程式設計師會花費 2-3 倍的時間,但會寫一個腳本來為他做這件事。 第一次執行此操作可能需要花費非常長的時間,但對於重複的任務,這種方法將很快獲得回報。 我認為自己是個懶惰的程式設計師。 這是序言,現在讓我們進入正題。
故事一
幾年前,我想知道如何提升我的英語能力。 沒有什麼比閱讀文學更好的了。 我購買了電子閱讀器,下載了書籍,然後開始閱讀。 在閱讀的過程中,我不斷地遇到不熟悉的單字。 我立即使用閱讀器內建的字典翻譯它們,但我注意到一個特點:這些單字不想被記住。 幾頁後,當我再次遇到這個詞時,90%的可能性我再次需要翻譯,而且每次都會發生這種情況。 結論是,在閱讀時僅僅翻譯不熟悉的單字是不夠的,你需要做其他事情。 理想的選擇是將其引入日常生活並開始使用它,但我不住在英語國家,這不太可能。 然後我想起我曾經讀過 .
它是什麼以及和什麼一起吃? 簡而言之,有這個 ,進一步引用維基百科:
在第一個小時內,所有收到的訊息中多達 60% 被遺忘;記憶後 10 小時,所學的 35% 仍留在記憶中。 然後遺忘過程緩慢進行,6天后,最初學習的音節總數的大約20%保留在記憶中,一個月後,同樣數量的保留在記憶中。
從這裡得出的結論
根據這條曲線可以得出的結論是,為了有效記憶,有必要重複所記憶的材料。
所以我們想出了一個主意 .
是一個完全免費的開源程序,實現了間隔重複的想法。 簡而言之,電腦化的閃存卡一側有問題,另一側有答案。 因為您可以使用常規方法進行提問/回答 html/css/javascript,那麼我們可以說它確實具有無限的可能性。 此外,它還可以透過特殊的方式進行擴展 ,其中之一對我們將來非常有用。
手動建立卡片是漫長、乏味的,而且很可能在一段時間後你會忘記這個任務,所以在某個時候我問自己一個問題,是否有可能自動化這個任務。 答案是肯定的,可以。 我做到了。 我馬上就說,還有更多 ,但是可以使用。 如果用戶有興趣並且其他開發人員參與其中,那麼就可以將其製成即使是技術上不懂的用戶也可以使用的成品。 現在,使用我的實用程式需要一些程式設計知識。
我使用該程式讀書 。 它具有連接外部詞典的能力,當您翻譯單字時,它會將您調用翻譯的單字保存到文字檔案中。 剩下的就是翻譯這些單字並創建 ANKI 卡片。
起初我嘗試使用翻譯 , ETC。 但免費服務的效果並不理想。 我在開發過程中用盡了免費限制,此外,根據許可條款,我沒有快取單字的權利。 在某個時刻,我意識到我需要自己翻譯這些字。 結果寫了一個模組 您可以連接到的 誰知道如何將它們轉換成 HTML 格式。
這就是 * 中的字典條目的樣子的Html。,我的選擇與選項相比

在關聯字典中查找單字之前,我會將其帶到 使用圖書館 。 其實就是因為這個函式庫,我開始用Java來寫,原本的計畫就是全部用Java來寫,但在這個過程中我發現了這個函式庫 使用它,您可以相對輕鬆地從 Nodejs 執行 Java 程式碼,並且某些程式碼是用 JavaScript 編寫的。 如果我早點找到這個函式庫,就不會用 Java 寫任何一行程式碼了。 在過程中誕生的另一個副項目是創作 在網路上找到的格式為 *.chm,轉變並進入神聖形態。 如果原始文件的作者是暱稱用戶 約日奇 當他看到這篇文章時,我非常感謝他所做的工作;沒有他的文檔,我很可能不會成功。
所以,我有一個英語單詞,其字典條目的格式為 *的Html。,剩下的就是將所有內容放在一起,從單字清單中建立 ANKI 文章並將其輸入 ANKI 資料庫。 為此,創建了以下項目 。 它可以將單字清單作為輸入、翻譯、建立 ANKI *的Html。 文章並記錄在ANKI資料庫中。 文章末尾有關於如何使用它的說明。 同時,第二個故事是間隔重複可以發揮作用的地方。
第二個故事。
所有尋找或多或少合格專業的人,包括程式設計師,都面臨著準備面試的需要。 面試中提出的許多概念您在日常實踐中不會使用,並且會被遺忘。 當準備面試、翻閱筆記、書籍、參考書時,我面臨這樣一個事實:需要花費大量時間和精力來篩選你已經知道的信息,因為它並不總是顯而易見的,你必須仔細閱讀以了解它是什麼。無關緊要。 當你談到一個確實需要重複的話題時,通常你已經很累了,你的準備品質也會受到影響。 有時候我想,為什麼不使用 ANKI 卡來做這個呢? 例如,在做某個主題的筆記時,立即以問題和答案的形式創建筆記,然後當你重複它時,你會立即知道你是否知道這個問題的答案。
出現的唯一問題是輸入問題非常漫長且乏味。 為了使過程更容易, 我添加了轉換功能的項目 ANKI 卡片中的文字。 您所需要的只是編寫一個大文件,其中問題和答案將用預定的字元序列進行標記,解析器將透過該文件了解問題在哪裡以及答案在哪裡。
建立此文件後,您可以執行 data2anki 並建立 ANKI 卡。 原始文件易於編輯和共享,您只需擦除相應的卡並再次運行程序,就會創建一個新版本。
安裝與使用
安裝 ANKI + AnkiConnect
- 從這裡下載 ANKI:
- 安裝 AnkiConnect 插件:
安裝
- 下載 來自 github 儲存庫
git clone https://github.com/anatoly314/data2anki - 安裝依賴項
cd data2anki && npm install - 下載java依賴項
- 開箱 jar 依賴項.zip 並將其內容放入 data2anki/java/jars
- 下載 來自 github 儲存庫
用於翻譯單字:
在文件中 data2anki/config.json:
在鑰匙裡 模式 輸入值 DSL2ANKI
在鑰匙裡 module.dsl.anki.deckName и module.dsl.anki.modelName 相應地寫 и (必須在創建卡片之前已經創建)。 目前僅支援模型類型 Basic :
有正面和背面字段,並將創建一張卡。 您在「正面」中輸入的文字將顯示在卡片的正面,您在「背面」中輸入的文字將顯示在卡片的背面。
原詞在哪裡? 前場,翻譯將在 後場.
新增支援沒有問題 基本卡(和反轉卡),其中將為單字和翻譯建立反向卡,根據翻譯,您需要記住原始單字。 你所需要的只是時間和願望。
在鑰匙裡 module.dsl.dictionariesPath 註冊一個已連接的陣列 *.dsl 字典。 每個連接的字典都是目錄,字典檔案所在的位置符合以下格式:
在鑰匙裡 module.dsl.wordToTranslatePath 輸入您要翻譯的單字清單的路徑。
- 啟動並運行 ANKI 應用程式
node data2ankiindex.js - 利潤!!!
用於從 Markdown 建立卡片
在文件中 data2anki/config.json:
- 在鑰匙裡 模式 輸入值 markdown2anki
- 在鑰匙裡 module.markdown.anki.deckName и module.dsl.anki.modelName 相應地寫 и (必須在創建卡片之前已經創建)。 為了 markdown2anki mode 僅支援模型類型 Basic .
在鑰匙裡 module.markdown.selectors.startQuestionSelectors и module.markdown.selectors.startAnswerSelectors 您編寫選擇器,分別標記問題和答案的開頭。 帶有選擇器本身的行不會被解析,也不會出現在卡片中;解析器將從下一行開始工作。
例如,這個問題/答案卡:

在 Markdown 中它看起來像這樣:
#QUESTION# ## 問題 5. 寫一個 mul 函數,當使用下列語法呼叫時,函數將正常運作。 ```javascript console.log(mul(2)(3)(4)); // 輸出:24 console.log(mul(4)(3)(4)); // 輸出 : 48 ``` #ANSWER# 以下是程式碼,並解釋其運作方式: ```javascript function mul (x) { return function (y) { // 匿名函式 return function (z) { // 匿名函數return x * y * z; }; }; } ``` 這裡`mul` 函數接受第一個參數並返回匿名函數,該匿名函數接受第二個參數並返回匿名函數,該匿名函數接受第三個參數並返回連續傳遞的參數的乘法在定義的Javascript 函數中inside 可以存取外部函數變量,並且 function 是第一個類別對象,因此它也可以由函數返回並作為另一個函數中的參數傳遞。 - 函數是物件類型的實例 - 函數可以具有屬性並具有返回其建構函數方法的連結 - 函數可以儲存為變數 - 函數可以作為參數傳遞給另一個函數 - 函數可以是從另一個函數返回範例取自此處:
專案資料夾中還有一個包含範例的文件
examples/markdown2anki-example.md- 在鑰匙裡 module.markdown.pathToFile
寫下文件所在的路徑 *.MD 問題/答案文件
- 啟動並運行 ANKI 應用程式
node data2ankiindex.js - 利潤!!!
這是在手機上的樣子:

導致
在 ANKI 桌面版上收到的卡片會無縫同步到 ANKI 雲端(免費空間高達 100 MB),之後您就可以隨時隨地使用它們。 ANKI 提供客戶端。 Android и iPhone它也可以在瀏覽器中使用。所以,如果你有空閒時間,與其漫無目的地瀏覽 Facebook 或在 Instagram 上看貓咪照片,不如學習一些新知識。
尾聲
正如我所提到的,這更像是一個可以使用的工作 POC,而不是成品。 大約 30% 的 DSL 解析器標準沒有實現,因此, ,還有一個想法將其重寫為 JavaScript的,因為我想要“一致性”,而且現在寫得不是很優化。 現在解析器正在建立一棵樹,但在我看來這是不必要的,也不需要使程式碼複雜化。 在 markdown2anki 模式下,影像不會被解析。 我會嘗試一點一點地刪減,但由於我是為自己寫作,所以我會先解決我自己會遇到的問題,但如果有人願意提供幫助,那麼不客氣。 如果您對該計劃有疑問,我將很樂意協助解決相關項目中的未決問題。 在此寫下其他批評和建議。 我希望這個項目對某人有用。
PS如果您發現任何錯誤(不幸的是,確實有一些錯誤),請在個人訊息中給我寫信,我會糾正所有內容。
來源: www.habr.com

