\documentclass[12pt]{article}
\begin{document}
\begin{center}
\LARGE{This weekend, I learnt how to format and write simple
documents using \LaTeX~!}
\end{center}
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.
\end{document}

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...

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).

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
(rupe@arrow.yak.net), and I'd be happy to oblige.

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.

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.

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!

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 http://www.yak.net/fq
a/279.html.

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.

Writing

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.

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.

Post-Yule

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?