41554 blogs · [ { "id": "01a07d5d-70f9-7153-8f29-99231aefc079", "title": "Python’s True Superpower", "url": "https://hynek.me/talks/python-superpower/", "published_at": "2025-09-19T00:00:00+00:00" }, { "id": "01a07d5d-70f9-7153-8f29-99231beb17ad", "title": "Design Pressure", "url": "https://hynek.me/talks/design-pressure/", "published_at": "2025-05-16T00:00:00+00:00" }, { "id": "01a07d5d-70f9-7153-8f29-99231cd78617", "title": "Why I Still Use Python Virtual Environments in Docker", "url": "https://hynek.me/articles/docker-virtualenv/", "published_at": "2024-09-02T11:00:00+00:00" }, { "id": "01a07d5d-70f9-7153-8f29-99231db74427", "title": "Production-ready Python Docker Containers with uv", "url": "https://hynek.me/articles/docker-uv/", "published_at": "2024-08-28T11:00:00+00:00" }, { "id": "01a07d5d-70f9-7153-8f29-99231e2424d5", "title": "Python Project-Local Virtualenv Management Redux", "url": "https://hynek.me/articles/python-virtualenv-redux/", "published_at": "2024-04-02T00:00:00+00:00" }, { "id": "01a07d5d-70f9-7153-8f29-99231e406328", "title": "Don’t Start Pull Requests from Your Main Branch", "url": "https://hynek.me/articles/pull-requests-branch/", "published_at": "2023-12-21T05:00:00+00:00" }, { "id": "01a08216-facd-73f1-ba67-3d366a08bee7", "title": "How to Stop macOS from Stealing Focus after Switching Apps Across Desktops", "url": "https://hynek.me/til/macos-window-focus-desktops/", "published_at": "2023-10-06T00:00:00+00:00" }, { "id": "01a07d5d-70f9-7153-8f29-99231e9837bc", "title": "Two Ways to Turbo-Charge tox", "url": "https://hynek.me/articles/turbo-charge-tox/", "published_at": "2023-06-26T14:00:00+00:00" }, { "id": "01a07d5d-70f9-7153-8f29-99231e9aa9ac", "title": "Subclassing, Composition, Python, and You", "url": "https://hynek.me/talks/subclassing/", "published_at": "2023-04-22T00:00:00+00:00" }, { "id": "01a08216-facd-73f1-ba67-3d366ae9e410", "title": "How to Automatically Switch to Rosetta With Fish and Direnv", "url": "https://hynek.me/til/automatic-rosetta-fish-direnv/", "published_at": "2023-03-18T12:00:00+00:00" }, { "id": "01a07d5d-70f9-7153-8f29-99231f463b69", "title": "Why I Like Nox", "url": "https://hynek.me/articles/why-i-like-nox/", "published_at": "2023-01-18T12:00:00+00:00" }, { "id": "01a07d5d-70f9-7153-8f29-99231f6a5c57", "title": "Surprising Consequences of macOS’s Environment Variable Sanitization", "url": "https://hynek.me/articles/macos-dyld-env/", "published_at": "2023-01-09T08:00:00+00:00" }, { "id": "01a08216-facd-73f1-ba67-3d366c4c4f54", "title": "How to Fix the set-output GitHub Actions Deprecation Warning", "url": "https://hynek.me/til/set-output-deprecation-github-actions/", "published_at": "2022-10-14T00:00:00+00:00" }, { "id": "01a07d5d-70f9-7153-8f29-99231fd42868", "title": "How I’m a Productive Programmer With a Memory of a Fruit Fly", "url": "https://hynek.me/articles/productive-fruit-fly-programmer/", "published_at": "2022-09-19T00:00:00+00:00" }, { "id": "01a08216-facd-73f1-ba67-3d366d812997", "title": "You Can Build Portable Binaries of Python Applications", "url": "https://hynek.me/til/python-portable-binaries/", "published_at": "2022-09-07T00:00:00+00:00" }, { "id": "01a08216-facd-73f1-ba67-3d366dafd62c", "title": "Easier Crediting of Contributors on GitHub", "url": "https://hynek.me/til/easier-crediting-contributors-github/", "published_at": "2022-08-18T00:00:00+00:00" }, { "id": "01a08216-facd-73f1-ba67-3d366e2c04b9", "title": "pip-tools Supports pyproject.toml", "url": "https://hynek.me/til/pip-tools-and-pyproject-toml/", "published_at": "2022-08-12T08:00:00+00:00" }, { "id": "01a07d5d-70f9-7153-8f29-99232017eef7", "title": "Recursive Optional Dependencies in Python", "url": "https://hynek.me/articles/python-recursive-optional-dependencies/", "published_at": "2022-07-29T06:00:00+00:00" }, { "id": "01a07d5d-70f9-7153-8f29-992320d8255f", "title": "“Don’t Mock What You Don’t Own” in 5 Minutes", "url": "https://hynek.me/articles/what-to-mock-in-5-mins/", "published_at": "2022-06-21T09:00:00+00:00" }, { "id": "01a08216-facd-73f1-ba67-3d366fac1854", "title": "typing.Protocol Across Python Versions", "url": "https://hynek.me/til/typing-protocol/", "published_at": "2022-02-05T17:00:00+00:00" }, { "id": "01a07d5d-70f9-7153-8f29-9923217ffeba", "title": "import attrs", "url": "https://hynek.me/articles/import-attrs/", "published_at": "2021-12-28T00:00:00+00:00" }, { "id": "01a07d5d-70f9-7153-8f29-99232218f90f", "title": "How to Ditch Codecov for Python Projects", "url": "https://hynek.me/articles/ditch-codecov-python/", "published_at": "2021-11-18T08:00:00+00:00" }, { "id": "01a07d5d-70f9-7153-8f29-992322373c4a", "title": "Announcing a New Section: TIL", "url": "https://hynek.me/articles/til/", "published_at": "2021-08-25T12:00:00+00:00" }, { "id": "01a07d5d-70f9-7153-8f29-992323022835", "title": "Subclassing in Python Redux", "url": "https://hynek.me/articles/python-subclassing-redux/", "published_at": "2021-06-22T15:00:00+00:00" }, { "id": "01a07d5d-70f9-7153-8f29-992323bbe096", "title": "Canonical SEO Failure", "url": "https://hynek.me/articles/canonical-seo-fail/", "published_at": "2021-04-28T00:00:00+00:00" }, { "id": "01a07d5d-70f9-7153-8f29-9923249dc355", "title": "Semantic Versioning Will Not Save You", "url": "https://hynek.me/articles/semver-will-not-save-you/", "published_at": "2021-03-02T00:00:00+00:00" }, { "id": "01a07d5d-70f9-7153-8f29-992325737a39", "title": "Lie vs Lay", "url": "https://hynek.me/articles/lie-vs-lay/", "published_at": "2021-02-03T00:00:00+00:00" }, { "id": "01a07d5d-70f9-7153-8f29-9923262e8550", "title": "Waiting in asyncio", "url": "https://hynek.me/articles/waiting-in-asyncio/", "published_at": "2020-05-21T00:00:00+00:00" }, { "id": "01a07d5d-70f9-7153-8f29-992327287ce8", "title": "Classy Abstractions", "url": "https://hynek.me/talks/abstractions/", "published_at": "2020-05-18T00:00:00+00:00" }, { "id": "01a07d5d-70f9-7153-8f29-992328246d32", "title": "Why You Should Document Your Tests", "url": "https://hynek.me/articles/document-your-tests/", "published_at": "2020-05-04T00:00:00+00:00" }, { "id": "01a07d5d-70f9-7153-8f29-9923289b6010", "title": "Python in GitHub Actions", "url": "https://hynek.me/articles/python-github-actions/", "published_at": "2020-03-09T00:00:00+00:00" }, { "id": "01a07d5d-70f9-7153-8f29-992328f3bfd7", "title": "Python in Production", "url": "https://hynek.me/articles/python-in-production/", "published_at": "2020-02-23T16:45:00+00:00" }, { "id": "01a07d5d-70f9-7153-8f29-99232973f08d", "title": "Python Packaging Metadata", "url": "https://hynek.me/articles/packaging-metadata/", "published_at": "2020-02-14T00:00:00+00:00" }, { "id": "01a07d5d-70f9-7153-8f29-992329f6a335", "title": "Books That Changed My Life", "url": "https://hynek.me/articles/books-that-changed-my-life/", "published_at": "2019-09-23T00:00:00+00:00" }, { "id": "01a07d5d-70f9-7153-8f29-99232a743c23", "title": "Python in Azure Pipelines, Step by Step", "url": "https://hynek.me/articles/simple-python-azure-pipelines/", "published_at": "2019-06-03T09:14:00+00:00" }, { "id": "01a07d5d-70f9-7153-8f29-99232ab588b4", "title": "The Price of the Hallway Track", "url": "https://hynek.me/articles/hallway-track/", "published_at": "2019-05-15T18:00:00+00:00" }, { "id": "01a07d5d-70f9-7153-8f29-99232b9bf433", "title": "Maintaining a Python Project When It’s Not Your Job", "url": "https://hynek.me/talks/python-foss/", "published_at": "2019-05-03T00:00:00+00:00" }, { "id": "01a07d5d-70f9-7153-8f29-99232bd9dd66", "title": "Python Application Dependency Management", "url": "https://hynek.me/articles/python-app-deps-2018/", "published_at": "2018-11-29T17:00:00+00:00" }, { "id": "01a07d5d-70f9-7153-8f29-99232c38daf0", "title": "How to Write Deployment-friendly Applications", "url": "https://hynek.me/talks/deploy-friendly/", "published_at": "2018-05-12T00:00:00+00:00" }, { "id": "01a07d5d-70f9-7153-8f29-99232cba3d4e", "title": "Python Hashes and Equality", "url": "https://hynek.me/articles/hashes-and-equality/", "published_at": "2017-11-20T06:45:00+00:00" }, { "id": "01a07d5d-70f9-7153-8f29-99232cfd4249", "title": "Why Your Dockerized Application Isn’t Receiving Signals", "url": "https://hynek.me/articles/docker-signals/", "published_at": "2017-06-19T00:00:00+00:00" }, { "id": "01a07d5d-70f9-7153-8f29-99232de94522", "title": "On Conference Speaking", "url": "https://hynek.me/articles/speaking/", "published_at": "2017-05-30T00:00:00+00:00" }, { "id": "01a07d5d-70f9-7153-8f29-99232e3c2027", "title": "Solid Snakes or: How to Take 5 Weeks of Vacation", "url": "https://hynek.me/talks/reliability/", "published_at": "2017-05-19T00:00:00+00:00" }, { "id": "01a07d5d-70f9-7153-8f29-99232e7e95c7", "title": "Better Python Object Serialization", "url": "https://hynek.me/articles/serialization/", "published_at": "2016-08-22T12:30:00+00:00" }, { "id": "01a07d5d-70f9-7153-8f29-99232ee79ed7", "title": "Please Fix Your Decorators", "url": "https://hynek.me/articles/decorators/", "published_at": "2016-08-01T00:00:00+00:00" }, { "id": "01a07d5d-70f9-7153-8f29-99232f7b33db", "title": "Get Instrumented: How Prometheus Can Unify Your Metrics", "url": "https://hynek.me/talks/prometheus/", "published_at": "2016-05-31T00:00:00+00:00" }, { "id": "01a07d5d-70f9-7153-8f29-992330078b99", "title": "Conditional Python Dependencies", "url": "https://hynek.me/articles/conditional-python-dependencies/", "published_at": "2016-05-19T00:00:00+00:00" }, { "id": "01a07d5d-70f9-7153-8f29-992330b56ff7", "title": "Python 3 in 2016", "url": "https://hynek.me/articles/python3-2016/", "published_at": "2016-02-17T00:00:00+00:00" }, { "id": "01a07d5d-70f9-7153-8f29-992331a191b7", "title": "hasattr() – A Dangerous Misnomer", "url": "https://hynek.me/articles/hasattr/", "published_at": "2016-01-13T00:00:00+00:00" }, { "id": "01a07d5d-70f9-7153-8f29-992331be7c6f", "title": "Storing Passwords in a Highly Parallelized World", "url": "https://hynek.me/articles/storing-passwords/", "published_at": "2016-01-06T00:00:00+00:00" }, { "id": "01a07d5d-70f9-7153-8f29-99233253e749", "title": "Testing & Packaging", "url": "https://hynek.me/articles/testing-packaging/", "published_at": "2015-10-19T00:00:00+00:00" }, { "id": "01a07d5d-70f9-7153-8f29-9923329fd839", "title": "Beyond grep: Practical Logging and Metrics", "url": "https://hynek.me/talks/beyond-grep/", "published_at": "2015-04-12T00:00:00+00:00" }, { "id": "01a07d5d-70f9-7153-8f29-992332fa4803", "title": "virtualenv Lives!", "url": "https://hynek.me/articles/virtualenv-lives/", "published_at": "2014-09-15T15:00:00+00:00" }, { "id": "01a07d5d-70f9-7153-8f29-99233395a17e", "title": "The Sorry State Of SSL", "url": "https://hynek.me/talks/tls/", "published_at": "2014-04-12T00:00:00+00:00" }, { "id": "01a07d5d-70f9-7153-8f29-992333e16300", "title": "Apple OpenSSL Verification Surprises", "url": "https://hynek.me/articles/apple-openssl-verification-surprises/", "published_at": "2014-03-03T15:30:00+00:00" }, { "id": "01a07d5d-70f9-7153-8f29-99233439c589", "title": "Sharing Your Labor of Love: PyPI Quick and Dirty", "url": "https://hynek.me/articles/sharing-your-labor-of-love-pypi-quick-and-dirty/", "published_at": "2013-07-29T00:00:00+00:00" }, { "id": "01a07d5d-70f9-7153-8f29-992334a24ff7", "title": "Life after Google Reader", "url": "https://hynek.me/articles/life-after-google-reader/", "published_at": "2013-06-27T00:00:00+00:00" }, { "id": "01a07d5d-70f9-7153-8f29-992334e194c0", "title": "A Short Summary on Sybase SQL Anywhere and Python", "url": "https://hynek.me/articles/a-short-summary-on-sybase-sql-anywhere-python/", "published_at": "2013-05-29T00:00:00+00:00" }, { "id": "01a07d5d-70f9-7153-8f29-992335847ff6", "title": "Know Your Models", "url": "https://hynek.me/articles/know-your-models/", "published_at": "2013-05-15T00:00:00+00:00" }, { "id": "01a07d5d-70f9-7153-8f29-992336412025", "title": "Solid Python Deployments for Everybody", "url": "https://hynek.me/talks/python-deployments/", "published_at": "2013-03-16T00:00:00+00:00" }, { "id": "01a07d5d-70f9-7153-8f29-9923370a372e", "title": "Taking Some Pain out of Python Logging", "url": "https://hynek.me/articles/taking-some-pain-out-of-python-logging/", "published_at": "2013-03-06T00:00:00+00:00" }, { "id": "01a07d5d-70f9-7153-8f29-9923373dbf2b", "title": "Hardening Your Web Server’s SSL Ciphers", "url": "https://hynek.me/articles/hardening-your-web-servers-ssl-ciphers/", "published_at": "2013-02-05T00:00:00+00:00" }, { "id": "01a07d5d-70f9-7153-8f29-992338206273", "title": "Using Celery with Pyramid", "url": "https://hynek.me/articles/using-celery-with-pyramid/", "published_at": "2012-07-20T00:00:00+00:00" }, { "id": "01a07d5d-70f9-7153-8f29-992338605efe", "title": "How I Stopped Worrying and Started Loving PyLadies", "url": "https://hynek.me/articles/how-i-stopped-worrying-and-started-loving-pyladies/", "published_at": "2012-07-13T00:00:00+00:00" }, { "id": "01a07d5d-70f9-7153-8f29-992338780b76", "title": "My Road to the Python Commit Bit", "url": "https://hynek.me/articles/my-road-to-the-python-commit-bit/", "published_at": "2012-05-19T00:00:00+00:00" }, { "id": "01a07d5d-70f9-7153-8f29-992339381183", "title": "Python Application Deployment with Native Packages", "url": "https://hynek.me/articles/python-app-deployment-with-native-packages/", "published_at": "2012-05-03T00:00:00+00:00" }, { "id": "01a07d5d-70f9-7153-8f29-992339c1886d", "title": "Python Deployment Anti-Patterns", "url": "https://hynek.me/articles/python-deployment-anti-patterns/", "published_at": "2012-04-23T00:00:00+00:00" }, { "id": "01a07d5d-70f9-7153-8f29-99233a5ce19e", "title": "Celery and Sybase SQL Anywhere", "url": "https://hynek.me/articles/celery-and-sybase/", "published_at": "2012-02-25T00:00:00+00:00" }, { "id": "01a07d5d-70f9-7153-8f29-99233a7c710e", "title": "Fleeing from Gmail", "url": "https://hynek.me/articles/fleeing-from-gmail/", "published_at": "2012-01-26T00:00:00+00:00" }, { "id": "01a07d5d-70f9-7153-8f29-99233b4916a5", "title": "My 2011", "url": "https://hynek.me/articles/my-2011/", "published_at": "2011-12-31T00:00:00+00:00" }, { "id": "01a07d5d-70f9-7153-8f29-99233bc47ab4", "title": "Dead Simple Connection Pooling with Twisted", "url": "https://hynek.me/articles/dead-simple-connection-pooling-with-twisted/", "published_at": "2011-12-14T00:00:00+00:00" }, { "id": "01a07d5d-70f9-7153-8f29-99233c8745bc", "title": "MacVim and the Clipboard", "url": "https://hynek.me/articles/macvim-and-the-clipboard/", "published_at": "2011-12-06T00:00:00+00:00" }, { "id": "01a07d5d-70f9-7153-8f29-99233d59fb39", "title": "Why Tomatoes Are Awesome", "url": "https://hynek.me/articles/why-tomatoes-are-awesome/", "published_at": "2011-10-01T00:00:00+00:00" }, { "id": "01a07d5d-70f9-7153-8f29-99233e4ba781", "title": "My mutt and Gmail Setup", "url": "https://hynek.me/articles/my-mutt-gmail-setup/", "published_at": "2011-08-22T00:00:00+00:00" }, { "id": "01a07d5d-70f9-7153-8f29-99233e82172c", "title": "Solarized – Love on First Sight", "url": "https://hynek.me/articles/solarized-love-on-first-sight/", "published_at": "2011-07-10T00:00:00+00:00" }, { "id": "01a07d5d-70f9-7153-8f29-99233ee905d2", "title": "Mercurial to Git", "url": "https://hynek.me/articles/mercurial-to-git/", "published_at": "2011-05-10T00:00:00+00:00" }, { "id": "01a07d5d-70f9-7153-8f29-99233faaa769", "title": "Twisted Sybase SQL Anywhere", "url": "https://hynek.me/articles/twisted-sybase/", "published_at": "2011-04-27T00:00:00+00:00" }, { "id": "01a07d5d-70f9-7153-8f29-992340737df2", "title": "Django & Postgres & SSL", "url": "https://hynek.me/articles/django-postgres-ssl/", "published_at": "2011-04-12T00:00:00+00:00" }, { "id": "01a07d5d-70f9-7153-8f29-99234146f7c2", "title": "Information Diet", "url": "https://hynek.me/articles/information-diet/", "published_at": "2011-04-01T00:00:00+00:00" }, { "id": "01a07d5d-70f9-7153-8f29-99234199d85d", "title": "Django and Remote Sybase Servers", "url": "https://hynek.me/articles/django-and-remote-sybase-servers/", "published_at": "2011-02-07T00:00:00+00:00" }, { "id": "01a07d5d-70f9-7153-8f29-992342033bb6", "title": "Freezing Kindle", "url": "https://hynek.me/articles/freezing-kindle/", "published_at": "2010-12-07T00:00:00+00:00" }, { "id": "01a07d5d-70f9-7153-8f29-992342b96b87", "title": "LDAP: A Gentle Introduction", "url": "https://hynek.me/articles/ldap-a-gentle-introduction/", "published_at": "2007-02-13T00:00:00+00:00" }, { "id": "01a07d5d-70f9-7153-8f29-992343ae9e9a", "title": "MySQL Replication", "url": "https://hynek.me/articles/mysql-replication/", "published_at": "2007-02-09T00:00:00+00:00" }, { "id": "01a07d5d-70f9-7153-8f29-99234480e444", "title": "PCAP Format for Logs", "url": "https://hynek.me/articles/pcap-format-for-logs/", "published_at": "2005-11-22T00:00:00+00:00" } ] posts Claim your blog
Back to Hynek Schlawack
Blog · corpus.blog/blogs/hynek.me/posts

Hynek Schlawack

hynek.me

2025

2024

2023

2022

2021

2020

2019

2018

2017

2016

2015

2014

2013

2012

2011

2010

2007

2005