Université de Sherbrooke, AIM

Ce qui suit concerne le cours IFT604, Applications Internet et mobilité, offert à l'Université de Sherbrooke. Vous pourrez revenir y piger du matériel même une fois le cours complété, tout en sachant que le cours évolue, que les outils évoluent, et qu'il faut lire et manipuler toute chose ci-dessous avec prudence.

Documents d'ordre général

Cliquez ici pour obtenir une copie électronique du plan de cours.

Petit rappel du contenu des séances

Ce qui suit liste (et, parfois, détaille) ce que nous avons vu (et, dans certains cas, ce que nous allons voir) au cours des séances en classe.

Certain(e)s d'entre vous ont manifesté de l'intérêt pour l'opportunité qui vous a été offerte d'utiliser un peu du temps à reprendre pour combler la séance 06 et la semaine où votre chic enseignant se trouvera sur un autre continent.

Les sujets proposés (et les contributeurs) sont, pour le moment :

Si vous souhaitez participer, faites-moi signe (par courriel) rapidement! Je vous rappelle (idée de Nicolas Guimier) que, si vous souhaitez discuter des stratégies et technologies que vous avez utilisé dans la réalisation de votre TP00, cela peut être considéré comme un sujet viable (dans la mesure où il y a de la viande autour de l'os, du contenu).

Séance

Date

Détail

S00

3 septembre

Nous avons commencé par une présentation du plan de cours, de l'enseignant et des modalités particulières de ce cours.

Survol un peu bric-à-brac de la matière que nous planifions couvrir au cours de la session, en faisant un peu de Name Dropping technologique. L'enseignant profite de cette première rencontre pour prendre le pouls de la classe, essayer de voir ce qui est connu de la majorité et ce qui l'est moins, et placer quelques mots et quelques concepts importants dans l'esprit des gens. Il en profite aussi pour expliquer sa façon de procéder, pour s'assurer que toutes et tous sont confortables avec cela.

Nous avons soulevé la question de la gestion de la semaine S06, où se tiennent les examens de mi-session. L'enseignant suggère de tenir une séance en classe avec contenu humainement aménagé (pour tenir compte de vos réalités) mais est aussi ouvert à saupoudrer les heures de cette semaine ici et là en rallongeant d'autres séances. On s'en reparlera à la séance S03.

S01

10 septembre


Nous avons examiné les bases du langage C#, qui fera partie de nos outils cette session, à partir de quelques exemples illustrant à la fois des similitudes et des différences avec ses langages cousins (Java et C++ en particulier). Nous n'avons toutefois pas fait le tour de la question parce que l'enseignant passe son temps à faire des parenthèses et de l'enrichissement. Hé la la.

Nous avons pris quelques minutes pour expliquer ce qui sera notre premier travail pratique (TP00).

Attention : étant donné la surpopulation de notre local de classe, nous déménagerons nos pénates au D3-2035 à partir de la séance S02!

S02

17 septembre

Pensez envoyer à l'enseignant un courriel décrivant la composition de votre équipe et le détail de l'application que vous comptez livrer en vue du TP00, et ceci avant 17:00 aujourd'hui.

Nous avons poursuivi notre survol des bases du langage C#, l'un de nos outils cette session, à partir de quelques exemples , continuant à illustrer à la fois des similitudes et des différences avec ses langages cousins (Java et C++ en particulier).

S03

24 septembre

Pensez envoyer à l'enseignant un courriel contenant un bref rapport (une page recto/ verso ou l'équivalent) indiquant la progression de votre équipe en vue du TP00, et ceci avant 17:00 aujourd'hui.

Petite discussion sur iiWAS 2010 et son impact sur nos vies.

Retour sur la question du clonage, pour clarifier les raisons motivant le recours à cette technique (plutôt qu'à la copie par construction ou par affectation) sur des objets manipulés à travers des indirections polymorphiques (typiques de langages tels que C# ou Java).

Survol de l'approche par composants (cours plutôt technique). D'abord avec code natif (en C++) côté client et côté serveur, en utilisant un serveur à contexte interne. Les sources des exemples sont disponibles ici.

S04

1er octobre

Poursuite du survol de l'approche par composants (cours plutôt technique encore une fois). D'abord, une refactorisation du système de la semaine S03. Ensuite, un exemple avec code natif côté client et côté serveur (serveur dans un contexte externe), puis avec combinaison où le code client est en C# et le code serveur est en C++. Les sources des exemples sont disponibles ici.

S05

8 octobre

Le TP00 devra être remis à l'enseignant au début de cette séance.

Plusieurs petits trucs cette semaine :

  • un retour sur la mécanique du système avec client C# et serveur C++ de la semaine précédente;
  • une brève discussion des CCW et des RCW;
  • un exemple concret de système avec client C++ et serveur C# à travers un CCW;
  • un exemple concret d'intégration C++ et C# à l'aide d'un gcroot;
  • une discussion des observateurs à distance à l'aide de points de connexion;
  • une discussion des interfaces asynchrones et du rôle des proxies dans ces circonstances.

Enfin, quelques trucs amusants à propos de technologies purement Web.

Proposition

Certains parmi vous ont mentionné craindre le prospect de séances de quatre heures, tel que nous l'avons décidé ensemble pour compenser le rejet collectif d'une séance normale en classe lors de la semaine des intras (S06).

Je vous comprends; quatre heures en classe, ça peut être lourd.

C'est pourquoi j'ai une proposition à vous faire : la thématique de ce cours est suffisamment vaste pour permettre d'explorer une importante variété de technologies, de langages et d'approches. Sachant cela, au lieu de vous taper quatre heures avec votre chic prof lors des séances compensatoires, que diriez-vous de préparer un petit exposé sur un sujet de votre choix (avec l'accord du prof, évidemment) ayant un lien avec les thématiques au menu du cours? Je pense entre autres (la liste n'est pas exhaustive) à :

  • déployer une application sur un iPhone;
  • déployer une application sur un téléphone Android;
  • construire une application destinée à Android;
  • le format JSON : ce que c'est, à quoi ça sert, avec exemples;
  • développer en PHP : de bonnes pratiques (et pourquoi);
  • développer en PHP : des pratiques à proscrire (et pourquoi);
  • des trucs sur Ruby, sur Perl ou sur d'autres langages dans une optique Web;
  • des trucs pour sécuriser un site Web;
  • des trucs pour hacker un serveur Web; etc.

Je pense ici à de petites présentations (15-20 minutes) que les gens intéressés pourraient construire. Je suis ouvert à des formats particuliers (deux personnes qui prennent un sujet Yin et un sujet Yang, par exemple bien programmer en PHP et mal programmer en PHP, 15 minutes chacune, le tout pour en arriver à un discours constructif évidemment).

Ce que je vois avec cela, c'est une opportunité de dynamiser un peu les fins de séances (la dernière heure/ heure et demie) en bousculant les habitudes, de changer le mal de place, et de faire en sorte que le bloc de quatre heures soit moins indigeste.

Si vous prenez cette perche tendue, je vous propose en échange d'évaluer la présentation et de la compter comme un minitest supplémentaire pour les gens qui auront présenté quelque chose. Ainsi, cela pourra compter dans la banque des minitests, et – en supposant que la présentation se soit bien déroulée, ce qui devrait typiquement être le cas – contribuer à améliorer votre note au bout du compte.

Les présentations prévues jusqu'ici sont listées ici.

S06

15 octobre

Semaine d'intras

Suite à une entente en classe, il n'y aura pas de cours cette semaine, mais trois séances d'ici la fin de la session débuteront à 8:30 plutôt qu'à 9:30. Nous compenserons ce rallongement par une formule plus interactive, pour ne pas que vous tombiez endormi(e)s. Plus de détails quand les dates seront connues...

Semaine de relâche (profitez-en!)

S07

29 octobre

Semaine d'entrevues de stages (on aménagera humainement les choses)

Plusieurs petits trucs culturels cette semaine, pour faire pardonner le retard dans la correction :

Si vous avez manifesté le désir de présenter une thématique devant vos pairs, faites-moi signe cette semaine pour que nous fixions une date pour vous. La réservation des moments se fera sur une base premier arrivé (dans ma boîte de courriel), premier servi. Les séances S08 (si vous le souhaitez), S10, S11 et S12 sont disponibles à cette fin.

Je placerai les présentations en fin de séance dans chaque cas, pour que le cours se termine sur une bonne note.

S08

5 novembre

Distribution et description du TP01.

Discussion sur divers sujets à partir d'une version de travail d'un document sur les applications Web (je me permets de vous laisser un PDF de 172 pages puisque le document n'est pas finalisé... C'est un cadeau, mais c'est pour vous seuls, alors ne le diffusez pas à grande échelle!).

Nous aurons droit à une présentation du sympathique Maxime Carey, qui nous fera une présentation de Drupal : ce que c'est, comment ça fonctionne, comment on s'en sert

Pour vous aider à démarrer avec le développement sur Windows Mobile :

Pour développer sur appareil Windows Mobile, vous aurez besoin :

Vous avez accès à des versions gratuites de chacun de ces produits. J'ai indiqué les liens vers les versions que j'utilise, mais vous devrez peut-être adapter en fonction de votre système d'exploitation.

S09

12 novembre

Votre chic prof est sur un autre continent, mais c'est pour une bonne cause. Il pense à vous, promis juré!

S10

19 novembre

Séance de quatre heures, incluant en fin de séance des présentations de :

  • l'illustre Maxime Leblanc, qui nous expliquera la futilité de diffuser de la vidéo sur le Web et d'espérer en bloquer la copie (ou, en ses propres termes, « Retro-engineering Web »);
  • le non-moins illustre Pierre-Alexandre Gagné, sur DPWS et une de ses implémentations, WS4D-JMEDS, qui permet d'exposer, d'utiliser et de découvrir des services dans un réseau large ou non. La technologie Under the Hood utilisée concerne les services Web.

Retour sur les sujets de la conférence iiWas 2010, dont le contenu concorde directement avec notre cours. Perspectives sur la lecture non-linéaire et l'utilisabilité. échanges sur la couverture sans-fil et les réalités locales. évaluation de l'enseignant (quel bonheur!). Quelques éléments techniques amusants. Ouverture sur une thématique populaire, galvaudée et controversée (le célèbre Web 2.0) et sur le Web sémantique. Vous remarquerez que, dans ces deux cas, les Wiki (en date de novembre 2010) sont... perfectibles, c'est le moins qu'on puisse dire.

S11

26 novembre

Séance de quatre heures, incluant en fin de séance des présentations de :

  • messieurs éric Sylvestre et Nicolas Guimier, dont le propos portera sur « Les outils Microsoft pour construire une application Web », en particulier ASP.NET 4.0, Silverlight, Entity Framework 4 et le Windows Communication Foundation (WCF)..

Le verglas nous oppresse mais l'enseignant est tout de même présent. Bref aperçu de la mouvance NoSQL (je ne suis pas un expert des bases de données, mais faut quand même mentionner cette chose) et une discussion (accompagnée d'une démonstration) de ce qu'on peut faire avec un langage (celui-ci) de prime abord pensé pour développer à l'aide de téléphones cellulaires.

S12

3 décembre

Le TP01 devra être remis à l'enseignant au début de cette séance.

Séance de quatre heures.

Journée atypique et cours au format ouvert : vous êtes sollicités pour une tâche de la plus haute importance...

Note importante : en compensation avec la séance S11, teintée de verglas, je vous propose le minitest de réflexion et de lecture que vous trouverez ici (.docx, .pdf) et que vous devrez me remettre à la séance S13 (ou avant, si vous le remettez en format électronique). Rien de difficile, mais la lecture à faire pour y répondre est pertinente alors... Détail : ne vous limitez pas aux wikis pour vos recherches (je le saurai si vous faites cela, mes snorros!)

S13

10 décembre

Séance « normale » de trois heures, incluant en fin de séance des présentations de :

  • Daniel Jasmin et Nicolas Deschênes, pour une présentation sur le iPhone (comment le programmer);
  • Pierre-Luc Maheux, sur le protocole SIP : un historique, le protocole en tant que tel, son utilisation; de même que
  • Salma Medini et Kleider Camargos, sur le processus entourant les RFC du IETF.

Séance de type plénière sur la gestion de carrière dans un monde aussi changeant, avec perspective historique et regard critique sur le tout. Questions éthiques.

S14

17 décembre

Chic examen plein d'amour (local D3-2034).

Comment ça, pas de révision?

Je ne fais pas de révision, règle générale. Le temps manque, les sujets sont nombreux, et je tiens un journal ouvert (cette page Web!) listant sur une base hebdomadaire ce qui a été couvert ou survolé. De plus, vous faites des travaux, des minitests, vous prenez des notes... La révision, ça finit par être redondant.

Cependant, je me permets de vous lancer, un peu pêle-mêle, quelques sujets d'intérêt survolés ou couverts, de même que d'autres sur lesquels j'aurais aimé discuter avec vous en temps normal. ça peut égayer votre révision; au pire, ça vous fera des lectures divertissantes. évidemment, tout ça s'ajoute aux trucs examinés sur une base hebdomadaire.

  • Technologies
    • Côté client
      • Flash/ActionScript
      • Silverlight/Moonlight
      • JavaScript (il y en a maintenant aussi côté serveur)
      • Applets
      • HTML (en particulier HTML 5), CSS, XSLT...
    • Côté serveur
      • ASP[.NET]
      • JSP
      • Servlets
      • PHP, Ruby (on Rails), Perl, etc. (il y en a tellement!)
  • Développement mobile
  • Interopérabilité entre technologies indigènes et technologies prises en charge
  • états
    • Côté client
      • Témoins (en particulier : id de session)
    • Côté serveur
      • BD
  • Modalités
    • être sans états (ou sans état, selon les acceptions), en anglais « Stateless »
    • Ce que cela signifie pour les composants
    • Ce que cela signifie pour le protocole
    • Ce que cela signifie pour le rôle des BD dans les systèmes répartis en général et dans le monde Web en particulier
  • Métaphores
    • Synchrone (sens faible)
      • HTTP GET/POST avec interaction directe
    • Asynchrone
      • Ajax selon diverses déclinaisons
  • Identifiants
    • URI [URL, URN], qui est la dominante Web, mais aussi...
    • UUID
    • IOR (pour CORBA)
  • Protocole, nom de domaine (résolu en adresse), dossier, fragment, port
  • Infrastucture (serveur de composants)
  • Serveur Web
    • Apache
    • IIS
  • Annuaires
    • UDDI (moribond, mais quand même...)
  • Interfaces des services
    • WSDL, typiquement (aussi MSIDL, CORBA IDL et autres)
  • Protocoles clés
    • HTTP/ HTTPS
    • XML-RPC
    • SOAP
    • d'autres, évidemment (dont SIP, sur lequel nous avons eu une présentation)
  • Durée de vie des composants
    • Immortels (souvent « singletons »)
    • Transitoires (Single-Call)
  • Schémas de conception clés
    • Singleton (éviter)
    • Immuabilité (échelonnabilité, concurrence sans verrous)
    • Fabrique (faciliter les mises à jour) + interfaces (interopérabilité, flexibilité)
    • Façade (regrouper des services sous un chapiteau commun)
    • Proxy (évidemment)
    • Séparer vraiment l'interface de l'implémentation
  • Mouvance Web 2.0
    • Ce que c'est
    • Séparer le bon grain de l'ivraie
  • La mouvance Web 3.0 (selon vous, le Web mobile; on verra si votre vision est juste!)
  • Cloud Computing
    • Nouveau buzzword
    • Traitement massivement réparti
    • Immuabilité
    • Statelessness
    • Parallélisme
    • Atomicité (pour réduire ce qui doit être refait quand ça va mal)
    • Idempotence si possible, réversibilité sinon
    • Données réparties
    • Imputabilité?
    • Protection de la vie privée?

Travaux pratiques

Les consignes des travaux pratiques vont comme suit.

Travail

Remise

Consignes

TP00

Au plus tard le 8 octobre 2010, 17:00

IFT604--TP00.pdf

TP01

Au plus tard le 3 décembre 2010, 17:00

IFT604--TP01.pdf

Exemples divers

Des exemples de diverses natures suivent.

Exemple simple de SCS par composants avec C++ dans le modèle COM (projet construit pour Visual Studio 2008 avec C++ ISO) :

  • client console;
  • interface IDL;
  • serveur à contexte interne.

Refactorisation de l'exemple simple de SCS par composants avec C++ dans le modèle COM (projet construit pour Visual Studio 2008 avec C++ ISO) :

  • client console;
  • interface IDL;
  • assemblage par implémentations partielles;
  • pointeurs intelligents;
  • serveur à contexte interne.

Exemple simple de SCS par composants avec C++ dans le modèle COM (projet construit pour Visual Studio 2008 avec C++ ISO) :

  • client console;
  • interface IDL;
  • bibliothèque de marshalling;
  • serveur à contexte externe.

Exemple simple de SCS par composants avec client .NET en C# et serveur C++ ISO mêlant les modèles COM et .NET (projet construit pour Visual Studio 2008) :

  • client console;
  • interface IDL;
  • bibliothèque de types;
  • coclasse;
  • bibliothèque de marshalling;
  • serveur à contexte externe.

Pour que le client .NET puisse accéder aux services COM simplement, il est d'usage de générer une bibliothèque de types (une .TLB) à partir de la description IDL des interfaces, puis d'intégrer cette .TLB à .NET à l'aide du programme tlbimp.exe, typiquement invoqué à la ligne de commande et sur lequel vous trouverez de la documentation en ligne.

Exemple simple de SCS par composants avec client C++ ISO et serveur .NET en C# (projets construits pour Visual Studio 2008) :

  • client console;
  • bibliothèque de types générée à partir du code .NET;
  • importation (directive non portable #import) de la bibliothèque de types;
  • serveur à contexte interne (mais chargé par le CLR de .NET, donc en pratique le contexte est externe).

Pour que le client COM puisse accéder aux services du serveur .NET simplement, il est d'usage de procéder ainsi :

  • dans le code C#, déclarer une interface publique exposant la signature des services à offrir, puis en dériver une classe qui jouera le rôle du serveur et qui implémentera ces services;
  • ajouter une clause using pour System.Runtime.InteropServices;
  • apposer une annotation (ce que les gens de .NET nomment des attributes) à l'interface pour qu'elle se conforme à IUnknown;
  • apposer une annotation au serveur pour qu'il soit identifié par un GUID (ce qui constituera la coclasse du point de vue du code client) ;
  • dans le fichier AssemblyInfo.cs, indiquer true pour l'annotation ComVisible;
  • signer l'assemblage (soit en utilisant sn.exe à la ligne de commande, soit en passant par les propriétés du projet);
  • à la ligne de commande (utilisez la console de Visual Studio si vous voulez éviter de définir plusieurs variables d'environnement), extraire une .TLB de l'assemblage .NET en utilisant le programme tlbexp.exe, puis publier l'assemblage .NET avec gacutil.exe et publier la correspondance entre l'assemblage .NET et la .TLB avec regasm.exe (voir la documentation en ligne pour plus de détails).

Pour le code C++, le code source devrait suffire. Retenez peut-être qu'importer une .TLB avec #import provoque la génération de deux fichiers de code C++ (un .TLH et un .TLI), fichiers décrivant l'interface en termes du code client. Si vous avez des bogues, examinez le contenu de ces fichiers!

Nous avons aussi vu un exemple de client C++ pour serveur .NET en intégrant le chargement du CLR de .NET lors du lancement du programme C++, et en ajoutant au projet C++ des références sur les assemblages .NET souhaités. Cette approche repose sur le template gcroot de <vcclr.h>.

Exemple de mise en application de l'approche Map/ Reduce, avec futures et Thread Pooling (en C++ ISO, projet Visual Studio 2008).

Exemple d'observateur avec COM (en C++ ISO, mais prudence : vieux projet Visual Studio 6, qui n'a pas été retouché depuis 2003, alors le code n'est sûrement pas à la hauteur de ce que je vous présente habituellement).

Exemple de système avec un serveur exposant une interface asynchrone sous COM (en C++ ISO, mais prudence : vieux projet Visual Studio 6, qui n'a pas été retouché depuis 2003, alors le code n'est sûrement pas à la hauteur de ce que je vous présente habituellement). La version à contexte externe (cible à gauche) est plus simple, mais si vous souhaitez voir une version à contexte interne, en voici une (les mêmes bémols associés au vieux code s'appliquent ici).

Exemples en C#

Lors de quelques-unes des séances, divers exemples en C# ont été proposés. Ils ont été regroupés dans une section à part entière de ce site, que je vous invite à visiter.

Exemples en Java

Java, exemple 00 (petit SCS à partir d'un service Web)

Quelques liens sur l'approche NoSQL :

Plus près des produits eux-mêmes :

Évidemment, c'est un mouvement contesté :


Vous serez peut-être aussi intéressé(e)s par des liens sur le Monde Internet, des liens sur les systèmes client/ serveur, ou encore des suggestions de lecture...


Valid XHTML 1.0 Transitional

CSS Valide !