ΕΕΛ/ΛΑΚ - Λίστες Ταχυδρομείου

New Project: Real-time Poll/Voting system

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Τελευταίο mail (για σήμερα μόνο μή χαίρεστε)

Σιγά μην ξεχνούσα το project αυτο! Και μόνο με την ιδέα ενός νέου 
project είμαι φοβερά πορωμένος.

Καταρχάς, να το σχεδιάσουμε. Προτείνω να ξεκινήσουμε πρώτα με το ΤΙ 
θέλουμε να κάνουμε, χρησιμοποιώντας test-cases σενάρια.

Δηλαδή, να εξηγήσουμε ΠΩΣ και ΠΟΥ θέλουμε να χρησιμοποιήσουμε ένα 
τέτοιο εργαλείο και να περιγράψουμε τη διαδικασία, όσο πιο αναλυτικά 
μπορούμε. Με αυτόν τον τρόπο, μπορούμε να ξέρουμε τα specification 
requirements (ναι καλοέμαθα με τα μεγάλα projects και μου αρέσει να 
κάνω project design :-)

Όπως το σκέφτομαι τώρα, προτείνω να υπάρχουν τρία επίπεδα πρόσβασης 
για τους χρήστες, admins, poll/vote-creators, voters. Οι admins θα 
έχουν πλήρη πρόσβαση και θα μπορούν να κάνουν τα πάντα. 
Οι poll/vote-creators θα μπορούν να δημιουργούν ένα poll, vote αλλά δε 
θα μπορούν όμως να διαγράψουν χρήστες ή στοιχεία ενός poll κλπ. 
Δηλαδή, από τη στιγμή που έχει ξεκινήσει κάποιος ένα poll δεν θα έχει 
τρόπο να πειράξει τις ψήφους (ευτυχώς).
Τρίτον θα υπάρχει και ο απλός χρήστης που απλώς θα ψηφίζει. Μάλιστα 
εδώ θα έλεγα να υπάρχει δυνατότητα δύο επιπέδων χρηστών, ο 
πιστοποιημένος χρήστης (του οποίου το public key βρίσκεται στο 
keyring των επιτρεπόμενων ψηφοφόρων της συγκεκριμένης ψηφοφορίας) και 
ο απλός χρήστης που θα του επιτρέπεται μόνο να ψηφίζει σε ανοιχτά 
polls.
Γενικά, ο κάθε χρήστης (ή ο κάθε πιστοποιημένος χρήστης) θα μπορεί να 
είναι και poll -creator.
Για λόγους ασφαλείας θα απαγορεύεται ο admin να ψηφίζει.

Θα υπάρχει και η δυνατότητα ομαδοποίησης των χρηστών.

Αυτό που θα πρέπει να καθοριστεί είναι το πρωτόκολλο επικοινωνίας ώστε 
να υπάρχει η δυνατότητα να φτιαχτούν πολλοί διαφορετικοί clients για 
διαφορετικά περιβάλλοντα/λειτουργικά/κλπ (πχ. 
KDE/GNOME/console/Windows/Mac/Web...). Στο workshop προτάθηκε το SOAP 
το οποίο είναι καλή ιδέα για το συγκεκριμένο σκοπό και σχετικά εύκολο 
και ανεξάρτητο πλατφόρμας. Μια άλλη ιδέα είναι CORBA και άλλες ιδέες 
είναι plain text μύνημα και custom made format (δεν τις προτιμώ γιατί 
πρόκειται για reinventing the wheel). 

Ο κάθε client θα λειτουργεί ως IM (π.χ. ICQ, MSN) και θα κάθεται idle 
περιμένοντας ένα μήνυμα από το server. Με τη λήψη του μηνύματος, θα 
εμφανίζεται ένα notification με κάποιον τρόπο ζητώντας feedback από 
τον χρήστη. Ο client θα πρέπει να κρατάει όλα τα εκκρεμή polls 
ψηφοφορίες έως ότου λήξουν. Με τη σύνδεσή του στο server ο client θα 
λαμβάνει τη λίστα όλων των εκκρεμών και διαθέσιμων polls στα οποία 
μπορεί να συμμετέχει ο χρήστης, ενώ θα λαμβάνει και τα αποτελέσματα 
από όλα τα polls/votes που έχουν λήξει και στα οποία είχε συμμετέχει 
ή είχε δηλώσει ενδιαφέρον ο χρήστης.

Το κάθε poll/vote θα έχει ορισμένα στοιχεία που θα το συνοδεύουν, 
όπως:
* ημερομηνία έναρξης/λήξης
* ελάχιστος αριθμός συμμετοχών για να θεωρηθεί ότι έχει βγεί 
αποτέλεσμα
* μέθοδος βαθμολογίας ψήφων (εδώ θέλουμε κάποιον ειδικό σε μοντέλα 
ψηφοφοριών)
* αν θα είναι ανοιχτό ή κλειστό και αν είναι κλειστό σε ποια ομάδα θα 
επιτρέπεται η ψηφοφορία
* θα επιτρέπεται η αποστολή επιπλέον πληροφορίας από το χρήστη;
  δηλαδή αν πρόκειται για ένα multiple choice poll, θα υπάρχει η 
δυνατότητα επιλογής μιας καταχώρησης "άλλο", στην οποία θα εισάγει ο 
χρήστης μια άλλη τιμή; Φυσικά οι επιπλέον τιμές θα πρέπει να γίνονται 
διαθέσιμες στους υπόλοιπους χρήστες που πρόκειται να ψηφίσουν.
* άλλο;

Ξεκινάω ένα απλό test-case:

1. Ο poll-creator δημιουργεί ένα νέο ανοιχτό poll πολλαπλών επιλογών. 
2. Αφού καταχωρήσει το poll στη βάση, ο server αποστέλλει στους 
αποδέκτες του poll ένα notification message ανακοινώνοντάς το.
3. Ένας χρήστης που είναι συνδεδεμένος ΚΑΙ μέσα στους παραλήπτες, 
λαμβάνει το μήνυμα και ο client που χρησιμοποιεί εμφανίζει κάποια 
ειδοποίηση στην οθόνη (π.χ. αναβοσβήνει μια κάλπη στο dock !).
4. Ο χρήστης επιλέγει να απαντήσει στο μήνυμα αυτή τη στιγμή ή να το 
αφήσει για αργότερα.
5. Αν το αφήσει για αργότερα, το μήνυμα θα είναι ενεργό έως ότου 
περάσει η προθεσμία λήξης της ψηφοφορίας που ορίζεται στο μήνυμα.
6. Αν αποφασίσει να απαντήσει τώρα, εμφανίζεται η λίστα των πολλαπλών 
επιλογών και ο χρήστης καλείται να επιλέξει μία.
7. Το πρόγραμμα ζητάει επιβεβαίωση της αποστολής και αν είναι 
καταφατική στέλνει απαντητικό μήνυμα στο server με την επιλογή του 
χρήστη.
8. Ο server ελέγχει την εγκυρότητα του μηνύματος (αν π.χ. εστάλη από 
χρήστη που έχει δικαίωμα ψήφου) και σε θετική περίπτωση καταγράφει 
την έγκυρη ψήφο. Σε περίπτωση που η ψήφος δεν είναι έγκυρη 
καταχωρείται επίσης για λόγους ασφαλείας.
9. Στο τέλος της ψηφοφορίας, ο poll-creator, όλοι οι ψηφοφόροι 
(έγκυροι και μή), και οι χρήστες που δεν ψήφισαν αποστέλλονται ένα 
μήνυμα αποτελεσμάτων με τα αποτελέσματα της συγκεκριμένης ψηφοφορίας.
Ταυτόχρονα ανανεώνεται και αντίστοιχη σελίδα στατιστικών στο Web.

Αυτά προς το παρόν, περιμένω σχόλια και παρατηρήσεις, έχουμε ακόμη 
αρκετή δουλειά μέχρι να ξεκινήσει το coding...

Κώστας
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.4 (GNU/Linux)

iD8DBQFA/mPEIU9oQVFfm3QRAnLbAJ45oHlT+V6NCa2uYXq7wxmmf9vhogCeISE1
5I0i+1gY+7UosdeP2BGU4Uw=
=dTnD
-----END PGP SIGNATURE-----


πλοήγηση μηνυμάτων