Back when Zope was written Python did not support unicode. This is still reflected in the policy for object ids in Zope: they must be pure ASCII. I recently started wondering what it would bring Zope a bit closer to the future and make it support UTF-8 ids. It turns out that this is doable without too much effort.Read more
When using data in a relational database you often use an Object Relational Mapper (ORM) so you can pretend that you are only dealing with standard objects instead of having to deal with SQL directly. The ORM will then generate SQL automatically for you, and magically turn query results into objects again. For a recent project I had to do the exact reverse: turn a SQL expression into a SQLAlchemy construct.
Doing this required building a parser for SQL expressions to generate a syntax tree, and then converting the syntax tree into a SQLAlchemy expression.Read more
There is a growing number of migration toolkits for Python: Alembic, sqlalchemy-migrate, GenericSetup, zope.generations, south, etc. All of these focus on migrating a specific type of database, and some even on migration within a specific type of application (Zope or Django). They work very well, but when you need to deal with larger applications they no longer suffice.Read more
The server that had been serving this website died recently, so I had to migrate everything to a new machine. I also used this as an excuse to redo this website again, replacing my previous XML+XSLT approach with a static site generation. That means I can now manage content as simple textfiles instead of having to manually enter XML, so perhaps I might be updating this more than once per year now.Read more