- O estudante da UW JD Kaim criou o MVP do HuskySwap, para ajudar alunos de disciplinas lotadas a encontrar alguém com quem trocar vagas, e estava se preparando para lançar o serviço antes do período de matrícula da primavera
- O projeto surgiu como um trabalho da disciplina CSE 403 e também serviu como prática full stack para aprender .NET moderno, Angular, abstração de banco de dados, chat em tempo real e permissões baseadas em papéis
- A documentação Swagger do sistema de matrícula da UW indicava que o Student Web Service dava acesso a dados de disciplinas, matrículas, seções, pessoas e períodos letivos, então ele tentou primeiro automatizar a importação do catálogo de disciplinas com um token somente leitura
- Algumas horas após pedir o token, recebeu uma notificação de violação da Registration Tampering Abuse Policy, com a orientação de tirar do ar o site com disciplinas de demonstração falsas ou poderia ser iniciado um processo que levaria à expulsão
- Mais do que apagar o site de demonstração, o ponto central é que uma tentativa de melhorar a experiência na universidade resultou imediatamente em uma reação severa; JD Kaim informa que deve se formar em alguns meses e pode começar a trabalhar em tempo integral como engenheiro de software a partir de junho
O problema de troca de disciplinas que o HuskySwap queria resolver
- O HuskySwap era um app simples para ajudar estudantes de disciplinas importantes e lotadas a encontrar alguém com quem trocar vagas
- A UW não tinha uma solução de referência para esse objetivo, e JD Kaim queria criar um serviço útil para todos
- A versão inicial foi criada no último trimestre como trabalho da disciplina CSE 403, e pessoas que viram a demo demonstraram interesse em usá-la de verdade
- Depois disso, ele usou parte do cronograma do trimestre de inverno para deixar o projeto mais robusto e lançá-lo antes da matrícula da primavera
Processo de implementação e objetivos de aprendizado
- O MVP inicial também tinha caráter de prática para se atualizar em .NET moderno e Angular
- Os principais recursos trabalhados durante a implementação foram:
- abstração de banco de dados
- chat em tempo real
- permissões baseadas em papéis
- Era um projeto que ele provavelmente faria de qualquer forma, e ao mesmo tempo era uma boa oportunidade para também obter créditos da CSE 403
Pedido de acesso à API do sistema de matrícula da UW
- JD Kaim encontrou a documentação Swagger para integração com o sistema de matrícula
- Segundo a documentação, o Student Web Service fornecia aos aplicativos várias informações do banco de dados estudantil
- dados de disciplinas
- dados de matrícula
- dados de seções
- dados de pessoas
- dados de períodos letivos
- dados acadêmicos gerais
- Por causa dessa descrição, ele entendeu que a universidade apoiava cenários como o do HuskySwap
- O escopo inicial do pedido não era grande: ele queria apenas um token de acesso somente leitura para automatizar a importação do catálogo de disciplinas, em vez de cadastrar manualmente todas as matérias
- Se desse certo, também queria automatizar mais o processo ou encontrar outras brechas para melhorar a experiência da comunidade
Notificação de violação e exigência de remover o site
- Algumas horas depois de pedir o token, recebeu uma resposta intitulada “Notice of Violation of Registration Tampering Abuse Policy”
- A universidade exigiu que ele tirasse do ar o site de demonstração e algumas disciplinas falsas usadas na demo
- A mensagem dizia que, se o site não fosse removido, seria iniciado um processo que poderia terminar em expulsão
- JD Kaim diz que entrou em contato com a intenção de tornar a experiência universitária melhor para todos, mas entendeu que a universidade respondeu de forma imediatamente dura
Planos seguintes e recado de busca por trabalho
- Ele afirma que não está muito preocupado com a ameaça de expulsão em si, porque basta remover o site de demonstração
- Ainda assim, disse ter ficado decepcionado com a forma como a universidade o vê, e que esperava que a instituição demonstrasse interesse ou até ficasse contente com a tentativa
- Ele deve se formar em alguns meses e quer migrar para projetos que não precisem da aprovação do UW Registrar
- Também pediu que entrem em contato caso alguém esteja procurando um engenheiro de software em tempo integral, informando que pode começar em junho
- Compartilhou o repositório do projeto: HuskySwap
1 comentários
Comentários do Hacker News
Atualização: ontem, logo depois de receber o ultimato, tirei do ar o site do projeto de disciplinas
Ainda não acho que um simples site de demonstração tenha violado a letra ou o espírito das regras de matrícula, mas tirei do ar porque queria agir de boa-fé
Hoje a universidade agradeceu por eu ter removido o site, mas disse que aplicaria uma retenção à minha conta; como resultado, não consigo me matricular no meu último semestre e, na prática, ficarei desligado ao fim deste semestre
No entanto, deram a entender que removeriam a retenção para que eu pudesse me formar se eu concordasse em criar, para a universidade, uma solução semelhante para o problema de base que eu tentava resolver com o HuskySwap; deixaram claro que a propriedade intelectual ficaria com a universidade e que não haveria remuneração
Eu realmente gostava da UW e tive bons momentos lá, mas isso é desanimador demais
Atualização 2: agradeço os conselhos. Esta plataforma nunca teve intenção de ser monetizada, e acredito que a liderança da UW acabará corrigindo isso, então não pretendo envolver um advogado
No momento, também não planejo continuar este projeto. Se tivessem proposto trabalhar juntos desde o começo, teria sido diferente, mas a forma como lidaram com isso até agora me faz querer simplesmente recuar
Pedir orientação a um advogado não significa que você precise imediatamente tomar medidas legais contra a universidade. Uma consulta não é uma escalada, e a universidade nem precisa saber que ela aconteceu. Um advogado pode dizer se uma medida legal é necessária ou se há alternativas mais amigáveis possíveis antes disso
A única forma de garantir vaga em algumas disciplinas obrigatórias era encontrar um veterano com prioridade de matrícula e horário livre para pegar a vaga por você. Se você estivesse em uma fraternity, ótimo; se fosse um aluno introvertido morando fora do campus, não havia saída
A UW com certeza sabe muito bem desse problema, então é horrível que a situação ainda seja tão ruim a ponto de tentarem até desligar alguém só por ter feito uma demonstração da ideia
Como os documentos reais da UW não foram compartilhados, é difícil julgar de fora
Acho que seria melhor remover o trecho no fim do post do LinkedIn: “vou me formar em alguns meses e quero passar para um projeto que não precise de autorização do UW Registrar. Se alguém conhecer quem esteja procurando um engenheiro de software full-time com talento para chamar a atenção da alta liderança, me indique. Disponível full-time a partir de junho”. Isso pode parecer exagero para ganhar atenção
No perfil do LinkedIn consta que ele se formou no ensino médio em meados de 2023 e começou na UW entre meados e o fim de 2023; também fico curioso sobre como ele poderia se formar em alguns meses. Quer dizer que vai terminar em 2 anos, e não nos 4 anos normais?
A universidade tem um grande incentivo para fazer os alunos se formarem e, se você não foi oficialmente desligado, é bem provável que exista uma forma de matriculá-lo manualmente nas disciplinas. O orientador deve ter opções e não estará necessariamente sujeito às mesmas restrições de quem opera o site de matrícula
Se isso ainda não funcionar, você deve subir para os níveis mais altos da administração da UW. Quanto mais alto você for, menor será o incentivo para ficarem do lado do departamento técnico. A menos, claro, que isso tenha começado por lá e não no departamento técnico
Por outro lado, se você puder colocar no currículo um trabalho feito com a universidade, talvez não seja uma perda total. Você deve considerar um advogado, mas, realisticamente, talvez seja melhor conseguir o que puder e se formar
Frequentei a UW há 10 anos e, mesmo naquela época, era praticamente senso comum que não se devia mexer com software e com o sistema de matrícula
A competição para se inscrever nas disciplinas era muito acirrada, e a universidade era rígida para impedir que alguém tivesse vantagem só por saber programar. Havia muitos rumores de gente que foi desligada por tentar pegar uma vaga com script assim que a turma desejada abria
Pelo que lembro, os alunos também eram proibidos — ou pelo menos desencorajados — de “negociar” matrículas. A universidade não queria que mais pessoas segurassem disciplinas valiosas como se fossem mercadorias para depois trocar
Então, pela referência da minha época, quase todo aluno de CS teria dito que esse site era uma ideia terrível que traria problemas
Se os horários de matrícula forem distribuídos ao longo de vários dias e um novo grupo for liberado a cada 20 minutos mais ou menos, você passa a competir só com uma parte dos alunos, não com todos, então o problema dos scripts é resolvido em grande parte. Quando a turma lotar, em vez de permitir matrícula imediata assim que surgir uma vaga, basta ter uma lista de espera, e a negociação também fica impossível. Se a troca fosse possível, a pessoa poderia simplesmente ter se matriculado naquela disciplina desde o começo
Entendo que o sistema de matrícula seja antigo e provavelmente esteja preso a softwares administrativos igualmente antigos, mas, se a universidade realmente se importasse, deveria haver uma solução
Receber pré-inscrições permitiria entender a demanda com antecedência, em vez de montar turmas adicionais de última hora depois. O mesmo vale para agenda de turnês de shows, voos, estoque de PS5 etc.
Não transferível significa que o sorteio continua acontecendo. Assim que alguém desiste da disciplina, é preciso sortear de novo e realocar a vaga, talvez até diariamente
Tecnicamente é uma solução que funciona, mas deixa de fora o aspecto cultural de que quem distribui recursos quer criar burburinho e demanda por eles, transformar tudo em um grande evento e depois esgotar em “tempo recorde”. Entendo que uma parte grande do marketing universitário seja tentar parecer o mais popular e superdemandado possível, mesmo que, na prática, eles não concordem com isso
Por fim, a parte mais interessante é a geração pública de aleatoriedade. Que tal colocar um enorme tambor contínuo de dados no meio da Red Square da UW? O tambor parece fácil, mas como criaríamos um registro físico capaz de registrar automaticamente os resultados dos dados?
E querem obrigá-lo a fazer trabalho forçado não remunerado em troca da promessa de restaurar o acesso?
Universidades são assim mesmo. Uma vez avisei minha alma mater que um link meio obscuro, mas claramente público, parecia acionar sem muito motivo o download de um ZIP com informações detalhadas de alunos, e eles imediatamente ameaçaram me denunciar ao FBI
Eu só ri da situação, mas decidi que nunca mais entraria em contato proativamente a menos que fosse absolutamente necessário
Então, quando encontrei a senha de administrador LDAP armazenada em um arquivo com leitura liberada para o mundo inteiro nos servidores de CS, mantive exatamente essa política
Pelo que se supõe, o pai comentou isto no LinkedIn:
“Agora li todos os e-mails, e é tão ruim quanto descrito. Achei que pudesse haver algum exagero, mas a ‘University Registrar and Chief Officer of Enrollment Information Services’ está claramente dizendo: ‘se você não construir isso conosco de graça, não vai se formar’. Ela inclusive especifica que a reunião precisa ser marcada bem antes de a matrícula do trimestre da primavera de 2025 abrir em 13 de fevereiro. Ou seja, caso contrário, não vão deixá-lo continuar estudando.”
https://www.linkedin.com/posts/edkaim_github-jdkaimhuskyswap...
Pessoalmente, eu já teria partido para a guerra total, publicado todas as provas e pressionado a universidade. Se ele já está praticamente desligado, não há muito a perder, então eu teria tornado isso público com tudo
É estranho dizer que está sofrendo retaliação e, ao mesmo tempo, não publicar nada, o que torna difícil levar isso totalmente a sério
Ele pode não ter percebido isso antes da reação da universidade, mas, depois de receber ameaça de desligamento, se ainda não consegue entender a posição da escola, então lhe falta bastante empatia cognitiva ou ele não está sendo honesto
Por isso, encaro as alegações e discussões posteriores com desconfiança
Isso, por si só, não é errado, mas mostra que o pai tem um investimento profundo nesse garoto e está disposto a agir ativamente para lhe dar uma largada privilegiada. Por isso, pessoalmente, não vejo isso como um testemunho adicional que sustente a história
Não reduz a possibilidade de o testemunho do pai ser verdadeiro, mas sua qualidade como evidência positiva não é alta
Podem votar contra, sem problema, mas seria bom explicar por que discordam. É meio desanimador ver todo comentário que não sai correndo com tochas na mão ser derrubado sem motivo. Dá para fazer melhor
Não entendo por que a administração da universidade reage de forma tão extrema a um pedido para integrar com o sistema de matrículas. Esse sistema parece, desde o início, ter sido feito para ser usado por aplicações
“O Student Web Service permite que aplicações acessem dados acadêmicos gerais no banco de dados Student, como dados de disciplinas, dados de matrículas, dados de turmas, dados pessoais e dados de períodos letivos.”
Não faz sentido. Será que falta alguma coisa nessa história? Eles oferecem esse web service como um serviço-isca para encontrar desenvolvedores de software ambiciosos e expulsá-los?
Ao mesmo tempo, a maior parte do software “enterprise” das universidades é um monte de lixo apodrecido
Fiquei muito surpreso com a tentativa de extorsão, mas a reação exagerada em larga escala, infelizmente, não me surpreende muito
Se um serviço que a universidade não controla tentar usá-lo, será difícil conseguir aprovação. Dados de estudantes são fortemente protegidos por lei, então vira um problema se eles passam a ser acessados por outra aplicação e se o operador consegue ver dados de outros alunos
O burocrata pode perder o emprego se algo der errado, mas ganha 0 de benefício se der certo, então não diz “sim”
Por exemplo, poderia haver um DDoS. Não foram poucas as vezes em que disparei um DDoS acidental contra um endpoint de API. Ou o serviço pode ficar popular demais e, na prática, virar um DDoS
Dentro dessa organização, a pessoa odeia o próprio cargo e tem pouquíssimo controle além do seu feudo e dos seus canais informais de troca de favores. Quem não sai desse tipo de papel provavelmente gosta de acumular ou exercer poder, ou teria dificuldades em funções fora desse tipo de organização
Agora imagine que alguém com quase nenhum poder tornou pública uma questão da sua área, um problema conhecido há muito tempo, mas que ninguém conseguiu forçar a resolver e que ficou abandonado por anos
Então é bem possível que essa pessoa reaja de forma exagerada para matar a história, só porque alguém ousou desafiá-la, mesmo que haja pouquíssima chance de punição direta. No meio acadêmico, punições diretas são muito raras
Não estou dizendo que essa história seja verdadeira. Faltam dados para julgar. Mas, depois de ver por muito tempo as partes tóxicas da academia e gente acelerando de 0 a 11, acho plausível
Tenho vários amigos na área administrativa de universidades, e há duas coisas que você precisa saber. Universidades têm uma quantidade enorme de funcionários administrativos, e eles são extremamente territoriais
Você balançou o barco de alguém, e essa pessoa ficou irritada. Como há muita gente na administração, eles têm bastante tempo, e agora estão tratando isso como assunto pessoal
Acho que dar ampla visibilidade a isso é o caminho certo. É preciso manter a calma, ser ponderado e se ater ao máximo aos fatos. Quando começar a se espalhar por redes sociais e pela imprensa, isso também vira problema para outros administradores que têm PR e imagem como seu território, e eles vão tratar como assunto deles e tentar arrumar a situação
Então faça barulho, mas mantenha a educação
Concordo totalmente com “faça barulho, mas com educação”. Na academia, problemas não são corrigidos até que não corrigi-los se torne mais incômodo do que corrigi-los. Quanto mais atenção isso receber, maior a chance de algum outro burocrata mesquinho acima do responsável perceber que o próprio dia ficou muito mais trabalhoso e abafar tudo de forma silenciosa e rápida
O Student Web Service em questão: https://ws.admin.washington.edu/student/swagger/index.html
A FERPA provavelmente foi um fator importante para a UW ter pedido inicialmente que o site fosse retirado do ar. Instituições agora estão totalmente focadas em se proteger
A parte da ameaça parece um pouco exagerada. Eu gostaria de ver a correspondência entre a UW e essa pessoa. A história inteira é perfeitamente possível, mas, como outros apontaram, também há várias inconsistências
Passei por algo parecido quando estava na universidade. A equipe central de serviços de TI da universidade queria lançar um substituto para o portal dos alunos cheio de recursos desnecessários, então fizemos um mockup de um site simples com apenas aquilo que realmente queríamos
Mais tarde, também reimplementamos o site da associação estudantil para oferecer informações mais úteis, como agenda de espaços para eventos e horários de funcionamento
Nas duas vezes, fomos investigados pela possibilidade de lidarmos com dados de estudantes de uma forma que a universidade não pudesse controlar, especialmente pela possibilidade de receber senhas em nome dos usuários
O primeiro era um mockup, e no segundo inicialmente conectamos a autenticação da universidade por meio de um servidor LDAP público, mas logo mudamos para autenticação própria. Ficou claro que, para a universidade, ter um campo de senha no nosso domínio era uma condição absolutamente inaceitável
Conseguimos transformar isso em uma discussão produtiva comunicando com cuidado o que fazíamos e o que não fazíamos, onde estavam os limites e como tratávamos os dados
A maioria dos funcionários da universidade envolvidos não tinha conhecimento técnico suficiente para entender coisas como o fato de ser possível conectar autenticação a um servidor LDAP sem segurança; eles só estavam interessados na política de saber se tínhamos permissão para fazer aquilo
Um modo de falha comum entre engenheiros de software é presumir que, se algo não está tecnicamente bloqueado, e poderia ser bloqueado mas não foi, então está permitido. Na prática, não é assim
O que não fica claro neste projeto é se a universidade se opõe fundamentalmente à própria ideia de um projeto estudantil oferecer o serviço, ou se alguém entrou em pânico com a possibilidade de um sistema não aprovado receber senhas de alunos. Se for o primeiro caso, é claramente absurdo, e a universidade deveria estar especialmente aberta a esse tipo de inovação por parte dos estudantes. Se for o segundo, é uma reação compreensível e bastante razoável, mas exige uma resposta cuidadosa para que o aluno consiga atravessar bem a situação
No último dia, a seguinte frase foi adicionada à seção “Tampering and Abuse” da página Policies & Procedures do UW Registrar:
“Além disso, criar um serviço que possibilite qualquer uma das ações acima é estritamente proibido e constitui violação desta política.”
É provável que as normas administrativas sejam mais importantes, e as disposições relacionadas são as seguintes:
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 depois: https://web.archive.org/web/20250109203004/https://registrar...
Interessante. Eu me formei em outra UW, a University of Warsaw, e a nossa universidade tem um recurso de troca de disciplinas embutido no USOS, o University Study Service System.
Como referência, o ensino nas universidades públicas da Polônia é totalmente financiado pelo governo e é gratuito para os estudantes.
1 - https://usosweb.mimuw.edu.pl/kontroler.php?_action=news%2Fde...
Ainda bem que a minha universidade polonesa não usa isso.
As matrículas abriam todas de uma vez em determinado momento, e era possível fazer login e preencher tudo a qualquer hora ao longo de alguns meses, até o prazo após o início das aulas. Alguns cursos tinham limite de vagas, e as disciplinas relacionadas também eram restritas aos alunos daquele curso, mas não havia situação em que faltassem vagas no nível da disciplina a ponto de você precisar correr para enviar sua escolha.