Key tools and terms…
A basic rundown of what's what, so you can dive into the other documentation more easily.
The components of the project
- Apache: This is the web server technology that acts as the reverse proxy and serves the content. You can serve multiple sites from the same Apache instance. It is configured using the
httpd.conffile which can be found for this project in${GIT_HOME}/configuration/httpd/conf. Sometimes.htaccessfiles are used in a directory to affect the configuration; however, if you have sufficient permissions, try to place these in the main config file. Apache works by using directives, which are commands to control access, security, sources and redirect traffic, to name but a few. Apache is modular and you can view all the modules compiled usinghttpd -l. The extra modules can be configured in conf.d (subdir of the configuration directory). In that directory, you can find the macros used, including those used for archiving. - EC2: This is the Amazon Web Service that hosts the instances that the servers run on. We use load balancers to direct traffic, specifically Application Load Balancers, which routes at the HTTP/S level, making them very powerful. You might also want to read up on security groups, target groups and VPCs (virtual private clouds).
- Expedition Connector: A software package that allows us to receive wind sensor data and forward it on for processing.
- GWT: This is the product that handles the front end. It was originally Python, but we switched because it allowed for one language across the codebase, one editor (Eclipse) and dynamic sites. It is very modular and the details of each module are defined in the
.gwt.xmlfile. Note: I had some trouble getting this working with Eclipse initially. I used a helpful tutorial called Modern GWT, first steps. - Hudson: This is a continuous integration tool, written in Java, that can execute Maven, Ant, Unix and Windows commands. The general community now uses Jenkins and support has stopped.
- MongoDB: A NoSQL database (so there are no tables) that uses a Document model: within each database, you can have multiple collections and within those are documents… Each document has a
_idwhich must be unique. You can access MongoDB from the terminal, using Mongosh, or you can use the GUI Compass. MongoDB scales horizontally by sharding (a bit like partitioning) the documents: this is done using a field or fields to order the documents. We use MongoDB for recovery. Note: As of writing, the pacing of their own tutorials is quite slow and they abstract a lot of detail. - OSGI: A specification for component and module-based programming in Java. Equinox is an implementation of this specification, that we use. There is a MANIFEST.MF for each independent group of classes, known as a bundle, which details the requirements and any exports. These can be added, removed or updated for an application whilst it is running. We use OSGI web bundles which include a
web.xmldescriptor in the target WEB-INF, which can store the static content and any servlets. - RabbitMQ: This is a message-passing service. Note: Their tutorials are great and there seems to be good documentation. Pika Python is good for getting familiar with the concepts.
- Selenium: It is a project that includes the tool we use for automated testing.
- SwissTiming: Provides additional data and world-class timing information, as well as precise mark-rounding data.
- TracTrac: The tracking gear used and the client used to interact with the backend. The Domain Factory maps the TracTrac domain to ours. The client runs a thread for receiving the race course definition, the list of competitors, the raw competitor GPS fixes, the mark positions, start/finish times and the mark-rounding times.
Some basic sailing terminology
- A flight or fleet is a subset of all the competitors. The competitors are broken up into fleets if there are too many or if there are special starting and finishing provisions. On the sapsailing.com leaderboard, the fleets are colour-coded.
- A jibe or gybe is a manoeuvre whereby the boat points downwind (with the wind) during the turn.
- kt is of course knots.
- A mark is any position a boat must pass on a required side.
- A tack is a manoeuvre where the boat turns into the headwind (pointing into the wind) and then through.
- Velocity made good is speed towards or from the wind direction.