41554 blogs · [ { "id": "01a0872e-ee2a-72d2-a5f9-2d718e3b1462", "title": "Rust 101 - 48: Exercises for module F (q3)", "url": "https://artificialworlds.net/blog/2024/10/21/rust-101-48-exercises-for-module-f-q3/", "published_at": "2024-10-21T01:22:38+00:00" }, { "id": "01a0872e-ee2a-72d2-a5f9-2d718f3562d7", "title": "Rust 101 - 47: Exercises for module F (q2)", "url": "https://artificialworlds.net/blog/2024/10/21/rust-101-47-exercises-for-module-f-q2/", "published_at": "2024-10-21T00:23:38+00:00" }, { "id": "01a0872e-ee2a-72d2-a5f9-2d7190024e4e", "title": "Heads-up: moving away from WordPress", "url": "https://artificialworlds.net/blog/2024/10/16/heads-up-moving-away-from-wordpress/", "published_at": "2024-10-16T22:51:50+00:00" }, { "id": "01a0872e-ee2a-72d2-a5f9-2d719087c0a9", "title": "Rust 101 - 46: Exercises for module F (q1)", "url": "https://artificialworlds.net/blog/2024/10/07/rust-101-46-exercises-for-module-f-q1/", "published_at": "2024-10-07T18:58:38+00:00" }, { "id": "01a0872e-ee2a-72d2-a5f9-2d71909a6023", "title": "Rust 101 - 45: Unsafe types and examples", "url": "https://artificialworlds.net/blog/2024/09/27/rust-101-45-unsafe-types-and-examples/", "published_at": "2024-09-27T19:07:53+00:00" }, { "id": "01a0872e-ee2a-72d2-a5f9-2d7190a72d8d", "title": "Rust 101 - 44: Undefined behaviour", "url": "https://artificialworlds.net/blog/2024/09/16/rust-101-44-undefined-behaviour/", "published_at": "2024-09-16T07:19:45+00:00" }, { "id": "01a0872e-ee2a-72d2-a5f9-2d7190eb485b", "title": "Rust 101 - 43: The two meanings of \"unsafe\" in Rust", "url": "https://artificialworlds.net/blog/2024/09/07/rust-101-43-the-two-meanings-of-unsafe-in-rust/", "published_at": "2024-09-07T11:41:37+00:00" }, { "id": "01a0872e-ee2a-72d2-a5f9-2d71917097b3", "title": "Rust 101 - 42: Why do we need unsafe?", "url": "https://artificialworlds.net/blog/2024/09/06/rust-101-42-why-do-we-need-unsafe/", "published_at": "2024-09-06T07:55:42+00:00" }, { "id": "01a0872e-ee2a-72d2-a5f9-2d71921dcd8e", "title": "Rust 101 - 41: Exercises for module E (q2b)", "url": "https://artificialworlds.net/blog/2024/08/22/rust-101-41-exercises-for-module-e-q2b/", "published_at": "2024-08-22T07:52:12+00:00" }, { "id": "01a0872e-ee2a-72d2-a5f9-2d719278c5ff", "title": "Rust 101 - 40: Exercises for module E (q2a)", "url": "https://artificialworlds.net/blog/2024/08/22/rust-101-40-exercises-for-module-e-q2a/", "published_at": "2024-08-22T07:38:41+00:00" }, { "id": "01a0872e-ee2a-72d2-a5f9-2d7192f222d5", "title": "Rust 101 - 39: Exercises for module E (q1b)", "url": "https://artificialworlds.net/blog/2024/08/20/rust-101-39-exercises-for-module-e-q1b/", "published_at": "2024-08-20T17:59:15+00:00" }, { "id": "01a0872e-ee2a-72d2-a5f9-2d71939018c8", "title": "Rust 101 - 38: Exercises for module E (q1a)", "url": "https://artificialworlds.net/blog/2024/08/06/rust-101-38-exercises-for-module-e-q1a/", "published_at": "2024-08-06T07:51:13+00:00" }, { "id": "01a0872e-ee2a-72d2-a5f9-2d719433095b", "title": "Rust 101 - 37: Async runtimes", "url": "https://artificialworlds.net/blog/2024/07/29/rust-101-37-async-runtimes/", "published_at": "2024-07-29T07:43:52+00:00" }, { "id": "01a0872e-ee2a-72d2-a5f9-2d71945c3d2d", "title": "Rust 101 - 36: What async and await really do", "url": "https://artificialworlds.net/blog/2024/07/25/rust-101-36-what-async-and-await-really-do/", "published_at": "2024-07-25T07:14:21+00:00" }, { "id": "01a0872e-ee2a-72d2-a5f9-2d7194895c59", "title": "Rust 101 - 35: Futures", "url": "https://artificialworlds.net/blog/2024/07/18/rust-101-35-futures/", "published_at": "2024-07-18T07:47:55+00:00" }, { "id": "01a0872e-ee2a-72d2-a5f9-2d719586f9a4", "title": "Rust 101 - 34: What is async?", "url": "https://artificialworlds.net/blog/2024/07/18/rust-101-34-what-is-async/", "published_at": "2024-07-18T07:42:13+00:00" }, { "id": "01a0872e-ee2b-703c-8301-6628855f631d", "title": "Rust 101 - 33: Exercises for module D (q3)", "url": "https://artificialworlds.net/blog/2024/06/24/rust-101-33-exercises-for-module-d-q3/", "published_at": "2024-06-24T07:14:18+00:00" }, { "id": "01a0872e-ee2b-703c-8301-662885ef18e2", "title": "Elected to the Matrix Foundation Governing Board!", "url": "https://artificialworlds.net/blog/2024/06/23/elected-to-the-matrix-foundation-governing-board/", "published_at": "2024-06-23T15:12:00+00:00" }, { "id": "01a0872e-ee2b-703c-8301-6628862e614d", "title": "Rust 101 - 32: Exercises for module D (q2)", "url": "https://artificialworlds.net/blog/2024/06/23/rust-101-32-exercises-for-module-d-q2/", "published_at": "2024-06-23T14:20:27+00:00" }, { "id": "01a0872e-ee2b-703c-8301-6628864f8269", "title": "Rust 101 - 31: Exercises for module D (q1)", "url": "https://artificialworlds.net/blog/2024/06/22/rust-101-31-exercises-for-module-d-q1/", "published_at": "2024-06-22T13:08:05+00:00" }, { "id": "01a0872e-ee2b-703c-8301-662886a47a77", "title": "Rust 101 - 30: Good patterns and not so good", "url": "https://artificialworlds.net/blog/2024/06/17/rust-101-30-good-patterns-and-not-so-good/", "published_at": "2024-06-17T07:47:09+00:00" }, { "id": "01a0872e-ee2b-703c-8301-66288745a6b5", "title": "Rust 101 - 29: Trait objects and object safety", "url": "https://artificialworlds.net/blog/2024/06/17/rust-101-29-trait-objects-and-object-safety/", "published_at": "2024-06-17T07:45:10+00:00" }, { "id": "01a0872e-ee2b-703c-8301-662887be8e12", "title": "Rust 101 - 28: Dynamic dispatch", "url": "https://artificialworlds.net/blog/2024/06/10/rust-101-28-dynamic-dispatch/", "published_at": "2024-06-10T18:36:25+00:00" }, { "id": "01a0872e-ee2b-703c-8301-6628884a4092", "title": "New home for my videos: video.infosec.exchange", "url": "https://artificialworlds.net/blog/2024/06/09/new-home-for-my-videos-video-infosec-exchange/", "published_at": "2024-06-09T12:39:07+00:00" }, { "id": "01a0872e-ee2b-703c-8301-6628891caea8", "title": "Why I won't link to AI resources", "url": "https://artificialworlds.net/blog/2024/05/24/why-i-wont-link-to-ai-resources/", "published_at": "2024-05-24T08:58:56+00:00" }, { "id": "01a0872e-ee2b-703c-8301-6628893ebec0", "title": "Rust 101 - 27: Exercises for module C (q2)", "url": "https://artificialworlds.net/blog/2024/05/23/rust-101-27-exercises-for-module-c-q2/", "published_at": "2024-05-23T08:05:43+00:00" }, { "id": "01a0872e-ee2b-703c-8301-662889e2d3a3", "title": "Rust 101 - 26: Exercises for module C (q1)", "url": "https://artificialworlds.net/blog/2024/05/22/rust-101-26-exercises-for-module-c-q1/", "published_at": "2024-05-22T19:22:56+00:00" }, { "id": "01a0872e-ee2b-703c-8301-66288a124fa1", "title": "Choosing who to vote for in the 2024 UK General Election", "url": "https://artificialworlds.net/blog/2024/05/22/choosing-who-to-vote-for-in-the-2024-uk-general-election/", "published_at": "2024-05-22T19:18:09+00:00" }, { "id": "01a0872e-ee2b-703c-8301-66288b08bae8", "title": "Rust 101 - 25: Threads, Mutexes, channels, Send and Sync", "url": "https://artificialworlds.net/blog/2024/05/16/rust-101-25-threads-mutexes-channels-send-and-sync/", "published_at": "2024-05-16T19:20:59+00:00" }, { "id": "01a0872e-ee2b-703c-8301-66288b28d0a8", "title": "Rust 101 - 24: Parallelism and Rayon", "url": "https://artificialworlds.net/blog/2024/05/13/rust-101-24-parallelism-and-rayon/", "published_at": "2024-05-13T08:50:10+00:00" }, { "id": "01a0872e-ee2b-703c-8301-66288b89f2c5", "title": "Rust 101 - 23 Exercises for module B (q3)", "url": "https://artificialworlds.net/blog/2024/05/04/rust-101-23-exercises-for-module-b-q3/", "published_at": "2024-05-04T07:42:49+00:00" }, { "id": "01a0872e-ee2b-703c-8301-66288bfe8610", "title": "Rust 101 - 22 Exercises for module B (q2)", "url": "https://artificialworlds.net/blog/2024/05/04/rust-101-22-exercises-for-module-b-q2/", "published_at": "2024-05-04T07:42:20+00:00" }, { "id": "01a0872e-ee2b-703c-8301-66288c3bb636", "title": "Rust 101 - 21 Exercises for module B (q1)", "url": "https://artificialworlds.net/blog/2024/05/04/rust-101-21-exercises-for-module-b-q1/", "published_at": "2024-05-04T07:41:29+00:00" }, { "id": "01a0872e-ee2b-703c-8301-66288d2b7e44", "title": "Rust 101 - 20: Unit, integration and benchmark tests", "url": "https://artificialworlds.net/blog/2024/04/22/rust-101-20-unit-integration-and-benchmark-tests/", "published_at": "2024-04-22T07:50:58+00:00" }, { "id": "01a0872e-ee2b-703c-8301-66288de6d150", "title": "Standing for the Matrix Governing Board", "url": "https://artificialworlds.net/blog/2024/04/20/standing-for-the-matrix-governing-board/", "published_at": "2024-04-20T08:42:10+00:00" }, { "id": "01a0872e-ee2b-703c-8301-66288e1ba092", "title": "Rust 101 - 19: Creating a nice API", "url": "https://artificialworlds.net/blog/2024/04/18/rust-101-19-creating-a-nice-api/", "published_at": "2024-04-18T18:15:16+00:00" }, { "id": "01a0872e-ee2b-703c-8301-66288e5f50b8", "title": "Rust 101 - 18: Dependencies and Cargo.toml", "url": "https://artificialworlds.net/blog/2024/04/11/rust-101-18-dependencies-and-cargo-toml/", "published_at": "2024-04-11T08:27:39+00:00" }, { "id": "01a0872e-ee2b-703c-8301-66288eca6fa0", "title": "Rust 101 - 17: Exercises for module A3 (part 2)", "url": "https://artificialworlds.net/blog/2024/04/08/rust-101-17-exercises-for-module-a3-part-2/", "published_at": "2024-04-08T08:26:11+00:00" }, { "id": "01a0872e-ee2b-703c-8301-66288f04567d", "title": "Automated backups from Signal to Nextcloud", "url": "https://artificialworlds.net/blog/2024/03/29/automated-backups-from-signal-to-nextcloud/", "published_at": "2024-03-29T10:17:23+00:00" }, { "id": "01a0872e-ee2b-703c-8301-66288f895432", "title": "Rust 101 - 16: Exercises for module A3 (part 1)", "url": "https://artificialworlds.net/blog/2024/03/23/rust-101-16-exercises-for-module-a3-part-1/", "published_at": "2024-03-23T16:34:19+00:00" }, { "id": "01a0872e-ee2b-703c-8301-66289034b8f8", "title": "One import per line is best", "url": "https://artificialworlds.net/blog/2024/03/22/one-import-per-line/", "published_at": "2024-03-22T14:34:11+00:00" }, { "id": "01a0872e-ee2b-703c-8301-66289060a586", "title": "Rust 101 - 15: Lifetime bounds", "url": "https://artificialworlds.net/blog/2024/03/14/rust-101-15-lifetime-bounds/", "published_at": "2024-03-14T09:27:06+00:00" }, { "id": "01a0872e-ee2b-703c-8301-6628914f3d30", "title": "Rust 101 - 14: Some standard library traits", "url": "https://artificialworlds.net/blog/2024/03/07/rust-101-14-some-standard-library-traits/", "published_at": "2024-03-07T09:47:52+00:00" }, { "id": "01a0872e-ee2b-703c-8301-6628923cbafb", "title": "Rust 101 - 13: Type Parameters and Associated Types", "url": "https://artificialworlds.net/blog/2024/02/22/rust-101-13-type-parameters-and-associated-types/", "published_at": "2024-02-22T09:43:38+00:00" }, { "id": "01a0872e-ee2b-703c-8301-66289242d454", "title": "Rust 101 - 12: Traits", "url": "https://artificialworlds.net/blog/2024/02/19/rust-101-12-traits/", "published_at": "2024-02-19T08:57:15+00:00" }, { "id": "01a0872e-ee2b-703c-8301-662892cf2351", "title": "Rust 101 - 11: Exercises for module A2", "url": "https://artificialworlds.net/blog/2024/02/07/rust-101-11-exercises-for-module-a2/", "published_at": "2024-02-07T08:51:29+00:00" }, { "id": "01a0872e-ee2b-703c-8301-6628936fe2e1", "title": "[Fixed in FF 123] Deleting an Indexed DB store can be incredibly slow on Firefox", "url": "https://artificialworlds.net/blog/2024/02/02/deleting-an-indexed-db-store-can-be-incredibly-slow-on-firefox/", "published_at": "2024-02-02T10:17:37+00:00" }, { "id": "01a0872e-ee2b-703c-8301-66289450ef5c", "title": "Don't store normal arrays of numbers in Indexed DB - use UInt8Array instead", "url": "https://artificialworlds.net/blog/2024/01/25/dont-store-arrays-of-numbers-in-indexed-db-use-base64-instead/", "published_at": "2024-01-25T13:52:49+00:00" }, { "id": "01a0872e-ee2b-703c-8301-662894974796", "title": "Rust 101 - 10: Strings", "url": "https://artificialworlds.net/blog/2024/01/25/rust-101-10-strings/", "published_at": "2024-01-25T09:26:44+00:00" }, { "id": "01a0872e-ee2b-703c-8301-6628954de1c2", "title": "Keep your Indexed DB keys and values small if you want good performance!", "url": "https://artificialworlds.net/blog/2024/01/24/keep-your-indexed-db-keys-and-values-small-if-you-want-good-performance/", "published_at": "2024-01-24T14:50:18+00:00" }, { "id": "01a0872e-ee2b-703c-8301-66289554db67", "title": "Rust 101 - 9: Vecs, Boxes and slices", "url": "https://artificialworlds.net/blog/2024/01/18/rust-101-9-vecs-boxes-and-slices/", "published_at": "2024-01-18T09:27:33+00:00" }, { "id": "01a0872e-ee2b-703c-8301-6628959d1e6b", "title": "Rust 101 - 8: Writing methods using impl blocks", "url": "https://artificialworlds.net/blog/2024/01/18/rust-101-8-writing-methods-using-impl-blocks/", "published_at": "2024-01-18T09:18:41+00:00" }, { "id": "01a0872e-ee2b-703c-8301-66289610a2a3", "title": "Rust 101 - 7: Error handling with panic and Result", "url": "https://artificialworlds.net/blog/2024/01/11/rust-101-7-error-handling-with-panic-and-result/", "published_at": "2024-01-11T08:58:52+00:00" }, { "id": "01a0872e-ee2b-703c-8301-66289663a72f", "title": "Letter to my MP: using starvation as a weapon", "url": "https://artificialworlds.net/blog/2023/12/18/letter-to-my-mp-using-starvation-as-a-weapon/", "published_at": "2023-12-18T15:15:05+00:00" }, { "id": "01a0872e-ee2b-703c-8301-6628974c365e", "title": "Santa Circles 0.3 is out!", "url": "https://artificialworlds.net/blog/2023/11/07/santa-circles-0-3-is-out/", "published_at": "2023-11-07T09:31:23+00:00" }, { "id": "01a0872e-ee2b-703c-8301-662897e6b1aa", "title": "Follow this blog on the fediverse!", "url": "https://artificialworlds.net/blog/2023/10/12/follow-this-blog-on-the-fediverse/", "published_at": "2023-10-12T08:16:37+00:00" }, { "id": "01a0872e-ee2b-703c-8301-662897f9a27d", "title": "Rust 101 - 6: Structs and Enums", "url": "https://artificialworlds.net/blog/2023/10/05/rust-101-6-structs-and-enums/", "published_at": "2023-10-05T16:53:32+00:00" }, { "id": "01a0872e-ee2b-703c-8301-662898796a67", "title": "Rust 101 - 5: References", "url": "https://artificialworlds.net/blog/2023/09/30/rust-101-5-references/", "published_at": "2023-09-30T08:38:28+00:00" }, { "id": "01a0872e-ee2b-703c-8301-6628993d07db", "title": "Rust 101 - 4: Exercises for module A1", "url": "https://artificialworlds.net/blog/2023/09/30/rust-101-4-exercises-for-module-ai/", "published_at": "2023-09-30T07:28:10+00:00" }, { "id": "01a0872e-ee2b-703c-8301-662899c1d933", "title": "Rust 101 - 3: Memory and ownership", "url": "https://artificialworlds.net/blog/2023/09/11/rust-101-3-memory-and-ownership/", "published_at": "2023-09-11T17:16:01+00:00" }, { "id": "01a0872e-ee2b-703c-8301-66289a5c059b", "title": "Rust 101 - 2: Language basics", "url": "https://artificialworlds.net/blog/2023/09/11/rust-101-2-language-basics/", "published_at": "2023-09-11T07:33:14+00:00" }, { "id": "01a0872e-ee2b-703c-8301-66289b378c6f", "title": "Rust 101 - 1: Course intro", "url": "https://artificialworlds.net/blog/2023/09/11/rust-101-1-course-intro/", "published_at": "2023-09-11T07:30:01+00:00" }, { "id": "01a0872e-ee2b-703c-8301-66289b50afd5", "title": "Combining two function types with & (ampersand) in TypeScript (intersection)", "url": "https://artificialworlds.net/blog/2023/08/25/combining-two-function-types-with-ampersand-in-typescript-intersection/", "published_at": "2023-08-25T08:17:51+00:00" }, { "id": "01a0872e-ee2b-703c-8301-66289bcd547c", "title": "Accessing services on the host from a Docker container or a Podman one", "url": "https://artificialworlds.net/blog/2023/08/18/accessing-services-on-the-host-from-a-docker-container-or-a-podman-one/", "published_at": "2023-08-18T11:39:02+00:00" }, { "id": "01a0872e-ee2b-703c-8301-66289c44d38f", "title": "Why I'm voting tactically against you - letter to my Conservative MP", "url": "https://artificialworlds.net/blog/2023/07/06/why-im-voting-tactically-against-you-letter-to-my-conservative-mp/", "published_at": "2023-07-06T07:38:49+00:00" }, { "id": "01a0872e-ee2b-703c-8301-66289cfce58e", "title": "Rust WASM hello world - no need for webpack!", "url": "https://artificialworlds.net/blog/2023/06/27/rust-wasm-hello-world-no-need-for-webpack/", "published_at": "2023-06-27T20:15:48+00:00" }, { "id": "01a0872e-ee2b-703c-8301-66289db08fff", "title": "Estimating software tasks and stories: avoid time-based estimates", "url": "https://artificialworlds.net/blog/2023/06/07/estimating-software-tasks-and-stories-avoid-time-based-estimates/", "published_at": "2023-06-07T08:54:28+00:00" }, { "id": "01a0872e-ee2b-703c-8301-66289e029719", "title": "Maths: The Fun Parts - Graphs video", "url": "https://artificialworlds.net/blog/2023/05/25/maths-the-fun-parts-graphs-video/", "published_at": "2023-05-25T08:26:14+00:00" }, { "id": "01a0872e-ee2b-703c-8301-66289e3da7fc", "title": "Maths: The Fun Parts - Groups video", "url": "https://artificialworlds.net/blog/2023/05/18/maths-the-fun-parts-groups-video/", "published_at": "2023-05-18T08:09:04+00:00" }, { "id": "01a0872e-ee2b-703c-8301-66289f2443ba", "title": "Maths: The Fun Parts - Sets video", "url": "https://artificialworlds.net/blog/2023/05/11/maths-the-fun-parts-sets-video/", "published_at": "2023-05-11T08:03:43+00:00" }, { "id": "01a0872e-ee2b-703c-8301-6628a023ba40", "title": "GitHub API GraphQL snippets", "url": "https://artificialworlds.net/blog/2023/05/05/github-api-graphql-snippets/", "published_at": "2023-05-05T09:29:50+00:00" }, { "id": "01a0872e-ee2b-703c-8301-6628a0f5be88", "title": "Live code reviews make life better", "url": "https://artificialworlds.net/blog/2023/03/24/live-code-reviews-make-life-better/", "published_at": "2023-03-24T12:54:14+00:00" }, { "id": "01a0872e-ee2b-703c-8301-6628a16b0ae4", "title": "Air-Source Heat Pump - 1 year later", "url": "https://artificialworlds.net/blog/2022/11/24/air-source-heat-pump-1-year-later/", "published_at": "2022-11-24T09:37:11+00:00" }, { "id": "01a0872e-ee2b-703c-8301-6628a1cf7730", "title": "Deleted my Twitter account", "url": "https://artificialworlds.net/blog/2022/11/20/deleted-my-twitter-account/", "published_at": "2022-11-20T20:06:18+00:00" }, { "id": "01a0872e-ee2b-703c-8301-6628a1f77515", "title": "IETF115 Trip Report (Can Matrix help messaging standardisation through MIMI?)", "url": "https://artificialworlds.net/blog/2022/11/09/ietf115-trip-report-can-matrix-help-messaging-standardisation-through-mimi/", "published_at": "2022-11-09T16:06:30+00:00" }, { "id": "01a0872e-ee2b-703c-8301-6628a2ede2c8", "title": "Setting the text selection in a browser: just use setBaseAndExtent", "url": "https://artificialworlds.net/blog/2022/09/29/setting-the-text-selection-in-a-browser-just-use-setbaseandextent/", "published_at": "2022-09-29T13:53:48+00:00" }, { "id": "01a0872e-ee2b-703c-8301-6628a3c72e6d", "title": "Tips for contenteditables", "url": "https://artificialworlds.net/blog/2022/09/13/tips-for-contenteditables/", "published_at": "2022-09-13T12:58:28+00:00" }, { "id": "01a0872e-ee2b-703c-8301-6628a3d0e3f8", "title": "Outreachy August 2022 update", "url": "https://artificialworlds.net/blog/2022/08/26/outreachy-august-2022-update/", "published_at": "2022-08-26T08:29:55+00:00" }, { "id": "01a0872e-ee2b-703c-8301-6628a4659aa0", "title": "Transcoding video files for playback in a browser", "url": "https://artificialworlds.net/blog/2022/08/06/transcoding-video-files-for-playback-in-a-browser/", "published_at": "2022-08-06T23:21:48+00:00" }, { "id": "01a0872e-ee2b-703c-8301-6628a56549ae", "title": "Matrix is a Distributed Real-time Database Video", "url": "https://artificialworlds.net/blog/2022/07/21/matrix-is-a-distributed-real-time-database-video/", "published_at": "2022-07-21T18:23:46+00:00" }, { "id": "01a0872e-ee2b-703c-8301-6628a5b64090", "title": "Building cross-platform Rust for Web, Android and iOS - a minimal example", "url": "https://artificialworlds.net/blog/2022/07/06/building-cross-platform-rust-for-web-android-and-ios-a-minimal-example/", "published_at": "2022-07-06T15:11:44+00:00" }, { "id": "01a0872e-ee2b-703c-8301-6628a5dbd6f5", "title": "Deporting desperate people from the UK", "url": "https://artificialworlds.net/blog/2022/06/06/deporting-desperate-people-from-the-uk/", "published_at": "2022-06-06T12:04:14+00:00" }, { "id": "01a0872e-ee2b-703c-8301-6628a6927301", "title": "Improving my vimrc live on stream", "url": "https://artificialworlds.net/blog/2022/04/28/improving-my-vimrc-live-on-stream/", "published_at": "2022-04-28T07:22:14+00:00" }, { "id": "01a0872e-ee2b-703c-8301-6628a6bf5369", "title": "Comparison of Matrix events before and after \"Extensible Events\"", "url": "https://artificialworlds.net/blog/2022/03/08/comparison-of-matrix-events-before-and-after-extensible-events/", "published_at": "2022-03-08T11:34:28+00:00" }, { "id": "01a0872e-ee2b-703c-8301-6628a7a84243", "title": "Air-Source Heat Pump - our experience so far, 2 months in", "url": "https://artificialworlds.net/blog/2022/01/09/air-source-heat-pump-our-experience-so-far-2-months-in/", "published_at": "2022-01-09T01:35:53+00:00" }, { "id": "01a0872e-ee2b-703c-8301-6628a813e3fb", "title": "Providing MapLibre-compatible style JSON from openstreetmap-tile-server", "url": "https://artificialworlds.net/blog/2021/12/14/providing-maplibre-compatible-style-json-from-openstreetmap-tile-server/", "published_at": "2021-12-14T16:33:53+00:00" }, { "id": "01a0872e-ee2b-703c-8301-6628a89137ad", "title": "Self-hosting maps on my laptop", "url": "https://artificialworlds.net/blog/2021/12/14/self-hosting-maps-on-my-laptop/", "published_at": "2021-12-14T13:44:57+00:00" }, { "id": "01a0872e-ee2b-703c-8301-6628a8c3a3a8", "title": "Streaming to Twitch and PeerTube simultaneously using nginx on Oracle cloud", "url": "https://artificialworlds.net/blog/2021/11/22/streaming-to-twitch-and-peertube-simultaneously-using-nginx-on-oracle-cloud/", "published_at": "2021-11-22T12:33:01+00:00" }, { "id": "01a0872e-ee2b-703c-8301-6628a8e3c8f5", "title": "New game: Tron - frantic multiplayer retro action", "url": "https://artificialworlds.net/blog/2021/11/19/new-game-tron-frantic-multiplayer-retro-action/", "published_at": "2021-11-19T02:46:31+00:00" }, { "id": "01a0872e-ee2b-703c-8301-6628a99c9729", "title": "Preventing Virgin Media hijacking my DNS", "url": "https://artificialworlds.net/blog/2021/11/17/preventing-virgin-media-hijacking-my-dns/", "published_at": "2021-11-17T09:33:10+00:00" }, { "id": "01a0872e-ee2b-703c-8301-6628aa3b8d8b", "title": "Letter to my MP about climate emergency", "url": "https://artificialworlds.net/blog/2021/10/15/letter-to-my-mp-about-climate-emergency/", "published_at": "2021-10-15T10:16:25+00:00" }, { "id": "01a0872e-ee2b-703c-8301-6628aaa374fe", "title": "New Job at Element (Matrix)", "url": "https://artificialworlds.net/blog/2021/09/27/new-job-at-element-matrix/", "published_at": "2021-09-27T15:27:02+00:00" }, { "id": "01a0872e-ee2b-703c-8301-6628ab17b62e", "title": "What to cache when building Rust using Gitlab CI or similar", "url": "https://artificialworlds.net/blog/2021/09/16/what-to-cache-when-building-rust-using-gitlab-ci-or-similar/", "published_at": "2021-09-16T01:00:53+00:00" }, { "id": "01a0872e-ee2b-703c-8301-6628abc23123", "title": "Printing the version of a Maven project", "url": "https://artificialworlds.net/blog/2021/09/15/printing-the-version-of-a-maven-project/", "published_at": "2021-09-15T10:03:11+00:00" }, { "id": "01a0872e-ee2b-703c-8301-6628abd29a4e", "title": "Minimal example of a Maven pom for a mixed Kotlin and Java project", "url": "https://artificialworlds.net/blog/2021/08/18/minimal-example-of-a-maven-pom-for-a-mixed-kotlin-and-java-project/", "published_at": "2021-08-18T10:45:30+00:00" }, { "id": "01a0872e-ee2b-703c-8301-6628acb09df3", "title": "Importing/migrating from one peertube server to another", "url": "https://artificialworlds.net/blog/2021/08/06/importing-migrating-from-one-peertube-server-to-another/", "published_at": "2021-08-06T16:04:49+00:00" }, { "id": "01a0872e-ee2b-703c-8301-6628ada0df1b", "title": "Why write an entire game (including Graphics) in a single, hand-coded JavaScript file?", "url": "https://artificialworlds.net/blog/2021/07/01/why-write-an-entire-game-including-graphics-in-a-single-hand-coded-javascript-file/", "published_at": "2021-07-01T07:36:59+00:00" }, { "id": "01a0872e-ee2b-703c-8301-6628ae6550fe", "title": "Matrix is the only (chat) game in town", "url": "https://artificialworlds.net/blog/2021/05/27/matrix-is-the-only-chat-game-in-town/", "published_at": "2021-05-27T14:02:02+00:00" }, { "id": "01a0872e-ee2b-703c-8301-6628af38b9dd", "title": "Writing Snake in Terraform Video", "url": "https://artificialworlds.net/blog/2021/05/24/writing-snake-in-terraform-video/", "published_at": "2021-05-24T12:54:36+00:00" }, { "id": "01a0872e-ee2b-703c-8301-6628afea87df", "title": "Suspending the computer using Kupfer", "url": "https://artificialworlds.net/blog/2021/05/05/suspending-the-computer-using-kupfer/", "published_at": "2021-05-05T13:53:51+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

2024

2023

2022

2021