Vous êtes sur la page 1sur 8

Stage technique 2me anne

J'ai du, dans le cadre de ma formation d'ingnieur l'Enseirb-Matmeca, raliser au cours de


cet t, un stage en entreprise. Ce stage, la diffrence de celui que j'avais ralis en premire
anne, se devait d'tre technique et de me permettre de mettre directement en application le savoirfaire que j'avais acquis depuis le dbut de ma formation. J'ai ralis ce stage dans une start-up dont
les locaux se situent Paris dans l'incubateur Prine (Paris Rgion Innovation Nord Express
XVIIIme), pendant une dure totale de 3 mois.

Prsentation de l'entreprise
L'entreprise dans laquelle j'ai ralis mon stage est Kwyk (http://kwyk.fr). C'est une jeune
start-up cre il y a deux ans par deux ingnieurs tout justes diplms de l'cole Centrale Paris, qui
en sont aujourd'hui encore les deux seuls employs. Le produit de l'entreprise est un site internet
proposant des exercices de Mathmatique destins aider les professeurs faire travailler leurs
lves. Il est vendu des professeurs au sein d'tablissements sous forme de comptes
enseignants/lves donnant accs au site. L'entreprise compte ce jour une quinzaine
d'tablissements utilisant le site et a conclu au cours de l't un contrat avec la maison d'dition
Hachette lui assurant une rentabilit plus confortable.
L'activit de l'entreprise se dcoupe en deux taches trs distinctes : la premire, technique,
consistant en la conception, l'amlioration et l'entretien du site internet et la deuxime en le
dmarchage et la vente du site. Les deux fondateurs de l'entreprise, Nicolas Patry et Roch Feuillade,
assument respectivement chacun une tche. J'ai assist Nicolas, directeur technique de l'entreprise,
dans un ensemble raisonnable de missions au cours de mon stage.

Prsentation des missions techniques


Kwyk n'est ce jour pas le seul site internet proposant des exercices de Mathmatiques aux
lves. Il est cependant le seul pour lequel ils sont gnrs spcifiquement pour chaque lve et
auto-corrigs. Il empche ainsi aux lves de copier entre eux de manire basique et offre un temps
prcieux aux professeurs. Mais cela a videmment un coup : l'intelligence. Derrire chaque exercice
propos sur le site se cache du code python qui permet sa gnration avec des variables alatoires et
qui permet de valider la rponse donne par l'lve.
Ma premire et principale mission tait d'crire ces codes gnrateurs d'exercices.
Dtaillons, au travers d'un exemple les difficults que cette criture recle.

Un lve se voit donn un exercice de drivation de fonctions sous la forme suivante :

Le code ayant gnr cet exercice est grossirement de la forme suivante :


a, b, c, d = [randrange(-9, 10) for _ in range(4)]
operations = [
(c*x**2 + d)/(a*x + b)**2,
(a*x + b)**2/(c*x**2 + d),
]
Deux points sont prendre en considration :

la plage des valeurs que peuvent prendre les coefficients a, b, c et d

Dans le code donn ici, on choisit les coefficients des polynmes dans l'intervalle [-9, 9], ce qui ne
semble pas poser de problmes au premier abord pour la lisibilit de l'exercice. Cependant, sa
rsolution implique des produits de membres qui peuvent se retrouver fastidieux et aboutissants
des valeurs numriques normes. Les exercices du site tant faits pour tre rsolu de tte, il faut
faire en sorte de garder les valeurs numriques de l'exercice dans une plage raisonnable et donc de
bien contrler les valeurs initiales.

comment valider les rponses donnes par les lves

Les rponses attendues des lves, mme si elles doivent tre crites de la manire la plus minimale
possible ou sous une forme spcifique, ne sont pas uniques. En effet, dans l'exemple donn, la
bonne rponse est un quotient de polynmes. Or un polynme peut s'crire de nombreuses faons
diffrentes, selon l'ordre des coefficients dans lequel on l'crit. On ne peut donc pas juste donner
une rponse type dans le code et le confronter basiquement la rponse donne par l'lve. Il faut
donc faire appel aux mathmatiques formelles.
Ces deux points donnent un aperu de la complxit se cachant derrire chaque exercice. Par
ailleurs, les exercices tant tous assez spcifiques, il est difficile de rutiliser du code fourni dans un
exercice pour en crire un autre. Difficile donc de mettre en place un systme permettant
l'automatisation des gnrateurs.

Ma seconde mission, qui s'est droule en parallle de la premire, a t induite par des
besoins que j'ai ressenti lorsque j'ai commenc implmenter des gnrateurs d'exercices de
gomtrie. La librairie d'outils de gomtrie dj en place et celle de dessin se sont rvles
insuffisantes quant mes besoins. J'ai donc commenc par apprhender le code dj existant pour
pouvoir par la suite rajouter les fonctionnalits qui me manquaient.
Enfin, ma troisime mission a consist en l'implmentation d'un outil de recherche en
JavaScript pour sonder la base de donnes d'exercices prsente sur le site.

Ralisation des missions

1. Dcouverte de l'environnement et des solutions dj existantes


Kwyk proposait dj, mon arrive, une vaste architecture permettant la gestion des
exercices. Elle avait t pense pour permettre une personne sans connaissances pointues en
Python d'implmenter des gnrateurs sur des feuilles de code spares. J'ai donc rapidement pris
connaissance de l'environnement propos et commenc crire des gnrateurs d'exercices,
simples.
Cependant, mon ide en arrivant dans l'entreprise tait de comprendre pourquoi l'architecture n'avait
pas t faite pour permettre aux professeurs de Mathmatiques eux-mmes d'crire les gnrateurs.
J'ai donc consacr beaucoup de temps questionner le systme mis en place et ses motivations.
Cela m'a permis de prendre connaissance du systme qui grait la gnration et la correction des
exercices, et de rpondre ma question. La rponse tant la trop grande varit de chapitres des
mathmatiques traite par le site et l'utilisation des mathmatiques formelles.
La complxit des exercices dont j'crivais les gnrateurs a augment au fil des jours et a impliqu
l'utilisation de mathmatiques formelles, travers la librairie sympy, plus importante. Cette librairie
m'tant inconnue, un temps apprhension m'a t ncessaire. J'ai, aprs quelques semaines,
commenc m'occuper d'exercices de gomtrie. L encore, le site utilisait des librairies inconnues,
pour manipuler ou dessiner des objets gomtriques, ce qui a impliqu un temps d'tude de ma part.
Contrairement sympy, les librairies de gomtrie taient des librairies propres au site et ne
rpondaient qu'aux besoins prcdemment exprims. Je les ai donc rapidement mises en dfaut et
ressenti le besoin de les enrichir.
Cela a marqu la fin de ma phase d'approche du site et des solutions qu'il proposait et le dbut de
ma phase d'enrichissement de l'architecture.

2. Enrichissement de la librairie d'outils de gomtrie


La premire mise en dfaut de la librairie de gomtrie a t relative ses performances
lorsque j'ai constat des temps de gnration d'exercices anormalement levs. Le processus de
gnration d'exercice tant assez riche en composantes, j'ai tout d'abord procd identifier la partie
de code responsable de la baisse de performance grce des mesures de temps d'excution de
chacune d'entre elles. Le problme s'est avr tre la manipulation de donnes non simplifies. J'ai
donc, en veillant garder une rtrocompatibilit, apport une solution d'optimisation optionnelle en
traitant les donnes sous forme simplifies. Le fait de garder inchangs les comportements induits
par la librairie avant modification a impliqu une tude approfondie de la libriarie ce qui m'a
apport une plus grande aisance dans son utilisation par la suite.
La deuxime mise en dfaut de la librairie tait un manque de fonctions annexes. De la
mme manire qu'il faut faire attention aux intervalles dans lesquels tirer alatoirement les variables
pour des formules de calcul, il faut faire attention la forme des figures gnres alatoirement en
gomtrie. Par exemple, un triangle dont on souhaiterait tudier certaines proprits se doit de ne
pas tre trop plat ou trop petit.
Les figures que l'on souhaitait pouvoir gnrer alatoirement taient dans la pratique des
polynomes. Ma premire approche tait de tirer des points altoirement dans un cadre relativement
arbitraire et de vrifier par la suite si les figures cres par ces points rpondaient certains critres.
Cette approche, basique, s'est rvle gourmande en ressources car elle impliquait la gnration de
nouvelles figures tant que celles-ci ne vrifiaient pas les critres. Cette approche s'est aussi avre
amliorable dans certains cas. Nanmoins, la solution algorithmique que j'avais apport s'est revele
lgante de par sa gnricit.
Voici un exemple de son application :

gen = choice([triangle, rectangle_triangle])


T = gen_constraints(
gen, {'rotate': True},
[side_lengths_between, {'length_min': 6, 'length_max': 13}],
[angles_between, {'angle_min': pi/6}],
)
triangle et rectangle_triangle sont des gnrateurs renvoyant un triangle.
On gnre ici alatoirement un triangle, parfois rectangle, dont la longueur des cts est comprise
entre 6 et 13 et dont les angles sont au minimum de pi/6.
J'ai amlior cette solution dans le cas o seules les longueurs des cots taient contrler. Pour le
cas d'un polygone n cots, on choisit alors altoirement n-1 longueurs dans la plage donne et
construit pas pas les cts pour arriver aux n points.
Le travail sur cette librairie s'est avr riche car il m'a impos dans un premier temps de l'tudier
compltement pour pouvoir y apporter des modifications et dans un deuxime temps de me soucier
des performances de mes algorithmes, chose qu'il n'est pas toujours de coutume.

3. Enrichissement de la librairie de dessin


De manire plus accentue que pour le reste des exercices , ceux de gomtrie ncessitent
une attention toute particulire quant la prsentation de leur nonc. En effet, afficher du texte ou
des formules mathmatiques ne reprsente pas une grande difficult (mme s'il faut quand mme
utiliser d'autres outils que le couple html css pour afficher des symboles mathmatiques),
contrairement afficher des figures. Une librairie de dessin a donc t mise en place dans
l'architecture. Celle-ci fait le lien entre les outils gomtriques produits par la librairie de gomtrie
et la librairie Raphal Js, une librairie de dessin en JavaScript. Cette librairie n'avait aussi t
implmente que relativement aux besoins prcdemment exprims jusque-l et s'est revele
insuffisante. L'enrichissement de celle-ci a ncessit plus de temps que la prcdente dans la mesure
o elle conduisait au dessin de figures, et dont la validit est une notion hautement subjective.
La librairie contenant nanmoins un socle dj solide et posant quelques conventions, j'ai du l
encore entreprendre de l'enrichir de manire cohrente, ce qui a ncessit une phase prliminaire
d'tude srieuse. Les enrichissements fournis ont contribus terme pouvoir obtenir des dessins
riches en trs peu d'instructions comme le tmoigne l'exemple suivant.

points = [A, B, O, I, M]
m = choice(['single_dot', 'double_dot', 'cross'])
segments = [
Segment(M, N, style='-'),
Segment(O, Q, style='-'),
Segment(P, N, style='-'),
Segment(Q, M, marker=m, marker_size=.3, style='-'),
Segment(Q, P, marker=m, marker_size=.3, style='-')
]
elements = points + segments + [Circle(O, radius)]
push_labels([A, B, M, I], from_=O)
push_labels([O], from_=M)
drawing = draw_html(*elements, scale=(20, 20))
Ce code fournit la figure suivante :

4. Implmentation d'un outil de recherche


Le site Kwyk propose aux professeurs de Mathmatiques une vaste panoplie d'exercices
donner leurs lves. Dans un souci de facilit pour eux, ces exercices sont rangs dans une
arborescence comme ils ont l'habitude d'en voir dans l'environnement windows.

Cependant, comme on peut le voir dans cet exemple, l'arborescence est assez consquente et il peut
tre fastidieux d'y trouver des exercices spcifiques. J'ai donc suggr d'y ajouter une fonctionnalit
de recherche via un champ de texte. L'ide a t bien accueuilli et j'ai entrepris de la raliser.
J'ai donc tout d'abord tudi le systme mettant en place cette arborescence, un module JavaScript,
pour pouvoir y apporter des amliorations. Contrairement aux travaux raliss prcdemment,
celui-ci impliquait l'utilisation des langages html css, que je connaissais dj, mais aussi JavaScript
et jQuery, que je ne connaissais pas encore. Il m'a donc tout fallu un petit temps de familiarisation
avec ces langages.
Dans l'tat initial, la colonne de gauche contient l'arborescence des dossiers et la colonne de droite
contient tous les exercices contenus dans un rpertoire racine que l'on a slectionn. La premire
fonctionnalit de la barre de recherche a consist a afficher dans la colonne de droite tous les
exercices dont le nom contenait un des mots de recherche. Cette fonctionnalit n'a pas reprsent de
difficult algorithmique particulire sinon des difficults lies au langage.
La seconde fonctionnalit de la barre de recherche a consist colorer les dossiers contenants des
exercices dont le nom correspondait avec un des mots de recherches. Cette fonctionnalit a t plus
complexe raliser d au fait de l'absence de structure de donne statique. En effet, l'arborescence
des dossiers telle qu'elle est affiche est gnre dynamiquement chaque ouverture ou fermeture
de dossier. Il a donc fallu trouver une solution de navigation via les balises html dans cette

arborescence. J'ai pu y mettre en application mes connaissances sur les parcours d'arbre.
Voici le rsultat des deux fonctionnalits conjugues.

Enfin, une fois cet aspect visuel termin, on m'a charg de mettre en place un systme de logs sur
cet outil de recherche. En effet, il est intressant lors du dploiement d'une nouvelle fonctionnalit
de voir comment ses clients y ragissent et si elle les aide plus qu'elle ne les drange.
Il a alors fallu rentrer dans le systme Django du site pour pouvoir crer des requtes contenant les
mots de recherche et pour pouvoir stocker ces mots ensuite dans la base de donnes. J'ai pu cette
occasion un peu plus apprhender le fonctionnement du site web et mettre en application mes
connaissances sur le framework Django.

Conclusion
Bien que je considre n'avoir pas avoir tant mis en application les connaissances et le
savoir-faire acquis l'cole durant ce stage, je pense avoir retir beaucoup de cette exprience.
Tout d'abord, j'ai dcouvert l'environnement de la start-up et ai pu le confronter avec celui de la
grosse entreprise que j'avais expriment l'anne prcdente. J'ai particulirement apprci
l'ambiance de travail, sereine et amicale, qui contribuait mettre chacun dans un bon tat d'esprit au
jour le jour et ainsi n'tre jamais rticent aller au travail le matin. De plus, cette ambiance cre
des liens certains entre les personnes et facilite les changes, chose importante dans le cas d'un
stagiaire qui est souvent amen questionner. Par ailleurs, j'ai t sensible une convention
prsente chez Kwyk qui tait que chacun pouvait, un jour dans la semaine, travailler sur un projet
personnel pouvant profiter l'entreprise. Cela permettait de faire un break avec le travail courant et
de potentiellement s'panouir un peu plus que les autres jours de la semaine. C'est dans ce cadre que
j'ai ralis l'outil de recherche. Enfin, Kwyk ayant ses bureaux dans un incubateur, nous tions
constamment en contact avec d'autres start-ups innovantes et dynamiques ce qui crait un
environnement diversifi et trs riche.
Concernant le cot technique, Kwyk a cr et entretient son produit sans prestations
extrieurs et doit donc pouvoir traiter tous les domaines qui y sont lis :organisation de projet,
dveloppement, services webs et innovation. Je connaissais certaines notions dans ces domaines
uniquement de manire thorique et ai donc pu en voir des applications avec le plus grand plaisir.
Au niveau des langages, j'ai pu amliorer mon niveau de connaissance de Python et apprendre le
JavaScript et jQuery. Pour ce qui est du Python, je connaissais certes dj ce langage mais beaucoup
de mcanismes m'taient encore inconnus ou bien je ne les maitrisait pas encore. J'ai apprci
passer du temps dcouvrir des nouveaux aspects de ce langague et les mettre en application dans
la mesure o je gagnais le plus souvent en puissance dans l'criture.
Par ailleurs, j'ai pu voir une architecture web Django de taille bien plus consquente que celles que
j'avais pu voir auparavant. Je n'ai pas ressenti de problmes particuliers lis cette grande taille et
cela m'a confort dans mon got pour ce framework.
Enfin, j'ai pu voir une mise en application des problmatiques lies la gestion d'un site internet qui
doit toujours tre oprationnel. Par exemple, la gestion des variations de charges exerces sur les
serveurs.

Vous aimerez peut-être aussi