<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Hey there! · Brian Hicks</title>
    <link>https://www.brianthicks.com/</link>
    <description>Recent content in Hey there!  · Brian Hicks</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-us</language>
    <managingEditor>brian@brianthicks.com (Brian Hicks)</managingEditor>
    <webMaster>brian@brianthicks.com (Brian Hicks)</webMaster>
    <copyright>The content on this site is licensed as &lt;a rel=&#34;license&#34; href=&#34;https://creativecommons.org/licenses/by-sa/4.0/&#34;&gt;CC Attribution-ShareAlike&lt;/a&gt; except for code samples, which are licensed as &lt;a rel=&#34;license&#34; href=&#34;http://creativecommons.org/publicdomain/zero/1.0/&#34;&gt;CC0&lt;/a&gt;.</copyright>
    <lastBuildDate>Thu, 25 Jan 2018 23:32:00 -0600</lastBuildDate>
    <atom:link href="/" rel="self" type="application/rss+xml" />
    
    <item>
      <title>State of Elm 2018 Results</title>
      <link>https://www.brianthicks.com/post/2018/12/26/state-of-elm-2018-results/</link>
      <pubDate>Wed, 26 Dec 2018 04:05:34 -0500</pubDate>
      <author>brian@brianthicks.com (Brian Hicks)</author>
      <guid>https://www.brianthicks.com/post/2018/12/26/state-of-elm-2018-results/</guid>
      <description>
        
        &lt;p&gt;The State of Elm survey takes the pulse of the Elm community.
What experiences do newcomers have, and are they learning at decent pace?
What companies have Elm in production?&lt;/p&gt;

&lt;p&gt;This year, the survey ran from the end of Janary to the beginning of March, and collected 1,176 responses (about the same as last year.)
After the survey ended, I scrubbed each field for 17 of the questions to make sure we had good data, reduced five of the questions to tags, and performed the analysis below.
I know it&amp;rsquo;s been a long wait; thank you for your patience while I did this, and to all the people who checked in and asked if they could help!&lt;/p&gt;

&lt;p&gt;Let&amp;rsquo;s get going!&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;
        &lt;hr /&gt;
        &lt;p&gt;&lt;a href="https://www.brianthicks.com/post/2018/12/26/state-of-elm-2018-results/"&gt;Continue Reading&lt;/a&gt;&lt;/p&gt;
      </description>
    </item>
    
    <item>
      <title>Let&#39;s Make Nice Packages!</title>
      <link>https://www.brianthicks.com/post/2018/07/18/lets-make-nice-packages/</link>
      <pubDate>Wed, 18 Jul 2018 14:11:00 -0500</pubDate>
      <author>brian@brianthicks.com (Brian Hicks)</author>
      <guid>https://www.brianthicks.com/post/2018/07/18/lets-make-nice-packages/</guid>
      <description>
        
        &lt;p&gt;This year at &lt;a href=&#34;https://2018.elmeurope.org/&#34;&gt;Elm Europe&lt;/a&gt; I gave a talk called &amp;ldquo;Let&amp;rsquo;s Make Nice Packages!&amp;rdquo;&lt;/p&gt;

&lt;p&gt;It&amp;rsquo;s about research.&lt;/p&gt;

&lt;p&gt;No, wait, come back!&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;
        &lt;hr /&gt;
        &lt;p&gt;&lt;a href="https://www.brianthicks.com/post/2018/07/18/lets-make-nice-packages/"&gt;Continue Reading&lt;/a&gt;&lt;/p&gt;
      </description>
    </item>
    
    <item>
      <title>State of Elm 2018</title>
      <link>https://www.brianthicks.com/post/2018/02/01/state-of-elm-2018/</link>
      <pubDate>Thu, 01 Feb 2018 07:56:47 -0600</pubDate>
      <author>brian@brianthicks.com (Brian Hicks)</author>
      <guid>https://www.brianthicks.com/post/2018/02/01/state-of-elm-2018/</guid>
      <description>
        
        &lt;p&gt;The State of Elm 2018 is on!
We put on this survey every year to take the pulse of the Elm community.
Where have we been, and where are we going?&lt;/p&gt;

&lt;p&gt;The survey is open now and will close on March 1.
You can take it below or &lt;a href=&#34;https://www.brianthicks.com/state-of-elm/2018&#34;&gt;in full screen mode&lt;/a&gt; (better for mobile users.)&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;
        &lt;hr /&gt;
        &lt;p&gt;&lt;a href="https://www.brianthicks.com/post/2018/02/01/state-of-elm-2018/"&gt;Continue Reading&lt;/a&gt;&lt;/p&gt;
      </description>
    </item>
    
    <item>
      <title>Breaking Down Decoders From the Bottom Up</title>
      <link>https://www.brianthicks.com/post/2017/09/05/breaking-down-decoders-from-the-bottom-up/</link>
      <pubDate>Tue, 05 Sep 2017 21:39:54 -0500</pubDate>
      <author>brian@brianthicks.com (Brian Hicks)</author>
      <guid>https://www.brianthicks.com/post/2017/09/05/breaking-down-decoders-from-the-bottom-up/</guid>
      <description>
        &lt;p&gt;&lt;a href="https://www.brianthicks.com/post/2017/09/05/breaking-down-decoders-from-the-bottom-up/"&gt;&lt;img src="https://www.brianthicks.com/images/breaking-down-decoders-from-the-bottom-up-with-title.png" alt="Breaking Down Decoders From the Bottom Up" /&gt;&lt;/a&gt;&lt;/p&gt;
        &lt;p&gt;Last week, we covered &lt;a href=&#34;https://www.brianthicks.com/post/2017/08/30/breaking-out-of-deeply-nested-json-objects/&#34;&gt;how to break down decoders by starting from the innermost, or topmost, part&lt;/a&gt;.
But what if you&amp;rsquo;re having trouble breaking things down from the top?
(Or you&amp;rsquo;re dealing with a &lt;em&gt;really&lt;/em&gt; complex JSON schema?)&lt;/p&gt;

&lt;p&gt;This week, let&amp;rsquo;s look at it from a different perspective: the outermost structure in (or the bottom up!)&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;
        &lt;hr /&gt;
        &lt;p&gt;&lt;a href="https://www.brianthicks.com/post/2017/09/05/breaking-down-decoders-from-the-bottom-up/"&gt;Continue Reading&lt;/a&gt;&lt;/p&gt;
      </description>
    </item>
    
    <item>
      <title>Breaking Out of Deeply Nested JSON Objects</title>
      <link>https://www.brianthicks.com/post/2017/08/30/breaking-out-of-deeply-nested-json-objects/</link>
      <pubDate>Wed, 30 Aug 2017 11:58:28 -0500</pubDate>
      <author>brian@brianthicks.com (Brian Hicks)</author>
      <guid>https://www.brianthicks.com/post/2017/08/30/breaking-out-of-deeply-nested-json-objects/</guid>
      <description>
        &lt;p&gt;&lt;a href="https://www.brianthicks.com/post/2017/08/30/breaking-out-of-deeply-nested-json-objects/"&gt;&lt;img src="https://www.brianthicks.com/images/breaking-out-of-deeply-nested-json-objects-with-title.png" alt="Breaking Out of Deeply Nested JSON Objects" /&gt;&lt;/a&gt;&lt;/p&gt;
        &lt;p&gt;A reader of &lt;a href=&#34;https://www.brianthicks.com/json-survival-kit/&#34;&gt;the JSON Survival Kit&lt;/a&gt; wrote me with a question (lightly edited):&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I&amp;rsquo;ve got a JSON string that works fine in JavaScript:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;{
  &amp;quot;Site1&amp;quot;: {
    &amp;quot;PC1&amp;quot;: {
      &amp;quot;ip&amp;quot;: &amp;quot;x.x.x.x&amp;quot;,
      &amp;quot;version&amp;quot;: &amp;quot;3&amp;quot;
    },
    &amp;quot;PC2&amp;quot;: {
      &amp;quot;ip&amp;quot;: &amp;quot;x.x.x.x&amp;quot;,
      &amp;quot;version&amp;quot;: &amp;quot;3&amp;quot;
    }
  },
  &amp;quot;Site2&amp;quot;: {
    &amp;quot;PC1&amp;quot;: {
      &amp;quot;ip&amp;quot;: &amp;quot;x.x.x.x&amp;quot;,
      &amp;quot;version&amp;quot;: &amp;quot;3&amp;quot;
    },
    &amp;quot;PC2&amp;quot;: {
      &amp;quot;ip&amp;quot;: &amp;quot;x.x.x.x&amp;quot;,
      &amp;quot;version&amp;quot;: &amp;quot;3&amp;quot;
    }
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;I really can&amp;rsquo;t figure out how to parse this&amp;ndash;will your book help with nested JSON where the keys are different 2 or 3 levels deep?&lt;/p&gt;

&lt;p&gt;If not, then I&amp;rsquo;ll just give up on Elm&amp;ndash;as this is the first project that I&amp;rsquo;m trying to do, and something as basic as this, I&amp;rsquo;m finding impossible.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The biggest mindset shift you need to succeed with JSON Decoding is to think of your decoders like bricks.
(&lt;a href=&#34;https://www.brianthicks.com/post/2016/10/17/composing-decoders-like-lego/&#34;&gt;I&amp;rsquo;ve written about this before&lt;/a&gt;, and it&amp;rsquo;s chapter 1 of &lt;em&gt;The JSON Survival Kit&lt;/em&gt;.)
You can combine bricks to build whatever you like; the same is true of decoders!&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;
        &lt;hr /&gt;
        &lt;p&gt;&lt;a href="https://www.brianthicks.com/post/2017/08/30/breaking-out-of-deeply-nested-json-objects/"&gt;Continue Reading&lt;/a&gt;&lt;/p&gt;
      </description>
    </item>
    
    <item>
      <title>State of Elm 2017 Results</title>
      <link>https://www.brianthicks.com/post/2017/07/27/state-of-elm-2017-results/</link>
      <pubDate>Thu, 27 Jul 2017 11:02:00 -0500</pubDate>
      <author>brian@brianthicks.com (Brian Hicks)</author>
      <guid>https://www.brianthicks.com/post/2017/07/27/state-of-elm-2017-results/</guid>
      <description>
        
        &lt;p&gt;The State of Elm 2017 results are here!
I first presented these as two talks, one to Elm Europe and one to the Oslo Elm Day.
I&amp;rsquo;ve embedded the Elm Europe talk below (it&amp;rsquo;s shorter) but the &lt;a href=&#34;https://www.youtube.com/watch?v=NKl0dtSe8rs&amp;amp;feature=youtu.be&#34;&gt;longer version&lt;/a&gt; is on also YouTube.&lt;/p&gt;


&lt;div style=&#34;position: relative; padding-bottom: 56.25%; padding-top: 30px; height: 0; overflow: hidden;&#34;&gt;
  &lt;iframe src=&#34;//www.youtube.com/embed/BAtql6ZbvpU&#34; style=&#34;position: absolute; top: 0; left: 0; width: 100%; height: 100%;&#34; allowfullscreen frameborder=&#34;0&#34; title=&#34;YouTube Video&#34;&gt;&lt;/iframe&gt;
 &lt;/div&gt;


&lt;p&gt;&lt;/p&gt;
        &lt;hr /&gt;
        &lt;p&gt;&lt;a href="https://www.brianthicks.com/post/2017/07/27/state-of-elm-2017-results/"&gt;Continue Reading&lt;/a&gt;&lt;/p&gt;
      </description>
    </item>
    
    <item>
      <title>Sending Dates Through Elm Ports</title>
      <link>https://www.brianthicks.com/post/2017/05/01/sending-dates-through-elm-ports/</link>
      <pubDate>Mon, 01 May 2017 09:00:00 -0600</pubDate>
      <author>brian@brianthicks.com (Brian Hicks)</author>
      <guid>https://www.brianthicks.com/post/2017/05/01/sending-dates-through-elm-ports/</guid>
      <description>
        &lt;p&gt;&lt;a href="https://www.brianthicks.com/post/2017/05/01/sending-dates-through-elm-ports/"&gt;&lt;img src="https://www.brianthicks.com/images/dates-in-ports-with-title.png" alt="Sending Dates Through Elm Ports" /&gt;&lt;/a&gt;&lt;/p&gt;
        &lt;p&gt;So you&amp;rsquo;re sending dates through ports in your Elm application, and things are getting pretty confusing.
You send in a date, and you get&amp;hellip;&lt;/p&gt;

&lt;pre&gt;&lt;code class=&#34;language-elm&#34;&gt;Err &amp;quot;Expecting a String a _.date but instead got \&amp;quot;2017-05-01T12:45:00.000Z\&amp;quot;&amp;quot;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Wait, what?
Isn&amp;rsquo;t that a string already?
What&amp;rsquo;s going wrong here?&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;
        &lt;hr /&gt;
        &lt;p&gt;&lt;a href="https://www.brianthicks.com/post/2017/05/01/sending-dates-through-elm-ports/"&gt;Continue Reading&lt;/a&gt;&lt;/p&gt;
      </description>
    </item>
    
    <item>
      <title>Add Safety to Your Elm JSON Encoders With Fuzz Testing</title>
      <link>https://www.brianthicks.com/post/2017/04/24/add-safety-to-your-elm-json-encoders-with-fuzz-testing/</link>
      <pubDate>Mon, 24 Apr 2017 09:00:00 -0600</pubDate>
      <author>brian@brianthicks.com (Brian Hicks)</author>
      <guid>https://www.brianthicks.com/post/2017/04/24/add-safety-to-your-elm-json-encoders-with-fuzz-testing/</guid>
      <description>
        &lt;p&gt;&lt;a href="https://www.brianthicks.com/post/2017/04/24/add-safety-to-your-elm-json-encoders-with-fuzz-testing/"&gt;&lt;img src="https://www.brianthicks.com/images/use-fuzz-tests-to-add-safety-to-your-elm-json-decoders-with-title.png" alt="Add Safety to Your Elm JSON Encoders With Fuzz Testing" /&gt;&lt;/a&gt;&lt;/p&gt;
        &lt;p&gt;How do you keep your JSON encoders, decoders, and model in sync?
You can skip fields in your encoder, right?
But should you?
And what about when you add new fields?
Decoders are a little easier, but you have to sync them up with your encoders or you&amp;rsquo;ll lose data.
And the worst part is that we can&amp;rsquo;t rely on the compiler to catch these classes of errors&amp;hellip; argh!&lt;/p&gt;

&lt;p&gt;This is a perfect situation for property tests (fuzz tests in &lt;code&gt;elm-test&lt;/code&gt; lingo.)
The test system will keep us honest by giving us random values to test with.
You can assert that encoders and decoders mirror each other, and add a bit more safety to your app.&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;
        &lt;hr /&gt;
        &lt;p&gt;&lt;a href="https://www.brianthicks.com/post/2017/04/24/add-safety-to-your-elm-json-encoders-with-fuzz-testing/"&gt;Continue Reading&lt;/a&gt;&lt;/p&gt;
      </description>
    </item>
    
    <item>
      <title>How do I get JSON out of a port?</title>
      <link>https://www.brianthicks.com/post/2017/03/06/how-do-i-get-json-out-of-a-port/</link>
      <pubDate>Mon, 06 Mar 2017 08:00:00 -0600</pubDate>
      <author>brian@brianthicks.com (Brian Hicks)</author>
      <guid>https://www.brianthicks.com/post/2017/03/06/how-do-i-get-json-out-of-a-port/</guid>
      <description>
        &lt;p&gt;&lt;a href="https://www.brianthicks.com/post/2017/03/06/how-do-i-get-json-out-of-a-port/"&gt;&lt;img src="https://www.brianthicks.com/images/port-by-charlie-hang-with-title.png" alt="How do I get JSON out of a port?" /&gt;&lt;/a&gt;&lt;/p&gt;
        &lt;p&gt;Working with ports can be awkward.
You&amp;rsquo;re really limited as to what values you can send through, so how do you get objects?
Easy: write a JSON Decoder!&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;
        &lt;hr /&gt;
        &lt;p&gt;&lt;a href="https://www.brianthicks.com/post/2017/03/06/how-do-i-get-json-out-of-a-port/"&gt;Continue Reading&lt;/a&gt;&lt;/p&gt;
      </description>
    </item>
    
    <item>
      <title>Introducing elm-benchmark</title>
      <link>https://www.brianthicks.com/post/2017/02/27/introducing-elm-benchmark/</link>
      <pubDate>Mon, 27 Feb 2017 09:00:00 -0600</pubDate>
      <author>brian@brianthicks.com (Brian Hicks)</author>
      <guid>https://www.brianthicks.com/post/2017/02/27/introducing-elm-benchmark/</guid>
      <description>
        &lt;p&gt;&lt;a href="https://www.brianthicks.com/post/2017/02/27/introducing-elm-benchmark/"&gt;&lt;img src="https://www.brianthicks.com/images/bench-by-will-paterson-with-title.png" alt="Introducing elm-benchmark" /&gt;&lt;/a&gt;&lt;/p&gt;
        &lt;p&gt;After the &lt;a href=&#34;https://www.brianthicks.com/guide/functional-sets/1/&#34;&gt;sets series&lt;/a&gt; finished, I got really curious&amp;hellip;
How fast were these sets, exactly?
I had to shave a lot of yaks to answer that question, but to sum up: Elm now has a &lt;a href=&#34;http://package.elm-lang.org/packages/BrianHicks/elm-benchmark/latest&#34;&gt;benchmarking library&lt;/a&gt;!
Let&amp;rsquo;s take a look at how to use it!&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;
        &lt;hr /&gt;
        &lt;p&gt;&lt;a href="https://www.brianthicks.com/post/2017/02/27/introducing-elm-benchmark/"&gt;Continue Reading&lt;/a&gt;&lt;/p&gt;
      </description>
    </item>
    
    <item>
      <title>Functional Sets, Part 9: Wrap-up</title>
      <link>https://www.brianthicks.com/guide/functional-sets/9/</link>
      <pubDate>Mon, 06 Feb 2017 09:00:00 +0000</pubDate>
      <author>brian@brianthicks.com (Brian Hicks)</author>
      <guid>https://www.brianthicks.com/guide/functional-sets/9/</guid>
      <description>
        
        &lt;p&gt;Our Set implementation is done!
We just have a few things to wrap up.&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;
        &lt;hr /&gt;
        &lt;p&gt;&lt;a href="https://www.brianthicks.com/guide/functional-sets/9/"&gt;Continue Reading&lt;/a&gt;&lt;/p&gt;
      </description>
    </item>
    
    <item>
      <title>Functional Sets, Part 8: Map</title>
      <link>https://www.brianthicks.com/guide/functional-sets/8/</link>
      <pubDate>Mon, 30 Jan 2017 09:00:00 -0600</pubDate>
      <author>brian@brianthicks.com (Brian Hicks)</author>
      <guid>https://www.brianthicks.com/guide/functional-sets/8/</guid>
      <description>
        
        &lt;p&gt;Now that we have &lt;a href=&#34;https://www.brianthicks.com/guide/functional-sets/7/&#34;&gt;filter and friends&lt;/a&gt;, we&amp;rsquo;re almost done with our &lt;code&gt;Set&lt;/code&gt; implementation.
Once we have &lt;code&gt;map&lt;/code&gt;, we&amp;rsquo;ll be done!&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;
        &lt;hr /&gt;
        &lt;p&gt;&lt;a href="https://www.brianthicks.com/guide/functional-sets/8/"&gt;Continue Reading&lt;/a&gt;&lt;/p&gt;
      </description>
    </item>
    
    <item>
      <title>Functional Sets, Part 7: Filter, Diff, and Intersect</title>
      <link>https://www.brianthicks.com/guide/functional-sets/7/</link>
      <pubDate>Mon, 23 Jan 2017 09:00:00 -0600</pubDate>
      <author>brian@brianthicks.com (Brian Hicks)</author>
      <guid>https://www.brianthicks.com/guide/functional-sets/7/</guid>
      <description>
        
        &lt;p&gt;This time, let&amp;rsquo;s look at &lt;code&gt;filter.&lt;/code&gt;
It does the same thing as &lt;code&gt;List.filter&lt;/code&gt;, except it operates on a &lt;code&gt;Set&lt;/code&gt; instead of a &lt;code&gt;List&lt;/code&gt;.
We&amp;rsquo;ll have it take a function that checks whether we should include a value and use the output of that function to filter the values from the set.&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;
        &lt;hr /&gt;
        &lt;p&gt;&lt;a href="https://www.brianthicks.com/guide/functional-sets/7/"&gt;Continue Reading&lt;/a&gt;&lt;/p&gt;
      </description>
    </item>
    
    <item>
      <title>State of Elm 2017</title>
      <link>https://www.brianthicks.com/post/2017/01/18/state-of-elm-2017/</link>
      <pubDate>Wed, 18 Jan 2017 11:38:00 -0600</pubDate>
      <author>brian@brianthicks.com (Brian Hicks)</author>
      <guid>https://www.brianthicks.com/post/2017/01/18/state-of-elm-2017/</guid>
      <description>
        &lt;p&gt;&lt;a href="https://www.brianthicks.com/post/2017/01/18/state-of-elm-2017/"&gt;&lt;img src="https://www.brianthicks.com/images/nyc-by-anthony-delanoix-with-title.png" alt="State of Elm 2017" /&gt;&lt;/a&gt;&lt;/p&gt;
        &lt;p&gt;The &lt;a href=&#34;https://www.brianthicks.com/state-of-elm/2017/&#34;&gt;State of Elm 2017&lt;/a&gt; Survey is now live, please go take it.
It will run through Friday, February 24, and the results will be available sometime after that.&lt;/p&gt;

&lt;p&gt;Here are the &lt;a href=&#34;https://www.brianthicks.com/post/2016/04/22/state-of-elm-2016-results/&#34;&gt;results from last year&lt;/a&gt;, or &lt;a href=&#34;https://speakerdeck.com/brianhicks/state-of-elm-2016&#34;&gt;as a slide deck&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;
        &lt;hr /&gt;
        &lt;p&gt;&lt;a href="https://www.brianthicks.com/post/2017/01/18/state-of-elm-2017/"&gt;Continue Reading&lt;/a&gt;&lt;/p&gt;
      </description>
    </item>
    
    <item>
      <title>Functional Sets, Part 6: Union and Remove</title>
      <link>https://www.brianthicks.com/guide/functional-sets/6/</link>
      <pubDate>Mon, 16 Jan 2017 09:00:00 -0600</pubDate>
      <author>brian@brianthicks.com (Brian Hicks)</author>
      <guid>https://www.brianthicks.com/guide/functional-sets/6/</guid>
      <description>
        
        &lt;p&gt;With &lt;a href=&#34;https://www.brianthicks.com/guide/functional-sets/5/&#34;&gt;folds&lt;/a&gt; done, our sets are shaping up.
Folds unlock some more interesting things for us.
Namely: unions!&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;
        &lt;hr /&gt;
        &lt;p&gt;&lt;a href="https://www.brianthicks.com/guide/functional-sets/6/"&gt;Continue Reading&lt;/a&gt;&lt;/p&gt;
      </description>
    </item>
    
  </channel>
</rss>
