Poprzedni wpis (Python 3.0 na wyciągnięcie ręki) | Następny wpis (Fall to Fragments)
Pokemony w natarciu
Do tej pory pracowałem przy poważnych aplikacjach dla poważnych ludzi. Aplikacje te sprawiały poważne problemy i walka z nimi była naznaczona ich powagą. No i kiedyś musiała nadejść ta chwila, że zająłem się aplikacją dla pokemonów — robię wyszukiwarkę dla jednego z serwisów przeznaczonych dla publiczności w wieku gimnazjalno-licealnym (tytułowe pokemony).
Byłem przygotowany na koszmarny, niczego nie przypominający język. Byłem przygotowany na wszelkie zbrodnie przeciwko ortografii, gramatyce i interpunkcji. Spodziewałem się dziwactw, które są w stanie wywalić w kosmos aplikację niezabezpieczoną przed wstrzykiwaniem SQL. Przeglądając dane z forum tego serwisu natknąłem się jednak na coś, co przesunęło moje granice percepcji.
Podczas próby indeksowania silnik indeksowy updarcie odmawiał przyjęcia pewnego zbioru danych twierdząc, że znajduje się w nich znak kontrolny Unicode o numerze 14, czyli Shift Out. WTF?! Skąd tam się wziął niedrukowalny (i niewprowadzalny z klawiatury!) znak kontrolny? Nie da się go wpisać, nie da się go wkleić w okienko do wprowadzania tekstu (tak mi się przynajmniej wydaje), bo nie można go też skopiować. Prawdę mówiąc zupełnie nie interesuje mnie, jak tamta aplikacja wpuściła ten znak do swojej bazy (to jest nazwa użytkownika, więc jest używana w wielu miejscach), za to interesuje mnie, jak ktoś go przeprowadził przez formularz HTML, żądanie HTTP POST i bibliotekę kliencką bazy danych (znak ten zapisany był w zwykłym polu znakowym typu varchar, nie powinien był tam się znaleźć bez odpowiedniego wyeskejpowania).
Wiele lat pracy z poważnymi aplikacjami przyzwyczaiło mnie do tego, że aplikacja jest linią frontu, na której muszą zostać powstrzymane śmiecie — powstrzymane lub zneutralizowane. W wyniku konsekwentnego chronienia rodowych sreber (dane) przed zalewem gówna, można mieć pełne zaufanie do danych aplikacji. No i okazało się, że są aplikacje, którym tak naprawdę jest wszystko jedno, którą częścią ciała szczekają psy...
Etykiety: praca prawda programowanie
Komentarze (3)
#2 Bartosz skomentował(-a) 16 lutego 2009 o 12:58
Znak kontrolny o numerze 14 jest wprowadzalny z klawiatury pod Windowsem. Wystarczy wprowadzić magiczną kombinację klawiszy ALT + 0014. Wynikiem
echo ^N | python -c "import sys; print [map(ord, line) for line in sys.stdin]"
gdzie ^N to wynik ALT+0014 jest [[14,10]].



#1 kr skomentował(-a) 9 grudnia 2008 o 23:57
Heh, zdarzyło mi się coś równie dziwnego (a może i nie..) Portal w Javie, pole "data urodzenia" - oczywiście walidator po stronie www, po stronie serwera, baza też ma swoje mechanizmy (ponoć) a jednak z jakiegoś powodu w bazie znalazła się data 19987-07-23 ... i żeby to jedna tego typu;) Ale jakby nie patrzeć w przeciwieństwo do znaku Unicode o kodzie 14, ta data jest poprawna.. albo będzie za ok. 18000 lat;) Inna rzecz, że backup nie chciał się działać - baza twierdziła, że daty nie są poprawne;) nc;)