We are looking for expert C++ programmers to complete a backup solution that works on windows, linux and mac. If you can only do one or two of these platforms, that's also ok. There is no GUI so we want to keep OS dependent code to a minimum.
We need a command line interface that works as follows:
[login to view URL] -cmd upload -in local-filename // +additional parameters
[login to view URL] -cmd delete -fileid file1 // +additional parameters
// etc, See below for the exact set.
All functionality related to remote upload/download/compression/encryption will be provided. The main goal of this project is as follows:
1. The files should be divided into 128KB packets and packets that are already uploaded should not be uploaded again. For example, uploading the same file twice should complete very quickly. This requires storing rolling checksim and SHA1 of the uploaded packets locally and dedicating a remote folder for storing the packets.
2. The same library can be used on multiple computers concurrently. To do that we dont want to use locking but an optimistic solution based on creating special files called journals that contain events .
There is a very detailed spec that can be sent upon request.
## Deliverables
Deliverables:
1. a .lib versions
2. a .h
3. an executable for windows, linux and mac
4. documentation
-cmd options are:
upload. This operation allows a user to upload a file to the remote storage. Each uploaded file is automatically assigned a unique id and this unique id is used to access the files. However, to make the associations simpler, program also allows the user to assign a friendly name to the files they uploaded. It is possible to use the same friendly name for multiple remote files. Since the fileids are randomly selected and expected to be universally unique, most of the concurrency issues are eliminated and no locking is necessary.
delete. This operation allows a user to delete an uploaded file by using its unique id. Multiple computers may safely issue to delete the same file at the same time. Deleted files are not immediately deleted but all delete operations are delayed until a purge command is issued or auto_purge command is triggered. This allows download and delete operations to coexist at the same time.
list. This operation allows the user to list all file ids that match a given criteria. This operation allows the user to issue list operations that match a pattern including friendly names, uploaded filenames and individual packets.
fix. In the unlikely event that the local or remote structures become corrupted, program should provide utility functions to find such inconsistencies.
sync. This operation allows the user to download the journal files to local computer
create. This operation allows the user to create a local journal cache that stores the journal files.
purge. This operation allows the user to purge deleted files
compact. This operation allows the user to compact the journal files by eliminating very old entries
settings. This operation allows the user to change various settings in the local journal cache.
jcp. This operation allows the user to change password that encrypts the journal password.
No installer is necessary.
The solution needs to use plain C++ and compiled on windows using visual studio 2003 and 2005. There should be no warnings or error messages. Same program should also compile correctly using gcc (windows/linux).
The developer should be familiar with source control and bug management (preferably svn and mantis).
A regression tester (a batch file is fine) that can be used to test concurrency issues needs to be provided.
1) Complete and fully-functional working program(s) in executable form as well as complete source code of all work done.
2) Deliverables must be in ready-to-run condition, as follows (depending on the nature of the deliverables):
a) For web sites or other server-side deliverables intended to only ever exist in one place in the Buyer's environment--Deliverables must be installed by the Seller in ready-to-run condition in the Buyer's environment.
b) For all others including desktop software or software the buyer intends to distribute: A software installation package that will install the software in ready-to-run condition on the platform(s) specified in this bid request.
3) All deliverables will be considered "work made for hire" under U.S. Copyright law. Buyer will receive exclusive and complete copyrights to all work purchased. (No GPL, GNU, 3rd party components, etc. unless all copyright ramifications are explained AND AGREED TO by the buyer on the site per the coder's Seller Legal Agreement).
## Platform
Windows, Linux, Mac