56,966 blogs · [ { "id": "01a08759-14b5-705a-bbaf-8772134398c1", "title": "MariaDB Typescript enum fix", "url": "https://briandouglas.ie/mariadb-enum-fix", "published_at": "2026-07-23T00:00:00+00:00" }, { "id": "01a08759-14b5-705a-bbaf-8772137d3b65", "title": "Adapt, improvise, and overcome", "url": "https://briandouglas.ie/adapt-improvise-overcome", "published_at": "2026-06-28T00:00:00+00:00" }, { "id": "01a08759-14b5-705a-bbaf-8772140afea8", "title": "Command pattern for canvas games", "url": "https://briandouglas.ie/command-pattern-js-canvas", "published_at": "2026-06-28T00:00:00+00:00" }, { "id": "01a08759-14b5-705a-bbaf-87721454e2dc", "title": "Install Temurin from tar", "url": "https://briandouglas.ie/jdk-install-from-tar", "published_at": "2026-06-26T00:00:00+00:00" }, { "id": "01a08759-14b5-705a-bbaf-87721533f98a", "title": "RSS Feed Added", "url": "https://briandouglas.ie/rss-feed-added", "published_at": "2026-06-21T00:00:00+00:00" }, { "id": "01a08759-14b5-705a-bbaf-87721569e794", "title": "Front page of the Orange Site", "url": "https://briandouglas.ie/orange-site-comments", "published_at": "2026-06-20T00:00:00+00:00" }, { "id": "01a08759-14b5-705a-bbaf-8772159d359e", "title": "Tailwind and slop apps", "url": "https://briandouglas.ie/llm-tailwind-template", "published_at": "2026-06-11T00:00:00+00:00" }, { "id": "01a08759-14b5-705a-bbaf-877216266133", "title": "AI and The Redmonk rankings", "url": "https://briandouglas.ie/redmonk-language-rankings-2026", "published_at": "2026-06-08T00:00:00+00:00" }, { "id": "01a08759-14b5-705a-bbaf-877216582886", "title": "Ignore what everyone else is doing", "url": "https://briandouglas.ie/developer_noise", "published_at": "2026-05-26T00:00:00+00:00" }, { "id": "01a08759-14b5-705a-bbaf-877216d47ba6", "title": "1 Bit Jam #11", "url": "https://briandouglas.ie/1bitjam11", "published_at": "2026-05-19T00:00:00+00:00" }, { "id": "01a08759-14b5-705a-bbaf-87721753eedb", "title": "Pong in C with Raylib", "url": "https://briandouglas.ie/pong-c-raylib", "published_at": "2026-05-02T00:00:00+00:00" }, { "id": "01a08759-14b5-705a-bbaf-8772184928a5", "title": "I'm a \"Software Engineer\"", "url": "https://briandouglas.ie/software-engineer", "published_at": "2026-04-25T00:00:00+00:00" }, { "id": "01a08759-14b5-705a-bbaf-877218826d33", "title": "Featured in GameDev Weekly Again!", "url": "https://briandouglas.ie/gamedevjs-weekly-641", "published_at": "2026-04-23T00:00:00+00:00" }, { "id": "01a08759-14b5-705a-bbaf-877218a17f1d", "title": "Degrees to Radians", "url": "https://briandouglas.ie/deg-to-rad", "published_at": "2026-04-09T00:00:00+00:00" }, { "id": "01a08759-14b5-705a-bbaf-877219161478", "title": "Featured in GameDev Weekly", "url": "https://briandouglas.ie/gamedevjs-weekly-639", "published_at": "2026-04-06T00:00:00+00:00" }, { "id": "01a08759-14b5-705a-bbaf-877219616f86", "title": "gamebot.studio", "url": "https://briandouglas.ie/ai-slop-apps", "published_at": "2026-03-31T00:00:00+00:00" }, { "id": "01a08759-14b5-705a-bbaf-877219ee9f16", "title": "GameDev in JS \"The Canvas\"", "url": "https://briandouglas.ie/gamedev-in-js-1", "published_at": "2026-03-23T00:00:00+00:00" }, { "id": "01a08759-14b5-705a-bbaf-87721abeba94", "title": "Bye bye Github", "url": "https://briandouglas.ie/bye-bye-github", "published_at": "2026-03-20T00:00:00+00:00" }, { "id": "01a08759-14b5-705a-bbaf-87721b525f6e", "title": "Use it or lose it", "url": "https://briandouglas.ie/use-it-or-lose-it", "published_at": "2026-03-19T00:00:00+00:00" }, { "id": "01a08759-14b5-705a-bbaf-87721c145e44", "title": "Binary Search", "url": "https://briandouglas.ie/binary_search", "published_at": "2026-03-16T00:00:00+00:00" }, { "id": "01a08759-14b5-705a-bbaf-87721c7206bd", "title": "Using git hooks locally", "url": "https://briandouglas.ie/githooks", "published_at": "2026-03-12T00:00:00+00:00" }, { "id": "01a08759-14b5-705a-bbaf-87721cbcdfa0", "title": "Use an index when sorting", "url": "https://briandouglas.ie/use-an-index-when-sorting", "published_at": "2026-02-26T00:00:00+00:00" }, { "id": "01a08759-14b5-705a-bbaf-87721cea788e", "title": "http_status_codes table", "url": "https://briandouglas.ie/http-status-codes-table", "published_at": "2026-02-23T00:00:00+00:00" }, { "id": "01a08759-14b5-705a-bbaf-87721ddfe175", "title": "Add generics to MariaDB Node Connector", "url": "https://briandouglas.ie/mariadb-connector-generics", "published_at": "2026-02-17T00:00:00+00:00" }, { "id": "01a08759-14b5-705a-bbaf-87721e286076", "title": "Modeling Tags in a Postgres schema", "url": "https://briandouglas.ie/normalize-tag-tables", "published_at": "2026-02-16T00:00:00+00:00" }, { "id": "01a08759-14b5-705a-bbaf-87721e3de6ec", "title": "Some useful rsync tips", "url": "https://briandouglas.ie/rsync-tips", "published_at": "2026-02-12T00:00:00+00:00" }, { "id": "01a08759-14b5-705a-bbaf-87721ecff36a", "title": "Install Temurin JDK on Fedora", "url": "https://briandouglas.ie/temurin-25-jdk", "published_at": "2026-02-09T00:00:00+00:00" }, { "id": "01a08759-14b5-705a-bbaf-87721edd10a5", "title": "The future of videcoding", "url": "https://briandouglas.ie/vibecode-meme", "published_at": "2026-01-19T00:00:00+00:00" }, { "id": "01a08759-14b5-705a-bbaf-87721fcad84c", "title": "2026 new year's resolutions", "url": "https://briandouglas.ie/2026-resolutions", "published_at": "2026-01-01T00:00:00+00:00" }, { "id": "01a08759-14b5-705a-bbaf-87722076ec7f", "title": "Please don't write code", "url": "https://briandouglas.ie/please-dont-program", "published_at": "2025-12-28T00:00:00+00:00" }, { "id": "01a08759-14b5-705a-bbaf-877221280601", "title": "Card deck in C", "url": "https://briandouglas.ie/card-deck-in-c", "published_at": "2025-12-15T00:00:00+00:00" }, { "id": "01a08759-14b5-705a-bbaf-877221527c95", "title": "Hosting this blog", "url": "https://briandouglas.ie/new-infra", "published_at": "2025-12-09T00:00:00+00:00" }, { "id": "01a08759-14b5-705a-bbaf-87722205be56", "title": "Advent of code d6", "url": "https://briandouglas.ie/2025-aoc-6", "published_at": "2025-12-06T00:00:00+00:00" }, { "id": "01a08759-14b5-705a-bbaf-8772224d1b40", "title": "Advent of code d5", "url": "https://briandouglas.ie/2025-aoc-5", "published_at": "2025-12-05T00:00:00+00:00" }, { "id": "01a08759-14b5-705a-bbaf-8772232bcfd9", "title": "Advent of code d4", "url": "https://briandouglas.ie/2025-aoc-4", "published_at": "2025-12-04T00:00:00+00:00" }, { "id": "01a08759-14b5-705a-bbaf-877223ffcd87", "title": "Advent of code d3", "url": "https://briandouglas.ie/2025-aoc-3", "published_at": "2025-12-03T00:00:00+00:00" }, { "id": "01a08759-14b5-705a-bbaf-8772240430f0", "title": "Advent of code d2", "url": "https://briandouglas.ie/2025-aoc-2", "published_at": "2025-12-02T00:00:00+00:00" }, { "id": "01a08759-14b5-705a-bbaf-87722492cb5a", "title": "Advent of code d1", "url": "https://briandouglas.ie/2025-aoc-1", "published_at": "2025-12-01T00:00:00+00:00" }, { "id": "01a08759-14b5-705a-bbaf-877224b66ff8", "title": "A year of experiments", "url": "https://briandouglas.ie/a-year-of-experiments", "published_at": "2025-12-01T00:00:00+00:00" }, { "id": "01a08759-14b5-705a-bbaf-877225239608", "title": "Neovim 0.12 adds vim.pack", "url": "https://briandouglas.ie/vim-dot-pack", "published_at": "2025-11-28T00:00:00+00:00" }, { "id": "01a08759-14b5-705a-bbaf-877225acb8de", "title": "Part-time sheep farmer", "url": "https://briandouglas.ie/sheep-farming", "published_at": "2025-11-27T00:00:00+00:00" }, { "id": "01a08759-14b5-705a-bbaf-8772262a5365", "title": "Go install script", "url": "https://briandouglas.ie/install-go", "published_at": "2025-10-23T00:00:00+00:00" }, { "id": "01a08759-14b5-705a-bbaf-8772267a4654", "title": "Managers, managers, managers", "url": "https://briandouglas.ie/managers-managers-managers", "published_at": "2025-10-21T00:00:00+00:00" }, { "id": "01a08759-14b5-705a-bbaf-877227645f85", "title": "mise-en-place", "url": "https://briandouglas.ie/mise-en-place", "published_at": "2025-10-10T00:00:00+00:00" }, { "id": "01a08759-14b5-705a-bbaf-877227be41a5", "title": "Generate SQLite table types for Typescript", "url": "https://briandouglas.ie/generate-sqlite-table-types-bun", "published_at": "2025-09-01T00:00:00+00:00" }, { "id": "01a08759-14b5-705a-bbaf-877228ad39e6", "title": "Literal templates", "url": "https://briandouglas.ie/literal-templates", "published_at": "2025-08-21T00:00:00+00:00" }, { "id": "01a08759-14b5-705a-bbaf-8772297988e1", "title": "Template strings as a view engine - Part 2", "url": "https://briandouglas.ie/extending-template-strings-view-engine", "published_at": "2025-08-20T00:00:00+00:00" }, { "id": "01a08759-14b5-705a-bbaf-87722a38359a", "title": "Template strings as a view engine", "url": "https://briandouglas.ie/js-templates", "published_at": "2025-08-17T00:00:00+00:00" }, { "id": "01a08759-14b5-705a-bbaf-87722b33bc8c", "title": "Object field validators in Typescript", "url": "https://briandouglas.ie/typescript-field-validators", "published_at": "2025-08-08T00:00:00+00:00" }, { "id": "01a08759-14b5-705a-bbaf-87722b371b0a", "title": "Feature flags db schema", "url": "https://briandouglas.ie/feature-flags", "published_at": "2025-08-05T00:00:00+00:00" }, { "id": "01a08759-14b5-705a-bbaf-87722bf5402f", "title": "PostgresSQL full text search", "url": "https://briandouglas.ie/pg-full-text-search", "published_at": "2025-07-31T00:00:00+00:00" }, { "id": "01a08759-14b5-705a-bbaf-87722c1075cb", "title": "startswith and endswith", "url": "https://briandouglas.ie/endswith-startswith", "published_at": "2025-07-27T00:00:00+00:00" }, { "id": "01a08759-14b5-705a-bbaf-87722c71de83", "title": "Stack Overflow is dieing, no wonder", "url": "https://briandouglas.ie/stackoverflow-dieing", "published_at": "2025-07-21T00:00:00+00:00" }, { "id": "01a08759-14b5-705a-bbaf-87722cae318a", "title": "Trimming strings in c", "url": "https://briandouglas.ie/trimming-strings", "published_at": "2025-07-18T00:00:00+00:00" }, { "id": "01a08759-14b5-705a-bbaf-87722d25361d", "title": "Banned from lobste.rs and Hacker News", "url": "https://briandouglas.ie/banned-from-lobsters-and-hn", "published_at": "2025-07-15T00:00:00+00:00" }, { "id": "01a08759-14b5-705a-bbaf-87722deff051", "title": "Making a StringBuffer in C", "url": "https://briandouglas.ie/string-buffer-c", "published_at": "2025-07-15T00:00:00+00:00" }, { "id": "01a08759-14b5-705a-bbaf-87722e3aef97", "title": "Use Codium not Code", "url": "https://briandouglas.ie/use-codium", "published_at": "2025-07-14T00:00:00+00:00" }, { "id": "01a08759-14b5-705a-bbaf-87722e7363ee", "title": "Get inode type in C", "url": "https://briandouglas.ie/inode-type-c", "published_at": "2025-07-10T00:00:00+00:00" }, { "id": "01a08759-14b5-705a-bbaf-87722f07f09f", "title": "Handle Spring form errors with JTE", "url": "https://briandouglas.ie/spring-form-errors-with-jte", "published_at": "2025-06-17T00:00:00+00:00" }, { "id": "01a08759-14b5-705a-bbaf-87722f6ea77a", "title": "Add a CSRF token to HTML forms with JTE", "url": "https://briandouglas.ie/jte-csrf", "published_at": "2025-06-16T00:00:00+00:00" }, { "id": "01a08759-14b5-705a-bbaf-87722f908fed", "title": "Spring database seeding", "url": "https://briandouglas.ie/spring-database-seeding", "published_at": "2025-05-29T00:00:00+00:00" }, { "id": "01a08759-14b5-705a-bbaf-87722fa1e21b", "title": "New Lib: Blueprint Factory", "url": "https://briandouglas.ie/blueprintfactory-1.0.0", "published_at": "2025-05-28T00:00:00+00:00" }, { "id": "01a08759-14b5-705a-bbaf-87723082303c", "title": "New Lib: Placeholder Image Generator", "url": "https://briandouglas.ie/placeholder-image-generator-1.0.1", "published_at": "2025-05-26T00:00:00+00:00" }, { "id": "01a08759-14b5-705a-bbaf-8772308407f2", "title": "Request cache in Spring", "url": "https://briandouglas.ie/spring-request-cache", "published_at": "2025-05-19T00:00:00+00:00" }, { "id": "01a08759-14b5-705a-bbaf-8772310f6323", "title": "Checking ownership in Spring", "url": "https://briandouglas.ie/pre-auth-spring", "published_at": "2025-05-12T00:00:00+00:00" }, { "id": "01a08759-14b5-705a-bbaf-877231621974", "title": "Slurp - A Java task runner", "url": "https://briandouglas.ie/slurp-1.0", "published_at": "2025-04-09T00:00:00+00:00" }, { "id": "01a08759-14b5-705a-bbaf-877231a15ef0", "title": "Using CPU branch prediction in Java", "url": "https://briandouglas.ie/cpu-branch-prediction", "published_at": "2025-04-03T00:00:00+00:00" }, { "id": "01a08759-14b5-705a-bbaf-8772328a9804", "title": "Using Docker on Linux Mint", "url": "https://briandouglas.ie/docker-on-linux-mint", "published_at": "2025-04-02T00:00:00+00:00" }, { "id": "01a08759-14b5-705a-bbaf-8772332cdb59", "title": "Install OpenJDK on Ubuntu", "url": "https://briandouglas.ie/install-openjdk-linux", "published_at": "2025-04-02T00:00:00+00:00" }, { "id": "01a08759-14b5-705a-bbaf-8772339a222e", "title": "Yoda Conditions", "url": "https://briandouglas.ie/yoda-conditions", "published_at": "2025-04-01T00:00:00+00:00" }, { "id": "01a08759-14b6-73ee-a892-86e219a6c325", "title": "Tower of Hanoi in Java", "url": "https://briandouglas.ie/tower-of-hanoi-java", "published_at": "2025-03-25T00:00:00+00:00" }, { "id": "01a08759-14b6-73ee-a892-86e21a84067b", "title": "AxeRunner", "url": "https://briandouglas.ie/axe-runner", "published_at": "2025-03-06T00:00:00+00:00" }, { "id": "01a08759-14b6-73ee-a892-86e21b656c2e", "title": "European Alternatives", "url": "https://briandouglas.ie/european-alternatives", "published_at": "2025-03-05T00:00:00+00:00" }, { "id": "01a08759-14b6-73ee-a892-86e21b74e548", "title": "Using a virtual screen size in Raylib", "url": "https://briandouglas.ie/virtual-screen-size-raylib", "published_at": "2025-02-24T00:00:00+00:00" }, { "id": "01a08759-14b6-73ee-a892-86e21c556f08", "title": "Using astyle to format C code", "url": "https://briandouglas.ie/astyle", "published_at": "2025-02-18T00:00:00+00:00" }, { "id": "01a08759-14b6-73ee-a892-86e21ce3280e", "title": "Creating a database dump with SQLite", "url": "https://briandouglas.ie/dumping-sqlite-data", "published_at": "2025-02-17T00:00:00+00:00" }, { "id": "01a08759-14b6-73ee-a892-86e21d90e8a3", "title": "Optimise SQLite for Laravel apps", "url": "https://briandouglas.ie/laravel-optimize-database", "published_at": "2025-02-17T00:00:00+00:00" }, { "id": "01a08759-14b6-73ee-a892-86e21e135432", "title": "Backing up an SQLite database", "url": "https://briandouglas.ie/backing-up-sqlite", "published_at": "2025-02-16T00:00:00+00:00" }, { "id": "01a08759-14b6-73ee-a892-86e21eab21c9", "title": "GameDev in C Part 4: A Snake Clone", "url": "https://briandouglas.ie/gamedev-in-c-part-4", "published_at": "2025-02-14T00:00:00+00:00" }, { "id": "01a08759-14b6-73ee-a892-86e21f73f818", "title": "I'm off social media", "url": "https://briandouglas.ie/off-socials", "published_at": "2025-02-01T00:00:00+00:00" }, { "id": "01a08759-14b6-73ee-a892-86e2200c79cc", "title": "GameDev in C Part 3: Drawing a Slime", "url": "https://briandouglas.ie/gamedev-in-c-part-3", "published_at": "2025-01-31T00:00:00+00:00" }, { "id": "01a08759-14b6-73ee-a892-86e220f1bcc9", "title": "Linting is procrastination.", "url": "https://briandouglas.ie/linters", "published_at": "2025-01-31T00:00:00+00:00" }, { "id": "01a08759-14b6-73ee-a892-86e22190832d", "title": "GameDev in C Part 2: Raylib", "url": "https://briandouglas.ie/gamedev-in-c-part-2", "published_at": "2025-01-23T00:00:00+00:00" }, { "id": "01a08759-14b6-73ee-a892-86e222299791", "title": "GameDev in C Part 1: Hello World", "url": "https://briandouglas.ie/gamedev-in-c-part-1", "published_at": "2025-01-21T00:00:00+00:00" }, { "id": "01a08759-14b6-73ee-a892-86e2224fa7c2", "title": "Homer's Drinking Bird", "url": "https://briandouglas.ie/drinking-bird", "published_at": "2025-01-20T00:00:00+00:00" }, { "id": "01a08759-14b6-73ee-a892-86e222e0a176", "title": "I joined social media", "url": "https://briandouglas.ie/i-joined-social-media", "published_at": "2025-01-04T00:00:00+00:00" }, { "id": "01a08759-14b6-73ee-a892-86e222ecfc57", "title": "2025 new year's resolutions", "url": "https://briandouglas.ie/2025-resolutions", "published_at": "2025-01-02T00:00:00+00:00" }, { "id": "01a08759-14b6-73ee-a892-86e22315743d", "title": "Setting up PostgreSQL and Lua in Docker", "url": "https://briandouglas.ie/lua-postgres", "published_at": "2024-12-31T00:00:00+00:00" }, { "id": "01a08759-14b6-73ee-a892-86e2234b4dfd", "title": "Rust, the Cunning Wizard", "url": "https://briandouglas.ie/rust-the-cunning-wizard", "published_at": "2024-12-05T00:00:00+00:00" }, { "id": "01a08759-14b6-73ee-a892-86e2239db424", "title": "Partial function implementation", "url": "https://briandouglas.ie/partial-implementation", "published_at": "2024-11-25T00:00:00+00:00" }, { "id": "01a08759-14b6-73ee-a892-86e2240d2c4b", "title": "Chicken Farmer, a Snake clone", "url": "https://briandouglas.ie/chicken-farmer", "published_at": "2024-11-18T00:00:00+00:00" }, { "id": "01a08759-14b6-73ee-a892-86e224701a9c", "title": "Useful ImageData Methods", "url": "https://briandouglas.ie/useful-image-data-methods", "published_at": "2024-11-16T00:00:00+00:00" }, { "id": "01a08759-14b6-73ee-a892-86e2247cf110", "title": "Using the form attribute on buttons", "url": "https://briandouglas.ie/form-attribute-on-buttons", "published_at": "2024-10-31T00:00:00+00:00" }, { "id": "01a08759-14b6-73ee-a892-86e224f5f7e8", "title": "I wrote a test framework in Julia", "url": "https://briandouglas.ie/beedeedee-julia-test-framework", "published_at": "2024-10-21T00:00:00+00:00" }, { "id": "01a08759-14b6-73ee-a892-86e225816b95", "title": "Sensible SQLite defaults", "url": "https://briandouglas.ie/sqlite-defaults", "published_at": "2024-10-17T00:00:00+00:00" }, { "id": "01a08759-14b6-73ee-a892-86e225e13c2e", "title": "Prevent pixel art blur on canvas", "url": "https://briandouglas.ie/draw-pixel-art-on-canvas", "published_at": "2024-10-15T00:00:00+00:00" }, { "id": "01a08759-14b6-73ee-a892-86e2264ff0a8", "title": "Add IF NOT EXISTS to your migrations", "url": "https://briandouglas.ie/add-if-not-exists-to-your-migrations", "published_at": "2024-10-09T00:00:00+00:00" }, { "id": "01a08759-14b6-73ee-a892-86e226945cc7", "title": "Using a PostgreSQL enum for state", "url": "https://briandouglas.ie/enum-for-status", "published_at": "2024-10-06T00:00:00+00:00" }, { "id": "01a08759-14b6-73ee-a892-86e22709b227", "title": "Conway's Game of Life in Go", "url": "https://briandouglas.ie/conways-game-of-life-go", "published_at": "2024-10-01T00:00:00+00:00" }, { "id": "01a08759-14b6-73ee-a892-86e2277b7a8b", "title": "Writing a DB migrator in Go", "url": "https://briandouglas.ie/db-migrator-in-go", "published_at": "2024-09-30T00:00:00+00:00" } ] posts Claim your blog
Back to briandouglas.ie
Blog · corpus.blog/blogs/briandouglas.ie/posts

briandouglas.ie

briandouglas.ie

2026

2025

2024