Matholymp todo list

The following lists ideas for possible changes and improvements to matholymp, both internal and user-visible. Many of these ideas are speculative, I may have further ideas not written here about how a change should be implemented and I may not always be sure that a change would be desirable, so it would be a good idea to discuss possible changes with me first before implementing ideas listed here. If you are reading the version of this list in the online documentation for a release, you should also check the current Git version for any changes to the list. See also Contributing to matholymp.

Changes are likely to be a higher priority if they are known to be of use for a specific event that is using or planning to use matholymp. Some entries in this list reflect known areas of variation between different events (so would be necessary or useful if events with that form of variation from what matholymp currently does were to choose to adopt it).

General and global changes

  • Support coordination timetabling (displaying a timetable showing active and pending coordinations; also generating a timetable if desired).
  • Implement better sorting of roles / contestant codes (numerical rather than simply alphabetic) if 10 or more contestants. (Applies to registration system sorting as well as to main matholymp.data sorting.)
  • Handle restricted subsets of possible scores on a problem, where the rules of a competition do not allow all scores from 0 to the maximum.
  • Support awards not algorithmically derived from scores and annotations relating to awards.
  • Support disqualifications (explicitly showing that there was one rather than just removing people and countries).
  • Support name orders other than given-family.
  • Support mononymous people.
  • Support multilingual output support rather than just English.
  • Avoid Y10K problems (throughout, allow more-than-4-digit years).
  • Make all static site and registration system text generated from Python code rather than templates more customisable.
  • Add graphical statistics of results and individual and country performance over time.
  • Display (and include in CSV files) also ranks limited to official countries and contestants, and support distinguishing them in tables by using different CSS styles.
  • Support gender as optionally public information (generally or for contestants).
  • Allow SVG images of flags and generate PNG automatically for LaTeX inclusion.
  • Allow for a global configuration file rather than separate files for each part of the system; also allow scripts to read multiple configuration files (shared and non-shared).
  • Add web interfaces for more things currently done on command line.
  • Don’t hardcode en_GB as locale for collation.
  • Add Python 3 support in Sphinx document generation (may work, not tested).
  • Include Python API documentation in generated documentation.
  • Add automated testing for error cases in scripts.
  • Consistently pass ids to file_url_to_local() as integers, not sometimes integers (document generation) and sometimes strings (mo-static-import).
  • Make capitalization of exception messages consistent.
  • Take advantage of missing CSV entries being output as '' by Python by default to simplify code.
  • Use more specific exception classes rather than ValueError etc. everywhere.
  • Review code style against the current version of PEP 8 and fix or update style accordingly. One specific point: the code currently follows an older version of PEP 8 that said to break lines after binary operators, but the more recent recommendation is to break lines before binary operators.

Static site

  • Allow CSV files to specify event short and long names, and the number of contestants for ranking, so those can vary from year to year.
  • Support not showing the host country / city if always the same.
  • Support (in matholymp rather than through hardcoding redirects in web server configuration) merging people; removing people (if later determined not to have been there, etc.); incomplete scores or names information for old events. E.g., add a Redirect Person Numbers column in people.csv plus allowing Annual URL to be a comma-separated list, together with mo-static-upgrade support, tests and documentation.
  • Add a general index of all problem papers for all years.
  • Support a host country that did not previously take part (e.g., when a planned host splits up, or for a completely new event), and generally ensure the site looks sensible when there are no past events.
  • Make mo-static-generate support running a command to postprocess its ouput, or commands to postprocess and push to production.
  • Make mo-static-import ignore excess data (e.g., from having the full version of people.csv instead of the public version) rather than giving errors for it.
  • Make mo-static-import support downloading all data itself (including medal boundaries, via the medal_boundaries_csv action), and setting medal boundaries, so just running mo-static-import with no arguments does everything needed after an event to transfer data to the static site. At present, it can download most data, but not medal boundaries, and requires a directory to be specified explicitly.
  • Make mo-static-import and mo-static-papers-import support automatically running mo-static-generate (possibly with postprocessing commands).

Registration system

  • Update the example config.ini based on that generated by Roundup 1.5.1.
  • Support bulk emails (announcements) to registration contacts.
  • Add downloadable (given administrative access) full version of country list including contact details.
  • Extend automatic checks / warnings for all-uppercase names: also warn on the registration status page.
  • Possibly make person.item.html advise people of the recommended maximum file size for photos (in human-friendly form rather than a raw number of bytes). File extension and contents should also be checked to agree with MIME type. Apply checks also to flags and photos reused from previous years, but quietly don’t reuse in that case if format and extension mismatch.
  • Add more automation for rotating photos server-side.
  • Restrict access to retired files, similar to the restrictions on access to retired person and country records.
  • Support (staff only?) uploading a photo that appears on name badges but not public on the site.
  • Add user interface for removing a language, replacing all requests for it by requests for a given other language.
  • In the registration system, show more past participation information rather than just a link.
  • Generate automatic suggestions of possible past participation links where same name and same country or staff.
  • Support for registration contact to view room allocations for their country and people sharing rooms with them.
  • Support entering accommodation preferences / requests.
  • Support for automatic room allocation based on information about the capacities of available rooms and which rooms should have people in which roles.
  • Support upload of sound files with pronunciation of participant names.
  • Support other registration information (e.g., passport scan) where useful.
  • Use database to describe maximum / expected number of people in a given role from a country rather than hardcoding.
  • Use database to describe other role properties rather than hardcoding based on names (also applies to some other things, e.g., document generation). This includes at least contestant number, whether should have phone number, which badge background to use. (Need to pass some information through to CSV files so registration status generation can work from those.)
  • Allow other options for which roles are (initially) expected to have phone numbers instead of just participants guiding countries; this also affects the explanatory text about missing phone numbers. (More complicated if allowed for non-staff participants as well as staff.)
  • Support for sending emails to registration contacts with reminders about missing data, and summaries of present data.
  • Add automation for bulk creation of countries in registration system from command line (or web interface).
  • Support for more than one contact email address for a country.
  • Support bulk upload of other registration details.
  • Support self-registration accounts (that can register a single person in a particular role only, for both staff and normal countries, so people can enter some of their own data).
  • Ensure all tables in the registration system use thead and tbody to facilitate uses involving sortable tables.
  • Support for not publishing scores until the results are final, or for hiding some scores until all are entered or until the results are final, for events wanting such restrictions.
  • Add more registration system sanity checks against mistakes by administrative users (open-ended issue).
  • Support multiple new people being the same person on the static site (e.g., same new person as deputy for multiple countries, such as host country main and B teams).
  • Move more registration system code out of matholymp.roundupreg rather than depending on Roundup interfaces (facilitates code sharing between multiple registration back ends). At least, most of the logic for scaling down photos and maybe most of the caching code.
  • Support automatic suggestions of possible medal boundaries, with information provided about how close those boundaries are to ideal on various metrics.

The following ideas are more speculative.

  • Reduce the differences between static site and registration system CSV files (generally, include more data in registration system files, at least once results complete).
  • Add more sanity checks for past participation information (not allowing multiple countries pointing to same past country, or pointing to past staff countries).
  • Support Unicode sorting of names in the registration system in more cases. The main ones are done, but this theoretically applies to lists of members of many classes that don’t go through matholymp code. Also e.g. “plain” versions of other_roles and guide_for may not have the desired sorting.
  • Add RSS feeds of new registered participants and changes to public participant details (old versions of changed data maybe shouldn’t be public, but could still indicate that something has changed or is new).
  • Add automated testing for registration system code.
  • Add Python 3 support in registration system code (not very useful until Roundup supports Python 3, and may already be ready for Python 3 apart from that).
  • Make registration system code avoid time-of-check / time-of-use race conditions (registering multiple people with the same role from the same country at the same time; creating / editing countries to duplicate country codes at the same time; entering scores for multiple problems for the same country at the same time; conceivably others).
  • Support retiring special countries, as long as this doesn’t affect the special “anonymous” or “admin” users.
  • Support logical role ordering within countries rather than only alphabetical.
  • Add a public list of country contacts. Or a private list for future hosts, or both with support for different contacts on the two lists. Add support for editing contacts that affects future years as well. (More generally, add automation for keeping user account passwords from year to year.)
  • Allow people to enter just time for arrival / departure if on the standard dates.
  • Support entering ranges for scores during coordination, so that medal boundaries can be considered based on such partial information.

Document generation

  • Don’t hardcode English as a language to give to all leaders.
  • Make draft papers say somewhere which draft version they are.
  • Add more thorough testing for mo-document-generate (background and logo PDFs, flags, photos, inclusion of room / phone numbers on badges, actual contents of LaTeX files, escaping of names and accented characters in documents).
  • Add borders round flags on name badges (and website?).
  • Allow labels for contestant desks to show more than two languages.