Histoires d'horreur d'Halloween de développeurs Web





Avant Halloween, le développeur full-stack Wes Bose a tweeté d' autres programmeurs pour partager leurs histoires d'horreur sur webdev. En voici quelques-uns ...



@DimitroffPeter :



Mon premier travail et ma première contribution à la production. J'ai besoin de réparer un utilitaire client-serveur. Sa fonction est simple: nous avons un appareil fait maison à partir d'un routeur et d'un PC. Le routeur dispose d'une CLI et doit afficher des informations sur l'état du PC. Des choses comme systemctl, top, gratuit. La commande est transmise sous forme de texte, exécutée et le résultat est reçu sous forme de texte. Cependant, cela a été fait de la manière la plus horrible possible ...



Les commandes CLI sont spécifiées en XML. Ils invoquent un script Bash avec des arguments spécifiques. Le script crée un PIPE sur le système de fichiers et lui transmet des commandes. Le serveur est écrit en C (c'est exactement comme ça - le serveur fait des requêtes au client, pas l'inverse). Tous les noms de variables sur le serveur C se composent d'une lettre (x, a, b, q) ou ont une forme générale (mem, data). Il a également un tas de tuyaux d'écriture pthreads et les interroge sur le système de fichiers avec un contrôle de thread complètement ZERO. Pas de mutex, rien de tout cela.



Ainsi, le thread C-server interroge le premier tube et exécute le script qui ouvre une session SSH avec le PC et exécute la commande requise. Le résultat est placé dans un autre tube du système de fichiers. Le serveur C a un autre thread qui interroge ce canal. Et mille problèmes connexes. Par exemple, il ne peut en aucun cas savoir si le résultat est complet et n'attend pas que d'autres données passent par le canal. Dès qu'il lit quelque chose, il l'affiche immédiatement. Pour cette raison, de nombreux résultats partiels ont été obtenus, et les parties restantes ont été collées au résultat de la commande suivante ...



Mais ce n'est pas tout. Le code C était éparpillé fprintf(s). Si vous connaissez la famille des fonctions printf, vous vous rendrez compte qu'il s'agit simplement de demander un débordement de tampon. Et ils nous ont rendu visite. À plusieurs reprises.



Jetons un autre regard sur l'architecture / pile de cette magnifique invention:



> CLI

> script sh

> PIPE

> pipe appelant pthread

> script appelant pthread

> Script SSH

> Session SSH pour se connecter au PC

> PIPE 2

> autre pipe lisant pthread



I tout remplacé après la CLI par 30 lignes de Bash utilisant ncat.







@MichaelDClaar



Le projet précédent a envoyé tous les rapports de bogue par e- mail aux développeurs. Une petite erreur nous a envoyé tellement de courriels que notre fournisseur de services de messagerie a cloué notre compte. Pendant une demi-journée, personne ne pouvait envoyer de courrier électronique aux clients. Nous nous spammons environ 5 000 lettres par minute.



@dev__adi :



J'ai créé un mode sombre pour notre site, mais je n'ai pas ajouté de valeurs par défaut pour les variables CSS. Nous étions censés ajouter le fichier de thème CSS en un seul endroit et tout devrait bien se passer. Il s'est avéré que dans un autre projet, nous n'avons pas inclus le fichier de variables de thème et tout est devenu blanc. Heureusement, le problème a été résolu en préparation de la production.



@Abdullah_Mzaien :



Dans mon projet de fin d'études, j'étais très ennuyé par sa taille, alors j'ai mélangé les fichiers.



Créé l'une des commandes git les plus étranges, qui réengagera tous les commits depuis le début.



Il n'y a rien de mal à cela, mais tous ces engagements ont fait peur à mon équipe.



@MathiasaurusRex : Il y a



environ 10 ans, j'ai fait une faute de frappe dans la variable de balise d'ancrage dans une entreprise de commerce électronique du Top 5. Disons que son adresse est ABC dot com, et toutes les balises d'ancrage pointaient vers AC dot com. Le bogue s'est propagé à la section des réductions quotidiennes / hebdomadaires du site. Il a fallu quelques heures pour le réparer.



Assez cher est sorti "oups".



@FcoGT : FcoGT



Les journaux laissent des informations importantes qui pourraient être publiées dès que l'événement se produit. Lorsque Gabriel García Márquez était très malade, ils ont déjà laissé la nouvelle de sa mort sur la page d'accueil. Un de mes amis a fait une erreur dans le conditionnel et a été posté!



@ryanfiller_ : Une



fois, j'ai exécuté à npm publishpartir du mauvais dossier et j'ai poussé le référentiel de travail privé dans npm en tant que package public. Heureusement, il y a une équipe npm unpublish, si vous la repérez assez rapidement (dans les 72 heures). Sinon, il y restera pour toujours ...



@perlilja :



Une fois que j'ai réinstallé le système sur mon ordinateur. Je pensais avoir créé une sauvegarde de mon code, mais il s'est avéré que ce n'était pas le cas. Un mois de travail a été perdu. Il y a aussi un bon côté à cela: je pense que le nouveau code est meilleur.



@petetasker :



J'ai organisé un concours pour une émission de radio. Création d'un formulaire permettant aux utilisateurs de soumettre des réponses aux questions hebdomadaires. Il y avait une apostrophe dans la réponse à l'une des questions hebdomadaires. Aucun message n'a été créé cette semaine ...



@davigiroux_ :



Pas mon histoire, mais aussi une histoire effrayante: le mec qui a travaillé avec moi a fait une mise à jour de la base de données sans "où", c'est pourquoi chaque utilisateur qui s'est abonné aux cours a été choisi le même cours. J'ai passé une matinée entière à APPELER tout le monde pour qu'ils suivent le cours qu'ils voulaient, et ce mec a dit qu'il était malade.



@jonicious :



Au cours des premières semaines de mon tout premier travail en tant que développeur, un autre débutant et moi avons supprimé toutes les clés publiques SSH de la machine exécutant l'un des services les plus critiques.



J'ai également mélangé les drapeaux trueet falsedésactivé la campagne publicitaire avec une réduction de 50% pour tous les clients.



@PatZawa :



J'écrivais une fonction regex pour valider le numéro de sécurité sociale avant de le hacher dans la base de données. Cependant, avant d'effectuer la vérification, j'ai oublié de décoder à l'envers, c'est pourquoi près de 10 000 numéros de patients ont été supprimés de la base de données en production. J'ai passé les deux jours suivants à récupérer et à réinsérer.



@nishant_ch :



Au tout début de ma carrière, une fois, je me suis accidentellement connecté via Filezilla au mauvais serveur et j'ai téléchargé le site Web de quelqu'un d'autre sur un domaine de travail, puis je me suis reposé . Au bout de quelques heures, j'ai vu que les modifications que j'avais apportées n'étaient pas reflétées sur le site, et j'ai réalisé ce que j'avais fait.



@pjately :



Éteint accidentellement le serveur le premier jour de travail au bureau. Je ne m'en suis même pas rendu compte jusqu'à ce que je rallume le commutateur et que le serveur émette un son de démarrage, tandis que le directeur technique se retourne et demande: "C'était un serveur?" La deuxième journée de travail était bien meilleure ... Cela n'aurait pas pu être pire.



@rrrrrrichard : J'ai



écrit un site Web pour de l'argent au début des années 2000. J'ai débogué la page de contact, pensant que j'avais désactivé la livraison elle-même. Ce jour-là, le client a reçu un tas d'e-mails de "Adolf G.", "Joseph S." etc. Quelques heures plus tard, il m'a poliment demandé d'arrêter. Oups.



Au début, du côté du client, ils pensaient être attaqués par un psychopathe en colère, parce que le corps des lettres était de vulgarité. Puis il s'est rendu compte que quelqu'un avait accédé à leur site Web et ils m'ont contacté. Des excuses ont été présentées et des leçons ont été tirées.



@spencer_carli :



Nouvelle base de données pour moi. Je travaillais sur le dépannage des notifications push et dans le processus, je pensais qu'il y avait une différence entre un système local et un système de production. J'ai envoyé une douzaine de notifications push de test avec un degré d'irritation toujours croissant ...



Il s'est avéré que non seulement moi, mais toute l'équipe recevait des messages. On m'a dit que tous les membres de l'équipe recevaient des messages de test. Crêpe! Bon, d'accord ... L'entreprise est technique, tout le monde a tout compris.



Mais ensuite, des tweets et des e-mails d'investisseurs ont commencé à arriver - des messages ont été transmis non seulement au sein de l'équipe, mais également à l'ensemble de la base d'utilisateurs.



Oups ...



Puis, pour la dernière fois de ma vie, j'ai écrit des messages de test sales / humoristiques / dédaigneux de notifications push.



@jeroenheijmans :



"Veuillez faire arrondir les cases à cocher, mais vous pouvez choisir plusieurs options."



@endlife :



En 2005, je travaillais sur une application Web pour une chaîne de magasins de location de DVD - elle passait des applications client / serveur nécessaires à l'accès commuté à une seule application en ligne. Le jour du lancement, j'ai découvert que la base de données centrale synchronisée à partir des bases de données clientes était complètement détruite. Personne n'a testé l'intégrité des données.



Les employés des succursales m'ont appelé: "Nous voyons des gens d'autres villes dans notre système, mais les nôtres n'y sont pas."



J'ai passé une journée à me connecter via VNC aux ordinateurs locaux, à créer des vidages de base de données à l'aide d'administrateurs MySQL locaux et à créer manuellement une base de données centrale. Et tout cela après une mise en service pénible de deux jours du système.



Durant ces trois jours, j'ai écouté Soixante-dix fois Let's Dance de David Bowie.



@sillywampa : Une



fois, j'ai mis à jour un mot de passe utilisateur dans une base de données MySQL de production, mais j'ai oublié d'ajouter une construction WHERE, donc tous les mots de passe utilisateur ont changé. Après 15 minutes, nous avons commencé à recevoir des appels et des e-mails de clients d'entreprise qui ne pouvaient pas se connecter.



@sygint :



Réécriture du formulaire pour nettoyer l'interface utilisateur, ce qui a empêché l'ajout de nouvelles cartes de crédit sur le site mobile de la société Fortune 500 pendant un mois. Probablement personne ne les a ajoutées depuis l'application, car nous n'avons reçu aucune plainte. Le problème a été remarqué par un développeur junior, même le département QA ne le savait pas.



Une autre fois, le client m'a désobéi et a poussé un modèle cassé sur le serveur en cours d'exécution. Ils ont perdu 70 000 dollars en une heure. Cette fois, l'erreur n'était même pas proche de la mienne, lol.



@marcelcutts :



Lors des journées chaudes dans une startup, j'ai créé un jeu appelé Zombies, Run! qui était très populaire et comptait plusieurs millions de joueurs payants. Une fois, après avoir accumulé une dette technique incommensurable, j'ai copié et collé la mauvaise version du fichier de configuration Django et j'ai perdu le secret de la base de données.



Bien sûr, je l'ai fait en production et je n'avais aucune sauvegarde. Réalisant ce qui s'était passé, j'en ai parlé au PDG et j'ai juste quitté le bureau. Je ne pensais pas que nous pourrions sauver l'entreprise en envoyant un texto à chaque utilisateur «bonjour, payez encore», et je me suis lassé du débat sur la dette technologique. Il s'est avéré que j'avais raison.



Le lendemain matin, je me suis allongé sur mon lit à réfléchir aux moyens de réduire l'entropie du secret, et j'ai découvert que depuis que j'avais commis une autre erreur et inséré le secret dans mon terminal, il était tout le temps dans mon histoire zsh. Deux négatifs font un affirmatif.



Commentaire sur le tweet: J'ai déjà joué à ce jeu, il y avait beaucoup de bugs étranges.



@marcelcutts : Pas surpris, je suis un développeur terrible.



@JosDeBerdt :



J'avais un système multi-sites dans lequel le contenu pouvait être transféré d'un site à un autre. Lors des tests, je n'ai pas remarqué que j'avais suivi le lien vers la production et lancé "update content" sans préciser le page-id ... Toutes les pages de chaque site se composaient alors d'un seul mot "testing". C'était dans les jours avant que les systèmes de contrôle de version existent et les changements ont été instantanément transférés via FTP au serveur de production.



@chrisalesant :



Dans mon premier travail front-end, on m'a demandé de concevoir une longue liste d'emails, j'ai donc tout créé avec des divs, des animations et une flexbox. Après environ deux semaines, le service marketing a effectué un contrôle de qualité et a déclaré qu'il ferait tout à partir de zéro en utilisant des tableaux et des styles en ligne en trois jours.



Cerise sur le gâteau: le design était censé avoir une mise en page parfaite au pixel près pour le client Outlook.





@johnhutch :



J'ai travaillé sur une plateforme e-commerce dédiée pour une entreprise du Fortune 500. Des centaines de développeurs travaillent sur des dizaines de copies internationales de plusieurs marques, le code pousse sans arrêt toute la journée.



Alors imaginez mon horreur ...



quand j'ai reçu un message disant que j'ai cassé toute ma branche / environnement git. Il s'avère que lors de la fusion, j'ai gâché la branche sur laquelle je suis (ne pas utiliser "." Guys. Incluez toujours les noms de branche explicitement).



@MongooseDoom :



J'utilise une tablette Wacom au lieu d'une souris, car c'est plus confortable pour moi. Un jour, j'ai involontairement fait glisser un dossier vers un autre dossier sur le serveur de production. Il n'y avait aucune trace de ce que j'ai fait, il a donc fallu beaucoup de temps à une autre personne pour le découvrir. Et je l'ai fait deux fois.



Un autre vendredi soir pluvieux, j'ai accidentellement supprimé une table SQL.



Bien sûr, j'ai découvert que notre stratégie de sauvegarde était rompue.



Heureusement, c'était avant l'ère du chargement paresseux, et je me suis retrouvé avec un onglet ouvert avec 400 valeurs, que j'ai ensuite insérées manuellement.



Je suis généralement un agnostique, mais je me souviens avoir prié ce jour-là pour que Firefox ne plante pas tant que je n'aurais pas pris des captures d'écran de toutes les valeurs de cette page!






La publicité



VDSina propose des serveurs sécurisés sous Linux ou Windows - choisissez l'un des systèmes d'exploitation préinstallés ou installez à partir de votre propre image.






All Articles