Never miss a beat

Join my newsletter.

The Archives

Incomeware: Making money on side projects

Published: 6/17/2022

I have had a lot of side projects over my 12 years as a software engineer. Most of them are software projects, but some of them (like this blog) are not. The costs for running a side project can really start to add up and they add up even faster when you consider paying yourself or someone else for work. Thankfully, there are options for monetizing your projects to help offset costs for server hosting, professional services, fees and more. Here's how I look at monetizing my projects. In regards…

WTF are Slivers?

Published: 5/21/2022

A fantastic user experience is a powerful tool for your application. It can help market your application (everyone loves a pretty app), can help with user engagement and can even be a competitive advantage in certain contexts. Flutter gives us so many tools to help us build fantastic user experiences - Hero, LayoutBuilder, Snackbar and more. Most of these are fairly well documented and are rather straightforward to use. Slivers, however, are even more powerful and less clearly documented (from…

How to upload coverage to CodeCov for Dart and Flutter

Published: 5/19/2022

Code Coverage helps you identify how much of your code is covered via test cases. Coverage itself is an interesting idea. People are largely divided on it but coverage can be a useful metric if used for objective information and not used to measure success. In this post, we'll cover generating coverage for flutter and dart (each individually), formatting that coverage if needed, and then uploading it to CodeCov via Github actions. Dart and Flutter both ship with testing tools that are capable of…

Building a CLI in Dart with Bosun

Published: 3/18/2022

Command Line Interfaces (CLIs) are some of the simplest program interfaces to build, but some of the most difficult program interfaces to build well. CLIs have been around longer than I have and, over my career, I've really grown to love them. CLIs can be written in many different languages (I've recently written some in Go and Rust to name a few), but today I want to talk about writing CLIs in my favorite language -- Dart. There are a lot of guides, books, and material on architecting a…

Flutter Isolates

Published: 12/22/2021

Unfortunately the documentation around isolates is not very good, but they're a very powerful feature. If your goal is to avoid jank, you need to keep your main thread's UI responsive, and you need to make sure your main thread is not blocked by long-running tasks. Isolates help you achieve this. Isolates are a way to run long-running tasks in a separate, isolated thread. They are useful for things like network requests, database access, and long-running calculations. If you're aiming for 60fps…

Boxing things in Rust

Published: 9/16/2021

Rust's memory management can feel a bit intimidating for most developers. Rust gives you some control over whether you're allocating data on the stack or the heap and its up to you to decide where memory should be allocated. When you allocate memory for values in Rust, that memory is allocated on the Stack . Memory on the Stack is allocated in a "stack frame" which contains information for the Stack's local variables and some metadata about that stack frame. When a function exits, that…