Hynek SchlawackHynek Schlawack: Pythonista, Gopher, blogger, speaker, and YouTuber from Berlin / Germany.https://hynek.me/index.xmlhttps://hynek.me/favicon.icoHynek Schlawack[email protected]https://hynek.me/© 2004â2025 Hynek Schlawack2005-11-22T00:00:00Zhttps://hynek.me/articles/docker-virtualenv/Why I Still Use Python Virtual Environments in Docker2024-09-02T11:00:00Z2024-09-02T11:00:00ZHynek Schlawack[email protected]https://hynek.me/<p>Whenever I publish <a href="https://hynek.me/articles/docker-uv/">something</a> about my Python Docker workflows, I invariably get challenged about whether it makes sense to use <a href="https://docs.python.org/3/library/venv.html"><em>virtual environments</em></a> in Docker containers. As always, it’s a trade-off, and I err on the side of standards and predictability.</p>https://hynek.me/articles/docker-uv/Production-ready Python Docker Containers with uv2024-08-28T11:00:00Z2024-09-24T00:00:00ZHynek Schlawack[email protected]https://hynek.me/<p>Starting with <a href="https://astral.sh/blog/uv-unified-python-packaging">0.3.0</a>, Astralâs <a href="https://docs.astral.sh/uv/"><em>uv</em></a> brought many great features, including support for cross-platform lock files <code>uv.lock</code>. Together with subsequent fixes, it has become Pythonâs finest workflow tool for <strong>my</strong> (non-scientific) use cases. Hereâs how I build production-ready containers, as fast as possible.</p>https://hynek.me/articles/python-virtualenv-redux/Python Project-Local Virtualenv Management Redux2024-04-02T00:00:00Z2024-09-23T00:00:00ZHynek Schlawack[email protected]https://hynek.me/<p>One of my <a href="https://hynek.me/til/python-project-local-venvs">first TIL entries</a> was about how you can imitate Nodeâs <code>node_modules</code> semantics in Python on UNIX-like operating systems. A lot has happened since then (to the better!) and itâs time for an update. <em>direnv</em> still rocks, though.</p>https://hynek.me/articles/pull-requests-branch/Donât Start Pull Requests from Your Main Branch2023-12-21T05:00:00Z2023-12-21T05:00:00ZHynek Schlawack[email protected]https://hynek.me/<p>When contributing to other usersâ repositories, always start a new branch in your fork.</p>https://hynek.me/articles/turbo-charge-tox/Two Ways to Turbo-Charge tox2023-06-26T14:00:00Z2023-06-26T14:00:00ZHynek Schlawack[email protected]https://hynek.me/<p>No, it’s not (just) <code>run-parallel</code> â let’s cut the local <em>tox</em> runtime by 75%!</p>https://hynek.me/talks/subclassing/Subclassing, Composition, Python, and You2023-04-22T00:00:00Z2023-04-22T00:00:00ZHynek Schlawack[email protected]https://hynek.me/<p>Ever seen a code base where understanding a simple method meant jumping through tangled class hierarchies? We all have! And while “Favor composition over inheritance!” is almost as old as object-oriented programming, strictly avoiding all types of subclassing leads to verbose, un-Pythonic code. So, what to do?</p>https://hynek.me/articles/why-i-like-nox/Why I Like Nox2023-01-18T12:00:00Z2023-06-05T00:00:00ZHynek Schlawack[email protected]https://hynek.me/<p>Ever since I got involved with open-source Python projects, <em><a href="https://tox.wiki/">tox</a></em> has been vital for testing packages across Python versions (and other factors). However, lately, I’ve been increasingly using <em><a href="https://nox.thea.codes/">Nox</a></em> for my projects instead. Since I’ve been asked <em>why</em> repeatedly, I’ll sum up my thoughts.</p>https://hynek.me/articles/macos-dyld-env/Surprising Consequences of macOSâs Environment Variable Sanitization2023-01-09T08:00:00Z2023-01-09T08:00:00ZHynek Schlawack[email protected]https://hynek.me/<p>Why does <code>DYLD_LIBRARY_PATH</code> keep disappearing!?</p>https://hynek.me/articles/productive-fruit-fly-programmer/How Iâm a Productive Programmer With a Memory of a Fruit Fly2022-09-19T00:00:00Z2022-09-19T00:00:00ZHynek Schlawack[email protected]https://hynek.me/<p>A love letter to tools that changed everything for me.</p>https://hynek.me/articles/python-recursive-optional-dependencies/Recursive Optional Dependencies in Python2022-07-29T06:00:00Z2022-07-29T06:00:00ZHynek Schlawack[email protected]https://hynek.me/<p>One of my (slowly evaporating) reasons why I like putting packaging metadata into an executable <code>setup.py</code> is the ability to have optional dependencies that are combinations of others. As of <em>pip</em> 21.2, this is possible <em>without</em> running code.</p>https://hynek.me/articles/what-to-mock-in-5-mins/âDonât Mock What You Donât Ownâ in 5 Minutes2022-06-21T09:00:00Z2022-06-21T09:00:00ZHynek Schlawack[email protected]https://hynek.me/<p>A common issue when writing tests for real-world software is how to deal with third-party dependencies. Let’s examine an old, but counter-intuitive principle.</p>https://hynek.me/articles/import-attrs/import attrs2021-12-28T00:00:00Z2021-12-28T00:00:00ZHynek Schlawack[email protected]https://hynek.me/<p>An attempt at catharsis. This is a deeply personal blog post about the most influential project I’ve ever created: <a href="https://www.attrs.org/"><em>attrs</em></a>, the progenitor of modern Python class utilities. I’m retelling its history from my perspective, how it begot <em>dataclasses</em>, and how I’m leading it into the future.</p>https://hynek.me/articles/ditch-codecov-python/How to Ditch Codecov for Python Projects2021-11-18T08:00:00Z2024-09-03T00:00:00ZHynek Schlawack[email protected]https://hynek.me/<p>Codecov’s unreliability breaking CI on my open source projects has been a constant source of frustration for me for years. I have found a way to enforce coverage over a whole GitHub Actions build matrix that doesn’t rely on third-party services.</p>https://hynek.me/articles/til/Announcing a New Section: TIL2021-08-25T12:00:00Z2021-08-25T12:00:00ZHynek Schlawack[email protected]https://hynek.me/<p>Trying out something new: today I’m launching my own <em>Today I Learned</em> section. In this essay I will sum up what my plans and hopes are.</p>https://hynek.me/articles/python-subclassing-redux/Subclassing in Python Redux2021-06-22T15:00:00Z2021-06-22T15:00:00ZHynek Schlawack[email protected]https://hynek.me/<p>The conflict between subclassing and composition is as old as object-oriented programming. The latest crop of languages like Go or Rust prove that you donât <em>need</em> subclassing to successfully write code. But whatâs a <em>pragmatic</em> approach to subclassing in Python, specifically?</p>https://hynek.me/articles/canonical-seo-fail/Canonical SEO Failure2021-04-28T00:00:00Z2021-04-28T00:00:00ZHynek Schlawack[email protected]https://hynek.me/<p>This post is less about teaching and more about schadenfreude amusement for you, and catharsis for me. Itâs the story of how <em>one</em> unfortunate HTML tag kicked me off almost all search engines and my months-long way back. And why it didn’t matter in the end.</p>https://hynek.me/articles/semver-will-not-save-you/Semantic Versioning Will Not Save You2021-03-02T00:00:00Z2021-03-02T00:00:00ZHynek Schlawack[email protected]https://hynek.me/<p>The widely used Python package <em>cryptography</em> <a href="https://lwn.net/Articles/845535/">changed their build system</a> to use Rust for low-level code, which caused an emotional GitHub thread. Enthusiasts of 32-bit hardware from the 1990s aside, a vocal faction stipulated adherence to <em>Semantic Versioning</em> from the maintainers, claiming it wouldâve prevented all grief. I will show you not only why this is wrong but also how relying on <em>Semantic Versioning</em> hurts <em>you</em> â the user.</p>https://hynek.me/articles/lie-vs-lay/Lie vs Lay2021-02-03T00:00:00Z2021-02-03T00:00:00ZHynek Schlawack[email protected]https://hynek.me/<p><em>Lie</em> and <em>lay</em> are infamously confusing to non-native speakers. Itâs so bad that it sparked a cottage industry of click-baity articles full of sketchy ads. Since English is my third language, I stumbled a lot myself until I wrote this cheatsheet.</p>https://hynek.me/articles/waiting-in-asyncio/Waiting in asyncio2020-05-21T00:00:00Z2023-07-28T00:00:00ZHynek Schlawack[email protected]https://hynek.me/<p>One of the main appeals of using Pythonâs <code>asyncio</code> is being able to fire off many coroutines and run them concurrently. How many ways do you know for waiting for their results?</p>https://hynek.me/talks/abstractions/Classy Abstractions2020-05-18T00:00:00Z2020-05-18T00:00:00ZHynek Schlawack[email protected]https://hynek.me/<p>Let’s talk about abstractions and Pythonic code.</p>https://hynek.me/articles/document-your-tests/Why You Should Document Your Tests2020-05-04T00:00:00Z2020-05-04T00:00:00ZHynek Schlawack[email protected]https://hynek.me/<p>Some projects have the policy that all tests must have an explanatory comment â including all of mine. At first, I found that baffling. If that’s you right now, this article is for you.</p>https://hynek.me/articles/python-github-actions/Python in GitHub Actions2020-03-09T00:00:00Z2020-07-20T00:00:00ZHynek Schlawack[email protected]https://hynek.me/<p>GitHub’s own CI called <em>GitHub Actions</em> has been out of closed beta for a while and offers generous free quotas and a seamless integration with the rest of the site. Let’s have a look at how to use it for an open source Python package.</p>https://hynek.me/articles/python-in-production/Python in Production2020-02-23T16:45:00Z2020-02-23T16:45:00ZHynek Schlawack[email protected]https://hynek.me/<p>I’m missing a key part from the public Python discourse and I would like to help to change that.</p>https://hynek.me/articles/packaging-metadata/Python Packaging Metadata2020-02-14T00:00:00Z2020-02-23T00:00:00ZHynek Schlawack[email protected]https://hynek.me/<p>Since this topic keeps coming up, Iâd like to briefly share my thoughts on Python package metadata because itâs â as always â more complex than it seems.</p>https://hynek.me/articles/books-that-changed-my-life/Books That Changed My Life2019-09-23T00:00:00Z2021-02-19T00:00:00ZHynek Schlawack[email protected]https://hynek.me/<p>People always ask for book recommendations, so here’s my list of books that changed my life in one way or another. <em>None</em> of them is related to tech or programming, but <em>all</em> affect how I think and work.</p>https://hynek.me/articles/simple-python-azure-pipelines/Python in Azure Pipelines, Step by Step2019-06-03T09:14:00Z2019-06-03T09:14:00ZHynek Schlawack[email protected]https://hynek.me/<p>Since the acquisition of <em>Travis CI</em>, the future of their free offering is unclear. <em>Azure Pipelines</em> has a generous free tier, but the examples I found are discouragingly complex and take advantage of features like templating that most projects don’t need. To close that gap, this article shows you how to move a Python project with simple CI needs from <em>Travis CI</em> to Azure Pipelines.</p>https://hynek.me/articles/hallway-track/The Price of the Hallway Track2019-05-15T18:00:00Z2019-05-15T18:00:00ZHynek Schlawack[email protected]https://hynek.me/<p>There are many good reasons not to go to every talk possible when attending conferences. However, increasingly, it became hip to boast about avoiding going to talks â encouraging others to follow suit. That rubs me the wrong way as a speaker, and I’ll try to explain why.</p>https://hynek.me/talks/python-foss/Maintaining a Python Project When Itâs Not Your Job2019-05-03T00:00:00Z2019-05-03T00:00:00ZHynek Schlawack[email protected]https://hynek.me/<p>PyPI is a gold mine of great packages but those packages have to be written first. More often than not, projects that millions of people depend on are written and maintained by only one person. If youâre unlucky, that person is you! This talk tries to lighten the burden by giving you useful tools and approaches.</p>https://hynek.me/articles/python-app-deps-2018/Python Application Dependency Management2018-11-29T17:00:00Z2019-11-06T00:00:00ZHynek Schlawack[email protected]https://hynek.me/<p>We have more ways to manage dependencies in Python applications than ever. But how do they fare in production? Unfortunately this topic turned out to be quite polarizing and was at the center of a lot of heated debates. This is my attempt at an opinionated review through a DevOps lens.</p>https://hynek.me/talks/deploy-friendly/How to Write Deployment-friendly Applications2018-05-12T00:00:00Z2018-05-12T00:00:00ZHynek Schlawack[email protected]https://hynek.me/<p>The DevOps movement gave us many ways to put Python applications into production. But how can you practically structure and configure your applications to make them indifferent to the environment they run in? How do secrets fit into the picture? And where do you put that log file?</p>https://hynek.me/articles/hashes-and-equality/Python Hashes and Equality2017-11-20T06:45:00Z2017-11-20T06:45:00ZHynek Schlawack[email protected]https://hynek.me/<p>Most Python programmers donât spend a lot of time thinking about how equality and hashing works. It usually just works. However thereâs quite a bit of gotchas and edge cases that can lead to subtle and frustrating bugs once one starts to customize their behavior â especially if the rules on how they interact arenât understood.</p>https://hynek.me/articles/docker-signals/Why Your Dockerized Application Isnât Receiving Signals2017-06-19T00:00:00Z2017-06-19T00:00:00ZHynek Schlawack[email protected]https://hynek.me/<p>Proper cleanup when terminating your application isnât less important when itâs running inside of a Docker container. Although it only comes down to making sure signals reach your application and handling them, thereâs a bunch of things that can go wrong.</p>https://hynek.me/articles/speaking/On Conference Speaking2017-05-30T00:00:00Z2017-05-30T00:00:00ZHynek Schlawack[email protected]https://hynek.me/<p>Iâve seen quite a bit of the world thanks to being invited to speak at conferences. Since some people are under the impression that serial conference speakers possess some special talents, Iâd like to demystify my process by walking you through my latest talk from start to finish.</p>https://hynek.me/talks/reliability/Solid Snakes or: How to Take 5 Weeks of Vacation2017-05-19T00:00:00Z2017-05-19T00:00:00ZHynek Schlawack[email protected]https://hynek.me/<p>No matter whether you run a web app, search for gravitational waves, or maintain a backup script: reliability of your systems make the difference between sweet dreams and production nightmares at 4am.</p>https://hynek.me/articles/serialization/Better Python Object Serialization2016-08-22T12:30:00Z2022-05-17T00:00:00ZHynek Schlawack[email protected]https://hynek.me/<p>The Python standard library is full of underappreciated gems. One of them allows for simple and elegant function dispatching based on argument <em>types</em>. This makes it perfect for serialization of arbitrary objects â for example to JSON in web APIs and structured logs.</p>https://hynek.me/articles/decorators/Please Fix Your Decorators2016-08-01T00:00:00Z2017-05-11T00:00:00ZHynek Schlawack[email protected]https://hynek.me/<p>If your Python decorator unintentionally changes the signatures of my callables or doesnât work with class methods, itâs broken and should be fixed. Sadly <em>most</em> decorators are broken because the web is full of bad advice.</p>https://hynek.me/talks/prometheus/Get Instrumented: How Prometheus Can Unify Your Metrics2016-05-31T00:00:00Z2016-05-31T00:00:00ZHynek Schlawack[email protected]https://hynek.me/<p>To get real time insight into running applications you need to instrument them and collect metrics: count events, measure times, expose numbers. That used to be a clusterfuck of technologies and approaches. Prometheus changes that.</p>https://hynek.me/articles/conditional-python-dependencies/Conditional Python Dependencies2016-05-19T00:00:00Z2017-12-29T00:00:00ZHynek Schlawack[email protected]https://hynek.me/<p>Since the inception of <a href="https://pythonwheels.com">wheels</a> that install Python packages without executing arbitrary code, we need a static way to encode conditional dependencies for our packages. Thanks to <a href="https://www.python.org/dev/peps/pep-0508/">PEP 508</a> we do have a blessed way but sadly the prevalence of old <em>setuptools</em> and <em>pip</em> versions make it a minefield to use.</p>https://hynek.me/articles/python3-2016/Python 3 in 20162016-02-17T00:00:00Z2016-02-17T00:00:00ZHynek Schlawack[email protected]https://hynek.me/<p>My completely anecdotal view on the state of Python 3 in 2016. Based on my own recent experience, observations, and exchanges with other members of the Python community.</p>https://hynek.me/articles/hasattr/hasattr() â A Dangerous Misnomer2016-01-13T00:00:00Z2016-02-10T00:00:00ZHynek Schlawack[email protected]https://hynek.me/<p>Donât use Pythonâs <code>hasattr()</code> unless youâre writing Python 3-<em>only</em> code <em>and</em> understand how it works.</p>https://hynek.me/articles/storing-passwords/Storing Passwords in a Highly Parallelized World2016-01-06T00:00:00Z2016-01-06T00:00:00ZHynek Schlawack[email protected]https://hynek.me/<p>Why âUse <em>bcrypt</em>.â is not the best recommendation (anymore).</p>https://hynek.me/articles/testing-packaging/Testing & Packaging2015-10-19T00:00:00Z2021-01-04T00:00:00ZHynek Schlawack[email protected]https://hynek.me/<p>How to ensure that your tests run code that you think they are running, and how to measure your coverage over multiple <em>tox</em> runs (in parallel!).</p>https://hynek.me/talks/beyond-grep/Beyond grep: Practical Logging and Metrics2015-04-12T00:00:00Z2015-04-12T00:00:00ZHynek Schlawack[email protected]https://hynek.me/<p>Your Python applications are running but youâre wondering what they are doing? The only clue about their current state is the server load after <code>ssh</code>-ing into the servers? Letâs change that!</p>https://hynek.me/articles/virtualenv-lives/virtualenv Lives!2014-09-15T15:00:00Z2015-01-10T08:30:00ZHynek Schlawack[email protected]https://hynek.me/<p>Setting up Python to the point to be able install packages from PyPI can be annoying and time-intensive. Even worse are OS-provided installations that start throwing cryptic error messages. Especially desktops are prone to that but itâs possible to break the whole toolchain of a server by installing some shiny package you heard about on <em>reddit</em>.</p>https://hynek.me/talks/tls/The Sorry State Of SSL2014-04-12T00:00:00Z2014-04-12T00:00:00ZHynek Schlawack[email protected]https://hynek.me/<p>TLS is the best technology we have for securing our communications. It comes with many sharp edges though. This talk tries to jumpstart a rough understanding and these links should help you to complete the picture.</p>https://hynek.me/articles/apple-openssl-verification-surprises/Apple OpenSSL Verification Surprises2014-03-03T15:30:00Z2014-03-03T15:30:00ZHynek Schlawack[email protected]https://hynek.me/<p>Apple ships a patched version of OpenSSL with macOS. If no precautions are taken, their changes rob you of the power to choose your trusted certificate authorities (CAs) and break the semantics of a callback that can be used for custom checks and verifications in client software.</p>https://hynek.me/articles/sharing-your-labor-of-love-pypi-quick-and-dirty/Sharing Your Labor of Love: PyPI Quick and Dirty2013-07-29T00:00:00Z2019-10-16T00:00:00ZHynek Schlawack[email protected]https://hynek.me/<p>A completely incomplete guide to packaging a Python module and sharing it with the world on PyPI.</p>https://hynek.me/articles/life-after-google-reader/Life after Google Reader2013-06-27T00:00:00Z2020-04-01T00:00:00ZHynek Schlawack[email protected]https://hynek.me/<p>Google killed its Reader and my beloved Reeder for Mac and iPad officially wonât get updated in time. I think to have found an adequate setup to replace both.</p>https://hynek.me/articles/a-short-summary-on-sybase-sql-anywhere-python/A Short Summary on Sybase SQL Anywhere and Python2013-05-29T00:00:00Z2013-05-29T00:00:00ZHynek Schlawack[email protected]https://hynek.me/<p>As some of my older rage-filled articles indicated, weâre still running some services on SAP’s <a href="http://en.wikipedia.org/wiki/SQL_Anywhere"><em>SQL Anywhere</em></a>. Since it cost me many hours and sanity wrangling, I think it may be helpful to others to summarize the current situation for Python developers.</p>https://hynek.me/articles/know-your-models/Know Your Models2013-05-15T00:00:00Z2019-09-12T00:00:00ZHynek Schlawack[email protected]https://hynek.me/<p>In web development, we have an unfortunate double meaning for the word <em>models</em>. As evident as the separation of those two seems to seasoned developers, it shows again and again that itâs not as apparent to beginners.</p>https://hynek.me/talks/python-deployments/Solid Python Deployments for Everybody2013-03-16T00:00:00Z2013-03-16T00:00:00ZHynek Schlawack[email protected]https://hynek.me/<p>Without orientation, deployments of Python applications can be tiresome and even painful. This talk attempts to replace anxiety and pain through informed annoyance.</p>https://hynek.me/articles/taking-some-pain-out-of-python-logging/Taking Some Pain out of Python Logging2013-03-06T00:00:00Z2013-03-06T00:00:00ZHynek Schlawack[email protected]https://hynek.me/<p>Even the best of us <a href="https://twitter.com/chrismcdonough/status/280251086609203200">hate</a> logging in Python sometimes. And while a lot of its problems are actually just bad docs and terrible defaults in the past, there is some pain that can be avoided.</p>https://hynek.me/articles/hardening-your-web-servers-ssl-ciphers/Hardening Your Web Serverâs SSL Ciphers2013-02-05T00:00:00Z2021-02-11T00:00:00ZHynek Schlawack[email protected]https://hynek.me/<p>There are many wordy articles on configuring your web serverâs <a href="https://thoughtstreams.io/glyph/there-is-no-ssl/">TLS</a> ciphers. This is not one of them. Instead, I will share a configuration that scores a straight â<a href="http://www.youtube.com/watch?v=WVzp4MJRKHc">A</a>â on <a href="https://www.ssllabs.com/ssltest/">Qualysâs SSL Server Test</a> in 2023.</p>https://hynek.me/articles/using-celery-with-pyramid/Using Celery with Pyramid2012-07-20T00:00:00Z2012-07-20T00:00:00ZHynek Schlawack[email protected]https://hynek.me/<p>This one falls under: âI <em>knew</em> there has to be an easy way!â</p>https://hynek.me/articles/how-i-stopped-worrying-and-started-loving-pyladies/How I Stopped Worrying and Started Loving PyLadies2012-07-13T00:00:00Z2020-12-28T00:00:00ZHynek Schlawack[email protected]https://hynek.me/<p>When I read about <a href="http://www.pyladies.com/">PyLadies</a> for the first time, my thoughts were a common knee-jerk: âseparation is bad, dividing the community, â¦â. Like many of my privileged peers, I was pro-diversity but I thought this is the wrong way. My views changed over time and I filed it under âlessons learnedâ. Unfortunately, my old thinking patterns donât cease to pop up in discussions, so I decided to share my perspective.</p>https://hynek.me/articles/my-road-to-the-python-commit-bit/My Road to the Python Commit Bit2012-05-19T00:00:00Z2012-05-19T00:00:00ZHynek Schlawack[email protected]https://hynek.me/<p>Like many OSS fans, I always wanted to be an active part of the movement. My last <a href="http://simplemail.sourceforge.net/">big project</a> was for the Amiga in the past millennium though. Nowadays Iâm happy that after years of small-scale dabbling on various projects Iâve found my haven. Iâd like to share my way to my recent gain of push privileges on the Python project and hope to inspire some of you to do the same.</p>https://hynek.me/articles/python-app-deployment-with-native-packages/Python Application Deployment with Native Packages2012-05-03T00:00:00Z2017-12-04T00:00:00ZHynek Schlawack[email protected]https://hynek.me/<p><em>Speed</em>, <em>reproducibility</em>, <em>easy rollbacks</em>, and <em>predictability</em> is what we strive for when deploying our diverse Python applications. And thatâs what we achieved by leveraging virtual environments and Linux system packages.</p>https://hynek.me/articles/python-deployment-anti-patterns/Python Deployment Anti-Patterns2012-04-23T00:00:00Z2012-04-23T00:00:00ZHynek Schlawack[email protected]https://hynek.me/<p>Deploying web applications is hard. No shiny continuous deployment talk and no DevOps coolness can change that. Or to use DevOps Boratâs <a href="https://twitter.com/DEVOPS_BORAT/status/192271992253190144">words</a>: âIs all fun and game until you are need of put it in production.â There are some mistakes I see people doing again and again so Iâd like to address them here.</p>https://hynek.me/articles/celery-and-sybase/Celery and Sybase SQL Anywhere2012-02-25T00:00:00Z2012-02-25T00:00:00ZHynek Schlawack[email protected]https://hynek.me/<p>In our newest installation of âwhy you should not use Sybase SQL Anywhereâ Iâd like to report the latest problem I had to solve: for some reason, I couldnât connect using sqlanydb from <a href="https://celeryproject.org/">Celery</a> tasks.</p>https://hynek.me/articles/fleeing-from-gmail/Fleeing from Gmail2012-01-26T00:00:00Z2012-01-26T00:00:00ZHynek Schlawack[email protected]https://hynek.me/<p>So you came to the same conclusion as I: <a href="http://thenextweb.com/google/2012/01/13/busted-google-gets-caught-scraping-kenyas-biggest-business-listings-database/">Google</a> <a href="http://www.infoq.com/news/2011/09/app-engine-price-hike">is</a> <a href="http://www.slate.com/articles/technology/technology/2012/01/google_social_search_the_tech_giant_s_disastrous_decision_to_muck_up_its_search_results_.single.html">actually</a> <a href="http://gizmodo.com/5878987/googles-broken-promise-the-end-of-dont-be-evil">evil</a> <a href="http://googlereader.blogspot.de/2013/07/a-final-farewell.html">indeed</a>. That makes it kind of uncomfortable to have all your emails over there, doesnât it? I for one decided that itâs time to leave and will show you how to do the same using an UNIX based OS.</p>https://hynek.me/articles/my-2011/My 20112011-12-31T00:00:00Z2011-12-31T00:00:00ZHynek Schlawack[email protected]https://hynek.me/<p>I never did a retrospective but 2011 deserves one.</p>https://hynek.me/articles/dead-simple-connection-pooling-with-twisted/Dead Simple Connection Pooling with Twisted2011-12-14T00:00:00Z2011-12-14T00:00:00ZHynek Schlawack[email protected]https://hynek.me/<p>There is this common notion, that asynchronous IO is hard and that writing a custom connection pool is even harder. The nice thing however is, that in reality asynchronous IO is just âweirdâ in the beginning â and that a connection pool using async IO is so simple it hurts.</p>https://hynek.me/articles/macvim-and-the-clipboard/MacVim and the Clipboard2011-12-06T00:00:00Z2011-12-06T00:00:00ZHynek Schlawack[email protected]https://hynek.me/<p>After switching to the Mac, I had one big itch that spoiled all the bliss: MacVim sometimes simply refused to cooperate with the system clipboard. As you can imagine, an editor that canât exchange text with other software is a rather painful thing.</p>https://hynek.me/articles/why-tomatoes-are-awesome/Why Tomatoes Are Awesome2011-10-01T00:00:00Z2011-10-01T00:00:00ZHynek Schlawack[email protected]https://hynek.me/<p>No, this isnât going to be a smug post about nutrition. These tomatoes Iâm going to talk about arenât for eating but for kicking my ass to be more productive. Iâm talking about the <a href="https://francescocirillo.com/pages/pomodoro-technique">Pomodoro Technique</a> of course.</p>https://hynek.me/articles/my-mutt-gmail-setup/My mutt and Gmail Setup2011-08-22T00:00:00Z2011-08-22T00:00:00ZHynek Schlawack[email protected]https://hynek.me/<p>So you want quick offline access to your mails using mutt to fully exploit your SSD and yet still have everything nicely working in Googleâs web interface? Additionally, you would like to have access to your Google Contacts just like in your phone and everywhere else? Iâll show you how!</p>https://hynek.me/articles/solarized-love-on-first-sight/Solarized â Love on First Sight2011-07-10T00:00:00Z2011-07-10T00:00:00ZHynek Schlawack[email protected]https://hynek.me/<p>Thereâs one thing hackers are opinionated about as about the right editor: The right color scheme.</p>https://hynek.me/articles/mercurial-to-git/Mercurial to Git2011-05-10T00:00:00Z2011-05-10T00:00:00ZHynek Schlawack[email protected]https://hynek.me/<p>Mostly a note to myself as I forget it regularly.</p>https://hynek.me/articles/twisted-sybase/Twisted Sybase SQL Anywhere2011-04-27T00:00:00Z2011-04-27T00:00:00ZHynek Schlawack[email protected]https://hynek.me/<p>Using the <a href="https://github.com/sqlanywhere/sqlanydb">official sqlanydb</a> driver for Python together with Twistedâs adbapi produces not-so-occasional crashes as of today (sqlanydb 1.0.2, Twisted 11.0.0). Apparently, the official SQL Anywhere drivers arenât thread-safe. It cost me several days to figure out because I was searching the fault in my code so I hope to spare you some pain.</p>https://hynek.me/articles/django-postgres-ssl/Django & Postgres & SSL2011-04-12T00:00:00Z2011-04-12T00:00:00ZHynek Schlawack[email protected]https://hynek.me/<p>Iâd thought something like this is a FAQ but the database docs on postgres donât write a bit about forcing Django to connect using SSL to the database server.</p>https://hynek.me/articles/information-diet/Information Diet2011-04-01T00:00:00Z2011-04-01T00:00:00ZHynek Schlawack[email protected]https://hynek.me/<p>Be careful to not overeat.</p>https://hynek.me/articles/django-and-remote-sybase-servers/Django and Remote Sybase Servers2011-02-07T00:00:00Z2011-02-07T00:00:00ZHynek Schlawack[email protected]https://hynek.me/<p>It took me a while to figure it out, so I decided to share.</p>https://hynek.me/articles/freezing-kindle/Freezing Kindle2010-12-07T00:00:00Z2010-12-07T00:00:00ZHynek Schlawack[email protected]https://hynek.me/<p>After a few months of use my Kindle started to freeze randomly. At first I blamed the cold as it happened to be winter in that moment. Fortunately, it turned out to be something different.</p>https://hynek.me/articles/ldap-a-gentle-introduction/LDAP: A Gentle Introduction2007-02-13T00:00:00Z2007-02-13T00:00:00ZHynek Schlawack[email protected]https://hynek.me/<p>The perception of LDAP (Lightweight Directory Access Protocol) is ambivalent. On the one hand, it is widely supported as a common authentication backend. On the other hand, there’s very little and poor documentation mainly targeted toward a particular case (for example, replacing NIS with LDAP).</p>https://hynek.me/articles/mysql-replication/MySQL Replication2007-02-09T00:00:00Z2007-02-09T00:00:00ZHynek Schlawack[email protected]https://hynek.me/<p>Sounds harder than it is â especially when reading the official docs. But if you want to synchronize two DBs, just tell the âmasterâ to write a log and slave to read it.</p>https://hynek.me/articles/pcap-format-for-logs/PCAP Format for Logs2005-11-22T00:00:00Z2005-11-22T00:00:00ZHynek Schlawack[email protected]https://hynek.me/<p>While developing a network sniffer I had to find a way to write <code>pcap</code> logs. However the docs I found were rather fragmented. I try to do a short roundup here. In fact, the format is pretty plain and itâs a pity that there seems not to be a quickânâeasy doc for it.</p>