Podobne do pytania, które przeczytałem na temat błędu serwera, jaki jest największy błąd, jaki kiedykolwiek popełniłeś na stanowisku związanym z IT. Kilka przykładów od znajomych:
Musiałem trochę popracować na stronie produkcyjnej, więc postanowiłem skopiować bazę danych na żywo do strony beta. Dość standardowy, ale kiedy wszedłem na stronę beta, wciąż wyciągałem nieaktualne informacje. OOPS! Skopiowałem bazę danych beta na stronę na żywo! Bogu dzięki za kopie zapasowe.
Dla mnie stworzyłem formularz wydarzenia, które miało się odbyć w określonym przedziale czasowym. Uczestnicy wypełniali formularz, aby mieć szansę na wygraną, a my wysyłaliśmy organizatorom wydarzenia plik CSV z bazy danych. Wszedłem do bazy danych i znalazłem TYLKO 1 WEJŚCIE, MOJE. Po zbadaniu wygląda na to, że zapomniałem klucza automatycznego przyrostu, a ze względu na konfigurację serwera nie było sposobu na odzyskanie utraconych danych.
Wiem, że to pytanie jest podobne do tych z Stack Overflow, ale te, które znalazłem, wydają się otrzymywać ogólne odpowiedzi zamiast faktycznych historii :)
źródło
Odpowiedzi:
Wydanie UPDATE SQL ze „złą” klauzulą WHERE, która pasowała do wszystkiego.
Wyciągnięta lekcja: Zawsze najpierw wystaw WYBIERZ, aby zobaczyć, co zostanie zmienione.
źródło
Literówki
Spędziłem trzy solidne dni na tej części:
Widzisz błąd? To średnik na końcu
else if
. Nie mogłem zrozumieć, dlaczego moje usunięte komentarze nie były usuwane. Zapamiętane w bazie danych żądanie AJAX, którego używałem, zmienne POST, zawierałoerror_log
ialerts
wszędzie . Skończyło się przepisywanie metody i zadziałało. Potem zrobiłem diff z oryginalną wersją i zauważyłem średnik.Literówki są najtrudniejsze do wyśledzenia w języku, który nie jest skompilowany ani wstępnie sprawdzony przez coś. Nawet takie błędy byłyby trudne w skompilowanym języku. Zmień
==
na=
i nagle masz zadanie w środkuif
.źródło
Myślenie, że programowanie polega głównie na tworzeniu od podstaw fajnych nowych rzeczy.
źródło
Moim największym błędem było myślenie, że programowanie to łatwe pieniądze ...
źródło
Przypadkowo usunąłem bazę danych, która przechowywała wszystkie informacje o naszych klientach, historię zamówień i faktury od początku istnienia firmy (wartość kilku lat).
Aby być uczciwym, mój pracodawca musi jednak ponieść część winy. Mieli jedyną kopię tej bazy danych przechowywaną na Mac SE (tak, to było dawno temu), którą dali mi (zupełnie nowy pracownik, pierwsza praca po studiach) jako moją stację roboczą i nigdy nawet nie brali pod uwagę tworzenia kopii zapasowej.
Więc myśląc, że to kopia DB, przeciągnąłem ją do kosza. Ze względu na rozmiar pliku natychmiast go usunął. W końcu otrzymaliśmy je po zapłaceniu bezbożnej kwoty na usługę przywracania danych, ale przez około 5 dni nie mogliśmy zrealizować ani rozliczyć żadnych zamówień i nie mieliśmy możliwości uzyskania dostępu do informacji o żadnym kliencie. To prawie zatrzymało (3-osobową firmę).
źródło
kiedy phpmyadmin zapytał:
„Masz zamiar ZNISZCZYĆ kompletną bazę danych! Czy naprawdę chcesz DROP DATABASE xxx?”
Nacisnąłem Enter.
źródło
Nie jestem pewien, czy to był mój „największy błąd”, ale zdecydowanie niezapomniany. W pierwszym tygodniu lub dwóch w nowej pracy przydzielono mnie do niewielkiego „ulepszenia funkcji”, które polegało na zmianie kolejności sortowania niektórych elementów na jednej z najpopularniejszych stron w witrynie. Nie byłem zbyt zaznajomiony z bazą kodu, ale szybko znalazłem odpowiedni Komparator i dodałem wywołania do kilku nieszkodliwych metod wewnątrz metody CompareTo, nie myśląc o tym zbyt wiele. Kod przetestowany lokalnie i pod kontrolą jakości bez problemów i został uruchomiony.
Tego samego dnia miałem z szefem 1 na 1 i z wielkim uśmiechem na twarzy, pogratulował mi, że dostałem moją pierwszą „funkcję” na żywo tak szybko po dołączeniu. Oboje patrzyliśmy, jak odwiedził odpowiednią stronę, aby zobaczyć funkcję w akcji. Załadowanie strony zajęło 47 sekund. Moje serce utonęło. Odświeżył stronę: 53 sekundy. Jego uśmiech zniknął. Wróciłem do biurka i spędziłem długi wieczór na debugowaniu i wypychaniu krytycznych łat na stronę na żywo.
Okazuje się, że jedną z nieszkodliwych metod, które dodałem, było wywołanie usługi zdalnej, które spowodowało co najmniej jedno trafienie DB. W każdym porównaniu Do połączenia. Więc na stronie, na której sortowano ponad 2000 przedmiotów, robiłem ~ 6000 (nlogn) trafień DB. Ojej.
źródło
Zrobiłem to:
(Właściwie nie zrobiłem tego dokładnie . Byłoby to głupie i niewybaczalne. Zrobiłem to w bardziej subtelny, okrężny sposób, który zasadniczo spowodował wykonanie tego polecenia.)
Nie trzeba dodawać, że system Unix był po tym czasie bezużyteczny i musiał zostać ponownie zainstalowany. Byłem wtedy początkującym administratorem, a starszy facet, który mnie nadzorował, rozumiał.
To dobre doświadczenie. Nauczyłem się, jak wyświetlać katalogi bez konieczności używania żadnych poleceń / bin.
źródło
Klient chce wysłać wiadomość e-mail do całej bazy użytkowników, która zasadniczo wyśle spersonalizowaną wiadomość e-mail dotyczącą zdarzenia, a gdy kliknie łącze w wiadomości e-mail, automatycznie zaloguje się do formularza z wypełnioną połową swoich danych.
Piszę kod, testuję kod, działa dobrze, linki działają, jest całkiem gładki. Po sprawdzeniu i podwójnym sprawdzeniu wszystkiego przełączam się na listę na żywo i odchodzimy.
Lista na żywo jest znacznie większa niż moje przykładowe dane, a serwer poczty przewraca się. Muszę zatrzymać aplikację konsolową, a potem zdać sobie sprawę, że muszę ją ponownie uruchomić od miejsca, w którym się zatrzymała. Na szczęście ta funkcja nie jest zbyt trudna do dodania. Zarejestrowałem użytkowników, do których już wysłano wiadomość, więc po uruchomieniu serwera pocztowego ponownie skonfigurowałem kod, aby móc zrestartować go od miejsca, w którym wcześniej się nie powiódł. aby serwer pocztowy mógł nadrobić zaległości, ruszamy.
Niestety udało mi się jakoś nie zaktualizować całego kodu. Nie pamiętam szczegółów tego, co zrobiłem, ale zapytanie o dane użytkownika otrzymywało jeden zestaw danych, zapytanie o wygenerowanie skrótu dostawało inny, więc jeśli użytkownik kliknie łącze, przejdzie do formularz zawierający dane osobowe innej osoby z danych jej konta. A to w niszowej branży, w której na liście było wiele konkurencyjnych małych firm.
Telefon nie zaczął długo dzwonić w biurze klienta ...
To był jedyny jak dotąd błąd, który doprowadził mnie do złożenia rezygnacji.
źródło
Kiedyś użyłem sprzężenia krzyżowego bez filtra. Działa dobrze w testowej bazie danych z ułamkiem danych. Kiedy został wdrożony, skończył z ~ 60 milionami wierszy w przeciętnym zapytaniu.
źródło
Zepsułem skaner laserowy o wartości 100 000 $.
Kontroler przechowywał pozycje jako liczby całkowite, więc podzieliłem wszystko przez 10000, aby uzyskać rzeczywistą pozycję w calach.
Gdy ostatnia cyfra wynosiła 0, została pominięta, więc oś Z była 10 razy za daleko.
Nastąpiła Hillarity
źródło
Z drugiej strony była to pięcioletnia aplikacja VB6.
źródło
Pozwoliłem mojemu menedżerowi, aby zmiażdżył mnie, zostawiając pracę, którą kochałem. Powinienem był pozwolić mu zepsuć wszystko, zwolnić się, a potem powinienem był przyspieszyć i posprzątać elementy. Zamiast tego zrezygnowałem i od tego czasu żałuję.
źródło
Siedem lat temu mój szef i właściciel firmy, którego jeszcze nie spotkałem, byłem tak nowy na tym stanowisku, w innym stanie, robiąc prezentację naszej witryny badawczej dla kilku potencjalnych klientów. Składki członkowskie wahały się od niskich do średnich pięciu liczb, więc te dema były dużą sprawą dla naszej nowo powstałej firmy.
Pośrodku jego wersji demonstracyjnej, kiedy robiłem trochę pracy z bazą danych, zmieniłem bazę danych na żywo i zaktualizowałem każde pytanie ankiety w każdej ankiecie do tego samego tekstu, coś w rodzaju „To jest pytanie testowe” z powodu błędu w GDZIE. Razem z moim współpracownikiem ruszyliśmy w stronę kopii zapasowej i skuliliśmy się, mając nadzieję, że nie demonstrował w tej chwili tej części witryny, ale czekał na e-maila we wszystkich wersjach, które z wdzięcznością nigdy się nie pojawiły.
Dobrą stroną był szef, który w końcu wyskoczył na skrzynkę rozwojową.
źródło
Korzystałem z narzędzia Xenu do śledzenia linków w naszym intranecie, aby spróbować usunąć niektóre z wielu zepsutych linków, które narosły przez lata (większość, jak można się było spodziewać, to linki z wiki do udostępnionego dysku sieciowego).
Po około 30 minutach zacząłem zauważać, że niektóre nowe przedmioty mają dziwne zdjęcia, wyglądało na to, że ludzie korzystali z niektórych ziarnistych starych fotografii, które były w systemie, ale zignorowałem to myślenie, że może nie było nic nowego mieli to, czego chcieli.
Kolejne 10 minut później zauważyłem, że z jakiegoś powodu losowe elementy zmieniają się losowo. W tym momencie dotarło do mnie, co się dzieje. Intranet korzysta z uwierzytelniania systemu Windows, a niektóre funkcje (takie jak wybieranie obrazów wiadomości i wyróżnionych elementów) zostały zakodowane w odpowiedzi na żądania HTTP GET. Moduł sprawdzania łączy używał mojego uwierzytelnienia i zaindeksował do stron po stronie administratora, lojalnie wykonując swoje zadanie i podążając za każdym znalezionym łączem, w tym takim jak
/admin/displayItems/icon_update.asp?image=eastereggs.jpg&itemID=3174
źródło
Jak dotąd moją jedyną skręcającą żołądek, przyspieszającą bicie serca, nagle gorącą i swędzącą pomyłką było uruchomienie zapytania UPDATE bez klauzuli WHERE. Na szczęście była kopia zapasowa z ostatnich 15 minut, a dane nie zmieniały się zbyt często, co oznaczało, że mogłem w pełni przywrócić dane w ciągu 10 minut bez żadnej wiedzy.
Nic złego, ale miałem kilka bliskich połączeń. Są i pozostają blisko, ponieważ słyszałem wystarczająco dużo horrorów w tej branży, aby wszystko, co robię, co mogłoby zepsuć wszystko, dobrze się kończy.
źródło
W przypadku robota, nad którym pracuję, przechowujemy plik dziennika każdego uruchomienia. Mamy robota i symulator, które generują te foldery dziennika. Pliki dziennika symulatora są bezużyteczne, ale pliki dziennika robotów są bardzo przydatne i są przechowywane na zawsze.
Ponieważ sam robot ma ograniczone miejsce na dysku twardym, są one przenoszone na inny komputer i tam przechowywane. Ten komputer jest głównym komputerem operacyjnym do komunikacji z robotem.
Właśnie zacząłem pracować nad robotem kilka miesięcy wcześniej i nie wiedziałem o tym. Myślałem, że dzienniki na komputerze operacyjnym były bezużyteczne, generowane przez symulator i usuwane. Straciliśmy wszystkie stare dzienniki, ponieważ nie było odpowiedniej kopii zapasowej.
źródło
Zbudowałem wersję naszego oprogramowania na moim komputerze zamiast kompilacji, ponieważ była szybsza (około 4 godzin szybciej, co oznaczało, że mogła przejść do kontroli jakości tego dnia zamiast następnego), a wydawca chciał jak najszybciej.
Miałem specjalną definicję do debugowania na moim komputerze, co spowodowało błąd, który nie został wykryty podczas kontroli jakości. Wykryli go dopiero pod koniec 4 tygodni testów sprawdzania poprawności, ale był wystarczająco zły, by nie zaliczyć sprawdzania poprawności.
źródło
Upuść przypadkowo produkcyjną bazę danych zamiast wersji programistycznej. Nie widziałem, na jakim serwerze działam. Na szczęście ostatnia kopia zapasowa została utworzona 4 godziny temu, a użytkownik nie wprowadził wielu zmian w systemie, więc nie ma utraty dużych danych.
źródło
Największym błędem, jaki kiedykolwiek popełniłem, było to, że nie pracowałem nad kontrolą źródła na mojej maszynie programistycznej. Mój twardy dysk się zawiesił i straciłem tygodnie pracy. Jest to lekcja, której się nauczyłem i której nigdy więcej nie pozwolę.
źródło
Używanie
==
zamiastequals
do porównywania ciągów w Javieźródło
==
jest porównanie referencyjne. W języku C #==
dokonuje porównania wartości ciągów, tak jak.Equals()
to, że istnieją pewne różnice, patrz odpowiedź Jona Skeeta tutaj: stackoverflow.com/questions/3678792/...Powiedziałem mojemu Dyrektorowi, że to, że jest on STARY i ma więcej lat doświadczenia niż ja, nie oznacza, że będę go szanować. Jedyne, co szanuję, to ZDOLNOŚĆ. Nie musiałem stawić czoła konsekwencjom tak żałosnego stwierdzenia, ponieważ byłem młodszym programistą niż. Patrząc wstecz, wydaje się to moim największym błędem. Gdzie był mój zdrowy rozsądek \ pokora? :-(
źródło
Zdarzyło się to koledze w tym miesiącu.
Naprawiał błąd, który pojawiał się, gdy wysyłasz SMS-a na wiele telefonów komórkowych. Zazwyczaj wiadomości te nie są wysyłane w celu zaoszczędzenia kosztów, ale z powodu błędnej konfiguracji w naszej bazie danych zostały wysłane.
Koszt: miesięczne wynagrodzenie za ruch SMS.
źródło
Na prośbę menedżera skopiowałem
/etc/sudoers
z jednej maszyny na drugą (chociaż nie rozwiązałoby to problemu, ale to nie ma sensu). Niestetysudo
przenosiłem skopiowany plik na miejsce, nie zauważając, że jego właściciel i uprawnienia były całkowicie błędne. W tym momencie nikt nie miał otwartej powłoki roota, nikt nie mógłsudo
i nikt nie mógł zalogować się jako root, ponieważ jej powłoka została ustawiona na/bin/false
. Maszyna była w zdalnej hurtowni danych ...źródło
Chciałem utworzyć pliki metadanych dla każdego pliku w katalogu (tzn. Dla każdego pliku
somedir/foo.bin
chciałbym utworzyć pliksomedir/foo.bin.meta
). Z jakiegoś głupiego powodu postanowiłem utworzyć pliki, otwierając i zamykając strumień plików za pomocą Pythona:Z jakiegoś jeszcze głupszego powodu pomyślałem, że sprytnie było przetestować ten skrypt na katalogu na moim dysku twardym z kilkoma danymi osobowymi. Dopiero po uruchomieniu zdałem sobie sprawę, że zapomniałem faktycznie zmodyfikować nazwę pliku przed przesłaniem go do
open
i że właśnie obciąłem każdy pojedynczy plik w tym katalogu (ouch).Na szczęście było to na komputerze osobistym i nie spowodowało żadnej szkody w niczym ważnym, ale wciąż nauczyłem się mojej lekcji.
źródło
Pracowałem dla firmy, która zajmuje się obsługą klienta jednej z największych szwedzkich firm telekomunikacyjnych. Na naszym serwerze mieliśmy oprogramowanie, które regulowało kolejkę połączeń przychodzących, ile połączeń możemy odebrać i tak dalej. Jeśli to nie działało, nie otrzymywaliśmy żadnych połączeń, a klienci nie otrzymywali żadnego wsparcia.
Aaaaanyway, dokonałem (niewielkiej) zmiany w oprogramowaniu. Mógłbym poczekać na zmianę okna usługi, ale pomyślałem: „Hej, ponowne uruchomienie usługi zajmie minutę, po co zawracać sobie głowę. Fortuna sprzyja odważnym”. Więc uruchomiłem go ponownie, niestety wątek został zablokowany, więc nie mogłem go wymienić. Zaczynam wpadać w panikę i postanawiam szybko zrestartować komputer (byłem zdalny). Niestety w panice klikam „zainstaluj aktualizacje i zamknij system”: P
Nie trzeba dodawać, że w Szwecji nie było wiele pomocy technicznej przez następne pół godziny, zanim udało nam się ją ponownie uruchomić.
Kolega był jednak gorszy ode mnie. Pewnej nocy debugowaliśmy automatyczny system reagowania głosowego i przekierowaliśmy numer na jego komórkę. Jedyną rzeczą, o której zapomniał ją cofnąć, był dzień wolny następnego dnia i zostawił komórkę w pracy. Zastanawiamy się, dlaczego tego dnia ciągle dzwonił :)
źródło
źródło
Kiedyś kodując JS, nie byłem w stanie odróżnić „1” (jednego) od „1” „małego L”. Nawet gdy pisałem tę odpowiedź, oba wyglądają prawie tak samo w edytorze!
źródło
Stworzyłem język szablonów witryny , we wczesnej wersji, której wszystkie parametry HTTP zostały domyślnie rozwinięte jako zmienne. Oznaczało to, że możesz napisać URL taki jak:
I zrobiłby dokładnie to, na co wygląda.
Na szczęście nie mam użytkowników (westchnienie), więc myślę, że to nie było zbyt duże ryzyko bezpieczeństwa.
źródło
Zdecydowanie wpadka TSQL - zbyt wiele instrukcji TSQL w jednym oknie edytora. Był trochę zmęczony, a ludzie przeszkadzali mi w lewo i prawo, a ja wydałem polecenie, które zaktualizowało 47 000 rekordów adresów, miast, stanów i archiwów. Naprawiłem to jednak w około 25 minut.
źródło