[Android Apps and Games] AngeloMollame:
Hi guys. A friend of mine (realgpp, developer of CPU Spy Plus) suggested me to give more visibility to my app, so I decided to open a thread on this forum.

Introduction

GammaSync is an application for remote file synchronization between a client and a server.

The GammaSync Android client can be downloaded from the Play Store (unfortunately, I still am not enabled to post URLs in my posts... just search for GammaSync on the PlayStore).

A GammaSync Java server (more about it later) can run on any Windows/Linux/Mac system. The link to the GammaSync Java server can be found on the description page of GammaSync on the Play Store.

Unlike other file synchronization applications (Dropbox, SugarSync, Google Drive), GammaSync does not rely on an external cloud storage service, so the amount of data that you can synchronize is unlimited. Direct connections are established between the client and the server.

This means that the machine on which your GammaSync server is running (it may be a PC, Mac, Raspberry Pi, whatever) must be accessible to the GammaSync client, by either:

being in the same LAN/Wifi network

or having a public IP address (services like No-IP let you register on public IP addresses)

Links

The basic idea behind GammaSync is to create links between local directories (on the client) and remote directories (on the server). You can then launch synchronizations for each link, or for all of them together. When the synchronization is complete, the local directory will contain the same files as the remote directory.

Server configuration

Download the GammaSync Java server. The server requires no installation: just extract the contents of the ZIP somewhere.

The only thing you need to configure on the server is the list of accessible directories: these are going to be the only directories accessible to GammaSync clients. You must edit the accessibleDirectories.txt file to change the list of accessible directories. Just write the directory paths, one per line. Example:

G:/TV Shows/Prison Break

G:/TV Shows/The Walking Dead​

Then, just start your server:

on Windows

: launch start_server.bat

on Mac/Linux

: launch start_server.sh

A shell should appear, and the server should print something like this:

GammaSync server started.

Addresses:

192.168.1.200​

Protocol: 1.5

Accessible directories:

G:/TV Shows/Prison Break

G:/TV Shows/The Walking Dead​

Waiting for clients...​

If you accidentally start the GammaSync server when an instance is already running, you get this error:

Port number is already used. You may already have a running instance of the GammaSync server.​

The first time you use the GammaSync Android client, you must specify the IP address of the GammaSync server you want to connect to. To do this, go to the menu, then Settings > GammaSync server. This setting needs to be changed whenever your server changes its IP address, so you might prefer using a static IP address in your server's network settings.

Add links

You can add links by selecting Add link from the menu. Each link is defined as:

a local directory: the path of the directory in your Android device

a remote directory: the path of the directory (on your server) that you want to target

a file matching policy (more on this later)

If the GammaSync server is reachable when you are adding the link, the remote directory selection is set to auto mode by default, and you can choose the desired remote directory from the list of accessible directories declared by the server. You can switch to manual mode to modify the remote directory path manually, for example if you want to target a specific subdirectory, or a directory which is not yet registered as accessible on the server.

The local directory selection is set to auto mode too by default, and gives you a suggested local directory path for the remote directory you have selected. The root of these suggested local directory paths can be changed on Settings > Default local directory root.

Synchronization

Once the server is running and reachable, you can synchronize a link by just clicking on Sync. You will get a notification once the synchronization is complete. You can also synchronize all links at once by selecting Sync all from the menu.

If you don't want to synchronize the entire content of a remote directory, you can use selective synchronization. Instead of transferring all the necessary files directly, the GammaSync server will first send a list of the files that need to be transferred, and you can select the files that you want to receive. You can also launch selective synchronizatin on all links at once by selecting Selective-sync all from the menu.

File matching policies

File matching policies are rules that determine when a local file (on the client) is considered equal to a remote file (on the server), and so will not need to be re-transferred. These rules are based on:

File size. Two identical files of course have the same size (in bytes).

File hash. The hash of a file is a fingerprint based on its content. There is a very small probability that two different files have the same hash. Hashes take time to calculate, because the file content must be read.

The file matching policies currently supported by GammaSync are:

Complete Hash. Two files are considered equal if:

their sizes are the same

and the hashes over their entire binary content are the same

This policy is the most accurate, but it is also the slowest, because calculating the hash over the entire binary content takes time. Consider using this policy only if you really need to check for differences in the entire content of the file. Otherwise, consider using Partial Hash.

Partial Hash. The two files are considered equal if:

their sizes are the same

and the hashes over their first X bytes are the same

This X parameter is defined as hash coverage. This policy is much faster than Complete Hash, especially for big files. Consider using this policy for directories containing files that, when different, are also different in their first X bytes. For example, you can usually see that two multimedia files are different by just reading their first 1 MB.

Security issues

All communication between client and server is currently

not encrypted

, and the server currently performs

no authentication

of the client. If you are running your GammaSync server on a non-trusted network, you might be exposing sensible data to unauthorized clients and/or sniffers in your network.

Client authentication and communication encryption will be added in future versions of GammaSync. Until then, do not expose sensible data in your accessible directories (or do it at your own risk).

Future features

Future versions of GammaSync will feature:

secure, encrypted communication

authentication through Google account

bidirectional synchronization

file matching policy based on the file's last modified date

custom limits on the size of the local directories

Feedback

Feel free to contact me at angelo.mollame@gmail.com to:

receive help with technical problems

notify bugs

request new features

suggest improvements

pretty much anything you want to tell me about the app

I am very interested in your feedback, and more than willing to give you my support. I hope you enjoy the app :)