41554 blogs · [ { "id": "01a087a6-0a73-72f1-9e01-89e43d915ab9", "title": "Fast LZ match lengths", "url": "https://mikejsavage.co.uk/fast-lz-match-lengths/", "published_at": null }, { "id": "01a087a6-0a73-72f1-9e01-89e43df62175", "title": "Auto-mounting USB drives on NixOS", "url": "https://mikejsavage.co.uk/nixos-auto-mounting/", "published_at": null }, { "id": "01a087a6-0a73-72f1-9e01-89e43ed01ae8", "title": "Apple products quarantine post", "url": "https://mikejsavage.co.uk/apple-quarantine-post/", "published_at": null }, { "id": "01a087a6-0a73-72f1-9e01-89e43f0015bf", "title": "C++ tricks: enum arithmetic", "url": "https://mikejsavage.co.uk/cpp-tricks-enum-arithmetic/", "published_at": null }, { "id": "01a087a6-0a73-72f1-9e01-89e43f6bef36", "title": "C++ tricks: STL-free type traits", "url": "https://mikejsavage.co.uk/cpp-tricks-stl-free-type-traits/", "published_at": null }, { "id": "01a087a6-0a73-72f1-9e01-89e43fe1d370", "title": "sem_postmany", "url": "https://mikejsavage.co.uk/sem_postmany/", "published_at": null }, { "id": "01a087a6-0a73-72f1-9e01-89e4405561c1", "title": "All perf zero quality BC4 encoding", "url": "https://mikejsavage.co.uk/all-perf-zero-quality-bc4-encoding/", "published_at": null }, { "id": "01a087a6-0a73-72f1-9e01-89e4408bdfe5", "title": "C++ tricks: NonRAIIDynamicArray", "url": "https://mikejsavage.co.uk/cpp-tricks-nonraiidynamicarray/", "published_at": null }, { "id": "01a087a6-0a73-72f1-9e01-89e4410593fe", "title": "C++ tricks: defer", "url": "https://mikejsavage.co.uk/cpp-tricks-defer/", "published_at": null }, { "id": "01a087a6-0a73-72f1-9e01-89e441b5e44b", "title": "Configuring launchd scheduled tasks with Nix home manager", "url": "https://mikejsavage.co.uk/home-manager-launchd/", "published_at": null }, { "id": "01a087a6-0a73-72f1-9e01-89e44253fd9d", "title": "C++ tricks: STL-free initializer list", "url": "https://mikejsavage.co.uk/cpp-tricks-stl-free-initializer-list/", "published_at": null }, { "id": "01a087a6-0a73-72f1-9e01-89e442fd691e", "title": "Realloc and arena allocators", "url": "https://mikejsavage.co.uk/realloc-arena/", "published_at": null }, { "id": "01a087a6-0a73-72f1-9e01-89e443e2335c", "title": "C++ tricks: Production Ready TM aligned malloc", "url": "https://mikejsavage.co.uk/cpp-tricks-production-ready-aligned-malloc/", "published_at": null }, { "id": "01a087a6-0a73-72f1-9e01-89e4446baf57", "title": "C++ tricks: STL-free source location", "url": "https://mikejsavage.co.uk/cpp-tricks-stl-free-source-location/", "published_at": null }, { "id": "01a087a6-0a73-72f1-9e01-89e44507d681", "title": "2023 Windows post-install checklist", "url": "https://mikejsavage.co.uk/windows-10-iot-21h1-postinstall/", "published_at": null }, { "id": "01a087a6-0a73-72f1-9e01-89e44602afe4", "title": "Running a business in Finland", "url": "https://mikejsavage.co.uk/running-a-business-in-finland/", "published_at": null }, { "id": "01a087a6-0a73-72f1-9e01-89e446f6affc", "title": "Least effort self-destructing email addresses with Fastmail", "url": "https://mikejsavage.co.uk/fastmail-min-effort-tempomail/", "published_at": null }, { "id": "01a087a6-0a73-72f1-9e01-89e447816e37", "title": "Building a userspace CSPRNG on top of Monocypher 3", "url": "https://mikejsavage.co.uk/userspace-csprng-with-monocypher3/", "published_at": null }, { "id": "01a087a6-0a73-72f1-9e01-89e447c02758", "title": "An equal but opposite reaction", "url": "https://mikejsavage.co.uk/yay-adblock/", "published_at": null }, { "id": "01a087a6-0a73-72f1-9e01-89e4487edf61", "title": "OpenSMTPD is excellent 2020 edition", "url": "https://mikejsavage.co.uk/opensmtpd-is-excellent-2/", "published_at": null }, { "id": "01a087a6-0a73-72f1-9e01-89e44959d86c", "title": "C++ tricks: catching ASAN errors in a debugger", "url": "https://mikejsavage.co.uk/cpp-tricks-gdb-asan/", "published_at": null }, { "id": "01a087a6-0a73-72f1-9e01-89e449cec76c", "title": "gg libraries index", "url": "https://mikejsavage.co.uk/gg-libs/", "published_at": null }, { "id": "01a087a6-0a73-72f1-9e01-89e449e68cce", "title": "ggtime", "url": "https://mikejsavage.co.uk/ggtime/", "published_at": null }, { "id": "01a087a6-0a73-72f1-9e01-89e44aca06b3", "title": "Daily Mail", "url": "https://mikejsavage.co.uk/daily-mail/", "published_at": null }, { "id": "01a087a6-0a73-72f1-9e01-89e44b8b82b6", "title": "C++ tricks: compound literals", "url": "https://mikejsavage.co.uk/cpp-tricks-compound-literals/", "published_at": null }, { "id": "01a087a6-0a73-72f1-9e01-89e44b96d9a6", "title": "C++ tricks: member array count", "url": "https://mikejsavage.co.uk/cpp-tricks-array-count-2/", "published_at": null }, { "id": "01a087a6-0a73-72f1-9e01-89e44b9e3b20", "title": "GL tricks: glPushDebugGroup", "url": "https://mikejsavage.co.uk/khr-debug/", "published_at": null }, { "id": "01a087a6-0a73-72f1-9e01-89e44c2f79e8", "title": "Server side React", "url": "https://mikejsavage.co.uk/server-side-react/", "published_at": null }, { "id": "01a087a6-0a73-72f1-9e01-89e44c9a9013", "title": "SSH local discovery", "url": "https://mikejsavage.co.uk/ssh-local-discovery/", "published_at": null }, { "id": "01a087a6-0a73-72f1-9e01-89e44d8fc52f", "title": "C++ tricks: compile time string hashing", "url": "https://mikejsavage.co.uk/cpp-tricks-compile-time-string-hashing/", "published_at": null }, { "id": "01a087a6-0a73-72f1-9e01-89e44e72a2f0", "title": "C++ tricks: compile time type IDs", "url": "https://mikejsavage.co.uk/cpp-tricks-type-id/", "published_at": null }, { "id": "01a087a6-0a73-72f1-9e01-89e44ecfe9d7", "title": "Useful tmux window titles", "url": "https://mikejsavage.co.uk/tmux-window-titles/", "published_at": null }, { "id": "01a087a6-0a73-72f1-9e01-89e44fab3d88", "title": "Sending mail through Amazon SES with OpenSMTPD", "url": "https://mikejsavage.co.uk/opensmtpd-ses/", "published_at": null }, { "id": "01a087a6-0a73-72f1-9e01-89e44ffea580", "title": "Detecting WSL in Makefiles", "url": "https://mikejsavage.co.uk/wsl-makefile/", "published_at": null }, { "id": "01a087a6-0a73-72f1-9e01-89e45051700d", "title": "Windows 10 2019 post-install checklist", "url": "https://mikejsavage.co.uk/windows-10-postinstall/", "published_at": null }, { "id": "01a087a6-0a73-72f1-9e01-89e4506a0b22", "title": "Immediate mode audio", "url": "https://mikejsavage.co.uk/immediate-mode-audio/", "published_at": null }, { "id": "01a087a6-0a73-72f1-9e01-89e450dcb16a", "title": "How to get rid of ? globbing in fish", "url": "https://mikejsavage.co.uk/fish-shell-qmark-noglob/", "published_at": null }, { "id": "01a087a6-0a73-72f1-9e01-89e450faec04", "title": "Branch prediction minutiae in LZ decoders", "url": "https://mikejsavage.co.uk/branch-prediction-minutiae-lz/", "published_at": null }, { "id": "01a087a6-0a73-72f1-9e01-89e451ac2130", "title": "Least effort image self-hosting", "url": "https://mikejsavage.co.uk/least-effort-instagram-clone/", "published_at": null }, { "id": "01a087a6-0a73-72f1-9e01-89e451f3064f", "title": "Using WSAAsyncSelect", "url": "https://mikejsavage.co.uk/using-wsaasyncselect-correctly/", "published_at": null }, { "id": "01a087a6-0a73-72f1-9e01-89e4525e7814", "title": "GoAccess with OpenBSD httpd", "url": "https://mikejsavage.co.uk/goaccess-with-openbsd-httpd/", "published_at": null }, { "id": "01a087a6-0a73-72f1-9e01-89e45319be62", "title": "namespace is bad and should not be used", "url": "https://mikejsavage.co.uk/namespace-is-bad/", "published_at": null }, { "id": "01a087a6-0a73-72f1-9e01-89e453f6a17f", "title": "Never update anything #145432", "url": "https://mikejsavage.co.uk/never-update-anything-again/", "published_at": null }, { "id": "01a087a6-0a73-72f1-9e01-89e4547245a7", "title": "cmov", "url": "https://mikejsavage.co.uk/cmov/", "published_at": null }, { "id": "01a087a6-0a73-72f1-9e01-89e45494fb1d", "title": "Compression gold medalist", "url": "https://mikejsavage.co.uk/compression-gold-medal/", "published_at": null }, { "id": "01a087a6-0a73-72f1-9e01-89e45546ba2a", "title": "Existential risk from artificial general intelligence", "url": "https://mikejsavage.co.uk/translate-google-com/", "published_at": null }, { "id": "01a087a6-0a73-72f1-9e01-89e4555f3d61", "title": "ggentropy", "url": "https://mikejsavage.co.uk/ggentropy/", "published_at": null }, { "id": "01a087a6-0a73-72f1-9e01-89e45569338f", "title": "C++ tricks: dealing with 3rd party code", "url": "https://mikejsavage.co.uk/cpp-tricks-dependencies/", "published_at": null }, { "id": "01a087a6-0a73-72f1-9e01-89e45593af92", "title": "Building a userspace CSPRNG on top of Monocypher 2", "url": "https://mikejsavage.co.uk/userspace-csprng-with-monocypher/", "published_at": null }, { "id": "01a087a6-0a73-72f1-9e01-89e456225ff7", "title": "C++ tricks: named function arguments", "url": "https://mikejsavage.co.uk/cpp-tricks-named-function-arguments/", "published_at": null }, { "id": "01a087a6-0a73-72f1-9e01-89e456baf234", "title": "Least effort self hosted dynamic DNS", "url": "https://mikejsavage.co.uk/least-effort-dyndns/", "published_at": null }, { "id": "01a087a6-0a73-72f1-9e01-89e4573c9eb8", "title": "Mesh generation checklist", "url": "https://mikejsavage.co.uk/mesh-generation-checklist/", "published_at": null }, { "id": "01a087a6-0a73-72f1-9e01-89e45763bb84", "title": "Geometry clipmaps: simple terrain rendering with level of detail", "url": "https://mikejsavage.co.uk/geometry-clipmaps/", "published_at": null }, { "id": "01a087a6-0a73-72f1-9e01-89e457ffe863", "title": "C++ tricks: macro to disable optimisations", "url": "https://mikejsavage.co.uk/cpp-tricks-disable-optimisations-macro/", "published_at": null }, { "id": "01a087a6-0a73-72f1-9e01-89e458d311b9", "title": "Preprocessor madness 2", "url": "https://mikejsavage.co.uk/preprocessor-madness2/", "published_at": null }, { "id": "01a087a6-0a73-72f1-9e01-89e459b47c17", "title": "RSS feed", "url": "https://mikejsavage.co.uk/rss-feed/", "published_at": null }, { "id": "01a087a6-0a73-72f1-9e01-89e45a0c5b3e", "title": "Deadlock", "url": "https://mikejsavage.co.uk/deadlock/", "published_at": null }, { "id": "01a087a6-0a73-72f1-9e01-89e45a1af5fb", "title": "Preprocessor madness", "url": "https://mikejsavage.co.uk/preprocessor-madness/", "published_at": null }, { "id": "01a087a6-0a73-72f1-9e01-89e45ad1005a", "title": "C++ tricks: sized array arguments", "url": "https://mikejsavage.co.uk/cpp-tricks-sized-array-arguments/", "published_at": null }, { "id": "01a087a6-0a73-72f1-9e01-89e45bca5b80", "title": "Linux vs BSD in a man page", "url": "https://mikejsavage.co.uk/linux-vs-openbsd/", "published_at": null }, { "id": "01a087a6-0a73-72f1-9e01-89e45c943e0a", "title": "Monocypher is excellent", "url": "https://mikejsavage.co.uk/monocypher-is-excellent/", "published_at": null }, { "id": "01a087a6-0a73-72f1-9e01-89e45d75e2e7", "title": "GL_FRAMEBUFFER_SRGB sucks", "url": "https://mikejsavage.co.uk/gl-framebuffer-srgb-sucks/", "published_at": null }, { "id": "01a087a6-0a73-72f1-9e01-89e45d821bd9", "title": "Roadblocks to releasing Medfall on macOS", "url": "https://mikejsavage.co.uk/roadblocks-medfall-on-osx/", "published_at": null }, { "id": "01a087a6-0a73-72f1-9e01-89e45dfe804c", "title": "Vim: peek definition", "url": "https://mikejsavage.co.uk/vim-peek-definition/", "published_at": null }, { "id": "01a087a6-0a73-72f1-9e01-89e45e09f132", "title": "OpenSMTPD is excellent", "url": "https://mikejsavage.co.uk/opensmtpd-is-excellent/", "published_at": null }, { "id": "01a087a6-0a73-72f1-9e01-89e45e0ec325", "title": "Not even not upgrading can save me", "url": "https://mikejsavage.co.uk/not-even-not-upgrading-can-save-me/", "published_at": null }, { "id": "01a087a6-0a73-72f1-9e01-89e45ef63bb4", "title": "Optimising vs expanding to fill all available resources", "url": "https://mikejsavage.co.uk/optimising-vs-expanding/", "published_at": null }, { "id": "01a087a6-0a73-72f1-9e01-89e45f61cf07", "title": "Code for my intro to raytracing talk", "url": "https://mikejsavage.co.uk/intro-to-raytracing-code/", "published_at": null }, { "id": "01a087a6-0a73-72f1-9e01-89e45f8f7e6b", "title": "C++ tricks: autogdb", "url": "https://mikejsavage.co.uk/cpp-tricks-autogdb/", "published_at": null }, { "id": "01a087a6-0a73-72f1-9e01-89e4603c72fc", "title": "More installer junk", "url": "https://mikejsavage.co.uk/more-installer-junk/", "published_at": null }, { "id": "01a087a6-0a73-72f1-9e01-89e4605e94e7", "title": "Really finishing the job", "url": "https://mikejsavage.co.uk/really-finishing-the-job/", "published_at": null }, { "id": "01a087a6-0a73-72f1-9e01-89e4606d2ed9", "title": "OpenGL uniforms and renderer design rambling", "url": "https://mikejsavage.co.uk/opengl-uniforms/", "published_at": null }, { "id": "01a087a6-0a73-72f1-9e01-89e4616620f0", "title": "Detecting TCP server crashes", "url": "https://mikejsavage.co.uk/detecting-tcp-shutdown/", "published_at": null }, { "id": "01a087a6-0a73-72f1-9e01-89e461e354ba", "title": "ggformat", "url": "https://mikejsavage.co.uk/ggformat/", "published_at": null }, { "id": "01a087a6-0a73-72f1-9e01-89e4627942a7", "title": "Saving scroll position when refreshing", "url": "https://mikejsavage.co.uk/saving-position-on-refresh/", "published_at": null }, { "id": "01a087a6-0a73-72f1-9e01-89e4636ed872", "title": "Never update anything", "url": "https://mikejsavage.co.uk/never-update-anything/", "published_at": null }, { "id": "01a087a6-0a73-72f1-9e01-89e464610c92", "title": "Ruoka Helsingissä", "url": "https://mikejsavage.co.uk/ruoka-helsingissa/", "published_at": null }, { "id": "01a087a6-0a73-72f1-9e01-89e464d3946b", "title": "SIGGRAPH 2017", "url": "https://mikejsavage.co.uk/siggraph-2017/", "published_at": null }, { "id": "01a087a6-0a73-72f1-9e01-89e465cf34a4", "title": "Rust performance: finishing the job", "url": "https://mikejsavage.co.uk/rust-performance-finishing-the-job/", "published_at": null }, { "id": "01a087a6-0a73-72f1-9e01-89e466c17c4f", "title": "Fixing the Visual Studio forms designer", "url": "https://mikejsavage.co.uk/fixing-the-designer-in-vs/", "published_at": null }, { "id": "01a087a6-0a73-72f1-9e01-89e4677a10d5", "title": "Vim", "url": "https://mikejsavage.co.uk/vim1/", "published_at": null }, { "id": "01a087a6-0a73-72f1-9e01-89e467e9ca21", "title": "Wat", "url": "https://mikejsavage.co.uk/mkinitcpio-nfs-utils/", "published_at": null }, { "id": "01a087a6-0a73-72f1-9e01-89e46819fd86", "title": "C++ tricks: least effort conditional breakpoints", "url": "https://mikejsavage.co.uk/cpp-tricks-break-bools/", "published_at": null }, { "id": "01a087a6-0a73-72f1-9e01-89e46839cd43", "title": "Writing installers for Windows", "url": "https://mikejsavage.co.uk/windows-installers/", "published_at": null }, { "id": "01a087a6-0a73-72f1-9e01-89e469281dea", "title": "C++ tricks: NO_INIT", "url": "https://mikejsavage.co.uk/cpp-tricks-no-init/", "published_at": null }, { "id": "01a087a6-0a73-72f1-9e01-89e4696dcb6a", "title": "bug489729", "url": "https://mikejsavage.co.uk/bug489729/", "published_at": null }, { "id": "01a087a6-0a73-72f1-9e01-89e46a60d8c4", "title": "C++ tricks: better casting", "url": "https://mikejsavage.co.uk/cpp-tricks-better-casting/", "published_at": null }, { "id": "01a087a6-0a73-72f1-9e01-89e46b003a97", "title": "Least effort unit tests", "url": "https://mikejsavage.co.uk/least-effort-unit-tests/", "published_at": null }, { "id": "01a087a6-0a73-72f1-9e01-89e46ba7d3cf", "title": "Caches are fast, hashes are fast", "url": "https://mikejsavage.co.uk/caches-are-fast-hashes-are-fast/", "published_at": null }, { "id": "01a087a6-0a73-72f1-9e01-89e46c411bee", "title": "C++ tricks: ZERO", "url": "https://mikejsavage.co.uk/cpp-tricks-zero/", "published_at": null }, { "id": "01a087a6-0a73-72f1-9e01-89e46cd6afa1", "title": "C++ tricks: safe ARRAY_COUNT", "url": "https://mikejsavage.co.uk/cpp-tricks-array-count/", "published_at": null }, { "id": "01a087a6-0a73-72f1-9e01-89e46d3ee780", "title": "Dumping a git repository to an encrypted zip file", "url": "https://mikejsavage.co.uk/git-repo-to-encrypted-zip/", "published_at": null }, { "id": "01a087a6-0a73-72f1-9e01-89e46dbf9ae2", "title": "Windows post-install for developers", "url": "https://mikejsavage.co.uk/windows-postinstall/", "published_at": null }, { "id": "01a087a6-0a73-72f1-9e01-89e46e5a66ee", "title": "Billions", "url": "https://mikejsavage.co.uk/billions/", "published_at": null }, { "id": "01a087a6-0a73-72f1-9e01-89e46f3dc9d6", "title": "Auto-mounting removable drives", "url": "https://mikejsavage.co.uk/udev-auto-mounting/", "published_at": null }, { "id": "01a087a6-0a73-72f1-9e01-89e47019872a", "title": "Moving to OpenBSD", "url": "https://mikejsavage.co.uk/moving-to-openbsd/", "published_at": null }, { "id": "01a087a6-0a73-72f1-9e01-89e4706af069", "title": "About me meta-post", "url": "https://mikejsavage.co.uk/about/", "published_at": null } ] posts Claim your blog
Back to mikejsavage.co.uk
Blog · corpus.blog/blogs/mikejsavage.co.uk/posts

mikejsavage.co.uk

mikejsavage.co.uk

Undated