Skip to main content

Carrom tournaments management

Project description

This project contains some tools that make it easier the organization of a championship of Carrom tournaments using a variant of the Swiss system, or even everyone against everyone events.

The main component is a Pyramid application serving two distinct user interfaces:

  1. A very light, HTML only, read only view of the whole database, where you can actually browse thru the clubs, championships, tourneys, players and ratings. You can see it in action on the public SoL instance at http://sol3.arstecnica.it/lit/.

  2. A complete ExtJS based desktop-like application, that exposes all the functionalities described below in an easy to manage interface, that you can try out visiting http://sol3.arstecnica.it/.

Goals

These are the key points:

  1. Multilingual application

    Scarry spoke only Italian, because the i18n mechanism in Delphi (and in general under Windows) sucks. Most of the code was written and commented in Italian too, and that made it very difficult to get foreign contributions

  2. Multiuser

    There is a super user (named “admin” by default) that can do everything, in particular assign a nickname and a password to any player, who can then log in and manage her own tournaments, but can’t change information owned by other users

  3. Real database

    Scarry used Paradox tables, but we are in the third millennium, now: SoL uses a real, even if simple and light, SQL database under its skin

  4. Easy to use

    The application is usually driven by computer-illiterated guys, so little to no surprises

  5. Easy to deploy

    Gods know how many hours went in building f*cking installers with BDE goodies

  6. Bring back the fun

    Programming in Python is just that, since the beginning

High level description

The application implements the following features:

  • basic tables editing, like adding a new player, opening a new championship, manually tweaking the scores, and so on;

  • handle a single tourney

    1. compose a list of competitors: usually this is just a single player, but there are two people in doubles, or more (teams)

    2. set up the first round, made up of matches, each pairing two distinct competitors: if the tournament is associated with a rating this considers the Glicko2 rate of each player, otherwise uses a random pairing; either way, the tournament secretary is able to manually change the combinations

    3. print the game sheets, where the player will write the scores

    4. possibly show a countdown, to alert the end of the game

    5. insert the score of each match

    6. compute the new ranking

    7. print the current ranking

    8. possibly offer a way to withdraw some competitors, or to add a new competitor

    9. compute the next round

    10. repeat steps c. thru i. usually up to seven rounds

    11. possibly offer a way to go back, delete last round, correct a score and repeat

    12. if required, play up to three final rounds between the first two competitors

    13. recompute the ranking, assigning prizes

    14. update the rating the tournament is associated to

  • handle a championship of tourneys

    • each tourney is associated to one championship

    • print the championship ranking

  • data exchange, to import/export whole tourneys in a portable way

Installation and Setup

The very first requirement to install an instance of SoL on your own machine is getting Python 3.5 or better[1]. This step obviously depends on the operating system you are using: on most GNU/Linux distributions it is already available[2], for example on Debian and derivatives like Ubuntu the following command will do the task:

$ apt-get install python3

If instead you are using M$-Windows, you should select the right installer from the downloads page on http://www.python.org/.

Another recommended, although optional, add-on is the DejaVu fonts set, to support a rather wide range of glyphs when producing the PDFs printouts. As usual, on GNU/Linux it’s a matter of executing the following command

$ apt-get install fonts-dejavu

or equivalent for your distribution, while on M$-Windows you need to download them and extract the archive in the right location which usually is C:\Windows\Fonts.

Easiest way, SoLista

The easiest way is using SoLista, a buildout configuration that will perform most of the needed steps with a few clicks: this is particularly indicated if you are not fluent with the command line interface of your operating system.

Follow the hopefully clear enough steps in SoLista’s README.

Pre-built Docker image

Another option, if you have a 64bit computer, is to run the pre-built Docker image.

Requirements

First of all, you must enable the hardware virtualization in the BIOS of your computer.

Then you can proceed to install the Docker Engine for your particular operating system (that is, GNU/Linux, Windows or Mac OS X).

After you have tested the install in the Docker Quickstart terminal (for example as depicted here), run the following command in the same window:

docker run -d -p 80:6996 --name sol amarsanakal/solista

This will start the software and is now accessible on port 80. You can access it as http://<ip-address>.

The <ip-address> is the ip address of the docker machine running on your PC. This would have been displayed to you when you launched the Docker Quickstart terminal. You can check it anytime by running:

docker-machine ls

the ip address is shown under the URL column. Use that without the port number shown there. See https://docs.docker.com/machine/get-started/ for more details.

Developer’s playground

If you are a developer and want to play with Docker, you can checkout SoL sources and

  • build an image with make docker-build

  • change the admin credentials with make docker-change-admin

  • start SoL within a Docker container with make docker-start, then visit http://localhost:6996/ as usual

See Makefile.docker for other related targets.

Roadmap

  1. Provide some Unix shell scripts and Windows batch files to make the end users happier

  2. Complete this section

  3. Figure out how to build a new image on hub.docker.com whenever a new SoL release happens

The good old way

  1. Install SoL using pip:

    pip install SoL

    that will download the latest version of SoL from PyPI and all its dependencies as well

  2. Install ExtJS 4.2.1:

    python3 -m metapensiero.extjs.desktop
  3. Create a standard config file:

    soladmin create-config config.ini

    and edit it as appropriate; you can also directly specify the name and the password of the super user (by default the name is admin and the password will be asked interactively):

    soladmin create-config --admin differentone --password str4nge
  4. Setup the database:

    soladmin initialize-db config.ini
  5. Load official data:

    soladmin restore config.ini
  6. Run the application server:

    pserve config.ini
  7. Enjoy!

    firefox http://localhost:6996/

    or, for poor Window$ users or just because using Python makes you happier:

    python -m webbrowser http://localhost:6996/

Development

The complete sources are available on Bitbucket and can be downloaded with the following command:

git clone https://bitbucket.org/lele/sol

I recommend using a virtual environment to keep you isolated from the system packages:

python3 -m venv env
source env/bin/activate

After that, you can setup a development environment by executing the command:

pip install -r requirements/development.txt

You must then install the required ExtJS 4 sources executing:

python -m metapensiero.extjs.desktop --src

If you are a developer, you are encouraged to create your own fork of the software and possibly open a pull request: I will happily merge your changes!

You can run the test suite with either

make test

or

python setup.py nosetests

I18N / L10N

Currently SoL is translated in English[3], French and Italian. If you know other languages and want to contribute, the easiest way to create a new translation is to create an account on the Weblate site and follow its translators guide.

Translation status

Otherwise if like me you prefer using more traditional tools[4] you can extract a copy of the sources and operate directly on the local catalogs under the directory src/sol/locale.

To extract translatable messages use the following command:

make update-catalogs

To check your work you must compile them with:

make compile-catalogs

Feedback and support

If you run in troubles, or want to suggest something, or simply a desire of saying “Thank you” raises up, feel free to contact me via email as lele at metapensiero dot it.

Consider also joining the dedicated mailing list where you can get in contact with other users of the application. There is also an issues tracker where you can open a new tickets about bugs or enhancements.


Changes

3.39 (2017-03-16)

  • Re-release to workaround a buildout issue with non-normalized requirements

3.38 (2017-03-16)

  • Do not allow deletion of players who are responsible of something

  • Prevent silly cycle between championships

  • Fix translation of player’s name in the matches panel

3.37 (2016-08-03)

  • Tweak the layout of the “boards” view to make it more readable expecially for team events

  • Allow manual re-pairing of any round, not just the first

  • Prevent insertion of “empty” names and descriptions

3.36 (2016-06-21)

  • Allow removal of the player’s nickname (reported by Daniele)

  • Fix scorecards printout, avoiding final page full of empty scorecards (thanks again to Daniele)

  • Take into account merged players when serving the lit pages to Google

  • New lit page listing players associated to a particular club

3.35 (2016-06-08)

  • The default filter on players subscription now shows only those who played at least one tourney organized by the current club in the last year (see issue 12)

  • Workaround to overly caching behaviour on some browsers

3.34 (2016-05-31)

  • The local IP address of the machine running SoL will be displayed on the console when the instance starts, when possible

  • Print “page X of Y” on all printouts (asked by Daniele)

  • Reduce waste of paper filling the last scorecards printout page with blank cards (asked by Daniele)

3.33 (2016-05-29)

  • Show an hyperlinked QRCode on the header of most printouts that opens the corresponding Lit page

  • When a round is playing, show a link to the countdown on the tourney’s Lit page

3.32 (2016-05-15)

  • Reimplement the clock window with a new pre-countdown, to be shown while preparing the next round (see issue 11)

3.31 (2016-04-26)

  • Re-release due to PyPI fault

3.30 (2016-04-26)

  • New “all” pairing method, to allow playing tournaments with less than eight competitors without occasional show-stoppers

3.29 (2016-04-19)

  • Disallow reorder on the matches panel while user is inserting scores

  • Don’t show competitor’s rate when there is not associated rating

3.28 (2016-04-01)

  • Add a --data-dir option to soladmin create-config to specify a different location of persistent state

  • Recommend Python 3.5

  • Initial&incomplete Docker image setup: needs further documentation and some helper tools

3.27 (2016-03-23)

  • Fix problem that prevented loading SoL 2 dumps containing a tourney associated with old championship

  • In the matches panel, highlight the winning competitor

3.26 (2016-02-16)

  • soladmin create-config and soladmin update-config can change the name and the password of the super user

  • The final badges show the player’s points, bucholz and netscore

3.25 (2015-12-06)

  • Now the admin password can be passed as an option to soladmin create-config

  • Request JSON format backup in soladmin restore (N.B.: this requires that the remote server is at least at version 3.23)

3.24 (2015-12-01)

  • Fix translation glitch

3.23 (2015-12-01)

  • Faster alternative JSON-based dumps and backups, the default is still YAML though

  • Always use the serial pairing method when there are less than eight competitors

3.22 (2015-11-27)

  • Re-release due to PyPI fault

3.21 (2015-11-27)

  • Refresh package dependencies

3.20 (2015-06-07)

  • New menu action to assign ownership of multiple records at once

  • New “owners admin” permission to permit normal users to adjust ownership of everything

3.19 (2015-05-26)

  • Fix URL generation when filtering active players

  • Do not fail badly when trying to merge players while importing data

  • Handle the case of retired players, while recomputing the rating

3.18 (2015-04-04)

  • Handle the “around midnight” case when asking the estimated start time

  • Fix a long standing bug with dictionary-based field editors

3.17 (2015-03-22)

  • Fix the ordering used to compute the next round when delay of top players pairing is disabled

  • Ask the estimated start time when printing the scorecards

  • Quicker interaction with the grid filters when adding players to a tournament

3.16 (2015-02-28)

  • Allow rectification of any round results

  • Fix visualization of notification windows

3.15 (2015-02-20)

  • Fix default values in several places

  • Rectify assignment of highest numbered board to phantom matches

  • Use single click to edit values when entering scores and final bounties

  • Show the actual rank used to compute the next turn

3.14 (2015-01-21)

  • Fix distribution, including the new robots.txt file

3.13 (2015-01-20)

  • Use the OGG format instead of MP3 for the sound files

  • Fix tourney replication

  • Always assign the highest numbered board to phantom matches

3.12 (2014-12-24)

  • Integrate the initial French translation, thanks to Stéphane Cano

  • Fix visibility of buttons after deletion of final round

  • Use “bounty” instead of “final prize”, hopefully reducing confusion

3.11 (2014-12-06)

  • Fix import of championships chain

  • Workaround to an annoying bug in ExtJS 4.2.1 grid TAB handling

  • Fix strange problem with logout quickly followed by a new login (experienced by Elisa)

  • Add missing article related to the Queen to the italian rules (reported by Daniele)

3.10 (2014-11-21)

  • Fix ratings modelization that prevented database dumps

  • Rectify opponents matches Lit page, showing only direct matches

3.9 (2014-11-08)

  • Fix glitch in victories computation in the wins trend chart

3.8 (2014-11-08)

  • Allow to restrict rating usage to a single club

  • Add player’s opponents summaries to the Lit interface

3.7 (2014-10-19)

  • Fix matches panel title, when focusing on a single competitor

  • Properly populate the responsible field when showing duplicated players

  • Disallow merging of not owned players

3.6 (2014-09-13)

  • Raise the pageSize parameter of the Board view to 999

3.5 (2014-09-12)

  • Do not show “my” items shortcuts for the guest user

3.4 (2014-09-11)

  • Fix localization issues related to reloading the translations catalog, when the user’s language is different from the browser’s default

  • Fix ranking printouts, widening the prize column

  • Omit the QRCode after more than three days since the event’s date

  • New actions to easily open tourney’s championship and championship’s club

3.3 (2014-09-10)

  • Add a QRCode on the first page of some printouts, pointing to the “equivalent” Lit page

  • Minor tweaks to the font sizes of the personal badges printout

3.2 (2014-09-07)

  • Filter out future tourneys by default, to avoid confusion

  • Change the “asis” prizing method: it now assigns a decreasing sequence of integer numbers

  • New “centesimal” prizing method: similar to the millesimal, but starting from 100

  • New variant of top level windows, showing “my” items, launched by shortcuts on the desktop

3.1 (2014-09-04)

  • Protect the clock against accidental stops

  • Store the timestamp of the countdown start in the database

  • Reset the filters when showing possibly duplicated players

  • Handle tournament finals, either simple ones or “best of three” matches

  • Parametrize the delay of top players pairing

3.0 (2014-08-31)

  • Tiny fix to the italian translation catalog

  • Final 3.0 release, at last!

Previous changes are here.

Project details


Release history Release notifications | RSS feed

This version

3.39

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

SoL-3.39.tar.gz (5.3 MB view details)

Uploaded Source

Built Distribution

SoL-3.39-py3-none-any.whl (3.8 MB view details)

Uploaded Python 3

File details

Details for the file SoL-3.39.tar.gz.

File metadata

  • Download URL: SoL-3.39.tar.gz
  • Upload date:
  • Size: 5.3 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for SoL-3.39.tar.gz
Algorithm Hash digest
SHA256 b72c229645855e92d6b14bf25abc331b498241b9fe4fac5e15c069a8247daea5
MD5 b483ae1312bd7041e6ba659355694006
BLAKE2b-256 df70d966bcd799bd86bbe28ef38fa3e69a38b835a48153cb60e60f6e61a102ce

See more details on using hashes here.

File details

Details for the file SoL-3.39-py3-none-any.whl.

File metadata

File hashes

Hashes for SoL-3.39-py3-none-any.whl
Algorithm Hash digest
SHA256 47c0cbb2226f6c21304392ac07ce0086745c6e02a4bf7c2f0a550eed9992273d
MD5 bd0242a18cab62e8778863bb0a6cde71
BLAKE2b-256 a7d42b24e7f50195129339adba7021162d1cd5c25015fad97f930f8e0655fa0a

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page