Vue normale
Et si les chimpanzés nous ressemblaient encore plus qu’on ne le pensait ?
IA Box éducation - LES ROCHDUR
Le métro du jeu | NICOLAS REBORD
Rebord, N. & Rodrigues, I. (2017). Le métro du jeu. Genève : AUPTIC.education. Retrieved from https://auptic.education/12com/
— Permalien
-
- Débattre pour apprendre | Pédagogie universitaire - Enseigner et Apprendre en Enseignement Supérieur
Débattre pour apprendre | Pédagogie universitaire - Enseigner et Apprendre en Enseignement Supérieur
Cet article prolonge un autre article publié il y a quelques semaines à propos de l’organisation de débats constructifs avec les étudiant-e-s. Publié il y a quelques années dans la revue Theory into Practice, un texte de Buchs, Butera, Mugny et Darnon (2004) fait une synthèse des recherches dans le domaine et propose une liste de 15 conseils pour les enseignant-e-s quand ils/elles organisent ce type d’activités avec leurs étudiant-e-s. Les auteurs ont aussi publié très récemment un petit livre en français qui fait une synthèse de ces recherches (Darnon, Butera et Mugny, 2008).
Voici résumés ces 15 conseils que j’adapte à la réalité universitaire:
- Promouvoir le conflit sociocognitif en demandant aux étudiant-e-s de confronter leurs points de vue et les solutions qu’ils/elles ont trouvées à propos d’un problème ou d’un cas à résoudre.
- Proposer des tâches à propos desquelles plusieurs points de vue sont possibles et peuvent être confrontés.
- Encourager la controverse en proposant des tâches coopératives où les « pour » et les « contre » sont mis en évidence.
- Décourager l’évitement des conflits, notamment en amenant tou-te-s les étudiant-e-s à exprimer leur opinion et en évitant qu’ils/elles donnent des avis de complaisance.
- Renforcer la participation active et réciproque, en encourageant l’argumentation des points de vue.
- Éviter la compétition: dans une controverse constructive, il n’y a pas de vainqueur et de perdant, il devrait plutôt y avoir des échanges d’idées pour une meilleure compréhension en profondeur de l’objet du débat.
- Éviter les jugements négatifs sur les compétences d’autrui.
- Orienter les étudiant-e-s vers la maîtrise de la tâche plutôt que vers la démonstration de performances lorsqu’une controverse est ouverte.
- Promouvoir la recherche de réponses argumentées plutôt que la recherche de la reconnaissance des compétences: ne pas trouver de réponse à un problème peut amener les étudiant-e-s à perdre confiance en leurs compétences et à avoir des doutes quant à l’existence d’une réponse correcte.
- Réduire la comparaison entre les compétences des étudiant-e-s mais plutôt rester au niveau des idées et des arguments échangés.
- Encourager la décentration des points de vue en mettant en valeur la complémentarité de ceux-ci pour résoudre une tâche.
- Adapter le type de relations interpersonnelles aux étudiant-e-s qui participent: les plus jeunes ont souvent davantage besoin de cadrage, les plus âgés d’autonomie.
- Faire attention aux conflits de compétences lorsque les étudiant-e-s travaillent sur les mêmes informations: celui/celle qui se sent le/la moins compétent-e peut se désintéresser de la tâche.
- Faire attention à la qualité de l’échange d’informations entre des étudiant-e-s qui doivent collaborer en ayant chacun-e des ressources différentes mais complémentaires pour réaliser une tâche.
- Faire attention aux conflits relationnels et aux comparaisons sociales qui risquent de mener les étudiant-e-s à l’élaboration de stratégies défensives.
Ce que je retiens particulièrement pour les séminaires organisés dans plusieurs facultés, c’est l’importance de poser un cadre pour les discussions-débats en rappelant quelques règles à respecter (débats d’idées et pas de personnes ou de compétences), en fournissant des outils pour formuler ses opinions (critères d’évaluation écrits par exemple) et en encourageant chacun-e à participer oralement ou par écrit.
Buchs, C., Butera, F., Mugny, G., & Darnon, C. (2004). Conflict Elaboration and Cognitive Outcomes. Theory Into Practice, 43(1), 23-30.
Darnon, C., Butera, F., & Mugny, G. (2008). Des conflits pour apprendre. Grenoble: PUG.
— Permalien
guide_Wooclap_Guide_DACIP_SDUN.pdf
OpenSeriousGame – Réveiller le pouvoir de transmission en chacun
#OpenSeriousGame est un mouvement libre créé en 2018 dédié à développer la transmission des connaissances, des compétences et des savoirs.
Historiquement créé autour du pouvoir de transmission du Serious Game (jeu sérieux), qui se transmet facilement de proche en proche comme le serait un jeu de société, #OpenSeriousGame a développé différents modèles d’organisation et une méthode (méthode #OSG)) avec des outils pour aider les organisations à développer le pouvoir de transmission de leurs membres. Une association a été créée en 2019, nous continuons aussi à mettre en avant un maximum de ressources créées.
Aujourd’hui, les #OpenSeriousGame et les productions #OSG ont été utilisées dans de nombreuses entreprises, associations, et également dans l’Education Nationale française.
Toutes les ressources que vous trouverez sont open source, et nous partageons dans un esprit d’ouverture, d’envie de contribuer au monde de la formation et de l’éducation.
— Permalien
CodeCombat - Jeux de codage pour apprendre Python et JavaScript | CodeCombat
Par où commencer Kubernetes ?
Réflexion issue d’une discussion sur le Discord de Cuistops concernant le fait que Talos pourrait ne pas être le meilleur point de départ pour s’attaquer à cette technologie d’infrastructure qui a balayé le monde de l’orchestration de containers en une petite dizaine d’années. Pour illustrer pourquoi il n’y a pas de réponse absolue à cette question, je me suis dit que vous décrire mon parcours concernant l’univers des containers et Kubernetes en particulier (aussi bien au niveau perso que pro) serait éclairant sur certains points.
Aux origines : Docker
Le moins qu’on puisse dire, c’est que mon entrée dans l’univers des containers, en particulier via docker, n’était pas brillante. Je conserve avec malice le premier billet que j’ai consacré à ce sujet en 2016 pour illustrer à quel point je me trompais sur la technologie, que je n’avais jusque là pas vraiment vu, encore moins au niveau professionnel. J’ai heureusement rattrapé cette erreur depuis, aussi bien à la faveur de formations au travail (merci Thomas Perelle ) qu’au niveau perso, où mes propres expérimentations m’ont conduit à partager ma découverte et mon utilisation de Docker Swarm. J’ai bien rattrapé le coup, hein ?
D’ailleurs, Swarm a été pour moi la découverte de la notion d’orchestration. Que j’ai pu creuser cette fois au niveau pro en 2018 après un premier tout petit pas vers l’univers Kubernetes par la porte OpenShift à la faveur d’un workshop de deux jours par un collègue qui sera réellement un mentor pour les années suivantes, Julien Francoz. Je n’ai malheureusement pas gardé grand chose de ce workshop, étant donné que je n’avais aucune plateforme de ce type dans mon pôle client, encore moins de Kubernetes. Tout juste on commençait à avoir des clients qui cherchaient à déployer leurs applis en mode container sur des serveurs classiques, avec Docker. Sans pratique, la théorie s’efface vite, d’autant qu’en 2018, les usages « domestiques » n’étaient pas légion, donc les articles de blog non plus, encore moins autour d’Openshift. C’est en 2019 que tout change.
2019 : La découverte de Kube, de la containerisation d’applications, d’Azure, de terraform (tout en même temps)
Je vous passe le contexte de comment j’en suis arrivé à cette situation intense qui aura duré 5 mois, mais oui, j’ai découvert Kubernetes d’une façon un peu particulière : service cloud managé, sur Azure, el famoso « AKS« , à devoir migrer des applications précédemment hébergées sur des serveurs virtuels Debian dépassés, avec un cluster déployé manuellement qu’on a tenté de « terraformer » après-coup, avec toute la « qualité » de l’API d’Azure d’alors. Et je remercie encore Julien d’avoir pris autant de temps à me soutenir dans cet apprentissage express (la notion de mentor n’était pas galvaudée, clairement).
Service cloud Managé veut dire qu’on ne gère pas certains aspects importants de la vie d’un cluster : tout le control plane est masqué, vous ne voyez que les nœuds, vous ne vous occupez pas trop de certains aspects comme la rotation des certificats, les mises à jour sont automatisées (vous indiquez une version cible, le service s’occupe de la montée de version du control plane, puis des nœuds un par un), et vous bénéficiez d’intégrations avec le reste de l’infra du fournisseur, au niveau du réseau, du stockage, des capacités comme l’autoscaling (vous augmentez et réduisez automatiquement le nombre de nœuds en fonction de la charge ou des réservations de ressources des pods à déployer). L’installation se fait en trois/quatre clics via l’interface web, une ligne de commande avec l’utilitaire maison, ou un peu plus de lignes de code si on le fait via un outil d’infrastructure as code.
Bref, c’est cool, ça permet de se concentrer sur les aspects opérationnels des applications déployées, mais même comme ça, je vous avoue que AKS tel que Microsoft le proposait n’était pas toujours une sinécure. Azure lui-même était pénible, avec des VMs qui mettaient plusieurs minutes à démarrer (quand les concurrents tournaient autour de la minute). Et comme on ne gère pas le control plane, on rate tout un pan de l’architecture et de la gestion de Kubernetes et de ses composants sous-jacents. En plus à l’époque, l’image de l’OS utilisé pour les nœuds était basée sur Ubuntu, pas le plus léger et le « gaspillage » de ressources était réel, au-delà de Kubernetes lui-même.
J’aurais l’occasion de passer encore quelques années, pratiquement trois, à déployer d’autres projets AKS pour d’autres clients, ce qui m’a permis de constater, il faut savoir aussi le reconnaitre, comment Microsoft a cravaché pour amener un niveau de qualité sur le service bien plus en phase avec ce qu’on attend d’un tel fournisseur. Rotation automatique des certificats via les mises à jour (c’était pas le cas, la commande de rotation était à lancer à la main), amélioration générale d’Azure sur les temps de démarrage des nœuds, efficacité des mises à jour, intégrations avancées au niveau réseau (Calico, Istio, etc)… Ce qui n’empêche pas certains pains avec entre autres une API qui accepte certaines valeurs pourtant non supportées et qui m’ont forcé à redéployer des clusters from scratch parce que la communication entre les nœuds étaient devenue impossible (réponse du support : « on va mettre à jour la doc pour indiquer les valeurs supportées »; bravo…). Par la suite, j’ai découvert et encore plus adoré exploiter et déployer du GKE, le service équivalent de Google Cloud; il m’aura permis au passage d’apprendre comment fonctionnait ce fournisseur et tout ce qu’il fait de mieux que Microsoft (et parfois d’AWS). Au point de passer la certification « Professional Architect » au bout de 4 mois seulement de pratiques.
Kube à la maison
Cette expérience en particulier avec Azure ne m’aura pas empêché pas de tomber amoureux de la technologie, au point de remiser Docker Swarm, et de migrer sur K3S. Là aussi un choix particulier, conçu pour les machines très légères, puisque ciblant les Raspberry Pi, j’ai malgré tout fait le déploiement du flemmard, même si j’ai privilégié un déploiement semi-automatisé avec un playbook/role Ansible, et un seul nœud comme control plane (qui était le seul mode de déploiement supporté alors).
Particularité de k3s, regrouper tous les composants « core » de Kubernetes dans un seul binaire, une petite prouesse à la base de son empreinte mémoire réduite, mais pas que : un des éléments les plus critiques d’un cluster, la base de données ETCD, la « mémoire » du cluster, est remplacée par SQlite, bien plus léger, mais évidemment limité à une seul nœud, et moins enclin aux problèmes des bases de données plus complexe. Bien que le mode « multi-master » ait été implémenté par la suite, au passage à mes Raspberry Pi 4, j’ai quand même conservé le même mode de fonctionnement. J’ai eu l’occasion de détailler pas mal de choses concernant K3S sur ce blog, je ne vais donc pas m’étendre beaucoup plus.
Reste qu’à l’occasion d’une volonté de refonte, accélérée par la mort successive des cartes SD des Raspi après 4 ans de bons et loyaux services, j’ai décidé de revenir à un Kubernetes un peu moins simplifié, en partant sur un autre choix particulier, Talos Linux, qui aura fini en machine virtuelle suite à une déconvenue de matériel et de limitations électriques, que je me suis pris en pleine poire en plein live Twitch. Talos propose un déploiement Kubernetes beaucoup plus standardisé dans ses composants de base, mais dont la gestion des nœuds est très particulière : pas d’OS à proprement parler, juste le noyau et une API qui permet de pratiquer toutes les opérations sur la gestion de ces nœuds : pas de SSH, pas de CLI directe, l’utilitaire talosctl est là pour configurer les nœuds à l’envi, permettant de les ajouter/retirer d’un cluster en un clin d’œil, un aspect très important dans une gestion d’infrastructure au sens large (comprendre, en entreprise). Toute la configuration de base se fait au travers de fichiers de configuration YAML, à l’instar de Kubernetes lui-même, permettant une approche « intégration continue » et un versionnement via git.
Actuellement, je me débats avec certains paramétrages par défaut orientés sécurité entre autres qui peuvent limiter/bloquer certains usages sans attention particulière. Il est vrai que par défaut, Kubernetes est une plateforme particulièrement ouverte avec peu de gardes-fous, et c’est à chacun d’adapter cet aspect en fonction de son propre contexte, ce qui amène à devoir exploiter nombre d’extensions et contrôleurs additionnels pour y parvenir. Et comme souvent, la sécurité à un prix…
Et la question de départ ?
On le voit, au final je n’ai que peu choisi comment j’ai découvert et abordé la technologie et son déploiement « dans le monde réel », et j’ai démarré par certaines abstractions qui font que si je m’étais retrouvé face à un cluster « vanilla » (kubeadm, kubespray), et un problème lié au control plane, j’aurais été plus en peine que quelqu’un ayant directement attaqué « the hard way » (z’avez la ref ?). Et d’un certain côté c’est certainement encore le cas encore aujourd’hui, ce qui me vaudrait d’être recalé au recrutement chez Lucca ou Enix. Le livre à venir teasé par Denis Germain (qui ne s’appellera pas 50 Nuances de Kubernetes, ce qui aurait été bien trop cool comme titre) montre bien la diversité d’approches qui ont chacune leurs spécificités, avec la plupart des services dit « managés » abstrayant une bonne partie des composants et concepts de bas-niveau pour vous concentrer sur vos applications ou celles de vos clients.
Est-ce que l’une d’elles est meilleure qu’une autre ? Je considère toujours que la théorie est importante, jusqu’à un certain point, dans la mesure où si on n’a pas de le contrôle sur les éléments, ne pas savoir comment ils fonctionnent de manière sous-jacente n’est pas toujours une grosse tare : ce n’est pas de notre ressort que d’y mettre les mains. Imaginez une corruption de base ETCD sur un service managé. Ma seule préoccupation sera d’être capable éventuellement de restaurer tout ce que j’y ai mis au départ – mes déploiements d’applications, mes secrets, mes CRDs, etc- , là où la préoccupation du provider, sera de réparer cette corruption; dans le pire des cas, s’il n’aura pas été capable de restaurer le service avec un minimum de pertes, il s’agira de restaurer tout ça sur un nouveau cluster.
Nous vivons également dans un monde connecté à la plus grande base de connaissances du monde : Le Web. Je n’ai pas besoin de connaitre l’intégralité des arcanes du moindre bout de logiciel, quelque soit son niveau dans l’environnement où j’évolue, pour être capable de l’exploiter au quotidien, voire de le réparer. Les connaissances déjà acquises sont évidemment importantes, parce qu’elles permettent de définir un état d’esprit, un mode de réflexion, qui est la plupart du temps applicable aux autres technologies que vous rencontrerez. Mais si je rencontre un problème que je n’ai pas déjà vu par le passé, une recherche sur le web m’amène généralement soit à la solution, soit à une piste à creuser pour déterminer la cause. Dès lors, il n’y a pas de réponses simples à apporter à la question « par où démarrer », parce qu’elle peut dépendre aussi de la « fin ».
Faire un cluster à la mano avec tous les composants en mode « the hard way » ne sert pratiquement à rien si après on évolue dans un contexte de service managé. À l’inverse, un service managé est intéressant en ce sens qu’il permet de gérer les interactions avec d’autres services du fournisseur, et donc le mode de fonctionnement de celui-ci. Sur Kube lui-même vous manquez des choses, mais vous avez quand même pas mal de concepts à intégrer. Est-ce moins pertinent ? Pas forcément si c’est ce que vous manipulez tous les jours. Dans le même esprit, « the hard way » est probablement la pire méthode pour gérer le quotidien sur de l’infra qu’on gère, même si pour le coup on a toutes les tripes du cluster sur la table. On privilégiera donc très vite d’autres outils plus automatisés pour la gestion habituelle. N’est-ce pas tout aussi pertinent de démarrer directement avec ces solutions pour intégrer plus rapidement leurs concepts ?
Par où commencer Kubernetes ? J’ai envie de dire, par la solution qui vous rendra curieux. C’est tout le sel de l’apprentissage, comme de la recherche scientifique, où chaque réponse qu’on trouve amène d’autres questions, tout aussi passionnantes. D’autant plus que quand on démarre, on est amené à faire, défaire, refaire, à comparer. Notre univers informatique au sens large bouge tout le temps, la « galaxie » Kubernetes n’est pas en reste, il y a toujours des dizaines d’angles d’attaque possible, et à de très rares exceptions près, il n’y en a pas nécessairement une qui est plus mauvaise qu’une autre. Et d’autres apparaitront régulièrement, ce qui représente de nouvelles réponses possibles à cette question. Il ne faut pas avoir peur de se faire plaisir de différentes manières