Recent blog entries for rupert

\LARGE{This weekend, I learnt how to format and write simple
 documents using \LaTeX~!}
It's amazing how easy the language is to learn and use, and
how good it makes documents look.  I think I'm going to
start doing the documentation for ALICE in both plaintext
and PostScript.

Submitted a patch to fix a couple of cursor movement bugs in pyCFontz, an LCD control library that's part of the mpy3 package, another car MP3 player. It was accepted and integrated very quickly by the maintainer, which was a pleasant surprise. ALICE uses the API from this project for LCD display control also, so it benefits both applications.

Concurrently, I've been making lots of small fixes, and adding final polish to ALICE. Now that the architecture's stable, I've been making the code more readable, breaking out some redundant bits and pieces of code into functions, adding a few more events to each of the core speech and LCD display modules, and still finding the occasional bug :-) The whole app is starting to feel like it's very together, which is a gratifying sensation after 6 months of work.

I do hope that users will enjoy the voice controlled MP3 module that comes with ALICE, and developers will find the available modules easy to work with, and useful for creating voice controlled apps. Potential applications are limitless, but could include things as diverse as a system monitor (disk space, CPU use, memory, users, etc) , an X-10 appliance controller, a voice datebook/calendar, a news and info reader, a data acquisition monitor (with customized voice alarms), a GPS navigation system, and so on...

--- Rupert
bratsche: Very good to see someone else playing with open source speech recognition. CMU Sphinx is a fine application. Best of luck with the project!

--- Rupert
Advogato stats (2002-02-02)

(courtesy of /bin/grep and /usr/bin/nl)

Current number of Advogatoans: 5776
Observer users: 3329
Apprentice users: 548
Journeyer users: 1422
Master users: 477


Added dynamic module registration to ALICE's event distribution server. Now only a single entry in the config file is required to get a module registered (as opposed to having to modify the source, as was the case before).

Happy birthday jmallett!

--- Rupert
fxn - MyAdvogato looks like a really neat project. Keep up the good work!

'Mobile Application Server'?

I noticed that a company called aligo seems to have their own project that they are calling a 'mobile application server'. Our definitions of the term seem to differ a bit. They're developing a small-footprint application server for handheld devices, that's J2ME based, and provides centralized messaging, sync services, etc.

ALICE, which I'm also calling a 'mobile application server', focuses on providing speech recognition, speech synthesis, and LCD display services for hands-free applications. ALICE is intended to be used in situations where using conventional input methods (mouse, keyboard) might be impractical or dangerous (i.e. while driving). The app is also intended to run on a larger footprint platform than a handheld, such as a laptop or permanently installed system in a car. I've also thought about using ALICE in my house, in conjunction with a module that'd control X-10 devices, and take advantage of the permanent DSL connection to provide news and other useful information on demand.

A little project history

A very early version of this system was developed back when the Ricochet wireless modem service was still alive. The input device that I used was a little kids PDA called a Cybiko, that had a full (if microscopic) QWERTY keyboard, along with an RS-232 port, and a terminal program. Via a P- 133 box running RedHat 6.2 in the trunk, I got a serial console running on it, and used MP3View to play MP3s. After several of my friends expressed some concern about me trying to squint at the 4 point type on the screen, while trying to navigate the fast lane on H- 101, I decided to use voice recognition instead. What started as a simple attempt to clean up the codebase that I'd been using resulted in a total, and much needed re- architecture, that made the whole system modular and easier to maintain. Thus, ALICE was born. Muhahaha :-)
The reference to Ricochet above was in relation to the fact that the original version would grab and parse RSS feeds from CNN on demand, parse them, and then speech synthesize the headlines. It was kludgy, though, and after Ricochet went away, it became less of a priority.

Happy Hacking!

--- Rupert

P.S. If anyone would actually like to play with a pre- beta release of the project, drop me an email (, and I'd be happy to oblige.
30 Jan 2002 (updated 30 Jan 2002 at 01:54 UTC) »
hacker - And this coming from a company that's also supporting open standards in the form of Ogg Vorbis streams. A classic case of the right hand being unaware of the actions of the left. Quite odd.

Lots more work on ALICE. I finally finished binding all of the speech commands to events in mp3_module, the MP3 player, and added a couple more useful events to lcd_module, the module which handles all of the LCD display functions. The last few major issues are all resolved (problems with song scrolling, and double execution of spoken commands). Having done this, I'm refining a few functional, but rough edges, cleaning up the documentation, and taking time to test everything a little more thoroughly.

The temptation to add new features at this stage is incredibly great. For that reason, I can't wait to get a beta out the door, and start work on the 1.1 branch!

A quick thanks to my current beta tester, Jed Parsons, who's brave enough to withstand daily builds. Thanks also to jooon, who made encouraging comments.

Best of luck to everyone with their respective projects,

--- Rupert

Update 2002-01-29. Remove <code>...</code> tags, since they're not supported. Oh, the irony!

ALICE, the mobile computing app server that I've been working on, is very close to a first beta release. To demonstrate the speech recognition and speech synth capabilities that it provides, it'll include an MP3 player module that's fully voice controlled.

The software is very stable, seems to be lightweight in terms of overall CPU/memory usage, and much easier to configure, since all of the modules use a central config file now. There are a couple of minor, mostly cosmetic bugs that I'm trying to squash, but good documentation has been a much greater focus. So far I've got an installation & 'quick start' guide hammered out, and I'm working on finishing a document that describes how to accomplish development tasks like creating new modules, changing the language model, and using the functions that the LCD display and speech I/O modules provide.

Good docs are something that a good majority of otherwise well written free software seems to lack. Documentation is at least as important as the actual executable, but constantly gets treated as the sort of bastard cousin of software engineering tasks. I particularly like Knuth's Literate Programming approach towards this end, although I think that adopting a middle-ground is probably a great deal more practical in most cases, since the philosophy expounded here is time intensive in the short term.

It's really cool that the app has finally gotten to this stage:

Me: What is the name of this song?
Computer: This song is Bookends, by Simon and Garfunkel.
Me: Thanks, Alice.
Computer: You're welcome, Rupert.

--- Rupert

Entirely unrelated to open-sourcery, but an interesting anecdote to boot...

Last night I was driving home from a friend's house around midnight. As I was driving up Van Ness St, a major street that cuts through San Francisco, I stopped at a traffic light. In the lane next to me was a black Chevy with a picture of a lit Olympic torch silkscreened onto the door, and the words '2002 Olympic Torch Relay' on the back. I gave the driver a friendly smile and thumbs up, and he waved back. The light changed to green, and I drove on. As I was driving along at about 30mph, the car caught up with me, and the woman in the passenger seat rolled her window down, and yelled "Hey! I have something for you!", holding out her hand. I reached out my window, grabbed the small item, and yelled back a thank you. The item turned out to be a little gold 'Salt Lake City - 2002 Olympic Torch Relay' pin. A really cool souvenir to have!

Since the torch arrives in San Francisco today, I wonder if this is the actual vehicle that carries the torch from place to place?

Phoon: Interesting to see that you got a JamCam camera. They actually work pretty decently with Linux, via the USB interface. I wrote a short doc on getting the cam set up (using gphoto and libusb). The doc can be found at a/279.html.


--- Rupert

27 Dec 2001 (updated 27 Dec 2001 at 23:00 UTC) »

The four day weekend was very productive. I got tons of new work done on alice, my mobile computing application server. Since finishing the core event distribution server, I've moved on and have re-written lcd_module, which handles output to the CrystalFontz LCD that I'm using, and speechio_module, which handles speech input from the CMU Sphinx speech recognition server. Now I'm in the middle of migrating mp3_module, which handles MP3 playing, over from the old, prototype version to the new one. Doing an almost complete re-architecture has produced several nice enhancements, including --
  • Cleaner, better commented, more modular code
  • Vastly improved speed and CPU usage (thanks to use of select.poll() over threads)
  • More flexible channels of communication between client modules attached to the event distribution server. Data sent from clients to the server takes the form </i>destination_module: data_for_module</i>, where destination_module represents the name of the client module that the data is intended to be used by, and data_for_module is the module-specific data. The EDS uses a lookup table of module names to route incoming data to the appropriate client endpoint. Everything was 'hardwired', previously.
  • Use of a central configuration file (parseable via ConfigParser), with individual sections for each module.
  • Cookie-cutter event loops in clients, which speeds up client development time enormously.

More for my own amusement than anything else, I've been doing some traffic analysis of search requests on the cluster of P2P networks known collectively as Gnutella. I've been collecting a large number of (timestamp, source IP, search term) tuples, and looking for patterns within the data. Some of the metrics I'm looking at are:
  • Per-IP / Per-network frequency of search terms over different time periods.
  • 'Top 100' most popular search terms on a per month basis
  • Correlation of search terms by approximate geographic location of source IP.
  • Using data to build a weighted network that'll act as a predictive data model for testing the probability of a user (or network as a whole) searching for certain terms, given an input set of terms from that IP/network.
Depending on how things go, I may write an essay on the subject if the data proves interesting enough. Comments on this, and references to similar work would be appreciated.


At least I survived seeing family. It's never as bad as I expect it'll be, and the food is always decent (my mom makes amazing desserts!). And I got some decent gifts, which included a large reference volume on military aircraft, courtesy of my brother, and some much needed home appliances from my Mom. However, I will never understand the strange phenomenon of Holiday Ties, those ties which include things like Snowmen, Reindeer, Large Bearded Fat Men, etc. Is this a uniquely US phenomenon, or are the Europeans also subject to this scourge?

Happy $holidays to all;

--- Rupert

update: 2001-12-27: fix CMU Sphinx URL.

33 older entries...

New Advogato Features

New HTML Parser: The long-awaited libxml2 based HTML parser code is live. It needs further work but already handles most markup better than the original parser.

Keep up with the latest Advogato features by reading the Advogato status blog.

If you're a C programmer with some spare time, take a look at the mod_virgule project page and help us with one of the tasks on the ToDo list!