jeudi 11 juin 2009

DevTeach, Jour 2 (suite et fin)


De retour du lunch, j’ai poursuivi avec la suite Introduction à WPF/Silverlight et XAML, le soutien de la programmation parallèle et le Test-Driven-Design (TDD). J’attendais la conférence sur la programmation parallèle avec impatience.

Sous la Surface

Les « cours » de l’après-midi commencent avec des exemples de codes utilisant WPF et des démonstrations tout aussi « cools » les unes que les autres. Et c’était bien ainsi alors que la digestion de l’instance du lunch inspiré du motif 1233 draine presque toutes mes ressources internes et que la salle est bondée (faisait chaud!)

À défaut d’avoir la « Surface » sous nos yeux, nous avons du nous contenter de démos filmés. Fait intéressant, l’application du motif MVC permet la portabilité des interfaces utilisateurs du Web, à Windows 7 et à la Surface, bien sûr.

Alors que la Surface n’est pas encore disponible au grand public, j’ai avec moi une mini-surface en permanence: mon iPod Touch. Grâce à petit bidule, j’avais toute la programmation de DevTeach sous les doigts… et un mini-simulateur de vol (X-Plane) pour remplir les temps morts, en avion par exemple…

Univers parallèle

Le saviez-vous? La loi de Moore est de plus en plus difficile à appliquer car il n’est plus possible d’augmenter la cadence des microprocesseurs sans les faire brûler. La solution? Mettre plus de processeurs sur le même bout de silicium.
Malheureusement, les logiciels commerciaux sont en retard et nos machines ne fonctionnent pas à leurs pleins potentiels. Durant la seconde séance de l’après-midi, j’ai appris ce qui est disponible ou sera disponible pour implanter des algorithmes de traitement parallèle. Il existe des classes semblables à celles du System.Threading, mais pour lancer des tâches parallèles.
Quelques démos de calcul scientifique et de synthèse d’images par lancer de rayons ont démontré le gain en vitesse d’exécution dans le cas de calculs intensifs. C’est un début, mais il faudra penser à l’avenir en terme algorithmiques (récursivité, diviser pour régner) plutôt qu’en termes impératifs.
La compilation de grands projets est parfaitement adaptée à la règle « diviser pour régner ». Curieusement, les compilateurs Microsoft ne le font pas, à moins que Windows ne se charge de distribuer les lots de traitement équitablement.

TDD

De retour à la suite « Agile », je termine l’après-midi avec une conférence sur le design centré sur les tests. Le principe est simple :

1. Écrire un test unitaire pour que la classe à implanter échoue au test
2. Corriger le problème
3. Répéter 1 et 2 autant de fois que nécessaire
Le problème est de savoir quand s’arrêter.
La réponse est pourtant simple : ça dépend des exigences et puis, est-ce que ça vaut la peine d’investir des efforts pour traiter un cas d’exception improbable?
Peut-être pour des applications de pointe, comme en aviation, mais ce n’est pas le domaine pour la majorité des participants au DevTeach.
Il paraît qu’après avoir commencé à penser en mode TDD, on ne peut plus s’en passer et tout code légué sans tests devient suspect. J’ai téléchargé nUnit, un logiciel libre de test pour Do Dièze (C#). Faut que j’essaye ça.

J’ai appris un autre truc intéressant : vu que j’écris lentement, c’est plus rapide pour moi de prendre les acétates les plus intéressantes en photo (sans flash, sinon le résultat est nul). Un exemple :

L’après-convention


Re-pub, pis deux autres bières, comme le disait la chanson du groupe Offenbach.
Après le pub, une petite marche à la marina pour y prendre quelques photos : l’air marin, les mouettes, le soleil couchant, c’est chouette.
« C’est pas l’homme qui prend la mer, c’est la mer qui prend l’homme »,
« Il est fier mon navire, Il est beau mon bateau… »
Tatatsin, et tout le reste. Vive Renaud…



… Et puis c’est tout.

DevTeach, Jour 2

Cet article sera plus court que le précédent par souci de respect à la règle de publication sur le Web : articles courts!. Je ne parlerai ici que de mon programme du mercredi matin.

DevTeach continue à profiter du beau temps qui règne sur Vancouver depuis plus d’une semaine. Le menu technologique a été varié : tests fonctionnels des interfaces utilisateurs, « Inversion of Control » (IoC), Introduction à WPF/Silverlight et XAML.

À propos d’XAML, je remercie Frédérick Chapleau, un collègue de classe, de m’avoir montré la prononciation anglaise de cet acronyme : « Xah-mole » (?). Parfois, j’entendais plutôt « Zaaa-Mo » durant la conférence. Si je n’avais pas su, j’aurais cherché longtemps de quoi il s’agissait…

Automatiser les tests des IHM ?

C’est possible et c’était le sujet de la première conférence de la journée. En résumé, on peut tester une IHM soit :
1 - Manuellement : un processus long, ennuyeux et sujet aux erreurs de manipulations;
2 - En enregistrant les actions de l’utilisateur (frappes, déplacements et clics de la souris) : des tests ennuyeux à implanter et qui deviennent invalide au moindre changement d’aspect de l’interface;
3 -En simulant les événements souris et clavier par un ordinateur distant.
Cette méthode est répétable et fait abstraction de l’apparence de l’interface. Le conférencier nous a montré comment ça fonctionne et comment intégrer les tests dans le cadre Agile à l’aide du Team System Fondation.

IoC : Qu’ossé?

Il y a eu des plages horaires où aucune conférence ne me satisfaisait, soit par manque d’intérêt, soit par manque de connaissance. J’ai choisi la seconde par défaut. J’ai donc dérivé du côté de la série de conférences sur « Agile » et les tests fonctionnels par IoC, ou « Inversion of Control ». En gros, la technique consiste à stimuler un module de traitement : par exemple, le traitement de la paye, par fonctions de rappel et par l’utilisation de certains motifs de conception (Fabrique). Le hic, c’est que ni le domaine ne m’était pas familier (site Web transactionnels), ni la technique donc je n’ai pas profité à fond de cette session. Néanmoins, j’ai saisi le principe.

Xah-mole, WPF et Silverlight

Adieu, WinForm et GDI, bienvenue à la Windows Presentation Foundation (WPF), son diminutif Web (Silverlight) et à leur langage commun XAML, tels que démontré par la version beta de Visual Studio 2010. Le tout repose maintenant sur Direct3D pour des effets visuels 3D spectaculaires. Cependant, la transition de WinForm à WPF ne sera pas facile pour les programmeurs, vu la nouveauté des technologies et à un changement de paradigme vers le motif MVC (Model-View-Control) : la vue étant totalement décrite en Xah-mole : y’a plus de code, juste des pages entières de balises XML pour une fenêtre de dialogue habituelle.
En ce qui concerne l’environnement de développement VS 2010, le module de design GUI deviendra une application indépendante, MS Expression Blend. Cette application m’a rappelé Adobe DreamWeaver et qui lui ressemble: IN, le design graphique du dialogue, OUT, du XAML pas très lisible pour les humains.

Lunch!

Les motifs de conception (Design Patterns) sont omniprésents. Il n’y a pas d’exposé où l’un ou l’autre motif parmi les plus populaires n’est pas nommé. Je soupçonne même le chef d’en utiliser un pour composer les menus : appelons-le, disons, «1233 ». Voici pourquoi :

Soupe : singleton;
Salades : 2-tuple telles que typeof(salade_1) != typeof( salade_2);
Sandwichs : 3-tuple, (règle semblable à celle des salades) ;
Desserts : 3-tuple (même règle de composition que pour les sandwichs)) ;
Mais c’est très bon, quoiqu’un peu prévisible.



mercredi 10 juin 2009

Jour 1:


Jour 1 à Vancouver : très ‘cool’

Je marche environ deux kilomètres par jour, seulement pour aller et revenir de la convention. Ça me donne le temps de découvrir la ville. Premières impressions du centre-ville de Vancouver : c’est propre, tranquille et ‘relax’. Les passants sont polis et disciplinés. Le tout me fait penser à Ottawa, ma ville natale, à un détail près : les trolleybus,  voitures et cyclistes partagent la même route.  La rue Howe, celle que j’emprunte, est bordée de jeunes arbres, Ces derniers détournent mon attention  des caténaires suspendues au dessus de la rue. De plus, Il y a un service de trains de banlieue tout neuf, pour les J.O. de 2010,  que je me promets d’essayer avant mon retour. Montréal devrait s’en inspirer en ce qui concerne l’aménagement des transports publics.

Donc, matin et soir, je passe près des lieux suivants :

  • Le palais de justice provincial (bof);
  • La cinémathèque;
  • L’université de la Colombie Britannique (UBC);
  • La galerie d’art.

En somme, une belle promenade qui compense les belles heures de la journée perdues à rester enfermé dans une salle de réunion.

Voilà pour le tourisme : passons aux choses sérieuses…

La journée a commencé par l’obligatoire discours de bienvenue. Ce dernier portait sur l’arrivée prochaine du Visual Studio 2010. Dieu merci (et merci également au conférencier), nous n’avons pas eu droit aux matériel de promotion de Microsoft, mais plutôt à des démonstrations très ‘cool’ sur l’interopérabilité entre  « Surface » et Windows 7.  Dans un exercice de « scrapbooking » collectif, on y voyait des gens manipuler et s’échanger divers documents comme s’ils s’agissaient d’objets physiques : textes, photos, vidéos, etc.  Théoriquement, le tout est faisable sans avoir à utiliser autres choses que la plateforme .Net.   Si les interfaces homme-machine sont votre dada, alors considérez l’apprentissage de la Windows Presentation Fondation (WPF) et de Windows Communication Fondation (WCF).   Je crois que ce sera une technologie fascinante à explorer et que l’on peut s’attendre à une évolution aussi  marquante que le passage de la ligne de commande à la métaphore du bureau et matérialisée par le concept d’interface icône-fenêtre-souris-pointeur (WIMP).

Des bâtisseurs de châteaux de sable.

Étant donné mon expérience limité en développement .Net, je favorise les ateliers portant sur les aspects plus abstraits du développement logiciel. C’est pourquoi j’ai choisi de passer la matinée en compagnie d’architectes logiciels expérimentés (les conférenciers) et d’aspirants (le public). Les discussions ont été fort animées et je vous en fais un résumé :

Définition populaire d’un architecte logiciel : fonction attribuée  à un concepteur logiciel dont les compétences techniques sont obsolètes au point de ne plus pouvoir coder productivement et muté à un rôle de supervision et d’administration (traduction libre de l’auteur).     En réalité, c’est un métier difficile à définir car la comparaison avec un architecte en bâtiments atteint rapidement ses limites: en effet, l’architecte en bâtiments profite d’un héritage des meilleures pratiques connues  depuis l’Antiquité. De son côté, l’architecte logiciel travaille avec  l’intangible, des comportements non linéaires, des facteurs humains et des pratiques expérimentales, en mutations constantes et de moins d’un demi-siècle d’existence. De même, une architecture élégante et tout aussi difficile à définir : on ne s’en rend compte qu’une fois l’ouvrage terminé.  Finalement, peu d’immeubles se transforment en masse informe (traduction de Ball of Mud)[Foote: 1997] en moins d’une décennie. Il paraît que les logiciels ont cette propriété étonnante et qui n’a rien à voir avec le polymorphisme.

En pratique, l’architecte évalue, explore et guide toutes les activités de développement, sans égard aux technologies et pratiques utilisées. Concrètement, l’architecte doit jongler avec les aspects techniques et administratifs à la fois. Il doit être à la fois au courant des dernières nouveautés et de la pratique de la gestion de projets et des ressources humaines.  Finalement, l’architecte est un visionnaire, capable de prédire l’état d’un système à moyen et long terme.

C’est un poste difficile, finalement mais il y a une consolation : le public ne pardonne pas l’écroulement d’un immeuble. Par contre,  les usagers tolèrent les pannes informatiques, mais pour combien de temps?    

Brian Foote and Joseph Yoder, Big Ball of Mud Fourth Conference on Patterns Languages of Programs (PLoP '97/EuroPLoP '97) Monticello, Illinois, September 1997

 

F#, variation sur un air connu

Le temps fort de l’après-midi a été l’introduction à F#, un langage dit « fonctionnel ».  Quels sont les motifs pour justifier l’introduction d’un autre langage (à part le facteur ‘cool’)? En clair :

  •  Exploiter à fond la puissance de traitement des ordinateurs parallèles actuels et à venir : en effet le compilateur peut optimiser le code à sa guise, allant jusqu’à déplacer l’ordre d’exécution des instructions. En contrepartie, le programmeur ne se concentre plus sur l’ordre d’exécution des instructions, mais sur les liens logiques. Le compilateur s’occupe du reste!; Un exemple simple : l’échange de données entre deux variable implique l’usage d’une variable temporaire swap(a,b) {a=temp; a=b; b=temp;}. En notation fonctionne, on écrirait simplement :swap(a, b) {a b = b a;} et ça marche (je l’ai essayé).
  • Offrir un niveau d’abstraction supplémentaire car, selon un principe informatique,  tout problème possède une solution, à condition d’avoir le niveau d’abstraction nécessaire;
  • Tirer profit de la plateforme .Net pour qu’un programme F# puisse s’arrimer aux composants .Net existants et pour que les programmeurs restent dans un univers connu.

   Alors, que permet un langage fonctionnel? Entre autres choses :

  • Il permet la programmation orientée-objet;
  •  Il permet la récursivité;
  • Il considère l’absence de données comme une donnée valide;
  • Et finalement, il considère les fonctions comme des variables à part entière.

Ces caractéristiques sont celles que j’ai retenues de la conférence.

Des exemples de langages fonctionnels contemporains : F#, bien sur, mais aussi Erlang et Haskell.

Mais est-ce révolutionnaire? Pas vraiment : vous avez peut-être expérimenté avec l’un au l’autres de des concepts fonctionnel à l’aide des langages suivant :

  • Logo : pour la récursivité et les listes, plus que pour les graphiques (non, ce n’était pas juste pour les enfants);
  • Lisp : pour les listes;
  •  Lua : un langage interprété qui existe depuis… des lunes (jeu de mot facile et irrésistible);
  •  APL, Matematica
  •  … et même Excel : avez-vous à imposer une séquence de calculs dans vos formules?

 La liste est loin d’être exhaustive. Si F# vous intéresse, sachez qu’il existe une version beta pour Visual Studio 2008. Bonnes expérimentations!


La journée s’est terminée par une marche ponctuée d’arrêts photos.  Après m’être délesté de mon ordi et de mes autres gadgets technos, je me suis rendu au pub le plus près pour souper et relaxer devant un « Fish’n Chips » et une  pinte de bière irlandaise. Si ce n’était du fait qu’il y avait du hockey à la télé au lieu du soccer (ou du criquet), je me serais crû en Angleterre plutôt qu’à Vancouver, tant par l’ambiance que l’excellence du repas.

Pour les amateurs de sports,  c’était Pittsburg contre Detroit et les Pingouins ont gagné 2 à 1 et sont à égalité (3 à 3) dans la série finale.