Low bandwidth asset management in Djando

Low bandwidth implies high latency - when implementing a site for low bandwidth conditions we must pay attention to the packaging and number of assets we include on each page. Here we look at an approach for combining assets in Django while preserving the relationship between each asset and the code that required it.

Read more...

Re-implementing the CKAN API for performance

CKAN, an open source data portal platform, provides an API for fetching everything from datasets to individual records. Here we look at how CKAN's architecture allows developers to transparently re-implement the datastore API, and how this was used to improve performance by switching all searches to using a Solr backend.

Read more...

Testing a PostgreSQL slave/master cluster using Docker

Docker is extremely useful for deploying packages, but also for creating environments for running functional tests. Here I show how to easily setup a cluster of PostgreSQL servers in slave/master replication using Docker and drive them using the Docker Python API.

Read more...

Dynamic mouse events for PySide

PySide, one of the Python bindings for Qt, uses the same event model as the C++ version of Qt - one that is designed for static languages. Here I show how to implement a layer above PySide's mouse events that provides a more dynamic event model.

Read more...

Interrupting urlopen in Python

While the Python ecosystem is replete with libraries for fetching data over the web, none of them give you an easy way to interrupt requests before the queried server has returned the response headers. As more often than not servers will only output response headers once they have the full response at hand, this does not make it possible to release resources early. Here I show a possible implementation based on sockets and Httplib.

Read more...

A Python multi-process task queue

Looking to integrate a task queue manager in a service I was implementing, I discarded existing task queues and libraries as over complex for my need and implemented a simple solution based on existing examples found online.

Read more...