Quelques raccourcis :

420KEF – Élaboration d'applications dans un environnement graphique (AEG)

Ceci est un petit site de support pour le cours 420-KEF-LG – Élaboration d'applications dans un environnement graphique. Notez que plusieurs liens divers sont mis à votre disposition; parmi ceux-ci, soyez particulièrement attentives et attentifs à ceux portant :

Détail des séances en classe

Index des séances théoriques
T00 T01 T02 T03 T04 T05 T06 T07 T08 T09 T10 T11 T12 T13 T14
Date Séance Contenu

22 janvier

L00

Situation un peu absurde : votre chic prof ne se présente pas à la toute première séance de la session. Quelle horreur!

24 janvier

T00

Au menu :

  • plan de cours
  • bases de JavaScript (avec parenthèses en C#, pour enrichir vos connaissances, en particulier celles acquises à la session précédente). Nous poursuivrons ceci lors des prochaines séances

Note personnelle : pour moi, ce cours en est à sa première incarnation. Il a été donné par le passé, mais à une autre session et jamais par moi. J'ai plusieurs idées, plusieurs projets, mais nous allons déterminer ensemble les contours de ce que représentera cette expérience collective pour vous et moi.

Je jongle avec des idées de :

  • manipulation de polices de caractères
  • applications composites (mashups)
  • aventures côté client (jQuery, Angular.js) et serveur (Node.js)
  • intégration d'API tierces (par Google, Yahoo, Twitter, etc.)
  • utilisation d'appareils diversifiés pour l'affichage (ordinateurs conventionnels, tablettes, téléphones, etc.)
  • manipulation du <canvas> avec HTML5
  • communication par Websockets
  • ... et ainsi de suite.

C'est un premier contact entre nous aujourd'hui, dû aux circonstances, mais sachez tout de suite que vous pouvez profiter de cette session pour éclaircir toutes sortes de questionnements et de préoccupations que vous pourriez avoir quant à la programmation, tous langages confondus. Profitez-en!

29 janvier

L01

Vous trouverez un exemple de solution aux problèmes posés aujourd'hui sur cette page.

Au menu : un peu d'expérimentation avec JavaScript (rien de transcendant, juste de la gymnastique pour se remettre en forme).

Avant de débuter : faites-vous une petite page HTML5 de base (vous pouvez vous inspirer de celle-ci et l'adapter à votre goût, si vous le souhaitez), que vous pourrez dupliquer pour expérimenter avec chacun des exercices qui suivent. Ceci vous permettra d'être plus efficace par la suite.

Pour des détails de langage, vous pouvez examiner les liens suivants :

Exercice: petit exercice simple. Créez une page HTML5 dans laquelle on trouvera :

  • un gros titre (disons quelque chose dans une balise h1)
  • une zone de texte (balise input avec type text), et
  • un bouton de commande (balise input avec type button)

Lorsque l'usager cliquera sur le bouton, remplacez le texte dans le gros titre par celui dans la zone de texte.

Truc : utilisez une fonction JavaScript pour faire le remplacement. Pour que tout se passe bien, attribuez des id distincts aux éléments clés (la zone de texte et le gros titre), utilisez la méthode getElementById() du document représentant le DOM de la page Web, et remplacez le innerText du gros titre par le value de la zone de texte.

Exercice: reprenez pour l'essentiel l'exercice 0 (copiez la page et faites des ajustements, disons) mais au lieu de simplement remplacer le texte du gros titre, remplacez-en le code HTML (utilisez innerHTML plutôt qu'innerText) et soulignez la première lettre de chaque mot. Pour les besoins de la cause, le début d'un mot sera le premier non-blanc au début du texte ou une séquence non-vide de caractères non-blancs précédée par au moins un blanc.

Truc : vous allez vouloir chercher le premier caractère blanc ou le premier caractère non-blanc à partir d'un certain point dans une chaîne de caractères. Je vous propose une stratégie (que vous pouvez mettre en application ou non; à vous de voir) :

  • écrivez une fonction isSpace(c) retournant vrai seulement si c est un blanc (espace, tabulation, saut de ligne, etc.)
  • écrivez une fonction négation(f) retournant une fonction g telle que g(x) est vrai seulement si f(x) est faux
  • écrivez une fonction trouverSi(s,début,pred) prenant une chaîne de caractères s, une position début pour commencer à chercher, et un prédicat pred (un prédicat est une fonction booléenne). Cette fonction retournera la position du premier caractère c dans s à partir de début tel que pred(c) est vrai
  • à l'aide de ces outils, chercher le début et la fin d'un mot deviendra beaucoup plus simple... Comprenez-vous pourquoi?

Suite au cours, j'ai écrit un petit texte d'introduction à la pensée fonctionnelle (avec JavaScript) pour vous aider à approcher la résolution de problème sous cet angle quelque peu nouveau pour vous. J'espère que ça vous aidera!

31 janvier

T01

Au menu :

  • retour sur l'exercice proposé à L01
  • mutabilité et immuabilité
  • pensée fonctionnelle (introduction)
  • penser en termes d'algorithmes, de fonctions et de foncteurs

À la demande des étudiant(e)s, car ce n'est pas au menu du cours du tout, nous avons fait une toute petite incursion dans le monde de la multiprogrammation et du parallélisme. Nous en avons profité pour faire un lien entre les pratiques de JavaScript et celles d'autres langages.

5 février

L02

Au menu :

  • début du travail sur le TP00, le petit éditeur de code v. 0a

7 février

T02

Au menu :

À la demande de la classe, nous avons fait une brève incursion dans l'histoire de notre science, mentionnant au passage David Hilbert, Jules Henri Poincaré, Alan Turing, Albert Einstein, Kurt Gödel et Alonzo Church.

12 février

L03

Au menu :

  • poursuite du travail sur le TP00, le petit éditeur de code v. 0a

14 février

T03

Au menu :

19 février

L04

Au menu :

  • suite et fin du travail sur le TP00, le petit éditeur de code v. 0a

Remise du TP00, en fin de séance.

21 février

T04

Au menu :

26 février

L05

Au menu :

  • travail sur le TP01, le petit éditeur de code v. 1a

28 février

T05

Au menu :

5 mars

Semaine de mise à niveau (cours suspendus)

7 mars

Semaine de mise à niveau (cours suspendus)

12 mars

L06

Au menu :

  • travail sur le TP01, le petit éditeur de code v. 1a

À la demande générale, la date de remise du TP01 a été déplacée à T07 (début du cours).

14 mars

T06

J'ai dû m'absenter pour cause de maladie... Désolé!

Bon jour de π

19 mars

L07

Au menu :

  • travail sur le TP01, le petit éditeur de code v. 1a

21 mars

T07

Au menu :

Remise du TP01, en début de séance.

26 mars

L08

Au menu, brève pause du monde JavaScript :

  • à titre formatif, votre mission est :
    • d'écrire un programme ASP.NET avec C# en arrière-scène
    • de faire en sorte que l'interface de votre programme présente au moins trois états de plusieurs enregistrements (p. ex. : le nom, le prénom et le salaire hebdomadaire d'un employé, et ce pour plusieurs employés; le nom, les points de vie et la puanteur d'un Orque, et ce pour plusieurs Orques; le sigle d'un cours, son nom, le nom du prof et votre notre finale dans ce cours, et ce pour plusieurs cours; ...)
    • de faire en sorte qu'en sélectionnant l'un des enregistrements, une mise à jour de l'affichage soit fait (p. ex. : en présentant des informations supplémentaires sur l'enregistrement sélectionné)
    • d'offrir au moins un contrôle (un bouton, par exemple) permettant de réaliser un calcul particulier sur les données (calculer le salaire salaire moyen? évaluer la puanteur minimale et maximale du lot? calculer votre note moyenne ?)

28 mars

T08

Au menu :

  • Q04
  • petite exploration de l'importance de la Cache (rien qui ne soit au programme, mais ça répondait à des questions de la salle alors...)
  • survol de la gestion des états avec ASP.NET :
    • variables de session
    • variables de vue
    • gestion du PostBack
    • témoins
  • saine gestion des exceptions avec C# :
    • blocs try, catch et finally
    • blocs using et approche RAII
  • généralisation des opérations évanescentes avec C# :

2 avril

L09

Au menu :

  • brève introduction à Node.js (pour le télécharger, voir http://nodejs.org/download/)
    • exemple simple (sorte de Hello World)
    • exemple sollicitant un minificateur de JavaScript
  • le problème du Ajax entre sites
  • la solution à envisager
  • un indice de ce qui sera le prochain travail pratique...

Pour le reste de la séance, terminez l'activité formative proposée à L08

4 avril

T09

Au menu :

  • quelques sujets divers, en réponse à des questions de la classe :
    • que signifie catch(...) en C++, et à quoi cela sert-il?
    • pourquoi être Exception-Safe?
    • pourquoi être Exception-Neutral?
    • comment exprimer des propriétés en C#?
    • en C++, quand (et où) est-il raisonnable de faire des using namespace? Quand (et où) est-il préférable de faire des using à la pièce, ou de ne pas en faire du tout?
    • en prime : pourquoi est-il préférable de ne jamais inclure <iostream> dans un fichier d'en-tête (un .h), et de préférer y inclure <iosfwd>?
  • survol du format JSON
  • examen plus en détail de ce que sera le prochain TP, qui sera manifestement le dernier avant le TP intégrateur

Parmi les thématiques survolées pour le prochain TP, on trouve :

  • l'encodage Base64 :
    • pour éviter que quelques symboles particuliers du code source JavaScript (p. ex. : le +) ne soient transformés en cours de route, un encodage Base64 est appliqué sur envoi, et un décodage Base64 symétrique est appliqué, symétriquement, sur réception
    • dans une fenêtre de fureteur, des méthodes atob() et btoa() sont offertes pour ces deux opérations. Dans node.js, ces méthodes n'existent pas, mais elles peuvent être implémentées très simplement
  • la communication Ajax entre domaines :
    • cette forme de communication est interdite par le fureteur, pour votre propre sécurité
    • pour la contourner, il est possible de modifier un serveur Web pour qu'il indique au fureteur qu'il accepte de collaborer à une telle forme de communication
    • il est aussi possible de faire du CORS, ou Cross-Origin Resource Sharing, mais il faut typiquement contrôler le serveur pour permettre cette fonctionnalité, ou d'utiliser JSONP si le serveur collaborait en ce sens
    • faute d'avoir ces privilèges, votre chic prof propose d'utiliser un serveur Web sous node.js qui servira de relais entre le client (votre outil) et les services disponibles sur le Web que vous souhaiterez y intégrer
    • donnant l'exemple d'un service de minification offrant une API par http, il montre que si le serveur node.js est sur le même domaine que le demandeur, il devient possible pour le demandeur d'y faire une requête Ajax alors que le serveur node.js, qui n'est pas contraint par le fureteur, relaie les requêtes à un service tiers, puis relaie les réponses de ce service vers le demandeur original

9 avril

L10

Dû à la grève étudiante du 3 avril et aux élections provinciales du 7 avril, le calendrier est chamboulé. Conséquemment, le 9 avril est devenu un lundi, et nous n'avons pas de cours aujourd'hui. Vous allez me manquer (sérieusement, je vous trouve plutôt sympathiques!)

11 avril

T10

Au menu :

  • retour sur le TP01 :
    • programmer et écrire : dans quel ordre procéder?
    • identifier le couplage (pertinent ou superflu)
    • faible couplage et forte cohésion : comment y arriver?
    • standardiser la nomenclature
    • identifier les points se prêtant à un découpage
    • quand lier avec le DOM et quand se restreindre à des variables du programme?
    • le rôle du « sinon »
    • intérêt d'explorer l'API d'un langage (p. ex. : split() et join())
    • ne pas négliger CSS pour le formatage (pensez sémantique!)
    • l'importance des commentaires... judicieux!
  • présentation formelle du TP02 (même si l'énoncé est encore légèrement incomplet)

Truc scout : si vous avez beaucoup de cas à couvrir, vous pouvez remplacer une série de if ... else ... par un tableau de fonctions :

// ... ceci doit n'être fait qu'une seule fois (dans un singleton?)
var options = new Array();
options[8] = traiterBackspace; // on suppose qu'une fonction de ce nom a été définie plus haut
options[10] = traiterReturn;   // idem
options[13] = traiterReturn;   // idem
// etc.
function traiterTouche(touche) {
   if(options[touche] != null) { // ou quelque chose du genre
      options[touche](); // appeler la fonction (on pourrait lui passer la touche en paramètre si c'est préférable)
   }
} // bingo: on passe de plusieurs pages de code à quelques lignes!

16 avril

L11

Au menu :

J'avais prévu vous soumettre deux minitests cette semaine, mais le temps manque (et j'ai pas chômé!). Ainsi, je me limiterai à deux questions pratiques, à faire sur une base individuelle.

La Q05 va comme suit :

  • écrivez une fonction JavaScript prenant en paramètre une chaîne de caractères et retournant un objet JSON contenant un tableau des mots trouvés dans la chaîne de caractères (un mot étant une séquence de caractères délimitée par des blancs... Une expression régulière pourrait être pertinente ici!)
  • par exemple, si la fonction reçoit "J'aime mon prof $a@3!", elle doit retourner un objet JSON comme le suivant :
{
   mots : [ "J'aime", "mon", "prof", "$a@3!" ]
}

Autre exemple, si la fonction se nomme JSONinifer et si le JSON retourné suite le format ci-dessus, alors le programme suivant...

function test() {
   var s = "J'aime    mon\tprof! \n$a@3! t'sais genre...";
   var res = JSONifier(s);
   alert('"' + res.mots[2] + '"');
}

...affichera "prof!".

La Q06 va comme suit :

  • écrivez une fonction JavaScript prenant un objet JSON tel que celui retourné par la fonction proposée en réponse à Q05 ci-dessus, et qui retourne une chaîne de caractères comprenant chacun des mots du tableau de mots, séparés par le symbole '/'.

Assurez-vous d'avoir testé vos fonctions avant de les remettre, et de m'envoyer le fruit de votre travail par Colnet (utilisez des pièces jointes pour vos envois, car Colnet ne respecte pas l'indentation, ce qui rend le code très difficile à lire!) au plus tard jeudi le 17 avril à 18h.

Si vous voulez tous vos points, il vous faudra exprimer chacune de ces deux fonctions par une seule instruction.

18 avril

Congé férié de Pâques

23 avril

Au menu :

  • travail sur le TP02

25 avril

T11

Au menu :

30 avril

L12

Au menu :

  • l'illustre et franchement sympathique Anne Deputter tiendra une séance sur l'expérience utilisateur, séance qui sera en partie pratique et prendra, par conséquent, la forme d'un atelier

Suite à sa présentation, Anne m'a fait parvenir les liens suivants :

2 mai

T12

Au menu :

  • Prototypage rapide :
    • Visual Studio, Netbeans et autres
    • des trucs comme http://balsamiq.com/ qui est chouette, mais payant...
    • Le « pendant prototypage »
    • Le « après prototypage »
    • Relation avec la programmation en général
  • Tester sur des humains :
    • dans un milieu de recherche
    • dans un laboratoire d'interfaces personne/ machine de grande envergure
    • -tests (et la philosophie Web 2.0)
  • Tests A/B :
    • on a deux options, habituellement l'option dite « de contrôle » (existante, connue) et l'option dite « de traitement » (remplacement potentiel pour l'option de contrôle)
    • des usagers choisis en fonction des besoins (typiquement : stratégie pseudoaléatoire dans une population cible) sont sélectionnés
      • une moitié se fait proposer l'option de contrôle
      • l'autre moitié se fait proposer l'option de traitement
    • le taux de succès de part et d'autre est quantifié
    • les aberrations statistiques sont évacuées
    • l'une ou l'autre des options est choisie
  • Tirer des statistiques d'utilisation :
  • Bref sur MVC et MVVM

7 mai

L13

Journée d'examen pour les cours de français de la formation générale (cours suspendus)

9 mai

T13

Au menu :

  • le schéma de conception Commande :
    • implémenter un système d'annulation et de réexécution (Undo/ Redo)
    • implémenter un système de macros
  • à titre de Q08 :
    • regardez la présentation de Raphael Goetter (bien gentil, mais qui n'est pas un prof au sens de ce à quoi nous vous avons habitués au Collège) sur http://www.microsoft.com/france/mstechdays/programmes/2014/fiche-session.aspx?ID=0d8d1d74-e5ee-4785-9424-42602cab0c13, présentation qui dure un peu plus d'une trentaine de minutes
    •  écrivez un texte dans lequel vous expliquerez cinq manières distinctes (un point chacune) par lesquelles CSS3 facilite le travail de design adaptatif (Responsive Design) pour une application concrète de votre choix. Vous n'aurez les points que si vous expliquez l'utilité de la caractéristique que vous présentez, exemple à l'appui (se limiter à la nommer ne suffira pas)
    • envoyez votre réponse par Colnet à votre chic prof au plus tard dimanche le 11 mai 2014 à 17h

14 mai

Épreuve uniforme ministérielle de français (cours suspendus)

15 mai

L13

Exceptionnellement, dû aux chamboulements du calendrier (grève étudiante du 3 avril, élections provinciales du 7 avril), ce jeudi devient un mercredi, et nous avons donc rendez-vous.

Au menu :

16 mai

T14

Au menu : on remplace le cours théorique par un cours pratique. Vous pouvez me rejoindre en tout temps par courriel.

Le minitest Q09 est disponible ici : 420KEF--Q09.pdf

Les consignes données par Colnet sont répétées ci-dessous. Petit détail à ne pas oublier : si une ligne (ou une colonne) comprend plusieurs mots, vous trouverez plusieurs définitions, une par mot. Chaque définition débute par un caractère gras.

Consignes données par Colnet (répétées pour vous simplifier la vie)

Allo toutes et tous!

À la fois pour 420KH2 (industrielle) et pour 420KEF (gestion), le vendredi avec moi est typiquement jour de séance théorique. Pour demain, séance T14, étant donné que nous sommes en fin de session, j'ai pensé vous aider en vous libérant de la théorie et en vous laissant occuper votre temps au laboratoire, question de faire progresser à plein vos divers travaux de fin de session.

Quelques bémols :

  • je serai disponible en tout temps, mais de manière électronique (je vous expliquerai en personne la semaine prochaine). Je répondrai plus rapidement en avant-midi qu'en après-midi s'il y a des questions (en après-midi, il peut y avoir des délais, mais je vous répondrai quand même)
  • pour ceux qui ont une A.S. à livrer, vous pouvez la glisser sous ma porte de bureau. Je passerai en personne la récupérer soit en soirée vendredi ou dans la journée samedi
  • pour éviter que vous ne vous ennuyez, je déposerai sur le site de vos cours respectifs, en date de la séance T14, une version PDF d'un mot croisé portant sur les thématiques de la session. C'est à faire sur une base individuelle car ça comptera comme le minitest Q09 de part et d'autre. Je m'attends à les trouver sous ma porte, remplis, mardi matin à mon arrivée au bureau (prenez soin d'identifier votre copie!)
  • vous remarquerez que les mots croisés sont sur deux pages recto seulement. L'une contient les définitions, et l'autre la grille. Ne remettez que la grille (identifiée à votre nom, évidemment).

Bizous!

P.-S.:  j'ai bien aimé vos présentations cet après-midi. Vous faites deux groupes franchement agréables avec lesquels travailler :)

P.-P.-S. : j'ai mis Denis (Brunet) en copie conforme pour qu'il soit au courant que je vous ai donné cette liberté :)

P.-P.-P.-S. : s'il y en a parmi vous qui souhaitent piger leur option d'A.S. demain ou pendant la fin de semaine, écrivez-moi en prenant soin d'identifier les noms de vos équipières et équipiers, et je vous retournerai par le même moyen l'option et le moment officiel de la pige (pour comptabiliser les 48 heures).

21 mai

L14

À déterminer

À la demande générale, le TP02 doit être remis au plus tard à la fin de cette séance.

Documents sous forme électronique

Cliquez sur cette cible pour le plan de cours, sous forme électronique

Consignes des travaux pratiques

Les consignes des travaux pratiques pour la session H2014 vont comme suit.

Consignes du TP00

Consignes du TP01

Consignes du TP02

Consignes de l'activité synthèse

Les consignes de l'activité synthèse pour la session H2014 vont comme suit.

Vous trouverez ici les consignes de l'activité synthèse pour la session H2014

Résultats des questions quasi-hebdomadaires – H2014

Les moyennes des résultats obtenus aux questions quasi-hebdomadaires pour la session H2014 suivent. Notez que l'écart-type par question n'est pas significatif étant donné l'échantillon (petit groupe) et la pondération des questions (sur cinq point, un point de différence représente , ce qui bousille quelque peu cette composante statistique).

 Question   Séance 
Q00
Q01
Q02
Q03
Q04
Q05
Q06
Q07
Q08
Q09
:

Résultats des travaux pratiques – H2014

Les moyennes des résultats des travaux pratiques pour la session H2014 suivent.

TP Remise Poids

TP00

TP01

L14
Cumulatif :
:

Code de démonstration

Vous trouverez ci-après le code source de divers exemples de vos notes de cours. Il est possible que le code ne soit pas exactement le même que dans les notes de cours puisque j'ai retouché ces dernières récemment (le site Web est un peu en retard côté mises à jour), mais les différences sont cosmétiques.

À déterminer

À déterminer


Valid XHTML 1.0 Transitional

CSS Valide !