jeudi 17 juin 2010

Retour sur l’épreuve des PTIs du Bts Ig

Ca faisait un moment que je n’avais pas pris le temps d’écrire un peu sur mon blog, et oui comme beaucoup j’étais en période d’examen. Je rappel à ceux qui ne le savent pas que je suis en deuxième années de BTS Informatique de Gestion option Développeur d’applications (oui je sais : c’est long ! comme ce billet je préfère vous prévenir alors accrochez vous) par correspondance via le CNED de Poitiers. Les épreuves ont commencées le 11 mai avec les écrits sur une semaine, puis les oraux la semaine après, suivant les personnes ça pouvait être fin mai, début juin… pour ma part ça a été une épreuve par semaine, sauf la dernière (que je vais présenter après mon baratin) qui s’est déroulée aujourd’hui (le Lundi 14 Juin 2010).

Le point sur les autres épreuves


Ce n’est pas que les autres épreuves sont “useless” mais elles ne font pas aussi peurs que la fameuse épreuve des “PTIs” donc je vais être bref (avec moi bref ça ne veux pas forcément dire rapide, vous l’aurez compris ;) ). Globalement je ne suis pas super satisfait de mon travail car j’ai été trop lent. Finalement les études par correspondance c’est bien car ça permet quand même de travailler à son rythme et puis… ah ah ! Voila le problème : Le rythme. J’ai perdu beaucoup trop de temps avec mes brouillons et je ne me suis pas assez focalisé sur certains points.
L’étude de cas
Par exemple pour l’étude de cas j’ai vraiment pris mon temps pour faire un superbe MCD, au brouillon, puis sur la feuille, sérieusement il est superbe (je l’encadrerais dans ma chambre si j’était complètement fou), la partie SQL n’est pas laide, elle n’est pas blanche non plus, la première question était simple car oui il y avait une jointure qui ne servait à rien :O les autres questions n’étaient pas très durs.. la dernière question par contre à cause de mon brouillon et de mon “rythme” a retenu mon attention trop longtemps et au final : j’ai fait franchement n’importe quoi (un INSERT au lieu d’un UPDATE) et mon calcul était faux, heureusement le total des points du dossier 2 n’est pas que sur cette questions. J’oubliais la partie gestion que j’ai lamentablement ratée, en faite je ne me rappel plus trop… ça fait déjà un mois, c’est dommage car l’année avait été pas mal en GEOSI. Le dossier 3, quel bonheur… de la programmation orientée objet : Sérieusement j’adore ça, je ne programme que comme ça, la programmation procédurale ? j’ai du mal maintenant car je pense objet tout de suite, pour moi la programmation procédurale dans un gros programme ça va être une fonction merdique qui prend 30 pointeurs en paramètres dont des pointeurs sur fonctions… Pourquoi je dit ça ? vous croyez que je l’ai raté ? ha ha (là je parie que non) je l’ai partiellement : bien || mal réussie. Je me suis compliqué la tête pour rien sur certains passage et j’ai fait d’autres passage hyper rapidement, au final ma feuille comportait du blanc (du correcteur non liquide, vous savez type souris correcteur)… La partie avec le fichier XML m’a pris du temps car je ne comprenais pas totalement comment fonctionnait le système (il faut que je m’immerge dans le sujet, que je le sente en moi pour réussir, mais au BTS on à pas le temps de jouer à ça hein), après de la réflexion et une appropriation du système dans ma tête, je finis le dossier. Lorsque j’ai attaqué le dernier dossier il était 17h40 je crois et je faisais partie des derniers élèves de la salle. J’ai pousser mon cerveau hors limites, il fallait finir sinon c’était le #fail assuré (note à part : Militons pour que les hashtag de twitter passent aussi sur les blogs et sur les messageries instantanées), j’ai donc fait de mon mieux, je me suis aperçus que j’avais une mémoire assez visuel car je revoyais des schémas et surtout des tableaux d’AMSI concernant l’adressage des routeurs ! Là où je me suis lamentablement planté ça a été au masque sous réseau, quand j’y repense, je crois avoir indiqué les adresse de pont à la place… Mais c’était le stresse
Les Maths : Oui je l’ai fait !
Alors là c’est la surprise la plus totale est c’est pourquoi je lui consacre un paragraphe entier. Non je ne vais pas vous dire j’ai réussi les maths, mais je vais vous dire : J’ai réussi à ne pas louper les maths et encore mieux : je sais que j’ai des exercices de justes. Il faut savoir que je ne suis pas bon en math et pourtant j’aime cette matière (ce propos est à relativiser par moment..), je ne suis pas bon car quand j’étais jeune je n’ai pas travaillé et avec le temps j’ai pris du retard, et ce retard est dur à rattraper. La veille de l’épreuve de math (un jeudi férié) j’ai révisé , donc pour moi c’était : “révise ce que tu est capable d’appliquer” j’ai donc révisé les graphes, les matrices, les statistiques à une et deux variables, les probabilités (un peu) et quelques autres truc sombres que je n’aime pas mais qu’il a fallu au moins regarder comme les primitives, les intégrales et toutes ces choses qui vous font peur ! Lorsque je suis arrivé à l’épreuve j’était stressé car je pensais que j’allais rendre feuille blanche, et non.. la magie à opérée, comme pour l’AMSI et ces tableaux, les formules me venaient dans la tête et je les appliquaient, mieux encore je vérifiais mes calculs avec la calculatrice et.. magie c’était bon :) . Bien sur il y a des passages où je n’ai pas fait grand chose, mais globalement c’est très bon et j’en suis content.
Les autre épreuves
Oui il faut abréger un peu… c’est un billet sur les PTIs normalement mais j’avais besoin de parler des autres épreuves aussi finalement. Je trouve personnellement que l’anglais écrit était facile par contre j’ai raté totalement mon oral (panique, anarchie dans ma tête sur le coup). L’économie droit c’était faisable, cependant je n’avais pas assez de méthode et pas assez de pratique (et c’est ma faute, je me suis concentré sur d’autres choses cette année). L’expression c’est pas trop mal passées (j’attend..).
L’oral de soutenance
Je suis passé le premier (les profs avaient du retard à cause du café d’après manger) et je pense avoir fait ce qu’il fallait côté contenu et communication. Une chose “marrante” m’est arrivée 15 minutes avant de rentrer dans la salle, ma montre à lâchée donc impossible de savoir combien de temps j’ai mis à l’oral, heureusement j’avais un PowerPoint bien structuré et j’ai dit l’essentiel. Concernant les questions, la prof de Français m’a demandée ce que c’était que ce symbole bizarre sur mon MCD (un héritage) et je me suis empressé de lui répondre, elle m’a aussi demandé d’éclaircir un point de ma présentation (le seul et unique que je n’avais pas clairement explicité). Pour ce qui est des questions informatique, on m’a demandé ce que représentait le X dans mon héritage sur le MCD (une exclusivité), par la suite la prof d’informatique m’a fait remarquer que j’avais une erreur de contrainte sur mon MCD (subtilement, car elle me l’a fait découvrir, je l’ai reconnu tout seul), en fait j’aurais dû mettre une contrainte type XT (exclusivité/totalité). Et puis il y a eu des questions sur le modèle client serveur de l’application alors j’ai commenté le schéma d’une diapo. Une chose encore, j’ai utilisé le dossier de soutenance comme support pour mes explications, par exemple je disais “comme vous pouvez le voir sur la page XY du dossier…”. Il n’y a pas grand chose d’autre à dire sur cet oral qui n’a pas été si dur que ça, enfin je pense (j’utilise beaucoup le verbe penser dans ce billet car je ne suis pas sur de moi).

Les PTIs


Nous y voilà enfin :) je pensais franchement faire plus court pour le haut mais que voulez vous, il faut bien introduire les choses et puis ça fait du bien de dire ce qu’on a sur le cœur avec un peu (pas beaucoup certes..) de recule. Dans un premier temps j’introduirais très rapidement la “notion” de PTIs puis je vais vous présenter les applications que j’ai réalisés, enfin vous aurez le droit à mon feedback, puis une conclusion.
Les PTIs qu’est ce que c’est ? comment ça marche ?
Ce paragraphe est surtout dédié aux lecteurs qui ne savent pas ce que c’est et qui ne sont pas en BTS Informatique de Gestion. L’épreuve des PTIs ou Pratiques des Techniques Informatiques est une épreuve où vous présentez une application parmi 5 ou 7 (il vaut mieux se limiter à 5) devant un jury. Vous présentez cette application de manière “technique” donc pas la peine de prendre toutes les dispositions du monde pour que tout les termes que vous employez soient sans ambiguïtés, non les deux enseignants informatique savent (en théorie car ils ne connaissent peut être pas le langage de programmation que vous utilisez) de quoi vous parlez car : un service web c’est un service web, une classe c’est une classe, une procédure…. Là je parle en tant que développeur, mais les PTIs réseaux existent bien évidement pour les étudiants passant un BTS IG ARLE (Administrateur Réseaux Locaux d’entreprises) mais je ne peux pas vous en parler car : je suis “dev” moi ;) et C# c’était mon idée. Les applications présentés doivent au moins couvrir toutes les compétences de la spécialité, cela ne veut pas dire qu’une application doit tout couvrir mais que l’ensemble des applications couvrent les compétences.
Les compétences en développeur d’applications
C31 Gérer un projet de développement logiciel
C32 Développer avec un langage procédural
C33 Maquetter et développer avec un langage événementiel
C34 Développer avec un langage orienté objet
C35 Développer autour d'une base de donnée relationnelle
C36 Développement Client/Serveur
C37 Mettre au point et maintenir une application
C38 Développement multimédia
C39 Maîtriser le poste de développement et l'environnement

Je ne débâterais pas sur ce tableau car il parle de lui même. Enfin je dirais simplement que les compétences C32, C37, C39 sont quand même hyper faciles à caser, personnellement je les verrais bien en une seule compétence, genre C30 : Gérer, créer et maitriser un cycle de développement logiciel, là ça parlerais ! et puis rajouter une compétence développement embarquée… je m’emporte..
Mes cinq applications
Je vais tenter d’être rapide et efficace, vous trouverez ci-dessous deux captures d’écran de l’application et de l’arbre du projet. Je ne vais pas m’amuser à écrire un mémoire sur ces applications (même si j’ai un sacré feedback sur XnBreak, mon jeu), par contre je présenterais un peu plus en profondeur celle sur laquelle je suis tombée. En fait je vais spoiler un peux, j’ai eu l’extrême privilège (car j’étais le dernier) de choisir mon application (qu’est ce que j’ai choisis ? et bien c’est plus bas).

1. Infolyc


Cette application a été réalisée durant mon stage de deuxième année au lycée Camille Claudel de Digoin. Elle permet de diffuser des informations sur le lycée à tous les étudiants et enseignants. Celle ci est diffusée grâce à deux télévision LCD (une à côté du bureau de la vie scolaire et l’autre en salle des profs).

infolyc
infolyc_code
La technologie Flash est utilisée dans cette application. L’interface graphique a été réalisée en MXML (à la main je n’aime pas trop les designer en général et encore moins celui de Flex Builder 3) et la partie traitement en Action Script 3. La grosse particularité de cette application est qu’elle communique avec un serveur pour y récupérer les informations et absences à afficher. Pour cela l’utilisation de AMFPHP a été nécessaire permettant de travailler avec Flash et MySQL via des services web écrits en PHP. Le contenu de la base de données est sérialisé sur le réseau au format AMF (lisible par flash) sous la forme d’un simple fichier XML.



2. WebAdmin


C’est une interface web qui permet de piloter l’interface Infolyc, elle a été conçu pour qu’elle soit accessible et que les utilisateurs n’aient pas besoin de chercher longtemps pour trouver ce qu’ils veulent faire. Grâce à cette application j’ai réellement put mettre en pratique mes compétences en développement web et j’en suis assez satisfait.
webadmin

webadmin_code WebAdmin fonctionne sur un serveur intranet type Apache MySQL PHP (Xampp puis Lamp). L’interface graphique est écrite en xHTML 1.0 Strict (valide W3C) avec une feuille de style CSS où je me suis permis d’utiliser quelques fantaisies de CSS 3 comme les coins arrondies, les ombres portés, la semi transparence… bien entendu cela n’est visible qu’avec un navigateur respectant les normes, les utilisateurs d’internet explorer ont une interface agréable mais sans coins arrondies (ce n’est pas très gênant au final). On pourra noter aussi une utilisation de JavaScript pour réaliser du DHTML (Dynamic HTML) qui permet entre autre d’ouvrir et de fermer des blocs (bulles d’aides) ou d’afficher masquer des listes d’enseignants. Concernant la partie programmation serveur j’ai utilisé le langage PHP (avec un peu d’objet en PHP5 pour l’écriture d’un petit service) couplé à MySQL pour le stockage des données. Mon dossier de soutenance portait sur cette interface, il y a énormément de choses à dire dessus, mais je vais passer à la suite.


3. XnBreak


Voici un de mes bébé de l’année : XnBreak ! Je commence d’écrire cette partie et je ne sais pas si je prévois un autre billet pour parler de ça ou pas car il y a énormément de choses à dire. Bon je vais essayer d’être aussi court que les autres présentations (je vous vois sourire, c’est le terme “assez court” ? il faut prendre son temps dans la vie des fois et c’est ce que je fait, j’ai le temps, j’ai fini mes examens). Au début j’avais prévue de présenter un casse brique fait en décembre 2009 avec le Framework Xna et le commencement d’un mini Framework construit sur Xna : Yna (c’est un nom de code hein.. j’entend vos “espèce de mégalo !” d’ici alors que l’article n’est même pas publié), puis une semaine avant les épreuves PTIs je me suis dit que ce casse brique était “merdique” et qu’il n’était pas représentatif des capacités que j’avais désormais sur la plateforme .Net et Xna, alors je l’ai recommencé de A à Z (graphisme compris of course). Cela m’a pris 6 jours uniquement. Une journée de graphisme, 4 jours de code intensifs (du HardCoding comme j’aime dire) et une journée de test & corrections. Six jours pour réaliser un casse brique ça peut paraitre gros mais j’ai cette fois ci ajouté un menu et surtout et je suis content d’écrire ça tout de suite : Le jeu supporte une grande majorité de résolutions, je m’explique. Quand on fait les graphismes du jeu ils ont une taille (la résolution) hors quand on développe rapidement on ne se soucis pas trop de la taille ou alors juste une fois. J’ai introduis la notion d’échelle et j’ai adapté cette échelle dans tous les calculs du jeu (collisions, taille de rendu, surface d’affichage relative, absolue, etc…), ça m’a pris un peu de temps (finalement le produit en crois, la proportionnalité etc.. c’est super utile), donc je peux switcher vers n’importe quelle résolution (et proposer des résolutions adaptées sur Xbox 360 : 480p, 720p, 1080p…) Oui car au passage le Framework Xna permet de développer sur Xbox 360 (il faut un abonnement spécial pour déployer sur la console et proposer ses créations sur le Xbox Live, le mien est arrivé à échéance, j’en reprendrais un bientôt pour l’instant je me contente du PC mais ce n’est que partie remise ;) ). Le prix de l’abonnement est de 49 € pour 3 mois ou 99 € pour 1 ans, il existe aussi une formule pour étudiants via Dreamspark pour découvrir (on peut déployer sur Xbox 360 mais pas vendre), je trouve que c’est bien de la part de Microsoft d’ouvrir sa console, on ne peux pas en dire autant des autres constructeurs tels que Sony et Nintendo où avoir une console Hackée est obligatoire pour se faire ses homebrews (bon il ne sont pas limité au compact Framework certes.. mais Xna permet de faire déjà tellement de choses… regardez donc la finale ImagineCup ou .. bon j’arrête j’ai trop dévié là).
xnbreak
Voilà la première version du casse brique réalisée en décembre. Il n’y avait pas de menu, les graphismes étaient moches, pas d’écrans de transitions. Mes les principes de la POO étaient eux bien là.



XnBreak2
Et voilà la version finale qui n’a plus rien à voir avec l’ancienne version. Le score du joueur prit en charge, comme ses vies et le temps de jeu. On peu mourir, gagner et abandonner. Le jeu a un réel but. c’est un jeu.



XnBreak2-2
Lorsque vous mourrez ou que vous gagnez, vous avez le droit à un écran de transition (le CPU récupère quelques cycles pour d’autres tâches comme ça). Ce qui a prit du temps aussi a été la gestion des états des menus, écrans de transition, jeu. Finalement maintenant je pourrais sans doutes refaire la même chose en deux jours.

XnBreak2-code
Cette fois ci c’est la fenêtre entière de Visual Studio 2008 Pro. Pour résumer, la partie du haut (le premier projet) c’est le casse brique avec tout ce qui est programmation graphique et logique. La partie du bas (deuxième projet, référence au premier) c’est le bas niveau du casse brique (Yna pour ceux qui ont suivis) avec la gestion des Sprites, des propriétés du joueur, de certains calques, etc..
Je n’ai même pas parlé de notion de calques en Xna.. mais ce n’est pas un cour sur Xna (je n’ai pas réussi à faire court encore désolé.. mais avouez ! c'était pas agréable à lire ?) Au fait après relecture rapide je n’ai même pas dit que le jeu avait été réalisé en C#, bon vous avez sans doutes vue que ça fonctionnais sur la plateforme .Net (mais vous auriez put croire que c’est du VB…). Pour info, pourquoi C# ? Car en musique la note après le C (Do) est le D(Ré) et la note entre ces deux notes c’est le C# (Do Dièze), C# c’est donc comme du C mais avec un demi ton au dessus ;) comme pour C++ qui veut dire C = C + 1 mais là je suis sincèrement désolé je me suis encore égaré. Damn !

5. MetroTune


Il est où le 4 ? et bien c’est l’application que j’ai présentée donc je l’a réserve pour la dernière et ultime partie (j’avais écrit chapitre.. ça commence bien). Alors oui mon côté musicien a resurgit dans ces PTIs et il fallait que je fasse une application en rapport avec la musique et plus particulièrement la guitare, en plus ça faisait l’occasion de valider la compétence multimédia quoi qu’un jeu vidéo doit bien la valider ? bon passons. Justement il me fallait un métronome chouette (pas ces M*#des) qu’on trouve sur le net qui ne ressemblent à rien OU (notez l’opérateur OU ce n’est pas un ET c’est un OU, ça  ne veut donc pas dire que TOUT les métronomes sur internet sont laids) qui ont trop de fonctionnalités (sous Linux par exemple il y a de super outils mais qu’est ce qu’ils sont chiants à faire fonctionner, heureusement il y a findus mon métronome est là).

metrotune

Il est claire et dépouillé et pourtant il affiche l’essentiel et n’est pas si laid que ça à regarder. Vous pouvez choisir une fréquence parmi plusieurs pré-sélectionnées ou alors choisir une fréquence personnalisée entre 30 Bpm (Battements par minutes) et 250 Bpm (on m’indique que la limite sur les version “physique” c’est 255 Bpm et bien il n’y a qu’un chiffre à changer sur le QSpinBox). Bon côté code c’est du C++ (je me suis efforcé à respecter les règles de normalisation pour que le code soit portable entre au moins deux compilateurs : VC++ et GCC). Rapidement (raté), l’application utilise le Framework Qt 4.6.2 et est multi-Threads (gros mot ?). Un Thread est chargé de notifier l’interface graphique à chaque fois qu’elle doit jouer un sample, le Thread fait simplement un traitement “mathématique” car il calcul à partir  d’une tempo le temps à attendre avant l’envoi d’une notification à l’interface graphique qui elle,  jouera le son. Il y a aussi un petit feedback sur cette application, cela concerne la partie accordeur. J’ai 6 boutons qui représentent les 6 cordes de la guitare et à un clique sur le bouton on joue la note, cependant l’événement (le signal) clicked() de QPushButton n’ as pas de paramètre donc impossible d’identifier rapidement le bouton. En fait il y a un moyen mais ça ne fonctionne pas en multithreading (le cas de cette application) donc j’ai cherché et trouvé sur la faq de developpez.com qu’il fallait utiliser un mappage des signaux, ce que j’ai fait, et peut de temps après ça fonctionnait et j’étais capable de dire : Oui c’est moi qui est fait ce code et voilà pourquoi ça marche comme ça ! Le contenu du projet ne faisant que 4 classes et un fichier main je ne pense pas qu’il soit nécessaire de les présenter ici avec une capture d’écran. C’est effectivement l’activité qui est la plus courte et pourtant j’aurais plus de choses à dire sur celle ci que sur la première activité Infolyc en Flash. Je tiens à dire que j’ai choisis le C++ car c’est un langage que je n’avais pas pratiqué depuis l’année dernière (pour les cours et pour OpenGL) et je voulais voir si j’allais me faire insulté par mon compilateur. Le compilateur m’a fait la vie dur au début, pointeurs obliges (on prend tellement l’habitude d’écrire MonObjet objet = new MonObjet() ), mais je me suis vite remis les choses en tête et j’ai rapidement repris le coup de main (ou de clavier comme vous voulez).

Mon Feedback

Nous y sommes enfin ;) et je suis bien content car je commence de fatiguer, je suis levé depuis 5h45, je n’ai pas beaucoup dormis ces temps ci (comme beaucoup d’ailleurs) et depuis que je suis rentré je rédige ce billet pour n’avoir à dire qu’une fois comment les choses se sont passées (j’ai aussi fait deux trois interventions sur le forum du CNED pour calmer un “frustré” qui insulte mes “Friends of Misery”). J’étais donc convoqué pour 8h30 et je pensais passer le premier comme pour les autres oraux, cependant ça n’a pas été le cas cette fois ci et je me suis retrouvé à passer en dernier. Durant cette phase d’attente j’ai parlé avec les étudiants du lycée en BTS Informatique de Gestion (DA et ARLE) pour collecter quelques informations et là.. et bien c’est le drame madame ! Sur les plaquettes du BTS IG il est mentionné que l’épreuve PTI consiste à présenter une des cinq (ou plus) activités réalisées dans l’année pendant 45 minutes, 20 minutes à l’oral, puis le temps restant on se fait interroger par les deux profs d’informatique, cela peut aller de la question sur le fonctionnement du code à la modification de celui ci (c’est donc de la pratique, et c’est normal vue le nom de l’épreuve). Mais là, à l’académie de Dijon ce n’est pas comme ça que ça marche, enfin pas exactement. Les étudiants présentent toujours cinq activités mais ce sont des activités apparemment assez courtes. Ils les présentent pendant 5 minutes et le temps restant ils codent. Oui mais que codent-ils ? Les profs d’informatique leurs ont demandés d’effacer certaines parties de leurs codes car ils devraient réécrire ces parties lors de l’épreuve. En gros l’épreuve c’est : Je présente mon activité pendant 5 minutes puis je remplis le code que j’ai effacé (donc du code que beaucoup ont tentés d’apprendre par cœur) mais où est l’intérêt ? De mon côté mon cerveau s’enflamme, que faire ? bon et bien je n’ai rien entendu je verrais avec eux sur le tas ! Juste avant de passer j’ai parlé avec un étudiant en ARLE (Réseau), j’étais bien content car c’était ma première vrai discussion de la matinée avec quelqu’un (moi qui regorge de sociabilité en ce moment) ça m’a permis de me calmer un peu, puis est venu un prof d’informatique du lycée qui m’a posé quelques questions (je l’intriguais, mais c’est normal.. I’m the Stranger.. and no one know me…). Enfin est venu le moment, à 11h15 où je suis entré dans la salle. Les examinateurs (deux profs d’informatique je le rappel pour ceux qui se sont assoupis) avaient déjà sondés pour savoir si un étudiant en candidat libre était ou pas présent, donc ils savaient d’où je venais. Je leur ai expliqué le “malentendu” entre ce que j’avais lu sur la plaquette d’information du BTS IG et ce que j’avais entendu dans les couloirs… ils m’ont dit que c’était bon, on ferait avec et ils m’ont mis sur la route. Vue que j’étais le dernier j’ai eu le droit de choisir mon application et là… ma tête c’est arrêtée, que faire ? choisir mon casse brique refait et tout frais ? choisir une activité que je n’aime pas “trop” mais qui envoie un peu ? (je pense à Flash là tout de suite, les gens qui me connaissent rigolent surement très fort en se remémorant mes hurlements de douleur intellectuel quand j’ai bossé sur cette plateforme), j’ai choisis alors de présenter la crème des crème, mon deuxième “bébé” en quelque sorte : Personal Contacts Manager, une application de gestion de contact codée en C# et utilisant une base de données embarquée SQLite.
Personal Contacts Manager
Cette application reprend à elle seule 88,8% (8/9) des compétences à valider à l’examen, en fait il n’y a que la compétence client/serveur qui ne peux pas être validée, mais je peux arranger ça avec un gestionnaire de mise à jour... Elle est conçue en C# et repose sur le Framework .Net 3.5 ou le “petit” nouveau .Net 4 (en réalité sur le 4 mais je l’ai portée sur le 3.5 pour la présentation car mon modeste PC portable a du mal avec les interfaces en WPF et Visual Studio 2010, et bien c’est du full WPF baby) et utilise une base de données embarquée SQLite avec 3 triggers (oui c’est au programme et en plus, mais ne le dites à personne car c’est un secret : ils servent réellement à quelque chose. En fait ils servent à compenser les manques de SQLite en C# comme la gestion des clés étrangères avec contraintes ON DELETE CASCADE, etc…). Voilà pour la partie “technique” maintenant passons au captures d’écran puis enfin et oui j’y viens : au déroulement de mon épreuve de 30 minutes ! (j’ai pas trop spoilé là ? c’était plus fort que moi comme Sega)

pcm

La fenêtre d’invite, l’utilisateur doit se connecter. Si aucun utilisateur n’existe alors il faut en créer un à partir du menu utilisateur.





pcm-xml
Une fois connecté, l’utilisateur a sa liste de contact, il peut exporter celle ci en .txt ou en .xml, quand je suis arrivé à ce passage les deux profs d’informatique se sont approchés de mon écran (comme si Xml était un mot “magique”)

pcm-complet
Vue d’ensemble des contrôles utilisateur, avec les fenêtres d’ajout de contact, d’ajout d’utilisateur, de modification d’utilisateur, d’affichage des contact, d’aide…




pcmcode
Et voilà l’arbre du projet ainsi qu’une partie de code. Une classe abstraite sur le coup, des démonstrations d’héritage et de polymorphisme possibles…




Mais avant de pouvoir présenter l’application j’ai été victime d’un bug que j’ai malencontreusement ajouté hier soir ! Dans le week-end j’ai voulu tester la technologie de déploiement ClickOnce de Microsoft qui se rapproche beaucoup de JavaWebStart pour les connaisseurs (quoi tout le monde est partie ? vous n’êtes pas drôles). Bon un test en partie car pour tester cette technologie entièrement il m’aurait fallu un serveur sous IIS (je dérive…), mais en gros ça me génère un exécutable qui permet d’installer (déployer) mon application sur tous les postes d’un parc (sur votre poste par exemple) à la manière d’un fichier d’installation (application présente dans le menu démarrer, dans panneaux de configuration / suppression de programmes, etc..) et permet aussi de contrôler les mises à jour enfin, un super truc (je suis fan ! nan j’déconne). En plus de ça et c’est là le problème, j’ai voulu signer mon assembly (mon application si vous voulez) avec un certificat (donc protégé avec un mot de passe) et vous savez quoi ? et bien ça marche super bien :D seulement quand on change de PC et qu’on ouvre le projet sur Visual Studio, il faut entrer le mot de passe, et justement je me suis planté de mot de passe ce matin, donc impossible de faire une build de l’application ni de l’exécuter depuis Visual Studio. J’ai alors commencé mon explication au profs d’informatique sur ma découverte du week-end et comment la désactiver (chose que j’ai faite). La présentation c’est alors bien déroulée mais ça a été vite (5 minutes c’est plus que court, pas vrai les filles ?), les profs regardaient (je pense qu’ils ont aimés) et quand je suis arrivé au menu de génération du fichier Xml ils se sont approchés de l’écran (en fait en y réfléchissant bien, qu’est ce qu’une option “exporter vers Xml…” viendrait faire dans une application grand publique ? en fait je pensais ajouter une option “importer depuis Xml…” mais je n’ai pas eu le temps).
Je saute une ligne car ça commençait à me piquer les yeux (il est 19h11 et ça fait quand même 4 heures que je suis sur ce billet, heureusement j’utilise Live Writter, un soft proposé gratuitement par Microsoft qui permet d’écrire et gérer ses blogs depuis Windows et franchement j’adhère totalement !). Un prof m’a alors demandé de choisir une zone de code à effacer, puis de la réécrire. Je ne savais pas trop (le code est assez gros, alors je commençais de me faire des scénarios genre : “La connexion sur la base de données c’est assez cool ? Non dériver une classe abstraite et implémenter ses méthodes c’est mieux ? Wai, il y a de la POO et tout… en plus ça touche directement à la base de données :O). Finalement ce même prof m’a dit “pourquoi ne pas refaire la méthode d’export Xml ?”, chose que je me suis empressé de faire mais… c’est quand même trop simple, un fichier Xml… bon, je parcours mes namespaces à la recherche de Donnees.ContactsExporter.cs je surligne la méthode ExportToXml() et je vire le contenu (elle était toute nue :O). Avant de commencer à coder je leurs demandes si ils veulent que je commente, ils me répondent “oui nous voulons bien” (les autre étudiants m’ont affirmés qu’on était tranquille à coder “seul”, mais je préfère parler, ça fait passer le temps plus vite et puis je sais ce que je fait pas de soucis). Je commence mon explication et mon codage (un des prof codait surtout en VB6 et l’autre pas mal en Java), quand j’ai dit “Bon et bien maintenant je vais parcourir ma collection de Contact de mon objet ContactsManager avec une boucle foreach” ils se sont regardés et l’un a dit “ha foreach cette structure est bizarre”, l’autre continu “Oui il faudra que j’en parle l’année prochaine […] en Java je l’utilise aussi” et là je reprend “Oui par contre c’est un for avec deux point” pour faire l’analogie entre C# et Java. Une autre chose amusante est lorsque j’ai dit “J’utilise maintenant la surcharge de l’opérateur += pour…” l’un dit “ha c’est bien du C# ça, je me rappel en C ils disaient…”' et là une mini discussion démarre entre les deux profs O_o. Pendant que je codais les profs me posait des questions sur mon stage, mes PTIs (l’un me fait “Vous savez que vous n’êtes pas obligé de tout couvrir avec une application vous savez…”, “vous travaillez en dehors ?..”), bref l’ambiance était assez conviviale (c’était presque un apéro, et les deux compères parlaient ensembles). Arrivé à la fin de l’écriture de ma méthode (franchement j’aurais pu aller plus vite mais ils me parlaient, était ce un piège ?) je bloque sur un truc, mais bête : Je ne me rappel plus de la méthode qui permet de convertir une chaine de caractère (un type string) en Xml. j’avais un objet XmlDocument d’instancié, un objet string, il fallait faire xmlDoc.[la bonne méthode et pas la mauvaise] et c’était bon. Alors je leur dit que je ne me rappel plus de cette méthode (en même temps moi je n’avais pas préparé le bout de code que j’avais supprimé ; il me manquait UNE méthode), mais que je vais tenté de la trouver, alors je test celle qui me parait la plus cohérente et manque de chance, l’export ne fonctionne pas : Exception (maintenant que j’y pense j’aurais pu mettre un bloc try {} catch {} ça aurait fait cool et puis ça aurait surtout aidé pour le debug), je vais pour en tester une autre (la panique m’envahit vous pensez) et puis je dit au profs qu’il serait préférable de chercher dans la documentation MSDN car travailler comme ça c’est “sale” et ils m’ont dit que ce n’était pas possible car il n’y avait pas de connexion internet mais que c’était une très bonne remarque, l’un d’eux à même dit “c’est noté”… Bref à 11h45 (soit 30 minutes après mon entrée) l’un me dit : aller dernier essai (c’était le troisième, j’avais démontrer que la structure de mon fichier Xml était clean) et toujours pas la bonne méthode, ils n’avaient pas l’air trop déçus (mais moi je l’étais) et ils m’ont dit c’est bon vous pouvez y aller. Je partis en disant poliment (comme quand j’étais entré) au revoir et bonne journée (quand je suis rentré par contre j’ai dit bonjour mais je pense que vous aviez compris le principe pas vrai ?).
Ce que je ne comprend pas c’est pourquoi est ce que j’ai juste eu à faire une ré-implémentation de méthode ? C’est ultra basic comme truc.. Ca revient à créer une procédure (bon ok non car j’utilisais des objets privé de ma classe mais…). Et puis c’est cours comme code (mais ça utilise l’objet à fond), est ce que cela a suffit ? et bien je n’en sais rien, je suis … dans le doute, malgré tout ça je ne pense pas avoir fait mauvaise impression, j’ai bien parlé et expliqué. Nous verrons les résultats. Mais en gros voilà comment c’est passé mon oral des PTIs. A oui, pourquoi est ce que je n’ai pas choisi le jeu ? car il y avait à dire ! et bien parce que je suis en BTS Informatique de Gestion et dans cette dénomination il y a Gestion, donc un gestionnaire de contact comme le mien était je pense tout à fait adapté (en plus il fait pleins de truc :O). J’aurais été content qu’on me demande de présenter mon jeu, sur lequel j’ai passé tant de temps, mais présenter Pcm (c’est le diminutif de Personal Contacts Manager) été clairement plus stratégique. D’ailleurs ça à marché car quand ils ont regardés le dossier ils ont vue (Objet, Triggers, SQLite, …) et ils ont appréciés je pense puisqu’ils l’ont fait remarquer.

Conclusion et fin de ce billet

J’ai passé ces deux dernières années enfermé chez moi à étudier et à pratiquer ma passion : L’informatique et surtout la programmation. J’ai appris énormément de choses et maintenant je doit faire un break avec tout ça pour me vider un peux la tête. Cela vous est-il déjà arrivé de vous réveiller à 4h00 du matin (voir avant) en trouvant la solution à un problème algorithmique ? ou alors vous réveiller avec un bout de code dans la tête (qui marche en plus :O) ? Ce que je peux dire c’est que j’ai commencé quelque chose et que je l’ai terminé, j’ai travaillé dur et j’espère franchement que ça paiera. On m’a souvent dit quand j’étais plus jeune et que j’étais un cancre qu’il fallait sacrifier des années pour réussir, je ne sais pas si on peut dire “sacrifier” dans mon cas car je me suis quand même bien amusé, mais j’ai aussi passé de très mauvais moment de solitude. En 2004 j’étais dans une formation GRETA pour faire de la maçonnerie, entre temps j’ai passé un BEP électronique en candidat libre, j’ai réintégré à 20 ans une première STI et passé avec succès un Bac STI génie électronique, j’ai fait une année de DUT que j’ai dû stopper pour raisons financières et personnelles. J’ai ensuite fait une année de BTS IRIS par correspondance par le CNED puis une deuxième année (passage directe en deuxième année car j’avais un très bon dossier) en BTS Informatique de Gestion option Développeur d’applications et maintenant à 19h58, je conclus ce billet pour vous dire : J’ai fini et je vais me reposer pour renchainer après sur d’autres “aventures” plus folles les une que les autres.
Je suis accepté en Licence Pro Informatique Embarquée et Mobile, et en Licence Pro Développement Web METINET à Bourg en Bresse, en Alternance. Je doit maintenant trouver une entreprise pour réaliser mon alternance (j’aimerais vraiment trouver quelque chose en développement embarqué/mobile).
Merci à tous, et bonne nuit ;)

Contrat Creative Commons

6 commentaires:

  1. Salut,

    Oui j'ai eu mon BTS avec une moyenne de 13.29/20.

    Mon épreuve de PTI m'a rapportée 17/20 et mon oral de soutenance 16/20.

    Je ne vais pas déballer les autres notes, mais en gros, je n'ai pas eu une note en dessous de la moyenne.

    Cordialement,
    Yann

    RépondreSupprimer
  2. super ^^

    (pour la petite histoire, je passe en 2eme année option DA, via le cned egalement)

    ++

    RépondreSupprimer
  3. et as tu trouvé une boite pr l'année prochaine ?

    t'avais des entretiens pour les licences pro, etc ?

    bref, si tu le veux bien, je voudrais bien continuer cette conversation par mail...

    RépondreSupprimer
  4. Salut,

    Bonne chances pour l'année prochaine alors ;) si tu est motivé et que tu bosse bien c'est dans la poche. Tu qui comme tuteur ?

    Si tu a besoin de conseils n'hésite pas. En tout cas, renseigne toi auprès de ton académie pour savoir comment se déroule cette putain d'épreuve de PTI car suivant l’académie (comme tu l'a lue dans ce roman) ça change :S

    @ plus

    RépondreSupprimer
  5. Je n'ai pas trouvé d'entreprise et je vais être obliger de chercher du boulot et de travailler. J'ai quand même un projet à cours terme pour passer une formation niveau licence (j'ai un test d'entrée demain d'ailleurs xD) en développement informatique (8h00 de TP Prog par jour pendant 11 mois :O).

    Sinon je compte monter ma boite d'ici 1 ou 2 ans.

    Mon email est comte[point]yannick[at]free[point]fr

    Cordialement,
    Yann

    RépondreSupprimer