leostera.com

Writing.

Writing about computers and making them do things.

43 posts

2026

  1. Riot is dead, long live Riot!

    A look back at Riot's OCaml actor runtime, the scheduler and I/O challenges it faced, and what comes next.

2024

  1. Exceptions are Ok

    A comparison of exceptions and results in OCaml, from signaling failures to handling and reporting errors ergonomically.

2023

  1. Parsing with Binary String Pattern Matching

    Parsing WebSocket frames in OCaml with bitstring pattern matching, inspired by Erlang, Elixir, and Gleam.

  2. Unix Module Considered Harmful

    A socket-pool bug reveals the low-level pitfalls of OCaml's Unix module and makes the case for safer networking APIs.

  3. Type-safe state machines using type-state

    Use type-state in OCaml to make invalid state-machine transitions impossible while keeping the API approachable.

  4. A quick guide to GADTs and why you ain't gonna need them

    An OCaml validation example shows when GADTs help, when they add complexity, and why simpler types often suffice.

  5. Exploring domains in OCaml is cheaper and faster

    Model a web router with OCaml types to explore a domain, challenge assumptions, and refine the design quickly.

  6. HashSets with zero boilerplate

    Make Rust HashSet literals easier to write with array conversions and a small set! macro.

  7. Solving for them vs Solving for us

    A reflection on the tension between building tools for your own problems and solving problems that matter to other people.

  8. Structuring large ReScript projects

    Lessons from a large ReScript codebase on standard libraries, bindings, package interfaces, and maintainable project structure.

  9. Making the ReScript type system work for you (Part II)

    Build on ReScript's type-checking rules to understand how the compiler types functions and compound expressions.

  10. Making the ReScript type system work for you (Part I)

    A practical introduction to how ReScript infers types for variables and uses the environment to check code.

  11. Founding a Startup as a Neurospicy Digital Nomad

    An account of starting Warp while managing ADHD, constant distractions, and the rhythms of digital nomad life.

2022

  1. ReScript vs TypeScript: Building a Concurrent Queue library

    Build a concurrent queue in TypeScript and ReScript to compare correctness, developer experience, and interoperability.

  2. ReScript on Deno: Command Line Tools and the Flags module

    Bind Deno's Flags module from ReScript to parse command-line arguments with stronger types and a cleaner API.

  3. Exploring ReScript on Deno

    Explore using Deno to build and distribute standalone ReScript programs without relying on Node.js tooling.

2021

  1. Semantic Data ain't the Golden Path (yet)

    Why semantic data tools still make domain modeling, schema evolution, and code generation harder than they should be.

  2. The Best OCaml is the Worst OCaml

    An OCaml command-line library shows how powerful abstractions can become difficult to use without approachable APIs and documentation.

  3. Code Evolution: Organic & Artificial

    A comparison of organically grown systems and planned architectures, and the tradeoffs between immediate value and long-term design.

  4. An Imaginary Compiler

    A short story about a programmer who learns to carry a critical, constructive compiler into every code review.

  5. Easy-to-Write Code Considered Harmful

    Code that is easy to write can burden future readers unless its hidden context and assumptions are made explicit.

  6. Why Most Prototypes Suck

    Fast prototypes can still be maintainable when their domain concepts are explicit and implementation details stay behind clear boundaries.

2020

  1. Why Typing Erlang is Hard

    An attempt to type Erlang exposes the challenges of unions, records, receive expressions, and dynamic dispatch on the BEAM.

  2. On Tolerating Complexity

    A hands-on journey from Markdown to a live-updating website argues for understanding and managing complexity rather than hiding it.

  3. Building a Dota Ontology, Part 4: Affinities and Attribute Effects

    Extend a Dota 2 ontology so different kinds of ability affinity can describe how one effect changes another.

  4. Building a Dota Ontology, Part 3: Modeling Affinities

    Model Dota 2 ability affinities as relationships and explore how an ontology can represent synergy between spells.

  5. Building a Dota Ontology, Part 2: describing the world of Dota

    Describe Dota 2 heroes and abilities in an ontology to reason about why particular spells work well together.

  6. Building a Dota Ontology, Part 1: Introduction

    Start a Dota 2 ontology in Protégé with the goal of reasoning about interactions between heroes and abilities.

  7. The Hard Stuff about Ontologies...

    The hardest part of ontology work is acquiring and questioning domain knowledge, not learning formal logic or tooling.

  8. Making Ontologies Practical through Metaprogramming

    Generate application code from ontology data to make semantic models more practical for everyday engineering.

  9. A World of Facts
  10. Engineering Knowledge: Identity

    Global, durable identifiers can help knowledge systems keep their data meaningful as software and ownership change.

  11. Data Languages

    Every data language makes tradeoffs about validation, domain fit, and how much information a program can express.

2019

  1. Building WebApps Like It's 1972

    Revisit older computing ideas to rethink web applications around failure isolation, asynchronous work, and parallel execution.

2017

  1. Symbols and Values in JavaScript

    Compare JavaScript symbols with atoms in other languages and show how Symbol.for creates stable, reusable names.

2015

  1. Daemons in Docker

    A pragmatic look at running long-lived services in Docker and deciding when each process deserves its own container.

2014

  1. So I Stopped Programming

    A woodworking detour and a family illness prompt a reflection on time, craft, and choosing what deserves attention.

  2. My actual activity on Github

    Public GitHub activity tells only part of the story when much of a developer's work happens in private repositories.

  3. Troubleshooting Ember-App-Kit on PhoneGap

    Practical fixes for building a PhoneGap app with Ember App Kit, from assets and bootstrapping to REST adapters.

  4. Moving On

    Leaving home for Denmark becomes a reflection on change, resilience, and learning to trust your own direction.

  5. Designing an Unobtrusive Development Process

    A proposal for a lightweight development process that connects code changes, deployment, planning, and team communication.

2013

  1. Why do I test

    Testing can sting because it exposes mistakes, but that discomfort is what helps us write better software.

  2. TucJS, a hacker community

    How TucJS helped a local JavaScript community in Tucumán grow into new meetups and lasting connections.