41554 blogs · [ { "id": "01a0b0b8-142b-70d1-a440-ffc8f268fc1e", "title": "Routing only a few domains over a VPN", "url": "https://code.mendhak.com/route-a-single-domain-over-vpn/", "published_at": "2026-09-16T00:00:00+00:00" }, { "id": "01a08761-b013-7215-b991-de5cb8e6917a", "title": "Image rendering in the terminal to aid with descriptive prose", "url": "https://code.mendhak.com/render-images-in-terminal-with-stable-diffusion/", "published_at": "2026-09-04T00:00:00+00:00" }, { "id": "01a08761-b013-7215-b991-de5cb94eaf9e", "title": "A homepage for the terminal", "url": "https://code.mendhak.com/a-homepage-for-the-terminal/", "published_at": "2026-08-25T00:00:00+00:00" }, { "id": "01a08761-b013-7215-b991-de5cb9a39bb4", "title": "Privacy is not a soundbite", "url": "https://code.mendhak.com/privacy-is-not-a-soundbite/", "published_at": "2026-07-19T00:00:00+00:00" }, { "id": "01a08761-b013-7215-b991-de5cba22fe85", "title": "Undervolt your GPU for better performance and longevity", "url": "https://code.mendhak.com/linux-undervolt-gpu/", "published_at": "2026-05-16T00:00:00+00:00" }, { "id": "01a08761-b013-7215-b991-de5cba983f6f", "title": "ON1 Photo RAW on Linux", "url": "https://code.mendhak.com/on1-photo-raw-linux/", "published_at": "2026-04-04T00:00:00+00:00" }, { "id": "01a08761-b013-7215-b991-de5cba9d0697", "title": "How do terminal progress bars actually work?", "url": "https://code.mendhak.com/how-do-terminal-progress-bars-actually-work/", "published_at": "2026-03-01T00:00:00+00:00" }, { "id": "01a08761-b013-7215-b991-de5cbb7db3ae", "title": "We should probably start taking backups of Stack Overflow", "url": "https://code.mendhak.com/taking-a-backup-of-stackoverflow/", "published_at": "2026-01-18T00:00:00+00:00" }, { "id": "01a08761-b013-7215-b991-de5cbc7990d8", "title": "Run your development environments in isolation with Docker and CUDA", "url": "https://code.mendhak.com/run-cuda-machine-learning-environment-in-docker/", "published_at": "2025-12-23T00:00:00+00:00" }, { "id": "01a08761-b013-7215-b991-de5cbd2901e1", "title": "How to connect to internal AWS resources from GitHub Actions", "url": "https://code.mendhak.com/github-actions-to-internal-aws-resources/", "published_at": "2025-12-16T00:00:00+00:00" }, { "id": "01a08761-b013-7215-b991-de5cbdcdc7fd", "title": "Running Windows apps natively in Linux with Docker", "url": "https://code.mendhak.com/native-windows-apps-in-linux/", "published_at": "2025-12-08T00:00:00+00:00" }, { "id": "01a08761-b013-7215-b991-de5cbebc4682", "title": "Talking to a local LLM in the Firefox sidebar", "url": "https://code.mendhak.com/firefox-local-chatbot-ollama/", "published_at": "2025-09-04T00:00:00+00:00" }, { "id": "01a08761-b014-7341-855a-9b24193a5596", "title": "Managing multiple SSH keys for multiple GitHub organisations in a simple way", "url": "https://code.mendhak.com/github-multiple-ssh-keys/", "published_at": "2025-08-19T00:00:00+00:00" }, { "id": "01a08761-b014-7341-855a-9b2419b2035a", "title": "Developing personal Python apps for Android's Linux environment", "url": "https://code.mendhak.com/python-apps-android-linux/", "published_at": "2025-08-10T00:00:00+00:00" }, { "id": "01a08761-b014-7341-855a-9b241aa97a64", "title": "Using Gemini CLI as an adhoc commandline question answerer", "url": "https://code.mendhak.com/gemini-cli-adhoc-helper/", "published_at": "2025-06-30T00:00:00+00:00" }, { "id": "01a08761-b014-7341-855a-9b241b906ab9", "title": "edit is a terminal text editor that doesn't make me think", "url": "https://code.mendhak.com/microsoft-edit-cli-text-editor/", "published_at": "2025-06-02T00:00:00+00:00" }, { "id": "01a08761-b014-7341-855a-9b241c89aa6f", "title": "There is a dearth of automatic infinite scroll mice", "url": "https://code.mendhak.com/automatic-infinite-scroll-mode-mouse/", "published_at": "2025-05-22T00:00:00+00:00" }, { "id": "01a08761-b014-7341-855a-9b241ccf75fa", "title": "My brief attempt at learning about Software Defined Radio on Ubuntu", "url": "https://code.mendhak.com/listening-to-radio-on-ubuntu/", "published_at": "2025-04-13T00:00:00+00:00" }, { "id": "01a08761-b014-7341-855a-9b241d02b89c", "title": "A CI/CD friendly Dockerfile for `uv` based Python projects", "url": "https://code.mendhak.com/ci-cd-dockerfile-for-python-uv-ruff-pytest/", "published_at": "2025-03-14T00:00:00+00:00" }, { "id": "01a08761-b014-7341-855a-9b241d3eb6ac", "title": "It's OK to hardcode feature flags", "url": "https://code.mendhak.com/hardcode-feature-flags/", "published_at": "2025-01-30T00:00:00+00:00" }, { "id": "01a08761-b014-7341-855a-9b241dce1720", "title": "Compose keys are the nicest way of typing special characters", "url": "https://code.mendhak.com/compose-keys-user-friendly/", "published_at": "2024-12-08T00:00:00+00:00" }, { "id": "01a08761-b014-7341-855a-9b241e3fec04", "title": "New DNS standard could soon lead to useful error messages in browsers", "url": "https://code.mendhak.com/structured-dns-errors-with-helpful-error-messages/", "published_at": "2024-11-12T00:00:00+00:00" }, { "id": "01a08761-b014-7341-855a-9b241e4b8e7f", "title": "Modern artifact signing with Cosign, what works and what hurts", "url": "https://code.mendhak.com/understanding-sigstore-cosign-as-a-beginner/", "published_at": "2024-11-08T00:00:00+00:00" }, { "id": "01a08761-b014-7341-855a-9b241eabf91b", "title": "Syncing the login wallpaper with the desktop wallpaper on Ubuntu", "url": "https://code.mendhak.com/synchronize-login-wallpaper-ubuntu/", "published_at": "2024-09-16T00:00:00+00:00" }, { "id": "01a08761-b014-7341-855a-9b241f807709", "title": "Setting a static IP address in Ubuntu 24.04 using `netplan`", "url": "https://code.mendhak.com/ubuntu-2404-set-static-ip-address-using-netplan/", "published_at": "2024-09-08T00:00:00+00:00" }, { "id": "01a08761-b014-7341-855a-9b241fdee25a", "title": "What does a reverse shell actually look like?", "url": "https://code.mendhak.com/simple-reverse-shell-in-linux-bash/", "published_at": "2024-08-14T00:00:00+00:00" }, { "id": "01a08761-b014-7341-855a-9b2420c6c953", "title": "My most useful network troubleshooting commands and tools", "url": "https://code.mendhak.com/networking-cheat-sheet/", "published_at": "2024-07-28T00:00:00+00:00" }, { "id": "01a08761-b014-7341-855a-9b24216155ad", "title": "Adding all AWS service certificate authorities to your trust store", "url": "https://code.mendhak.com/quick-script-add-all-amazon-ca/", "published_at": "2024-07-22T00:00:00+00:00" }, { "id": "01a08761-b014-7341-855a-9b2421aa69d6", "title": "Lessons learned in moving on from Lightroom", "url": "https://code.mendhak.com/moving-on-from-lightroom/", "published_at": "2024-05-05T00:00:00+00:00" }, { "id": "01a08761-b014-7341-855a-9b2421f02313", "title": "Enhancing Kobo with text-to-image generation and simple explanations", "url": "https://code.mendhak.com/kobo-text-to-images-with-stable-diffusion/", "published_at": "2024-03-24T00:00:00+00:00" }, { "id": "01a08761-b014-7341-855a-9b24220bbb31", "title": "Use KeePassXC to sign your git commits", "url": "https://code.mendhak.com/keepassxc-sign-git-commit-with-ssh/", "published_at": "2024-02-15T00:00:00+00:00" }, { "id": "01a08761-b014-7341-855a-9b2422d29aee", "title": "The userscript that kept me fed", "url": "https://code.mendhak.com/the-userscript-that-kept-me-fed/", "published_at": "2024-01-28T00:00:00+00:00" }, { "id": "01a08761-b014-7341-855a-9b242385aaf6", "title": "Automatically hyperlinking the selected text when pasting a URL", "url": "https://code.mendhak.com/automatic-hyperlink-selected-text-on-paste/", "published_at": "2024-01-09T00:00:00+00:00" }, { "id": "01a08761-b014-7341-855a-9b2423b63662", "title": "GraphQL's poor developer experience", "url": "https://code.mendhak.com/graphql-poor-developer-experience/", "published_at": "2023-12-20T00:00:00+00:00" }, { "id": "01a08761-b014-7341-855a-9b2424995455", "title": "Hands on introduction to LLM programming for developers", "url": "https://code.mendhak.com/hands-on-llm-tutorial/", "published_at": "2023-11-19T00:00:00+00:00" }, { "id": "01a08761-b014-7341-855a-9b24256e09ef", "title": "LLM output is malicious user input", "url": "https://code.mendhak.com/llm-output-is-malicious/", "published_at": "2023-11-03T00:00:00+00:00" }, { "id": "01a08761-b014-7341-855a-9b2425d913ca", "title": "Using a local LLM to Automate an Android device", "url": "https://code.mendhak.com/automate-android-with-local-llm/", "published_at": "2023-09-19T00:00:00+00:00" }, { "id": "01a08761-b014-7341-855a-9b242672ec42", "title": "`?`, a simple CLI lookup tool", "url": "https://code.mendhak.com/simple-cli-lookup-tool/", "published_at": "2023-07-29T00:00:00+00:00" }, { "id": "01a08761-b014-7341-855a-9b24271132e2", "title": "Use threat modelling to choose a password manager", "url": "https://code.mendhak.com/threat-modelling-to-pick-password-manager/", "published_at": "2023-07-20T00:00:00+00:00" }, { "id": "01a08761-b014-7341-855a-9b242754b9aa", "title": ".NET's underrated configuration feature", "url": "https://code.mendhak.com/dotnet-simple-powerful-configuration/", "published_at": "2023-06-26T00:00:00+00:00" }, { "id": "01a08761-b014-7341-855a-9b2427777a08", "title": "The unpleasant hackiness of CSS dark mode toggles", "url": "https://code.mendhak.com/css-dark-mode-toggle-sucks/", "published_at": "2023-04-23T00:00:00+00:00" }, { "id": "01a08761-b014-7341-855a-9b2428436ede", "title": "My Kobo Customizations", "url": "https://code.mendhak.com/kobo-customizations/", "published_at": "2023-03-18T00:00:00+00:00" }, { "id": "01a08761-b014-7341-855a-9b2428a9b7a5", "title": "Wildcard certificates are not always a security risk", "url": "https://code.mendhak.com/use-wildcard-certificates-for-internal-infrastructure/", "published_at": "2023-03-11T00:00:00+00:00" }, { "id": "01a08761-b014-7341-855a-9b2428ede707", "title": "I had fun learning about Linux localization and fonts", "url": "https://code.mendhak.com/fun-learning-linux-localization/", "published_at": "2023-02-17T00:00:00+00:00" }, { "id": "01a08761-b014-7341-855a-9b24296af4be", "title": "Escaping Jekyll, and moving to Eleventy", "url": "https://code.mendhak.com/escaping-jekyll-to-eleventy/", "published_at": "2023-01-28T00:00:00+00:00" }, { "id": "01a08761-b014-7341-855a-9b2429ce8be9", "title": "Appreciating F-Droid as an app developer", "url": "https://code.mendhak.com/in-appreciation-of-fdroid/", "published_at": "2022-12-06T00:00:00+00:00" }, { "id": "01a08761-b014-7341-855a-9b2429ecd95a", "title": "Bringing TLS 1.3 to older Android devices", "url": "https://code.mendhak.com/tls-13-old-android-devices/", "published_at": "2022-11-18T00:00:00+00:00" }, { "id": "01a08761-b014-7341-855a-9b242a2d6fa0", "title": "How to run any Docker container's traffic through Wireguard or OpenVPN", "url": "https://code.mendhak.com/run-docker-through-vpn-container/", "published_at": "2022-10-07T00:00:00+00:00" }, { "id": "01a08761-b014-7341-855a-9b242a9cbee3", "title": "The simplest way to get started with Stable Diffusion via CLI on Ubuntu", "url": "https://code.mendhak.com/run-stable-diffusion-on-ubuntu/", "published_at": "2022-09-02T00:00:00+00:00" }, { "id": "01a08761-b014-7341-855a-9b242b3f0aca", "title": "Syncing your Github status with your currently playing Steam game", "url": "https://code.mendhak.com/steam-github-profile-status/", "published_at": "2022-08-27T00:00:00+00:00" }, { "id": "01a08761-b014-7341-855a-9b242bc3f910", "title": "I wrote to the address in the GPLv2 license notice and received the GPLv3 license", "url": "https://code.mendhak.com/gpl-v2-address-letter/", "published_at": "2022-07-16T00:00:00+00:00" }, { "id": "01a08761-b014-7341-855a-9b242c7d50dd", "title": "My ebook reading setup", "url": "https://code.mendhak.com/my-ebook-reading-setup/", "published_at": "2022-07-02T00:00:00+00:00" }, { "id": "01a08761-b014-7341-855a-9b242d43ff42", "title": "'Zero Trust' security is a poor choice of words", "url": "https://code.mendhak.com/zero-trust-poor-choice-of-words/", "published_at": "2022-04-19T00:00:00+00:00" }, { "id": "01a08761-b014-7341-855a-9b242deb7d3d", "title": "Tool to find Steam trading card sets in common with another user", "url": "https://code.mendhak.com/steam-find-common-trading-sets/", "published_at": "2022-04-14T00:00:00+00:00" }, { "id": "01a08761-b014-7341-855a-9b242e4b02b5", "title": "Repurposing Caps Lock into something useful", "url": "https://code.mendhak.com/make-caps-lock-useful/", "published_at": "2022-03-24T00:00:00+00:00" }, { "id": "01a08761-b014-7341-855a-9b242efdd0b4", "title": "In praise of opinionated frameworks", "url": "https://code.mendhak.com/opinionated-frameworks/", "published_at": "2022-03-12T00:00:00+00:00" }, { "id": "01a08761-b014-7341-855a-9b242f51ce97", "title": "A simple and effective Bash prompt for developers", "url": "https://code.mendhak.com/simple-bash-prompt-for-developers-ps1-git/", "published_at": "2022-02-09T00:00:00+00:00" }, { "id": "01a08761-b014-7341-855a-9b242f6d5117", "title": "How quantum computers break our security, and what's being done about it", "url": "https://code.mendhak.com/general-understanding-quantum-safe-cryptography/", "published_at": "2021-12-28T00:00:00+00:00" }, { "id": "01a08761-b014-7341-855a-9b242faafa99", "title": "Smashtest Tutorial", "url": "https://code.mendhak.com/smashtest-tutorial/", "published_at": "2021-06-19T00:00:00+00:00" }, { "id": "01a08761-b014-7341-855a-9b243025af6d", "title": "How to use KeepassXC to serve SSH keys to WSL2 and Ubuntu", "url": "https://code.mendhak.com/wsl2-keepassxc-ssh/", "published_at": "2021-05-10T00:00:00+00:00" }, { "id": "01a08761-b014-7341-855a-9b2430ab09a3", "title": "Host your API Gateway documentation in API Gateway", "url": "https://code.mendhak.com/api-gateway-self-hosted-documentation/", "published_at": "2021-05-05T00:00:00+00:00" }, { "id": "01a08761-b014-7341-855a-9b24317cb6b1", "title": "Raspberry Pi: Simple Waveshare e-paper dashboard with weather and calendar", "url": "https://code.mendhak.com/raspberrypi-epaper-dashboard/", "published_at": "2021-04-02T00:00:00+00:00" }, { "id": "01a08761-b014-7341-855a-9b2432015f91", "title": "Why the F**k won't you build?", "url": "https://code.mendhak.com/why-the-f-wont-you-build/", "published_at": "2021-03-22T00:00:00+00:00" }, { "id": "01a08761-b014-7341-855a-9b24329cbe80", "title": "Getting a Github Action to run randomly", "url": "https://code.mendhak.com/github-action-run-randomly-end-early/", "published_at": "2021-03-14T00:00:00+00:00" }, { "id": "01a08761-b014-7341-855a-9b243303276f", "title": "Mentally calculate the day of the week, given a date in the current year", "url": "https://code.mendhak.com/mentally-calculate-day-of-the-year/", "published_at": "2021-02-27T00:00:00+00:00" }, { "id": "01a08761-b014-7341-855a-9b243314c927", "title": "Standard paper sizes are an elegant example of simple maths", "url": "https://code.mendhak.com/paper-sizes-standard/", "published_at": "2020-12-12T00:00:00+00:00" }, { "id": "01a08761-b014-7341-855a-9b24340f46ea", "title": "A hello world example using a Docker image in AWS Lambda", "url": "https://code.mendhak.com/lambda-docker-hello-world/", "published_at": "2020-12-04T00:00:00+00:00" }, { "id": "01a08761-b014-7341-855a-9b24345ca58c", "title": "OpenStreetMap tip: tall buildings", "url": "https://code.mendhak.com/openstreetmap-tall-buildings/", "published_at": "2020-11-17T00:00:00+00:00" }, { "id": "01a08761-b014-7341-855a-9b24349901b8", "title": "Setting up an Auth0 secured Angular application with dynamic runtime loaded configuration", "url": "https://code.mendhak.com/angular-dynamic-configuration-with-auth0/", "published_at": "2020-10-23T00:00:00+00:00" }, { "id": "01a08761-b014-7341-855a-9b2434cb7d17", "title": "Privacy - running untrusted apps safely using the Shelter app", "url": "https://code.mendhak.com/run-apps-in-privacy-shelter/", "published_at": "2020-10-09T00:00:00+00:00" }, { "id": "01a08761-b014-7341-855a-9b2434fd7be6", "title": "Grub Reboot Picker - boot into other OSes and BIOS/UEFI from system tray", "url": "https://code.mendhak.com/grub-reboot-picker/", "published_at": "2020-07-04T00:00:00+00:00" }, { "id": "01a08761-b014-7341-855a-9b243594d676", "title": "Setting up a WSL1 dev environment from the command line", "url": "https://code.mendhak.com/my-wsl-dev-setup/", "published_at": "2020-05-25T00:00:00+00:00" }, { "id": "01a08761-b014-7341-855a-9b24367204ee", "title": "How to set the title of a tab in terminal", "url": "https://code.mendhak.com/set-terminal-title/", "published_at": "2020-05-19T00:00:00+00:00" }, { "id": "01a08761-b014-7341-855a-9b2437074ec5", "title": "How to use KeepassXC to serve SSH keys to WSL1 and Ubuntu", "url": "https://code.mendhak.com/wsl-keepassxc-ssh/", "published_at": "2020-05-03T00:00:00+00:00" }, { "id": "01a08761-b014-7341-855a-9b2437a99fc5", "title": "Preparing a Raspberry Pi Zero with WiFi and SSH", "url": "https://code.mendhak.com/prepare-raspberry-pi/", "published_at": "2020-05-01T00:00:00+00:00" }, { "id": "01a08761-b014-7341-855a-9b24382e2670", "title": "Running a Selenium Grid cheaply with Fargate Spot containers in AWS ECS", "url": "https://code.mendhak.com/selenium-grid-ecs/", "published_at": "2020-02-18T00:00:00+00:00" }, { "id": "01a08761-b014-7341-855a-9b2438ff2945", "title": "Securely wipe an SSD with its built in commands", "url": "https://code.mendhak.com/securely-wipe-ssd/", "published_at": "2020-01-28T00:00:00+00:00" }, { "id": "01a08761-b014-7341-855a-9b24397b4182", "title": "Custom TLS certificate validation for Android applications", "url": "https://code.mendhak.com/android-custom-certificate-validation/", "published_at": "2020-01-05T00:00:00+00:00" }, { "id": "01a08761-b014-7341-855a-9b243a25c6a5", "title": "Getting NextDNS and NordVPN to work together on Android", "url": "https://code.mendhak.com/nextdns-with-nordvpn/", "published_at": "2019-12-06T00:00:00+00:00" }, { "id": "01a08761-b014-7341-855a-9b243b237fdb", "title": "Using Gradle to PGP sign and checksum files", "url": "https://code.mendhak.com/gradle-pgp-sign-securely/", "published_at": "2019-10-10T00:00:00+00:00" }, { "id": "01a08761-b014-7341-855a-9b243b3457d7", "title": "My OpenStreetMap workflow: mapping the village of Marmari, Evia", "url": "https://code.mendhak.com/openstreetmap-workflow-marmari/", "published_at": "2019-09-24T00:00:00+00:00" }, { "id": "01a08761-b014-7341-855a-9b243c2695f5", "title": "Don't install npm packages globally", "url": "https://code.mendhak.com/npm-install-globally-is-bad/", "published_at": "2019-09-05T00:00:00+00:00" }, { "id": "01a08761-b014-7341-855a-9b243c36ec79", "title": "Issuing multiple requests with `curl`", "url": "https://code.mendhak.com/curl-multiple-requests-sequences/", "published_at": "2019-08-21T00:00:00+00:00" }, { "id": "01a08761-b014-7341-855a-9b243ca8ec80", "title": "Short guide to good commit messages", "url": "https://code.mendhak.com/git-commit-message/", "published_at": "2019-08-15T00:00:00+00:00" }, { "id": "01a08761-b014-7341-855a-9b243cd92d0b", "title": "MS Teams Operator for Apache Airflow", "url": "https://code.mendhak.com/Airflow-MS-Teams-Operator/", "published_at": "2019-08-07T00:00:00+00:00" }, { "id": "01a08761-b014-7341-855a-9b243d180299", "title": "How to use KeeAgent with WSL and Ubuntu", "url": "https://code.mendhak.com/keeagent-with-wsl/", "published_at": "2019-08-01T00:00:00+00:00" }, { "id": "01a08761-b014-7341-855a-9b243d996e5a", "title": "Using KeePass to serve SSH keys", "url": "https://code.mendhak.com/keepass-and-keeagent-setup/", "published_at": "2019-07-28T00:00:00+00:00" }, { "id": "01a08761-b014-7341-855a-9b243e208a67", "title": "Updating another user's pull request to your Github repository", "url": "https://code.mendhak.com/update-fork-pull-request/", "published_at": "2019-07-01T00:00:00+00:00" }, { "id": "01a08761-b014-7341-855a-9b243e4bd057", "title": "AngularJS - Perceived Performance", "url": "https://code.mendhak.com/angular-performance/", "published_at": "2019-05-30T00:00:00+00:00" }, { "id": "01a08761-b014-7341-855a-9b243f28eb6e", "title": "Colored and folded output for Gradle tests", "url": "https://code.mendhak.com/gradle-travis-colored-output/", "published_at": "2019-04-01T00:00:00+00:00" }, { "id": "01a08761-b014-7341-855a-9b243fb79833", "title": "An `https` echo Docker container for web debugging", "url": "https://code.mendhak.com/docker-http-https-echo/", "published_at": "2019-03-01T00:00:00+00:00" }, { "id": "01a08761-b014-7341-855a-9b244060bfe2", "title": "TeamCity to Bitbucket Status Reporter", "url": "https://code.mendhak.com/teamcity-stash/", "published_at": "2018-05-01T00:00:00+00:00" }, { "id": "01a08761-b014-7341-855a-9b244096ed4d", "title": "Automatically turn XBox controller off with PC", "url": "https://code.mendhak.com/xbox-controller-off/", "published_at": "2018-04-01T00:00:00+00:00" } ] posts Claim your blog
Back to Mendhak / Code
Blog · corpus.blog/blogs/code.mendhak.com/posts

Mendhak / Code

code.mendhak.com

2026

2025

2024

2023

2022

2021

2020

2019

2018