Biari Workbench Technology Stack
Over the course of developing our Workbench solution we’ve adopted a powerful set of interconnecting components. It’s worth mentioning what these are and how they fit together.
Almost all the components of the stack are free and/or open source. We want to be as platform independent as possible and not get too locked in to one technology paradigm. This means that as much as possible, parts should be as “hot swappable” as possible – which also helps encourage strong componentisation. Using components with mature and open/standardised interfaces is very necessary when you’re crossing language boundaries (most notably, Javascript-Python and Python-C++) and client/server boundaries; otherwise you risk re-inventing the wheel. Ideally each component we use should also still be in active development (in the IT world – with the odd highly venerable exception – if software is not growing and evolving, it’s usually either dying, already in it’s death throes, or extinct).
There’s an art to using the right tool for the job, and we’ve made mistakes. We over-used Mako (see Loki’s blog post) and also originally used a slightly inferior lib for the C++ xmlrpc back end; both these mis-steps were fairly easily rectified. Arguably, we probably still use too much C++ and not enough Python – the C++ line count dwarfs the Python line count by a considerable margin. One last interesting point is that, at the moment, we’re still eschewing use of an ORM (Object Relational Mapping layer – such as SQL Alchemy) – time will tell whether that is a good idea or not.
Client:
JavaScript
– client-side browser language
jQuery
– JavaScript library for event handling and more
Cloudmade
– OSM map provider/server
Data Interchange:
JSON – JavaScript Object Notation
XML – eXtensible Markup Language
Mathematical Engines:
Mostly in C++ using STL
CppUnit
– C++ library for unit testing
OGR
– map data library, part of GDAL – used to read map data
Libxmlrpc-c
– C++ back end for XMLRPC – used by a running process to communicate with the front end via Python
Server: Python – language CherryPy PostgreSQL PsycoPg2 XmlRPCLib Mako Repoze |