Quelques raccourcis :
Ce qui suit concerne le cours INF756, Systèmes client/ serveur (SCS) et est offert en priorité au DGL, diplôme offert par l'Université de Sherbrooke. Vous pouvez venir y piger ce dont vous avez envie, tout en sachant que le cours évolue, que les outils évoluent, et qu'il faut lire et manipuler toute chose ci-dessous avec prudence.
Plan de cours |
|
Consignes pour le projet de session |
Date |
Séance |
Détail |
---|---|---|
28 août |
Au menu :
Dans les notes de cours, ce que nous avons fait touche aux pages suivantes :
Vers la fin de la séance, nous avons examiné un programme comparant l'exécution d'une version d'un programme dont deux fils d'exécution concurrents incrémentent plusieurs fois une même variable. L'une est rapide mais contient une Data Race, ce qui signifie qu'elle contient du comportement indéfini, alors que l'autre est moins rapide mais s'exécute correctement :
Un résultat possible pour cette exécution serait :
C'est un peu triste comme résultat : nous semblons faire face à un choix cornélien entre une version rapide mais incorrecte et une version lente mais correcte. Cela dit, nous avons discuté du sain usage des outils de synchronisation (qui sont généralement faits pour être lus fréquemment, mais modifiés rarement, alors que ce programme modifie n continuellement ce qui est en quelque sorte un « pire cas »), et fait le petit changement suivant :
Cette nouvelle version réduit au minimum les modifications à la variable n partagée, et un résultat possible de son exécution serait :
Nous sommes passés de 2,73 fois plus lent avec ajout de synchronisation à plus de dix fois plus rapide. Cest pas mal, non? |
|
4 sept. |
Au menu, cours à saveur technique, mais on ne parle pas de technique banale ici, ne vous en faites pas. Vous devriez trouver de quoi nourrir votre cerveau dans le cours de cette séance :
La multiprogrammation est une thématique qui transcende celles des systèmes répartis, mais il est difficile – voire impossible – de bien réaliser un serveur dynamique pour plusieurs clients sans rendre ce serveur capable de faire plusieurs choses à la fois, du moins si on se limite à une approche synchrone au sens faible (ou, plus typiquement, bloquante) pour le volet communication. Dans les notes de cours, ce que nous avons fait touche aux pages suivantes :
|
|
11 sept. |
Au menu :
Dans les notes de cours, ce que nous avons fait touche aux pages suivantes :
Attention : séance offerte à distance à travers Teams |
|
18 sept. |
Pas de cours avec moi cette semaine car je suis à CppCon et j'ai les mains pleines. Vous pouvez suivre mes aventures au quotidien sur ../../Sujets/Orthogonal/cppcon2024.html |
|
25 sept. |
Au menu : Avertissement : ce sera un cours un peu chargé, alors apportez-vous un café ou l'équivalent!
Avec cette première approche, nous entreprenons la couverture, avec code natif (en C++) à la fois du côté client et du côté serveur, la mise en place d'un SCS complet réalisant une tâche banale. Nous utilisons pour cette fin un serveur à contexte interne. |
|
2 oct. |
Au menu :
|
|
9 oct. |
Au menu :
|
|
16 oct. |
s/o |
Examens intras (pas de cours pour nous) |
23 oct. |
s/o |
Relâche (pas de cours pour nous) |
30 oct. |
Au menu :
|
|
6 nov. |
Au menu :
|
|
13 nov. |
Au menu :
L'univers du mobile et les médias « Depuis plus de quinze ans maintenant, la mobilité a fait partie intégrante de la stratégie des médias pour diffuser et monétiser leur contenu. Lors de cette présentation, nous discuterons donc des outils et des systèmes utilisés, passés et futurs, par certains médias du Québec afin d'atteindre leurs buts dans un écosystème ultra compétitif. » Les diapositives sont ici : L'univers du mobile et des médias 2024.pdf |
|
20 nov. |
Au menu :
De plus, selon le temps qu'il nous reste :
Faut de temps, je n'ai pas couvert :
Cette rencontre se tiendra à distance, par Teams Note : cette semaine se tient une rencontre du WG21 à Wrocław (Pologne) et j'ai des dossiers à défendre. Étant donné les différences de fuseaux horaires et la complexité de la logistique, il se peut que je doive prendre une pause étrange... Ou que je sois simplement moins alerte qu'à l'habitude. Merci de votre compréhension, et de votre tolérance! |
|
27 nov. |
Au menu :
Gestion des services dans une organisation en évolution « Les technologies évoluent rapidement, tout comme les organisations. Comment gérer l'intégration de nouveaux systèmes avec le moins d'impact possible sur les systèmes existants et sur les opérations de tous les jours? Comment faire face aux besoins d'aujourd'hui et tenter d'anticiper ceux de demain en maximisant les investissements technologiques? Comment gérer l'utilisation des systèmes en place pendant ces changements? La présentation se veut une réflexion sur l'évolution des systèmes informatiques pendant une période de croissance ou de changement d'une entreprise. » Les diapositives utilisées comme support ce soir sont disponibles sur Gestion des Services_2024.pdf |
|
4 déc. |
Au menu :
|
|
11 déc. |
Chic examen plein d'amour. |
Plusieurs sources et exemples sont disponibles dans la section du site prévue à cet effet. Portez particulièrement attention aux éléments suivants.
![]() |
Exemple simple de SCS par composants avec C++ dans le modèle COM (projet construit pour Visual Studio 2022 avec C++ 17) :
|
![]() |
Refactorisation de l'exemple simple de SCS par composants avec C++ dans le modèle COM (projet construit pour Visual Studio 2017 avec C++ 17) :
|
![]() |
Exemple simple de SCS par composants avec C++ dans le modèle COM (projet construit pour Visual Studio 2015 avec C++ 14) :
|
![]() |
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) :
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) :
Pour que le client COM puisse accéder aux services du serveur .NET simplement, il est d'usage de procéder ainsi :
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 programmation par promesses (mieux connu sous le nom de futures), délégués et Thread Pooling (en C++ ISO, projet Visual Studio 2008). |
![]() |
Cliquez sur cette cible pour aller au document portant sur les classes imbriquées |
![]() |
Cliquez sur cette cible pour aller au document portant sur les templates |
![]() |
Cliquez sur cette cible pour aller au document portant sur les singletons |
![]() |
Cliquez sur cette cible pour aller au document portant sur les mutex portables |
![]() |
Cliquez sur cette cible pour aller au document portant sur les autoverrous |
![]() |
Cliquez sur cette cible pour aller au document portant sur les objets autonomes |
![]() |
Cliquez sur cette cible pour aller au document portant sur les méthodes volatiles |
Vous trouverez ici un petit document expliquant comment déboguer un contexte externe COM (un exécutable dans lequel résident des composants COM). |
Dans le passé, le cours INF756 portait le sigle IFT756, et les programmes tels que le DTI (avant même l'existence du DGL) fonctionnaient sous le principe des cohortes, des groupes de gens qui tendaient à se suivre essentiellement du début à la fin de leur formation, comme une famille. Certains de vos prédécesseurs vous ont légué des cadeaux (merci à eux!). Je vous ai aussi laissé ici, à titre d'exemple de format d'examen seulement (car le contenu du cours – et des examens – change chaque session, donc ces exemples sont désuets sur le plan du contenu), quelques exemples de vieux examens. Peut-être sauront-ils vous inspirer?
Vous trouverez ici l'examen final des cohortes 01 et 02 pour IFT756 |
|
Vous trouverez ici l'examen final de la cohorte 03 pour IFT756 |