56,966 blogs Β· [ { "id": "01a087de-bf02-7180-8987-01a1e8520d42", "title": "Upgrading to Zola version 0.23", "url": "https://sgoel.dev/posts/upgrading-to-zola-version-0-23/", "published_at": "2026-08-10T00:00:00+00:00" }, { "id": "01a087de-bf02-7180-8987-01a1e855a7a4", "title": "Preparing my tax returns 82% easier using Beancount", "url": "https://sgoel.dev/posts/preparing-my-tax-returns-82-easier-using-beancount/", "published_at": "2026-08-02T00:00:00+00:00" }, { "id": "01a087de-bf02-7180-8987-01a1e886e1d1", "title": "LLM Usage: June 2026 Edition", "url": "https://sgoel.dev/posts/llm-usage-june-2026-edition/", "published_at": "2026-06-17T00:00:00+00:00" }, { "id": "01a087de-bf02-7180-8987-01a1e8db119c", "title": "Self-hosting static sites on a Caddy-powered VPS", "url": "https://sgoel.dev/posts/self-hosting-static-sites-on-a-caddy-powered-vps/", "published_at": "2026-06-02T00:00:00+00:00" }, { "id": "01a087de-bf02-7180-8987-01a1e8edac85", "title": "What's next for txtcv", "url": "https://sgoel.dev/posts/whats-next-for-txtcv/", "published_at": "2026-05-10T00:00:00+00:00" }, { "id": "01a087de-bf02-7180-8987-01a1e98fa393", "title": "PostgreSQL on Kamal: Deployment, Configuration, and Backups", "url": "https://sgoel.dev/posts/postgresql-on-kamal-deployment-configuration-and-backups/", "published_at": "2026-03-01T00:00:00+00:00" }, { "id": "01a087de-bf02-7180-8987-01a1ea400c2d", "title": "10 years of personal finances in plain text files", "url": "https://sgoel.dev/posts/10-years-of-personal-finances-in-plain-text-files/", "published_at": "2025-12-20T00:00:00+00:00" }, { "id": "01a087de-bf02-7180-8987-01a1eb117e95", "title": "HTMX and Django make status polling trivial", "url": "https://sgoel.dev/posts/htmx-and-django-make-status-polling-trivial/", "published_at": "2025-11-23T00:00:00+00:00" }, { "id": "01a087de-bf02-7180-8987-01a1eb5b06e7", "title": "Building a CV builder", "url": "https://sgoel.dev/posts/building-a-cv-builder/", "published_at": "2025-11-01T00:00:00+00:00" }, { "id": "01a087de-bf02-7180-8987-01a1ec1fdf4b", "title": "Notes from my first marathon", "url": "https://sgoel.dev/posts/notes-from-my-first-marathon/", "published_at": "2025-10-13T00:00:00+00:00" }, { "id": "01a087de-bf02-7180-8987-01a1ec3d3e1f", "title": "Good Lazy, Bad Lazy: AI usage reflections", "url": "https://sgoel.dev/posts/good-lazy-bad-lazy-ai-usage-reflections/", "published_at": "2025-09-27T00:00:00+00:00" }, { "id": "01a087de-bf02-7180-8987-01a1ecd7dfc2", "title": "Starting fatherhood", "url": "https://sgoel.dev/posts/starting-fatherhood/", "published_at": "2025-02-21T00:00:00+00:00" }, { "id": "01a087de-bf02-7180-8987-01a1edb7ccd0", "title": "Trying out Zed after more than a decade of Vim/Neovim", "url": "https://sgoel.dev/posts/trying-out-zed-after-more-than-a-decade-of-vim-neovim/", "published_at": "2025-01-25T00:00:00+00:00" }, { "id": "01a087de-bf02-7180-8987-01a1ee7def88", "title": "Building Cython (or C) extensions using uv", "url": "https://sgoel.dev/posts/building-cython-or-c-extensions-using-uv/", "published_at": "2025-01-11T00:00:00+00:00" }, { "id": "01a087de-bf02-7180-8987-01a1ee8c26ce", "title": "Moving from Beancount 2.x to 3.x", "url": "https://sgoel.dev/posts/moving-from-beancount-2x-to-3x/", "published_at": "2024-07-10T00:00:00+00:00" }, { "id": "01a087de-bf02-7180-8987-01a1eea4d1a4", "title": "Handing over the reins of GeniePy", "url": "https://sgoel.dev/posts/handing-over-the-reins-of-geniepy/", "published_at": "2024-06-25T00:00:00+00:00" }, { "id": "01a087de-bf02-7180-8987-01a1ef81be2a", "title": "Experiences using Tailwind CSS", "url": "https://sgoel.dev/posts/experiences-using-tailwind-css/", "published_at": "2024-05-20T00:00:00+00:00" }, { "id": "01a087de-bf02-7180-8987-01a1efd5b09e", "title": "One of the most useful directories on my laptop", "url": "https://sgoel.dev/posts/one-of-the-most-useful-directories-on-my-laptop/", "published_at": "2024-03-29T00:00:00+00:00" }, { "id": "01a087de-bf02-7180-8987-01a1f074403f", "title": "LangChain applications using Ollama", "url": "https://sgoel.dev/posts/langchain-applications-using-ollama/", "published_at": "2023-11-19T00:00:00+00:00" }, { "id": "01a087de-bf02-7180-8987-01a1f1129490", "title": "Switching between projects in Neovim", "url": "https://sgoel.dev/posts/switching-between-projects-in-neovim/", "published_at": "2023-10-08T00:00:00+00:00" }, { "id": "01a087de-bf02-7180-8987-01a1f15df801", "title": "Experiences hunting for a software engineering job in 2023", "url": "https://sgoel.dev/posts/experiences-hunting-for-a-software-engineering-job-in-2023/", "published_at": "2023-06-21T00:00:00+00:00" }, { "id": "01a087de-bf02-7180-8987-01a1f1eb9bb5", "title": "How to convert multiple images to PNG or JPEG on macOS", "url": "https://sgoel.dev/posts/how-to-convert-multiple-images-to-png-or-jpeg-on-macos/", "published_at": "2023-01-06T00:00:00+00:00" }, { "id": "01a087de-bf02-7180-8987-01a1f23af298", "title": "Automatically balancing Beancount DKB transactions", "url": "https://sgoel.dev/posts/automatically-balancing-beancount-dkb-transactions/", "published_at": "2022-08-16T00:00:00+00:00" }, { "id": "01a087de-bf02-7180-8987-01a1f2f12768", "title": "Replacing GNU Stow with Dotbot", "url": "https://sgoel.dev/posts/replacing-gnu-stow-with-dotbot/", "published_at": "2022-07-24T00:00:00+00:00" }, { "id": "01a087de-bf02-7180-8987-01a1f30145ee", "title": "The tools I used to write an ebook", "url": "https://sgoel.dev/posts/the-tools-i-used-to-write-an-ebook/", "published_at": "2021-10-04T00:00:00+00:00" }, { "id": "01a087de-bf02-7180-8987-01a1f35f305f", "title": "How you can track your personal finances using Python 🐍", "url": "https://sgoel.dev/posts/how-you-can-track-your-personal-finances-using-python/", "published_at": "2021-08-29T00:00:00+00:00" }, { "id": "01a087de-bf02-7180-8987-01a1f4168737", "title": "How to debug better", "url": "https://sgoel.dev/posts/how-to-debug-better/", "published_at": "2021-07-22T00:00:00+00:00" }, { "id": "01a087de-bf02-7180-8987-01a1f4f12cf9", "title": "Uploading binary wheels to PyPI from Github Actions", "url": "https://sgoel.dev/posts/uploading-binary-wheels-to-pypi-from-github-actions/", "published_at": "2020-11-03T00:00:00+00:00" }, { "id": "01a087de-bf02-7180-8987-01a1f507e0d8", "title": "The Almanack of Naval Ravikant", "url": "https://sgoel.dev/posts/the-almanack-of-naval-ravikant/", "published_at": "2020-10-24T00:00:00+00:00" }, { "id": "01a087de-bf02-7180-8987-01a1f54575f7", "title": "Continuous Deployment with Netlify and Zola", "url": "https://sgoel.dev/posts/continuous-deployment-with-netlify-and-zola/", "published_at": "2020-09-13T00:00:00+00:00" }, { "id": "01a087de-bf02-7180-8987-01a1f6343926", "title": "Multiple Mixins (and naming conflicts) in Python", "url": "https://sgoel.dev/posts/multiple-mixins-and-naming-conflicts-in-python/", "published_at": "2020-06-28T00:00:00+00:00" }, { "id": "01a087de-bf02-7180-8987-01a1f6b75dec", "title": "Book Review: The Phoenix Project", "url": "https://sgoel.dev/posts/book-review-the-phoenix-project/", "published_at": "2020-04-15T00:00:00+00:00" }, { "id": "01a087de-bf02-7180-8987-01a1f78abc8e", "title": "Following news 24x7 considered harmful", "url": "https://sgoel.dev/posts/following-news-24x7-considered-harmful/", "published_at": "2020-04-13T00:00:00+00:00" }, { "id": "01a087de-bf02-7180-8987-01a1f7e51c22", "title": "How to enable target=\"_blank\" links in Zola", "url": "https://sgoel.dev/posts/how-to-enable-target-blank-links-in-zola/", "published_at": "2020-04-07T00:00:00+00:00" }, { "id": "01a087de-bf02-7180-8987-01a1f8303fc3", "title": "Building products for yourself", "url": "https://sgoel.dev/posts/building-products-for-yourself/", "published_at": "2020-04-05T00:00:00+00:00" }, { "id": "01a087de-bf02-7180-8987-01a1f92b5470", "title": "Moving from Pelican to Zola", "url": "https://sgoel.dev/posts/moving-from-pelican-to-zola/", "published_at": "2020-02-11T00:00:00+00:00" }, { "id": "01a087de-bf02-7180-8987-01a1f9710ef5", "title": "Frontend without writing CSS", "url": "https://sgoel.dev/posts/frontend-without-writing-css/", "published_at": "2020-01-08T00:00:00+00:00" }, { "id": "01a087de-bf02-7180-8987-01a1f97e3dc8", "title": "Gift a Donation", "url": "https://sgoel.dev/posts/gift-a-donation/", "published_at": "2019-12-27T00:00:00+00:00" }, { "id": "01a087de-bf02-7180-8987-01a1f9c76a71", "title": "Building things just because there is a market", "url": "https://sgoel.dev/posts/building-things-just-because-there-is-a-market/", "published_at": "2019-11-04T00:00:00+00:00" }, { "id": "01a087de-bf02-7180-8987-01a1fa2a94cb", "title": "The switch from Arch to Debian", "url": "https://sgoel.dev/posts/the-switch-from-arch-to-debian/", "published_at": "2019-10-24T00:00:00+00:00" }, { "id": "01a087de-bf02-7180-8987-01a1fa94c6b6", "title": "The Single Monitor Manifesto", "url": "https://sgoel.dev/posts/the-single-monitor-manifesto/", "published_at": "2019-10-16T00:00:00+00:00" }, { "id": "01a087de-bf02-7180-8987-01a1fb44950d", "title": "Mountains", "url": "https://sgoel.dev/posts/mountains/", "published_at": "2019-07-30T00:00:00+00:00" }, { "id": "01a087de-bf02-7180-8987-01a1fc058a84", "title": "Offsite backups using Restic", "url": "https://sgoel.dev/posts/offsite-backups-using-restic/", "published_at": "2019-07-12T00:00:00+00:00" }, { "id": "01a087de-bf02-7180-8987-01a1fccdea2e", "title": "How do you decide what to learn next?", "url": "https://sgoel.dev/posts/how-do-you-decide-what-to-learn-next/", "published_at": "2019-06-19T00:00:00+00:00" }, { "id": "01a087de-bf02-7180-8987-01a1fd86bccf", "title": "Not everything needs to be async", "url": "https://sgoel.dev/posts/not-everything-needs-to-be-async/", "published_at": "2019-05-25T00:00:00+00:00" }, { "id": "01a087de-bf02-7180-8987-01a1fda98936", "title": "The β€œHacker News Effect”", "url": "https://sgoel.dev/posts/the-hacker-news-effect/", "published_at": "2019-04-06T00:00:00+00:00" }, { "id": "01a087de-bf02-7180-8987-01a1fe042244", "title": "Off by 1 (Day)", "url": "https://sgoel.dev/posts/off-by-1-day/", "published_at": "2019-01-28T00:00:00+00:00" }, { "id": "01a087de-bf02-7180-8987-01a1fe924dc7", "title": "Developer to Manager", "url": "https://sgoel.dev/posts/developer-to-manager/", "published_at": "2018-12-22T00:00:00+00:00" }, { "id": "01a087de-bf02-7180-8987-01a1fef67945", "title": "The most dynamic static site you'll ever see", "url": "https://sgoel.dev/posts/the-most-dynamic-static-site-youll-ever-see/", "published_at": "2018-10-27T00:00:00+00:00" }, { "id": "01a087de-bf02-7180-8987-01a1ffc87f21", "title": "Setting up your Python open source project", "url": "https://sgoel.dev/posts/setting-up-your-python-open-source-project/", "published_at": "2018-10-03T00:00:00+00:00" }, { "id": "01a087de-bf02-7180-8987-01a200bd5076", "title": "Managing personal finances using Python", "url": "https://sgoel.dev/posts/managing-personal-finances-using-python/", "published_at": "2018-09-16T00:00:00+00:00" }, { "id": "01a087de-bf02-7180-8987-01a2016efb6a", "title": "Nim: First impressions", "url": "https://sgoel.dev/posts/nim-first-impressions/", "published_at": "2018-08-14T00:00:00+00:00" }, { "id": "01a087de-bf02-7180-8987-01a201f5e8bf", "title": "Switching from KeePassXC to Bitwarden", "url": "https://sgoel.dev/posts/switching-from-keepassxc-to-bitwarden/", "published_at": "2018-08-07T00:00:00+00:00" }, { "id": "01a087de-bf02-7180-8987-01a202d1e5b1", "title": "Imprint", "url": "https://sgoel.dev/imprint/", "published_at": "2018-08-01T00:00:00+00:00" }, { "id": "01a087de-bf02-7180-8987-01a202fc8d9b", "title": "Setting up flake8 for Cython", "url": "https://sgoel.dev/posts/setting-up-flake8-for-cython/", "published_at": "2018-07-03T00:00:00+00:00" }, { "id": "01a087de-bf02-7180-8987-01a203f396ed", "title": "Sharing files with family in 2018", "url": "https://sgoel.dev/posts/sharing-files-with-family-in-2018/", "published_at": "2018-07-01T00:00:00+00:00" }, { "id": "01a087de-bf02-7180-8987-01a2048ccdcb", "title": "Lessons learned working from home", "url": "https://sgoel.dev/posts/lessons-learned-working-from-home/", "published_at": "2018-06-06T00:00:00+00:00" }, { "id": "01a087de-bf02-7180-8987-01a204e44f81", "title": "Raise better Exceptions", "url": "https://sgoel.dev/posts/raise-better-exceptions/", "published_at": "2018-04-16T00:00:00+00:00" }, { "id": "01a087de-bf02-7180-8987-01a205005beb", "title": "Beancount DKB", "url": "https://sgoel.dev/posts/beancount-dkb/", "published_at": "2018-04-11T00:00:00+00:00" }, { "id": "01a087de-bf02-7180-8987-01a205796bd0", "title": "Always be Questioning", "url": "https://sgoel.dev/posts/always-be-questioning/", "published_at": "2018-01-26T00:00:00+00:00" }, { "id": "01a087de-bf02-7180-8987-01a2058d8335", "title": "Encrypting Sensitive Data in SaltStack", "url": "https://sgoel.dev/posts/encrypting-sensitive-data-in-saltstack/", "published_at": "2018-01-05T00:00:00+00:00" }, { "id": "01a087de-bf02-7180-8987-01a2059db6a1", "title": "Handling the β€œN + 1 selects” problem in SQLAlchemy", "url": "https://sgoel.dev/posts/handling-the-n-1-selects-problem-in-sqlalchemy/", "published_at": "2017-12-17T00:00:00+00:00" }, { "id": "01a087de-bf02-7180-8987-01a206141650", "title": "Speeding up Python using Cython", "url": "https://sgoel.dev/posts/speeding-up-python-using-cython/", "published_at": "2017-11-30T00:00:00+00:00" }, { "id": "01a087de-bf02-7180-8987-01a206561449", "title": "Tornado + SQLAlchemy", "url": "https://sgoel.dev/posts/tornado-sqlalchemy/", "published_at": "2017-08-27T00:00:00+00:00" }, { "id": "01a087de-bf02-7180-8987-01a206f09fef", "title": "Stuck in Vim", "url": "https://sgoel.dev/posts/stuck-in-vim/", "published_at": "2017-06-27T00:00:00+00:00" }, { "id": "01a087de-bf02-7180-8987-01a2073d3a6d", "title": "Streaming multipart/form-data parser for Python", "url": "https://sgoel.dev/posts/streaming-multipart-form-data-parser-for-python/", "published_at": "2017-05-06T00:00:00+00:00" }, { "id": "01a087de-bf02-7180-8987-01a207868c19", "title": "Experiences using Terraform", "url": "https://sgoel.dev/posts/experiences-using-terraform/", "published_at": "2017-03-09T00:00:00+00:00" }, { "id": "01a087de-bf02-7180-8987-01a207e37101", "title": "ELB proxy protocol health check", "url": "https://sgoel.dev/posts/elb-proxy-protocol-health-check/", "published_at": "2017-01-23T00:00:00+00:00" }, { "id": "01a087de-bf02-7180-8987-01a2084078bd", "title": "Non-technical reasons why I like Vue", "url": "https://sgoel.dev/posts/non-technical-reasons-why-i-like-vue/", "published_at": "2016-11-13T00:00:00+00:00" }, { "id": "01a087de-bf02-7180-8987-01a2086f7731", "title": "Projects", "url": "https://sgoel.dev/projects/", "published_at": "2015-06-05T00:00:00+00:00" }, { "id": "01a087de-bf02-7180-8987-01a2096caade", "title": "About", "url": "https://sgoel.dev/about/", "published_at": "2015-06-01T00:00:00+00:00" }, { "id": "01a087de-bf02-7180-8987-01a209c937d2", "title": "Hello, World!", "url": "https://sgoel.dev/posts/hello-world/", "published_at": "2015-05-17T00:00:00+00:00" } ] posts Claim your blog
Back to sgoel.dev
Blog Β· corpus.blog/blogs/sgoel.dev/posts

sgoel.dev

sgoel.dev

2026

2025

2024

2023

2022

2021

2020

2019

2018

2017

2016

2015