41554 blogs · [ { "id": "01a07df4-59be-72f7-bc5a-d4f61b34f1ce", "title": "An effective product manager", "url": "http://notes.eatonphil.com/effective-product-manager.html", "published_at": "2023-01-23T00:00:00+00:00" }, { "id": "01a07df4-59be-72f7-bc5a-d4f61c22dfe9", "title": "The year in books: 2022", "url": "http://notes.eatonphil.com/2023-01-12-year-in-books.html", "published_at": "2023-01-12T00:00:00+00:00" }, { "id": "01a07df4-59be-72f7-bc5a-d4f61cf18cd3", "title": "Favorite compiler and interpreter resources", "url": "http://notes.eatonphil.com/2023-01-04-compiler-resources.html", "published_at": "2023-01-05T00:00:00+00:00" }, { "id": "01a07df4-59be-72f7-bc5a-d4f61da3deeb", "title": "General book recommendations", "url": "http://notes.eatonphil.com/2023-01-04-book-recommendations.html", "published_at": "2023-01-04T00:00:00+00:00" }, { "id": "01a07df4-59be-72f7-bc5a-d4f61e35b8e8", "title": "In response to a frontend developer asking about database development", "url": "http://notes.eatonphil.com/2023-01-01-letter-to-a-frontend-developer-asking-about-database-development.html", "published_at": "2023-01-01T00:00:00+00:00" }, { "id": "01a07df4-59be-72f7-bc5a-d4f61f22ba6f", "title": "Is it worth writing about?", "url": "http://notes.eatonphil.com/is-it-worth-writing-about.html", "published_at": "2022-12-01T00:00:00+00:00" }, { "id": "01a07df4-59be-72f7-bc5a-d4f61fa2ff39", "title": "A Programmer-Friendly I/O Abstraction Over io_uring and kqueue", "url": "http://notes.eatonphil.com/a-friendly-abstraction-over-iouring-and-kqueue.html", "published_at": "2022-11-23T00:00:00+00:00" }, { "id": "01a07df4-59be-72f7-bc5a-d4f6205f09b5", "title": "Writing a SQL database, take two: Zig and RocksDB", "url": "http://notes.eatonphil.com/zigrocks-sql.html", "published_at": "2022-11-13T00:00:00+00:00" }, { "id": "01a07df4-59be-72f7-bc5a-d4f620d5fdc2", "title": "A minimal RocksDB example with Zig", "url": "http://notes.eatonphil.com/zigrocks.html", "published_at": "2022-10-30T00:00:00+00:00" }, { "id": "01a07df4-59be-72f7-bc5a-d4f6215f4f06", "title": "A database without dynamic memory allocation", "url": "http://notes.eatonphil.com/a-database-without-dynamic-memory.html", "published_at": "2022-10-12T00:00:00+00:00" }, { "id": "01a07df4-59be-72f7-bc5a-d4f621718fcd", "title": "A minimal distributed key-value database with Hashicorp's Raft library", "url": "http://notes.eatonphil.com/minimal-key-value-store-with-hashicorp-raft.html", "published_at": "2022-09-17T00:00:00+00:00" }, { "id": "01a07df4-59be-72f7-bc5a-d4f62195a279", "title": "What's the big deal about key-value databases like FoundationDB and RocksDB?", "url": "http://notes.eatonphil.com/whats-the-big-deal-about-key-value-databases.html", "published_at": "2022-08-23T00:00:00+00:00" }, { "id": "01a07df4-59be-72f7-bc5a-d4f621dd9d94", "title": "SQLite has pretty limited builtin functions", "url": "http://notes.eatonphil.com/2022-08-21-sqlite-limited-builtin-functions.html", "published_at": "2022-08-21T00:00:00+00:00" }, { "id": "01a07df4-59be-72f7-bc5a-d4f62290ba00", "title": "Container scheduling strategies for integration testing 14 different databases in Github Actions", "url": "http://notes.eatonphil.com/2022-07-25-database-integration-testing.html", "published_at": "2022-07-25T00:00:00+00:00" }, { "id": "01a07df4-59be-72f7-bc5a-d4f622d74c84", "title": "Implementing a simple jq clone in Go, and basics of Go memory profiling", "url": "http://notes.eatonphil.com/implementing-a-jq-clone-in-go.html", "published_at": "2022-07-10T00:00:00+00:00" }, { "id": "01a07df4-59be-72f7-bc5a-d4f6231601ee", "title": "One year as a solo dev building open-source data tools without funding", "url": "http://notes.eatonphil.com/2022-06-11-year-in-review.html", "published_at": "2022-06-10T00:00:00+00:00" }, { "id": "01a07df4-59be-72f7-bc5a-d4f623400c54", "title": "Let's build a distributed Postgres proof of concept", "url": "http://notes.eatonphil.com/distributed-postgres.html", "published_at": "2022-05-17T00:00:00+00:00" }, { "id": "01a07df4-59be-72f7-bc5a-d4f623d31507", "title": "SQLite in Go, with and without cgo", "url": "http://notes.eatonphil.com/sqlite-in-go-with-and-without-cgo.html", "published_at": "2022-05-12T00:00:00+00:00" }, { "id": "01a07df4-59be-72f7-bc5a-d4f62400957b", "title": "HTML event handler attributes: down the rabbit hole", "url": "http://notes.eatonphil.com/event-handler-attributes.html", "published_at": "2022-04-26T00:00:00+00:00" }, { "id": "01a07df4-59be-72f7-bc5a-d4f6246f8e2a", "title": "Interview With Phil of DataStation", "url": "http://notes.eatonphil.com/console-101.html", "published_at": "2022-04-17T00:00:00+00:00" }, { "id": "01a07df4-59be-72f7-bc5a-d4f6256b2225", "title": "Surveying SQL parser libraries in a few high-level languages", "url": "http://notes.eatonphil.com/sql-parsers.html", "published_at": "2022-04-11T00:00:00+00:00" }, { "id": "01a07df4-59be-72f7-bc5a-d4f625ca3ce8", "title": "Writing a document database from scratch in Go: Lucene-like filters and indexes", "url": "http://notes.eatonphil.com/documentdb.html", "published_at": "2022-03-28T00:00:00+00:00" }, { "id": "01a07df4-59be-72f7-bc5a-d4f626923331", "title": "Speeding up Go's builtin JSON encoder up to 55% for large arrays of objects", "url": "http://notes.eatonphil.com/improving-go-json-encoding-performance-for-large-arrays-of-objects.html", "published_at": "2022-03-03T00:00:00+00:00" }, { "id": "01a07df4-59be-72f7-bc5a-d4f627907107", "title": "SMTP protocol basics from scratch in Go: receiving email from Gmail", "url": "http://notes.eatonphil.com/handling-email-from-gmail-smtp-protocol-basics.html", "published_at": "2022-02-20T00:00:00+00:00" }, { "id": "01a07df4-59be-72f7-bc5a-d4f6285a898a", "title": "The world of PostgreSQL wire compatibility", "url": "http://notes.eatonphil.com/the-world-of-postgresql-wire-compatibility.html", "published_at": "2022-02-08T00:00:00+00:00" }, { "id": "01a07df4-59be-72f7-bc5a-d4f6293ec3e6", "title": "How to recommend books, or, stop recommending SICP", "url": "http://notes.eatonphil.com/recommending-a-book.html", "published_at": "2022-01-31T00:00:00+00:00" }, { "id": "01a07df4-59be-72f7-bc5a-d4f62a2037fb", "title": "Bootloader basics", "url": "http://notes.eatonphil.com/bootloader-basics.html", "published_at": "2022-01-23T00:00:00+00:00" }, { "id": "01a07df4-59be-72f7-bc5a-d4f62a4201fb", "title": "dsq: Commandline tool for running SQL queries against JSON, CSV, Excel, Parquet, and more.", "url": "http://notes.eatonphil.com/dsq.html", "published_at": "2022-01-11T00:00:00+00:00" }, { "id": "01a07df4-59be-72f7-bc5a-d4f62ad19076", "title": "Analyzing large JSON files via partial JSON parsing", "url": "http://notes.eatonphil.com/analyzing-large-json-files-via-partial-json-parsing.html", "published_at": "2022-01-06T00:00:00+00:00" }, { "id": "01a07df4-59be-72f7-bc5a-d4f62b807182", "title": "The year in books: 11 to recommend in 2021", "url": "http://notes.eatonphil.com/year-in-books-2021.html", "published_at": "2022-01-05T00:00:00+00:00" }, { "id": "01a07df4-59be-72f7-bc5a-d4f62c3229f3", "title": "Writing a minimal Lua implementation with a virtual machine from scratch in Rust", "url": "http://notes.eatonphil.com/lua-in-rust.html", "published_at": "2021-12-28T00:00:00+00:00" }, { "id": "01a07df4-59be-72f7-bc5a-d4f62cbfee02", "title": "Running SQL Server in a container on Github Actions", "url": "http://notes.eatonphil.com/sqlserver-in-github-actions.html", "published_at": "2021-12-16T00:00:00+00:00" }, { "id": "01a07df4-59be-72f7-bc5a-d4f62dafdbb9", "title": "Implementing zip archiving in Golang: unzipping", "url": "http://notes.eatonphil.com/implementing-zip-in-go-unzipping.html", "published_at": "2021-11-23T00:00:00+00:00" }, { "id": "01a07df4-59be-72f7-bc5a-d4f62e3f60a4", "title": "Benchmarking esbuild, swc, tsc, and babel for React/JSX projects", "url": "http://notes.eatonphil.com/benchmarking-esbuild-swc-typescript-babel.html", "published_at": "2021-11-13T00:00:00+00:00" }, { "id": "01a07df4-59be-72f7-bc5a-d4f62e9409e5", "title": "Building a fast SCSS-like rule expander for CSS using fuzzy parsing", "url": "http://notes.eatonphil.com/building-a-nested-css-rule-expander.html", "published_at": "2021-10-31T00:00:00+00:00" }, { "id": "01a07df4-59be-72f7-bc5a-d4f62ed9f546", "title": "Exploring PL/pgSQL part two: implementing a Forth-like interpreter", "url": "http://notes.eatonphil.com/exploring-plpgsql-forth-like.html", "published_at": "2021-10-29T00:00:00+00:00" }, { "id": "01a07df4-59be-72f7-bc5a-d4f62f43acb0", "title": "Exploring PL/pgSQL: Strings, arrays, recursion, and parsing JSON", "url": "http://notes.eatonphil.com/exploring-plpgsql.html", "published_at": "2021-10-24T00:00:00+00:00" }, { "id": "01a07df4-59be-72f7-bc5a-d4f63039e762", "title": "Experimenting with column- and row-oriented datastructures", "url": "http://notes.eatonphil.com/experimenting-with-column-and-row-oriented-datastructures.html", "published_at": "2021-10-18T00:00:00+00:00" }, { "id": "01a07df4-59be-72f7-bc5a-d4f6303fd9da", "title": "Notes on running Electron", "url": "http://notes.eatonphil.com/notes-on-running-electron.html", "published_at": "2021-10-13T00:00:00+00:00" }, { "id": "01a07df4-59be-72f7-bc5a-d4f6304d17c1", "title": "Enumerating and analyzing 40+ non-V8 JavaScript implementations", "url": "http://notes.eatonphil.com/javascript-implementations.html", "published_at": "2021-09-21T00:00:00+00:00" }, { "id": "01a07df4-59be-72f7-bc5a-d4f631472ed1", "title": "Writing a simple JSON library from scratch: a tour through modern C++", "url": "http://notes.eatonphil.com/writing-a-simple-json-library-in-modern-cpp.html", "published_at": "2021-08-26T00:00:00+00:00" }, { "id": "01a07df4-59be-72f7-bc5a-d4f6324059a8", "title": "Parser generators vs. handwritten parsers: surveying major language implementations in 2021", "url": "http://notes.eatonphil.com/parser-generators-vs-handwritten-parsers-survey-2021.html", "published_at": "2021-08-21T00:00:00+00:00" }, { "id": "01a07df4-59be-72f7-bc5a-d4f632f5836a", "title": "Practical? Common Lisp on the JVM: A quick intro to ABCL for modern web apps", "url": "http://notes.eatonphil.com/practical-common-lisp-on-the-jvm.html", "published_at": "2021-08-05T00:00:00+00:00" }, { "id": "01a07df4-59be-72f7-bc5a-d4f633a6fe63", "title": "Writing an efficient object previewer for JavaScript", "url": "http://notes.eatonphil.com/writing-an-efficient-javascript-object-previewer.html", "published_at": "2021-07-15T00:00:00+00:00" }, { "id": "01a07df4-59be-72f7-bc5a-d4f634444a4d", "title": "React without webpack: fast path to a working app from scratch", "url": "http://notes.eatonphil.com/react-without-webpack.html", "published_at": "2021-07-08T00:00:00+00:00" }, { "id": "01a07df4-59be-72f7-bc5a-d4f6344e89de", "title": "Controlled HTML select element in React has weird default UX", "url": "http://notes.eatonphil.com/controlled-select-element-in-react-has-weird-ux.html", "published_at": "2021-06-25T00:00:00+00:00" }, { "id": "01a07df4-59be-72f7-bc5a-d4f634eefa50", "title": "Leaders, you need to share organization success stories more frequently", "url": "http://notes.eatonphil.com/leaders-share-company-success-stories.html", "published_at": "2021-06-22T00:00:00+00:00" }, { "id": "01a07df4-59be-72f7-bc5a-d4f635bb2e22", "title": "Languages you can run in the browser, part 1: Python, JavaScript, SQLite", "url": "http://notes.eatonphil.com/languages-you-can-run-in-the-browser.html", "published_at": "2021-06-17T00:00:00+00:00" }, { "id": "01a07df4-59be-72f7-bc5a-d4f63660dc3b", "title": "Coolest hard-tech companies in NYC 2021", "url": "http://notes.eatonphil.com/coolest-tech-companies-in-nyc-2021.html", "published_at": "2021-06-04T00:00:00+00:00" }, { "id": "01a07df4-59be-72f7-bc5a-d4f63677978a", "title": "Writing a Jinja-inspired template library in Python", "url": "http://notes.eatonphil.com/writing-a-template-library-in-python.html", "published_at": "2021-05-23T00:00:00+00:00" }, { "id": "01a07df4-59be-72f7-bc5a-d4f63701e4fb", "title": "Learning a new codebase: hacking on nginx", "url": "http://notes.eatonphil.com/learning-a-new-codebase-hacking-nginx.html", "published_at": "2021-04-04T00:00:00+00:00" }, { "id": "01a07df4-59be-72f7-bc5a-d4f6373756d3", "title": "How to get better at recursion", "url": "http://notes.eatonphil.com/practicing-recursion.html", "published_at": "2021-03-07T00:00:00+00:00" }, { "id": "01a07df4-59be-72f7-bc5a-d4f6376968ad", "title": "Extending gosql to supporting LIMIT and OFFSET", "url": "http://notes.eatonphil.com/extending-gosql-to-support-limit-and-offset.html", "published_at": "2021-01-23T00:00:00+00:00" }, { "id": "01a07df4-59be-72f7-bc5a-d4f6384bb683", "title": "The year in books: 20 to recommend in 2020", "url": "http://notes.eatonphil.com/year-in-books-2020.html", "published_at": "2020-12-27T00:00:00+00:00" }, { "id": "01a07df4-59be-72f7-bc5a-d4f638e9c187", "title": "Static analysis with semgrep: practical examples using Docker", "url": "http://notes.eatonphil.com/static-analysis-with-semgrep.html", "published_at": "2020-12-20T00:00:00+00:00" }, { "id": "01a07df4-59be-72f7-bc5a-d4f6399f2884", "title": "Emulating linux/AMD64 userland: interpreting an ELF binary", "url": "http://notes.eatonphil.com/emulating-amd64-starting-with-elf.html", "published_at": "2020-11-26T00:00:00+00:00" }, { "id": "01a07df4-59be-72f7-bc5a-d4f63a628d2b", "title": "The impact of management teams as a decision-making group, in startups and enterprise", "url": "http://notes.eatonphil.com/the-impact-of-management-teams-on-startups-and-enterprises.html", "published_at": "2020-11-11T00:00:00+00:00" }, { "id": "01a07df4-59be-72f7-bc5a-d4f63ac44106", "title": "Standard ML in 2020", "url": "http://notes.eatonphil.com/standard-ml-in-2020.html", "published_at": "2020-10-25T00:00:00+00:00" }, { "id": "01a07df4-59be-72f7-bc5a-d4f63bb40026", "title": "The case for comments in code", "url": "http://notes.eatonphil.com/the-case-for-comments-in-code.html", "published_at": "2020-09-07T00:00:00+00:00" }, { "id": "01a07df4-59be-72f7-bc5a-d4f63c16c5e4", "title": "Writing a simple Python compiler: 1. hello, fibonacci", "url": "http://notes.eatonphil.com/writing-a-simple-python-compiler.html", "published_at": "2020-08-16T00:00:00+00:00" }, { "id": "01a07df4-59be-72f7-bc5a-d4f63c881798", "title": "A single-node Kubernetes cluster without virtualization or a container registry", "url": "http://notes.eatonphil.com/a-single-node-kubernetes-cluster-without-virtualization-or-a-container-registry.html", "published_at": "2020-07-25T00:00:00+00:00" }, { "id": "01a07df4-59bf-71b1-89e2-088deee4d4fc", "title": "Generating a full-stack application from a database", "url": "http://notes.eatonphil.com/generating-a-full-stack-application-from-a-database.html", "published_at": "2020-06-14T00:00:00+00:00" }, { "id": "01a07df4-59bf-71b1-89e2-088defb74e7f", "title": "Generating a REST API from a database", "url": "http://notes.eatonphil.com/generating-a-rest-api-from-a-database.html", "published_at": "2020-06-06T00:00:00+00:00" }, { "id": "01a07df4-59bf-71b1-89e2-088df040496f", "title": "RFCs and asynchronous-first culture", "url": "http://notes.eatonphil.com/rfcs-and-asynchronous-first-culture.html", "published_at": "2020-05-16T00:00:00+00:00" }, { "id": "01a07df4-59bf-71b1-89e2-088df055c542", "title": "Writing a SQL database from scratch in Go: 4. a database/sql driver", "url": "http://notes.eatonphil.com/database-basics-a-database-sql-driver.html", "published_at": "2020-05-10T00:00:00+00:00" }, { "id": "01a07df4-59bf-71b1-89e2-088df103b4ee", "title": "Writing a SQL database from scratch in Go: 3. indexes", "url": "http://notes.eatonphil.com/database-basics-indexes.html", "published_at": "2020-05-01T00:00:00+00:00" }, { "id": "01a07df4-59bf-71b1-89e2-088df1d553ac", "title": "Writing a SQL database from scratch in Go: 2. binary expressions and WHERE filters", "url": "http://notes.eatonphil.com/database-basics-expressions-and-where.html", "published_at": "2020-04-12T00:00:00+00:00" }, { "id": "01a07df4-59bf-71b1-89e2-088df2aa3780", "title": "Studying foreign languages with inbox zero", "url": "http://notes.eatonphil.com/studying-with-inbox-zero.html", "published_at": "2020-04-04T00:00:00+00:00" }, { "id": "01a07df4-59bf-71b1-89e2-088df397e8f1", "title": "Reviewing the Surface Book 2", "url": "http://notes.eatonphil.com/reviewing-the-surface-book-2.html", "published_at": "2020-03-18T00:00:00+00:00" }, { "id": "01a07df4-59bf-71b1-89e2-088df45d1d51", "title": "Writing a SQL database from scratch in Go: 1. SELECT, INSERT, CREATE and a REPL", "url": "http://notes.eatonphil.com/database-basics.html", "published_at": "2020-03-06T00:00:00+00:00" }, { "id": "01a07df4-59bf-71b1-89e2-088df4dd371d", "title": "A minimal REST API in Java", "url": "http://notes.eatonphil.com/a-minimal-rest-api-in-java.html", "published_at": "2020-02-01T00:00:00+00:00" }, { "id": "01a07df4-59bf-71b1-89e2-088df5195ab4", "title": "Writing a lisp compiler from scratch in JavaScript: 6. an x86 upgrade", "url": "http://notes.eatonphil.com/compiler-basics-an-x86-upgrade.html", "published_at": "2019-12-08T00:00:00+00:00" }, { "id": "01a07df4-59bf-71b1-89e2-088df54f9bb0", "title": "Confusion and disengagement in meetings", "url": "http://notes.eatonphil.com/confusion-disengagement-in-meetings.html", "published_at": "2019-11-30T00:00:00+00:00" }, { "id": "01a07df4-59bf-71b1-89e2-088df55c76de", "title": "Interpreting Go", "url": "http://notes.eatonphil.com/interpreting-go.html", "published_at": "2019-10-12T00:00:00+00:00" }, { "id": "01a07df4-59bf-71b1-89e2-088df6238fb3", "title": "Administering Kubernetes is hard", "url": "http://notes.eatonphil.com/administering-kubernetes-is-hard.html", "published_at": "2019-09-30T00:00:00+00:00" }, { "id": "01a07df4-59bf-71b1-89e2-088df67b2791", "title": "Unit testing C code with gtest", "url": "http://notes.eatonphil.com/unit-testing-c-code-with-gtest.html", "published_at": "2019-08-31T00:00:00+00:00" }, { "id": "01a07df4-59bf-71b1-89e2-088df7284d19", "title": "Writing an x86 emulator from scratch in JavaScript: 2. system calls", "url": "http://notes.eatonphil.com/emulator-basics-system-calls.html", "published_at": "2019-07-20T00:00:00+00:00" }, { "id": "01a07df4-59bf-71b1-89e2-088df79be886", "title": "Writing a lisp compiler from scratch in JavaScript: 6. LLVM system calls", "url": "http://notes.eatonphil.com/compiler-basics-llvm-system-calls.html", "published_at": "2019-06-22T00:00:00+00:00" }, { "id": "01a07df4-59bf-71b1-89e2-088df85db4e5", "title": "Writing an x86 emulator from scratch in JavaScript: 1. a stack and register machine", "url": "http://notes.eatonphil.com/emulator-basics-a-stack-and-register-machine.html", "published_at": "2019-05-21T00:00:00+00:00" }, { "id": "01a07df4-59bf-71b1-89e2-088df9144f76", "title": "Tail call elimination", "url": "http://notes.eatonphil.com/tail-call-elimination.html", "published_at": "2019-05-14T00:00:00+00:00" }, { "id": "01a07df4-59bf-71b1-89e2-088df979573f", "title": "Writing a lisp compiler from scratch in JavaScript: 4. LLVM conditionals and compiling fibonacci", "url": "http://notes.eatonphil.com/compiler-basics-llvm-conditionals.html", "published_at": "2019-05-04T00:00:00+00:00" }, { "id": "01a07df4-59bf-71b1-89e2-088dfa71a32d", "title": "Responsibility and ownership", "url": "http://notes.eatonphil.com/responsibility-and-ownership.html", "published_at": "2019-04-30T00:00:00+00:00" }, { "id": "01a07df4-59bf-71b1-89e2-088dfb5cf571", "title": "Interpreting TypeScript", "url": "http://notes.eatonphil.com/interpreting-typescript.html", "published_at": "2019-04-14T00:00:00+00:00" }, { "id": "01a07df4-59bf-71b1-89e2-088dfbf1d75f", "title": "Writing a web server from scratch: 1. HTTP and sockets", "url": "http://notes.eatonphil.com/web-server-basics-http-and-sockets.html", "published_at": "2019-04-06T00:00:00+00:00" }, { "id": "01a07df4-59bf-71b1-89e2-088dfc4532cf", "title": "Writing a simple JSON path parser", "url": "http://notes.eatonphil.com/writing-a-simple-json-path-parser.html", "published_at": "2019-03-27T00:00:00+00:00" }, { "id": "01a07df4-59bf-71b1-89e2-088dfd2cf0de", "title": "Writing a lisp compiler from scratch in JavaScript: 3. LLVM", "url": "http://notes.eatonphil.com/compiler-basics-llvm.html", "published_at": "2019-03-10T00:00:00+00:00" }, { "id": "01a07df4-59bf-71b1-89e2-088dfda2160b", "title": "AOT-compilation of Javascript with V8", "url": "http://notes.eatonphil.com/aot-compilation-of-javascript-with-v8.html", "published_at": "2019-02-26T00:00:00+00:00" }, { "id": "01a07df4-59bf-71b1-89e2-088dfe7cf681", "title": "Windows", "url": "http://notes.eatonphil.com/windows.html", "published_at": "2019-01-20T00:00:00+00:00" }, { "id": "01a07df4-59bf-71b1-89e2-088dff6b6e8d", "title": "Writing a lisp compiler from scratch in JavaScript: 2. user-defined functions and variables", "url": "http://notes.eatonphil.com/compiler-basics-functions.html", "published_at": "2019-01-20T00:00:00+00:00" }, { "id": "01a07df4-59bf-71b1-89e2-088dffc1f992", "title": "Writing a lisp compiler from scratch in JavaScript: 1. lisp to assembly", "url": "http://notes.eatonphil.com/compiler-basics-lisp-to-assembly.html", "published_at": "2018-11-20T00:00:00+00:00" }, { "id": "01a07df4-59bf-71b1-89e2-088e00b4f780", "title": "On NYC, Tokyo and Seoul", "url": "http://notes.eatonphil.com/on-nyc-tokyo-and-seoul.html", "published_at": "2018-10-20T00:00:00+00:00" }, { "id": "01a07df4-59bf-71b1-89e2-088e00fbfda5", "title": "Why (and how) to read books", "url": "http://notes.eatonphil.com/why-and-how-to-read-books.html", "published_at": "2018-09-26T00:00:00+00:00" }, { "id": "01a07df4-59bf-71b1-89e2-088e013ed6aa", "title": "Compiling dynamic programming languages", "url": "http://notes.eatonphil.com/compiling-dynamic-programming-languages.html", "published_at": "2018-09-02T00:00:00+00:00" }, { "id": "01a07df4-59bf-71b1-89e2-088e0214c5dc", "title": "btest: a language agnostic test runner", "url": "http://notes.eatonphil.com/btest-a-language-agnostic-test-runner.html", "published_at": "2018-08-04T00:00:00+00:00" }, { "id": "01a07df4-59bf-71b1-89e2-088e024694d2", "title": "Writing to be read", "url": "http://notes.eatonphil.com/writing-to-be-read.html", "published_at": "2018-05-18T00:00:00+00:00" }, { "id": "01a07df4-59bf-71b1-89e2-088e02a57c7b", "title": "Writing a simple JSON parser", "url": "http://notes.eatonphil.com/writing-a-simple-json-parser.html", "published_at": "2018-05-06T00:00:00+00:00" }, { "id": "01a07df4-59bf-71b1-89e2-088e03337e25", "title": "Finishing up a FreeBSD experiment", "url": "http://notes.eatonphil.com/finishing-up-a-freebsd-experiment.html", "published_at": "2018-04-28T00:00:00+00:00" }, { "id": "01a07df4-59bf-71b1-89e2-088e0349211c", "title": "Book Review: ANSI Common Lisp", "url": "http://notes.eatonphil.com/book-review-ansi-common-lisp.html", "published_at": "2018-03-25T00:00:00+00:00" }, { "id": "01a07df4-59bf-71b1-89e2-088e03736d76", "title": "Starting a minimal Common Lisp project", "url": "http://notes.eatonphil.com/starting-a-minimal-common-lisp-project.html", "published_at": "2018-03-05T00:00:00+00:00" }, { "id": "01a07df4-59bf-71b1-89e2-088e0385b005", "title": "Interview with the D Language Blog: BSDScheme", "url": "http://notes.eatonphil.com/project-highlight-bsdscheme.html", "published_at": "2018-01-20T00:00:00+00:00" } ] posts Claim your blog
Back to Phil Eaton
Blog · corpus.blog/blogs/notes.eatonphil.com/posts

Phil Eaton

notes.eatonphil.com

2023

2022

2021

2020

2019

2018