<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" 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">
    <channel>
        <title>Osinga</title>
        <link>https://osinga.vc/</link>
        <description>On my interests.</description>
        <lastBuildDate>Wed, 14 Oct 2026 11:06:47 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <copyright>2026 Osinga</copyright>
        <atom:link href="https://osinga.vc/posts/feed.rss" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[On Good Products]]></title>
            <link>https://osinga.vc/posts/on-good-products</link>
            <guid isPermaLink="false">https://osinga.vc/posts/on-good-products</guid>
            <pubDate>Mon, 18 Sep 2023 00:00:00 GMT</pubDate>
            <description><![CDATA[How to start off with a strong foundation.]]></description>
            <content:encoded><![CDATA[<p>It's a common product interview question: what makes a product <em>good</em>? My go-to answer is "respect". It's a catch-all term with multiple meanings, but I believe it covers all the most important elements.</p>
<h2 id="respect-the-platform"><a variant="plain" href="#respect-the-platform">Respect the Platform</a></h2>
<p>Most products live on the web and/or on mobile. Each of those platforms come with certain expectations, both from the platform itself and from the users.</p>
<p>I believe that products should embrace the platform that they’re on. Not just make it work, but really try and use it to its full potential. For example:</p>
<ul>
<li><strong>Be accessible.</strong> Accessibility benefits everyone. Closing a menu by tapping outside of it, dismissing a modal by hitting <code>Escape</code>, filling a form by using autocomplete—all standard accessibility features, and things we all benefit from.</li>
<li><strong>Be adherent.</strong> On mobile, follow the <a href="https://developer.apple.com/design/human-interface-guidelines/">Human Interface Guidelines</a> or <a href="https://m3.material.io">Material Design</a> design system closely. On web, use semantic elements, don’t hijack native functionality, and be as open as possible.</li>
<li><strong>Be lenient.</strong> Meet your users where they are. If they want to download your app, great. But app fatigue is a thing, so don’t force it upon them.</li>
</ul>
<h2 id="respect-the-users-privacy"><a variant="plain" href="#respect-the-users-privacy">Respect the User’s Privacy</a></h2>
<p>Users share their data with you in confidence. Earn that trust, and then keep earning it. For example:</p>
<ul>
<li><strong>Be compliant.</strong> Regulations can be a pain (looking at you, cookie banners), but at the end of the day they’re there to protect your users.</li>
<li><strong>Be conscientious.</strong> Always try and act in the best interest of your users. I want to believe doing the right thing will take you further.</li>
<li><strong>Be disinterested.</strong> Ask only for what you need. You can’t mishandle information you don’t have. It also removes friction for the user by not having to enter and maintain it.</li>
</ul>
<h2 id="respect-the-users-time"><a variant="plain" href="#respect-the-users-time">Respect the User’s Time</a></h2>
<p>Everyone’s busy, and no one wants to waste their time. Catering to this goes a long way in making your product feel friendlier. For example:</p>
<ul>
<li><strong>Be efficient.</strong> Don’t stand between your users and your product any more than you must. Keep the signup and onboarding flow as short as possible, don’t hit your users with endless modals for your newsletter, and let them get value out of your product as quickly as possible.</li>
<li><strong>Be fast.</strong> Speed can almost always be improved, and users will always appreciate products getting faster. It increases their efficiency, it prevents wasting resources, and it opens up your product to those with slower connectivity or devices.</li>
<li><strong>Be welcoming.</strong> Not just on the way in but also on the way out. If a user wants to delete their account, let them. Of course you’d rather keep them around, but forcing this through dark patterns won’t do anyone any good in the long run.</li>
</ul>
<h2 id="conclusion"><a variant="plain" href="#conclusion">Conclusion</a></h2>
<p>These are just some of the principles I try to adhere to. The list and examples are non-exhaustive and there'll always be room for improvement, but I believe it's a strong foundation for any product to be good.</p>]]></content:encoded>
            <author>Osinga</author>
        </item>
        <item>
            <title><![CDATA[On Video Collages]]></title>
            <link>https://osinga.vc/posts/on-video-collages</link>
            <guid isPermaLink="false">https://osinga.vc/posts/on-video-collages</guid>
            <pubDate>Wed, 13 Sep 2023 00:00:00 GMT</pubDate>
            <description><![CDATA[How to combine clips using iMovie and Keynote.]]></description>
            <content:encoded><![CDATA[<p>I recently had to create a video that included a collage. With <a href="https://apps.apple.com/app/imovie/id377298193">iMovie</a> you can add a video on top of another using <a href="https://support.apple.com/guide/imovie/create-a-picture-in-picture-effect-mova1aaa682b/mac">picture-in-picture</a>, but that's limited to only one.</p>
<p>Fortunately, I found a workaround to create collages without having to install a third-party app. It uses Apple’s <a href="https://apps.apple.com/app/keynote/id361285480">Keynote</a>, which you might already have pre-installed. If not, it’s another free download, just like iMovie.</p>
<h2 id="instructions"><a variant="plain" href="#instructions">Instructions</a></h2>
<p>For each of the clips that you want to include in the collage:</p>
<ol>
<li><strong>In iMovie:</strong>
<ol>
<li>Isolate the clip</li>
<li>Go to <strong>File → Share → File…</strong> in the menu bar</li>
<li>Follow the steps and save the file</li>
</ol>
</li>
<li><strong>In Keynote:</strong>
<ol>
<li>Create an empty slide</li>
<li>Drag the file from 1.3. into it</li>
<li>Under <strong>Format → Movie</strong>, deselect <strong>Start movie on click</strong></li>
</ol>
</li>
</ol>
<p>Once you have all your clips added, you can preview the result by clicking <strong>Play</strong> or hitting <code>Option-Command-P</code>. When you’re happy with everything:</p>
<ol>
<li>Go to <strong>File → Export To → Movie…</strong> in the menu bar</li>
<li>Set <strong>Go to next slide after</strong> to <code>0</code> seconds to prevent this time from being appended to the video</li>
<li>Follow the steps and save the movie</li>
</ol>
<p>Your collage is now ready to be imported into iMovie.</p>
<h2 id="tips"><a variant="plain" href="#tips">Tips</a></h2>
<h3 id="iterative-process"><a variant="plain" href="#iterative-process">Iterative Process</a></h3>
<p>In case your collage is part of a larger video, I recommend keeping the clips in a separate iMovie project so that you can come back later to make changes.</p>
<h3 id="keynote-only"><a variant="plain" href="#keynote-only">Keynote Only</a></h3>
<p>I find iMovie works well for editing clips, as the feedback loop is quick. The audiowave guides you in trimming the clip, clicking somewhere with the mouse and then hitting <code>Space</code> will let you preview the result, and you can easily see the duration of all your clips by hovering over them.</p>
<p>For quick and simple collages, though, you can also do this with only Keynote. After dragging in a video, select it, then go to <strong>Format → Movie</strong>. Under <strong>Edit Movie</strong> you can trim it as needed.</p>
<h3 id="portrait-mode"><a variant="plain" href="#portrait-mode">Portrait Mode</a></h3>
<p>If you want to include clips that were shot in portrait mode, you’ll find it exports from iMovie with black bars on the sides. To prevent this:</p>
<ol>
<li><strong>In iMovie:</strong>
<ol>
<li>Select the clip</li>
<li>Click the <strong>Cropping</strong> button just above the video preview</li>
<li>Rotate the clip so that it’s on its side</li>
</ol>
</li>
<li>Export from iMovie and import into Keynote following the <a href="#instructions">instructions</a></li>
<li><strong>In Keynote:</strong>
<ol>
<li>Select the clip</li>
<li>Click <strong>Format → Arrange</strong> in the top right</li>
<li>Under <strong>Rotate</strong>, set the angle to correct for your earlier rotation (either <code>-90</code> or <code>90</code>, depending on how you rotated it)</li>
</ol>
</li>
</ol>
<p>Your clip will now be showing normally and without black bars. Note that the height and width of the clip still reflect the imported rotated clip, so you’ll need to take that into account when making changes there.</p>]]></content:encoded>
            <author>Osinga</author>
        </item>
        <item>
            <title><![CDATA[On Pomodoro]]></title>
            <link>https://osinga.vc/posts/on-pomodoro</link>
            <guid isPermaLink="false">https://osinga.vc/posts/on-pomodoro</guid>
            <pubDate>Sun, 07 Nov 2021 00:00:00 GMT</pubDate>
            <description><![CDATA[How to create a minimal Pomodoro menu bar app with Keyboard Maestro.]]></description>
            <content:encoded><![CDATA[<p>This week Keyboard Maestro <a href="https://www.stairways.com/press/2021-11-02">released v10.0</a>. That update inspired me to hurry up and get my post <a href="/posts/on-desktop-productivity">on desktop productivity</a> out, which covers a lot of my Keyboard Maestro setup.</p>
<p>Since then I've been playing around with some of their new features, and there are two in particular I found interesting: the ability to <a href="https://wiki.keyboardmaestro.com/Subroutines">create subroutines</a> and the ability to <a href="https://wiki.keyboardmaestro.com/manual/Macro_Groups">show macro groups in the menu bar</a>. I decided to build out a minimal Pomodoro app around these features—partially for the learning experience, and partially at the request of my partner.</p>
<p>The complete macro group can be downloaded from the <a href="#conclusion">conclusion</a>.</p>
<h2 id="background"><a variant="plain" href="#background">Background</a></h2>
<p>The <a href="https://en.wikipedia.org/wiki/Pomodoro_Technique">Pomodoro technique</a> is a time management method that has you alternate between periods of focus and short breaks. Typically it's 25 minutes of work followed by 5 minutes of break, to be repeated however many times.</p>
<p>There are plenty of dedicated apps for this, but I want to do it with just Keyboard Maestro. On the one hand for the reasons mentioned in the introduction, and on the other hand for the deep integration it provides me with my other macros.</p>
<h2 id="behavior"><a variant="plain" href="#behavior">Behavior</a></h2>
<p>The way it works is as follows:</p>
<ol>
<li>
<p>At rest, there's a menu bar item to start a Pomodoro.</p>
<p><img src="/posts/on-pomodoro/pomodoro-menu-start-light.png" alt="Screenshot of &#x27;Keyboard Maestro → Pomodoro → Start&#x27;"></p>
</li>
<li>
<p>Clicking that allows configuring the next Pomodoro: the duration of each interval and the number of loops. This defaults to 4 loops of 25 minutes, for a total duration of 2 hours.</p>
<p><img src="/posts/on-pomodoro/pomodoro-prompt-light.png" alt="Screenshot of &#x22;Keyboard Maestro → Pomodoro → Prompt&#x22;"></p>
</li>
<li>
<p>Starting a Pomodoro shows the remaining time.</p>
<p><img src="/posts/on-pomodoro/pomodoro-menu-stop-light.png" alt="Screenshot of &#x22;Keyboard Maestro → Pomodoro → Stop&#x22;"></p>
</li>
<li>
<p>The break state is shown when relevant.</p>
<p><img src="/posts/on-pomodoro/pomodoro-menu-break-light.png" alt="Screenshot of &#x22;Keyboard Maestro → Pomodoro → Break&#x22;"></p>
</li>
<li>
<p>After the break, steps 3–4 are repeated, until there are no more loops remaining.</p>
</li>
</ol>
<p>Since this is all done with Keyboard Maestro I can easily hook into any of my other macros. For example, when a Pomodoro starts it <a href="/posts/on-desktop-productivity#toggling-do-not-disturb">turns on Do Not Disturb</a> and turns my desk light red, and at the end of a Pomodoro it resets both. This part is really up to you, but having it together with all other macros offers a lot of flexibility.</p>
<h2 id="macros"><a variant="plain" href="#macros">Macros</a></h2>
<p>The macro group contains four individual macros, and is set to display in the menu bar with a title from the variable <code>POMODORO_TITLE</code>. It has no icon, since I prefer to set that through text to have it display in the same color as the text.</p>
<blockquote>
<p>[!NOTE]
For custom icons you can download Apple's <a href="https://developer.apple.com/sf-symbols/">SF Symbols</a> for free. This is the same set as is available within Keyboard Maestro itself.</p>
</blockquote>
<h3 id="start"><a variant="plain" href="#start">Start</a></h3>
<p>This macro contains two groups called "Logic" with some actions in between. Those macros in between are up to you, and aren't strictly necessary—they just allow for initiating anything else when starting a Pomodoro. The reason of grouping actions together in those "Logic" groups is purely to make it easier to indicate what's actually necessary for the functionality and where to add in custom actions.</p>
<p>In the first "Logic" group it first prompts for input, allowing configuration of the number of loops and the duration of each Pomodoro. I deliberately placed the <code>Local Loops</code> input first, since it seemed more likely to be customized than the duration. While the prompt is open, <code>Enter</code> will start the Pomodoro and <code>Escape</code> will close the prompt and cancel the macro.</p>
<p>In the second "Logic" group I use the configured duration to set the time remaining. This is used to keep track of the Pomodoro progress. I then enable the <a href="#stop">stop macro</a> and disable this macro, which ensures that only one of them will ever be visible in the menu bar menu: "Start" when no Pomodoro is running, and "Stop" otherwise (see also my approach to <a href="/posts/on-desktop-productivity#starting-and-stopping-modes">starting and stopping modes</a>). Finally, I execute the <a href="#update">update macro</a>.</p>
<p><img src="/posts/on-pomodoro/start-light.png" alt="Screenshot of &#x22;Keyboard Maestro → Pomodoro → Start&#x22;"></p>
<h3 id="update"><a variant="plain" href="#update">Update</a></h3>
<p>The first action saves the ID of the macro instance. This is later used to cancel that specific instance, which is needed in case a Pomodoro is stopped mid run.</p>
<p>The <code>POMODORO_REMAINING</code> number is then used to repeat a group of actions <em>n</em> times. First it <a href="#set-title">sets the title</a>, and then it pauses for 1 minute. I initially had this macro set up with the "Periodic Trigger", but since that executes every minute on the minute it didn't ensure an accurate timing.</p>
<p>Once the minute has passed, I decrease the <code>POMODORO_REMAINING</code> by 1. If the result is 0 the <a href="#stop">stop macro</a> is triggered, and otherwise it goes back to the beginning of the repeating group.</p>
<p><img src="/posts/on-pomodoro/update-light.png" alt="Screenshot of &#x22;Keyboard Maestro → Pomodoro → Update&#x22;"></p>
<h3 id="stop"><a variant="plain" href="#stop">Stop</a></h3>
<p>Similarly to the <a href="#start">start macro</a>, this contains a "Logic" group and a few actions outside of it. These actions outside are again to allow for customization.</p>
<p>In the "Logic" group, first the earlier saved macro instance is canceled. As described, this is in case the Pomodoro is stopped prematurely through the menu bar item. Important to note here is that this is also the reason the "Execute Macro" action in the <a href="#update">update macro</a> was called asynchronously; if not, "Stop" would be seen as a child of the "Update" instance, having it cancel itself.</p>
<p>Next, the <code>POMODORO_LOOPS</code> variable is decreased by 1 to indicate that a run has passed. The following "If" check looks if this value is now 0 (meaning all loops have completed) or if the <code>%TriggerValue%</code> variable is not <code>CONTINUE</code>. That last one needs more explaining.</p>
<p>The <a href="#stop">stop macro</a> is normally executed by the <a href="#update">update macro</a>, but it can also be triggered by clicking the "Stop Pomodoro" menu item that shows when opening up the menu bar menu. In that case, the <code>%TriggerValue%</code> would be empty, so to differentiate that from an automatic execution from the "Update" macro a parameter is passed along. With that, the <a href="#stop">stop macro</a> knows to cancel the Pomodoro completely when stopped from the menu bar mid run.</p>
<p>If it's stopped completely, it will enable the <a href="#start">start macro</a> again and disable this macro, and it will delete all the global variables that were used earlier. That isn't strictly necessary, but I like to keep things nice and tidy.</p>
<p>If, instead, there are still more loops to run, it will <a href="#set-title">set the title</a>, pause for 5 minutes, and then execute the <a href="#start">start macro</a> again. This is done asynchronously for the same reason as described earlier.</p>
<p><img src="/posts/on-pomodoro/stop-light.png" alt="Screenshot of &#x22;Keyboard Maestro → Pomodoro → Stop&#x22;"></p>
<h3 id="set-title"><a variant="plain" href="#set-title">Set Title</a></h3>
<p>This macro is set up as a subroutine. It accepts a parameter <code>Local State</code>, and then uses a switch action to update the <code>POMODORO_TITLE</code> variable in one of three ways:</p>
<ul>
<li><code>PAUSED</code>: To indicate that it's in between Pomodoros.</li>
<li><code>RUNNING</code>: To indicate that a Pomodoro is active and how much time is left.</li>
<li><code>STOPPED</code>: To indicate that no Pomodoro is active.</li>
</ul>
<p><img src="/posts/on-pomodoro/set-title-light.png" alt="Screenshot of &#x22;Keyboard Maestro → Pomodoro → Set Title&#x22;"></p>
<h2 id="conclusion"><a variant="plain" href="#conclusion">Conclusion</a></h2>
<p>This has been a fun exercise where I played around with the new subroutines and menu bar macro groups, and I'm happy with how it turned out. I'm not quite sure yet what else I'll use the menu bar feature for, but it's an interesting feature with lots of possibilities.</p>
<p>One improvement I'll probably make is to only enable this macro group when sitting at my desk. <a href="/posts/on-desktop-productivity#dock">As with my Dock</a>, I prefer to keep my menu bar tidy, and at my desk is also where it makes the most sense to use for me.</p>
<p>To download the complete macro group, click here: <a href="/posts/on-pomodoro/macros.zip">Pomodoro</a>.</p>]]></content:encoded>
            <author>Osinga</author>
        </item>
        <item>
            <title><![CDATA[On Desktop Productivity]]></title>
            <link>https://osinga.vc/posts/on-desktop-productivity</link>
            <guid isPermaLink="false">https://osinga.vc/posts/on-desktop-productivity</guid>
            <pubDate>Tue, 02 Nov 2021 00:00:00 GMT</pubDate>
            <description><![CDATA[How to use Karabiner-Elements and Keyboard Maestro to get the most out of macOS.]]></description>
            <content:encoded><![CDATA[<p>I spend a lot of time behind my laptop. To try and make the most of it, I enjoy getting to know my tools, with the aim of improving both my comfort and my productivity. A big part of this is done by using shortcuts and automations, which not only makes me move faster with much less arm movement but also takes away a lot of friction. Hopefully future me will benefit from that.</p>
<h2 id="macos"><a variant="plain" href="#macos">macOS</a></h2>
<p>My laptop of choice is a MacBook, and it runs macOS. Everything in this section uses native features and doesn't require any third-party apps.</p>
<h3 id="spaces"><a variant="plain" href="#spaces">Spaces</a></h3>
<p>I tend to have apps and windows open for different projects or modes. For example, I have a Safari window with a bunch of personal tabs, another one with work related tabs, and then also some additional apps for work. Instead of keeping all this on the same desktop, I use <a href="https://support.apple.com/guide/mac-help/work-in-multiple-spaces-mh14112/mac">spaces</a>. This lets me set up multiple desktops and give each desktop its own focus.</p>
<p>To efficiently use spaces, it's important to efficiently switch between them. As explained in the macOS User Guide linked above, by default this can be done in one of three ways:</p>
<ol>
<li>Swipe left or right with three or four fingers on a trackpad, or with two fingers on a Magic Mouse.</li>
<li>Press the <code>Control</code> key together with the left or right arrow.</li>
<li>Open Mission Control and select the desktop in the top of the screen.</li>
</ol>
<p>While functional, none of these are ideal. The first one requires moving a hand off the keyboard, the second one does as well (and even after following my suggestion below to <a href="#remap-fn--hjkl-to-arrow-keys">add additional arrow keys</a> it's still awkward), and the third one is just plain cumbersome. Sure, you could set up a <a href="#hot-corners">hot corner</a> for the latter, but then we're back to moving a hand off the home row.</p>
<p>I suggest a different approach. Go to <strong>System Preferences → Keyboard → Shortcuts</strong>, and select <strong>Mission Control</strong> on the left. There, look for the two actions <strong>Move left a space</strong> and <strong>Move right a space</strong> and replace the default shortcuts with <code>Command-Shift-1</code> and <code>Command-Shift-2</code>, respectively. Now you can move smoothly between spaces without relocating your hands, and so far I haven't noticed any conflicts.</p>
<p><img src="/posts/on-desktop-productivity/macos-spaces-light.png" alt="Screenshot of &#x22;System Preferences → Keyboard → Shortcuts&#x22;"></p>
<h3 id="assign-apps-to-spaces"><a variant="plain" href="#assign-apps-to-spaces">Assign Apps to Spaces</a></h3>
<p>Once you're using spaces, you might find that the mapping of one app per space isn't always ideal. For some apps this doesn't matter since they allow multiple open windows (such as Finder or Safari), but for others this isn't possible (such as Mail or Messages). When opening these apps, then, there'll be a sudden jump to the space the app is opened on.</p>
<p>Luckily, this can be fixed. Let's say you have a space for work and a space for personal stuff, and both of them need to have access to the Mail app. Right click on the Mail app icon in the Dock and go to <strong>Options → Assign To</strong>. The default setting is <strong>None</strong>, but you can also assign the app to a specific desktop (<strong>This Desktop</strong>) or—what we're looking for here—to <strong>All Desktops</strong>.</p>
<p>Now, whenever you open the Mail app, it will open on the space that you're already on.</p>
<p><img src="/posts/on-desktop-productivity/macos-assign-to-light.png" alt="Screenshot of &#x22;Dock → Options → Assign To&#x22;"></p>
<blockquote>
<p>[!NOTE]
For this to show up you'll need to have at least two spaces open.</p>
</blockquote>
<h3 id="hot-corners"><a variant="plain" href="#hot-corners">Hot Corners</a></h3>
<p><a href="https://support.apple.com/guide/mac-help/use-hot-corners-mchlp3000/mac">Hot corners</a> associate certain actions with the corners of the screen, which are then activated by moving the cursor into that corner.</p>
<p>I'm not a big fan of them, since I find them prone to accidental activations and they require moving a hand off the home row. But, there's one I do find convenient, and that's to set the bottom left corner to <strong>Put Display to Sleep</strong>. It's less of a necessity now while working from home, but back when I was working at an open floorplan office it was ideal to quickly lock my MacBook. I wouldn't even have to think about it—just flick the cursor into the bottom left corner while getting up or walking away and I was set.</p>
<p>To set this up, go to <strong>System Preferences → Desktop &#x26; Screen Saver → Hot Corners…</strong>.</p>
<p><img src="/posts/on-desktop-productivity/macos-hot-corners-light.png" alt="Screenshot of &#x22;System Preferences → Desktop &#x26; Screen Saver → Hot Corners…&#x22;"></p>
<h3 id="dock"><a variant="plain" href="#dock">Dock</a></h3>
<p>This one doesn't necessarily benefit my productivity, but in general I find that it helps my peace of mind to declutter my screen, and a big part of that is the Dock.</p>
<p>First, I have it set to automatically hide and show. This just removes it from the screen entirely until needed, which isn't actually all that often. To do this, go to <strong>System Preferences → Dock &#x26; Menu Bar</strong> and check <strong>Automatically hide and show the Dock</strong>.</p>
<p>Second, I removed all apps from it that I never or rarely use. It always surprises me to see people with a bunch of default apps in there without bothering to remove them. Either right click on them and then click <strong>Remove from Dock</strong> or simply drag them off of it.</p>
<p>Third, I added some spacer tiles, which are just empty spaces that can be moved around to create sections within the Dock. To create these:</p>
<ol>
<li>
<p>Launch <strong>Terminal</strong>.</p>
</li>
<li>
<p>Enter the following command to create a spacer tile:</p>
<pre><code class="language-bash">$ defaults write com.apple.dock persistent-apps -array-add '{tile-type="spacer-tile";}'
</code></pre>
</li>
<li>
<p>Enter the following command to restart the Dock:</p>
<pre><code class="language-bash">$ killall Dock
</code></pre>
</li>
</ol>
<p>You can add as many tiles as you like, and just as with regular apps they can be dragged around the Dock and removed to your liking.</p>
<p><img src="/posts/on-desktop-productivity/macos-dock-light.png" alt="Screenshot of &#x22;Dock&#x22;"></p>
<h3 id="screenshots"><a variant="plain" href="#screenshots">Screenshots</a></h3>
<p>macOS has extensive screenshot taking capabilities built in. For a full overview see <a href="https://support.apple.com/HT201361">their support article</a>, but here is a summarized overview:</p>
<ul>
<li><code>Command-Shift-3</code> to save a screenshot of the entire screen to file (by default on Desktop).</li>
<li><code>Command-Control-Shift-3</code> to save a screenshot of the entire screen to clipboard.</li>
<li><code>Command-Shift-4</code> to save a screenshot of an area to file (by default on Desktop).</li>
<li><code>Command-Control-Shift-4</code> to save a screenshot of an area to clipboard.</li>
<li><code>Command-Shift-4</code> then <code>Space</code> to save a screenshot of a window to file (by default on Desktop).</li>
<li><code>Command-Control-Shift-4</code> then <code>Space</code> to save a screenshot of a window to clipboard.</li>
<li><code>Command-Shift-5</code> to start a screen recording.</li>
</ul>
<p>I particularly like the options to screenshot an area or a window. Also good to know: when you have an area already selected you can press <code>Space</code> to drag the selection around, <code>Option</code> to resize the selection from the center, or <code>Shift</code> to change the selection from just one side while keeping the other as is.</p>
<p>Normally I take screenshots directly to clipboard, but to add markup it needs to be saved to a file. However, if you click on the little screenshot preview in the bottom right of the screen right after taking a screenshot, and then use the markup functionality, you can press <code>Command-Option-C</code> to copy the result to clipboard and prevent it from actually being saved to file. Win-win.</p>
<h3 id="shortcuts"><a variant="plain" href="#shortcuts">Shortcuts</a></h3>
<p>To round up the macOS section, here are some default shortcuts I use a lot. Some of these might seem simple, but it also means it's a good starting point to really get into the habit of using shortcuts, especially once you start combining them.</p>
<p>Two things I just want to point out:</p>
<ol>
<li><strong>You can often add <code>Shift</code> to a shortcut to do the reverse of the original shortcut.</strong> Examples of this are moving focus between elements going forward (<code>Tab</code>) and backward (<code>Shift-Tab</code>), going to the next (<code>Enter</code>) or previous (<code>Shift-Enter</code>) search result, or switching between tabs or applications (see below).</li>
<li><strong>You can use the menu bar menus to see available actions and their corresponding shortcuts.</strong> Lots of apps have shortcuts available, and the best way to start learning them is to just see what's there. You can also press <code>Command-Shift-/</code> to search within an app's menu items, which will then highlight where the menu item can be found and what its shortcut is (if any).</li>
</ol>
<h4 id="general"><a variant="plain" href="#general">General</a></h4>
<ul>
<li><code>Ctrl-x</code>, <code>Ctrl-c</code>, and <code>Ctrl-v</code> to cut, copy, and paste, respectively.</li>
<li><code>Option-Delete</code> to delete the previous word.</li>
<li><code>Command-Delete</code> to delete the previous line.</li>
<li><code>Command-,</code> to open the app settings.</li>
<li><code>Command-F</code> to search.</li>
<li><code>Command-H</code> to hide the front app.</li>
<li><code>Command-W</code> to close a tab.</li>
<li><code>Command-Q</code> to quit an app.</li>
<li><code>Command-Tab</code> to switch between applications.</li>
<li><code>Command-Shift-Tab</code> to switch between applications in reverse order.</li>
<li><code>Command-`</code> to switch between application windows.</li>
<li><code>Fn-C</code> to open Control Center.</li>
<li><code>Fn-E</code> to open the emoji picker.</li>
<li><code>Fn-N</code> to open Notification Center.</li>
</ul>
<h4 id="browser"><a variant="plain" href="#browser">Browser</a></h4>
<ul>
<li><code>Command-T</code> to open a new tab.</li>
<li><code>Command-Shift-T</code> to reopen the most recently closed tab.</li>
<li><code>Command-[1–9]</code> to go to the nth tab.</li>
<li><code>Command-0</code> to go to the last tab.</li>
<li><code>Command-L</code> to focus on the URL bar.</li>
<li><code>Control-Tab</code> or <code>Command-Shift-]</code> to move between tabs.</li>
<li><code>Control-Shift-Tab</code> or <code>Command-Shift-[</code> to move between tabs in reverse order.</li>
</ul>
<h2 id="karabiner-elements"><a variant="plain" href="#karabiner-elements">Karabiner-Elements</a></h2>
<p>The app powering most of my custom shortcuts is <a href="https://karabiner-elements.pqrs.org/">Karabiner-Elements</a>. With it, you are able to set up flexible and powerful keyboard modifications.</p>
<p>There are four modifications in particular I recommend, and I find that the easiest way to set these up is to edit the configuration file directly. Go to <strong>Karabiner-Elements → Misc</strong> and click <strong>Open config folder (~/.config/karabiner)</strong>. Then, with your text editor of choice, open <code>karabiner.json</code> and add the code samples shown in the subsections below under <code>profiles[x].complex_modifications.rules</code>.</p>
<p><img src="/posts/on-desktop-productivity/karabiner-elements-light.png" alt="Screenshot of &#x22;Karabiner-Elements&#x22;"></p>
<h3 id="remap-caps-lock-to-escape"><a variant="plain" href="#remap-caps-lock-to-escape">Remap <code>Caps Lock</code> to <code>Escape</code></a></h3>
<p>I rarely use the <code>Caps Lock</code> key. I just don't shout a lot, and I suspect that's the case for many people. Considering it's so rarely used, then, the <code>Caps Lock</code> takes up quite the prominent position on the keyboard.</p>
<p>Now, the <code>Escape</code> key <em>is</em> useful to me. Not in the least because I use Vim, but even in normal day-to-day use there's plenty of moments where quickly dismissing something with it is great, and by remapping the <code>Caps Lock</code> to <code>Escape</code> it's significantly more accessible.</p>
<pre><code class="language-json">{
  "description": "Change caps_lock to command+control+option+shift (escape when pressed alone)",
  "manipulators": [
    {
      "type": "basic",
      "from": {
        "key_code": "caps_lock",
        "modifiers": {
          "optional": [
            "any"
          ]
        }
      },
      "to": [
        {
          "key_code": "left_shift",
          "modifiers": [
            "left_command",
            "left_control",
            "left_option"
          ]
        }
      ],
      "to_if_alone": [
        {
          "key_code": "escape"
        }
      ]
    }
  ]
}
</code></pre>
<blockquote>
<p>[!NOTE]
This modification on its own can also be done without third-party apps. Go into <strong>System Preferences → Keyboard → Modifier Keys…</strong> to change the behavior of any of the keyboard's modifier keys, including the <code>Caps Lock</code>. However, this falls short when wanting to do more complex modifications, as I describe in the following subsections.</p>
</blockquote>
<h3 id="remap-caps-lock-to-hyper-key"><a variant="plain" href="#remap-caps-lock-to-hyper-key">Remap <code>Caps Lock</code> to <code>Hyper</code> Key</a></h3>
<p>Didn't I just tell you to remap <code>Caps Lock</code> to <code>Escape</code>? Yes, I did. But that was for a single press. With Karabiner-Elements you can set up more complex modifications where you differentiate between a single press (pressing just that one key) and a combined press (pressing multiple keys at the same time).</p>
<p>The <code>Hyper</code> key is the combination of all four modifier keys—<code>Command</code>, <code>Control</code>, <code>Option</code>, and <code>Shift</code>. Performing this keyboard manually would quickly become painful, and therefore it's a combination that's never used. That's great, because it means that we're free to combine it with any other key for custom shortcuts without having to worry about it conflicting with any app or system shortcuts.</p>
<p>This keyboard modification is what enables nearly all of my macros, as described in the <a href="#keyboard-maestro">Keyboard Maestro</a> section.</p>
<blockquote>
<p>[!NOTE]
The configuration for this is included in the previous subsection.</p>
</blockquote>
<h3 id="remap-shift-caps-lock-to-caps-lock"><a variant="plain" href="#remap-shift-caps-lock-to-caps-lock">Remap <code>Shift-Caps Lock</code> to <code>Caps Lock</code></a></h3>
<p>As pure as my intentions are, sometimes I just have to raise my voice from behind the laptop. In such cases it's useful to have an alternative way of activating <code>Caps Lock</code>, considering we have <a href="#remap-caps-lock-to-escape">lost the default <code>Caps Lock</code> key</a>. By remapping the combination of <code>Shift</code> and <code>Caps Lock</code> to do this, I keep the new functionality of <code>Caps Lock</code> to act as <code>Escape</code> and the <code>Hyper</code> key while having a way to fall back on the original behavior.</p>
<pre><code class="language-json">{
  "description": "Use shift+caps_lock as caps_lock",
  "manipulators": [
    {
      "type": "basic",
      "from": {
        "key_code": "caps_lock",
        "modifiers": {
          "mandatory": [
            "shift"
          ],
          "optional": [
            "caps_lock"
          ]
        }
      },
      "to": [
        {
          "key_code": "caps_lock"
        }
      ]
    }
  ]
}
</code></pre>
<h3 id="remap-fn--hjkl-to-arrow-keys"><a variant="plain" href="#remap-fn--hjkl-to-arrow-keys">Remap <code>fn</code> + <code>h/j/k/l</code> to Arrow Keys</a></h3>
<p>Lastly, this is an easy way improve my navigational abilities. The arrow keys are useful, but they're badly positioned since they require moving a hand off the home row to reach them. By remapping the <code>fn</code> key to work together with the <code>h</code>, <code>j</code>, <code>k</code>, and <code>l</code> keys to act as arrows they're really quick to use.</p>
<pre><code class="language-json">{
  "description": "Change fn + h/j/k/l to arrow keys",
  "manipulators": [
    {
      "type": "basic",
      "from": {
        "key_code": "h",
        "modifiers": {
          "mandatory": [
            "fn"
          ],
          "optional": [
            "any"
          ]
        }
      },
      "to": [
        {
          "key_code": "left_arrow"
        }
      ]
    },
    {
      "type": "basic",
      "from": {
        "key_code": "j",
        "modifiers": {
          "mandatory": [
            "fn"
          ],
          "optional": [
            "any"
          ]
        }
      },
      "to": [
        {
          "key_code": "down_arrow"
        }
      ]
    },
    {
      "type": "basic",
      "from": {
        "key_code": "k",
        "modifiers": {
          "mandatory": [
            "fn"
          ],
          "optional": [
            "any"
          ]
        }
      },
      "to": [
        {
          "key_code": "up_arrow"
        }
      ]
    },
    {
      "type": "basic",
      "from": {
        "key_code": "l",
        "modifiers": {
          "mandatory": [
            "fn"
          ],
          "optional": [
            "any"
          ]
        }
      },
      "to": [
        {
          "key_code": "right_arrow"
        }
      ]
    }
  ]
}
</code></pre>
<blockquote>
<p>[!NOTE]
The choice for using <code>h</code>, <code>j</code>, <code>k</code>, and <code>l</code> might seem arbitrary, but it means you can navigate with just your right hand all from the home row.</p>
</blockquote>
<h2 id="keyboard-maestro"><a variant="plain" href="#keyboard-maestro">Keyboard Maestro</a></h2>
<p>With <a href="#remap-caps-lock-to-hyper-key">the <code>Hyper</code> key set up</a>, a wide range of new possible shortcuts are unlocked. To best make use of this I use <a href="https://www.keyboardmaestro.com/main/">Keyboard Maestro</a>, which is built around the concept of macros. A macro is a collection of actions that can be activated through so-called triggers. You describe what you want it to do and specify how you want those actions to activate and Keyboard Maestro will then take care of it.</p>
<p>This probably sounds a bit abstract, but it's also what makes it so flexible and powerful. More than the other suggestions so far, Keyboard Maestro is a personal app in that it's likely to be tailored to each user's needs and workflows. As such, rather than just diving into the "how", I'll also try and explain the "why" behind my setup.</p>
<h3 id="organization"><a variant="plain" href="#organization">Organization</a></h3>
<p>The app consists of three main panes: one for macro groups, one for macros, and one for the contents of the macro. These macro groups can be used just for organizational purposes, but also to have them share a certain characteristic (such as for <a href="#palettes">palettes</a>).</p>
<p>As my library of macros grew, I found it helped to keep them well organized. I tried a few approaches, but the one I have now is to use three types of macro groups:</p>
<ul>
<li><strong>App · [Name]:</strong> These contain macros related to a specific app.</li>
<li><strong>Palette · [Name]:</strong> These open up a specific palette.</li>
<li><strong>Trigger · [Name]</strong>: These contain macros using a specific trigger other than hot keys.</li>
</ul>
<p><img src="/posts/on-desktop-productivity/keyboard-maestro-light.png" alt="Screenshot of &#x22;Keyboard Maestro&#x22;"></p>
<p>Other than that, I also have a <strong>→ Subroutines</strong> group, with the arrow to keep it sorted on top. This contains macros that I don't use directly; instead, they contain generic actions that I execute from other macros. This lets me keep the main logic in one place, so if I ever have to update it I know where to do it and I only have to do it once.</p>
<p>To use these, insert the action called "Execute a Subroutine". You can define and pass along parameters as well, as well as pass data back to the initial macro.  See the <a href="#other-examples">examples subsection</a> for inspiration on how to use this.</p>
<h3 id="palettes"><a variant="plain" href="#palettes">Palettes</a></h3>
<p>Palettes are by far my most used feature of Keyboard Maestro. With it, a small overlay opens up that lists all the macros within the group, including (optionally) their icon and their trigger.</p>
<p>There's a few different ways of having palettes show up, but my favorite is to use <strong>Shows a palette for one action when → The hot key … is pressed</strong>. With this, pressing the specified hot key will show the palette, and triggering any of its macros will hide it again.</p>
<blockquote>
<p>[!NOTE]
Sometimes I open up a palette only to decide I don't want to use any of its macros. Intuitively I'd press <code>Escape</code> to discard it, but that doesn't work—it uses <code>Enter</code> for that instead. As a workaround, I normally add an empty macro with <code>Escape</code> as the trigger. Not ideal, but it makes more sense to me than the default.</p>
</blockquote>
<p>As mentioned earlier, the combination of the <a href="#remap-caps-lock-to-hyper-key"><code>Hyper</code></a> key is so impossible it's never used, and it can therefore be freely used for any combination. However, if you start using it for all your shortcuts directly, you'll soon find that you run out of sensible combinations.</p>
<p>So, instead, I use palettes to group macros, and—where possible—use mnemonic shortcuts to trigger them. Once the palette is open you don't necessarily need unique shortcuts anymore, so you can assign each of the macros within the palette a single letter as hot key. With this, it's one more key press compared to directly triggering the macro, but it doesn't pollute your global shortcuts, groups your macros nicely together, and gives you a nice little overlay to see the available macros, in case you need the reminder.</p>
<p>Here are some examples of palettes I use:</p>
<ul>
<li>
<p>A palette called "Browsers" that's triggered with <code>Hyper-B</code>, letting me open up a new window in any of three installed browsers.</p>
<p><img src="/posts/on-desktop-productivity/keyboard-maestro-palette-browsers.png" alt="Screenshot of &#x22;Keyboard Maestro -> Palettes -> Browsers&#x22;"></p>
</li>
<li>
<p>A palette called "Calls" that's triggered with <code>Hyper-C</code>, letting me FaceTime certain people or join certain Zoom calls (with a global mute/unmute).</p>
<p><img src="/posts/on-desktop-productivity/keyboard-maestro-palette-calls.png" alt="Screenshot of &#x22;Keyboard Maestro -> Palettes -> Calls&#x22;"></p>
</li>
<li>
<p>A palette called "Launchpad" that's triggered with <code>Hyper-L</code>, letting me jump between my most frequently used apps.</p>
<p><img src="/posts/on-desktop-productivity/keyboard-maestro-palette-launchpad.png" alt="Screenshot of &#x22;Keyboard Maestro -> Palettes -> Launchpad&#x22;"></p>
</li>
<li>
<p>A palette called "Modes" that's triggered with <code>Hyper-M</code>, letting me start and end modes such as for work or exercise.</p>
<p><img src="/posts/on-desktop-productivity/keyboard-maestro-palette-modes.png" alt="Screenshot of &#x22;Keyboard Maestro -> Palettes -> Modes&#x22;"></p>
</li>
<li>
<p>A palette called "Search" that's triggered with <code>Hyper-S</code>, letting me type in a query from wherever and have it directly open up the results.</p>
<p><img src="/posts/on-desktop-productivity/keyboard-maestro-palette-search.png" alt="Screenshot of &#x22;Keyboard Maestro -> Palettes -> Search&#x22;"></p>
</li>
</ul>
<h3 id="window-management"><a variant="plain" href="#window-management">Window Management</a></h3>
<p>I previously used a dedicated app for window management, but when I discovered that Keyboard Maestro has this functionality built in I quickly moved over. I'm sure it lacks some features found in dedicated apps, but it's enough for my needs. I use it in two ways:</p>
<ul>
<li>
<p><strong>As a palette:</strong> Similarly to the palettes described above, this presents an overlay with all my presets, which I then trigger with one additional hot key. I use <code>Hyper-Tab</code> for this, with the mnemonic that <code>Tab</code> is also involved in switching between apps.</p>
<p><img src="/posts/on-desktop-productivity/keyboard-maestro-palette-window-management.png" alt="Screenshot of &#x22;Keyboard Maestro -> Palettes -> Window Management&#x22;"></p>
</li>
<li>
<p><strong>As gestures:</strong> Keyboard Maestro can recognize gestures you make with your finger on your trackpad as triggers for macros. On its own this isn't very useful because it conflicts with regular trackpad usage, but, again, in combination with the <code>Hyper</code> key (or any other key, for that matter) you're all safe from that. I have a macro for each swipe direction (horizontally, vertically, and diagonally) to let me intuitively swipe a window to a certain side or corner of the screen.</p>
</li>
</ul>
<h3 id="typed-strings"><a variant="plain" href="#typed-strings">Typed Strings</a></h3>
<p>Macros can also be triggered by typing a sequence of characters. The only caveat here is that it will also trigger when you're in a text input, so you need to make sure it's not a combination of keys you'd normally use. I prefix most of my typed strings with <code>;</code> so as to avoid that.</p>
<p>These typed strings are particularly useful for inserting snippets of text. I have a few of these, and to keep them organized I namespace them, meaning I group macros with a similar purpose together under the same prefix. For example, I have <code>;dt</code> for inserting tomorrow's date and <code>;dy</code> for inserting yesterday's date. And I have a wide range of typed strings starting with <code>;f</code> which then insert dummy data (such as <code>;fs</code> for a <a href="https://en.wikipedia.org/wiki/Lorem_ipsum">Lorem ipsum</a> sentence or <code>;fe</code> for a fake email address).</p>
<p>Finally, I have a few typed strings for characters I frequently use, such as the arrow I use in this post ("→") that's inserted whenever I type <code>-></code>, or the multiplication sign ("×") that's inserted whenever I type <code>;x</code>,</p>
<h3 id="automations"><a variant="plain" href="#automations">Automations</a></h3>
<p>I have a few macros that are set and forget. They're triggered by things that just happen automatically, so they don't require my input. For example:</p>
<ul>
<li>Whenever I connect my MacBook to my external monitor my desk light is turned on and Do Not Disturb is turned off (with the assumption that it's time to work and I'll need to see those Slack notifications).</li>
<li>Whenever I am in a Zoom call my desk light turns red, like an on-air light. Then, it's reset when I disconnect.</li>
<li>Whenever I connect my external SSD to my MacBook the Time Machine preferences pane is opened so that I can monitor the backup progress. Then, it's closed when I disconnect.</li>
<li>Once a day a macro runs to check if a certain domain I'm eyeing is available.</li>
</ul>
<h3 id="other-examples"><a variant="plain" href="#other-examples">Other Examples</a></h3>
<p>Finally, let's dive into some random examples of macros I use and love. As mentioned before, I see Keyboard Maestro as a personal app in that it's likely to be tailored each user's needs and workflows, but I've certainly been inspired myself by seeing others' creativity.</p>
<p>A few of these have been set up as subroutines. In the <a href="#organization">organization subsection</a> I explain what these are and how to use these.</p>
<h4 id="making-a-facetime-call"><a variant="plain" href="#making-a-facetime-call">Making a FaceTime Call</a></h4>
<p>In the <a href="#palettes">palettes subsection</a> I describe my palette for making calls, among which FaceTime calls. The subroutine for this takes a parameter for the contact (like a phone number or an Apple ID) and then takes care of initiating the call.</p>
<p><img src="/posts/on-desktop-productivity/keyboard-maestro-example-facetime-light.png" alt="Screenshot of &#x22;Keyboard Maestro -> Subroutines -> FaceTime&#x22;"></p>
<h4 id="making-a-zoom-call"><a variant="plain" href="#making-a-zoom-call">Making a Zoom Call</a></h4>
<p>Similarly to the <a href="#making-a-facetime-call">FaceTime call</a> subroutine, the Zoom call subroutine takes a parameter to then connect to a Zoom call. What's slightly different is that it leaves it more open what to pass along, so that you're able to join a public call (<code>join?confno=123456789</code>), join a passcode-protected call (<code>join?confno=123456789&#x26;pwd=abcdef</code>), or start a call (<code>start?confno=123456789</code>).</p>
<p><img src="/posts/on-desktop-productivity/keyboard-maestro-example-zoom-light.png" alt="Screenshot of &#x22;Keyboard Maestro -> Subroutines -> Zoom&#x22;"></p>
<h4 id="performing-ocr"><a variant="plain" href="#performing-ocr">Performing OCR</a></h4>
<p>OCR (Optical Character Recognition) lets you pull text from an image. This subroutine only takes care of capturing the image, and then passes along the output to the macro that executed it for further processing. The <code>screencapture</code> command initiates taking a screenshot by dragging the mouse to select an area (<code>-s</code>) and then saves it to the clipboard (<code>-c</code>), and it does this without playing the usual screenshot sound (<code>-x</code>).</p>
<p><img src="/posts/on-desktop-productivity/keyboard-maestro-example-ocr-light.png" alt="Screenshot of &#x22;Keyboard Maestro -> Subroutines -> OCR&#x22;"></p>
<h4 id="toggling-do-not-disturb"><a variant="plain" href="#toggling-do-not-disturb">Toggling Do Not Disturb</a></h4>
<p>There are a few instances where I need to set the Do Not Disturb state. It's not quite as straightforward as turning it on or off; instead, you need to toggle it. Thankfully, there's a way to check if it is currently active, which can then be used to act accordingly:</p>
<p><img src="/posts/on-desktop-productivity/keyboard-maestro-example-dnd-light.png" alt="Screenshot of &#x22;Keyboard Maestro -> Subroutines -> Do Not Disturb&#x22;"></p>
<p>Create one that checks if the script is <code>0</code> to turn it on, and one that checks if the script is <code>1</code> to turn it off. The macro taking care of the actual toggling executes a keystroke, which is a shortcut I have set under <strong>System Preferences → Keyboard → Shortcuts</strong>. There, select "Mission Control" on the left, and configure a shortcut for the action "Turn Do Not Disturb On/Off". I went with <code>Hyper-0</code>, for no particular reason.</p>
<h4 id="syncing-browser-scroll-positions"><a variant="plain" href="#syncing-browser-scroll-positions">Syncing Browser Scroll Positions</a></h4>
<p>When I'm working on a site I sometimes want to try out different designs of the same element. To do this I open two tabs, make my changes in one tab, and then go back and forth between the two tabs to compare. Of course, it helps to then have the two tabs at the exact same scroll position so that there's no jumping around and you can focus entirely on the design changes.</p>
<p>This macro gets the scroll position from the front browser, saves it, and then, when triggered again within 5 seconds, will scroll to that position. If not used within that time it'll delete it, so that it's reset for the next use.</p>
<p><img src="/posts/on-desktop-productivity/keyboard-maestro-example-scroll-light.png" alt="Screenshot of &#x22;Keyboard Maestro -> Browsers -> Sync Scroll&#x22;"></p>
<h4 id="starting-and-stopping-modes"><a variant="plain" href="#starting-and-stopping-modes">Starting and Stopping Modes</a></h4>
<p>In the <a href="#palettes">palettes subsection</a> I describe my palette for different modes. Most of these modes just open up a few things, but for my work mode I have a system built in that toggles between starting the mode and stopping the mode.</p>
<p>To do this, in the start version I first perform all start-specific actions, then pause for 0.5 seconds so as not to interrupt those start actions, and then disable the start version and enable the stop version. In the stop version I do the same, except that I enable the start version and disable the stop version.</p>
<p>The great thing is that you can then give both versions the same trigger, and since only one of them will ever be enabled it just toggles between the two.</p>
<h2 id="conclusion"><a variant="plain" href="#conclusion">Conclusion</a></h2>
<p>I could go on and on about all my macros, but this seemed like a good selection to give just a taste of what's possible. If you're interested in hearing more about any of this, let me know on Twitter!</p>]]></content:encoded>
            <author>Osinga</author>
        </item>
    </channel>
</rss>