This is the Hara open source project homepage. It is hosted at
Hara is a J2ME over-the-air diff utility
allowing software and data on mobile handsets and PDAs to be updated
via a series of pushed diff streams. There are in fact two utilities,
one to generate the diff by comparing two files of information and
creating a diff, and a second to apply the diff on the wireless device.
The second utility comes in a number of
flavours to accommodate differences in mobile phone technology. Hara
will update a file on one device to be identical to a file on another
device. It is assumed that the two devices are connected by a
low-bandwidth high-latency bi-directional communications link.
Hara identifies parts of the source file
that are identical to some part of the destination file, and forms a
list of block level differences and instructions that allow the
differences to be replaced in the source file. Hara works best when the
files are similar, but will also function correctly and reasonably
efficiently when the files are quite different.
<>This project is based on the RSync work at
http://rsync.samba.org/. However it extends RSync in that the diff is
generated by comparing two files in advance on a server; all the code
is Java based and highly portable; the utility that applies the diff
has three incarnations J2ME, Symbian and “Windows Mobile
OS” allowing it to work with most mobile phones in use today; a
succession of diffs may be applied to get a source file from version n
to version n+i. Hara diffs conform to the standard for diff file
technology: the Generic Diff Format (GDIFF),
Currently Hara manifests as three
executables: the first generates the difference between a
series of files known as a
release; the second manipulates the series of file differences into one
diff stream; the third is used to apply the diff. It is the intension
that the first two parts of the process will be merged into a single
There are currently three intended
targets for the Hara client: standard Java, J2ME and the Microsoft
How to Build
Download the Hara src module
from the Hara CVS respository.
Navigate to the src/java directory and run the BuildJava cmd file
(ensure the SetJavaEnv cmd file points to your java sdk installation
If your build is successful then you will find a bin directory below
src/java. This directory contains subdirectories and java class
How to Execute a Simple Test
To run a simple test create a
simple directory test1.
Add some files to test1 and then make a second directory test2 by
copying the contents of test1.
Make some changes to the files in the test2 directory: add some lines,
change some lines, delete some lines.
You are then going to create a diff stream that represents the changes
between test1 and test2. We are then going to apply the changes
to test1 and prove we end up with the contents just as they appear in
Run the RunDeltaGenerator cmd file followed by the ZipFileGenerator cmd
file to create the diff stream.
> rundeltagenerator fullpathtotest1
> zipfilegenerator fullpathtotest2
Run the UpdateRelease cmd file to apply the diff stream to the contents
> copy the myrelease.zip generated above to test1 directory
> updaterelease fullpathtotest1 myrelease.zip
Examine the files in test1, they should now been exactly the same as
those in test2.