31
Avenue du Ciseau 15 1348 Louvain-la-Neuve Tel. : +3210/47.53.90 DÉVELOPPEMENT D'UN FRAMEWORK DE CORRECTION DE CODE JAVA POUR PYTHIA (PLATEFORME D'APPRENTISSAGE DE LA PROGRAMMATION) Travail de fin d’études en vue de l’obtention du diplôme de bachelier en Informatique et Systèmes : finalité Technologie de l’informatique ETUDIANT :BISHOP GREGORY RAPPORTEUR : LAMBEAU CHRISTIAN ANNEE ACADEMIQUE 2013-2014

Travail de fin d’études en vue de l’obtention du diplôme

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Travail de fin d’études en vue de l’obtention du diplôme

AvenueduCiseau15

1348Louvain-la-Neuve

Tel.:+3210/47.53.90

DÉVELOPPEMENTD'UNFRAMEWORKDECORRECTION

DECODEJAVAPOURPYTHIA

(PLATEFORMED'APPRENTISSAGEDELAPROGRAMMATION)

Travail de fin d’études en vue de l’obtention du diplôme de bachelier enInformatiqueetSystèmes:finalitéTechnologiedel’informatique

ETUDIANT:BISHOPGREGORY

RAPPORTEUR:LAMBEAUCHRISTIAN

ANNEEACADEMIQUE2013-2014

Page 2: Travail de fin d’études en vue de l’obtention du diplôme

2

Remerciements

La découverte de Pythia et ses possibilités fut lemoment clé demon travail. Sanscela,j’auraisprobablementtrouvéunautresujetbeaucoupmoinspassionnant.Eneffet,ceTFE1 fut vraiment attrayant pour moi. Malgré les longues journées de stage parfoisfatigantes,jetrouvaislamotivationnécessaireausoirpouravancersereinement.Jemedoisdonc de remercier Monsieur Combéfis pour m’avoir fait découvrir cette plate-forme etégalementpourtoutcequ’ilapum’apprendre.Parcestage,jeremercieMadameVandenSchrieck pour m’avoir proposé cette période d’apprentissage et conseillé un travail enrapportavecmonobjetdestage.

JesouhaitenaturellementremercierMonsieurLambeaupoursesnombreuxconseilsetremarquesquifurentbénéfiquesdanslaréalisationdemonprojet.Deplus,ilm’afaitpartdenombreusesastucesetidéesconcernantjQuery.

Si aujourd’hui mon travail de fin d’études est pratiquement compatible avecl’EPHEC2,c’estprincipalementgrâceàl’aidegénéreusequem’aproposéeMadameVroman.Eneffet,malgrélefaitqu’ellenesoitpasmonrapporteurdeTFE,elleavolontiersacceptéde répondreàquelquesquestions concernantdesdétailsdemon interfaceutilisateur.Deplus, j’ai été mis en contact avecMonsieur Verhelst, notamment gestionnaire du réseauEPHEC, et Monsieur Delvigne, gestionnaire d’eCampus. Ils ont pu m’aider à mieuxcomprendre les aspects techniques dont aurait besoin ma plate-forme pour pouvoir sejoindre au réseau de l’école. C’était donc agréable de pouvoir discuter avec d’autresenseignantsprêtsàm’expliquerteloutelaspect.Sesentirdanslabonnevoieestquelquechosedesincèrementrassurant.

1Travaildefind’études2Écolepratiquedeshautesétudescommerciales

Page 3: Travail de fin d’études en vue de l’obtention du diplôme

3

TabledesmatièresRemerciements.........................................................................................................................2

1. Introduction.......................................................................................................................4

2. Corpsdutravail..................................................................................................................5

2.1 Avisdesétudiantsconcernés......................................................................................5

2.2 Descriptiondesoutilsutilisés.....................................................................................6

2.2.1 Pythia...................................................................................................................6

2.2.2 Python3...............................................................................................................7

2.2.3 MySQL..................................................................................................................7

2.2.4 LightweightDirectoryAccessProtocol(LDAP)....................................................7

2.2.5 HTML,CSS,jQuery&JSON..................................................................................8

2.3 Solution.......................................................................................................................8

2.3.1 LeServeurLDAP...................................................................................................9

2.3.2 Labasededonnéesdistante.............................................................................10

2.3.3 Laplate-forme...................................................................................................10

3. Difficultésrencontrées....................................................................................................26

4. Améliorations..................................................................................................................27

5. Conclusion.......................................................................................................................28

6. Webographie...................................................................................................................29

7. Annexes...........................................................................................................................30

I. Schémarelationnel.......................................................................................................30

II. Diagrammed’activité:Soumissiond’unétudiant........................................................31

Page 4: Travail de fin d’études en vue de l’obtention du diplôme

4

1. Introduction

Durantmesdeuxannéesàl’UniversitécatholiquedeLouvainenSciencesinformatiquesetmestroisannéesà l’EPHECenTechnologiede l'informatique, j’aisouventétéconfrontéaumêmecasdefigure.Lesprofesseursdemandentàcequel’onsoumettenostravauxsurlaplate-formeClarolinequecesoiteCampusouiCampus.Dûaunombreélevédesoumissions,lesprofesseursn’ontpasnécessairementletempsdecorrigerchaqueexercicepourchaqueétudiant. Ainsi, nous n’avons pas constamment un feedback sur nos implémentations enlangage de programmation. Nous avons bien évidemment nos compilateurs installéslocalementsurnosmachines,maisilarrivequ’ilssoientsoitenanglais,soitincompletsvis-à-visdescorrectionsàapporterànoscodes.Approchantdelasessiond’examens,ilétaitdoncpossible que des étudiants n’étaient pas totalement confiants quant à leur capacité àimplémenter correctement. Fort de mes débuts à l’UCL3 et de mon anglais, je n’ai pasrencontrécesproblèmesdansledomainedelaprogrammation.

Le hasard des choses ou plus sincèrementmes antécédents firent qu’un stageme futproposéàl’EPL4oùj’avaispasséquatrequadrimestres.Ainsi,quandj’apprisquemonstagesebaseraitprincipalementsurPythia,uneplate-formeintelligentequipermetd'analyserducodesoumisetderenvoyerducontenuutilesurbasedel'implémentation,j’aidirectementpensé à une alternativepour l’EPHEC. J’en fis donc la demandeen tant que travail de find’études, ce qui fut accepté. Il devait se baser autour du Pascal, langage qui, jusqu’endécembre2013,étaitlepremierlangagedeprogrammationenseignéàl’EPHEC.

Mon frameworkpermettrait auxenseignantsd’avoir rapidementun compte rendu surlesexercices réaliséspar lesétudiants.Cesdernierspourrontdoncs'entraînerà leurguisesur des exercices basiques. Cette interface web pédagogique participerait donc àl’apprentissagedesnéoprogrammeurs.

Avant de pouvoir commencer mon travail, mon premier objectif fut d’apprendre lefonctionnementdelaplate-formePythia.Dûàsapopularitéplutôtfaibleetàsajeunesse,ilest fortement compliqué de trouver de la documentation principalement technique surcelle-ci. Ainsi, il me fallut découvrir une partie des fonctionnalités via mes premièressemainesde stage. Jen’avais pratiquement aucune connaissance à son sujet, je ne savaisriendesonsystème.Conscientsdesrèglesimposéesparl’EPHEC,MonsieurCombéfis(monmaîtrede stage),Monsieur Lambeauetmoi-mêmeavions convenuque le travail effectuéautour de Pythia durant cette période de stage ne concernerait pas la fonctionnalitéprincipale qu’est l’analyse de codesmais plutôt l’amélioration de la plate-forme ainsi quel’ajoutdediversmodules.Bienvite,jemerendiscomptequelanouvelleversiondelaplate-forme Pythia ne contenait plus cette “intelligence” précédemment citée. En effet, cettedernière ne permettait que de lancer desmachines virtuelles contenant l’environnementadéquatàlatâchedésirée.CesfichierssystèmesétaientpréalablementconçusparPythiaàl’aidedepaquetsDebianSqueeze.Lesfonctionnalitésprincipalesdecetteplate-formesontdonclacréationetl’exécutiondemachinesvirtuellesLinux.

3UniversitécatholiquedeLouvain4EcolePolytechniquedeLouvain

Page 5: Travail de fin d’études en vue de l’obtention du diplôme

5

Cependant,aucoursdespremièressemainesdemonstageetde l’élaborationdemonTFE,jefusinforméquel’EPHECapporteraitdesmodificationsauxcoursdeprogrammationdonnésauseindel’établissement.Eneffet,suiteauprojetMarcourt,deslangagestelsqueCouencorePascalétaientappelésàdisparaîtredel’enseignementàl’EPHEC.C’estalorsqu’undébat prit place, qu’allait advenir ma plate-forme? Il fallut donc trouver une solutionrapidement afin de ne pas trop me retarder au niveau des différentes échéances. Unedécisionfutprisequelquesjoursplustard,maplate-formesebaseraitdésormaisautourdulangageJava,quiseraitconservépourlesétudiantsdedeuxièmeannée.

2. Corpsdutravail

2.1 Avisdesétudiantsconcernés Lapremièreétapedemontravailconsistaenl’acquisitiondupointdevuedesétudiantsface à certains langages de programmation, leurs appréhensions ou encore ce qu’ilspréféraient dans ceux-ci. J’avais commencé mon travail sur le langage Pascal, j’ai doncrecueillidiversesopinionsvis-à-visdecelui-ci.J’aiparlasuiteposédesquestionssimilairespar rapport au Java. Voici une liste d’opinions anonymes qui pourraient être utiles auxenseignantsdanslefutur.

PASCAL

• “Ce qui plaît : la simplicité de la prise enmain du langage, ce qui déplaît : les ";"aléatoires,leslimitesdulangage.”

• “Jetrouvequ'ilseraitmeilleurdesepenchersurlepythonpourinitierlesnouveauxinscritsàlaprogrammation.”

• “Le Pascal a comme grande qualité de pouvoir facilement donner un aperçu de lalogique de programmation, au vue du langage de haut niveau (très proche del'humain).Évidemment, savoir coderenPascal se révèleêtrecomplètement inutile(lePythonauraitétémieuxparexemple,maisjeletrouvemoinsfaciled'accèsquandoncommencelaprogrammation).Enrésumé,jenedonneraipasdepointnégatifauPascal simplement parce qu'il n'a plus aucune raison d'être hormis dansl'apprentissagedelalogiquedebase.”

• “Venantd'unlangageplus"évolué"(Java),jedétesteles";"aléatoires.J'aipasséplusdetempsàenmettreouensupprimerdes";"qu’àcoder.”

• “Pourquoinechoisis-tupasunlangagesansbugspourtonTFE?”

• “1)pluspersonnen'utilisecelangageetj'aiquandmêmeespoirqu'aveclamassedelangages existants, il y aitmoyen de trouver un langage utile (Ruby, Python,...) et"facilepourdébuter".2) syntaxe lourdeetparfois incompréhensible (Begin,endetsesdérivéesainsiquedesrandomisé";"pourlesif/elsenotamment).3)IDEinfâmeàsouhait mais cohérent avec le point 1. 4) seul point positif : quelques outilssyntaxiquesutilescommelewith,leswitchconditionnelouencorelein[..].5)ahj'ai

Page 6: Travail de fin d’études en vue de l’obtention du diplôme

6

faillioublierlepiredetous:lestableauxquicommencentàl'indice1.Riendemieuxpoursemerletroublelorsdel'apprentissageduC…”

• “(-)Navigationdansl'IDEhorrible(mêmeunbloc-notesfaitmieux)(+)Sacapacitéàs'arrêter au premier faux pas du programmeur DEBUTANT car oui, ce langage estadaptéauxdébutantsuniquementselonmoi.”

JAVA

• “Ce qui me plaît : langage abordable, puissance de la JVM, objectifs concretsrapidementatteints,massivementutilisé.Cequinemeplaîtpas:grosprogrammeslentsàlacompilation,tropverbeux,peut-êtreunpetitcoupdevieux?Remarques:bienque Java8soit sorti,des langages fonctionnels (SCALA,HASKELL,CLOJUREetc....)sontmaintenantplusperformantspourmoinsdelignedecode.”

• “BienpluspratiqueàutiliserqueleC.Pasbesoindes’embarrasserdetoutel'histoiredespointeurs.Toutestfaitautomatiquementetdanslecadredel'apprentissage,çapermetdeseconcentrersur lesalgorithmesdebasesans tropdeproblèmes.Pourtout ce qui est orienté objet, l'héritage est juste un peu complexe à assimiler. Unpoint positif est la portabilité du langage qui permet d'utiliser, entre autres, uneinterfacegraphiquedebasefonctionnantsurtous lesos.Lacritiquequej'ai leplusentendue est la relative lenteur d’exécution mais à notre niveau, il n'y a aucunedifférence.Enbref,Javafaitpleindetrucsdansl'ombreetj'aienviededire,cen’estpasplusmalpourundébutant!”

• “LeJavaouvrelesportessurlemarchédel'emploi.”

• “J’aimebeaucouplesinterfacesgraphiquesenJava.”

J’enaiconclu,qu’aufinal,passerdePascalàJavafutunebonnechosetantlesétudiantsonttendanceàpréférercelui-ci.Deplus,ladocumentationetlacommunautéautourdeJAVAsontbienplusvastes.

2.2 Descriptiondesoutilsutilisés

2.2.1 Pythia Pythia est une plate-forme dont le but premier

est d’enseigner la programmation et la conceptiond’algorithmes. Elle exécute le code dans unenvironnement sécurisé afin d’éviter toute erreurpréjudiciablepouvantêtrecauséeparducodeétudiantmalicieux.Sonprincipalavantageestdefournirunfeedbackintelligentauxapprentis.

Laplate-formeoffreunenvironnementautonomequisupporteunenseignementdelaprogrammation.Ilestdoncpossibledeproposerdesexercicesauxétudiants,exercicesqu’ilspourront résoudre en soumettant leurs réponses. Le feedback renvoyé leur permet de

Page 7: Travail de fin d’études en vue de l’obtention du diplôme

7

corriger leurserreurs. Il est importantde souligner le faitquePythian’estpas liéqu’àunseul type de langage pour les énoncés. En effet, grâce à sonenvironnement“Bac-à-sable”,laplate-formeestmulti-langage.

2.2.2 Python3 Pythonestunlangagedeprogrammationorientéobjet,multi-

paradigmesetmultiplateformeutilisépourécriredifférentstypesd’application. Il est considéré commeun langagedehautniveaupermettantdes’axerautourduproblèmeàrésoudre,permettantd’utiliserdesmotsusuelsdeslanguesnaturellesainsiquedessymbolesmathématiques.Sasyntaxeassezrigoureusepermetunelisibilitébienplusévidentequed’autreslangagestelsqueCouJava.

Le choix du langagem’a été imposé ou plus sincèrement suggéré parmonmaître destage. Il me permet de pouvoir réaliser mes scripts analysant les codes soumis par lesétudiants.Lamanipulationdesfichiersaveccelangageestégalementbienplusfacile.

Deplus,j’utiliselemoduleBottledePython3pourimplémenterunserveurweb.Jen’aidoncpasbesoind’utiliserunserveurAPACHE/PHPpourdéployermoninterfaceutilisateur.

2.2.3 MySQLMySQLestunsystèmedegestiondebasededonnées(SGBD)relationnellefaisantpartie

deslogicielsdegestiondebasededonnéeslesplusutilisésaumonde.C’estdoncpourcelaque j’ai préféré utiliser ce système à PostgreSQL. En effet, légèrement différent de sonconcurrent, ilm’aété suggéréd’utilisercetautre systèmeadministrableviapgAdmin.Cependant,étantbienplushabituéetenconfianceaveclepremiergestionnairecité,j’aipréférénepasexplorerunnouveausystème.

Pour se faire, j’utilise un MySQL SERVER que je gère via l’applicationdécouverteàl’EPHEC:MySQLWorkBench.

2.2.4 LightweightDirectoryAccessProtocol(LDAP) Afindepouvoirsubvenirauxexigencestechniquesdel’EPHEC,ilaétédécidéd’utiliser

un serveur LDAP pour l’authentification sécurisée des utilisateurs d’ores et déjà existantsdanslesystème.

LDAP est un protocole reposant sur le Protocole Internet (TCP/IP) et permettantd’interrogeretdegérerdesservicesd’annuaire.L’arbrereprésentesouventlapolitiquedelastructurereprésentée.Onutilisedonclesracinesoulespremièresbranchesdel’arbrepourreprésenter les éléments de base de l’annuaire (le nom de la société, de l’application,...)tandis que les branches plus profondes représentent les entités (utilisateurs et groupesd’utilisateurs).CeserveurestdonccomparableàunActiveDirectory.

J’ai utilisé le logiciel Apache Directory Studio pour visualiser mon serveur mais j’aipréféréutiliserlescommandesviaunterminalpourajouterdesentités.

Page 8: Travail de fin d’études en vue de l’obtention du diplôme

8

2.2.5 HTML,CSS,jQuery&JSONL’HyperText Markup Language (HTML) étant le format de données par défaut pour

représenterlespagesweb,ilétaitcertainquecedernierseraitutiliséavecduCSSdansmonprojet.

Àcôté,jQuery,quiestunebibliothèqueduJavaScript(JS),permetl’interactionentrecedernier et l’HTML. Elle a l’avantage de simplifier l’utilisation du JSmais est plus lourde àexécuter.Néanmoins, pourmaplate-forme, ce désavantage estnégligeable.

LeJavaScriptObjectNotation(JSON)permetdeformaterdesdonnéestextuellesdelamêmemanièrequelefaitleXML.Certeslimité,JSONprésenteunestructureplusagréablequecedernier.

2.3 Solution Lasolutionquejeproposesediviseentroisparties:

Ø UnserveurLDAPdistantpermettantl’authentificationdesutilisateurs; Ø Une base de données MySQL distante contenant toutes les informations des

utilisateurs; Ø Maplate-formecontenantdiversesentités:

§ Pythia avec un environnement pour les machines virtuelles supportantJavaetPython(pourlesscriptsd’analyse);

§ ServeurwebPythonàl’aidedumoduleBottle; § UnebasededonnéesMySQL; § Uneinterfaceutilisateur;

Page 9: Travail de fin d’études en vue de l’obtention du diplôme

9

2.3.1 LeServeurLDAP

Afindesubvenirauxexigencesdel’EPHECetdesonsystèmeutilisateur,j’aiinstalléunserveurLDAPmeservantdoncdeserveurd’authentification,ceciafindesimulerleprobableActiveDirectory(AD)del’école.

Monserviced’annuaireestprobablementconçudifféremmentdeceluidel’institutmaisjepensequ’il s’en rapproche suffisamment,dumoinsdans la logique. J’y ai créédoncunarbreaveccommeracinedeuxcontrôleursdedomaines:“ephec”et“be”.

Plus bas, nous retrouvons un groupe d’utilisateurs à savoir “students” dans lequel seretrouvent tous les étudiants inscrits. Je ne suis pas certain de comment différencier lesétudiantsenTI5,marketingou comptabilité. Enmargede cetteunitéd’organisation,nousretrouvonslesutilisateurs“professeurs”ainsiqu’uncompteadmin.

J’ai choisi cette séparation en fonction des adresses mails actuellement utilisées. Uné[email protected][email protected].

Pourajouterungrouped’utilisateurs,ilsuffitd’utiliserlacommandesuivante:

ldapadd -cxWD cn=admin,dc=ephec,dc=be –f students.ldif

Ilestensuitedemandélemotdepasseduserveur.Cefichier“new-group.ldif”contientleslignessuivantes:

dn: ou=students, dc=ephec, dc=be objectClass: top objectClass: organizationalUnit ou: students

Demanièreassezsimilaire,unfichier“student.ldif”

dn: uid=HE111111, ou=students, dc=ephec, dc=be objectClass: top objectClass: person objectClass: organizationalPerson objectClass: inetOrgPerson cn: Jane Doe gn: Jane sn: Doe uid:HE111111 userPassword: {CRYPT}*

Il faut y fournir nom, prénom,matricule.Unmot de passe est à configurer par la suite àl’aidedelacommandesuivante:

ldappasswd -xWD cn=admin,dc=ephec,dc=be –S uid=HE111111,ou=students,dc=ephec,dc=be

5Technologiedel’Informatique

Page 10: Travail de fin d’études en vue de l’obtention du diplôme

10

Sur ce serveur, chaque mot de passe est crypté/haché en SSHA.Je suis bien sûr conscient que tous les utilisateurs EPHEC sont déjà existants sur l’AD del’école.Jetrouvecependantimportantdemontrercommentajouteruneunitéàl’arbre.

Une fois les différents utilisateurs créés, le serveur LDAP est prêt, il attend les requêtesprovenantdemonserveurwebPython.

2.3.2 Labasededonnéesdistante Égalementexigéeparl’EPHEC,unebasededonnéesexterneàcelledemaplate-formeestnécessaire. Les étudiants et enseignants ne devant pas créer un nouveau compte, il fautpouvoirfacilementallerchercherleursinformationsdebaseàl’aidedeleuridentifiant.

Ces informations sontassez simples :prénom,nom,emailetdans le casd’unétudiant, legroupeauquelilappartient.

Commepourl’ActiveDirectorydel’EPHEC,jen’aipaspuavoirconnaissancedelastructuredelabasededonnées.Celle-cicontientdoncselonmoideuxtables.

La première “USER” est la principale avec tous les utilisateurs et leurs informationsrespectivescitéesprécédemmentavecleurmatriculeouidentifiantcommecléprimaireafinderespecterl’unicité.

Laseconde,necontenantuniquementqu’unecolonne,meparaitmoinsprobablemaispasimpossible.Elleconservel’ensembledesgroupesouclassesdel’école,ceciafindepouvoirlesrécupérerassezfacilement.

2.3.3 Laplate-forme

2.3.3.1 Labasededonnéeslocale

Ayant commencémonprojetdans l’idéededevoir créerdesnouveauxutilisateurspour chaque étudiant ou enseignant, j’ai dû modifier mes plans par la suite. En effet,MadameVromansouhaitepouvoirintégrercetteplate-formeausystèmedel’EPHEC.Ainsi,ilfautallerchercherlesdonnéessurunserveurdistanttelquedécritaupointprécédent.JeneprendsdoncplusencompteunetableUSERlocale,lesmatriculesviennents’ajoutervialesvariablessessionsdesconnexions.Lesidentifiantsutilisateursdansmabasededonnéesnesontpasdesclésétrangères,eneffet,iln’yapasdetablelesstockantconcrètement.

Monsystèmesediviseencours,eux-mêmesdivisésenexercices.Chaquetentativepour un exercice spécifique de la part d’un utilisateur correspond à une soumission. Unexercicepeutdonccontenirunnombreélevédesoumissions.

Page 11: Travail de fin d’études en vue de l’obtention du diplôme

11

La première table que je peux brièvement décrire est donc la table COURSE,reprenantl’ensembledescours.J’aichoisilestermesanglaiscarjetrouvecelaplusagréableet plus intuitif. Elle contient principalement le titre, la brève description, l’identifiant duprofesseur principal du cours, l’identifiant du langagedeprogrammation choisi ou encorel’étatactuelducours.

Ilenvademêmepourlesexercicesà ladifférenceprèsquelesdescriptionssontstockéessurleserveurmêmeetnonenbasededonnées.Deplus,ilyal’identifiantducoursauquell’exerciceserapporte.

Chaquesoumissionse retrouvedans la tableSUBMISSION.L’étatet ladatedesoumissionsontbienévidemmentlesattributsclés.L’utilisateuret l’exerciceauxquelselleserapportesontégalementspécifiés.

Je peux ensuite vous parler des autres tables telles que FOLLOWS ou MODERATES. Lapremièrereprendlesétudiantsétantinscritsàuncoursenparticulier.Unétudiantpeutêtreinscritmanuellement, via son identifiant, ou via son groupe, lui-même inscrit. La secondetablereprendcettefois-cilesenseignantsayantdesdroitssurcertainscours.

Pourterminer,destablesmoinsimportantestellesqueLOGIN,LANGUAGEouencoreROLEreprennent respectivement ladateet l’heurede ladernière connexionde l’utilisateur, leslangages de programmation disponibles sur la plate-forme et les noms des rôles desutilisateurs(admin,professeur,étudiant).

2.3.3.2 LeserveurWeb

J’aiimplémentéunserveurwebaveclelangagePythonpourdeuxraisons.Lapremièreestpersonnelleetsubjective.Eneffet,jen’avaisjamaisentenduparlerdeserveurwebautrequ’ApacheetPHP,j’enaidoncsaisil’occasion.Laseconde,quantàelle,vientdemonmaîtrede stageMonsieurCombéfis. Ilm’a conseilléPythonpour la facilitéd’implémentationdessocketsetdoncnotammentlaconnexionplusaiséeavecPythia.

Poursefaire, j’aiutilisé lemoduleBottlequi,aprèsavoirétéimporté,nenécessitequ’unesimplecommandepourlancerleserveurwebenmodeécoute.run(host='localhost', port=8080, debug=True, reloader=True,app=app)

Les paramètres de la fonction run() sont assez simples. “Reloader” signifie qu’en cas demodificationsdans les fichiers, le serveur redémarre automatiquement, en lesprenant encompte.

Page 12: Travail de fin d’études en vue de l’obtention du diplôme

12

L’ensembledesfonctionnalitésdelaplate-formesontglobalementliéesmaisrépartiesdansdesfichiersPythonafindegarderlecodeclairetcohérent.Jenedécriraiiciqu’unepartiedechaquefichier.

1. Fichierserver.pyLeserveurBottleestexécutégrâceaufichierserver.py,touteslesrequêtesPOSTouGET

venant de l’interface utilisateur sont redirigées vers leur fichier respectif. Par exemple, larequête d’une création d’un exercice ou d’un cours est envoyée vers le fichier create.py.C’estégalementviacefichierserveurqueducontenuestenvoyéàPythiaetparconséquent,la réponse y est également réceptionnée. Pour cette connexion, j’utilise un socket seconnectantauport9000,celuioùPythiaestpardéfautàl’écoute.

Pourredirigerunerequêteverslabonnefonctiondufichierqui,àsontour,redirigeraverslebonfichier,ilfautvérifierlarouteempruntéeparlarequêteàl’aidedecettecommande:

@route('/create/exercice/<course>',method="POST")defcreate_exercice(course):

Lesdeuxpremièrespartiesdu lien formentuneroutestatiquealorsque lasecondepartieest dynamique et la valeur s’y trouvant peut être alors utilisée comme argument pour lafonctionliéeàlaroute.

Avant de rediriger une création, ce fichier vérifie également la validité des paramètresenvoyés. En effet, il analyse chaque élément envoyé en JSON et les compare aux valeursattendues. En cas d’erreur, le processus s’arrête et renvoie un message à l’interfaceutilisateurviaduJSON.

Il permet également le téléchargement des fichiers des soumissions, soit chaque fichierindividuellement soit, après compression, l’ensemble des soumissions sous forme d’unearchiveZIP.

Lorsde la connexionde l’utilisateurau serveurweb, il ya l’initialisationd’une sessionquipermettradelierdesvariablesàl’utilisateursurlefrontend.

# Création de la session session_opts = { 'session.type': 'file', 'session.data_dir': './session/', 'session.auto': True, 'session.timeout':1800 }

Unesessionestprogramméepourdurertrenteminutesmaximumeninactivité.Lecontenude la session est stocké dans un dossier session sur le serveur.

Page 13: Travail de fin d’études en vue de l’obtention du diplôme

13

2. Fichierfunction.pyL’ensembledesfonctionsutiliséesdanslesdiversfichiersPythonpourfaireinteragirlaplate-formesetrouventdanslefichierfunction.py.

Il est important de noter qu’au début de chaque fichier autre que server.py, la sessionactuellementinitiéeparcedernieresttransféréeafindepouvoirconstammentprendreencomptel’utilisateuractuellementconnectéàlaplate-forme.

Les fonctionsprincipalessontbienévidemment les fonctionsdeconnexionauxdifférentesbasesdedonnées.Ilfauteneffetpouvoirseconnecterpourenretirercedontnousavonsbesoin.

§ Connect():seconnecteàlabasededonnéeslocale§ EPHECconnect():seconnecteàlabasededonnéesdistante

Lorsd’uneconnexionvia l’interfaceweb,onvérifie le loginentré.Sicelui-cicontient«HE»suivi d’une série de chiffres, il sera d’ores et déjà considéré commeun étudiant. Le login«admin», qui reste modifiable, sera reconnu en tant qu’administrateur à plein pouvoir.Pour terminer, siaucundesdeuxcasprécédentsnes’applique, l’utilisateurseraconsidéréentantqueprofesseur.

LesfonctionstellesqueisAdmin(),isTeacher(),isConnected()parlentd’elles-mêmes.

Pourlereste,ilyamajoritairementdes«getters»telsquegetExercices()quirenvoietousles exercices et leurs attributs,getAllTeachers(),getLastLogin(),getUser()et bien d’autresencore.

La fonction getStudentsFor() est particulière, elle va premièrement chercher tous lesétudiantsexistantspourensuitelescompareraveclesétudiantsinscritsmanuellementàuncours (et non via leur groupe). Dans le cas où un étudiant est effectivement inscrit, ellel’ajoute à une liste. Dans le cas contraire, elle vérifie ensuite s’il n’est pas inscrit via lesgroupes inscritsaucours.La fonctionest implémentéedesorteque l’étudiantneserapascomptédeuxfoisdanslegroupedesinscriptions.

3. Htmlgenerator.pyLe fichier htmlgenerator.py s’occupe de générer l’html à renvoyer via JSON à l’interfaceutilisateur. Ceci sera davantage expliqué au point concernant le frontend. En effet,l’ensembledecefichiertraitantl’aspectvisuel,iln’estpasdansmonintérêtdeledécrireicimême.

En cas d’inactivité trop longue ou de déconnexion volontaire, toutes les navigationsjusqu’alorsautoriséesserontobligatoirementredirigéesverslapagedeconnexion,ceciafind’éviterl’utilisationd’unesessionnenousappartenantpas.

Page 14: Travail de fin d’études en vue de l’obtention du diplôme

14

4. Create.pyAprèschaquevalidationparserver.pylorsd’unecréation,lecontenuduJSONesttraitédanscreate.py.Ilyaalorsdeuxfonctions:lacréationd’uncoursoucelled’unexercice.

Danslecasd’uncours,c’estassezsimple.Latotalitédesparamètresencodésvontenbasededonnées.UnUID6dedouzecaractèresestgénéréetplacéen tantquecléprimaireducours à condition que celui-ci n’existe pas déjà. Dans le cas contraire, une autre clé seragénérée.Lesmodérateurs,groupesetétudiantssélectionnéssontégalementsauvegardés.

Danslecasd’unexercice,leprocessusestbienpluslongetpluscompliqué.Eneffet,créerunexerciceimpliquedecréerunetâchesurPythia,d’ycréerdiversfichiersscriptsPythonetde lancer unMAKE sur Pythia afin que la tâche soit compilée par le système pour enfinsupprimertouslesfichiersutileslorsdelacréationmaisdésormaisinutilesaprèscelle-ci.

Ilestimportantdesoulignerquelecontexted’unexercice(sonénoncéensomme)seranonpasstockéenbasededonnées,maisbiendansunfichiersurleserveur.

Lorsdudébutduprocessus,lescripts’assurequel’exercicen’existepasdéjàenvérifiantsoncheminabsolusurleserveur.

Lechemindufichiercontexteestcommesuit:

./CONTEXT/ID_COURSE/ID_TEACHER/ID_EXERCISE/ID_EXERCISE.desc

Dans ce même dossier se trouve answer.txt contenant le code complet produit par leprofesseur.

Lesdiversscriptsajoutésdansledossierdelatâcheserontdécritsdanslechapitredécrivantla création d’une tâche. Ceux-ci sont, tout comme danshtmlgenerator.py, construits enfonction des paramètres reçus afin de faire correspondre l’exercice aux spécificationsencodées.

Si Pythia devait rencontrer une erreur lors de la compilation et création de l’exercice, unmessaged’erreurseraitrenvoyéetleprocessusseraitinterrompu.

Encasderéussite,à lafinduprocessus, ilyauraàlafoisdesfichiersstockéscôtéserveur(description,paramètrespourlamachinevirtuelle,réponse,…)etàlafoisdesinformationsenregistréesenbasededonnées.

6UniqueID

Page 15: Travail de fin d’études en vue de l’obtention du diplôme

15

5. Modify.pyModify.py ne permet pas de modifier l’entièreté d’un exercice. En effet, un exercice

étantcompiléparPythia,lesfichierssontalorsdanslesystème.Seuleslesvaleursprésentesen base de données et l’énoncé sont modifiables. Modifier le code de l’énoncé pourraitengendrerdesincohérences.Quandunétudiantréussitunexercice,siensuiteleprofesseurle modifie, l’étudiant a-t-il toujours réussi l’exercice? Sa soumission indique oui alorsqu’actuellement,sonimplémentationn’estpeut-êtrepluscorrecte.

Ledéroulement,quantàlui,estassezsimilaireàlacréationd’uncours.Lesvérificationssontidentiques.Ilyaégalementlapossibilitédechangerl’étatd’uncours.Pouvoirpasserlecoursde‘public’à‘caché’ouencore‘supprimé’.

6. Submissions.pyAprèsavoirreçularéponsedePythiaconcernantuneimplémentationpourunexercice

donné,server.pydélèguelestâchesàsubmissions.py.

La fonction checking() va permettre à la fois de regarder si effectivement l’étudiant aréussi l’exercice mais également d’automatiser une sauvegarde, ceci afin de pouvoirtoujoursretrouverladernièresoumissionfaite.LaréponsedePythiaseradécriteplusloin.Cettefonction-cirenverraunmessageadéquatàlaréussiteounondel’apprenant.

Après cela, la fonction submitted() est appelée, elle se charge de stocker en base dedonnées l’identifiant unique de la soumission, l’utilisateur de la soumission, la date ouencore l’état. Lecontenude la tentative, lui,est stockécôté serveurde lamêmemanièrequeladescriptiondel’énoncé.

Lechemindufichierdelasoumissionuniqueestcommesuit:

./SUBMISSIONS/ID_COURSE/ID_TEACHER/ID_EXERCICE/ID_USER/ID_SUBMISSION.txt

Dans ce même dossier se trouve le fichier saved comprenant la dernière sauvegarde del’utilisateur.

Page 16: Travail de fin d’études en vue de l’obtention du diplôme

16

2.3.3.3 Pythia

Le principal composant demon produit final est bien évidemment la plate-forme Pythia.Celle-cipermetdecréerdesmachinesvirtuellesavecunenvironnementspécifiqueafindepouvoirensuitelesexécuterdepairaveclestâches,quicorrespondentauxexercices.

1. Créationd’unenvironnement

La tâche fastidieuse qu’est la conception d’un système de fichiers simple (Simple FileSystem) implique de trouver les paquets nécessaires et toutes les dépendances pourl’environnement.

Dans le cas de l’environnement adéquat pourma plate-forme, ilme fallut trouver lespaquets pour installer Python et Java. Les UML7 de base sur Pythia, sont d’originepratiquementvides,necontiennentquelestrictminimumdunoyauLinux,ceciafind’avoirdes machines les plus légères possible, permettant notamment de les lancer trèsrapidement.

Lors du MAKE, les différents paquets ajoutés dans le fichier de configuration serontinstallés sur le noyau Linux. Après cela, notre file system est opérationnel! Il est doncpossibled’exécuterdescommandesPythonouJava.

7UserModeLinux

Page 17: Travail de fin d’études en vue de l’obtention du diplôme

17

2. Créationd’unetâche

Ledossierd’unetâchecontientunemultitudedefichiersquejevaisvousdécrireetquisontégalementconçusparcreate.py,précédemmentexpliqué.L’entièretédecesfichierssetrouve,aprèsleMAKE,danslefilesystemdelatâche.Ilyadoncbiendeuxfilessystem:unpourl’environnementetunpourlatâche.

• controlPremierfichierdelatâche,celui-cicontientl’uniquelignepermettantl’exécutionde

la tâche.Eneffet,parunsimplechemin, ilappelle le fichierShell contenant toutes lesinstructionsUnixàexécuteràlachaine.

Parexemplepourmestâchesgénériques:/ephec.sh

• ephec.shLe fichier central de la tâche, il exécutera chaque fichier script ou fichier Java en

fonction de l’existence de l’un ou l’autre fichier. J’explique ceci à l’aide d’une captured’écran.

Page 18: Travail de fin d’études en vue de l’obtention du diplôme

18

Les premières lignes sont simples. L’UML ne trouvant pas automatiquement JAVAdanssonrépertoire,jerajouteunchemind’accèsàceluidéjàexistant.

Encequiconcernelesdroitsd’exécution, lamachinevirtuellenepeutpasexécuterlescommandesn’importeoù.Elledoitdonccréerundossiertemporaire,ydéplacertouslesfichiers.Ensuiteseulement,viennentlesétapesdelatâche.

• Student.pyPremierfichierscriptdelatâche,cescriptestunchoixdemapart.J’aioptépourune

pré-vérificationdecompilationenvérifiantsil’étudiantn’avaitpasplacédesidentifiantsinterditsouinutilestelsqueSystem.out.printlnouencoredeszonesdecommentaires.

Jevérifieégalementquel’utilisateurabiencommencéàimplémenterlaclasseoulafonctionsicelaestdemandé.Lapré-vérificationpermetd’éviterdelancerlecompilateurJAVAqui, lui, est bien plus lent. En cas d’erreurs détectées, elles sont placées dans lefichierwarnings.txt

• Warnings.txtSicefichierest inexistant, leprocessuspasseà lasuite.S’ilexiste, lecontenu(écrit

sousformeJSON)vaêtrerenvoyéparPythiaauserveurweb,quiàsontourlerenverraaufrontenddel’utilisateur.Pourqueducontenusoitrenvoyé, ilsuffitdel’envoyersurl’output,c’estpourcelaquej’utiliselacommandecat.

• Files.pySecondscriptdelatâche.Saprincipalefonctionestdeplacerlecontenudel’étudiant

dans l’éventuel contenu que l’enseignant avait défini. La chaine de caractères:«@@@xxx@@@»permetd’indiqueroùlecodedel’étudiantserainséré.

Implémentationprofesseur Soumissionenvoyéparl’étudiant

Page 19: Travail de fin d’études en vue de l’obtention du diplôme

19

Soumissionassemblée,envoyéeàlacompilation

• Errors.txtLes éventuelles erreurs engendrées lors de la compilation du nouveau fichier Java

sontstockéesà leurtour.Encasd’erreur,c’est le fichiererrors.pyquiestappeléalorsquedanslecascontraire,onexécutelefichierclasscréélorsdelacompilationréussie.

• Errors.pyCe fichier script se charge d’analyser chaque ligne d’erreur générée lors de la

compilation. Si possible, il les retranscrit en français et donne des petites astuces detempsàautre.Delamêmemanièrequepourleserreursdepré-compilations,PythialesrenvoiesousformatJSON.

Vu le grand nombre d’erreurs possibles, je n’ai pas eu le temps d’ajouter chaqueerreuràmesscripts.Lesprincipalesysont,ilestcependantpossiblequed’autressoientajoutéesprochainement.

• Run-errors.pyÀ l’instar du fichier précédent, run-errors.py analyse ligne par ligne les erreurs

généréescettefois-cilorsdel’exécution.Ilestdoncégalementprobablequetoutesleserreursnesoientpastraitées.

Rappelons le fait que ce script n’est appeléque si des erreurs d’exécutionsont eulieu. Dans le cas contraire, le processus arrive à la fin du fichier ephec.sh et Pythiarenvoiealorsuniquementl’outputrenvoyéparlefichierJAVAquistipulesiouiounon,lesbonnesréponsesontététrouvées.

Lecodeétudiantet lecodeprofesseursontsoumisàdesjeuxdetestsadéquatsenfonction des types des arguments. En cas de réponses identiques, la soumission estdéclaréeréussie.

Page 20: Travail de fin d’études en vue de l’obtention du diplôme

20

3. FichierdeconfigurationÀ chaque tâche est associé un fichier de configuration devant être lu par Pythia. Ce

fichierestsousformatJSON.

{ "environment": "java", "taskfs": "04546266456c/h.paul/86cdc5ec2db/86cdc5ec2db.sfs", "limits": {

"time": 10, "memory": 32, "disk": 50, "output": 1024 }

}

Il contient l’environnement à exécuter ainsi que la localisationdu file systemde latâche. Les autres paramètres sont ceux qui configurent le côté technique de la machinevirtuelle (temps limite d’exécution autorisé, mémoire vive allouée, mémoire physiqueallouéeetlenombredecaractèresmaximumqu’ellepeutrenvoyer).

Chaque fichier de configuration associé respectivement à son propre exercice setrouvesurleserveurdanslemêmedossierquesonfilesystem.

Pourbienfaireladistinction:

Ø LefilesystemdelatâchesetrouvecôtéserveurdansundossierendehorsdePythia.Ø Lefichierdeconfigurationliéàlatâcheestégalementàcetendroit.Ø Lefilesystemdel’environnementJava+Python3setrouve,lui,auseindePythia.

Page 21: Travail de fin d’études en vue de l’obtention du diplôme

21

4. ExécuterPythiaLa plate-forme open-source écoute, par défaut, sur le port 9000. Pour se faire, il faut

lancerunequeue(unefile)etunnombreadéquatdepools,programmescapablesdelancerplusieursmachinesvirtuelles.

Surcette illustration, lefrontendreprésentelesdifférentsutilisateurspassantvia leserveurwebBottle.Leserveursecharged’envoyer lecontenuviasocketversPythiaetsafiledetâches.

Chaque tâche est alors distribuée à un pool qui n’est pas occupé. Dans le cas oùaucunn’estlibre,latâchepatientejusqu’àpouvoirêtretransférée.Aprèstraitementparlamachinevirtuelle,lecontenurepasseparlaqueuequilerenvoieàsontourauserveur.

Lancercesdifférentscomposantsestassezsimple.

1) SepositionnerdansledossieroutdePythia;2) Lancerlacommandepourdémarrerlaqueue,quiécoutepardéfautsurleport9000

./pythiaqueue3) Lancerchaquemachineaveclacommandesuivante:

./pythiapool–tasksdir:«/SERVER/tasks/»Pardéfaut,lesfichiersdeconfigurationsontauseindePythia,or,dansmasolution,je lesplacesurleserveuren-dehorsdudossierprincipal,toutcommelesexercices.EncasdemiseàjourdePythia,lesexercicesneseraientdoncpassupprimés.

Page 22: Travail de fin d’études en vue de l’obtention du diplôme

22

2.3.3.4 InterfaceUtilisateur–frontendCe dernier point concernant ma plate-forme va décrire l’expérience vécue par les

différentsutilisateurs. Je vaisexpliquer laquasi-entièretédes fonctionnalitésactuellementdisponibles.

Ecoutantsur leport8080,nouscommençonsnotrenavigationpar lapageconnexionàl’adressesuivante:127.0.0.1:8080oulocalhost:8080.Laprésentationseferasipossiblesurserveurdistant.

• ConnexionNous avons alors face à nous le boutonnous connectant avec le serveur LDAP. En

fonction des identifiants rentrés et de leur exactitude, nous serons redirigés vers letableaudebord.Encasd’identifiantserronés,unmessagepertinentestaffiché.

• TableaudebordLa première interface apparait alors dynamiquement sans chargement d’une

nouvellepageHTML.Eneffet,toutsebasesuruneuniquepagedontlecontenuchangeàl’aidedejQuery.

Une barre de navigation est également apparue, celle-ci restera présente tant quel’utilisateurresteconnecté.

• CoursLe lien vers les cours présents dans cette barre de navigation permet de pouvoir

retourneràtoutmomentsurlalistedescoursdisponibles.

Lecontenuprincipalestuntableauavectrireprenant lescours,stipulant leurtitre,leur(s)professeur(s), leurniveaudedifficulté.Pourdesutilisateursavecdesdroitsplusélevés,lestatutducoursestégalementvisible.

- Unétudiantnepeutvoirquelescoursauxquelsilestinscritetdontlestatutestpublic;

- Unprofesseurpeutajouteruncoursetvisionnerlescoursdontilestmodérateur.Cependant,lescourssupprimésluiserontmasqués.Lescourssontmodifiablesetuniquementsupprimablesentantquecréateur;

- Un administrateur peut voir tous les cours, en ajouter, les modifier ou lessupprimer.

Page 23: Travail de fin d’études en vue de l’obtention du diplôme

23

• AjouteruncoursCettepagen’estvisiblequepourlesenseignantsoulesadministrateurs.

Lecréateurayantpleindroitsursoncours,ildoitfournir:

- Letitre:maximumcinquantecaractères;- Lelangagen’estpasmodifiable,unlangagenepeuts’ajouterquemanuellement

vialesystèmePythiaetnonparmaplate-forme.J’aidoncplacéleselectdanslebutdeprévoirunéventuelfuturavecd’autreslangagessurcelle-ci;

- Unedescription,elledoitpouvoirdécrireenquelquesmotslecours,lesexercicesqu’ilcontient;

- Lestatutducours(PublicouCaché);- Ajouterunétudiantmanuellementviasonmatricule,sonnomousonprénom;- Un tableau reprenant les étudiants d’ores et déjà ajoutés est affiché (tri

autorisé);- Deux tableaux contenant les groupes inscrits et les groupes non-inscrits. Les

groupessontinterchangeablesentreceux-ci;- Deux tableaux contenant les professeurs modérateurs et les non-sélectionnés.

Lesenseignantssontinterchangeablesentreceux-ci.

En cas d’erreur, un message adéquat apparait sur la page. Il appartient donc àl’utilisateurdemodifierleschampsnécessaires.

• ModifieruncoursCettepagen’estvisiblequepourlesenseignantsmodérateursducoursconcernéou

lesadministrateurs.

Elleestidentiqueàlapagedecréation,sicen’estqu’ellepossèdeunecontrainte.

- Unprofesseurn’étantpas lecréateurducoursnepeutpasmodifier la listedesmodérateurs.

• SupprimeruncoursetleréafficherCetteoptionretranscritesouslaformed’unboutonn’estdisponiblequesurlapage

descoursetn’estvisiblequepourlescréateursd’uncoursettouslesadministrateurs.

Unmessagedeconfirmationestdemandépourévitertoutemanipulationinvolontaire.

Encasdesuppressioneffective,lecoursesttoujoursdisponibleenbasededonnéesetsur l’interfacede l’administrateur.Dans lecasoù l’enseignantsouhaiteréaffichercecours,ildevracontacterparlui-mêmel’admin.Cedernierpourralefairesoitvialapagedemodification en changeant le statut du cours soit via un bouton. Le cours repassealorsenstatutcaché.

Page 24: Travail de fin d’études en vue de l’obtention du diplôme

24

• ExercicesCetaffichagecontienttouslesexercicesdisponiblespouruncoursspécifique.

Toutcommelescours,ilssontaffichésdansuntableausimilaireavecuneoptiondetri.

Lecontenudutableauestcependantdifférentsurunpoint.Lesétudiantsnevoyantpas le statut de l’exercice, il est remplacé par le statut de leur éventuelle dernièresoumissionpour cetexercice-là. Si l’étudiant l’adéjà réussimaisqu’il commet toutdemêmeuneerreurlorsd’unetentativepostérieure,l’exerciceseraconsidérécommenon-réussi.Ilfautsoulignerqu’iln’yaqu’unseulprofesseurparexercice,bienquel’ensembledesenseignantsmodérantlecoursyaittoustoutdemêmeaccès.

- Unétudiantnepourravoirquelesexercicesquisontpublics;- Lesexercicesnesontpasentièrementmodifiables(cf.Modify.py);- Lesexercicessontsupprimables.Leprocessusestidentiqueàceluid’uncours;- Un professeur modérant ce cours peut visionner tous les exercices, sauf ceux

supprimés.Ilpeutenajouteretvoittouteslessoumissionsducours;- Unadministrateurabienévidemmentpleinpouvoir.

• AjouterunexerciceÀ l’instar d’un cours, l’enseignant doit fournir du contenu. Cependant, celui-ci est

bienplusprécisetspécifique.Unmessaged’erreurapparaitsinécessaire.

- Unintitulé:cinquantecaractèresmaximum;- Laclasseprincipaleetlafonctionprincipaledel’énoncé;

Pour ces deux derniers paramètres, le professeur doit décider si oui ou nonl’étudiant devra les fournir ou si l’exercice se déroulera à l’intérieur de ceux-ci(cf. lesschémasdeFiles.py). Ildoitdonccocherounonlescasesen-dessousdechaqueoption.

- La liste des éventuels arguments de la fonction principale(uniquementfournirletypedel’argument);

- Il faut ensuite fournir la configuration pour la machine virtuelle(cf.Fichierdeconfiguration);

- Lestatutpublicoucaché;- Leniveaudedifficulté(de0à5,lepasestde0.5);- Le contexte qui correspond à l’énoncé de l’exercice. Le textarea est muni de

TINYMCEpourpouvoirdonnerunaspectplusagréableaucontexte;- Lecodecompletaveccommenomdeclasse«Teacher»afindepouvoirfairela

distinctionaveclaclassedel’étudiant;- Lapartiedecemêmecodequel’étudiantnedoitpasfournir(cf.lesschémasde

Files.py)ainsiquelachainedecaractèresoùlecodedel’étudiantdoits’insérer.

Page 25: Travail de fin d’études en vue de l’obtention du diplôme

25

• SoumissionsDisponiblepourtouslesprofesseursmodérantlecoursetlesadministrateurs,cette

page permet de visionner toutes les soumissions de chaque étudiant pour l’exercicechoisi.

La date de dernière connexion ainsi que les dates de chaque soumission et leurréussiteounonsontaffichées.

Le professeur peut alors choisir de télécharger individuellement une tentative del’étudiantouplutôttouteslestéléchargersousformatZIP.

Letableaupossèdelesoptionsdetrietderecherche.

• StatistiquesIl est possible, pour les professeurs ayant accès, de visionner quelques statistiquesconcernantunexerciceouuncours:

- Lenombred’étudiantsinscrits;- Lenombredesoumissionspouruncoursouunexercice;- Lepourcentagederéussitevis-à-visdesétudiants;- Lepourcentagederéussitevis-à-visdessoumissions;- …

• ExerciceLapagelaplusimportanteestcelleoùlessoumissionsvontpouvoirêtreeffectuées.

- Il y a la possibilité de masquer l’énoncé afin d’éviter d’avoir l’affichage tropencombré;

- L’option«sauvegarder»estdisponible;- Chaqueenvoiengendreunesauvegarde;- Unprofesseurpeutchargerlessoumissionsd’unétudiantdonné;- On peut changer à toutmoment le thème de son éditeur. Le choix est stocké

dansuncookievalableseptjours;- Zonedemessagespourleserreurs,lesastucesetlesconseils.

Page 26: Travail de fin d’études en vue de l’obtention du diplôme

26

3. Difficultésrencontrées

- Lapremièredifficultérencontréefuttoutsimplement l’environnement. J’étaisdansl’incapacitéd’installerunemachinevirtuelleouundualbootsurmamachine.Monordinateur bloquant les démarrages autres que sur l’OS actuel et la lenteurconsidérable de la virtualisation m’empêchèrent de commencer assez rapidementmon travail. Pendant ce temps, je fis des recherches de documentations qui mepermirent de mieux débuter une fois paré. En effet, après plusieurs journées detentatives, je finis par réussir à débloquer l’UEFI8 pour enfin installer un Linuxmepermettantdedébutermontravail.

- J’aiétépendantdelonguessemainesdansledouteconcernantlesutilisateursdemaplate-forme. Fallait-il des nouveaux comptes? Pourrais-je accéder à l’ActiveDirectory?Desincertitudesassezdéconcertantessurlelongterme.

- TouslesmodulesnesontpasoptimauxsurPython3,parexemple, lemoduleLDAPestassezbrouillonetnepermetpasde fairecequed’autresmodulespermettent.Or, j’ai cherché pendant des heures avant de trouver comment faire. La faute àquoi? Trop peu de documentations. J’ai donc contacté moi-même le créateur dumodule,mailauquelilm’aréponduavecbeaucoupdesympathie.

- Pythia étant assez peu connu, les erreurs rencontrées et les messages d’erreursinconnusauwebfurentdifficilesàdéchiffrer.

- Jen’aiutiliséungestionnairedeversionquetrèstardivement.Decefait,j’aiprisplusde tempsà réécrirequelquechosedeperdualorsqu’aveccetoutil, celaauraitétébienplusrapide.

8UnifiedExtensibleFirmwareInterfacedéfinitunlogicielintermédiaireentrelemicrologiciel(firmware)etlesystèmed'exploitation(OS)d'unordinateur.Cetteinterfacesuccèdesurcertainescartes-mèresauBIOS.

Page 27: Travail de fin d’études en vue de l’obtention du diplôme

27

4. Améliorations

- Actuellement, la création est générique. Elle ne permet donc que des exercicessimples. Il est cependant possible de créer manuellement des exercices pluscomplexesenécrivantlesscriptssoi-même.Uneaméliorationàapporterseraitdoncd’élargircettegénéricité.

- Lamodificationtechniquedesexercices.- Ajouter plus tard d’autres langages à la plate-forme serait pour moi une réelle

réussite.- Plusdestatistiquespertinentes.- Unmoduleanti-plagiatpourdesexercicesplusimportants.- Pouvoirimporterdeslibrairies.- Pouvoirimporterd’autresclasses.- Mettredescontraintestemporellesoudescontraintessurlenombredesoumissions.- Rendrelesexercicesunpeuplusludiques,plusattrayants.

Page 28: Travail de fin d’études en vue de l’obtention du diplôme

28

5. Conclusion

Aprèsdenombreusesheuresdeprogrammation,jesuistoujoursaussicontentdemaproposition de TFE. J’aime en effet énormément l’idée d’avoir la possibilité de fournir unoutilàl’écoleoùj’aiapprispasmaldechosesdanscertainsdomaines.

Dûaufaitqueleurproduitfinalneserapeut-êtrejamaisutilisé,plusieursétudiantsdemonannéetrouventmoinsdemotivationàréaliserleurtravail.Pourmapart,savoirquedes étudiants auront peut-être la possibilité d’utiliserma plate-forme est unemotivationsupplémentaire.Celamedonneenvied’apporterdenombreusespossibilitésàmonproduit.

Après la remise finale demon travail, j’espère garder contact avec les enseignantsétant intéressés par mon travail. J’espère que ceux-ci me contacteront afin de pouvoirapportertelleoutellecorrection.Ilesteneffetpossiblequemonproduitnesoitpasoptimalpour tous les exercices qu’ils souhaitent proposer à leurs étudiants. Voirmon travail êtreintégréàl’enseignementdelaprogrammationàl’EPHECseraitpourmoiuneréelleréussite.

Encequiconcerne lesacquis, j’aibeaucoupapprisnotammentdans l’utilisationdeLinuxetsesterminauxUnix.Pythonétantunnouveaulangagepourmoi,jepeuxdirequecelangage est désormais mon préféré, celui que je prônerais dans le cas de conceptionsd’applications.Malgré la découverte d’un nouveau type de serveurweb, jemaintiensmapréférencepourAPACHEetlePHPentantquelangagedeprogrammation.

Pythia reste par-dessus tout un projet d’avenir. En effet, suite à mon granddévouement lors demon stage concernant son amélioration etmamotivation à domicilepourmeneràbienmontravaildefind’études,MonsieurCombéfissouhaitegardercontactavec moi afin de pouvoir, plus tard, établir une future collaboration dans le but dedévelopperdavantagePythiaetsescomposants.

Unautrevéritableacquisesttoutsimplementlagestiondutempsetlerespectd’unplanning.J’aiprissoindebienrespectermeséchéancespersonnellesconcernantdespartiesplusoumoins importantesdemonprojet,quitteà travaillerbienplus tard certains jours.Pourlapremièrefois,jen’aipassentiunréelmanquedetempsoudustresspourlaremised’untravail.

Pourterminer,aprèscestagefructueuxetcetravaildefind’étudescaptivant,jesuisd’oresetdéjàcertaindevouloirfairedelaprogrammationmonfuturmétier.Jepossèdeunevéritablepassionpourlaconceptiondeprogrammes,d’algorithmesouencorelarésolutiondeproblématiques.

Page 29: Travail de fin d’études en vue de l’obtention du diplôme

29

6. Webographie

v ThePythiaProject–www.pythia-project.org(consultéenfévrier2014)v BuildinganAddressBookwithOpenLDAP

www.onlamp.com/pub/a/onlamp/2003/03/27/ldap_ab.html(consultéenmai2014)

v HowtocreateanewuserinOpenLDAPmindref.blogspot.be/2010/12/openldap-create-user.html(consultéenmai2014)

v Bottle:PythonWebFramework–bottlepy.org/docs/dev/index.html(consultéen2014)

v davispuh/MySQL-for-Python-3-https://github.com/davispuh/MySQL-for-Python-3(consultéenmars2014)

v WelcometoPython.org-https://pypi.python.org/(consultéen2014)v StackOverflow-stackoverflow.com(consultéen2014)v MySQLDocumentation-dev.mysql.com/doc/(consultéenmars2014)v jQueryUI-jqueryui.com(consultéenmai2014)v jQueryAPIDocumentation-api.jquery.com(consultéenmai2014)v W3SchoolsOnlineWebTutorials-w3schools.com(consultéenmai2014)v Mottie/tablesorter-https://github.com/Mottie/tablesorter(consultéenmai2014)v CodeMirror-codemirror.net(consultéenfévrier2014)v Bootstrap-getbootstrap.com(consultéenmars2014)v RegExr:Learn,Build,&TestRegEx-regexr.com(consultéen2014)

Page 30: Travail de fin d’études en vue de l’obtention du diplôme

30

7. Annexes

I. Schémarelationnel

Page 31: Travail de fin d’études en vue de l’obtention du diplôme

31

II. Diagrammed’activité:Soumissiond’unétudiant