Polish Olympiad in Informatics
Polish Olympiad in Informatics is a competitive programming contest for high school pupils run on the order of the Polish ministry responsible for education affairs. There also exists Polish Junior Olympiad in Informatics, its equivalent for primary school students.
The Foundation for Information Technology Development has been running the former contest since 2009 and the junior variant since 2019. In addition, the foundation runs an open contest of similar kind, [Algorithmic Engagements/Algorithmic Skirmishes].
All three contests mentioned consist of multiple stages. The initial stage is conducted online, through an “online judge” platform, where participants submit code solving the contest tasks, and where it is automatically evaluated to determine the score. Then, the highest scoring participants compete in one or two on-site stages, where we sit them down in front of computers we control, disconnected from the internet proper, and have them solve more tasks, also evaluated by the online judge platform.
I joined the technical staff of the Olympiad in February 2018 and stayed until June 2020.
The part of my work most visible to the public was my involvement in organizing the on-site contest stages. This included setting up the network at the site, configuring a special server controlling participants’ access to the online judge and preventing them from external communication, but also dealing with the technical problems they would encounter with computers provided by us.
I was also responsible for monitoring the online judge platform, both its contest-oriented instance, and the training one. The platform itself, SIO2, is open source, based on the Django web framework in Python language. For better or worse, as of July 2023, I continue to hold the 5th place on the list of contributors by number of commits, only overtaken by people who have been involved with the project in its initial years of creation and active development.
Once I understood the software involved fine enough, I started improving the contest running process to make it more bearable for the small team.
One such idea was introducing automation to the creation of Linux system images intended for participants’ computers on-site. Previously, Debian would be manually installed and configured, and then cleaned up and made into an image to be replicated on all computers. I decided to turn the necessary configuration into Debian packages and construct the system image primarily using Hashicorp Packer, with the intent of its output being a ready to test and distribute image.
Another important part of the on-site competitions is the local server for each location. This is also a Linux system, one which cuts off network access for participants while still allowing access to SIO2 through a VPN connection. It also provides some storage space for backing up the source code, and the option to use a printer (some people find it easier to think about printed code instead of staring at the computer screen). Initially, this was a mod_python app, and making changes to it came with a strong sense of dread. I recreated those core capabilities as a Django app, with some additional features. One such feature, automatically generated Ansible inventory, allowed us to easily perform bulk operations to all registered computers. We later published a version of this server software as open source under the name oi-bus.
When the Foundation took over the junior olympiad, I used my familiarity with the Hugo static site generator to prototype template inspired by the big olympiad’s website, and it was accepted as the core of the website of the junior olympiad. I also ported an existing design of the website of Algorithmic Skirmishes to Hugo and it continues to be used this way.