We use Python

Python is a powerful dynamic programming language used by the likes of Google and Industrial Light and Magic. We have used python since 2005.

2005: We replace our existing image processing system written in Visual Basic .NET. The new Python system ("Sysiphus") is a clustered solution which runs on several machines. Jobs are handled via a priority based FIFO list which is stored in an Oracle database and accessed using stored procedures via cx_Oracle. Sysiphus handles the numerous error conditions that can occur when processing many millions of images over several file systems. Packages used include PIL (Python Image Library) and distutils. Sysiphus resizes and watermarks images and writes EXIF data from the database to the files. It processes images both in batch mode (new uploads) and on demand (downloads).

2006: We replace an image upload server written in Java/Tomcat. The new Python Server (Horizon) exposes an XML/RPC API to clients (Java GUI and Python command line) using Twisted. The Python server handles file uploads, search and auto-complete interfaces for key wording and captioning. It has some machine learning features: As photographers upload and correct their captions, the system learns which IPTC (EXIF) fields the Photographer uses for each type of data; thus the system can better autosuggest. The python server connects to Oracle using cx_Oracle.

2006: We use Python for backup scripts e.g. to export Oracle databases copy them over the network and optionally import them into dev databases.

2007: We start work on Eviscape, our social network platform. After considering several python web frameworks including Pylons and Turbogears, we decide on Django as a flexible standard that our company can use for diverse projects. As well as using Django / Python for the web application server, we use some PL/Python in the Postgres database for triggering logic alongside PGPLSQL. We cache functions, use Memcached and implement some group based cache invalidation. We develop an API and a Python wrapper for that. We use signals for notification processing. Access to the Postgres database is via stored procedures which return Ref Cursors and views.

2008. We write this site (TESOBE.com) in Django - Its a simple multi language CMS well suited to a small number of pages where each element is easily translated by an translator working directly on the site (rather than using a separate PO file editor).

2008. We write a native Django application for a real estate CMS. It uses our multi-language translation features previously developed and adds multi-language SEO features such as translated URL's and meta tags. As part of the solution we write an XML "crawler" in Python which scans directories and parses the XML and inserts / updates the data into the database.

2008. We complete a phased transition of musicpictures.com from PHP to Python / Django using cx_Oracle. One of the main hurdles is reusing the Oracle connections so we write pyOraPool using Python Remote Objects(Pyro) to achieve connection pooling. We expose a simple restful API and integrate with the PayPal API.

2009. We write giglook.musicpictures.com, a mashup in Python that uses the last.fm and musicpictures APIs.