Commit 40534f86 authored by Antonios Angelakis's avatar Antonios Angelakis

Finish chapter 6 bar connector

parent 6ff75e9d
......@@ -87,7 +87,7 @@
επόμενη φάση την μερική ορθότητα των προγραμμάτων. Ως απόδειξη της
πρακτικότητας της προσέγγισης αυτής, παραθέτουμε ένα σύνολο
παραδειγμάτων στη γλώσσα με απόδειξη μερικής ορθότητας.
%%% TODO change
\begin{keywordsgr}
Συστήματα αυτόματης αξιολόγησης, CMS, Grader, PHP, Python, Ανάπτυξη Λογισμικού,
Ανοιχτό και ελεύθερο λογισμικό.
......@@ -1047,33 +1047,144 @@ clean code του Robert Martin. Μέρος των αλλαγών ήταν κα
\subsection{Επιλογή Python}
% TODO: ερωτηση παπασπυρου για φακτορ παηθον
Η γλώσσα Python είναι
Η Python είναι μια interpreted προγραμματιστική γλώσσα υψηλού επιπέδου
γενικού σκοπού. Διαθέτει πολύ πλούσια βιβλιοθήκη για μια ευρεία γκάμα
λειτουργιών και επιστημονικών πεδίων. Έχει σχεδιαστεί με έμφαση στην
αναγνωσιμότητα και στη χρησιμοποίηση λιγότερου κώδικα, ενώ ευνοεί πολλαπλά
προγραμματιστικά στυλ όπως είναι ο δομημένος, ο αντικειμενοστρεφής και ο συναρτησιακό προγραμματισμός.
\bigskip
Δεδομένης της δημοτικότητας της Python και της ευκολίας χρήσης της, είναι μια
απαραίτητη προσθήκη στο Grader που πιθανότατα θα εκτιμηθεί από διαγωνιζόμενους
μαθητές και φοιτητές. Η Python δε λείπει από κανένα (TODO: όντως;) από τα
συστήματα αξιολόγησης που μελετήθηκαν, ενώ πλέον αποτελεί τη δημοφιλέστερη
επιλογή στα κορυφαία αμερικάνικα πανεπιστήμια όσον αφορά στα εισαγωγικά μαθήματα
των τμημάτων επιστήμης των υπολογιστών. (TODO: https://cacm.acm.org/blogs/blog-cacm/176450-python-is-now-the-most-popular-introductory-teaching-language-at-top-u-s-universities/fulltext)
Είναι μια από τις πιο αναπτυσσόμενες προγραμματιστικές γλώσσες σύμφωνα με στοιχεία του
Stack Overflow (https://stackoverflow.blog/2017/09/06/incredible-growth-python/)
χάρη, κυρίως, στην καθιέρωση της σε πολλά προγράμματα προπτυχιακών σπουδών και
στην ανάπτυξη των τομέων της ανάλυσης δεδομένων και μηχανικής μάθησης, στους
οποίους κυριαρχεί ως εργαλείο (https://stackoverflow.blog/2017/09/14/python-growing-quickly/).
- xaraktiristika
\bigskip
Η διαφορά της Python με τις γλώσσες που υποστηρίζει ο Kewii είναι ότι αυτή
αποτελεί μια interpreted γλώσσα και ως αποτέλεσμα δεν έχει ιδιαίτερο νόημα η
μεταγλώττιση της σε ένα εκτελέσιμο. Σε κάθε υποβολή με χρήση της, θα γίνεται
απευθείας εκτέλεση με είσοδο τα αρχεία ελέγχου και θα εμφανίζονται μόνο τα
σφάλματα κατά τον χρόνο εκτέλεσης στον διαγωνιζόμενο, αντίθετα με τις υπόλοιπες
γλώσσες που υπάρχουν και σφάλματα μεταγλώττισης. Στο μέλλον θα μπορούσε να
διερευνηθεί η δυνατότητα ενός εργαλείου ανάλυσης του πηγαίου κώδικα για τη
διευκόλυνση των διαγωνιζόμενων με καλύτερα μηνύματα σφαλμάτων.
\bigskip
- dimofilia
Η έκδοση της Python που επιλέχθηκε είναι η 2.7. Η υποστήριξη της συγκεκριμένης
έκδοσης και γενικά της Python 2 θα διαρκέσει έως το 2020, οπότε καλό θα είναι
να προστεθεί και η Python 3 στο μέλλον. Δεδομένης της δουλειάς που έγινε για
την προσθήκη της έκδοσης 2, η προσθήκη της 3 θα είναι αρκετά εύκολη και άμεση.
\section{Αυτόματο ανέβασμα αρχείων ελέγχων/ομάδων}
\section{Μαζικό ανέβασμα αρχείων ελέγχων/ομάδων}
\subsection{Κίνητρο}
- ευκολία χρήσης περιγραφή καταστασης ως τωρα
Κατά τη διαδικασία δημιουργίας ενός προβλήματος, είναι απαραίτητο να προστεθεί
ένας συχνά μεγάλος αριθμός αρχείων ελέγχου. Ο μόνος τρόπος να γίνει αυτό είναι
μέσω της οθόνης διαχείρισης των αρχείων ελέγχου, όπως φαίνεται στη
φωτογραφία18, και κάθε νέο αρχείο ανεβαίνει ξεχωριστά, δηλαδή δεν υπάρχει
κάποια μαζική διαδικασία.
- ακομα δυσκολοτερο με ομαδες
\bigskip
Για να αποφευχθεί η επαναληπτική και χρονοβόρα διαδικασία, οι έως τώρα διαχειριστές
έγραφαν απλά PHP scripts για την ενημέρωση της βάσης με τα νέα αρχεία ελέγχου,
και αντέγραφαν τα τελευταία, χειροκίνητα, στους αντίστοιχους φακέλους του Kewii.
Μετά την προσθήκη των ομάδων αρχείων ελέγχου, στη διαδικασία αυτή προστέθηκε και
η δημιουργία και παραμετροποίηση των ομάδων με τα επιθυμητά αρχεία και tags.
\bigskip
Για τους παραπάνω λόγους κρίθηκε αναγκαία η προσθήκη ενός αυτοματοποιημένου
τρόπου μαζικής προσθήκης αρχείων για τα προβλήματα, στο οποίο να υπάρχει και η
δυνατότητα ορισμού των κατάλληλων ομάδων αρχείων ελέγχου. Το εργαλείο που θα
υλοποιηθεί θα οφείλει τόσο να ενημερώνει τη βάση, όσο και να φορτώνει τα αρχεία
στον εξυπηρετητή του Kewii. Για την επεξεργασία των ομάδων, θα πρέπει να
χρησιμοποιηθεί ένα περιγραφικό αρχείο, ιδανικά σε ένα ανθρωπίνως αναγνώσιμο
τύπο αρχείου με σκοπό την εύκολη δημιουργία του.
\subsection{Υλοποίηση}
- περιγραφη/idea
Το εργαλείο που περιγράφηκε θα προστεθεί στην οθόνη διαχείρισης των αρχείων
ελέγχου κάτω από το ήδη υπάρχον ανέβασμα μεμονωμένου αρχείου, όπως φαίνεται και
στην εικόνα33. Ο διαχειριστής θα ανεβάζει ένα συμπιεσμένο αρχείο (zip) με τα
αρχεία εισόδου και εξόδου που θέλει να προσθέσει στο πρόγραμμα. Στο αρχείο θα
πρέπει, επιπλέον, να υπάρχει και ένα αρχείο με όνομα descriptor.json το οποίο
θα αναλαμβάνει να περιγράψει στο εργαλείο τις προδιαγραφές αρχείων και ομάδων.
\bigskip
- εικονα
Η μορφή JSON επιλέχθηκε για τους λόγους που αναφέρθηκαν παραπάνω, δηλαδή για τα
χαρακτηριστικά της, ως αναγνώσιμη και με δυνατότητα εύκολης εισαγωγής αντικειμένων
και λιστών. Στο συγκεκριμένο αρχείο θέλαμε να περιγράφονται τα παρακάτω:
- μορφη json
\begin{itemize}
\item Ο τρόπος ονομασίας των αρχείων ελέγχου για τα αρχεία εισόδου και εξόδου
\item Το πλήθος των ομάδων αρχείων ελέγχου
\item Για κάθε ομάδα αρχείων ελέγχου το όνομα της, οι πόντοι
και τα αρχεία ελέγχου που περιέχει
\item Για κάθε αρχείο ελέγχου μέσα σε ομάδα ο τύπος εκτέλεσης του (tag)
\end{itemize}
Ο Grader περιμένει να βρει μέσα στο συμπιεσμένο αρχείο ζευγάρια εισόδου-εξόδου
για κάθε αρχείο ελέγχου που πρέπει να προστεθεί. Επομένως, θα πρέπει να είναι
γνωστή η μορφή των ονομάτων των αρχείων. Για μεγαλύτερη ευελιξία,
δημιουργήθηκαν δύο προαιρετικά πεδία, για αρχεία εισόδου και εξόδου αντίστοιχα,
τα οποία δέχονται τη μορφή ονομασίας που θα χρησιμοποιηθεί με χρήση ενός format
παρόμοιου με το printf της PHP. Προφανώς, αυτό θα πρέπει να περιέχει ένα
προσδιοριστή για ακέραιους αριθμούς ώστε να λειτουργεί σωστά η αντικατάσταση
για την παραγωγή των ονομασιών των αρχείων. Αν τα πεδία αυτά δεν έχουν
συμπληρωθεί χρησιμοποιείται η προεπιλεγμένη μορφή, δηλαδή probname.in1 και
probname.out2, για το πρώτο αρχείο εισόδου και εξόδου ενός προβλήματος με όνομα
probname.
\bigskip
Όσον αφορά στις ομάδες αρχείων ελέγχου, αυτές πρέπει να περιέχονται μέσα στο
descriptor.json σαν λίστες αντικειμένων. Κάθε αντικείμενο που αντιστοιχεί σε
μια νέα ομάδα, έχει πεδία για το όνομα της, τους πόντους που αξίζει και τα
αρχεία ελέγχου που θα περιέχει. Το τελευταίο πεδίο αποτελεί λίστα και περιέχει
αντικείμενα με δύο πεδία: αριθμός αρχείου ελέγχου και τύπος εκτέλεσης. Ο τύπος
εκτέλεσης θα δίνεται με το όνομα του χρώματος δηλαδή θα μπορεί να έχει τις
τιμές orange, yellow, blue, green, purple. Ακολουθεί ένα πρότυπο
descriptor.json στο οποίο έχουν συμπληρωθεί όλα τα διαθέσιμα πεδία.
(TODO: προσθήκη descriptor σαν κωδικα η κατι)
(TODO: εικόνα33)
\subsection{Εργαλείο δημιουργίας}
- περιγραφη ισως κωδικας
Χάρη στην αναγνώσιμη μορφή του JSON είναι εύκολο ένας διαχειριστής να συντάξει
ένα JSON αρχείο για το ανέβασμα αρχείων ελέγχου και καθορισμό ομάδων. Παρόλα αυτά,
θα είναι αρκετά χρήσιμο το συγκεκριμένο αρχείο να μη συντάσσεται με το χέρι, ώστε
να μην υπάρχει και η πιθανότητα σφάλματος. Για το λόγο αυτό δημιουργήθηκε ένα
interactive script σε Python για την αυτόματη παραγωγή ενός descriptor.json αρχείου.
\bigskip
Το συγκεκριμένο script, μόλις εκτελεστεί, σε οποιοδήποτε περιβάλλον, διατυπώνει
ερωτήσεις σχετικές με τον αριθμό και τα ονόματα των αρχείων ελέγχου και ομάδων
και έπειτα για κάθε ομάδα σχετικά με το ποια αρχεία περιέχει και τους τύπους
εκτέλεσης τους. Στο τέλος, παράγει το αρχείο που περιγράφηκε. Παρακάτω φαίνεται
η εκτέλεση του συγκεκριμένου script, μαζί με το αρχείο που δημιουργείται.
- εικονα ιντερακτιβ
(TODO: εικονα ιντερακτιβ)
\section{Αλλαγή mysql connector}
......@@ -1103,6 +1214,8 @@ clean code του Robert Martin. Μέρος των αλλαγών ήταν κα
- προσθηκη code reviews
- pylint PEP-8
%%% Bibliography
\bibliographystyle{softlab-thesis}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment