<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"
    xmlns:dc="http://purl.org/dc/elements/1.1/">
    <channel>
        <title>Brad Parker &#8212; Designer + Developer</title>
        <link>https://bradparker.com</link>
        <description><![CDATA[I've been making software professionally for about seven years and I really love it. I believe software has this empowering potential, I believe everyone should be able to understand it if they want to. This means I prefer open and accessible tools and standards wherever possible. It also means I try to learn in the open, sharing what I learn as I learn it.]]></description>
        <atom:link href="https://bradparker.com/rss.xml" rel="self"
                   type="application/rss+xml" />
        <lastBuildDate>Sun, 16 Feb 2020 00:00:00 UT</lastBuildDate>
        <item>
    <title>Using Nix to deploy a Haskell web app to Heroku</title>
    <link>https://bradparker.com/content/posts/2020-02-16-using-nix-to-deploy-a-haskell-web-app-to-heroku.html</link>
    <description><![CDATA[<p>Deploying Ruby on Rails apps to Heroku has always been a delight, and now that they have a container registry other run-times are similarly delightfully deployable. No build-packs required.</p>
<div class="sourceCode" id="cb1"><pre class="sourceCode nix"><code class="sourceCode bash"><span id="cb1-1"><a href="https://bradparker.com#cb1-1"></a><span class="ex">with</span> (import <span class="op">&lt;</span>nixpkgs<span class="op">&gt;</span> {});</span>
<span id="cb1-2"><a href="https://bradparker.com#cb1-2"></a><span class="ex">dockerTools.buildImage</span> {</span>
<span id="cb1-3"><a href="https://bradparker.com#cb1-3"></a>  <span class="ex">name</span> = <span class="st">&quot;hello&quot;</span><span class="kw">;</span></span>
<span id="cb1-4"><a href="https://bradparker.com#cb1-4"></a>  <span class="ex">contents</span> = [ hello ]<span class="kw">;</span></span>
<span id="cb1-5"><a href="https://bradparker.com#cb1-5"></a>}</span></code></pre></div>]]></description>
    <pubDate>Sun, 16 Feb 2020 00:00:00 UT</pubDate>
    <guid>https://bradparker.com/content/posts/2020-02-16-using-nix-to-deploy-a-haskell-web-app-to-heroku.html</guid>
    <dc:creator>Brad Parker</dc:creator>
</item>
<item>
    <title>Home sweet home</title>
    <link>https://bradparker.com/content/posts/2020-02-12-home-sweet-home.html</link>
    <description><![CDATA[<pre><code>brad@brad
~ » nix-shell -p figlet
brad@brad [nix:shell]
~ » figlet -f smscript nifty

      o |\_|_
/|/|  | |/ |  |  |
 | |_/|/|_/|_/ \/|/
        |)      (|</code></pre>
<p>If you’re like me, you develop on both macOS and Linux and are very much a creature of habit, then this may be of interest. It’s a description of how I arrived at my current approach for maintaining a base development environment across the two platforms.</p>]]></description>
    <pubDate>Wed, 12 Feb 2020 00:00:00 UT</pubDate>
    <guid>https://bradparker.com/content/posts/2020-02-12-home-sweet-home.html</guid>
    <dc:creator>Brad Parker</dc:creator>
</item>
<item>
    <title>Getting close to the conceptual metal</title>
    <link>https://bradparker.com/content/posts/2020-01-27-getting-close-to-the-conceptual-metal.html</link>
    <description><![CDATA[<p>Writing software can give us the ability to take a nearly impossibly abstract idea and use it to create a runnable program.</p>
<p>In this post we’re to talk about “fundamental things” and see how much we can build with them.</p>
<div class="sourceCode" id="cb1"><pre class="sourceCode haskell"><code class="sourceCode haskell"><span id="cb1-1"><a href="https://bradparker.com#cb1-1"></a><span class="kw">type</span> a × b <span class="ot">=</span></span>
<span id="cb1-2"><a href="https://bradparker.com#cb1-2"></a>  <span class="kw">forall</span> c<span class="op">.</span></span>
<span id="cb1-3"><a href="https://bradparker.com#cb1-3"></a>    (a <span class="ot">-&gt;</span> b <span class="ot">-&gt;</span> c) <span class="ot">-&gt;</span> c</span>
<span id="cb1-4"><a href="https://bradparker.com#cb1-4"></a></span>
<span id="cb1-5"><a href="https://bradparker.com#cb1-5"></a><span class="kw">type</span> a <span class="op">+</span> b <span class="ot">=</span></span>
<span id="cb1-6"><a href="https://bradparker.com#cb1-6"></a>  <span class="kw">forall</span> c<span class="op">.</span></span>
<span id="cb1-7"><a href="https://bradparker.com#cb1-7"></a>    (a <span class="ot">-&gt;</span> c) <span class="ot">-&gt;</span> (b <span class="ot">-&gt;</span> c) <span class="ot">-&gt;</span> c</span></code></pre></div>]]></description>
    <pubDate>Mon, 27 Jan 2020 00:00:00 UT</pubDate>
    <guid>https://bradparker.com/content/posts/2020-01-27-getting-close-to-the-conceptual-metal.html</guid>
    <dc:creator>Brad Parker</dc:creator>
</item>
<item>
    <title>Deploying a fully automated Nix-based static website</title>
    <link>https://bradparker.com/content/posts/2019-11-21-deploying-a-fully-automated-nix-based-static-website.html</link>
    <description><![CDATA[<div class="sourceCode" id="cb1"><pre class="sourceCode nix"><code class="sourceCode bash"><span id="cb1-1"><a href="https://bradparker.com#cb1-1"></a><span class="kw">{</span> <span class="ex">config</span>, pkgs, ... <span class="kw">}</span>:</span>
<span id="cb1-2"><a href="https://bradparker.com#cb1-2"></a><span class="bu">let</span></span>
<span id="cb1-3"><a href="https://bradparker.com#cb1-3"></a>  <span class="ex">repo</span> = builtins.fetchTarball {</span>
<span id="cb1-4"><a href="https://bradparker.com#cb1-4"></a>    <span class="ex">url</span> = https://repo.tar.gz<span class="kw">;</span></span>
<span id="cb1-5"><a href="https://bradparker.com#cb1-5"></a>  };</span>
<span id="cb1-6"><a href="https://bradparker.com#cb1-6"></a><span class="kw">in</span></span>
<span id="cb1-7"><a href="https://bradparker.com#cb1-7"></a><span class="kw">{</span></span>
<span id="cb1-8"><a href="https://bradparker.com#cb1-8"></a>  <span class="ex">imports</span> = [<span class="st">&quot;</span><span class="va">${repo}</span><span class="st">/module.nix&quot;</span>]<span class="kw">;</span></span>
<span id="cb1-9"><a href="https://bradparker.com#cb1-9"></a></span>
<span id="cb1-10"><a href="https://bradparker.com#cb1-10"></a>  <span class="ex">services.</span><span class="st">&quot;site&quot;</span>.enable = true<span class="kw">;</span></span>
<span id="cb1-11"><a href="https://bradparker.com#cb1-11"></a><span class="kw">}</span></span></code></pre></div>
<p>I can’t promise that this will take you five minutes (it won’t). What I will say is this: if you’d like to learn more about Nix and NixOs then this may be interesting.</p>]]></description>
    <pubDate>Thu, 21 Nov 2019 00:00:00 UT</pubDate>
    <guid>https://bradparker.com/content/posts/2019-11-21-deploying-a-fully-automated-nix-based-static-website.html</guid>
    <dc:creator>Brad Parker</dc:creator>
</item>
<item>
    <title>Servant's type-level domain specific language</title>
    <link>https://bradparker.com/content/posts/2019-10-05-servant-types.html</link>
    <description><![CDATA[<p>Haskell has some <em>very</em> interesting type-level features, Servant is a great case-study in how they can be used to build a practical and feature rich library. This post walks through an example in an attempt to become more familiar with its inner workings.</p>
<div class="sourceCode" id="cb1"><pre class="sourceCode haskell"><code class="sourceCode haskell"><span id="cb1-1"><a href="https://bradparker.com#cb1-1"></a><span class="kw">type</span> <span class="dt">UsersIndex</span> <span class="ot">=</span></span>
<span id="cb1-2"><a href="https://bradparker.com#cb1-2"></a>  <span class="dt">Get</span> '[<span class="dt">JSON</span>] [<span class="dt">User</span>]</span>
<span id="cb1-3"><a href="https://bradparker.com#cb1-3"></a></span>
<span id="cb1-4"><a href="https://bradparker.com#cb1-4"></a><span class="kw">type</span> <span class="dt">UsersShow</span> <span class="ot">=</span></span>
<span id="cb1-5"><a href="https://bradparker.com#cb1-5"></a>  <span class="dt">Capture</span> <span class="st">&quot;username&quot;</span> <span class="dt">String</span></span>
<span id="cb1-6"><a href="https://bradparker.com#cb1-6"></a>    <span class="op">:&gt;</span> <span class="dt">Get</span> '[<span class="dt">JSON</span>] <span class="dt">User</span></span>
<span id="cb1-7"><a href="https://bradparker.com#cb1-7"></a></span>
<span id="cb1-8"><a href="https://bradparker.com#cb1-8"></a><span class="kw">type</span> <span class="dt">UsersAPI</span> <span class="ot">=</span></span>
<span id="cb1-9"><a href="https://bradparker.com#cb1-9"></a>  <span class="st">&quot;users&quot;</span></span>
<span id="cb1-10"><a href="https://bradparker.com#cb1-10"></a>    <span class="op">:&gt;</span> (<span class="dt">UsersIndex</span> <span class="op">:&lt;|&gt;</span> <span class="dt">UsersShow</span>)</span></code></pre></div>]]></description>
    <pubDate>Sat, 05 Oct 2019 00:00:00 UT</pubDate>
    <guid>https://bradparker.com/content/posts/2019-10-05-servant-types.html</guid>
    <dc:creator>Brad Parker</dc:creator>
</item>
<item>
    <title>Let's learn about lenses</title>
    <link>https://bradparker.com/content/posts/2018-08-21-lets-learn-about-lenses.html</link>
    <description><![CDATA[<div class="sourceCode" id="cb1"><pre class="sourceCode haskell"><code class="sourceCode haskell"><span id="cb1-1"><a href="https://bradparker.com#cb1-1"></a><span class="kw">type</span> <span class="dt">Lens</span> s t a b <span class="ot">=</span></span>
<span id="cb1-2"><a href="https://bradparker.com#cb1-2"></a>  <span class="kw">forall</span> f<span class="op">.</span> <span class="dt">Functor</span> f <span class="ot">=&gt;</span></span>
<span id="cb1-3"><a href="https://bradparker.com#cb1-3"></a>    (a <span class="ot">-&gt;</span> f b) <span class="ot">-&gt;</span> s <span class="ot">-&gt;</span> f t</span>
<span id="cb1-4"><a href="https://bradparker.com#cb1-4"></a></span>
<span id="cb1-5"><a href="https://bradparker.com#cb1-5"></a><span class="ot">_1 ::</span> <span class="dt">Lens</span> (a, c) (b, c) a b</span>
<span id="cb1-6"><a href="https://bradparker.com#cb1-6"></a>_1 <span class="ot">=</span> _</span>
<span id="cb1-7"><a href="https://bradparker.com#cb1-7"></a></span>
<span id="cb1-8"><a href="https://bradparker.com#cb1-8"></a><span class="ot">_2 ::</span> <span class="dt">Lens</span> (c, a) (c, b) a b</span>
<span id="cb1-9"><a href="https://bradparker.com#cb1-9"></a>_2 <span class="ot">=</span> _</span></code></pre></div>
<p>Gaining an understanding of the <code>Lens</code> type has been on my todo list for a long time. So I finally bit the bullet and read up a little. These are (more or less) my notes as I went along.</p>]]></description>
    <pubDate>Tue, 21 Aug 2018 00:00:00 UT</pubDate>
    <guid>https://bradparker.com/content/posts/2018-08-21-lets-learn-about-lenses.html</guid>
    <dc:creator>Brad Parker</dc:creator>
</item>
<item>
    <title>You already know what Monads are</title>
    <link>https://bradparker.com/content/posts/2017-01-06-you-already-know-what-monads-are.html</link>
    <description><![CDATA[<p>I sought to understand what the fuss was all about and I’ve now added to the mass of Monad Explainer posts on the internet.</p>
<div class="sourceCode" id="cb1"><pre class="sourceCode javascript"><code class="sourceCode javascript"><span id="cb1-1"><a href="https://bradparker.com#cb1-1"></a><span class="at">readAFile</span>().<span class="at">then</span>(<span class="kw">function</span> (content) <span class="op">{</span></span>
<span id="cb1-2"><a href="https://bradparker.com#cb1-2"></a>  <span class="cf">return</span> <span class="at">writeAFile</span>(content)</span>
<span id="cb1-3"><a href="https://bradparker.com#cb1-3"></a><span class="op">}</span>).<span class="at">then</span>(<span class="kw">function</span> (report) <span class="op">{</span></span>
<span id="cb1-4"><a href="https://bradparker.com#cb1-4"></a>  <span class="va">console</span>.<span class="at">log</span>(report)</span>
<span id="cb1-5"><a href="https://bradparker.com#cb1-5"></a><span class="op">}</span>)</span></code></pre></div>]]></description>
    <pubDate>Fri, 06 Jan 2017 00:00:00 UT</pubDate>
    <guid>https://bradparker.com/content/posts/2017-01-06-you-already-know-what-monads-are.html</guid>
    <dc:creator>Brad Parker</dc:creator>
</item>
<item>
    <title>Petrichor Ensemble &#8212; Gig Poster</title>
    <link>https://bradparker.com/content/posts/2013-02-08-petrichor.html</link>
    <description><![CDATA[<figure>
<img src="https://bradparker.com/assets/images/petrichor-detail.jpg" alt /><figcaption>Petrichor Ensemble — Gig Poster Detail</figcaption>
</figure>
<blockquote>
<p>Petrichor (/ˈpɛtrɨkɔər/) is the earthy scent produced when rain falls on dry soil. The word is constructed from Greek, petra, meaning ‘stone’, + ichor, the fluid that flows in the veins of the gods in Greek mythology.</p>
<p>— <em>Wikpedia</em></p>
</blockquote>
<figure>
<img src="https://bradparker.com/assets/images/petrichor-full.jpg" alt /><figcaption>Petrichor Ensemble — Gig Poster Full</figcaption>
</figure>]]></description>
    <pubDate>Fri, 08 Feb 2013 00:00:00 UT</pubDate>
    <guid>https://bradparker.com/content/posts/2013-02-08-petrichor.html</guid>
    <dc:creator>Brad Parker</dc:creator>
</item>
<item>
    <title>Brisbane Bicycle Film Festival 2012 &#8212; Poster</title>
    <link>https://bradparker.com/content/posts/2012-10-03-brisbane-bicycle-film-festival.html</link>
    <description><![CDATA[<figure>
<img src="https://bradparker.com/assets/images/bbff-2012-detail.jpg" alt /><figcaption>Bicycle Film Festival — Poster Detail</figcaption>
</figure>
<p>I don’t have the original images anymore, but this made a rad gif also…</p>
<figure>
<img src="https://bradparker.com/assets/images/bbff-2012-full.jpg" alt /><figcaption>Bicycle Film Festival — Poster Full</figcaption>
</figure>]]></description>
    <pubDate>Wed, 03 Oct 2012 00:00:00 UT</pubDate>
    <guid>https://bradparker.com/content/posts/2012-10-03-brisbane-bicycle-film-festival.html</guid>
    <dc:creator>Brad Parker</dc:creator>
</item>
<item>
    <title>Design futures &#8212; Typography</title>
    <link>https://bradparker.com/content/posts/2011-06-01-design-futures.html</link>
    <description><![CDATA[<figure>
<img src="https://bradparker.com/assets/images/design-futures-monogram.jpg" alt /><figcaption>Design Futures — Monogram</figcaption>
</figure>
<figure>
<img src="https://bradparker.com/assets/images/design-futures-full.jpg" alt /><figcaption>Design Futures — Full</figcaption>
</figure>
<p>Everything is connected, and the way it connects is kinda complex. I’d like to be more aware of my connections to people and the networks they’re a part of.</p>
<p>As it stands these are all mock-ups rendered in SketchUp, the <del>dream</del> plan is to get this rendering in the browser from user input. Wild scaffolding.</p>]]></description>
    <pubDate>Wed, 01 Jun 2011 00:00:00 UT</pubDate>
    <guid>https://bradparker.com/content/posts/2011-06-01-design-futures.html</guid>
    <dc:creator>Brad Parker</dc:creator>
</item>

    </channel>
</rss>
