| CARVIEW |
Select Language
HTTP/2 200
date: Fri, 16 Jan 2026 00:11:13 GMT
content-type: application/xml
x-amz-id-2: FJugqFIE2mOiI4G2qYPEP8+y0CJfG0+kPWludzt+RdJ2lXjMgetHRWvLZ5/mo7CDvB+jin1RUU8=
x-amz-request-id: 1F5KG60KGEERP84Z
last-modified: Mon, 15 Sep 2025 15:05:05 GMT
report-to: {"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=nrAOlwkm71Ew359jvaHaT0Zvz6CblwonOZ1zvzDH7DP8k3SUZktNZ%2BQHIVwXXbuqe1DkYD%2BvEu0I%2F2KowFTGit5JF7gq8oWdqPRkpJ4%3D"}]}
server: cloudflare
cf-cache-status: DYNAMIC
nel: {"report_to":"cf-nel","success_fraction":0.0,"max_age":604800}
etag: W/"25128ed431976b3c98ab877a5dbed3ab"
content-encoding: gzip
cf-ray: 9be964f0ef8248d7-BOM
alt-svc: h3=":443"; ma=86400
Zola
2025-09-14T00:00:00+00:00
https://bitemyapp.com/atom.xml
Moonbit developers are lying to you
2025-09-14T00:00:00+00:00
2025-09-14T00:00:00+00:00
Unknown
https://bitemyapp.com/blog/moonbit-developers-are-lying-to-you/
<p>The Moonbit team recently published a blog post claiming their language runs "30% faster than Rust" for FFT workloads. This is a lie by omission. They benchmarked against a deliberately crippled Rust implementation that no competent programmer would write.</p>
<ul>
<li>The Moonbit FFT benchmark used a crippled Rust baseline and used to claim their language was faster than Rust.</li>
<li>My corrected Rust implementation is <strong>3.2–3.4×</strong> faster than Moonbit on the same benchmark.</li>
<li>In <strong>5 minutes of prompting GPT-5</strong>, I produced a Rust version already <strong>2.33×</strong> faster than Moonbit.</li>
<li>Zero PRs merged or replied to by the team at time of writing. There are PRs fixing the Rust benchmark older than their <a href="https://x.com/moonbitlang/status/1963580305102836099">tweet announcing Moonbit was faster than Rust</a>.</li>
<li>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.</li>
<li>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.</li>
</ul>
Two memory issues from the last two weeks
2024-12-10T00:00:00+00:00
2024-12-10T00:00:00+00:00
Unknown
https://bitemyapp.com/blog/two-memory-bugs-two-weeks/
<p>Okay maybe they don't qualify as actual memory bugs, but they were annoying and had memory as a common theme. One of them by itself doesn't merit a blog post so I bundled them together.</p>
Rebuilding Rust (Leptos) apps quickly
2024-12-01T00:00:00+00:00
2024-12-01T00:00:00+00:00
Unknown
https://bitemyapp.com/blog/rebuilding-rust-leptos-quickly/
<p>I'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.</p>
The cost of hosting is too damn high
2024-11-28T00:00:00+00:00
2024-11-28T00:00:00+00:00
Unknown
https://bitemyapp.com/blog/cost-too-high/
<p>I recently migrated a side project from DigitalOcean to some dedicated servers. I thought that I would offer some context and examples for why.</p>
Routines in caring for children
2024-10-05T00:00:00+00:00
2024-10-05T00:00:00+00:00
Unknown
https://bitemyapp.com/blog/family-routines/
<p>I have 4 children aged 4, 3, almost 2, and 19 weeks. Parents are increasingly isolated from each other socially so it'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.</p>
Obtaining happiness by using Diesel Async in anger
2024-09-02T00:00:00+00:00
2024-09-02T00:00:00+00:00
Unknown
https://bitemyapp.com/blog/diesel-async-in-anger/
<p>I've been getting some questions from people about how to use Diesel and particularly <code>diesel-async</code> for interacting with SQL databases in Rust. I thought I'd write up a quick post with some patterns and examples.</p>
<p>The example project on GitHub for this post is located at: <a href="https://github.com/bitemyapp/better-living-through-petroleum/tree/blog/diesel-async-in-anger">https://github.com/bitemyapp/better-living-through-petroleum/tree/blog/diesel-async-in-anger</a></p>
<p>The <code>blog/diesel-async-in-anger</code> Git tag is so you can see the version of the code that I'm using for this post.</p>
Notes on Luca Palmieri's Zero to Production in Rust
2022-06-25T00:00:00+00:00
2022-06-25T00:00:00+00:00
Unknown
https://bitemyapp.com/blog/notes-on-zero2prod-rust/
<p>I bought Luca Palmieri'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't go out of my way to contextualize my commentary as this is not intended to be a substitute for Luca's excellent book. Also, it saves me time writing this blog post.</p>
Why I converted
2021-05-14T00:00:00+00:00
2021-05-14T00:00:00+00:00
Unknown
https://bitemyapp.com/blog/why-i-converted/
<p>I was received into the Catholic Church on the Easter Vigil of 2019.</p>
Why I use and prefer GitLab CI
2019-10-10T00:00:00+00:00
2019-10-10T00:00:00+00:00
Unknown
https://bitemyapp.com/blog/why-i-use-gitlab-ci/
<p><a href="/blog/speeding-up-builds/">In the past, I talked about how to make your CI builds faster using Drone CI</a>. I don't use DroneCI any more and haven't for a couple years now so I wanted to talk about what I use now.</p>
Abusing instance local functional dependencies for nicer number literals
2019-06-24T00:00:00+00:00
2019-06-24T00:00:00+00:00
Unknown
https://bitemyapp.com/blog/instance-local-fundeps/
<p><a href="https://lobste.rs/s/6pjc3y/kilobyte_constants_simple_beautiful#c_uy4afe">I demonstrated how to make kilobyte/megabyte constants in Haskell</a> and a Lobsters user asked how it worked. This is a bloggification of my reply to them explaining the trick.</p>
Wrapping up Haskell Book
2018-10-03T00:00:00+00:00
2018-10-03T00:00:00+00:00
Unknown
https://bitemyapp.com/blog/wrapping-up-haskellbook/
<p>I'd like to summarize some of the background to <a href="http://haskellbook.com">Haskell Programming from First Principles'</a> development and finalization.</p>
How I stream myself coding
2018-03-14T00:00:00+00:00
2018-03-14T00:00:00+00:00
Unknown
https://bitemyapp.com/blog/how-i-stream-coding/
<p>Alright so I've been uploading streamed videos of myself working on programming projects for <a href="https://youtube.com/c/bitemyapp">awhile now</a>. 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't really want to make any sacrifices there in order to stream.</p>
How I make stew
2017-10-29T00:00:00+00:00
2017-10-29T00:00:00+00:00
Unknown
https://bitemyapp.com/blog/how-i-make-stew/
<!--
A friend of mine asked how I do crockpot/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.
-->
<p>I think the first thing my mother taught me to cook was Kraft Mac-n-Cheese at age 9. Fortunately, I'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'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.</p>
Comparing Persistent with Ecto and ActiveRecord
2017-10-06T00:00:00+00:00
2017-10-06T00:00:00+00:00
Unknown
https://bitemyapp.com/blog/persistent-ecto-activerecord/
<p>Rejected title: You're not special</p>
<p>I saw this article comparing Ecto and ActiveRecord: <a href="https://www.dailydrip.com/blog/ecto-vs-activerecord.html">https://www.dailydrip.com/blog/ecto-vs-activerecord.html</a></p>
<p>I thought I would track alongside that post and show what the equivalent code looks like if you're using the <a href="https://github.com/yesodweb/persistent">Persistent</a> Haskell library.</p>
Alternatives to Typed Holes for talking to your compiler
2017-09-23T00:00:00+00:00
2017-09-23T00:00:00+00:00
Unknown
https://bitemyapp.com/blog/please-stop-using-typed-holes/
<p>Rejected title: Type Praxis</p>
<p>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's a bespoke feature intended to enable discovering the type of a sub-expression more easily. Which is fair enough, except it doesn't really have a good use-case! I will demonstrate in this post why.</p>
What a Haskell Study Group is Not
2017-05-03T00:00:00+00:00
2017-05-03T00:00:00+00:00
Unknown
https://bitemyapp.com/blog/what-a-haskell-study-group-is-not/
<p>This article is by <a href="https://twitter.com/sjsyrek">Steven Syrek</a>. I'm reposting it here because I endorse what he's saying. I believe Steven brings a valuable perspective on the <a href="http://haskellbook.com">haskell book</a>, reading groups, and education in general.</p>
<p>Steven posted <a href="https://medium.com/@sjsyrek/what-a-haskell-study-group-is-not-470f4aeb9673">this article on his Medium</a>.</p>
<p>He has also written some <a href="https://medium.com/@sjsyrek/some-notes-on-haskell-pedagogy-de43281b1a5c">extended notes on pedagogy tied to this post here</a>.</p>
A review of Learn Python the Hard Way, 3rd ed
2017-03-25T00:00:00+00:00
2017-03-25T00:00:00+00:00
Unknown
https://bitemyapp.com/blog/review-learn-python-hard-way/
<p>As a break from usual, I thought I would review Zed Shaw's Learn Python the Hard Way. I've had several beginners to programming ask me what they should use to learn and Shaw's book frequently comes up. I've looked over his materials before when they were a free website but I wanted to see what the current published version was like.</p>
The Hashrocket websocket shootout in Haskell
2016-09-03T00:00:00+00:00
2016-09-03T00:00:00+00:00
Unknown
https://bitemyapp.com/blog/websocket-shootout-haskell/
<p>I <a href="https://github.com/hashrocket/websocket-shootout/pull/14">recently PR'd</a> a Haskell entry to Hashrocket's <a href="https://hashrocket.com/blog/posts/websocket-shootout">websocket shootout</a>. <strike>Haskell seemed to do a lot better than C++, Rust, Golang, Elixir, Erlang, NodeJS, Ruby MRI, and JRuby.</strike> 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.</p>
How to use UUID values with Persistent and Yesod
2016-06-15T00:00:00+00:00
2016-06-15T00:00:00+00:00
Unknown
https://bitemyapp.com/blog/uuids-with-persistent-yesod/
<p>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'll share some code from my work that demonstrates some patterns in applications that use Persistent or Yesod which should make it easier.</p>
Speeding up the automated building and testing of our Haskell projects
2016-03-28T00:00:00+00:00
2016-03-28T00:00:00+00:00
Unknown
https://bitemyapp.com/blog/speeding-up-builds/
<p>I'm a big fan of using build servers to continually build and test the code I'm working on. I'm also a bit of a latency nut, so I like our builds to be <em>responsive</em>. To that end, I migrating our company away from CircleCI and yielded a 10x improvement to build times for my trouble.</p>
Haskell is not trivial, but it's not unfair like Dark Souls either
2016-02-06T00:00:00+00:00
2016-02-06T00:00:00+00:00
Unknown
https://bitemyapp.com/blog/haskell-is-not-trivial-not-unfair/
<p>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 <code>lens</code> and <code>lens-aeson</code>.</p>
Either and (,) in Haskell are not arbitrary
2015-10-19T00:00:00+00:00
2015-10-19T00:00:00+00:00
Unknown
https://bitemyapp.com/blog/either-is-not-arbitrary/
<p>Programmers don't understand that it doesn't matter <em>what</em> the default target is for a type like <code>Either</code> 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's (arbitrary and harmful) preference. The <code>Left</code> and <code>Right</code> of <code>Either</code> do not mean anything in and of themselves.</p>
Why we don't chuck our readers into web apps
2015-08-23T00:00:00+00:00
2015-08-23T00:00:00+00:00
Unknown
https://bitemyapp.com/blog/why-we-dont-chuck-readers-into-web-apps/
<p>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 <a href="http://haskellbook.com">Haskell Programming from first principles</a> book.</p>
Building a Haskell game
2015-04-26T00:00:00+00:00
2015-04-26T00:00:00+00:00
Unknown
https://bitemyapp.com/blog/installing-a-haskell-game/
<p>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 <a href="http://haskellstack.org">Stack</a> was a thing.</p>
Functional Education
2014-12-31T00:00:00+00:00
2014-12-31T00:00:00+00:00
Unknown
https://bitemyapp.com/blog/functional-education/
<p>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'll remember off the top of my head, I've written a round-up of the issues with various resources and books people use to learn Haskell.</p>
Why are types useful?
2014-12-03T00:00:00+00:00
2014-12-03T00:00:00+00:00
Unknown
https://bitemyapp.com/blog/why-are-types-useful/
<p>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.</p>
A URL shortener made literate
2014-11-22T00:00:00+00:00
2014-11-22T00:00:00+00:00
Unknown
https://bitemyapp.com/blog/literate-url-shortener/
<p>This is a quasi-literate version of the very simple URL shortener I wrote in Haskell with Scotty.</p>
Code refactoring with pointfree style demoed via updateMap
2014-11-19T00:00:00+00:00
2014-11-19T00:00:00+00:00
Unknown
https://bitemyapp.com/blog/update-map-in-haskell/
<p>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.</p>
How I Start: Haskell
2014-11-18T00:00:00+00:00
2014-11-18T00:00:00+00:00
Unknown
https://bitemyapp.com/blog/how-i-start-haskell/
<p>I wrote an article for <a href="https://howistart.org">howistart</a>. I've since updated it to use <a href="http://haskellstack.org">Stack</a> as well.</p>
Strong types and testing - in Haskell
2014-11-18T00:00:00+00:00
2014-11-18T00:00:00+00:00
Unknown
https://bitemyapp.com/blog/strong-types-and-testing/
<p>I respin an article originally written in Scala into Haskell, then veer off into the stratosphere.</p>
Parsing and rendering templates in Clojure & Haskell
2014-10-02T00:00:00+00:00
2014-10-02T00:00:00+00:00
Unknown
https://bitemyapp.com/blog/parsing-and-rendering-templates-in-haskell/
<p>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.</p>
URL Shortener in 43 lines of Haskell
2014-08-22T00:00:00+00:00
2014-08-22T00:00:00+00:00
Unknown
https://bitemyapp.com/blog/url-shortener-in-haskell/
<p>Written in Scotty. The code is not great.</p>
Aeson with types that have lots of 'maybes', v2
2014-07-31T00:00:00+00:00
2014-07-31T00:00:00+00:00
Unknown
https://bitemyapp.com/blog/aeson-with-uncertainty-revised/
<p>The previous edition of this post was cleaned up by a suggestion from another Haskeller. I share it with you here.</p>
Aeson with types that have lots of 'maybes'
2014-07-30T00:00:00+00:00
2014-07-30T00:00:00+00:00
Unknown
https://bitemyapp.com/blog/aeson-with-uncertainty/
<p>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 <code>Maybe</code> type.</p>
Meditations on learning Haskell
2014-04-29T00:00:00+00:00
2014-04-29T00:00:00+00:00
Unknown
https://bitemyapp.com/blog/meditations-on-learning-haskell/
<p>This is an extraction of a conversation between multiple Haskellers in an IRC channel. I'm not identifying who said what and the ordering will be more topical than temporal. I'll add annotations for context as appropriate. I edited liberally.</p>
Parsing data of varying structure in Haskell with Aeson
2014-04-17T00:00:00+00:00
2014-04-17T00:00:00+00:00
Unknown
https://bitemyapp.com/blog/parsing-nondeterministic-data-with-aeson-and-sum-types/
<p>Need to parse data with varying structure? Once again we resort to our old friend for handling exclusive possibilities, the sum type.</p>
Nested user-defined types with Aeson
2014-04-11T00:00:00+00:00
2014-04-11T00:00:00+00:00
Unknown
https://bitemyapp.com/blog/aeson-and-user-created-types/
<p>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.</p>
Refactoring boilerplate from sum types
2014-04-11T00:00:00+00:00
2014-04-11T00:00:00+00:00
Unknown
https://bitemyapp.com/blog/refactoring-boilerplate-from-maybe/
<p>A simple demonstration of extracting boilerplate from Aeson code handling a <code>Just</code> and a <code>Nothing</code> case of a <code>Maybe</code> value.</p>
Grokking sum types, value constructors, and type constructors
2014-04-05T00:00:00+00:00
2014-04-05T00:00:00+00:00
Unknown
https://bitemyapp.com/blog/grokking-sums-and-constructors/
<p>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.</p>
Mutable closures in Haskell and nested IO
2014-03-25T00:00:00+00:00
2014-03-25T00:00:00+00:00
Unknown
https://bitemyapp.com/blog/when-nested-io-actions-are-wanted/
<p>In my <a href="/posts/2014-03-24-monads-bind-join-actions.html">last post</a>, I described IO (IO ()) as being a sign you might'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.</p>
Monads, lifting, join, and side-effecting actions.
2014-03-24T00:00:00+00:00
2014-03-24T00:00:00+00:00
Unknown
https://bitemyapp.com/blog/monads-bind-join-actions/
<p>While playing around with querying <a href="http://www.elasticsearch.org/">ElasticSearch</a> I bumped into something that I hadn't really understood explicitly before about monads, nesting, and IO. Rather than blather on, I'm going to share a "literate" ghci session that demonstrates the point. Main editing change I made was to remove duplication in the output from querying the type <code>:t</code> in ghci.</p>
Using shebang and lein-exec to write Clojure scripts that can use dependencies
2013-02-18T00:00:00+00:00
2013-02-18T00:00:00+00:00
Unknown
https://bitemyapp.com/blog/shebang-lein-exec-scripts-dependencies/
<p>A brief demonstration of how to run Clojure programs like scripts with <code>leiningen</code>.</p>
Using drip for Clojure scripts (non-Leiningen)
2013-02-17T00:00:00+00:00
2013-02-17T00:00:00+00:00
Unknown
https://bitemyapp.com/blog/drip-clojure-scripts/
<p>Using drip to run Clojure code like a script.</p>
February Book Log
2013-02-14T00:00:00+00:00
2013-02-14T00:00:00+00:00
Unknown
https://bitemyapp.com/blog/february-book-log/
<p>It's Valentine's Day 2013 and since January 2013 I've read the following books.</p>
OS X fsevent fatal error 'stdio.h' file not found
2012-07-01T00:00:00+00:00
2012-07-01T00:00:00+00:00
Unknown
https://bitemyapp.com/blog/fsevent-fatal-error-stdio/
<p>Getting the following error on Mac OS X? Read on.</p>
Fixing arrow keys in iTerm and Terminal.app for Mac OS X
2012-06-01T00:00:00+00:00
2012-06-01T00:00:00+00:00
Unknown
https://bitemyapp.com/blog/arrow-keys-iterm-mac-osx/
<p>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/option keys to work more or less as they do in Linux.</p>
Node.js, Requests, Connections, ending, and closing
2012-05-01T00:00:00+00:00
2012-05-01T00:00:00+00:00
Unknown
https://bitemyapp.com/blog/nodejs-requests-conns-ending-closing/
<p>You close connections, you end requests.</p>
Fixing syntax highlighting in Jekyll
2012-04-02T00:00:00+00:00
2012-04-02T00:00:00+00:00
Unknown
https://bitemyapp.com/blog/syntax-highlighting-jekyll/
<p>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.</p>
How to resolve 'Could not find module XMonad.Actions.Volume'
2012-03-01T00:00:00+00:00
2012-03-01T00:00:00+00:00
Unknown
https://bitemyapp.com/blog/find-module-xmonad-volume/
<p>You need to install <code>xmonad-extras</code> 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.</p>
Getting w3m to work with Emacs 23 in Ubuntu 11.10
2012-02-01T00:00:00+00:00
2012-02-01T00:00:00+00:00
Unknown
https://bitemyapp.com/blog/emacs-w3m/
<p>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 <code>w3m-el-snapshot</code>.</p>
Why the poor are poor
2012-01-01T00:00:00+00:00
2012-01-01T00:00:00+00:00
Unknown
https://bitemyapp.com/blog/why-poor/
<p>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't think either are a meaningful gauge for really understanding why the poor are frequently stuck being poor.</p>