41554 blogs · [ { "id": "01a094c8-350d-7130-abb7-a1ec137db516", "title": "Feeling sad about AI", "url": "https://artificialworlds.net/blog/2026/09/11/feeling-sad-about-ai/", "published_at": "2026-09-11T08:11:00+00:00" }, { "id": "01a0872e-ee25-70c4-b10b-28b1917ded23", "title": "Web Words: what if we used 3 words to find a web site?", "url": "https://artificialworlds.net/blog/2026/09/04/web-words/", "published_at": "2026-09-04T08:11:00+00:00" }, { "id": "01a0872e-ee25-70c4-b10b-28b1921ceaef", "title": "Coding JezzBall in Rust+WASM", "url": "https://artificialworlds.net/blog/2026/08/28/jezpuck-1/", "published_at": "2026-08-28T08:11:00+00:00" }, { "id": "01a0872e-ee25-70c4-b10b-28b193016c70", "title": "Coding up a circular buffer with Jez", "url": "https://artificialworlds.net/blog/2026/08/21/jez-circular-buffer/", "published_at": "2026-08-21T08:11:00+00:00" }, { "id": "01a0872e-ee25-70c4-b10b-28b1937334a1", "title": "LLMs produce plausible noise", "url": "https://artificialworlds.net/blog/2026/07/22/llms-produce-plausible-noise/", "published_at": "2026-07-22T17:00:00+00:00" }, { "id": "01a0872e-ee25-70c4-b10b-28b194123ec7", "title": "Parsing SGF files for fun", "url": "https://artificialworlds.net/blog/2026/07/17/parsing-sgf/", "published_at": "2026-07-17T12:00:00+00:00" }, { "id": "01a0872e-ee25-70c4-b10b-28b194c45eb1", "title": "A full (slow) solution to the Billion Row Challenge", "url": "https://artificialworlds.net/blog/2026/07/10/billion-bug/", "published_at": "2026-07-10T12:00:00+00:00" }, { "id": "01a0872e-ee25-70c4-b10b-28b1959dca3f", "title": "The billion row challenge: do we have a bug?", "url": "https://artificialworlds.net/blog/2026/06/19/billion-bug/", "published_at": "2026-06-19T12:00:00+00:00" }, { "id": "01a0872e-ee25-70c4-b10b-28b1968c0cb1", "title": "Writing a bit-wise iterator (with Jez!) for our gunzip implementation", "url": "https://artificialworlds.net/blog/2026/06/12/biterator/", "published_at": "2026-06-12T08:11:00+00:00" }, { "id": "01a0872e-ee25-70c4-b10b-28b19730a4b0", "title": "Keep the faith", "url": "https://artificialworlds.net/blog/2026/06/10/keep-the-faith/", "published_at": "2026-06-10T13:00:00+00:00" }, { "id": "01a0872e-ee25-70c4-b10b-28b197d34bd8", "title": "Implementing gunzip from scratch in Rust", "url": "https://artificialworlds.net/blog/2026/05/15/jez-ggunzip/", "published_at": "2026-05-15T08:11:00+00:00" }, { "id": "01a0872e-ee25-70c4-b10b-28b198232f67", "title": "Jez returns for programming language chat!", "url": "https://artificialworlds.net/blog/2026/05/08/jez-cell/", "published_at": "2026-05-08T08:11:00+00:00" }, { "id": "01a0872e-ee25-70c4-b10b-28b198d56559", "title": "Announcing Changelog Builder - a towncrier clone for building changelogs", "url": "https://artificialworlds.net/blog/2026/05/05/announcing-changelog-builder/", "published_at": "2026-05-05T11:59:00+00:00" }, { "id": "01a0872e-ee25-70c4-b10b-28b1991ea24e", "title": "Using anyhow to handle errors in my Rust changelog builder", "url": "https://artificialworlds.net/blog/2026/05/01/error-handling/", "published_at": "2026-05-01T08:11:00+00:00" }, { "id": "01a0872e-ee25-70c4-b10b-28b199f4283b", "title": "A simpler blog comment system", "url": "https://artificialworlds.net/blog/2026/04/26/simpler-blog-comment-system/", "published_at": "2026-04-26T08:19:00+00:00" }, { "id": "01a0872e-ee25-70c4-b10b-28b19a475caf", "title": "Building a Rust commandline tool: a towncrier clone", "url": "https://artificialworlds.net/blog/2026/04/24/changelog-builder-minimal/", "published_at": "2026-04-24T12:00:00+00:00" }, { "id": "01a0872e-ee25-70c4-b10b-28b19b0a6426", "title": "The billion row challenge: splitting lines using SIMD in Rust", "url": "https://artificialworlds.net/blog/2026/04/17/billion-splitting-lines/", "published_at": "2026-04-17T12:00:00+00:00" }, { "id": "01a0872e-ee25-70c4-b10b-28b19bb00ab8", "title": "Rust: reading very large files for the billion row challenge", "url": "https://artificialworlds.net/blog/2026/04/10/billion-read-file/", "published_at": "2026-04-10T12:00:00+00:00" }, { "id": "01a0872e-ee25-70c4-b10b-28b19c076830", "title": "Parsing whole lines of the Billion Row Challenge", "url": "https://artificialworlds.net/blog/2026/04/03/billion-parsing-lines/", "published_at": "2026-04-03T12:00:00+00:00" }, { "id": "01a0872e-ee25-70c4-b10b-28b19c608105", "title": "Improving our billion-row parsers and benchmarks", "url": "https://artificialworlds.net/blog/2026/03/27/billion-improving-benchmarks/", "published_at": "2026-03-27T12:00:00+00:00" }, { "id": "01a0872e-ee25-70c4-b10b-28b19d52aca4", "title": "Making our own String type in Rust", "url": "https://artificialworlds.net/blog/2026/03/20/asciistring/", "published_at": "2026-03-20T12:00:00+00:00" }, { "id": "01a0872e-ee25-70c4-b10b-28b19dd61599", "title": "Writing a Snake game in Rust/WASM", "url": "https://artificialworlds.net/blog/2026/03/13/wasm-game/", "published_at": "2026-03-13T12:00:00+00:00" }, { "id": "01a0872e-ee25-70c4-b10b-28b19e04d42d", "title": "Talking to localhost from inside an Android emulator", "url": "https://artificialworlds.net/blog/2026/03/03/android-emulator-talking-to-localhost/", "published_at": "2026-03-03T12:00:00+00:00" }, { "id": "01a0872e-ee25-70c4-b10b-28b19ef17f78", "title": "Rust: compiling to WASM to make a browser-based game using canvas", "url": "https://artificialworlds.net/blog/2026/02/27/wasm-game/", "published_at": "2026-02-27T12:00:00+00:00" }, { "id": "01a0872e-ee25-70c4-b10b-28b19f362a94", "title": "Billion row challenge: parsing temperatures fast(ish)", "url": "https://artificialworlds.net/blog/2026/02/20/billion-parse-temp/", "published_at": "2026-02-20T12:00:00+00:00" }, { "id": "01a0872e-ee25-70c4-b10b-28b19f871a7a", "title": "Rust: building arbitrary precision integers (badly)", "url": "https://artificialworlds.net/blog/2026/02/06/arbitrary-precision-integers/", "published_at": "2026-02-06T12:00:00+00:00" }, { "id": "01a0872e-ee25-70c4-b10b-28b19f881956", "title": "Rust: how to return a closure from a function, and what are closures anyway?", "url": "https://artificialworlds.net/blog/2026/01/30/returning-closures/", "published_at": "2026-01-30T12:00:00+00:00" }, { "id": "01a0872e-ee25-70c4-b10b-28b1a039988e", "title": "FizzBuzz 2: FizzBuzz Harder", "url": "https://artificialworlds.net/blog/2026/01/23/fizzbuzz2/", "published_at": "2026-01-23T12:00:00+00:00" }, { "id": "01a0872e-ee25-70c4-b10b-28b1a067cccd", "title": "Why I don't use AI", "url": "https://artificialworlds.net/blog/2025/12/16/why-i-dont-use-ai/", "published_at": "2025-12-16T10:00:00+00:00" }, { "id": "01a0872e-ee26-701b-8c67-618094d121a4", "title": "Converting a string to an int in Rust (for no reason)", "url": "https://artificialworlds.net/blog/2025/12/12/fizzbuzz-in-rust/", "published_at": "2025-12-12T12:00:00+00:00" }, { "id": "01a0872e-ee26-701b-8c67-6180955cee36", "title": "Why I don't use AI (expanded)", "url": "https://artificialworlds.net/blog/2025/12/10/why-i-dont-use-ai-expanded/", "published_at": "2025-12-10T10:00:00+00:00" }, { "id": "01a0872e-ee28-7102-81f1-8b1e8eed44ee", "title": "Resizing and moving an encrypted LVM volume", "url": "https://artificialworlds.net/blog/2025/12/09/resizing-encrypted-lvm/", "published_at": "2025-12-09T10:00:00+00:00" }, { "id": "01a0872e-ee28-7102-81f1-8b1e8fbc1fcc", "title": "Implementing FizzBuzz in Rust (for no reason)", "url": "https://artificialworlds.net/blog/2025/11/29/fizzbuzz-in-rust/", "published_at": "2025-11-29T12:00:00+00:00" }, { "id": "01a0872e-ee28-7102-81f1-8b1e90b73350", "title": "Reversing a string in Rust (for no reason)", "url": "https://artificialworlds.net/blog/2025/11/13/reversing-a-string-in-rust/", "published_at": "2025-11-13T12:00:00+00:00" }, { "id": "01a0872e-ee29-7239-9e67-879837d25f12", "title": "Mini-rust in Rust 050: Parsing function definitions", "url": "https://artificialworlds.net/blog/2025/10/24/mini-rust-in-rust-050-parsing-function-def/", "published_at": "2025-10-24T12:00:00+00:00" }, { "id": "01a0872e-ee29-7239-9e67-879837e49e61", "title": "Why do I have 2 passwords? How to talk about encryption in Matrix", "url": "https://artificialworlds.net/blog/2025/10/20/why-do-i-have-two-passwords-video/", "published_at": "2025-10-20T13:00:00+00:00" }, { "id": "01a0872e-ee29-7239-9e67-879838342a07", "title": "Invisible Crypto: can Matrix be both secure and easy to use?", "url": "https://artificialworlds.net/blog/2025/10/20/invisible-crypto-video/", "published_at": "2025-10-20T12:00:00+00:00" }, { "id": "01a0872e-ee29-7239-9e67-879838f63f2a", "title": "Mini-rust in Rust 049: Lexing an empty function", "url": "https://artificialworlds.net/blog/2025/10/17/mini-rust-in-rust-049-lexing-functions/", "published_at": "2025-10-17T12:00:00+00:00" }, { "id": "01a0872e-ee29-7239-9e67-87983991c8b0", "title": "Mini-rust in Rust 048: Handling variable scope", "url": "https://artificialworlds.net/blog/2025/10/10/mini-rust-in-rust-048-scopes/", "published_at": "2025-10-10T12:00:00+00:00" }, { "id": "01a0872e-ee29-7239-9e67-879839f4ca71", "title": "Mini-rust in Rust 047: Updating types as we get more information", "url": "https://artificialworlds.net/blog/2025/10/03/mini-rust-in-rust-047-update-types-later/", "published_at": "2025-10-03T12:00:00+00:00" }, { "id": "01a0872e-ee29-7239-9e67-87983add04c9", "title": "Jez and Andy write a Parser", "url": "https://artificialworlds.net/blog/2025/09/26/jez-and-andy-write-a-parser/", "published_at": "2025-09-26T12:00:00+00:00" }, { "id": "01a0872e-ee29-7239-9e67-87983b9f65c5", "title": "Jez learns Rust by writing a Lexer", "url": "https://artificialworlds.net/blog/2025/09/19/jez-learns-rust/", "published_at": "2025-09-19T12:00:00+00:00" }, { "id": "01a0872e-ee29-7239-9e67-87983c70e725", "title": "Mini-rust in Rust 046: Type-checking mutations", "url": "https://artificialworlds.net/blog/2025/09/12/mini-rust-in-rust-046-type-check-mutations/", "published_at": "2025-09-12T12:00:00+00:00" }, { "id": "01a0872e-ee29-7239-9e67-87983ce090c4", "title": "Mini-rust in Rust 045: Combining two types when we add things", "url": "https://artificialworlds.net/blog/2025/09/05/mini-rust-in-rust-045-combine-types-in-operation/", "published_at": "2025-09-05T12:00:00+00:00" }, { "id": "01a0872e-ee29-7239-9e67-87983d20fba1", "title": "Why I don't use AI", "url": "https://artificialworlds.net/blog/2025/09/03/why-i-dont-use-ai/", "published_at": "2025-09-03T10:00:00+00:00" }, { "id": "01a0872e-ee29-7239-9e67-87983d46c89e", "title": "Mini-rust in Rust 044: Finding the type of a symbol", "url": "https://artificialworlds.net/blog/2025/08/29/mini-rust-in-rust-044-types-of-symbols/", "published_at": "2025-08-29T12:00:00+00:00" }, { "id": "01a0872e-ee29-7239-9e67-87983d546410", "title": "Mini-rust in Rust 043: Expressions on the left of operators", "url": "https://artificialworlds.net/blog/2025/08/22/mini-rust-in-rust-043-expression-on-left-of-operation/", "published_at": "2025-08-22T12:00:00+00:00" }, { "id": "01a0872e-ee29-7239-9e67-87983db30262", "title": "Mini-rust in Rust 042: An unexpected token means stop this expression", "url": "https://artificialworlds.net/blog/2025/08/15/mini-rust-in-rust-042-unexpected-token-means-stop-expression/", "published_at": "2025-08-15T12:00:00+00:00" }, { "id": "01a0872e-ee29-7239-9e67-87983e0a5534", "title": "Mini-rust in Rust 041: While conditions that are not operations", "url": "https://artificialworlds.net/blog/2025/08/08/mini-rust-in-rust-041-while-cond-not-operation/", "published_at": "2025-08-08T12:00:00+00:00" }, { "id": "01a0872e-ee29-7239-9e67-87983e6fc83e", "title": "Mini-rust in Rust 040: While conditions should be bool", "url": "https://artificialworlds.net/blog/2025/08/01/mini-rust-in-rust-040-while-condition-should-be-bool/", "published_at": "2025-08-01T12:00:00+00:00" }, { "id": "01a0872e-ee29-7239-9e67-87983eaf5f0f", "title": "Mini-rust in Rust 039: Spans should be ranges", "url": "https://artificialworlds.net/blog/2025/07/25/mini-rust-in-rust-039-span-as-range/", "published_at": "2025-07-25T12:00:00+00:00" }, { "id": "01a0872e-ee29-7239-9e67-87983f3f9912", "title": "Mini-rust in Rust 038: Avoiding a String allocation for each token", "url": "https://artificialworlds.net/blog/2025/07/18/mini-rust-in-rust-038-no-strings-in-tokens/", "published_at": "2025-07-18T12:00:00+00:00" }, { "id": "01a0872e-ee29-7239-9e67-87983fc2808a", "title": "Mini-rust in Rust 037: Complex expressions in mutation statements", "url": "https://artificialworlds.net/blog/2025/07/11/mini-rust-in-rust-037-mutation-expressions/", "published_at": "2025-07-11T12:00:00+00:00" }, { "id": "01a0872e-ee29-7239-9e67-8798402b84f0", "title": "Mini-rust in Rust 036: Evaluating code blocks", "url": "https://artificialworlds.net/blog/2025/07/04/mini-rust-in-rust-036-eval-block/", "published_at": "2025-07-04T12:00:00+00:00" }, { "id": "01a0872e-ee29-7239-9e67-879840ad01d7", "title": "Mini-rust in Rust 035: Tidying up the evaluator", "url": "https://artificialworlds.net/blog/2025/06/27/mini-rust-in-rust-035-tidying-evaluator/", "published_at": "2025-06-27T12:00:00+00:00" }, { "id": "01a0872e-ee29-7239-9e67-879840f3e948", "title": "Mini-rust in Rust 034: Our first program, actually working", "url": "https://artificialworlds.net/blog/2025/06/20/mini-rust-in-rust-034-evaluating-while/", "published_at": "2025-06-20T12:00:00+00:00" }, { "id": "01a0872e-ee2a-72d2-a5f9-2d71780b1a78", "title": "Mini-rust in Rust 033: Evaluating operators like plusequals and timesequals", "url": "https://artificialworlds.net/blog/2025/06/13/mini-rust-in-rust-033-evaluating-plusequals/", "published_at": "2025-06-13T12:00:00+00:00" }, { "id": "01a0872e-ee2a-72d2-a5f9-2d7178d02492", "title": "Mini-rust in Rust 032: Supporting a Unit type and type checking mutations", "url": "https://artificialworlds.net/blog/2025/06/06/mini-rust-in-rust-032-type-checking-mutation-and-unit/", "published_at": "2025-06-06T12:00:00+00:00" }, { "id": "01a0872e-ee2a-72d2-a5f9-2d7179a70c1e", "title": "Mini-rust in Rust 031: Getting \"while\" through the type checker", "url": "https://artificialworlds.net/blog/2025/05/30/mini-rust-in-rust-031-type-checking-while/", "published_at": "2025-05-30T12:00:00+00:00" }, { "id": "01a0872e-ee2a-72d2-a5f9-2d7179b4a594", "title": "Mini-rust in Rust 030: Expressions after while loops", "url": "https://artificialworlds.net/blog/2025/05/23/mini-rust-in-rust-030-expression-after-while/", "published_at": "2025-05-23T12:00:00+00:00" }, { "id": "01a0872e-ee2a-72d2-a5f9-2d7179e70916", "title": "Mini-rust in Rust 029: Parsing plus-equals", "url": "https://artificialworlds.net/blog/2025/05/16/mini-rust-in-rust-029-parsing-plusequals/", "published_at": "2025-05-16T12:00:00+00:00" }, { "id": "01a0872e-ee2a-72d2-a5f9-2d717a8f371a", "title": "Mini-rust in Rust 028: Lexing plus-equals", "url": "https://artificialworlds.net/blog/2025/05/09/mini-rust-in-rust-028-lexing-plusequals/", "published_at": "2025-05-09T12:00:00+00:00" }, { "id": "01a0872e-ee2a-72d2-a5f9-2d717b004386", "title": "Standing again for the Matrix Governing Board", "url": "https://artificialworlds.net/blog/2025/05/07/standing-again-for-matrix-governing-board/", "published_at": "2025-05-07T10:30:10+00:00" }, { "id": "01a0872e-ee2a-72d2-a5f9-2d717b6496db", "title": "Testing nonexistence", "url": "https://artificialworlds.net/blog/2025/05/06/testing-nonexistence/", "published_at": "2025-05-06T13:08:00+00:00" }, { "id": "01a0872e-ee2a-72d2-a5f9-2d717b6c9205", "title": "Mini-rust in Rust 027: Parsing blocks of code", "url": "https://artificialworlds.net/blog/2025/05/02/mini-rust-in-rust-027-parsing-blocks/", "published_at": "2025-05-02T12:00:00+00:00" }, { "id": "01a0872e-ee2a-72d2-a5f9-2d717bf44492", "title": "Mini-rust in Rust 026: Parsing an empty while loop", "url": "https://artificialworlds.net/blog/2025/04/25/mini-rust-in-rust-026-parsing-empty-while/", "published_at": "2025-04-25T12:00:00+00:00" }, { "id": "01a0872e-ee2a-72d2-a5f9-2d717cf18f9c", "title": "Mini-rust in Rust 025: Parsing let mut", "url": "https://artificialworlds.net/blog/2025/04/18/mini-rust-in-rust-025-parsing-mut/", "published_at": "2025-04-18T12:00:00+00:00" }, { "id": "01a0872e-ee2a-72d2-a5f9-2d717d1165e3", "title": "Mini-rust in Rust 024: Lexing the", "url": "https://artificialworlds.net/blog/2025/04/11/mini-rust-in-rust-024-lexing-lte/", "published_at": "2025-04-11T12:00:00+00:00" }, { "id": "01a0872e-ee2a-72d2-a5f9-2d717e0eeee9", "title": "Mini-rust in Rust 023: Refactor to share structure of the syntax tree", "url": "https://artificialworlds.net/blog/2025/04/04/mini-rust-in-rust-023-share-syntax-tree-structure/", "published_at": "2025-04-04T12:00:00+00:00" }, { "id": "01a0872e-ee2a-72d2-a5f9-2d717e233d9b", "title": "Rust tracing basic setup", "url": "https://artificialworlds.net/blog/2025/03/29/rust-tracing-basic-setup/", "published_at": "2025-03-29T11:15:00+00:00" }, { "id": "01a0872e-ee2a-72d2-a5f9-2d717e919964", "title": "Mini-rust in Rust 022: Stop lying about types in errors", "url": "https://artificialworlds.net/blog/2025/03/28/mini-rust-in-rust-022-types-in-errors/", "published_at": "2025-03-28T12:00:00+00:00" }, { "id": "01a0872e-ee2a-72d2-a5f9-2d717f063215", "title": "Mini-rust in Rust 021: Including type information in our syntax tree", "url": "https://artificialworlds.net/blog/2025/03/21/mini-rust-in-rust-021-typed-syntax-tree/", "published_at": "2025-03-21T12:00:00+00:00" }, { "id": "01a0872e-ee2a-72d2-a5f9-2d717f0baa16", "title": "Mini-rust in Rust 020: Gaps in our type checker", "url": "https://artificialworlds.net/blog/2025/03/14/mini-rust-in-rust-020-gaps-in-type-check/", "published_at": "2025-03-14T12:00:00+00:00" }, { "id": "01a0872e-ee2a-72d2-a5f9-2d71800402e9", "title": "Mini-rust in Rust 019: Type checking an actual type error", "url": "https://artificialworlds.net/blog/2025/03/07/mini-rust-in-rust-019-type-check-assignment-sad/", "published_at": "2025-03-07T12:00:00+00:00" }, { "id": "01a0872e-ee2a-72d2-a5f9-2d71807bfcd7", "title": "Mini-rust in Rust 018: Type checking, the happy path", "url": "https://artificialworlds.net/blog/2025/02/28/mini-rust-in-rust-018-type-check-assignment-happy/", "published_at": "2025-02-28T12:00:00+00:00" }, { "id": "01a0872e-ee2a-72d2-a5f9-2d7180bc28b0", "title": "Mini-rust in Rust 017: Handling float literals", "url": "https://artificialworlds.net/blog/2025/02/21/mini-rust-in-rust-017-lex-parse-eval-floats/", "published_at": "2025-02-21T12:00:00+00:00" }, { "id": "01a0872e-ee2a-72d2-a5f9-2d71811f1e51", "title": "Mini-rust in Rust 016: Tidying our parser", "url": "https://artificialworlds.net/blog/2025/02/14/mini-rust-in-rust-016-tidy-assignment-parsing/", "published_at": "2025-02-14T12:00:00+00:00" }, { "id": "01a0872e-ee2a-72d2-a5f9-2d7181524dfb", "title": "Mini-rust in Rust 015: Parsing a typed assignment", "url": "https://artificialworlds.net/blog/2025/02/07/mini-rust-in-rust-015-parse-typed-assignment/", "published_at": "2025-02-07T12:00:00+00:00" }, { "id": "01a0872e-ee2a-72d2-a5f9-2d7181d0e4ae", "title": "Mini-rust in Rust 014: Evaluating an assignment", "url": "https://artificialworlds.net/blog/2025/01/31/mini-rust-in-rust-014-evaluating-an-assignment/", "published_at": "2025-01-31T12:00:00+00:00" }, { "id": "01a0872e-ee2a-72d2-a5f9-2d7182b56d91", "title": "Mini-rust in Rust 013: Fixing a bug in our lexer", "url": "https://artificialworlds.net/blog/2025/01/24/mini-rust-in-rust-013-fixing-a-bug-in-our-lexer/", "published_at": "2025-01-24T12:00:00+00:00" }, { "id": "01a0872e-ee2a-72d2-a5f9-2d71835b185b", "title": "Mini-rust in Rust 012: Parsing with backtracking", "url": "https://artificialworlds.net/blog/2025/01/17/mini-rust-in-rust-012-parsing-with-backtracking/", "published_at": "2025-01-17T12:00:00+00:00" }, { "id": "01a0872e-ee2a-72d2-a5f9-2d718449aa3d", "title": "Mini-rust in Rust 011: Parsing an assignment plus expression", "url": "https://artificialworlds.net/blog/2025/01/10/mini-rust-in-rust-011-parsing-an-assignment-plus-expression/", "published_at": "2025-01-10T12:00:00+00:00" }, { "id": "01a0872e-ee2a-72d2-a5f9-2d7185350e6a", "title": "Mini-rust in Rust 010: Lexing an assignment", "url": "https://artificialworlds.net/blog/2025/01/03/mini-rust-in-rust-010-lexing-an-assignment/", "published_at": "2025-01-03T12:00:00+00:00" }, { "id": "01a0872e-ee2a-72d2-a5f9-2d7185a8de82", "title": "Mini-rust in Rust 009: Handling parsing errors", "url": "https://artificialworlds.net/blog/2024/12/27/mini-rust-in-rust-009-handling-parsing-errors/", "published_at": "2024-12-27T12:00:00+00:00" }, { "id": "01a0872e-ee2a-72d2-a5f9-2d71864a20de", "title": "Mini-rust in Rust 008: Refactoring our parser", "url": "https://artificialworlds.net/blog/2024/12/20/mini-rust-in-rust-008-refactoring-our-parser/", "published_at": "2024-12-20T12:00:00+00:00" }, { "id": "01a0872e-ee2a-72d2-a5f9-2d7186fcf0d3", "title": "Mini-rust in Rust 007: Evaluating an operation", "url": "https://artificialworlds.net/blog/2024/12/13/mini-rust-in-rust-007-evaluating-an-operation/", "published_at": "2024-12-13T12:00:00+00:00" }, { "id": "01a0872e-ee2a-72d2-a5f9-2d7187fbabfe", "title": "Mini-rust in Rust 006: Parsing an operation", "url": "https://artificialworlds.net/blog/2024/12/06/mini-rust-in-rust-006-parsing-an-operation/", "published_at": "2024-12-06T12:00:00+00:00" }, { "id": "01a0872e-ee2a-72d2-a5f9-2d71886297c3", "title": "Message order in Matrix: right now, we are deliberately inconsistent", "url": "https://artificialworlds.net/blog/2024/12/04/message-order-in-matrix/", "published_at": "2024-12-04T14:25:00+00:00" }, { "id": "01a0872e-ee2a-72d2-a5f9-2d7188f85a6e", "title": "Mini-rust in Rust 005: Making our lexer an iterator", "url": "https://artificialworlds.net/blog/2024/11/29/mini-rust-in-rust-005-making-our-lexer-an-iterator/", "published_at": "2024-11-29T12:00:00+00:00" }, { "id": "01a0872e-ee2a-72d2-a5f9-2d71896ca76f", "title": "Mini-rust in Rust 004: Refactoring our lexer", "url": "https://artificialworlds.net/blog/2024/11/22/mini-rust-in-rust-004-refactoring-our-lexer/", "published_at": "2024-11-22T12:00:00+00:00" }, { "id": "01a0872e-ee2a-72d2-a5f9-2d7189bdc7d6", "title": "Mini-rust in Rust 003: Much prettier errors", "url": "https://artificialworlds.net/blog/2024/11/15/mini-rust-in-rust-003-much-prettier-errors/", "published_at": "2024-11-15T12:00:00+00:00" }, { "id": "01a0872e-ee2a-72d2-a5f9-2d718a9134fe", "title": "Mini-rust in Rust 002: Errors while lexing", "url": "https://artificialworlds.net/blog/2024/11/08/mini-rust-in-rust-002-errors-while-lexing/", "published_at": "2024-11-08T12:00:00+00:00" }, { "id": "01a0872e-ee2a-72d2-a5f9-2d718ac56be4", "title": "Mini-rust in Rust 001: Lexing an int", "url": "https://artificialworlds.net/blog/2024/10/31/mini-rust-in-rust-001-lexing-an-int/", "published_at": "2024-10-31T10:05:00+00:00" }, { "id": "01a0872e-ee2a-72d2-a5f9-2d718b929756", "title": "Rust 101 - 53: Exercises for module G (q4)", "url": "https://artificialworlds.net/blog/2024/10/23/rust-101-53-exercises-for-module-g-q4/", "published_at": "2024-10-23T20:00:00+00:00" }, { "id": "01a0872e-ee2a-72d2-a5f9-2d718b9a3ce3", "title": "Rust 101 - 52: Exercises for module G (q3)", "url": "https://artificialworlds.net/blog/2024/10/23/rust-101-52-exercises-for-module-g-q3/", "published_at": "2024-10-23T19:56:00+00:00" }, { "id": "01a0872e-ee2a-72d2-a5f9-2d718c3b5b94", "title": "Rust 101 - 51: Exercises for module G (q2)", "url": "https://artificialworlds.net/blog/2024/10/23/rust-101-51-exercises-for-module-g-q2/", "published_at": "2024-10-23T19:52:00+00:00" }, { "id": "01a0872e-ee2a-72d2-a5f9-2d718d27de43", "title": "Rust 101 - 50: Exercises for module G (q1)", "url": "https://artificialworlds.net/blog/2024/10/23/rust-101-50-exercises-for-module-g-q1/", "published_at": "2024-10-23T19:44:00+00:00" }, { "id": "01a0872e-ee2a-72d2-a5f9-2d718d3a4b95", "title": "Rust 101 - 49: Foreign function interfaces (interacting with other languages)", "url": "https://artificialworlds.net/blog/2024/10/23/rust-101-49-foreign-function-interfaces/", "published_at": "2024-10-23T19:34:00+00:00" }, { "id": "01a0872e-ee2a-72d2-a5f9-2d718dad750b", "title": "19 years of blogging", "url": "https://artificialworlds.net/blog/2024/10/22/19-years-of-blogging/", "published_at": "2024-10-22T08:33:00+00:00" }, { "id": "01a0872e-ee2a-72d2-a5f9-2d718dbfdcb4", "title": "Deployment is important", "url": "https://artificialworlds.net/blog/2024/10/21/2024-10-21-deployment-is-important/", "published_at": "2024-10-21T02:23:50+00:00" } ] posts Claim your blog
Back to Andy Balaam's Blog
Blog · corpus.blog/blogs/artificialworlds.net/posts

Andy Balaam's Blog

artificialworlds.net

2026

2025

2024