<?xml version="1.0" encoding="utf-8" standalone="yes"?><?xml-stylesheet type="text/xsl" href="https://perrotta.dev/rss.xsl"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Anki on ¬ just serendipity 🍀</title>
    <link>https://perrotta.dev/</link>
    <description>Recent content in Anki on ¬ just serendipity 🍀</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <managingEditor>serendipity@perrotta.dev (Thiago Perrotta)</managingEditor>
    <webMaster>serendipity@perrotta.dev (Thiago Perrotta)</webMaster>
    <copyright>© 2013 - 2026 Thiago Perrotta ·
  a fork of [hugo ʕ•ᴥ•ʔ bear](https://github.com/janraasch/hugo-bearblog/)
</copyright>
    <lastBuildDate>Sun, 23 Aug 2026 00:03:12 +0200</lastBuildDate>
    <atom:link href="https://perrotta.dev/tags/anki/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>anki: migrate English notes to TTS note types
      </title>
      <link>https://perrotta.dev/2026/08/anki-migrate-english-notes-to-tts-note-types/</link>
      <pubDate>Sat, 22 Aug 2026 13:36:25 +0200</pubDate><author>serendipity@perrotta.dev (Thiago Perrotta)</author>
      <category>anki</category>
      <category>bloggify</category>
      <category>dev</category>
      <category>pkm</category>
      <guid>https://perrotta.dev/2026/08/anki-migrate-english-notes-to-tts-note-types/</guid>
      <description>&lt;p&gt;♠ &lt;a href=&#34;https://perrotta.dev/2026/04/anki-flashcard-generation-with-claude-code/&#34;&gt;Previously&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Problem statement&lt;/strong&gt;: migrate my English 🇬🇧 deck to dedicated note types with&#xA;British English text-to-speech, without adding reverse cards.&lt;/p&gt;&#xA;&lt;p&gt;I created &lt;code&gt;English Language Card 🇬🇧&lt;/code&gt; with four fields (&lt;code&gt;Front&lt;/code&gt;, &lt;code&gt;Front Example&lt;/code&gt;,&#xA;&lt;code&gt;Back&lt;/code&gt;, and &lt;code&gt;Striked&lt;/code&gt;) and only one card template:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code class=&#34;language-plaintext&#34;&gt;{{Front}} {{tts en_GB:Front}}&#xA;&#xA;{{#Front Example}}&#xA;&amp;lt;br&amp;gt;&#xA;&amp;lt;i&amp;gt;{{Front Example}}&amp;lt;/i&amp;gt; {{tts en_GB:Front Example}}&#xA;{{/Front Example}}&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;&lt;code&gt;English Grammatik Cloze 🇬🇧&lt;/code&gt; uses the same TTS setup for cloze notes:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code class=&#34;language-plaintext&#34;&gt;{{cloze:Text}} {{tts en_GB:Text}}&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;AnkiConnect could create both types, but did not expose a &lt;code&gt;changeNoteType&lt;/code&gt;&#xA;action. I closed Anki and used its own Python package instead. Before changing&#xA;the collection, I exported the English deck and copied the SQLite database:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code class=&#34;language-plaintext&#34;&gt;4.8M pre-english-note-type-migration-2026-08-22-13.27.44.apkg&#xA;9.9M pre-english-note-type-migration-2026-08-22-13.29.08.collection.anki2&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;The field and template maps did the migration in place:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code class=&#34;language-python&#34;&gt;col.models.change(basic, groups[&amp;#34;Basic&amp;#34;], language, {0: 0, 1: 2}, {0: 0})&#xA;col.models.change(cloze, groups[&amp;#34;Cloze&amp;#34;], english_cloze, {0: 0, 1: 1}, None)&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;I rehearsed the migration against the database copy before running it for real:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code class=&#34;language-bash&#34;&gt;% PYTHONPATH=/Applications/Anki.app/Contents/Resources/app_packages \&#xA;  /opt/homebrew/bin/python3.13 /tmp/anki_migrate_english.py \&#xA;  ~/Library/Application\ Support/Anki2/User\ 1/collection.anki2&#xA;{&#xA;  &amp;#34;notes&amp;#34;: 1089,&#xA;  &amp;#34;cards_before&amp;#34;: 1096,&#xA;  &amp;#34;cards_after&amp;#34;: 1089,&#xA;  &amp;#34;language_notes&amp;#34;: 1086,&#xA;  &amp;#34;cloze_notes&amp;#34;: 3,&#xA;  &amp;#34;removed_reverse_cards&amp;#34;: 7,&#xA;  &amp;#34;integrity&amp;#34;: &amp;#34;ok&amp;#34;&#xA;}&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;The script also checked every mapped field, retained card ID, and review-log&#xA;count. After a full upload to AnkiWeb, a normal sync passed.&lt;/p&gt;&#xA;&lt;p&gt;No reverse cards, and all English notes can now speak for themselves (pun&#xA;intended!).&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;🤖 &lt;em&gt;Drafted with &lt;a href=&#34;https://github.com/thiagowfx/skills/blob/master/plugins/thiagowfx/skills/bloggify/SKILL.md&#34;&gt;&lt;code&gt;/bloggify&lt;/code&gt;&lt;/a&gt;.&lt;/em&gt; ∎&lt;/p&gt;&#xA;&lt;p&gt;— § —&lt;/p&gt;&lt;p&gt;Reply via &lt;a href=&#34;mailto:serendipity@perrotta.dev?subject=Reply to: anki: migrate English notes to TTS note types&#34;&gt;email&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&#34;https://perrotta.dev/tags/anki/&#34;&gt;#anki&lt;/a&gt; &lt;a href=&#34;https://perrotta.dev/tags/bloggify/&#34;&gt;#bloggify&lt;/a&gt; &lt;a href=&#34;https://perrotta.dev/tags/dev/&#34;&gt;#dev&lt;/a&gt; &lt;a href=&#34;https://perrotta.dev/tags/pkm/&#34;&gt;#pkm&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Anki: archive a deck
      </title>
      <link>https://perrotta.dev/2026/07/anki-archive-a-deck/</link>
      <pubDate>Mon, 27 Jul 2026 10:49:00 +0200</pubDate><author>serendipity@perrotta.dev (Thiago Perrotta)</author>
      <category>anki</category>
      <category>dev</category>
      <category>pkm</category>
      <guid>https://perrotta.dev/2026/07/anki-archive-a-deck/</guid>
      <description>&lt;p&gt;♠ &lt;a href=&#34;https://perrotta.dev/2024/12/anki-workflow/&#34;&gt;Previously&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;The &lt;a href=&#34;https://docs.ankiweb.net/&#34;&gt;Anki official docs&lt;/a&gt; do not provide explicit&#xA;instructions about the archival of decks that are no longer needed.&lt;/p&gt;&#xA;&lt;p&gt;Archiving is better than deleting because you never know when you may need a&#xA;deck again.&lt;/p&gt;&#xA;&lt;p&gt;One way to archive a deck is to simply export it as a backup and save it&#xA;elsewhere. But then you collection becomes scattered. I&amp;rsquo;d really like to manage&#xA;all my decks in a &lt;a href=&#34;https://ankiweb.net/about&#34;&gt;single place&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;So I came up with a simple workaround.&lt;/p&gt;&#xA;&lt;p&gt;First, create an &lt;code&gt;Archive::&lt;/code&gt;&#xA;&lt;a href=&#34;https://docs.ankiweb.net/deck-options.html?highlight=subdeck#subdecks&#34;&gt;subdeck&lt;/a&gt;.&#xA;A subdeck creates a parent-child relationship which, for our purposes, bundles&#xA;all archived decks within an umbrella parent. It&amp;rsquo;s visually easier to manage and&#xA;organize, effectively hiding archived decks from the deck list view.&lt;/p&gt;&#xA;&lt;p&gt;Second, move the desired deck(s) within &lt;code&gt;Archive::&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Third, one by one, open the cards/notes list (&amp;ldquo;Browse&amp;rdquo;) of a deck, select all&#xA;cards/notes (&lt;code&gt;Cmd-A&lt;/code&gt;), then&#xA;&lt;a href=&#34;https://docs.ankiweb.net/browsing.html?highlight=suspend#cards&#34;&gt;suspend&lt;/a&gt; them&#xA;all (&lt;code&gt;Cmd-J&lt;/code&gt; or right click, &amp;ldquo;Toggle suspend&amp;rdquo;).&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Side effect&lt;/strong&gt;: cards/notes from the deck will no longer show up for review. At the&#xA;same time, your past progress is kept, should you ever want to unarchive them. ∎&lt;/p&gt;&#xA;&lt;p&gt;— § —&lt;/p&gt;&lt;p&gt;Reply via &lt;a href=&#34;mailto:serendipity@perrotta.dev?subject=Reply to: Anki: archive a deck&#34;&gt;email&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&#34;https://perrotta.dev/tags/anki/&#34;&gt;#anki&lt;/a&gt; &lt;a href=&#34;https://perrotta.dev/tags/dev/&#34;&gt;#dev&lt;/a&gt; &lt;a href=&#34;https://perrotta.dev/tags/pkm/&#34;&gt;#pkm&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>★ anki: flashcard generation with claude code
      </title>
      <link>https://perrotta.dev/2026/04/anki-flashcard-generation-with-claude-code/</link>
      <pubDate>Wed, 15 Apr 2026 16:09:12 +0200</pubDate><author>serendipity@perrotta.dev (Thiago Perrotta)</author>
      <category>ai</category>
      <category>anki</category>
      <category>bestof</category>
      <category>claude</category>
      <category>dev</category>
      <category>pkm</category>
      <guid>https://perrotta.dev/2026/04/anki-flashcard-generation-with-claude-code/</guid>
      <description>&lt;p&gt;♠ &lt;a href=&#34;https://perrotta.dev/2026/04/anki-api-access/&#34;&gt;Previously&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;I started to use &lt;a href=&#34;https://docs.anthropic.com/en/docs/claude-code&#34;&gt;Claude Code&lt;/a&gt;&#xA;to generate flashcards for my (new) &lt;strong&gt;Tech&lt;/strong&gt; Deck via&#xA;&lt;a href=&#34;https://ankiweb.net/shared/info/2055492159&#34;&gt;AnkiConnect&lt;/a&gt;, covering books and&#xA;topics I&amp;rsquo;m studying for to consolidate my SWE-SRE knowledge.&lt;/p&gt;&#xA;&lt;p&gt;The workflow: I tell Claude which book or topic to cover, it researches their&#xA;key concepts, checks my existing cards (notes) for potential overlap, and&#xA;batch-adds new ones via the AnkiConnect HTTP API:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code class=&#34;language-python&#34;&gt;def anki_request(action, **params):&#xA;    payload = json.dumps({&amp;#34;action&amp;#34;: action, &amp;#34;version&amp;#34;: 6, &amp;#34;params&amp;#34;: params})&#xA;    req = urllib.request.Request(&amp;#34;http://localhost:8765&amp;#34;, data=payload.encode(), method=&amp;#34;POST&amp;#34;)&#xA;    with urllib.request.urlopen(req) as resp:&#xA;        return json.loads(resp.read())[&amp;#34;result&amp;#34;]&#xA;&#xA;notes = [&#xA;    {&#xA;        &amp;#34;deckName&amp;#34;: &amp;#34;Tech 💻&amp;#34;,&#xA;        &amp;#34;modelName&amp;#34;: &amp;#34;Basic&amp;#34;,&#xA;        &amp;#34;fields&amp;#34;: {&#xA;            &amp;#34;Front&amp;#34;: &amp;#34;DDIA: &amp;lt;b&amp;gt;LSM-Trees vs B-Trees&amp;lt;/b&amp;gt; — how do they differ?&amp;#34;,&#xA;            &amp;#34;Back&amp;#34;: &amp;#34;...&amp;#34;  # HTML-formatted answer&#xA;        },&#xA;        &amp;#34;tags&amp;#34;: [&amp;#34;ddia&amp;#34;],&#xA;    },&#xA;    # ... more notes&#xA;]&#xA;&#xA;anki_request(&amp;#34;addNotes&amp;#34;, notes=notes)&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;In a sample session, topics covered:&lt;/p&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;Topic&lt;/th&gt;&#xA;          &lt;th&gt;Cards&lt;/th&gt;&#xA;          &lt;th&gt;Tag&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;SRE (Google)&lt;/td&gt;&#xA;          &lt;td&gt;50&lt;/td&gt;&#xA;          &lt;td&gt;&lt;code&gt;sre&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;System Design&lt;/td&gt;&#xA;          &lt;td&gt;40&lt;/td&gt;&#xA;          &lt;td&gt;&lt;code&gt;system-design&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;LeetCode / Python&lt;/td&gt;&#xA;          &lt;td&gt;41&lt;/td&gt;&#xA;          &lt;td&gt;&lt;code&gt;python&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Kubernetes&lt;/td&gt;&#xA;          &lt;td&gt;20&lt;/td&gt;&#xA;          &lt;td&gt;&lt;code&gt;kubernetes&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Production-Ready Microservices (Susan Fowler)&lt;/td&gt;&#xA;          &lt;td&gt;28&lt;/td&gt;&#xA;          &lt;td&gt;&lt;code&gt;microservices&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;DDIA (Martin Kleppmann)&lt;/td&gt;&#xA;          &lt;td&gt;25&lt;/td&gt;&#xA;          &lt;td&gt;&lt;code&gt;ddia&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Building Microservices (Newman)&lt;/td&gt;&#xA;          &lt;td&gt;16&lt;/td&gt;&#xA;          &lt;td&gt;&lt;code&gt;microservices&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Fundamentals of Software Architecture (Richards &amp;amp; Ford)&lt;/td&gt;&#xA;          &lt;td&gt;25&lt;/td&gt;&#xA;          &lt;td&gt;&lt;code&gt;software-architecture&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Kubernetes advanced&lt;/td&gt;&#xA;          &lt;td&gt;25&lt;/td&gt;&#xA;          &lt;td&gt;&lt;code&gt;kubernetes&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Networking&lt;/td&gt;&#xA;          &lt;td&gt;17&lt;/td&gt;&#xA;          &lt;td&gt;&lt;code&gt;networking&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Linux / Systems Performance&lt;/td&gt;&#xA;          &lt;td&gt;16&lt;/td&gt;&#xA;          &lt;td&gt;&lt;code&gt;linux&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Python stdlib&lt;/td&gt;&#xA;          &lt;td&gt;23&lt;/td&gt;&#xA;          &lt;td&gt;&lt;code&gt;python&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;strong&gt;Total&lt;/strong&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;strong&gt;~326&lt;/strong&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;For each book, Claude searched the web for chapter summaries and key concepts,&#xA;cross-referenced my existing cards to avoid duplication, then created a Python&#xA;script to push cards through AnkiConnect&amp;rsquo;s &lt;code&gt;addNotes&lt;/code&gt; action.&lt;/p&gt;&#xA;&lt;p&gt;Cards match the existing format: Basic note type, HTML formatting (&lt;code&gt;&amp;lt;b&amp;gt;&lt;/code&gt;,&#xA;&lt;code&gt;&amp;lt;br&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;code&amp;gt;&lt;/code&gt;, &lt;code&gt;•&lt;/code&gt;), one tag per topic.&lt;/p&gt;&#xA;&lt;p&gt;Example card (front):&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;DDIA: Sloppy quorums and hinted handoff — what are they?&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Example card (back):&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;In a standard quorum (w + r &amp;gt; n), writes/reads must reach specific replicas.&#xA;&lt;strong&gt;Problem&lt;/strong&gt;: during a network partition, the designated replicas may be&#xA;unreachable. Strict quorum would reject the write → reduced availability.&#xA;&lt;strong&gt;Sloppy quorum&lt;/strong&gt;: Accept writes on any reachable nodes, even if they aren&amp;rsquo;t&#xA;the designated replicas (&amp;hellip;)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The whole process took about an hour. Doing it by hand would have taken days.&lt;/p&gt;&#xA;&lt;p&gt;I am excited to evolve this workflow. The next step is going to be to refactor&#xA;my thousands of language cards and notes. ∎&lt;/p&gt;&#xA;&lt;p&gt;— § —&lt;/p&gt;&lt;p&gt;Reply via &lt;a href=&#34;mailto:serendipity@perrotta.dev?subject=Reply to: anki: flashcard generation with claude code&#34;&gt;email&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&#34;https://perrotta.dev/tags/ai/&#34;&gt;#ai&lt;/a&gt; &lt;a href=&#34;https://perrotta.dev/tags/anki/&#34;&gt;#anki&lt;/a&gt; &lt;a href=&#34;https://perrotta.dev/tags/bestof/&#34;&gt;#bestof&lt;/a&gt; &lt;a href=&#34;https://perrotta.dev/tags/claude/&#34;&gt;#claude&lt;/a&gt; &lt;a href=&#34;https://perrotta.dev/tags/dev/&#34;&gt;#dev&lt;/a&gt; &lt;a href=&#34;https://perrotta.dev/tags/pkm/&#34;&gt;#pkm&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Anki: API access
      </title>
      <link>https://perrotta.dev/2026/04/anki-api-access/</link>
      <pubDate>Mon, 13 Apr 2026 02:15:10 +0200</pubDate><author>serendipity@perrotta.dev (Thiago Perrotta)</author>
      <category>ai</category>
      <category>anki</category>
      <category>dev</category>
      <category>pkm</category>
      <guid>https://perrotta.dev/2026/04/anki-api-access/</guid>
      <description>&lt;p&gt;♠ &lt;a href=&#34;https://perrotta.dev/2024/12/anki-workflow/&#34;&gt;Previously&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Install &lt;a href=&#34;https://ankiweb.net/shared/info/2055492159&#34;&gt;AnkiConnect&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;AnkiConnect enables external applications such as Yomichan to communicate with&#xA;Anki over a simple HTTP API. Its capabilities include executing queries&#xA;against the user&amp;rsquo;s card deck, automatically creating new cards, and more.&#xA;AnkiConnect is compatible with the latest stable (2.1.x) releases of Anki;&#xA;older versions (2.0.x and below) are no longer supported.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&amp;hellip;to be able to do incantations such as:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code class=&#34;language-bash&#34;&gt;% curl -s localhost:8765 -X POST -d &amp;#39;{&amp;#34;action&amp;#34;: &amp;#34;deckNames&amp;#34;, &amp;#34;version&amp;#34;: 6}&amp;#39; | python3 -m json.tool&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;pre&gt;&lt;code class=&#34;language-json&#34;&gt;{&#xA;    &amp;#34;result&amp;#34;: [&#xA;        &amp;#34;Default&amp;#34;,&#xA;        &amp;#34;Languages&amp;#34;,&#xA;        &amp;#34;Languages::English \ud83c\uddec\ud83c\udde7&amp;#34;,&#xA;        &amp;#34;Languages::German \ud83c\udde9\ud83c\uddea&amp;#34;,&#xA;        &amp;#34;Languages::Italian \ud83c\uddee\ud83c\uddf9&amp;#34;,&#xA;        &amp;#34;Languages::Portuguese \ud83c\udde7\ud83c\uddf7&amp;#34;,&#xA;        &amp;#34;Tech \ud83d\udcbb&amp;#34;&#xA;    ],&#xA;    &amp;#34;error&amp;#34;: null&#xA;}&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;pre&gt;&lt;code class=&#34;language-bash&#34;&gt;% curl -s localhost:8765 -X POST -d &amp;#39;{&amp;#34;action&amp;#34;: &amp;#34;modelNames&amp;#34;, &amp;#34;version&amp;#34;: 6}&amp;#39; | python3 -m json.tool&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;pre&gt;&lt;code class=&#34;language-json&#34;&gt;{&#xA;    &amp;#34;result&amp;#34;: [&#xA;        &amp;#34;Basic&amp;#34;,&#xA;        &amp;#34;Basic (and reversed card)&amp;#34;,&#xA;        &amp;#34;Cloze&amp;#34;,&#xA;        &amp;#34;Deutsch Grammatik Cloze \ud83c\udde9\ud83c\uddea&amp;#34;,&#xA;        &amp;#34;Deutsch Language Card \ud83c\udde9\ud83c\uddea&amp;#34;,&#xA;        &amp;#34;Image Occlusion&amp;#34;,&#xA;        &amp;#34;Italian Grammatik Cloze \ud83c\uddee\ud83c\uddf9&amp;#34;,&#xA;        &amp;#34;Italian Language Card \ud83c\uddee\ud83c\uddf9&amp;#34;&#xA;    ],&#xA;    &amp;#34;error&amp;#34;: null&#xA;}&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Why is this useful?&lt;/p&gt;&#xA;&lt;p&gt;It allows me to connect my LLM to Anki via HTTP&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;https://perrotta.dev/2026/04/anki-api-access/#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Prompt&lt;/strong&gt;: create flashcards based on the &lt;em&gt;Site Reliability Engineer&lt;/em&gt; book by&#xA;Google, published by O&amp;rsquo;Reilly, in the &lt;em&gt;Tech&lt;/em&gt; deck.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;⏺ I&amp;rsquo;ll use the Basic note type (Front/Back). The Google SRE book is&#xA;substantial — it covers topics like SLOs, error budgets, monitoring, incident&#xA;response, automation, release engineering, etc.&lt;/p&gt;&#xA;&lt;p&gt;How many flashcards would you like roughly? And should I cover the whole book&#xA;broadly or focus on specific chapters/topics?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The traditional option is to import an existing &lt;a href=&#34;https://ankiweb.net/shared/decks&#34;&gt;shared&#xA;deck&lt;/a&gt;, like &lt;a href=&#34;https://ankiweb.net/shared/info/1014055110&#34;&gt;this one&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;⏺ Done! I&amp;rsquo;ve created 50 flashcards in the Tech 💻 deck, all tagged with sre&#xA;and google-sre-book. They cover the most relevant topics:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Core concepts: SRE definition, SLI/SLO/SLA, error budgets, toil, 50% rule&lt;/li&gt;&#xA;&lt;li&gt;Monitoring: four golden signals, black-box vs white-box, symptom-based&#xA;alerting&lt;/li&gt;&#xA;&lt;li&gt;Incident management: roles, mitigation vs root cause, postmortems, blameless&#xA;culture&lt;/li&gt;&#xA;&lt;li&gt;Reliability patterns: graceful degradation, load shedding, circuit breaking,&#xA;retry budgets, exponential backoff&lt;/li&gt;&#xA;&lt;li&gt;Cascading failures: causes, defenses, deadline propagation&lt;/li&gt;&#xA;&lt;li&gt;Operations: on-call best practices, change management, canarying, capacity&#xA;planning&lt;/li&gt;&#xA;&lt;li&gt;Distributed systems: CAP theorem, consensus, Paxos/Raft&lt;/li&gt;&#xA;&lt;li&gt;Culture: simplicity, automation hierarchy, PRR, Wheel of Misfortune&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Wait until I start to refactor my language notes&lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;https://perrotta.dev/2026/04/anki-api-access/#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;. ∎&lt;/p&gt;&#xA;&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;&#xA;&lt;hr&gt;&#xA;&lt;ol&gt;&#xA;&lt;li id=&#34;fn:1&#34;&gt;&#xA;&lt;p&gt;Alternatively you can use &lt;a href=&#34;https://ankiweb.net/shared/info/124672614&#34;&gt;MCP&lt;/a&gt; if you &lt;em&gt;really&lt;/em&gt;&#xA;&lt;a href=&#34;https://perrotta.dev/2025/10/mcp-model-context-protocol-considered-harmful/&#34;&gt;want&lt;/a&gt; to.&amp;#160;&lt;a href=&#34;https://perrotta.dev/2026/04/anki-api-access/#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li id=&#34;fn:2&#34;&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://docs.ankiweb.net/getting-started.html?highlight=notes#key-concepts&#34;&gt;Anki concepts&lt;/a&gt;: a note is typically a pair of cards (back and front, front and back).&amp;#160;&lt;a href=&#34;https://perrotta.dev/2026/04/anki-api-access/#fnref:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;— § —&lt;/p&gt;&lt;p&gt;Reply via &lt;a href=&#34;mailto:serendipity@perrotta.dev?subject=Reply to: Anki: API access&#34;&gt;email&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&#34;https://perrotta.dev/tags/ai/&#34;&gt;#ai&lt;/a&gt; &lt;a href=&#34;https://perrotta.dev/tags/anki/&#34;&gt;#anki&lt;/a&gt; &lt;a href=&#34;https://perrotta.dev/tags/dev/&#34;&gt;#dev&lt;/a&gt; &lt;a href=&#34;https://perrotta.dev/tags/pkm/&#34;&gt;#pkm&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>anki: auto-sync
      </title>
      <link>https://perrotta.dev/2026/04/anki-auto-sync/</link>
      <pubDate>Sun, 12 Apr 2026 10:38:15 +0200</pubDate><author>serendipity@perrotta.dev (Thiago Perrotta)</author>
      <category>anki</category>
      <category>dev</category>
      <category>pkm</category>
      <guid>https://perrotta.dev/2026/04/anki-auto-sync/</guid>
      <description>&lt;p&gt;♠ &lt;a href=&#34;https://perrotta.dev/2026/04/anki-corrupted-database/&#34;&gt;Previously&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Problem statement&lt;/strong&gt;: enable auto-sync to AnkiWeb.&lt;/p&gt;&#xA;&lt;p&gt;First layer: enable sync on open/close: &lt;code&gt;Preferences &amp;gt; Syncing &amp;gt; Automatically sync on profile open/close&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;Second layer: for manual syncs, press &lt;code&gt;y&lt;/code&gt;&#xA;(&lt;a href=&#34;https://old.reddit.com/r/Anki/comments/1bxrkbn/is_there_a_way_to_sync_automatically_whenever_a/&#34;&gt;source&lt;/a&gt;).&lt;/p&gt;&#xA;&lt;p&gt;Third layer: install and enable an auto sync add-on such as &lt;a href=&#34;https://ankiweb.net/shared/info/501542723&#34;&gt;this&#xA;one&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;This addon will automatically synchronize your collection with AnkiWeb at time&#xA;intervals you can choose. It will never interrupt you while you are using&#xA;Anki.&lt;/p&gt;&#xA;&lt;p&gt;By default, the first sync will start 1 minute after your last activity. While&#xA;Anki is sitting idle in the background, it will sync every 10 minutes. You can&#xA;change those settings in the options dialog.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Someone forked that add-on to improve upon it, enabling &lt;a href=&#34;https://ankiweb.net/shared/info/226796325&#34;&gt;background auto&#xA;sync&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Should I trust a random add-on though? Even if the Anki community is generally&#xA;decent and well-intentioned, these days we can&amp;rsquo;t trust anyone.&lt;/p&gt;&#xA;&lt;p&gt;I asked &lt;a href=&#34;https://www.anthropic.com/news/claude-code-security&#34;&gt;Opus 4.6&lt;/a&gt; (Claude)&#xA;to analyze it for potential malware:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code class=&#34;language-plaintext&#34;&gt;⏺ I&amp;#39;ve now read every single source file in the addon. Here&amp;#39;s my analysis:&#xA;&#xA;  ---&#xA;  Malware Analysis: Background Auto Sync (226796325)&#xA;&#xA;  Addon: Background Auto Sync for Anki&#xA;  Author: athulkrishna2015&#xA;  Source: GitHub&#xA;  Fork of: Auto-Sync-Anki-Addon by Robin-Haupt-1&#xA;  License: GPL-3.0&#xA;  Files reviewed: All 8 Python source files &amp;#43; manifest.json&#xA;&#xA;  Verdict: No malware detected. Appears safe.&#xA;&#xA;  What the code actually does&#xA;&#xA;  1. sync_routine.py (core logic) — Sets up timers to periodically call Anki&amp;#39;s built-in&#xA;  mw.col.sync_collection(). Saves/restores window state so sync doesn&amp;#39;t steal focus. All sync goes&#xA;  through Anki&amp;#39;s native sync infrastructure (AnkiWeb auth, mw.pm.sync_auth()).&#xA;  2. utils.py — Single function: has_internet_connection() which opens a TCP socket to 8.8.8.8:53&#xA;  (Google DNS) to check connectivity. This is a standard, benign connectivity check. No data is&#xA;  sent.&#xA;  3. config.py — Reads/writes config to Anki&amp;#39;s own config storage (mw.col.set_config/get_config). No&#xA;   external communication.&#xA;  4. main.py — Wires up hooks (profile_did_open, profile_will_close, sync_will_start,&#xA;  sync_did_finish) and adds a menu item. Standard Anki addon boilerplate.&#xA;  5. log_window.py — Simple in-memory log viewer (QDialog &amp;#43; QTextEdit). No file I/O, no network.&#xA;  6. options_dialog.py — Qt settings dialog with spinboxes/checkboxes. The support tab loads a Ko-fi&#xA;   widget (https://storage.ko-fi.com/cdn/widget/Widget_2.js) via an embedded AnkiWebView. Also&#xA;  displays crypto donation QR codes (BTC, ETH, UPI). These are static images bundled in the addon.&#xA;  7. constants.py — Config key names and defaults. Pure data.&#xA;  8. bump.py / make_ankiaddon.py — Developer build tooling only; not shipped in the .ankiaddon&#xA;  package.&#xA;&#xA;  Specific things I checked for&#xA;&#xA;  ┌────────────────┬────────────────────────────────────────────────────────────────────────────┐&#xA;  │    Concern     │                                  Finding                                   │&#xA;  ├────────────────┼────────────────────────────────────────────────────────────────────────────┤&#xA;  │                │ Only socket.create_connection(&amp;#34;8.8.8.8&amp;#34;, 53) for connectivity check &amp;#43;      │&#xA;  │ Network calls  │ Anki&amp;#39;s own sync API. No external HTTP requests, no telemetry, no phoning   │&#xA;  │                │ home.                                                                      │&#xA;  ├────────────────┼────────────────────────────────────────────────────────────────────────────┤&#xA;  │ File system    │ Only os.path.dirname(__file__) and os.path.join to load bundled QR code    │&#xA;  │ access         │ images. No reading/writing arbitrary files.                                │&#xA;  ├────────────────┼────────────────────────────────────────────────────────────────────────────┤&#xA;  │ Code execution │ None. No exec(), eval(), subprocess, os.system, importlib, or dynamic code │&#xA;  │  / eval        │  loading.                                                                  │&#xA;  ├────────────────┼────────────────────────────────────────────────────────────────────────────┤&#xA;  │ Data           │ No access to deck content, card data, or personal information beyond what  │&#xA;  │ exfiltration   │ Anki&amp;#39;s sync already handles.                                               │&#xA;  ├────────────────┼────────────────────────────────────────────────────────────────────────────┤&#xA;  │ Obfuscation    │ None. Code is clean, readable, well-structured Python.                     │&#xA;  ├────────────────┼────────────────────────────────────────────────────────────────────────────┤&#xA;  │ Suspicious     │ Only standard library (socket, datetime, os, json) and Anki&amp;#39;s own APIs     │&#xA;  │ imports        │ (aqt, aqt.qt).                                                             │&#xA;  ├────────────────┼────────────────────────────────────────────────────────────────────────────┤&#xA;  │                │ Loads JavaScript from storage.ko-fi.com in the support tab — this is a     │&#xA;  │ Ko-fi widget   │ standard donation button, not a concern, and only loads when you open the  │&#xA;  │                │ options dialog&amp;#39;s &amp;#34;Support&amp;#34; tab.                                            │&#xA;  └────────────────┴────────────────────────────────────────────────────────────────────────────┘&#xA;&#xA;  Minor notes (not security concerns)&#xA;&#xA;  - The author has 18 other shared items on AnkiWeb, suggesting an active community member rather&#xA;  than a throwaway account.&#xA;  - The addon is relatively new (updated 2026-03-27) with 0 ratings so far, so there&amp;#39;s limited&#xA;  community vetting.&#xA;  - The code is a clean, well-documented fork of the established Robin-Haupt Auto-Sync addon.&#xA;&#xA;  Bottom line: The code does exactly what it claims — periodic background sync using Anki&amp;#39;s native&#xA;  sync mechanism. No signs of malicious intent, data exfiltration, backdoors, or obfuscated code.&#xA;&#xA;✻ Cooked for 2m 36s&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;I am not installing it though, I am happy with the second layer for now. ∎&lt;/p&gt;&#xA;&lt;p&gt;— § —&lt;/p&gt;&lt;p&gt;Reply via &lt;a href=&#34;mailto:serendipity@perrotta.dev?subject=Reply to: anki: auto-sync&#34;&gt;email&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&#34;https://perrotta.dev/tags/anki/&#34;&gt;#anki&lt;/a&gt; &lt;a href=&#34;https://perrotta.dev/tags/dev/&#34;&gt;#dev&lt;/a&gt; &lt;a href=&#34;https://perrotta.dev/tags/pkm/&#34;&gt;#pkm&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Anki: corrupted database
      </title>
      <link>https://perrotta.dev/2026/04/anki-corrupted-database/</link>
      <pubDate>Wed, 08 Apr 2026 00:14:11 +0200</pubDate><author>serendipity@perrotta.dev (Thiago Perrotta)</author>
      <category>ai</category>
      <category>anki</category>
      <category>dev</category>
      <category>pkm</category>
      <category>serenity</category>
      <guid>https://perrotta.dev/2026/04/anki-corrupted-database/</guid>
      <description>&lt;p&gt;♠ Life is hard.&#xA;Today, when opening &lt;a href=&#34;https://apps.ankiweb.net/&#34;&gt;Anki&lt;/a&gt; on macOS:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code class=&#34;language-plaintext&#34;&gt;DbError { info: &amp;#34;SqliteFailure(Error { code: DatabaseCorrupt, extended_code: 11 }, Some(\&amp;#34;database disk image is malformed\&amp;#34;))&amp;#34;, kind: Other }&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Database corrupt? What is this, are we in the 2000s? Goodness.&lt;/p&gt;&#xA;&lt;p&gt;I have automatic backups enabled. For 4 years I haven&amp;rsquo;t needed them. Today&#xA;is the day. Never say never!&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code class=&#34;language-bash&#34;&gt;% ls -lt &amp;#34;$HOME/Library/Application Support/Anki2/Thiago/backups/&amp;#34;&#xA;total 234496&#xA;-rw-r--r--@ 1 tperrotta  staff  3911921 Apr  8 00:12 backup-2026-04-08-00.12.17.colpkg&#xA;-rw-r--r--@ 1 tperrotta  staff  3911921 Apr  7 00:16 backup-2026-04-07-00.16.26.colpkg&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;I try:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code class=&#34;language-bash&#34;&gt;open &amp;#34;$HOME/Library/Application Support/Anki2/Thiago/backups/backup-2026-04-07-00.16.26.colpkg&amp;#34;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;&amp;hellip;but apparently that file is corrupt as well.&lt;/p&gt;&#xA;&lt;p&gt;I am not particularly worried because I sync my notes to&#xA;&lt;a href=&#34;https://ankiweb.net/&#34;&gt;AnkiWeb&lt;/a&gt;. Even if the entire local collection were corrupt,&#xA;my flashcards are in the cloud.&lt;/p&gt;&#xA;&lt;p&gt;So I decided to simply start from scratch&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;https://perrotta.dev/2026/04/anki-corrupted-database/#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code class=&#34;language-bash&#34;&gt;mv ~/Library/Application\ Support/Anki2/Thiago/collection.anki2 ~/Library/Application\ Support/Anki2/Thiago/collection.anki2.corrupt&#xA;rm -f ~/Library/Application\ Support/Anki2/Thiago/collection.anki2-shm ~/Library/Application\ Support/Anki2/Thiago/collection.anki2-wal&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Then I open Anki.&lt;/p&gt;&#xA;&lt;p&gt;It prompts me to download my decks from AnkiWeb.&lt;/p&gt;&#xA;&lt;p&gt;And now everything works as usual! Last cleanup:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code class=&#34;language-bash&#34;&gt;trash ~/Library/Application\ Support/Anki2/Thiago/collection.anki2.corrupt&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;No idea why this has happened. First time. Life goes on.&lt;/p&gt;&#xA;&lt;p&gt;!next&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://perrotta.dev/2025/10/anki-find-all-suspended-flashcards/&#34;&gt;Previously&lt;/a&gt;. ∎&lt;/p&gt;&#xA;&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;&#xA;&lt;hr&gt;&#xA;&lt;ol&gt;&#xA;&lt;li id=&#34;fn:1&#34;&gt;&#xA;&lt;p&gt;The idea was mine. The decision was mine. The LLM suggested the command on&#xA;how to do so. I can still self-troubleshoot, &lt;em&gt;mmmkay&lt;/em&gt;?&amp;#160;&lt;a href=&#34;https://perrotta.dev/2026/04/anki-corrupted-database/#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;— § —&lt;/p&gt;&lt;p&gt;Reply via &lt;a href=&#34;mailto:serendipity@perrotta.dev?subject=Reply to: Anki: corrupted database&#34;&gt;email&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&#34;https://perrotta.dev/tags/ai/&#34;&gt;#ai&lt;/a&gt; &lt;a href=&#34;https://perrotta.dev/tags/anki/&#34;&gt;#anki&lt;/a&gt; &lt;a href=&#34;https://perrotta.dev/tags/dev/&#34;&gt;#dev&lt;/a&gt; &lt;a href=&#34;https://perrotta.dev/tags/pkm/&#34;&gt;#pkm&lt;/a&gt; &lt;a href=&#34;https://perrotta.dev/tags/serenity/&#34;&gt;#serenity&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Anki: find all suspended flashcards
      </title>
      <link>https://perrotta.dev/2025/10/anki-find-all-suspended-flashcards/</link>
      <pubDate>Wed, 08 Oct 2025 19:14:48 +0200</pubDate><author>serendipity@perrotta.dev (Thiago Perrotta)</author>
      <category>anki</category>
      <category>dev</category>
      <category>pkm</category>
      <category>serenity</category>
      <guid>https://perrotta.dev/2025/10/anki-find-all-suspended-flashcards/</guid>
      <description>&lt;p&gt;♠ The following queries are useful to find flashcards (notes or cards) in&#xA;&lt;a href=&#34;https://apps.ankiweb.net/&#34;&gt;Anki&lt;/a&gt; that you&amp;rsquo;re struggling with.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;is:suspended&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;tag:leech&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;The action item for each should be one of the following:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;do nothing for now&lt;/li&gt;&#xA;&lt;li&gt;delete the note / card if it&amp;rsquo;s no longer relevant e.g. perhaps it is barely&#xA;used&lt;/li&gt;&#xA;&lt;li&gt;enhance or rewrite the note / card for better retention and then unsuspend it&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;It&amp;rsquo;s a slow process. ∎&lt;/p&gt;&#xA;&lt;p&gt;— § —&lt;/p&gt;&lt;p&gt;Reply via &lt;a href=&#34;mailto:serendipity@perrotta.dev?subject=Reply to: Anki: find all suspended flashcards&#34;&gt;email&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&#34;https://perrotta.dev/tags/anki/&#34;&gt;#anki&lt;/a&gt; &lt;a href=&#34;https://perrotta.dev/tags/dev/&#34;&gt;#dev&lt;/a&gt; &lt;a href=&#34;https://perrotta.dev/tags/pkm/&#34;&gt;#pkm&lt;/a&gt; &lt;a href=&#34;https://perrotta.dev/tags/serenity/&#34;&gt;#serenity&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Anki: insert emoji on macOS
      </title>
      <link>https://perrotta.dev/2025/01/anki-insert-emoji-on-macos/</link>
      <pubDate>Sat, 11 Jan 2025 00:28:48 -0300</pubDate><author>serendipity@perrotta.dev (Thiago Perrotta)</author>
      <category>anki</category>
      <category>dev</category>
      <category>macos</category>
      <category>pkm</category>
      <guid>https://perrotta.dev/2025/01/anki-insert-emoji-on-macos/</guid>
      <description>&lt;p&gt;♠ There&amp;rsquo;s a longstanding bug in &lt;a href=&#34;https://apps.ankiweb.net/&#34;&gt;Anki&lt;/a&gt; on macOS: it&amp;rsquo;s&#xA;not possible to insert an emoji in the editor view via the system emoji picker.&lt;/p&gt;&#xA;&lt;p&gt;Whenever you click an emoji, the emoji picker closes whilst nothing is inserted.&lt;/p&gt;&#xA;&lt;p&gt;This has always annoyed me.&lt;/p&gt;&#xA;&lt;p&gt;Today I found a&#xA;&lt;a href=&#34;https://forums.ankiweb.net/t/macos-emoji-picker-not-working-in-editor-view/4061&#34;&gt;workaround&lt;/a&gt; (thanks Luc!):&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;For anyone who comes across this. I figured out a quick workaround. You have&#xA;to open the Emoji-Picker-Keyboard on your Mac and then select the Emoji and&#xA;pull it into the editor window with your mouse.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;It works indeed!&lt;/p&gt;&#xA;&lt;p&gt;My previous alternative was to use the emoji picker to insert an emoji in&#xA;another application (e.g. the Notes.app), and then manually cut and paste it. ∎&lt;/p&gt;&#xA;&lt;p&gt;— § —&lt;/p&gt;&lt;p&gt;Reply via &lt;a href=&#34;mailto:serendipity@perrotta.dev?subject=Reply to: Anki: insert emoji on macOS&#34;&gt;email&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&#34;https://perrotta.dev/tags/anki/&#34;&gt;#anki&lt;/a&gt; &lt;a href=&#34;https://perrotta.dev/tags/dev/&#34;&gt;#dev&lt;/a&gt; &lt;a href=&#34;https://perrotta.dev/tags/macos/&#34;&gt;#macos&lt;/a&gt; &lt;a href=&#34;https://perrotta.dev/tags/pkm/&#34;&gt;#pkm&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>★ Anki workflow
      </title>
      <link>https://perrotta.dev/2024/12/anki-workflow/</link>
      <pubDate>Mon, 23 Dec 2024 00:12:52 -0300</pubDate><author>serendipity@perrotta.dev (Thiago Perrotta)</author>
      <category>anki</category>
      <category>bestof</category>
      <category>dev</category>
      <category>pkm</category>
      <guid>https://perrotta.dev/2024/12/anki-workflow/</guid>
      <description>&lt;p&gt;♠ I&amp;rsquo;ve been using &lt;a href=&#34;https://apps.ankiweb.net/&#34;&gt;Anki&lt;/a&gt; since 2-3 years ago to keep up&#xA;with German vocabulary and grammar. I had originally started with Duolingo.&lt;/p&gt;&#xA;&lt;p&gt;In the beginning my workflow was quite basic.&#xA;Then I created &lt;a href=&#34;https://perrotta.dev/2024/02/anki-custom-language-card/&#34;&gt;custom language&lt;/a&gt; &lt;a href=&#34;https://perrotta.dev/2024/09/anki-custom-language-card-cont./&#34;&gt;cards&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;After you install Anki, you need to set up a Note Type to keep your flashcards&#xA;formatted as you like. Anki comes with a few basic Note Types, but they aren&amp;rsquo;t&#xA;suited for learning Japanese.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;(&lt;a href=&#34;https://tatsumoto.neocities.org/blog/setting-up-anki&#34;&gt;via&lt;/a&gt;). The advantage of&#xA;creating a custom note type (language card) is that I can format it the way I&#xA;want.&lt;/p&gt;&#xA;&lt;p&gt;On top of it I tweaked my Anki deck settings to optimize it for language learning.&lt;/p&gt;&#xA;&lt;p&gt;I adopted the &lt;a href=&#34;https://web.archive.org/web/20210203165239/https://massimmersionapproach.com/table-of-contents/anki/low-key-anki/intro&#34;&gt;Low-Key Anki&#xA;setup&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The Low-Key Anki setup is a series of counterintuitive simplifications one can&#xA;make to Anki&amp;rsquo;s algorithm that result in a significant boost in efficiency, as&#xA;well as a considerable reduction in the stress associated with reviewing cards&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Furthermore, Soren Bjornstad has helpfully written &lt;a href=&#34;https://controlaltbackspace.org/precise/&#34;&gt;some&#xA;tips&lt;/a&gt; about designing flashcards&#xA;effectively, some of which I gladly adopted.&lt;/p&gt;&#xA;&lt;p&gt;And last but not least, &lt;a href=&#34;https://refold.la/roadmap/stage-1/a/anki-setup&#34;&gt;Refold&lt;/a&gt;&#xA;provided me with a step-by-step breakdown on how to configure Anki for language&#xA;learning.&lt;/p&gt;&#xA;&lt;h2 id=&#34;references&#34;&gt;&#xA;  References&#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;https://perrotta.dev/2024/12/anki-workflow/#references&#34; aria-label=&#34;Link to this section&#34;&gt;#&lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://refold.la/roadmap/stage-1/a/anki-setup&#34;&gt;https://refold.la/roadmap/stage-1/a/anki-setup&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://web.archive.org/web/20210203165239/https://massimmersionapproach.com/table-of-contents/anki/low-key-anki/intro&#34;&gt;https://web.archive.org/web/20210203165239/https://massimmersionapproach.com/table-of-contents/anki/low-key-anki/intro&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://tatsumoto.neocities.org/blog/setting-up-anki.html&#34;&gt;https://tatsumoto.neocities.org/blog/setting-up-anki.html&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://controlaltbackspace.org/precise/&#34;&gt;https://controlaltbackspace.org/precise/&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://digitalwords.net/anki/low-key/&#34;&gt;https://digitalwords.net/anki/low-key/&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://michaelnotebook.com/mmsw/&#34;&gt;https://michaelnotebook.com/mmsw/&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://borretti.me/article/effective-spaced-repetition&#34;&gt;https://borretti.me/article/effective-spaced-repetition&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;∎&lt;/p&gt;&lt;p&gt;— § —&lt;/p&gt;&lt;p&gt;Reply via &lt;a href=&#34;mailto:serendipity@perrotta.dev?subject=Reply to: Anki workflow&#34;&gt;email&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&#34;https://perrotta.dev/tags/anki/&#34;&gt;#anki&lt;/a&gt; &lt;a href=&#34;https://perrotta.dev/tags/bestof/&#34;&gt;#bestof&lt;/a&gt; &lt;a href=&#34;https://perrotta.dev/tags/dev/&#34;&gt;#dev&lt;/a&gt; &lt;a href=&#34;https://perrotta.dev/tags/pkm/&#34;&gt;#pkm&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>★ Anki: custom language card (cont.)
      </title>
      <link>https://perrotta.dev/2024/09/anki-custom-language-card-cont./</link>
      <pubDate>Sun, 22 Sep 2024 13:02:39 +0200</pubDate><author>serendipity@perrotta.dev (Thiago Perrotta)</author>
      <category>anki</category>
      <category>bestof</category>
      <category>dev</category>
      <category>pkm</category>
      <guid>https://perrotta.dev/2024/09/anki-custom-language-card-cont./</guid>
      <description>&lt;p&gt;♠ This post builds upon the previous &lt;a href=&#34;https://perrotta.dev/2024/02/anki-custom-language-card/&#34;&gt;Anki: custom language card&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;searching-word-boundaries&#34;&gt;&#xA;  Searching word boundaries&#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;https://perrotta.dev/2024/09/anki-custom-language-card-cont./#searching-word-boundaries&#34; aria-label=&#34;Link to this section&#34;&gt;#&lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;When searching for a word such as &lt;em&gt;Mann&lt;/em&gt;, results such as &lt;em&gt;Mannschaft&lt;/em&gt; come up.&lt;/p&gt;&#xA;&lt;p&gt;To search accounting for the word boundary, like a typical &lt;code&gt;\bMann\b&lt;/code&gt; regex, use&#xA;&lt;code&gt;w:&lt;/code&gt;. In this example: &lt;code&gt;w:Mann&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;searching-ignoring-accents&#34;&gt;&#xA;  Searching ignoring accents&#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;https://perrotta.dev/2024/09/anki-custom-language-card-cont./#searching-ignoring-accents&#34; aria-label=&#34;Link to this section&#34;&gt;#&lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;When searching for a word with Umlauts such as &lt;em&gt;Über&lt;/em&gt;, you should type it&#xA;exactly as is.&lt;/p&gt;&#xA;&lt;p&gt;If you are lazy or do not recall where the umlaut falls, perhaps you would think&#xA;of searching for &lt;em&gt;uber&lt;/em&gt;, however that does not work.&lt;/p&gt;&#xA;&lt;p&gt;To make it work, prepend &lt;code&gt;nc:&lt;/code&gt; to the word. In this case: &lt;code&gt;nc:uber&lt;/code&gt; will&#xA;properly match &lt;em&gt;über&lt;/em&gt;. NC stands for non-combining.&lt;/p&gt;&#xA;&lt;h2 id=&#34;searching-word-boundaries-whilst-ignoring-accents&#34;&gt;&#xA;  Searching word boundaries &lt;strong&gt;whilst&lt;/strong&gt; ignoring accents&#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;https://perrotta.dev/2024/09/anki-custom-language-card-cont./#searching-word-boundaries-whilst-ignoring-accents&#34; aria-label=&#34;Link to this section&#34;&gt;#&lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Is it possible to combine the two aforementioned operators? For example, to&#xA;match &lt;em&gt;für&lt;/em&gt;. Unfortunately, &lt;a href=&#34;https://stackoverflow.com/questions/79011851/anki-how-to-match-while-using-both-w-and-nc-simultaneously&#34;&gt;it is&#xA;not&lt;/a&gt;.&#xA;Anki does not support &lt;code&gt;w:nc:fur&lt;/code&gt; nor &lt;code&gt;nc:w:fur&lt;/code&gt;, which is unfortunate. &lt;em&gt;Schade&lt;/em&gt;!&lt;/p&gt;&#xA;&lt;p&gt;In this case the best compromise would be to search for &lt;code&gt;w:für&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;adding-images-to-flashcards&#34;&gt;&#xA;  Adding images to flashcards&#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;https://perrotta.dev/2024/09/anki-custom-language-card-cont./#adding-images-to-flashcards&#34; aria-label=&#34;Link to this section&#34;&gt;#&lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;It is pretty straightforward: Right click the image in your favorite web&#xA;browser, copy it, and then paste it (Ctrl/Cmd + V) into Anki. The image is&#xA;automatically imported.&lt;/p&gt;&#xA;&lt;p&gt;No-brainer image sources:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://dict.cc/&#34;&gt;dict.cc&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://images.google.com/&#34;&gt;Google Images&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Nowadays it would also be natural&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;https://perrotta.dev/2024/09/anki-custom-language-card-cont./#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt; to use &amp;ldquo;AI&amp;rdquo; to generate images.&lt;/p&gt;&#xA;&lt;h2 id=&#34;providing-examples-style&#34;&gt;&#xA;  Providing examples: style&#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;https://perrotta.dev/2024/09/anki-custom-language-card-cont./#providing-examples-style&#34; aria-label=&#34;Link to this section&#34;&gt;#&lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;To illustrate with a concrete example:&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;1&lt;/strong&gt;: &lt;u&gt;Ja&lt;/u&gt;, genau.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;2&lt;/strong&gt;: Das ist &lt;u&gt;ja&lt;/u&gt; komisch.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;Affirmative&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;The structure:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Bold&lt;/strong&gt; numbers to disambiguate&lt;/li&gt;&#xA;&lt;li&gt;&lt;u&gt;Underscore&lt;/u&gt; the word in question to emphasize it&lt;/li&gt;&#xA;&lt;li&gt;&lt;em&gt;Italicize&lt;/em&gt; everything that is meta or an explanation about the word&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;To highlight substrings, e.g. &lt;em&gt;Mann&lt;/em&gt; in &lt;em&gt;Mannschaft&lt;/em&gt;, use underscores&lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;https://perrotta.dev/2024/09/anki-custom-language-card-cont./#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;tags&#34;&gt;&#xA;  Tags&#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;https://perrotta.dev/2024/09/anki-custom-language-card-cont./#tags&#34; aria-label=&#34;Link to this section&#34;&gt;#&lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;I seldom tag notes because there is no need for categorization, all cards are&#xA;treated the same way. Tagging is only useful in two scenarios:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;for grouping / retrieval: for example, if you want to make custom study&#xA;sessions for a specific domain / area (e.g. animals, programming, trips)&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;for provenance annotations: to make it easier to remember where a given note&#xA;came from (e.g. &amp;ldquo;textbook&amp;rdquo;, &amp;ldquo;my german teacher&amp;rdquo;, &amp;ldquo;blog&amp;rdquo;, &amp;ldquo;podcast&amp;rdquo;, &amp;ldquo;work&amp;rdquo;)&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Adding tags creates the burden of managing and standardizing them. You do not&#xA;want to spend valuable mental effort derailing from your main task.&lt;/p&gt;&#xA;&lt;h2 id=&#34;sources&#34;&gt;&#xA;  Sources&#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;https://perrotta.dev/2024/09/anki-custom-language-card-cont./#sources&#34; aria-label=&#34;Link to this section&#34;&gt;#&lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://docs.ankiweb.net/searching.html&#34;&gt;https://docs.ankiweb.net/searching.html&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;&#xA;&lt;hr&gt;&#xA;&lt;ol&gt;&#xA;&lt;li id=&#34;fn:1&#34;&gt;&#xA;&lt;p&gt;Albeit deeply unnecessary and wasteful (energy-wise).&amp;#160;&lt;a href=&#34;https://perrotta.dev/2024/09/anki-custom-language-card-cont./#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li id=&#34;fn:2&#34;&gt;&#xA;&lt;p&gt;This principle is not strict. I often interchange bold and underscore.&#xA;Choose whichever feels more natural in the appropriate context.&amp;#160;&lt;a href=&#34;https://perrotta.dev/2024/09/anki-custom-language-card-cont./#fnref:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;∎&lt;/p&gt;&lt;p&gt;— § —&lt;/p&gt;&lt;p&gt;Reply via &lt;a href=&#34;mailto:serendipity@perrotta.dev?subject=Reply to: Anki: custom language card (cont.)&#34;&gt;email&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&#34;https://perrotta.dev/tags/anki/&#34;&gt;#anki&lt;/a&gt; &lt;a href=&#34;https://perrotta.dev/tags/bestof/&#34;&gt;#bestof&lt;/a&gt; &lt;a href=&#34;https://perrotta.dev/tags/dev/&#34;&gt;#dev&lt;/a&gt; &lt;a href=&#34;https://perrotta.dev/tags/pkm/&#34;&gt;#pkm&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>★ Anki: custom language card
      </title>
      <link>https://perrotta.dev/2024/02/anki-custom-language-card/</link>
      <pubDate>Sat, 03 Feb 2024 13:02:21 -0300</pubDate><author>serendipity@perrotta.dev (Thiago Perrotta)</author>
      <category>anki</category>
      <category>bestof</category>
      <category>dev</category>
      <category>pkm</category>
      <guid>https://perrotta.dev/2024/02/anki-custom-language-card/</guid>
      <description>&lt;p&gt;♠ The more time you spent playing with &lt;a href=&#34;https://apps.ankiweb.net/&#34;&gt;Anki&lt;/a&gt;, the&#xA;more opinionated you become.&lt;/p&gt;&#xA;&lt;p&gt;Upon reading &lt;a href=&#34;https://fluent-forever.com/index.html&#34;&gt;Fluent Forever&lt;/a&gt; by Gabriel&#xA;Wyner, I got an itch to create my own Anki note template for learning&#xA;languages.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-template&#34;&gt;&#xA;  The template&#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;https://perrotta.dev/2024/02/anki-custom-language-card/#the-template&#34; aria-label=&#34;Link to this section&#34;&gt;#&lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;There&amp;rsquo;s no point explaining how to create a new template; the excellent &lt;a href=&#34;https://docs.ankiweb.net/templates/intro.html&#34;&gt;Anki&#xA;documentation&lt;/a&gt; already does so.&#xA;Instead, I&amp;rsquo;ll just list and explain the template I created.&lt;/p&gt;&#xA;&lt;p&gt;The template is called &amp;ldquo;Deutsch Language Card 🇩🇪&amp;rdquo;. It has four fields:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Front&lt;/li&gt;&#xA;&lt;li&gt;Front Example&lt;/li&gt;&#xA;&lt;li&gt;Back&lt;/li&gt;&#xA;&lt;li&gt;Striked&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Front and Back come from the built-in template. There&amp;rsquo;s nothing special about&#xA;them. I use &amp;ldquo;Front&amp;rdquo; for the canonical term in the foreign language I&amp;rsquo;m&#xA;learning, and &amp;ldquo;Back&amp;rdquo; for the explanation in the base / native language I&amp;rsquo;m&#xA;mostly familiar with&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;https://perrotta.dev/2024/02/anki-custom-language-card/#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Here&amp;rsquo;s an example:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code class=&#34;language-plaintext&#34;&gt;Front: das Buch&#xA;Back: book 📚&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Whenever possible I include one or more emojis 😃 in the &amp;ldquo;Back&amp;rdquo; field.&lt;/p&gt;&#xA;&lt;p&gt;The &lt;strong&gt;canonicalization&lt;/strong&gt; of the &amp;ldquo;Front&amp;rdquo; field is important, and one of the best&#xA;(key, even!) features of Anki. It will smartly detect (and prevent!) duplicates&#xA;from being created. It is case sensitive, therefore it&amp;rsquo;s important to create&#xA;one convention and stick to it.&lt;/p&gt;&#xA;&lt;p&gt;&amp;ldquo;Front Example&amp;rdquo; is used to complement the &amp;ldquo;Front&amp;rdquo; field. It consists of one or&#xA;both of the following:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;A phrase or sentence containing the Front term.&lt;/li&gt;&#xA;&lt;li&gt;A picture representing the Front term.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;To increase overall retention, it&amp;rsquo;s always best to add cues familiar to your&#xA;context.&lt;/p&gt;&#xA;&lt;p&gt;Add phrases that resonate with you or that you find in textbooks or&#xA;blog posts that resonate with you. In my experience, adding random phrases is&#xA;not effective.&lt;/p&gt;&#xA;&lt;p&gt;Add images that represent well that you&amp;rsquo;re describing and that&#xA;resonate with you. Photos that you take yourself are also fair game!&lt;/p&gt;&#xA;&lt;p&gt;&amp;ldquo;Striked&amp;rdquo; is to disambiguate synonyms or false cognates. For example:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code class=&#34;language-plaintext&#34;&gt;Front: der Sturm&#xA;Back: storm ⛈️&#xA;Striked: das Gewitter, das Unwetter&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;When I am reviewing the Back card, I want to cue myself not to think about the&#xA;striked terms.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-source-code&#34;&gt;&#xA;  The source code&#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;https://perrotta.dev/2024/02/anki-custom-language-card/#the-source-code&#34; aria-label=&#34;Link to this section&#34;&gt;#&lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;h3 id=&#34;the-front-card&#34;&gt;&#xA;  The Front card&#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;https://perrotta.dev/2024/02/anki-custom-language-card/#the-front-card&#34; aria-label=&#34;Link to this section&#34;&gt;#&lt;/a&gt;&#xA;&lt;/h3&gt;&#xA;&#xA;&lt;pre&gt;&lt;code class=&#34;language-plaintext&#34;&gt;{{Front}} {{tts de_DE:Front}}&#xA;&#xA;{{#Front Example}}&#xA;&amp;lt;br&amp;gt;&#xA;&amp;lt;i&amp;gt;{{Front Example}}&amp;lt;/i&amp;gt; {{tts de_DE:Front Example}}&#xA;{{/Front Example}}&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;The front card includes a text-to-speech sample that is generated on-the-fly.&#xA;It works very well on macOS and iOS. In fact, that&amp;rsquo;s main reason why the&#xA;template is called &amp;ldquo;Deutsch Language Card&amp;rdquo; instead of just &amp;ldquo;Language Card&amp;rdquo;. The&#xA;text-to-speech engine is customized to have an accent in the given language.&#xA;For (High) German, that is &lt;code&gt;de_DE&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;h3 id=&#34;the-back-card&#34;&gt;&#xA;  The Back card&#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;https://perrotta.dev/2024/02/anki-custom-language-card/#the-back-card&#34; aria-label=&#34;Link to this section&#34;&gt;#&lt;/a&gt;&#xA;&lt;/h3&gt;&#xA;&#xA;&lt;pre&gt;&lt;code class=&#34;language-plaintext&#34;&gt;{{Back}}&#xA;&#xA;{{#Striked}}&#xA;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&#xA;&amp;lt;s&amp;gt;{{Striked}}&amp;lt;/s&amp;gt;&#xA;{{/Striked}}&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;The striked terms are &lt;del&gt;striked&lt;/del&gt;, as you would expect. ∎&lt;/p&gt;&#xA;&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;&#xA;&lt;hr&gt;&#xA;&lt;ol&gt;&#xA;&lt;li id=&#34;fn:1&#34;&gt;&#xA;&lt;p&gt;Interestingly I prefer to use English most of the time, even though it is&#xA;not my mother tongue.&amp;#160;&lt;a href=&#34;https://perrotta.dev/2024/02/anki-custom-language-card/#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;— § —&lt;/p&gt;&lt;p&gt;Reply via &lt;a href=&#34;mailto:serendipity@perrotta.dev?subject=Reply to: Anki: custom language card&#34;&gt;email&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&#34;https://perrotta.dev/tags/anki/&#34;&gt;#anki&lt;/a&gt; &lt;a href=&#34;https://perrotta.dev/tags/bestof/&#34;&gt;#bestof&lt;/a&gt; &lt;a href=&#34;https://perrotta.dev/tags/dev/&#34;&gt;#dev&lt;/a&gt; &lt;a href=&#34;https://perrotta.dev/tags/pkm/&#34;&gt;#pkm&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Anki: find all notes with an empty field
      </title>
      <link>https://perrotta.dev/2024/01/anki-find-all-notes-with-an-empty-field/</link>
      <pubDate>Mon, 29 Jan 2024 00:06:49 -0300</pubDate><author>serendipity@perrotta.dev (Thiago Perrotta)</author>
      <category>anki</category>
      <category>dev</category>
      <category>pkm</category>
      <guid>https://perrotta.dev/2024/01/anki-find-all-notes-with-an-empty-field/</guid>
      <description>&lt;p&gt;♠ Gabriel Wyner recommends, in its &lt;a href=&#34;https://fluent-forever.com/index.html&#34;&gt;Fluent&#xA;Forever&lt;/a&gt; book, that each&#xA;&lt;a href=&#34;https://apps.ankiweb.net/&#34;&gt;Anki&lt;/a&gt; note (card) has at least one image&#xA;associated to it. This is intended to improve overall retention.&lt;/p&gt;&#xA;&lt;p&gt;Back when I started my German Anki deck for language learning, I did not add&#xA;any images. Now I find myself slowly backfilling my already existing notes&#xA;with images. However, the more images I add, the harder it becomes to find&#xA;notes without images.&lt;/p&gt;&#xA;&lt;p&gt;Upon reading the &lt;a href=&#34;https://docs.ankiweb.net/&#34;&gt;Anki manual&lt;/a&gt; I figured out a way to find out which notes are still missing images:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Open Anki.&lt;/li&gt;&#xA;&lt;li&gt;Open the deck you want to modify – in my case, &lt;code&gt;Languages::German&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Click &amp;ldquo;Browse&amp;rdquo;.&lt;/li&gt;&#xA;&lt;li&gt;Type in &lt;code&gt;deck:current &amp;quot;Front Example:&amp;quot;&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;&amp;ldquo;Front Example&amp;rdquo; is the name of the field of my note template wherein I add images; you should replace it with the corresponding one you use. This syntax isn&amp;rsquo;t intuitive at all. Initially I was trying something like &lt;code&gt;-&amp;quot;Front Example:*&amp;quot;&lt;/code&gt;. ∎&lt;/p&gt;&#xA;&lt;p&gt;— § —&lt;/p&gt;&lt;p&gt;Reply via &lt;a href=&#34;mailto:serendipity@perrotta.dev?subject=Reply to: Anki: find all notes with an empty field&#34;&gt;email&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&#34;https://perrotta.dev/tags/anki/&#34;&gt;#anki&lt;/a&gt; &lt;a href=&#34;https://perrotta.dev/tags/dev/&#34;&gt;#dev&lt;/a&gt; &lt;a href=&#34;https://perrotta.dev/tags/pkm/&#34;&gt;#pkm&lt;/a&gt;&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
