Today concludes three weeks of intensive late night hacking with the computer that I've installed in my car. When I removed it from the trunk a month ago, its control interface was a minature VT100 terminal. When it's installed next week, control will be solely via speech recognition. In three weeks, I've spent days at a time pounding my head against the monitor, working through tough design problems. I've also learnt a ton about multi-threaded server / client design, data routing, sockets, lock objects, TCP, and the horrors of termios :-)
It's a great stage to be at, and I'm really glad that for the first time, I didn't just come up with losing hacks to get everything working. Having a solid core architecture to build this set of computing services on is going to make expanding it further so much easier!
I've named the project since I wrote last. The system is named Alice (and recognizes her name when spoken). The name was chosen partly because it's short, easily pronounced, and continues the long standing tradition of 'Alice Bots', a popular set of AI chatbots. Finally, Alice as in Alice in Wonderland, since I've been chasing down rabbit holes lately, and finding new worlds within :-)
The architecture I've built has an EDS (event distribution server) at its core, to which clients (speech processing module, MP3 module, LCD control module) connect, and send and recieve data, which is routed appropriately between the connected modules, which then process the data and perform the appropriate I/O.
Arguably the coolest piece of the system is the little speech processor that I've written. The system relies on an external application (CMU's Sphinx) to convert the speech waveform to a text string. The speech processor takes in the text string, and using a simple weighted network algorithm, causes the output of the module (which is passed to the EDS) to become progressively more accurate over time.
Everything's been written in Python so far, apart from the speech synthesizer and recognition systems, which are external (GPLed) applications. I've been programming in Python for about two years, but it took a big project like this to really drive home what an amazingly versatile and capable language it is. The structure of the language really made it easy to experiment, make rapid changes, and keep the code easy to read.
Now to put the system into the car, and drive with it for a few weeks. It'll be exciting to see how well it works, and I look forward to posting more regular diary entries with progress reports.