
Antes do Halloween, o desenvolvedor full-stack Wes Bose tuitou outros programadores para compartilhar suas histórias de terror sobre o webdev. Aqui estão alguns deles ...
@DimitroffPeter :
Meu primeiro trabalho e minha primeira contribuição para a produção. Eu preciso consertar um utilitário cliente-servidor. Sua função é simples: temos um dispositivo caseiro de um roteador e um PC. O roteador tem uma CLI e deve mostrar informações sobre o estado do PC. Coisas como systemctl, top, free. O comando é transmitido como texto, executado e o resultado é recebido como texto. No entanto, isso foi feito da maneira mais horrível possível ...
Os comandos CLI são especificados em XML. Eles invocam um script Bash com argumentos específicos. O script cria um PIPE no sistema de arquivos e passa comandos para ele. O servidor é escrito em C (é exatamente assim que o servidor faz solicitações ao cliente, não o contrário). Todos os nomes de variáveis no servidor C consistem em uma letra (x, a, b, q) ou têm uma forma geral (mem, dados). Ele também tem um monte de pthreads gravando em pipes e pesquisando-os em um sistema de arquivos com controle de thread completamente ZERO. Sem mutexes, nada disso.
Portanto, o encadeamento do servidor C pesquisa o primeiro canal e executa o script que abre uma sessão SSH com o PC e executa o comando necessário. O resultado é colocado em mais um canal no sistema de arquivos. O servidor C tem outro encadeamento que controla esse canal. E mil problemas relacionados. Por exemplo, ele não pode descobrir de forma alguma se o resultado está completo e não espera que mais dados venham pelo tubo. Assim que ele lê algo, ele imediatamente o exibe. Por causa disso, muitos resultados parciais foram obtidos, e as partes restantes deles foram coladas ao resultado do próximo comando ...
Mas isso não é tudo. O código C estava espalhado
fprintf(s)
. Se você estiver familiarizado com a família de funções printf
, perceberá que isso é simplesmente solicitar um estouro de buffer. E eles nos visitaram. Muitas vezes.
Vamos dar uma outra olhada na arquitetura / pilha desta magnífica invenção:
> CLI
> script sh
> PIPE
> pipe chamando pthread
> script chamando pthread
> SSH script
> SSH session para conectar ao PC
> PIPE 2
> outro pipe lendo pthread
I substituiu tudo após a CLI com 30 linhas de Bash usando ncat.

@MichaelDClaar
O projeto anterior enviou todos os relatórios de bug como e-mails para os desenvolvedores. Um pequeno erro nos enviou tantos e-mails que nosso provedor de serviço de e-mail acertou nossa conta. Por meio dia, ninguém poderia enviar e-mails aos clientes. Nós mesmos enviamos spam cerca de 5 mil cartas por minuto.
@dev__adi :
Eu criei um modo escuro para nosso site, mas não adicionei valores padrão para as variáveis CSS. Deveríamos adicionar o arquivo de tema CSS em um só lugar e tudo deve ficar bem. Descobriu-se que em outro projeto não incluímos o arquivo de variáveis do tema e tudo ficou branco. Felizmente, o problema foi detectado na preparação para a produção.
@Abdullah_Mzaien :
No meu projeto de graduação, fiquei muito incomodado com seu tamanho, então reorganizei os arquivos.
Criou um dos comandos git mais estranhos que recommitirá todos os commits desde o início.
Não há nada de errado com isso, mas todos esses commits assustaram minha equipe.
@MathiasaurusRex :
Cerca de 10 anos atrás, cometi um erro de digitação na variável de tag âncora de uma empresa de comércio eletrônico do Top 5. Digamos que seu endereço seja ABC ponto com e todas as tags âncora apontem para AC ponto com. O bug se espalhou para a parte diária / semanal do site. Demorou algumas horas para consertar.
Muito caro saiu "oops".
@FcoGT : FcoGT
Os jornais deixam notícias importantes que podem vir a ser publicadas assim que o evento acontecer. Quando Gabriel García Márquez estava muito doente, já deixavam a notícia de sua morte na página inicial. Um amigo meu errou na condicional e foi postado!
@ryanfiller_ : Uma
vez, executei
npm publish
da pasta errada e enviei o repositório de trabalho privado para o npm como um pacote público. Felizmente, existe uma equipe npm unpublish
, se você perceber isso rapidamente (dentro de 72 horas). Caso contrário, ficará lá para sempre ...
@perlilja :
Depois de reinstalar o sistema no meu computador. Achei que tinha criado um backup do meu código, mas descobri que não era. Um mês de trabalho foi perdido. Também há um lado bom nisso: acho que o novo código é melhor.
@petetasker :
Eu fiz uma competição para um programa de rádio. Criou um formulário pelo qual os usuários poderiam enviar respostas a perguntas semanais. Houve um apóstrofo na resposta a uma das perguntas semanais. Nenhuma postagem foi criada esta semana ...
@davigiroux_ :
História não minha, mas também assustadora: o cara que trabalhava comigo atualizou o banco de dados sem um "onde", por isso todos os usuários que se inscreveram nos cursos foram escolhidos pelo mesmo curso. Passei a manhã inteira CHAMANDO a todos para colocá-los no curso que queriam, e aquele cara disse que estava doente.
@jonicious :
Nas primeiras semanas do meu primeiro trabalho como desenvolvedor, outro novato e eu removemos todas as chaves públicas SSH da máquina que estava executando um dos serviços mais críticos.
Também embaralhei as bandeiras
true
e false
desativei a campanha publicitária com desconto de 50% para todos os clientes.
@PatZawa :
Eu estava escrevendo uma função regex para validar o número do seguro social antes de enviá-lo para o banco de dados. No entanto, antes de fazer a verificação, esqueci de descriptografar a reversão, razão pela qual quase 10 mil números de pacientes foram excluídos do banco de dados em produção. Passei os próximos dois dias se recuperando e se reinserindo.
@nishant_ch :
No início da minha carreira, uma vez eu acidentalmente conectei via Filezilla ao servidor errado e carreguei o site de outra pessoa em um domínio de trabalho, e então fui descansar. Depois de algumas horas, vi que as mudanças que fiz não se refletiram no site e percebi o que havia feito.
@pjately :
Desliguei acidentalmente o servidor no primeiro dia de trabalho no escritório. Eu nem percebi até que liguei o switch novamente e o servidor fez um som de boot, enquanto o diretor técnico se virou e perguntou: "Aquilo era um servidor?" O segundo dia de trabalho foi bem melhor ... Não poderia ter sido pior.
@rrrrrrichard :
Escrevi um site por dinheiro no início dos anos 2000. Depurei a página de contato, pensando que havia desabilitado a entrega em si. Naquele dia, o cliente recebeu vários e-mails de "Adolf G.", "Joseph S." etc. Algumas horas depois, ele educadamente me pediu para parar. Ops.
A princípio, do lado do cliente, eles pensaram que estavam sendo atacados por algum psicopata raivoso, pois o corpo das cartas era vulgar. Então, eles perceberam que alguém havia acessado o site deles e me contatado. Pedimos desculpas e lições aprendidas.
@spencer_carli :
Novo banco de dados para mim. Eu estava trabalhando na solução de problemas de notificações push e, no processo, pensei que havia uma diferença entre um sistema local e um sistema de produção. Enviei uma dúzia de notificações push de teste com um grau cada vez maior de irritação ...
Acontece que não só eu, mas toda a equipe recebeu mensagens. Disseram-me que as mensagens de teste foram recebidas por todos na equipe. Panqueca! Pois bem ... A empresa é técnica, todos entenderam tudo.
Mas então tweets e e-mails de investidores começaram a chegar - as mensagens eram transmitidas não apenas dentro da equipe, mas também para toda a base de usuários.
Opa ...
Então, pela última vez na minha vida, escrevi mensagens de teste sujas / humorísticas / desdenhosas de notificações push.
@jeroenheijmans :
" Deixe as caixas de seleção arredondadas, mas você pode escolher várias opções."
@endlife :
Em 2005, eu estava trabalhando em um aplicativo da web para uma rede de locadoras de DVD - estava mudando dos aplicativos cliente / servidor necessários para conexão discada para um único aplicativo online. No dia do lançamento, descobri que o banco de dados central sincronizado dos bancos de dados do cliente foi completamente destruído. Ninguém testou a integridade dos dados.
Funcionários de filiais me ligaram: "Vemos gente de outras cidades em nosso sistema, mas a nossa não está."
Passei um dia me conectando via VNC a computadores locais, criando despejos de banco de dados usando administradores MySQL locais e construindo manualmente um banco de dados central. E tudo isso após os dolorosos dois dias de colocação do sistema em funcionamento.
Naqueles três dias, escutei Let's Dance, de David Bowie, setenta vezes.
@sillywampa :
Certa vez, atualizei uma senha de usuário em um banco de dados MySQL de produção, mas esqueci de adicionar uma construção
WHERE
, então todas as senhas de usuário foram alteradas. Após 15 minutos, começamos a receber chamadas e e-mails de clientes corporativos que não conseguiam fazer login.
@sygint :
Reescreveu o formulário para limpar a IU, o que evitou a adição de novos cartões de crédito no site móvel da empresa Fortune 500 por um mês. Provavelmente ninguém os adicionou do aplicativo porque não recebemos reclamações. O problema foi percebido por um desenvolvedor júnior, mesmo que o departamento de QA não soubesse disso.
Outra vez, o cliente me desobedeceu e enviou um modelo corrompido para o servidor em execução. Eles perderam 70 mil dólares em uma hora. Desta vez o erro não foi nem perto do meu, lol.
@marcelcutts :
Nos dias quentes de uma startup, criei um jogo chamado Zombies, Run !, que era bastante popular e tinha vários milhões de jogadores pagantes. Uma vez, tendo acumulado um débito técnico incomensurável, copiei e colei a versão errada do arquivo de configuração do Django e perdi o segredo do banco de dados.
Claro, fiz isso em produção e não tinha backups. Percebendo o que havia acontecido, contei ao CEO e acabei de sair do escritório. Não achei que poderíamos salvar a empresa enviando uma mensagem de texto para cada usuário “Olá, pague de novo”, e me cansei do debate sobre dívidas de tecnologia. Acontece que eu estava certo.
Na manhã seguinte, fiquei deitada na cama pensando em maneiras de reduzir a entropia do segredo e descobri que, como cometi outro erro e inseri o segredo em meu terminal, ele estava em minha história zsh o tempo todo. Duas negativas fazem uma afirmativa.
Comentário sobre o tweet: Uma vez joguei este jogo, ele tinha muitos bugs estranhos.
@marcelcutts : Não estou surpreso, sou um péssimo desenvolvedor.
@JosDeBerdt :
Eu tinha um sistema multi-site onde o conteúdo podia ser transferido de um site para outro. Durante o teste, não percebi que segui o link para a produção e lancei o "conteúdo de atualização" sem especificar o id da página ... Todas as páginas em cada site consistiam em uma única palavra "teste". Isso foi antes de os sistemas de controle de versão existirem e as mudanças serem instantaneamente transferidas via FTP para o servidor de produção.
@chrisalesant :
Em meu primeiro trabalho de front-end, fui convidado a criar uma longa lista de e-mails, então criei tudo com divs, animações e flexbox. Após cerca de duas semanas, o departamento de marketing executou um controle de qualidade e disse que faria tudo do zero, usando tabelas e estilos embutidos em três dias.
Cereja no bolo: o design deveria ter um layout de pixel perfeito para o cliente Outlook.

@johnhutch :
Eu trabalhei em uma plataforma de comércio eletrônico dedicada para uma empresa Fortune 500. Centenas de desenvolvedores estão trabalhando em dezenas de cópias internacionais de várias marcas, o código empurra sem parar o dia todo.
Então imagine meu horror ...
quando recebi uma mensagem que quebrei todo o meu branch / ambiente git. Acontece que ao fazer merge eu baguncei o branch em que estou (não use '.' Pessoal. Sempre inclua nomes de branch explicitamente).
@MongooseDoom :
Eu uso um tablet Wacom em vez de um mouse, porque é mais confortável para mim. Um dia, sem querer arrastei uma pasta para outra no servidor de produção. Não havia registros do que eu fiz, então outra pessoa levou muito tempo para descobrir. E eu fiz isso duas vezes.
Em outra noite chuvosa de sexta-feira, apaguei acidentalmente uma tabela SQL.
Claro, então descobri que nossa estratégia de backup estava quebrada.
Felizmente, isso foi antes da era do carregamento lento e acabei com uma guia aberta com 400 valores, que inseri manualmente.
Normalmente sou um agnóstico, mas me lembro de rezar naquele dia para que o Firefox não travasse até que eu fizesse capturas de tela de todos os valores desta página!
Publicidade
VDSina oferece servidores seguros em Linux ou Windows - escolha um dos SO pré-instalados ou instale a partir de sua imagem.
