- El estudiante de UW JD Kaim creó el MVP de HuskySwap, donde los estudiantes pueden encontrar con quién intercambiar cupos en materias sin vacantes, y se estaba preparando para lanzarlo antes de la inscripción del trimestre de primavera
- Este proyecto nació como una tarea del curso CSE 403 y también fue un ejercicio full-stack para aprender .NET moderno, Angular, abstracción de bases de datos, chat en tiempo real y permisos basados en roles
- La documentación Swagger del sistema de inscripción de UW indicaba cómo el Student Web Service daba acceso a datos de cursos, inscripciones, secciones, personas y trimestres, así que primero quiso automatizar la importación del catálogo de cursos con un token de solo lectura
- Unas horas después de solicitar el token, recibió una notificación de violación de la Registration Tampering Abuse Policy y la orden de bajar el sitio, que incluía cursos falsos de demostración, o podrían iniciar un proceso que terminaría en expulsión
- Más que la eliminación del sitio de demostración, el punto central es que un intento por mejorar la experiencia universitaria recibió de inmediato una sanción fuerte; JD Kaim avisa que se graduará en unos meses y que puede empezar a trabajar como ingeniero de software full-time desde junio
El problema de intercambio de cursos que HuskySwap quería resolver
- HuskySwap era una app sencilla para ayudar a estudiantes a encontrar con quién intercambiar sus cupos en clases importantes que ya estaban llenas
- En UW no había una solución principal para este propósito, y JD Kaim quería crear un servicio útil para todos
- La versión inicial se hizo el trimestre pasado como tarea de CSE 403, y quienes vieron la demo mostraron interés real en usarla
- Después, destinó parte de su horario del trimestre de invierno a reforzarla y lanzarla antes de la inscripción del trimestre de primavera
Proceso de implementación y objetivos de aprendizaje
- El MVP inicial también servía como práctica para ponerse al día con .NET moderno y Angular
- Las funciones principales que abordó durante la implementación fueron las siguientes
- abstracción de bases de datos
- chat en tiempo real
- permisos basados en roles
- Era un proyecto que probablemente habría hecho de todos modos, y al mismo tiempo podía obtener créditos de CSE 403, así que era una buena oportunidad
Solicitud de acceso a la API del sistema de inscripción de UW
- JD Kaim encontró documentación Swagger para integrarse con el sistema de inscripción
- Según la documentación, el Student Web Service proporcionaba a las aplicaciones varios tipos de información de la base de datos de estudiantes
- datos de cursos
- datos de inscripción
- datos de secciones
- datos de personas
- datos de trimestres
- datos académicos generales
- Por esa descripción, entendió que la universidad respaldaba escenarios como el de HuskySwap
- Lo primero que pidió no era algo grande: quería un token de acceso de solo lectura para automatizar la importación del catálogo de cursos en vez de ingresar manualmente todas las clases
- Si todo salía bien, también quería automatizar más partes del proceso o encontrar otros vacíos para mejorar la experiencia de la comunidad
Notificación de infracción y exigencia de eliminar el sitio
- Unas horas después de pedir el token, recibió una respuesta titulada “Notice of Violation of Registration Tampering Abuse Policy”
- La universidad le ordenó bajar el sitio de demostración y los cursos falsos de ejemplo que contenía
- El mensaje incluía que, si no retiraba el sitio, iniciarían un proceso que podría terminar en expulsión
- JD Kaim sintió que se había acercado con la intención de mejorar la experiencia universitaria para todos, pero que la universidad respondió de inmediato con dureza
Planes posteriores y mensaje de búsqueda laboral
- Dice que no le preocupa demasiado la amenaza de expulsión en sí, porque basta con bajar el sitio de demostración
- Aun así, se sintió decepcionado por la forma en que la universidad lo vio, ya que esperaba que al menos mostraran interés o entusiasmo por el intento
- Planea graduarse en unos meses y quiere pasar a proyectos que no necesiten la aprobación del Registro de UW
- También pidió que lo contacten si alguien busca un ingeniero de software full-time, y avisó que puede empezar a tiempo completo desde junio
- Compartió el repositorio del proyecto: HuskySwap
1 comentarios
Opiniones de Hacker News
Actualización: ayer, tras recibir el ultimátum, bajé de inmediato el sitio del proyecto de la clase.
Todavía no creo que un simple sitio de demostración haya violado la letra ni el espíritu de las normas de inscripción, pero lo bajé porque quiero actuar de buena fe.
Hoy la universidad me agradeció por haberlo bajado, pero dijo que de todos modos pondría una retención en mi cuenta; como resultado, no podré inscribirme en mi último semestre, lo que en la práctica me deja expulsado al final de este semestre.
Sin embargo, insinuaron que, si acepto crear una solución similar para la universidad al problema de fondo que HuskySwap intentaba resolver, levantarían la retención para que pueda graduarme; dejaron claro que la propiedad intelectual sería de la universidad y que no habría compensación.
De verdad me gustaba mucho UW y pasé buenos momentos ahí, pero esto desanima demasiado.
Actualización 2: Agradezco los consejos. Esta plataforma nunca tuvo intención de monetizarse, y como creo que el liderazgo de UW terminará corrigiendo esto, no pienso involucrar a un abogado.
Por ahora tampoco planeo seguir con este proyecto. Si desde el principio me hubieran propuesto trabajar juntos habría sido distinto, pero por la forma en que lo han manejado hasta ahora, solo quiero hacerme a un lado.
Pedirle consejo a un abogado no significa que tengas que iniciar de inmediato acciones legales contra la universidad. Una consulta no es una escalada, y la universidad ni siquiera tiene por qué enterarse de que consultaste. Un abogado puede decirte si hace falta una acción legal o si antes hay alternativas más amistosas.
La única forma de conseguir lugar en algunas materias obligatorias era encontrar a un estudiante de cursos superiores con fecha de inscripción prioritaria y un hueco en su horario para que tomara el cupo por ti. Si estabas en una fraternidad, bien; pero si eras un estudiante introvertido que vivía fuera del campus, no había solución.
UW seguramente sabe bien de este problema, así que es terrible que el problema siga siendo tan grave y que hayan llegado a intentar expulsarte solo por hacer una demo de una idea.
Como no compartió los documentos reales de UW, es difícil juzgar desde afuera.
Creo que sería mejor quitar la parte al final del post de LinkedIn que dice: “Me gradúo en unos meses y quiero pasar a proyectos que no requieran permiso de UW Registrar. Si alguien conoce a alguien que busque un ingeniero de software de tiempo completo con talento para captar la atención de la alta dirección, preséntenme. Estoy disponible de tiempo completo a partir de junio”. Puede parecer que está exagerando para ganar atención.
En su perfil de LinkedIn dice que se graduó de la preparatoria a mediados de 2023 y empezó en UW a mediados/finales de 2023, así que también me pregunto cómo puede graduarse en unos meses. ¿Quiere decir que lo terminará en 2 años, no en los 4 habituales?
La universidad tiene muchos incentivos para que los estudiantes se gradúen, y si no te han expulsado oficialmente, es muy probable que haya alguna forma de inscribirte manualmente en las clases. Tu asesor debería tener opciones y no necesariamente estar sujeto a las mismas restricciones que el área que opera el sitio de inscripciones.
Si aun así no funciona, deberías escalarlo a los niveles superiores de la administración de UW. Mientras más arriba subas, menos incentivos tendrán para ponerse del lado del departamento técnico. Salvo, claro, que esto haya empezado desde ahí y no desde el departamento técnico.
Por otro lado, si puedes poner en tu currículum un trabajo realizado con la universidad, tal vez no sea una pérdida total. Deberías considerar un abogado, pero en la práctica quizá te convenga obtener lo que puedas y graduarte.
Hace 10 años estudié en UW, y ya entonces era bastante de sentido común que no debías meterte con el software ni con el sistema de inscripción a cursos.
La competencia por inscribirse era muy intensa, y la universidad era estricta para que alguien no obtuviera ventaja solo por saber programar. Había muchos rumores de gente expulsada por intentar agarrar un curso con un script en cuanto se abriera.
Recuerdo que también estaba prohibido, o al menos mal visto, que los estudiantes “negociaran” inscripciones a cursos. No querían que más personas reservaran cursos de alto valor como si fueran mercancía para luego intercambiarlos.
Así que, según la época en la que estudié, casi cualquier estudiante de CS habría dicho que este sitio web era una idea terrible que iba a traer problemas.
Si repartes los horarios de inscripción a lo largo de varios días y abres un nuevo grupo cada 20 minutos más o menos, compites solo con una parte de los estudiantes y no con todos, así que el problema de los scripts se resuelve en gran medida. Si se llena el cupo, en lugar de permitir que alguien se inscriba inmediatamente cuando se libera un lugar, pones una lista de espera, y así comerciar también se vuelve imposible. Si se podía comerciar, entonces en primer lugar simplemente habrías podido inscribirte en esa materia.
Entiendo que el sistema de inscripción sea viejo y probablemente esté atado a software administrativo igual de antiguo, pero si a la universidad realmente le importara, debería haber una solución.
Si recibes preinscripciones, puedes conocer la demanda de antemano en vez de programar tarde clases adicionales después. Lo mismo aplica para fechas de giras de conciertos, vuelos o inventario de PS5.
Que no sea transferible significa que la lotería continúa. En cuanto alguien abandona una clase, hay que volver a sortear y reasignar ese lugar; incluso podría hacerse todos los días.
Técnicamente es una solución que funciona, pero pasa por alto el aspecto cultural de que quienes asignan recursos quieren generar conversación y demanda alrededor de esos recursos, convertirlo en un gran evento y luego agotarlo en “tiempo récord”. Entiendo que una gran parte del marketing universitario consiste en intentar parecer lo más popular y sobredemandado posible, aunque en realidad no estén de acuerdo con ello.
Por último, la parte más interesante es la generación pública de aleatoriedad. ¿Qué tal poner un enorme tambor continuo de dados en medio de Red Square de UW? El tambor parece fácil, pero ¿cómo se podría construir un registro físico que anote automáticamente los resultados de los dados?
¿Y además intentan obligarlo a hacer trabajo forzado no remunerado bajo la promesa de restaurarle el acceso?
Las universidades siempre son así. Una vez le avisé a mi alma mater que un enlace algo obscure, pero claramente público, parecía disparar sin mucho motivo la descarga de un ZIP con información detallada de estudiantes, y de inmediato me amenazaron con denunciarme al FBI.
Me reí y lo dejé pasar, pero decidí que no volvería a contactarlos primero salvo que fuera absolutamente necesario.
Así que cuando descubrí que la contraseña de administrador de LDAP estaba guardada en un archivo mundialmente legible en el servidor de CS, seguí exactamente esa política.
Presuntamente, el padre comentó esto en LinkedIn:
“Ya vi todos los correos, y es tan malo como se describe. Pensé que tal vez habría alguna exageración, pero el ‘University Registrar and Chief Officer of Enrollment Information Services’ claramente está diciendo: ‘si no construyes esto gratis con nosotros, no te gradúas’. Incluso especifica que deben agendar una reunión mucho antes de que abra la inscripción del trimestre de primavera de 2025, el 13 de febrero. Es decir, si no lo hace, no le permitirán seguir estudiando”.
https://www.linkedin.com/posts/edkaim_github-jdkaimhuskyswap...
Personalmente, yo ya habría ido a una confrontación total, publicando todas las pruebas y presionando a la universidad. Si ya estás prácticamente expulsado, no hay mucho que perder, así que lo habría hecho explotar públicamente.
Se me hace raro que diga estar sufriendo represalias y aun así no publique nada, lo que dificulta tomarlo completamente en serio.
Tal vez no lo supo hasta que la universidad reaccionó, pero si después de recibir la amenaza de expulsión sigue sin entender la postura de la universidad, entonces le falta mucha empatía cognitiva o no está siendo honesto.
Por eso veo con escepticismo sus afirmaciones y discusiones posteriores.
Eso en sí no está mal, pero muestra que el padre está muy involucrado en este chico y dispuesto a actuar activamente para darle una ventaja inicial. Por eso, personalmente, no lo veo como un testimonio adicional que respalde esta historia.
No reduce la probabilidad de que el testimonio del padre sea cierto, pero su calidad como evidencia positiva no es alta.
Está bien votar en contra, pero me gustaría que explicaran por qué no están de acuerdo. Es un poco desalentador que se vote negativamente sin motivo a cualquier comentario que no salga corriendo con antorchas. Podemos hacerlo mejor.
No entiendo por qué la administración de la universidad reacciona de forma tan extrema ante una solicitud para integrarlo con el sistema de inscripción. Este sistema parece haber sido diseñado desde el principio para que lo usen aplicaciones.
“Student Web Service permite que las aplicaciones accedan a datos académicos generales de la base de datos Student, como datos de cursos, datos de inscripción, datos de secciones, datos personales y datos de trimestres/semestres.”
No cuadra. ¿Falta algo en la historia? ¿Están ofreciendo este servicio web como un servicio señuelo para encontrar y expulsar a desarrolladores de software ambiciosos?
Por otro lado, la mayoría del software “enterprise” universitario es un montón de basura infecta.
Me sorprendió mucho el intento de extorsión, pero la sobrerreacción masiva en sí, por desgracia, no me sorprende tanto.
Si un servicio que la universidad no controla intenta usarlo, será difícil que lo aprueben. Los datos de estudiantes están fuertemente protegidos por ley, así que si se accede a ellos mediante otra aplicación y el operador puede ver datos de otros estudiantes, eso se vuelve un problema.
Un burócrata no dice “sí” porque, si algo sale mal, puede perder su empleo, pero si sale bien, el beneficio que obtiene es 0.
Por ejemplo, podría producirse un DDoS. No han sido pocas las veces que por error he terminado haciendo DDoS a un endpoint de API. O el servicio podría volverse demasiado popular y, como resultado, convertirse en un DDoS.
Dentro de esa organización, alguien odia su trabajo y casi no controla nada salvo su pequeño feudo y sus canales de acuerdos por detrás. Quien no abandona un rol así probablemente disfruta acumular o ejercer poder, o tendría dificultades en roles fuera de una organización de ese tipo.
Ahora supón que una persona con casi ningún poder pone públicamente sobre la mesa un asunto de su área que lleva años abandonado, aunque el problema se conoce desde hace mucho, porque nadie ha podido forzar una solución.
Entonces, solo por haberse atrevido a desafiarlo, es probable que sobrerreaccione para matar la historia, aunque casi no haya posibilidad de un castigo directo. En la academia, los castigos directos son muy raros.
No digo que esta historia sea cierta. No hay datos suficientes para juzgar. Pero después de ver durante mucho tiempo las partes tóxicas de la academia y a gente que pasa de 0 a 11, me parece plausible.
Tengo varios amigos en administración universitaria, y hay que saber dos cosas. En las universidades hay una cantidad enorme de personal administrativo, y son extremadamente territoriales.
Alguien sacudió el bote de alguien, y esa persona se enojó. Como hay tantísimo personal administrativo, tienen mucho tiempo, y ahora lo están tomando como asunto propio.
Creo que darle difusión a esto va en la dirección correcta. Hay que mantener la calma, ser sereno y apegarse lo más posible a los hechos. Si empieza a circular en redes sociales y medios, también se convertirá en un problema para otros administradores cuyo territorio es PR e imagen, y ellos lo tomarán como asunto propio e intentarán arreglarlo.
Así que hay que hacerlo grande, pero con educación.
Estoy completamente de acuerdo con “hacerlo grande, pero con educación”. En la academia, los problemas no se arreglan hasta que no arreglarlos se vuelve más molesto que arreglarlos. Cuanta más atención reciba, más probable será que otro burócrata mezquino por encima del responsable se dé cuenta de que su día se volvió mucho más fastidioso y lo aplaste de forma silenciosa y rápida.
El Student Web Service en cuestión: https://ws.admin.washington.edu/student/swagger/index.html
Probablemente FERPA fue un factor importante en que UW pidiera inicialmente bajar el sitio. Las instituciones ahora están totalmente enfocadas en protegerse.
La parte de las amenazas suena un poco exagerada. Me gustaría ver la correspondencia entre UW y esta persona. La historia completa es perfectamente posible, pero, como señalaron otros, también hay varias inconsistencias.
Me pasó algo parecido cuando estaba en la universidad. El equipo central de servicios de IT de la universidad intentaba lanzar un reemplazo del portal estudiantil lleno de funciones innecesarias, así que hicimos un mockup de un sitio simple con solo lo que realmente queríamos.
Más adelante también reimplementamos el sitio web de la asociación de estudiantes para ofrecer información más útil, como horarios de eventos y horarios de atención.
En ambas ocasiones nos investigaron por la posibilidad de que manejáramos datos de estudiantes de una forma que la universidad no podía controlar, en especial por la posibilidad de recibir contraseñas en nombre de los usuarios.
Lo primero era un mockup, y lo segundo al principio usaba un servidor LDAP público para la autenticación universitaria, pero pronto lo cambiamos a autenticación propia. Quedó claro que para la universidad era una condición absolutamente inaceptable que hubiera un campo para ingresar contraseñas en nuestro dominio.
Pudimos llevar la discusión a un terreno productivo comunicando con cuidado qué hacíamos y qué no, dónde estaban los límites y cómo manejábamos los datos.
La mayoría del personal universitario involucrado no tenía el nivel técnico para entender cosas como que era posible montar autenticación contra un servidor LDAP no seguro; solo les interesaba la política de si nosotros teníamos permitido hacerlo.
Un modo de falla común entre ingenieros de software es asumir que, si algo no está técnicamente prohibido y podría bloquearse pero no está bloqueado, entonces está permitido. En realidad no es así.
Lo que no queda claro en este proyecto es si la universidad se opone de manera fundamental a la idea de que un proyecto estudiantil ofrezca un servicio, o si alguien entró en pánico porque un sistema no aprobado podría recibir contraseñas de estudiantes. Si es lo primero, es claramente absurdo, y la universidad debería estar especialmente abierta a este tipo de innovación estudiantil. Si es lo segundo, es comprensible y una reacción bastante razonable, pero para que el estudiante lo navegue bien necesita una respuesta cuidadosa.
En el último día, se agregó el siguiente texto a la sección “Tampering and Abuse” de la página de Policies & Procedures del Registrar de UW:
“Además, crear un servicio que permita cualquiera de las conductas anteriores está estrictamente prohibido y constituye una infracción de esta política.”
Es probable que las normas administrativas sean más importantes, y las disposiciones relacionadas son las siguientes:
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 antes: https://web.archive.org/web/20241208123609/https://registrar...
Registrar después: https://web.archive.org/web/20250109203004/https://registrar...
Interesante. Yo me gradué de otra UW, la University of Warsaw, y en nuestra universidad hay una función de intercambio de materias integrada en USOS, el University Study Service System.
Como referencia, la educación en las universidades públicas de Polonia se financia por completo con fondos del gobierno y es gratuita para los estudiantes.
1 - https://usosweb.mimuw.edu.pl/kontroler.php?_action=news%2Fde...
Me alegra que mi universidad polaca no lo use.
La inscripción a materias se abría toda junta en cierto momento, y entre entonces y la fecha límite posterior al inicio de clases podías iniciar sesión y cargarla en cualquier momento durante varios meses. Algunas carreras tienen cupo limitado y las materias relacionadas también están restringidas a estudiantes de esa carrera, pero no había casos en los que faltaran lugares a nivel de materia y tuvieras que apurarte para enviar tu selección.