sobota, 30 kwietnia 2016

Artoooooor, Dziennik Superbohatera na wakacjach, 30.04.2016

- Chrrrrr... fiuuu...

Tak głośno chrapał mój budzik nie pozwalając mi zasnąć. A mimo to wiedziałem, że chciał mnie obudzić, jak co rano. Ale on sam nie wiedział, że jestem na wakacjach i go nie nastawiłem! Kiedy przyszła odpowiednia pora zemściłem się mówiąc:
- DRRRRRYŃ!
Budzik gwałtownie podskoczył, pokręcił nerwowo wskazówkami, zapytał mnie o godzinę i padł na tarczę. 10 minut później znowu powiedziałem:
- DRRRRRYŃ!
Teraz budzik przeciągnął wskazówki, zatoczył się na stoliku i powoli zaczął tykać. Nawet powiedział:
- tyk... tyk tyk... zieeeeeew... tyk... tyk...
Teraz to ja jestem górą!
- DRRRRRYŃ! - stwierdził kategorycznie budzik, na co odpowiedziałem:
- Aeosochozi?

Ech, to był tylko piękny sen. Przeciągnąłem się na łóżku, sprawdziłem, czy kołdra nadal ma właściwą liczbę wymiarów (wszystko się zgadzało) i wstałem. Swoją drogą - skąd oni wczoraj wzięli trójwymiarową? Nieważne - wyjrzałem przez okno od strony oceanu. Piękny dzień! Słońce powoli zaczynało oświetlać fosę z krokodylami basen bez krokodyli, a na niebie nie było ani jednego glitcha. Gdzieś na dalszym planie widziałem miasto, a za jego budowlami - ocean. O rany, ile mocy obliczeniowej musi zużywać samo jego falowanie... Podszedłem do drugiego okna. Zobaczyłem tam plantację bananów kanaryjskich. Jak wiadomo, te ze względu na zbyt dużą krzywiznę, która utrudnia działanie modelu fizyki we Wszechświecie (w wersji 1.6.4 i 1.7.10) nie są transportowane do Europy. Ma się to zmienić w wersji 1.8.1 Wszechświata, która będzie zoptymalizowana właśnie pod te owoce.


Ale robota nie mogła czekać - postanowiłem wykonać swoją pierwszą misję, czyli namierzyć i zlikwidować śniadanie. Zaraz... zapomniałem, ze mam wolne. Dzisiaj mogę po prostu je zjeść! Zabrałem Debugger Guna (jakoś czuję się niepewnie bez niego), ubrałem kraciastą zbroję super-informatyka i poszedłem do repozyto... na stołówkę.

Z jakiegoś powodu panowało tam dziwne poruszenie. Wokół jednego ze stolików kręciło się trzech fotoreporterów, którzy chwilę później zostali wyproszeni. Zobaczyłem, że siedziała przy nim jakaś dziewczyna. Niestety nie usłyszałem, kto to jest. Już miałem podejść i zapytać, ale... na szwedzkim stole zobaczyłem smażoną cebulkę w panierce. Dowiedzieć się, kto to jest, czy zjeść cebulkę? Dowiedzieć się, czy zjeść, dowiedzieć się... decyzja była zbyt trudna. To był czas, żeby podzielić się na wątki. Standardowo próbowałem użyć Runnable i Thread, ale... nie udało mi się to. Przed moimi oczami pojawiło się ORA-00019. Zaraz... dlaczego nie java.lang.InterruptedException, albo java.cośtam.CokolwiekInnegoException, tylko jakaś ORA? To było naprawdę niepokojące. Ale to później - teraz pozostała ważniejsza i smaczniejsza sprawa - cebulka w panierce. A właściwie nie została - ktoś zjadł ostatni kawałek. Poza tym w repo... na stołówce zrobiło się ciszej - Z Jakiegoś Powodu Sławna Dziewczyna już sobie poszła. Na szczęście ktoś uratował sytuację donosząc kolejną porcję smażonej cebulki. No nic - może dowiem się później, kto to jest.

Po śniadaniu postanowiłem rozprawić się z Lordem Errorem no tak, jestem na wakacjach - postanowiłem rozejrzeć się po okolicy. I zastanowić się, co na stołówce robił błąd ORA-00019. Idąc w stronę recepcji zobaczyłem kota. Wygrzewał się na słońcu po to, żeby za chwilę powoooli, przestępując z łapki na łapkę przejść metr dalej i znowu się położyć. Tej rasy nie da się pomylić. To musiał być Bullet Time! Jak wiadomo, takie koty spowalniają upływ czasu wokół siebie i w ten sposób mogą polować prawie nie ruszając się z miejsca. Oto schemat ich działania opracowany przez trzeźwych radzieckich naukowców:



Po kilkuset latach stały się jeszcze bardziej leniwe i z tego powodu spowalniają upływ czasu jeszcze mocniej. Niektórzy twierdzą, że można uzyskać tę rasę kładąc zwykłego kota przy grzejniku lub pod kołdrą, jednak nie zostało to potwierdzone eksperymentalnie. Ludzie wykorzystują je zwykle po to, żeby zdążyć na tramwaj - w obecności tego zwierzęcia pojazd potrafi czekać na przystanku nawet 20 minut (dla obserwatora z zewnątrz). Szkoda, że występują tylko na tej szerokości geograficznej - przecież tutaj nie ma zbyt wielu tramwajów. Ale ponieważ nigdzie mi się nie spieszyło, pogłaskałem mruczka i wyszedłem do miasta. Przez jego działanie wyszedłem z hotelu dwie godziny po śniadaniu (mimo, że dla mnie minęła jakaś minuta)!
Najpierw poszedłem wzdłuż ulicy równoległej do hotelu, potem skręciłem w stronę plaży. Ale upał... jest co najmniej ojejku_jak_dużo °C.



Fajne było otoczenie tej miejscowości - po stronie wewnętrznej do wyspy było widać góry. Według jednej z legend składają się z kodu źródłowego dodającego 2 + 2 i wyświetlającego wynik na ekranie. Program podobno został stworzony przez Wielkich Konsultantów, czczonych jako lokalne bóstwa. Najpierw ktoś napisał bibliotekę służącą do dodawania n cyfr. Ponieważ był w niej błąd, wezwano Wielkiego Konsultanta, który stwierdził, że kod jest za mało biznesowy. Oraz że ma zbyt mało enterprajsu i warstw abstrakcji. Po kilkudziesięciu latach wszystkie te warstwy utworzyły górę wielkości Śnieżki. Projekt cały czas jest w fazie realizacji, a każdy refactoring powoduje wybuch wulkanu. Tak jak mówiłem - lokalne legendy są dziwne.

Po drugiej stronie można było zobaczyć ocean... a właściwie to można go z trudem wypatrzeć. I to tylko, kiedy stoi się na uliczkach prostopadłych do plaży - we wszystkich innych miejscach zasłaniają go hotele. Właściwie to typowa miejscowość nadmorska. Z jednej strony restauracja/hotel, z drugiej dyskoteka, z trzeciej... zaraz... OracleDemonKleineKaffee? Dziwne. Kawiarenka była bardzo podobna do tej na lotnisku (może nawet identyczna, nie wiem) - niezbyt wysoka bryła o sześciokątnej podstawie, z okienkami na wszystkich bocznych ścianach i mrożących krew w żyłach cenach kawy. Tak, te ceny były na wszystkich ścianach - brrr... Oprócz tego zawierała dziwną metalową konstrukcję przymocowaną z jednej strony do dachu, a z drugiej do fortepianu wiszącego nad stolikami. Nad każdym okienkiem i na samym fortepianie było napisane "Playa de las Americas: wir debuggen der Welt". Musiałem to zbadać (nie napiszę przecież, że na stołówce zapomniałem napić się kawy).

Popatrzyłem na menu - pod typowimi pozycjami w rodzaju "Czarna jak piekło", "Latte niezbyt jak piekło" zobaczyłem Playa de las Americas: DBMS_DEBUG.debug_off() za -6 EUR. Kelnerka szybko zamieniła listę na inną mówiąc:
- Menu zawierało błąd... może spróbuje pan naszego Latte Pianoforte?
- 20 deko poproszę - odpowiedziałem. Dostałem kawę, a następnie spadło na mnie 20 deko fortepianu.
- Ojejku ORA-30683! Znaczy pianoforte debug error... znaczy... - zmieszała się kelnerka.

Podziękowałem, zapłaciłem, zwyciężyłem. I uciekłem w panice. Nie, to brzmiało jakoś inaczej. Ale udało mi się zapłacić i wyjść z kubkiem pełnym kawy. Zwycięs... co? Po drugiej stronie ulicy stały obok siebie trzy identyczne OracleDemonKleineKaffee. Z trzema identycznymi fortepianami. I kelnerkami. I konstrukcjami na dachu. I cenami. Pisałem już o kelnerkach? Chyba nie - i kelnerkami. Sytuacja była naprawdę dziwna - przecież nikt nie kupi napoju z kawiarenki w samym środku! Poza tym te fortepiany. Już chciałem zapytać w tej, z której wyszedłem, ale... został po niej tylko sześciokątny ślad na chodniku. Usłyszałem huk - fortepian należący do środkowej kawiarenki spadł na chodnik. Ledwo udało mi się nie wylać kawy.

Kelnerka zaczęła wciągać instrument z powrotem na metalową konstrukcję używając jakiegoś systemu bloczków i dźwigni. Szło to bardzo powoli, więc podszedłem jej pomóc - w końcu Debugger Gun pozwala na ustawienie dowolnej własności dowolnego obiektu (mimo, że ten model nie był optymalizowany pod obiekty muzyczne). Oddałem strzał w fortepian, ale... nie było żadnej reakcji. Na ekranie broni pojawiło się:
Warning: No ex3cutab1e c&de found in PL/SQL at line 666 at sys.utl_pianoforte. Dem&%$ Or*&^e.
Ciekawe, jakim gatunkiem muzyki jest PL/SQL. Tak czy siak po kilku minutach ciężkie drewniane pudło znalazło się w swoim początkowym położeniu. Wiedząc, czym to grozi odsunąłem się, na co kelnerka powiedziała:
- spokojnie, tu jest ustawiony warunek dla breakpo... ups... znaczy chce pan spróbować naszej kawy?
- break... co? - popatrzyłem na nią
- break... take a break i w ogóle...

Popatrzyłem na kawiarenkę na lewo, ale... ta zniknęła. Kelnerka z kawiarenki w środku chyba nic nie zauważyła, nadal uśmiechała się proponując kawę. Chciałem sprawdzić, czy w tej po prawej ktoś coś zauwazył, ale też zniknęła. W końcu odwróciłem się z powrotem do tej, przy której stałem, ale i po niej nie było śladu. Dziwne - przecież nie towarzyszył temu żaden dźwięk! Nie mówiąc już o tym, że nikt nie potrafiłby rozebrać takiej konstrukcji w kilka sekund. Poza tym break, break... co to może znaczyć? I dlaczego nie mają kawy bezfortepianowej? Pomyślałem, że najlepszym miejscem do poleniuchowania zastanowienia się nad tym będzie plaża. Zacząłem iść w dół jednej z uliczek przeciskając się między sklepami sprzedającymi puste tablice Karnaugh a lokalami serwującymi NTSCito - miejscowy drink z analogowego sygnału telewizyjnego. Co chwilę ktoś zapraszał do jednego z takich barów powtarzając zaprogramowane teksty. Dla zabawy zmieniłem jednemu "Banan, melon, ananas, kokos!" na "W szczebrzeszynie chrząszcz brzmi w trzcinie". W końcu udało mi się wyjść na plażę. Ustawiłem sobie FOV 20 (kąt widzenia 20°) i znalazłem wolny leżak.

Kiedy otwierałem konsolę aby wpisać z powrotem FOV 90, podszedł do mnie jakiś zagubiony fotoreporter. W jednej ręce trzymał aparat fotograficzny, w drugiej - karteczkę.
- Eeee... szukam głównego bohatera tego wpisu, mam z nim przeprowadzić wywiad. - powiedział i podrapał się po CPU.
- Jestem, mogę odpowiedzieć na kilka pytań. Może nawet zero! - powiedziałem. Reporter pokręcił głową zakreślając nosem okrąg o średnicy 10 cm, popatrzył na karteczkę i dodał:
- Nie, nie... zaraz, przecież ja szukam głównej bohaterki wpisu!
- Zaraz... Astroni? To przeskoczy pan kilkanaście linijek do góry... tylko ostrożnie, proszę nie wywołać paradoksu we wcześniejszych akapitach, niech pan udaje przecinek... i może pan wskoczyć do wpisu HTMLady. - doradziłem mu.
- Nie, nie Astroni... o, już widzę! - i poszedł sobie.

Tak, na pewno uda mu się przeprowadzić wywiad z kimkolwiek, przecież on nie znalazłby okularów na własnym nosie... ale zaraz, o jakiej bohaterce wpisu mówił? E, na pewno coś mu się pokręciło. Nie moja sprawa. Poszedłem w stronę leżaka, położyłem się na nim, a potem wysłałem breakpointa z Debugger Guna po drinka. Ech, zapomniałem, że tutaj z jakiegoś powodu nie działają. Podniosłem się, poszedłem do baru po NTSCito i wróciłem na leżak. To jest życie! Popijałem napój z 525 linii i zacząłem się zastanawiać nad zjawiskami. Fortepiany. Kawiarenki identyczne, jak na lotnisku. Ciekawe, czy to mogły być... hmmm... Niedziałający Debugger Gun. Czterdziestoboczny sześciokąt w Berlinie. I przerażający brak ciastek francuskich. W końcu... jakaś bohaterka tego wpisu? Oprócz tego menu w kawiarenkach - czy ta jedna pozycja mówiła o Playa de las Americas? I czy same kawiarenki zawierały tę nazwę? Musiałem tam pójść, żeby czegoś się dowiedzieć. Wypiłem NTSCito do końca - smakowało bardzo analogowo, aż przez chwilę szumiało mi w głowie.

W końcu wstałem i ruszyłem wzdłuż brzegu na południe, w kierunku Playa de las Americas. To całkiem blisko, około pół godziny drogi na piechotę. Szedłem całkiem zwyczajnym deptakiem między plażą, restauracyjkami serwującymi klasy z lokalnych języków programowania i maszynami wirtualnymi z trampolinami do skakania. Pół godziny później powinno być widoczne miejsce, do którego szedłem. Zamiast tego trafiłem do El Errór - przynajmniej tyle odczytałem z tabliczki mówiącej o nazwie miejscowości. Wyglądało to raczej jak przedmieścia - tu domki, tam sklepiki sprzedające przyciski do wyłączania Wszechświata - norma. Gdzie by tu... o - zobaczyłem pizzerię. Pizza sin Oracle - Pizza bez Oracle - dobra nazwa. Robiłem się głodny, a w środku na pewno zjem Playa de las Americas a przy okazji dowiem się, jak iść do pizzy hawajskiej. Albo odwrotnie.
Okazało się jednak, że... pizzy hawajskiej nie ma.
- Niestety, ale tylko Oracle Pizza ma licencję na hawajską. Nie możemy jej przygotowywać, - powiedział kelner.
- Oracle Pizza... zaraz, ale ta pani ma właśnie taką pizzę! - wskazałem na stolik, przy którym siedziała... zaraz, ta sama dziewczyna, którą widziałem na stołówce?
- Aaaa... to Mary Sue, ona zawsze dostanie pizzę hawajską - nawet jeżeli w opowiadaniu nie powinno takiej być.
- Zaraz... Mary Sue? - zapytałem.
- No tak, bohaterka wpisu! - odpowiedział zdziwiony kelner.
- Chwila, to ja jestem głównym bohaterem wpisu... - powiedziałem, a mój WTF po tym wszystkim zyskał własną świadomość i stanął obok mnie.
Było to nawet przydatne - WTF dopytywał o pizzę i drogę do Playa de las Americas, a ja podszedłem do Mary Sue. Stwierdziła, że jest główną bohaterką tego wpisu i to, jakie ma plany:
- No... to pójdę gdzieś, znajdę siedzibę Demona Oracle i go pokonam! Proste, hihihi!
- Ale zaraz... tak po prostu? Zobacz, to będzie za łatwe! Jeżeli tak po prostu wszystko po kolei ci się uda, wpis będzie nudny - odpowiedziałem.
- No jak to, zawsze działało! - zdziwiła się Mary Sue.
- Musi być jakaś intryga, jakieś zaskoczenie i jakieś... w ogóle. - próbowałem ją przekonać.
- To nie wystarczy zejść na śniadanie? - zapytała rozmówczyni.
- Ech... i nawet nie pytam, skąd wiesz o Demonie Oracle. Zaraz, przecież to tylko legenda!
Kelner akurat przyniósł pizzę zamówioną przez WTFa. Pizza z brzoskwiniami - prawie taka sama jak hawajska. Ta jednak była na licencji Open Source, więc był do niej dołączony przepis. Oraz licencja mówiąca, że produkt jest dostarczany "taki, jaki jest" bez żadnych gwarancji.
- Okej - ale to ja jestem bohaterem tego wpisu... - powiedziałem.
- A nie, bo ja! Jako Mary Sue przejmuję ten wpis!
- Ech... no dobra... umówmy się, że jesteś bohaterką wpisu, ale... - musiałem szybko coś wymyślić - w poniedziałek 11 stycznia, jeżeli akurat wypadnie dzień po nowiu. I ja jestem narratorem. - zaproponowałem.
Mary Sue pomyślała chwilę - widać, że było to dla niej nowe doświadczenie - po czym powiedziała:
- Zgoda!
Niestety zapomniałem, że właśnie był poniedziałek 11.01.2016, a nów był dzień wcześniej. Zjedliśmy pizzę i wyszliśmy (WTF płacił).
- To jakoś... też trafiłaś na taką dziwną kawiarenkę? O niemieckiej nazwie? OracleDemonSchiessen... nie, to tak nie brzmiało... OracleDemonKleineKaffee. - zapytałem nowej bohaterki wpisu towarzyszki.
- A nie, ja dzisiaj tylko zeszłam na śniadanie, a potem postanowiłam uratować świat. Potęgą...
- Ech... sprawdźmy Playa de las Americas. - przerwałem jej.

Ruszyliśmy w stronę wskazaną przez WTFa i faktycznie po jakichś dziesięciu minutach dotarliśmy do tej miejscowości. Podobnie jak Costa Adeje ta też była nastawiona na turystów. Można tutaj wypocząć w hotelu java.util.List, w którym nigdy nie brakuje pokojów. Ostatnio doszedł konkurencyjny super_hotel TABLE OF obj_room. Oprócz tego mnóstwo restauracji serwuje dania z egzotycznych języków programowania - łącznie z Brainfuck Chili dla szukających mocnych wrażeń. Jednak największą atrakcją miasta jest kolejka górska po wykresie z JVisualVM. To, jak wagonik wznosi się w miejscu, w którym program tworzy obiekty i nagle spada tam, gdzie działa garbage collector jest podobno niezapomniane. I za każdym razem inne - zależnie od tego, który program będzie akurat profilowany.



Postanowiliśmy - oczywiście w ramach rozpoznawania terenu - przejechać się tą kolejką. W sumie i tak żadne z nas nie miało planu. W czasie drogi do tego miejsca opowiedziałem Mary Sue o kawiarenkach, Debugger Gunie i sześciokącie w Berlinie. Stwierdziła:
- Właściwie to widziałam jedną taką niemiecką kawiarenkę. Ale zniknęła zanim dostałam kawę.
- A czy miała jakiś instrument muzyczny... taki na przykład... fortepian? - zapytałem.
- Faktycznie, był tam taki. Ale jak ktoś miałby na nim zagrać, skoro ten wisiał nad krzesełkami? A potem ktoś zamówił piosenkę takiego zespołu... no, ostatnio leci w radiu! Demes Debug, czy jakoś tak... to lokal zniknął.
- DBMS_DEBUG?
- O, też ich słuchasz?
- Powiedzmy.

Dotarliśmy do samej kolejki. Na przejażdżkę czekało już około 256 osób - trochę słabo. Mary Sue akurat miała przy sobie bilet VIP (no co za niespodzianka), więc weszła od razu, a ja odpuściłem sobie czekanie. W końcu w Europie mamy kolejkę górską na wykresie wahań kursu Bitcoina, to jest dopiero czad! Zamiast tego po prostu popatrzyłem z dołu, jak ona jeździ. Wygląda na to, że ktoś uruchomił IntelliJ, bo wykres zakręcał najpierw do góry, a potem po działaniu garbage collectora ostro w dół. I tak na przemian. Wagonik ruszył i zaczął jechać po wykresie. Tymczasem ja rozejrzałem się trochę. Obok sznurka czekających była kasa biletowa, sklepik z pamiątkami i... OracleDemonKleineKaffee. Nawet mnie to nie zdziwiło. Postanowiłem sprawdzić pewną teorię. Podszedłem trochę bliżej (ale pozostając poza zasięgiem fortepianu).
- czym mogę Oracle... znaczy czym mogę służyć? - zapytała ker... kelnerka.
Postanowiłem sprawdzić pewną teorię:
- DBMS_DEBUG.debug_on() na miejscu! - w tym momencie fortepian przyczepiony do dachu zaskrzypiał. Dodałem:
- Latte tylko bez pianki poproszę! - powiedziałem wywołując błąd CAFE-123: . UWAGA: nie próbujcie tego w domu. Poza domem też. W tym momencie fortepian spadł na ziemię. Dokończyłem:
- poproszę DBMS_DEBUG.debug_off().

W tym momencie kawiarenka zniknęła potwierdzając moją teorię. Breakpointy! Tylko dlaczego przybierają taką postać? W normalnym środowisku są na tyle lekkie, że można je wystrzeliwać z Debugger Guna. A tutaj przybierają formę kawiarenek z fortepianami. Jakie środowisko programistyczne może wymagać takich strasznych środków? Czyżby... PL/SQL? Nie, to niemożliwe... chociaż może... Poza tym - czy to oznacza, że ten kawałek wyspy jest debugowany? I przez kogo, a przede wszystkim - po co? Czy ten ktoś nie ma urlopu?
Chwilę później Mary Sue wróciła z przejażdżki i powiedziała:
- Ale czad! I akurat byłam milionową klientką, więc wygrałam drugi bilet VIP...
- Później, teraz coś ci pokażę - odpowiedziałem, a następnie dodałem - DBMS_DEBUG.debug_on()!
Przede mną pojawiła się OracleDemonKleineKaffee.
- A teraz DBMS_DEBUG.debug_off() - lokal zniknął.
- Hihihi, ale fajne! DBMS_DEBUG.debug_on()! - Mary Sue zaczęła bawić się poleceniami debuggera.
Po którymś z kolei wyłączeniu i włączeniu kawiarni zamiast kelnerki pojawiła się Kate Bush. Po kolejnym - wyraźnie wkurzony Lord Error. Czyli wszystko w normie... zaraz, co? Spojrzałem jeszcze raz - tak, to był Lord Error. We własnej glitchowości.
- Co podać - format C:\, czy może fortepian? - wycedził przez zęby.
- Poproszę kod spaghetti przyprawiony refactoringiem - powiedziałem, żeby trochę rozładować sytuację. Chyba pomogło, bo Lord Error uśmiechnął się złowieszczo i powiedział:
- HAHAHA, mamy tylko fortepian! Podwójna porcja dla tego pana HAHAHAHAHA! - wtedy zwolnił mechanizm przytrzymujący instrument muzyczny.
Wykorzystując swój spryt, umiejętności taneczne i mnóstwo dobrej zabawy uniknąłem pocisku typu "Ziemia-muzyka". Ale Lord Error powiedział:
- MOCY ORACLE i DBMS_DEBUG, PRZYBYWAJ!
W tym momencie dookoła mnie i Mary Sue pojawiło się pięć OracleDemonKleineKaffee.
- HAHAHA! I kto jest teraz bugiem, a kto debuggerem? - zapytał przeciwnik.
Szkoda, ze nie dał mi czasu na odpowiedź, to było bardzo ciekawe pytanie. Musiałem działać, a byłem otoczony. Przez kawiarenki. W jednej z nich siedział Lord Error, w innych kelnerki. Żeby zyskać na czasie, zamówiłem:

SELECT * FROM kawa k
JOIN filiżanki f ON f.materiał = k.ziarnista
JOIN tramwaje_szczecińskie t ON t.linia <= k.zawartośćKofeiny.



Ha! Bezsensowne JOINy na nieindeksowanych kolumnach musiały spowolnić fortepiany. Zauważyłem, że razem z nimi... cała okolica na chwilę się zatrzymała. Razem z Mary Sue uciekłem poza kawiarniany krąg.
- grrrr... znowu breakpoint musiał się zaciąć... sprawdzę, a potem was pokonam! Hahah... - powiedział Lord Error zaglądając pod fortepian i sprawdzając mechanizm.
W tym czasie zapytanie skończyło się wykonywać, więc na przeciwnika spadł instrument, 3000 filiżanek kawy i jeden tramwaj szczeciński, który spełniał warunek zapytania (tak, Swing linii numer 2). Ups. Jednocześnie ludzie w okolicy jak gdyby nigdy nic wrócili do swoich zajęć. Lord Error nieco poobijany wrócił do swojej kawiarenki i powiedział:
- jeszcze zobaczycie, kto tu komu zrobi kawę! Pianoforte Espresso Debug! Na wynos! - powiedział... no wiadomo, kto. Fortepian przyczepiony do dachu poleciał w naszą stronę.
- A nie, bo na miejscu! - powiedziała Mary Sue. Fortepian zawrócił w stronę Lorda Errora. - hihihi, akurat wczoraj przeczytałam "Pokonywanie Lorda Errora: dla opornych"!

Pocisk muzyczny kompletnie zdemolował kawiarenkę powodując ORA-12541: TNS: No listener. Spowodowało to zniknięcie wszystkich lokali. I niestety całej kawy z nich (tak, już chciałem podejść i wziąć którąś z ostatniego zapytania). Lord Error tylko wstał, otrzepał się z tramwaju (który w obecności Jego Bugowatości zyskał konsystencję herbaty i ujemną masę), powiedział, że coś nam jeszcze pokaże i poszedł.




Poszło łatwiej, niż sądziłem - w nagrodę postanowiliśmy wykorzystać bilety VIP (akurat dwa) wygrane przez Mary Sue. Ustawiliśmy się w kolejce do kolejki wykresowej.
- Hihihi, kto to był? - zapytała.
- Powiedzmy, że stary znajomy. Mamy sqrt(200) niewyrównanych rachunków. Za prąd. - odpowiedziałem.
Po jakichś 16 minutach dotarliśmy do wejścia. Pilnował go strażnik, który wydał mi się jakiś dziwny. Chyba zwykle pracownicy rollercoasterów nie noszą czerwonej peleryny. I nie mają transakcji bazodanowej w ręku.
- Haha... wy nie przechodzicie - powiedział.
- A niby dlaczego? - zapytaliśmy.
- Najpierw wytłumaczcie się z tych kawiarenek! - pokazał w stronę miejsca, w którym zaatakował nas Lord Error.
- Eeee... tam nic nie ma... - odpowiedziałem.
- SELECT * FROM kawiarenki AS OF 16 minut temu WHERE miejsce = tuż za wami! - wypowiedział Ktoś używając pewnych dwóch słów kluczowych. AS OF pozwala wykonać zapytanie tak, że zwróci stan z określonej chwili w przeszłości. Jest to charakterystyczne... dla baz danych Oracle. W miejscu walki pokazał się półprzezroczysty obraz kawiarenek.
- Wow! Użyłeś Oracle Flashback. Kim ty do stu błędów jesteś? - zapytałem.
- A nie powiem, taki będę. Powiem tylko, że zamierzam opanować...
- ... świat i w ogóle. Jasne, wszyscy tak mówią - powiedziała Mary Sue.
- I tu się mylisz - w ogóle już opanowałem! A wy popsuliście mi dzisiaj już kilka breakpointów. Odpowiecie za to! - powiedział... ktoś. To dziwne, nie byliśmy w żadnym teleturnieju, w którym trzeba było odpowiadać na pytania.
- Ale po co ustawiać je na Teneryfie? One chyba służą do debugowania kodu PL/SQL?
- Haha, kombinuj dalej. Szkoda tylko, że nie zdążysz wymyślić odpowiedzi... SELECT * from kowadło JOIN Artoo... - Tajemniczy Ktoś zaczął wypowiadać zapytanie SQL.
- SELECT Przeciwnik JOIN gili-gili JOIN hihihi FROM dual - powiedziała Mary Sue.
Połączenie gili-gili i naszego przeciwnika sprawiło, że ten ostatni pomylił liczbę 'o', przez co ORA-00942 spadło mu na głowę. Zaraz, skąd on znał mój pseudonim? Ale nie miałem czasu go o to pytać, zresztą dość niechętnie odpowiadał.
- UPDATE monsters SET type='Funny Kitten' WHERE enemy = 'Artoooooor' - uderzyłem. Przeciwnik (i Lord Error prawdopodobnie też) zaczął zmieniać się w kotka. Czyżby się udało?
Ale w ostatniej chwili powiedział:
- ROLLBACK;! I lepiej nie wchodźcie mi już w drogę!

Wtedy na niebie pojawił się piorun, obraz się rozmył i... zacząłem się cofać. Widziałem wydarzenia z dzisiejszego dnia tak, jakby ktoś przewijał kasetę do tyłu. W ciągu kilku sekund zobaczyłem pizzerię Sin Oracle, a potem plażę w Costa Adeje. W końcu wylądowałem na leżaku i przed oczami zobaczyłem napis:
ROLLBACK COMPLETE (6,66 s)

Auć, to bolało. I co gorsza - oznaczało, że byłem cały czas wewnątrz transakcji bazodanowej. Robiło się już ciemno - no tak, rollback nie mógł cofnąć czasu systemowego - jego możliwości kończyły się na przywróceniu danych do stanu sprzed transakcji. Było już za późno, żeby dotrzeć drugi raz do Playa de las Americas. Zresztą i tak ktoś w tej miejscowości mnie nie lubi i znowu zastosuje rollbacka. No nic - pozostało wrócić do hotelu, a następnego dnia kupić trochę savepointów i commitów w supermarkecie. Na pewno je tu sprzedają. Bohatersko stwierdziłem, że Mary Sue zawsze sobie poradzi, więc nawet jej nie szukałem.

Zacząłem iść w stronę hotelu. Tym razem nie szedłem tą samą uliczką, którą trafiłem na plażę, ale drogą równoległą do niej. Wyobraźcie sobie, że w jednym ze sklepów można było kupić trzy nulle w cenie dwóch. A w konkurencyjnym naprzeciwko - odwrotnie. Nie mogąc zdecydować, czy kupić 2 * 0 za 3 * 0, czy 3 * 0 za 2 * 0 po prostu poszedłem dalej i po dziesięciu minutach byłem w recepcji. Dojście do pokoju zajęło mi mniej czasu, niż poprzednim razem - między innymi dlatego, że Minotaur, którego rozśmieszyłem wczoraj, jeszcze się śmiał i mogłem przejść obok niego. I tak, jak przewidywałem - akurat do swojego pokoju (tuż obok mojego...) wchodziła Mary Sue stwierdzając, że jeżeli nie może teraz zejść na śniadanie, to ona idzie spać.

Ja miałem tylko nadzieję, że rollback nie zamienił mi kołdry z powrotem na trójwymiarową. Nie zamienił - może dlatego, że wyprodukowała ją PRAGMA AUTONOMOUS TRANSACTION & CO. Z.O.O S.A. CORP. I SPÓŁKA. Położyłem się na kołdrze i przykryłem łóżkiem... AUĆ, odwrotnie! Po zamianie warstw miejscami leżałem na kołdrze i łóżku... ech, znowu nie tak. Kolejna permutacja okazała się właściwa. Ustawiłem budzik (tym razem nie włączałem Kaszpirowski Mode) i zawinąłem się w tylu wymiarach, ile trzeba.

Co na tej wyspie robi Lord Error? I kim u licha jest gość, który nie wpuścił nas do kolejki, wykonał rollbacka, a w dodatku znał moją ksywkę? A przede wszystkim - kto i po co przepisał kawałek miasta z Javy na PL/SQL? Co gorsza - może nawet więcej... całe miasto... a może nawet wyspę? To byłoby straszne, ale na szczęście niemożliwe. Dlaczego ten królik lata na kolorowym tosterze w chmurach - w dodatku wyłączonym?
ERROR: Wykryto sen. Koniec zapisu.
Myślozapisywacz v.3.5 SHAREWARE: kliknij przycisk "NUKE", aby kontynuować.

Ogłoszenie specjalne

Życzę pewnej superbohaterce Astroni wszystkiego, co wyjątkowe, dziwne i mruczące. Powodzenia przy "Opowieści o pierścionku", oppa Elsen Style, tłumaczeniu OFF (na ON), rysowaniu, tłumaczeniu Doctora na Who i wszystkim innym. I więcej, niż 20 deko poproszę.
PS. Jakiegokolwiek podróżnika w czasie, który zobaczy ten wpis proszę o dostarczenie go na 3 tygodnie temu.
Źródła obrazków:
* Rysunek kota: http://funkydiva.pl/2012/04/18/kolorowanki-kot/
* Mysz z rysunku kota: http://opengameart.org/content/mouse-basemesh
* Dla Opornych (angielski oryginał): http://www.flipmytext.com/generators/dummies/
* Dla Opornych (polska wersja): http://www.sp-dmr.pl/dmr-dla-opornych-czyli-co-kazdy-radioamator-powinien-wiedziec-o-sieci-ham-dmr/
* Termometr: http://www.thelocal.es/20130611/spanish-street-thermos-clock-wrong-temperatures
* Czcionka 7-segmentowa/14-segmentowa do termometru: http://www.keshikan.net/fonts-e.html
* Rollercoaster (wagoniki): http://www.gettyimages.com/detail/illustration/people-on-a-roller-coaster-sales-chart-stock-graphic/158935344

1 komentarz:

  1. Kawiarenka jako debuger z breakpointami-fortepianami debugująca wyspę?! To... to straszne! Okropne! Cokolwiek oznacza! P A N I C!

    "Program podobno został stworzony przez Wielkich Konsultantów"... Tych, którym nie powinno być dane dotykać Wielkiej Klawiatury Przeznaczenia? Bo inaczej świat spowije Apokalipsa Kodu Spaghetti? Coś słyszałam, faktycznie...

    Kelnerka (kernelka?)! Sprytne! To na pewno jedna z instancji Lorda Errora! Albo fortepianu! Ewentualnie pianina.

    "take a break i w ogóle"... To musiało mieć coś wspólnego z Kitkatem. Kitkotem. Tym z rasy Bullet Time.

    NTSCito - piłam, piłam! Szkoda, że w Polsce analogowy sygnał już nie jest dostępny i żeby się go napić, trzeba jeździć tak daleko.

    Ooooo, wywiad z... z Astroni? <rozgląda się> Zaraz, gdzie ona polazła. W każdym razie ja chcę skrypt. Chcę zobaczyć, jak odpowiadałabym na pytania.

    I chcę przycisk do wyłączania Wszechświata - kupisz mi jeden na pamiątkę? :>

    Ah, Mery Sue! Typowe, współczynnik ich fluktuacji jest niezerowy w każdym wszechświecie. Naturalne, że któryś nowszy, który trafiłeś, miał tego update'a.

    Potęgą... z dupy wziętą? Tak, wiedziałam, każda taką ma. Tylko nazywa to jakoś inaczej... Aaa, no tak! Potęga książki Pokonywanie Lorda Errora: dla opornych! He!

    OdpowiedzUsuń