Béton brut

2013

Życie odmierzane jest coraz krótszymi odcinkami czasu. Kiedy porzuciliśmy zbieractwo i polowanie na rzecz rolnictwa i hodowli zwierząt, nasz czas przecinały pory roku. Kiedy sadzić, kiedy zbierać. Na krańcach zmian pór roku rozmaite religie umieściły swoje obrządki; jeśli nie przebłagamy bogów, którzy wciągają słońce na maszt nieba, to zima może się nigdy nie skończyć. Wtedy nie wiedzieliśmy jeszcze o tym, że nieba nie da się przekonać, przebłagać i przestraszyć. Że kręci się jednostajnie, z uporem, że po zimie przychodzi wiosna bez całopalnych ofiar.

Mijały lata, nauczyliśmy się oswajać zimno, postawiliśmy trwałe budynki, przez okna których nie wciskał się wiatr. Sztuczne światło zastąpiło oczekiwanie na równonoc, ciepło pieców rozproszyło mordercze mrozy zimy. Byliśmy miejskimi zwierzętami, nasz cykl pomiędzy życiem a śmiercią zamykał się teraz w miesiącu. Pomiędzy wypłatą a wypłatą.

Zbudowaliśmy jeszcze lepszy świat. Świat nagradzający tych, którzy oddali się mu umysłem i ciałem. Odmierzaliśmy pięć dni i dawaliśmy nura w hedonizm. Weekenders.

Uzbroiliśmy się w telefony. Decyzje zapadają w godzinę. Faksujemy umowy, przemierzamy kraje. Potem godzina telewizji przed snem.

Systemy informatyczne odpowiadają pięć razy szybciej niż trwa mrugnięcie okiem, 400 milisekund.

Za następne 4,40646031 × 10^16^ mrugnięć.


Chciałbym powiadomić

Czy powinno się naśladować „realny świat” podczas projektowania aplikacji? Ofiary programów obitych „skórą”, których nawigacja jest „rozsypana” po wyłożonej panelami podłodze, które dotykają idealnie płaskiego ekranu celem „przekręcenia potencjometru na 11”, zawołają głośno, że nie, nie wolno. Potem dostaną coś na uspokojenie i będą mogły wrócić na terapię.

Poprawną odpowiedzią na to pytanie jest: „To zależy.”

Podczas udzielania tak głębokiej odpowiedzi najlepiej jest pocierać brodę i patrzeć wzrokiem widzącym sto lat do przodu. Nadaje to odpowiedniej powagi stwierdzeniu, które jest odpowiednikiem „nie wiem” dla tchórzy.

Do rzeczy: potrzebuję czasem stuknąć użytkownika w ramię i powiedzieć mu coś na ucho. Zostawić mu liścik, przesłać całusa. No, wysłać powiadomienie. W projektowaniu systemu powiadomień nie ma niczego skomplikowanego, prawda? Treść, do kogo i czy już była widziana. Proste. Banał. Zrobiłem.

Czasem przytrafi się sytuacja, kiedy napisany przeze mnie system oszaleje i nie potrafi sobie już sam pomóc. Kiedyś wyświetlałem błąd w nadziei, że zanim ja skoczę na ratunek, użytkownik wyciągnie wniosek z komunikatu i spróbuje iść dalej bez mojej asysty. Moje marzenia zostały przecięte serią e-maili o tym, że „jak klikam, to wyskakują bzdury”. Teraz zawracam nieszczęśnika na stronę główną, wysyłam sobie e-mail z trackbackiem i stosem, a użytkownika uspokajam przez powiadomienie, że już wiem, żeby napił się kawy i że w ogóle jest w dobrych rękach.

Nie minęło nawet kilka dni, kiedy podczas jednej z poprawek udało mi się doprowadzić do sytuacji, w której kod obsługujący wyjątki miał wyjątek. To oczywiście zbudowało fantastyczną kolejkę powiadomień zawierających informację o tym, że „nic się nie stało”.

Część użytkowników czekało sto kliknięć (lub po 30 sekund na automatyczne wygaszenie się informacji razy sto), żeby mogli się pozbyć żółtej ramki mówiącej, że nic się nie stało. Słabo. I teraz dochodzimy do tezy o „projektowaniu jakbyśmy byli w pubie”.

Gdyby podczas naszej wizyty w toalecie znajomy pytał się o ciebie innego znajomego kilka razy, to czy po powrocie przekazanie tej wiadomości wyglądałoby tak:

„Hej, był tu jakiś łoś, z pięć razy się o ciebie pytał”

czy

„Hej, był tu jakiś łoś”
„Hej, był tu jakiś łoś”
„Hej, był tu jakiś łoś”
„Hej, był tu jakiś łoś”
„Hej, był tu jakiś łoś”

Pierwszą modyfikacją kodu było grupowanie zdarzeń.

Kiedy napisałem nowy moduł komunikacji, wymyśliłem sobie, że można informować o wysłanych wiadomościach. Wcześniejsza modyfikacja okazała się trafić na wyboiste skały mojego braku wyobraźni i kompetencji. Przenieśmy się do naszego hipotetycznego pubu. Tym razem, walcząc z fobią społeczną, jesteśmy przedstawiani grupie osób.

„Poznajcie się: to Pan X, Pan X′ i Pan X″”
W mojej wersji byłoby to:

„Poznajcie się: to Pan X”
„Poznajcie się: to Pan X′”
„Poznajcie się: to Pan X″”

Żeby zrobić to dobrze, nie wystarczy po prostu sprawdzać, czy treść komunikatu, który chcemy zapisać, nie jest identyczna z ostatnią. Nie w sytuacji gdy mamy zmienną. Dodałem do kodu obsługę tagów dla zdarzeń i teraz, grupując, widzę serię E_HELLO i jako treść część zmienną — nazwiska. Mogę już przedstawić się jednym tchem.

Byłem zadowolony. Dopisałem sobie malutkie narzędzie, którego mogę używać do powiadomienia użytkowników o różnych rzeczach: „Za kwadrans konserwacja, baza będzie niedostępna”, „Proszę zamykać stare wydarzenia, bo mi się indeks urwie”, etc.

Moje pierwsze użycie było związane z przenosinami serwera. Ostrzegłem, że od 18. do dnia następnego system jest martwy i już. Pisałem to w piątek, prawdopodobnie po 17. Część ludzi pracuje do 16.

Zgadliście już? Tak, w poniedziałek rano otrzymali informację o tym, że dziś po 18. nie ma systemu do jutra. Byli słusznie oburzeni, że im się w poniedziałek i wtorek takie rzeczy robi.

Jeżeli informacja ma jakąś logiczną datę przydatności do spożycia, to powinno się ją po cichu schować po tej dacie. Ludzi po powrocie z urlopu nie interesuje brak dostępności sieci spowodowany faktem, że operator ISP się opił i wpadł w kable.

Z tym nie pójdziemy już do hipotetycznego pubu; sytuacja wymknęła się spod kontroli. Jesteśmy na hipotetycznym pogrzebie. Twoim własnym. Wypadek samochodowy. Ktoś informuje zebranych:

„Dwa tygodnie temu też wsiadł pijany”
„Hej, był tu jakiś łoś”
„Hej, był tu jakiś łoś”


Skutki bycia ekstremalnie zajętym

To był bardzo męczący rok. Z wielką radością złożę jego truchło na stos i rzucę zapałkę. Siedzę teraz przy komputerze i próbuję ogarnąć ostatnie tematy zanim ludzie rozejdą się do domu, a ja będę mógł w spokoju przycupnąć sobie z drinkiem, wyobrażam sobie pierwszych pijanych wujków i kolejki po karpia w których utknęliście.

Mam kilka marzeń. Jednym z nich jest napisanie bardzo dobrej gry tekstowej. Rysuję sobie czasem schematy takiego silnika do tekstówek 1 i marzę, że znajdę czas. Dziś moje zmęczenie i zniechęcenie osiągnęło apogeum, uciekłem więc w bezmyślne „googlanie” różnych problemów, których rozwiązania nie szukam.

Jak sprawdzić rozmiary terminala bez używania curses? Aha, ciekawe czy działa. Działa. To dopiszę jeszcze coś. Ha ha.

I tak z minuty na minutę zrobiłem to, co zrobiłem. Najlepiej zmarnowane 30 minut tego tygodnia.

ssh hi@tiny.magt.pl [hasło: hello]

screenshot_ssh_blog

PS. pluje w UTF8, ale bez kontroli, mój developerski serwer dostał ciężkiego zapalenie locales i jestem w trybie idontknowwhatimdoing.jgp

  1. wiem, że są. Chcę tego użyć jako zaczepki do nauki nowego języka programowania, więc NIH jest zupełnie usprawiedliwiony!

Znikające e-maile

Przepraszam wszystkich, którzy pisali do mnie e-maile w przeciągu ostatnich dwóch tygodni. Przyszło ich więcej niż zwykle, a ja — będąc obecnie cyfrowym nomadem — wpadłem na pomysł złapania wszystkich moich kont pocztowych w brzuchu Thunderbirda. Zawsze mogłem znaleźć czas na odpisywanie w autobusie czy pociągu. Niestety, ustaliłem właśnie, że znaczna część tych e-maili wyparowała, prawdopodobnie w wyniku konfliktu konfiguracji, którą składuję w Dropboksie.

Przeczołgałem się przez IMAP-owy śmietnik i wyciągnąłem to, co mi się nawinęło. Jeżeli nie otrzymasz odpowiedzi do jutrzejszego popołudnia to znaczy, że Ameba się nażarła. Proszę więc o powtórkę i natarcie mi uszu.

PS. Tak rzadko używam blożka do komunikowania się ze światem, że czuję niemal dreszcz emocji pisząc taki krótki tekst, który nie ma wartości dla postronnego obserwatora i nie został przepuszczony przez baczność Szanowną Panią Redaktor /baczność.


Non_omnis_moriar.doc.gpg

Obchodziliśmy niedawno święto ciętej dyni i gumowych masek. To dobry czas, żeby porozmawiać o umieraniu. Nie śmierci kulturowej, nie śmierci w wymiarze metafizycznym, nawet nie o samym fakcie gnicia. Porozmawiajmy o tym, co się dzieje, kiedy wyciągniesz nogi, a jesteś jednym z nas, szczęśliwców - kowalem własnego losu, samozatrudnionym ekspertem, wolną lancą, szybkim jak strzała blogerem.

W oczach świata składasz się ze starszego i młodszego bitu, z cyfrowych pierdnięć w światłowód, jesteś trochę domeną wpisaną w system nazw, odrobinę - profilową fotką. Dla większości z was ja nie jestem niczym więcej, wy nie jesteście niczym więcej dla mnie.

Zanim przyjdą futuryści i podłączą nasze martwe głowy do Internetu, w którym przyjdzie nam śmigać po wsze czasy, musimy jakoś zmierzyć się z faktem, że nigdy wcześniej nasze zejście nie dezintegrowało tylu naszych utworów. Jako wychowanek komputerów powierzyłem wszystkie myśli, wspomnienia, całą pracę zawodową, swoje hobby kawałkom metalu, w których kręcą się magnetyczne krążki. Nie ma listów do kobiet, które kochałem. Są e-maile, które znikną wraz z pierwszym nieopłaconym rachunkiem mojego operatora. Żaden bawidamek w przyszłości nie przeczyta antologii moich listów, by poznać surowe piękno kontaktów międzyludzkich na przełomie tysiąclecia.

Byliśmy tacy dumni, że Internet pozwolił nam wszystkim stać się autorami dzieł, tymczasem za trzydzieści lat okaże się, że przejedzie nas walec głównego nurtu kultury. Wypromowaliśmy sposób przekazu, który wymaga nieustannego karmienia monetami, a nawet nakarmiony może się obalić chromą nogą tej czy innej firmy.

Porzućmy jednak ten wątek. Wątek długiego życia, podczas którego możecie się przygotować, stać się kimś na tyle ważnym, żeby te okruszki życia nie zostały sprzątnięte. Możecie zginąć spektakularnie i niespodziewanie: zadławicie się papierosem, zostaniecie postrzeleni na konferencji, komuś z balkonu spadnie działo argonowe i rozłupie wasz łeb. Co wtedy? Czy któryś z przyjaciół może opłacić Waszą domenę? Napisać ostatnią notkę? Zgrać kopię zdjęć? Co z tymi wszystkimi książkami, filmami i muzyką, które kupiliście? Te DRM-owe na podpałkę, a te bez? Jedyny przypadek, w którym można podzielić między wszystkich tak, że każdy otrzyma komplet.

Jaką politykę obsługi sztywnych klientów ma Twój operator? Czy można wypłakać u Googla nowelkę, którą pisałeś przed śmiercią, schowaną „na sieci” w brzuszku Docsów?

No i rzecz równie ważna. Może najważniejsza, bo to od niej rozpocząłem dumanie nad kwestią śmiertelności w czasach e-wszystkiego. Jest duża szansa, że jesteś jednym z tych kowbojów Internetu. Opiekujesz się sygnaturami elektronicznego bydła twoich klientów. Gdybym teraz skoczył przez okno, pociągnąłbym z sobą kilka firm. Nie dlatego, że spadłbym na ich parking ubrany w kamizelkę z trotylem; w moich rękach witalne są części ich infrastruktury. Przykładowo: dziennie produkuje się około 4GiB różnych backupów, które trafiają do mojego prywatnego kuferka. Wszystkie są zaszyfrowane przy użyciu klucza GPG. Nawet gdyby ktoś wyrwał dysk z mojego laptopa, to wszystkie kopie bezpieczeństwa nie zdadzą się na wiele.

Ten tekst wyszedł troszkę zbyt kpiarsko jak na temat, który chciałem poruszyć. Zawsze jest ten pierwszy raz, kiedy położysz produkcyjną bazę, potkniesz się o kabel, prawie wszystko jest pierwszy raz, a nauczyć się unikać podobnych błędów macie szansę dopiero, gdy popełnicie je po raz trzeci lub siedemnasty. Umiera się tylko raz, dlatego trzeba się do tego przygotować z wyprzedzeniem. Zróbcie sobie, moi admini, moi programiści, moi technologiczni spece od wszystkiego, rachunek sumienia. Usuńcie się z równania i zobaczcie, co znika razem z wami.


Grają dramat na ekranach

Jadłem kanapkę z jajkiem, kiedy otworzyły się drzwi od wagonu. Wsiadł on: ubrany w dwie kurtki, z brudnymi, przyklejonymi do czaszki włosami. W ręku trzymał zielony, wiklinowy koszyk. Farba zdawała się być nałożona zbyt entuzjastycznie, być może był to taki model koszyka z wikliny, jaki zamawia się u jakiegoś artysty. Sprawiał wrażenie zaniedbanego i zwariowanego. Okrążył wagon, w którym miałem zamiar spędzić samotne dwie godziny, poświęcając się kontemplacji słowa pisanego. Przycupnął wreszcie na rozkładanych krzesłach używanych na zatłoczonych trasach. Zerwał się dopiero na widok konduktora. Aha, typ bez biletu? Może chciał przemknąć tylko między Kaliską a Widzewem?

Mój współpasażer wyciągnął z wewnętrznej kieszeni jednej z dwóch kurtek portfel i zapłacił za bilet. Kiedy zostaliśmy sami, poprawił się znów na fotelu i wyciągnął z wiklinowego koszyka lewy but. Typ sportowy. Położył go na podłodze i przymierzył do swojej nogi. Ściągnął but, a ja automatycznie odwróciłem wzrok. Cóż może się kryć w bucie dwukurtkowego posiadacza wiklinowych koszyków?

Śnieżnobiała skarpetka. But niestety nie pasował i został ponownie wtrącony do koszykowego więzienia. Uwaga współpasażera przeniosła się na telewizor. Taki, na którym odtwarzane są trzy reklamy. Bez przerwy. Próbował bez powodzenia zmienić kanał.

Nasz wagon był wagonem użytkowym. Miał wieszaki na rowery, podesty dla użytkowników wózków inwalidzkich i toaletę. Toaletę, której drzwi zamykają się i otwierają na dotknięcie świecącego guzika. Towarzysz podróży obszedł ją z zainteresowaniem, nacisnął guzik i zniknął w środku.

Ucieszyłem się. Próbowałem czytać, ale wszystkie jego zachowania mój umysł rejestrował jako „warte uwagi” – jeżeli nie ze względu na noszenie zapasowych lewych butów w plecionym koszyku, to dlatego, że mam lęk przed byciem dziabniętym zardzewiałym nożem.

Po pewnym czasie wyszedł i zadowolony zajął miejsce naprzeciw kabiny. Nie musiał czekać długo, podróż trwała już jakiś czas, pierwszy gość w „jego toalecie” pojawił się w kilka minut po zamachu stanu, którego dokonał na nikim, a dzięki któremu stał się samozwańczym tyranem WC na trasie Łódź-Warszawa.

Goście ustawiali się karnie w kolejce. Otrzymywali instrukcje co do funkcjonowania toalety, jak ją otworzyć, zamknąć, znów otworzyć. Kilka osób podjęło grę. Zadało dodatkowe pytania i otrzymało odpowiedzi. Profesjonalnie. Podejmujesz grę albo spuszczasz oczy i czekasz na koniec instruktażu.

Zbliżaliśmy się powoli do końca naszej wspólnej przygody. Ja, próbujący czytać człowiek z notatnikiem i on, imperator doglądający swoich włości z fotela przy toalecie. Jaki Gal Anonim takie pierwsze królestwo.

Drzwi ubikacji otworzyły się i wyszedł z nich starszy, dystyngowany pan. Ładny płaszcz, stalowe włosy, utrzymany zarost. Nie wyglądał na osobę, która zwykła przyjmować połajanki. Nie od kogoś, kto tuli wiklinowy koszyk, a już z pewnością nie w sprawie zaniechania zamknięcia drzwi od toalety, które zamykają się automatycznie.

Krzyczeli do siebie przez chwilę, a ja oglądałem pantomimę, wygłuszając przedział słuchawkami. Stalowowłosy spojrzał nad fotelem swojego wroga i popatrzył mi w oczy. Bezgłośnie prosił o wsparcie. Wzruszyłem ramionami i odpatrzyłem mu: „Nie moja jurysdykcja, sukinsynu.”

Sytuacja uspokoiła się. Bohaterski obrońca toalety podszedł do telewizora i próbował znów zmienić kanał. Kolejna porażka. Tym razem nie miało się na tym skończyć. Chwycił brzegi ekranu i próbował zerwać go ze ściany.

Ekran po chwili zgasł. Jeżeli nie potrafimy się zachowywać, to nie będzie oglądania telewizji. Zniknął na Zachodnim.

Wysiadł albo nigdy nie istniał.


e-glina

Na początku ustalmy kilka faktów. Nie jestem dobrym recenzentem i nie lubię pisać recenzji. Moje opinie zbieżne są z opiniami garstki ludzi, którzy zwykle nie potrzebują zewnętrznych potwierdzeń dla wybranego oprogramowania bądź sprzętu.

Nienawidzę wydawać pieniędzy na gadżety. I komputery. Jest coś obrzydliwego w płaceniu za wygląd i markę. Za punkt honoru stawiam sobie wyduszenie z ledwie żywego złomu każdej kropelki elektronicznego potu przed jej śmiercią.

Nie jest to objaw skąpstwa. To kwestia mojej filozofii pracy z komputerami. One mają pracować dla mnie, nie ja dla nich. Możecie z mojego profilu odjąć punkty w pozycji „racjonalność”. Kiedy mówię: „skaczcie!”, one mają odpowiadać: „jak wysoko? (aplikacja nie odpowiada)”.

Tyle w kwestii formalnej.

Kupiłem sobie tablet. Nie z wewnętrznej potrzeby posiadania urządzenia do picia kawy w modnych miejscach. Chciałem zobaczyć, co można wcisnąć w kawałek plastiku za 360 PLN. Nie jestem nowym użytkownikiem takiego urządzenia - w 2004 klikałem w SIMPada SL4, a od 2008 noszę ze sobą N800, która dziś nie załapałaby się na definicję tabletu. Nie miałem wielkich oczekiwań, moje wymogi zamykały się w odtwarzaniu radia last.fm, czytniku komiksów i wyświetlaniu plików wideo. Minął tydzień (a może dwa? Czas nie płynie liniowo podczas nadchodzącej linii śmierci) i mogę podzielić się uwagami.

Depudełkacja

Depudełkacja zwana też unboksingiem jest przeżyciem religijnym, a mnie, jako ateiście, nie jest dane go dostąpić. Rozerwałem pudełko i wysypałem zawartość na biurko. Ze środka, prócz tabletu, wypadły: zasilacz, instrukcja, przewód USB i żeńska przejściówka USB, która pozwala podłączyć urządzenia zewnętrzne. Tablet wyglądał dokładnie jak 360 PLN. Był ciężkawy, plastikowy, a z jednego z boków wystawało trochę nadmiarowego plastiku, milimetr poza obudowę. Ludzie z internetowym OCD 1 od razu wrzuciliby takie urządzenie do śmietnika. Kwadrans później miałem do nich dołączyć.

Pierwsze włączenie, wybrałem WiFi, zalogowałem się do konta na Google i pozwoliłem się mu zsynchronizować. Kiedy uznałem, że upłynęło wystarczająco dużo czasu, przesunąłem sobie tablet pod nos i odblokowałem ekran. Chwilę później tablet zdecydował, że rejestrowanie dotyku jest rzeczą zbyteczną, więc każde moje dotknięcie powodowało akcję w zupełnie innej części ekranu. Sfrustrowany i wypłukany już z repertuaru wulgaryzmów cisnąłem go w kąt i tak zostawiłem na godzinę lub dwie. Wtedy urządzenie porzuciło swój bunt i już nigdy nie próbowało rewolucji w temacie koordynatów.

Sprzęt

Tablet ma siedem cali, ekran pojemnościowy z kilkoma aktywnymi punktami. Nie wiem, ile waży. Ma port na kartę SD, wyjście HDMI, port zasilania, port USB, klawisze regulacji głośności i włącznik. Poza tym „na dole” znajdują się trzy dodatkowe guziki dotykowe: menu, home i back. Duplikują idealnie te, które znajdują się w Androidzie 4.0, ale nie będę narzekał.

Opiszę tu jedyną rzecz wartą odnotowania: ekran. Tablet składa się głównie z niego, a reszta to elementy dodatkowe. Zasilacz zasila, USB się komunikuje, tyle.

Ekran jest królewsko okropny. Jest tak okropny, że ściąłbym mu głowę. To chyba pierwszy ekran, który sprawił, że byłem smutny. Pisze to człowiek, który pracował na Amidze w trybie interlace, niszczącym wzrok skuteczniej niż przecieranie oczu wapnem gaszonym. Podświetlanie jest nierówne, daje to efekt „pogiętego papieru” w niektórych aplikacjach, gdzie autorzy niefortunnie dobrali paletę kolorów. Nie mogę też pominąć tego, że na moje oko system pracuje w palecie 16-, a może 15-bitowej. Efekt przejść kolorów w Reddit is Fun powoduje, że nic nie jest fun. O dziwo, najbardziej komfortowe warunki uzyskałem w aplikacji Kindle, która pozwala na inwersję kolorów. Białe litery z czarnego czyta się zdecydowanie lepiej.

Procesor jest. Boxchip A10 taktowany zegarem 1.5 Ghz. 1GiB pamięci. Mimo wysokiego taktowania wydaje się powolny. Nie udało mi się wygooglać żadnych ciekawych informacji (poza tym wiem niewiele o rdzeniach ARM-a), musicie więc polegać na mojej nienaukowej opinii. Wolny procesor w połączeniu z gigabajtem pamięci prowadzi do większej liczby nieszczęść, niż mogłem przewidzieć. Wszystko zostaje w tle, zjadając cykle procesora. Podejrzewam, że urwanie jednej kostki pamięci spowodowałoby znaczne przyspieszenie poprzez wymuszenie pracy wewnętrznego OOMK.

Bateria nie jest jeszcze do końca przetestowana. Wczoraj w nocy wrzuciłem w pełni naładowane urządzonko i chciałem zobaczyć, ile baterii zejdzie do rana. Po pięciu godzinach snu wskaźnik baterii pokazywał dziewięćdziesiąt pięć procent. Niestety, ten niski spadek wynika z bardzo agresywnego usypiania. Sieć bezprzewodowa jest odcinana równocześnie z wygaszeniem ekranu, więc aplikacje działające w tle nie poinformują Was o nowych wiadomościach. Z pewnością da się przestawić, ale absolutnie mi to nie przeszkadza - nie jestem fanem powiadomień.

Do tej pory miałem tylko jedną dłuższą sesję z tabletem. Po 4 godz. czytania Reddita i odpisywania na e-maile bateria pokazywała 56 proc. Myślę, że spokojnie można liczyć na sześć godzin ciągłego użycia. Spodziewałem się dużo gorszego wyniku.

Oprogramowanie

Tablet przychodzi z Androidem 4.0.3. Ku mojej radości nie zostałem skazany na jeden z „alternatywnych” sklepów z aplikacjami i mogłem używać oryginalnego Play Store, dzięki czemu moje zakupione aplikacje oraz „firmówki” takie jak Gmail i Google Maps były dostępne mimo braku „błogosławieństwa” dla produktu od Wielkiego G.

Zainstalowałem mnóstwo różnego śmiecia. Kilka gier, które nie były kłopotliwe i chodziły bardzo ładnie. Jedynym odstępstwem była gra „Cut the Rope”, zarówno wersja darmowa, jak i płatna. Na moje oko (i po odcyfrowaniu komunikatu błędu) system nie zawiera jakiegoś kodeka, który odpowiada za odtwarzanie animacji z intra.

Aplikacje użytkowe także nie sprawiały większego problemu. Comixology wyświetla Batmany, Twitter wyświetla łebskie wpisy znanych i światłych, Last.fm gra moją muzykę, VLC gra moje filmy - lokalnie i ze źródła streamu (oglądałem połowę meczu LM), a nawet via Samba z serwera ukrytego pod stołem kuchennym. Niestety, aplikacje, które potrzebują chwili na osiągnięcie stanu używalności (Flipboard aktualizujący kanały wiadomości), potrafią zatrzymać cały system. Czasem nawet doprowadzić do stanu, w którym zielony robot wyrzuca dłonie w górę, mówiąc „Nie wiem? Może zacznij z początku”, a tablet się restartuje.

Tak, miałem kilka twardych wywrotek. Najgorsze w nich jest to, że nie mogę odkryć dokładnego powodu. Kombinacja aplikacji? Stan baterii? Liczba rzeczy w tle? Jest to chyba najbardziej irytująca rzecz w tej całej zabawie. Mogę przeżyć ten okropny ekran, ale restarty psują całą zabawę w „urządzenie konsumpcyjne” i ciągnie mnie w stronę laptopa.

No i?

Moja opinia jest następująca: zabawka zdecydowanie przebiła moje oczekiwania w kontekście ceny. Oczekiwałem, że cisnę je w kąt po dniu, tymczasem jeździ ze mną non stop. Choć nie zostanie nigdy moim docelowym elektronicznym gadżetem 2, to całkiem polubiłem krótkie sesje z Redditem i Readability. Moja N800 może wreszcie odejść na zasłużoną emeryturę. Gdyby wyeliminować te losowe zwieszki (może czas rozejrzeć się za jakąś zewnętrzną dystrybucją?), powiedziałbym, że jest to najlepsza rzecz, jaką można nabyć za 360 PLN.

Niestety, moja opinia jest pokolorowana faktami, o których wspomniałem na początku. Jeżeli chcesz być majnstrimowym użytkownikiem tabletów, to polecam dorzucić jeszcze sto dolarów i kupić Nexusa 7.

W tym tygodniu wykonam factory reset i pożyczę tablet przyjacielowi. Jeżeli jego opinia będzie diametralnie różna od mojej, to poproszę go, żeby zostawił komentarz pod tą notką.

PS Dwa miesiące bez tekstu. Życie nie chce, żebym został popularnym blogerem! Mam w lodówce pięć tekstów, które obiecuję sobie napisać. Tekstów ważnych, rzeczowych – takich, z których jestem znany 3. Ba, dwa opowiadania! Za kilka dni zostanę „bezrobotny”, linia śmierci przetnie moje dni i może wreszcie będę mógł cieszyć się rzeczywistością, w której nie jestem zawsze spóźniony dwa dni w stosunku do tego, co mówi kalendarz.

  1. fałszywe OCD, które powoduje, że jesteś fajniejszy w oczach followersów na socjalmediach; nie prawdziwe schorzenie niszczące życie
  2. wątpię, czy w ogóle jest taki tablet na rynku, mój laptop ma klawiaturę, 8 godz. baterii i waży kilogram. Mam też drugą baterię, która ciągnie kolejne 4 godz.
  3. ha ha

Problem z dzięciołem

Gdyby architekci stawiali budynki tak, jak programiści piszą programy, to jeden dzięcioł rozwaliłby całą naszą cywilizację

„Piękny budynek. Doskonały. Te kształty, basen przy ogródku. Podoba mi się. Naprawdę mi się podoba. Niestety, wnuczek jednej z pań powiedział nam, że w tym sezonie sensowniej byłoby zbudować igloo i martwić się letnimi problemami w lecie. Za ile możemy mieć igloo? Nie znam się na architekturze, ale wygląda mi to na kilka dni roboty.”

Rozmawiałem ostatnio z kilkoma inżynierami. A raczej słuchałem, jak odmieniali cytat z góry przez różne przypadki. Własne przypadki przeżyć podczas używania bardzo złego oprogramowania. Potakiwałem. Nie oszukujmy się, jest cała masa przykładów usprawiedliwiających ich drwiny. Sam, częściej niż bym chciał, produkuję kod, którego jakość można zakwestionować. Nie będąc wtedy w stanie wymyślić jakiejś sensownej linii obrony własnej pracy, zapisałem sobie w notatniku, żeby zmierzyć się z tym problemem w wolnym czasie.

Nie mam niestety wolnego czasu, więc spróbuję podumać „na głos” dziś.

Pierwszym problemem w porównaniu pracy programisty z pracą inżyniera jest końcowy efekt. Życie aplikacji, choć zwykle krótsze niż w przypadku budynku, mostu czy nowego modelu silnika, nie ma końca. Oczywiście pojawiają się nowe, stabilne wersje, ale programista jest zmuszony ciągle odgadywać przyszłe intencje klienta czy też użytkowników. Czasem jedna decyzja technologiczna podjęta w wersji n może okazać się niesamowitym źródłem problemów podczas dopisywania nowej funkcjonalności w wersji n+1. Ten permanentny stan niewiadomej jest źródłem frustracji i mnożenia się błędów i niedociągnięć. Prawię słyszę, jak krzyczycie do mnie o specyfikacji projektowej. Błogosławieni ci, którzy mają specyfikację i klienta, który się jej trzyma. Z mojego doświadczenia wynika, że specyfikacja często jest (jeżeli jest) ogólnym dokumentem, do którego nikt się nie modli. Skoro można pisać poprawki do konstytucji, to czemu nie można zmieniać specyfikacji? I zmienia się specyfikacje aż do momentu, gdy programiści osiągają stan apatii, w którym, często pod wpływem aresztu finansowego, zgadzają się na wszystko jak leci.

Przykład z mojego życia. Klient przychodzi i pragnie sklepu internetowego. Piszemy. Po wykonaniu trzech czwartych projektu następuje piwot, ponieważ klient klienta zmienił zapotrzebowanie. Na podstawie wykonanej pracy mamy zrobić platformę serwującą filmy na żądanie. Niby można, wystarczy ubić koszyk, zmienić profile użytkowników, przerobić trochę kategorie. Da się, są pieniądze. Mijają miesiące. W międzyczasie otrzymujemy przykaz, żeby używać FreeBSD jako platformy. Administrator klienta nie przepada za Linuksem.

Co dalej? Piwot. Klient klienta zbankrutował. Nie można wyrzucić tyle pracy. Przeróbmy to na chmurową platformę, która będzie spięta z Google Apps i będzie potrafiła odpalać oprogramowanie Windowsa przez serwer Citriksa. Aha, zmieńmy też platformę na Windows 2003 i IIS.

Po dwóch latach napisałem, że już dłużej nie mogę, że nie wiem już, co się dzieje w kodzie. Projekt, który zeżarł wiele tysięcy dolarów i wepchnął mnie w zawodową depresję, zostaje spuszczony w kiblu.

Łatwość modyfikacji oprogramowania powoduje, że programiści wszelkiej maści muszą posiadać zmyślone moce Nostradamusa albo być twardzielami, którzy potrafią utrzymać świętość specyfikacji. Koderzy dużo lepiej kodują niż negocjują, dlatego mamy całe masy niespełnionych Nostradamusów i oprogramowanie, które zaciągnęło taki dług technologiczny, że najłatwiej spłacić go butelką benzyny i zapałką.

Ile lat buduje się mosty, stawia domy? Kilka. Inne branże miały czas zakumulować know-how. Programiści chorują chronicznie na brak dobrych wzorców projektowych i ich nieznajomość połączoną z ostrym zapaleniem wyrostka Nie Wynaleziono Tutaj. Dodatkowym problemem jest ciągłe wywracanie technologii do góry nogami. Wczoraj zdecentralizowane dziś się centralizuje, by pojutrze rozproszyć. I choć teoria leżąca u podstaw pisania kodu jest w miarę jednolita, to zmieniają się miejsca, w których wychodzą problemy. Warstwy abstrakcji przykrywają poprzednie warstwy abstrakcji, powodując totalne rozwarstwienie pomiędzy wcześniejszą generacją programistów a generacją obecną. Dorzućmy do tego nieprawdopodobny (nie bez powodów) konserwatyzm wśród zawodowych klikaczy i mamy sytuację, w której dwóch programistów może posiadać sześć rozwiązań problemu. Każdy z nich nie mrugnie nawet okiem, usprawiedliwiając swój wybór. Dodajmy do mikstury świeżych autorów programów, którzy nie zakrzepli jeszcze w swoich schematach i każdy problem rozwiązują, dodając do stosu modne, nieprzetestowane technologie i uzyskujemy totalny kociokwik bibliotek, serwerów i metodologii przebijających swoim spektakularnym końcem dziewiczy rejs Titanica.

Przez pięćdziesiąt lat programowanie zmieniło się tak bardzo, że nie zmieniło się w ogóle. To znów urodziło eksperymentatorów z ciągotami do konserwatyzmu. Tymczasem stała grawitacyjna, wzory na objętość i materiałoznawstwo zdają się trwać. Oni mają ewolucję, a my krwawe rewolucje, które niosą na sztandarach hasło, że „Tym Razem Będzie Dobrze”.

Wiedza. Nie oszukujmy się, można być programistą, kompletnie ignorując jakiekolwiek dziedziny nauki. Kilkuset niezmiernie łebskich gości pisze narzędzia dla niedomytych mas. Niedomyte masy są tak dobre w rozwiązywaniu problemu, jak dobre narzędzia otrzymają od łebskiej elity. Wystarczy jednak wykonać jeden krok poza sferę kompetencji narzędzi, aby przekonać się, jak bardzo przeciętny programista jest w dupie. Bycie w ciemnej dupie nie jest fantastycznym doświadczeniem, dlatego też reakcją obronną jest naginanie dostępnych narzędzi do problemów. Człowiek krojący chleb piłą łańcuchową, człowiek, który ma bazę danych i wszystkie problemy potrafi przydusić tak, aby zamknęły się w SELECT/INSERT/DELETE/UPDATE. Jeden jest najedzony, a drugi ma rozwiązany problem, ale z szerszej perspektywy obaj wyglądają na durnych i lekko zagubionych.

Napisałem fantastyczną bibliotekę do obsługi aplikacji typu data-driven. Schemat bazy jest ekstremalnie generyczny, wszystko można zostawić użytkownikowi. Potem pojawiły się pierwsze problemy: jak rozpoznać, że grupa rekordów już istnieje i należy ją zaktualizować? Trzeba dodać unikalne indeksy. A co z polami o konkretnym typie, które topią się w bezpłciowym schemacie? Trzeba je ewaluować i trzymać cztery kopie tak, żeby dało się wykonać operacje via wbudowany ORM. Zanim się ocknąłem, reimplementowałem bazę danych w bazie danych, w kodzie we frameworku. Wyświetlenie głupiej tabelki zajmuje ORM-owi wieki i generuje kilka trylionów zapytań. Nie rozumiałem problemu, miałem młotek, dookoła mnie same gwoździe. Powbijałem je trzonkiem młotka i uznałem, że wszystko jest w jak najlepszym porządku.

Mimo to uważam, że nie jestem totalnym kretynem. Jestem produktem środowiska, mód i narzędzi. Ostatecznie doczytałem trochę teorii i ponaprawiałem (z pomocą [Patrysa](http://room-303.com/blog/[/ref] bardziej porąbane miejsca. Kod nie szedł jeszcze na produkcję, ale przecież mógł.

Łatwość, z jaką przychodzi nam budowanie rozwiązań dla oczywistych problemów, włącza nam tunelowe widzenie i wiąże ręce.

Czyli co, nie ma ani krzty nauki, metodologii i dobrych wzorców w całym programistycznym świecie? Skądże, jest coraz lepiej. Coraz lepsze narzędzia, coraz większy zasób wiedzy i metodologie projektowe pomagają nam wydźwignąć się z bagna niekompetencji. Nauczymy się rozwiązywać problemy, przed którymi stajemy zupełnie na golasa, będziemy bohaterami własnych historii.

Do czasu, aż przyjdzie kolejna rewolucja. Wtedy będziemy znów w dupie. I mogę poradzić tylko naukę gry na harmonijce i metalowy kubek, którym będziemy wybijać rytm o nasze superlekkie laptopy, śpiewając:

Nobody knows the trouble I’ve seen

Nobody knows my sorrow

Nobody knows the trouble I’ve seen

Glory hallelujah!

Sometimes I’m up, sometimes I’m down

Oh, yes, Lord

Sometimes I’m almost to the ground

Oh, yes, Lord


Star Wars

Miałem wujka Andrzeja. Kiedyś do wszystkich sąsiadów mówiło się per „wujku” i „ciociu”. Rzeczywistość życia w końcówce PRL-u powodowała, że kontakty między obcymi sobie ludźmi były bliższe, wszyscy musieli kombinować, a kombinowanie w grupie dawało lepsze rezultaty.

Zanim wujek Andrzej przesiadł się do TIR-a 1, jeździł Starem. Imponująca ciężarówka, której podnosiła się kipa. Czasem zabierał mnie do pracy. Odwiedzaliśmy wysypisko śmieci pod Łodzią, czy też częstochowskie centrum przeładunkowe. Podczas tych podróży miałem okazję pierwszy raz słuchać reggae. 2

Star zawładnął moim umysłem. Nigdy nie prosiłem o prezenty - byłem jednym z tych fałszywie skromnych dzieci, które żywią się samym faktem moralnego kopniaka, jaki daje im świadomość, że w pewien pokręcony, dziecinny sposób są lepsze od rówieśników. Mimo to tym razem poprosiłem matkę o zakup Stara. Wydawało mi się oczywiste, że posiadanie Stara jest prawem każdego człowieka, zwłaszcza sześciolatka. Matka się zgodziła. Lata odmawiania prezentów wreszcie skumulowały się w jedną wielką, karmiczną wypłatę!

Przejawiając dawno utracony zmysł biznesowy, rozpocząłem systematyczne wizyty w domach sąsiadów. Proponowałem moje usługi w przewożeniu rzeczy Starem, którego dumnym posiadaczem wkrótce miałem się stać. Wszyscy się zgadzali, gładzili mnie po główce i mówili, że oczywiście.

Marketing, bitches!

Przyszedł dzień, w którym miałem otrzymać to, co mi obiecano. Stałem na podwórku i czekałem. Matka otworzyła bramę i widząc mnie, zaczęła iść do mnie z uśmiechem na twarzy. Za sobą ciągnęła pięknego zabawkowego Stara.

Blednę na samo wspomnienie nienawiści, którą czułem. Żalu. Uczucia bycia oszukanym, świadomości, że wszyscy wiedzieli i grali sobie na moich uczuciach do Stara. Zacząłem biec w kierunku matki, ominąłem jej wyciągniętą rękę i wyjebałem Starowi z kopa. Wybiegłem przez otwartą bramę. Finału nie pamiętam. Pamiętam tylko emocje związane z obezwładniającą złością i bezradnością.

Mijają lata, a ja nadal nie potrafię odróżnić wizji, które roztaczam, od rzeczywistości, która przytelepała się na bardzo małych, drewnianych kółkach.

  1. awans zawodowy na miarę czasów wykluwającego się kapitalizmu
  2. To były jakieś okropne covery jamajskich standardów wykonywane przez germańskie kapele. Zasiały jednak ziarenko. To dygresja, po prostu przewinęło mi się przez głowę, kiedy pierwszy raz usłyszałem „Pass the kutchie” 

Brukowanie piekła

Ojciec nigdy nie interesował się moimi pracami domowymi. Pracował ciężko, a i ja nie ułatwiałem mu zadania, nie mając nigdy „nic zadane”. Nie była to sprawka nauczycieli rozumiejących moją potrzebę posiadania wolnego czasu, w którym mógłbym oddać się swoim pasjom pozaszkolnym; kłamałem jak każdy dziesięcioletni leń mający w perspektywie dzień przeznaczony na aktywność fizyczną, czy też przechodzenie Bionic Commando.

Zapytany raz o moje postępy w nauce i stan prac domowych z dumą odparłem, że pracę z polskiego już zrobiłem. Z perspektywy czasu wiem, że kłamstwo przyniosłoby lepszy skutek.

Na lekcji przerabialiśmy czytankę o robocie Alu. Robot ten był, może miał jakieś przygody, nic ważnego. Znałem jego historię na wylot, bo kilka lat wcześniej wszedłem w posiadanie książek do języka polskiego i zmusiłem matkę do przeczytania mi wszystkich historii, które zawierały roboty, wojny i futurystykę. Moja przebiegłość opłaciła się nie tyko w przypadku historii o Alu, dostałem też piątkę z czytania na głos czytanki „Świat za sto lat”, którą znałem na pamięć, co zaowocowało teatralną deklamacją.

Wróćmy jednak do pracy domowej. Ponieważ nie skończyliśmy opracowywać tekstu na tablicy, naszym zadaniem było dopisanie zakończenia. Kiedy wróciłem do domu, postanowiłem, że będę dobrym chłopcem i dopiszę. Otworzyłem zeszyt, przeczytałem tekst ustalony w klasie i stwierdziłem, że skupiliśmy się głównie na opisie wyglądu zewnętrznego robota.

„Channelingując” połączone moce Vonneguta i Hemingwaya, postanowiłem iść w maksymalny przekaz uzyskany minimalną ilością środków artystycznych. Dopisałem jedno zdanie:

„Taki był Al.”

Byłem z siebie dumny. Nie tylko zrobiłem pierwszą pracę domową w roku szkolnym, ale udało mi się ująć sens całej naszej pracy w sposób zwięzły i dosadny. Duma ta miała przyczynić się do mojej zguby.

Pokazałem zeszyt Ojcu i wytłumaczyłem, co zrobiłem. Ojciec zmarszczył czoło i powiedział, że to się nie godzi, że na skróty, że olewam. Stanął nade mną i kazał chwycić za długopis. Była 19 z minutami. Wspólnymi siłami dokonaliśmy rozbioru czytanki na części pierwsze i już o 22 miałem zakończenie. Było to prawdopodobnie jedyne zakończenie dłuższe niż tekst źródłowy, zeszyt zawierał dziesiątki wykreśleń, a moje, już wtedy fatalne pismo, pod koniec zamieniło się w zestaw zagadek, jakich nie powstydziłby się mechanizm Captchy.

Kiedy na drugi dzień oddałem zeszyt do sprawdzenia, oczekiwałem najgorszego. I to właśnie otrzymałem: dwa plus, dziesiątki czerwonych „ó”, „int.”, „rz” i innych, niezrozumiałych dla mnie wskazówek dotyczących moich braków. Kiedy, będąc na granicy płaczu, zaprotestowałem i wspomniałem, że „chciałem tylko napisać, że taki był Al” nauczycielka powiedziała, że to doskonałe zakończenie i kazała reszcie dzieci dopisać to zdanie jako oficjalne podsumowanie poprzedniej lekcji.

Ojciec przyjął odpowiedzialność za swoją literacką działalność, a ja zyskałem dodatkowy dowód anegdotyczny o bezsensowności odrabiania prac domowych. Na moje szczęście było to jego jedyne przewinienie jako Ojca. Dałbym mu pokojową nagrodę Nobla za znoszenie mnie przez tyle lat, ale tylko pod warunkiem, że zakończy swoje przemówienie na gali słowami „taki był Al”.