56,966 blogs · [ { "id": "01a0879e-2a36-71e0-b815-4c492dad7357", "title": "Minimal Phone MP01 3D-printed case", "url": "https://macoy.me/blog/diy/MinimalPhoneCase", "published_at": "2026-02-17T00:00:00+00:00" }, { "id": "01a0879e-2a36-71e0-b815-4c4931a3e389", "title": "Single header library: Data Bundle", "url": "https://macoy.me/blog/programming/DataBundle", "published_at": "2025-06-17T00:00:00+00:00" }, { "id": "01a0879e-2a36-71e0-b815-4c492e386f90", "title": "My Pop'n Music Playstation controller", "url": "https://macoy.me/blog/diy/PopnCon", "published_at": "2025-04-24T00:00:00+00:00" }, { "id": "01a0879e-2a36-71e0-b815-4c492f09f380", "title": "Driving code with data", "url": "https://macoy.me/blog/programming/DrivingCodeWithData", "published_at": "2025-04-14T00:00:00+00:00" }, { "id": "01a0879e-2a36-71e0-b815-4c4932a774ae", "title": "Moving an AutoCAD DXF OLE2FRAME image", "url": "https://macoy.me/blog/programming/DXFFormat", "published_at": "2025-02-27T00:00:00+00:00" }, { "id": "01a0879e-2a36-71e0-b815-4c4932996a0e", "title": "The Simple Useful System Challenge", "url": "https://macoy.me/blog/programming/SimpleUsefulSystem", "published_at": "2024-11-22T00:00:00+00:00" }, { "id": "01a0879e-2a36-71e0-b815-4c49398f98ea", "title": "Programming a GPU on bare metal", "url": "https://macoy.me/blog/programming/PiGPU", "published_at": "2024-11-21T00:00:00+00:00" }, { "id": "01a0879e-2a36-71e0-b815-4c492a1bf1d1", "title": "Bunny Semiconductor wins Free Software game jam", "url": "https://macoy.me/blog/gamedev/BunnySemi", "published_at": "2024-07-24T00:00:00+00:00" }, { "id": "01a0879e-2a36-71e0-b815-4c493fdeeec4", "title": "Debugging on Raspberry Pi 4 and 5", "url": "https://macoy.me/blog/programming/RaspberryPi5Debugging", "published_at": "2024-01-15T00:00:00+00:00" }, { "id": "01a0879e-2a36-71e0-b815-4c4935b2fa46", "title": "Bare metal graphics on Raspberry Pi 4", "url": "https://macoy.me/blog/programming/PiV3D", "published_at": "2023-12-20T00:00:00+00:00" }, { "id": "01a0879e-2a36-71e0-b815-4c49403fbc0d", "title": "Programming a USB keyboard with Raspberry Pi Pico SDK", "url": "https://macoy.me/blog/programming/PicoKeyboard", "published_at": "2023-07-09T00:00:00+00:00" }, { "id": "01a0879e-2a36-71e0-b815-4c493f07326f", "title": "Free software and paywalled communities", "url": "https://macoy.me/blog/programming/FreeSoftwarePaywalls", "published_at": "2023-06-22T00:00:00+00:00" }, { "id": "01a0879e-2a36-71e0-b815-4c493e884d84", "title": "Binary data version migration", "url": "https://macoy.me/blog/programming/BinaryVersionMigration", "published_at": "2023-05-01T00:00:00+00:00" }, { "id": "01a0879e-2a36-71e0-b815-4c493df7e1cf", "title": "Tiny C Compiler dynamic environment status report", "url": "https://macoy.me/blog/programming/TinyCCompilerUpdate", "published_at": "2023-02-21T00:00:00+00:00" }, { "id": "01a0879e-2a36-71e0-b815-4c49316cbb86", "title": "Software complexity and potential solutions", "url": "https://macoy.me/blog/programming/SoftwareComplexitySolutions", "published_at": "2022-12-16T00:00:00+00:00" }, { "id": "01a0879e-2a36-71e0-b815-4c4932fc1a47", "title": "Cakelisp news: file and line, RunProcess in C", "url": "https://macoy.me/blog/programming/CakelispDec2022", "published_at": "2022-12-08T00:00:00+00:00" }, { "id": "01a0879e-2a36-71e0-b815-4c49304144a8", "title": "Cakelisp C support and dynamic environments", "url": "https://macoy.me/blog/programming/CakelispCSupport", "published_at": "2022-11-15T00:00:00+00:00" }, { "id": "01a0879e-2a36-71e0-b815-4c492f991064", "title": "An argument for self-modifying applications", "url": "https://macoy.me/blog/programming/SelfModifyingApplications", "published_at": "2022-10-23T00:00:00+00:00" }, { "id": "01a0879e-2a36-71e0-b815-4c49430fca07", "title": "Evaluating integrated development environments", "url": "https://macoy.me/blog/programming/IntegratedDevelopmentEnvironment", "published_at": "2022-10-01T00:00:00+00:00" }, { "id": "01a0879e-2a36-71e0-b815-4c4933fdbc77", "title": "The GitHub migration continues", "url": "https://macoy.me/blog/programming/GitHubMigration", "published_at": "2022-09-07T00:00:00+00:00" }, { "id": "01a0879e-2a36-71e0-b815-4c492eda6cd0", "title": "New features in Cakelisp: defer, CRC builds", "url": "https://macoy.me/blog/programming/CakelispDeferCRCs", "published_at": "2022-08-15T00:00:00+00:00" }, { "id": "01a0879e-2a36-71e0-b815-4c492f73c3fd", "title": "What they don't teach you about sockets", "url": "https://macoy.me/blog/programming/Sockets", "published_at": "2022-07-24T00:00:00+00:00" }, { "id": "01a0879e-2a36-71e0-b815-4c4941670322", "title": "My projects are leaving GitHub", "url": "https://macoy.me/blog/programming/LeavingGitHub", "published_at": "2022-07-02T00:00:00+00:00" }, { "id": "01a0879e-2a36-71e0-b815-4c493071972f", "title": "Projects in progress: June 2022", "url": "https://macoy.me/blog/programming/ProjectsInProgress", "published_at": "2022-06-11T00:00:00+00:00" }, { "id": "01a0879e-2a36-71e0-b815-4c494206c909", "title": "Linker trouble: musl libc and weak aliasing", "url": "https://macoy.me/blog/programming/MuslMallocAlias", "published_at": "2022-05-17T00:00:00+00:00" }, { "id": "01a0879e-2a36-71e0-b815-4c49413f0cc9", "title": "Bringing a dynamic environment to C: My linker project", "url": "https://macoy.me/blog/programming/LinkerLoaderIntro", "published_at": "2022-04-27T00:00:00+00:00" }, { "id": "01a0879e-2a36-71e0-b815-4c4931cc36e2", "title": "The code generation X-factor", "url": "https://macoy.me/blog/programming/CodeGenerationXFactor", "published_at": "2022-04-07T00:00:00+00:00" }, { "id": "01a0879e-2a36-71e0-b815-4c49394c0655", "title": "Writing XML with S-expressions", "url": "https://macoy.me/blog/programming/CakelispXML", "published_at": "2022-03-14T00:00:00+00:00" }, { "id": "01a0879e-2a36-71e0-b815-4c493bbc9d52", "title": "Surgical programming", "url": "https://macoy.me/blog/programming/SurgicalProgramming", "published_at": "2022-01-22T00:00:00+00:00" }, { "id": "01a0879e-2a36-71e0-b815-4c4940a7004c", "title": "Cakelisp: One year later", "url": "https://macoy.me/blog/programming/CakelispOneYearLater", "published_at": "2021-12-29T00:00:00+00:00" }, { "id": "01a0879e-2a36-71e0-b815-4c493b21f073", "title": "A benefit of an integrated programmable build system", "url": "https://macoy.me/blog/programming/CakelispBundleFiles", "published_at": "2021-12-01T00:00:00+00:00" }, { "id": "01a0879e-2a36-71e0-b815-4c49431ad027", "title": "Embedding binary data with Windows Resource Compiler", "url": "https://macoy.me/blog/programming/WindowsResourceCompiler", "published_at": "2021-11-22T00:00:00+00:00" }, { "id": "01a0879e-2a36-71e0-b815-4c4934bf6edb", "title": "Interface ergonomics: automation isn't just about time saved", "url": "https://macoy.me/blog/programming/InterfaceFriction", "published_at": "2021-10-12T00:00:00+00:00" }, { "id": "01a0879e-2a36-71e0-b815-4c49376cde80", "title": "Auto Color: a C header for automatic color themes", "url": "https://macoy.me/blog/programming/AutoColor", "published_at": "2021-10-03T00:00:00+00:00" }, { "id": "01a0879e-2a36-71e0-b815-4c493cb1e46f", "title": "Project optimism", "url": "https://macoy.me/blog/programming/ProjectOptimism", "published_at": "2021-09-15T00:00:00+00:00" }, { "id": "01a0879e-2a36-71e0-b815-4c4942930a75", "title": "The awesome power of type introspection", "url": "https://macoy.me/blog/programming/TypeIntrospection", "published_at": "2021-08-11T00:00:00+00:00" }, { "id": "01a0879e-2a36-71e0-b815-4c493a359534", "title": "Holistic Optimization", "url": "https://macoy.me/blog/programming/HolisticOptimization", "published_at": "2021-07-15T00:00:00+00:00" }, { "id": "01a0879e-2a36-71e0-b815-4c493621f390", "title": "OpenGL loaders and Cakelisp", "url": "https://macoy.me/blog/programming/OpenGLLoaders", "published_at": "2021-05-29T00:00:00+00:00" }, { "id": "01a0879e-2a36-71e0-b815-4c49386a9639", "title": "Cakelisp cleanup and File Helper work", "url": "https://macoy.me/blog/programming/CakelispCleanup", "published_at": "2021-05-17T00:00:00+00:00" }, { "id": "01a0879e-2a36-71e0-b815-4c493028d5e1", "title": "Cakelisp joins Handmade Network (and brings Kitties!)", "url": "https://macoy.me/blog/programming/CakelispNowHandMade", "published_at": "2021-04-20T00:00:00+00:00" }, { "id": "01a0879e-2a36-71e0-b815-4c493d35e119", "title": "Using a debugger", "url": "https://macoy.me/blog/programming/UsingADebugger", "published_at": "2021-04-12T00:00:00+00:00" }, { "id": "01a0879e-2a36-71e0-b815-4c4926be3187", "title": "Hitting a wall: the importance of learning without a game engine", "url": "https://macoy.me/blog/gamedev/GameEngineWalls", "published_at": "2021-03-02T00:00:00+00:00" }, { "id": "01a0879e-2a36-71e0-b815-4c492c0862dc", "title": "Don't make players wait", "url": "https://macoy.me/blog/gamedev/DontMakePlayersWait", "published_at": "2021-01-22T00:00:00+00:00" }, { "id": "01a0879e-2a36-71e0-b815-4c4936d37fd4", "title": "Porting Cakelisp to Windows", "url": "https://macoy.me/blog/programming/CakelispOnWindows", "published_at": "2021-01-22T00:00:00+00:00" }, { "id": "01a0879e-2a36-71e0-b815-4c492612f4b0", "title": "The worrying trend of game technology centralization", "url": "https://macoy.me/blog/gamedev/GameEngineCentralization", "published_at": "2021-01-18T00:00:00+00:00" }, { "id": "01a0879e-2a36-71e0-b815-4c492ed297a5", "title": "Linux execvp() and double quotes", "url": "https://macoy.me/blog/programming/LinuxExecAndQuotes", "published_at": "2021-01-12T00:00:00+00:00" }, { "id": "01a0879e-2a36-71e0-b815-4c493429a3e3", "title": "Cakelisp: a programming language for games", "url": "https://macoy.me/blog/programming/CakelispIntro", "published_at": "2020-12-20T00:00:00+00:00" }, { "id": "01a0879e-2a36-71e0-b815-4c49334bcaeb", "title": "Ogre 2: from zero to textured model", "url": "https://macoy.me/blog/programming/Ogre2Setup", "published_at": "2020-12-13T00:00:00+00:00" }, { "id": "01a0879e-2a36-71e0-b815-4c49437cf1d8", "title": "What have I been up to? 2020 edition", "url": "https://macoy.me/blog/WhatHaveIBeenUpTo2020", "published_at": "2020-08-03T00:00:00+00:00" }, { "id": "01a0879e-2a36-71e0-b815-4c492587650b", "title": "My work on the AI Director in Magic: Legends", "url": "https://macoy.me/blog/gamedev/DirectorArticle", "published_at": "2020-07-15T00:00:00+00:00" }, { "id": "01a0879e-2a36-71e0-b815-4c492afce7ee", "title": "Understanding is a Responsibility", "url": "https://macoy.me/blog/gamedev/UnderstandingIsAResponsibility", "published_at": "2020-05-28T00:00:00+00:00" }, { "id": "01a0879e-2a36-71e0-b815-4c492d3f7c01", "title": "How Emacs should get more users", "url": "https://macoy.me/blog/emacs/HowEmacsShouldGetMoreUsers", "published_at": "2020-05-08T00:00:00+00:00" }, { "id": "01a0879e-2a36-71e0-b815-4c492426dff7", "title": "Think Twice Before Using Game Engines", "url": "https://macoy.me/blog/gamedev/ThinkTwiceBeforeUsingGameEngines", "published_at": "2019-09-08T00:00:00+00:00" }, { "id": "01a0879e-2a35-713a-a781-331ee2b9e4a6", "title": "Know What Your Linker Knows", "url": "https://macoy.me/blog/gamedev/KnowWhatYouAreLinking", "published_at": "2019-08-12T00:00:00+00:00" }, { "id": "01a0879e-2a36-71e0-b815-4c49444c0e0b", "title": "紹介", "url": "https://macoy.me/blog/%E6%97%A5%E6%9C%AC%E8%AA%9E/%E7%B4%B9%E4%BB%8B", "published_at": "2019-07-16T00:00:00+00:00" }, { "id": "01a0879e-2a36-71e0-b815-4c492e88d667", "title": "What have I been up to?", "url": "https://macoy.me/blog/WhatHaveIBeenUpTo", "published_at": "2019-07-04T00:00:00+00:00" }, { "id": "01a0879e-2a36-71e0-b815-4c492329badb", "title": "Deathcall Let's Plays", "url": "https://macoy.me/blog/gamedev/DeathcallLetsPlays", "published_at": "2018-08-29T00:00:00+00:00" }, { "id": "01a0879e-2a36-71e0-b815-4c49298adbed", "title": "RIP Galavant", "url": "https://macoy.me/blog/gamedev/RIPGalavant", "published_at": "2018-05-24T00:00:00+00:00" }, { "id": "01a0879e-2a36-71e0-b815-4c492c6090fc", "title": "7 Day Roguelike 2018", "url": "https://macoy.me/blog/gamedev/7DayRoguelike2018", "published_at": "2018-03-06T00:00:00+00:00" }, { "id": "01a0879e-2a36-71e0-b815-4c492324abe4", "title": "A Change in Direction", "url": "https://macoy.me/blog/gamedev/AChangeinDirection", "published_at": "2018-01-20T00:00:00+00:00" }, { "id": "01a0879e-2a36-71e0-b815-4c4924e04bb1", "title": "Approaching Galavant's Two-Year Dev Anniversary", "url": "https://macoy.me/blog/gamedev/ApproachingGalavantsTwoYearDevAnniversary", "published_at": "2017-09-30T00:00:00+00:00" }, { "id": "01a0879e-2a36-71e0-b815-4c4928d0f1db", "title": "The Great Gif Exchange Revived, Week 1", "url": "https://macoy.me/blog/gamedev/TheGreatGifExchangeRevivedWeek1", "published_at": "2017-03-11T00:00:00+00:00" }, { "id": "01a0879e-2a36-71e0-b815-4c49270eeb8d", "title": "An Update on Galavant's AI", "url": "https://macoy.me/blog/gamedev/AnUpdateonGalavantsAI", "published_at": "2016-11-01T00:00:00+00:00" }, { "id": "01a0879e-2a35-713a-a781-331ee2618d8b", "title": "The Great Gif Exchange, Week 15", "url": "https://macoy.me/blog/gamedev/TheGreatGifExchangeWeek15", "published_at": "2016-10-11T00:00:00+00:00" }, { "id": "01a0879e-2a36-71e0-b815-4c49283f20f4", "title": "The Great Gif Exchange, Week 13", "url": "https://macoy.me/blog/gamedev/TheGreatGifExchangeWeek13", "published_at": "2016-09-14T00:00:00+00:00" }, { "id": "01a0879e-2a36-71e0-b815-4c49255396a4", "title": "The Great Gif Exchange, Week 9", "url": "https://macoy.me/blog/gamedev/TheGreatGifExchangeWeek9", "published_at": "2016-08-02T00:00:00+00:00" }, { "id": "01a0879e-2a36-71e0-b815-4c4927c681e9", "title": "The Great Gif Exchange, Week 8", "url": "https://macoy.me/blog/gamedev/TheGreatGifExchangeWeek8", "published_at": "2016-06-03T00:00:00+00:00" }, { "id": "01a0879e-2a36-71e0-b815-4c492afd6eb0", "title": "The Great Gif Exchange, Week 7 (+SURPRISE)", "url": "https://macoy.me/blog/gamedev/TheGreatGifExchangeWeek7SURPRISE", "published_at": "2016-05-27T00:00:00+00:00" }, { "id": "01a0879e-2a36-71e0-b815-4c4926b8c51f", "title": "The Great Gif Exchange, Week 6", "url": "https://macoy.me/blog/gamedev/TheGreatGifExchangeWeek6", "published_at": "2016-05-20T00:00:00+00:00" }, { "id": "01a0879e-2a36-71e0-b815-4c492c8dc4a6", "title": "The Great Gif Exchange, Week 5", "url": "https://macoy.me/blog/gamedev/TheGreatGifExchangeWeek5", "published_at": "2016-05-14T00:00:00+00:00" }, { "id": "01a0879e-2a36-71e0-b815-4c492a5fcaaf", "title": "The Great Gif Exchange, Week 4", "url": "https://macoy.me/blog/gamedev/TheGreatGifExchangeWeek4", "published_at": "2016-05-06T00:00:00+00:00" }, { "id": "01a0879e-2a36-71e0-b815-4c49232194f4", "title": "On Build Systems, Visual Aesthetic, and Other Terrors", "url": "https://macoy.me/blog/gamedev/OnBuildSystemsVisualAestheticandOtherTerrors", "published_at": "2016-04-23T00:00:00+00:00" }, { "id": "01a0879e-2a36-71e0-b815-4c4929d3a30a", "title": "Then Life Hits...", "url": "https://macoy.me/blog/gamedev/ThenLifeHits", "published_at": "2016-02-15T00:00:00+00:00" }, { "id": "01a0879e-2a36-71e0-b815-4c492bba0247", "title": "Re:Horizon", "url": "https://macoy.me/blog/gamedev/ReHorizon", "published_at": "2015-10-14T00:00:00+00:00" }, { "id": "01a0879e-2a36-71e0-b815-4c492a4868cb", "title": "A New Home", "url": "https://macoy.me/blog/gamedev/ANewHome", "published_at": "2015-01-27T00:00:00+00:00" } ] posts Claim your blog
Back to macoy.me
Blog · corpus.blog/blogs/macoy.me/posts

macoy.me

macoy.me

2026

2025

2024

2023

2022

2021

2020

2019

2018

2017

2016

2015