This seems like the kind of thing that could change year-by-year, but it came up in a Hacker News thread recently. So I thought I’d jot down my current thoughts, which are a sum of my previous experiences and changes over time.


I'm a vegetarian now. I've been eating this way for maybe 4-6 months now (actually, 9 months for this specific piece!). So I'm fairly confident it has stuck. While it's kind of a strange transition, it's being going on so long that it also has been pretty gradual and uneventful largely.

I was going to write this as a single post originally, but I prefer shorter reads. So I’ll break this up into several parts:

  1. Motivation (this post)

  2. Getting There, Practically Speaking

  3. On Protein

  4. Challenges & Considerations


So far I like Writefreely. It's relatively easy to setup and host, the layout and typography are nice, and it uses Markdown which makes sense to me.

There's a few features I wish it had:

  • Image upload and insert. Apparently this is proposed for Writefreely but has yet to be implemented.
  • Easy API extension support. It has a login system already and other features. It's I be nice to be able to add features as needed using it. Things like image upload.
  • There is a classic editor and the direct Markdown editor. It can be changed via a config. It'd be sweet if it could be toggled through the UI.

Maybe I'll take a shot at implementing these features, but that requires time. Also an understanding of Go.

So maybe not too.

EDIT: I came up with an easy enough way to workaround image uploads. I have NextCloud setup already. I made a spot to drop images and share them there. Easy peasy!

I'm sort of used to React hooks now. I'm not sure how I feel about them. Sometimes good, sometimes not so confident. But I like them enough to essentially not use class components anymore.

One thing I keep wondering about is where to use them. They seem like they'd make a easy shortcut to avoid container components. Often I end up passing props from hooks to functional components anyway. So maybe that would be best.

On the other hand, you're then on the, hah, hook, for carrying the effects and state it uses indefinitely. It also makes unit testing clumsier since it often requires a mock somewhere, which is a bit tedious.

One idea while writing this – Implement one module with two components. One is the core visual/functional component and the other sets up the hook and other effects.

export const Comp = props => ...

const ConnectedComp = () => {
  const x = useSomething() 
  return <Comp x={x} />

export default ConnectedComp;

Then you can clarify the unit tests, but also not have to do as much prop passing later on. I sorta feel like this is higher order components in a way, which don't seem as common anymore.

Maybe I should stop worrying and use hooks where I need them instead.

My last blog has been long ignored. I had recently become more interested in having a more convenient way to write from my phone, as well as my computer. I am still interested in self-hosting/VPS hosting too.

So now, I'm starting up this new blog with WriteFreely and self hosting it. There were quite a few bumps along the way, and given how the past 12 months have been, it's taken me a real long time to get solid chunks of time to stand it up. But here we are!

I've been able to import a few entries back into Writefreely. Lucky for me I chose to use Markdown for writing in general. So you can scroll back and check out older entries. For now too, my previous writing spot works fine too.

Here's hoping I'll be writing more!

Around October or November of 2017. I walked upstairs in my previous apartment, sat down at the desk I'm at now, and thought to myself:

Alright, time to write some code. This should be fun!

With a faint idea of something to work on, I popped open Visual Studio Code, and then sat here for a while:

An empty, sad Visual Studio Code window


Some days, I get complacent. So complacent, in fact, that I let myself slip into thinking I know Javascript. If this fact alone doesn't make you sigh, well, thanks for your understanding. Here was today's unexpected adventure.


This is a series about trees! Search trees, that is.

To recap Part 2, we built ourselves a BST to track our favorite usernames. This lets us add, remove, and find these usernames in “logarithmic time” which means the amount of stuff we look at is cut in half at each step.

However, we saw one of the issues with the plain BST. The performance is directly impacted by the order elements are added. This isn't great. So let's explore an option to overcome this limitation which is generally speaking known as a self-balancing binary search tree. Our specific pass at it is known as a AVL BST.

My code for implementing an AVL BST in F# if you want to jump right in.


This is a series about trees! Search trees, that is.

To recap our story, we love usernames. We collect them, and so do our friends. We love to compare our lists of usernames together to see how they're similar. This is tedious though, so we decided to sort it and search through it. Much better, but keeping this list sorted is a project in of itself.

So let's build ourselves a method to keep better track of these lists. We'll implement what's called a Binary Search Tree for this.

My code for implementing a BST in F# if you want to jump right in.


This is a series about trees! Search trees, that is.