<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Arno den Hond]]></title><description><![CDATA[Self-taught dev since childhood. Android dev since 2009, now using Kotlin &amp; Compose. Designed, developed &amp; published various apps. 

[About](about) - [P]]></description><link>https://arnodenhond.com</link><generator>RSS for Node</generator><lastBuildDate>Wed, 15 Apr 2026 19:53:04 GMT</lastBuildDate><atom:link href="https://arnodenhond.com/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[Rebuilding Marble Solitaire with Gemini: My First Experience with an Agentic AI in Android Studio]]></title><description><![CDATA[The era of AI-assisted coding is progressing. At first, working with AI meant copy-pasting suggestions from a chatbot into your IDE—useful, but clumsy. Now, with Gemini integrated into Android Studio, I experienced a glimpse of what the future of sof...]]></description><link>https://arnodenhond.com/rebuilding-marble-solitaire-with-gemini-my-first-experience-with-an-agentic-ai-in-android-studio</link><guid isPermaLink="true">https://arnodenhond.com/rebuilding-marble-solitaire-with-gemini-my-first-experience-with-an-agentic-ai-in-android-studio</guid><dc:creator><![CDATA[Arno den Hond]]></dc:creator><pubDate>Tue, 23 Sep 2025 10:43:44 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1758498254963/38e812ad-0cc4-4e33-ba1a-1a26386308bb.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>The era of AI-assisted coding is progressing. At first, working with AI meant copy-pasting suggestions from a chatbot into your IDE—useful, but clumsy. Now, with Gemini integrated into Android Studio, I experienced a glimpse of what the future of software development might look like: an agentic coding assistant that can see your project, understand its structure, and directly make changes across code and configuration files. It’s a promising leap forward, even if the technology still causes plenty of developer frustration along the way.</p>
<hr />
<h3 id="heading-what-makes-an-ai-agentic">What Makes an AI <em>Agentic</em>?</h3>
<p>The value of an agentic assistant lies in context and interaction. Rather than blindly generating snippets, Gemini continuously reads the state of your project, reasons about it, and applies changes itself. This bi-directional interaction between the AI’s understanding, its suggestions, and its direct implementation makes it feel less like autocomplete and more like pairing with a junior developer who knows their way around the project. In practice, this meant I could ask Gemini to set up a project structure for phone, Wear OS, and Android TV, and it handled the boilerplate with minimal intervention from me.</p>
<hr />
<h3 id="heading-reviving-an-old-game-across-platforms">Reviving an Old Game Across Platforms</h3>
<p>For my test project, I chose an old app: peg solitaire. The game is simple but challenging: you move by jumping one marble over another, removing the jumped piece, on a cross-shaped board. There’s no opponent, just the puzzle itself, with the goal of ending with a single marble in the center.</p>
<p>While the phone and Wear OS versions were straightforward, Android TV introduced new complexity. Without touch controls, interaction had to be rethought entirely for the d-pad remote. This required defining explicit states: moving a selection, picking up a marble, choosing a jump direction, and executing the move. Impressively, Gemini handled the development of this navigation model without my stepping in—a task that would have been tedious to wire up by hand.</p>
<hr />
<h3 id="heading-where-things-fell-apart">Where Things Fell Apart</h3>
<p>The excitement wasn’t without setbacks. I had hoped to ship the phone, Wear OS, and TV versions together in the same app bundle under a single versionCode. Gemini agreed that this was possible and confidently generated step-by-step instructions for how to achieve it. Unfortunately, those instructions turned out to be hallucinations.</p>
<p>I wasted significant time following these false leads. I restructured the project into libraries, creating dynamic features and later build flavors, and pushing uploads to the Play Store only to discover, each time at the very last minute, that none of it worked. This is the double-edged sword of today’s AI tools: they’re persuasive and helpful up to a point, but they can also lead you deep into dead ends.</p>
<hr />
<h3 id="heading-looking-ahead">Looking Ahead</h3>
<p>Despite the frustration, the potential is obvious. An AI that can work directly inside your IDE, understand context, and manage files and configurations is far more powerful than one that only outputs code snippets. But cloud-based assistants come with tradeoffs. I’d prefer not to send my code off-device, and my local machine has sufficient memory available for handling larger projects.</p>
<p>That’s why for my next experiment, I plan to try a local, offline agentic assistant—something like <a target="_blank" href="http://Continue.dev">Continue.dev</a>, which integrates with IntelliJ. If Gemini showed me the promise of this new paradigm, a local tool might show me its true potential.</p>
<p><a target="_blank" href="https://arnodenhond.com/marblesolitaire">Info Page</a></p>
<p><a target="_blank" href="https://play.google.com/store/apps/details?id=arnodenhond.marblesolitairelite">Google Play</a></p>
<p><a target="_blank" href="https://gitlab.com/arnodenhond/marblesolitaire">GitLab</a></p>
]]></content:encoded></item><item><title><![CDATA[Vibe Coding ImageShortcut]]></title><description><![CDATA[I decided to give "vibe coding" a try and it really works! It was like pair programming with a very experienced developer who has minor brain damage. I used ChatGPT 5 with assistance of Android Studio's Gemini bot.
I started small by rebooting one of...]]></description><link>https://arnodenhond.com/vibe-coding-imageshortcut</link><guid isPermaLink="true">https://arnodenhond.com/vibe-coding-imageshortcut</guid><dc:creator><![CDATA[Arno den Hond]]></dc:creator><pubDate>Mon, 08 Sep 2025 06:58:29 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1757314740886/29d262e2-78bd-4856-8b1a-123fc7b66bd6.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I decided to give "vibe coding" a try and it really works! It was like pair programming with a very experienced developer who has minor brain damage. I used ChatGPT 5 with assistance of Android Studio's Gemini bot.</p>
<p>I started small by rebooting one of my old Android apps which makes shortcuts on your launcher (home screen) to specific images in your gallery for easy access. Unlike widgets, shortcuts can be grouped together in folders.</p>
<p>The 0.2 version of this app dates back to 2011 and was hosted on <a target="_blank" href="https://code.google.com/archive/p/image-shortcut/">Google Code</a>. It targeted Android 2.3 Gingerbread and was written by hand.</p>
<p>Major improvements over the old version:</p>
<ul>
<li><p><a target="_blank" href="https://developer.android.com/develop/ui/views/launch/shortcuts">Shortcut api</a> (pinned shortcuts)</p>
</li>
<li><p><a target="_blank" href="https://developer.android.com/training/data-storage/shared/photo-picker">Photo Picker</a> (no permissions required)</p>
</li>
<li><p>It now copies the media to a private directory and cleans up orphans when shortcuts get removed.</p>
</li>
</ul>
<p>In this first version, the shortcuts can only be created with a dedicated button but in the next versions I plan to bring back the <em>share from gallery</em> and widget style <em>create shortcut</em> features as well as cropping the shortcut's preview image. I'm not sure if the app should also support video files as these are often much bigger than images and keeping a copy would be inefficient.</p>
<p><a target="_blank" href="https://arnodenhond.com/imageshortcut">More Info Here</a></p>
<hr />
<p>I did have to give the A.I. some very specific instructions</p>
<ul>
<li><p>adaptive icon (otherwise the bitmap looks much worse)</p>
</li>
<li><p>create the shortcut on the main ui thread</p>
</li>
</ul>
<p>And I had to fix some strange errors</p>
<ul>
<li><p>missing imports</p>
</li>
<li><p>broken gradle files</p>
</li>
</ul>
<hr />
<p>The app is free and has no ads. Get it on <a target="_blank" href="https://play.google.com/store/apps/details?id=arnodenhond.imageshortcut">Google Play</a></p>
<p>You can see the source code and planned improvements on <a target="_blank" href="https://www.github.com/arnodenhond/ImageShortcut">GitHub</a></p>
<p>If you decide to try it out, please post your use case as a rating to inspire others.</p>
]]></content:encoded></item><item><title><![CDATA[TaskWarrior]]></title><description><![CDATA[Although I’m not always as productive as I’d like to be, I do keep a lot of to-do lists on a multitude of topics. Writing stuff down helps me to fall asleep.
In the past I used Google Tasks but I’m trying to reduce my use of Google products, so I’ve ...]]></description><link>https://arnodenhond.com/taskwarrior</link><guid isPermaLink="true">https://arnodenhond.com/taskwarrior</guid><category><![CDATA[task management]]></category><dc:creator><![CDATA[Arno den Hond]]></dc:creator><pubDate>Sun, 27 Jul 2025 09:21:19 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1753607908986/02bff60d-9825-479e-924c-0eb09847ef3a.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Although I’m not always as productive as I’d like to be, I do keep a lot of to-do lists on a multitude of topics. Writing stuff down helps me to fall asleep.</p>
<p>In the past I used <a target="_blank" href="https://tasks.google.com/tasks/">Google Tasks</a> but I’m trying to reduce my use of Google products, so I’ve switched to <a target="_blank" href="https://taskwarrior.org/">Gothenburg Bit Factory's TaskWarrior</a>.</p>
<p>There were a variety of options but I have chosen this one for these reasons:</p>
<ul>
<li><p>It’s open source</p>
</li>
<li><p>It’s offline-first</p>
</li>
<li><p>It has a way to sync to your phone</p>
</li>
</ul>
<p>As most of the other tools for TaskWarrior do not yet support version 3.0 I am still using 2.6.1 but I might upgrade in the future.</p>
<p>In the terminal I use <a target="_blank" href="https://kdheepak.com/taskwarrior-tui/">Dheepak Krishnamurthy's TUI</a> to manage my tasks but I also use the <a target="_blank" href="https://extensions.gnome.org/extension/1039/taskwhisperer/">TaskWhisperer Gnome extension</a>.</p>
<p>Although it is possible to self-host your task server I have decided to start by using <a target="_blank" href="https://wingtask.com/">Tim Case's WingTask</a> server which is free.</p>
<p>On my phone I use <a target="_blank" href="https://play.google.com/store/apps/details?id=com.ccextractor.taskwarriorflutter">CCExtractor’s TaskWarrior app</a>. Its not a very pretty app but it works.</p>
<p>TaskWarrior also has a companion app for time tracking called <a target="_blank" href="https://timewarrior.net/">TimeWarrior</a> but I dont use that (yet)</p>
<hr />
<p>So far I am quite pleased with TaskWarrior. Although I don’t use this feature yet, Task Warrior supports tags, which Google Tasks does not. I have also not yet started to use TaskWarrior’s Context feature but I plan to do so soon because I have quite a lot of Projects and I don’t always need to see all of them.</p>
<p>My self-imposed rules for TaskWarrior are:</p>
<ul>
<li><p>it’s not a museum. if a task has been untouched for a long time it has to go.</p>
</li>
<li><p>all tasks must be actionable. so no wishes or dreams</p>
</li>
<li><p>tasks must be atomic (projects are goals)</p>
</li>
<li><p>once i start using tags I will use it so I can batch tasks by person, place or time.</p>
</li>
</ul>
<p>Give it a try!</p>
<h1 id="heading-taskwarriororghttptaskwarriororg"><a target="_blank" href="http://taskwarrior.org">taskwarrior.org</a></h1>
]]></content:encoded></item><item><title><![CDATA[Happy Birthday arnodenhond.com]]></title><description><![CDATA[I first registered this domain on the 8th day of the 8th month of 2008 which is exactly 2⁴ years ago, more than a third of my life!
It was not the first domain I registered. I have also owned zodsoft.com and denhond.com but the former was free/ad sup...]]></description><link>https://arnodenhond.com/happy-birthday-arnodenhondcom</link><guid isPermaLink="true">https://arnodenhond.com/happy-birthday-arnodenhondcom</guid><dc:creator><![CDATA[Arno den Hond]]></dc:creator><pubDate>Thu, 08 Aug 2024 05:19:31 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1723094274401/8305cfc5-0527-4c23-9832-bd72362aa379.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I first registered this domain on the 8th day of the 8th month of 2008 which is exactly 2⁴ years ago, more than a third of my life!</p>
<p>It was not the first domain I registered. I have also owned zodsoft.com and denhond.com but the former was free/ad supported and I let the latter lapse.</p>
<p>I registered arnodenhond.com through Google Domains and to this day I still have free use of Google Workspaces (legacy free edition). I can receive email on this domain but i rarely use it. I might hook the domain up to Proton Mail in the future.</p>
<p><a target="_blank" href="https://who.is/whois/arnodenhond.com">https://who.is/whois/arnodenhond.com</a></p>
<p>Over the years the site has looked quite different even tough i used google sites most of the time. Here are some screenshots of my website over the years. (courtesy of archive.org)</p>
<p>The very first version hosted on Google Sites:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1723092053046/436f52e3-b825-4be4-9a2a-28d07bd012b7.png" alt="One of the first versions of my website" class="image--center mx-auto" /></p>
<p>My Android website: (I also used to host downloadable graphics themes for one of my apps straight from this website)</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1723093091298/150313de-ac02-4156-bb35-e84998fe43bf.png" alt class="image--center mx-auto" /></p>
<p>Unfortunately Google Analytics doesn't show statistics from before 2015 but at one point this site actually got a modest amount of visitors every day. People mostly came to download my GraphView component. (which has since been stolen by someone else!)</p>
<p>I had Google Adsense banners on it but I never made much money with that.</p>
<p>A few years ago Google upgraded Sites and the conversion didn't work so I started using a Trello board as website:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1723092675229/5bf9b7f7-9c5f-415f-aa9e-d78e2ed824a8.png" alt class="image--center mx-auto" /></p>
<p>Since 2 months I've been using Hashnode which is alright, so far.</p>
<p>I'm planning to post more articles to this blog in the future, so stay tuned!</p>
]]></content:encoded></item><item><title><![CDATA[New Hardware Review]]></title><description><![CDATA[It has now been about a month since I got some new equipment.

System 76 Serval WS

Pixel 8 Pro



After 15 years of being an MacBook user I went back to my Linux roots.
When thinking about which new laptop to buy, I decided that I had had enough of ...]]></description><link>https://arnodenhond.com/new-hardware-review</link><guid isPermaLink="true">https://arnodenhond.com/new-hardware-review</guid><category><![CDATA[system 76]]></category><category><![CDATA[pixel 8 pro]]></category><dc:creator><![CDATA[Arno den Hond]]></dc:creator><pubDate>Sun, 14 Jul 2024 06:21:39 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1720938399760/99cfa87a-eff7-4a59-8073-12acaa496138.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>It has now been about a month since I got some new equipment.</p>
<ul>
<li><p>System 76 Serval WS</p>
</li>
<li><p>Pixel 8 Pro</p>
</li>
</ul>
<hr />
<p>After 15 years of being an MacBook user I went back to my Linux roots.</p>
<p>When thinking about which new laptop to buy, I decided that I had had enough of Apple's high prices and lack of customization options.</p>
<p>I've considered getting a Puri.sm laptop but I wanted a bigger screen, a faster CPU and more RAM.</p>
<p>System76 seemed to embrace the open-source philosophy much more strongly.</p>
<p>I'm giving the Ubuntu based Pop!_OS a try but I might install a different distro at some point.</p>
<p>Yes, I had to use the terminal to do various customizations, but I actually like that!</p>
<p>My old MBP had only 2 USB-C ports but in addition to that i now also have 2 old-fashioned USB ports, an SDcard slot, an Ethernet port, HDMI and video out port .</p>
<p>I got 96 GB DDR5 5600 MHz RAM and 4 TB PCIe4 M.2 SSD storage which is more than i will be needing in the foreseeable future. There's space left for a second SSD.</p>
<p>It has a state of the art i9-14900HX CPU and i'm not experiencing any speed issues</p>
<p>I got the 17.3" Matte 2K QHD (240Hz) display. They also have a higher resolution one but I really dont need it. It's ginormous compared to my old 13" MBP.</p>
<p>One thing that I don't like so much is the loud fan.</p>
<p>Occasionally the track pad seems to get stuck for a second, and I have not yet figured out why this happens.</p>
<p>Although it's purely cosmetic, I love the colorful keyboard backlight.</p>
<p>System76 fully supports the right to repair.</p>
<p><img src="https://tech-docs.system76.com/models/serw13/img/components-highlighted.webp" alt class="image--center mx-auto" /></p>
<p><a target="_blank" href="https://tech-docs.system76.com/models/serw13/README.html">https://tech-docs.system76.com/models/serw13/README.html</a></p>
<hr />
<p>I've been using a pixel 5 since January 2021 and it stopped receiving security updates so it has become unsafe for the most critical tasks.</p>
<p>Decided to get the pro version of the Pixel 8 as it has a telephoto and ultrawide lens.</p>
<p>I enjoy the AI features and I'm eager to see how these features will improve in the future.</p>
<p>This phone is supposed to get 7 years of updates so keeping the battery between 25~75% to make it last 7 years.</p>
<p>Since the latest update, it allows connecting to an HDMI device, so I want to try out desktop mode</p>
]]></content:encoded></item><item><title><![CDATA[Irregular Countdown Calendar]]></title><description><![CDATA[I realized that my life needs a balance between regularity and irregularity.
Weeks and months provide regularity and to have an element of irregularity I have created an Arduino project to show the number of days remaining until my age in days (not y...]]></description><link>https://arnodenhond.com/irregular-countdown-calendar</link><guid isPermaLink="true">https://arnodenhond.com/irregular-countdown-calendar</guid><category><![CDATA[arduino]]></category><category><![CDATA[calendar]]></category><dc:creator><![CDATA[Arno den Hond]]></dc:creator><pubDate>Tue, 18 Jun 2024 09:11:04 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1718704875784/3b2dc778-1e30-4e3b-ac18-1cc3df512649.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I realized that my life needs a balance between regularity and irregularity.</p>
<p>Weeks and months provide regularity and to have an element of irregularity I have created an Arduino project to show the number of days remaining until my age in days (not years) is a prime number.</p>
<p>Since prime numbers appear at irregular intervals, this will divide my life into segeents of irregular length.</p>
<p>On irregular days I might perform irrational activities such as gambling, praying, dancing or arguing.</p>
<p>The number of days remaing is displayed as a <a target="_blank" href="https://keithbriggs.info/matula.html">Matula Tree</a>. These characters are stored in PROGMEM.</p>
<p>On days where my age is a prime number (an irregular day) the screen will twinkle.</p>
<p>Currently my age in days is around 16000~17000 and primes appear on average every 8 days. A maximal prime gap will appear in ~10 years and will be 44 days long.</p>
<p>To calculate the next prime (until i'm ~100 years old) its only necessary to test numbers for divisibility by the first ~50 primes.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/58BC__LPfAE">https://youtu.be/58BC__LPfAE</a></div>
<p> </p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/UfQskl_oUsU">https://youtu.be/UfQskl_oUsU</a></div>
<p> </p>
<h1 id="heading-components-used">Components used</h1>
<ul>
<li><p>Arduino Nano</p>
</li>
<li><p>RTC DS1307 Clock module</p>
</li>
<li><p>Mod4 Max7219 8x32LED Matrix</p>
</li>
</ul>
<h1 id="heading-libraries-used">Libraries used</h1>
<p><a target="_blank" href="https://inductive-kickback.com/projects/chronos/">Chronos Library</a> to calculate number of elapsed days.</p>
<h1 id="heading-serial-io">Serial I/O</h1>
<p>Connect to phone <a target="_blank" href="https://play.google.com/store/apps/details?id=de.kai_morich.serial_usb_terminal">Serial USB Terminal</a></p>
<p>output: current date, days until next prime</p>
<p>input: new current date (RTC does not support time zones)</p>
<h1 id="heading-planned-improvements">Planned improvements</h1>
<ul>
<li><p>To resemble pendulum clock, use a sine wave to swing the number across the display rather than bouncing it.</p>
</li>
<li><p>To make the clock seem more lively on prime days, use a sine wave to gradually increase and decrease amount of twinkles every 4 seconds.</p>
</li>
<li><p>Use EEPROM to store led intensity level.</p>
</li>
<li><p>Use EEPROM to store start date.</p>
</li>
<li><p>Perhaps use the parola's font mechanism to store the numbers.</p>
</li>
<li><p>Count down to even more irregular twin primes.</p>
</li>
</ul>
<p><a target="_blank" href="https://github.com/arnodenhond/IrregularClock">https://github.com/arnodenhond/IrregularClock</a></p>
]]></content:encoded></item></channel></rss>