<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Mobile | Antoine Weill--Duflos</title>
    <link>https://antoine.weill-duflos.fr/en/tag/mobile/</link>
      <atom:link href="https://antoine.weill-duflos.fr/en/tag/mobile/index.xml" rel="self" type="application/rss+xml" />
    <description>Mobile</description>
    <generator>Hugo Blox Builder (https://hugoblox.com)</generator><language>en-us</language><lastBuildDate>Mon, 04 May 2026 00:00:00 +0000</lastBuildDate>
    <image>
      <url>https://antoine.weill-duflos.fr/media/icon_hu_d686267daab28486.png</url>
      <title>Mobile</title>
      <link>https://antoine.weill-duflos.fr/en/tag/mobile/</link>
    </image>
    
    <item>
      <title>KataMarrant</title>
      <link>https://antoine.weill-duflos.fr/en/project/katamarrant/</link>
      <pubDate>Mon, 04 May 2026 00:00:00 +0000</pubDate>
      <guid>https://antoine.weill-duflos.fr/en/project/katamarrant/</guid>
      <description>&lt;p&gt;KataMarrant is a small judo training app I build on the side. The goal is narrow and concrete: drill the 40 Gokyo no Waza, the classical Kodokan set of throws every judoka is expected to know by name, in short daily sessions. The app runs on Windows, macOS, Linux, Android, and iOS from a single Tauri 2 codebase, with vanilla JS on the frontend and Rust on the backend.&lt;/p&gt;
&lt;p&gt;There are four practice modes. &lt;strong&gt;One question&lt;/strong&gt; is the lowest-friction button on the home screen, for the moments when I have less than thirty seconds. &lt;strong&gt;Rafale&lt;/strong&gt; is a ten-question burst, the warm-up I do on the metro. &lt;strong&gt;Drill (chrono)&lt;/strong&gt; is a timed mode with a per-question countdown, including an audio variant where the technique name is read aloud and you pick the matching description. &lt;strong&gt;Browse the 40 techniques&lt;/strong&gt; is the reference catalogue, grouped by kyo, with romaji, kanji, the French translation, and a curated demo video for each throw.&lt;/p&gt;
&lt;p&gt;The quiz logic borrows the basics from spaced repetition: techniques you miss surface more often, a six-question cooldown prevents back-to-back repeats, and per-technique mastery scores follow you across devices when sync is enabled. Sync is opt-in, magic-link only, with no passwords stored anywhere. A daily goal, a streak counter, an XP curve, and a small grid of unlockable achievements sit on the home screen, borrowing from a decade of language-learning and fitness apps.&lt;/p&gt;
&lt;p&gt;The technique illustrations are extracted from the &lt;a href=&#34;https://commons.wikimedia.org/wiki/File:Gokyo-no-waza.jpg&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Gokyo no Waza plate&lt;/a&gt; on Wikimedia Commons by user Mtwist (CC BY-SA). The reference videos are curated by &lt;a href=&#34;https://judo.how/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;judo.how&lt;/a&gt;. The project is open source, not affiliated with the Kodokan or any judo federation, and is documented on this site in a &lt;a href=&#34;https://antoine.weill-duflos.fr/post/katamarrant-why/&#34;&gt;series of build posts&lt;/a&gt;.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Building KataMarrant, Part 1: A Black Belt, 40 Throws, and the Gap I Did Not Want to Hide</title>
      <link>https://antoine.weill-duflos.fr/en/post/katamarrant-why/</link>
      <pubDate>Mon, 04 May 2026 00:00:00 +0000</pubDate>
      <guid>https://antoine.weill-duflos.fr/en/post/katamarrant-why/</guid>
      <description>&lt;p&gt;















&lt;figure  id=&#34;figure-katamarrant-home-screen-on-android-level-5-two-day-streak-16-of-10-questions-done-today-four-practice-modes-and-a-grid-of-locked-and-unlocked-achievements&#34;&gt;
  &lt;div class=&#34;d-flex justify-content-center&#34;&gt;
    &lt;div class=&#34;w-100&#34; &gt;&lt;img alt=&#34;KataMarrant home screen on Android, showing daily progress, the four practice modes, and the achievements grid&#34; srcset=&#34;
               /en/post/katamarrant-why/featured_hu_2b5de9cded2f7d1e.webp 400w,
               /en/post/katamarrant-why/featured_hu_ebbab4787818ab47.webp 760w,
               /en/post/katamarrant-why/featured_hu_561299786ecea654.webp 1200w&#34;
               src=&#34;https://antoine.weill-duflos.fr/en/post/katamarrant-why/featured_hu_2b5de9cded2f7d1e.webp&#34;
               width=&#34;342&#34;
               height=&#34;760&#34;
               loading=&#34;lazy&#34; data-zoomable /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;figcaption&gt;
      KataMarrant home screen on Android. Level 5, two-day streak, 16 of 10 questions done today, four practice modes, and a grid of locked and unlocked achievements.
    &lt;/figcaption&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 id=&#34;the-first-post-in-a-small-series&#34;&gt;The first post in a small series&lt;/h2&gt;
&lt;p&gt;This is the first post in a series I am writing about &lt;a href=&#34;https://github.com/Leicas/KataMarrant&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;strong&gt;KataMarrant&lt;/strong&gt;&lt;/a&gt;, a small judo training app I have been building on the side. Future posts will cover the build (Tauri 2 on Android, Rust sync server, magic-link auth, no passwords), the design choices (offline-first, spaced repetition with cooldowns, why I picked vanilla JS over a framework), and what I learned trying to put a personal app on the Play Store. This first one is just the why. The rest of the series only makes sense if I am honest about that part first.&lt;/p&gt;
&lt;h2 id=&#34;a-throw-i-can-do-a-name-i-cannot-say&#34;&gt;A throw I can do, a name I cannot say&lt;/h2&gt;
&lt;p&gt;I did judo as a kid and a teenager, then I stopped. For about twenty years I did not set foot on a tatami. A few months ago I started again, in a club here in Canada, and the muscle memory came back faster than I had any right to expect. The names did not. The shape of a throw is the kind of thing your body does not really forget. The vocabulary around the throws is exactly the kind of thing a twenty-year gap erases.&lt;/p&gt;
&lt;p&gt;The black belt is the long-term reason all of this matters. The technical requirement is roughly the same on both sides of the Atlantic: you are expected to know the &lt;strong&gt;40 Gokyo no Waza&lt;/strong&gt;, the classical set of throws codified at the Kodokan, in five groups of eight. You should be able to name a technique, demonstrate it, recognise it when someone else does it, and explain when it works. I am not at the grading yet. I am at the part before the grading where you stop pretending to yourself about what you actually know.&lt;/p&gt;
&lt;p&gt;The honest version of where I was, a few weeks after restarting, looks roughly like this. I could &lt;em&gt;do&lt;/em&gt; most of the 40 throws. Show me a partner, give me a grip, and I will land a passable version of the technique. What I could not do, reliably, was name them. Show me a still picture or a short clip and ask which one it is, and I would freeze on roughly half of them. The first kyo was decent because it is the one we drill the most. The fifth was a mess. The middle three were a coin flip. I could feel the shape of a throw in my body without my mouth having a label for it.&lt;/p&gt;
&lt;p&gt;The other thing twenty years of absence does to you is that you walk into a club and the people who are visibly younger than you, sometimes by a lot, know the names better than you do. That is not a complaint. It is the truth of restarting in your late thirties next to teenagers who have been at this every week of their lives. There is something genuinely useful about that mismatch: it kills your ego in the right way and tells you exactly which homework you have to do. Mine was not the throws. It was the vocabulary attached to them.&lt;/p&gt;
&lt;p&gt;That gap is annoying because it is the gap between &lt;em&gt;practising&lt;/em&gt; judo and &lt;em&gt;knowing&lt;/em&gt; judo. It is also the gap that grading examiners poke at first. They are not going to ask you to invent a throw. They are going to ask you to name and execute the one they pick. So the gap was specific, the goal was specific, and the fix was specific: I needed to drill recognition and recall, not technique. Recognition is mostly memory. Memory loves repetition.&lt;/p&gt;
&lt;h2 id=&#34;what-i-did-not-try-before-writing-any-code&#34;&gt;What I did not try before writing any code&lt;/h2&gt;
&lt;p&gt;The honest version of this section is that I skipped the part where you try the boring options first.&lt;/p&gt;
&lt;p&gt;I did not make paper flash cards. I did not load up Anki. I did not download three judo reference apps from the store and earnestly try to drill with them for two weeks. I had a clear picture in my head of the shape I wanted, I knew enough about how that shape gets built, and the path of least resistance for me, specifically, was to write it. That is not the standard advice you give someone with a learning problem, and if you are not a software developer the better advice is genuinely &amp;ldquo;use Anki for a month before you build anything.&amp;rdquo; But I am a software developer, the friction between &amp;ldquo;I want this thing&amp;rdquo; and &amp;ldquo;I have a working version of this thing&amp;rdquo; is much lower for me than it is for most people, and I have shipped enough side projects to know which ones survive. The ones that survive are the ones I use every day. So the actual question I asked myself was not &amp;ldquo;is there an app that does this.&amp;rdquo; It was &amp;ldquo;is there an app that I would open every day.&amp;rdquo; That is a much smaller bar to clear, and the answer was still no, so I started building.&lt;/p&gt;
&lt;p&gt;What I wanted was the &lt;strong&gt;Duolingo shape&lt;/strong&gt;. A daily nudge, a short session, a streak I would feel slightly bad about breaking, a few different game modes so the same content stays interesting, and statistics honest enough to tell me which throws I keep getting wrong. None of the judo apps I had glanced at had that shape, and the generic memorisation tools that do have that shape are not pre-loaded with the Gokyo, the kanji, the romaji, the French names, and a curated demo video for each throw. The content was the work. Once you commit to building the content you might as well build the wrapper around it that you actually want to use.&lt;/p&gt;
&lt;h2 id=&#34;an-older-inspiration-my-fathers-german-verb-quiz&#34;&gt;An older inspiration: my father&amp;rsquo;s German verb quiz&lt;/h2&gt;
&lt;p&gt;The shape of this app is not original. The idea is not even mine in the strict sense, because I did not have to invent it. When I was in school I had to learn the German strong verbs, the irregular ones, the long list every student of the language groans through at some point. My father, who is also a software developer, wrote me a small program that picked a random subset of the verbs and quizzed me on them. My German never reached great heights, which is on me, not on the program, and to be honest I have lost most of the strong verbs too. The funny part is that the one thing I do clearly remember from that whole period is the program itself, not the content it was supposed to drill into me. Whatever else that little tool did or did not achieve, the &lt;em&gt;technique&lt;/em&gt; (give the kid a daily quiz on a closed list, let the randomness do the work) went into long-term storage in my head and stayed there. KataMarrant is the same shape, applied to a different closed list, by the kid in question, now writing his own programs.&lt;/p&gt;
&lt;h2 id=&#34;why-i-am-the-right-person-to-build-this-and-why-that-is-the-whole-point&#34;&gt;Why I am the right person to build this (and why that is the whole point)&lt;/h2&gt;
&lt;p&gt;The boring answer to &amp;ldquo;why are you building yet another app&amp;rdquo; is: I do this for a living. I have spent the last decade shipping cross-platform software, including a few years building gamified haptic and training apps at &lt;a href=&#34;https://haply.co/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Haply&lt;/a&gt;, where the core of the job is taking a serious skill, breaking it into small repetitions, and making a person actually want to do those repetitions. The combination of &amp;ldquo;I know what makes a daily-use app sticky&amp;rdquo; and &amp;ldquo;I have a personal grade I am training for&amp;rdquo; is rare enough in my own life that not building this would have felt like waste.&lt;/p&gt;
&lt;p&gt;There is a more honest answer underneath that. &lt;strong&gt;Side projects work for me when they sit on the same axis as something I already care about.&lt;/strong&gt; I have a stack of unfinished side projects that died because they were technically interesting and personally irrelevant. The ones that live, including &lt;a href=&#34;https://antoine.weill-duflos.fr/post/komodo/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;my homelab&lt;/a&gt;, the &lt;a href=&#34;https://antoine.weill-duflos.fr/post/t-display-s3-amoled/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;bathroom dashboard&lt;/a&gt;, and now KataMarrant, all live because I actually use the result every day. The project does not have to be ambitious to survive. It has to be useful to one specific person, and I am that person. Build for an audience of one and the daily feedback loop sets your priorities for you.&lt;/p&gt;
&lt;p&gt;So I gave myself a tight brief. Cross-platform, because I want it on my phone &lt;em&gt;and&lt;/em&gt; my desktop. Offline-first, because I did not want a tool I am supposed to open every day to &lt;em&gt;require&lt;/em&gt; me to make an account first. Sync between phone and desktop is useful, and the app supports it, but it is opt-in and not the default. Boringly fast to launch, because the moment a quiz takes longer to open than my attention span lasts, the streak is dead. Open source, because I am not building a business, I am building a tool, and I would rather have a few other judoka improve it than gatekeep it.&lt;/p&gt;
&lt;h2 id=&#34;what-katamarrant-actually-is&#34;&gt;What KataMarrant actually is&lt;/h2&gt;
&lt;p&gt;The shortest description that fits on the side of a card: &lt;strong&gt;a judo flashcard quiz for the 40 Gokyo no Waza, on every device I own, that I will actually open every day.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;















&lt;figure  id=&#34;figure-a-quiz-question-the-illustration-is-from-the-gokyo-no-waza-plate-on-wikimedia-commons-by-mtwist-cc-by-sa-the-reveal-panel-shows-the-romaji-name-the-kanji-the-literal-french-translation-and-a-link-to-a-curated-demo-video&#34;&gt;
  &lt;div class=&#34;d-flex justify-content-center&#34;&gt;
    &lt;div class=&#34;w-100&#34; &gt;&lt;img alt=&#34;A quiz question on Android: a line drawing of two judoka mid-throw, three name options, the correct answer revealed below with the kanji and the French translation&#34; srcset=&#34;
               /en/post/katamarrant-why/quiz_hu_e9d043583cddd36c.webp 400w,
               /en/post/katamarrant-why/quiz_hu_75e8c0608764949d.webp 760w,
               /en/post/katamarrant-why/quiz_hu_7db30ce622b190fe.webp 1200w&#34;
               src=&#34;https://antoine.weill-duflos.fr/en/post/katamarrant-why/quiz_hu_e9d043583cddd36c.webp&#34;
               width=&#34;342&#34;
               height=&#34;760&#34;
               loading=&#34;lazy&#34; data-zoomable /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;figcaption&gt;
      A quiz question. The illustration is from the Gokyo no Waza plate on Wikimedia Commons, by Mtwist (CC BY-SA). The reveal panel shows the romaji name, the kanji, the literal French translation, and a link to a curated demo video.
    &lt;/figcaption&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;The core loop is what you would expect. The app shows me a technique, asks me which of three names matches it, and tells me whether I was right. Get it right, the technique mastery score moves up. Get it wrong, it surfaces more often in the next sessions. There is a six-question cooldown so I am not fed the same throw twice in a row, even if it is the worst one in my list. Recognition mode shows a still illustration. Audio mode plays a recorded clip of the name and asks me to pick the matching description, which is brutal in a useful way: it forces the romaji into my ear, not just my eye.&lt;/p&gt;
&lt;p&gt;There are four entry points on the home screen, which is a small choice that ended up mattering more than I expected.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;One question&lt;/strong&gt; is the lowest-friction button on the screen. It is for those moments when I have less than thirty seconds. Open the app, answer one question, close the app. That is enough to keep the streak alive.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rafale (10)&lt;/strong&gt; is a ten-question burst. This is the warm-up I do on the metro. It is the most-used mode by a wide margin, which I did not predict.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Drill (chrono)&lt;/strong&gt; is a timed mode with a per-question countdown bar. It is meant for when I have already studied and want to test myself under a small amount of pressure. It is also where the audio variant lives.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Browse the 40 techniques&lt;/strong&gt; is the reference mode. The whole catalogue, grouped by kyo, with romaji and kanji and the French translation and an embedded reference video for each. I expected this to be the headline feature. It is the least-used screen in the app. People who want to &lt;em&gt;learn&lt;/em&gt; the names want to be quizzed on them, not read about them.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A streak counter, a per-day goal (I picked ten questions, your mileage may vary), a level system tied to a small XP curve, and a grid of unlockable achievements sit on the home page. None of that is novel. It is all borrowed from a decade of language-learning apps, fitness apps, and mobile games that have already solved the problem of getting a human to come back tomorrow. Borrowing is the point.&lt;/p&gt;
&lt;h2 id=&#34;the-desktop-is-not-an-afterthought&#34;&gt;The desktop is not an afterthought&lt;/h2&gt;
&lt;p&gt;















&lt;figure  id=&#34;figure-desktop-ui-same-sqlite-database-same-quiz-logic-different-layout-tauri-2-lets-me-ship-the-same-rust-core-to-windows-macos-linux-android-and-ios-without-a-separate-codebase&#34;&gt;
  &lt;div class=&#34;d-flex justify-content-center&#34;&gt;
    &lt;div class=&#34;w-100&#34; &gt;&lt;img alt=&#34;The desktop window in dark mode, with a left sidebar (Home, Quiz, Rafale, Drill, List, Stats), today&amp;rsquo;s stats, mastery bars per kyo group, and the achievements grid&#34; srcset=&#34;
               /en/post/katamarrant-why/desktop_hu_1649828b9a0cc863.webp 400w,
               /en/post/katamarrant-why/desktop_hu_b31938cdbf447ba2.webp 760w,
               /en/post/katamarrant-why/desktop_hu_779860482263992e.webp 1200w&#34;
               src=&#34;https://antoine.weill-duflos.fr/en/post/katamarrant-why/desktop_hu_1649828b9a0cc863.webp&#34;
               width=&#34;760&#34;
               height=&#34;501&#34;
               loading=&#34;lazy&#34; data-zoomable /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;figcaption&gt;
      Desktop UI. Same SQLite database, same quiz logic, different layout. Tauri 2 lets me ship the same Rust core to Windows, macOS, Linux, Android, and iOS without a separate codebase.
    &lt;/figcaption&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;A judo app is obviously a phone-first app. I almost did not bother with desktop, then I built it anyway, and now the desktop window is where I do my longer review sessions. The reason is sync. If I quiz myself for thirty seconds in the morning on the phone and then sit at my desk to plan a class in the evening, the same throws I missed at breakfast bubble back up at the desk. The mastery scores follow me across devices. That is genuinely useful in a way the home-screen widget on a single device is not.&lt;/p&gt;
&lt;p&gt;The technical answer to &amp;ldquo;how is this on every platform&amp;rdquo; is &lt;strong&gt;Tauri 2&lt;/strong&gt;, which lets me ship the same Rust core and the same vanilla JS frontend to Windows, macOS, Linux, Android, and iOS. The frontend has no build step. The backend talks to a small SQLite database for stats and a quiz log. Sync is opt-in, magic-link, no passwords, hosted on a tiny Rust service I run myself. I will write that up properly in the next post in this series.&lt;/p&gt;
&lt;h2 id=&#34;a-drill-mode-that-drove-home-why-daily-matters&#34;&gt;A drill mode that drove home why daily matters&lt;/h2&gt;
&lt;p&gt;















&lt;figure  id=&#34;figure-drill-mode-in-audio-variant-the-app-reads-the-technique-name-aloud-you-have-ten-seconds-to-pick-the-matching-description-and-the-bar-across-the-top-burns-down-brutal-at-first-effective&#34;&gt;
  &lt;div class=&#34;d-flex justify-content-center&#34;&gt;
    &lt;div class=&#34;w-100&#34; &gt;&lt;img alt=&#34;The drill audio variant on Android. A countdown bar, the technique number and group, a play button, and three French descriptions to pick from&#34; srcset=&#34;
               /en/post/katamarrant-why/drill_hu_839fcd18f5d830d5.webp 400w,
               /en/post/katamarrant-why/drill_hu_8552f394c09a30f8.webp 760w,
               /en/post/katamarrant-why/drill_hu_77bda53060da8a39.webp 1200w&#34;
               src=&#34;https://antoine.weill-duflos.fr/en/post/katamarrant-why/drill_hu_839fcd18f5d830d5.webp&#34;
               width=&#34;342&#34;
               height=&#34;760&#34;
               loading=&#34;lazy&#34; data-zoomable /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;figcaption&gt;
      Drill mode in audio variant. The app reads the technique name aloud, you have ten seconds to pick the matching description, and the bar across the top burns down. Brutal at first. Effective.
    &lt;/figcaption&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;The drill mode is where the gamification trick that I borrowed from Haply hits hardest. The mechanic is unremarkable on its own: a chrono, a streak inside the session, an achievement for hitting ten correct in a row in audio mode (the achievement is called &lt;strong&gt;Sensei silencieux&lt;/strong&gt;, and yes, it is meant to be a small joke). What is remarkable, if you have not lived with this kind of mechanic before, is how quickly a daily two-minute drill stops being something you have to remember and starts being something you reach for the moment you have a free pocket of time.&lt;/p&gt;
&lt;p&gt;A few days in, the dashboard is already telling me something useful. Some groups are moving and others are not. I am getting better at parts of the list, not at all of it, and I can see exactly which parts. I knew the gap existed in a vague way before. The chart makes it specific. &lt;strong&gt;The act of building something measurable about my own progress was, by itself, a thing I could not have gotten out of paper flash cards.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;That is the why for the project. The black belt is the destination. The Gokyo gap is the problem in front of me right now. Drilling on the phone, every day, with a tool I would actually open, is the fix. Building it instead of buying it is partly because no app on the store had the exact shape I wanted, and partly because the kind of work I do during the day is the kind of work that turns &amp;ldquo;I wish there was an app for this&amp;rdquo; into a working app over a few weekends. &lt;strong&gt;Side projects survive when they are useful to a real person every day, and when the person who needs them is also the person who can build them.&lt;/strong&gt; That is the whole pitch for KataMarrant. The rest of this series is the build.&lt;/p&gt;
&lt;h2 id=&#34;what-is-next-in-the-series&#34;&gt;What is next in the series&lt;/h2&gt;
&lt;p&gt;In the next post I will get into the build. Tauri 2 is genuinely good and slightly cursed in the same breath, and there are a handful of decisions I made that would have saved me a week if I had known on day one. Topics I want to cover, roughly in the order they bit me:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Vanilla JS over a framework&lt;/strong&gt;, and why the no-build-step frontend is the right choice for an app this size.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Spaced repetition without a library&lt;/strong&gt;: the surprisingly small amount of arithmetic that makes the quiz feel adaptive without being annoying.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Magic-link auth and a Rust sync server&lt;/strong&gt;, with no passwords stored anywhere, ever.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Local notifications on Android via a custom Tauri plugin&lt;/strong&gt; wrapping WorkManager, and the matching iOS path that made me grow a beard.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Shipping a personal app to the Play Store&lt;/strong&gt;, and how unreasonably long and annoying that process is for a one-person side project. Specific traps I walked into so you can skip them.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If any of those sound interesting, the code is at &lt;a href=&#34;https://github.com/Leicas/KataMarrant&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;github.com/Leicas/KataMarrant&lt;/a&gt; and there is a &lt;a href=&#34;https://antoine.weill-duflos.fr/project/katamarrant/&#34;&gt;matching project page&lt;/a&gt; on this site.&lt;/p&gt;
&lt;p&gt;The technique illustrations in the app are extracted from the &lt;a href=&#34;https://commons.wikimedia.org/wiki/File:Gokyo-no-waza.jpg&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Gokyo no Waza plate&lt;/a&gt; by Wikimedia user Mtwist, used under CC BY-SA. The reference videos are curated by the excellent &lt;a href=&#34;https://judo.how/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;judo.how&lt;/a&gt;. The names and kanji are the standard ones. None of this work is affiliated with the Kodokan or with any judo federation. It is a personal training tool, written by one judoka in a hurry, for one judoka in a hurry.&lt;/p&gt;
</description>
    </item>
    
  </channel>
</rss>
