<?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" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by Code on the Rocks on Medium]]></title>
        <description><![CDATA[Stories by Code on the Rocks on Medium]]></description>
        <link>https://medium.com/@jtmuller5?source=rss-832e1120db1f------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/1*7dktqZMbzb8erU8wSU-5-g.png</url>
            <title>Stories by Code on the Rocks on Medium</title>
            <link>https://medium.com/@jtmuller5?source=rss-832e1120db1f------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Sat, 06 Jun 2026 14:43:38 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@jtmuller5/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com" rel="hub"/>
        <item>
            <title><![CDATA[To Semicolon, Or Not To Semicolon]]></title>
            <link>https://jtmuller5.medium.com/to-semicolon-or-not-to-semicolon-e095d74be5dc?source=rss-832e1120db1f------2</link>
            <guid isPermaLink="false">https://medium.com/p/e095d74be5dc</guid>
            <category><![CDATA[dart]]></category>
            <category><![CDATA[vscode-extension]]></category>
            <category><![CDATA[snippet]]></category>
            <category><![CDATA[typescript]]></category>
            <category><![CDATA[beginner-coding]]></category>
            <dc:creator><![CDATA[Code on the Rocks]]></dc:creator>
            <pubDate>Tue, 05 Mar 2024 00:00:15 GMT</pubDate>
            <atom:updated>2024-03-05T21:53:10.160Z</atom:updated>
            <content:encoded><![CDATA[<h4>Code on the Rocks</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*9ZlyisxKGT9S2fUyx_4m2A.png" /></figure><p>You’re a 10x developer until the language changes.</p><pre>print(&quot;Hello world&quot;);</pre><p>Nope…</p><pre>console.log(&quot;Hello world&quot;);</pre><p>No…</p><pre>System.out.println(&quot;Hello world&quot;);</pre><p>There it is!</p><h3>Speaking In Tongues</h3><p>Because I wasn’t careful, I recently found myself programming in 3 languages, each with its own accents and innuendos:</p><ul><li>Dart: For my day job. I’m working on a Flutter app for Android, iOS, and the web. I’ve been working with Dart for almost 4 years so this is my happy place.</li><li>TypeScript: For landing pages and various other React-based web interactions. I’ve dabbled with JavaScript, HTML, React, and the like but I only have a few months of experience under my belt.</li><li>Swift: For the Apple Vision Pro. I couldn’t resist the siren call of spatial computing. There’s only 1000 apps on the store so the competition is small, right? I’ve never written Swift code before.</li></ul><p>Everyone will tell you that trying to <a href="https://www.reddit.com/r/learnprogramming/wiki/faq/">learn multiple programming languages at the same time is ineffective</a> and they’re not wrong. You instantly recognize the similarities between languages, making it faster for you to understand how the code works, but the syntax differences absolutely slow you down. Sure, Dart, TypeScript, and Swift all give you the ability to create a variable that can later change, but they all do it a <em>little</em> bit differently.</p><p><strong>Dart</strong></p><pre>var name = &quot;Joseph&quot;;</pre><p>Pure, simple, and easy to understand.</p><p><strong>TypeScript</strong></p><pre>let name = &quot;Joseph&quot;;</pre><p>Now we’re using let instead of var. Remember that.</p><p><strong>Swift</strong></p><pre>var name = &quot;Joseph&quot;</pre><p>Back to using var ...but without the semicolon.</p><p>Its possible to remember each of these syntax rules. Its also possible to cut your grass with scissors. The issue is that you don’t just need to remember variable instantiation. You need to remember syntax related to variables, constants, data types, flow control, commenting, debugging, and everything else that makes programming what it is.</p><h3>In Practice</h3><p>GitHub copilot eased the pain of transitioning back and forth between Dart and TypeScript but writing TypeScript still felt slow because of my inexperience.</p><p>Simple things like untyped variables were layups for copilot:</p><pre>let //...copilot finishes the statement with something that makes sense</pre><p>The more layered the request however, the more wait time. For example, if I wanted a nullable String, I’d type out this comment and let copilot figure out the next line:</p><pre>// nullable String variable</pre><p>When you’re attempting to get the code out of your head and onto the screen, any waiting feels like too much. Waiting just a few seconds to let copilot think was frustrating. Plus, typing out a comment for such a simple request was admittedly awful.</p><p>The old school advice would be to learn the syntax and use it without relying on copilot. My response would be that using copilot to program is effectively learning the syntax on the fly and its faster than repeatedly googling basic syntax questions. After copilot politely showed me how to create a nullable variable a few times I didn’t need the extra comment. I had remembered.</p><p>When you introduce a third or fourth language however, the difficulty of remembering the individual syntaxes is multiplied (by 3 or 4 times, actually). Another language, another specific pattern. Static typing here, dynamic typing there. Semicolons only in languages that have the letter “T” in their name. Printing, logging, printing lines, logging lines? If you’re actively using multiple programming languages, you’ve had to feel the sting of forgetting something basic.</p><p>Copilot definitely helps but if you use it regularly, you’ll always be a bit slower than the alternate universe version of yourself that remembers all syntaxes perfectly.</p><p>And then there are days when you need Xcode and your trusty copilot is AWOL.</p><h3>What If It Was Easy?</h3><p>It was during this dark time of my life when I asked myself why it had to be this way. The syntax of every language was different but I was asking them each to do very similar things.</p><ul><li>Create a variable</li><li>Construct a class</li><li>Set up a switch statement</li><li>Print this thing so I can look at it</li></ul><p>And thus the idea for <a href="https://codeontherocks.dev/">Code on the Rocks</a> (COTR like “coder”) was formed.</p><p>What if there was a unifying language I could take everywhere and use to code confidently as a beginner?</p><p>The <a href="https://marketplace.visualstudio.com/items?itemName=CodeontheRocks.cotr-snippets">cotr-snippets</a> extension is a simple extension for VS Code that maps about 40 snippets to their implementations in a bunch of different languages. For example, the snippet cotrPrint generates the following code depending on the file type you currently have open:</p><p><strong>Dart</strong></p><pre>print(&#39;My message&#39;);</pre><p><strong>TypeScript</strong></p><pre>console.log(&#39;My message&#39;);</pre><p><strong>Swift</strong></p><pre>print(&quot;My message&quot;)</pre><p><strong>Rust</strong></p><pre>println!(&quot;My message&quot;);</pre><p><strong>Go</strong></p><pre>fmt.Println(&quot;My message&quot;)</pre><p>In total there are 14 supported languages with more in the works. In addition to the cotrPrint snippet, there are also all of these:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/834/1*GeECL5QrNVoS0q1c5UrGsg.png" /></figure><p>The extension was designed with the <a href="https://en.wikipedia.org/wiki/Pareto_principle">Pareto Principle</a>, or the “law of the vital few”, in mind. The snippets above don’t provide 100% coverage of each language but with them you can build something substantial and feel confident in any code base.</p><h3>What’s Next?</h3><p>While the extension is already super handy for multilingual coders, I think it could be especially useful for people that are new to programming. Each snippet could come with an optional explainer comment or alternative approaches. Rather than simply printing out brief statements or for loops, the extension could be packed with factual snippets about each language.</p><ul><li>cotrTypes -&gt; List out all data types</li><li>cotrPackages -&gt; Prints primary package management site</li><li>cotrDetails -&gt; Prints <a href="https://en.wikipedia.org/wiki/List_of_programming_languages_by_type">classification details</a> about the language</li></ul><p>I’m also working on a frameworks variation of the extension for different frontend frameworks like Flutter, React Bootstrap, and SwiftUI. A few examples of the snippets:</p><ul><li>cotrText -&gt; Text widget, div with text, Text view</li><li>cotrButton -&gt; ElevatedButton, Bootstrap Button, SwiftUI Button</li><li>cotrColumn -&gt; Column widget, Flex Grid Col, Swift VStack</li></ul><p>Frontend frameworks are a bit tricker to standardize so this idea needs to be baked a little longer.</p><h3>Try It</h3><p>The open source GitHub repo can be found here: <a href="https://github.com/CodeOTR/cotr-snippets">https://github.com/CodeOTR/cotr-snippets</a></p><p>The VS Code extension cotr-snippets is available on the marketplace: <a href="https://marketplace.visualstudio.com/items?itemName=CodeontheRocks.cotr-snippets">https://marketplace.visualstudio.com/items?itemName=CodeontheRocks.cotr-snippets</a></p><p>Feel free to make contributions or submit issues/feature requests to the repo. Happy coding! 🍹</p><p><em>Originally published at </em><a href="https://codeontherocks.dev/blog/cotr/coding/to-semicolon-or-not-to-semicolon/to-semicolon-or-not-to-semicolon/"><em>https://codeontherocks.dev</em></a><em> on March 5, 2024.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=e095d74be5dc" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Flutter Inception: A Free Shorebird Alternative]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://jtmuller5.medium.com/flutter-inception-18e2e8217fb?source=rss-832e1120db1f------2"><img src="https://cdn-images-1.medium.com/max/1474/1*is9_1v7IfYXUySZRV99M0w.png" width="1474"></a></p><p class="medium-feed-snippet">There is an intimacy between web developers and their users that native app developers are jealous of. Within minutes of finding and&#x2026;</p><p class="medium-feed-link"><a href="https://jtmuller5.medium.com/flutter-inception-18e2e8217fb?source=rss-832e1120db1f------2">Continue reading on Medium »</a></p></div>]]></description>
            <link>https://jtmuller5.medium.com/flutter-inception-18e2e8217fb?source=rss-832e1120db1f------2</link>
            <guid isPermaLink="false">https://medium.com/p/18e2e8217fb</guid>
            <category><![CDATA[flutter]]></category>
            <category><![CDATA[web-development]]></category>
            <category><![CDATA[dart]]></category>
            <category><![CDATA[mobile-development]]></category>
            <category><![CDATA[firebase]]></category>
            <dc:creator><![CDATA[Code on the Rocks]]></dc:creator>
            <pubDate>Wed, 09 Aug 2023 01:59:42 GMT</pubDate>
            <atom:updated>2023-08-09T12:41:13.272Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[Creating a Password Reset Flow with AppWrite and Flutter | Code On The Rocks]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://jtmuller5.medium.com/creating-a-password-reset-flow-with-appwrite-and-flutter-code-on-the-rocks-9db556be3cb7?source=rss-832e1120db1f------2"><img src="https://cdn-images-1.medium.com/max/1600/1*9XD9V-N59qBOjW-8SxeTZw.png" width="1600"></a></p><p class="medium-feed-snippet">Arguably the most important feature of any mobile application is its authentication workflow. If users can&#x2019;t log into your application&#x2026;</p><p class="medium-feed-link"><a href="https://jtmuller5.medium.com/creating-a-password-reset-flow-with-appwrite-and-flutter-code-on-the-rocks-9db556be3cb7?source=rss-832e1120db1f------2">Continue reading on Medium »</a></p></div>]]></description>
            <link>https://jtmuller5.medium.com/creating-a-password-reset-flow-with-appwrite-and-flutter-code-on-the-rocks-9db556be3cb7?source=rss-832e1120db1f------2</link>
            <guid isPermaLink="false">https://medium.com/p/9db556be3cb7</guid>
            <category><![CDATA[sofware-development]]></category>
            <category><![CDATA[mobile-app-development]]></category>
            <category><![CDATA[cross-platform]]></category>
            <category><![CDATA[flutter]]></category>
            <category><![CDATA[appwrite]]></category>
            <dc:creator><![CDATA[Code on the Rocks]]></dc:creator>
            <pubDate>Sun, 09 Jul 2023 00:00:23 GMT</pubDate>
            <atom:updated>2023-07-10T13:51:25.846Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[Butler Labs OCR in Flutter | Code On The Rocks]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://jtmuller5.medium.com/butler-labs-ocr-in-flutter-code-on-the-rocks-423518f2713a?source=rss-832e1120db1f------2"><img src="https://cdn-images-1.medium.com/max/1118/1*c4xBrM80vGZcJTP6IMFdnQ.png" width="1118"></a></p><p class="medium-feed-snippet">Butler Labs is an AI-powered optical character recognition (OCR) platform with models fine tuned to extract important data from a variety&#x2026;</p><p class="medium-feed-link"><a href="https://jtmuller5.medium.com/butler-labs-ocr-in-flutter-code-on-the-rocks-423518f2713a?source=rss-832e1120db1f------2">Continue reading on Medium »</a></p></div>]]></description>
            <link>https://jtmuller5.medium.com/butler-labs-ocr-in-flutter-code-on-the-rocks-423518f2713a?source=rss-832e1120db1f------2</link>
            <guid isPermaLink="false">https://medium.com/p/423518f2713a</guid>
            <category><![CDATA[dart]]></category>
            <category><![CDATA[flutter]]></category>
            <category><![CDATA[ocr]]></category>
            <category><![CDATA[rest-api]]></category>
            <category><![CDATA[mobile-app-development]]></category>
            <dc:creator><![CDATA[Code on the Rocks]]></dc:creator>
            <pubDate>Tue, 04 Jul 2023 00:00:02 GMT</pubDate>
            <atom:updated>2023-07-10T11:17:49.386Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[Julia Plotting Cheat Sheet]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://jtmuller5.medium.com/julia-plotting-cheat-sheet-fc67086f8c17?source=rss-832e1120db1f------2"><img src="https://cdn-images-1.medium.com/max/600/0*vgBOnZj4UlpdEm_a.png" width="600"></a></p><p class="medium-feed-snippet">This cheat sheet provides an overview of the most commonly used plotting functions and attributes in Julia using the popular plotting&#x2026;</p><p class="medium-feed-link"><a href="https://jtmuller5.medium.com/julia-plotting-cheat-sheet-fc67086f8c17?source=rss-832e1120db1f------2">Continue reading on Medium »</a></p></div>]]></description>
            <link>https://jtmuller5.medium.com/julia-plotting-cheat-sheet-fc67086f8c17?source=rss-832e1120db1f------2</link>
            <guid isPermaLink="false">https://medium.com/p/fc67086f8c17</guid>
            <category><![CDATA[data-science]]></category>
            <category><![CDATA[julialang]]></category>
            <category><![CDATA[python]]></category>
            <category><![CDATA[machine-learning]]></category>
            <category><![CDATA[julia]]></category>
            <dc:creator><![CDATA[Code on the Rocks]]></dc:creator>
            <pubDate>Sun, 16 Apr 2023 01:10:51 GMT</pubDate>
            <atom:updated>2023-06-19T18:46:47.117Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[Manifest.toml vs Project.toml in Julia]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://jtmuller5.medium.com/manifest-toml-vs-project-toml-in-julia-21ecbad6f92f?source=rss-832e1120db1f------2"><img src="https://cdn-images-1.medium.com/max/2600/1*UqidQzKoYww9UPRWC-Tz3w.png" width="6912"></a></p><p class="medium-feed-snippet">An Beginner&#x2019;s Exploration of Pkg</p><p class="medium-feed-link"><a href="https://jtmuller5.medium.com/manifest-toml-vs-project-toml-in-julia-21ecbad6f92f?source=rss-832e1120db1f------2">Continue reading on Medium »</a></p></div>]]></description>
            <link>https://jtmuller5.medium.com/manifest-toml-vs-project-toml-in-julia-21ecbad6f92f?source=rss-832e1120db1f------2</link>
            <guid isPermaLink="false">https://medium.com/p/21ecbad6f92f</guid>
            <category><![CDATA[julia]]></category>
            <category><![CDATA[julialang]]></category>
            <category><![CDATA[machine-learning]]></category>
            <category><![CDATA[julia-programming]]></category>
            <category><![CDATA[data-science]]></category>
            <dc:creator><![CDATA[Code on the Rocks]]></dc:creator>
            <pubDate>Thu, 13 Apr 2023 20:12:21 GMT</pubDate>
            <atom:updated>2023-06-19T18:47:42.330Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[HustleGPT and a 1000 Star Repo]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://jtmuller5.medium.com/hustlegpt-and-a-1000-star-repo-aea7f4b778e3?source=rss-832e1120db1f------2"><img src="https://cdn-images-1.medium.com/max/1024/1*ln2XcncL69rlErqTNB7vMQ.png" width="1024"></a></p><p class="medium-feed-snippet">tl;dr Here&#x2019;s the repo</p><p class="medium-feed-link"><a href="https://jtmuller5.medium.com/hustlegpt-and-a-1000-star-repo-aea7f4b778e3?source=rss-832e1120db1f------2">Continue reading on Medium »</a></p></div>]]></description>
            <link>https://jtmuller5.medium.com/hustlegpt-and-a-1000-star-repo-aea7f4b778e3?source=rss-832e1120db1f------2</link>
            <guid isPermaLink="false">https://medium.com/p/aea7f4b778e3</guid>
            <category><![CDATA[entrepreneurship]]></category>
            <category><![CDATA[business-development]]></category>
            <category><![CDATA[gpt-4]]></category>
            <category><![CDATA[chatgpt]]></category>
            <category><![CDATA[startup]]></category>
            <dc:creator><![CDATA[Code on the Rocks]]></dc:creator>
            <pubDate>Mon, 20 Mar 2023 22:39:46 GMT</pubDate>
            <atom:updated>2023-03-21T11:13:46.140Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[Controlling the Size of IntelliJ Plugin Tool Windows]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://jtmuller5.medium.com/controlling-the-size-of-intellij-plugin-tool-windows-e9a9083689cd?source=rss-832e1120db1f------2"><img src="https://cdn-images-1.medium.com/max/600/1*KCGDktebakEFwFsW3RsXng.png" width="600"></a></p><p class="medium-feed-snippet">In the previous two articles, I explained how to set up a custom IntelliJ plugin tool window and add components to it. These tutorials&#x2026;</p><p class="medium-feed-link"><a href="https://jtmuller5.medium.com/controlling-the-size-of-intellij-plugin-tool-windows-e9a9083689cd?source=rss-832e1120db1f------2">Continue reading on Medium »</a></p></div>]]></description>
            <link>https://jtmuller5.medium.com/controlling-the-size-of-intellij-plugin-tool-windows-e9a9083689cd?source=rss-832e1120db1f------2</link>
            <guid isPermaLink="false">https://medium.com/p/e9a9083689cd</guid>
            <category><![CDATA[intellij-plugin]]></category>
            <category><![CDATA[intellij-idea]]></category>
            <category><![CDATA[swing]]></category>
            <category><![CDATA[java]]></category>
            <category><![CDATA[java-swing]]></category>
            <dc:creator><![CDATA[Code on the Rocks]]></dc:creator>
            <pubDate>Tue, 21 Feb 2023 02:32:52 GMT</pubDate>
            <atom:updated>2023-02-21T02:32:52.586Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[Adding Swing UI Components to an IntelliJ Tool Window]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://jtmuller5.medium.com/adding-swing-ui-components-to-an-intellij-tool-window-db0462b2d486?source=rss-832e1120db1f------2"><img src="https://cdn-images-1.medium.com/max/902/1*sTm4DL5HqFGLNPBdpYQGqA.png" width="902"></a></p><p class="medium-feed-snippet">In the previous article, I explained how to add a Tool Window to an IntelliJ plugin. In this article, I&#x2019;ll walk through adding content to&#x2026;</p><p class="medium-feed-link"><a href="https://jtmuller5.medium.com/adding-swing-ui-components-to-an-intellij-tool-window-db0462b2d486?source=rss-832e1120db1f------2">Continue reading on Medium »</a></p></div>]]></description>
            <link>https://jtmuller5.medium.com/adding-swing-ui-components-to-an-intellij-tool-window-db0462b2d486?source=rss-832e1120db1f------2</link>
            <guid isPermaLink="false">https://medium.com/p/db0462b2d486</guid>
            <category><![CDATA[swing]]></category>
            <category><![CDATA[java]]></category>
            <category><![CDATA[intellij-idea]]></category>
            <category><![CDATA[intellij-plugin]]></category>
            <category><![CDATA[java-swing]]></category>
            <dc:creator><![CDATA[Code on the Rocks]]></dc:creator>
            <pubDate>Mon, 20 Feb 2023 01:09:52 GMT</pubDate>
            <atom:updated>2023-02-21T02:33:41.836Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[Adding a ToolWindow to an IntelliJ Plugin]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://jtmuller5.medium.com/adding-a-toolwindow-to-an-intellij-plugin-7b08ebc5ce6d?source=rss-832e1120db1f------2"><img src="https://cdn-images-1.medium.com/max/883/1*hxruDhgLfBmeBaOqcRDtLQ.png" width="883"></a></p><p class="medium-feed-snippet">A Beginner&#x2019;s Guide</p><p class="medium-feed-link"><a href="https://jtmuller5.medium.com/adding-a-toolwindow-to-an-intellij-plugin-7b08ebc5ce6d?source=rss-832e1120db1f------2">Continue reading on Medium »</a></p></div>]]></description>
            <link>https://jtmuller5.medium.com/adding-a-toolwindow-to-an-intellij-plugin-7b08ebc5ce6d?source=rss-832e1120db1f------2</link>
            <guid isPermaLink="false">https://medium.com/p/7b08ebc5ce6d</guid>
            <category><![CDATA[kotlin]]></category>
            <category><![CDATA[jetbrains]]></category>
            <category><![CDATA[android-studio-plugins]]></category>
            <category><![CDATA[intellij-plugin]]></category>
            <category><![CDATA[javafx]]></category>
            <dc:creator><![CDATA[Code on the Rocks]]></dc:creator>
            <pubDate>Sat, 11 Feb 2023 22:39:37 GMT</pubDate>
            <atom:updated>2023-02-14T05:36:09.285Z</atom:updated>
        </item>
    </channel>
</rss>