<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Leandro</title>
    <description>The latest articles on DEV Community by Leandro (@argenkiwi).</description>
    <link>https://dev.to/argenkiwi</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2966701%2F6f856850-20c7-4d34-8135-8f21c0704848.jpeg</url>
      <title>DEV Community: Leandro</title>
      <link>https://dev.to/argenkiwi</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/argenkiwi"/>
    <language>en</language>
    <item>
      <title>I have been experimenting with agent skills for software design patterns and the results have been very positive so far. 

I put together an Android (arch26) and Deno (ambler.ts) projects and the results are predictable while tests are written by default.</title>
      <dc:creator>Leandro</dc:creator>
      <pubDate>Fri, 17 Apr 2026 16:12:33 +0000</pubDate>
      <link>https://dev.to/argenkiwi/i-have-been-experimenting-with-agent-skills-for-software-design-patterns-and-the-results-have-been-j72</link>
      <guid>https://dev.to/argenkiwi/i-have-been-experimenting-with-agent-skills-for-software-design-patterns-and-the-results-have-been-j72</guid>
      <description></description>
    </item>
    <item>
      <title>Ambler: rules of engagement with coding agents</title>
      <dc:creator>Leandro</dc:creator>
      <pubDate>Thu, 31 Jul 2025 21:58:22 +0000</pubDate>
      <link>https://dev.to/argenkiwi/ambler-rules-of-engagement-with-coding-agents-194j</link>
      <guid>https://dev.to/argenkiwi/ambler-rules-of-engagement-with-coding-agents-194j</guid>
      <description>&lt;p&gt;I recently came across an interesting project called &lt;a href="https://github.com/The-Pocket/PocketFlow" rel="noopener noreferrer"&gt;PocketFlow&lt;/a&gt;, which presents a minimalistic approach to building workflows that incorporate large language models. It is originally written in Python, a language I have never really used, so I attempted to port it to Kotlin to better understand how it works. As I progressed it became clear the project was simply a glorified state machine and it could be simplified even further. The result was &lt;a href="https://github.com/argenkiwi/ambler" rel="noopener noreferrer"&gt;Ambler&lt;/a&gt;: a very simple function and a very simple class definition that allow you to express a program as a series of steps that update the current state and pass it on to the next step. &lt;/p&gt;

&lt;p&gt;Nothing groundbreaking, but  the power of this simplicity is that you can describe your application logically in plain English in a markdown document and then ask a coding agent to build it for you, while keeping the application structure consistent, predictable and easy to understand.&lt;/p&gt;

&lt;p&gt;I decided to build a simple counter application as the first example. By not specifying the programming language, Gemini CLI tended to gravitate to using Python. I went along and refined the approach until I got exactly what I wanted. By the end of it I also obtained an equivalent implementation of the Ambler code and the sample in Go, JavaScript, Kotlin, Ruby, Rust and Typescript. &lt;/p&gt;

&lt;p&gt;I have observed something interesting when looking into the project on GitHub: the percentage of the codebase written in each language varies considerably for an equivalent implementation. It makes me wonder what the long term impact of using a less verbose, more concise programming language has on your agentic coding costs, assuming there will be a direct correlation between the amount of code needed to solve a problem and the number of tokens used.&lt;/p&gt;

&lt;p&gt;I'll continue experimenting with this approach, but I can already see how useful it will become when needing to automate simple tasks. Gemini CLI has already made me a handy &lt;a href="https://github.com/argenkiwi/ambler-m3u-downloader" rel="noopener noreferrer"&gt;application&lt;/a&gt; to download URLs from an m3u file which is a great companion to an &lt;a href="https://github.com/argenkiwi/audini" rel="noopener noreferrer"&gt;Chrome Extension&lt;/a&gt; Gemini CLI built for me a while ago. All I need now is more ideas to test the approach with.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>coding</category>
      <category>agents</category>
    </item>
    <item>
      <title>English will be to LLMs what the QWERTY layout is to keyboards.</title>
      <dc:creator>Leandro</dc:creator>
      <pubDate>Fri, 25 Jul 2025 17:56:32 +0000</pubDate>
      <link>https://dev.to/argenkiwi/english-will-be-to-llms-what-the-qwerty-layout-is-to-keyboards-2h61</link>
      <guid>https://dev.to/argenkiwi/english-will-be-to-llms-what-the-qwerty-layout-is-to-keyboards-2h61</guid>
      <description></description>
      <category>llm</category>
      <category>ai</category>
    </item>
    <item>
      <title>Should we all learn the Lojban language? It was created to eliminate logical ambiguity , which sounds great for LLMs, and also makes use of a subset of the English alphabet which could be great for keyboard ergonomics.</title>
      <dc:creator>Leandro</dc:creator>
      <pubDate>Thu, 24 Jul 2025 01:55:29 +0000</pubDate>
      <link>https://dev.to/argenkiwi/should-we-all-learn-to-the-lojban-language-it-was-created-to-eliminate-logical-ambiguity-which-203c</link>
      <guid>https://dev.to/argenkiwi/should-we-all-learn-to-the-lojban-language-it-was-created-to-eliminate-logical-ambiguity-which-203c</guid>
      <description></description>
      <category>discuss</category>
      <category>productivity</category>
      <category>ergonomics</category>
      <category>ai</category>
    </item>
    <item>
      <title>Is Python to AI what Javascript is to the Web?</title>
      <dc:creator>Leandro</dc:creator>
      <pubDate>Fri, 11 Jul 2025 00:00:18 +0000</pubDate>
      <link>https://dev.to/argenkiwi/is-python-to-ai-what-javascript-is-to-the-web-580k</link>
      <guid>https://dev.to/argenkiwi/is-python-to-ai-what-javascript-is-to-the-web-580k</guid>
      <description>&lt;p&gt;I have been experimenting with Gemini CLI and successfully used it to build a small apps and automation scripts. It seems that, unless otherwise requested, Gemini tends to prefer to use Python as the programming language to use. I can see why:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Relatively simple&lt;/li&gt;
&lt;li&gt;Multi-platform&lt;/li&gt;
&lt;li&gt;Has a vast ecosystem of libraries&lt;/li&gt;
&lt;li&gt;Interpreted&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And surely I am missing other advantages that someone with more knowledge about it can point out. It makes sense AI will work better with some languages than others and I even expect new languages to emerge that make it easier for LLMs to work with them. However, I seem to already be building up a collection of useful code written in Python, so I may be inclined to continue to use it so I don't have to install too many different toolchains and I can reuse it when possible. &lt;/p&gt;

&lt;p&gt;I would be curious to know if other LLMs prefer other languages, like Javascript or Go, and what experiences other developers have had.&lt;/p&gt;

</description>
      <category>python</category>
      <category>ai</category>
      <category>javascript</category>
      <category>web</category>
    </item>
    <item>
      <title>Loving Gemini CLI for writing ad-hoc Bash and Python scripts.</title>
      <dc:creator>Leandro</dc:creator>
      <pubDate>Thu, 10 Jul 2025 21:06:47 +0000</pubDate>
      <link>https://dev.to/argenkiwi/loving-gemini-cli-for-writing-ad-hoc-bash-and-python-scripts-1b77</link>
      <guid>https://dev.to/argenkiwi/loving-gemini-cli-for-writing-ad-hoc-bash-and-python-scripts-1b77</guid>
      <description></description>
      <category>cli</category>
      <category>bash</category>
      <category>python</category>
      <category>tooling</category>
    </item>
    <item>
      <title>Gemini CLI and I created our first project together.</title>
      <dc:creator>Leandro</dc:creator>
      <pubDate>Mon, 30 Jun 2025 20:49:28 +0000</pubDate>
      <link>https://dev.to/argenkiwi/gemini-cli-and-i-created-our-first-project-together-7b6</link>
      <guid>https://dev.to/argenkiwi/gemini-cli-and-i-created-our-first-project-together-7b6</guid>
      <description></description>
      <category>gemini</category>
      <category>cli</category>
      <category>showdev</category>
    </item>
    <item>
      <title>Gemeni CLI and I created our first piece of working software together: https://github.com/argenkiwi/audini. It was a rewrite of and old project (https://github.com/argenkiwi/extereo): a Chrome Extension to make playlist from audio in the sites you visit.</title>
      <dc:creator>Leandro</dc:creator>
      <pubDate>Mon, 30 Jun 2025 20:45:22 +0000</pubDate>
      <link>https://dev.to/argenkiwi/gemeni-cli-and-i-created-our-first-piece-of-working-software-together-1j38</link>
      <guid>https://dev.to/argenkiwi/gemeni-cli-and-i-created-our-first-piece-of-working-software-together-1j38</guid>
      <description></description>
      <category>cli</category>
      <category>playlist</category>
      <category>extensions</category>
      <category>opensource</category>
    </item>
    <item>
      <title>AI Golf: Prompt Engineering for the Modern Age</title>
      <dc:creator>Leandro</dc:creator>
      <pubDate>Fri, 13 Jun 2025 22:58:51 +0000</pubDate>
      <link>https://dev.to/argenkiwi/ai-golf-prompt-engineering-for-the-modern-age-2oee</link>
      <guid>https://dev.to/argenkiwi/ai-golf-prompt-engineering-for-the-modern-age-2oee</guid>
      <description>&lt;p&gt;In the rapidly evolving landscape of artificial intelligence, a new competitive discipline is quietly emerging: AI Golf. This intellectual pursuit challenges participants to achieve a desired outcome from an AI or Large Language Model (LLM) using the &lt;strong&gt;absolute minimum number of prompts&lt;/strong&gt;. It's a game of precision, foresight, and an intricate understanding of how these powerful models interpret and respond to human language.&lt;/p&gt;

&lt;p&gt;Much like its namesake, AI Golf rewards efficiency. Every prompt is a "stroke," and the goal is to reach the "hole" – the desired AI output – in the fewest strokes possible. This isn't just a quirky pastime; it reflects a crucial skill in the age of generative AI: &lt;strong&gt;prompt engineering at its most refined.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  The Rules of the Game
&lt;/h3&gt;

&lt;p&gt;AI Golf typically starts with a clear objective. For instance:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  "Generate a 500-word short story about a detective in a cyberpunk future."&lt;/li&gt;
&lt;li&gt;  "Summarize this 10-page research paper into three bullet points."&lt;/li&gt;
&lt;li&gt;  "Write Python code for a simple web server using Flask."&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The challenge then lies in crafting an initial prompt so precise, so comprehensive, and so well-structured that the AI delivers the ideal output on the first try. If the first prompt falls short, subsequent prompts are used to refine, clarify, or redirect the AI, each adding to your "score." The lowest score wins.&lt;/p&gt;

&lt;h3&gt;
  
  
  A Familiar Drive Down the Fairway: Comparing AI Golf to Traditional Golf
&lt;/h3&gt;

&lt;p&gt;The parallels between AI Golf and the sport of golf are striking:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Minimizing Strokes:&lt;/strong&gt; Both endeavors fundamentally aim to achieve a goal with the fewest attempts. In golf, it's hitting the ball into the hole; in AI Golf, it's getting the perfect AI response.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Strategy and Foresight:&lt;/strong&gt; A good golfer carefully plans their shots, considering wind, terrain, and club choice. Similarly, an AI Golfer meticulously designs their prompt, anticipating the AI's potential interpretations and outputs.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Precision and Execution:&lt;/strong&gt; A slight misjudgment in golf can send the ball wildly off course. A poorly worded or ambiguous prompt in AI Golf can lead to irrelevant or incorrect AI responses, forcing more "strokes."&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Course Knowledge:&lt;/strong&gt; A golfer learns the nuances of a specific course. An AI Golfer learns the "course" of a particular LLM – its biases, its strengths, and its common pitfalls.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The Code of Efficiency: AI Golf vs. Vim Golf
&lt;/h3&gt;

&lt;p&gt;For those in the programming world, AI Golf finds a spiritual cousin in &lt;strong&gt;Vim Golf&lt;/strong&gt;. Vim Golf challenges users to perform complex text editing tasks in the Vim editor using the fewest possible keystrokes.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Efficiency at the Core:&lt;/strong&gt; Both disciplines are obsessed with efficiency. Vim Golf optimizes manual input; AI Golf optimizes communication with an automated system.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Mastery of Tools:&lt;/strong&gt; Success in Vim Golf hinges on deep knowledge of Vim's commands and motions. Success in AI Golf requires profound understanding of prompt engineering techniques, model limitations, and effective natural language communication.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;The "Aha!" Moment:&lt;/strong&gt; Both games often lead to satisfying "aha!" moments when a single, elegant command (Vim) or a perfectly crafted prompt (AI) achieves a complex outcome that previously seemed to require multiple steps.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Iterative Refinement:&lt;/strong&gt; While the goal is minimal strokes, both often involve iterative refinement. A Vim Golf solution might start clunky before being polished; an AI Golf prompt might be tweaked after an initial suboptimal response.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The New Era of Creation: AI Golf and Vibe Coding
&lt;/h3&gt;

&lt;p&gt;Perhaps the most contemporary comparison is with &lt;strong&gt;Vibe Coding&lt;/strong&gt;, which we now define as the &lt;strong&gt;use of AI and Large Language Models by non-coders to generate software or solve computational problems.&lt;/strong&gt; This revolutionary approach allows individuals without traditional programming skills to bring their ideas to life through natural language interaction.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Shared Foundation: AI as the Enabler:&lt;/strong&gt; Both AI Golf and Vibe Coding rely fundamentally on the power of AI to translate human intent into actionable results, whether it's a generated story or functional code.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;The Power of Prompting:&lt;/strong&gt; For the "vibe coder," the quality of their prompts directly dictates the quality and complexity of the software they can create. AI Golfers are constantly refining this exact skill.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Bridging the Gap:&lt;/strong&gt; Vibe coding democratizes software creation, empowering a wider audience. AI Golf, in turn, helps these new creators become more efficient and effective in their AI interactions.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;From Concept to Reality:&lt;/strong&gt; The ultimate aim of vibe coding is to transform a conceptual idea into a tangible software output. AI Golf provides the rigorous framework to achieve this transformation with maximal efficiency, ensuring that the "vibe coder" gets the best possible code with the least effort.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;The Satisfaction of Creation:&lt;/strong&gt; There's immense satisfaction in both. For the vibe coder, it's seeing a functional application materialize from their natural language descriptions. For the AI Golfer, it's witnessing a complex AI task completed perfectly with a concise prompt, paving the way for more seamless "vibe coding" experiences.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Why AI Golf Matters
&lt;/h3&gt;

&lt;p&gt;AI Golf is more than just a game; it's a critical skill-building exercise for anyone interacting with LLMs professionally, including the growing cohort of "vibe coders":&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Cost Efficiency:&lt;/strong&gt; With API calls often metered, fewer prompts mean lower operational costs.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Time Savings:&lt;/strong&gt; Efficient prompting accelerates workflows and reduces the time spent on trial-and-error, making the "vibe coding" process smoother and faster.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Improved Accuracy:&lt;/strong&gt; Well-crafted prompts are more likely to yield precise and relevant results, reducing the need for post-generation editing of code or other outputs.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Unlocking AI Potential:&lt;/strong&gt; Mastering prompt engineering allows users to tap into the full potential of LLMs, pushing the boundaries of what they can achieve, whether it's generating text, images, or even fully functional software.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As AI models become increasingly sophisticated and pervasive, the ability to communicate with them concisely and effectively will be a hallmark of true proficiency. AI Golf provides a playful yet profound pathway to this mastery, challenging us to refine our language and our understanding of these powerful digital minds, one prompt at a time, and empowering a new generation of creators.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;An AI Golfing Exercise in Action:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This very article you've just read serves as a practical demonstration of AI Golf. Our goal was to create a comprehensive article on "AI Golf," incorporating specific comparisons and a evolving definition of "Vibe Coding," all while minimizing the number of interactions (prompts). Here are the prompts used to achieve this result, totaling &lt;strong&gt;3 strokes&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;"Explain Vibe Coding."&lt;/strong&gt; (Initial definitional understanding)&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;"Explain Vim Golf."&lt;/strong&gt; (Preparation for comparative element)&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;"Write an Article about AI Golf, which consists of using AI and Large Language Models to achieve an outcome with the least number of prompts. Compare AI Golf to the sport of Golf, Vim Golf and Vibe Coding."&lt;/strong&gt; (Core article generation)&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;"Adjust the article as if vibe coding was defined as the use of AI and LLMs by non-coders to write software."&lt;/strong&gt; (Refinement based on new definition)&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;"In the conclusion of the article add an acknowledgement that this article was written as a on AI golfing exercise and list the prompts originally used to achieve the current result."&lt;/strong&gt; (Final touch and self-referential element)&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>ai</category>
      <category>golf</category>
      <category>vibecoding</category>
    </item>
    <item>
      <title>Keyboard Layers and Home Row Modifiers</title>
      <dc:creator>Leandro</dc:creator>
      <pubDate>Mon, 24 Mar 2025 02:05:27 +0000</pubDate>
      <link>https://dev.to/argenkiwi/keyboard-layers-and-home-row-modifiers-51p4</link>
      <guid>https://dev.to/argenkiwi/keyboard-layers-and-home-row-modifiers-51p4</guid>
      <description>&lt;h2&gt;
  
  
  What are keyboard layers?
&lt;/h2&gt;

&lt;p&gt;When you press the A key of your keyboard you see an &lt;code&gt;a&lt;/code&gt; appear on your text editor. However, if you hold one of the Shift keys and the press A, what you get is a capital &lt;code&gt;A&lt;/code&gt;. If you hold Shift and press 2, you see &lt;code&gt;@&lt;/code&gt; instead.&lt;/p&gt;

&lt;p&gt;What I have just described is the behavior of the &lt;em&gt;Shift Layer&lt;/em&gt;. In essence, the Shift key activates a layer that changes the output of many other keys.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is a modifier?
&lt;/h2&gt;

&lt;p&gt;Shift, Control and Alt are referred to as modifier keys, simply because they modify the behavior of other keys. That not always results in a different character being emitted, as in the previous example. It can also result in an action taking place. For example, holding Control and the pressing C will commonly copy the selected text; holding Alt and then pressing Tab will allow you to change the focus to another application.&lt;/p&gt;

&lt;h2&gt;
  
  
  What are home row modifiers?
&lt;/h2&gt;

&lt;p&gt;The row at the center of a keyboard, where your fingers are meant to rest, is commonly called a &lt;em&gt;Home Row&lt;/em&gt;. Of course, there are no modifiers on the Home Row of a standard keyboard, just characters. We cannot replace them with modifiers because we need all characters to be able to type.&lt;/p&gt;

&lt;p&gt;But what if we could have both? After all, there is a clear difference between how we use modifier and a character keys: we hold the former and tap the latter. For example, when we tap D, we get a d&lt;code&gt;, but if we held D, then tapped M and got capital M&lt;/code&gt;, that would mean D behaves as Shift while held.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why would we want to do this?
&lt;/h3&gt;

&lt;p&gt;Having quick access to modifiers and being able to press a combination of them without having to contort our hands in an awkward way can result in improved efficiency and ergonomics, also encouraging us to learn more shortcuts and key combinations that can increase our productivity.&lt;/p&gt;

&lt;h3&gt;
  
  
  How can we achieve this?
&lt;/h3&gt;

&lt;p&gt;There are many tools that can modify the behavior of a key to achieve this to some extent. However, there are a few important gotchas to bear in mind:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If you are typing and roll a key, meaning that you press a key before releasing the previous one, you may accidentally activate a modifier (e.g., roll from D to M and get aMire&lt;code&gt;instead of&lt;/code&gt;admire`).&lt;/li&gt;
&lt;li&gt;To determine whether you intend to press or hold a key, we have to wait until either the key is released or another key is pressed. That means we won’t immediately see the characters we intend to type on the screen and we will perceive a delay or lag that can be distracting.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Unfortunately, many of the Home Row Modifier (HRM) implementations you may find out there do not address these problems effectively. But worry not, there are some excellent free and open source tools that can do this properly and you can use them right now. We'll get to that soon.&lt;/p&gt;

&lt;h2&gt;
  
  
  Custom Layers
&lt;/h2&gt;

&lt;p&gt;We now know we can use HRMs to access layers, like Shift and AltGr, without moving our hands away from the center of the keyboard. What if we could have other layers that would allow us to reach, for example, Escape or the arrow keys without moving our hands? The same tools used to implement HRMs can also help with that.&lt;/p&gt;

&lt;p&gt;The main types of custom layers you may want to consider are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Navigation/editing (also known as Extend)&lt;/li&gt;
&lt;li&gt;Functions, numbers and symbols.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Layered Keyboard Layouts
&lt;/h2&gt;

&lt;p&gt;Putting all of these together you get a layered keyboard layout. You can find many samples on keymapdb.com, including &lt;a href="https://github.com/argenkiwi/kenkyo" rel="noopener noreferrer"&gt;Kenkyo&lt;/a&gt;, the layout I put together during the process of learning all the concepts discussed in this article. There you will find examples on how to properly implement HRMs, using software like &lt;a href="https://github.com/jtroo/kanata" rel="noopener noreferrer"&gt;Kanata&lt;/a&gt; and &lt;a href="https://github.com/rvaiya/keyd" rel="noopener noreferrer"&gt;keyd&lt;/a&gt;, as well as opinionated implementations of the aforementioned custom layers, which you can use as is or as inspiration for your own layers.&lt;/p&gt;

&lt;p&gt;I hope you have found this article useful. Thank you for reading.&lt;/p&gt;

</description>
      <category>keyboards</category>
      <category>ergonomics</category>
      <category>productivity</category>
      <category>a11y</category>
    </item>
  </channel>
</rss>
