[ Home ]

# Feed from my fav blogs

Rss feed of the blogs I like, sorted by published-date.

### 1 million page views

http://notes.eatonphil.com/2024-11-28-1-million-views.html

I was delighted to notice this morning that this site has recently passed 1M page views. And since Murat wrote about his 1M page view accomplishment at the time, I felt compelled to now too. I started...

November 28, 2024

### Active and influential NYC infrastructure people

http://notes.eatonphil.com/2024-11-15-active-nyc-infrastructure-people.html

These are some of the most influential (mostly due to experience or expertise) and active folks (I actually see them attend events) in the NYC infrastructure scene (that I have a personal connection t...

November 15, 2024

### Exploring Postgres's arena allocator by writing an HTTP server from scratch

http://notes.eatonphil.com/2024-11-06-exploring-postgress-arena-allocator-writing-http-server-scratch.html

This is an external post of mine. Click here if you are not redirected.

November 6, 2024

### Effective unemployment and social media

http://notes.eatonphil.com/2024-11-05-effective-unemployment-and-social-media.html

Being unemployed can be incredibly depressing. So much rejection. Everything seems to be out of your control. Everything except for one thing: what you produce. You might know that repeatedly posting ...

November 5, 2024

### Checking linearizability in Go

http://notes.eatonphil.com/2024-10-31-checking-linearizability-in-go.html

You want to check for strict consistency ( linearizability ) for your project but you don't want to have to deal with the JVM . Porcupine , used by a number of real-world systems like etcd and TiDB, h...

October 31, 2024

### Build a serverless ACID database with this one neat trick (atomic PutIfAbsent)

http://notes.eatonphil.com/2024-09-29-build-a-serverless-acid-database-with-this-one-neat-trick.html

Delta Lake is an open protocol for serverless ACID databases. Due to its simplicity, scalability, and the number of open-source implementations, it's quickly becoming the DuckDB of serverless transact...

September 29, 2024

### Be someone who does things

http://notes.eatonphil.com/2024-09-23-be-someone-who-does-things.html

I wrote last month that what you want to do is one of the most useful motivations in life. I want to follow that up by saying that the only thing more important than wanting to do something is to actu...

September 23, 2024

### Obsession

http://notes.eatonphil.com/2024-08-24-obsession.html

In your professional and personal life, I don't believe there is a stronger motivation than having something in mind and the desire to do it. Yet the natural way to deal with a desire to do something ...

August 24, 2024

### What's the big deal about Deterministic Simulation Testing?

http://notes.eatonphil.com/2024-08-20-deterministic-simulation-testing.html

Bugs in distributed systems are hard to find, largely because systems interact in chaotic ways. And even once you've found a bug, it can be anywhere from simple to impossible to reproduce it. It's abo...

August 20, 2024

### Delightful, production-grade replication for Postgres

http://notes.eatonphil.com/2024-07-30-delightful-production-grade-replication-postgres.html

This is an external post of mine. Click here if you are not redirected.

July 30, 2024

### A reawakening of systems programming meetups

http://notes.eatonphil.com/2024-07-07-systems-meetups.html

This year has seen a resurgence in really high quality systems programming meetups. Munich Database Meetup , Berlin Systems Group , SF Distributed Systems Meetup , NYC Systems , Bengaluru Systems , to...

July 7, 2024

### A write-ahead log is not a universal part of durability

http://notes.eatonphil.com/2024-07-01-a-write-ahead-log-is-not-a-universal-part-of-durability.html

A database does not need a write-ahead log (WAL) to achieve durability. A database can write its long-term data structure durably to disk before returning to a client. Granted, this is a bad idea! And...

July 1, 2024

### Timeseries Indexing at Scale

https://artem.krylysov.com/blog/2024/06/28/timeseries-indexing-at-scale/

Note This blog post was co-authored with May Lee and is cross-posted on the Datadog blog . Datadog collects billions of events from millions of hosts every minute and that number keeps growing and fas...

June 28, 2024

### The limitations of LLMs, or why are we doing RAG?

http://notes.eatonphil.com/2024-06-17-limitations-llm-or-why-are-we-doing-rag.html

This is an external post of mine. Click here if you are not redirected.

June 17, 2024

### Confusion is a muse

http://notes.eatonphil.com/2024-06-14-confusion-is-a-muse.html

Some of the most interesting technical blog posts I read come from, and a common reason for posts I write is, confusion. You're at work and you start asking questions that are difficult to answer. You...

June 14, 2024

### How I run a software book club

http://notes.eatonphil.com/2024-05-30-how-i-run-book-clubs.html

I've been running software book clubs almost continuously since last summer, about 12 months ago. We read through Designing Data-Intensive Applications , Database Internals , Systems Performance , and...

May 30, 2024

### Implementing MVCC and major SQL transaction isolation levels

http://notes.eatonphil.com/2024-05-16-mvcc.html

In this post we'll build a database in 400 lines of code with basic support for five standard SQL transaction levels: Read Uncommitted, Read Committed, Repeatable Read, Snapshot Isolation and Serializ...

May 16, 2024

### What makes a great technical blog

http://notes.eatonphil.com/2024-04-10-what-makes-a-great-tech-blog.html

I want to explain why the blogs in My favorite technical blogs are my favorite. That page is solely about non-corporate tech blogs. So this post is too. I'll have to make another list for favorite cor...

April 10, 2024

### A paper reading club at work; databases and distributed systems research

http://notes.eatonphil.com/2024-04-05-company-paper-club.html

I started a paper reading club this week at work, focused on databases and distributed systems research. I posted in a general channel about the premise and asked if anyone was interested. I clarified...

April 5, 2024

### Finding memory leaks in Postgres C code

http://notes.eatonphil.com/2024-03-27-finding-memory-leaks-in-postgres-c-code.html

This is an external post of mine. Click here if you are not redirected.

March 27, 2024

### Zig, Rust, and other languages

http://notes.eatonphil.com/2024-03-15-zig-rust-and-other-languages.html

Having worked a bit in Zig, Rust, Go and now C, I think there are a few common topics worth having a fresh conversation on: automatic memory management, the standard library, and explicit allocation. ...

March 15, 2024

### First month on a database team

http://notes.eatonphil.com/2024-03-11-first-month-on-a-database-team.html

A little over a month ago, I joined EnterpriseDB on a distributed Postgres product ( PGD ). The process of onboarding myself has been pretty similar at each company in the last decade, though I think ...

March 11, 2024

### An intuition for distributed consensus in OLTP systems

http://notes.eatonphil.com/2024-02-08-an-intuition-for-distributed-consensus-in-oltp-systems.html

Distributed consensus in transactional databases (e.g. etcd or Cockroach) is a big deal these days. Most often under the hood are variations of log-based Paxos-like algorithms such as MultiPaxos, View...

February 8, 2024

### Writing a minimal in-memory storage engine for MySQL/MariaDB

http://notes.eatonphil.com/2024-01-09-minimal-in-memory-storage-engine-for-mysql.html

I spent a week looking at MySQL/MariaDB internals along with ~80 other devs. Although MySQL and MariaDB are mostly the same (more on that later), I focused on MariaDB specifically this week. Before la...

January 9, 2024

### Make your own way

http://notes.eatonphil.com/2023-12-26-make-your-own-way.html

Over the years, I have repeatedly felt like I missed the timing for a meetup or an IRC group or social media in general. I'd go to a meetup every so often but I'd never make a meaningful connection wi...

December 27, 2023

### Exploring a Postgres query plan

http://notes.eatonphil.com/2023-11-19-exploring-a-postgres-query-plan.html

I learned this week that you can intercept and redirect Postgres query execution. You can hook into the execution layer so you're given a query plan and you get to decide what to do with it. What rows...

November 19, 2023

### Writing a storage engine for Postgres: an in-memory Table Access Method

http://notes.eatonphil.com/2023-11-01-postgres-table-access-methods.html

With Postgres 12 , released in 2019, it became possible to swap out Postgres's storage engine . This is a feature MySQL has supported for a long time. There are at least 8 different built-in engines y...

November 1, 2023

### io_uring basics: Writing a file to disk

http://notes.eatonphil.com/2023-10-19-write-file-to-disk-with-io_uring.html

King and I wrote a blog post about building an event-driven cross-platform IO library that used io_uring on Linux. We sketched out how it works at a high level but I hadn't yet internalized how you ac...

October 19, 2023

### Go database driver overhead on insert-heavy workloads

http://notes.eatonphil.com/2023-10-05-go-database-sql-overhead-on-insert-heavy-workloads.html

The most popular SQLite and PostgreSQL database drivers in Go are (roughly) 20-76% slower than alternative Go drivers on insert-heavy benchmarks of mine. So if you are bulk-inserting data with Go (and...

October 5, 2023

### Intercepting and modifying Linux system calls with ptrace

http://notes.eatonphil.com/2023-10-01-intercepting-and-modifying-linux-system-calls-with-ptrace.html

How software fails is interesting. But real-world errors can be infrequent to manifest. Fault injection is a formal-sounding term that just means: trying to explicitly trigger errors in the hopes of d...

October 1, 2023

### How do databases execute expressions?

http://notes.eatonphil.com/2023-09-21-how-do-databases-execute-expressions.html

Databases are fun. They sit at the confluence of Computer Science topics that might otherwise not seem practical in life as a developer. For example, every database with a query language is also a pro...

September 21, 2023

### Eight years of organizing tech meetups

http://notes.eatonphil.com/eight-years-of-tech-meetups.html

This is a collection of random personal experiences. So if you don't want to read everything, feel free to skip to the end for takeaways. I write because I'd like to see more high-quality meetups. And...

September 4, 2023

### Thinking about functional programming

http://notes.eatonphil.com/2023-08-15-thinking-about-functional-programming.html

Someone on Discord asked about how to learn functional programming. The question and my initial tweet on the subject prompted an interesting discussion with Shriram Krishnamurthi and other folks. So h...

August 15, 2023

### We put a distributed database in the browser – and made a game of it

http://notes.eatonphil.com/2023-07-11-we-put-a-distributed-database-in-the-browse.html

This is an external post of mine. Click here if you are not redirected.

July 11, 2023

### Metaprogramming in Zig and parsing CSS

http://notes.eatonphil.com/2023-06-19-metaprogramming-in-zig-and-parsing-css.html

I knew Zig supported some sort of reflection on types. But I had been confused about how to use it. What's the difference between @typeInfo and @TypeOf ? I ignored this aspect of Zig until a problem c...

June 19, 2023

### Implementing the Raft distributed consensus protocol in Go

http://notes.eatonphil.com/2023-05-25-raft.html

As part of bringing myself up-to-speed after joining TigerBeetle , I wanted some background on how distributed consensus and replicated state machines protocols work. TigerBeetle uses Viewstamped Repl...

May 25, 2023

### Two books I recommend to developers

http://notes.eatonphil.com/books-developers-should-read.html

Originally published on February 1, 2021. The original version included two books I don't think are actually so worthwhile. This list is down to two. I think that's a good thing actually. These are th...

May 16, 2023

### My favorite software subreddits

http://notes.eatonphil.com/high-quality-subreddits-you-should-be-following.html

Originally published on December 5, 2021. If you are an experienced software developer whose only exposure to reddit is dank memes, proggit or even language-specific subreddits like /r/python , you're...

May 16, 2023

### How RocksDB works

https://artem.krylysov.com/blog/2023/04/19/how-rocksdb-works/

Introduction # Over the past years, the adoption of RocksDB increased dramatically. It became a standard for embeddable key-value stores. Today RocksDB runs in production at Meta, Microsoft , Netflix ...

April 19, 2023

### Errors and Zig

http://notes.eatonphil.com/errors-and-zig.html

At TigerBeetle these last few weeks I've been doing a mix of documenting client libraries, writing sample code for client libraries, and writing integration tests against the sample code. The client l...

March 21, 2023

### Notes from Neal Gabler's Walt Disney

http://notes.eatonphil.com/2023-02-18-neal-gabler-walt-disney-notes.html

Disney was a celebrity by his mid-30s, Disney the company was famous by 1930s. Even though politically the 1930s was considered the decade of Roosevelt (elected President in 1933), culturally the 1930...

February 18, 2023

### Lessons learned streaming building a Scheme-like interpreter in Go

http://notes.eatonphil.com/2023-01-30-livescheme.html

I wanted to practice making coding videos so I did a four-part series on writing a basic Scheme-like language (minus macros and arrays and tons of stuff). I picked this simple topic because I wanted a...

January 30, 2023

### An effective product manager

http://notes.eatonphil.com/effective-product-manager.html

There are three specific activities I have loved in some product managers I've worked with (and missed in others). tldr; Talk with customers and prospects Develop and share a vision Evangelize Talk wi...

January 23, 2023

### The year in books: 2022

http://notes.eatonphil.com/2023-01-12-year-in-books.html

In 2022 I finished 20 books spanning 15,801 pages. 3 more than I read in 2021, but about twice the number of pages. 3 fiction and 17 non-fiction. Another ~30 started but not finished. I had a hard tim...

January 12, 2023

### Favorite compiler and interpreter resources

http://notes.eatonphil.com/2023-01-04-compiler-resources.html

This is an external post of mine. Click here if you are not redirected.

January 5, 2023

### General book recommendations

http://notes.eatonphil.com/2023-01-04-book-recommendations.html

This is an external post of mine. Click here if you are not redirected.

January 4, 2023

### In response to a frontend developer asking about database development

http://notes.eatonphil.com/2023-01-01-letter-to-a-frontend-developer-asking-about-database-development.html

This is an external post of mine. Click here if you are not redirected.

January 1, 2023

### Is it worth writing about?

http://notes.eatonphil.com/is-it-worth-writing-about.html

You acquire a skill or experience through time and effort, then downplay the impact of writing and sharing the learning process. Professionals seem naturally to imagine a high bar for what is worth wr...

December 1, 2022

### A Programmer-Friendly I/O Abstraction Over io_uring and kqueue

http://notes.eatonphil.com/a-friendly-abstraction-over-iouring-and-kqueue.html

This is an external post of mine. Click here if you are not redirected.

November 23, 2022

### Writing a SQL database, take two: Zig and RocksDB

http://notes.eatonphil.com/zigrocks-sql.html

For my second project while learning Zig, I decided to port an old, minimal SQL database project from Go to Zig. In this post, in ~1700 lines of code (yes, I'm sorry it's bigger than my usual), we'll ...

November 13, 2022

### A minimal RocksDB example with Zig

http://notes.eatonphil.com/zigrocks.html

I mostly programmed in Go the last few years. So every time I wanted an embedded key-value database, I reached for Cockroach's Pebble . Pebble is great for Go programming but Go does not embed well in...

October 30, 2022

### A database without dynamic memory allocation

http://notes.eatonphil.com/a-database-without-dynamic-memory.html

This is an external post of mine. Click here if you are not redirected.

October 12, 2022

### A minimal distributed key-value database with Hashicorp's Raft library

http://notes.eatonphil.com/minimal-key-value-store-with-hashicorp-raft.html

When I wrote the " build a distributed PostgreSQL proof of concept " post I first had to figure out how to use Hashicorp's Raft implementation . There weren't any examples I could find in the Hashicor...

September 17, 2022

### What's the big deal about key-value databases like FoundationDB and RocksDB?

http://notes.eatonphil.com/whats-the-big-deal-about-key-value-databases.html

Let's assume you're familiar with basic SQL databases like PostgreSQL and MySQL, and document databases like MongoDB and Elasticsearch. You probably know Redis too. But you're hearing more and more ab...

August 23, 2022

### SQLite has pretty limited builtin functions

http://notes.eatonphil.com/2022-08-21-sqlite-limited-builtin-functions.html

This is an external post of mine. Click here if you are not redirected.

August 21, 2022

### Container scheduling strategies for integration testing 14 different databases in Github Actions

http://notes.eatonphil.com/2022-07-25-database-integration-testing.html

This is an external post of mine. Click here if you are not redirected.

July 25, 2022

### Implementing a simple jq clone in Go, and basics of Go memory profiling

http://notes.eatonphil.com/implementing-a-jq-clone-in-go.html

In this post we'll build a basic jq clone in Go. It will only be able to pull a single path out of each object it reads. It won't be able to do filters, mapping, etc. $ cat large-file.json | head -n2 ...

July 10, 2022

### One year as a solo dev building open-source data tools without funding

http://notes.eatonphil.com/2022-06-11-year-in-review.html

This is an external post of mine. Click here if you are not redirected.

June 10, 2022

### Let's build a distributed Postgres proof of concept

http://notes.eatonphil.com/distributed-postgres.html

What is CockroachDB under the hood? Take a look at its go.mod and notice a number of dependencies that do a lot of work: a PostgreSQL wire protocol implementation , a storage layer , a Raft implementa...

May 17, 2022

### SQLite in Go, with and without cgo

http://notes.eatonphil.com/sqlite-in-go-with-and-without-cgo.html

This is an external post of mine. Click here if you are not redirected.

May 12, 2022

### HTML event handler attributes: down the rabbit hole

http://notes.eatonphil.com/event-handler-attributes.html

This is an external post of mine. Click here if you are not redirected.

April 26, 2022

### Interview With Phil of DataStation

http://notes.eatonphil.com/console-101.html

This is an external interview. Click here if you are not redirected.

April 17, 2022

### Surveying SQL parser libraries in a few high-level languages

http://notes.eatonphil.com/sql-parsers.html

This is an external post of mine. Click here if you are not redirected.

April 11, 2022

### Writing a document database from scratch in Go: Lucene-like filters and indexes

http://notes.eatonphil.com/documentdb.html

In this post we'll write a rudimentary document database from scratch in Go. In less than 500 lines of code we'll be able to support the following interactions, inspired by Elasticsearch: $ curl -X PO...

March 28, 2022

### Speeding up Go's builtin JSON encoder up to 55% for large arrays of objects

http://notes.eatonphil.com/improving-go-json-encoding-performance-for-large-arrays-of-objects.html

This is an external post of mine. Click here if you are not redirected.

March 3, 2022

### SMTP protocol basics from scratch in Go: receiving email from Gmail

http://notes.eatonphil.com/handling-email-from-gmail-smtp-protocol-basics.html

I've never run my own mail server before. Before today I had no clue how email worked under the hood other than the very few times I've set up mail clients. I've heard no few times how hard it is to s...

February 20, 2022

### The world of PostgreSQL wire compatibility

http://notes.eatonphil.com/the-world-of-postgresql-wire-compatibility.html

This is an external post of mine. Click here if you are not redirected.

February 8, 2022

### How to recommend books, or, stop recommending SICP

http://notes.eatonphil.com/recommending-a-book.html

Many "must-read" books are not well-written. I try to read a lot , but I still have a low tolerance for bad writing and bad editing. I write this post both to discourage thoughtless recommendations an...

January 31, 2022

### Bootloader basics

http://notes.eatonphil.com/bootloader-basics.html

I spent a few days playing around with bootloaders for the first time. This post builds up to a text editor with a few keyboard shortcuts. I'll be giving a virtual talk based on this work at Hacker Ni...

January 23, 2022

### dsq: Commandline tool for running SQL queries against JSON, CSV, Excel, Parquet, and more.

http://notes.eatonphil.com/dsq.html

This is an external post of mine. Click here if you are not redirected.

January 11, 2022

### Analyzing large JSON files via partial JSON parsing

http://notes.eatonphil.com/analyzing-large-json-files-via-partial-json-parsing.html

This is an external post of mine. Click here if you are not redirected.

January 6, 2022

### The year in books: 11 to recommend in 2021

http://notes.eatonphil.com/year-in-books-2021.html

Last year (2021) I finished 17 books, a five year low. But that's ok! 4 fiction and 13 non-fiction. Another 30 started but not finished. Non-fiction It seems I was pretty focused on business history b...

January 5, 2022

### Writing a minimal Lua implementation with a virtual machine from scratch in Rust

http://notes.eatonphil.com/lua-in-rust.html

By the end of this guide we'll have a minimal, working implementation of a small part of Lua from scratch. It will be able to run the following program (among others): function fib ( n ) if n < 2 then...

December 28, 2021

### Running SQL Server in a container on Github Actions

http://notes.eatonphil.com/sqlserver-in-github-actions.html

This is an external post of mine. Click here if you are not redirected.

December 16, 2021

### Implementing zip archiving in Golang: unzipping

http://notes.eatonphil.com/implementing-zip-in-go-unzipping.html

All code for this post is available on Github . Let's take a look at how zip files work. Take a small file for example: $ cat hello.text Hello! Let's zip it up. $ zip test.zip hello.text adding: hello...

November 23, 2021

### Benchmarking esbuild, swc, tsc, and babel for React/JSX projects

http://notes.eatonphil.com/benchmarking-esbuild-swc-typescript-babel.html

This is an external post of mine. Click here if you are not redirected.

November 13, 2021

### Building a fast SCSS-like rule expander for CSS using fuzzy parsing

http://notes.eatonphil.com/building-a-nested-css-rule-expander.html

This is an external post of mine. Click here if you are not redirected.

October 31, 2021

### Exploring PL/pgSQL part two: implementing a Forth-like interpreter

http://notes.eatonphil.com/exploring-plpgsql-forth-like.html

Previously in exploring PL/pgSQL: Strings, arrays, recursion and parsing JSON In my last post I walked through the basics of PL/pgSQL, the embedded procedural language inside of PostgreSQL. It covered...

October 29, 2021

### Exploring PL/pgSQL: Strings, arrays, recursion, and parsing JSON

http://notes.eatonphil.com/exploring-plpgsql.html

Next in exploring PL/pgSQL: Implementing a Forth-like interpreter PostgreSQL comes with a builtin imperative programming language called PL/pgSQL. I used to think this language was scary because it ha...

October 24, 2021

### Experimenting with column- and row-oriented datastructures

http://notes.eatonphil.com/experimenting-with-column-and-row-oriented-datastructures.html

This is an external post of mine. Click here if you are not redirected.

October 18, 2021

### Notes on running Electron

http://notes.eatonphil.com/notes-on-running-electron.html

This is an external post of mine. Click here if you are not redirected.

October 13, 2021

### Enumerating and analyzing 40+ non-V8 JavaScript implementations

http://notes.eatonphil.com/javascript-implementations.html

V8 is, I'm sure, the most used implementation of JavaScript today. Used in Chrome, (and by extension) Microsoft Edge, Node.js, etc. Safari's JavaScriptCore and Firefox's SpiderMonkey are also contende...

September 21, 2021

### Writing a simple JSON library from scratch: a tour through modern C++

http://notes.eatonphil.com/writing-a-simple-json-library-in-modern-cpp.html

Modern C++ has a lot of cool features. Move semantics means passing around structs in functions is cheap. std::shared_ptr means I don't have to manage any memory; no more new / delete ! (But try as I ...

August 26, 2021

### Parser generators vs. handwritten parsers: surveying major language implementations in 2021

http://notes.eatonphil.com/parser-generators-vs-handwritten-parsers-survey-2021.html

Developers often think parser generators are the sole legit way to build programming language frontends, possibly because compiler courses in university teach lex/yacc variants. But do any modern prog...

August 21, 2021

### Practical? Common Lisp on the JVM: A quick intro to ABCL for modern web apps

http://notes.eatonphil.com/practical-common-lisp-on-the-jvm.html

In a ridiculous attempt to prove an internet wrong about the practicality of Lisp (Common Lisp specifically), I tried to get a simple (but realistic) web app running. After four days and a patch to AB...

August 5, 2021

### Writing an efficient object previewer for JavaScript

http://notes.eatonphil.com/writing-an-efficient-javascript-object-previewer.html

This is an external post of mine. Click here if you are not redirected.

July 15, 2021

### React without webpack: fast path to a working app from scratch

http://notes.eatonphil.com/react-without-webpack.html

This is an external post of mine. Click here if you are not redirected.

July 8, 2021

### Controlled HTML select element in React has weird default UX

http://notes.eatonphil.com/controlled-select-element-in-react-has-weird-ux.html

This is an external post of mine. Click here if you are not redirected.

June 25, 2021

### Leaders, you need to share organization success stories more frequently

http://notes.eatonphil.com/leaders-share-company-success-stories.html

This post goes out to anyone who leads a team: managers, directors, VPs, executives. You need to share organization success stories with your organization on a regular and frequent basis. Talk about s...

June 22, 2021

### Languages you can run in the browser, part 1: Python, JavaScript, SQLite

http://notes.eatonphil.com/languages-you-can-run-in-the-browser.html

This is an external post of mine. Click here if you are not redirected.

June 17, 2021

### Coolest hard-tech companies in NYC 2021

http://notes.eatonphil.com/coolest-tech-companies-in-nyc-2021.html

For years I've kept a private list of really cool tech companies in NYC. Now that I'm funemployed it's the perfect time to publish. This list is influenced by 1) my perception of the difficulty of the...

June 4, 2021

### Writing a Jinja-inspired template library in Python

http://notes.eatonphil.com/writing-a-template-library-in-python.html

In this post we'll build a minimal text templating library in Python inspired by Jinja. It will be able to display variables and iterate over arrays. By the end of this article, with around 300 lines ...

May 23, 2021

### Learning a new codebase: hacking on nginx

http://notes.eatonphil.com/learning-a-new-codebase-hacking-nginx.html

I have never contributed to nginx. My C skills are 1/10. But downloading the source, hacking it up, compiling it, and running it doesn't scare me. This post is to help you overcome your own fears abou...

April 4, 2021

### How to get better at recursion

http://notes.eatonphil.com/practicing-recursion.html

tldr; reimplement standard library functions in your favorite language without loops . Background For a few years after college I spent a lot of free time doing projects in Standard ML and Scheme. As ...

March 7, 2021

### Extending gosql to supporting LIMIT and OFFSET

http://notes.eatonphil.com/extending-gosql-to-support-limit-and-offset.html

It's been a few months since I picked up gosql and I wanted to use it to prototype a SQL interface for data stored in S3. But one missing critical feature in gosql is LIMIT and OFFSET support. This po...

January 23, 2021

### The year in books: 20 to recommend in 2020

http://notes.eatonphil.com/year-in-books-2020.html

This year I finished 47 books, up from last year but not a personal best. The breakdown was 17 non-fiction and 30 fiction. Another 20-30 remain started but unfinished this year. Non-fiction The 8 non-...

December 27, 2020

### Static analysis with semgrep: practical examples using Docker

http://notes.eatonphil.com/static-analysis-with-semgrep.html

In this post we'll get a basic semgrep environment set up in Docker running some custom rules against our code. Existing linters Linters like pylint for Python or eslint for JavaScript are great for g...

December 20, 2020

### Emulating linux/AMD64 userland: interpreting an ELF binary

http://notes.eatonphil.com/emulating-amd64-starting-with-elf.html

In this post we'll stumble toward a working emulator for a barebones C program compiled for linux/AMD64. The approach will be slightly more so based on observation than by following a spec; a great wa...

November 26, 2020

### The impact of management teams as a decision-making group, in startups and enterprise

http://notes.eatonphil.com/the-impact-of-management-teams-on-startups-and-enterprises.html

Ambitious companies form management teams at every level above you, sometimes including you. Management teams meet periodically and have private chat rooms. They discuss customers, product and organiz...

November 11, 2020

### Standard ML in 2020

http://notes.eatonphil.com/standard-ml-in-2020.html

Incredibly, Standard ML implementations are still actively developed. MLton , Poly/ML , MLKit , SML# and SML/NJ are the most prominent. Discussion on the future direction of Standard ML remains health...

October 25, 2020

### The case for comments in code

http://notes.eatonphil.com/the-case-for-comments-in-code.html

When I first started programming, especially when asked for code samples, my comments lacked purpose and would often duplicate in English what the code clearly indicated. I knew that "commenting is go...

September 7, 2020

### Writing a simple Python compiler: 1. hello, fibonacci

http://notes.eatonphil.com/writing-a-simple-python-compiler.html

In this post we'll write a Python to C compiler in Python. This is especially easy to do since Python has a builtin parser library and because a number of CPython internals are exposed for extension w...

August 16, 2020

### Let's build a Full-Text Search engine

https://artem.krylysov.com/blog/2020/07/28/lets-build-a-full-text-search-engine/

Full-Text Search is one of those tools people use every day without realizing it. If you ever googled "golang coverage report" or tried to find "indoor wireless camera" on an e-commerce website, you u...

July 28, 2020

### A single-node Kubernetes cluster without virtualization or a container registry

http://notes.eatonphil.com/a-single-node-kubernetes-cluster-without-virtualization-or-a-container-registry.html

This post is a recipe for setting up a minimal Kubernetes cluster on Fedora without requiring virtualization or a container registry. These two features make the system cloud-agnostic and the cluster ...

July 25, 2020

### Generating a full-stack application from a database

http://notes.eatonphil.com/generating-a-full-stack-application-from-a-database.html

DBCore can now generate a TypeScript/React CRUD UI that is automatically hooked up to the generated REST API (in Go). The UI has full support for login, viewing (and filtering), editing, and creating ...

June 14, 2020

### Generating a REST API from a database

http://notes.eatonphil.com/generating-a-rest-api-from-a-database.html

I recently published an alpha version of a code generation tool, DBCore, that reads a database schema from PostgreSQL or MySQL and generates an entire Go API with CRUD operations, pagination, filterin...

June 6, 2020

### RFCs and asynchronous-first culture

http://notes.eatonphil.com/rfcs-and-asynchronous-first-culture.html

I hated writing documentation before working on features. But after a while I realized I couldn't communicate well enough, even with folks I had a good connection with. It took me a number of mistaken...

May 16, 2020

### Writing a SQL database from scratch in Go: 4. a database/sql driver

http://notes.eatonphil.com/database-basics-a-database-sql-driver.html

Previously in database basics: <! forgive me, for I have sinned > 1. SELECT, INSERT, CREATE and a REPL 2. binary expressions and WHERE filters 3. indexes In this post, we'll extend gosql to implement ...

May 10, 2020

### Writing a SQL database from scratch in Go: 3. indexes

http://notes.eatonphil.com/database-basics-indexes.html

Previously in database basics: <! forgive me, for I have sinned > 1. SELECT, INSERT, CREATE and a REPL 2. binary expressions and WHERE filters Next in database basics: 4. a database/sql driver In this...

May 1, 2020

### Writing a SQL database from scratch in Go: 2. binary expressions and WHERE filters

http://notes.eatonphil.com/database-basics-expressions-and-where.html

Previously in database basics: <! forgive me, for I have sinned > 1. SELECT, INSERT, CREATE and a REPL Next in database basics: 3. indexes 4. a database/sql driver In this post, we'll extend gosql to ...

April 12, 2020

### Studying foreign languages with inbox zero

http://notes.eatonphil.com/studying-with-inbox-zero.html

The only time I've been able to seriously, rapidly improve my ability to speak a foreign language was through intensive language courses in college. I was forced to actively speak, read, and write Chi...

April 4, 2020

### Reviewing the Surface Book 2

http://notes.eatonphil.com/reviewing-the-surface-book-2.html

The first few paragraphs cover what I was looking for and what I considered. Then the review. Why the Surface Book 2 I used a Macbook throughout my professional career until I had the choice a few yea...

March 18, 2020

### Writing a SQL database from scratch in Go: 1. SELECT, INSERT, CREATE and a REPL

http://notes.eatonphil.com/database-basics.html

Next in database basics: <! forgive me, for I have sinned > 2. binary expressions and WHERE filters 3. indexes 4. a database/sql driver In this series we'll write a rudimentary database from scratch i...

March 6, 2020

### A minimal REST API in Java

http://notes.eatonphil.com/a-minimal-rest-api-in-java.html

There's a style of Java that is a joy to write. This post will cover how to set up a basic PostgreSQL-integrated REST API using Jersey and JOOQ in a style not dissimilar to Flask and SQLAlchemy in Pyt...

February 1, 2020

### Writing a lisp compiler from scratch in JavaScript: 6. an x86 upgrade

http://notes.eatonphil.com/compiler-basics-an-x86-upgrade.html

Previously in compiler basics: <! forgive me, for I have sinned > 1. lisp to assembly 2. user-defined functions and variables 3. LLVM 4. LLVM conditionals and compiling fibonacci 5. LLVM system calls ...

December 8, 2019

### Confusion and disengagement in meetings

http://notes.eatonphil.com/confusion-disengagement-in-meetings.html

The quickest way to cut through confusion or disagreement among otherwise amiable and honest folks is to ask questions. Ask early so you don't waste time. But it's not enough to just ask clarifying qu...

November 30, 2019

### Interpreting Go

http://notes.eatonphil.com/interpreting-go.html

After spending some time at work on tooling for keeping documentation in sync with Go struct definitions I had enough exposure to Go's built-in parsing package that next steps were clear: write an int...

October 12, 2019

### Administering Kubernetes is hard

http://notes.eatonphil.com/administering-kubernetes-is-hard.html

Kubernetes is easy to use after some exposure; it's pretty convenient too. But it is super hard to set up. eksctl is a good tool for folks who don't want to spend hours/days/weeks debugging VPC config...

September 30, 2019

### Unit testing C code with gtest

http://notes.eatonphil.com/unit-testing-c-code-with-gtest.html

This post covers building and testing a minimal, but still useful, C project. We'll use Google's gtest and CMake for testing C code. This will serve as a foundation for some upcoming posts/projects on...

August 31, 2019

### Writing an x86 emulator from scratch in JavaScript: 2. system calls

http://notes.eatonphil.com/emulator-basics-system-calls.html

Previously in emulator basics: <! forgive me, for I have sinned > 1. a stack and register machine In this post we'll extend x86e to support the exit and write Linux system calls, or syscalls. A syscal...

July 20, 2019

### Writing a lisp compiler from scratch in JavaScript: 6. LLVM system calls

http://notes.eatonphil.com/compiler-basics-llvm-system-calls.html

Previously in compiler basics: <! forgive me, for I have sinned > 1. lisp to assembly 2. user-defined functions and variables 3. LLVM 4. LLVM conditionals and compiling fibonacci Next in compiler basi...

June 22, 2019

### Writing an x86 emulator from scratch in JavaScript: 1. a stack and register machine

http://notes.eatonphil.com/emulator-basics-a-stack-and-register-machine.html

Better yet, take a look at this post walking through emulating x86 ELF binaries in Go: Emulating linux/AMD64 userland: interpreting an ELF binary Next up in emulator basics: <! forgive me, for I have ...

May 21, 2019

### Tail call elimination

http://notes.eatonphil.com/tail-call-elimination.html

In this post we'll explore what tail calls are, why they are useful, and how they can be eliminated in an interpreter, a compiler targeting C++, and a compiler targeting LLVM IR. Tail calls A tail cal...

May 14, 2019

### Writing a lisp compiler from scratch in JavaScript: 4. LLVM conditionals and compiling fibonacci

http://notes.eatonphil.com/compiler-basics-llvm-conditionals.html

Previously in compiler basics: <! forgive me, for I have sinned > 1. lisp to assembly 2. user-defined functions and variables 3. LLVM Next in compiler basics: 5. LLVM system calls 6. an x86 upgrade In...

May 4, 2019

### Responsibility and ownership

http://notes.eatonphil.com/responsibility-and-ownership.html

Responsibility is only possible by granting ownership and setting expectations. If you don't turn over ownership, don't expect folks to take responsibility. When you grant ownership and set expectatio...

April 30, 2019

### Interpreting TypeScript

http://notes.eatonphil.com/interpreting-typescript.html

In addition to providing a static type system and compiler for a superset of JavaScript, TypeScript makes much of its functionality available programmatically. In this post we'll use the TypeScript co...

April 14, 2019

### Writing a web server from scratch: 1. HTTP and sockets

http://notes.eatonphil.com/web-server-basics-http-and-sockets.html

Say we have some HTML: < html > < body > < h1 > Hello world! </ h1 > </ body > </ html > And say we'd like to be able to render this page in a web browser. If the server is hosted locally we may want ...

April 6, 2019

### Writing a simple JSON path parser

http://notes.eatonphil.com/writing-a-simple-json-path-parser.html

Let's say we want to implement a simple list filtering language so we can enter a.b = 12 and return only results in a list where the a column is an object that contains a field b that is set to the va...

March 27, 2019

### Writing a lisp compiler from scratch in JavaScript: 3. LLVM

http://notes.eatonphil.com/compiler-basics-llvm.html

Previously in compiler basics: <! forgive me, for I have sinned > 1. lisp to assembly 2. user-defined functions and variables Next in compiler basics: 4. LLVM conditionals and compiling fibonacci 5. L...

March 10, 2019

### AOT-compilation of Javascript with V8

http://notes.eatonphil.com/aot-compilation-of-javascript-with-v8.html

tldr; I'm working on a AOT-compiled Javascript implementation called jsc . Many dynamically typed programming languages have implementations that compile to native binaries: Python: Cython Common Lisp...

February 26, 2019

### Transparency and communication on small teams

http://notes.eatonphil.com/transparency-and-communication-on-small-teams.html

I saw a post on dev.to that talks about dysfunctional teams. This is a response that focuses specifically on how to prevent burnout from overworking. This is aimed at senior/lead engineers and enginee...

January 22, 2019

### Windows

http://notes.eatonphil.com/windows.html

It has been six years since I last used Windows for any remotely serious software development. I've used Ubuntu, Arch, or FreeBSD since. But eventually I spent so much time working around common workp...

January 20, 2019

### Writing a lisp compiler from scratch in JavaScript: 2. user-defined functions and variables

http://notes.eatonphil.com/compiler-basics-functions.html

Previously in compiler basics: <! forgive me, for I have sinned > 1. lisp to assembly Next in compiler basics: 3. LLVM 4. LLVM conditionals and compiling fibonacci 5. LLVM system calls 6. an x86 upgra...

January 20, 2019

### Make small changes and solve the problems you have

http://notes.eatonphil.com/make-small-changes-and-solve-the-problems-you-have.html

Two frustrating things that can happen in an organization are 1) big changes and 2) changes that aren’t clearly associated with a known problem. It’s even worse in that order. These situations tend to...

December 27, 2018

### String interning in Go

https://artem.krylysov.com/blog/2018/12/12/string-interning-in-go/

String interning is a technique of storing only one copy of each unique string in memory. It can significantly reduce memory usage for applications that store many duplicated strings. The built-in str...

December 12, 2018

### Writing a lisp compiler from scratch in JavaScript: 1. lisp to assembly

http://notes.eatonphil.com/compiler-basics-lisp-to-assembly.html

Next in compiler basics: <! forgive me, for I have sinned > 2. user-defined functions and variables 3. LLVM 4. LLVM conditionals and compiling fibonacci 5. LLVM system calls 6. an x86 upgrade In this ...

November 20, 2018

### On NYC, Tokyo and Seoul

http://notes.eatonphil.com/on-nyc-tokyo-and-seoul.html

I’ve lived in NYC for the past year — moved here after years in Philly and after growing up in a rural community a few hours west of there. My wife is South Korean and last week concluded my second tr...

October 20, 2018

### Why (and how) to read books

http://notes.eatonphil.com/why-and-how-to-read-books.html

The last time I read for fun was in elementary school. Since college I knew I must read more, but I never forced myself to build the habit. Then three years ago I spent time around my brother and a co...

September 26, 2018

### Compiling dynamic programming languages

http://notes.eatonphil.com/compiling-dynamic-programming-languages.html

It can be difficult to disassociate the idea that dynamically typed programming languages are tied to byte-code interpreters (e.g. YARV Ruby, CPython, V8, Zend Engine, etc.). But for many languages, a...

September 2, 2018

### btest: a language agnostic test runner

http://notes.eatonphil.com/btest-a-language-agnostic-test-runner.html

btest is a minimal, language-agnostic test runner originally written for testing compilers. Brian, an ex- co-worker from Linode, wrote the first implementation in Crystal (a compiled language clone of...

August 4, 2018

### Writing to be read

http://notes.eatonphil.com/writing-to-be-read.html

There is a common struggle in the writing and maintenance of documentation, checklists, emails, guides, etc. Each provides immense value; a document may be the key to an important process. The goal is...

May 18, 2018

### Writing a simple JSON parser

http://notes.eatonphil.com/writing-a-simple-json-parser.html

Writing a JSON parser is one of the easiest ways to get familiar with parsing techniques. The format is extremely simple. It's defined recursively so you get a slight challenge compared to, say, parsi...

May 6, 2018

### Finishing up a FreeBSD experiment

http://notes.eatonphil.com/finishing-up-a-freebsd-experiment.html

I've been using FreeBSD as my daily driver at work since December. I've successfully done my job and I've learned a hell of a lot forcing myself on CURRENT... But there's been a number of issues with ...

April 28, 2018

### Book Review: ANSI Common Lisp

http://notes.eatonphil.com/book-review-ansi-common-lisp.html

Score: 4.5 / 5 Paul Graham and his editor(s) are excellent. His prose is light and easy to follow. The only awkward component of the book's organization is that he tends to use a concept one section b...

March 25, 2018

### Pogreb - key-value store for read-heavy workloads

https://artem.krylysov.com/blog/2018/03/24/pogreb-key-value-store/

Note This post is outdated, please read the new design document on GitHub . A few months ago I released the first version of an embedded on-disk key-value store written in Go. The store is about 10 ti...

March 24, 2018

### Starting a minimal Common Lisp project

http://notes.eatonphil.com/starting-a-minimal-common-lisp-project.html

If you've only vaguely heard of Lisp before or studied Scheme in school, Common Lisp is nothing like what you'd expect. While functional programming is all the rage in Scheme, Common Lisp was "express...

March 5, 2018

### Interview with the D Language Blog: BSDScheme

http://notes.eatonphil.com/project-highlight-bsdscheme.html

This is an external post of mine. Click here if you are not redirected.

January 20, 2018

### Porting Go web applications to AWS Lambda

https://artem.krylysov.com/blog/2018/01/18/porting-go-web-applications-to-aws-lambda/

Running Go on AWS Lambda is not something totally new - developers figured out how to launch Go binaries from Python a while ago, but it wasn't convenient and had some performance implications. A few ...

January 18, 2018

### First few hurdles writing a Scheme interpreter

http://notes.eatonphil.com/first-few-hurdles-writing-a-scheme-interpreter.html

I started working on BSDScheme last October, inspired to get back into language implementation after my coworker built bshift , a compiler for a C-like language. BSDScheme is an interpreter for a (cur...

January 10, 2018

### Handling C++ exceptions in Go

https://artem.krylysov.com/blog/2017/04/13/handling-cpp-exceptions-in-go/

Cgo is a mechanism that allows Go packages call C code. The Go compiler enables cgo for every .go source file that imports a special pseudo package "C" . The text in the comment before the import "C" ...

April 13, 2017

### Profiling and optimizing Go web applications

https://artem.krylysov.com/blog/2017/03/13/profiling-and-optimizing-go-web-applications/

Note This post was updated on 2021-04-25. Go has a powerful built-in profiler that supports CPU, memory, goroutine and block (contention) profiling. Enabling the profiler # Go provides a low-level pro...

March 13, 2017

### Deploying FreeBSD on Linode unattended in minutes

http://notes.eatonphil.com/deploying-freebsd-on-linode-unattended-in-minutes.html

I became a FreeBSD user over 2 years ago when I wanted to see what all the fuss was about. I swapped my y410p dual-booting Windows / Ubuntu with FreeBSD running Gnome 3. I learned a lot during the tra...

March 11, 2017

### Walking through a basic Racket web service

http://notes.eatonphil.com/walking-through-a-basic-racket-web-service.html

Racket is an impressive language and ecosystem. Compared to Python, Racket (an evolution of Scheme R5RS is three years younger. It is as concise and expressive as Python but with much more reasonable ...

December 29, 2016

### Scraping the Web with AWS Lambda and PhantomJS

https://artem.krylysov.com/blog/2016/06/22/scraping-the-web-with-aws-lambda-and-phantomjs/

Here are the slides from my talk "Scraping the Web with AWS Lambda and PhantomJS" given at Greater Philadelphia AWS User Group meetup on May 25, 2016. You can find the source code of PhantomJS/Node.js...

June 22, 2016

### Benchmark of Python JSON libraries

https://artem.krylysov.com/blog/2015/09/29/benchmark-python-json-libraries/

Note This post was updated on 2016-08-13: added python-rapidjson ; updated simplejson and ujson . A couple of weeks ago after spending some time with Python profiler, I discovered that Python’s json m...

September 29, 2015