<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Posts on Logan Barnett&#39;s blog</title>
    <link>https://blog.logustus.com/posts/</link>
    <description>Recent content in Posts on Logan Barnett&#39;s blog</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <lastBuildDate>Sun, 30 Mar 2025 00:00:00 -0700</lastBuildDate>
    <atom:link href="https://blog.logustus.com/posts/feed.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Jerry the Joblin</title>
      <link>https://blog.logustus.com/jerry-the-joblin/</link>
      <pubDate>Sun, 30 Mar 2025 00:00:00 -0700</pubDate>
      <guid>https://blog.logustus.com/jerry-the-joblin/</guid>
      <description>&lt;p&gt;This campaign now lives on the Dirshum site:&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://loganbarnett.github.io/site-dirshum/jerry-the-joblin/&#34;&gt;loganbarnett.github.io/site-dirshum/jerry-the-joblin/&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Age of Golemancy Golemancy</title>
      <link>https://blog.logustus.com/age-of-golemancy/</link>
      <pubDate>Wed, 15 Jan 2025 00:00:00 -0800</pubDate>
      <guid>https://blog.logustus.com/age-of-golemancy/</guid>
      <description>&lt;h2 id=&#34;age-of-golemancy&#34;&gt;Age of Golemancy&lt;/h2&gt;
&lt;div class=&#34;ox-hugo-toc toc local&#34;&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#introduction&#34;&gt;Introduction&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#history&#34;&gt;History&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#light-hold&#34;&gt;Light Hold&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#light-hold--to-the-surface&#34;&gt;To the Surface&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#light-hold--classless&#34;&gt;Classless&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#old-world&#34;&gt;Old World&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#old-world--gods-and-magic&#34;&gt;Gods and Magic&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#old-world--monsters&#34;&gt;Monsters&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#artifice&#34;&gt;Artifice&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#golems&#34;&gt;Golems&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#golems--the-golem-mind&#34;&gt;The Golem Mind&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#golems--the-golem-mind--a-tenuous-grasp&#34;&gt;A Tenuous Grasp&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#golems--the-golem-mind--artificial-bodies&#34;&gt;Artificial Bodies&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#golems--the-golem-mind--the-cohesion-system&#34;&gt;The Cohesion System&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#golems--mind-break&#34;&gt;Mind Break&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#golems--mind-break--mind-broken&#34;&gt;Mind Broken&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#golems--golem-death&#34;&gt;Golem Death&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#golems--scrapped&#34;&gt;Scrapped&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#golems--repairs&#34;&gt;Repairs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#golems--wisp&#34;&gt;WISP&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#golems--wisp--wisp-directives&#34;&gt;WISP Directives&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#golems--wisp--memory-wipe&#34;&gt;Memory Wipe&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#golems--wisp--combat-experience&#34;&gt;Combat Experience&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#golems--golem-weapons&#34;&gt;Golem Weapons&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#golems--void-chosen&#34;&gt;Void Chosen&lt;/a&gt;:archive:&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#golems--character-creation&#34;&gt;Character Creation&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#golems--character-creation--starting-golem&#34;&gt;Starting Golem&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#golems--character-creation--golem-backgrounds&#34;&gt;Golem Backgrounds&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#golems--character-creation--golem-backgrounds--nobody&#34;&gt;Nobody&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#golems--character-creation--golem-backgrounds--heinous-criminal&#34;&gt;Heinous Criminal&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#golems--character-creation--golem-backgrounds--sacrifice&#34;&gt;Sacrifice&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#golems--character-creation--golem-backgrounds--volunteer&#34;&gt;Volunteer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#golems--character-creation--golem-backgrounds--blank&#34;&gt;Blank&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#golems--character-creation--golem-backgrounds--reborn&#34;&gt;Reborn&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#golems--character-creation--general-abilities&#34;&gt;General abilities&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#golems--character-creation--creator-guild&#34;&gt;Creator Guild&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#golems--character-creation--creator-guild--creator---ornatum-consortium&#34;&gt;Creator - Ornatum Consortium&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#golems--character-creation--creator-guild--creator---axis-mechanica&#34;&gt;Creator - Axis Mechanica&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#golems--character-creation--creator-guild--creator---ebonspire-assembly&#34;&gt;Creator - Ebonspire Assembly&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#golems--character-creation--creator-guild--creator---nomad&#34;&gt;Creator - Nomad&lt;/a&gt;:archive:&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#golems--character-creation--production-type&#34;&gt;Production Type&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#golems--character-creation--production-type--jigged&#34;&gt;Jigged&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#golems--character-creation--production-type--specialty&#34;&gt;Specialty&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#golems--character-creation--production-type--magnum-opus&#34;&gt;Magnum Opus&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#golems--character-creation--golem-weapon&#34;&gt;Golem Weapon&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#golems--character-creation--anchor&#34;&gt;Anchor&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#golems--character-creation--golem-surge&#34;&gt;Golem Surge&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#golems--character-creation--golem-traits&#34;&gt;Golem Traits&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#golems--character-creation--golem-traits--existential-fortitude&#34;&gt;Existential Fortitude&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#golems--character-creation--golem-traits--eternal-fast&#34;&gt;Eternal Fast&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#golems--character-creation--golem-traits--quick-loader&#34;&gt;Quick Loader&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#golems--character-creation--golem-traits--narcolepsy&#34;&gt;Narcolepsy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#golems--character-creation--golem-traits--prescience&#34;&gt;Prescience&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#golems--character-creation--golem-traits--leg-day&#34;&gt;Leg Day&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#golems--character-creation--golem-traits--martial-expert&#34;&gt;Martial Expert&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#golems--character-creation--golem-traits--stretchy&#34;&gt;Stretchy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#golems--character-creation--golem-traits--hit-and-run&#34;&gt;Hit and Run&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#golems--character-creation--golem-traits--snap-shot&#34;&gt;Snap Shot&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#golems--character-creation--golem-traits--elemental-loader&#34;&gt;Elemental Loader&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#golems--character-creation--golem-traits--elemental-seeder&#34;&gt;Elemental Seeder&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#golems--character-creation--golem-traits--elemental-application&#34;&gt;Elemental Application&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#golems--character-creation--golem-traits--cold-affinity&#34;&gt;Cold Affinity&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#golems--character-creation--golem-traits--wisp-resistant&#34;&gt;WISP Resistant&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#golems--character-creation--golem-traits--staggering&#34;&gt;Staggering&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#golems--character-creation--golem-traits--shatter&#34;&gt;Shatter&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#golems--character-creation--golem-traits--knockback&#34;&gt;Knockback&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#golems--character-creation--golem-traits--chain-lightning&#34;&gt;Chain Lightning&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#golems--character-creation--golem-traits--volatile-combustion&#34;&gt;Volatile Combustion&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#golems--character-creation--golem-traits--glowing-hot&#34;&gt;Glowing Hot&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#golems--character-creation--golem-traits--frozen&#34;&gt;Frozen&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#golems--nomads&#34;&gt;Nomads&lt;/a&gt;:archive:&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#voidborn&#34;&gt;Voidborn&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#voidborn--taxonomy&#34;&gt;Taxonomy&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#voidborn--taxonomy--voidborn-generation&#34;&gt;Voidborn Generation&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#voidborn--taxonomy--voidborn-generation--approach-type&#34;&gt;Approach Type&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#voidborn--taxonomy--voidborn-generation--target-type&#34;&gt;Target Type&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#voidborn--taxonomy--voidborn-generation--attack-pattern&#34;&gt;Attack Pattern&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#voidborn--taxonomy--voidborn-generation--defensive-trait&#34;&gt;Defensive Trait&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#captains&#34;&gt;Captains&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#captains--purpose&#34;&gt;Purpose&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#captains--training&#34;&gt;Training&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#captains--backgrounds&#34;&gt;Backgrounds&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#captains--backgrounds--career-change&#34;&gt;Career Change&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#captains--backgrounds--naive&#34;&gt;Naive&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#captains--backgrounds--debutante&#34;&gt;Debutante&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#captains--backgrounds--petty-criminal-sentence&#34;&gt;Petty Criminal Sentence&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#captains--captain-traits&#34;&gt;Captain Traits&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#captains--captain-traits--tactically-prepared&#34;&gt;Tactically Prepared&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#captains--captain-traits--stay-in-formation&#34;&gt;Stay in Formation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#captains--captain-traits--focus-fire&#34;&gt;Focus Fire&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#captains--captain-traits--inspired-to-greatness&#34;&gt;Inspired to Greatness&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#captains--captain-traits--emergency-field-repairs&#34;&gt;Emergency Field Repairs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#captains--captain-traits--artifice-tinkerer&#34;&gt;Artifice Tinkerer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#captains--captain-traits--voidborn-expert&#34;&gt;&lt;span class=&#34;org-todo todo TODO&#34;&gt;TODO&lt;/span&gt; Voidborn Expert&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#captains--captain-traits--back-from-the-brink&#34;&gt;Back from the Brink&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#organizations&#34;&gt;Organizations&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#organizations--crafting-guilds&#34;&gt;Crafting Guilds&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#organizations--crafting-guilds--ornatum-consortium&#34;&gt;Ornatum Consortium&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#organizations--crafting-guilds--axis-mechanica&#34;&gt;Axis Mechanica&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#organizations--crafting-guilds--ebonspire-assembly&#34;&gt;Ebonspire Assembly&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#organizations--crimson-line&#34;&gt;Crimson Line&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#organizations--dusk-reach&#34;&gt;Dusk Reach&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#golemancers&#34;&gt;Golemancers&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#golemancers--golemancer-specialty&#34;&gt;Golemancer Specialty&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#golemancers--golemancer-ranking&#34;&gt;Golemancer Ranking&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#golemancers--golemancer-working-conditions&#34;&gt;Golemancer Working Conditions&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#casters&#34;&gt;Casters&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#casters--caster-types&#34;&gt;Caster Types&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#casters--caster-types--scattercaster&#34;&gt;Scattercaster&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#casters--caster-types--longcaster&#34;&gt;Longcaster&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#casters--caster-types--battlecaster&#34;&gt;Battlecaster&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#casters--caster-types--sidecaster&#34;&gt;Sidecaster&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#casters--caster-types--scrapcaster&#34;&gt;Scrapcaster&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#casters--caster-types--day-breaker&#34;&gt;Day Breaker&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#casters--elemental-effects&#34;&gt;Elemental Effects&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#casters--elemental-effects--elemental-types&#34;&gt;Elemental Types&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#casters--elemental-effects--elemental-types--acid&#34;&gt;Acid&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#casters--elemental-effects--elemental-types--cold&#34;&gt;Cold&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#casters--elemental-effects--elemental-types--fire&#34;&gt;Fire&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#casters--elemental-effects--elemental-types--lightning&#34;&gt;Lightning&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#casters--elemental-effects--elemental-types--poison&#34;&gt;Poison&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#casters--elemental-effects--elemental-types--thunder&#34;&gt;Thunder&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#casters--elemental-effects--elemental-interactions&#34;&gt;Elemental Interactions&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#casters--elemental-effects--elemental-interactions--shatter&#34;&gt;Shatter&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#casters--elemental-effects--elemental-interactions--explosion&#34;&gt;Explosion&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#casters--elemental-effects--elemental-interactions--armor-softening&#34;&gt;Armor Softening&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#casters--elemental-effects--elemental-interactions--spreading-fire&#34;&gt;Spreading Fire&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#casters--elemental-effects--elemental-interactions--smoke-screen&#34;&gt;Smoke Screen&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#casters--elemental-effects--elemental-interactions--matrix&#34;&gt;Matrix&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;!--endtoc--&gt;
&lt;h3 id=&#34;introduction&#34;&gt;Introduction&lt;/h3&gt;
&lt;p&gt;The era of golemancy details the extinction of all sapient life on the world of
Dirshum, a fantasy world for a Dungeons and Dragons campaign.  In this world,
all sapient species except humans have been destroyed by nearly invincible
monsters.  Only humans have survived, who exist in a single, underground city.
Golems, the name given for the artificial super-humans, are the only thing
holding back their demise.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Rename me</title>
      <link>https://blog.logustus.com/nix-adventures-04/</link>
      <pubDate>Sun, 03 Mar 2024 00:00:00 -0800</pubDate>
      <guid>https://blog.logustus.com/nix-adventures-04/</guid>
      <description>&lt;h2 id=&#34;building-the-actual-derivation-flake&#34;&gt;Building the Actual Derivation/Flake&lt;/h2&gt;
&lt;p&gt;If you&amp;rsquo;ve been following along in the series, at this point I&amp;rsquo;ve got my
physical, standalone machine ready for generating machine learning images.  In
this segment, my plan is to make a derivation or flake (probably a flake) which
handles standing up the server (server being the application, and host being the
computer).&lt;/p&gt;
&lt;h3 id=&#34;the-plan&#34;&gt;The Plan&lt;/h3&gt;
&lt;p&gt;My overall goals look like this:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Configuration is entirely controlled via the Nix flake.&lt;/li&gt;
&lt;li&gt;Models, LoRAs, and other large entities I want to create a kind of download
function for.  So whether you&amp;rsquo;re pulling these from &lt;a href=&#34;http://civitai.com&#34;&gt;http://civitai.com&lt;/a&gt; or
&lt;a href=&#34;https://huggingface.com&#34;&gt;https://huggingface.com&lt;/a&gt;, you can just declare the things you want installed
and Nix will see to that.&lt;/li&gt;
&lt;li&gt;New settings changes will send the appropriate signal to the web application
so they can be reloaded.  Restarts can be &amp;ldquo;scheduled&amp;rdquo; if the queue is
running.&lt;/li&gt;
&lt;li&gt;This is more of a stretch goal, but it would be really cool to have a Nix
declaration for an image.  So you say what the prompt is, what settings it
should have, the seed, the model, etc. and the result is an image that you
can throw around to other Nix plumbing, or just have on disk.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;actually-i-can-t-do-any-of-that-yet&#34;&gt;Actually I can&amp;rsquo;t do any of that yet&lt;/h3&gt;
&lt;p&gt;Of course nothing ever just works when you&amp;rsquo;re the one trail blazing.  In this
case, I immediately ran into issues with &lt;code&gt;stable-diffusion-webui&lt;/code&gt; just trying to
run it via the &lt;code&gt;automatic1111-webui-nix&lt;/code&gt; repository.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Nix Adventures Part 3: stable-diffusion-webui</title>
      <link>https://blog.logustus.com/nix-adventures-03/</link>
      <pubDate>Fri, 16 Feb 2024 00:00:00 -0800</pubDate>
      <guid>https://blog.logustus.com/nix-adventures-03/</guid>
      <description>&lt;div class=&#34;ox-hugo-toc toc&#34;&gt;
&lt;div class=&#34;heading&#34;&gt;Table of Contents&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#what-is-this&#34;&gt;What is this?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#adventure-standing-up-a-stable-diffusion-webui-server-on-a-new-host&#34;&gt;Adventure: Standing up a &lt;code&gt;stable-diffusion-webui&lt;/code&gt; server on a new host&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#preparing-the-host&#34;&gt;Preparing the Host&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#refactor-the-host-repository&#34;&gt;Refactor the Host repository&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#fixing-all-of-the-errors&#34;&gt;Fixing all of the errors&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#direct-builds&#34;&gt;Direct builds&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;!--endtoc--&gt;
&lt;h2 id=&#34;what-is-this&#34;&gt;What is this?&lt;/h2&gt;
&lt;p&gt;See &lt;a href=&#34;https://blog.logustus.com/nix-adventures-01/&#34;&gt;Nix Adventures Part 1&lt;/a&gt; for the introduction for all of this.&lt;/p&gt;
&lt;h2 id=&#34;adventure-standing-up-a-stable-diffusion-webui-server-on-a-new-host&#34;&gt;Adventure: Standing up a &lt;code&gt;stable-diffusion-webui&lt;/code&gt; server on a new host&lt;/h2&gt;
&lt;p&gt;This is going to loosely be broken up into two parts:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Build an &lt;code&gt;x86_64-linux&lt;/code&gt; or &lt;code&gt;i686-linux&lt;/code&gt; image for the new host.&lt;/li&gt;
&lt;li&gt;Improve upon the existing &lt;code&gt;stable-diffusion-webui&lt;/code&gt; Nix Flakes setup such that
the server can be installed and configured via Nix itself.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;preparing-the-host&#34;&gt;Preparing the Host&lt;/h3&gt;
&lt;p&gt;Preparing the host entails getting cross compilation working on the host
repository.  Since I&amp;rsquo;ve done that earlier for a Raspberry Pi image, I want this
new host&amp;rsquo;s base image to leverage that prior work.  As part of doing this, I
expect to refactor the repository a bit such that reusable bits needn&amp;rsquo;t be
repeated, and there are clean, free standing modules that can be included a la
carte for new hosts.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Nix Adventures</title>
      <link>https://blog.logustus.com/nix-adventures/</link>
      <pubDate>Sun, 11 Feb 2024 00:00:00 -0800</pubDate>
      <guid>https://blog.logustus.com/nix-adventures/</guid>
      <description>&lt;ol&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.logustus.com/nix-adventures-01/&#34;&gt;Generating a Raspberry Pi image&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.logustus.com/nix-adventures-02/&#34;&gt;Setting up Machine Learning tools&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</description>
    </item>
    <item>
      <title>Machine Learning - Stable Diffusion Prompt Engineering</title>
      <link>https://blog.logustus.com/stable-diffusion-prompt-engineering-01/</link>
      <pubDate>Tue, 06 Feb 2024 00:00:00 -0800</pubDate>
      <guid>https://blog.logustus.com/stable-diffusion-prompt-engineering-01/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;&lt;span class=&#34;section-num&#34;&gt;1&lt;/span&gt; Introduction&lt;/h2&gt;
&lt;p&gt;From my prior adventures during &lt;a href=&#34;https://blog.logustus.com/nix-adventures-02/&#34;&gt;Nix Adventures Part 2&lt;/a&gt;, I managed to stand up a
local instances of &lt;a href=&#34;https://github.com/AUTOMATIC1111/stable-diffusion-webui&#34;&gt;stable-diffusion-webui&lt;/a&gt; and I&amp;rsquo;ve been having both a lot of fun
and some frustration with it.  This domain is not quite as push-button as I
thought it would be.  There&amp;rsquo;s a lot of information here, some of it dated, and
much of it sitting on YouTube.  I hope this serves as a repository of the
knowledge I gain here.  I will do my best to keep this documentation entirely
reproducible - meaning that you can see version numbers, commit hashes,
generation parameters (seeds, models, sample sizes), etc.  This is one thing I
have found lacking on some of the communities out there.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Nix Adventures Part 2: Machine Learning Servers</title>
      <link>https://blog.logustus.com/nix-adventures-02/</link>
      <pubDate>Fri, 19 Jan 2024 00:00:00 -0800</pubDate>
      <guid>https://blog.logustus.com/nix-adventures-02/</guid>
      <description>&lt;div class=&#34;ox-hugo-toc toc&#34;&gt;
&lt;div class=&#34;heading&#34;&gt;Table of Contents&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#what-is-this&#34;&gt;What is this?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#today-s-adventure-building-a-suite-of-machine-learning-servers&#34;&gt;Today&amp;rsquo;s adventure: Building a Suite of Machine Learning Servers&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#building-on-macos--localai&#34;&gt;Building on macOS (LocalAI)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#building-on-macos--stable-diffusion-webui&#34;&gt;Building on macOS (stable-diffusion-webui)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;!--endtoc--&gt;
&lt;h2 id=&#34;what-is-this&#34;&gt;What is this?&lt;/h2&gt;
&lt;p&gt;See &lt;a href=&#34;https://blog.logustus.com/nix-adventures-01/&#34;&gt;Nix Adventures Part 1&lt;/a&gt; for the introduction for all of this.&lt;/p&gt;
&lt;h2 id=&#34;today-s-adventure-building-a-suite-of-machine-learning-servers&#34;&gt;Today&amp;rsquo;s adventure: Building a Suite of Machine Learning Servers&lt;/h2&gt;
&lt;p&gt;I want to get a machine learning platform setup in my local network.  I love the
power of the Internet and I hate how dependent we are upon it, and the lack of
privacy and control we have as a result.  But with lots of spare time anyone can
setup their own servers with this stuff.  &lt;a href=&#34;https://localai.io&#34;&gt;LocalAI&lt;/a&gt; looks good for this.  Cool
kids can tell me if there&amp;rsquo;s something better.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Nix Adventures (part 1 of ?)</title>
      <link>https://blog.logustus.com/nix-adventures-01/</link>
      <pubDate>Fri, 22 Dec 2023 00:00:00 -0800</pubDate>
      <guid>https://blog.logustus.com/nix-adventures-01/</guid>
      <description>&lt;div class=&#34;ox-hugo-toc toc&#34;&gt;
&lt;div class=&#34;heading&#34;&gt;Table of Contents&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#what-is-this&#34;&gt;What is this?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#introduction&#34;&gt;Introduction&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#nix-thus-far&#34;&gt;Nix Thus Far&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#today-s-project-working-on-a-raspberry-pi&#34;&gt;Today&amp;rsquo;s Project: Working on a Raspberry Pi&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#somehow-write-to-the-pi-sd-card&#34;&gt;Somehow Write to the Pi SD card&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#empower-editing-sd-card-files-from-macos-directly&#34;&gt;Empower Editing SD Card Files from macOS Directly&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#making-edits-to-the-sd-card&#34;&gt;Making Edits to the SD Card&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#sshd&#34;&gt;&lt;code&gt;sshd&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#connecting-to-the-pi--usb-c-fail&#34;&gt;Connecting to the Pi (USB-C fail)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#imaging-the-pi-correctly&#34;&gt;Imaging the Pi Correctly&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#abandon-nix-and-just-get-it-done&#34;&gt;Abandon Nix and Just Get it Done&lt;/a&gt;:private:&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#building-the-image&#34;&gt;Building the Image&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#prior-art&#34;&gt;Prior Art&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#doing-real-nix-things-on-macos&#34;&gt;Doing Real Nix Things on macOS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#building-the-nixos-pi-image&#34;&gt;Building the NixOS Pi image&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#trying-to-make-it-work-with-digga&#34;&gt;Trying to Make it Work with &lt;code&gt;digga&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#just-use-nix-generators&#34;&gt;Just Use &lt;code&gt;nix-generators&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#extracting-the-image&#34;&gt;Extracting the Image&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#no-joy-on-boot&#34;&gt;No Joy on Boot&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#back-and-display-ports&#34;&gt;Back, and Display Ports&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#actually-joy-on-boot&#34;&gt;Actually Joy on Boot&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#conclusion&#34;&gt;Conclusion&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;!--endtoc--&gt;
&lt;p&gt;Nix Adventures part 1!&lt;/p&gt;</description>
    </item>
    <item>
      <title>A Message to Students and Alumni</title>
      <link>https://blog.logustus.com/message-to-students-and-alumni/</link>
      <pubDate>Fri, 31 Mar 2023 00:00:00 -0700</pubDate>
      <guid>https://blog.logustus.com/message-to-students-and-alumni/</guid>
      <description>&lt;p&gt;As a fresh college graduate I was eager to jump right into the workforce just
like y&amp;rsquo;all are now.  I hit up all the online sources, sent lots of applications
out, and tried to present myself as the perfect candidate for each hand picked
position I thought I could ace.  I had a wall of opportunities (WoO) for short
where I pinned all of my in-flight applications.  It didn&amp;rsquo;t take long before
bills became due.  I had a job via my college, so upon graduation I was without
any kind of work.  I wound up following a lot of my classmates to scrub radar
parts at around $10/hr or something lower.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Checklist for Good Command Line Programs</title>
      <link>https://blog.logustus.com/command-line-programs/</link>
      <pubDate>Mon, 29 Aug 2022 00:00:00 -0700</pubDate>
      <guid>https://blog.logustus.com/command-line-programs/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;
&lt;p&gt;This is to provide a detailed checklist on what makes for a good command line
program.&lt;/p&gt;
&lt;p&gt;The quick list:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Provide usage information.&lt;/li&gt;
&lt;li&gt;Output parse-able output to &lt;code&gt;stdout&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Output logging to &lt;code&gt;stderr&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Have a &lt;code&gt;--help&lt;/code&gt; that describes basic usage and general purpose.&lt;/li&gt;
&lt;li&gt;Use exit code 0 for expected results, and positive, non-zero exit codes for
unexpected results.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;disclaimer&#34;&gt;Disclaimer&lt;/h2&gt;
&lt;p&gt;You can always view my &lt;a href=&#34;https://blog.logustus.com/resume/&#34;&gt;résumé&lt;/a&gt; here on the blog.  From that you can infer a lot
about my experience and things I&amp;rsquo;ve done.  I don&amp;rsquo;t wish to appeal to authority,
but having some experience in the field should amount to something.  I deal with
this stuff on a day to day basis, and from that I&amp;rsquo;ve learned some things.  You
can decide for yourself if it&amp;rsquo;s poorly acquired trauma or wisdom that comes with
age.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Writing Good Commit Messages without the Ceremony</title>
      <link>https://blog.logustus.com/commit-messages/</link>
      <pubDate>Tue, 23 Aug 2022 00:00:00 -0700</pubDate>
      <guid>https://blog.logustus.com/commit-messages/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;
&lt;p&gt;Writing good commit messages may not be totally essential to the software
development process but it is essential to one&amp;rsquo;s own sanity. &amp;ldquo;Self-documenting&amp;rdquo;
code only explains the &lt;strong&gt;what&lt;/strong&gt;, not the &lt;strong&gt;why&lt;/strong&gt;. Even then, what should go into a
commit message?&lt;/p&gt;
&lt;h2 id=&#34;commits-in-git&#34;&gt;Commits in Git&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;git&lt;/code&gt; imposes a small amount of rules about a commit message. A commit message
must include a &amp;ldquo;title&amp;rdquo;. Commit messages can include bodies, but the bodies are
optional.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Acing Interviews for Software Engineering Positions</title>
      <link>https://blog.logustus.com/acing-interviews/</link>
      <pubDate>Tue, 16 Aug 2022 00:00:00 -0700</pubDate>
      <guid>https://blog.logustus.com/acing-interviews/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;
&lt;p&gt;I&amp;rsquo;ve seen a lot of clamor over trying to &amp;ldquo;ace&amp;rdquo; interviews for software
engineering positions. While interviews can definitely go well and poorly, there
generally isn&amp;rsquo;t a prescribed &amp;ldquo;right way&amp;rdquo; to do something. In this article, we&amp;rsquo;ll
cover how interviews are put together, and what they target. We&amp;rsquo;ll identify
objectively &amp;ldquo;bad&amp;rdquo; interviews, and we&amp;rsquo;ll describe how good interviews work.&lt;/p&gt;
&lt;h2 id=&#34;who-puts-together-interviews&#34;&gt;Who Puts Together Interviews&lt;/h2&gt;
&lt;p&gt;Interviews are generally put together by a team lead. Higher-ups want to give
teams the agency for teams to do the filtering they want, so they stay out of
that process. I&amp;rsquo;ve seen some interview processes where higher-ups get involved
in a &amp;ldquo;meet and greet&amp;rdquo; fashion, so in a sense they retain some kind of veto
power. &amp;ldquo;Boss is an institution of mistrust&amp;rdquo;. It makes them feel better. Let them
have it.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to Avoid Edge Cases and Crushing Tech Debt</title>
      <link>https://blog.logustus.com/data-modeling/</link>
      <pubDate>Sat, 21 May 2022 00:00:00 -0700</pubDate>
      <guid>https://blog.logustus.com/data-modeling/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;
&lt;p&gt;When writing any kind of real world applications, &amp;ldquo;edge cases&amp;rdquo; arise - wrinkles
placed into your beautiful applications which start off as simple &lt;code&gt;if&lt;/code&gt;
statements and later lead to great sources of confusion and kind of a dumping
ground for all of the organization&amp;rsquo;s wacky needs. This later takes on the form
of crushing technical debt and you&amp;rsquo;re wondering how your pristine application
got here, and how you might avoid it on your next one. Fortunately it is
avoidable through a simple technique called data modeling.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Function Composition</title>
      <link>https://blog.logustus.com/function-composition/</link>
      <pubDate>Wed, 11 May 2022 00:00:00 -0700</pubDate>
      <guid>https://blog.logustus.com/function-composition/</guid>
      <description>&lt;h2 id=&#34;function-composition&#34;&gt;Function Composition&lt;/h2&gt;
&lt;p&gt;Function composition is the act of treating functions like small lego bricks
that you tie together. Composing simple, well known functions to achieve complex
behavior is like having and advanced vocabulary used to discuss a complex topic.&lt;/p&gt;
&lt;p&gt;If you want to try some of this out, I recommend &lt;a href=&#34;https://ramdajs.com/repl/&#34;&gt;Ramda&amp;rsquo;s REPL&lt;/a&gt; for experimenting
with different JavaScript features such as this.&lt;/p&gt;
&lt;h3 id=&#34;bespoke-average&#34;&gt;Bespoke: Average&lt;/h3&gt;
&lt;p&gt;Here&amp;rsquo;s some code for writing an &lt;code&gt;average&lt;/code&gt; function. It computes an average value
from a list of numbers. For reference, an average is all of the numbers added
together and divided by the number of values.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Control Flow Simplified Part 1</title>
      <link>https://blog.logustus.com/control-flow-simplified-01/</link>
      <pubDate>Tue, 22 Feb 2022 00:00:00 -0800</pubDate>
      <guid>https://blog.logustus.com/control-flow-simplified-01/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;
&lt;p&gt;This is still a draft. I intend to show off a few different languages and have
it viewable via a spiffy dropdown or something. I have not yet had the chance to
test all of the code.&lt;/p&gt;
&lt;p&gt;This is a series on simplifying control flow in software engineering. It&amp;rsquo;s a
very tactical-level view, and it uses some functional programming techniques to
illustrate this.&lt;/p&gt;
&lt;p&gt;Control flow is simply the flow of execution within a program in respect to its
source code. These are generally statements like &lt;code&gt;if&lt;/code&gt;, &lt;code&gt;else&lt;/code&gt;, &lt;code&gt;switch&lt;/code&gt;
&lt;code&gt;return&lt;/code&gt;, and even &lt;code&gt;throw&lt;/code&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Consider Not Doing That Rewrite</title>
      <link>https://blog.logustus.com/stop-rewrites/</link>
      <pubDate>Wed, 08 Dec 2021 00:00:00 -0800</pubDate>
      <guid>https://blog.logustus.com/stop-rewrites/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;&lt;span class=&#34;section-num&#34;&gt;1&lt;/span&gt; Introduction&lt;/h2&gt;
&lt;p&gt;I&amp;rsquo;ve always heard the software engineering industry is a rapidly changing
industry. One of the things that contributes to it (and not the other way
around) is the frequency at which we abandon a pile of work and just start anew.&lt;/p&gt;
&lt;p&gt;I have not had good experience with this, and this post will go into why. At a
very high level, here&amp;rsquo;s there&amp;rsquo;s one really big point I want to drive home:
Rewrites won&amp;rsquo;t unburden a project from technical debt.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Logan Barnett&#39;s Résumé</title>
      <link>https://blog.logustus.com/resume/</link>
      <pubDate>Mon, 06 Sep 2021 00:00:00 -0700</pubDate>
      <guid>https://blog.logustus.com/resume/</guid>
      <description>&lt;hr&gt;
&lt;h2 id=&#34;categories-software-engineering&#34;&gt;layout: default
title: Résumé
date: 2020-01-13
categories: software-engineering&lt;/h2&gt;
&lt;link rel=&#34;stylesheet&#34; type=&#34;text/css&#34; href=&#34;resume.css&#34; /&gt;
&lt;h2 id=&#34;contact&#34;&gt;Contact&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Email: &lt;a href=&#34;mailto://logustus@gmail.com&#34;&gt;logustus@gmail.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Mobile: 602.264.3584&lt;/li&gt;
&lt;li&gt;Blog: &lt;a href=&#34;https://loganbarnett.github.io/blog/&#34;&gt;https://loganbarnett.github.io/blog/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Github: &lt;a href=&#34;https://github.com/loganbarnett&#34;&gt;https://github.com/loganbarnett&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This document was generated from:
&lt;a href=&#34;https://github.com/LoganBarnett/blog/blob/gh-pages/resume.org&#34;&gt;https://github.com/LoganBarnett/blog/blob/gh-pages/resume.org&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;summary&#34;&gt;Summary&lt;/h2&gt;
&lt;p&gt;I&amp;rsquo;ve been a professional software engineer for 22 years.
I&amp;rsquo;ve worked on video games, embedded devices, web applications, desktop
applications, and managed server infrastructure. I prefer a sustainable approach
to software development and maintenance alike. I enjoy providing guidance and
tackling difficult problems. I feel good and functional documentation is the
road to well maintained and understood software.&lt;/p&gt;</description>
    </item>
    <item>
      <title>XML Namespaces</title>
      <link>https://blog.logustus.com/xml-namespaces/</link>
      <pubDate>Mon, 23 Aug 2021 00:00:00 -0700</pubDate>
      <guid>https://blog.logustus.com/xml-namespaces/</guid>
      <description>&lt;div class=&#34;ox-hugo-toc toc local&#34;&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#xml-namespaces&#34;&gt;XML Namespaces&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#the-skinny&#34;&gt;The Skinny&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#depth&#34;&gt;Depth&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#namespaces&#34;&gt;Namespaces&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#prefixes&#34;&gt;Prefixes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#default-namespaces&#34;&gt;Default Namespaces&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#querying-an-xml-document-with-namespaces&#34;&gt;Querying an XML Document with Namespaces&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;!--endtoc--&gt;
&lt;h2 id=&#34;xml-namespaces&#34;&gt;XML Namespaces&lt;/h2&gt;
&lt;p&gt;This post covers the importance of namespaces in XML. Anyone doing XML
transformations or data aggregation from these documents needs to be aware of
them.  This document assumes familiarity with XML to at least a minor degree.&lt;/p&gt;
&lt;p&gt;I am not claiming this document is complete but it should hopefully serve as a
quick primer for anyone wanting to wrap their heads around XML namespaces.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Why I Won&#39;t Use Windows</title>
      <link>https://blog.logustus.com/software-engineering-windows/</link>
      <pubDate>Wed, 14 Apr 2021 00:00:00 -0700</pubDate>
      <guid>https://blog.logustus.com/software-engineering-windows/</guid>
      <description>&lt;div class=&#34;ox-hugo-toc toc local&#34;&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#disclaimers-audience-etc&#34;&gt;Disclaimers, Audience, etc&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#objectiveness&#34;&gt;Objectiveness&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#articulation-has-value&#34;&gt;Articulation has Value&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#you-do-you&#34;&gt;You do You&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#actually-using-windows&#34;&gt;Actually Using Windows&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#a-history-with-microsoft&#34;&gt;A History with Microsoft&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#technical-considerations&#34;&gt;Technical Considerations&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#the-model-of-unix&#34;&gt;The Model of Unix&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#hostility-towards-software-development&#34;&gt;Hostility towards Software Development&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#career-considerations&#34;&gt;Career Considerations&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#how-others-view-your-career&#34;&gt;How Others View Your Career&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#how-you-treat-your-own-career&#34;&gt;How You Treat Your Own Career&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#the-positive-encouragement-away&#34;&gt;The Positive Encouragement Away&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#wrapping-up&#34;&gt;Wrapping Up&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;!--endtoc--&gt;
&lt;p&gt;I won&amp;rsquo;t willingly use Windows - not for development work, or any real work if I
can help it.  I won&amp;rsquo;t work at a workplace that requires its software engineers
to use Windows.  I actively recommend that people don&amp;rsquo;t work at workplaces that
require their software engineers use Windows.  I will explain why.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Perfectionism in Software Engineering</title>
      <link>https://blog.logustus.com/software-engineering-perfectionism/</link>
      <pubDate>Wed, 24 Feb 2021 00:00:00 -0800</pubDate>
      <guid>https://blog.logustus.com/software-engineering-perfectionism/</guid>
      <description>&lt;h2 id=&#34;why-should-you-read-this&#34;&gt;Why should you read this?&lt;/h2&gt;
&lt;p&gt;I&amp;rsquo;m a software engineer by trade.  I write software, scripts, and do loads of
automation.  I like using technology to solve problems, and I have a low
tolerance for pain.  At time of writing I&amp;rsquo;ve been doing software engineering for
17 years now.  That&amp;rsquo;s 17 years of making mistakes, and making an honest attempt
at learning from those mistakes.  I like to think that&amp;rsquo;s given me some
perspective, and part of that perspective is that I can easily be wrong, or not
quite right, or maybe I learned a lesson from some painful experience but it was
the wrong one.  I don&amp;rsquo;t have all the answers - really this is just me processing
some of my own difficulties, and publishing the thought process in a somewhat
structured form.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Captain Toofsnaggle</title>
      <link>https://blog.logustus.com/captain-toofsnaggle/</link>
      <pubDate>Mon, 28 Dec 2020 00:00:00 -0800</pubDate>
      <guid>https://blog.logustus.com/captain-toofsnaggle/</guid>
      <description>&lt;div class=&#34;ox-hugo-toc toc local&#34;&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#dnd-5e--characters--captain-toofsnaggle&#34;&gt;Captain Toofsnaggle&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#dnd-5e--characters--captain-toofsnaggle--quick&#34;&gt;quick&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#dnd-5e--characters--captain-toofsnaggle--quick--combat&#34;&gt;combat&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#spells-and-abilities&#34;&gt;spells and abilities&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#dnd-5e--characters--mister-creant--quick--skills-and-saves&#34;&gt;skills and saves&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#dnd-5e--characters--captain-toofsnaggle--choices&#34;&gt;choices&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#dnd-5e--characters--captain-toofsnaggle--choices--starting-ability-scores&#34;&gt;starting ability scores&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#dnd-5e--characters--captain-toofsnaggle--choices--race&#34;&gt;race&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#dnd-5e--characters--captain-toofsnaggle--choices--starting-choices&#34;&gt;starting choices&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#dnd-5e--characters--captain-toofsnaggle--choices--levels&#34;&gt;levels&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#dnd-5e--characters--captain-toofsnaggle--choices--starting-magic-items&#34;&gt;starting magic items&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#dnd-5e--characters--captain-toofsnaggle--background&#34;&gt;background&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#dnd-5e--characters--captain-toofsnaggle--ability-scores&#34;&gt;ability scores&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#dnd-5e--characters--captain-toofsnaggle--fluff&#34;&gt;fluff&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#dnd-5e--characters--captain-toofsnaggle--fluff--appearance&#34;&gt;appearance&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#dnd-5e--characters--captain-toofsnaggle--fluff--direction&#34;&gt;direction&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#dnd-5e--characters--captain-toofsnaggle--fluff--mannerisms&#34;&gt;mannerisms&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#dnd-5e--characters--captain-toofsnaggle--fluff--rival&#34;&gt;rival&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#dnd-5e--characters--captain-toofsnaggle--fluff--road-to-adventuring&#34;&gt;road to adventuring&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#after-the-shipwreck&#34;&gt;after the shipwreck&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#quest-log&#34;&gt;quest log&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#dnd-5e--characters--captain-toofsnaggle--inventory&#34;&gt;inventory&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#dnd-5e--characters--captain-toofsnaggle--inventory--acquisition-log&#34;&gt;acquisition log&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#dnd-5e--characters--captain-toofsnaggle--inventory--current-equipment&#34;&gt;current equipment&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#dnd-5e--characters--captain-toofsnaggle--inventory--current-money&#34;&gt;current money&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#riddle&#34;&gt;riddle&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;!--endtoc--&gt;
&lt;h2 id=&#34;dnd-5e--characters--captain-toofsnaggle&#34;&gt;Captain Toofsnaggle&lt;/h2&gt;
&lt;p&gt;Captain Toofsnaggle is a half-orc seaman that is full of bluster. He has a
reputation of mayhem following his every move, yet nobody seems to be able to
confirm his claims of his legendary ship or crew.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Promise and map with JavaScript</title>
      <link>https://blog.logustus.com/javascript-promise-and-map/</link>
      <pubDate>Sat, 01 Aug 2020 00:00:00 -0700</pubDate>
      <guid>https://blog.logustus.com/javascript-promise-and-map/</guid>
      <description>&lt;p&gt;Typically when we think of &lt;code&gt;map&lt;/code&gt; we think of lists, but we can widen our
thinking of &lt;code&gt;map&lt;/code&gt; and through it get a simpler understanding of how the elusive
JavaScript &lt;code&gt;Promise&lt;/code&gt; works.&lt;/p&gt;
&lt;h2 id=&#34;the-type-signature-of-map&#34;&gt;the type signature of map&lt;/h2&gt;
&lt;p&gt;Let&amp;rsquo;s take the ML notation for &lt;code&gt;map&lt;/code&gt; of a list:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;((a -&amp;gt; b) -&amp;gt; List a -&amp;gt; List b)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;With ML notation, the best way to read this is that the last arrow is the return
type. The reason the notation exists this way is because functions in a
functional language can be modeled as unary, or meaning they only have one
argument. One can imagine multiple argument functions as sytactic sugar.&lt;/p&gt;</description>
    </item>
    <item>
      <title>World Building</title>
      <link>https://blog.logustus.com/world-building/</link>
      <pubDate>Sun, 17 May 2020 00:00:00 -0700</pubDate>
      <guid>https://blog.logustus.com/world-building/</guid>
      <description>&lt;p&gt;These are my thoughts on world building for a fictional world. There will be a
skews towards worlds in a table top role playing experience, and moreso towards
a fantasy setting.&lt;/p&gt;
&lt;h2 id=&#34;cause-and-effect&#34;&gt;cause and effect&lt;/h2&gt;
&lt;p&gt;A fun thing to think about with world building is what you would think would
fall out of it. There are basic decisions to societies, fantastical or not. When
you introduce something to your world, you&amp;rsquo;re making it different from the world
we live in now. No matter how remote your world is from our current world, the
created world will be defined by how it is different from our current one. When
you change something about the world, think about how it effects the major
aspects of society, the bestiary (if applicable), and even the world&amp;rsquo;s
geography. It might not shape all of these things, but it should influence at
least one. I would even go as far as to say with a little thought you can make
your world change effect everything - some in minor ways and others in major
ways.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Sans Dungeon Master</title>
      <link>https://blog.logustus.com/sans-dungeon-master/</link>
      <pubDate>Tue, 31 Mar 2020 00:00:00 -0700</pubDate>
      <guid>https://blog.logustus.com/sans-dungeon-master/</guid>
      <description>&lt;h2 id=&#34;playing-without-a-dungeon-master&#34;&gt;Playing without a Dungeon Master&lt;/h2&gt;
&lt;p&gt;Dungeon masters can be hard to come by. It&amp;rsquo;s a lot of work to be a dungeon
master even if you can get away with minimal preparation. It can also be
emotionally exhausting as you try to provide incentives for your table full of
chaotic neutral cunctors to move forward. Cat herders have it easier than
this.&lt;/p&gt;
&lt;h3 id=&#34;but-really-why&#34;&gt;but really, why?&lt;/h3&gt;
&lt;p&gt;It&amp;rsquo;s worth noting that any mechanism that removes the need for a DM also
necessarily means that, as an actual DM, you could reduce the work you need
to do.&lt;/p&gt;</description>
    </item>
    <item>
      <title>RPG GM Tropes</title>
      <link>https://blog.logustus.com/rpg-gm-tropes/</link>
      <pubDate>Mon, 24 Feb 2020 00:00:00 -0800</pubDate>
      <guid>https://blog.logustus.com/rpg-gm-tropes/</guid>
      <description>&lt;h2 id=&#34;rpg-gm-tropes&#34;&gt;RPG GM Tropes&lt;/h2&gt;
&lt;h3 id=&#34;some-background&#34;&gt;some background&lt;/h3&gt;
&lt;p&gt;I DM&amp;rsquo;ed 2nd edition Dungeon and Dragons in my early teens. I&amp;rsquo;d say it was an
awkward phase of my life, but things haven&amp;rsquo;t really gotten less awkward, just
differently. My DM career has improved with my life experiences. I&amp;rsquo;ve been
running a campaign series since 2018. I&amp;rsquo;ve lost players, gained players. I&amp;rsquo;ve
run bad sessions, and had to lock horns with some players that are very
opinionated.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Dirshum</title>
      <link>https://blog.logustus.com/dirshum/</link>
      <pubDate>Fri, 17 Jan 2020 00:00:00 -0800</pubDate>
      <guid>https://blog.logustus.com/dirshum/</guid>
      <description>&lt;h2 id=&#34;dirshum&#34;&gt;Dirshum&lt;/h2&gt;
&lt;div class=&#34;ox-hugo-toc toc local&#34;&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#map&#34;&gt;map&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#golani-grumsvelt-s-guide-to-dirshum&#34;&gt;Golani Grumsvelt&amp;rsquo;s Guide to Dirshum&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#account-of-duranae&#34;&gt;Account of Duranae&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#avandra-s-smile&#34;&gt;Avandra&amp;rsquo;s Smile&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#elves&#34;&gt;Elves&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#variety-of-blood&#34;&gt;variety of blood&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#harpies&#34;&gt;harpies&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#banshees&#34;&gt;banshees&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#eldarin&#34;&gt;eldarin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#ghouls&#34;&gt;&lt;span class=&#34;org-todo todo TODO&#34;&gt;TODO&lt;/span&gt; ghouls&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#bel-aheldan&#34;&gt;Bel&amp;rsquo;aheldan&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#magical-wonderment&#34;&gt;magical wonderment&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#army&#34;&gt;army&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#dress&#34;&gt;dress&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#houses&#34;&gt;houses&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#magic&#34;&gt;magic&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#neighbors&#34;&gt;neighbors&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#trade&#34;&gt;trade&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#minheimia&#34;&gt;Minheimia&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#fertile-land-unspoiled&#34;&gt;fertile land unspoiled&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#military&#34;&gt;military&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#structures&#34;&gt;structures&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#neighbors&#34;&gt;neighbors&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#shrouded-past&#34;&gt;shrouded past&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#human-domains&#34;&gt;Human domains&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#tribes-of-egalstan&#34;&gt;Tribes of Egalstan&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#natural-intuition&#34;&gt;Natural Intuition&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#cyorro&#34;&gt;Cyorro&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#valan&#34;&gt;Valan&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#summary&#34;&gt;summary&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#astronomy&#34;&gt;astronomy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#customs-based-on-valan&#34;&gt;customs based on Valan&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#valan-resolutions&#34;&gt;Valan resolutions&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#vyxt-and-dragonborn&#34;&gt;Vyxt and dragonborn&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#origins&#34;&gt;origins&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#courts&#34;&gt;courts&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#titles&#34;&gt;titles&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#trade&#34;&gt;trade&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#food&#34;&gt;food&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#army&#34;&gt;army&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#research-and-discovery&#34;&gt;research and discovery&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#religions&#34;&gt;religions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#external-affairs&#34;&gt;external affairs&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#glintstrad&#34;&gt;Glintstrad&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#cyorro&#34;&gt;Cyorro&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#nomasgard&#34;&gt;Nomasgard&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#pirates&#34;&gt;Pirates&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#historic-characters&#34;&gt;historic characters&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#golani-grumsvelt&#34;&gt;Golani Grumsvelt&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#magic-items&#34;&gt;magic items&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#campaigns--era-of-eras--wand-of-woe--economy--magic-items--gray&#39;s-grandeurs-inventory&#34;&gt;Gray&amp;rsquo;s Grandeurs Inventory&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#campaigns--era-of-eras--wand-of-woe--economy--magic-items--magic-item-list&#34;&gt;magic item list&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#campaigns--era-of-eras--wand-of-woe--economy--magic-items--magic-item-list--bag-of-compound-interest&#34;&gt;Bag of Compound Interest&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#campaigns--era-of-eras--wand-of-woe--economy--magic-items--magic-item-list--badge&#34;&gt;Badge&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#campaigns--era-of-eras--wand-of-woe--economy--magic-items--magic-item-list--eye-of-reholding&#34;&gt;Eye of Reholding&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#campaigns--era-of-eras--wand-of-woe--economy--magic-items--magic-item-list--eidetic-diary&#34;&gt;Eidetic Diary&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#campaigns--era-of-eras--wand-of-woe--economy--magic-items--magic-item-list--goodge&#34;&gt;Goodge&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#campaigns--era-of-eras--wand-of-woe--economy--magic-items--magic-item-list--mace-of-remembrance&#34;&gt;Mace of Remembrance&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#campaigns--era-of-eras--wand-of-woe--economy--magic-items--magic-item-list--immortal-baconator&#34;&gt;Immortal Baconator&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#campaigns--era-of-eras--wand-of-woe--economy--magic-items--magic-item-list--lens-of-seeing-fine-print&#34;&gt;Lens of Seeing Fine Print&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#campaigns--era-of-eras--wand-of-woe--economy--magic-items--magic-item-list--platonic-dispenser&#34;&gt;Platonic Dispenser&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#campaigns--era-of-eras--wand-of-woe--economy--magic-items--magic-item-list--rope-of-tangling&#34;&gt;Rope of Tangling&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#campaigns--era-of-eras--wand-of-woe--economy--magic-items--magic-item-list--ruby-hilted-dagger&#34;&gt;Ruby hilted dagger&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#campaigns--era-of-eras--wand-of-woe--economy--magic-items--magic-item-list--stickers-of-weapon-dazzling&#34;&gt;Stickers of Weapon Dazzling&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#campaigns--era-of-eras--wand-of-woe--economy--magic-items--magic-item-list--shield-of-friendship&#34;&gt;Shield of Friendship&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#campaigns--era-of-eras--wand-of-woe--economy--magic-items--magic-item-list--unseen-staff&#34;&gt;Unseen Staff&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#campaigns&#34;&gt;campaigns&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#wand-of-woe&#34;&gt;Wand of Woe&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#recaps&#34;&gt;recaps&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#session-1&#34;&gt;session 1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#session-2&#34;&gt;session 2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#session-3&#34;&gt;session 3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#session-4&#34;&gt;session 4&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#session-5&#34;&gt;session 5&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#session-6&#34;&gt;session 6&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#session-7&#34;&gt;session 7&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#session-8&#34;&gt;session 8&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#session-9&#34;&gt;session 9&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#session-10&#34;&gt;session 10&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#session-11&#34;&gt;session 11&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#session-12&#34;&gt;session 12&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#session-13&#34;&gt;session 13&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#session-14&#34;&gt;session 14&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#session-15&#34;&gt;session 15&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#session-16&#34;&gt;session 16&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#session-17&#34;&gt;session 17&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#session-18&#34;&gt;session 18&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#session-19&#34;&gt;session 19&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#session-20&#34;&gt;session 20&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#session-21&#34;&gt;session 21&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#session-22&#34;&gt;session 22&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#session-23&#34;&gt;session 23&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#session-24&#34;&gt;session 24&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#session-25&#34;&gt;session 25&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#session-26&#34;&gt;session 26&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#session-27&#34;&gt;session 27&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#session-28&#34;&gt;session 28&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#session-29&#34;&gt;session 29&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#session-30&#34;&gt;session 30&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#session-31&#34;&gt;session 31&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#session-32&#34;&gt;session 32&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#session-33&#34;&gt;session 33&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#session-34&#34;&gt;session 34&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#session-35&#34;&gt;session 35&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#session-36&#34;&gt;session 36&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#jerry-the-joblin&#34;&gt;Jerry the Joblin&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;!--endtoc--&gt;
&lt;p&gt;A world made for my D&amp;amp;D campaigns. It&amp;rsquo;s easy to destroy a world that you made
yourself!&lt;/p&gt;</description>
    </item>
    <item>
      <title>Software Engineering - Starter Web app 4</title>
      <link>https://blog.logustus.com/software-engineering-starter-web-04/</link>
      <pubDate>Tue, 21 Aug 2018 00:00:00 -0700</pubDate>
      <guid>https://blog.logustus.com/software-engineering-starter-web-04/</guid>
      <description>&lt;p&gt;In this episode, our hero (that&amp;rsquo;s you!) will be learning a tool that is helpful
in virtually any kind of development you will wind up working in: Version
control. Version control is rarely taught in school. It can be somewhat a deep
topic, but we&amp;rsquo;ll go over some basics of how you see it in the open source world,
which can carry over significantly to the commercial world.&lt;/p&gt;
&lt;h2 id=&#34;what-s-version-control&#34;&gt;what&amp;rsquo;s version control?&lt;/h2&gt;
&lt;p&gt;Version control is like the double-entry bookkeeping technique of saving all
of your hard work. If you recall on the last lesson, there was an off-the-cuff
statement about how your computer is just a fancy interface for working with
files. Version control typically excels at handling text files. This blog post
is a text file. HTML is text files. The original file that the blog post is
generated from is a text file. SVG images are also text files. There&amp;rsquo;s also
non-text files. Generally we call these binary files, but really we could also
call them shit-files. That&amp;rsquo;s a completely objective industry term and not me
showing any bias at all. Honest.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Software Engineering - Starter Web app 3</title>
      <link>https://blog.logustus.com/software-engineering-starter-web-03/</link>
      <pubDate>Tue, 10 Jul 2018 00:00:00 -0700</pubDate>
      <guid>https://blog.logustus.com/software-engineering-starter-web-03/</guid>
      <description>&lt;p&gt;This is the third installment of this &lt;a href=&#34;https://blog.logustus.com/software-engineering-starter-web/&#34;&gt;Starter Web App&lt;/a&gt; series I&amp;rsquo;m doing. In
&lt;a href=&#34;https://blog.logustus.com/software-engineering-starter-web-02/&#34;&gt;part 2&lt;/a&gt; we made our app server respond with different formats based on headers
the client sends. Now we&amp;rsquo;re going to use dynamic data!&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;re still on lesson 2, this will be cheating to continue. Spoiler alert!&lt;/p&gt;
&lt;p&gt;This is about what we should have had from lesson 2.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-js&#34; data-lang=&#34;js&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;express&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;require&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;express&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;app&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;express&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;app&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;/&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;req&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;res&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;req&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;accepts&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;text/html&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;res&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;set&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;Content-Type&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;text/html&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;res&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;send&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;     &amp;lt;html&amp;gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;       &amp;lt;body&amp;gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;         Welcome to the official site for &amp;lt;em&amp;gt;justified&amp;lt;/em&amp;gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;         &amp;lt;strong&amp;gt;cat hatred&amp;lt;/strong&amp;gt;.\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;       &amp;lt;/body&amp;gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;     &amp;lt;/html&amp;gt;&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;else&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;res&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;set&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;Content-Type&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;text/plain&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;res&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;send&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;ohai&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;})&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;app&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;listen&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;3000&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;console&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;log&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;Example app listening on port 3000!&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;providing-data&#34;&gt;providing data&lt;/h2&gt;
&lt;p&gt;Let&amp;rsquo;s add an endpoint (request handler) that gets us a list of cats. We&amp;rsquo;re going
to model our endpoints after REST. I have a post that gives a very high level
overview of REST, which you can read but isn&amp;rsquo;t required to move forward. The
real basic gist is that with REST, our endpoints are modeled as noun-like
things, and we have a very small number of fixed verb-like things we can do with
the noun-like things.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Software Engineering - Starter Web app 2</title>
      <link>https://blog.logustus.com/software-engineering-starter-web-02/</link>
      <pubDate>Fri, 15 Jun 2018 00:00:00 -0700</pubDate>
      <guid>https://blog.logustus.com/software-engineering-starter-web-02/</guid>
      <description>&lt;p&gt;As a continuation of &lt;a href=&#34;https://blog.logustus.com/software-engineering-starter-web/&#34;&gt;Starter Web App&lt;/a&gt;, we&amp;rsquo;ll be making our server respond with
some well formatted HTML. We want this so we can also test our web server with
a real web browser.&lt;/p&gt;
&lt;h2 id=&#34;why&#34;&gt;why?&lt;/h2&gt;
&lt;p&gt;If your server is already running, you can visit it in your browser by
navigating to &lt;a href=&#34;http://localhost:3000&#34;&gt;http://localhost:3000&lt;/a&gt;. You will see the &amp;ldquo;ohai&amp;rdquo; we added earlier
in a very flat, ugly &amp;ldquo;page&amp;rdquo;. It&amp;rsquo;s not actually a page, but instead how the
browser displays plain text content. We want to give back some actual HTML so
we can make a pretty page with meaningful content.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Software Engineering - Starter Web app</title>
      <link>https://blog.logustus.com/software-engineering-starter-web/</link>
      <pubDate>Wed, 13 Jun 2018 00:00:00 -0700</pubDate>
      <guid>https://blog.logustus.com/software-engineering-starter-web/</guid>
      <description>&lt;p&gt;Hi there! I believe questions are wonderful opportunities to enhance
documentation. In this case I&amp;rsquo;ve put together a series of posts for putting
together your first web application using this buzzword list: HTML, CSS,
Node.js, Express.js, bash (or just a shell), yarn, git, Homebrew, and maybe some
other stuff I forgot to include.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.logustus.com/software-engineering-starter-web-01/&#34;&gt;part 1 - getting set up with your local environment, and a tiny server&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.logustus.com/software-engineering-starter-web-02/&#34;&gt;part 2 - using curl, mime types, and fulfilling an automated test&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.logustus.com/software-engineering-starter-web-03/&#34;&gt;part 3 - working with data&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.logustus.com/software-engineering-starter-web-04/&#34;&gt;part 4 - backing it all up with git&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;While this isn&amp;rsquo;t complete, I&amp;rsquo;ll expand upon it anytime I get a chance to help
someone pick up the trade. Don&amp;rsquo;t worry if it seems like a lot! Fairly consistent
exposure will keep you moving along the never-ending fractal that is learning
about software engineering.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Software Engineering - Starter Web app 1</title>
      <link>https://blog.logustus.com/software-engineering-starter-web-01/</link>
      <pubDate>Wed, 13 Jun 2018 00:00:00 -0700</pubDate>
      <guid>https://blog.logustus.com/software-engineering-starter-web-01/</guid>
      <description>&lt;p&gt;The purpose here is to go over some basic web stuff and get a server up and
running, with maybe a web interface.&lt;/p&gt;
&lt;h2 id=&#34;legend&#34;&gt;legend&lt;/h2&gt;
&lt;h3 id=&#34;terminal-commands&#34;&gt;terminal commands&lt;/h3&gt;
&lt;p&gt;A source block with a &lt;code&gt;$&lt;/code&gt; in front generally means this is a command you
should run as your normal user from within a terminal or shell. Commands on
your system are programs, and you should either only run commands you
understand and/or originate from a trusted (by you) source. If the command is
prefixed with a &lt;code&gt;#&lt;/code&gt; it means to run the command with elevated permissions,
such as the &lt;code&gt;root&lt;/code&gt; user or as a &lt;code&gt;sudoer&lt;/code&gt; using &lt;code&gt;sudo&lt;/code&gt;. Generally commands that
want elevated permissions should be treated with greater scrutiny.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Killer Queen</title>
      <link>https://blog.logustus.com/killer-queen/</link>
      <pubDate>Sun, 14 Jan 2018 00:00:00 -0800</pubDate>
      <guid>https://blog.logustus.com/killer-queen/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve played some Killer Queen and helped put together streaming. Though the tech
for Portland&amp;rsquo;s streaming setup has dramatically improved, the streaming guide is
left up for posterity.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.logustus.com/killer-queen-black-box-study/&#34;&gt;Killer Queen black box study&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.logustus.com/killer-queen-streaming-guide/&#34;&gt;Killer Queen streaming guide&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Killer Queen Black Box Study</title>
      <link>https://blog.logustus.com/killer-queen-black-box-study/</link>
      <pubDate>Sun, 14 Jan 2018 00:00:00 -0800</pubDate>
      <guid>https://blog.logustus.com/killer-queen-black-box-study/</guid>
      <description>&lt;div class=&#34;ox-hugo-toc toc&#34;&gt;
&lt;div class=&#34;heading&#34;&gt;Table of Contents&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#changelog&#34;&gt;changelog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#introduction&#34;&gt;introduction&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#background&#34;&gt;background&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#reasoning&#34;&gt;reasoning&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#things&#34;&gt;things&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#frames&#34;&gt;frames&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#history&#34;&gt;history&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#complications&#34;&gt;complications&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#the-operating-system&#34;&gt;the operating system&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#the-solution&#34;&gt;the solution&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#side-by-side&#34;&gt;side by side&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#conclusion&#34;&gt;conclusion&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#frame-rate&#34;&gt;frame rate&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#the-problem&#34;&gt;the problem&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#enter-vsync&#34;&gt;enter vsync&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#does-kq-use-vsync&#34;&gt;does KQ use vsync?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#show-example-of-vsync&#34;&gt;&lt;span class=&#34;org-todo todo TODO&#34;&gt;TODO&lt;/span&gt; show example of vsync&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#pixels&#34;&gt;pixels&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#2d-as-3d&#34;&gt;2D as 3D&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#what-about-the-pixel-graphics&#34;&gt;what about the pixel graphics?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#conclusion&#34;&gt;&lt;span class=&#34;org-todo todo TODO&#34;&gt;TODO&lt;/span&gt; conclusion&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#the-wrap-glitch&#34;&gt;&lt;span class=&#34;org-todo todo TODO&#34;&gt;TODO&lt;/span&gt; the wrap glitch&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#game-stutter&#34;&gt;game stutter&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#the-drip&#34;&gt;&lt;span class=&#34;org-todo todo TODO&#34;&gt;TODO&lt;/span&gt; the &amp;ldquo;drip&amp;rdquo;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#collision&#34;&gt;collision&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#characters&#34;&gt;characters&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;!--endtoc--&gt;
&lt;h2 id=&#34;changelog&#34;&gt;changelog&lt;/h2&gt;
&lt;dl&gt;
&lt;dt&gt;&lt;span class=&#34;timestamp-wrapper&#34;&gt;&lt;span class=&#34;timestamp&#34;&gt;&amp;lt;2018-06-05 Tue&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;add section about &lt;a href=&#34;#characters&#34;&gt;character controllers&lt;/a&gt;.&lt;/dd&gt;
&lt;dt&gt;&lt;span class=&#34;timestamp-wrapper&#34;&gt;&lt;span class=&#34;timestamp&#34;&gt;&amp;lt;2018-03-22 Thu&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;add section about &lt;a href=&#34;#game-stutter&#34;&gt;game stutter&lt;/a&gt;.&lt;/dd&gt;
&lt;dt&gt;&lt;span class=&#34;timestamp-wrapper&#34;&gt;&lt;span class=&#34;timestamp&#34;&gt;&amp;lt;2018-01-21 Sun&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;add section about &lt;a href=&#34;#frame-rate&#34;&gt;frame rate and vsync&lt;/a&gt;.&lt;/dd&gt;
&lt;/dl&gt;
&lt;h2 id=&#34;introduction&#34;&gt;introduction&lt;/h2&gt;
&lt;p&gt;At the Portland scene we like to talk a lot about different things we&amp;rsquo;ve learned
about Killer Queen, and being that the game is effectively a hunk of software we
wind up talking a lot about details of its internal implementation. This post is
about the software implementation we know about Killer Queen or things we are
able to infer about said software. The source code for Killer Queen is locked in
a vault somewhere, guarded by a small army of the best speed warriors. As such
we can&amp;rsquo;t say for 100% certainty about everything. The game is a black box where
we cannot see inside it. We can make some good guesses though.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Ultimate CI/CD Setup</title>
      <link>https://blog.logustus.com/ultimate-cicd-setup/</link>
      <pubDate>Mon, 01 Jan 2018 00:00:00 -0800</pubDate>
      <guid>https://blog.logustus.com/ultimate-cicd-setup/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;&lt;span class=&#34;section-num&#34;&gt;1&lt;/span&gt; introduction&lt;/h2&gt;
&lt;p&gt;CI/CD stands for Continuous Integration / Continous (Delivery|Deployment).
Roughly when we refer to this, we&amp;rsquo;re talking about an automated
build/test/deployment suite of tools. Virtually all of your big programs you
write are useless if they just run on your personal computer. You need to put
them somewhere so they can run when your computer is off, or other people need
to be able to use the software you made. So we need to deploy the software
somewhere, and the software needs to be consumable in a way that doesn&amp;rsquo;t require
your machine&amp;rsquo;s development setup for those who need to consume said software.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Killer Queen Streaming Guide</title>
      <link>https://blog.logustus.com/killer-queen-streaming-guide/</link>
      <pubDate>Sun, 05 Nov 2017 00:00:00 -0700</pubDate>
      <guid>https://blog.logustus.com/killer-queen-streaming-guide/</guid>
      <description>&lt;div class=&#34;ox-hugo-toc toc&#34;&gt;
&lt;div class=&#34;heading&#34;&gt;Table of Contents&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#introduction&#34;&gt;introduction&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#changelog&#34;&gt;changelog&lt;/a&gt;
- &lt;a href=&#34;#b07b0c&#34;&gt;&lt;span class=&#34;timestamp-wrapper&#34;&gt;&lt;span class=&#34;timestamp&#34;&gt;&amp;lt;2018-03-26 Mon&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#challonge-integration&#34;&gt;challonge integration&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#workarounds&#34;&gt;workarounds&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#video-flow&#34;&gt;video flow&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#audio-flow&#34;&gt;audio flow&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#pdx-setup&#34;&gt;pdx setup&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#facilities&#34;&gt;facilities&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#hardware&#34;&gt;hardware&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#video&#34;&gt;video&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#audio&#34;&gt;audio&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#all-together-now&#34;&gt;all together now&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#anti-trip-trick&#34;&gt;anti trip trick&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#software&#34;&gt;software&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#challonge&#34;&gt;challonge&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#kq-tournament&#34;&gt;kq-tournament&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#obs&#34;&gt;OBS&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#troubleshooting&#34;&gt;troubleshooting&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#the-usb-webcam-freezes-after-transmitting-for-a-little-bit&#34;&gt;The USB webcam freezes after transmitting for a little bit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#if-the-input-is-not-recognized-on-the-computer-s-end&#34;&gt;If the input is not recognized on the computer&amp;rsquo;s end&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;!--endtoc--&gt;
&lt;h2 id=&#34;introduction&#34;&gt;introduction&lt;/h2&gt;
&lt;p&gt;As part of trying to reduce the Portland scene&amp;rsquo;s &lt;a href=&#34;https://en.wikipedia.org/wiki/Bus_factor&#34;&gt;bus number&lt;/a&gt; in regards to our
streaming setup I&amp;rsquo;ve recorded notes here as best I can. The dream is to have a
pretty foolproof setup that anyone mildly technically competent could apply to
their scene&amp;rsquo;s cab. People can and should provide suggestions and corrections so
our community can better thrive. As a general policy I won&amp;rsquo;t use a comment
system on this site because static hosting is awesome and also because
&lt;a href=&#34;https://github.com/tessalt/echo-chamber-js&#34;&gt;echo-chamber.js&lt;/a&gt; makes an excellent point. Feel free to contact me via email,
Twitter, or carrier pigeon for any improvements we can make here.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Painless(er) Unit Tests</title>
      <link>https://blog.logustus.com/unit-testing/</link>
      <pubDate>Wed, 17 May 2017 00:00:00 -0700</pubDate>
      <guid>https://blog.logustus.com/unit-testing/</guid>
      <description>&lt;div class=&#34;ox-hugo-toc toc&#34;&gt;
&lt;div class=&#34;heading&#34;&gt;Table of Contents&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#how-to-make-unit-testing-not-so-much-of-a-pain&#34;&gt;How to Make Unit Testing not so much of a pain&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#unit-testing&#34;&gt;Unit Testing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#primer&#34;&gt;Primer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#dress-for-success&#34;&gt;Dress for Success&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#do-not-dry-your-tests&#34;&gt;Do not DRY your tests&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#test-driven-development&#34;&gt;Test Driven Development&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#keep-your-tests&#34;&gt;Keep your tests&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#assert-a-single-truth-per-test&#34;&gt;Assert a single truth per test&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#clearly-state-your-intent&#34;&gt;Clearly state your intent&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#avoid-blob-tests&#34;&gt;Avoid blob tests&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#use-acceptance-tests-instead&#34;&gt;Use acceptance tests instead&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#or-use-an-algebraic-type-system-instead&#34;&gt;Or use an algebraic type system instead&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#admissions&#34;&gt;Admissions&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#conclusion&#34;&gt;Conclusion&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;!--endtoc--&gt;
&lt;h2 id=&#34;how-to-make-unit-testing-not-so-much-of-a-pain&#34;&gt;How to Make Unit Testing not so much of a pain&lt;/h2&gt;
&lt;h3 id=&#34;unit-testing&#34;&gt;Unit Testing&lt;/h3&gt;
&lt;p&gt;I find myself talking a lot about unit testing in my current workplace. Over
time I&amp;rsquo;ve learned things from others as well as developed some habits that have
served me well. I&amp;rsquo;ve gotten applications up to 100% test coverage without
Herculean effort. Granted, test coverage is not the same as test quality, it&amp;rsquo;s
still a useful metric. I&amp;rsquo;ve demonstrated that there is at least &lt;span class=&#34;underline&#34;&gt;one case&lt;/span&gt; in
which my code can work.&lt;/p&gt;</description>
    </item>
    <item>
      <title>asteriod generation</title>
      <link>https://blog.logustus.com/asteroid-generation/</link>
      <pubDate>Wed, 17 Aug 2016 22:17:00 +0000</pubDate>
      <guid>https://blog.logustus.com/asteroid-generation/</guid>
      <description>&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;
&lt;p&gt;For my personal project, I&amp;rsquo;m working on a simple and relaxing asteroid mining
game. It spent a long time as a prototype, simplified from many other
voxel-based games into this one, which feels realistic to achieve. I&amp;rsquo;ve been
working on it and the tech around it for years, with irregular spurts of
activity, lots of abandoned paths, and much thrown away work. My plan is to use
WebGL in some form and deploy it to the desktop via the web (or even
&lt;a href=&#34;http://electron.atom.io&#34;&gt;Electron&lt;/a&gt;), and use
&lt;a href=&#34;https://cordova.apache.org&#34;&gt;Cordova&lt;/a&gt; to handle the mobile version of it. Since
it&amp;rsquo;s faux 2D with voxels, I think mobile is a viable target. This is pending
tests. Mobile or not, this game needs to be made. I realized this when I was
testing the old Unity prototype, and found myself getting lost playing it long
after I&amp;rsquo;d tested whatever functionality I was curious about during that run.&lt;/p&gt;</description>
    </item>
    <item>
      <title>verification</title>
      <link>https://blog.logustus.com/verification/</link>
      <pubDate>Sat, 28 May 2016 16:37:00 +0000</pubDate>
      <guid>https://blog.logustus.com/verification/</guid>
      <description>&lt;p&gt;Unit tests, type checkers, SAT provers. These are all tools we use to verify our
code, and it&amp;rsquo;s by no means an exhaustive list. People struggle with using them
though. Ruby and Python engineers typically find static type systems too
cumbersome. Instead they favor more unit tests (those that do unit testing).
C# and Java engineers generally like the benefits of static checks to make sure
interfaces are respected (except null - seriously wut r u doing?). On the more
extreme end you have tools like Haskell that are statically typed in a way C#
and Java engineers can&amp;rsquo;t even wrap their heads around without major study.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Aspects of Functional Programming</title>
      <link>https://blog.logustus.com/aspects-of-functional-programming/</link>
      <pubDate>Mon, 30 Nov 2015 17:20:00 +0000</pubDate>
      <guid>https://blog.logustus.com/aspects-of-functional-programming/</guid>
      <description>&lt;p&gt;For all of the flak Javascript gets, there is one thing it has above all of the
&amp;ldquo;better&amp;rdquo; mainstream languages out there. I&amp;rsquo;m talking Java, C#, Python, Ruby
(yeah you two are mainstream to me). Javascript has functions as first class
objects. As a result, Javascript has been my gateway drug to functional
programming.&lt;/p&gt;
&lt;p&gt;Functional programming has a lot of interesting promises to it, but it&amp;rsquo;s been
damn frustrating at times to learn. Everything is so damn generic that it&amp;rsquo;s hard
to understand when it&amp;rsquo;s time to pull out certain patterns/functions/operations,
at least as an outsider looking in. I&amp;rsquo;ve really stuck with it, and it feels like
it&amp;rsquo;s gotten better over time. There&amp;rsquo;s still much for me to learn, but I feel
like I&amp;rsquo;ve climbed over some humps.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Destroy Meetings</title>
      <link>https://blog.logustus.com/meetings/</link>
      <pubDate>Mon, 05 Oct 2015 20:05:00 +0000</pubDate>
      <guid>https://blog.logustus.com/meetings/</guid>
      <description>&lt;p&gt;Who hasn&amp;rsquo;t wasted tons of time in meetings? Meetings are a joke in all organizations, and the joke is always the same - they are meaningless wastes of time. I&amp;rsquo;ve heard the sweet promises of things like Scrum, pomodoros, &lt;a href=&#34;http://hackthesystem.com/blog/why-i-hired-a-girl-on-craigslist-to-slap-me-in-the-face-and-why-it-quadrupled-my-productivity/&#34;&gt;people slapping you in the face when you open Facebook&lt;/a&gt; all as means to reduce waste in the workplace. The thing is, none of them are nearly as damaging as meetings.&lt;/p&gt;
&lt;p&gt;The reason we have meetings are noble ones, but misguided in their attempts to solve a problem. Short of a masquerade for some political agenda, meetings have a singular purpose: share information. Information sharing is hard and how many of us are just awesome at writing documentation constantly? How about grooming that documentation and making sure it&amp;rsquo;s well organized? As a result, people are left out of the loop. They want to form a meeting so they can ask questions and get people nodding heads on the path forward. The problem is that even with meeting notes, real documentation hasn&amp;rsquo;t been made. The information exchanged in a meeting is transient to the members of the meeting, and even then only to their recollection. Meeting notes without context are meaningless, and meeting notes don&amp;rsquo;t really contribute to a growing knowledge base - they are a log more than anything. Someone kept minutes.&lt;/p&gt;</description>
    </item>
    <item>
      <title>One True Language</title>
      <link>https://blog.logustus.com/one-true-language/</link>
      <pubDate>Sun, 13 Sep 2015 13:21:00 +0000</pubDate>
      <guid>https://blog.logustus.com/one-true-language/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve spent a lot of my tech career pursuing the One True Language, or One True Library, or some means of doing something in a unified way that could serve as an answer to the problems I was having. The polyglot folks would probably just say some langauges are better than others at certain things and so we should use several languages at once when building applications. I&amp;rsquo;m not sure I agree with this. I believe most of our languages are pretty good at the problem domains we select them for, or at least they could be.&lt;/p&gt;</description>
    </item>
    <item>
      <title>RESTful primer</title>
      <link>https://blog.logustus.com/rest-primer/</link>
      <pubDate>Fri, 04 Sep 2015 21:40:00 +0000</pubDate>
      <guid>https://blog.logustus.com/rest-primer/</guid>
      <description>&lt;p&gt;There&amp;rsquo;s a lot of stuff to know in tech. While it&amp;rsquo;s possible to know conceptually how things work from top to bottom, knowing all of the specifics is another story. I&amp;rsquo;ve run into a lot of engineers who just don&amp;rsquo;t understand what it&amp;rsquo;s about at all, so my hope is to clear that up. REST is a very common tool in the web world, and for good reason. If you want to know all of the super specific stuff about REST and look up RFCs, &lt;a href=&#34;https://en.wikipedia.org/wiki/Representational_state_transfer&#34;&gt;wikipedia&amp;rsquo;s REST article&lt;/a&gt; is probably a good start. This is not that article. The purpose here is to give you a really basic idea of what this whole REST thing is. RESTful APIs are pretty sweet compared to existing alternatives, but more details can be covered in a later post.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Markdown flavored shoes</title>
      <link>https://blog.logustus.com/markdown-flavored-shoes/</link>
      <pubDate>Thu, 13 Aug 2015 19:01:00 +0000</pubDate>
      <guid>https://blog.logustus.com/markdown-flavored-shoes/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve known and used Markdown here and there for some time, but I&amp;rsquo;m starting to really see its value. On the surface, Markdown is a way to take text and make decent looking HTML out of it, and the text still looks like some typical formatting in a plain text environment. I&amp;rsquo;ve sent managers these kinds of files, and they can just open these files in any text editor if they don&amp;rsquo;t have means of viewing Markdown.&lt;/p&gt;</description>
    </item>
    <item>
      <title></title>
      <link>https://blog.logustus.com/demystifying-webpack/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://blog.logustus.com/demystifying-webpack/</guid>
      <description>&lt;h2 id=&#34;demystifying-webpack&#34;&gt;Demystifying Webpack&lt;/h2&gt;
&lt;div class=&#34;ox-hugo-toc toc&#34;&gt;
&lt;div class=&#34;heading&#34;&gt;Table of Contents&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#demystifying-webpack&#34;&gt;Demystifying Webpack&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#some-background&#34;&gt;Some Background&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#enter-webpack&#34;&gt;Enter Webpack&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#loaders&#34;&gt;Loaders&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#plugins&#34;&gt;Plugins&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#conclusion&#34;&gt;Conclusion&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;!--endtoc--&gt;
&lt;h3 id=&#34;some-background&#34;&gt;Some Background&lt;/h3&gt;
&lt;p&gt;I&amp;rsquo;ve played with a lot of the Javascript build tools in the ecosystem. Today,
&lt;a href=&#34;https://webpack.js.org&#34;&gt;Webpack&lt;/a&gt; is my go to. I like it because it adds static analysis to my file paths
for virtually everything. It also has fairly clear ways in which it transforms
files. As with any tool, there&amp;rsquo;s trade-offs to it. I can&amp;rsquo;t get map files working
for my unit tests, and the initial builds can take a really long time (upwards
of a minute). Sure I can turn some features off to speed it up, but then I&amp;rsquo;ll
miss certain errors. For example, Angular&amp;rsquo;s dependency injection system can lean
on just the function parameter names, which break when any kind of minification
is done. If I&amp;rsquo;m not minifying, I&amp;rsquo;m potentially missing those errors.&lt;/p&gt;</description>
    </item>
    <item>
      <title></title>
      <link>https://blog.logustus.com/functional-programming-with-angular/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://blog.logustus.com/functional-programming-with-angular/</guid>
      <description>&lt;div class=&#34;ox-hugo-toc toc&#34;&gt;
&lt;div class=&#34;heading&#34;&gt;Table of Contents&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#functional-programming-with-angular&#34;&gt;Functional Programming with Angular&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#angular-and-functional-programming&#34;&gt;Angular and Functional programming&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#checklist-to-get-functional&#34;&gt;Checklist to get functional&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#get-on-a-package-manager&#34;&gt;Get on a package manager&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#export-all-the-things&#34;&gt;Export all the things&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#demolish-privacy&#34;&gt;Demolish privacy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#pass-more-parameters&#34;&gt;Pass more parameters&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#pass-functions-not-objects&#34;&gt;Pass functions, not objects&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#mutate-state-at-the-last-possible-second&#34;&gt;Mutate state at the last possible second&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#added-benefit-unit-testing&#34;&gt;Added benefit: Unit testing&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#conclusion&#34;&gt;Conclusion&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;!--endtoc--&gt;
&lt;h2 id=&#34;functional-programming-with-angular&#34;&gt;Functional Programming with Angular&lt;/h2&gt;
&lt;p&gt;Angular.js has paid my bills for about 4 years now. It&amp;rsquo;s a behemoth framework
commonly adopted by larger organizations wishing to get into the rich web client
space. The larger organizations come from &amp;ldquo;tried and true&amp;rdquo; Java or C# frameworks
like Spring, Struts, Dropwizard, MVC.net, and others I&amp;rsquo;m sure I&amp;rsquo;ve missed. If
so, a lot of the trimmings that Angular has are very comfortable to you. There&amp;rsquo;s
a routing mechanism, there&amp;rsquo;s an MVC-like structure, templates, and you have
means of making things &amp;ldquo;private&amp;rdquo; in this icky JavaScript that looks so goofy and
unsafe.&lt;/p&gt;</description>
    </item>
    <item>
      <title></title>
      <link>https://blog.logustus.com/procedural-generation-rant/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://blog.logustus.com/procedural-generation-rant/</guid>
      <description>&lt;p&gt;Procedural generation has been something of keen interest to me for a while now.
This kind of work is tied up in all kinds of algorithmic computer-science-y
stuff that&amp;rsquo;s a source of endless fascinating. One of the big things I like about
it is it puts the hard work of content generation towards the computer.
Computers aren&amp;rsquo;t very clever, but they have immense computational brute
strength. We can leverage this to create content derived from abstract reasoning
rather than heaps of raw data.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Graphing and Plotting</title>
      <link>https://blog.logustus.com/graphing/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://blog.logustus.com/graphing/</guid>
      <description>&lt;div class=&#34;ox-hugo-toc toc&#34;&gt;
&lt;div class=&#34;heading&#34;&gt;Table of Contents&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#introduction&#34;&gt;introduction&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#reading-material-and-citations&#34;&gt;reading material and citations&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#plot&#34;&gt;plot&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#ob-gnuplot&#34;&gt;ob-gnuplot&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#reset&#34;&gt;reset&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#separator&#34;&gt;separator&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#dates&#34;&gt;dates&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#working-example&#34;&gt;working example&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;!--endtoc--&gt;
&lt;h2 id=&#34;introduction&#34;&gt;introduction&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;org-mode&lt;/code&gt; supports graphing with &lt;code&gt;gnuplot&lt;/code&gt;. This can be done directly with
&lt;code&gt;#+plot&lt;/code&gt; but it&amp;rsquo;s very rudimentary. It can also be done with &lt;code&gt;org-babel&lt;/code&gt; and I
can still feed tables into it.&lt;/p&gt;
&lt;h2 id=&#34;reading-material-and-citations&#34;&gt;reading material and citations&lt;/h2&gt;
&lt;dl&gt;
&lt;dt&gt;&lt;a href=&#34;http://orgmode.org/worg/org-contrib/babel/languages/ob-doc-gnuplot.html#orgfbe3a85&#34;&gt;ob-gnuplot docs&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;Has lots of good examples for &lt;code&gt;gnuplot&lt;/code&gt; via &lt;code&gt;ob-gnuplot&lt;/code&gt;.&lt;/dd&gt;
&lt;dt&gt;&lt;a href=&#34;http://orgmode.org/manual/Org_002dPlot.html&#34;&gt;org-plot docs&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;&lt;code&gt;org-plot&lt;/code&gt; documentation. Examples feel sparse for my simian
mind.&lt;/dd&gt;
&lt;dt&gt;&lt;a href=&#34;http://orgmode.org/worg/org-tutorials/org-plot.html&#34;&gt;org-plot tutorial&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;And has &lt;a href=&#34;http://orgmode.org/worg/org-tutorials/org-plot.org&#34;&gt;the org mode version&lt;/a&gt; I can use as reference.&lt;/dd&gt;
&lt;dt&gt;&lt;a href=&#34;https://lists.gnu.org/archive/html/emacs-orgmode/2012-03/msg01019.html&#34;&gt;Plotting (with gnuplot) using dates timestamps&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;Mailing list discussion
showing how &lt;code&gt;org-timestamp&lt;/code&gt; columns get converted to another format.&lt;/dd&gt;
&lt;/dl&gt;
&lt;p&gt;&lt;a href=&#34;http://www.gnuplot.info/documentation.html&#34;&gt;gnuplot documentation&lt;/a&gt;&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
