What is a wearable computer
Do you hava a watch? See there is one. ;)
See The MIT Wearable Computimg Web Page for a good definition of
what a wearable computer is.
Something does not work as expected
Contact me about it Marcus@Wolschon.biz, most of the time I can help you instantly.
This is especially true for Windows-users as I we are all not using (and thus testing) that a lot ;) .
And please file a bug-report, so that you can keep
track of our progress in finding and fixing the problem.
Where to get information on wearable computers?
- There is a very good Wiki set up from the people of the wear-hard mailing-list.
- You could look at Wearables-central
- or get more-technical information at http://wearables.los-gatos.net
- The wear-hard -mailing-list is a great source of information and ideas too (you find it at wearables-central).
- Then there is the newsgroup comp.sys.wearables but it is very low on traffic. The wearable-webring (in the menu) is another good place to start.
How to start?
Nowadays the most simple methods are to get the installer (the web-installer loads only the needed parts of the net but cannot be used only localy) or the Debian-packages.
On Linux you have to execute "chmod a+x *.sh buildme ant/bin/*" to set the executable-flag.
If you want to try the 3D-user-interface or the ARUI, download it and follow the instructions in it's /doc/README.
If you have any problems with setting it up (e.g. under Windows) please don't hesitate to ask me!
How to start with JINI and a network?
We are working on making that work automatically, up to then consult the documentation of the
JINI-starter-pack from java.sun.com (it's a .zip-file named JINI1.1-G-CS.zip)
then: edit jaugment2.conf, src/start_* and src/test
fourth: start src/test
How far is the developement of jAugment? Can I use it?
Yes, you can. See the roadmap-section for details!
hardwear
What will it run on?
It is regularly tested to run a number of reference-platforms. These include a Xybernaut MA-IV using Windows98,
a Laptop running Debian-Linux, a selfbuild Geods-SBC and Linux -based wearable and a Compaq Ipaq 3870.
It run on everything with a JVM on it, (no, applications do not need
to be written in Java,) output-modalities already include speech-synthesesis,
textual and graphical display-devices (monitor and co) and serial-port comsoles(PDA, micro-controllers, ...).
For input we have:
keyboard(there are very small ones and even special ones to be used with
one hand from inside your pocket), serial-port-console(I am using a very
cheap casio-PDA for mobile-input), speech-recognition (Java-speech-API,
I am using the IBM-Viavoice-for-Linux-API with JavaSpeech but others are avaliable too),
Pointer-devices(mouse&co).
Of cause you can think of other things like gestures or eye-tracking(simple
in soft- but not in hardw(e)are) or data-gloves (I am working on that point.).
The Swing-UI and maybe the 3D-UI do support an interface to drive custom-displays
like LCDs or external devices (like the display of a PDA).
Do I need any costly special-made stuff?
NO! I myself ran perfectly well with a Laptop in my backpack and a headset.
But text-representations are not that good yet so a display is a good idea.
Does it run on a MA-IV/MA-V?
Yes, it is regularly tested to perform on that platform and I am using it on that myself.
Does it run on a WIA/Poma?
We are working on that, it is possible.
Does it run on a Ipaq in Ce/Linux?
We are working on that, it is possible.
Javadoc
Click here
to browse the class-documentation of the base-package. And get an overview about what we have
and how it works.
Why JINI and not CORBA/SOAP/...?
First: It's not exclusive! With the proxy-paradigm, the reflection-api and
the other details of JINI it's fairly easy to write
an adapter to other communication/collaboration-systems.
In fact we even have bindings for CORBA and SOAP in alpha-stage.
Second: It's paradigms and design-principles meet the requirements nearly
perfectly! It's notion of representations as atached properties meets the
requirement of dynamic UIs, leases and RemoteExceptions handle partitial
failures, dynamic integration of new services and the whole networking
part (If you provide e-mail and non-local directory-services on a server
in a network they will become avaliable and go with connections to that
network automatically and you know that nothing breaks if the network goes
in the wrong moment).
Third: It's there, it's finished, it's small. You do not need a full blown
CORBA-ORB to use the software. A lookup-service can be small and does not
even need to be avaliable for one-UI-operation.
Why java?
Well, it's easy and fast to write something that works in Java. With not
having to care about memory-allocation, byte-order and compactability
of mobile code it's all much faster.
And if you don't like Java, well, there's JPhyton, there's gcj to
compile it, there's the native-API, there's the possibility of a CORBA,SOAP,
shared-library-usage, ... -bridge. It's not that bad.
Last point: There's Java3D and a _lot_ of other very good APIs to use.
With the JavaSpeech-API you can abstract from the speech-recognition-toolkit.
With Java3D we are using a 3D-UI with all you need to represent
2D- and text-representation _easily_. ...you get the idea.
How to add/delete a file from/to the media-DB?
You cannot (yet) delete a single file. You can delete the media-db by
deleting bin/mediaplayerervicestate.dat. Adding is done by selecting
a URL or m3u in the directory-browser and selecting "index".
How may I help, where to make suggestions?
If you are interested in more information on it or are even willing to
participate in it you are advised to subscribe to the jaugment-announce
-mailing-list first. This project evolves very fast (new versions come
every few days, sometimes even 2 or 4 times in one day) and this way you
stay informed about it's status. Not every small step forward gets announced there
(we are no spammers) but every important step gets.
The next thing obvisiously is to get the code
and try out what we have so far yourself.
And if you find it buggy, incomplete or simply unusable tell
us about it (or even better do something about it, it's fairly well
documented and easy to read ...most of the time).
How to use desktop-sharing?
In the desktop-sharing-package there is a README in the /doc-directory describing the
setup.
The current desktop-sharing aproach will not be developed any further and be replaced
by a VNC-based solution in the near future.
What question does the seminat-representation of the media-player understard?
[please] play [something|sth.|some|anything|everything] [random|(named NAMEPART)|(from ARTISTPART)|(of ALBUMPART)|GENRE]*.
something and sth. mean "play 1 file or show all if multiple"
random and some mean "play a random one of the ones found"
everything means "play all that matches"
How to store references to directory-contexts in filesesktop-sharing?
Create a file with a content like:
#
java.naming.factory.object=jaugment2.directory.FileObjectFactory
java.naming.factory.initial=com.sun.jndi.fscontext.RefFSContextFactory
java.naming.provider.url=file:///var
Beware that spaces at the end of lines are not ignored!
The syntax is: {environment-property-name}+"="+{value}+"\n"
JNDI already has contexts for LDAP, DNS, file-systems, CORBA-naming, RMI-registry,... .
This project develops contexts for dictionaries, phone-books, cook-books, text-archieves,...
What Well-Known-Interfaces(JINI) do you specify
There are others that you can find in each service's package by looking at the {SericeName}IF.java file.
More to be added soon!
What license do you use?
The Source itself is distributed under the terms of the LGPL
with the extension, that all developers must stay named, so you cannot
build a commercial application without telling where your code comes from!
Some small changes were needed because LGPLs definition of a library does
not really fit. But it's the same.
However, there are some libraries used that are not part of the distribution
but only the convenience-package that have different licenses.
See Doc/LICENSE of the base-distribution for more details.
We do incorporate code from other projects. If that code is distributed
under the terms of different licenses and we are not permitted to incorporate
it even in binary-form we either try to get a permission to use it or use
it exclusively in applications, that only use our infrastructure but are
not part of the base-distribution and are distributed under different licenses.
How does it work?
(this quote is a bit outdated but still acurate)
first:
jAugment is not a single application.
It is a set of applications collaborating using JINI
(and optionally some other means of communication
like CORBA and SOAP).
There are 3 standart-user-interfaces that are basically service-
browsers. Their job is to look for services and
a)
execute one (of multiple or zero) representation of the ones
that they can represent. and
b)
help the user administrating the services providing known
administrative interfaces.
c)
UIs too provide a means of starting-up services. This is done
via the class UIManagerBean parsing the config-file and
instanciating any services found with an "execute"-entry.
Then of cause whe have the services.
A service is a piece of code being executed somewhere.
A service has a proxy-class being downloaded to the UI
(or another service using this one).
Atached to the UI are entries.
Some entries are user-interfaces.
The proxy provides an administrator-object that allowes
(among other things like saying where the service should
store it's persistent state) adding and removing entries.
This design has a few implications:
Another user can write a new representation for a service.
A service can be represented in multiple UIs at the same time.
A service can be used by multiple users at the same time.
New UIs and representations for strange devices can be added
very easily and without modifiing existing code or endagering
the working-state of the system.
Services can be executed on another system in a network
(this makes sense for e.g. a WML-browser as you cannot use
it offline and it will be found dynamically once you connect to
the network).
Services and applications have a very easy time using, extending
and integrating into each other so you get a mesh of code collaborating
and extending each others functionality whereever possible.
And finally:
It is very easy to allow people meeting online to share new applications,
additions and bug-fixes as they can download the code from each
other (if allowing to do that, we do have access-control after all) and
even give each-other a guided-tour using remote-desktop-sharing.