Giter Site home page Giter Site logo

platforms ICPC Software License pipeline status

Welcome to the ICPC Tools!

The ICPC Tools are a set of tools to support running programming contests. For the latest downloads, please go to the ICPC Tools website.

Each of the ICPC tools can be used individually, or together in any combination. They are all designed to support the REST-based Contest API as defined by the Competitive Learning Initiative (CLI). Some features require extensions to the specification, and those are described here.

These tools were built to support the International Collegiate Programming Contest (ICPC) World Finals and have been used there for many years, but the intention is that they are usable for local and regional contests as well.

The ICPC Tools

Tool Description
Balloon Utility Manages and prints which teams to award a balloon
Contest Data Server (CDS) Single-point URL services for accessing all contest data
Presentation Animated display of scoreboards or other contest data
Presentation Admin Remote administration of multiple presentations (requires the CDS)
Resolver Animated reveal of final contest results
Coach View Ability to remotely see the webcam and desktop of a team
Problem Set Editor Generate/Edit YAML descriptions of problem sets for input to CLICS-compatible Contest Control Systems.
Contest Utilities A variety of useful contest-related utilities: event feed validation, scoreboard comparison, floor map generators, and more!

Contest Control System Compatibility

The ICPC Tools are built to work with any Contest Control System (CCS) that supports the REST-based Contest API.

To be more specific, the only part of the Contest API that is strictly required is the event feed and any file references that the feed refers to. If your CCS correctly supports the event feed, then all of the ICPC Tools will work even if the rest of the API is not implemented. The one exception to this is the CDS' and contest utility support for comparing scoreboards - to compare a scoreboard, the CCS must have one, of course!

The CDS also retains support for the deprecated XML Event Feed, Mirror. If your CCS supports this feed as specified then the tools should still work with a CDS in the middle, albeit with some missing function.

The most popular CCSs that have been tested and successfully used at multiple contests with the ICPC Tools are listed here:

Compatible CCS Mechanism
DOMjudge Contest API
Kattis Contest API
PC^2 XML event feed

Contributing

The ICPC Tools are developed, tested, and maintained by a group of ICPC volunteers. Bug reports, feature requests, and even just knowing what worked or didn't for your contest are always appreciated. Pull requests are also welcome, but if you want to implement a big feature it might be best to first create an issue to discuss it.

To become a committer you must have a history of high quality bug reports, PRs, and be approved by the ICPC Tools team.

Development

Using Eclipse

You can use Eclipse to develop and debug the ICPC Tools. We will add information on how to run and debug later.

Using IntelliJ IDEA

See the IntelliJ IDEA specific documentation.

Using the CDS docker image

A Docker image is provided to run the CDS without having to install it yourself.

Running it

The basic way to run it, is to run

docker run --name cds --rm -it  -p 8080:8080 -p 8443:8443 -e CCS_URL=https://www.domjudge.org/demoweb/api/contests/nwerc18 -e CCS_USER=admin -e CCS_PASSWORD=admin ghcr.io/icpctools/cds:2.2.407

Replace https://www.domjudge.org/demoweb/api/contests/nwerc18 with your CCS contest API URL, CCS_USER with a user with admin privileges to the CCS URL, CCS_PASSWORD with the password for the given user and 2.2.407 with the version of the CDS you want to run.

Now you can access the CDS at https://localhost:8443/.

Note: this will use default credentials for all users, so it is recommended to change them. This can be done using environment variables or overwriting the users.xml file.

Environment variables

  • ADMIN_PASSWORD: the password for the user with admin privileges.
  • PRESADMIN_PASSWORD: the password for the user with presentation admin privileges.
  • BLUE_PASSWORD: the password for the user with blue privileges.
  • BALLOON_PASSWORD: the password for the user with balloon privileges.
  • PUBLIC_PASSWORD: the password for the user with public privileges.
  • PRESENTATION_PASSWORD: the password for the user with presentation privileges.
  • MYICPC_PASSWORD: the password for the user with MyICPC privileges.
  • LIVE_PASSWORD: the password for the user with Live privileges.
  • CCS_URL: the URL to a CCS contest.
  • CCS_USER: the user that has admin access to CCS_URL.
  • CCS_PASSWORD: the password for CCS_USER.

Overwriting config files

  • If you want to supply your own users.xml, mount a file at /opt/wlp/usr/servers/cds/users.xml.
  • If you want to supply your own cdsConfig.xml, mount a file at /opt/wlp/usr/servers/cds/config/cdsConfig.xml.

Contest data directory

The contest data directory is located at /contest so you can mount that as a volume if you want to store the data or use team photos, organization logos, banners or any other files.

License

All of the tools are provided under the included license and are "Free as in Beer". We welcome you to use and enjoy them, but if you ever run into anyone who has contributed to them - Tim, John, Nicky, Sam, Troy, etc. we would greatly appreciate it if you'd buy us a beer, a stroopwafel, or some other suitable token!

All ICPC Tools are Copyright © by the ICPC.

ICPC Tools's Projects

api-interactor icon api-interactor

A Go library for interacting with the Contest API (https://ccs-specs.icpc.io/master/contest_api).

cli icon cli

A command line utility for teams to compete in any contest using a CCS supporting the Contest API (https://ccs-specs.icpc.io/master/contest_api).

icpctools icon icpctools

The ICPC Tools - presentations, resolver, CDS, and others.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.