This is the Hara open source project homepage.  It is hosted at Logo

Brief Description

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.

More Detail

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

There are currently three intended targets for the Hara client: standard Java, J2ME and the Microsoft mobile platforms.

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

If your build is successful then you will find a bin directory below src/java.  This directory contains subdirectories and java class files.

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

Run the RunDeltaGenerator cmd file followed by the ZipFileGenerator cmd file to create the diff stream.
> rundeltagenerator   fullpathtotest1    fullpathtotest2
> zipfilegenerator   fullpathtotest2

Run the UpdateRelease cmd file to apply the diff stream to the contents of test1.
> copy the generated above to test1 directory
> updaterelease   fullpathtotest1

Examine the files in test1, they should now been exactly the same as those in test2.