initial commit. Webserver infrastructure and UI partially setup. Webcam capture loop setup. Includes custom-built jquery ui css.

Needs heavy code cleanup after lots of experimentation
Added heaps of UI elements. No code cleanup yet
Uniformity in side panel. Grouped applicable controls together as radiobuttons.
Fixed some buggy UI formatting on window resize. Left-hand side is now a pop-out panel with info arranged in collapsible accordions. Worked out how to embed 'fake' buttons (just inert text) in toolbar button rows. Laid out structure for Simulation page (text-based; very straightforward)
Switched the webcam stream from writing to file, to storing in main memory and producing a jpeg http reply on request. Can now visit "/frame" to download a .jpeg from the server. Baby steps...
Added a 'frame' page for demonstrating HTTP live webcam streaming. Note the framerate drops a bit when using it (because rapid polling http requests on big data sucks).

Added an RPC handler (tornadoRPC), based on JSON RPC calls. Works a treat!

Also added lots of commented out code. Big mess to clean later...
State as of thursday morning; various improvements
Having trouble with mjpeg, just found out tornado isn't thread safe. shiiiii-
Small changes; moved away from MJPEG back to AJAX to cut my losses - couldn't work out why my MJPEG streaming implementation wasn't working.

About to change to using fabric.js as the DISPLAY element and loading off its callbacks. Super easy to use. Should be easy to set the size of the display area too
Dinner. Sliders next
Sockets operational (just broadcasting the time and connecting/disconnecting)
So much to do so little time :)
Steady....
More UI stuff. Moving on to sliders
Much progress, looks pretty wowe
Back from lunch. Drop everything, do OpenCV!
Gonna try base64. More forks, now with less misleading names
Base64 encoding of images is the way to go! It increases network bandwidth by 1/3 - which is offset by me now using OpenCV to export the JPEG directly, with 50% compression. It's more work for the browser and server (compress/decompress), but the framerate is so low that it's quite manageable.

MJPEGs are just too much hassle. I created a standalone MJPEG streaming demo browsers have trouble knowing when they disconnect, and webkit has an open bug to this day where it won't close MJPeg streams until you navigate to a different page. When I got to the point of embedding them in iFrames to facilitate disconnecting without leaving the page, having the iframes dynamically resize using javascript, and using the websocket itself to communicate between the client and server when to change some property of the stream, I knew it was time to stop.

Everything's finally coming together... gotta code fast for tomorrow!
Heaps of progress! More UI features, more RPCs, started image processing.

Gotta go fast to finish image processing.

No need for webcam to be setup now - can load example image from file
The final countdown...