<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Chad Stovern</title>
    <link>https://chadstovern.com/</link>
    <description>Recent content on Chad Stovern</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en</language>
    <lastBuildDate>Wed, 15 Nov 2023 00:00:00 +0000</lastBuildDate><atom:link href="https://chadstovern.com/all-posts.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Preferring Plain Text Tools</title>
      <link>https://chadstovern.com/preferring-plain-text-tools/</link>
      <pubDate>Wed, 15 Nov 2023 00:00:00 +0000</pubDate>
      
      <guid>https://chadstovern.com/preferring-plain-text-tools/</guid>
      <description>&lt;p&gt;
Over the years there are a number of tools I have used to manage projects and todo lists.  I&amp;#39;ve tried may note-taking apps.  I&amp;#39;m written notes in markdown and then org-mode.&lt;/p&gt;
&lt;p&gt;
The one long running trend that has persisted for all of these things is a move toward plain text.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Plain text will never go away.&lt;/li&gt;
&lt;li&gt;Plain text has no vendor lock-in.&lt;/li&gt;
&lt;li&gt;Plain text files can be opened on any system with any editor, regardless of your markup style preferences.&lt;/li&gt;
&lt;li&gt;Plain text files can be stored with any cloud storage provider or &lt;a href=&#34;https://git-scm.com&#34;&gt;version control system&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To sway people towards a certain &lt;a href=&#34;https://www.gnu.org/software/emacs/&#34;&gt;editor&lt;/a&gt; or &lt;a href=&#34;https://orgmode.org&#34;&gt;markup&lt;/a&gt; flavor is tempting.  Instead, I will just issue this challenge.  For any information that you care about keeping for a long period of time, consider storing it somewhere safely as plain text.&lt;/p&gt;</description>
      <content>&lt;p&gt;
Over the years there are a number of tools I have used to manage projects and todo lists.  I&amp;#39;ve tried may note-taking apps.  I&amp;#39;m written notes in markdown and then org-mode.&lt;/p&gt;
&lt;p&gt;
The one long running trend that has persisted for all of these things is a move toward plain text.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Plain text will never go away.&lt;/li&gt;
&lt;li&gt;Plain text has no vendor lock-in.&lt;/li&gt;
&lt;li&gt;Plain text files can be opened on any system with any editor, regardless of your markup style preferences.&lt;/li&gt;
&lt;li&gt;Plain text files can be stored with any cloud storage provider or &lt;a href=&#34;https://git-scm.com&#34;&gt;version control system&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To sway people towards a certain &lt;a href=&#34;https://www.gnu.org/software/emacs/&#34;&gt;editor&lt;/a&gt; or &lt;a href=&#34;https://orgmode.org&#34;&gt;markup&lt;/a&gt; flavor is tempting.  Instead, I will just issue this challenge.  For any information that you care about keeping for a long period of time, consider storing it somewhere safely as plain text.&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>Using QMK Powered Keyboards with KVM Switches</title>
      <link>https://chadstovern.com/using-qmk-powered-keyboards-with-kvm-switches/</link>
      <pubDate>Fri, 03 Mar 2023 00:00:00 +0000</pubDate>
      
      <guid>https://chadstovern.com/using-qmk-powered-keyboards-with-kvm-switches/</guid>
      <description>&lt;p&gt;
For the past year or so I&amp;#39;ve been using a KVM switch to be able to easily swap between my work computer and personal computer.  This is great for having the same dual monitor and standing desk setup in my home office, regardless of what I am hacking on.&lt;/p&gt;
&lt;div id=&#34;outline-container-headline-1&#34; class=&#34;outline-3&#34;&gt;
&lt;h3 id=&#34;headline-1&#34;&gt;
The Problem
&lt;/h3&gt;
&lt;div id=&#34;outline-text-headline-1&#34; class=&#34;outline-text-3&#34;&gt;
&lt;p&gt;
The only problem was my custom keyboard(s) running QMK weren&amp;#39;t recognized as a keyboard by the KVM, and only work in the USB hub port.  The KVM does have a remote, but the IR is buggy and inconsistent.  Having to reach across the desk and hit the number of the computer I want to control wasn&amp;#39;t the end of the world, but was annoying enough that I found a solution.&lt;/p&gt;</description>
      <content>
&lt;p&gt;
For the past year or so I&amp;#39;ve been using a KVM switch to be able to easily swap between my work computer and personal computer.  This is great for having the same dual monitor and standing desk setup in my home office, regardless of what I am hacking on.&lt;/p&gt;
&lt;div id=&#34;outline-container-headline-1&#34; class=&#34;outline-3&#34;&gt;
&lt;h3 id=&#34;headline-1&#34;&gt;
The Problem
&lt;/h3&gt;
&lt;div id=&#34;outline-text-headline-1&#34; class=&#34;outline-text-3&#34;&gt;
&lt;p&gt;
The only problem was my custom keyboard(s) running QMK weren&amp;#39;t recognized as a keyboard by the KVM, and only work in the USB hub port.  The KVM does have a remote, but the IR is buggy and inconsistent.  Having to reach across the desk and hit the number of the computer I want to control wasn&amp;#39;t the end of the world, but was annoying enough that I found a solution.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&#34;outline-container-headline-2&#34; class=&#34;outline-3&#34;&gt;
&lt;h3 id=&#34;headline-2&#34;&gt;
The Solution
&lt;/h3&gt;
&lt;div id=&#34;outline-text-headline-2&#34; class=&#34;outline-text-3&#34;&gt;
&lt;p&gt;
To fix the problem I had to disable n-key rollover in QMK.  It turns out that keyboards that support more than six simultaneous key presses actually report as a USB hub, not a plain hardware keyboard (or something to that effect).  I updated my config files in my custom key-map as follows.&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;if present, remove the following line from &lt;strong&gt;config.h&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;div class=&#34;src src-c&#34;&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-c&#34; data-lang=&#34;c&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;#define FORCE_NKRO&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;em&gt;add or modify the following lines in &lt;strong&gt;rules.mk&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;div class=&#34;src src-makefile&#34;&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-makefile&#34; data-lang=&#34;makefile&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  NKRO_ENABLE &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; no &lt;span style=&#34;color:#75715e&#34;&gt;# usb nkey rollover&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  FORCE_NKRO &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; no
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&#34;outline-container-headline-3&#34; class=&#34;outline-3&#34;&gt;
&lt;h3 id=&#34;headline-3&#34;&gt;
QMK + KVM Harmony
&lt;/h3&gt;
&lt;div id=&#34;outline-text-headline-3&#34; class=&#34;outline-text-3&#34;&gt;
&lt;p&gt;
Once I made these changes and re-flashed my firmware, I was able to plug my custom keyboard into the hardware keyboard port on my KVM and everything just worked.  I could now double-tap right control, followed by the number of the computer I wanted to switch to without issue.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
</content>
    </item>
    
    <item>
      <title>JavaScript in Emacs Revisted</title>
      <link>https://chadstovern.com/javascript-in-emacs-revisted/</link>
      <pubDate>Sat, 02 May 2020 00:00:00 +0000</pubDate>
      
      <guid>https://chadstovern.com/javascript-in-emacs-revisted/</guid>
      <description>&lt;p&gt;My blog is in danger of becoming only about Emacs with a dash of musings on JavaScript, but I think it&amp;rsquo;s important to document my findings after working solely in Emacs as a Software Engineer for the past five months.&lt;/p&gt;
&lt;p&gt;This is by no means a complete guide to getting set up to work as a JavaScript developer in Emacs, but should give you the tools you need to find your own path with some ease.&lt;/p&gt;</description>
      <content>&lt;p&gt;My blog is in danger of becoming only about Emacs with a dash of musings on JavaScript, but I think it&amp;rsquo;s important to document my findings after working solely in Emacs as a Software Engineer for the past five months.&lt;/p&gt;
&lt;p&gt;This is by no means a complete guide to getting set up to work as a JavaScript developer in Emacs, but should give you the tools you need to find your own path with some ease.&lt;/p&gt;
&lt;h2 id=&#34;whats-in-a-mode&#34;&gt;What&amp;rsquo;s in a Mode?&lt;/h2&gt;
&lt;p&gt;First came my realization that I could use &lt;code&gt;rjsx-mode&lt;/code&gt; for all JavaScript files.  Since this mode is just an extension of the popular &lt;code&gt;js2-mode&lt;/code&gt;, I dropped the logic from my configuration to try and figure out if a file contained React JSX or not.  I have not had any issues using &lt;code&gt;rjsx-mode&lt;/code&gt; for editing all JavaScript files.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-lisp&#34; data-lang=&#34;lisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;use-package&lt;/span&gt; rjsx-mode
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;:mode&lt;/span&gt; (&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;\\.js\\&amp;#39;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;\\.jsx\\&amp;#39;&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;:config&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#66d9ef&#34;&gt;setq&lt;/span&gt; js2-mode-show-parse-errors &lt;span style=&#34;color:#66d9ef&#34;&gt;nil&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       js2-mode-show-strict-warnings &lt;span style=&#34;color:#66d9ef&#34;&gt;nil&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       js2-basic-offset &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       js-indent-level &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (setq-local flycheck-disabled-checkers (cl-union flycheck-disabled-checkers
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                                                  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#39;&lt;/span&gt;(javascript-jshint))) &lt;span style=&#34;color:#75715e&#34;&gt;; jshint doesn&amp;#39;t work for JSX&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (electric-pair-mode &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (evil-leader/set-key-for-mode &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;rjsx-mode&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;fu&amp;#34;&lt;/span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;#&amp;#39;&lt;/span&gt;lsp-find-references          &lt;span style=&#34;color:#75715e&#34;&gt;; (f)ind (u)sages&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;fp&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;prettier-js-mode&lt;/span&gt;))             &lt;span style=&#34;color:#75715e&#34;&gt;; (f)ormat (p)rettier&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;think-globally-run-locally&#34;&gt;Think Globally, Run Locally&lt;/h2&gt;
&lt;p&gt;The &lt;code&gt;add-node-modules-path&lt;/code&gt; package is great for automatically detecting and using npm package binaries which are locally installed in the project you&amp;rsquo;re actively editing, such as eslint, prettier, etc.  This allowed me to no longer maintain similar functionality I had written myself as Emacs Lisp functions.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-lisp&#34; data-lang=&#34;lisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;use-package&lt;/span&gt; add-node-modules-path
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;:defer&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;t&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;:hook&lt;/span&gt; (((js2-mode rjsx-mode) &lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt; add-node-modules-path)))
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;i-feel-pretty&#34;&gt;I Feel Pretty&lt;/h2&gt;
&lt;p&gt;On my current team we have settled on using ESLint with Prettier.  Emacs has a great package that will automatically apply Prettier rules to the current buffer on save.  By default it will use the Prettier config in the current project.  I highly recommend this over setting global defaults in your Emacs config.  This allows you to just write code and not worry about formatting.  I added a shortcut of &lt;code&gt;,fp&lt;/code&gt; to toggle this behavior on and off in the event I don&amp;rsquo;t want to apply Prettier rules.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-lisp&#34; data-lang=&#34;lisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;use-package&lt;/span&gt; prettier-js
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;:defer&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;t&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;:diminish&lt;/span&gt; prettier-js-mode
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;:hook&lt;/span&gt; (((js2-mode rjsx-mode) &lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt; prettier-js-mode))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;:init&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  (evil-leader/set-key-for-mode &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;rjsx-mode&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;fp&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;prettier-js-mode&lt;/span&gt;)) &lt;span style=&#34;color:#75715e&#34;&gt;; (f)ormat (p)rettier&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;you-complete-me&#34;&gt;You Complete Me&lt;/h2&gt;
&lt;p&gt;Most importantly, like my colleagues using Visual Studio Code (VSCode), I wanted full-featured code completion, function definition and usage lookups.  &lt;code&gt;lsp-mode&lt;/code&gt; works great for this.  Just like VSCode, It uses Microsoft&amp;rsquo;s TypeScript Language Server behind the scenes.  In addition to the emacs setup you need to globally install those supporting tools.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;npm i -g typescript-language-server; npm i -g typescript
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;I added some shortcuts for jumping to a definition, and then jumping back.  In the JavaScript configuration above their is also a shortcut for &amp;ldquo;find usages&amp;rdquo; which is &lt;em&gt;very&lt;/em&gt; handy when working in a code base of any size.&lt;/p&gt;
&lt;p&gt;I highly recommend reading the configuration below, the embedded comments, and the lsp-mode documentation to get a feel for the options you may want.  The main thing for me was not allowing &lt;code&gt;lsp-mode&lt;/code&gt; to suppress and replace the detected default linter for a project.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-lisp&#34; data-lang=&#34;lisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;use-package&lt;/span&gt; lsp-mode
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;:defer&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;t&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;:diminish&lt;/span&gt; lsp-mode
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;:hook&lt;/span&gt; (((js2-mode rjsx-mode) &lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt; lsp))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;:commands&lt;/span&gt; lsp
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;:config&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  (&lt;span style=&#34;color:#66d9ef&#34;&gt;setq&lt;/span&gt; lsp-auto-configure &lt;span style=&#34;color:#66d9ef&#34;&gt;t&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        lsp-auto-guess-root &lt;span style=&#34;color:#66d9ef&#34;&gt;t&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#75715e&#34;&gt;;; don&amp;#39;t set flymake or lsp-ui so the default linter doesn&amp;#39;t get trampled&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        lsp-diagnostic-package &lt;span style=&#34;color:#e6db74&#34;&gt;:none&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;;;; keybinds after load&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  (evil-leader/set-key
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;jd&amp;#34;&lt;/span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;#&amp;#39;&lt;/span&gt;lsp-goto-type-definition &lt;span style=&#34;color:#75715e&#34;&gt;; (j)ump to (d)efinition&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;jb&amp;#34;&lt;/span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;#&amp;#39;&lt;/span&gt;xref-pop-marker-stack))  &lt;span style=&#34;color:#75715e&#34;&gt;; (j)ump (b)ack to marker&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;use-package&lt;/span&gt; company-lsp
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;:defer&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;t&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;:config&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  (&lt;span style=&#34;color:#66d9ef&#34;&gt;setq&lt;/span&gt; company-lsp-cache-candidates &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;auto&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        company-lsp-async &lt;span style=&#34;color:#66d9ef&#34;&gt;t&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        company-lsp-enable-snippet &lt;span style=&#34;color:#66d9ef&#34;&gt;nil&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        company-lsp-enable-recompletion &lt;span style=&#34;color:#66d9ef&#34;&gt;t&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;use-package&lt;/span&gt; lsp-ui
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;:defer&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;t&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;:config&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  (&lt;span style=&#34;color:#66d9ef&#34;&gt;setq&lt;/span&gt; lsp-ui-sideline-enable &lt;span style=&#34;color:#66d9ef&#34;&gt;t&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#75715e&#34;&gt;;; disable flycheck setup so default linter isn&amp;#39;t trampled&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        lsp-ui-flycheck-enable &lt;span style=&#34;color:#66d9ef&#34;&gt;nil&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        lsp-ui-sideline-show-symbol &lt;span style=&#34;color:#66d9ef&#34;&gt;nil&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        lsp-ui-sideline-show-hover &lt;span style=&#34;color:#66d9ef&#34;&gt;nil&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        lsp-ui-sideline-show-code-actions &lt;span style=&#34;color:#66d9ef&#34;&gt;nil&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        lsp-ui-peek-enable &lt;span style=&#34;color:#66d9ef&#34;&gt;nil&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        lsp-ui-imenu-enable &lt;span style=&#34;color:#66d9ef&#34;&gt;nil&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        lsp-ui-doc-enable &lt;span style=&#34;color:#66d9ef&#34;&gt;nil&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;parting-thoughts&#34;&gt;Parting Thoughts&lt;/h2&gt;
&lt;p&gt;I&amp;rsquo;m pretty happy with my setup so far, and haven&amp;rsquo;t run into any issues or missing features compared to running VSCode.  I&amp;rsquo;m also using TypeScript, which may spawn a follow-up post.  Here is a link to the JavaScript / TypeScript section of my living &lt;a href=&#34;https://github.com/chadhs/dotfiles/blob/master/editors/emacs-config.org#javascript--typescript&#34;&gt;Emacs Configuration&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Clojure is my favorite programming language, but JavaScript has become my second:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;I can write mostly functional code.&lt;/li&gt;
&lt;li&gt;I can avoid the complexity of classes using modules which are essentially namespaces.&lt;/li&gt;
&lt;li&gt;I can get opt-in types and interfaces, similar to clojure.spec, via TypeScript.&lt;/li&gt;
&lt;li&gt;I can get a REPL-lite experience via Jest in &lt;code&gt;--watch&lt;/code&gt; mode; yet nothing beats a REPL.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you made it this far, you may be as crazy as I am.  Happy Hacking!&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>Javascript Support in Emacs</title>
      <link>https://chadstovern.com/javascript-support-in-emacs/</link>
      <pubDate>Fri, 16 Feb 2018 00:00:00 +0000</pubDate>
      
      <guid>https://chadstovern.com/javascript-support-in-emacs/</guid>
      <description>&lt;p&gt;Two hills I&amp;rsquo;m prepared to die on are the superiority of modal editing and the near limitless power and customization of Emacs.&lt;/p&gt;
&lt;p&gt;While vscode, atom, etc are nice and have decent communities building plugins around them, I&amp;rsquo;ll be configuring emacs to take me on my journey to learn javascript.&lt;/p&gt;
&lt;p&gt;There is a built in javascript mode with very basic functionality but we want better highlighting and parsing plus syntax checking.  This is where js2-mode comes in: &lt;a href=&#34;http://elpa.gnu.org/packages/js2-mode.html&#34;&gt;http://elpa.gnu.org/packages/js2-mode.html&lt;/a&gt;&lt;/p&gt;</description>
      <content>&lt;p&gt;Two hills I&amp;rsquo;m prepared to die on are the superiority of modal editing and the near limitless power and customization of Emacs.&lt;/p&gt;
&lt;p&gt;While vscode, atom, etc are nice and have decent communities building plugins around them, I&amp;rsquo;ll be configuring emacs to take me on my journey to learn javascript.&lt;/p&gt;
&lt;p&gt;There is a built in javascript mode with very basic functionality but we want better highlighting and parsing plus syntax checking.  This is where js2-mode comes in: &lt;a href=&#34;http://elpa.gnu.org/packages/js2-mode.html&#34;&gt;http://elpa.gnu.org/packages/js2-mode.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m going to make two assumptions here:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;You already have flycheck installed or will go read about it and set it up yourself.&lt;/li&gt;
&lt;li&gt;You are using use-package to manage your package installs and configuration like me, or know how to adapt my examples for your own preferred method.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;This snippet will get js2-mode installed and set as the default mode for all &lt;code&gt;.js&lt;/code&gt; files you edit.  It is also setting some indentation preferences and disabling some built in syntax checking options (we&amp;rsquo;ll be leveraging flycheck and jshint).&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-lisp&#34; data-lang=&#34;lisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;;; a better javascript mode&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;use-package&lt;/span&gt; js2-mode
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;:mode&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;\\.js\\&amp;#39;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;:config&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  (&lt;span style=&#34;color:#66d9ef&#34;&gt;setq&lt;/span&gt; js2-mode-show-parse-errors &lt;span style=&#34;color:#66d9ef&#34;&gt;nil&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        js2-mode-show-strict-warnings &lt;span style=&#34;color:#66d9ef&#34;&gt;nil&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        js2-basic-offset &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        js-indent-level &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  (electric-pair-mode &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Now we can install jshint for linting / syntax checking purposes.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;npm install -g jshint&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Followed by creating a global &lt;code&gt;.jshintrc&lt;/code&gt; file in our home directory.  See a full set of options here: &lt;a href=&#34;https://github.com/jshint/jshint/blob/master/examples/.jshintrc&#34;&gt;.jshintrc&lt;/a&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;asi&amp;#34;&lt;/span&gt;       : &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;esversion&amp;#34;&lt;/span&gt; : &lt;span style=&#34;color:#ae81ff&#34;&gt;6&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;We&amp;rsquo;re now ready to start hacking around with javascript code with full syntax checking and highligting.&lt;/p&gt;
&lt;p&gt;Better code auto-completion would be nice, but we&amp;rsquo;ll tackle that next time. B-)&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>Using Paredit With Javascript Modes</title>
      <link>https://chadstovern.com/using-paredit-with-javascript-modes/</link>
      <pubDate>Wed, 31 Jan 2018 00:00:00 +0000</pubDate>
      
      <guid>https://chadstovern.com/using-paredit-with-javascript-modes/</guid>
      <description>&lt;p&gt;I&amp;rsquo;m a huge fan of Emacs and a huge fan of programming using Clojure.  I&amp;rsquo;ve been trying to avoid Javascript, but it&amp;rsquo;s reach is everywhere and learning it will definitely help my day job efforts helping teams create cloud native applications.&lt;/p&gt;
&lt;p&gt;One hurdle I faced in setting up Emacs for Javascript development was paredit inserting a space before opening parens  in Javascript and JSON modes; leaving me with things like &lt;code&gt;console.log (&amp;quot;foo&amp;quot;)&lt;/code&gt; rather than &lt;code&gt;console.log(&amp;quot;foo&amp;quot;)&lt;/code&gt; as I merily typed along.&lt;/p&gt;</description>
      <content>&lt;p&gt;I&amp;rsquo;m a huge fan of Emacs and a huge fan of programming using Clojure.  I&amp;rsquo;ve been trying to avoid Javascript, but it&amp;rsquo;s reach is everywhere and learning it will definitely help my day job efforts helping teams create cloud native applications.&lt;/p&gt;
&lt;p&gt;One hurdle I faced in setting up Emacs for Javascript development was paredit inserting a space before opening parens  in Javascript and JSON modes; leaving me with things like &lt;code&gt;console.log (&amp;quot;foo&amp;quot;)&lt;/code&gt; rather than &lt;code&gt;console.log(&amp;quot;foo&amp;quot;)&lt;/code&gt; as I merily typed along.&lt;/p&gt;
&lt;p&gt;Even though non-lisps don&amp;rsquo;t lend themselves to structural editing the way lisps do, I still like being able to wrap and manipulate parens, braces, quotations, etc with paredit—so I did not want to disable paredit in these modes.&lt;/p&gt;
&lt;p&gt;Here is the quick fix I am using from my &lt;a href=&#34;https://github.com/chadhs/dotfiles/blob/master/editors/emacs-config.org#paredit&#34;&gt;emacs configuration&lt;/a&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-lisp&#34; data-lang=&#34;lisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;;; prevent paredit from adding a space before opening paren in certain modes&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(defun cs/mode-space-delimiter-p (&lt;span style=&#34;color:#a6e22e&#34;&gt;endp&lt;/span&gt; delimiter)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Don&amp;#39;t insert a space before delimiters in certain modes&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  (or
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   (bound-and-true-p js2-mode)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   (bound-and-true-p js-mode)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   (bound-and-true-p javascript-mode)))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(add-to-list &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;paredit-space-for-delimiter-predicates&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;#&amp;#39;&lt;/span&gt;cs/mode-space-delimiter-p))
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Happy hacking; and until next time…&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“If you think paredit is not for you then you need to become the kind of person that paredit is for.”&lt;/p&gt;
&lt;/blockquote&gt;
</content>
    </item>
    
    <item>
      <title>Emacs is a Way of Life</title>
      <link>https://chadstovern.com/emacs-is-a-way-of-life/</link>
      <pubDate>Wed, 10 Jan 2018 00:00:00 +0000</pubDate>
      
      <guid>https://chadstovern.com/emacs-is-a-way-of-life/</guid>
      <description>&lt;p&gt;Emacs is an operating system.&lt;/p&gt;
&lt;p&gt;Emacs has a never-ending learning curve.&lt;/p&gt;
&lt;p&gt;Emacs is a way of life.&lt;/p&gt;
&lt;p&gt;All of these things are both a joke and largely true.  As a die hard Vim fan, I never thought I&amp;rsquo;d fall into such enthusiastic use of Emacs, yet I have and don&amp;rsquo;t want to look back.&lt;/p&gt;
&lt;p&gt;I started down this path because of my interest in learning Common Lisp and then Clojure.  The Emacs tooling for lisps is superb and once I learned you could configure text editing in Emacs to behave identically to Vim, I set out on my spirit quest.&lt;/p&gt;</description>
      <content>&lt;p&gt;Emacs is an operating system.&lt;/p&gt;
&lt;p&gt;Emacs has a never-ending learning curve.&lt;/p&gt;
&lt;p&gt;Emacs is a way of life.&lt;/p&gt;
&lt;p&gt;All of these things are both a joke and largely true.  As a die hard Vim fan, I never thought I&amp;rsquo;d fall into such enthusiastic use of Emacs, yet I have and don&amp;rsquo;t want to look back.&lt;/p&gt;
&lt;p&gt;I started down this path because of my interest in learning Common Lisp and then Clojure.  The Emacs tooling for lisps is superb and once I learned you could configure text editing in Emacs to behave identically to Vim, I set out on my spirit quest.&lt;/p&gt;
&lt;p&gt;With multiple years under my belt using, configuring, and solving my problems with Emacs, I&amp;rsquo;d like to start sharing some of these tips, tricks, and use cases.  In the meantime I invite anyone to skim through my living literate config below.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://github.com/chadhs/dotfiles/blob/master/editors/emacs-config.org#emacs-configuration&#34;&gt;Chad&amp;rsquo;s Literate Emacs Configuration&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Happy hacking!&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;http://c4.staticflickr.com/8/7598/16914999852_995b77a811_z.jpg&#34; alt=&#34;Learning Curve for Emacs&#34;&gt;&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>Clojure in Atom</title>
      <link>https://chadstovern.com/clojure-in-atom/</link>
      <pubDate>Tue, 16 Feb 2016 00:00:00 +0000</pubDate>
      
      <guid>https://chadstovern.com/clojure-in-atom/</guid>
      <description>&lt;p&gt;Since I just recently made a getting started with Clojure in Sublime Text video, I decided to also make a video showing how to get started with Clojure in Github&amp;rsquo;s Atom.  I hope you enjoy it as well.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=l_fxk3QvOrQ&#34;&gt;Clojure in Atom&lt;/a&gt;&lt;/p&gt;</description>
      <content>&lt;p&gt;Since I just recently made a getting started with Clojure in Sublime Text video, I decided to also make a video showing how to get started with Clojure in Github&amp;rsquo;s Atom.  I hope you enjoy it as well.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=l_fxk3QvOrQ&#34;&gt;Clojure in Atom&lt;/a&gt;&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>Clojure in Sublime Text</title>
      <link>https://chadstovern.com/clojure-in-sublime-text/</link>
      <pubDate>Mon, 15 Feb 2016 00:00:00 +0000</pubDate>
      
      <guid>https://chadstovern.com/clojure-in-sublime-text/</guid>
      <description>&lt;p&gt;After the last Clojure MKE (Milwaukee) meetup, I decided it would be good of me to make a quick video showing others how to get up and running with Clojure on Sublime Text.  I hope you enjoy it.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=-FTHCAIcB1I&#34;&gt;Clojure in Sublime Text&lt;/a&gt;&lt;/p&gt;</description>
      <content>&lt;p&gt;After the last Clojure MKE (Milwaukee) meetup, I decided it would be good of me to make a quick video showing others how to get up and running with Clojure on Sublime Text.  I hope you enjoy it.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=-FTHCAIcB1I&#34;&gt;Clojure in Sublime Text&lt;/a&gt;&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>Quick Tip: How to Rename Email Flags in Mail.app</title>
      <link>https://chadstovern.com/quick-tip-how-to-rename-email-flags-in-mail.app/</link>
      <pubDate>Tue, 23 Jun 2015 00:00:00 +0000</pubDate>
      
      <guid>https://chadstovern.com/quick-tip-how-to-rename-email-flags-in-mail.app/</guid>
      <description>&lt;p&gt;Keeping email well organized is a challenge all of us face. Tags, Flags, and Inbox Zero. This short article isn&amp;rsquo;t going to solve all your email woes, but will give you a quick tip to help you on your way to email nirvana.&lt;/p&gt;
&lt;p&gt;Mail.app on the Mac has a nice built in feature called Flags. Using flags helps to categorize and even note the priority of a message. Rather than keep a taxonomy floating in your head, I&amp;rsquo;ve written a &lt;a href=&#34;https://computers.tutsplus.com/tutorials/quick-tip-how-to-rename-email-flags-in-mailapp%5C-%5C-cms-24027&#34;&gt;quick tutorial&lt;/a&gt; over at Tuts+ to show you how to give email flags meaningful names.&lt;/p&gt;</description>
      <content>&lt;p&gt;Keeping email well organized is a challenge all of us face. Tags, Flags, and Inbox Zero. This short article isn&amp;rsquo;t going to solve all your email woes, but will give you a quick tip to help you on your way to email nirvana.&lt;/p&gt;
&lt;p&gt;Mail.app on the Mac has a nice built in feature called Flags. Using flags helps to categorize and even note the priority of a message. Rather than keep a taxonomy floating in your head, I&amp;rsquo;ve written a &lt;a href=&#34;https://computers.tutsplus.com/tutorials/quick-tip-how-to-rename-email-flags-in-mailapp%5C-%5C-cms-24027&#34;&gt;quick tutorial&lt;/a&gt; over at Tuts+ to show you how to give email flags meaningful names.&lt;/p&gt;
&lt;p&gt;Check out the tutorial here: &lt;a href=&#34;https://computers.tutsplus.com/tutorials/quick-tip-how-to-rename-email-flags-in-mailapp%5C-%5C-cms-24027&#34;&gt;Quick Tip: How to Rename Email Flags in Mail.app&lt;/a&gt;&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>How to Run a Django Site with Apache, mod_wsgi, and MySQL on FreeBSD 10.1</title>
      <link>https://chadstovern.com/how-to-run-a-django-site-with-apache-mod_wsgi-and-mysql-on-freebsd-10.1/</link>
      <pubDate>Mon, 08 Jun 2015 00:00:00 +0000</pubDate>
      
      <guid>https://chadstovern.com/how-to-run-a-django-site-with-apache-mod_wsgi-and-mysql-on-freebsd-10.1/</guid>
      <description>&lt;p&gt;The beauty of developing with popular web frameworks like Django is that a lot of repetitious work has been done for you, so you can focus on building your site.  It&amp;rsquo;s also great to know that the core of what you&amp;rsquo;re running has undergone the scrutiny of a large open-source community and should be less susceptible to large security holes.&lt;/p&gt;
&lt;p&gt;Whether you&amp;rsquo;re a developer or not, one thing that is not inherently simple is knowing how to get these web frameworks up and running outside of your own development or testing environment.&lt;/p&gt;</description>
      <content>&lt;p&gt;The beauty of developing with popular web frameworks like Django is that a lot of repetitious work has been done for you, so you can focus on building your site.  It&amp;rsquo;s also great to know that the core of what you&amp;rsquo;re running has undergone the scrutiny of a large open-source community and should be less susceptible to large security holes.&lt;/p&gt;
&lt;p&gt;Whether you&amp;rsquo;re a developer or not, one thing that is not inherently simple is knowing how to get these web frameworks up and running outside of your own development or testing environment.&lt;/p&gt;
&lt;p&gt;I’ve written a &lt;a href=&#34;https://www.digitalocean.com/community/tutorials/how-to-run-a-django-site-with-apache-mod_wsgi-and-mysql-on-freebsd-10-1&#34;&gt;full tutorial&lt;/a&gt; over at &lt;a href=&#34;https://www.digitalocean.com/?refcode=70a5a49b1c4c&#34;&gt;DigitalOcean&lt;/a&gt; covering exactly how you set this up on a FreeBSD droplet using a standard Apache, mod_wsgi, and MySQL stack running on top of FreeBSD 10.1.&lt;/p&gt;
&lt;p&gt;Check out the full tutorial here: &lt;a href=&#34;https://www.digitalocean.com/community/tutorials/how-to-run-a-django-site-with-apache-mod_wsgi-and-mysql-on-freebsd-10-1&#34;&gt;How to Run a Django Site with Apache, mod_wsgi, and MySQL on FreeBSD 10.1&lt;/a&gt;&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>How To Send Email through an External SMTP Service with Sendmail on FreeBSD 10.1</title>
      <link>https://chadstovern.com/how-to-send-email-through-an-external-smtp-service-with-sendmail-on-freebsd-10.1/</link>
      <pubDate>Tue, 02 Jun 2015 00:00:00 +0000</pubDate>
      
      <guid>https://chadstovern.com/how-to-send-email-through-an-external-smtp-service-with-sendmail-on-freebsd-10.1/</guid>
      <description>&lt;p&gt;One of the most common needs when setting up a new web server is sending email. The safest and easiest way to do this is to connect your server to a mailing service such as SendGrid or Amazon SES. Using an external service will help you avoid pitfalls like your server IP getting blacklisted by anti-spam services.&lt;/p&gt;
&lt;p&gt;I’ve written a &lt;a href=&#34;https://www.digitalocean.com/community/tutorials/how-to-send-email-through-an-external-smtp-service-with-sendmail-on-freebsd-10-1&#34;&gt;full tutorial&lt;/a&gt; over at &lt;a href=&#34;https://www.digitalocean.com/?refcode=70a5a49b1c4c&#34;&gt;DigitalOcean&lt;/a&gt; covering exactly how you set this up on your FreeBSD droplet.&lt;/p&gt;</description>
      <content>&lt;p&gt;One of the most common needs when setting up a new web server is sending email. The safest and easiest way to do this is to connect your server to a mailing service such as SendGrid or Amazon SES. Using an external service will help you avoid pitfalls like your server IP getting blacklisted by anti-spam services.&lt;/p&gt;
&lt;p&gt;I’ve written a &lt;a href=&#34;https://www.digitalocean.com/community/tutorials/how-to-send-email-through-an-external-smtp-service-with-sendmail-on-freebsd-10-1&#34;&gt;full tutorial&lt;/a&gt; over at &lt;a href=&#34;https://www.digitalocean.com/?refcode=70a5a49b1c4c&#34;&gt;DigitalOcean&lt;/a&gt; covering exactly how you set this up on your FreeBSD droplet.&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;re new to FreeBSD, some of what we do may look a little scary, but you&amp;rsquo;ll soon be comfortable rolling up your sleeves to do a little recompiling of system tools like the FreeBSD pros.&lt;/p&gt;
&lt;p&gt;Check out the full tutorial here: &lt;a href=&#34;https://www.digitalocean.com/community/tutorials/how-to-send-email-through-an-external-smtp-service-with-sendmail-on-freebsd-10-1&#34;&gt;How To Send Email through an External SMTP Service with Sendmail on FreeBSD 10.1&lt;/a&gt;&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>Build a $20 Standing Desk in 20 Minutes</title>
      <link>https://chadstovern.com/build-a-20-standing-desk-in-20-minutes/</link>
      <pubDate>Tue, 12 May 2015 00:00:00 +0000</pubDate>
      
      <guid>https://chadstovern.com/build-a-20-standing-desk-in-20-minutes/</guid>
      <description>&lt;p&gt;After nearly a decade of working jobs doing geek stuff sitting in front of a computer all day, I started developing lower back pain.  Even being active off hours wasn&amp;rsquo;t enough, so I caved and talked my boss into a &lt;a href=&#34;http://www.geekdesk.com/geekdesk-v3&#34;&gt;GeekDesk v3&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;However, now that I&amp;rsquo;ve moved on and am part of a small &lt;a href=&#34;https://idonethis.com/about/our-team/&#34;&gt;startup team&lt;/a&gt; working from my home office, that&amp;rsquo;s just not a purchase I was ready to justify again.  Nine months into my new adventure with &lt;a href=&#34;https://idonethis.com&#34;&gt;iDoneThis&lt;/a&gt; and my enthusiasm is high, yet my back is killing me…&lt;/p&gt;</description>
      <content>&lt;p&gt;After nearly a decade of working jobs doing geek stuff sitting in front of a computer all day, I started developing lower back pain.  Even being active off hours wasn&amp;rsquo;t enough, so I caved and talked my boss into a &lt;a href=&#34;http://www.geekdesk.com/geekdesk-v3&#34;&gt;GeekDesk v3&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;However, now that I&amp;rsquo;ve moved on and am part of a small &lt;a href=&#34;https://idonethis.com/about/our-team/&#34;&gt;startup team&lt;/a&gt; working from my home office, that&amp;rsquo;s just not a purchase I was ready to justify again.  Nine months into my new adventure with &lt;a href=&#34;https://idonethis.com&#34;&gt;iDoneThis&lt;/a&gt; and my enthusiasm is high, yet my back is killing me…&lt;/p&gt;
&lt;p&gt;Colin, the founder of &lt;a href=&#34;http://customer.io&#34;&gt;Customer.io&lt;/a&gt;, has an awesome and famous post about his &lt;a href=&#34;http://iamnotaprogrammer.com/Ikea-Standing-desk-for-22-dollars.html&#34;&gt;$22 standing desk&lt;/a&gt;.  This is truly a creative gem, that I really wanted to set up for myself.&lt;/p&gt;
&lt;p&gt;My problem was that my desk has a raised monitor area.  I would either have to remove part of the desk or hack off half of the back legs of the table in Colin&amp;rsquo;s solution.  :-(&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://chadstovern.com/img/desk-sitting.jpg&#34; alt=&#34;Desk Sitting&#34;&gt;&lt;/p&gt;
&lt;p&gt;I thought about finding or building a couple simple boxes as the dimensions I would need for the monitor section of my desk and the work surface were roughly the same.&lt;/p&gt;
&lt;p&gt;After searching around for those dimensions I found this stackable &lt;a href=&#34;http://www.target.com/p/room-essentials-24-horizontal-shelf-espresso/-/A-15091670&#34;&gt;shelf unit&lt;/a&gt; (11.63&amp;quot; H x 24.13&amp;quot; W x 11.63&amp;quot; D and holds up to 20 pounds) at Target.  The total cost with tax and shipping was only $19.84 ( due to a 10% off coupon code + free in store pickup).&lt;/p&gt;
&lt;p&gt;Once I brought the shelves home, it took me all of 20 minutes to clear my desk, assemble them, and set my gear back up.  I&amp;rsquo;ve been standing for a week now and once again my back pain has subsided.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://chadstovern.com/img/desk-standing.jpg&#34; alt=&#34;Desk Standing&#34;&gt;&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>Setting Up PostgreSQL on OS X Yosemite for Local Development</title>
      <link>https://chadstovern.com/setting-up-postgresql-on-os-x-yosemite-for-local-development/</link>
      <pubDate>Fri, 01 May 2015 00:00:00 +0000</pubDate>
      
      <guid>https://chadstovern.com/setting-up-postgresql-on-os-x-yosemite-for-local-development/</guid>
      <description>&lt;p&gt;First and foremost, I highly recommend that you download &lt;a href=&#34;https://www.virtualbox.org/wiki/Downloads&#34;&gt;VirtualBox&lt;/a&gt; and &lt;a href=&#34;https://www.vagrantup.com/downloads.html&#34;&gt;Vagrant&lt;/a&gt; to bootstrap a development server on your Mac.&lt;/p&gt;
&lt;p&gt;That being said there are times when you&amp;rsquo;re doing a simple test or tutorial and you&amp;rsquo;d like to be able to run PostgreSQL on your local machine.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m writing this as I found setting this up on OS X 10.10 Yosemite to be a bit of a pain, since a simple &lt;a href=&#34;http://brew.sh&#34;&gt;homebrew&lt;/a&gt; install didn&amp;rsquo;t do the trick for me.&lt;/p&gt;</description>
      <content>&lt;p&gt;First and foremost, I highly recommend that you download &lt;a href=&#34;https://www.virtualbox.org/wiki/Downloads&#34;&gt;VirtualBox&lt;/a&gt; and &lt;a href=&#34;https://www.vagrantup.com/downloads.html&#34;&gt;Vagrant&lt;/a&gt; to bootstrap a development server on your Mac.&lt;/p&gt;
&lt;p&gt;That being said there are times when you&amp;rsquo;re doing a simple test or tutorial and you&amp;rsquo;d like to be able to run PostgreSQL on your local machine.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m writing this as I found setting this up on OS X 10.10 Yosemite to be a bit of a pain, since a simple &lt;a href=&#34;http://brew.sh&#34;&gt;homebrew&lt;/a&gt; install didn&amp;rsquo;t do the trick for me.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Caution&lt;/strong&gt;: Before going any further, this tutorial assumes you do not have a prior installation that has data you actually want to keep.  If this is not the case then &lt;strong&gt;stop now&lt;/strong&gt;, and backup your data to restore later.&lt;/p&gt;
&lt;h2 id=&#34;fire-up-that-command-line-its-time-to-dive-in&#34;&gt;Fire Up That Command Line, It&amp;rsquo;s Time to Dive In.&lt;/h2&gt;
&lt;p&gt;This is not a production environment and chances are this is a Mac that you alone use.  Therefore it&amp;rsquo;s perfectly acceptable to optimize for simplicity and ease of use.&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;ve never installed PostgreSQL in the past &lt;em&gt;(if you have skip ahead one step)&lt;/em&gt;, then create the data directory you need and set the permissions so your user account has full access.&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;mkdir /usr/local/var/postgres
chmod 770 /usr/local/var/postgres
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;If you&amp;rsquo;ve installed PostgreSQL before &lt;em&gt;(if you haven&amp;rsquo;t you should follow the first step and skip this one)&lt;/em&gt; and &lt;strong&gt;do not&lt;/strong&gt; have data you care about, follow these steps to setup your data directory with full access for your user account.&lt;br&gt;
If the first command produces an error just ignore it, you&amp;rsquo;re making sure PostgreSQL isn&amp;rsquo;t loaded already and trying to run before you have things setup correctly.&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;launchctl unload -w ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
sudo rm -rf /usr/local/var/postgres
mkdir /usr/local/var/postgres
chmod 770 /usr/local/var/postgres
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Now install PostgreSQL using [homebrew][].  If you already have it or an old build just uninstall that first.  &lt;em&gt;(hint: &lt;code&gt;brew uninstall postgresql&lt;/code&gt;)&lt;/em&gt;&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;brew install postgresql
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Next initialize the data directory.&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;initdb -D /usr/local/var/postgres
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;After the initialization is complete, setup PostgreSQL to run on boot with these two commands.  The first creates a symlink to a launch agent and the second tells launchctl that that agent would be loaded now and on boot.&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;ln -sfv /usr/local/opt/postgresql/*.plist ~/Library/LaunchAgents
launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;PostgreSQL will now start up and be ready to use.  One trick is to run the &lt;code&gt;createdb&lt;/code&gt; command with no arguments to create a database named after your user account.  You never have to do anything with this database, but this allows you to run the &lt;code&gt;psql&lt;/code&gt; command unadorned to connect to PostgreSQL.&lt;/p&gt;
&lt;p&gt;TL;DR&lt;br&gt;
Do this now and save keystrokes later.&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;createdb
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Now you can connect to your locally running PostgreSQL server just by running this short command.&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;psql
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;You&amp;rsquo;re now ready to create a database or two for your projects to use and start hacking.  Have fun!  :-)&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>What you should be doing even when you don’t want to</title>
      <link>https://chadstovern.com/what-you-should-be-doing-even-when-you-dont-want-to/</link>
      <pubDate>Mon, 16 Feb 2015 00:00:00 +0000</pubDate>
      
      <guid>https://chadstovern.com/what-you-should-be-doing-even-when-you-dont-want-to/</guid>
      <description>&lt;p&gt;Brett Terpstra&amp;rsquo;s &lt;a href=&#34;http://www.esn.fm/systematic/126&#34;&gt;interview&lt;/a&gt; with Rory Vaden was a gold mine, I highly recommend a &lt;a href=&#34;http://www.esn.fm/systematic/126&#34;&gt;listen&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Here are a couple pull quotes in no particular order that I thought were nothing other than amazing:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Successful people and top performers at some point learn to do the things they should be doing even when they don&amp;rsquo;t feel like doing them.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This is very true.  Many of the people that inspire me, are great at this, and it&amp;rsquo;s really hard to be great at doing things you just don&amp;rsquo;t feel like doing.&lt;/p&gt;</description>
      <content>&lt;p&gt;Brett Terpstra&amp;rsquo;s &lt;a href=&#34;http://www.esn.fm/systematic/126&#34;&gt;interview&lt;/a&gt; with Rory Vaden was a gold mine, I highly recommend a &lt;a href=&#34;http://www.esn.fm/systematic/126&#34;&gt;listen&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Here are a couple pull quotes in no particular order that I thought were nothing other than amazing:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Successful people and top performers at some point learn to do the things they should be doing even when they don&amp;rsquo;t feel like doing them.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This is very true.  Many of the people that inspire me, are great at this, and it&amp;rsquo;s really hard to be great at doing things you just don&amp;rsquo;t feel like doing.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Procrastination and indulgence are nothing more than creditors that charge you interest.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Relating procrastination to personal finance really resonates with me.  &amp;ldquo;I&amp;rsquo;ll do it later&amp;rdquo; just leaves you feeling behind and you can&amp;rsquo;t catch up.  Taking care of priorities before fun is one of the smartest things you can do.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The paradox principle of sacrifice:&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;Easy short term choices lead to difficult long term consequences.&lt;/li&gt;
&lt;li&gt;Difficult short term choices lead to easy long term consequences.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It&amp;rsquo;s really easy to eat a cookie and grab more coffee than to go for a run and drink plenty of water each day.  :-P&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>Quick CSS for better looking pull quotes</title>
      <link>https://chadstovern.com/quick-css-for-better-looking-pull-quotes/</link>
      <pubDate>Mon, 15 Dec 2014 00:00:00 +0000</pubDate>
      
      <guid>https://chadstovern.com/quick-css-for-better-looking-pull-quotes/</guid>
      <description>&lt;p&gt;I decided that I wanted to be one of the cool kids that could do daringfireball.net style quick pull quote + commentary posts.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Problem:&lt;/strong&gt;  My custom theme&amp;rsquo;s CSS just left pull quotes looking like plain indented text… blah, blargh, barf.&lt;/p&gt;
&lt;p&gt;I don&amp;rsquo;t pretend to be a designer today, but I want things I make to minimize eye-bleeding whenever possible.&lt;/p&gt;
&lt;p&gt;I gave myself a timebox of 15 minutes to find a workable solution and here are the fruits of that labor:&lt;/p&gt;</description>
      <content>&lt;p&gt;I decided that I wanted to be one of the cool kids that could do daringfireball.net style quick pull quote + commentary posts.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Problem:&lt;/strong&gt;  My custom theme&amp;rsquo;s CSS just left pull quotes looking like plain indented text… blah, blargh, barf.&lt;/p&gt;
&lt;p&gt;I don&amp;rsquo;t pretend to be a designer today, but I want things I make to minimize eye-bleeding whenever possible.&lt;/p&gt;
&lt;p&gt;I gave myself a timebox of 15 minutes to find a workable solution and here are the fruits of that labor:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Solution:&lt;/strong&gt;&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;blockquote {
	margin-top: 25px;
	margin-bottom: 25px;
	margin-left: 50px;
	padding-left: 15px;
	border-left: 3px solid #ccc;
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Example:&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Things can be really fun, if you let them be.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Me (just now, boom!)&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;Next steps:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Learn more from &lt;a href=&#34;http://css-tricks.com/examples/Blockquotes/&#34;&gt;css-tricks&lt;/a&gt; and go nuts with different classes for different uses on different parts of your site.  Have fun!&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>The importance of rest</title>
      <link>https://chadstovern.com/the-importance-of-rest/</link>
      <pubDate>Mon, 15 Dec 2014 00:00:00 +0000</pubDate>
      
      <guid>https://chadstovern.com/the-importance-of-rest/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Rest begets awareness.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Awareness begets prioritization.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Prioritization begets caring.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Caring begets achievement.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This is Eddie Smith at his &lt;a href=&#34;http://www.practicallyefficient.com/home/rest-begets&#34;&gt;best&lt;/a&gt;.  It&amp;rsquo;s also some of the best advice you can follow, but it&amp;rsquo;s really hard and seems counterintuitive at times.&lt;/p&gt;</description>
      <content>&lt;blockquote&gt;
&lt;p&gt;Rest begets awareness.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Awareness begets prioritization.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Prioritization begets caring.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Caring begets achievement.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This is Eddie Smith at his &lt;a href=&#34;http://www.practicallyefficient.com/home/rest-begets&#34;&gt;best&lt;/a&gt;.  It&amp;rsquo;s also some of the best advice you can follow, but it&amp;rsquo;s really hard and seems counterintuitive at times.&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>A New Job Where I&#39;m Learning to Code</title>
      <link>https://chadstovern.com/a-new-job-where-im-learning-to-code/</link>
      <pubDate>Thu, 20 Nov 2014 00:00:00 +0000</pubDate>
      
      <guid>https://chadstovern.com/a-new-job-where-im-learning-to-code/</guid>
      <description>&lt;p&gt;I&amp;rsquo;m pretty excited about my new job that I&amp;rsquo;ve been at for about three months now.  One of the great parts is the allowance for on the job time to beef up my coding skills.&lt;/p&gt;
&lt;p&gt;I wrote about the entire journey for our &amp;ldquo;Inside iDoneThis&amp;rdquo; blog; go check it out &lt;a href=&#34;http://inside.idonethis.com/learn-how-to-code/&#34;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://chadstovern.com/img/mindmap-dream.png&#34; alt=&#34;Dream Mindmap&#34;&gt;&lt;/p&gt;</description>
      <content>&lt;p&gt;I&amp;rsquo;m pretty excited about my new job that I&amp;rsquo;ve been at for about three months now.  One of the great parts is the allowance for on the job time to beef up my coding skills.&lt;/p&gt;
&lt;p&gt;I wrote about the entire journey for our &amp;ldquo;Inside iDoneThis&amp;rdquo; blog; go check it out &lt;a href=&#34;http://inside.idonethis.com/learn-how-to-code/&#34;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://chadstovern.com/img/mindmap-dream.png&#34; alt=&#34;Dream Mindmap&#34;&gt;&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>How to Backup All Your Files to Amazon S3</title>
      <link>https://chadstovern.com/how-to-backup-all-your-files-to-amazon-s3/</link>
      <pubDate>Wed, 08 Oct 2014 00:00:00 +0000</pubDate>
      
      <guid>https://chadstovern.com/how-to-backup-all-your-files-to-amazon-s3/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://chadstovern.com/img/amazon-aws.jpg&#34; alt=&#34;Amazon Web Services&#34;&gt;&lt;/p&gt;
&lt;p&gt;Losing your favorite photos, your entire music collection, or your most important documents is something none us want to experience, yet there are still so many of us that either have an inadequate backup strategy or none at all.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve written a full &lt;a href=&#34;https://computers.tutsplus.com/tutorials/how-to-backup-all-your-files-to-amazon-s3%5C-%5C-cms-21386&#34;&gt;tutorial&lt;/a&gt; over at Tuts+ covering exactly how you can protect yourself with Amazon S3.&lt;/p&gt;
&lt;p&gt;Check it out here:  &lt;strong&gt;&lt;a href=&#34;https://computers.tutsplus.com/tutorials/how-to-backup-all-your-files-to-amazon-s3%5C-%5C-cms-21386&#34;&gt;How to Backup All Your Files to Amazon S3&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</description>
      <content>&lt;p&gt;&lt;img src=&#34;https://chadstovern.com/img/amazon-aws.jpg&#34; alt=&#34;Amazon Web Services&#34;&gt;&lt;/p&gt;
&lt;p&gt;Losing your favorite photos, your entire music collection, or your most important documents is something none us want to experience, yet there are still so many of us that either have an inadequate backup strategy or none at all.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve written a full &lt;a href=&#34;https://computers.tutsplus.com/tutorials/how-to-backup-all-your-files-to-amazon-s3%5C-%5C-cms-21386&#34;&gt;tutorial&lt;/a&gt; over at Tuts+ covering exactly how you can protect yourself with Amazon S3.&lt;/p&gt;
&lt;p&gt;Check it out here:  &lt;strong&gt;&lt;a href=&#34;https://computers.tutsplus.com/tutorials/how-to-backup-all-your-files-to-amazon-s3%5C-%5C-cms-21386&#34;&gt;How to Backup All Your Files to Amazon S3&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>Mind Mapping 101: The Visual Way to Organize Information</title>
      <link>https://chadstovern.com/mind-mapping-101-the-visual-way-to-organize-information/</link>
      <pubDate>Mon, 02 Jun 2014 00:00:00 +0000</pubDate>
      
      <guid>https://chadstovern.com/mind-mapping-101-the-visual-way-to-organize-information/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://chadstovern.com/img/mindmap-preview.png&#34; alt=&#34;Mind Map Preview&#34;&gt;&lt;/p&gt;
&lt;p&gt;Mind mapping is a great way to capture your thoughts and organize them visually.  By planning with a mind map you promote creative thinking and avoid forced linear thinking.  And yet, mind mapping often ends up being a buzzword, with little explanation by what it means and how you&amp;rsquo;d go about making a mind map.  I&amp;rsquo;ve written a full &lt;a href=&#34;https://computers.tutsplus.com/tutorials/mind-mapping-101-the-visual-way-to-organize-information%5C-%5C-cms-21182&#34;&gt;tutorial&lt;/a&gt; over at Tuts+ covering exactly how to get started with mind mapping.&lt;/p&gt;</description>
      <content>&lt;p&gt;&lt;img src=&#34;https://chadstovern.com/img/mindmap-preview.png&#34; alt=&#34;Mind Map Preview&#34;&gt;&lt;/p&gt;
&lt;p&gt;Mind mapping is a great way to capture your thoughts and organize them visually.  By planning with a mind map you promote creative thinking and avoid forced linear thinking.  And yet, mind mapping often ends up being a buzzword, with little explanation by what it means and how you&amp;rsquo;d go about making a mind map.  I&amp;rsquo;ve written a full &lt;a href=&#34;https://computers.tutsplus.com/tutorials/mind-mapping-101-the-visual-way-to-organize-information%5C-%5C-cms-21182&#34;&gt;tutorial&lt;/a&gt; over at Tuts+ covering exactly how to get started with mind mapping.&lt;/p&gt;
&lt;p&gt;Check it out here:  &lt;strong&gt;&lt;a href=&#34;https://computers.tutsplus.com/tutorials/mind-mapping-101-the-visual-way-to-organize-information%5C-%5C-cms-21182&#34;&gt;Mind Mapping 101: The Visual Way to Organize Information&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>Superpower Your Note Taking Skills With nvALT and Simplenote</title>
      <link>https://chadstovern.com/superpower-your-note-taking-skills-with-nvalt-and-simplenote/</link>
      <pubDate>Tue, 27 May 2014 00:00:00 +0000</pubDate>
      
      <guid>https://chadstovern.com/superpower-your-note-taking-skills-with-nvalt-and-simplenote/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://chadstovern.com/img/nvalt-logo.jpg&#34; alt=&#34;nvALT logo&#34;&gt;&lt;/p&gt;
&lt;p&gt;nvALT is a powerful and fast note taking tool. It’s great for keeping running lists and creating reference documentation on–the–fly, and is absolutely essential to my daily workflow.  I&amp;rsquo;ve written a full &lt;a href=&#34;https://computers.tutsplus.com/tutorials/superpower-your-note-taking-skills-with-nvalt-and-simplenote%5C-%5C-cms-20816&#34; title=&#34;Superpower Your Note Taking Skills With nvALT and Simplenote&#34;&gt;tutorial&lt;/a&gt; over at Tuts+ covering many tricks from tagging, markdown preview, Simplenote integration, and more.&lt;/p&gt;
&lt;p&gt;Check it out here:
&lt;strong&gt;&lt;a href=&#34;https://computers.tutsplus.com/tutorials/superpower-your-note-taking-skills-with-nvalt-and-simplenote%5C-%5C-cms-20816&#34; title=&#34;Superpower Your Note Taking Skills With nvALT and Simplenote&#34;&gt;Superpower Your Note Taking Skills With nvALT and Simplenote&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</description>
      <content>&lt;p&gt;&lt;img src=&#34;https://chadstovern.com/img/nvalt-logo.jpg&#34; alt=&#34;nvALT logo&#34;&gt;&lt;/p&gt;
&lt;p&gt;nvALT is a powerful and fast note taking tool. It’s great for keeping running lists and creating reference documentation on–the–fly, and is absolutely essential to my daily workflow.  I&amp;rsquo;ve written a full &lt;a href=&#34;https://computers.tutsplus.com/tutorials/superpower-your-note-taking-skills-with-nvalt-and-simplenote%5C-%5C-cms-20816&#34; title=&#34;Superpower Your Note Taking Skills With nvALT and Simplenote&#34;&gt;tutorial&lt;/a&gt; over at Tuts+ covering many tricks from tagging, markdown preview, Simplenote integration, and more.&lt;/p&gt;
&lt;p&gt;Check it out here:
&lt;strong&gt;&lt;a href=&#34;https://computers.tutsplus.com/tutorials/superpower-your-note-taking-skills-with-nvalt-and-simplenote%5C-%5C-cms-20816&#34; title=&#34;Superpower Your Note Taking Skills With nvALT and Simplenote&#34;&gt;Superpower Your Note Taking Skills With nvALT and Simplenote&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>HearthStone for iPad impressions</title>
      <link>https://chadstovern.com/hearthstone-for-ipad-impressions/</link>
      <pubDate>Thu, 17 Apr 2014 00:00:00 +0000</pubDate>
      
      <guid>https://chadstovern.com/hearthstone-for-ipad-impressions/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://chadstovern.com/img/hsipad-splash.png&#34;&gt;&lt;img src=&#34;https://chadstovern.com/img/hsipad-splash-thumbnail.png&#34; alt=&#34;splash screen&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s no secret that I&amp;rsquo;m a big fan of Blizzard games in general, and I&amp;rsquo;ve been waiting for HearthStone to release to have a Blizzard title to enjoy casually on my iPad.  Now that that time is here — my biases aside — let&amp;rsquo;s dive in for a quick look.&lt;/p&gt;
&lt;p&gt;Once you go through the initial setup of your account and get the game started up for the first time, you&amp;rsquo;ll notice it looks just like the desktop edition for Mac or Windows.&lt;/p&gt;</description>
      <content>&lt;p&gt;&lt;a href=&#34;https://chadstovern.com/img/hsipad-splash.png&#34;&gt;&lt;img src=&#34;https://chadstovern.com/img/hsipad-splash-thumbnail.png&#34; alt=&#34;splash screen&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s no secret that I&amp;rsquo;m a big fan of Blizzard games in general, and I&amp;rsquo;ve been waiting for HearthStone to release to have a Blizzard title to enjoy casually on my iPad.  Now that that time is here — my biases aside — let&amp;rsquo;s dive in for a quick look.&lt;/p&gt;
&lt;p&gt;Once you go through the initial setup of your account and get the game started up for the first time, you&amp;rsquo;ll notice it looks just like the desktop edition for Mac or Windows.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://chadstovern.com/img/hsipad-homescreen.png&#34;&gt;&lt;img src=&#34;https://chadstovern.com/img/hsipad-homescreen-thumbnail.png&#34; alt=&#34;home screen&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The same thing is true for all of the menus.  If you click on &amp;ldquo;My Collection&amp;rdquo; you&amp;rsquo;ll see any of the decks you&amp;rsquo;ve put together so far.  Making a deck and naming worked just the same as on the desktop edition of the game with one caveat; you need to drag the cards over into the deck staging area on the right side of the screen.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://chadstovern.com/img/hsipad-deck.png&#34;&gt;&lt;img src=&#34;https://chadstovern.com/img/hsipad-deck-thumbnail.png&#34; alt=&#34;deck&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;One of the cool benefits of trying this out last night and taking these screenshots was being awarded a free pack of cards just for completing a single game in any game mode.  Here is a quick look at a few shots from the couple hands I played between last night and this morning.&lt;/p&gt;
&lt;p&gt;Identical to the desktop version — noticing a trend here? — you&amp;rsquo;ll start out the pre–match ritual of keeping or replacing a card in your starting hand.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://chadstovern.com/img/hsipad-starting-hand.png&#34;&gt;&lt;img src=&#34;https://chadstovern.com/img/hsipad-starting-hand-thumbnail.png&#34; alt=&#34;hand&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Let the battle begin!  Here&amp;rsquo;s where I start to prefer the iPad version over the desktop edition.  It is so natural and intuitive and &lt;em&gt;&lt;strong&gt;just feels nice&lt;/strong&gt;&lt;/em&gt; to drag a card out of your hand and plop it onto the game-board, or tap and drag to target an enemy.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://chadstovern.com/img/hsipad-battle.png&#34;&gt;&lt;img src=&#34;https://chadstovern.com/img/hsipad-battle-thumbnail.png&#34; alt=&#34;battle&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;While I&amp;rsquo;m not a &amp;ldquo;seasoned&amp;rdquo; HearthStone player the computer AI obviously had no chance against my &amp;ldquo;draw more cards, full taunt mob&amp;rdquo; hunter deck.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://chadstovern.com/img/hsipad-iwin.png&#34;&gt;&lt;img src=&#34;https://chadstovern.com/img/hsipad-iwin-thumbnail.png&#34; alt=&#34;iWin&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Needless to say I had a blast trying this out and can&amp;rsquo;t wait to face my friends and other opponents online in the comfort wherever I can plop down and get some wifi.  Feel free to friend me via my battle-tag (Giddeon#1794) and join me for a game.&lt;/p&gt;
&lt;p&gt;Lok&amp;rsquo;Tar Ogar! - Victory or Death!&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://chadstovern.com/img/hsipad-victory.png&#34;&gt;&lt;img src=&#34;https://chadstovern.com/img/hsipad-victory-thumbnail.png&#34; alt=&#34;victory&#34;&gt;&lt;/a&gt;&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>Getting started</title>
      <link>https://chadstovern.com/getting-started/</link>
      <pubDate>Sat, 12 Apr 2014 00:00:00 +0000</pubDate>
      
      <guid>https://chadstovern.com/getting-started/</guid>
      <description>&lt;p&gt;Getting started is hard.  The best way to start when you can&amp;rsquo;t seem to, is to merely start.  Being afraid to fail has claimed countless projects, blog posts, ideas, and other things from coming into existence.  I bet more often than not never starting is more of a failure than having to listen to critique, edit, make changes, or try something completely new.&lt;/p&gt;
&lt;p&gt;…back to writing the &lt;em&gt;actual&lt;/em&gt; thing &lt;em&gt;I&lt;/em&gt; was afraid to start.&lt;/p&gt;</description>
      <content>&lt;p&gt;Getting started is hard.  The best way to start when you can&amp;rsquo;t seem to, is to merely start.  Being afraid to fail has claimed countless projects, blog posts, ideas, and other things from coming into existence.  I bet more often than not never starting is more of a failure than having to listen to critique, edit, make changes, or try something completely new.&lt;/p&gt;
&lt;p&gt;…back to writing the &lt;em&gt;actual&lt;/em&gt; thing &lt;em&gt;I&lt;/em&gt; was afraid to start.&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>Second-hand meta wizard</title>
      <link>https://chadstovern.com/second-hand-meta-wizard/</link>
      <pubDate>Thu, 10 Apr 2014 00:00:00 +0000</pubDate>
      
      <guid>https://chadstovern.com/second-hand-meta-wizard/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve helped a number of people at work and elsewhere with &amp;ldquo;personal productivity stuff&amp;rdquo; by steering them to David Allen&amp;rsquo;s book &amp;ldquo;&lt;a href=&#34;http://www.amazon.com/gp/product/0142000280/?tag=digitalnoma09-20&#34;&gt;Getting Things Done&lt;/a&gt;&amp;rdquo;, things Merlin Mann has &lt;a href=&#34;http://www.kungfugrippe.com/post/47631308074/chasing-the-right-zero&#34;&gt;written&lt;/a&gt; or said on a podcast, Scott Hanselman&amp;rsquo;s talk &amp;ldquo;&lt;a href=&#34;http://www.hanselman.com/blog/ItsNotWhatYouReadItsWhatYouIgnoreVideoOfScottHanselmansPersonalProductivityTips.aspx&#34;&gt;Scale Yourself&lt;/a&gt;&amp;rdquo; — among other resources.&lt;/p&gt;
&lt;p&gt;While I&amp;rsquo;m happy to be able to help others make improvements where I have also iterated and improved, I can&amp;rsquo;t help but feel like sort of a &amp;ldquo;Second-hand meta wizard&amp;rdquo;.&lt;/p&gt;</description>
      <content>&lt;p&gt;I&amp;rsquo;ve helped a number of people at work and elsewhere with &amp;ldquo;personal productivity stuff&amp;rdquo; by steering them to David Allen&amp;rsquo;s book &amp;ldquo;&lt;a href=&#34;http://www.amazon.com/gp/product/0142000280/?tag=digitalnoma09-20&#34;&gt;Getting Things Done&lt;/a&gt;&amp;rdquo;, things Merlin Mann has &lt;a href=&#34;http://www.kungfugrippe.com/post/47631308074/chasing-the-right-zero&#34;&gt;written&lt;/a&gt; or said on a podcast, Scott Hanselman&amp;rsquo;s talk &amp;ldquo;&lt;a href=&#34;http://www.hanselman.com/blog/ItsNotWhatYouReadItsWhatYouIgnoreVideoOfScottHanselmansPersonalProductivityTips.aspx&#34;&gt;Scale Yourself&lt;/a&gt;&amp;rdquo; — among other resources.&lt;/p&gt;
&lt;p&gt;While I&amp;rsquo;m happy to be able to help others make improvements where I have also iterated and improved, I can&amp;rsquo;t help but feel like sort of a &amp;ldquo;Second-hand meta wizard&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;I suppose all the folks listed above that have inspired me were at one point also inspired by others before them.  I guess the takeaway is summed up by a poster I like that reads &amp;ldquo;Be inspired, inspire.&amp;rdquo;&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>Upgrade FreeBSD ports without confirmation prompts</title>
      <link>https://chadstovern.com/upgrade-freebsd-ports-without-confirmation-prompts/</link>
      <pubDate>Mon, 17 Feb 2014 00:00:00 +0000</pubDate>
      
      <guid>https://chadstovern.com/upgrade-freebsd-ports-without-confirmation-prompts/</guid>
      <description>&lt;p&gt;Here is a very handy method for updating all of the software on your FreeBSD box.  This gives you the ability to just &amp;ldquo;walk away&amp;rdquo; while your machine merrily hums along recompiling all your software without you having to sit around to answer prompts.&lt;/p&gt;
&lt;h2 id=&#34;update-your-ports-tree&#34;&gt;Update your ports tree&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;portsnap fetch &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; portsnap update
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;check-for-updates-and-choose--update-any-options&#34;&gt;Check for updates and choose / update any options&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;portmaster -an --no-confirm
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;update-all-ports-without-any-confirmation-questions&#34;&gt;Update all ports without any confirmation questions&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;portmaster -aydbg --no-confirm
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;or-update-only-specific-ports-without-any-confirmation-questions&#34;&gt;…Or update only specific ports without any confirmation questions&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;portmaster -ydbg --no-confirm portdir/port portdir2/port2
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;explanations-of-options-from-the-portmaster-man-page&#34;&gt;Explanations of options from the portmaster man page&lt;/h2&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code class=&#34;language-manpage&#34; data-lang=&#34;manpage&#34;&gt;-y  answer yes to all user prompts for the features below

-d  always clean distfiles

-b  create and keep a backup package of an installed port

-g  create a package of the new port

--no-confirm  
do not ask the user to confirm the list of ports to be installed and/or updated before proceeding
&lt;/code&gt;&lt;/pre&gt;</description>
      <content>&lt;p&gt;Here is a very handy method for updating all of the software on your FreeBSD box.  This gives you the ability to just &amp;ldquo;walk away&amp;rdquo; while your machine merrily hums along recompiling all your software without you having to sit around to answer prompts.&lt;/p&gt;
&lt;h2 id=&#34;update-your-ports-tree&#34;&gt;Update your ports tree&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;portsnap fetch &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; portsnap update
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;check-for-updates-and-choose--update-any-options&#34;&gt;Check for updates and choose / update any options&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;portmaster -an --no-confirm
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;update-all-ports-without-any-confirmation-questions&#34;&gt;Update all ports without any confirmation questions&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;portmaster -aydbg --no-confirm
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;or-update-only-specific-ports-without-any-confirmation-questions&#34;&gt;…Or update only specific ports without any confirmation questions&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;portmaster -ydbg --no-confirm portdir/port portdir2/port2
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;explanations-of-options-from-the-portmaster-man-page&#34;&gt;Explanations of options from the portmaster man page&lt;/h2&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code class=&#34;language-manpage&#34; data-lang=&#34;manpage&#34;&gt;-y  answer yes to all user prompts for the features below

-d  always clean distfiles

-b  create and keep a backup package of an installed port

-g  create a package of the new port

--no-confirm  
do not ask the user to confirm the list of ports to be installed and/or updated before proceeding
&lt;/code&gt;&lt;/pre&gt;</content>
    </item>
    
    <item>
      <title>A moment of clarity in stressful times</title>
      <link>https://chadstovern.com/a-moment-of-clarity-in-stressful-times/</link>
      <pubDate>Sat, 15 Feb 2014 00:00:00 +0000</pubDate>
      
      <guid>https://chadstovern.com/a-moment-of-clarity-in-stressful-times/</guid>
      <description>&lt;h2 id=&#34;stress&#34;&gt;Stress&lt;/h2&gt;
&lt;p&gt;The past few weeks at the office have been more stressful than most.  I do fairly technical work on a regular basis and manage a small team of people at the same time.  When there are outages caused by things ranging from equipment failures to widespread fallout from &amp;ldquo;&lt;a href=&#34;http://en.wikipedia.org/wiki/Denial_of_service&#34;&gt;denial of service attacks&lt;/a&gt;&amp;rdquo; online; it can quickly become a daunting task to fix problems, direct people, and manage expectations.&lt;/p&gt;
&lt;p&gt;The problem is, this was just the most recent piece of a larger recent pattern.  I realized this when someone very close to me stated, &amp;ldquo;You just don&amp;rsquo;t seem happy anymore.&amp;rdquo;  Now they were not saying that I don&amp;rsquo;t  joke around or enjoy life — it&amp;rsquo;s that my default resting state had become one that exhibits being down, worn out, and seemingly slightly depressed.&lt;/p&gt;</description>
      <content>&lt;h2 id=&#34;stress&#34;&gt;Stress&lt;/h2&gt;
&lt;p&gt;The past few weeks at the office have been more stressful than most.  I do fairly technical work on a regular basis and manage a small team of people at the same time.  When there are outages caused by things ranging from equipment failures to widespread fallout from &amp;ldquo;&lt;a href=&#34;http://en.wikipedia.org/wiki/Denial_of_service&#34;&gt;denial of service attacks&lt;/a&gt;&amp;rdquo; online; it can quickly become a daunting task to fix problems, direct people, and manage expectations.&lt;/p&gt;
&lt;p&gt;The problem is, this was just the most recent piece of a larger recent pattern.  I realized this when someone very close to me stated, &amp;ldquo;You just don&amp;rsquo;t seem happy anymore.&amp;rdquo;  Now they were not saying that I don&amp;rsquo;t  joke around or enjoy life — it&amp;rsquo;s that my default resting state had become one that exhibits being down, worn out, and seemingly slightly depressed.&lt;/p&gt;
&lt;h2 id=&#34;clarity&#34;&gt;Clarity&lt;/h2&gt;
&lt;p&gt;It was later that afternoon after reading some texts that ended with &amp;ldquo;You just don&amp;rsquo;t seem happy anymore.&amp;rdquo; that I had my moment of clarity.  I tweeted the following:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Sometimes it takes being in the pressure cooker beyond any level of comfort to have a moment of clarity / zen.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;I then wrote the following on a small index card:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Focus on habits&lt;/li&gt;
&lt;li&gt;Work diligently &amp;amp; then defer / manage expectations&lt;/li&gt;
&lt;li&gt;Remain joyful (not necessarily happy)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;focus-on-habits&#34;&gt;Focus on habits&lt;/h3&gt;
&lt;p&gt;There are certain daily and weekly goals I&amp;rsquo;ve set to make better habits for myself.  When I don&amp;rsquo;t take time to work on those goals and meet at least some of them, I can feel generally down and unhappy with myself.  It is important — daily — to spend a little time on yourself in the form of self maintenance or &amp;ldquo;bettering yourself&amp;rdquo; regardless of the perceived chaos you live and work in.  Find that 15 minutes a couple times a day for your own well being and sanity.&lt;/p&gt;
&lt;h3 id=&#34;work-diligently-and-then-defer--manage-expectations&#34;&gt;Work diligently and then defer / manage expectations&lt;/h3&gt;
&lt;p&gt;We&amp;rsquo;re made to work; it&amp;rsquo;s good to exert effort and &amp;ldquo;do work&amp;rdquo;.  If we&amp;rsquo;re taking good care of ourselves we should work diligently at what we set out to do.  For me that means working hard each day to solve problems and enlist the help of others to solve problems.  At times there are many &amp;ldquo;priorities&amp;rdquo; or &amp;ldquo;emergencies&amp;rdquo;.  We can do our best to make judgement calls and work hard, yet at the end of the day there can be an important and difficult set of responsibilities we have.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Managing the expectations of others — which often times means being ok with disappointing others in a courteous and professional manner.&lt;/li&gt;
&lt;li&gt;Deferring what isn&amp;rsquo;t complete to a future time.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;remain-joyful-not-necessarily-happy&#34;&gt;Remain &amp;ldquo;joyful&amp;rdquo; (not necessarily happy)&lt;/h3&gt;
&lt;p&gt;Here&amp;rsquo;s the thing about &lt;strong&gt;happiness&lt;/strong&gt;.  It &lt;strong&gt;relies on happenings&lt;/strong&gt;.  In the midst of chaos and stress I think it&amp;rsquo;s important to remain &amp;ldquo;joyful&amp;rdquo;.  In looking at definitions &lt;a href=&#34;http://www.diffen.com/difference/Happiness_vs_Joy&#34;&gt;here&lt;/a&gt; is a difference between emotions that I liked:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;happiness: outward expression of elation&lt;/li&gt;
&lt;li&gt;joy: inward peace and contentment&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To me it comes down to being mindful and thankful regardless of your happenings.&lt;/p&gt;
&lt;h2 id=&#34;in-summary&#34;&gt;In summary&lt;/h2&gt;
&lt;p&gt;In the midst of what seems to be overwhelming stress remember to take care of yourself (focus on habits), work hard (work diligently &amp;amp; then defer / manage expectations), and don&amp;rsquo;t let yourself get down due to your happenings (remain joyful).&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>replacing gmail and google calendar</title>
      <link>https://chadstovern.com/replacing-gmail-and-google-calendar/</link>
      <pubDate>Tue, 08 Oct 2013 00:00:00 +0000</pubDate>
      
      <guid>https://chadstovern.com/replacing-gmail-and-google-calendar/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://chadstovern.com/img/gmail.png&#34; alt=&#34;Gmail&#34;&gt;&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ll start this post by stating that I&amp;rsquo;ve been a Google fan for years.  I&amp;rsquo;ve been a Gmail user since I snagged a beta invite in college.  I followed the development of Android from before the time the G1 was announced.  I was labeled &amp;ldquo;another one of those annoying people that &lt;em&gt;have&lt;/em&gt; to use Chrome&amp;rdquo; when it was still in early single digit releases. &lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;  Who would be the first to quote &amp;ldquo;Do no evil&amp;rdquo;?  — This guy.&lt;/p&gt;</description>
      <content>&lt;p&gt;&lt;img src=&#34;https://chadstovern.com/img/gmail.png&#34; alt=&#34;Gmail&#34;&gt;&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ll start this post by stating that I&amp;rsquo;ve been a Google fan for years.  I&amp;rsquo;ve been a Gmail user since I snagged a beta invite in college.  I followed the development of Android from before the time the G1 was announced.  I was labeled &amp;ldquo;another one of those annoying people that &lt;em&gt;have&lt;/em&gt; to use Chrome&amp;rdquo; when it was still in early single digit releases. &lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;  Who would be the first to quote &amp;ldquo;Do no evil&amp;rdquo;?  — This guy.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve decided that in many facets of my life online that I&amp;rsquo;m sick of being the product and not the customer.  I am not woo&amp;rsquo;d by Google or Facebook to stay with them because of feature X or enhancement Y — no no, that focus is for the real customers — advertisers. &lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;  There can be real conveniences to being served relevant ad data and the US federal government is pretty much scanning everything anyway.  However, I&amp;rsquo;m at a point now where I want to more actively and consciously decide what information I&amp;rsquo;m going to give organizations.  I just want to start being the customer for once and have a little bit of personal privacy.  In this case, I&amp;rsquo;m just not ok with any of my primary forms of communication being used to target ad data to me anymore.&lt;/p&gt;
&lt;h2 id=&#34;fastmail-to-the-rescue&#34;&gt;Fastmail to the rescue?&lt;/h2&gt;
&lt;p&gt;I&amp;rsquo;ve looked at Opera&amp;rsquo;s Fastmail offering before and have read some pretty glowing reviews about their service lately.  A couple short conversations over on App.net also sparked my interest to look into their service a bit further.  Unfortunately for my needs it&amp;rsquo;s slightly cost prohibitive.  I want two email accounts each on their own domain.  A &amp;ldquo;proper&amp;rdquo; setup with Fastmail would cost me 80 USD per year.  I could utilize domain aliases and create some rules to bring it down to 40 USD, but I really want these accounts seperate and don&amp;rsquo;t want to have to deal with the &amp;ldquo;reply–as&amp;rdquo; hassle with my mail applications.&lt;/p&gt;
&lt;p&gt;After &amp;ldquo;reading the rags&amp;rdquo; (various forums), there have been a number of incidents where accounts were shut off for hitting send caps, or flagged and disabled for sending bulk mail out when it was not the fault of the user.  These sorts of reports — of which there were more than a few — were enough to give me pause to at least look at the rest of the competition.&lt;/p&gt;
&lt;h2 id=&#34;polarismail--icloud-calendars&#34;&gt;PolarisMail + iCloud Calendars&lt;/h2&gt;
&lt;p&gt;A number of people that were looking for options other than Fastmail were recommending a service called &lt;a href=&#34;https://www.polarismail.com&#34;&gt;PolarisMail&lt;/a&gt;.  I&amp;rsquo;m always a bit leary of seemingly obscure recommendations.  In this case I was pleasantly surprised.  The reviews seemed to be all positive, the pricing competitive, and they even had a &amp;ldquo;Fastmail Promotion&amp;rdquo; running.  The promotion was designed for people unhappy with the Fastmail service and provided a 90 day free trial (up from 30) as well as a free basic mail account for every enhanced account purchased.  Their basic mail offering was only 12 USD per year per mailbox and supported multiple domains.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;This means for 24 USD per year I could have the following.&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Two mailboxes on seperate domains yet managed from a single admin panel&lt;/li&gt;
&lt;li&gt;Fast IMAP &amp;amp; SMTP mail service&lt;/li&gt;
&lt;li&gt;A choice of webmail interfaces including the very nice looking non–free (there is no additional cost; it&amp;rsquo;s just not opensource) Atmail interface&lt;/li&gt;
&lt;li&gt;25 GB of storage per mailbox&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I signed up for the 30 day free trial and emailed support about the Fastmail promotion.  &lt;sup id=&#34;fnref:3&#34;&gt;&lt;a href=&#34;#fn:3&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;3&lt;/a&gt;&lt;/sup&gt;  I mentioned that I was looking to move from Google Apps to Fastmail and stumbled upon PolarisMail.  I asked if they would be willing to apply the promotion to my account for choosing them over Fastmail.  It would not have by any means been a deal breaker, but in under an hour they had responded and bumped my free trial up to 90 days.  They did also let me know that since I purchased two basic accounts and no enhanced accounts that I would not be eligible for any free accounts.  No problems there, I was just happy to see the prompt communication!&lt;/p&gt;
&lt;p&gt;As far as calendaring goes, I&amp;rsquo;ve decided to use iCloud to store and sync my calendars across my devices.  I use a Mac and iPad at work and at home and I&amp;rsquo;ll be moving to an iPhone soon enough.  For Android users there is an app called &amp;ldquo;&lt;a href=&#34;https://play.google.com/store/apps/details?id=org.dmfs.caldav.icloud&amp;amp;hl=en&#34;&gt;SmoothSync for Cloud Calendar&lt;/a&gt;&amp;rdquo; on the Play Store that will let you access and sync your iCloud calendars.  Not much else to say here other than I&amp;rsquo;ve had zero issues with my calendaring so far.&lt;/p&gt;
&lt;h2 id=&#34;polarismail-with-builtin-caldav--carddav&#34;&gt;PolarisMail with builtin CalDav &amp;amp; CardDav&lt;/h2&gt;
&lt;p&gt;If you don&amp;rsquo;t want to be tied to Apple for your calendaring there are options for that too.  Apple supports connecting to any CalDav or CardDav service.  Fortunately PolarisMail offers &amp;ldquo;Enhanced&amp;rdquo; accounts for 24 USD per year that offer those services as well.  You can look at it simply as 12 USD per year for email hosting and 12 USD per year for calendar and contact hosting and syncing.&lt;/p&gt;
&lt;h2 id=&#34;buyers-remorse&#34;&gt;Buyer&amp;rsquo;s remorse?&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Nope.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve been using the setup fo PolarisMail + iCloud calendars with my MacBook Pro, iPad, and Android phone for nearly two months now without a hiccup.&lt;/p&gt;
&lt;p&gt;If I wanted to provide a tiny amount of critical feedback it would be that they still billed me after 30 days rather than a 90 day free trial.  They apologized and assured me that they would set the bill date forward for next year so I could get the extra two free months per my recommendation to keep things simple.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;If you&amp;rsquo;re looking for an inexpensive reliable place to host your mail&lt;/strong&gt;, you should definitely consider taking &lt;a href=&#34;https://www.polarismail.com&#34;&gt;PolarisMail&lt;/a&gt; for a spin.&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;Now our whole dev team uses it as their primary browser.&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:2&#34;&gt;
&lt;p&gt;Advertising isn&amp;rsquo;t something I view as evil or wrong.  I merely resist it in the form of creepily parsing my personal data and building a profile to help decide which ads I see.  By contrast, I&amp;rsquo;m fine with seeing a giant Miller billboard at a Brewers game.  People that go to a stadium game are more likely to buy a beer or two, that makes sense.  Once again I would not be ok with them scanning my ticket when I purchase a brew so they could text me personalized coupon codes or something.&amp;#160;&lt;a href=&#34;#fnref:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:3&#34;&gt;
&lt;p&gt;The Fastmail sales folks were friendly and helpful though it did often take more than a day between replies to my short thread with them asking questions about the service and migration options.&amp;#160;&lt;a href=&#34;#fnref:3&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</content>
    </item>
    
    <item>
      <title>Procrastination: I don&#39;t think you&#39;re lazy</title>
      <link>https://chadstovern.com/procrastination-i-dont-think-youre-lazy/</link>
      <pubDate>Wed, 19 Jun 2013 00:00:00 +0000</pubDate>
      
      <guid>https://chadstovern.com/procrastination-i-dont-think-youre-lazy/</guid>
      <description>&lt;p&gt;When you see the word procrastination what do you think of?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Laziness?&lt;/li&gt;
&lt;li&gt;Poor work ethic?&lt;/li&gt;
&lt;li&gt;Lack of care?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&#34;https://chadstovern.com/img/omnifocus-completed-small.png&#34; alt=&#34;OmniFocus Completed&#34;&gt;&lt;/p&gt;
&lt;p&gt;Those things can be true — but let&amp;rsquo;s face it — the fact that we&amp;rsquo;re skimming an article like this this is a form of &amp;ldquo;care&amp;rdquo; and therefore a pretty good sign those things are mostly untrue of us.  What I believe happens more often than not is that our brain gets in the way.  I&amp;rsquo;ll give you a quick example of something I&amp;rsquo;ve been neglecting lately, my expense report.&lt;/p&gt;</description>
      <content>&lt;p&gt;When you see the word procrastination what do you think of?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Laziness?&lt;/li&gt;
&lt;li&gt;Poor work ethic?&lt;/li&gt;
&lt;li&gt;Lack of care?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&#34;https://chadstovern.com/img/omnifocus-completed-small.png&#34; alt=&#34;OmniFocus Completed&#34;&gt;&lt;/p&gt;
&lt;p&gt;Those things can be true — but let&amp;rsquo;s face it — the fact that we&amp;rsquo;re skimming an article like this this is a form of &amp;ldquo;care&amp;rdquo; and therefore a pretty good sign those things are mostly untrue of us.  What I believe happens more often than not is that our brain gets in the way.  I&amp;rsquo;ll give you a quick example of something I&amp;rsquo;ve been neglecting lately, my expense report.&lt;/p&gt;
&lt;p&gt;That seems like such an easy task.  It&amp;rsquo;s a task that benefits me directly, with money!  Why on earth have I not finished my last expense report?  I&amp;rsquo;ve seen a reminder in my &lt;em&gt;trusted system&lt;/em&gt; that tells me &amp;ldquo;do expense report today&amp;rdquo;.  The issue is &amp;ldquo;do expense report today&amp;rdquo; — while seemingly actionable — is not.  My brain knows that there are more steps to that task that I haven&amp;rsquo;t defined; It&amp;rsquo;s actually a project.  Maybe I know I need to print off receipts, but I have no idea where I put them.  If I don&amp;rsquo;t know what the next well defined physical action is to achieve the goal of a submitted expense report, my brain provides resistance to working on it.  Let&amp;rsquo;s fix this.&lt;/p&gt;
&lt;p&gt;The &lt;em&gt;project&lt;/em&gt; &amp;ldquo;Complete Expense Report&amp;rdquo; has several physical action steps that might look like this:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Find receipt from OfficeMax inbox purchase&lt;/li&gt;
&lt;li&gt;Plot mileage from the office to our recent vendor meet-up&lt;/li&gt;
&lt;li&gt;Find last months mileage email on my Mac to find current reimbursement rate&lt;/li&gt;
&lt;li&gt;Calculate mileage owed and enter into expense report spreadsheet&lt;/li&gt;
&lt;li&gt;Print cell phone receipt for on call reimbursement&lt;/li&gt;
&lt;li&gt;Enter data for printed receipts into expense report spreadsheet&lt;/li&gt;
&lt;li&gt;Print expense report spreadsheet&lt;/li&gt;
&lt;li&gt;Attach receipts to expense report spreadsheet&lt;/li&gt;
&lt;li&gt;Sign expense report and turn in to my boss&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That sounds really fancy and unnecessary Chad.  Oh really?  How many nagging things do you have on a list or floating in your head that you feel bad about because you haven&amp;rsquo;t done anything about them yet?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Here&amp;rsquo;s my challenge to you:&lt;/strong&gt; over the next week find one thing you&amp;rsquo;ve been putting off that you feel is important and figure out what the first or next &lt;em&gt;physical&lt;/em&gt; action is that is required to get you closer to completion.  If you do this for even one item on your todo list that isn&amp;rsquo;t getting done, I promise you&amp;rsquo;ll make more progress than just ocassionally thinking about it or feeling bad that it isn&amp;rsquo;t done yet.  In fact, it looks like I&amp;rsquo;m all set with a set of super simple yet very well defined tasks that will lead me to finally get my latest expense report finished.&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>changing your internal field separator</title>
      <link>https://chadstovern.com/changing-your-internal-field-separator/</link>
      <pubDate>Wed, 27 Mar 2013 00:00:00 +0000</pubDate>
      
      <guid>https://chadstovern.com/changing-your-internal-field-separator/</guid>
      <description>&lt;h2 id=&#34;wow-that-sounds-pretty-exciting-doesnt-it&#34;&gt;Wow; that sounds pretty exciting doesn’t it?&lt;/h2&gt;
&lt;p&gt;If you do much shell scripting (I frequent bash) at some point you’ll come across “IFS” and learn to appreciate the usefulness in manipulating it.  Let’s look at a script showing that — and then dive into the details.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#!/usr/bin/env bash
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;## test function&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ifs_test&lt;span style=&#34;color:#f92672&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	cd ~/tmp &lt;span style=&#34;color:#f92672&#34;&gt;||&lt;/span&gt; exit &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; entry in &lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;ls -lah&lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		echo $entry
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;done&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;## let’s see how it behaves&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ifs_test
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;## let’s modify IFS and run it again&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;oIFS&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;$IFS
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;IFS&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ifs_test
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;## let’s be anal and restore IFS explicitly&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;IFS&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;$oIFS
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;exit
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;so-whats-happening-here-and-how-is-it-relevant&#34;&gt;So what’s happening here and how is it relevant?&lt;/h2&gt;
&lt;p&gt;A number of times I’ve had to write scripts to automate the processing of files, which can turn out to be any combination of renaming them, moving them around, or checking if they are valid based on some set of rules.  One thing that can often bite me is file names with unexpected spaces.  You may say, “but people know how to name the files correctly, there’s documentation for it even.”  I’m sure you’re right, but you’re not accounting for the fact that these people are human.  Humans make mistakes.  You can get clever and pass results through another Unix tool, but I prefer to avoid extra dependencies when the shell I’m working in can handle it cleanly and efficiently.&lt;/p&gt;</description>
      <content>&lt;h2 id=&#34;wow-that-sounds-pretty-exciting-doesnt-it&#34;&gt;Wow; that sounds pretty exciting doesn’t it?&lt;/h2&gt;
&lt;p&gt;If you do much shell scripting (I frequent bash) at some point you’ll come across “IFS” and learn to appreciate the usefulness in manipulating it.  Let’s look at a script showing that — and then dive into the details.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#!/usr/bin/env bash
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;## test function&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ifs_test&lt;span style=&#34;color:#f92672&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	cd ~/tmp &lt;span style=&#34;color:#f92672&#34;&gt;||&lt;/span&gt; exit &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; entry in &lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;ls -lah&lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		echo $entry
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;done&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;## let’s see how it behaves&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ifs_test
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;## let’s modify IFS and run it again&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;oIFS&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;$IFS
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;IFS&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ifs_test
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;## let’s be anal and restore IFS explicitly&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;IFS&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;$oIFS
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;exit
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;so-whats-happening-here-and-how-is-it-relevant&#34;&gt;So what’s happening here and how is it relevant?&lt;/h2&gt;
&lt;p&gt;A number of times I’ve had to write scripts to automate the processing of files, which can turn out to be any combination of renaming them, moving them around, or checking if they are valid based on some set of rules.  One thing that can often bite me is file names with unexpected spaces.  You may say, “but people know how to name the files correctly, there’s documentation for it even.”  I’m sure you’re right, but you’re not accounting for the fact that these people are human.  Humans make mistakes.  You can get clever and pass results through another Unix tool, but I prefer to avoid extra dependencies when the shell I’m working in can handle it cleanly and efficiently.&lt;/p&gt;
&lt;p&gt;As an example look at the bash function &lt;code&gt;ifs_test&lt;/code&gt; in our example.  It’s just a trivial for loop which echoes out the results of the &lt;code&gt;ls -lah&lt;/code&gt; command.  The first time it is called this is the result we get:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;chadhs@mac scratch&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;$ ./ifstest.sh
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;drwxr-xr-x
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;chadhs
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;staff
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;136B
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Mar
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;24&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;19:36
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;drwxr-xr-x+
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;39&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;chadhs
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;staff
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;1.3K
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Mar
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;24&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;19:36
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;..
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-rw-r--r--
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;chadhs
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;staff
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;576B
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Jul
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;31&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;2012&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;pckeyboardhack.tmp
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-rw-r--r--
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;chadhs
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;staff
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;0B
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Mar
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;24&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;17:17
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;so-secret-filename-is-classified.md
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;ouch--that-was-super-ugly-how-do-we-fix-it&#34;&gt;Ouch.  That was super ugly; how do we fix it?&lt;/h2&gt;
&lt;p&gt;Before explaining that, let’s see how the output looks the second time the function &lt;code&gt;ifs_test&lt;/code&gt; is called.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;drwxr-xr-x   &lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt; chadhs  staff   136B Mar &lt;span style=&#34;color:#ae81ff&#34;&gt;24&lt;/span&gt; 19:36 .
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;drwxr-xr-x+ &lt;span style=&#34;color:#ae81ff&#34;&gt;39&lt;/span&gt; chadhs  staff   1.3K Mar &lt;span style=&#34;color:#ae81ff&#34;&gt;24&lt;/span&gt; 19:36 ..
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-rw-r--r--   &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; chadhs  staff   576B Jul &lt;span style=&#34;color:#ae81ff&#34;&gt;31&lt;/span&gt;  &lt;span style=&#34;color:#ae81ff&#34;&gt;2012&lt;/span&gt; pckeyboardhack.tmp
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-rw-r--r--   &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; chadhs  staff     0B Mar &lt;span style=&#34;color:#ae81ff&#34;&gt;24&lt;/span&gt; 17:17 so-secret-filename…
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;ahh-thats-much-better&#34;&gt;Ahh… that’s much better.&lt;/h2&gt;
&lt;p&gt;So to fully understand what is going on each time the function &lt;code&gt;ifs_test&lt;/code&gt; is called we need to understand what the variable IFS is.  By default the internal shell variable IFS is set to recognize spaces, tabs, and new lines as a field delimiter (aka Internal Field Separator).  Seeing that there are multiple spaces in each of our results from the &lt;code&gt;ls -lah&lt;/code&gt; command in the for loop, our shell is treating every single white space (compare the first result to the second) as a delimiter for a new item in our list of results renerated in the for loop.&lt;/p&gt;
&lt;h2 id=&#34;now-for-the-fix&#34;&gt;Now for the fix&lt;/h2&gt;
&lt;p&gt;You’ll notice in our example that before the function &lt;code&gt;ifs_test&lt;/code&gt; is called the second time, we set a variable called oIFS to store the default value of IFS, and then change IFS to only treat a new line as a field separator / delimiter.  Once we no longer need this behavior we then set IFS back to it’s default value &lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;
&lt;h2 id=&#34;wrapping-it-all-up&#34;&gt;Wrapping it all up&lt;/h2&gt;
&lt;p&gt;The reason I spent a little time writing this up and sharing it was the simple fact that learning about how to alter IFS to control how the shell delimits results saved me some pain in a project recently.  My scripts continued to run and do their job but I’d get a lot of little errors when someone didn’t follow the documentation; and trusting humans is just bad for business.  ;-)&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;In theory we can just unset IFS to return it to it’s default value, but I like to do it manually &amp;amp; explicitly.&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</content>
    </item>
    
    <item>
      <title>about</title>
      <link>https://chadstovern.com/about/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://chadstovern.com/about/</guid>
      <description>&lt;p&gt;
&lt;img src=&#34;https://chadstovern.com/img/chad-20200520.jpg&#34; style=&#34;float:right;border-radius:8px;margin-left:2px&#34; alt=&#34;Me&#34; width=&#34;28%&#34;&gt;&lt;/p&gt;
&lt;p&gt;
Hi, I&amp;#39;m Chad. I occasionally write here about my interests.&lt;/p&gt;
&lt;p&gt;
When I&amp;#39;m not busy enjoying time with my family, I&amp;#39;m likely tinkering with something new…&lt;/p&gt;
&lt;div id=&#34;outline-container-headline-1&#34; class=&#34;outline-3&#34;&gt;
&lt;h3 id=&#34;headline-1&#34;&gt;
contact info
&lt;/h3&gt;
&lt;div id=&#34;outline-text-headline-1&#34; class=&#34;outline-text-3&#34;&gt;
&lt;p&gt;&lt;i class=&#34;fas fa-envelope&#34;&gt;&lt;/i&gt; &lt;a href=&#34;mailto:hello@chadstovern.com&#34;&gt;hello@chadstovern.com&lt;/a&gt; &lt;br&gt;
&lt;i class=&#34;fab fa-github-alt&#34;&gt;&lt;/i&gt; &lt;a href=&#34;https://github.com/chadhs&#34;&gt;chadhs&lt;/a&gt; on github&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&#34;outline-container-headline-2&#34; class=&#34;outline-3&#34;&gt;
&lt;h3 id=&#34;headline-2&#34;&gt;
my work
&lt;/h3&gt;
&lt;div id=&#34;outline-text-headline-2&#34; class=&#34;outline-text-3&#34;&gt;
&lt;p&gt;Professionally, my focus is technology.  I&amp;#39;ve chosen the path of the generalist, and enjoy helping others succeed as much as solving problems myself.  I&amp;#39;ve worked in many roles, including:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Engineering Manager&lt;/li&gt;
&lt;li&gt;Software Engineer&lt;/li&gt;
&lt;li&gt;Operations Engineer&lt;/li&gt;
&lt;li&gt;IT Manager&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://xkcd.com/705/&#34;&gt;Sysadmin&lt;/a&gt; (Systems Administrator)&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&#34;outline-container-headline-3&#34; class=&#34;outline-3&#34;&gt;
&lt;h3 id=&#34;headline-3&#34;&gt;
personal life
&lt;/h3&gt;
&lt;div id=&#34;outline-text-headline-3&#34; class=&#34;outline-text-3&#34;&gt;
&lt;p&gt;Essentialism is something I value greatly. &lt;br&gt;
I strive for my life to be centered around faith and family. &lt;br&gt;
Talking about difficult and interesting topics in good company — over good coffee — is worthwhile.&lt;/p&gt;</description>
      <content>
&lt;p&gt;
&lt;img src=&#34;https://chadstovern.com/img/chad-20200520.jpg&#34; style=&#34;float:right;border-radius:8px;margin-left:2px&#34; alt=&#34;Me&#34; width=&#34;28%&#34;&gt;&lt;/p&gt;
&lt;p&gt;
Hi, I&amp;#39;m Chad. I occasionally write here about my interests.&lt;/p&gt;
&lt;p&gt;
When I&amp;#39;m not busy enjoying time with my family, I&amp;#39;m likely tinkering with something new…&lt;/p&gt;
&lt;div id=&#34;outline-container-headline-1&#34; class=&#34;outline-3&#34;&gt;
&lt;h3 id=&#34;headline-1&#34;&gt;
contact info
&lt;/h3&gt;
&lt;div id=&#34;outline-text-headline-1&#34; class=&#34;outline-text-3&#34;&gt;
&lt;p&gt;&lt;i class=&#34;fas fa-envelope&#34;&gt;&lt;/i&gt; &lt;a href=&#34;mailto:hello@chadstovern.com&#34;&gt;hello@chadstovern.com&lt;/a&gt; &lt;br&gt;
&lt;i class=&#34;fab fa-github-alt&#34;&gt;&lt;/i&gt; &lt;a href=&#34;https://github.com/chadhs&#34;&gt;chadhs&lt;/a&gt; on github&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&#34;outline-container-headline-2&#34; class=&#34;outline-3&#34;&gt;
&lt;h3 id=&#34;headline-2&#34;&gt;
my work
&lt;/h3&gt;
&lt;div id=&#34;outline-text-headline-2&#34; class=&#34;outline-text-3&#34;&gt;
&lt;p&gt;Professionally, my focus is technology.  I&amp;#39;ve chosen the path of the generalist, and enjoy helping others succeed as much as solving problems myself.  I&amp;#39;ve worked in many roles, including:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Engineering Manager&lt;/li&gt;
&lt;li&gt;Software Engineer&lt;/li&gt;
&lt;li&gt;Operations Engineer&lt;/li&gt;
&lt;li&gt;IT Manager&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://xkcd.com/705/&#34;&gt;Sysadmin&lt;/a&gt; (Systems Administrator)&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&#34;outline-container-headline-3&#34; class=&#34;outline-3&#34;&gt;
&lt;h3 id=&#34;headline-3&#34;&gt;
personal life
&lt;/h3&gt;
&lt;div id=&#34;outline-text-headline-3&#34; class=&#34;outline-text-3&#34;&gt;
&lt;p&gt;Essentialism is something I value greatly. &lt;br&gt;
I strive for my life to be centered around faith and family. &lt;br&gt;
Talking about difficult and interesting topics in good company — over good coffee — is worthwhile.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;#34;Ars longa, vita brevis, occasio praeceps, experimentum periculosum, iudicium difficile.&amp;#34; &lt;br&gt;
&amp;#34;Life is short, [the] craft long, opportunity fleeting, experimentation treacherous, judgment difficult.&amp;#34; &lt;br&gt;
– Hippocrates&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;/div&gt;
</content>
    </item>
    
    <item>
      <title>archives</title>
      <link>https://chadstovern.com/archives/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://chadstovern.com/archives/</guid>
      <description>&lt;div id=&#34;outline-container-headline-1&#34; class=&#34;outline-3&#34;&gt;
&lt;h3 id=&#34;headline-1&#34;&gt;
2023
&lt;/h3&gt;
&lt;div id=&#34;outline-text-headline-1&#34; class=&#34;outline-text-3&#34;&gt;
&lt;p&gt;
15 Nov – &lt;a href=&#34;https://chadstovern.com/preferring-plain-text-tools/&#34;&gt;Preferring Plain Text Tools&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
03 Mar – &lt;a href=&#34;https://chadstovern.com/using-qmk-powered-keyboards-with-kvm-switches/&#34;&gt;Using QMK Powered Keyboards with KVM Switches&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&#34;outline-container-headline-2&#34; class=&#34;outline-3&#34;&gt;
&lt;h3 id=&#34;headline-2&#34;&gt;
2020
&lt;/h3&gt;
&lt;div id=&#34;outline-text-headline-2&#34; class=&#34;outline-text-3&#34;&gt;
&lt;p&gt;
02 May – &lt;a href=&#34;https://chadstovern.com/javascript-in-emacs-revisted/&#34;&gt;JavaScript in Emacs Revisted&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&#34;outline-container-headline-3&#34; class=&#34;outline-3&#34;&gt;
&lt;h3 id=&#34;headline-3&#34;&gt;
2018
&lt;/h3&gt;
&lt;div id=&#34;outline-text-headline-3&#34; class=&#34;outline-text-3&#34;&gt;
&lt;p&gt;
16 Feb – &lt;a href=&#34;https://chadstovern.com/javascript-support-in-emacs/&#34;&gt;Javascript Support in Emacs&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
31 Jan – &lt;a href=&#34;https://chadstovern.com/using-paredit-with-javascript-modes/&#34;&gt;Using Paredit With Javascript Modes&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
10 Jan – &lt;a href=&#34;https://chadstovern.com/emacs-is-a-way-of-life/&#34;&gt;Emacs is a Way of Life&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&#34;outline-container-headline-4&#34; class=&#34;outline-3&#34;&gt;
&lt;h3 id=&#34;headline-4&#34;&gt;
2016
&lt;/h3&gt;
&lt;div id=&#34;outline-text-headline-4&#34; class=&#34;outline-text-3&#34;&gt;
&lt;p&gt;
16 Feb – &lt;a href=&#34;https://chadstovern.com/clojure-in-atom/&#34;&gt;Clojure in Atom&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
15 Feb – &lt;a href=&#34;https://chadstovern.com/clojure-in-sublime-text/&#34;&gt;Clojure in Sublime Text&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&#34;outline-container-headline-5&#34; class=&#34;outline-3&#34;&gt;
&lt;h3 id=&#34;headline-5&#34;&gt;
2015
&lt;/h3&gt;
&lt;div id=&#34;outline-text-headline-5&#34; class=&#34;outline-text-3&#34;&gt;
&lt;p&gt;
23 Jun – &lt;a href=&#34;https://chadstovern.com/quick-tip-how-to-rename-email-flags-in-mail.app/&#34;&gt;Quick Tip: How to Rename Email Flags in Mail.app&lt;/a&gt;&lt;/p&gt;</description>
      <content>
&lt;div id=&#34;outline-container-headline-1&#34; class=&#34;outline-3&#34;&gt;
&lt;h3 id=&#34;headline-1&#34;&gt;
2023
&lt;/h3&gt;
&lt;div id=&#34;outline-text-headline-1&#34; class=&#34;outline-text-3&#34;&gt;
&lt;p&gt;
15 Nov – &lt;a href=&#34;https://chadstovern.com/preferring-plain-text-tools/&#34;&gt;Preferring Plain Text Tools&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
03 Mar – &lt;a href=&#34;https://chadstovern.com/using-qmk-powered-keyboards-with-kvm-switches/&#34;&gt;Using QMK Powered Keyboards with KVM Switches&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&#34;outline-container-headline-2&#34; class=&#34;outline-3&#34;&gt;
&lt;h3 id=&#34;headline-2&#34;&gt;
2020
&lt;/h3&gt;
&lt;div id=&#34;outline-text-headline-2&#34; class=&#34;outline-text-3&#34;&gt;
&lt;p&gt;
02 May – &lt;a href=&#34;https://chadstovern.com/javascript-in-emacs-revisted/&#34;&gt;JavaScript in Emacs Revisted&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&#34;outline-container-headline-3&#34; class=&#34;outline-3&#34;&gt;
&lt;h3 id=&#34;headline-3&#34;&gt;
2018
&lt;/h3&gt;
&lt;div id=&#34;outline-text-headline-3&#34; class=&#34;outline-text-3&#34;&gt;
&lt;p&gt;
16 Feb – &lt;a href=&#34;https://chadstovern.com/javascript-support-in-emacs/&#34;&gt;Javascript Support in Emacs&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
31 Jan – &lt;a href=&#34;https://chadstovern.com/using-paredit-with-javascript-modes/&#34;&gt;Using Paredit With Javascript Modes&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
10 Jan – &lt;a href=&#34;https://chadstovern.com/emacs-is-a-way-of-life/&#34;&gt;Emacs is a Way of Life&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&#34;outline-container-headline-4&#34; class=&#34;outline-3&#34;&gt;
&lt;h3 id=&#34;headline-4&#34;&gt;
2016
&lt;/h3&gt;
&lt;div id=&#34;outline-text-headline-4&#34; class=&#34;outline-text-3&#34;&gt;
&lt;p&gt;
16 Feb – &lt;a href=&#34;https://chadstovern.com/clojure-in-atom/&#34;&gt;Clojure in Atom&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
15 Feb – &lt;a href=&#34;https://chadstovern.com/clojure-in-sublime-text/&#34;&gt;Clojure in Sublime Text&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&#34;outline-container-headline-5&#34; class=&#34;outline-3&#34;&gt;
&lt;h3 id=&#34;headline-5&#34;&gt;
2015
&lt;/h3&gt;
&lt;div id=&#34;outline-text-headline-5&#34; class=&#34;outline-text-3&#34;&gt;
&lt;p&gt;
23 Jun – &lt;a href=&#34;https://chadstovern.com/quick-tip-how-to-rename-email-flags-in-mail.app/&#34;&gt;Quick Tip: How to Rename Email Flags in Mail.app&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
08 Jun – &lt;a href=&#34;https://chadstovern.com/how-to-run-a-django-site-with-apache-mod_wsgi-and-mysql-on-freebsd-10.1/&#34;&gt;How to Run a Django Site with Apache, mod_wsgi, and MySQL on FreeBSD 10.1&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
02 Jun – &lt;a href=&#34;https://chadstovern.com/how-to-send-email-through-an-external-smtp-service-with-sendmail-on-freebsd-10.1/&#34;&gt;How To Send Email through an External SMTP Service with Sendmail on FreeBSD 10.1&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
12 May – &lt;a href=&#34;https://chadstovern.com/build-a-20-standing-desk-in-20-minutes/&#34;&gt;Build a $20 Standing Desk in 20 Minutes&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
01 May – &lt;a href=&#34;https://chadstovern.com/setting-up-postgresql-on-os-x-yosemite-for-local-development/&#34;&gt;Setting Up PostgreSQL on OS X Yosemite for Local Development&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
16 Feb – &lt;a href=&#34;https://chadstovern.com/what-you-should-be-doing-even-when-you-dont-want-to/&#34;&gt;What you should be doing even when you don’t want to&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&#34;outline-container-headline-6&#34; class=&#34;outline-3&#34;&gt;
&lt;h3 id=&#34;headline-6&#34;&gt;
2014
&lt;/h3&gt;
&lt;div id=&#34;outline-text-headline-6&#34; class=&#34;outline-text-3&#34;&gt;
&lt;p&gt;
15 Dec – &lt;a href=&#34;https://chadstovern.com/quick-css-for-better-looking-pull-quotes/&#34;&gt;Quick CSS for better looking pull quotes&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
15 Dec – &lt;a href=&#34;https://chadstovern.com/the-importance-of-rest/&#34;&gt;The importance of rest&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
20 Nov – &lt;a href=&#34;https://chadstovern.com/a-new-job-where-im-learning-to-code/&#34;&gt;A New Job Where I&amp;amp;#39;m Learning to Code&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
08 Oct – &lt;a href=&#34;https://chadstovern.com/how-to-backup-all-your-files-to-amazon-s3/&#34;&gt;How to Backup All Your Files to Amazon S3&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
02 Jun – &lt;a href=&#34;https://chadstovern.com/mind-mapping-101-the-visual-way-to-organize-information/&#34;&gt;Mind Mapping 101: The Visual Way to Organize Information&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
27 May – &lt;a href=&#34;https://chadstovern.com/superpower-your-note-taking-skills-with-nvalt-and-simplenote/&#34;&gt;Superpower Your Note Taking Skills With nvALT and Simplenote&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
17 Apr – &lt;a href=&#34;https://chadstovern.com/hearthstone-for-ipad-impressions/&#34;&gt;HearthStone for iPad impressions&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
12 Apr – &lt;a href=&#34;https://chadstovern.com/getting-started/&#34;&gt;Getting started&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
10 Apr – &lt;a href=&#34;https://chadstovern.com/second-hand-meta-wizard/&#34;&gt;Second-hand meta wizard&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
17 Feb – &lt;a href=&#34;https://chadstovern.com/upgrade-freebsd-ports-without-confirmation-prompts/&#34;&gt;Upgrade FreeBSD ports without confirmation prompts&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
15 Feb – &lt;a href=&#34;https://chadstovern.com/a-moment-of-clarity-in-stressful-times/&#34;&gt;A moment of clarity in stressful times&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&#34;outline-container-headline-7&#34; class=&#34;outline-3&#34;&gt;
&lt;h3 id=&#34;headline-7&#34;&gt;
2013
&lt;/h3&gt;
&lt;div id=&#34;outline-text-headline-7&#34; class=&#34;outline-text-3&#34;&gt;
&lt;p&gt;
08 Oct – &lt;a href=&#34;https://chadstovern.com/replacing-gmail-and-google-calendar/&#34;&gt;replacing gmail and google calendar&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
19 Jun – &lt;a href=&#34;https://chadstovern.com/procrastination-i-dont-think-youre-lazy/&#34;&gt;Procrastination: I don&amp;amp;#39;t think you&amp;amp;#39;re lazy&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
27 Mar – &lt;a href=&#34;https://chadstovern.com/changing-your-internal-field-separator/&#34;&gt;changing your internal field separator&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
</content>
    </item>
    
    <item>
      <title>projects</title>
      <link>https://chadstovern.com/projects/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://chadstovern.com/projects/</guid>
      <description>&lt;div id=&#34;outline-container-headline-1&#34; class=&#34;outline-3&#34;&gt;
&lt;h3 id=&#34;headline-1&#34;&gt;
code
&lt;/h3&gt;
&lt;div id=&#34;outline-text-headline-1&#34; class=&#34;outline-text-3&#34;&gt;
&lt;p&gt;&lt;img src=&#34;https://chadstovern.com/img/all_the_things.jpg&#34; style=&#34;float:left;border-radius:2px;margin-right:6px&#34; alt=&#34;all the things&#34; width=&#34;20px&#34;&gt;
&lt;a href=&#34;https://github.com/chadhs&#34;&gt;github profile&lt;/a&gt; &lt;br&gt;
&lt;a href=&#34;https://github.com/chadhs/ccclock&#34;&gt;cord cutters clock&lt;/a&gt; &lt;br&gt;
&lt;a href=&#34;https://github.com/chadhs/self-destruct&#34;&gt;self destructing note service&lt;/a&gt; &lt;br&gt;
&lt;a href=&#34;https://github.com/chadhs/dotfiles/blob/master/editors/emacs-config.org&#34;&gt;emacs config&lt;/a&gt; &lt;br&gt;
&lt;a href=&#34;https://github.com/chadhs/dotfiles&#34;&gt;dotfiles&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&#34;outline-container-headline-2&#34; class=&#34;outline-3&#34;&gt;
&lt;h3 id=&#34;headline-2&#34;&gt;
writing
&lt;/h3&gt;
&lt;div id=&#34;outline-text-headline-2&#34; class=&#34;outline-text-3&#34;&gt;
&lt;p&gt;&lt;a href=&#34;https://www.digitalocean.com/community/users/chadhs?primary_filter=tutorials&#34;&gt;DigitalOcean Tutorials&lt;/a&gt; &lt;br&gt;
&lt;a href=&#34;http://tutsplus.com/authors/chad-stovern&#34;&gt;Tuts+ Tutorials&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&#34;outline-container-headline-3&#34; class=&#34;outline-3&#34;&gt;
&lt;h3 id=&#34;headline-3&#34;&gt;
products
&lt;/h3&gt;
&lt;div id=&#34;outline-text-headline-3&#34; class=&#34;outline-text-3&#34;&gt;
&lt;p&gt;&lt;a href=&#34;https://techcraftlabs.com&#34;&gt;ReadItNever&lt;/a&gt; (discontinued 2022-12-31)&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&#34;outline-container-headline-4&#34; class=&#34;outline-3&#34;&gt;
&lt;h3 id=&#34;headline-4&#34;&gt;
community
&lt;/h3&gt;
&lt;div id=&#34;outline-text-headline-4&#34; class=&#34;outline-text-3&#34;&gt;
&lt;p&gt;Organizer / Founding member of Clojure MKE &lt;br&gt;
&lt;strong&gt;(December 2015 - December 2018)&lt;/strong&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
      <content>
&lt;div id=&#34;outline-container-headline-1&#34; class=&#34;outline-3&#34;&gt;
&lt;h3 id=&#34;headline-1&#34;&gt;
code
&lt;/h3&gt;
&lt;div id=&#34;outline-text-headline-1&#34; class=&#34;outline-text-3&#34;&gt;
&lt;p&gt;&lt;img src=&#34;https://chadstovern.com/img/all_the_things.jpg&#34; style=&#34;float:left;border-radius:2px;margin-right:6px&#34; alt=&#34;all the things&#34; width=&#34;20px&#34;&gt;
&lt;a href=&#34;https://github.com/chadhs&#34;&gt;github profile&lt;/a&gt; &lt;br&gt;
&lt;a href=&#34;https://github.com/chadhs/ccclock&#34;&gt;cord cutters clock&lt;/a&gt; &lt;br&gt;
&lt;a href=&#34;https://github.com/chadhs/self-destruct&#34;&gt;self destructing note service&lt;/a&gt; &lt;br&gt;
&lt;a href=&#34;https://github.com/chadhs/dotfiles/blob/master/editors/emacs-config.org&#34;&gt;emacs config&lt;/a&gt; &lt;br&gt;
&lt;a href=&#34;https://github.com/chadhs/dotfiles&#34;&gt;dotfiles&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&#34;outline-container-headline-2&#34; class=&#34;outline-3&#34;&gt;
&lt;h3 id=&#34;headline-2&#34;&gt;
writing
&lt;/h3&gt;
&lt;div id=&#34;outline-text-headline-2&#34; class=&#34;outline-text-3&#34;&gt;
&lt;p&gt;&lt;a href=&#34;https://www.digitalocean.com/community/users/chadhs?primary_filter=tutorials&#34;&gt;DigitalOcean Tutorials&lt;/a&gt; &lt;br&gt;
&lt;a href=&#34;http://tutsplus.com/authors/chad-stovern&#34;&gt;Tuts+ Tutorials&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&#34;outline-container-headline-3&#34; class=&#34;outline-3&#34;&gt;
&lt;h3 id=&#34;headline-3&#34;&gt;
products
&lt;/h3&gt;
&lt;div id=&#34;outline-text-headline-3&#34; class=&#34;outline-text-3&#34;&gt;
&lt;p&gt;&lt;a href=&#34;https://techcraftlabs.com&#34;&gt;ReadItNever&lt;/a&gt; (discontinued 2022-12-31)&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&#34;outline-container-headline-4&#34; class=&#34;outline-3&#34;&gt;
&lt;h3 id=&#34;headline-4&#34;&gt;
community
&lt;/h3&gt;
&lt;div id=&#34;outline-text-headline-4&#34; class=&#34;outline-text-3&#34;&gt;
&lt;p&gt;Organizer / Founding member of Clojure MKE &lt;br&gt;
&lt;strong&gt;(December 2015 - December 2018)&lt;/strong&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
</content>
    </item>
    
  </channel>
</rss>
