:ipp: i++
= https://github.com/ULYSSIS-KUL/ipp[{ipp}]
image:https://travis-ci.org/ULYSSIS-KUL/ipp.svg?branch=master["Travis CI Build Status", link="https://travis-ci.org/ULYSSIS-KUL/ipp"] image:https://ci.appveyor.com/api/projects/status/m8uv4uxf26g6thue?svg=true["AppVeyor Build Status", link="https://ci.appveyor.com/project/RockinRoel/ipp"] image:https://coveralls.io/repos/ULYSSIS-KUL/ipp/badge.svg["Coverage Status", link="https://coveralls.io/r/ULYSSIS-KUL/ipp"]
{ipp} is a relay run counting system, originally created for the http://24urenloop.be[24 hour run in Leuven].
It is created for relay runs with large teams (e.g. student organisations), spanning a multi-hour period, a full day in case of the 24 hour run. The scores are entirely determined by how many laps each team manages to run. Individual lap times are not relevant for the score.
== Project goals
The goals of {ipp} are to create a system that is:
. Easy to use. The end goal is to make {ipp} just as easy to deploy and manage as, for example, a Wordpress blog. . Fault tolerant: a. Irregularities (e.g. overly long or short laps) should be easily detectable. b. Passings at checkpoints should continue to be recorded, even in case of network failure. c. Multiple checkpoints can be used, where checkpoints can fail without making the lap counting impossible. d. Corrections should be applied where necessary. e. The system can function autonomously, so lack of Internet access does not interfere with the ability to count laps.
== License
{ipp} is distributed under the terms of version 3 of the GNU Affero General Public License. Other versions do not apply.
== Requirements
=== OS
{ipp} is based on Java 8 and Redis. It should work on any system where these are available. This should include Windows, Mac OS X, and of course, Linux. At the 24 hour run, Linux laptops and Raspberry Pis are used.
=== Dependencies
https://github.com/ULYSSIS-KUL/ipp/blob/master/doc/dependencies.adoc[You can find an extensive list of dependencies here.]
Most of the dependencies are handled by http://gradle.org[Gradle], but these aren't:
==== Java SE 8
This is a Java 8 project, so make sure that either your default Java SDK version is set to Java 8, or set Gradle to use Java 8 by creating a file called +gradle.properties+:
==== Git
You probably already have git installed, because you checked this out. This project has a submodule, so if you didn't do a recursive clone, you'll need to perform the following ritual to get started:
git submodule update --init --recursive
The submodules are updated as part of the +updateSubmodules+ task, which is run by default, so you don't need to worry about updating that. Note that this requires +git+ to be in your +PATH+.
==== Redis
This project uses http://redis.io[Redis]. As part of the build process, some integration tests are run with Redis on port +12345+, so make sure that Redis is installed.
In order for Redis to run, +redis-server+ needs to be in your +PATH+, +/usr/bin+, +/usr/sbin+, or +/usr/local/bin+. You can also specify the full path to +redis-server+ in +Processor/test/resources/redispath+.
On Debian, Ubuntu or derivatives, you can install Redis with:
apt-get install redis-server
On Mac OS X, you can use:
brew install redis
On Windows, you can either https://github.com/MSOpenTech/redis[build Redis from source], or https://github.com/ServiceStack/redis-windows[get a binary build here].
TODO: Make the test port configurable, or choose one that's free at random
=== How to build
All of the tests are run automatically, the source compiled and installed with a simple:
./gradlew