On 10/11/07, Klaas van Schelven <kl...@vanschelven.com> wrote:
> Hi Deepak,
>
> I've been triggered by Meir to think about a next step in Tabbie. Quite
> honestly, I was just about bored with Tabbie.... however, I'd reconsider a
> restart (in a new project) under a number of conditions (I would do some
> maintenence on 1.3, and help the Bangkok guys out, but that's it).
>
Well, I understand. Have been through the boredom phase myself with
many projects. All I can say is thanks for resurrecting something that
was quite close to dead anyway :). Tabbie in its current form is still
very usable for a long time.
> A team of at least 3, preferably 5 *active* developers. - preferably
> including the hotshots of Tabbie's current competitors.
>
> Desktop AND Web app. Desktop App - should be one-click install for desktop.
> BP, American Style (Holland too) and Australian (and Asian) style. Possibly
> more.
> Highly pluggable draw algorithms and adjudicator allocation. Included Draws
> should be WUDC, met-before-avoid and a same-uni-avoid at least.
> Technically combining the best of all current apps.
>
> Idea would be to push Tabbie as *the* Tab softwre worldwide, and to have
> some serious joint fun with an enthousiastic team.
>
> Would you be in? Do you know other who would be willing to join the team as
> well?
I would definitely like to contribute. I am an outsider to the
debating community :), so I do not really know anyone who actively
debates/used to debate. I will contact some people in the NTU debating
squad and see if anyone there wants to join the efforts.
Interesting thought about a Desktop App and Web App. I agree that it
will be good to have. I have a few points to make :
* We should keep a client-server model. The server does all the
storage/calculation of draw/ adjudication allocation and uses a
lightweight XML/REST api of some sort to communicate with the client.
This has two advantages:
1. We can build consensus on the platform for reference implementation
for the server. But since it is exposing a web based API there is
flexibility in the future to switch platforms/technologies if needed.
2. The client can be a desktop and/or a web app, and as long as
another implementor can implement a interface to the server side API,
he can use any platform or technology he likes.
SQL SCHEMA
============
I am attaching a SQL schema that I was using with my RoR app. I have
normalized the schema used in Tabbie, and basically got rid of
temporary tables.
The tables are
* universities
* venues
* adjudicators : Belongs to university
* teams : Belongs to university
* speakers : Belongs to team
* draws: contains a status field which can be 'draft', 'final' and
'closed' (after results are entered).
* debates : Belongs to draw and venue. Contains fields og,oo,cg and co
to contain the teams for that debate
* adjudicator_debates : Adjudicators officating in a debate including
a 'type' field to indicate 'Chair', 'Trainee' or 'Panelist'.
* motions
* scores: belongs to debate and speaker. Captures the score in the
most basic form (speaker scores). All the rest of the logic is
implemented at the application level.
There might be a case to break normalisation and include redundant
info about team scores in a separate table.. but I have not reached
that point in my implementaion yet :).
Let me know what you think
Deepak
This does not seem normalized as each draw/debateId has exactly one venue_id.
In gnetab we do not have the concept of debateId
and we use:
CREATE TABLE team_allocation (
round integer NOT NULL,
team integer NOT NULL,
room integer NOT NULL,
"position" character(2) NOT NULL
);
However it may be prefable to use a debateId and have
table debates:
deabteId(auto increment), round,venue
and table team_allocation:
debateId,team,position
in gentab we don't have a status in the allocation table, instead we
use a rounds table
which has a status column:
CREATE TABLE rounds (
round integer NOT NULL,
status integer NOT NULL,
round_type integer NOT NULL
);
We use round status to know if debators/adjudicator have been allocated
if the round has started, if all results have been entered etc.
We can support pairing the next round before all results from the
previous rounds are in,
this is usefull if you want to use speed ballots(no personnal score), or In
smll tournamnets(3 rounds brake to finals) sometimes one does not want
power pair at all
and a draw for all rounds may be computed in advance.
round_type column specifies what drawing algorighm one should use:
power pairing(may want to put several variants),fold or anything else, even
quarter/semi finals etc.
gentab is designed to support internationalization using a message table:
CREATE TABLE messages (
message character varying NOT NULL,
"language" character varying NOT NULL,
string text NOT NULL
);
message&language being the key, and text is what should be displayed.
In order to make entering results simpler and less error prone,
gentab produces adjudicator forms automaticlly, each form has a serial number
so when you get an unordered pile of forms to enter one may type in the
serial number on the top of the page and get an electronic form in the
same layout
as the page he or she is holding. We found this convinient.
I disaprove of breaking normalization in order to simplfy app-layer,
instead I recommend setting up views in the database, and keep al complex
queries in the database and not in the application level.
In gentab we use a system of tables where we have
personn,judge, and debator
when each judge/debator is also a person(hopefully:)). This complicated matters
and I am nor sure it is worth it, but it allows for simplified swinger
allocations.
In gentab a person can be a debator only, an adjudicator only,
a swing debator which may be allocated as an adjudicator as necessary or
an adjudicator whihc may be allocated as swing debator as necessary.
aside from the basic properties for each person we also have a
general person properties table:
CREATE TABLE person_properties (
person integer NOT NULL,
"key" character varying NOT NULL,
value character varying
);
this can be used for anything, such as payment status, crash location or
anything turnamnet related. I believe ESL status is a common enough
feature to merit
its own column in the person/debator table and not be placed in a
generic properties table.
I recommend looking at the databse structure as found in:
http://gentab.cvs.sourceforge.net/gentab/
Me.
In gnetab we do not have the concept of debateId
and we use:
CREATE TABLE team_allocation (
round integer NOT NULL,
team integer NOT NULL,
room integer NOT NULL,
"position" character(2) NOT NULL
);
in gentab we don't have a status in the allocation table, instead we
use a rounds table
which has a status column:
CREATE TABLE rounds (
round integer NOT NULL,
status integer NOT NULL,
round_type integer NOT NULL
);
We use round status to know if debators/adjudicator have been allocated
if the round has started, if all results have been entered etc.
We can support pairing the next round before all results from the
previous rounds are in,
this is usefull if you want to use speed ballots(no personnal score), or In
smll tournamnets(3 rounds brake to finals) sometimes one does not want
power pair at all
and a draw for all rounds may be computed in advance.
round_type column specifies what drawing algorighm one should use:
power pairing(may want to put several variants),fold or anything else, even
quarter/semi finals etc.
gentab is designed to support internationalization using a message table:
CREATE TABLE messages (
message character varying NOT NULL,
"language" character varying NOT NULL,
string text NOT NULL
);
message&language being the key, and text is what should be displayed.
In order to make entering results simpler and less error prone,
gentab produces adjudicator forms automaticlly, each form has a serial number
so when you get an unordered pile of forms to enter one may type in the
serial number on the top of the page and get an electronic form in the
same layout
as the page he or she is holding. We found this convinient.
I disaprove of breaking normalization in order to simplfy app-layer,
instead I recommend setting up views in the database, and keep al complex
queries in the database and not in the application level.
In gentab we use a system of tables where we have
personn,judge, and debator
when each judge/debator is also a person(hopefully:)). This complicated matters
and I am nor sure it is worth it, but it allows for simplified swinger
allocations.
aside from the basic properties for each person we also have a
general person properties table:
CREATE TABLE person_properties (
person integer NOT NULL,
"key" character varying NOT NULL,
value character varying
);
this can be used for anything, such as payment status, crash location or
anything turnamnet related. I believe ESL status is a common enough
feature to merit
its own column in the person/debator table and not be placed in a
generic properties table.
I recommend looking at the databse structure as found in:
http://gentab.cvs.sourceforge.net/gentab/
Me.