Tinkering with systems.
Occasionally available for consulting.
Highlights:
- Reflections on a decade of coding - what has and hasn't worked for me.
- Internal consistency - why most streaming systems can produce unboundedly wrong outputs.
- Against SQL - SQL is inexpressive, incompressible, non-porous and under-specified, and this creates drag on everything downstream.
- The shape of data - taking notation seriously.
- Have you tried rubbing a database on it? A day of lightning talks about turning a data-centric lens onto familiar problems to yield strange new solutions (and maybe exciting new problems).
- Pain we forgot - teaching everyone to code is not enough.
Programming language experiments:
- droplet
- ~2012
- Goal: concisely specify distributed systems.
- Loosely based on bloom.
- Didn't have the skills to complete it.
- eve
- 2013 Dec - 2016 Jan (the others continued until 2018 Jan)
- Goal: 'end-user programming'.
- Shipped many demos
- Lack of concrete questions/problems.
- Plagued by performance problems.
- imp v0
- 2015 Aug - 2016 Oct
- Goal: Write a webapp end-to-end in a relational language.
- A practical query compiler in 500 lines
- Relational UI
- imp v1
- 2018 Apr - 2020 Mar
- Goal: 'A better SQL' (see Against SQL)
- Features:
- Denotation + type system fit on a single page.
- Compiles to relational algebra.
- First-class/nested sets.
- Functions are infinite sets, function application is a join.
- Subqueries are a join against an anonymous function.
- Core language
- Denotational semantics
- Types
- Simple interpreter
- Decorrelation
- Solving functions
- Boxes
- imp v2
- 2020 May - 2022 Jan
- Goal: Push v1 towards being a capable general-purpose language.
- Same core language as v1, new runtime.
- Improved type inference and error reporting.
- First-class transactions.
- Iteration
- Implicit ordering in relational languages
- Making live repls behave
- Live repl demo
- Heterogenous types and gradual typing
- imp v3 / preimp
- 2022 Jun - 2022 Aug
- Goal: Focus on the DX for state and UI.
- Draft: The program is the database is the interface.
- Dev teasers in 0022, 0025, 0026, 0027.
- Abandoned to work on TigerBeetle.
- zest
- 2023 Nov - ???
- The shape of data
- Implementing interactive languages
- Baby's first wasm compiler
- There are no strings on me
- Notation and representation
- Dialects and metaprogramming
- Notes on compiler IRs
- Syntax
- Ruminating about mutable value semantics
- Baby's second wasm compiler
- Smolderingly fast b-trees
Streaming/incremental systems:
- An opinionated map of incremental and streaming systems
- Internal consistency - why most streaming systems can produce unboundedly wrong outputs.
- Why query planning is hard
- Thoughts on benchmarking
- dida - differential dataflow for mere mortals
- Why isn't differential dataflow more popular?
- How dida works
- Roughly works, but definitely not production-ready. Likely to be replaced by something simpler (eg).
Databases:
- A shallow survey of OLAP and HTAP query engines
- Against SQL - SQL is inexpressive, incompressible, non-porous and under-specified, and this creates drag on everything downstream.
- How Materialize and other databases optimize SQL subqueries
- SELECT wat FROM sql
Interfaces:
- focus - a low-latency text editor which I use for all my writing and coding
- reltron - an interface for exploring relational databases, in collaboration with Kevin Lynagh
- monolog - monolog is to logging as spreadsheets are to accounting?
- unnamed - experimenting with VR game mechanics on the HTC Vive
Programming languages:
- Columnar kernels in go
- Better operator precedence
- How safe is zig?
- Memory-mapped IO registers in zig
- Open multiple dispatch in zig
- Assorted thoughts on zig (and rust)
- blobs - a library for zero-copy deserialization in Julia
- Julia as a platform for language development
- Staged interpreters in rust
- Three months of rust
- strucjure - combining pattern matching, parsing and visitors
- Parallelizing the core.logic solver
Distributed systems:
- Causal ordering
- msc thesis - tweaking the timing model of a gossip algorithm to collapse the size of the state space and allow model checking fairness properties
Practices:
Community:
- Have you tried rubbing a database on it?. A conference about databases and other things.
Rambling:
- Business things:
- Unexplanations - untangling bad answers to good questions.
- What is a database?
- Small tech
- Frugality is non-linear
- Scaling down
- Imperative thinking and the making of sandwiches
- Pain we forgot - why teaching everyone to code is not enough.
- Local state is harmful
Cogsci:
- Quick and dirty review of Psychology of Programming Interest Group 1989-2015
- Contrast codes are an implementation detail
- Psychology vs the graphics pipeline
- Decision points and utility
Misc:
- It's ok to be afraid
- Canada's Express Entry program
- Looking for debugger
- Looking for more debugger
- texsearch - a search index for the >8m LaTeX equations in the Springer corpus
- scampy - conversations between scammers and a very stupid chat bot