<?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 Joseph Kottenstette on Medium]]></title>
        <description><![CDATA[Stories by Joseph Kottenstette on Medium]]></description>
        <link>https://medium.com/@josephkottenstette?source=rss-840bc12160b------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/1*sIgQjqQMFhTICkP0kAsZ_g.jpeg</url>
            <title>Stories by Joseph Kottenstette on Medium</title>
            <link>https://medium.com/@josephkottenstette?source=rss-840bc12160b------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Sun, 24 May 2026 04:26:15 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@josephkottenstette/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[Top 5 WebDev Plugins for Atom]]></title>
            <link>https://medium.com/@josephkottenstette/top-5-webdev-plugins-for-atom-8f92d4dd2528?source=rss-840bc12160b------2</link>
            <guid isPermaLink="false">https://medium.com/p/8f92d4dd2528</guid>
            <category><![CDATA[javascript]]></category>
            <category><![CDATA[web-development]]></category>
            <category><![CDATA[plugins]]></category>
            <category><![CDATA[coding]]></category>
            <category><![CDATA[atom-text-editor]]></category>
            <dc:creator><![CDATA[Joseph Kottenstette]]></dc:creator>
            <pubDate>Sat, 18 Feb 2017 00:26:39 GMT</pubDate>
            <atom:updated>2017-02-18T00:26:39.974Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*g5C4MOctTnegWwCCP11H7Q.png" /></figure><h4>One of my favorite aspects of <a href="https://atom.io/">Atom </a>is its convenient package manager. Browsing and downloading packages on Atom is a snap, and best of all of the source code is open!</h4><p>When it comes to plugins, I try to keep it down to a minimum. Each tool added to the belt comes with a learning cost, one that for me is often not justified. But adhering to that tenet too far would have me coding in vanilla Notepad! And let’s be honest… the web is <em>not </em>a minimalist platform!</p><p>Here are my personal top 5 web developer plugins for Atom:</p><h4><strong>MUST HAVE:</strong> <a href="https://atom.io/packages/atom-beautify">Atom-Beautify</a></h4><p>Code can get unwieldy quick. That’s why the number one package on my list is a beautifier tool. White-space and indentation tend to be the main culprits, but this tool will automatically format all of that (and more) for you!</p><h4><strong>MUST HAVE:</strong> <a href="https://atom.io/packages/emmet">Emmet</a></h4><p>Anyone who spends time writing HTML should checkout Emmet. It’s syntax is similar to templating engines like HAML or Jade, except you hit “tab” after writing the tag, and it autocompletes to HTML. Even if you don’t utilize all of Emmets <a href="http://docs.emmet.io/cheat-sheet/">features</a> at first, I think you’ll find spending ten minutes to learn the basics is worth it.</p><h4><a href="https://atom.io/packages/linter-jshint">Linter-Jshint</a></h4><p>It’s no secret that JavaScript is a… quirky language. Arbitrary in matters of scope, type coercion, semicolon insertion, and common keywords like <strong>new. </strong>While a linter wont solve <em>all</em> these issues, it will point out a great deal of troublesome/invalid syntax (especially as your projects grow).</p><h4><a href="https://atom.io/packages/vim-mode-plus">Vim-Mode-Plus</a></h4><p>Vim purists will hate this one! Pairing (or perhaps inflicting) Vim into Atom took me longer to get used to than any other plugin. However, I prefer to only use the keyboard when on a laptop, but a keyboard <em>and </em>mouse for desktop, and don’t want to have to constantly switch between editors.</p><h4><a href="https://atom.io/packages/platformio-ide-terminal">PlatformIO-IDE-Terminal</a></h4><p>&lt;DosEquisVoice&gt; <em>I don’t often code on Windows, but when I do, I use this built-in terminal for convenience. Stay 1337 my friends.</em>&lt;/DosEquisVoice&gt;</p><h4>These are the top Atom plugins I use on a daily basis. Check them out if you haven’t already!</h4><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=8f92d4dd2528" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Universal GUI Navigation]]></title>
            <link>https://medium.com/@josephkottenstette/universal-gui-navigation-b402abdbb197?source=rss-840bc12160b------2</link>
            <guid isPermaLink="false">https://medium.com/p/b402abdbb197</guid>
            <category><![CDATA[tech]]></category>
            <category><![CDATA[productivity]]></category>
            <category><![CDATA[user-experience]]></category>
            <category><![CDATA[desktop]]></category>
            <category><![CDATA[operating-systems]]></category>
            <dc:creator><![CDATA[Joseph Kottenstette]]></dc:creator>
            <pubDate>Sat, 03 Dec 2016 00:23:43 GMT</pubDate>
            <atom:updated>2016-12-03T00:26:44.893Z</atom:updated>
            <content:encoded><![CDATA[<h4>UX DESIGNERS HATE HIM! ONE WEIRD TRICK TO CONQUER NEW DESKTOP ENVIRONMENTS!!!</h4><p>As a technology professional, you may find yourself in a situation where you have to work with an unfamiliar desktop environment. While most Windows and Mac users tend to use their respective standard DEs, there are about a dozen various popular ones for *nix. It can take several hours to get used to the new arrangement, but you need to be productive right away!</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*rmR61Sr3J7A8PHGJY9P7rg.jpeg" /><figcaption>Huh... (GNOME 3)</figcaption></figure><p>You <em>could </em>modify the desktop environment itself to your liking, however that takes time (and if you’re a UI nitpicker like me, A LOT of time!). Instead we will assign custom keyboard shortcuts to start our applications. How-To Geek has a guide for Windows users <a href="http://www.howtogeek.com/124109/5-ways-to-quickly-launch-programs-on-windows/">here</a>.</p><p>Choose a base key (I prefer the Super, or windows key), plus a letter or number to launch the app. So to launch your text editor, you could assign the key combination Super + e. Need a calculator? Super + c. Media player? Super + m. Etc…</p><p>This is convenient because you don’t have to go clicking through folders to start the app you want. Even if you aren’t concerned about working on multiple operating systems, this is still the quickest way to run your apps.</p><h4>Being a minimalist in the tech world ain’t easy,</h4><p>or even a practical philosophy to cling to in many situations. However, I believe utilitarianism should still be applied where possible.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=b402abdbb197" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Workaround for Firefox Geolocation Permission Prompt]]></title>
            <link>https://medium.com/@josephkottenstette/workaround-for-firefox-geolocation-permission-prompt-ef57933c1666?source=rss-840bc12160b------2</link>
            <guid isPermaLink="false">https://medium.com/p/ef57933c1666</guid>
            <category><![CDATA[geolocation]]></category>
            <category><![CDATA[firefox]]></category>
            <category><![CDATA[web-development]]></category>
            <category><![CDATA[javascript]]></category>
            <dc:creator><![CDATA[Joseph Kottenstette]]></dc:creator>
            <pubDate>Sat, 12 Nov 2016 00:11:04 GMT</pubDate>
            <atom:updated>2017-06-23T23:39:51.332Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/515/1*lKN6iFx4CPoRkSHOZH3qdg.jpeg" /></figure><h4>Obtaining end-user location is a common task for many web applications. One (ostensibly) simple way to do this is with the built-in geolocation API included within all major browsers.</h4><p>From the <a href="https://developer.mozilla.org/en-US/docs/Web/API/Geolocation/Using_geolocation">MDN:</a> <em>“The geolocation API allows the user to provide their location to web applications if they so desire. For privacy reasons, the user is asked for permission to report location information.”</em></p><p>Setting this up is straightforward enough:</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/aebf375cdea557eaf62410f717c7f03b/href">https://medium.com/media/aebf375cdea557eaf62410f717c7f03b/href</a></iframe><p>As is error handling:</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/6f19733a76ef8c39adbacba8ce2854dd/href">https://medium.com/media/6f19733a76ef8c39adbacba8ce2854dd/href</a></iframe><p>Simple! The only problem is… if the user declines to share their location, <strong>there is no way to detect this for Firefox users</strong> (it works in other browsers).</p><p>Initially I thought I was facing a bug, but apparently this behavior is <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=675533">intentional</a>.</p><p>The cross-browser compatible solution I found to overcome this is with JavaScript’s built-in <strong>setTimeout()</strong> function. Here we’ll assign the coordinates we want to variables, and have setTimeout() check their state to detect whether or not they’ve been assigned a value. If a value is not assigned within 5 seconds, then the coordinates were not obtained.</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/599b81603fb192317ff7275e45dc73f3/href">https://medium.com/media/599b81603fb192317ff7275e45dc73f3/href</a></iframe><h4>I Hope this helps!</h4><p><em>Have you encountered this issue? How did you overcome it?</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=ef57933c1666" width="1" height="1" alt="">]]></content:encoded>
        </item>
    </channel>
</rss>