There is some trickiness because of the edge-triggering. Example integration with libev: http://funcptr.net/2013/04/20/embedding-zeromq-in-the-libev-event-loop/. Another small example is at http://stackoverflow.com/a/10861503.
For integration with Qt, QSocketNotifier provides monitoring of file descriptors, and a QTimer with a timeout of 0 should act be the same as the idle callback mentioned in the article. There is a C++ implementation of this in https://github.com/jonnydee/nzmqt. For Python it seems like it would be better to re-implement with PyQt.
From the introduction:
Programming is a science dressed up as art, because most of us don't understand the physics of software, and it's rarely if ever taught. The physics of software is not algorithms, data structures, languages and abstractions. These are just tools we make, use, throw away. The real physics of software is the physics of people.
Specifically, our limitations when it comes to complexity, and our desire to work together to solve large problems in pieces. This is the science of programming: make building blocks that people can understand and use easily, and people will work together to solve the very largest problems.
From "Code Generation":
At iMatix, until a few years ago, we used code generation to build ever larger and more ambitious systems until we decided the technology (GSL) was too dangerous for common use, and we sealed the archive and locked it, with heavy chains, in a deep dungeon. Well, we actually posted it on github.
Regarding Serialization Libraries:
It works but in most practical cases, wins you little over a serialization language backed by decent specifications written by hand or produced mechanically (we'll come to this). The price you'll pay is an extra dependency, and quite probably, worse overall performance than if you used Cheap and Nasty.
Q: What about gaining simplicity/extensibility with "fast enough" performance?