Technology

Programming Language and Tools

CrossMgr is written in Python 2.x (http://www.python.org) using the wxPython toolkit (http://www.wxpython.org).

Additional modules include:

  1. xlrd - Excel read module (http://pypi.python.org/pypi/xlrd)

  2. xlwt - Excel write module (http://pypi.python.org/pypi/xlwt)

  3. wxTools - Automatically included with Windows, required separately on Linux (http://packages.ubuntu.com/search?keywords=python-wxtools)

  4. openpyxl - New Excel format read/write module

  5. pyqrcode - Module to generate qr codes

  6. whoosh - Help search and indexing

  7. python-markdown - Processor for translating help text from markup format to html

  8. py2exe - Used to create stand-alone Windows run-time executable

  9. VideoCapture - Interface to USB camera

  10. wxPython - the user interface module

CrossMgr itself is "pure" Python. It has no addition libraries written in "C".

Editor and IDE

I use Stani's Python Editor (http://pythonide.blogspot.com/). It has a lot of good features but does not get in the way. It is also available for Windows and Linux, both of which I use regularly.

Architecture

CrossMgr is a straight-up desktop application. All data is kept memory resident. However, the program automatically saves the data after each change and at frequent intervals while running.

Persistence is done with the standard cPickle functionality where Python objects are marshaled and written to disk in a file (no database). This runs extremely fast and has not shown to be a performance problem.

New fields are added to objects in new versions. If an old data version is read and a new field does not exists (getattr(self, 'field', None) returns None), it is substituted with a reasonable default.

This is the essence of "lazy compatibility". The program remains backwards compatible to its data for all versions.

Queries and data manipulation are done on the in-memory objects through standard Python.