- JD Kaim, étudiant à l’UW, a créé le MVP de HuskySwap, un service permettant aux étudiants de trouver quelqu’un avec qui échanger une place dans un cours complet, et préparait son lancement avant les inscriptions du trimestre de printemps
- Le projet est né dans le cadre d’un devoir du cours CSE 403 et servait aussi d’exercice full-stack pour se former aux versions récentes de .NET et d’Angular, à l’abstraction de base de données, au chat en temps réel et aux permissions fondées sur les rôles
- La documentation Swagger du système d’inscription de l’UW indiquait comment accéder, via le Student Web Service, aux données de cours, d’inscription, de sections, de personnes et de trimestres ; il voulait d’abord automatiser l’import du catalogue de cours avec un jeton en lecture seule
- Quelques heures après sa demande de jeton, il a reçu un avis de violation de la Registration Tampering Abuse Policy et l’instruction de retirer le site, qui contenait de faux cours de démonstration, sous peine de voir une procédure pouvant mener à son exclusion être engagée
- Au-delà de la suppression du site de démonstration, le point central est qu’une tentative d’améliorer l’expérience universitaire s’est immédiatement heurtée à de fortes sanctions ; JD Kaim indique qu’il doit obtenir son diplôme dans quelques mois et qu’il pourra travailler à temps plein comme software engineer à partir de juin
Le problème d’échange de cours que HuskySwap voulait résoudre
- HuskySwap était une application simple destinée à aider les étudiants à trouver quelqu’un avec qui échanger leur place dans des cours importants déjà complets
- À l’UW, il n’existait pas de solution de référence pour cet usage, et JD Kaim voulait créer un service utile à tous
- Une première version avait été réalisée le trimestre précédent comme devoir pour le cours CSE 403, et les personnes ayant vu la démo avaient exprimé leur envie de l’utiliser réellement
- Il comptait ensuite consacrer une partie du trimestre d’hiver à la rendre plus robuste et à la lancer avant les inscriptions du printemps
Processus de développement et objectifs d’apprentissage
- Le MVP initial avait aussi une dimension d’exercice pour se mettre à jour sur les versions récentes de .NET et Angular
- Les principales fonctionnalités abordées pendant l’implémentation étaient les suivantes :
- abstraction de base de données
- chat en temps réel
- permissions fondées sur les rôles
- C’était un projet qu’il aurait probablement réalisé de toute façon, tout en constituant une bonne occasion d’obtenir des crédits pour CSE 403
Demande d’accès à l’API du système d’inscription de l’UW
- JD Kaim a trouvé la documentation Swagger permettant l’intégration avec le système d’inscription
- D’après cette documentation, le Student Web Service fournit aux applications différentes informations issues de la base de données Student :
- données de cours
- données d’inscription
- données de sections
- données de personnes
- données de trimestres
- données académiques générales
- Cette description lui a donné l’impression que l’université prenait en charge des scénarios comme HuskySwap
- La portée de sa première demande était limitée : il s’agissait d’un jeton d’accès en lecture seule pour automatiser l’import du catalogue de cours, plutôt que de saisir tous les cours manuellement
- Si cela se passait bien, il voulait automatiser davantage le processus ou identifier d’autres manques susceptibles d’améliorer l’expérience de la communauté
Avis de violation et demande de suppression du site
- Quelques heures après sa demande de jeton, il a reçu une réponse intitulée « Notice of Violation of Registration Tampering Abuse Policy »
- L’université lui a demandé de retirer le site de démonstration ainsi que les quelques faux cours de démonstration qu’il contenait
- Le message indiquait qu’à défaut, une procédure pouvant se conclure par son exclusion pourrait être engagée
- JD Kaim explique qu’il les avait contactés avec l’intention d’améliorer l’expérience universitaire pour tous, mais qu’il a perçu la réponse de l’université comme immédiatement très ferme
Prochaines étapes et message de recherche d’emploi
- Il dit ne pas être très inquiet de la menace d’exclusion elle-même, puisqu’il lui suffit de retirer le site de démonstration
- En revanche, il se dit déçu par la manière dont l’université le considère, alors qu’il s’attendait à ce qu’elle s’intéresse à l’initiative ou s’en réjouisse
- Il doit obtenir son diplôme dans quelques mois et souhaite passer à un projet qui n’a pas besoin de l’approbation du Registrar de l’UW
- Il demande à être mis en relation avec des personnes cherchant un software engineer à temps plein, et précise qu’il peut commencer à temps plein à partir de juin
- Il partage le dépôt du projet : HuskySwap
1 commentaires
Commentaires sur Hacker News
Mise à jour : hier, après avoir reçu l’ultimatum, j’ai immédiatement mis hors ligne le site du projet de cours.
Je ne pense toujours pas qu’un simple site de démonstration ait enfreint la lettre ou l’esprit des règles d’inscription, mais je l’ai retiré parce que je voulais agir de bonne foi.
Aujourd’hui, l’université m’a remercié de l’avoir retiré, tout en m’indiquant qu’elle allait placer mon compte en suspens ; en conséquence, je ne pourrai pas m’inscrire pour mon dernier semestre et je me retrouve de fait radié à la fin de ce semestre.
Ils ont toutefois laissé entendre que, si j’acceptais de créer pour l’université une solution similaire au problème de fond que HuskySwap visait à résoudre, ils lèveraient le blocage afin que je puisse obtenir mon diplôme ; ils ont aussi clairement indiqué que la propriété intellectuelle reviendrait à l’université et qu’il n’y aurait aucune rémunération.
J’aimais vraiment UW et j’y ai passé de bons moments, mais c’est extrêmement démotivant.
Mise à jour 2 : merci pour les conseils. Cette plateforme n’a jamais été destinée à être monétisée, et je pense que la direction d’UW finira par corriger la situation, donc je n’ai pas l’intention de faire intervenir un avocat.
Pour l’instant, je ne compte pas non plus poursuivre ce projet. S’ils m’avaient proposé de travailler ensemble dès le départ, les choses auraient été différentes, mais la façon dont tout cela a été géré jusqu’ici me donne juste envie de me retirer.
Demander conseil à un avocat ne signifie pas que tu dois immédiatement engager une action en justice contre l’université. Une consultation n’est pas une escalade, et l’université n’a même pas besoin de savoir qu’elle a eu lieu. Un avocat pourra te dire si une action juridique est nécessaire, ou s’il existe auparavant des options plus conciliantes.
Pour obtenir une place dans certains cours obligatoires, la seule méthode consistait à trouver un étudiant plus avancé, avec une date d’inscription prioritaire et un emploi du temps libre, pour lui demander de réserver la place à ta place. Si tu étais dans une fraternity, ça aidait, mais si tu étais un étudiant introverti vivant hors campus, tu n’avais aucune solution.
UW doit très bien connaître ce problème, et le fait que la situation soit encore assez mauvaise pour qu’ils envisagent de radier quelqu’un simplement pour avoir fait une démo d’idée est vraiment effroyable.
Comme les documents réels d’UW n’ont pas été partagés, il est difficile de juger de l’extérieur.
Il vaudrait mieux retirer la partie à la fin du post LinkedIn disant : « Je dois obtenir mon diplôme dans quelques mois et j’aimerais passer à des projets qui ne nécessitent pas l’autorisation du Registrar d’UW. Si quelqu’un connaît quelqu’un qui cherche un ingénieur logiciel full-time doué pour attirer l’attention de la direction, merci de me le présenter. Disponible à temps plein à partir de juin. » Ça peut donner l’impression que tu exagères pour attirer l’attention.
Sur le profil LinkedIn, il est indiqué que tu as terminé le lycée mi-2023 et commencé à UW entre mi et fin 2023 ; je me demande donc aussi comment tu peux obtenir ton diplôme dans quelques mois. Est-ce que cela veut dire que tu termines en 2 ans au lieu des 4 ans habituels ?
L’université a un fort intérêt à faire obtenir leur diplôme aux étudiants, et si tu n’as pas été officiellement radié, il y a de bonnes chances qu’il existe un moyen de t’inscrire manuellement à des cours. Ton conseiller devrait avoir des options, et il ne sera pas forcément soumis aux mêmes contraintes que l’équipe qui gère le site d’inscription.
Si ça ne marche pas, il faut remonter vers les niveaux supérieurs de l’administration d’UW. Plus tu montes, moins ils ont de raisons de prendre le parti du service technique — sauf si cette affaire vient de là-haut plutôt que du service technique.
À l’inverse, si tu peux mettre sur ton CV un travail réalisé avec l’université, ce n’est peut-être pas une perte totale. Il faut envisager un avocat, mais concrètement, il vaut peut-être mieux obtenir ce que tu peux et décrocher ton diplôme.
J’étais à l’UW il y a dix ans, et même à l’époque, c’était assez évident qu’il ne fallait pas toucher aux logiciels ni au système d’inscription aux cours.
La concurrence pour s’inscrire aux cours était très rude, et l’université était stricte pour éviter que quelqu’un ait un avantage simplement parce qu’il savait coder. Il y avait aussi beaucoup de rumeurs sur des étudiants exclus pour avoir tenté de récupérer une place avec un script dès qu’un cours souhaité s’ouvrait.
Je me souviens aussi que les étudiants n’avaient pas le droit, ou du moins étaient fortement dissuadés, de « négocier » des inscriptions à des cours. L’université ne voulait pas encourager davantage de gens à réserver des cours très demandés comme des marchandises pour les échanger ensuite.
Donc, d’après mon expérience à l’époque, presque tous les étudiants en CS auraient dit que ce site web était une idée catastrophique qui allait attirer des ennuis.
Si l’on échelonne les créneaux d’inscription sur plusieurs jours et qu’on ouvre un nouveau groupe toutes les 20 minutes environ, on ne concurrence qu’une partie des étudiants, pas l’ensemble, ce qui règle en grande partie le problème des scripts. Quand un cours est complet, il suffit de mettre en place une liste d’attente au lieu de permettre une inscription immédiate dès qu’une place se libère, et les échanges deviennent impossibles. Si un échange était possible, c’est qu’on aurait simplement pu s’inscrire au cours au départ.
Je comprends que le système d’inscription soit ancien et probablement lié à un logiciel administratif tout aussi ancien, mais si l’université s’en soucie vraiment, il devrait y avoir une solution.
En prenant des préinscriptions, on peut connaître la demande à l’avance au lieu d’ajouter des cours tardivement par la suite. C’est pareil pour les dates de tournées de concerts, les vols ou les stocks de PS5.
Le fait que ce soit non transférable signifie que le tirage continue. Dès que quelqu’un abandonne un cours, il faut refaire un tirage pour réattribuer la place, et cela pourrait se faire tous les jours.
Techniquement, c’est une solution qui fonctionne, mais elle passe à côté de l’aspect culturel : les répartiteurs de ressources veulent susciter de l’attention et de la demande autour de ces ressources, en faire un grand événement, puis afficher une vente complète en « un temps record ». Je comprends qu’une grande partie du marketing universitaire consiste à paraître aussi populaire et en situation de demande excédentaire que possible, même si, en pratique, on n’est pas forcément d’accord avec cela.
Enfin, la partie sur la génération aléatoire publique est la plus intéressante. Pourquoi ne pas mettre un énorme tambour à dés en continu au milieu de Red Square à l’UW ? Le tambour semble simple, mais comment concevoir un registre physique qui enregistrerait automatiquement les résultats des dés ?
Et ils essaieraient ensuite de lui imposer du travail forcé non rémunéré en promettant de lui rétablir l’accès ?
Les universités sont comme ça. Il y a longtemps, j’avais signalé à mon alma mater qu’un lien un peu obscur, mais clairement public, semblait déclencher le téléchargement d’un ZIP contenant des informations détaillées sur des étudiants sans raison particulière, et ils ont immédiatement menacé de me signaler au FBI.
J’en ai simplement ri, mais j’ai décidé de ne plus jamais les contacter de moi-même sauf nécessité absolue.
Donc, quand j’ai découvert que le mot de passe administrateur LDAP était stocké dans un fichier lisible par le monde entier sur le serveur CS, j’ai appliqué la même politique.
Le père aurait apparemment commenté ceci sur LinkedIn :
« J’ai maintenant vu tous les e-mails, et c’est aussi mauvais que décrit. Je pensais qu’il pouvait y avoir de l’exagération, mais le “University Registrar and Chief Officer of Enrollment Information Services” dit clairement : “si tu ne construis pas ça gratuitement avec nous, tu ne pourras pas obtenir ton diplôme”. Il précise même qu’il faut organiser une réunion bien avant l’ouverture des inscriptions du trimestre de printemps 2025, le 13 février. Sinon, cela signifie qu’ils ne le laisseront pas continuer ses études. »
https://www.linkedin.com/posts/edkaim_github-jdkaimhuskyswap...
Personnellement, je serais déjà passé à l’affrontement total : publier toutes les preuves et mettre la pression sur l’université. S’il est déjà de fait exclu, il n’a pas grand-chose à perdre, donc j’aurais tout rendu public.
C’est étrange de dire qu’on subit des représailles tout en ne publiant rien, ce qui rend difficile de prendre l’affaire entièrement au sérieux.
Il pouvait l’ignorer avant la réaction de l’université, mais s’il ne comprend toujours pas la position de l’université après avoir été menacé d’exclusion, c’est qu’il manque fortement d’empathie cognitive ou qu’il n’est pas honnête.
Du coup, je regarde aussi ses affirmations et la discussion qui suit avec suspicion.
Ce n’est pas mauvais en soi, mais cela montre que le père est très investi dans cet enfant et prêt à agir activement pour lui donner un avantage au départ. Donc, personnellement, je ne considère pas cela comme un témoignage supplémentaire corroborant l’histoire.
Cela ne réduit pas la probabilité que le témoignage du père soit vrai, mais sa qualité comme preuve positive n’est pas très élevée.
Les votes négatifs me vont, mais j’aimerais qu’on explique pourquoi on n’est pas d’accord. C’est un peu décourageant de voir tous les commentaires qui ne brandissent pas les fourches se faire enterrer sans raison. On peut faire mieux.
Je ne comprends pas pourquoi l’administration de l’université réagit de manière aussi extrême à une demande d’intégration avec le système d’inscription. Ce système semble avoir été conçu dès le départ pour être utilisé par des applications
« Student Web Service permet aux applications d’accéder aux données académiques générales de la base de données Student, comme les données sur les cours, les inscriptions, les sections, les données personnelles et les données de semestre. »
Ça ne tient pas debout. Il manque quelque chose à l’histoire ? Est-ce qu’ils proposent ce service web comme service-appât pour repérer et exclure les développeurs logiciels ambitieux ?
Par ailleurs, la plupart des logiciels « enterprise » des universités sont des tas d’ordures purulents
La tentative d’extorsion m’a beaucoup surpris, mais la surréaction massive en elle-même n’est malheureusement pas très étonnante
Si un service que l’université ne contrôle pas essaie de l’utiliser, il aura du mal à obtenir une autorisation. Les données des étudiants sont fortement protégées par la loi ; si elles deviennent accessibles via une autre application et que son opérateur peut voir les données d’autres étudiants, cela pose problème
Un bureaucrate peut perdre son emploi si quelque chose tourne mal, mais il n’a aucun bénéfice à dire « oui » quand tout se passe bien
Par exemple, il pourrait y avoir un DDoS. Il m’est arrivé plus d’une fois de provoquer accidentellement un DDoS sur un endpoint d’API. Ou bien le service pourrait devenir trop populaire et aboutir, de fait, à un DDoS
Dans cette organisation, une personne déteste son poste et ne contrôle presque rien en dehors de son petit fief et de ses canaux officieux. Quelqu’un qui ne quitte pas ce genre de rôle prend probablement plaisir à accumuler ou exercer du pouvoir, ou bien aurait du mal à occuper un rôle hors de ce type d’organisation
Imaginons alors qu’une personne ayant très peu de pouvoir rende publiquement visible un problème relevant de son domaine, connu depuis longtemps mais laissé en plan pendant des années parce que personne n’a pu forcer sa résolution
Il est alors très possible qu’elle surréagisse pour étouffer l’affaire, ne serait-ce que parce qu’on a osé la défier, même si la probabilité d’une sanction directe est très faible. Dans le monde académique, les sanctions directes sont très rares
Je ne dis pas que c’est ce qui s’est passé ici. On manque de données pour juger. Mais après avoir longtemps observé les parties toxiques du milieu académique, j’ai vu suffisamment de gens passer de 0 à 11 pour trouver ce scénario plausible
J’ai plusieurs amis dans l’administration universitaire, et il faut savoir deux choses. Les universités comptent énormément de personnel administratif, et ces personnes ont un sens du territoire extrêmement marqué
Quelqu’un a secoué la barque de quelqu’un d’autre, et cette personne est en colère. Comme il y a énormément d’administratifs, ils ont beaucoup de temps, et maintenant ils s’en occupent comme si c’était leur affaire
Faire connaître cette histoire largement me semble être la bonne direction. Il faut rester calme, posé, et s’en tenir autant que possible aux faits. Quand cela commencera à circuler sur les réseaux sociaux et dans les médias, cela deviendra aussi un problème pour d’autres administrateurs ayant leur propre territoire, celui des relations publiques et de l’image, et ils considéreront que c’est leur affaire et essaieront de régler la situation
Donc il faut faire du bruit, mais rester courtois
Je suis entièrement d’accord avec « faire du bruit, mais courtoisement ». Dans le monde académique, un problème n’est pas corrigé tant qu’il n’est pas plus pénible de ne pas le corriger que de le corriger. Plus l’attention augmente, plus il est probable qu’un autre petit bureaucrate, situé au-dessus du responsable, réalise que sa journée est devenue beaucoup plus pénible et étouffe l’affaire discrètement et rapidement
Le Student Web Service en question : https://ws.admin.washington.edu/student/swagger/index.html
La FERPA a probablement beaucoup pesé dans la première demande de l’UW de retirer le site. Les institutions sont désormais toutes obsédées par leur propre protection
La partie sur les menaces me paraît un peu exagérée. J’aimerais voir la correspondance entre l’UW et cette personne. L’ensemble de l’histoire est tout à fait possible, mais comme d’autres l’ont souligné, il y a aussi plusieurs incohérences
J’ai vécu quelque chose de similaire quand j’étais à l’université. L’équipe centrale des services IT de l’université voulait déployer un remplaçant du portail étudiant avec plein de fonctionnalités inutiles, alors nous avons créé une maquette d’un site simple ne contenant que ce que nous voulions réellement
Plus tard, nous avons aussi réimplémenté le site du syndicat étudiant pour fournir des informations plus utiles, comme le planning des salles d’événements et les horaires d’ouverture
Dans les deux cas, nous avons fait l’objet d’une enquête parce que nous étions susceptibles de manipuler des données étudiantes d’une manière que l’université ne pouvait pas contrôler, en particulier parce que nous pouvions recevoir des mots de passe à la place des utilisateurs
Le premier cas était une maquette ; dans le second, nous avions d’abord branché l’authentification universitaire via un serveur LDAP public, avant de passer rapidement à notre propre authentification. Il était évident que le simple fait d’avoir un champ de saisie de mot de passe sur notre domaine était une ligne rouge absolue pour l’université
En communiquant prudemment sur ce que nous faisions et ne faisions pas, sur les limites, et sur la manière dont nous traitions les données, nous avons pu les convaincre dans le cadre d’une discussion productive
La plupart des employés de l’université impliqués n’avaient pas le niveau technique nécessaire pour comprendre des détails comme le fait qu’on puisse brancher une authentification sur un serveur LDAP non sécurisé ; ils ne s’intéressaient qu’à la question de politique interne : avions-nous le droit de le faire ?
Un mode d’échec fréquent chez les ingénieurs logiciel consiste à supposer que si quelque chose n’est pas techniquement interdit et pourrait être bloqué mais ne l’est pas, alors c’est autorisé. En réalité, ce n’est pas le cas
Ce qui n’est pas clair dans ce projet, c’est si l’université s’oppose fondamentalement à l’idée qu’un projet étudiant fournisse un service, ou si quelqu’un a paniqué à l’idée qu’un système non approuvé puisse recevoir des mots de passe d’étudiants. Dans le premier cas, ce serait manifestement absurde, et l’université devrait être particulièrement ouverte à ce type d’innovation étudiante. Dans le second, c’est une réaction compréhensible et assez raisonnable, mais cela demande une réponse soigneuse si l’étudiant veut s’en sortir correctement
Au cours des dernières 24 heures, la phrase suivante a été ajoutée à la section « Tampering and Abuse » de la page Policies & Procedures du Registrar de l’UW :
« En outre, la création de services permettant l’un quelconque des actes ci-dessus est strictement interdite et constitue une violation de cette politique. »
Les règlements administratifs sont probablement plus importants, et les dispositions pertinentes sont les suivantes :
WAC Aiding, assisting, and attempting : https://app.leg.wa.gov/WAC/default.aspx?cite=478-121-113
WAC Computer abuses : https://app.leg.wa.gov/WAC/default.aspx?cite=478-121-117
Registrar avant : https://web.archive.org/web/20241208123609/https://registrar...
Registrar après : https://web.archive.org/web/20250109203004/https://registrar...
Intéressant. J’ai été diplômé d’une autre UW, l’Université de Varsovie, et notre université intègre une fonction d’échange de cours dans USOS, le University Study Service System
À noter qu’en Pologne, l’enseignement dans les universités publiques est entièrement financé par l’État et gratuit pour les étudiants
1 - https://usosweb.mimuw.edu.pl/kontroler.php?_action=news%2Fde...
Je suis content que mon université polonaise ne l’utilise pas
Les inscriptions aux cours ouvraient toutes à un moment donné, puis il suffisait de se connecter et de les saisir à n’importe quel moment entre cette date et la date limite après le début des cours. Certains cursus avaient un nombre de places limité et les cours associés étaient réservés aux étudiants de ces cursus, mais il n’y avait pas de manque de places au niveau des cours qui obligeait à se dépêcher de soumettre ses choix