iptnet / ipt_connect Goto Github PK
View Code? Open in Web Editor NEWLicense: GNU General Public License v3.0
License: GNU General Public License v3.0
Showing the final grades (with and without bonuses) in the PF overall display
cf. http://connect.iptnet.info/FPT2017/teams/ENS%20Ulm/
Should show :
"X a une moyenne de Y (sans coefficients) et a apporté Z points nets à l'équipe (avec coefficients)"
For building challenge tactics, it would be extremely useful to have a special page where one can select two teams (opponent and reporter) and see, what tasks are available for the challenge, and what tasks have been already reported/opposed/reviewed by each of the two teams before.
Firstly, it would be useful for the fight chairmen; moreover, some teams are "building the tactics" before every fight. It means, that the team calculates, which problems can it challenge each of its adversaries to. Now his part of tactics is usually calculated by hand, i.e. by looking through all pages for all fights, but... our tournament is about Physics, not about carefully striking off the numbers on a sheet of paper?
As voted by the IOC at the beginning of the tournament:
"The first team of the ranking goes to the FInal
The 2th-7th team enter 1 semi-final. : 2, 5, 6 and 3, 4, 7.
The 2 teams that has the most points goe to the final."
@vbonvin do you think you could implement it before tomorrow? :s
Add the Final round
Add the bonuspoints
Modify the vetos and malus
Modify the grades rejections
The code now handles a given number of Round per PF, and a number of PF per tournament, with grades going from 0 to 10 etc...
It would be good to define a parameter files with all these numerical values, so that anyone can change them without tweaking the code.
It's not an urgent issue - can be done after the FPT2017
(splitting #32)
There should be a summary table for each fight (probably at page like http://connect.iptnet.info/IPT2018/physics_fights/1/ below each table) to simplify controlling and checking the scores. Something like that:
France 22.50 13.00 7.75 43.25 +1 44.25
Ukraine 24.00 12.50 8.25 44.75 +2 46.75
Bolivia 18.00 12.00 8.00 38.00 +0 38.00
Actual saves of the database are currently done manually. We need a function that automatically save it every once in a while
Add the option to switch on/off semi finals. See IPT2018 add for a starting point
Je pense qu'il faudrait qu'on se mette d'accord une bonne fois pour toutes sur la différence entre les points d'un participant et sa moyenne.
Pour moi, le plus logique c'est :
-un participant a une moyenne qui correspond a la note moyenne de toutes ses prestations, sans jamais prendre en compte de coefficients. Ça donne donc un nombre entre 0 et 10.
-un participant a un certain nombre de points, qui correspond à la somme de toutes ses notes pondérées par les coeff correspondants aux rôles qu'il a eu. De cette façon, le nombre de points d'une équipe est simplement la somme du nombre de points de chacun des membres de l'équipe.
Donc je pense qu'il y a actuellement un problème de nom pour la classe Participant.points (qui ne prend pas en compte les coeffs).
Les deux infos sont intéressantes et devraient être affichées sur les pages des équipes et des participants.
Peut-on envisager de modifier sans tout casser ? :s
Hi. I'm trying to run your program, but it works with IPT2018 only. When i open IPT2017 or IPT2016 i get error: no such table: IPT201x_team
. Could you give me any database for testing or past years databases? I'll try to fix some issues and PR it.
There should be at least 2 types of accounts which can edit the marks:
Is that so now? If no, the separation should be implemented. If ipt-coonect
will be used in other tournaments, then it's important to protect the data from occasional edits.
See http://connect.iptnet.info/FPT2017/ranking
"78.0166666667"
Some national selections would like to keep their results private (especially the tactical rejections ;-) ).
So, we need a private mode when only authorized users can view fight details. I think that showing only the total ranking and fight summaries (#58) for anonymous users will be OK.
At page http://connect.iptnet.info/IPT2017/problems the problems are sorted by name, not by number, so the order is:
1. Handy glider
10. Light-driven vehicle
...
17. Magnetic fissioning of droplets
2. Too many magnets
And it probably should be different :)
As there will be license and documentation, I could try to fix it (it's just a Javascript issue), but I need guidelines on how to build the application and launch it.
For example: it shouldn't be possible to add grades without a problem presented.
A way to do this would be to have a two step process to add rounds, with two different pages. The first page would be to save the round parameters (number, room, teams), and the second page would be used to enter the problem presented, vetos, grades.
After resolving #39, it would be very useful to add a "Fork me on GitHub" ribbon like this or this or other link to sources (i.e. small-font note in the very bottom) to let others know that the site is open source. To be honest, I knew it out by just googling "iptnet github", but the reasons for adding the note are the same as for #39.
Grade from the public, like in Eurovision
(splitting #32)
When the first round of any fight is created and the roles in the first round are determined, then the roles of the teams in the rest rounds are also determined. The only problem is that it is not specified in the round interface, is the fight 3-team or 4-team, so manual creation of first round and automated creation of the rest doesn't seem to be a good solution. I suggest making a Fight Creation Wizard instead: an interface where the number of teams can be selected and then table is filled manually, and all the rounds are created automatically. The role matrix is:
for 3-team fight:
| Round 1 | Round 2 | Round 3 |
--------------|---------|---------|---------|
select team 1 | Rep. | Rev. | Opp. |
--------------|---------|---------|---------|
select team 2 | Opp. | Rep. | Rev. |
--------------|---------|---------|---------|
select team 3 | Rev. | Opp. | Rep. |
--------------|---------|---------|---------|
for 4-team fight:
| Round 1 | Round 2 | Round 3 | Round 4 |
-------------------------------------------------------
select team 1 | Rep. | Obs. | Rev. | Opp. |
-------------------------------------------------------
select team 2 | Opp. | Rep. | Obs. | Rev. |
-------------------------------------------------------
select team 3 | Rev. | Opp. | Rep. | Obs. |
-------------------------------------------------------
(please correct me if I am wrong)
Moreover, the list of jurys should be copied from first round to all the rest rounds. Speaking more precisely, jury list should be the same for all the rounds inside one fight.
Greetings from Russia!
Great respect for opening the source code! You've done certainly a brilliant work.
But to be fully able to use your system's forks to organize local tournaments and other tournaments, such as YIPT (city stages of which I helped to organise many times), we need a license provided by you.
I highly encourage you to use GNU GPLv3 in order to allow everyone to use your source code and in order to forbid anyone to build close-sourced systems basing on your code.
Stating the license will help to organise any kinds of tournaments worldwide and make the tournament movement more popular.
ipt_connect
provides a very important service for international events. So, it would be great to have an automated testing system (something like jasmine
or QUnit
) to make sure that all the point and grade are calculated properly (basing on the tournaments that have already finished).
Or, if such a system already exists, it would be useful to have guidelines on running it :)
It may seems to be a boring test, but we want to be sure that the two tournaments do not overlap. They shouldn't but we better be sure.
Note that playground.py can be used to fill rapidly the database with fake data.
It would be extremely useful to generate diplomas automatically with given template. Now organising commitees of some tournaments are already doing this by programs, but that programs are self-written and inconsitent.
For example, while organizing Voroneh Local IYPT, we made a *.fodt
(LibreOffice unpacked XML) template, a plaintext file with participants' data and then filled the tmplate with a self-written program. It seems to be more useful than filling every diploma manually, but less useful than having such a system as a part of ipt_connect
. Note that (at least in Russian) there is a slight difference in diplomas given to males and females (in verbs and adjectives).
Moreover, it should be great to create diplomas for best reporter/opponent/reviewer automatically.
If we spend 10 hours now and therefore save 1 hour between the last fight and the closing ceremony, it's worth of the time.
(splitting #32)
Rules state that one participant can not take the floor more than two times during the same fight. In some other tournaments the restriction is stronger. It can be 'once a fight' or even 'not more than three times during all the tournament' (these restrictions are useful in preliminary tournament stages, like Voronezh Christmas Tree Tournament, which are hold more for gathering experience than for challenging; usually there is shorter problem list of 10-12 ones). So, forbidden participants - if there are some - should be listed as well as forbidden problems are listed now. The default restriction is 'not more than twice during a fight'.
And it could be implemented without #53, but in that case implementing #53 will cause changes in code implementing this feature.
(splitting #32)
The rules allow to report a problem using two team members. They are sometimes called both reporters, sometimes a reporter and a coreporter, and sometimes both coreporters. It will be OK if they will be called Reporter 1
and Reporter 2
as well.
The fact that the report is presented by two people does not affect the resulting score. That score is calculated in the same way as for one reporter.
So, in interface like this: http://127.0.0.1:8000/admin/IPTdev/round/83/change/ there should be an optional field Coreporter
or Reporter 2
near existing Reporter
.
There should be no additional score fields for the coreporter.
I'm not sure how should the quantity of points gathered be counted for coreporters (like that: http://127.0.0.1:8000/IPTdev/teams/Croatia/ ) be displayed. There are two possible ways:
a) To divide the gathered point between the coreporters
b) To display full score for every coreporter.
Way (b) is rather convoluting, because then the sum of scores would not be equal to team score.
From @Vovcick:
Possible improvements:
Add the possibility to have two reporters
To add forbidden participants together with forbidden problems (not possible without 1)
To have created automatically rounds 2,3 (4) after creating the first one.
To improve fight stats in order to simplify control (just to have table of marks for all the rounds in a fight and bonuses together)
France 22.50 13.00 7.75 43.25 +1 44.25
Ukraine 24.00 12.50 8.25 44.75 +2 46.75
Bolivia 18.00 12.00 8.00 38.00 +0 38.00
About pull request #4
The tournament name shouldn't be hardcoded in the templates. It should be separated into a settings file along with the quantities of permanent or tactic rejections etc.
There should not be such lines containing IPT 2018
:
https://github.com/vbonvin/ipt_connect/search?q=2018&unscoped_q=2018
Moreover, the full tournament name (if it is used more than once) should be separated too:
https://github.com/vbonvin/ipt_connect/blob/cf176a799c8767eaf8c71a94b1c61977d9424e34/ipt_connect/IPT2018/templates/IPT2018/tournament_overview.html#L13
And finally the "canonical" link to the tournament should be separated to an appropriate setting:
http://2018.iptnet.info
is the current value of this.
These changed would help as to adapt ipt-connect
for test use in Repnoye Tournament School as well as to reduce the amount of code changes required each year.
Note that it's important to have all these settings in separate file with comments on each setting. There is no need to used trans
tag: if one wants the tournament name to be translate, he can use appropriate function directly in the settings file.
If a participant takes the floor twice during the fight
... like this
I'm not sure ae there other temp files or not, but they should be deleted and further gitignored.
Currently, the points of the Final Round are added to the overall ranking. This should not be the case.
When four teams: http://connect.iptnet.info/IPT2018/physics_fights/3/
Currently, pages refreshes only when someone wants to access them, and after a given minimum amount of time (otherwise the cache version is displayed). It is in practice a good thing, but when too many people try to access a cpu-costly page at the same time, the server receives too much requests and crashes.
We need to change this. We need a refresh function that can be called e.g. through the admin panel by pressing a button, and where every pages refresh. When participants access the web site, they only see the pages that are in the cache.
As we are planning to use ipt-connect
for another tournaments, we need to write guidelines and FAQ. Moreover, writing such texts is important for IPT as @vbonvin , unfortunately, probably will be not The Eternal Execom IT.
So, in this issue I'm going to ask my questions and I hope that @vbonvin (and other people who knows) will answer.
How are multiple tournaments handled? Can we use separate databases on the same server for differnet tournaments? How is the code separated?
Who adds the participants to the database? Who has access to edit the participants info?
Ranking page crashes with output
Environment:
Request Method: GET
Request URL: http://connect.iptnet.info/FPT2017/ranking
Django Version: 1.7.11
Python Version: 2.7.9
Installed Applications:
('grappelli',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.humanize',
'IPT2016',
'FPT2017')
Installed Middleware:
('django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware')
Traceback:
File "/usr/lib/python2.7/dist-packages/django/core/handlers/base.py" in get_response
111. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/usr/lib/python2.7/dist-packages/django/utils/decorators.py" in _wrapped_view
105. response = view_func(request, *args, **kwargs)
File "/var/www/kim/kim/FPT2017/views.py" in ranking
323. return render(request, 'FPT2017/ranking.html', {'rankteams': rankteams})
File "/usr/lib/python2.7/dist-packages/django/shortcuts.py" in render
50. return HttpResponse(loader.render_to_string(*args, **kwargs),
File "/usr/lib/python2.7/dist-packages/django/template/loader.py" in render_to_string
178. return t.render(context_instance)
File "/usr/lib/python2.7/dist-packages/django/template/base.py" in render
148. return self._render(context)
File "/usr/lib/python2.7/dist-packages/django/template/base.py" in _render
142. return self.nodelist.render(context)
File "/usr/lib/python2.7/dist-packages/django/template/base.py" in render
844. bit = self.render_node(node, context)
File "/usr/lib/python2.7/dist-packages/django/template/base.py" in render_node
858. return node.render(context)
File "/usr/lib/python2.7/dist-packages/django/template/loader_tags.py" in render
126. return compiled_parent._render(context)
File "/usr/lib/python2.7/dist-packages/django/template/base.py" in _render
142. return self.nodelist.render(context)
File "/usr/lib/python2.7/dist-packages/django/template/base.py" in render
844. bit = self.render_node(node, context)
File "/usr/lib/python2.7/dist-packages/django/template/base.py" in render_node
858. return node.render(context)
File "/usr/lib/python2.7/dist-packages/django/template/loader_tags.py" in render
65. result = block.nodelist.render(context)
File "/usr/lib/python2.7/dist-packages/django/template/base.py" in render
844. bit = self.render_node(node, context)
File "/usr/lib/python2.7/dist-packages/django/template/base.py" in render_node
858. return node.render(context)
File "/usr/lib/python2.7/dist-packages/django/template/defaulttags.py" in render
208. nodelist.append(node.render(context))
File "/usr/lib/python2.7/dist-packages/django/template/defaulttags.py" in render
312. return nodelist.render(context)
File "/usr/lib/python2.7/dist-packages/django/template/base.py" in render
844. bit = self.render_node(node, context)
File "/usr/lib/python2.7/dist-packages/django/template/base.py" in render_node
858. return node.render(context)
File "/usr/lib/python2.7/dist-packages/django/template/defaulttags.py" in render
458. six.reraise(*exc_info)
File "/usr/lib/python2.7/dist-packages/django/template/defaulttags.py" in render
444. url = reverse(view_name, args=args, kwargs=kwargs, current_app=context.current_app)
File "/usr/lib/python2.7/dist-packages/django/core/urlresolvers.py" in reverse
551. return iri_to_uri(resolver._reverse_with_prefix(view, prefix, *args, **kwargs))
File "/usr/lib/python2.7/dist-packages/django/core/urlresolvers.py" in _reverse_with_prefix
468. (lookup_view_s, args, kwargs, len(patterns), patterns))
Exception Type: NoReverseMatch at /FPT2017/ranking
Exception Value: Reverse for 'team_detail' with arguments '()' and keyword arguments '{u'team_name': u'Universit\xe9 Paris-Sud'}' not found. 1 pattern(s) tried: [u'FPT2017/teams/(?P<team_name>[A-Za-z0-9\\- ]+)/$']
Hello guys,
as briefly discussed during the last IOC meeting, it would be a nice and simple improvement to display at the end of each PF a page where are clearly listed first, second, third (and optionally fourth) position of the fight just concluded, maybe with also the amount of bonus points that each team will receive.
The reasons are straightforward:
It think it can be simply implemented adding a page such as
http://connect.iptnet.info/IPT2018/physics_fights/1/
but for the single room
What do you think?
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.