我一直相信,懒惰的程序员就是好程序员。 为什么? 因为让一个努力的人去做一件事,他就会去做。 一个懒惰的程序员会花费 2-3 倍的时间,但会编写一个脚本来为他做这件事。 第一次执行此操作可能需要花费非常长的时间,但对于重复的任务,这种方法将很快获得回报。 我认为自己是一个懒惰的程序员。 这是序言,现在让我们进入正题。
第一个故事
几年前,我想知道如何提高我的英语水平。 没有什么比阅读文学更好的了。 我购买了电子阅读器,下载了书籍,然后开始阅读。 在阅读的过程中,我不断地遇到不熟悉的单词。 我立即使用阅读器内置的词典翻译它们,但我注意到一个特点:这些单词不想被记住。 几页后,当我再次遇到这个词时,90%的可能性我再次需要翻译,而且每次都会发生这种情况。 结论是,在阅读时仅仅翻译不熟悉的单词是不够的,你需要做其他事情。 理想的选择是将其引入日常生活并开始使用它,但我不住在英语国家,这不太可能。 然后我想起我曾经读过
它是什么以及和什么一起吃? 简而言之,有这个
在第一个小时内,所有收到的信息中多达 60% 被遗忘;记忆后 10 小时,所学内容的 35% 仍留在记忆中。 然后遗忘过程缓慢进行,6天后,最初学习的音节总数的大约20%保留在记忆中,一个月后,同样数量的保留在记忆中。
从这里得出的结论
根据这条曲线可以得出的结论是,为了有效记忆,有必要重复所记忆的材料。
所以我们想出了一个主意
手动创建卡片是漫长、乏味的,而且很可能在一段时间后你会忘记这个任务,所以在某个时候我问自己一个问题,是否有可能自动化这个任务。 答案是肯定的,可以。 我做到了。 我马上就说,还有更多
我使用该程序读书
起初我尝试使用翻译
这就是 * 中的字典条目的样子的.html,我的选择与选项相比
在关联词典中查找单词之前,我会将其带到
所以,我有一个英语单词,其字典条目的格式为 *的.html,剩下的就是将所有内容放在一起,从单词列表中创建 ANKI 文章并将其输入 ANKI 数据库。 为此,创建了以下项目
第二个故事。
所有寻找或多或少合格专业的人,包括程序员,都面临着准备面试的需要。 面试中提出的许多概念您在日常实践中不会使用,并且会被遗忘。 当准备面试、翻阅笔记、书籍、参考书时,我面临这样一个事实:需要花费大量时间和精力来筛选你已经知道的信息,因为它并不总是显而易见的,你必须仔细阅读以了解它是什么。无关紧要。 当你谈到一个确实需要重复的话题时,通常你已经很累了,你的准备质量也会受到影响。 有时候我想,为什么不使用 ANKI 卡来做这个呢? 例如,在做某个主题的笔记时,立即以问题和答案的形式创建一个笔记,然后当你重复它时,你会立即知道你是否知道这个问题的答案。
出现的唯一问题是输入问题非常漫长且乏味。 为了使过程更容易,
创建此文件后,您可以运行 data2anki 并创建 ANKI 卡。 原始文件易于编辑和共享,您只需擦除相应的卡并再次运行程序,就会创建一个新版本。
安装与使用
-
安装 ANKI + AnkiConnect
- 从这里下载 ANKI:
https://apps.ankiweb.net/ - 安装 AnkiConnect 插件:
https://ankiweb.net/shared/info/2055492159
- 从这里下载 ANKI:
-
安装
数据2anki - 下载中
数据2anki 来自 github 存储库git clone https://github.com/anatoly314/data2anki
- 安装依赖项
cd data2anki && npm install
- 下载java依赖项
https://github.com/anatoly314/data2anki/releases/download/0.1.0/jar-dependencies.zip - 开箱 jar 依赖项.zip 并将其内容放入 data2anki/java/jars
- 下载中
-
用于翻译单词:
-
在文件中 data2anki/config.json:
-
在关键 模式 输入值 DSL2ANKI
-
在关键 module.dsl.anki.deckName и module.dsl.anki.modelName 相应地写
卡组名称 и型号名称 (必须在创建卡片之前已经创建)。 目前仅支持模型类型 基础:有正面和背面字段,并将创建一张卡。 您在“正面”中输入的文本将显示在卡的正面,您在“背面”中输入的文本将显示在卡的背面。
原词在哪里? 前场,翻译将在 后场.
添加支持没有问题 基本卡(和反转卡),其中将为单词和翻译创建反向卡,根据翻译,您需要记住原始单词。 你所需要的只是时间和愿望。
-
在关键 module.dsl.dictionariesPath 注册一个已连接的数组 *.dsl 字典。 每个连接的字典都是一个目录,字典文件所在的位置符合以下格式:
DSL字典结构
-
在关键 module.dsl.wordToTranslatePath 输入您要翻译的单词列表的路径。
-
- 启动并运行 ANKI 应用程序
node data2ankiindex.js
- 利润!!!
-
-
用于从 Markdown 创建卡片
-
在文件中 data2anki/config.json:
- 在关键 模式 输入值 markdown2anki
- 在关键 module.markdown.anki.deckName и module.dsl.anki.modelName 相应地写
卡组名称 и型号名称 (必须在创建卡片之前已经创建)。 为了 markdown2anki mode 仅支持模型类型 基础. -
在关键 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 是第一个类对象,因此它也可以由函数返回并作为另一个函数中的参数传递。 - 函数是对象类型的实例 - 函数可以具有属性并具有返回其构造函数方法的链接 - 函数可以存储为变量 - 函数可以作为参数传递给另一个函数 - 函数可以是从另一个函数返回
示例取自此处:
123-JavaScript-面试问题 项目文件夹中还有一个包含示例的文件
examples/markdown2anki-example.md
- 在关键 module.markdown.pathToFile
写下文件所在的路径 *.MD 问题/答案文件
- 启动并运行 ANKI 应用程序
node data2ankiindex.js
- 利润!!!
-
这是在手机上的样子:
导致
在 ANKI 桌面版上收到的卡片可以毫无问题地与 ANKI 云同步(免费最多 100mb),然后您可以在任何地方使用它们。 有适用于 Android 和 iPhone 的客户端,您也可以在浏览器中使用它。 因此,如果你有闲暇时间,那么你可以学习一些新东西,而不是漫无目的地浏览 Facebook 或 Instagram 上的猫。
结语
正如我提到的,这更像是一个可以使用的工作 POC,而不是成品。 大约 30% 的 DSL 解析器标准没有实现,因此,
PS如果您发现任何错误(不幸的是,确实有一些错误),请通过个人消息给我写信,我会纠正所有内容。
来源: habr.com