Ricerca nel sito web

20 storie dell'orrore tecnologico sull'apprendimento nel modo più duro


Amministratori di sistema, web designer, ingegneri e programmatori condividono le loro esperienze più spaventose sulla riga di comando.

Halloween sarà qui prima che tu te ne accorga! Questa vacanza divertente ed esagerata è un ottimo momento per riflettere sulle paure mortali dello sviluppatore che è in ognuno di noi. Cosa ti perseguita di più, nei momenti tranquilli appena prima che il tuo codice inizi a essere eseguito?

Entrando nello spirito di Halloween, ho chiesto ad alcuni scrittori di Opensource.com: Qual è il codice più spaventoso che hai visto o scritto?

Permessi errati

Ero responsabile di un server e ho creato qualcosa tramite FTP. C'erano alcune cose strane che venivano visualizzate, quindi ho pensato che alcune autorizzazioni dovessero essere modificate.

Inutile dire che ho stupidamente disattivato la modalità di lettura e ho chiuso il sito. (Un sito web non è molto utile quando nessuno può accedervi.)

Mi ci sono volute ore per sistemare. Questo è successo in un'agenzia anni fa quando ero l'unico sviluppatore web.

—Miriam Goldman

HTML caotico

Ho rimosso il sito web di un cliente, che all'epoca era un autore nell'elenco dei bestseller del Wall Street Journal, perché il tema predefinito originale di WordPress aveva un aggiornamento disponibile.

Il suo sviluppatore ha codificato l'HTML nel tema invece di creare un tema figlio. Ho eseguito l'aggiornamento.

Questo accadeva in un'epoca in cui la gente non disponeva facilmente di backup notturni, quindi passavo ore al telefono con il provider di hosting. Cose come la gestione temporanea, i temi secondari, i backup notturni o i backup manuali ora sono tutte cose normali, così come la possibilità di aggiornare automaticamente e ripristinare manualmente. Non così in quell'epoca.

—Courtney Robertson

Chiave non così segreta

Penso che molti di noi abbiano già visto una chiave segreta nel codice pubblico. O un altro preferito: un mio amico che invia e-mail a 100.000 utenti dal server di sviluppo.

—Giovanni E. Picozzi

Mischia Unix

Questa è una storia di Unix. Oggi è stato risolto in Linux.

Un giorno prima di dare al management un'importante demo di un nuovo componente, ho dovuto aggiornare il mio codice (questo accadeva molto prima che Git esistesse). Sono andato nella mia directory home, ho trovato la directory del progetto e ho cancellato tutto. Sfortunatamente, in quel tipo di Unix, questo comando seguiva collegamenti simbolici e avevo un collegamento all'ultima versione del codice (non tutto era sul sistema del codice sorgente poiché era ancora in fase di test ).

Il giorno dopo, si è verificato un problema di rete nell'edificio, quindi la demo è stata ritardata di un giorno e siamo riusciti a recuperare. È successo più di tre decenni fa. Anche adesso non ho idea se il problema di rete sia stato una coincidenza o un tentativo del nostro amministratore di sistema di salvarci (se è così, ha funzionato!)

—Josh Salomon

Imperativo

Vedere !important; in tutto un file CSS invece di un uso corretto della specificità.

Una volta ho dovuto sovrascrivere e personalizzare quasi tutti i CSS di un tema WordPress perché il proprietario del sito non si sarebbe mosso nel tentativo di ottenere un nuovo tema che fosse più vicino al design che desiderava.

Lo stesso tema è stato aggiornato l'ultima volta dallo sviluppatore nel 2018 e il sito Web lo utilizza ancora.

—Christi Nickerson

Citato erroneamente

In un ruolo precedente, il mio predecessore ha citato erroneamente il testo di "Any Way You Want It" dei Journey in un commento in codice.

—Ben Cotton

Il fantasma di Algol68

La complessità di Algol68, alla fine degli anni '60 e all'inizio degli anni '70, spaventò molte persone influenti, tra cui Niklaus Wirth. La lamentela più comune che ricordo allora era del tipo "chi potrebbe scrivere un compilatore per una bestia così complicata?" Eppure molte persone lo hanno fatto. Inoltre, molti dei concetti sviluppati o almeno formalizzati come Algol68 sono apparsi in linguaggi successivi, in particolare in C e nella Bourne shell (grazie a Steve Bourne).

Alcuni dei concetti di Algol68 non sono invecchiati bene. Il concetto di I/O che ha a che fare con "libri" e "capitoli" e così via è un po' strano oggi. Lasciare cose come i set di caratteri all'implementazione sembra piuttosto antiquato.

Ma alcuni sono, o dovrebbero essere, estremamente rilevanti oggi, come le espressioni che producono un valore, la tipizzazione forte (i tipi in Algol68 sono chiamati "modalità"), la memoria heap e la garbage collection, la definizione e l'overload degli operatori e altro ancora.

Restando in tema Halloween, sia dolcetti che scherzetti.

Algol68 è un linguaggio che merita di essere studiato, se non altro per vedere da dove provengono così tante idee dell'informatica moderna e per vedere quante sono andate perse lungo il percorso.

—Chris Hermansen

Password esposte

Stavo eseguendo un controllo tecnico per un cliente di supporto in arrivo e lo sviluppatore precedente ha inserito le password in testo semplice in tutto il tema e ha utilizzato modi orribili per connettersi a un database remoto. Anche il file del loro compositore era spaventosamente gonfio. Ci sono voluti cinque minuti ogni volta che ho provato a far funzionare il sito localmente. Dipendenze obsolete, repository a cui non ho potuto accedere, l'elenco potrebbe continuare.

—Miriam Goldman

Il labirinto

Il codice più spaventoso che abbia mai visto era un pezzo del linguaggio assembly PDP-11 nel kernel di un sistema operativo chiamato RSTS, che oggi nessuno ricorda. A quei tempi il codice sorgente era su microfiche e avevo seguito questo percorso del codice attraverso alcuni colpi di scena, cercando di capire cosa stesse succedendo. E poi, mi sono imbattuto in questa istruzione:

MOV R5,PC

Ho alzato le mani e ho pianto. Ho davvero pianto. La gente in ufficio pensava che avessi battuto la testa o che avessi avuto un infarto.

A quei tempi, la memoria era preziosa e un'istruzione MOV utilizzava un po' meno memoria di un'istruzione BR (per "ramo"). Copiare il contenuto del registro 5 nel contatore del programma era davvero un passaggio incondizionato economico all'indirizzo memorizzato nel registro 5. Solo che non avevo idea di cosa fosse memorizzato nel registro 5 o di come trovarlo.

Ancora oggi, quasi 40 anni dopo, mi chiedo chi scriverebbe un codice del genere e come qualcuno potrebbe eseguirne il debug.

—Greg Scott

Fuori di uno

Lavoro nel settore dell'automazione, dove i PLC sono programmati in linguaggi piuttosto strani.

Un esempio che mi perseguita è il fatto che nel linguaggio ST è possibile definire gli array in modo che inizino dall'indice 1. Significa che il primo elemento è nella posizione 1, non 0. Mi fa impazzire quando lo vedo.

—Stephan Avenwedde

Divergenza

Ho disattivato un'istanza MongoDB per 40 minuti una volta durante un lancio dalla fase di produzione. Il nostro ambiente di staging si era discostato dalla produzione. Si trattava semplicemente di una differenza di configurazione del database, non molto entusiasmante. Ma è una buona lezione assicurarsi che gli ambienti di staging e di produzione siano sincronizzati!

—Em Nouveau

Sussurri ultraterreni

Questo proviene da un progetto che è ancora vivo e vegeto, ma ho cambiato il codice per nascondere la fonte.

for (int c = 0; y < yyy && c < ccc; y++, c++) {
 // some code here
}

All'inizio sembra un giro innocente. Ma forse ti stai chiedendo perché ci sono due variabili con due condizioni di arresto e due incrementi. E poi ti rendi conto che c'è un solo inizializzatore e la seconda variabile (y) viene inizializzata prima di questo ciclo in un blocco di codice diverso.

Quando me ne sono reso conto, mi ci è voluta circa un'ora per capire perché il codice era scritto in questo modo e come avrebbe dovuto funzionare. Ovviamente non c'erano commenti c e i nomi delle variabili non hanno significato (c si chiama c nel codice e y > ha un nome un po' più significativo, ma non abbastanza significativo da spiegarmelo, nemmeno oggi che ho capito a cosa serve).

—Josh Salomon

Dati critici

Intorno al 1980, ho ottenuto il mio primo lavoro dopo il college. Ero vicedirettore del centro di calcolo presso una facoltà di ingegneria dell'Indiana. È un titolo elegante per il secondo in comando di un negozio IT composto da due persone. Ho gestito l'elaborazione amministrativa su un PDP-11/40, con unità disco rimovibili "piatto pizza" RK05 (2,5 MB ciascuna). Ogni ufficio amministrativo aveva un'unità e parte del mio lavoro era eseguirne il backup, da disco a disco, ogni settimana. Ma quell'estate mi sono dato da fare e ho saltato l'ufficio del registro per quattro settimane di seguito. Poi mi sono reso conto del rischio, quindi mi sono assicurato di avviare il backup mensile da disco a nastro.

Ho smontato il piatto della pizza del Registrar dall'11/40 e l'ho montato sull'11/70, che aveva un'unità a nastro a 9 tracce, e ho avviato il backup. Pochi minuti dopo, ho sentito un rumore raschiante all'interno dell'unità disco. Sì, le teste si sono schiantate. In pochi minuti avevo distrutto tutti i dati del Registrar e il backup più recente, che era un nastro a 9 tracce vecchio di quattro settimane.

È stato un momento scomodo quando ho dovuto guardare negli occhi il capo del dipartimento di registrazione e dirgli che avevo distrutto tutti i suoi dati.

Oggi dico ai nuovi esperti IT che non sei un professionista finché non distruggi i dati critici di qualcuno e non c'è modo di recuperarli. Ricorda per sempre quella sensazione alla bocca dello stomaco.

—Greg Scott

Folla arrabbiata

Un cliente ha violato il core di WordPress per aggiungere funzionalità che sono poi emerse in un aggiornamento di routine e non riusciva a capire perché il sito continuasse a bloccarsi ogni volta che tentava di aggiornare LearnDash. (A loro inoltre non è piaciuto il nostro rapporto che denunciava le loro scarse pratiche di sviluppo.) Fondamentalmente ci hanno mostrato la porta definendoci bugiardi e incompetenti. Ad oggi, ho ancora l'accesso delegato ai loro domini e l'accesso wp-admin alla produzione e allo sviluppo di due domini.

Inoltre, nonostante condividessimo un collegamento a una posizione crittografata per condividere le credenziali di accesso, hanno inviato i nostri accessi tramite e-mail.

—Laura Byrne

Non dimenticare di eseguire il backup

Non ho lavorato molto su reti aziendali, quindi non ho disattivato alcun server. Tuttavia, da giovane, ho cercato di aiutare una persona con un problema IT e in qualche modo ho causato il blocco di Windows 95 e ho dovuto reinstallarlo gratuitamente.

Un altro dei miei momenti più tristi da giovanissimo utente Amiga è stato quando il mio disco di salvataggio, contenente tutti i miei file, si è rotto a causa di un guasto meccanico. Al giorno d'oggi, sono migliorato nel eseguire il backup di molti dei miei file personali importanti.

—Rikard Grossman-Nielsen

Radice di ogni male

Ero nuovo a Linux ed ero appena uscito dal DOS dove usavo Norton Commander. Poi è stato rilasciato Midnight Commander e ne sono stato molto felice. Non era stato impacchettato per la distribuzione Linux che usavo all'epoca (Jurix), quindi l'ho compilato io stesso dai sorgenti, proprio come gli altri software che usavo all'epoca. Ha funzionato perfettamente e all'improvviso mi sono sentito più a mio agio su Linux.

Non è questa la storia dell'orrore.

I miei colleghi mi hanno detto di non eseguire Midnight Commander come root, indipendentemente da quanto fosse confortante. Ma rootare era facile e sembrava più simile al DOS, quindi ignorai il loro consiglio. Per farla breve: ho accidentalmente rimosso il contenuto dell'intera directory /etc. Fino a quel momento non avevo mai dovuto utilizzare i backup, ma quel giorno ho imparato che i backup sono effettivamente utili.

27 anni dopo, ricordo ancora questa storia ed eseguo backup regolari.

—Pietro Czanik

Illusione

Il peggior progetto che un'agenzia mi ha fatto "realizzare" è stato una sola pagina che all'inizio sembrava semplice. Ho detto che sarei stato in grado di metterlo insieme con un po' di HTML e CSS, forse un po' di Javascript. Ma mi hanno chiesto espressamente di non farlo. Volevano che ritagliassi il disegno e usassi letteralmente i CSS per posizionare quei pezzi sulla pagina. Mi hanno anche chiesto di aggiungere tutti i CSS in linea, direttamente nel file HTML, perché volevano letteralmente una pagina.

Nessuno dei testi era testo reale.

Non c'erano veri e propri elementi HTML oltre a quelli necessari per posizionare quelle immagini.

Ho detto loro che il design era abbastanza semplice da poterlo unire al codice vero e proprio, ma non lo volevano. Volevano solo che passassi il tempo a mettere insieme i pezzi e poi passare a un progetto diverso. Mi hanno fatto realizzare due piccoli siti di una pagina come questo.

Ha ferito la mia anima front-end. È stato fisicamente doloroso per me realizzare quel progetto. Era un lavoro temporaneo e quando mi hanno offerto il tempo pieno ho gentilmente rifiutato.

—Rachel Vasquez

Corruzione

La cosa più spaventosa per me sono le corruzioni della memoria che possono verificarsi in ANSI C99. Durante uno screencast, ho catturato questo evento paranormale (non del tutto) in questa clip di YouTube.

(Joël Krähemann, CC BY-SA 4.0)

La GtkEntry etichettata file mostra alcuni glifi casuali. Ho ricontrollato il codice, ma non ho trovato alcun problema.

La funzione ags_export_soundcard_open_response_callback() è un callback all'evento "response" di GtkFileChooserDialog. (Per la cronaca, lo strumento per risolvere questo problema è valgrind.)

(Joël Krähemann, CC BY-SA 4.0)

—Joël Krähemann

Il pitone ha paura

La caratteristica di programmazione più orribile che abbia mai visto è l'accesso che Python dà al suo dict. Cambiare il tipo di un oggetto in fase di esecuzione è contrario al mio codice di condotta di programmazione.

—Josh Salomon

Franken-net

Nel 2006, ho creato firewall basati su Fedora e una serie di script, e ho convinto un cliente con un grande sito web all'interno di un centro colo a sostituire un firewall proprietario con uno dei miei. L'ho costruito e mi sono presentato per installarlo alle 4 del mattino una mattina. È stato allora che ho scoperto (a mie spese) che aveva un bilanciatore del carico dietro il firewall, ma con un indirizzo IP pubblico. Il cliente ha subito un'interruzione di 5 minuti, ma ho ricollegato tutto all'originale ed è tornato tutto online.

Ho trovato un modo per gestire la sua configurazione di Franken-net utilizzando il proxy ARP. L'idea era che ogni volta che qualcuno dal mondo esterno faceva una richiesta ARP per il bilanciatore del carico, io rispondevo. Pochi giorni dopo, mi sono presentato di nuovo alle 4 del mattino e ho installato il mio sistema. Questa volta ho messo offline tutto l'intero centro colo. Avevo impostato il mio proxy ARP per rispondere a tutto, quindi tutto il traffico sulla LAN alla fine mi ha trovato ed è scomparso in un buco nero.

Una volta realizzato quello che avevo fatto, ho rimesso tutto com'era. Ma il danno era fatto. Se hai provato a navigare nel tuo sito web preferito intorno alle 4 del mattino, ora centrale degli Stati Uniti, una mattina del 2006 e non ha risposto, potrebbe essere stata colpa mia. Ho messo offline un intero sito colo installando un sistema in un rack e accendendolo.

L'operatore del sito web ha urlato e io sono sgattaiolato fuori dalla porta. Non mi hanno mai invitato a riprovare. È stato un peccato, perché probabilmente il ponte avrebbe funzionato.

—Greg Scott

La tua storia dell'orrore

Qual è la tua storia horror preferita legata alla tecnologia? Raccontacelo nei commenti (ma sii gentile e cambia i nomi dei progetti per proteggere gli innocenti!)

Articoli correlati: