<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
    <title></title>
    <link rel="self" type="application/atom+xml" href="https://bitemyapp.com/atom.xml"/>
    <link rel="alternate" type="text/html" href="https://bitemyapp.com"/>
    <generator uri="https://www.getzola.org/">Zola</generator>
    <updated>2025-09-14T00:00:00+00:00</updated>
    <id>https://bitemyapp.com/atom.xml</id>
    <entry xml:lang="en">
        <title>Moonbit developers are lying to you</title>
        <published>2025-09-14T00:00:00+00:00</published>
        <updated>2025-09-14T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bitemyapp.com/blog/moonbit-developers-are-lying-to-you/"/>
        <id>https://bitemyapp.com/blog/moonbit-developers-are-lying-to-you/</id>
        
        <summary type="html">&lt;p&gt;The Moonbit team recently published a blog post claiming their language runs &quot;30% faster than Rust&quot; for FFT workloads. This is a lie by omission. They benchmarked against a deliberately crippled Rust implementation that no competent programmer would write.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;The Moonbit FFT benchmark used a crippled Rust baseline and used to claim their language was faster than Rust.&lt;&#x2F;li&gt;
&lt;li&gt;My corrected Rust implementation is &lt;strong&gt;3.2–3.4×&lt;&#x2F;strong&gt; faster than Moonbit on the same benchmark.&lt;&#x2F;li&gt;
&lt;li&gt;In &lt;strong&gt;5 minutes of prompting GPT-5&lt;&#x2F;strong&gt;, I produced a Rust version already &lt;strong&gt;2.33×&lt;&#x2F;strong&gt; faster than Moonbit.&lt;&#x2F;li&gt;
&lt;li&gt;Zero PRs merged or replied to by the team at time of writing. There are PRs fixing the Rust benchmark older than their &lt;a href=&quot;https:&#x2F;&#x2F;x.com&#x2F;moonbitlang&#x2F;status&#x2F;1963580305102836099&quot;&gt;tweet announcing Moonbit was faster than Rust&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;Moonbit devs are programming language developers that have marketed their language aggressively on the basis of performance for awhile now, they know better than this.&lt;&#x2F;li&gt;
&lt;li&gt;Moonbit should retract or clearly amend their blog post with corrected Rust baseline results. Including the qualification that their benchmark is a naive Cooley-Tukey FFT benchmark and nothing else.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Two memory issues from the last two weeks</title>
        <published>2024-12-10T00:00:00+00:00</published>
        <updated>2024-12-10T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bitemyapp.com/blog/two-memory-bugs-two-weeks/"/>
        <id>https://bitemyapp.com/blog/two-memory-bugs-two-weeks/</id>
        
        <summary type="html">&lt;p&gt;Okay maybe they don&#x27;t qualify as actual memory bugs, but they were annoying and had memory as a common theme. One of them by itself doesn&#x27;t merit a blog post so I bundled them together.&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Rebuilding Rust (Leptos) apps quickly</title>
        <published>2024-12-01T00:00:00+00:00</published>
        <updated>2024-12-01T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bitemyapp.com/blog/rebuilding-rust-leptos-quickly/"/>
        <id>https://bitemyapp.com/blog/rebuilding-rust-leptos-quickly/</id>
        
        <summary type="html">&lt;p&gt;I&#x27;m working on a side project that is written in Rust on the backend and the frontend. The frontend component is in Leptos. Our app is about 20kLOC in total, so it takes a little time.&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>The cost of hosting is too damn high</title>
        <published>2024-11-28T00:00:00+00:00</published>
        <updated>2024-11-28T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bitemyapp.com/blog/cost-too-high/"/>
        <id>https://bitemyapp.com/blog/cost-too-high/</id>
        
        <summary type="html">&lt;p&gt;I recently migrated a side project from DigitalOcean to some dedicated servers. I thought that I would offer some context and examples for why.&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Routines in caring for children</title>
        <published>2024-10-05T00:00:00+00:00</published>
        <updated>2024-10-05T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bitemyapp.com/blog/family-routines/"/>
        <id>https://bitemyapp.com/blog/family-routines/</id>
        
        <summary type="html">&lt;p&gt;I have 4 children aged 4, 3, almost 2, and 19 weeks. Parents are increasingly isolated from each other socially so it&#x27;s harder to compare tactics and strategies for caregiving. I want to share a run-down of how my wife and I care for our children and what has seemed to work and what has not.&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Obtaining happiness by using Diesel Async in anger</title>
        <published>2024-09-02T00:00:00+00:00</published>
        <updated>2024-09-02T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bitemyapp.com/blog/diesel-async-in-anger/"/>
        <id>https://bitemyapp.com/blog/diesel-async-in-anger/</id>
        
        <summary type="html">&lt;p&gt;I&#x27;ve been getting some questions from people about how to use Diesel and particularly &lt;code&gt;diesel-async&lt;&#x2F;code&gt; for interacting with SQL databases in Rust. I thought I&#x27;d write up a quick post with some patterns and examples.&lt;&#x2F;p&gt;
&lt;p&gt;The example project on GitHub for this post is located at: &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;bitemyapp&#x2F;better-living-through-petroleum&#x2F;tree&#x2F;blog&#x2F;diesel-async-in-anger&quot;&gt;https:&#x2F;&#x2F;github.com&#x2F;bitemyapp&#x2F;better-living-through-petroleum&#x2F;tree&#x2F;blog&#x2F;diesel-async-in-anger&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;The &lt;code&gt;blog&#x2F;diesel-async-in-anger&lt;&#x2F;code&gt; Git tag is so you can see the version of the code that I&#x27;m using for this post.&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Notes on Luca Palmieri&#x27;s Zero to Production in Rust</title>
        <published>2022-06-25T00:00:00+00:00</published>
        <updated>2022-06-25T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bitemyapp.com/blog/notes-on-zero2prod-rust/"/>
        <id>https://bitemyapp.com/blog/notes-on-zero2prod-rust/</id>
        
        <summary type="html">&lt;p&gt;I bought Luca Palmieri&#x27;s book on the recommendation of a colleague and wanted to share my own thoughts on it as a production Rust user. I offer my thoughts as I go through the book linearly. I intentionally don&#x27;t go out of my way to contextualize my commentary as this is not intended to be a substitute for Luca&#x27;s excellent book. Also, it saves me time writing this blog post.&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Why I converted</title>
        <published>2021-05-14T00:00:00+00:00</published>
        <updated>2021-05-14T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bitemyapp.com/blog/why-i-converted/"/>
        <id>https://bitemyapp.com/blog/why-i-converted/</id>
        
        <summary type="html">&lt;p&gt;I was received into the Catholic Church on the Easter Vigil of 2019.&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Why I use and prefer GitLab CI</title>
        <published>2019-10-10T00:00:00+00:00</published>
        <updated>2019-10-10T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bitemyapp.com/blog/why-i-use-gitlab-ci/"/>
        <id>https://bitemyapp.com/blog/why-i-use-gitlab-ci/</id>
        
        <summary type="html">&lt;p&gt;&lt;a href=&quot;&#x2F;blog&#x2F;speeding-up-builds&#x2F;&quot;&gt;In the past, I talked about how to make your CI builds faster using Drone CI&lt;&#x2F;a&gt;. I don&#x27;t use DroneCI any more and haven&#x27;t for a couple years now so I wanted to talk about what I use now.&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Abusing instance local functional dependencies for nicer number literals</title>
        <published>2019-06-24T00:00:00+00:00</published>
        <updated>2019-06-24T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bitemyapp.com/blog/instance-local-fundeps/"/>
        <id>https://bitemyapp.com/blog/instance-local-fundeps/</id>
        
        <summary type="html">&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;lobste.rs&#x2F;s&#x2F;6pjc3y&#x2F;kilobyte_constants_simple_beautiful#c_uy4afe&quot;&gt;I demonstrated how to make kilobyte&#x2F;megabyte constants in Haskell&lt;&#x2F;a&gt; and a Lobsters user asked how it worked. This is a bloggification of my reply to them explaining the trick.&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Wrapping up Haskell Book</title>
        <published>2018-10-03T00:00:00+00:00</published>
        <updated>2018-10-03T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bitemyapp.com/blog/wrapping-up-haskellbook/"/>
        <id>https://bitemyapp.com/blog/wrapping-up-haskellbook/</id>
        
        <summary type="html">&lt;p&gt;I&#x27;d like to summarize some of the background to &lt;a href=&quot;http:&#x2F;&#x2F;haskellbook.com&quot;&gt;Haskell Programming from First Principles&#x27;&lt;&#x2F;a&gt; development and finalization.&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>How I stream myself coding</title>
        <published>2018-03-14T00:00:00+00:00</published>
        <updated>2018-03-14T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bitemyapp.com/blog/how-i-stream-coding/"/>
        <id>https://bitemyapp.com/blog/how-i-stream-coding/</id>
        
        <summary type="html">&lt;p&gt;Alright so I&#x27;ve been uploading streamed videos of myself working on programming projects for &lt;a href=&quot;https:&#x2F;&#x2F;youtube.com&#x2F;c&#x2F;bitemyapp&quot;&gt;awhile now&lt;&#x2F;a&gt;. I occasionally get asked about my setup for this, so I thought I would explain the tools I use. This might be particularly valuable as I am primarily a Linux user where some of the kit for this can be kinda rough. Further, I am very picky about my tools and ergonomics so I didn&#x27;t really want to make any sacrifices there in order to stream.&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>How I make stew</title>
        <published>2017-10-29T00:00:00+00:00</published>
        <updated>2017-10-29T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bitemyapp.com/blog/how-i-make-stew/"/>
        <id>https://bitemyapp.com/blog/how-i-make-stew/</id>
        
        <summary type="html">&lt;!--
    A friend of mine asked how I do crockpot&#x2F;stew stuff.
    After thinking about it for awhile I thought it would
    be worth writing a post about to explain my process as
    I do not hold very tightly to specific recipes.
--&gt;
&lt;p&gt;I think the first thing my mother taught me to cook was Kraft Mac-n-Cheese at age 9. Fortunately, I&#x27;ve been able to move past that since then. My repertoire is a bit limited but I like to think that by zeroing in on specific kinds of meals, I&#x27;m able to make them go a bit farther. A friend of mine asked how I do crockpot recipes and after stewing on it for awhile I thought I would write a post explaining my thought process.&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Comparing Persistent with Ecto and ActiveRecord</title>
        <published>2017-10-06T00:00:00+00:00</published>
        <updated>2017-10-06T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bitemyapp.com/blog/persistent-ecto-activerecord/"/>
        <id>https://bitemyapp.com/blog/persistent-ecto-activerecord/</id>
        
        <summary type="html">&lt;p&gt;Rejected title: You&#x27;re not special&lt;&#x2F;p&gt;
&lt;p&gt;I saw this article comparing Ecto and ActiveRecord: &lt;a href=&quot;https:&#x2F;&#x2F;www.dailydrip.com&#x2F;blog&#x2F;ecto-vs-activerecord.html&quot;&gt;https:&#x2F;&#x2F;www.dailydrip.com&#x2F;blog&#x2F;ecto-vs-activerecord.html&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;I thought I would track alongside that post and show what the equivalent code looks like if you&#x27;re using the &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;yesodweb&#x2F;persistent&quot;&gt;Persistent&lt;&#x2F;a&gt; Haskell library.&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Alternatives to Typed Holes for talking to your compiler</title>
        <published>2017-09-23T00:00:00+00:00</published>
        <updated>2017-09-23T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bitemyapp.com/blog/please-stop-using-typed-holes/"/>
        <id>https://bitemyapp.com/blog/please-stop-using-typed-holes/</id>
        
        <summary type="html">&lt;p&gt;Rejected title: Type Praxis&lt;&#x2F;p&gt;
&lt;p&gt;I frequently see people recommend that others use typed holes. I think people are more apt to recommend typed holes than the alternatives because it&#x27;s a bespoke feature intended to enable discovering the type of a sub-expression more easily. Which is fair enough, except it doesn&#x27;t really have a good use-case! I will demonstrate in this post why.&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>What a Haskell Study Group is Not</title>
        <published>2017-05-03T00:00:00+00:00</published>
        <updated>2017-05-03T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bitemyapp.com/blog/what-a-haskell-study-group-is-not/"/>
        <id>https://bitemyapp.com/blog/what-a-haskell-study-group-is-not/</id>
        
        <summary type="html">&lt;p&gt;This article is by &lt;a href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;sjsyrek&quot;&gt;Steven Syrek&lt;&#x2F;a&gt;. I&#x27;m reposting it here because I endorse what he&#x27;s saying. I believe Steven brings a valuable perspective on the &lt;a href=&quot;http:&#x2F;&#x2F;haskellbook.com&quot;&gt;haskell book&lt;&#x2F;a&gt;, reading groups, and education in general.&lt;&#x2F;p&gt;
&lt;p&gt;Steven posted &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@sjsyrek&#x2F;what-a-haskell-study-group-is-not-470f4aeb9673&quot;&gt;this article on his Medium&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;He has also written some &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@sjsyrek&#x2F;some-notes-on-haskell-pedagogy-de43281b1a5c&quot;&gt;extended notes on pedagogy tied to this post here&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>A review of Learn Python the Hard Way, 3rd ed</title>
        <published>2017-03-25T00:00:00+00:00</published>
        <updated>2017-03-25T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bitemyapp.com/blog/review-learn-python-hard-way/"/>
        <id>https://bitemyapp.com/blog/review-learn-python-hard-way/</id>
        
        <summary type="html">&lt;p&gt;As a break from usual, I thought I would review Zed Shaw&#x27;s Learn Python the Hard Way. I&#x27;ve had several beginners to programming ask me what they should use to learn and Shaw&#x27;s book frequently comes up. I&#x27;ve looked over his materials before when they were a free website but I wanted to see what the current published version was like.&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>The Hashrocket websocket shootout in Haskell</title>
        <published>2016-09-03T00:00:00+00:00</published>
        <updated>2016-09-03T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bitemyapp.com/blog/websocket-shootout-haskell/"/>
        <id>https://bitemyapp.com/blog/websocket-shootout-haskell/</id>
        
        <summary type="html">&lt;p&gt;I &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;hashrocket&#x2F;websocket-shootout&#x2F;pull&#x2F;14&quot;&gt;recently PR&#x27;d&lt;&#x2F;a&gt; a Haskell entry to Hashrocket&#x27;s &lt;a href=&quot;https:&#x2F;&#x2F;hashrocket.com&#x2F;blog&#x2F;posts&#x2F;websocket-shootout&quot;&gt;websocket shootout&lt;&#x2F;a&gt;. &lt;strike&gt;Haskell seemed to do a lot better than C++, Rust, Golang, Elixir, Erlang, NodeJS, Ruby MRI, and JRuby.&lt;&#x2F;strike&gt; Although the Haskell version has been since fixed, so I can no longer run the benchmark reliably on my machine, so any final results will have to come from Hashrocket running the unagi-chan variant.&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>How to use UUID values with Persistent and Yesod</title>
        <published>2016-06-15T00:00:00+00:00</published>
        <updated>2016-06-15T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bitemyapp.com/blog/uuids-with-persistent-yesod/"/>
        <id>https://bitemyapp.com/blog/uuids-with-persistent-yesod/</id>
        
        <summary type="html">&lt;p&gt;Some people find it trickier to store UUID values in their database with Persistent or to use UUID values in a Yesod web application than is really necessary. Here I&#x27;ll share some code from my work that demonstrates some patterns in applications that use Persistent or Yesod which should make it easier.&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Speeding up the automated building and testing of our Haskell projects</title>
        <published>2016-03-28T00:00:00+00:00</published>
        <updated>2016-03-28T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bitemyapp.com/blog/speeding-up-builds/"/>
        <id>https://bitemyapp.com/blog/speeding-up-builds/</id>
        
        <summary type="html">&lt;p&gt;I&#x27;m a big fan of using build servers to continually build and test the code I&#x27;m working on. I&#x27;m also a bit of a latency nut, so I like our builds to be &lt;em&gt;responsive&lt;&#x2F;em&gt;. To that end, I migrating our company away from CircleCI and yielded a 10x improvement to build times for my trouble.&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Haskell is not trivial, but it&#x27;s not unfair like Dark Souls either</title>
        <published>2016-02-06T00:00:00+00:00</published>
        <updated>2016-02-06T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bitemyapp.com/blog/haskell-is-not-trivial-not-unfair/"/>
        <id>https://bitemyapp.com/blog/haskell-is-not-trivial-not-unfair/</id>
        
        <summary type="html">&lt;p&gt;Someone wrote a blog post where they have trouble querying a web API in Haskell code. I walk through some examples for how to do so with increasing sophistication building up to some simple uses of &lt;code&gt;lens&lt;&#x2F;code&gt; and &lt;code&gt;lens-aeson&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Either and (,) in Haskell are not arbitrary</title>
        <published>2015-10-19T00:00:00+00:00</published>
        <updated>2015-10-19T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bitemyapp.com/blog/either-is-not-arbitrary/"/>
        <id>https://bitemyapp.com/blog/either-is-not-arbitrary/</id>
        
        <summary type="html">&lt;p&gt;Programmers don&#x27;t understand that it doesn&#x27;t matter &lt;em&gt;what&lt;&#x2F;em&gt; the default target is for a type like &lt;code&gt;Either&lt;&#x2F;code&gt; as long as there is one and it never changes. I go into some detail and justification of a programming language design that makes decisions like this inherent to the structure of the type rather than author&#x27;s (arbitrary and harmful) preference. The &lt;code&gt;Left&lt;&#x2F;code&gt; and &lt;code&gt;Right&lt;&#x2F;code&gt; of &lt;code&gt;Either&lt;&#x2F;code&gt; do not mean anything in and of themselves.&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Why we don&#x27;t chuck our readers into web apps</title>
        <published>2015-08-23T00:00:00+00:00</published>
        <updated>2015-08-23T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bitemyapp.com/blog/why-we-dont-chuck-readers-into-web-apps/"/>
        <id>https://bitemyapp.com/blog/why-we-dont-chuck-readers-into-web-apps/</id>
        
        <summary type="html">&lt;p&gt;Haskell programmers that often forget how hard it was to learn and use Haskell. They also forget that without the benefit of a code example that does precisely what one wants, it can be nearly impossible for someone to make forward progress unless they have a solid foundation in the language itself. We justify how this reality influences the way we write the &lt;a href=&quot;http:&#x2F;&#x2F;haskellbook.com&quot;&gt;Haskell Programming from first principles&lt;&#x2F;a&gt; book.&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Building a Haskell game</title>
        <published>2015-04-26T00:00:00+00:00</published>
        <updated>2015-04-26T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bitemyapp.com/blog/installing-a-haskell-game/"/>
        <id>https://bitemyapp.com/blog/installing-a-haskell-game/</id>
        
        <summary type="html">&lt;p&gt;Sometimes building a package with dependencies on OpenGL can be a little confusing for people new to Haskell. I will use a simple game on Hackage as an exercise for demonstrating how you might do this on Ubuntu. Note: this was written before &lt;a href=&quot;http:&#x2F;&#x2F;haskellstack.org&quot;&gt;Stack&lt;&#x2F;a&gt; was a thing.&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Functional Education</title>
        <published>2014-12-31T00:00:00+00:00</published>
        <updated>2014-12-31T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bitemyapp.com/blog/functional-education/"/>
        <id>https://bitemyapp.com/blog/functional-education/</id>
        
        <summary type="html">&lt;p&gt;I often get asked why I do or do not recommend a particular resource for learning Haskell. To save some time and to record more detail than I&#x27;ll remember off the top of my head, I&#x27;ve written a round-up of the issues with various resources and books people use to learn Haskell.&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Why are types useful?</title>
        <published>2014-12-03T00:00:00+00:00</published>
        <updated>2014-12-03T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bitemyapp.com/blog/why-are-types-useful/"/>
        <id>https://bitemyapp.com/blog/why-are-types-useful/</id>
        
        <summary type="html">&lt;p&gt;This is a simple follow-along with a Python tutorial, with my version in Haskell and a running commentary. I wrote this partly to hint at why one might want a statically typed language regardless of how one thinks prototyping is best done. It was also partly cathartic.&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>A URL shortener made literate</title>
        <published>2014-11-22T00:00:00+00:00</published>
        <updated>2014-11-22T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bitemyapp.com/blog/literate-url-shortener/"/>
        <id>https://bitemyapp.com/blog/literate-url-shortener/</id>
        
        <summary type="html">&lt;p&gt;This is a quasi-literate version of the very simple URL shortener I wrote in Haskell with Scotty.&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Code refactoring with pointfree style demoed via updateMap</title>
        <published>2014-11-19T00:00:00+00:00</published>
        <updated>2014-11-19T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bitemyapp.com/blog/update-map-in-haskell/"/>
        <id>https://bitemyapp.com/blog/update-map-in-haskell/</id>
        
        <summary type="html">&lt;p&gt;I answered a question on Stack Overflow that I thought might be worth sharing here so that others might get an idea of how to refactor code into point-free style.&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>How I Start: Haskell</title>
        <published>2014-11-18T00:00:00+00:00</published>
        <updated>2014-11-18T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bitemyapp.com/blog/how-i-start-haskell/"/>
        <id>https://bitemyapp.com/blog/how-i-start-haskell/</id>
        
        <summary type="html">&lt;p&gt;I wrote an article for &lt;a href=&quot;https:&#x2F;&#x2F;howistart.org&quot;&gt;howistart&lt;&#x2F;a&gt;. I&#x27;ve since updated it to use &lt;a href=&quot;http:&#x2F;&#x2F;haskellstack.org&quot;&gt;Stack&lt;&#x2F;a&gt; as well.&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Strong types and testing - in Haskell</title>
        <published>2014-11-18T00:00:00+00:00</published>
        <updated>2014-11-18T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bitemyapp.com/blog/strong-types-and-testing/"/>
        <id>https://bitemyapp.com/blog/strong-types-and-testing/</id>
        
        <summary type="html">&lt;p&gt;I respin an article originally written in Scala into Haskell, then veer off into the stratosphere.&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Parsing and rendering templates in Clojure &amp;amp; Haskell</title>
        <published>2014-10-02T00:00:00+00:00</published>
        <updated>2014-10-02T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bitemyapp.com/blog/parsing-and-rendering-templates-in-haskell/"/>
        <id>https://bitemyapp.com/blog/parsing-and-rendering-templates-in-haskell/</id>
        
        <summary type="html">&lt;p&gt;I rewrote somewhat difficult to understand templating code that was originally in Clojure into much simpler Haskell and yielded a large performance benefit for my trouble.&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>URL Shortener in 43 lines of Haskell</title>
        <published>2014-08-22T00:00:00+00:00</published>
        <updated>2014-08-22T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bitemyapp.com/blog/url-shortener-in-haskell/"/>
        <id>https://bitemyapp.com/blog/url-shortener-in-haskell/</id>
        
        <summary type="html">&lt;p&gt;Written in Scotty. The code is not great.&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Aeson with types that have lots of &#x27;maybes&#x27;, v2</title>
        <published>2014-07-31T00:00:00+00:00</published>
        <updated>2014-07-31T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bitemyapp.com/blog/aeson-with-uncertainty-revised/"/>
        <id>https://bitemyapp.com/blog/aeson-with-uncertainty-revised/</id>
        
        <summary type="html">&lt;p&gt;The previous edition of this post was cleaned up by a suggestion from another Haskeller. I share it with you here.&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Aeson with types that have lots of &#x27;maybes&#x27;</title>
        <published>2014-07-30T00:00:00+00:00</published>
        <updated>2014-07-30T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bitemyapp.com/blog/aeson-with-uncertainty/"/>
        <id>https://bitemyapp.com/blog/aeson-with-uncertainty/</id>
        
        <summary type="html">&lt;p&gt;Aeson is a real joy to use once you get into the swing of things, but there are some patterns out there that end-users are left to discover for themselves. One of those is how to deal with data that has a lot of instances of the &lt;code&gt;Maybe&lt;&#x2F;code&gt; type.&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Meditations on learning Haskell</title>
        <published>2014-04-29T00:00:00+00:00</published>
        <updated>2014-04-29T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bitemyapp.com/blog/meditations-on-learning-haskell/"/>
        <id>https://bitemyapp.com/blog/meditations-on-learning-haskell/</id>
        
        <summary type="html">&lt;p&gt;This is an extraction of a conversation between multiple Haskellers in an IRC channel. I&#x27;m not identifying who said what and the ordering will be more topical than temporal. I&#x27;ll add annotations for context as appropriate. I edited liberally.&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Parsing data of varying structure in Haskell with Aeson</title>
        <published>2014-04-17T00:00:00+00:00</published>
        <updated>2014-04-17T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bitemyapp.com/blog/parsing-nondeterministic-data-with-aeson-and-sum-types/"/>
        <id>https://bitemyapp.com/blog/parsing-nondeterministic-data-with-aeson-and-sum-types/</id>
        
        <summary type="html">&lt;p&gt;Need to parse data with varying structure? Once again we resort to our old friend for handling exclusive possibilities, the sum type.&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Nested user-defined types with Aeson</title>
        <published>2014-04-11T00:00:00+00:00</published>
        <updated>2014-04-11T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bitemyapp.com/blog/aeson-and-user-created-types/"/>
        <id>https://bitemyapp.com/blog/aeson-and-user-created-types/</id>
        
        <summary type="html">&lt;p&gt;Sometimes one knows only part of the structure to be parsed out of JSON ahead of time, with some of that structure being defined by a user or consumer of the API. The solution to this in general and when using Aeson to make the wrapper type parametric.&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Refactoring boilerplate from sum types</title>
        <published>2014-04-11T00:00:00+00:00</published>
        <updated>2014-04-11T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bitemyapp.com/blog/refactoring-boilerplate-from-maybe/"/>
        <id>https://bitemyapp.com/blog/refactoring-boilerplate-from-maybe/</id>
        
        <summary type="html">&lt;p&gt;A simple demonstration of extracting boilerplate from Aeson code handling a &lt;code&gt;Just&lt;&#x2F;code&gt; and a &lt;code&gt;Nothing&lt;&#x2F;code&gt; case of a &lt;code&gt;Maybe&lt;&#x2F;code&gt; value.&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Grokking sum types, value constructors, and type constructors</title>
        <published>2014-04-05T00:00:00+00:00</published>
        <updated>2014-04-05T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bitemyapp.com/blog/grokking-sums-and-constructors/"/>
        <id>https://bitemyapp.com/blog/grokking-sums-and-constructors/</id>
        
        <summary type="html">&lt;p&gt;Recently I had an experience where in the course of helping somebody with a problem, I developed an example that I thought would help people understand sum types, value constructors, and type constructors better.&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Mutable closures in Haskell and nested IO</title>
        <published>2014-03-25T00:00:00+00:00</published>
        <updated>2014-03-25T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bitemyapp.com/blog/when-nested-io-actions-are-wanted/"/>
        <id>https://bitemyapp.com/blog/when-nested-io-actions-are-wanted/</id>
        
        <summary type="html">&lt;p&gt;In my &lt;a href=&quot;&#x2F;posts&#x2F;2014-03-24-monads-bind-join-actions.html&quot;&gt;last post&lt;&#x2F;a&gt;, I described IO (IO ()) as being a sign you might&#x27;ve made a mistake unless you knew it was what you wanted. There are patterns which involve using a closed-over mutable reference for things like counters. This naturally leads to nested IO actions.&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Monads, lifting, join, and side-effecting actions.</title>
        <published>2014-03-24T00:00:00+00:00</published>
        <updated>2014-03-24T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bitemyapp.com/blog/monads-bind-join-actions/"/>
        <id>https://bitemyapp.com/blog/monads-bind-join-actions/</id>
        
        <summary type="html">&lt;p&gt;While playing around with querying &lt;a href=&quot;http:&#x2F;&#x2F;www.elasticsearch.org&#x2F;&quot;&gt;ElasticSearch&lt;&#x2F;a&gt; I bumped into something that I hadn&#x27;t really understood explicitly before about monads, nesting, and IO. Rather than blather on, I&#x27;m going to share a &quot;literate&quot; ghci session that demonstrates the point. Main editing change I made was to remove duplication in the output from querying the type &lt;code&gt;:t&lt;&#x2F;code&gt; in ghci.&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Using shebang and lein-exec to write Clojure scripts that can use dependencies</title>
        <published>2013-02-18T00:00:00+00:00</published>
        <updated>2013-02-18T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bitemyapp.com/blog/shebang-lein-exec-scripts-dependencies/"/>
        <id>https://bitemyapp.com/blog/shebang-lein-exec-scripts-dependencies/</id>
        
        <summary type="html">&lt;p&gt;A brief demonstration of how to run Clojure programs like scripts with &lt;code&gt;leiningen&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Using drip for Clojure scripts (non-Leiningen)</title>
        <published>2013-02-17T00:00:00+00:00</published>
        <updated>2013-02-17T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bitemyapp.com/blog/drip-clojure-scripts/"/>
        <id>https://bitemyapp.com/blog/drip-clojure-scripts/</id>
        
        <summary type="html">&lt;p&gt;Using drip to run Clojure code like a script.&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>February Book Log</title>
        <published>2013-02-14T00:00:00+00:00</published>
        <updated>2013-02-14T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bitemyapp.com/blog/february-book-log/"/>
        <id>https://bitemyapp.com/blog/february-book-log/</id>
        
        <summary type="html">&lt;p&gt;It&#x27;s Valentine&#x27;s Day 2013 and since January 2013 I&#x27;ve read the following books.&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>OS X fsevent fatal error &#x27;stdio.h&#x27; file not found</title>
        <published>2012-07-01T00:00:00+00:00</published>
        <updated>2012-07-01T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bitemyapp.com/blog/fsevent-fatal-error-stdio/"/>
        <id>https://bitemyapp.com/blog/fsevent-fatal-error-stdio/</id>
        
        <summary type="html">&lt;p&gt;Getting the following error on Mac OS X? Read on.&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Fixing arrow keys in iTerm and Terminal.app for Mac OS X</title>
        <published>2012-06-01T00:00:00+00:00</published>
        <updated>2012-06-01T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bitemyapp.com/blog/arrow-keys-iterm-mac-osx/"/>
        <id>https://bitemyapp.com/blog/arrow-keys-iterm-mac-osx/</id>
        
        <summary type="html">&lt;p&gt;I am a user of irssi over GNU Screen + ssh as well as locally, and I tend to use Emacs style text movements in bash, so need my ctrl and alt&#x2F;option keys to work more or less as they do in Linux.&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Node.js, Requests, Connections, ending, and closing</title>
        <published>2012-05-01T00:00:00+00:00</published>
        <updated>2012-05-01T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bitemyapp.com/blog/nodejs-requests-conns-ending-closing/"/>
        <id>https://bitemyapp.com/blog/nodejs-requests-conns-ending-closing/</id>
        
        <summary type="html">&lt;p&gt;You close connections, you end requests.&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Fixing syntax highlighting in Jekyll</title>
        <published>2012-04-02T00:00:00+00:00</published>
        <updated>2012-04-02T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bitemyapp.com/blog/syntax-highlighting-jekyll/"/>
        <id>https://bitemyapp.com/blog/syntax-highlighting-jekyll/</id>
        
        <summary type="html">&lt;p&gt;When I was getting the Jekyll version of my site rolling, I ran into some problems with how RedCloth, liquid, and pygments were interacting. What follows is the error that was caused.&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>How to resolve &#x27;Could not find module XMonad.Actions.Volume&#x27;</title>
        <published>2012-03-01T00:00:00+00:00</published>
        <updated>2012-03-01T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bitemyapp.com/blog/find-module-xmonad-volume/"/>
        <id>https://bitemyapp.com/blog/find-module-xmonad-volume/</id>
        
        <summary type="html">&lt;p&gt;You need to install &lt;code&gt;xmonad-extras&lt;&#x2F;code&gt; from Hackage as the volume control functions are not included by default in any standard XMonad install. Below is the script for getting it installed.&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Getting w3m to work with Emacs 23 in Ubuntu 11.10</title>
        <published>2012-02-01T00:00:00+00:00</published>
        <updated>2012-02-01T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bitemyapp.com/blog/emacs-w3m/"/>
        <id>https://bitemyapp.com/blog/emacs-w3m/</id>
        
        <summary type="html">&lt;p&gt;I encountered some issues getting Emacs 23 working on Ubuntu 11.10 and I wanted to chronicle my travails in case someone else bumped into this. I tripped into this error after installing &lt;code&gt;w3m-el-snapshot&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Why the poor are poor</title>
        <published>2012-01-01T00:00:00+00:00</published>
        <updated>2012-01-01T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bitemyapp.com/blog/why-poor/"/>
        <id>https://bitemyapp.com/blog/why-poor/</id>
        
        <summary type="html">&lt;p&gt;Analysts and economists like to fixate on two metrics for personal finance, income and net worth. They are in some sense a measurement of slope, and of the volume under the curve minus spending and debt. I don&#x27;t think either are a meaningful gauge for really understanding why the poor are frequently stuck being poor.&lt;&#x2F;p&gt;
</summary>
        
    </entry>
</feed>
