Curieuses perversions du monde informatique - 3

Le Daily WTF recueille depuis 14 ans des histoires drôles, folles et / ou tristes du monde informatique. J'ai traduit plusieurs histoires qui m'ont paru intéressantes. Tous les noms et noms d'entreprises ont été modifiés. Les numéros précédents se trouvent sous l'étiquette « perversions curieuses ».

image

La première histoire: "Pas seulement génial"


[ Original ]

Nous avions tous des collègues qui n'étaient pas en mesure de faire notre travail. Jarad a également eu de la chance.

Il a travaillé chez Initech dans un petit groupe de développeurs qui ont créé un client Windows pour les clients qui l'ont utilisé pour interagir avec leur serveur. La société a décidé de porter l'application de .NET vers Java. Le guide le plus important a recommandé le développeur Java leader très respecté Kisha d'Intelligenuity en tant que chef de projet. "Ne vous inquiétez pas", a déclaré la direction. "Intelligenuity n'embauche que les programmeurs les plus brillants."

Lors de la première réunion du projet, le gestionnaire a annoncé qu'il utiliserait Eclipse pour le projet Java. Kisha a déclaré: «Je n'ai pas Eclipse. Quelqu'un peut-il envoyer? " Jarad lui a envoyé un lien. Lors de la prochaine réunion, il lui a demandé si elle avait installé Eclipse. Elle a répondu qu'elle ne pouvait pas télécharger le support, elle a donc attendu la prochaine réunion pour demander de l'aide. La gérante a couru vers sa voiture et a résolu le problème en cliquant sur le lien de téléchargement.

Passons à la prochaine réunion: Kisha a dit qu'elle ne pouvait pas continuer à travailler, car "Eclipse a des problèmes avec le JDK, quelqu'un peut-il me l'envoyer?" Jarad lui a renvoyé le lien. Quelques jours plus tard, lors de la prochaine réunion, elle a déclaré: "Eclipse ne fonctionne pas car elle a besoin d'un fichier jar, quelqu'un peut-il l'envoyer?" Et après cela, "Quelqu'un peut-il m'envoyer du code pour créer des classes parce qu'Eclipse rapporte constamment une NullPointerException ?"

Enfin, le manager a modifié la structure des réunions. Ils ont poursuivi leurs réunions clients Windows régulières, mais ont ajouté une réunion dédiée distincte pour Kishi uniquement. Au fil du temps, il s'est avéré qu'elle et son mari étaient amis d'un dirigeant de très haut rang et de sa femme. Une réunion distincte a eu lieu pour «assurer le succès de ses travaux»; cela signifiait que le chef d'équipe a écrit du code pour elle.

Kisha a dit une fois au gestionnaire que le client avait un problème critique avec le portail Web et qu'une réunion avec le client devrait avoir lieu dès que possible pour résoudre son problème.

Le gestionnaire a organisé une réunion avec le client, lui-même, Kishi, Jarad et le chef de projet, pour résoudre le problème une fois pour toutes. Le jour de la réunion, le client a été surpris par le nombre de support technique et de managers. Il a expliqué: «Euh ... le« problème avec le portail »était que j'ai demandé à Kisha l'URL du portail Web. Il suffisait de lui envoyer une lettre. "

Parfois, la justice se produit dans ce monde, et Kisha a donc perdu son emploi.

La deuxième histoire: "Démangeaisons de trois mois"


[ Original ]


En mars 2016, Ian avait besoin d'un emploi. Presque immédiatement après le début de la recherche, il a eu de la chance: il a trouvé une petite startup qui avait besoin d'un travailleur connaissant l'architecture de Python et les compétences en conception. «Minuscule» car outre Ian, l'entreprise ne comptait que trois développeurs sous la direction de son fondateur Jack.

L'interview avec Ian a été réalisée par Jack lui-même. Après un test technique, il en apprend plus sur le projet de l'entreprise: un prototype presque complet de l'application iOS. L'utilisateur synchronise son téléphone avec un moniteur de fréquence cardiaque au poignet, après quoi le téléphone doit jouer de la musique correspondant aux activités actuelles de l'utilisateur. L'objectif principal de l'application était d'aider à atteindre le pouls nécessaire pendant l'entraînement. L'application a également utilisé les accéléromètres du téléphone pour suivre le rythme de l'utilisateur pendant la conduite. Selon Jack, ces données auraient dû être utiles pour les études sur la maladie de Parkinson. Il a soutenu sa déclaration avec des articles scientifiques des meilleures universités. Jack voulait que Ian développe un nouveau système backend pour le stockage des données et le traitement des requêtes.

Jack était amical et charismatique, et son enthousiasme en a infecté d'autres. Ian a immédiatement accepté l'offre et s'est mis au travail le lendemain. Son bureau était à l'étroit, mais lui appartenait toujours seul. Sa tâche consistait à créer le backend nécessaire à l'application.

Deux semaines se sont écoulées. Un lundi matin tôt et endormi, Jack a invité son équipe de développement dans la salle de réunion. L'éclat de sa présentation Powerpoint a brûlé la rétine.

«J'ai bien réfléchi. Nous sommes une toute nouvelle startup. Personne ne nous connaît, non? Nous devons faire quelque chose pour accroître la notoriété de la marque. J'ai donc décidé: nous allons nous débarrasser de la partie musique de l'application et nous concentrer uniquement sur la collecte de données. "

Instinctivement, Ian a presque dit "Quoi?!" Ils devront jeter les résultats de deux semaines de travail. De plus, la partie collecte de données était auparavant complètement facultative.

Jack est passé à une autre diapositive, qui montrait les mesures qu'il voulait maintenant suivre pour chaque utilisateur. Il y en avait tellement que j'ai dû utiliser la plus petite police. Pour lire, Ian a dû plisser les yeux.

"Si vous assemblez une botte de foin assez grande, une aiguille y apparaîtra certainement!", A déclaré Jack. «Nous rendrons l'application gratuite et travailler avec elle impliquera une inscription obligatoire. Le revenu réel pour nous sera les données collectées. »

Le capital investisseur a été dépensé pour un bureau luxueux dans le centre d'affaires de la ville; les développeurs d'applications gratuites ne méritent que le meilleur. Jack a embauché un deuxième développeur iOS, data science et stagiaire.

"Mais ne donnez pas de travail important au stagiaire", a déclaré Jack aux employés à temps plein.

Ayant maîtrisé la nouvelle situation, Ian a commencé à développer l'architecture d'un nouveau système qui enregistrera toutes les données nécessaires.

Trois mois plus tard, Jack a tout jeté à la poubelle. «Aucune application! Nous avons besoin d'une nouvelle direction de développement! »

La nouvelle vision de Jack était de créer un site Web sur lequel les gens devraient indiquer les compositions qu'ils écoutent dans un rêve, pendant la formation et d'autres activités.

"Les gens aiment parler d'eux-mêmes", a déclaré Jack. "Nous ne devons pas les payer pour le fait qu'ils nous donnent leurs données!"

Un développeur front-end a été embauché pour créer le site Web. Peu de temps après le lancement du site, Jack s'est vanté auprès des investisseurs qu'il avait atteint un million de visiteurs uniques. En fait, il n'y avait qu'environ 300 enregistrements, dont la moitié ont été créés par une seule personne.

Vous pouvez déjà deviner ce qui s'est passé trois mois plus tard. Jack a abandonné le site Web qui se développait lentement au profit du robot Slack, qui était censé répondre à la commande "Play ${song} by ${artist}" , trouvant la piste dans Spotify et s'y liant. Un widget Spotify jouerait un aperçu de 30 secondes ou, si l'utilisateur a un compte Spotify Premium, la chanson entière.

«C'est tout? Comment allons-nous gagner de l'argent? », - à ce moment-là, les développeurs ne se retenaient plus dans leurs revendications.

"L'abonnement sera payé", répondit Jack hardiment.

"Pour le chat bot?" "Ian s'est opposé. «Pour que cela fonctionne pleinement, l'utilisateur a déjà besoin de Spotify Premium. Si nous voulons que les gens paient au-delà de cela, nous devons leur donner plus d'opportunités! »

"Nous nous en occuperons plus tard," répondit Jack.

Jack a chargé le stagiaire de développer le nouveau produit de base de l'entreprise, en violation des exigences de Jack il y a six mois. Le stagiaire a déployé le maximum d'efforts, mais a été bientôt contraint de retourner à l'école; un code incomplet sans cérémonie a été lancé au développeur frontal pour révision. Avec l'aide de l'un des développeurs iOS, il l'a terminé. Que faisait Ian? Il a créé un tableau de bord et la journalisation, car Jack a insisté pour qu'ils attirent suffisamment d'utilisateurs pour justifier l'effort.

Trois mois de plus se sont écoulés. De nombreuses «fonctionnalités» ont été ajoutées, par exemple, le bot a demandé de manière obsessionnelle aux utilisateurs de la chaîne Slack de l'utiliser. Ce comportement violait les conditions d'utilisation de Slack, de sorte que l'application n'était pas autorisée dans le magasin; Jack lui-même a dû envoyer des liens aux personnes intéressées, afin qu'elles l'installent manuellement. Au début, le produit a été transféré à 50 sociétés «très amicales» que Jack connaissait personnellement; parmi ceux-ci, seuls quelques-uns l'ont installé et encore moins l'ont utilisé le lendemain. Ensuite, Jack a étendu la publicité à 300 entreprises «amies», mais avec le même résultat.

Le tournant est venu pour Ian lorsque Jack a commencé à insister sur un temps de travail supplémentaire, malgré le fait que Ian ne pouvait pas aider d'autres développeurs dans leurs tâches. Cependant, Jack l'a forcé à rester tard jusqu'à tard pour "faire preuve de solidarité". Ce fut la dernière goutte: Ian a écrit une lettre de démission deux semaines plus tard. Sa dernière journée de travail a coïncidé avec la sortie du robot Slack, au cours de laquelle il a observé des lignes très droites sur le tableau de bord. Lorsqu'il a finalement quitté le luxueux bureau, la startup n'a toujours pas gagné son premier centime.

Heureusement, Jack avait un plan. Après le départ d'Ian, il est reparti de zéro et était sur le point de créer un nouveau produit. Non, il n'apportera pas d'argent, mais ils doivent d'abord connaître la marque.

Troisième histoire: "Convoyeur de secours"


[ Original ]

"Um ... pouvez-vous regarder quelque chose pour moi?"

Pat s'est éloignée de la programmation de nouvelles fonctionnalités et a vu le cube de Milton près d'elle.

"Je pense que j'ai des problèmes", a ajouté Milton.

L'un des principaux systèmes internes de l'entreprise était le pipeline de traitement des données. Le mot "pipeline" peut peut-être être considéré comme une exagération, car dans la pratique, ce ne sont que quelques scripts shell et programmes Python qui extraient les données des fichiers, effectuent des opérations avec ces données et transfèrent les résultats dans d'autres fichiers, qui sont ensuite lus par d'autres scripts. Au cours du travail, les gens prenaient généralement la dernière version des scripts du système de contrôle de version, les modifiaient et les ajustaient afin de donner une réponse à une question spécifique liée aux données. S'il semblait que ce processus particulier pouvait avoir de la valeur, alors ils ont nettoyé le code et l'ont ajouté à nouveau au système de contrôle de version. S'ils pensaient qu'ils n'avaient plus besoin du code, ils se remettaient simplement à HEAD.

Cependant, certains, comme Milton, ont essentiellement conservé leur propre copie de tous les scripts. Ou, comme c'est le cas avec Milton, quelques exemplaires. Milton connaissait mieux le pipeline de traitement de données, mais l'essentiel de ces connaissances était contenu dans sa bibliothèque personnelle de scripts.

"Je pensais que cela valait la peine d'apporter mes modifications au système de contrôle de version", a déclaré Milton. «J'avais un script appelé par un script qui était appelé par le script, et tout dépendait d'un tas de variables shell créées, par exemple $SETUP_DIR

Pat acquiesça.

«Je voulais donc réorganiser tout cela en un argument afin que d'autres personnes puissent utiliser le code. Je l'ai fait ... mais avant de tester, j'ai oublié de changer les scripts d'appel pour qu'ils passent un argument. "

En particulier, le script de Milton contenait cette ligne:

#!/bin/sh

rm -rf $SETUP_DIR/*/


Il l'a refactorisé sur la ligne suivante:

#!/bin/sh

rm -rf $1/*/


Les scripts shell ne se soucient pas de l'existence de ces variables. Milton avait un environnement persistant pour $SETUP_DIR . Mais $1 est le premier argument, et si vous ne passez pas l'argument, il sera vide. Par conséquent, un nouveau script Milton, lorsqu'il a été lancé sans arguments, a été déployé dans rm -rf /*/ , supprimant tout ce à quoi son compte avait accès.

Fondamentalement, cela a conduit à de nombreuses tentatives de suppression de fichiers sur lesquels il n'avait pas de droits. De plus, cela signifiait la disparition de son répertoire personnel avec tout un tas de scripts spaghetti qui étaient complètement impossibles à recréer car ils n'étaient jamais entrés dans le contrôle de version.

"Est-ce que cela peut être résolu d'une manière ou d'une autre?"

«Eh bien, oui, bien sûr. Tout peut être restauré à partir de votre dernière sauvegarde », a déclaré Pat.

Bien qu'un outil de sauvegarde automatisé ait été lancé sur tous les systèmes Windows, il n'a été configuré sur aucun système Linux. Le service d'assistance a considéré que si vous êtes suffisamment compétent techniquement pour travailler avec Linux et écrire des scripts shell, vous aurez alors suffisamment de connaissances pour configurer votre propre système de sauvegarde. Surtout à cet effet, il y avait un SAN accessible à tous.

"Oh, et je ... n'ai jamais mis en place de sauvegarde," chuchota Milton. "Eh bien ... au moins je n'ai pas poussé?"

Pat espérait que Milton tirerait la bonne leçon de cette erreur.

Quatrième histoire: "Qu'est-ce qu'une virgule flottante?"


[ Original ]

image

Il existe de nombreux pièges pour les programmeurs débutants: la différence entre déclarer une variable et l'initialiser, parfois utiliser des points-virgules pour compléter les lignes, compenser les erreurs par une ... Nous nous sommes tous rencontrés dans notre industrie des programmeurs autodidactes ingénieux qui peuvent créer des applications à grande échelle avec la bonne architecture même un rêve, mais nous avons vu des juniors autodidactes, qui avaient à peine maîtrisé les bases et pensaient que c'était tout ce dont ils avaient besoin. En fin de compte, les diplômes et l'éducation formelle sont nécessaires pour une raison.

Cette histoire a commencé quand Olaf vient de terminer ses études universitaires et a travaillé à son premier vrai travail de «programmeur stagiaire». L'entreprise s'est fixé pour objectif d'améliorer la gouvernance du système de santé public: quiconque a le plaisir douteux de communiquer avec les systèmes de santé dira que c'est une noble tâche. Cependant, l'entreprise a été fondée par un médecin qui n'avait que des connaissances superficielles en PHP, qu'il a étudiées de manière indépendante lorsque le temps lui était imparti.

Olaf s'est mis au travail, avec l'intention d'appliquer ses connaissances des modèles de conception. PHP est facile à apprendre, mais difficile à maîtriser; de nombreux exemples écrits dans un logiciel PHP utilisent des objets divins, et le code est mélangé avec la présentation - deux erreurs graves, qui, cependant, ne sont pas mentionnées dans la plupart des didacticiels en ligne. Olaf a commencé à séparer la fonction du formulaire, à créer des objets pouvant être utilisés à plusieurs reprises pour minimiser le copier-coller, et a été engagé dans d'autres tâches similaires, mettant joyeusement en ordre le chaos du code transmis.

Il s'est donc retrouvé dans le bureau du chef, qui s'est arrangé pour qu'il se lave.

"Les autres programmeurs ne comprendront pas cela!", A crié le patron. «Le code est trop compliqué. Pourquoi le changez-vous? Ça marche, il fallait le laisser! »

Découragé, Olaf est retourné au travail et a téléchargé une version propre dans sa branche principale sans aucun changement. En essayant d'éviter une collision avec de mauvaises pratiques, il a commencé à travailler sur un bogue dans le système comptable, qui a une priorité et une urgence élevées, car il était lié à la facturation. Les utilisateurs pouvaient télécharger des fichiers CSV sur le serveur avec des informations sur leurs dépenses, et le système a résumé les valeurs par catégorie et créé des rapports de facturation. Cependant, quelque part à l'intérieur, une erreur d'arrondi s'est glissée, conduisant dans certains cas limites importants à des montants incorrects.

Olaf a étudié plus que ses collègues, mais aucune formation n'est complète. Il a rapidement réussi à déterminer qu'il s'agissait d'une erreur mathématique à virgule flottante. Étant donné que les nombres décimaux ne peuvent pas être représentés sous forme binaire avec une précision totale, dans les cas limites, des erreurs de calcul se sont produites. Il a commencé à chercher les bonnes façons de gérer les valeurs décimales en PHP. Contrairement à Node ou C #, les bibliothèques externes en PHP sont assez difficiles à connecter, car ce langage n'a pas de support intégré pour la gestion des packages. Il ne savait pas comment ajouter une bibliothèque capable d'effectuer correctement des opérations mathématiques. Étant donné que le logiciel n'a calculé que les sommes, Olaf a décidé d'utiliser des mathématiques entières: lire la valeur, se débarrasser du point décimal (pour que la valeur de 10,50 $ soit représentée par 1050), effectuer les calculs et ajouter à nouveau le point décimal lorsqu'il est affiché.

Un autre junior a aimé l'idée. Le développeur principal l'a approuvée, mais le chef a catégoriquement refusé l'offre. Comment a-t-il plaidé cela? «Ce n'est pas une erreur en virgule flottante. Cela survient en raison d'un faible typage de PHP, le programme essaie de additionner les valeurs sous forme de chaînes, pas sous forme de nombres. "

(Pour ceux qui sont curieux: PHP n'utilise pas l'opérateur + pour concaténer les chaînes. Au lieu de cela, il utilise le ".". Le résultat de "hello " . "world" sera "hello world" .)

En conséquence, le développeur principal a pris cette décision: séparer la partie entière de la fraction, de sorte que 10,50 $ se transforme en 10,00 $ et 0,50 $, puis résume chaque partie séparément.

Olaf ne s'est pas attardé, attendant qu'ils découvrent que le bogue était toujours en place, car le programme traitait toujours la partie fractionnaire avec des cents comme nombre à virgule flottante. Il a trouvé un meilleur emploi avec une meilleure langue et a quitté l'entreprise.

image

Cinquième histoire: «sécurité calculée»


[ Original ]

À la fin des années 80, Karl a travaillé pendant un certain temps dans une société de développement de logiciels qui s'occupait de l'avionique et des systèmes de positionnement mondial pour les clients militaires et civils. Pour affaires, il a souvent rendu visite à Schlockdeed Corp, un client ayant un contrat pour développer une nouvelle génération d'avions de chasse pour l'armée américaine. En raison du strict secret de leur travail, il était très important d'assurer la sécurité.

Chaque fois que Carl entrait ou quittait l'entreprise, il devait passer par le service de sécurité. Là, il a soigneusement vérifié sa mallette, sa veste, sa boîte à lunch et presque tout sauf une étude complète des cavités corporelles. Malgré les contrôles quotidiens minutieux à Schlockdeed, certaines de leurs «mesures de sécurité» frisaient l'absurde.

À l'ère de la transmission d'informations via la disquette , les programmeurs ont souvent pris avec eux pour travailler et ont pris des boîtes avec des disquettes.Schlockdeed avait une politique de conduite assez détendue, même si c'était le moyen le plus simple de voler leurs secrets. Des entrepreneurs comme Carl, après avoir vérifié les données biographiques, ont reçu un «laissez-passer pour les médias». C'était une carte qui leur permettait de réaliser et d'apporter dans le bâtiment un nombre illimité de disquettes sans aucun doute.

Le travail de Karl n'a été éclipsé par rien avant de décider d'apporter sa calculatrice HP-41CX préférée au bureau. Ils ont travaillé sur des algorithmes complexes et écrire des équations au tableau prenait trop de temps, donc Karl espérait accélérer le processus. Au cours d'une inspection matinale, le garde Bill a sorti le HP-41CX et une expression inquiète est immédiatement apparue sur son visage.

Bill attrapa le talkie-walkie sur son épaule: «Paulie, nous avons besoin de toi. Nous avons une situation difficile ici. » Karl était très confus. Le 41CX a-t-il déjà été utilisé dans des bombes? Ou peut-être que c'est un tirage au sort du premier avril? «Monsieur, nous devons vous envoyer à notre CIO. Venez ici », a déclaré Bill.

Le visage de Karl a brillé, il essayait de comprendre quels problèmes il avait, car ces «problèmes» pouvaient facilement entraîner des menottes et l'emprisonnement. Il ne comprenait pas non plus pourquoi le dirigeant principal de l'information devrait effectuer une inspection supplémentaire. Bill l'a amené au bureau de Paulie, dans lequel il y avait un homme costaud avec une moustache dans le style des années 80. Un panneau sur son bureau indiquait qu'il s'agissait d'un agent d'inspection de la calculatrice.

"Mon pote, je devrai regarder votre machine pour plus", a déclaré Paulie, tendant la main. Bill lui a remis le HP-41CX. Paulie l'a soigneusement examiné et a déclaré: «Je dois le confisquer. Vous voyez, il a une mémoire interne, il peut donc potentiellement être utilisé pour voler des secrets. "À la fin de la journée, je vous le rendrai, mais ne pensez même pas à retomber dans le piège !" Bill a ramené Carl au département de sécurité principal, déjà sans calculatrice.

En chemin, Bill a expliqué que les calculatrices programmables sont strictement interdites dans le bâtiment. Paulie a dû surveiller la mise en œuvre de cette politique et a pris son travail très au sérieux. Si Karl devait apporter une calculatrice, les modèles les plus simples étaient autorisés. Après l'approbation de Paul, une étiquette AC (Calculatrice approuvée) a été collée sur lui, ce qui lui a permis d'entrer dans la calculatrice. Découragé par la perte de son HP-41CX, il s'est résigné au fait qu'il devrait respirer la poussière de craie pendant toute la vie de Schlockdeed. Mais au moins, il a un «laissez-passer multimédia» pour l'entrée et le retrait gratuits des disquettes.

Source: https://habr.com/ru/post/fr442222/


All Articles