%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Beamer Presentation
% LaTeX Template
% Version 1.0 (10/11/12)
%
% This template has been downloaded from:
% http://www.LaTeXTemplates.com
%
% License:
% CC BY-NC-SA 3.0 (http://creativecommons.org/licenses/by-nc-sa/3.0/)
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%----------------------------------------------------------------------------------------
%	PACKAGES AND THEMES
%----------------------------------------------------------------------------------------

\documentclass{beamer}

\usepackage{listings}
\usepackage{booktabs}% http://ctan.org/pkg/booktabs

%\usepackage{fontspec}% provides font selecting commands 			%loaded
%\usepackage{xunicode}% provides unicode character macros 			%loaded
\usepackage{xltxtra} % provides some fixes/extras 		laut console no
\defaultfontfeatures{Mapping=tex-text}
\setromanfont[Mapping=tex-text]{Liberation Serif}
\setsansfont[Mapping=tex-text]{Liberation Sans}
%\newfontfamily{\grk}[Scale=MatchLowercase]{} % pick a font for
\newfontfamily\greekfontsf[Scale=MatchLowercase]{Liberation Serif}
\newfontfamily\greekfonttt[Script=Greek,Scale=MatchLowercase]{Liberation Sans}

\newcommand{\tabitem}{~~\llap{\textbullet}~~}
%\usepackage{enumitem}
\usepackage{adjustbox}
\usepackage{anyfontsize}
%\usepackage{fontspec}
\usepackage[algoruled]{algorithm2e}
\usepackage{bytefield}

\usepackage{tikz}
%\setmainfont{CMU Serif}

\mode<presentation> {

\usepackage{changepage}
%\usetheme{Warsaw}
\usetheme{Madrid}
%\usetheme{CambridgeUS}
%\setbeamertemplate{footline} % To remove the footer line in all slides uncomment this line
%\setbeamertemplate{footline}[page number] % To replace the footer line in all slides with a simple slide count uncomment this line

\setbeamertemplate{navigation symbols}{} % To remove the navigation symbols from the bottom of all slides uncomment this line
}

\usepackage{graphicx} % Allows including images
\usepackage{booktabs} % Allows the use of \toprule, \midrule and \bottomrule in tables
\usepackage[keys]{cryptocode}
\usepackage{xcolor}
\usepackage{datetime}

%----------------------------------------------------------------------------------------
%	TITLE PAGE
%----------------------------------------------------------------------------------------

\title[Επέκταση Grader]{Σχεδίαση και Επέκταση ενός Συστήματος Αυτόματης Αξιολόγησης Προγραμματιστικών Ασκήσεων} % The short title appears at the bottom of every slide, the full title is only on the title page

\author[Αγγελάκης Αντώνιος]{~Αγγελάκης Αντώνιος\inst{1}} % Your name
\institute[ΕΜΠ] % Your institution as it will appear on the bottom of every slide, may be shorthand to save space
{
  \inst{1}
  Εθνικό Μετσόβιο Πολυτεχνείο \includegraphics[scale=0.1]{../Figures/Pyrforos.png} \\ % Your institution for the title page
  \textit{a.angelakis@protonmail.com} % Your email address
\medskip
}
\date{{\ddmmyyyydate\today}} % Date, can be changed to a custom date


\begin{document}

\begin{frame}
\titlepage % Print the title page as the first slide
\end{frame}

\begin{frame}
\frametitle{Επισκόπηση} % Table of contents slide, comment this block out to remove it
\tableofcontents % Throughout your presentation, if you choose to use \section{} and \subsection{} commands, these will automatically be printed on this slide as an overview of your presentation
\end{frame}

%----------------------------------------------------------------------------------------
%	PRESENTATION SLIDES
%----------------------------------------------------------------------------------------
\section{Εισαγωγή}

\begin{frame}
  \frametitle{Εισαγωγή}
  \centering
  Τι είναι σύστημα αυτόματης αξιολόγησης;
\end{frame}

\begin{frame}
  \frametitle{Συστήματα Αυτόματης Αξιολόγησης Προγραμματιστικών Ασκήσεων}
  Ένα σύστημα αυτόματης αξιολόγησης προγραμματιστικών ασκήσεων αποτελεί,
  συνήθως, μια πλατφόρμα στην οποία: \\

  \bigskip

  \begin{itemize}
      \item Δημιουργούνται διαγωνισμοί και προβλήματα
      \item Οι χρήστες υποβάλλουν τα προγράμματα - λύσεις τους για τα προβλήματα
      \item Τα προγράμματα μεταγλωττίζονται και εκτελούνται αυτόματα
      \item Αξιολογείται η ορθότητα τους με βάση την έξοδο που παράγουν
  \end{itemize}

  \bigskip

  Ονομάζονται και Contest Management Systems.
\end{frame}

\begin{frame}
  \frametitle{Χρήσεις}

  Τα συστήματα αυτόματης αξιολόγησης χρησιμοποιούνται:

  \bigskip

  \begin{itemize}
      \item Για τη διεξαγωγή προγραμματιστικών διαγωνισμών όπως είναι οι Διεθνείς
        Ολυμπιάδες Πληροφορικής (IOI) ή το ICPC
      \item Σε ακαδημαϊκό πλαίσιο, για αξιολόγηση σειρών ασκήσεων, εργαστηριακές
        εξετάσεις κ.α.
      \item Online, σαν πλατφόρμες εκμάθησης προγραμματισμού, προετοιμασίας για
        διαγωνισμούς αλλά και διεξαγωγή μεγάλων διοργανώσεων. Π.χ. Google Code Jam,
        SPOJ, TopCoder
  \end{itemize}
\end{frame}


\begin{frame}
  \frametitle{Παρούσα Εργασία}

  \begin{itemize}
      \item Συνοπτική παρουσίαση τριών FOSS συστημάτων διαχείρισης διαγωνισμών
        \bigskip
      \item Ανάλυση του συστήματος Grader που χρησιμοποιείται από το Softlab και το HelleniCO
        \bigskip
      \item Παρουσίαση των επεκτάσεων που υλοποιήθηκαν στο Grader
  \end{itemize}
\end{frame}

\section{Γνωστά Συστήματα Αυτόματης Αξιολόγησης}
\begin{frame}
  \frametitle{Γνωστά Συστήματα Αυτόματης Αξιολόγησης}
  Θα παρουσιαστούν τα παρακάτω συστήματα:

  \bigskip

  \begin{itemize}
      \item CMS
      \item Mooshak
      \item CATS
  \end{itemize}
\end{frame}

\begin{frame}
  \frametitle{CMS}

  \begin{figure}[t]
    \includegraphics[scale=0.1]{../Figures/cms.png}
  \end{figure}

  \begin{itemize}
      \item Σύστημα με πρωταρχικό στόχο τη χρήση σε διοργανώσεις τύπου IOI
      \item Έμφαση στην ασφάλεια, τη σταθερότητα, την επεκτασιμότητα και την ευκολία
        χρήσης
      \item Modular αρχιτεκτονική, αποτελούμενη από πλήθος διαφορετικών services
  \end{itemize}
\end{frame}

\begin{frame}
  \frametitle{Αρχιτεκτονική CMS}
  \begin{figure}
    \includegraphics[scale=0.25]{../Figures/cmsarchitecture.png}
  \end{figure}
\end{frame}

\begin{frame}
  \frametitle{Mooshak}

  \begin{figure}
    \includegraphics[scale=0.5]{../Figures/mooshak.png}
  \end{figure}

  \begin{itemize}
      \item Σχεδίαση τόσο για διαγωνισμούς, όσο και σαν εργαλείο εκμάθησης
      \item Εύκολο deployment
      \item Υποστήριξη πολλών διαφορετικών τύπων διαγωνισμών, π.χ. code golf και
        εύκολη επέκταση για παραπάνω
  \end{itemize}
\end{frame}

\begin{frame}
  \frametitle{CATS}

  \begin{figure}
    \includegraphics[scale=0.7]{../Figures/cats.png}
  \end{figure}

  \begin{itemize}
      \item Υποστήριξη πλήθους γλωσσών και μεταγλωττιστών με modules για στατική
        ανάλυση των υποβολών, αυτόματη δημιουργία αρχείων ελέγχου κ.α.
      \item Έτοιμα scripts για το deployment
      \item Υποστήριξη ελέγχου λογοκλοπής στις υποβολές
  \end{itemize}
\end{frame}

\section{Το σύστημα Grader}
\begin{frame}
  \frametitle{Το σύστημα Grader}

  \begin{figure}
    \includegraphics[scale=0.5]{../Figures/hellenicologo4.png}
  \end{figure}

  Το σύστημα που θα μελετήσουμε είναι ο Grader. \\

  \bigskip

  Χρησιμοποιείται από το HelleniCO για την προετοιμασία και τη διεξαγωγή του
  Πανελλήνιου Διαγωνισμού Πληροφορικής και από το Εργαστήριο Τεχνολογίας
  Λογισμικού (softlab) του ΕΜΠ για την αξιολόγηση ασκήσεων σε μαθήματα όπως τα
  παρακάτω:

  \begin{itemize}
      \item Εισαγωγή στον Προγραμματισμό
      \item Αλγόριθμοι και Πολυπλοκότητα
      \item Γλώσσες Προγραμματισμού ΙΙ
  \end{itemize}
\end{frame}


\begin{frame}
  \frametitle{Αρχιτεκτονική Συστήματος}

  Το σύστημα αποτελείται ουσιαστικά από δύο κομμάτια.

  \begin{itemize}
      \item Grader Front-end
      \item Kewii Back-end
  \end{itemize}

\end{frame}

\begin{frame}
  \frametitle{Αρχιτεκτονική Συστήματος}

  \begin{figure}
    \includegraphics[scale=0.45]{../Figures/graderarchitecture.png}
  \end{figure}
\end{frame}

\begin{frame}
  \frametitle{Έννοιες του συστήματος}

  \begin{itemize}
      \item Προβλήματα
      \item Διαγωνισμοί
      \item Αρχεία Ελέγχου
      \item Διαγωνιζόμενοι
      \item Υποβολές
  \end{itemize}

\end{frame}

\begin{frame}
  \frametitle{Kewii}

  \begin{itemize}
      \item Πρακτικά ο Kewii είναι το σύστημα αυτόματης αξιολόγησης
      \item Τρέχει συνεχώς στο server περιμένοντας υποβολές
      \item Διαθέτει μια ουρά για τις υποβολές και εκτελεί όποια έρχεται σε
        αποκλεισμένο περιβάλλον
      \item Αποτελεί, ουσιαστικά, ένα black box αφού για κάθε υποβολή απλά εκτελεί
        το πρόγραμμα για τα αρχεία ελέγχου που ζητήθηκαν και ενημερώνει τη βάση για
        την επιτυχία/αποτυχία για κάθε αρχείο ελέγχου
      \item Τα υπόλοιπα τα αναλαμβάνει ο Grader
  \end{itemize}
\end{frame}

\begin{frame}
  \frametitle{Ροή Kewii}

  \begin{figure}
    \includegraphics[scale=0.37,trim=4 4 4 4,clip]{../Figures/graderflow.png}
  \end{figure}
\end{frame}

%todo ισως διαφανεια περιγραφής common workflow

\begin{frame}
  \frametitle{Grader Front-end}

  Το Front-end κομμάτι του Grader αναλαμβάνει τόσο την αλληλεπίδραση με
  διαχειριστές - διαγωνιζόμενους, όσο και την υλοποίηση της συνολικής λογικής
  του συστήματος.

  \bigskip

  Οι λειτουργίες του είναι οι παρακάτω:
  \begin{itemize}
      \item Δημιουργία και διαχείριση διαγωνισμών και προβλημάτων
      \item Ανέβασμα και διαχείριση (ανάθεση πόντων και τύπων εκτέλεσης) αρχείων ελέγχου
      \item Υποβολή λύσεων σε ενεργούς διαγωνισμούς από επιλεγμένους διαγωνιζόμενους
      \item Ανάκτηση αποτελεσμάτων υποβολής, αναλυτική παρουσίαση στο χρήστη
      \item Λήξη διαγωνισμού, τελική αξιολόγηση και δημοσίευση αποτελεσμάτων
  \end{itemize}
\end{frame}

\section{Επεκτάσεις: Testcase Groups}

\begin{frame}
\Huge{\centerline{Επεκτάσεις}}
\end{frame}

%μια διαφανεια blue tag
% prosthiki testcase groups dio logia giati
% pws 8a ginei i ilopoihsh kai pws allazei i logiki
% isws demo
% (3-4) diaf
\begin{frame}
  \frametitle{Testcase Groups και Blue tag}
  Στο πλαίσιο της συγκεκριμένης επέκτασης δημιουργήθηκαν:
  \begin{itemize}
      \item Ένας νέος τύπος εκτέλεσης αρχείων ελέγχου, το Blue tag \includegraphics[scale=0.8]{../Figures/tag_blue.png}
      \item Testcase Groups, δηλαδή ομάδες αρχείων ελέγχου
  \end{itemize}
\end{frame}

\begin{frame}
  \frametitle{Τύποι εκτέλεσης αρχείων ελέγχου}
  Τι είναι τύπος εκτέλεσης και ποιοι είναι αυτοί;

  \bigskip

  Οι τύποι εκτέλεσης καθορίζουν το πως και πότε θα χρησιμοποιηθούν τα αρχεία ελέγχου
  στις υποβολές.

  \begin{figure}

    \includegraphics[scale=0.6,trim=4 4 4 4,clip]{../Figures/tipoi.png}
  \end{figure}
\end{frame}

\begin{frame}
  \frametitle{Blue tag}
  \begin{block}{Λειτουργία τύπου εκτέλεσης Μπλε \includegraphics[scale=0.8]{../Figures/tag_blue.png}}
    Οι υποβολές θα ελεγχθούν με το συγκεκριμένο αρχείο ελέγχου την ώρα της υποβολής και ο χρήστης θα μπορεί να δει το αποτέλεσμα, αλλά όχι το αρχείο ελέγχου. Το αποτέλεσμα της εκτέλεσης δεν επηρεάζει το αν θα γίνει δεκτή η υποβολή.
  \end{block}
\end{frame}

\begin{frame}
  \frametitle{Προσθήκη testcase groups}

  Προστέθηκε στον Grader η δυνατότητα δημιουργίας testcase groups, ομάδων
  δηλαδή από αρχεία ελέγχου.

\end{frame}

\begin{frame}
  \frametitle{Testcase groups}

  Τα testcase groups:

  \begin{itemize}
      \item Ανήκουν σε προβλήματα
      \item Αποτελούνται από αρχεία ελέγχου και ένα αρχείο μπορεί να είναι
        σε πολλαπλά groups με διαφορετικό τύπο εκτέλεσης
      \item Έχουν τίτλο και πόντους
      \item Παίρνουν τη θέση των αρχείων ελέγχου ως κύριες μονάδες βαθμολόγησης
  \end{itemize}
\end{frame}

\begin{frame}
  \frametitle{Επεξήγηση Λειτουργίας}

  \begin{itemize}
      \item Αξιολόγηση με βάση groups και όχι tests
      %\item Η αξιολόγηση πλέον σε κανονικές και τελικές υποβολές γίνεται με βάση
      % τα testcase groups που το πρόβλημα περιέχει.
      \item Group σωστό αν αρχεία του σωστά
      %\item Ένα testcase group θεωρείται σωστό και βαθμολογείται μόνο αν έχουν
       % αξιολογηθεί ως σωστά τα αρχεία που περιέχει.
      \item Υποβολή σωστή αν τουλάχιστον ένα group σωστό
      %\item Ως σωστές θεωρούνται οι υποβολές που ικανοποιούν τουλάχιστον ένα group
      \item Απαραίτητα τα groups για κάθε πρόβλημα
      %\item Ο ορισμός testcase groups είναι απαραίτητος για τη λειτουργία της
      % αξιολόγησης σε κάθε πρόβλημα
      \item Script για δημιουργία groups σε όλα τα προβλήματα
      %\item Δημιουργήθηκε script για τη δημιουργία testcase groups για όλα τα
       %υπάρχοντα προβλήματα.
      \item Ο Kewii, ως black box, δεν επηρεάζεται
      %\item Ο Kewii δεν επηρεάζεται, αξιολογεί κάθε υποβολή για τα αρχεία που θα
        %του ζητηθούν. O Grader επιλέγει και φροντίζει κάθε αρχείο να αξιολογείται
        %το πολύ μια φορά, ακόμα κι αν ανήκει σε πολλαπλά groups.
  \end{itemize}
\end{frame}

% todo mhpws diafaneia gia demo
\begin{frame}
  \frametitle{}
  \begin{figure}

    \includegraphics[scale=0.4,trim=4 4 4 4,clip]{../Figures/groupoverview.png}
  \end{figure}
\end{frame}

\begin{frame}
  \frametitle{}
  \begin{figure}

    \includegraphics[scale=0.4,trim=4 4 4 4,clip]{../Figures/groupedit.png}
  \end{figure}
\end{frame}

\section{Επεκτάσεις: Αλλαγή σχεδίασης προβλημάτων και διαγωνισμών}
% 2-3 diaf oti eixame 8ema me ti metakinisi kai ti vasi itan etsi egine etsi
% antigrafi provlimatos kai epanaxrisimopoihsh
\begin{frame}
  \frametitle{Αλλαγή σχεδίασης προβλημάτων και διαγωνισμών}

  Στην αρχική σχεδίαση του Grader δεν είχε προβλεφθεί η ύπαρξη προβλήμάτων
  σε πολλαπλούς διαγωνισμούς. \\[0.3cm]

  Επιτρέπεται όμως η μετακίνηση ενός προβλήματος σε άλλο διαγωνισμό. \\[0.3cm]

  Αυτό αρκεί για την επαναχρησιμοποίηση προβλημάτων αλλά δημιουργεί επιπλοκές.

\end{frame}

\begin{frame}
  \frametitle{Επιπλοκές μεταφοράς προβλημάτων}

  \begin{itemize}
      \item Ανεπιθύμητη μεταφορά υποβολών
      \item Παλαιότεροι διαγωνισμοί χωρίς προβλήματα
  \end{itemize}% \\[0.3cm]

  \bigskip

  Πώς επιλύονται αυτές οι επιπλοκές;
\end{frame}

\begin{frame}
  \frametitle{Αλλαγές στη βάση: Πριν}

  \begin{figure}

    \includegraphics[scale=0.4,trim=4 4 4 4,clip]{../Figures/sepbefore.png}
  \end{figure}
\end{frame}

\begin{frame}
  \frametitle{Αλλαγές στη βάση: Μετά}

  \begin{figure}
    \includegraphics[scale=0.4,trim=4 4 4 4,clip]{../Figures/sepafter.png}
  \end{figure}
\end{frame}

\begin{frame}
  \frametitle{Προσθήκη λειτουργικότητας αντιγραφής προβλήματος}

  Η αλλαγή της βάσης επιτρέπει την ύπαρξη των προβλημάτων σε πολλαπλούς διαγωνισμούς
  με ξεχωριστές υποβολές. \\[0.3cm]

  Δεδομένου ότι δεν υπάρχει πλέον λόγος για μετακίνηση προβλημάτων, προστέθηκε η
  δυνατότητα αντιγραφής αυτών σε άλλους διαγωνισμούς.
\end{frame}

\section{Επεκτάσεις: Python, Mass Testcase Upload, Connector PDO}

\begin{frame}
  \frametitle{Υποστηριζόμενες γλώσσες Grader}
  \begin{itemize}
      \setlength\itemsep{0em}
      \item C
      \item C++
      \item Pascal
      \item Pazcal
      \item F\#
      \item OCaml
      \item Java
      \item Fortran
      \item Haskell
  \end{itemize}
\end{frame}

\begin{frame}
  \frametitle{Προσθήκη Python}

  \begin{figure}
    \includegraphics[scale=0.4]{../Figures/python.png}
  \end{figure}

  \begin{itemize}
      \item Λείπει μια scripting γλώσσα
      \item Επιλέξαμε την Python λόγω της δημοτικότητας της
      \item Αλλαγή στον Kewii ώστε να προσαρμοστεί σε μια interpreted γλώσσα
      \item Επιλέχθηκε η Python 2, εύκολη και η προσθήκη της Python 3
  \end{itemize}
\end{frame}

\begin{frame}
  \frametitle{Μαζικό (αυτόματο) ανέβασμα testcase}

   Κατά τη δημιουργία ενός νέου προβλήματος πρέπει να καταχωρηθούν τα αρχεία
   ελέγχου στο Grader. \\[0.3cm]

   Δυστυχώς, αυτό πρέπει να γίνει ξεχωριστά για κάθε ζευγάρι αρχείων εισόδου
   εξόδου. \\[0.3cm]

   Ως αποτέλεσμα, για πολλά αρχεία η διαδικασία είναι χρονοβόρα ή χρησιμοποιούνται
   αυτοσχέδια scripts. Αυτό θα διορθωθεί.
\end{frame}

\begin{frame}
  \frametitle{Μαζικό (αυτόματο) ανέβασμα testcase}

  Προστέθηκε η δυνατότητα μαζικής καταχώρησης αρχείων ελέγχου.

  \begin{itemize}
      \item Ανέβασμα zip
      \item Περιέχει τα αρχεία ελέγχου και ένα αρχείο JSON
      \item Το descriptor.json καθορίζει το format της ονομασίας των αρχείων
      \item Καθορίζει, επίσης, πλήρως τα testcase groups
  \end{itemize}
\end{frame}

\begin{frame}
  \frametitle{Παράδειγμα descriptor.json}

\lstinputlisting[basicstyle=\small]{../Listings/smalldesc.json}
\end{frame}

\begin{frame}
  \frametitle{Εργαλείο δημιουργίας descriptor}

  Το descriptor.json χάρη στη JSON μορφή του μπορεί να συνταχθεί χειρωνακτικά. \\[0.3cm]

  Παρόλα αυτά, κρίθηκε αναγκαία η δημιουργία ενός εργαλείου αυτόματης δημιουργίας
  του αρχείου.\\[0.3cm]

  Πρόκειται για ένα interactive python script που καθοδηγεί το χρήστη και παράγει
  αυτόματα το απαιτούμενο αρχείο. \\[0.3cm]

  Ακολουθεί ένα μικρό demo.
\end{frame}

\begin{frame}
  \frametitle{Προσθήκη connector PDO}

  Μια πιο τεχνική αλλαγή ήταν η αλλαγή της βιβλιοθήκης σύνδεσης με την MySQL βάση
  του Grader.\\[0.3cm]

  Η προηγούμενη βιβλιοθήκη, ext/mysql, είχε σταματήσει να υποστηρίζεται ήδη από
  την PHP 5.5 και χρειαζόταν αλλαγή.\\[0.3cm]

  Για την αντικατάσταση της προτιμήθηκε η PDO που προσφέρει:

  \begin{itemize}
      \item Ενεργή ανάπτυξη και υποστήριξη
      \item Δυνατότητα χρήσης διαφόρων βάσεων, μέσω κοινής διεπαφής
      \item Μεγαλύτερη ταχύτητα και αντοχή στις επιθέσεις τύπου SQL injection με
        χρήση prepared statements
  \end{itemize}
\end{frame}

\section{Μελλοντική Εργασία}
\begin{frame}
  \frametitle{Μελλοντική Εργασία}
  \begin{itemize}
      \item Προσθήκη εργαλείου code reviews στο front-end
      \item Επανασχεδίαση Grader με χρήση ενός MVC framework ή παρόμοιου
      \item Βελτίωση ασφάλειας Kewii με χρήση containers ή VM
      \item Παραλληλοποίηση εκτέλεσης Kewii (βλ. εργασία Τσιαμήτρου)
      \item Ανάλυση υποβολών Python στη θέση της μεταγλώττισης, π.χ με Pylint
      \item Προσθήκη Python 3
  \end{itemize}
\end{frame}

\begin{frame}
  \frametitle{Τέλος}
  \centering
  Ευχαριστώ!
\end{frame}

\begin{frame}
  \frametitle{Τέλος}
  \centering
  Ερωτήσεις;
\end{frame}

\end{document}
