Jay's first impressions of the Agenda VR3

[I wrote this up the day after my Agenda VR3 arrived, among
the first batch of consumer units that shipped. I've learned
more since I wrote this, but I'll put that in separate documents.
Here and there I've added later comments in brackets like this]

Yesterday I got my long-awaited
Agenda VR3, a Linux-based PDA that uses stock XFree86 for its (small) display,
and all of whose software is open-source. These are my first
impressions.

Physically, it's a nice piece of hardware. It's noticeably
smaller than a Palm III (though considerably larger than a V).
You can find out what it looks like at the Agenda site, so
I won't bother with that.

I pre-ordered it as a `toy'/`platform for experimentation' without
knowing whether it would actually be usable for standard PDA tasks
(addresses, scheduling, etc.). I figured even if it wasn't
an acceptable replacement for my Palm, it was a neat enough gadget,
and I had enough use for its more specialized features, to go
ahead and get one.

When you put in the batteries and turn it on (or press the reset
button), you see fairly standard Linux boot messages scrolling
up the screen in tiny white-on-black letters, interrupted at one
point by a touch-screen calibration process. It's pretty cool
to see "starting inetd" scroll by on my PDA. :-) After a
while the screen clears, and after a considerable delay the "Launch
Pad" appears with big icons for the included apps. Including
a terminal (a modified
rxvt). Tap that, and you get a shell prompt. It's
ash, a very restricted
sh implementation, but you can run
bash as well.

The biggest problem with the Agenda in its current incarnation
is the extreme slowness of starting applications, and sometimes
of switching between them as well - to the point that just for
normal tasks, I often found myself wondering if the thing had
hung.
[I've since discovered that it's a lot faster if you edit the
config files (1) not to start the LaunchPad and (2) not to run
syslogd. I'm not sure if it's just a matter of me subconsciously
adapting to the Agenda's limitations or whether it's actually
that much faster without those things running, but I don't have
that problem any more. Also, there are alternate builds of
the romdisk that you can download that are alleged to speed it
up a lot.] Launching an app when there are a couple other things open
can be distinctly painful - sort of like working on a normal Unix
box with X when the X server is thrashing. And if you yield
to temptation and tap the button that doesn't seem to be responding
(or worse yet, tap a window that belongs to a different application
than the one that's starting up), your tap gets queued, and causes
the Agenda just to take that much longer to return to responsiveness.

When you're staying within one application, even a fairly compute-intensive
one like a game, the Agenda seems pretty responsive, comparable
to a Palm.

This actually doesn't affect the main PIM apps very much - the
address book, the calendar, etc. - because they're all symlinks
to the same binary, and that binary is loaded into RAM at boot
time. So launching one of those applications is much quicker
than launching something else, and switching between them is almost
instantaneous. Clearly the Agenda developers know that responsiveness
is their biggest problem, and they've put a lot of effort into
addressing that problem where it's most important.
[Actually, it turns out that the calendar is pretty slow with
a realistic set of data - usable, but barely.]

As with a Palm, when you turn the unit off, it doesn't actually
shut down, just goes into hibernation, so turning it on to look
up an address or something is not much slower than with a Palm.
My current uncertain suspicion is that I'm going to find it
adequately fast to stop carrying around my Palm, but it certainly
won't be as fast for routine tasks.
[And yes, at this point I don't carry my Palm with me, but for
PIM applications I certainly miss it.]

However, I think the things it can easily do that a Palm can't
will make it a very interesting toy, and maybe even a useful tool.
The biggest win is that pretty much anything that can be built
for Linux on a desktop can be easily ported to this PDA, provided
its memory and long-term storage (flash/hard-drive) profile is
small enough. There are a couple Python ports, a Tcl/Tk port,
Scheme, something called "microperl", and so on.
ssh,
pgp,
xspread, and
xboard are already available (the last with a back end that's a lot
smaller than
gnuchessx, but
xboard itself was a pretty simple port). The card games that ship
on the unit are ported from the Ace of Penguins. This machine
is just dead easy to develop for if you already do Linux development.

Moreover, since the included software is all GPLed or LGPLed,
you can build the Agenda apps for your Linux desktop. I built
a couple of them last weekend, before I got the Agenda itself.
So you can enter all your data on your desktop, and then copy
the database files to the Agenda. (And of course you can go
the other way as well.) This is not as nice as having the Palm
Desktop for Windows, since the built-in Agenda apps are designed
for the Agenda's small screen, but for interactive use it's a
nicer way of getting at your data on Linux than the text-file
formats that
the pilot-link utilities produce, and you're pretty much guaranteed that you will be
able to access on your desktop any data you can access on your
Agenda, without somebody needing to write a conduit or special
software for it - just build the Agenda app for Intel architecture.

The CD that shipped with the first consumer Agendas includes GCC
built for cross-compiling for the Agenda's MIPS processor, plus
all the libraries and headers you need. All for Linux, of course
- they don't even have their Windows sync software ready yet.
:-)

(Most of the built-in PIM applications store their data in Berkeley
DB files, so extracting it into other formats on the desktop should
be fairly trivial. The preferences are in dotfiles.
[I haven't yet managed to read the data with anything other
than the stock Agenda apps built for i386, but I think it's just
a matter of poking at it enough, or reading the source code.
The Agenda uses version 1.85 of libdb, rather than 2.x, which
is the default in most distributions.])

Similarly, because the Agenda is running real X11, while it's
in its cradle with PPP running, you can run an Agenda app displayed
to your desktop machine (or vice versa, if the app fits on the
tiny screen). I haven't tried this yet.
[It works. It's slow. You don't really want to do it.
:-)] One
major warning here: the agenda ships with
no password on the user account (`default') that the apps run as, with a root password of
agenda, and with
telnetd and
rsyncd enabled! You do
not want to allow routing between your Agenda and the internet.
This is something that will need to be addressed soon, because
people are going to want to be able to ftp, browse the web, chat
on IRC, etc. from their Agendas on the road without their private
data being stolen or deleted. I've seen some claims that there
are problems with putting a password on the
default user, but I'm not sure if that's still accurate. You could,
of course, kill
inetd, and re-enable it just for syncing.

Most of the included Agenda applications are written in C++, using
a C++-based widget set called
FLTK (Fast Light Toolkit). This might prod me to learn C++. :-)
It's perfectly possible to develop in C, and to use bare Xlib,
though. Of course, you can also build and run tty-based applications
(like
bash :-) in a terminal, if they can handle a 30-to-32-character-wide
screen. The look of the Agenda is a lot different from that
of a Palm: although modern Palms can display 16 shades of gray,
the same as an Agenda, PalmOS started as a one-bit black-and-white
OS, and most apps still look that way. Agenda apps make extensive
use of greyscale and look a lot different. The fonts (mostly
various sizes of Helvetica) aren't as nice as the fonts on a Palm,
though. (Of course, since they're just X fonts, we can replace
them. :-)

The Agenda's memory usage is a bit strange. There's 16Mb of
flash ROM, split among the kernel, the root partition, and a
/flash partition, where all config files,
/usr/local, and the default user's home directory are stored. The intention
is that future models of the Agenda will have the OS in ROM, and
/flash will still be flash ROM for data storage. (Since this is
flash ROM rather than battery-backed RAM, an Agenda won't lose
data even if it runs
completely out of battery power. However, since it's flash ROM rather
than RAM, blocks will eventually wear out after a very large number
- about 100,000 - of rewrites. The filesystem is designed to
equalize usage of the flash-ROM blocks so any given file should
be able to be rewritten a lot more times than that.) The current
unit uses flash ROM for the OS as well, which means the OS can
be upgraded fairly easily (and I believe they're planning to continue
to sell OS-upgradable units even after they introduce the ROM-based
ones). In addition to 16Mb flash ROM, the Agenda has 8Mb of
RAM. While there are ramdisks in RAM (that's where
/tmp lives, for instance), this RAM is mostly used the same way
RAM is used in a desktop - as working space for running applications.
This is drastically different from the model on a Palm, where
RAM is basically considered permanent filesystem-level storage,
and an application typically updates its database in place, but
only gets to ask for very small amounts of working `scratch' memory
from the OS. Compared to a high-end Palm's 8Mb of
total storage, an Agenda's 24Mb is pretty generous. But compared
to a typical Linux box with at least a gig of disk and 64Mb or
128Mb of RAM, well, it's limited. But it works. Telnetting
into an Agenda feels a lot like telnetting into a typical Unix
box of maybe 10 years ago.

So, those were my first impressions. I've since gotten the
machine (or myself) in a state where it almost never hangs.
I have not yet gotten the included `QuickSync' software, which
is supposed to sync with gnomecard and gnomecal to work properly,
but I don't care much, since I have the Agenda PIM apps on the
PC, and rsync works fine for copying the databases back and forth.
I've ported some command-line tools, using the GCC cross-compiler
provided on the Agenda CD, and that was a painless process.
My current opinion is that for PIM functions, it can't hold a
candle to a Palm yet at this point (although it's good enough
that I don't feel the need to carry my Palm), but as a fun hacking
platform, a Palm can't hold a candle to the Agenda. And because
it's all GPLed, I strongly suspect that it will evolve and improve
pretty quickly.