Każdy błąd ma teraz numer
Zaczęło się od prostego pytania: co właściwie robi Moonlight Animate Studio, kiedy coś pójdzie nie tak?
Odpowiedź była niewygodna. Program pokazywał okienko z napisem „Błąd" i zdaniem w rodzaju „Nie udało się zapisać pliku". Użytkownik, który chciał to zgłosić, mógł napisać dokładnie tyle: „nie udało się zapisać pliku". My po drugiej stronie dostawaliśmy zdanie, które pasuje do kilkunastu zupełnie różnych sytuacji — braku miejsca na dysku, odłączonego dysku sieciowego, pliku otwartego w innym programie, uszkodzonego projektu. Nie dało się z tego nic wywnioskować.
Gorzej: przy naprawdę twardej awarii program po prostu znikał. Bez śladu. Dziennik zdarzeń istniał, ale tylko w pamięci — więc ginął razem z programem, dokładnie w momencie, w którym był potrzebny.
Numer, który znaczy zawsze to samo
Teraz każda awaria ma trwały numer: MA-IO-203, MA-ACC-503, MA-DOC-602. Numer opisuje
klasę problemu, więc ten sam błąd u każdego użytkownika, na każdym komputerze, ma ten
sam numer. To brzmi jak drobiazg, a zmienia całą rozmowę o awarii. Zamiast „nie działo mi
się zapisywanie" można napisać „MA-IO-102" — i to jest komplet informacji.
Numer jest widoczny w oknie błędu, w osobnym pasku, obok przycisku Kopiuj kod. Można go kliknąć i wkleić do zgłoszenia.
Samo okno też wygląda inaczej. Tytuł mówi, co się stało — „Nowszy format pliku", „Sesja wygasła", „Warstwa nie nadaje się do tej operacji" — zamiast bezużytecznego słowa „Błąd". Pod spodem jest krótka lista co zrobić, dobrana do konkretnej sytuacji. Niżej zwijana sekcja ze szczegółami technicznymi, dla tych, którzy chcą zobaczyć ścieżkę pliku albo odpowiedź serwera.
Strona, która tłumaczy numer
Numer bez wyjaśnienia byłby tylko ładniejszą wersją „Błąd". Dlatego każdy z nich ma własną stronę: howtodraw.pl/pomoc/bledy. Wpisujesz numer z okna, czytasz, co znaczy i co z tym zrobić. Strona jest publiczna i nie wymaga logowania — bo otwiera się ją dokładnie wtedy, gdy coś się zepsuło, a to najgorszy moment na proszenie kogokolwiek o hasło.
Ta sama lista jest w repozytorium programu, więc opis w oknie i opis na stronie nie mogą się rozjechać — pochodzą z jednego źródła.
Program zostawia po sobie ślad
Dziennik przeniósł się z pamięci na dysk. Zapisuje się w folderze użytkownika, rotuje, sam sprząta stare sesje i — co najważniejsze — przeżywa awarię. Jeśli program padnie, plik z ostatnimi zdarzeniami zostaje.
Zależało nam, żeby dało się go bezpiecznie wysłać. Dziennik usuwa nazwy użytkownika i tytuły projektów, ale zachowuje kształt ścieżki: widać, że plik leżał na dysku sieciowym, na OneDrive albo na pendrive. To brzmi jak szczegół, a jest sednem — większość zagadkowych błędów zapisu bierze się właśnie stąd, i wycięcie tej informacji zabiłoby całą klasę problemów, które dziennik ma pomóc znaleźć.
Do tego program wie teraz, że poprzednim razem padł. Odróżnia czyste zamknięcie od twardej awarii i po takiej awarii sam proponuje zgłoszenie. A jeśli coś jest na tyle zepsute, że program wywala się trzy razy pod rząd zaraz po starcie, wchodzi w tryb bezpieczny: bez wtyczek, bez przywracania układu paneli, z pełnym logowaniem. Zwykle winowajcą jest zapisany układ okien — jedno kliknięcie „Przywróć domyślne" i wszystko wraca do normy.
Czego numer nie dostaje
Świadomie nie numerujemy wszystkiego. Numer należy się temu, co zawiodło — nie temu, czego nie wypełniłeś. „Podaj ścieżkę pliku nagrania" zostaje zwykłym ostrzeżeniem. Gdyby każde niewypełnione pole dostawało numer, lista kodów rozdęłaby się do rozmiaru, w którym przestaje cokolwiek znaczyć.
Przy okazji tej pracy wyszło kilka rzeczy, których nie szukaliśmy. Jedno okno eksportu pokazywało ten sam tekst dla trzech zupełnie różnych awarii — nieudanego renderu, błędu kodera i braku prawa zapisu — a każda z nich wymaga czegoś innego. Eksport ścieżek do SVG wypisywał trzy możliwe przyczyny naraz, bo funkcja pod spodem nie potrafiła powiedzieć, która zaszła; teraz potrafi. Znalazł się też zapis, który przy zapełnionym dysku kończył się uciętym plikiem i komunikatem o powodzeniu.
To chyba najuczciwsze podsumowanie tej pracy: porządkowanie komunikatów o błędach jest najlepszym znanym nam sposobem na znalezienie błędów, o których się nie wiedziało.
Co dalej
Numery ma już rdzeń programu, obsługa konta i wszystkie panele. Zostaje jeszcze jedna warstwa — zrzut pamięci przy twardej awarii, żeby dało się odtworzyć crash, którego nikt nie umie powtórzyć na żądanie. To osobny temat i wróci w swoim czasie.
Jeśli trafisz na okno z numerem — skopiuj go i wyślij. Po raz pierwszy naprawdę wiemy, co z takim zgłoszeniem zrobić.