Béton brut

Demonów okiełznanie

Internet jest jak ogrodzone płotem osiedle. Nowe, błyszczące, praktycznie wszyscy żyją tu na cudzym, a sąsiedzi są anonimowymi wałami do których w najlepszym wypadku czujemy zimną obojętność.

Ktoś non stop donosi też dzielnicowemu o wszystkich małych przewinieniach i szeptanych słowach, a on, zdaje się, zawsze ma kary nieprzystające do ich wagi. Mówią, że tylko dlatego nikt nie szcza na klatkach, co jest ceną wartą płacenia. Zwłaszcza, gdy płacą inni.

Ja? Ja jestem ostatnim rdzennym mieszkańcem tych regionów. A przynajmniej lubię tak o sobie myśleć, bo daje mi to poczucie godności. Jestem pasożytem tego ekosystemu, jedząc z jego śmietników i gdy nikt nie widzi, wygrażając pięścią w kierunku sączącego się z okien światła.

Tyle metafora.

Nienawidzę, gdy strony nie mają kanału wiadomości. Jeszcze bardziej, gdy mają, ale jest zepsuty przez miesiące i nikt nie reaguje na moje ponaglające e-maile donoszące o tej sprawie. Równie niedobrze jest, gdy strona, której zmuszony jestem używać, zakłada, że mój komputer jest identyczny jak ten suto opłacanych rozwijaczy. „U mnie nie tylko działa, u mnie nawet wygląda”, zdają się mi szeptać do ucha.

Ostatnim przykładem jest strona z ramówką w serwisie Eleven Sports. Dwa paski do przewijania, które zwykle wymagają indywidualnego masażu myszką aby ujawnić jakie drużyny kopiące piłkę mogę zobaczyć na żywo tego wieczoru. Każdego dnia czułem się z tym coraz gorzej, aż wreszcie postanowiłem, że zadaniem komputerów jest przetwarzanie informacji.

Napisałem więc mały serwis, który kradnie informacje, przetwarza je i zamienia w format wymiany informacji o kalendarzach.

Klik, klik, klik: Eleven Sports w ICS

Plik kalendarzowy wyświetlony w calcurse

Teraz mogę wreszcie żyć jak człowiek, nie muszę naciskać guzików na domofonie licząc, że ktoś mieszkający na osiedlu mi powie, kto gra.


Trzy kolory: seledynowy

Bywacie czasem nieszczęśliwi? Co wtedy robicie? Pijecie? Palicie? Snujecie się po zaułkach? Programujecie?

Ja robię wszystko powyżej, naraz. W ramach nieustającej akcji „im więcej myślisz, tym bardziej nie chcesz” znalazłem się w momencie, gdzie potrzebowałem dnia ucieczki od zgiełku zwykłego dnia. Zamiast iść do biura poszedłem zwiedzać, a podczas zwiedzania wpadł mi do głowy pomysł na zajęcie umysłu. Na Twitterze jest sobie taki bot, który produkuje — zabawnie nazywane — palety kolorów. Nazywa się toto colorschemer.

Oto przykład:

schemer

Myślę sobie: a gdyby napisał bota, który potrafi wyekstrahować kolory z załączanych na Twitterze obrazków tym samym doprowadzając do SKYNET-u? Mógłbym generować z nich arkusze stylów z deklaracjami, palety do GIMP-a, czy to tam.

Brzmi jak marnowanie czasu!

Konsumujemy

Zanim zaczniemy naszą podróż po obrazku musimy zamienić plik znajdujący się na dysku w kupkę informacji. Dla Pythona dostępna jest biblioteka Pillow zawierająca w sobie wszystkie potrzebne funkcje. Użyjemy jej aby uzyskać piksele, kolory oraz rozmiar obrazka.

Na boku Bardziej zaawansowani czytelnicy mogą się skrzywić, że piszę funkcje zawierające tylko return — normalnie używam takich funkcji aby ułatwić sobie odpluskwianie i obsługę błędów. W tym przykładzie nie chcę dodatkowo zaciemniać, więc pozostawiłem tak, jak jest, no i funkcje mają bardziej zrozumiałe nazwy niż oryginalne metody.

def load_image(filename: str):
    return Image.open(filename)

def get_pixels(image: Image):
    return image.load()

def get_bounds(image: Image):
    return image.getbbox()

I tak, w kolejności: load_image wczytuje obrazek z dysku, get_pixels zwraca piksele na których możemy dokonywać analizy, get_bounds zwraca cztery wartości, które określają obszar zajmowany przez obraz.

Kolory na ekranie

Ekran komputera możemy reprezentować jako dwuwymiarową płaszczyznę której każdy punkt reprezentuje para wartości X i Y. X odpowiada za oś lewo-prawo, a Y, odpowiednia góra-dół. Pozycje zaczynamy liczyć od lewa w prawo i od góry w dół. To znaczy, że miara koordynat (0, 0) to piksel znajdujący się w górnym, lewym rogu.

Jeśli obraz ma rozdzielczość 1980x1080 to jego prawy dolny róg znajduje się na (1979, 1079) gdyż liczymy od zera.

Pod każdym z tych punktów kryje się święta trójca, Zielony, Czerwony i Niebieski, składowe kolorów w systemie RBG.

Kolory w RBG są reprezentowane przez bajt, który to bajt może przechowywać wartości numeryczne od 0 do 255. Czyli jeden piksel to trzy bajty informacji przybite do jakiejś pozycji na ekranie. Gdybyśmy chcieli sobie wyobrazić bardzo mały kwadrat, który ma bok składający się z dwóch pikseli, to moglibyśmy zapisać te dane w następujący sposób:

square = (
             (255, 0, 0), (0, 255, 0),
             (0, 0, 255), (128, 128, 128)
     )

Kolory RBG

Skoro wiemy w jaki sposób otrzymamy dane, zobaczmy, z czym nam przyjdzie pracować.

Pierwszy krok: w którą stronę ciąć

Przykładowy obrazków

Wszystkie obrazki zamieszczane na koncie przychodzą w dwóch formatach. Kolory są ułożone góra/dół lub lewo/prawo. Wykrycie typu obrazka będzie naszym pierwszym zadaniem. Utworzymy sobie typ wyliczeniowy (enum) żeby było nam łatwiej czytać kod.

Nazwałem mój enum Gravity, bo wydawało mi się, że to dobra, wiele mówiąca nazwa. „W którą stronę «spadają» kolory. Kiedy usiadłem do tego tekstu stało się oczywiste, że dużo lepszą nazwą byłoby Orientation. Udowodniłem tym samym teorię, że nazywanie rzeczy w programowaniu jest sztuką trudną.

class Gravity(Enum):
    VERTICAL = 0
    HORIZONTAL = 1

Zastanówmy się, jak wykryć, czy powinniśmy badać kolory idąc z góry w dół, czy też idąc z lewa w prawo.

Jeśli weźmiemy piksel znajdujący się pod koordynatami (0, 0), a potem weźmiemy piksel znajdujący się w przeciwległym rogu (0, szerokość obrazka) to jeśli są one takie same, znaczy, że układ obrazka jest góra/dół, bo cała pierwsza linia jest jednego koloru! Proste! W przeciwnym przypadku obrazek zorientowany jest lewo/prawo, gdyż wiemy, że kolor w lewym rogu jest inny niż ten w prawym.

Jak wykryć kierunek

Zrobimy z tego funkcję, która zwróci nam typ „grawitacji”.

def detect_gravity(pixels, bounds):
    max_width  = bounds[2]
    max_height = bounds[3]

    top_left_corner = pixels[0, 0]

    top_right_corner = pixels[0, max_width - 1]
    bottom_left_corner = pixels[0, max_height - 1]

    if top_left_corner == top_right_corner:
        return Gravity.HORIZONTAL
    return Gravity.VERTICAL

Wszystkie te kolory

OK, wiemy już jakiego typu obrazek wczytaliśmy. Teraz naszym zadaniem jest wybranie unikalnych kolorów. Zrobimy to idąc po linii i zapisując znalezione kolory. Powinno być całkiem prosto, wystarczy wybrać kierunek, zwiększać licznik o jeden i zapisywać do tablicy rezultatów unikalne wartości RGB.

Zerknijmy na kod.

def extract_distinct_colors(pixels, gravity, bounds):

    idx = 0

    if gravity == Gravity.VERTICAL:
        max_travel = bounds[3]
    else:
        max_travel  = bounds[2]

    distinct_colors = []

    while idx < max_travel:
        if gravity == Gravity.VERTICAL:
            pixel = pixels[0, idx]
        else:
            pixel = pixels[idx, 0]
        idx += 1
        if pixel not in distinct_colors:
            distinct_colors.append(pixel)
    return distinct_colors

Ustawiamy indeks idx na zero, ustawiamy rozmiar boku, którym będziemy podróżowali zależnie od «grawitacji», tworzymy pustą tablicę na rezultaty. Następnie kręcimy się aż do wyczerpania boku i sprawdzamy, czy właśnie odnaleziony piksel (dokładniej, trójca jego kolorów) jest już w distinct_colors, jeśli nie ma, dodajemy. Po zakończeniu operacji zwracamy zawartość tablicy.

Odpaliłem kod i wszystko działało, może nawet za dobrze, bo otrzymałem piętnaście kolorów, gdy spodziewałem się trzech. Dałem się nabrać swoim starym oczom, ale też udało mi się zapomnieć o faktach dotyczących obrazków w Internecie: kompresji. Jeśli popatrzymy na ofiarę naszej inspecji będziemy jasno widzieć (dosłownie) trudne do wyodrębnienia wahania w kolorze. Wahania, które ten naiwny kod, który szuka tylko unikalności, dokłada do listy. I dobrze robi, bo są to unikalne kolory, ale nie to chcieliśmy uzyskać.

Wiele kolorów w jednym pasku

Co teraz? Podglądanie obrazka pod lupą upewniło mnie, że te przekłamania w kolorze występują w niewielu miejscach, głównie tam, gdzie spotykają się dwa różne kolory. Rozsądnym sposobem byłoby liczenie ilości wystąpień. To pozwoli nam odrzucić sieroty po kompresji. Zmodyfikowałem więc kod w następujący sposób: dodałem occurance_counter, który zawiera liczniki wystąpień danego koloru. W bloku try…except sprawdzam w jakim miejscu w liście znajduje się obecnie odkryty kolor, a jeśli się nie znajduje (co podniesie wyjątek ValueError na metodzie .index()) znaczy, że widzimy go pierwszy raz. Tym razem z funkcji zwracamy dwie wartości: listę kolorów oraz ich liczniki.

def extract_distinct_colors(pixels, gravity, bounds):

    idx = 0

    if gravity == Gravity.VERTICAL:
        max_travel = bounds[3]
    else:
        max_travel  = bounds[2]

    distinct_colors = []
    occurance_counter = {}

    while idx < max_travel:
        if gravity == Gravity.VERTICAL:
            pixel = pixels[0, idx]
        else:
            pixel = pixels[idx, 0]
        idx += 1

        try:
            found_at_index = distinct_colors.index(pixel)
            occurance_counter[ found_at_index ] = occurance_counter[ found_at_index ] + 1
        except ValueError as e:
            distinct_colors.append(pixel)
            occurance_counter [ distinct_colors.index(pixel) ] = 1
    return (distinct_colors, occurance_counter)

Teraz muszę dodać tylko funkcję, która użyje obu tych informacji i zwróci mi n najczęściej występujących kolorów. Muszę przyznać, że byłem tu już trochę zmęczony, siedziałem na ławce w ciemnym parku, offline, paląc papierosy. Dlatego funkcja filter_top_entries nie jest może najbardziej przyjazna dla oczu początkujących, dlatego rozłożę ją może na czynniki pierwsze.

def filter_top_entries(count, distinct_colors, occurance_counter):
    filtered = sorted(occurance_counter.items(), key=lambda x: x[1], reverse=True)[0:count]
    return [distinct_colors[ x[0] ] for x in filtered]

Pierwszym paraemetrem jest liczba elementów, które chcemy uzyskać, dwa pozostałe to produkt extract_distinct_colors.

occurance_counter zawiera dane w następującym formacie:

    {
      '0': 12,
      '4': 1,
      '2': 34,
      []
    }

Indeksem w tym słowniku jest pozycja koloru w distinct_colors, a jego wartością jest liczba wystąpień. W Pythonie słownik posiada metodę .items(), która zwraca pary elementów, czyli gdybyśmy użyli jej na tym przykładowym kodzie, otrzymalibyśmy ( ('0', 12), ('4', 1), ('2', 34)). To właśnie przekazujemy do sortowania. Ale sorted() nie wie jak posortować dwuelementową listę. Dlatego też w parametrze key podajemy kawałek kodu, który wskaże jaki element z tej listy jest parametrem, który nalezy posortować. Pod indeksem 0 znajduje się pozycja koloru, pod indeksem 1 znajduje się liczba wystąpień. x: x[1] znaczy „do sortowania użyj ilości wystąpień, które znajdziesz w liście na pozycji pierwszej.

Ponieważ sorted() domyślnie sortuje od najmniejszej do największej musimy też poprosić o odwrócenie tego zachowania, gdyż szukamy najczęściej występujących kolorów. Do tego właśnie służy parametr reversed=True.

Produktem sorted() jest lista, więc możemy na niej użyć pythonowej składni do przycinania list, w tym wypadku [0:count] zwróci nam tylko fragment posortowanej listy do ilości podanej w pierwszym parametrze.

I to jest pierwsza linia. ;-)

Python posiada wygodną składnię do „kompresowania” wyrażeń normalnie zamykanych w for, to właśnie robi druga linia. Można ją przeczytać „dla każdego elementu w filtered, które uzyskaliśmy z sorted() weź element pod indeksem zero, który jest indeksem koloru na liście «unikalności» i zwróć to wszystko jako tablicę”

Alternatywnie możnaby to zapisać jako:

results = []
for x in filtered:
    results.append(distinct_colors[ x[0] ])

I już! Teraz powinniśmy mieć możliwość uzyskania trzech najważniejszych kolorów!

Składanie tego wszystkiego do kupy

Teraz możemy przetestować wszystko razem. Normalnie nie pisze się kodu testującego bezpośrednio w bibliotece, ale… wiecie, jak to jest. Zrobiłem sobie listę obrazków skradzionych z Twittera, wsadziłem je do listy i dla każdej z nich wywołałem wszystkie, dyskutowane wcześniej, funkcje.

Dopisałem jeszcze to_hex_expression, które zamienia RGB w znany nam dobrze format heksadecymalny używany w programach graficznych oraz CSS.

test_cases = [
    'test-cases/Dk82gZuVsAAcGho.jpg',
    'test-cases/Dk666IVUUAALxRx.jpg',
    'test-cases/Dk7kG4qU0AAJ5RL.jpg',
    'test-cases/Dk8oxdUVAAY6-JY.jpg',
    'test-cases/Dk9EPPVV4AA0obD.jpg',

]

from writers import to_hex_expression

for test in test_cases:
    print()
    image = load_image(test)

    bounds = get_bounds(image)
    pixels = get_pixels(image)

    gravity = detect_gravity(pixels, bounds)

    distinct_colors, occurance_counter = extract_distinct_colors(pixels, gravity, bounds)
    colors = filter_top_entries(3, distinct_colors, occurance_counter)
    for color in colors:
        print(to_hex_expression(color))

A oto rezultat:

test-cases/Dk82gZuVsAAcGho.jpg Gravity.VERTICAL
#446bae
#a10499
#35530b

test-cases/Dk666IVUUAALxRx.jpg Gravity.HORIZONTAL
#fcf779
#77ab56
#1fa874

test-cases/Dk7kG4qU0AAJ5RL.jpg Gravity.VERTICAL
#9eff00
#ff5c01
#cc406f

test-cases/Dk8oxdUVAAY6-JY.jpg Gravity.HORIZONTAL
#7f8f4e
#aca588
#ff6bb5

test-cases/Dk9EPPVV4AA0obD.jpg Gravity.VERTICAL
#24ff29
#1fb47a
#4a5d98

Trzy kolory „wyssane” z obrazka. Pełen sukces, dzień zmarnowany, wszyscy są szczęśliwi. Niestety, nie dotarłem do momentu w którym nauczyłbym kod łażenia „osobiście” na Twitter i podkradania obrazków, gdyż skończył się mi dzień.

Jeśli ktoś z czytelników uważa, że jest sens napisać drugą cześć, gdzie wpadlibyśmy grabić via API to można mi zostawić e-mail.

Przepraszam też jeśli ten tekst był zbyt chaotyczny i/lub bezużyteczny. Próbuję pobić prokrastynację przez brute force. Repozytorium z kodem jest dostepne na bitbucket, bronikowski/kaleidoscope.


Palec w oko

Homo erectus, homo sapiens, homo vatis1. Człowiek, co powstał z kolan, pomyślał po to, by opowiadać historie z dużego i małego „ha”. Człowiek z natury chce się wygadać, a czasem nawet chce być wysłuchany, ale głównie gadać.

Opowiadanie historii demokratyzowało się przez cały nasz czas na tej planecie. Od garstki liderów religii tłumaczących początek świata i bogów, aż po miliony użytkowników sieci społecznościowych z których wielu tłumaczy, jak świat się skończy i kto (zwykle „Oni”) się do tego przyczyni.

Gdzieś pomiędzy teraz a wtedy istniał świat w którym dostęp do technologii był ograniczony, ale ludzie nadal chcieli gadać. Był to świat w którym komputery osobiste były nadal zabawkami, a obliczeniowych mięśni dostarczały systemy UNIX-owe, popularne głównie w instytucjach naukowych, militarnych i uniwersytetach.

Każdy pracownik i student posiadał swoje konto, które było centrum cyfrowego życia. To tu przychodziły e-maile, tu kompilowało się oprogramowanie, tu odpalało aplikacje. Nic dziwnego, że katalogi użytkowników znajdowały się na partycji nazywanej tradycyjnie /home, był to prawdziwy dom dla e-bytów.

Ktoś w 1977 wpadł na pomysł protokołu, który pozwalałby „zapytać” systemu o fakty dotyczące danego użytkownika. Kiedy ostatnio był zalogowany, a jeśli jest, jak dawno dotknął klawiszy, jaki jest najnowszy e-mail czekający nań w skrzynce, kiedy ostatnio czytał pocztę, jak się nazywa i kilka innych, zbytecznych rzeczy.

Protokół ten został nazwany finger.

Informacje uzyskane tą drogą wydają się być trochę dziwne, ale jeśli weźmiemy pod uwagę, że „wsadzało się palec” w konto kolegi lub koleżanki z pracy/studiów, wiedza o tym, czy są przy terminalu i czy czytali już pocztę od czasu, gdy wysłaliście e-maila jest całkiem użyteczna.

Finger działał też w Internecie, gdy ten stał się faktem, człowiek mógł dla własnej frajdy dziabać paluchem znanych ludzi. No, znanych ludzi, którzy mieli konta na maszynach UNIX-owych, choć nie wiem, kto chciałby znać innych.

Co to ma jednak wspólnego z moim wstępem o potrzebie wygadania się? Finger czytał też dwa pliki z katalogu domowego użytkownika: .project i .plan.

W zamyśle miało to pomóc w organizacji pracy, gdzie .project opisywałby nasze długoterminowe działania, a .plan byłby zdaniem odpowiadającym na pytanie „co dziś robisz?”.

Niektórzy ludzie używali tych dwóch plików zgodnie z przeznaczeniem, związani obowiązkiem służbowym lub kompletnym brakiem poczucia humoru. Inni wsadzali do .planu tyrady o jedzeniu na stołówce, żarty, cytaty z książek, matematyczne dowody o wyższości Star Treka nad Star Wars i wszystko, co przyszło im do głowy.

Homo vatis1 nie zrodziło się wraz z erą Facebookiem, MySpace czy Twittera. Jeśli dacie ludziom możliwość napisania zdania, to znajdą się natychmiast ludzie piszący zdania ważne, zabawne i irytujące. Oraz ich czytelnicy.

W latach dziewięćdziesiątych finger został uznany przez większość administratorów za daemon niebezpieczny: program uruchamiany zewnętrznie, przez Internet, który czyta prywatne pliki z katalogu domowego użytkownika, czasem z podwyższonym dostępem to źródło potencjalnego bólu głowy.

Jeden z pierwszych robali używających Internetu do rozprzestrzeniania się, Morris, używał dziury znajdującej się w implementacji protokołu.

Tym samym popularność .plan spadła niemal natychmiast do zera. Ludzie jednak nie przestali opowiadać historii, zmieniły się tylko platformy i media, od rylca do glinianych tablic po pióra wieczne, od .plan do mediów społecznościowych. Nikt nie zamknie nam ust póki jest miejsce gdzie można napisać zdanie, szalet miejski jest na to dowodem ostatecznym.

* * *

W Internecie ciężko znaleźć jakieś archiwa wpisów do .plan, jego natura była bardzo efemeryczna. Jedyne popularne archiwum to .plan Johna Carmacka, autora wolf3d.exe i quake.exe.


  1. człowiek bard w kłamczo-łacinie 


Wolniej

Wiek średni to taki okres w życiu człowieka, gdy mimowolnie staje się „kołczem rozwoju osobistego” zaskarbiając sobie nienawiść wśród ludzi bliskich i przygodnych. Wszystkie błędy popełnione w życiu przepasuje czerwoną wstążką i obnosi je jak relikwie nie potrafiąc rozpoznać, że nie ma w nich nic wyjątkowego ani odkrywczego.

Uprawomocniony wchodzeniem w ostatni zakręt — już mocno przedłużonej — młodości, chciałbym Wam powiedzieć coś o uczeniu się. Jest to podwójnie skandaliczne, gdyż mury szkoły widziałem tylko od strony szarego tynku, gdy odbijałem odeń piłkę.

Struktura społeczeństwa zmieniła się już nie raz. Tak jak kiedyś chudy i spalony słońcem był z pewnością chłopem, którego jedynym dorobkiem jest garb tak bladaporcelanowa i pulchna była Hrabina. I gdy nawiniemy taśmę czasu w nasze okolice, sygnały statusu odwróciły się.

To samo stało się z „wolnym czasem”, choć w ogóle rzecz taka jak „wolny czas” w naszym rozumieniu jest produktem zupełnie nowym na rynku kultury. Kiedyś człowiek, co mógł się wyciągnąć na tapczanie i tak po prostu leżeć i wypierdywać dziury w materiale, był królem życia. Dziś kto nie uprawia wspinaczki i garncarstwa, najlepiej za jednym zamachem, jest prostakiem po stokroć. Wolny czas należy wypełnić zajęciami tak szczelnie żeby narastało w człowieku marzenie o rozwinięciu talentu do wypróżniania się w biegu, jak to czynią konie, między galopem od jednej aktywności do drugiej.

Są tylko dwie ważne rzeczy w uczeniu się nowych zdolności. Jak drogi jest sprzęt zakupiony do uprawiania hobby i jakiej klasy ludzie widzą Cię podczas go uprawiania. Kpię oczywiście.

Pierwszą rzeczą, o dziwno często pomijaną podczas skoku w nowe zajęcie, jest fakt, że trzeba te hobby na serio uprawiać. Mam pełen strój bramkarski, ale boisko widziałem pewnie 10 lat temu, nie wypada mi się nazywać „bramkarzem”, nawet „były bramkarz” brzmi głupio, jak „byłe dziecko”.

Jestem zwolennikiem pozytywistyczno-praktycznej definicji. Piszesz? Jesteś pisarzem. Nie piszesz? Nie jesteś. Biegasz? Jesteś biegaczem. Nie biegasz, nie jesteś. I może nie jesteś najszybszym biegaczem albo najbłyskotliwszym pisarzem. To jednak ocena wartości, a świat nosi wielu twórców, którzy są lepsi ode mnie, a nie naplułbym im na łeb, gdyby się palili. To wszystko są truizmy, ale bardzo łatwo się je zapomina, czasem nawet z premedytacją, gdy podczas wiosennego sprzątania przekładasz notatnik Moleskine z jedną zapisaną stroną (zakupy), buty do biegania i gitarę z zerwaną struną.

To prawda pierwsza: jeśli chcesz mieć jakąś przyjemność z uczenia się nowej rzeczy musisz ją uprawiać. Bardzo łatwo odstawiać teatr i grać przed sobą komedię. Ale nikt się nie śmieje, bo nikt tego nie ogląda.

Prawda druga: czym wolniej się uczysz tym większa szansa, że się nie poddasz.

W świecie zoptymalizowanym pod natychmiastową gratyfikację ciężko jest się przestawić na żmudną drogę. Jakby Jezusowi powiedzieć: „będziesz cierpiał, ale jaka to historia z tego wyjdzie”. Dlatego współczesnych synów bożych separuje się od zdrowego społeczeństwa w zakładach psychiatrycznych, komu by pasowała taka opcja!

Od miesięcy próbowałem nauczyć się Rusta. I moja droga zawsze przebiegała tak samo. Pobieżnie skonsumowany wstęp w dokumentacji. Kompilacja println!("Twoja stara");. Próba napisania czegoś. Frustracja. Porzucenie nauki na miesiące. GO TO 10.

Kilka dni temu postanowiłem, że przestanę skakać z jednego miejsca dokumentacji w drugie, próbując zmusić kompilator do respektowania mojego autorytetu wieloletniego programisty.

Godzina po godzinie, tworzyłem sobie katalog z nazwą jakiegoś elementu języka np. 03.array, 04.struct, 05.enum i mozolnie, pokornie, przepisywałem przykłady, modyfikowałem je, wymyślałem inne, testowałem hipotezy. Czasami aż mnie szczypało w dupę, że muszę znów pisać kod, który „wypisuje wszystkie elementy z tablicy wraz z ich indeksem”. I kiedy wreszcie zesztywniał mi kark okazało się, że podczas tych zupełnie głupich zajęć nie tylko załapałem idee, których opisy czytałem wcześniej na wyrywki, byłem też wewnętrznie zadowolony mimo że nie stworzyłem niczego oczywistego.

Teraz myślę do siebie, że „wolno” to może złe słowo, lepszym byłoby „metodycznie”, ale dychotomia „wolno” ↔ „szybko” brzmi mi lepiej niż „metodycznie” ↔ „chaotycznie”.

„Szybkość” to to, co marketingowcy umieszczają w dużym czerwonym kółku w nadziei, że odmieni Ci się to w głowie na „wygodę”. I w pewnym sensie jest to prawda. Ludzie spędzili wiele lat budując świat w którym 20% dostępnej wiedzy pozwala wykonać 80% zadań z zadowalającym skutkiem.

Dlatego dobicie do 21% spowoduje, że pobijesz większość. Dlaczego? Bo wolno.


Nazwa pliku jako UX

Ze wszystkich mądrych rzeczy, które powiedziałem i napisałem przez lata, tak o życiu, jak i o programowaniu, szczególne miejsce w moim sercu ma ta obserwacja:

Bardzo łatwo rozpoznać interface projektowany przez programistę: „godzina i piętnaście minut” jest wyrażone jako 1.25

Ta obserwacja była formą samokrytyki, gdyż podczas prowadzenia dema zauważyłem, że sam wykonałem takiego „międzymordziowego bazyliszka”. Od tego czasu, aż do teraz, oddałem wszystkie prace związane z tworzeniem interakcji ludziom, którzy się na tym znają. A przynajmniej powinni.

Zaszyłem się więc w ciemnej norze backendu, gdzie użytkownicy istnieją tylko jako miraże, tworzone i niszczone na potrzeby automatycznych testów. Bez historii, bez potrzeb, nie wysyłają świątecznych kartek. Perfekcyjna harmonia.

Ostatni projekt zmusił mnie jednak do opuszczenia mojej kryjówki, gdyż przypadła mi kluczowa rola, a że i projekt przypadł mi do gustu, byłem całkiem zadowolony i dałem nura.

Jednym z produktów systemu, który pisałem, były dokumenty do druku, gdyż część z naszych użytkowników jest cyfrowo wykluczona i nie chcemy aby potrzeba posiadania komputera z dostępem do Internetu była barierą. Ponieważ jedna osoba może mieć maksymalnie sto takich dokumentów, wymyśliłem i przeforsowałem zmianę. Dokumenty można scalać w pojedynczą grupę dokument, będący dla systemu równoważnikiem. Każdy dokument zawiera numer seryjny oraz sygnaturę kryptograficzną, dlatego zbudowanie takiej paczki jest całkiem proste i pozwala na łatwą weryfikację spójności.

Przepchnąłem ten pomysł zaczynając od współpracowników, przez kierownika projektu ze strony klienta, kończąc na akceptacji urzędu marszałkowskiego. Kiedy dostałem glejt z pieczęcią „no dobra, rób” usiadłem i zaprogramowałem.

Wszyscy żyli szczęśliwie kilka miesięcy, aż do momentu w którym Panie z rozliczeń zaczęły zwracać uwagę na rosnącą liczbę pomyłek przy zdawaniu paczek dokumentów. Bardzo dziwne, bardzo dziwne. Zalogowałem się jako użytkownik i poszedłem oglądać.

I wtedy zrozumiałem, że znów mam 1.25 jak w cytacie wyżej.

Dla własnej wygody trzymam paczkę jako SHA512 robiący za sumę kontrolną. To oczywiste, że tak robię. Kiedy piszę automatyczny test mogę od razu stwierdzić, czy dokument zapisany na dysku zgadza się z tym, czego się spodziewałem.

Dla mnie SHA512 jest oczywiste. Dla użytkownika natomiast otrzymanie pliku 4143aaf85e1a825463a8a202b9ee6ffa486[…]9a5edc944e3e473f89a889c85e093abe7adce5164dfefef0f3eded1e.pdf niesie bardzo niewiele informacji. W sytuacji, gdy mamy jedną paczkę problem rozwiązuje się naturalnie. Gdy użytkownik ma tych plików 12, heksadecymalny jazgot jest nie do przetrawienia.

Pracownik za kwadrans do fajrantu nie ma już mocy na sprawdzanie każdego dokumentu. A to rodzi błędy.

Dodałem więc nagłówek Content-Disposition: attachment; filename="%s_%s_%d" i sformatowałem nazwę pliku używając imienia, nazwiska i liczby dokumentów w paczce. Jan_Kowalski_15.pdf jest trudniej źle zinterpretować.

Od tego czasu liczba błędów spadła do zera.

Jedna linijka, a taka różnica. Nie wiem, czy być dumny z tej, szybkiej, reakcji czy też zawstydzony, że nadal mentalnie siedzę w backendowej jaskini.


Za kwadrans wiosna

Otworzyłem okno. Mimo ostrzeżeń o zanieczyszczeniu powietrza podjąłem decyzję, że lepszy jest dym płonących opon unoszący się z kominów łódzkich slumsów niż moja własna tytoniowa wędzarnia. Przez szparę wlał się chłód będący idealnym towarem zastępczym świeżości.

Usiadłem na fotelu i patrzyłem się tak w okno. Laptopa zostawiłem w biurze żeby się odtruć, widocznie nawyku patrzenia się w okna z tępym wyrazem na twarzy nie da się wyzbyć w jeden dzień odwyku. Kontemplowałem wszechświat, ale bardzo krótko, bojąc się że przez przypadek coś odkryję i będę musiał temu stawić czoło.

Zabrałem się za odpisywanie na listy i okłamywanie się, że nie jest mi zimno z powodu tego okna. Jak ludy prymitywne wierzyłem, że moje przekonanie o komforcie udzieli się, zwykle nie zważającym na byt ludzki, sferom niebieskim. I że będzie wiosna.

Po trzech godzinach, gdy wiosna się nie zjawiła, a w jej miejsce przyszła noc, musiałem uznać przewagę materii nad umysłem. Zamknąłem okno. Zapaliłem papierosa żeby nie dać się tej nowo nabytej świeżości zbyt łatwo.

I wtedy usłyszałem to leniwe, monotoniczne bzyczenie.

Tłusta mucha, pobudzona jak i ja, tą pierwszą obietnicą wiosny, podniosła swój zielony brzuch i zaczęła latać mi nad łbem.

Ja pisałem do paryżanki o chińskim atramencie, a ona przerywała mi co zdanie.

Zdałem sobie sprawę, że sam doprowadziłem do tej sytuacji. Nie przez otwieranie okna, nie. Widzicie, to wszystko przez technologię. 15 lat temu zwinąłbym w rulon gazetę i postawił się w roli sędziego, oskarżyciela i kata w jednej osobie. Po krótkiej gonitwie zgniótłbym ją na jakiejś płaszczyźnie i wydał z siebie pomruk zadowolenia; prymat homo sapiens zostałby zachowany.

Po upadku prasy papierowej mógłbym jej najwyżej przyjebać tabletem.

W sumie i tak nic na nim nie czytam.


Umówiłem się z nią na @833

Internet od zawsze był przestrzenią przyjazną eksperymentom i wynalazczości. I zgodnie z nazwą mojej ulubionej kolumny w „Młodym Techniku” — „Pomysły genialne, zwariowane i takie sobie”1 niektóre przetrwały nie tylko próbę czasu, ale stały się budulcem współczesnego świata. Inne wypadły z rąk twórców i z hukiem roztrzaskały się na betonowej posadzce rzeczywistości.

Pomysł, o którym chciałem Wam dziś opowiedzieć, tańczy na granicy tych trzech przymiotników. No, chyba, że będziemy patrzeć z punktu widzenia przyjęcia rozwiązania na rynku, wtedy nawet „takie sobie” to raczej laurka niż opis stanu faktycznego. Popatrzmy na niego oczami cyber-futurystów roku pańskiego 1998, kiedy Internet miał już pierwszy zarost.

Najważniejszym zadaniem sieci było połączyć nas wszystkich i stworzyć Globalną Wioskę, gdzie wektory wiedzy, różnorodności i zaradności dodadzą się rodząc sytuację, w której co drugi obywatel będzie Królem Filozofem. Dziś z perspektywy czasu widać, że idea wioski się spełniła: kumoterstwo, plotkarstwo i disko polo ma się dobrze.

Zostawmy jednak cynizm.

Kiedy zaczęliśmy pracować w globalnej wiosce okazało się, że wszyscy tyrają w systemie trójzmianowym. Idziesz do piekarza, a on śpi, gdyż jest na innym kontynencie, choć metaforycznie, na wyciągnięcie e-ręki. Strefy czasowe podstawiły nogę rozpędzającej się, globalnej, ekonomii. Próba umówienia się z kimś wymagała powtórki z geografii, ustalenia stref czasowych wszystkich uczestników, oraz tego, czy używają obecnie czasu letniego czy zimowego.

Swatch wpadł na pomysł jak rozwiązać ten nowy — na tę skalę — problem, sprzedając przy okazji niezłą górę zegarków. Swatch Internet Time!

Francja, po rewolucji, wprowadziła czas decymalny, oparty na 10 godzinach, które składały się z 100 minut po 100 sekund. Jako że ciężko się patentuje rozwiązania, które są jasno opisane w podręcznikach do historii, Swatch dokonał lekkiej modyfikacji: doba składała się z 1000 .beat, nie posiadały one strefy czasowej, więc były uniwersalne dla świata. Wystarczało, że umówisz się z nią na @833, weźmiesz od szefa akonto i wszyscy będą wiedzieć, kiedy to jest! Proste!

Oczywiście to nie zmieniło niczego w fakcie, że podróżujemy dookoła kuli plazmy i ludzie nadal śpią gdzieś kiedy zegarek Swatcha „wybija” @833.

Ja jednak byłem urzeczony pomysłem i choć nie miałem kontaktów z nikim, kto potrzebowałby się ze mną umówić w różnych strefach czasowych, dumnie włączyłem renderowanie ilości .beat na belce systemowej mojej Amigi. Próbowałem nawet nieśmiało podawać tak sformatowaną godzinę różnym znerdziałym znajomym, ale oni patrzyli tylko na mnie jak na dziwaka. Dwadzieścia lat później sytuacja nie uległa zmianie w tej kwestii.

Swatch nie był zadowolony z tego, że ich wynalazek jest tak beztrosko implementowany przez różnych obszarpańców, co pewnie nie mają zegarka ni garnituru i zrobił to, co każde lajfstajlowe korpo, zaczął ścigać „nielegalne dzielenie”, aż do momentu w którym nikt nie chciał się w to bawić. Trudno wymagać żeby każdy, z kim się umawiasz, miał zegarek tego samego producenta.

Dodatkowo Swatch, chcąc zapewne podbić wartość swojego wynalazku, wprowadził swoją własną strefę czasową, Biel/Switzerland, od której liczony był czas bazowy dla Internet Time.

Ktoś mógłby zapytać, czy jest jakaś merytoryczna różnica między umawianiem się na godzinę wg. UTC a tym oto wynalazkiem? Jest jedna, oczywista. Godzina z prefiksem @ jest bardziej e-cyber.

I tak pomysł genialny, bo stymulował fantazję o Jednym Świecie, zwariowany, bo ciężko wyobrazić sobie coś tak radykalnie dobrego żeby cały świat entuzjastycznie przytaknął, ale też taki sobie, bo w przeciwieństwie do innych zdobyczy epoki internetowej nie dane mu było oderwać się od cyca korpowładców.

A piszę o tym dlatego, że wracając wczoraj, lekko intelektualnie zmęczony imprezą, przypomniałem sobie o tym moim zegarku na belce Amigi i wymyśliłem, że dopiszę sobie to samo, tylko jako element belki tmuxa. Sama procedura jest trywialna.

  1. Weź obecną godzinę
  2. Policz ile sekund minęło od północy
  3. Ponieważ w 24h jest 86400 sekund, a chcemy 1000 jednostek, dzielimy to przez 86.4 i odrzucamy resztę
  4. Dzwoniący telefon to prawnicy szwajcarskich zegarmistrzów
  5. No division is illegal, hack the planet

Natychmiast po napisaniu kodu zdałem sobie sprawę, że jestem o godzinę za daleko. Jasne, muszę przekręcić datę na ich strefę czasową. Programowanie z uwzględnieniem stref czasowych przechodzi atrofię za każdym razem, gdy przestaję o nim myśleć. Poszedłem więc czytać dokumentację, ale za nic na świecie nie mogłem się dobrać do, nieoficjalnej przecież, strefy czasowej Swatcha.

Rzutem na taśmę odkryłem, że jest on równoważny UTC+1, dodałem więc brzydką arytmetykę na datach. Jestem pewien, że zrobiłem coś źle. Apple dwa lata wydawało iOS z błędem, który przestawiał budziki użytkownikom, a Microsoft miał firmware w Zune, które spowodowało, że jeden dzień nie dało się włączyć odtwarzacza. Skoro oni nie wiedzą, co robią, to ja też sobie pozwolę.

Efekt działania na terminalu:

#!/usr/bin/env python3
from datetime import datetime, timedelta
import pytz
import sys

def swatch_time(datetime_object = None, timezone_literal = 'Europe/Warsaw'):

    reset_clock = {
            'hour': 0,
            'minute': 0,
            'second': 0,
            'microsecond': 0
    }

    if not datetime_object:
        datetime_object = datetime.now()

    if not datetime_object.tzinfo:
        timezone = pytz.timezone(timezone_literal)
        datetime_object = timezone.localize(datetime_object)

    # Biel TZ is a unrecognized TZ that can be expressed as UTC+1
    # Thanks, Swatch
    swatch_timezone = pytz.timezone('UTC')
    datetime_object = datetime_object.astimezone(swatch_timezone) + timedelta(hours=1)

    midnight = datetime_object.replace(**reset_clock)
    time_delta = datetime_object - midnight

    if time_delta.seconds == 0:
        # don't divide against zero
        return 0

    return int(time_delta.seconds / 86.4)

if __name__ == "__main__":
    print("@{}".format(swatch_time()))
  1. Dział ten nazywałem też „Nygusem”, gdyż numery z lat 80-tych miały pana leżącego niedbale dookoła liter loga, standardowym zawołaniem bojowym w weekendy było „Babcia, poczytaj mi «Nygusa»”.

Opóźniona gratyfikacja

Ze wszystkich rzeczy, które najbardziej oczarowały mnie w tym całym komputerowym bajzlu, musiałbym wymienić automatyzację na pierwszym miejscu.

Mimo płynących lat nadal odnajduję okruchy magii w tym, że komputer, raz nauczony, potrafi powtarzać rzeczy bez czujnego oka operatora. Kiedy otrzymałem swoje pierwsze konto z dostępem do powłoki, napisałem na szybko dwa skrypty, które wysyłały e-maile na specjalny adres, przesyłający informację dalej na telefon komórkowy via SMS. Pierwszy informował mnie o loginach na mój shell. Siadałem do terminala, logowałem się i… pik! Drugi śledził mój /var/spool/mail/opi i przysyłał mi każdego ranka informację o ilości e-maili. Serce aż bije mocniej, gdy wspomnę tę ekscytację czymś, co dziś brzmi jak błahostka. Zabawne, że dziś moje skrypty działają odwrotnie i ukrywają pocztę, która do mnie przyszła. Odwrotność miłości to nie nienawiść — to obojętność.

Zanim otrzymałem to konto cierpliwie wertowałem „książkę do nauki Linuksa”, jedną z tych książek, które leniwie tłumaczą to, co i tak jest dostępne na stronach podręcznika man, ale to było jak uczenie się języka przez zapamiętywanie słówek, bez wymowy, bez kontekstu, ale z pełnym nabożeństwem iluzji zdobywania wiedzy.

Tam też natknąłem się na atd, daemon wykonujący polecenie — bądź serie poleceń — opóźnione o zadany czas. Prawie zemdlałem. Idea, że jest komputer, który nie tylko jest non-stop włączony, ale także non-stop „w Internecie”, a do tego mogę mu powiedzieć, co zrobić za kilka godzin wydawała mi się jak odkrycie podróży międzyplanetarnych przy użyciu puszki mielonki, kawałka sznurka i bardzo silnego postanowienia woli: niesamowite, a w ogóle nieprawdopodobnie, że ludzie nie siedzą godzinami wymyślając, co komputer może zrobić za godzinę! To musi zmienić cały świat.

Nie zmieniło świata, a wraz z upływającym czasem ludzie w ogóle przestali wiedzieć o atd. Kiedy zainstalowałem Debiana na nowym laptopie atd nie było w standardowym zestawie pakietów. Jak wtedy, gdy Twoja matka komunikuje Ci na obiedzie, że znalazła twoje stare magazyny i wyrzuciła je do śmieci. Maska dorosłości przykrywająca doskonale uczucie żalu.

Mimo to, myślę sobie, at jest jedną z tych rzeczy, która spadła za ladę i może znajdzie się jak będziecie malować, w przyszłości. Nie wiem, jak ludzie żyją bez tego, ale może to tylko ja. Może po prostu nikt nie powiedział ludziom, że mają non-stop takie nisko-profilowe cudeńko w systemie? Może jeśli im powiem, na ten przykład w notce, trochę wstawiony, to odnajdziemy wspólny język.

at to komenda, która jest klientem daemona atd, pozwalająca na uruchomienie polecenia, lub serii poleceń. W odróżnieniu od Crontaba zadania te są jednokrotnego użytku. Można oczywiście wywoływać skrypty.

Przykładowo, mój skrypt odpowiedzialny za deploy nowej wersji oprogramowania ma linijkę:

echo "./skrypt.sh" | at 1:00

Znaczy to ni mniej, ni więcej że o pierwszej w nocy, kiedy użytkownicy już zasną, pojęte zostaną działania integracyjne, które teraz powodowałyby ból zębów użytkowników. Gdybym używał do tego Crona lub innego cyklicznego odpalacza musiałbym przekazać w jakiś sposób stan, stworzyć pusty plik albo odłożyć wartość do redisa, to tylko komplikuje rzeczy.

Kiedy wychodzę z domu, a pasek „podstępu” pobierania tego czy owego waha się non-stop pomiędzy 30 a 40 minutami piszę:

sudo at now+1 hour, podaję hasło i w linii poleceń at piszę poweroff. Za godzinę komputer złoży się bez mojej interwencji i nie będzie marnował prądu.

Mieliście kiedyś do wykonania zadanie na serwerze, który jest pod sporym obciążeniem, które to obciążenie powoduje, że zadanie wykonywałoby się zdecydowanie zbyt długo lub — co gorsza — spowodowało śmierć ważnych części systemu przez wysycenie I/O? W skład at wchodzi polecenie batch, które nie czeka na dopełnienie się konkretnej daty, odpala zadane kiedy load spadnie do 1.5; jeśli wydaje się Wam to bezużyteczne nigdy nie widzieliście aplikacji, która rozpędzona łyka zasoby jak odkurzacz-fetyszysta.

Kolejkę oczekujących zadań obsługujemy przy pomocy atq, które wyświetla listę wraz z unikalnym identyfikatorem, którego możemy użyć wraz z atrm celem usunięcia.

Tak wiele, tak niewiele.

I wiem, że jest pewnie lepszy, współcześniejszy, daemon. Wysyła powiadomienia na Slacka, całuje użytkownika w czółko i w ogóle. Ale! Te narzędzia nie przeżyły tyle lat jako część *NIX-a dlatego, że panowie z workami, na których widnieje symbol dolara, sypali mamoną aż do momentu w którym krytykanci się poddali i odlecieli prywatnymi odrzutowcami. To po prostu jednofunkcyjne narzędzie, które robi, co powinno.

KISS your atd.


Rozszczepienie

Zanim Reddit stał się pierwszą stroną Internetu, był trzecią. Nie istniał jeszcze ekosystem pozwalający zwykłym użytkownikom na relatywnie tani dostęp do zawszedostępnego składu informacji, a serwisy hostujące obrazki dzieliły się na trzy rodzaje.

Ofertę darmową, obsraną wyskakującymi okienkami, obwieszoną reklamami, pod których ciężarem usługa czołgała się, irytując użytkowników. Ofertę płatną, obłożoną ograniczenami transferów i relatywnie kosztowną, często powiązaną z życiem profesjonalnym lub prywatnym, które może nie każdy chciał wiązać ze swoimi postami na Reddicie, gdzie tematem przewodnim jest dmuchanie kreskówkowych postaci, dosłownie. Istniały wreszcie serwisy chałupnicze, które studenci budowali w ramach podpieprzania zasobów serwera .edu.pl. Serwisy te często zapewniały szybkość i wygodę, a także pewność, że znikną one prędzej czy później bez słowa wyjaśnienia, grzebiąc twoje bardzo zabawne zdjęcia i łamiąc nieskończoną ilość odnośników ućkanych po forach.

Nie było dobrze, zwłaszcza w świecie, w którym obrazki — na serwisach takich jak Reddit, będących bezpośrednią ewolucją imageboardów — są największym dobrem.

Ktoś rzucił kiedyś pomysł, żebyśmy sfinansowali jeden z serwisów, który został demokratycznie wybranym docelowym miejscem do wieszania obrazków, bo prawdopodobieństwo podzielenia przez niego losu innych „dobrych serwisów powstałych z potrzeby społeczności bez pieniędzy” zaczęło oscylować dookoła jedynki.

Ludzie rzucili jakieś dolary i orkiestra grała dalej. O tym, że też rzuciłem, dowiedziałem się po latach z e-maila z podziękowaniami. Jestem tak szczodry, że nawet się nie chwalę i nie pamiętam, czyj serwis ratuję przed zgonem. Skromnie.

Minęły lata. Życie z datków, reklam i „sponsorowanych obrazków” było ciężkim chlebem.

W przemyśle podwykonawczym nie ma miłości. Nikt nie kocha gościa obierającego ziemniaki na zapleczu czy pilnującego, żeby mieszadło mieszało z dobrą szybością. Reddit używał serwisu Imgur tak, jak się używa podwykonawcy: z obojętnością, kiedy wszystko idzie dobrze, z nienawiścią, jeśli coś nie działa.

Nie widząc innej szansy na przetrwanie, Imgur postanowił zbudować własną społeczność, umożliwiając komentowanie i gromadzenie się pod różnymi banderami — sprawdzony przepis na zwabienie ludzi. Był dużo mniej przerażający niż Reddit (nie widzę młodych ludzi, którzy zacierają ręce, myśląc „Ojej, spartański design, gdzie w wątku o meczu są tysiące — wątkowanych! — komentarzy i osiem lat kultury opartej na sraniu we własne gniazdo! Dołączam!”). Użytkownicy wsiąkali więc na tyle szybko, że pojawili się nawet kapitaliści wysokiego ryzyka (cudzego) z workiem pełnym twardej waluty.

Większość użytkowników Reddita nadal używa Imgur jako miejsca zrzutu obrazków.

Uf, to historia, której mogłem nie pisać, ale mam pół litra zielonej herbaty do wypicia.

Użytkownicy Reddita wrzucają obrazki na Imgur bezwiednie, często anonimowo, półautomatycznie lub nawet automatycznie. Wszyscy nadal myślą o nim w kontekście serwisu usługowego. Gdy czasem kliknę jakąś galerię (praktycznie jedyny przypadek, kiedy ląduję na stronie ich serwisu bezpośrednio), widzę to, co widzi ich społeczność. I tu ostatnio zadumałem się.

Mamy sytuację, gdy jedna strona traktuje drugą przedmiotowo, ale ta druga, bez wiedzy pierwszej, rozwinęła własną kulturę i społeczność. Wszystkie obrazki trafiają więc do mieszkańców serwisu obrazkowego bez jakiegokolwiek kontekstu, a sam wrzucający nie ma najmniejszego powodu, żeby podejmować interakcję z elementem lokalnym.

Serwisy się widzą

Nie uderzyłoby mnie to, gdybym któregoś dnia nie nadganiał galerii subreddita /r/fountainpens — który, jak nazwa wskazuje, służy do chwalenia się piórami lub charakterem pisma („those who can’t, buy”) — i nie poczytał załączonych komentarzy. Ludzie pisali jakieś bzdety, bzdety, jakich nikt zainteresowany tym hobby by nie pisał. Popatrzyłem jeszcze, sytuacja się powtarzała.

Wyobraź sobie, że żyjesz gdzieś, gdzie jest nowocześnie i młodzieżowo. Co jakiś czas twój dom najeżdzają barbarzyńcy i wieszają na ścianach barokowe obrazy podpisane łaciną. Nigdy nie mówią nic, nie usprawiedliwiają się i nie tłumaczą. Wieszają i wychodzą. Żyjecie w dwóch przenikających się wszechświatach, obserwujecie to samo, widząc zupełnie coś innego. Nie w materialnym sensie, bo piksele są te same, ale cały sens pojawiający się wraz z odpowiednio umocowanym punktem widzenia jest inny.

Ten tekst nie zawiera żadnej puenty, gdyż do niczego Was nie przekonuję. To tylko jedna z tych obserwacji, od których robię „huh…”. Kiedyś bym ją zamienił w zbyt długą notkę o niczym.

Punkt widzenia zależy od zalogowania się.


Tay, otwórz drzwi

Technologia nie zwalnia. Przeszliśmy od komputerów, których nie można podnieść, przez komputery, które można, następnie takie, które można rzucić, aby zakończyć na tych, które upuszczamy niechący. Wielkimi krokami nadchodzi era osobistych asystentów w ogóle odpiętych od idei „urządzenia, które się posiada”, takich jak Amazon Echo czy Google Assistant.

Sukces jest jednak daleko, bo mimo olbrzymich skoków, nadal technologie Udające Inteligencję podczas interakcji bardziej przypominają grę w 20 pytań niż dramatyczny dialog z HAL-em 9000 o zamykaniu drzwi. Wielkie firmy już dawno zauważyły, że ciężko jest zbudować taką technologię bez dobrego źrodła informacji. Jeśli algorytmy mogą być „uprzedzone” uprzedzeniami autorów, to co dopiero dane, które są dużo mniej rygorystyczne w swej naturze. Czasem myślę, że Douglas Adams stworzył Marvina, robota z depresją, jako ostrzeżenie przed uczeniem algorytmów sztucznej inteligencji na korpo-poczcie i zgłoszeniach błędów, których z pewnością międzygalaktyczny rząd miał pod dostatkiem.

Najtańszą siłą roboczą na rynku są obecnie użytkownicy. Nie tylko robią rzeczy za darmo (ewentualnie za „odznaki”, które można spieniężyć), ale reprezentują w miarę szeroką gamę opinii, pochodzą z różnych kultur, rozmawiają różnymi językami. Nie ma takiej akcji świadomościowej, która mogłaby wtłoczyć w firmy technologiczne równie zróżnicowany wycinek świata.

Użytkownik skataloguje obrazki, użytkownik zabawi parser lingwistyczny rozmowami o życiu, użytkownik otaguje i utworzy listy. Użytkownik nie ma związków zawodowych, nie ma też wolnego.

W świecie synergii biznesowej firmy udostępniają swoich użytkowników innym firmom tak jak pożyczasz sąsiadowi młotek czy szklankę cukru — normalne zachowanie pozwalające budować partnerstwo i wzajemne zaufanie.

Tak właśnie Microsoft wpadł na pomysł, żeby zapędzić użytkowników serwisu Twitter — który to serwis służy do niszczenia wyobrażeń o aktorach i politykach oraz jako efektywny transmiter krótkich utarczek słownych — do „pracy przez zabawę”, tj. rozmawiania z ich botem, którego przebrano za nastolatkę i nadano odpowiednie imię: Tay. Taka forma międzymordzia (pomiędzy algorytmem danych rozgryzającym zdania na części mowy celem łatwiejszego połknięcia a białym pudełkiem, w które wpisuje się wypowiedzi) miała zmiejszyć napięcia zawsze budujące się w interakcji między człowiekiem a maszyną. Oraz zawęzić grupę biorącą udział w pracy przy pomocy naturalnego filtru społecznego („kto rozmawia z nastolatkami na Twitterze?”).

Microsoft, firma przechodząca drugą młodość, po pozbyciu się starych ludzi zyskała wigor, ale straciła też wiedzę zdobytą przez lata: pytanie Internetu to rosyjska ruletka w wersji „ciężko”, pięć kul i jedna wolna komora.

Tay zaczęła jako pogodna nastolatka z ograniczonym zasobem zainteresowań i ubogim słownikiem. Blogi technologiczne, widząc opcję na odfajkowanie jeszcze jednego wpisu, przepisały notkę prasową, co zamieniło się znów w zainteresowanie. Twitter gadał do Tay, ona słuchała.

Wiadomości dosięgnęły wreszcie podbrzusza Internetu, o którym z wypiekami na twarzy korporobotnicy czytają na smartfonach w kolejce do okienka. Tajemne, mroczne, skandaliczne, bezwzględne, składające się głównie z innych znudzonych korporobotników za siedmioma serwerami proxy.

Następnego dnia Microsoft zamknął projekt. Tay, przyuczona przez element anarchistyczny, stała się grubiańska, głosiła niepopularne tezy podszyte ksenofobią i rasizmem. W jeden dzień z cichej nastolatki na Twitterze wykluł się potwór, rasista, cynik, automaton powtarzający głupoty za swoimi rówieśnikami, a przecież spuszczony z oczu tylko na chwilę przez rodziców, którzy mieli dobre intencje.

Najbardziej boli mnie, że ludzie, zamiast gratulować Microsoftowi, wieszali na nim psy. Nikt nigdy wcześniej nie dokonał tak kompletnej, dokładnej symulacji bycia nastolatkiem. Ktoś powinien dać im nagrodę. To absolutny przełom.

Być może następnym produktem będzie para botów. Na start każdy z nich będzie przekonany 100% o swojej racji i niech skalibrują się wzajemnie. Najlepiej na Fecebooku1.

  1. Kaja zgłosiła jako literówkę, ale zostawiam, gdyż piękne.

Lista Osobista: podkasty, część trzecia

Listy z rzeczami do klikania cieszą się niezmiennie popularnością w Internecie. Nie wymagają wielkiego poświęcenia ze strony autora, są bezbolesne dla czytelnika. Cała filozofia zamyka się w wymienianiu rzeczy, czasem w kolejności, która ma wykazać „dobrość” lub „słabość” tematu listy, czasem bez tego rodzaju zobowiązań.

Nie chcąc kompletnie stracić rynku list internetowych, przedstawiam Wam trzecią edycję podcastowej listy przebojów wprost z mojego odtwarzacza. Napisałem już tyle wariacji tej listy — prywatnie, e-mailem, na życzenie — że w przyszłości skrócę sobie pracę i będę mógł wysłać tylko odnośnik.

Rozrywka, kultura i sztuka w słuchawki stuka

Kultura

99% Invisible

http://99percentinvisible.org/

Otwieram podcastem, który jest pierwszy na tej liście tylko dlatego, że taka jest natura sortowania w mojej aplikacji do grania. I nie, to nie jest zły podcast, to jest bardzo dobry podcast. Tak dobry, że często przeskakuję odcinki (wydawane w cyklu tygodniowym).

Brzmi bez sensu? 99% Invisible często produkuje odcinki, które są w 100%1 absorbujące. Są krótkie, więc jeśli coś przeoczę, próbując np. przejść przez ulicę, to zaraz się irytuję. Jeśli dam się znów wciągnąć kompletnie w materię odcinka, to przechodzę przez ulicę na ślepo.

99pi to nie jest radioreportaż, jaki pamiętacie, ale taki, jak sobie wyobrażaliście.

Odcinek startowy2: Holdout

Double Feature

https://doublefeature.fm/

Recenzowanie filmów to trzecie pod względem popularności zajęcie w Internecie. Drugie to recenzowanie gier komputerowych, a pierwsze — bycie padalcem. Pośród setek podobnych tematycznie podcastów Double Feature pozostaje niezmiennie moim wyborem numero uno. Połączenie osobowości prowadzących z ich wiedzą na temat filmów oraz wyborami samych tytułów do recenzji powoduje, że mogę często udawać wśród ludzi, że oglądałem filmy, przedrukowując językiem opinie, które usłyszałem w programie internetowym.

History of Philosophy Without Any Gaps

http://hopwag.podbean.com/

Podcast, którego tytuł mówi wszystko o zawartości. Jeden z niewielu, które radzę — jeśli już słuchać chcecie — słuchać od początku.

Philosophize This!

http://www.philosophizethis.org/

Podobnie jak podcast wyżej, ten też zajmuje się filozofią, ale jest mniej systematyczny (co nie jest złe dla odbiorców, którzy nie potrzebują 200 odcinków, aby dojść do tematu, o którym chcieli się dowiedzieć).

Odcinek startowy: Henry David Thoreau

Myths and Legends

http://www.mythpodcast.com/

Moja najnowsza perełka. Mity i legendy, historie, które znasz, w wersjach odmienionych przez kalejdoskop kultur, krajów i czasów.

Rekomendacja: przesłuchałem całość. Niektóre odcinki więcej niż raz.

The Reith Lectures

http://www.bbc.co.uk/programmes/b00729d9

Trudno to nawet nazwać podcastem. To seria wykładów, które odbywają się co jakiś czas z błogosławieństwa BBC. Zdecydowanie nie polecam jako „tła do pracy”, nawet gdy słucham na leżąco, wyskakuje mi żyła na czole od intelektualnych przysiadów.

Odcinek startowy: Democracy has a Bad Taste

Sztuka

The Pen Addict

https://www.relay.fm/penaddict

Pióra. Atrament. Notatniki. Plecaki. Piórniki. Pióra.

Czasem zdrajcy wspomną o długopisach, ale jednak pióra.

Moja ziemia obiecana.

Art Supply Posse

http://www.artsupplyposse.com/

Akwarele. Farby olejne. Ołówki. Pióra. Papier.

Czasem wywiady z ludźmi, którzy tych rzeczy używają.

Rozrywka

Listen to Lucy

http://www.acast.com/ft-lucy-kellaway

Dobrego komika można poznać po tym, że od lat bije po tym samym temacie, a ten puchnie ciągle w różnych miejscach, przynosząc radość obserwatorom tej masakry.

Lucy, felietonistka Financial Time, tydzień w tydzień nawiedza moją duszę esejem o tematyce w zakresach: koszmary komunikacji w biznesie, koszmary kultury w biznesie, koszmary kultury komunikacji w biznesie.

Każdego tygodnia łączę się z nią sercem w nienawiści do okrągłych przemów, które osuszone z przymiotników stają się mniej groźne i mniej ważne.

nerdy nocą

http://nerdynoca.pl/

Podcast po polsku! Kaja rozmawia z ludźmi, którzy znają się na różnych rzeczach. Audycje dla koneserów wiedzy wszelakiej. Jest na to wyraz: nerdów. Można słuchać za dnia.

Odcinek startowy: Sprawy atomowe

No Such Thing As A Fish

https://audioboom.com/channel/nosuchthingasafish

Wspominałem wyżej, że wielokrotnie polecam ludziom różne e-słuchowiska. To jedyne, które ma 100% sukcesu wśród słuchaczy.

Program komediowo-naukowy, brytyjskie akcenty, anegdoty o genitaliach. Triumwirat smaku.

Sawbones: A Marital Tour of Misguided Medicine

http://sawbones.libsyn.com/

Historia medycyny to historia nauki, tylko bardziej, bo była praktycznie połączona z przeżywalnością populacji — wynajdywanie pojazdu do latania napędzanego siłą mięśni zabijało najwyżej wynalazcę, przepisywanie upuszczania krwi na każdą przypadłość miało dużo gorsze konsekwencje. Każdy odcinek to naukowo-historyczna analiza jednego zabiegu czy leku, który z perspektywy czasu wydaje się być okropnym żartem.

The F Plus

https://thefpl.us/

Internet połączył wszystkich. Ten błąd, teraz nienaprawialny, pozwolił grupce ludzi zbierać się co jakiś czas i czytać rzeczy, które ludzkość wypisuje w Internecie.

Fora niszowych fetyszy, manifesty programowe partii rządzących nieistniejącymi mikro-narodami, pojedynki między fanami rzeczy głupich, to wszystko zostanie przeczytane ku uciesze gawiedzi.

Odcinek startowy: The Sound Quality Is Inaudible

Komputery, komputerów od cholery

Amigos Amiga Podcast

http://www.amigospodcast.com/search/label/podcast

Stary amigowiec i amigowy neofita grają w gry, to w sumie wszystko.

Garbage

http://garbage.fm/

Rzadki przypadek technologicznego podcastu, gdzie nie mieli się nagłówków z internetowej prasy kolorowej. Znaczy czasem też mówi się o gadżetach, ale nie tylko, gdyż obaj prowadzący są okazjonalnymi ulepszaczami projektu OpenBSD, możecie więc słuchać o tym, jakie problemy są z pisaniem sterowników do USB-ETH lub jak ciężko odpalić kernel BSD na Google Pixel.

Linux Voice Podcast

http://www.linuxvoice.com/

Audycja powiązana z magazynem (papierowym!) pod tym samym tytułem.

The Bike Shed

http://bikeshed.fm/

Podobne trochę tematycznie do Garbage, z tym że bardziej skłania się ku dyskusjom o niuansach języków programowania i aplikacjach pisanych przez prowadzących (którzy co jakiś czas się zmieniają — podcast ten jest piarowym frontem studia konsultacji dla klientów ze zjebanym produktem, więc ludzi do gadania jest wystarczająco). Obecnie główny przechył tematyczny to Rails, Rust i Eliksir.

Retro Asylum

http://castaway.media/retroasylum

Brytyjski program retro-komputerowy o wszystkim, choć z mocnym naciskiem na gry. Dwukrotny laureat nagrody „najlepszego podcastu na świecie” i ostateczny dowód na to, że głosowania w Internecie, a zwłaszcza ludzie biorący wyniki tych głosowań na serio, doprowadzą do świata, w którym nikt nie będzie szczęśliwy, a wszyscy będą źli.

Retro Computing Roundtable

http://rcrpodcast.com/episodes/

Cotygodniowy przegląd wydarzeń, nowinek i ciekawostek ze świata komputerów, które nie mają Snapchata. Takie „e-7 Dni Świat” dla starych ludzi.

Piłka Nożna Gola!

Długie lata broniłem się przed sprawdzaniem świata podcastowego pod kątem kopanej. A kiedy wreszcie się namówiłem, trafiłem na pole tak suche i zaniedbane, że nawet górska koza pokręciłaby łbem na ofertę zamieszkania. To oczywiście działo się w czasach przedrenesansowych, gdy jakąkolwiek jakość miały tylko audycje okołotechnologiczne.

Miesiąc temu, może trochę wcześniej, Filip po raz kolejny zasugerował mi, żebym dał szansę programowi o naszej lokalnej piłce. Ponieważ darzę polską piłkę podobną niechęcią co polskie podcasty3, ignorowałem jego sugestie z pełną świadomością popełnianego czynu. Aż któregoś dnia wyrzuciło mnie na kilkukilometrowy spacer i kliknąłem wtedy „plej”.

Skracając długą historię: zaskoczony pozytywnym doświadczeniem poszedłem po dokładkę.

Football Weekly

https://www.theguardian.com/football/series/footballweekly

Nacisk idzie głównie na futbol brytyjski (duh, Guardian), ale każda audycja zawiera też przegląd ważniejszych wydarzeń na boiskach europejskich. Całkiem zabawne, duża grupa komentatorów (w tym zagraniczni), odcinki specjalne, ogólnie: doskonały skrót dla ludzi, którzy przepuścili weekend piłkarski.

Hattrick

http://soundcloud.com/hattrickpl

Moją genezę podłączenia się pod to słuchowisko o kartofliskach już pisałem. Słucham, bo jest jakaś chemia wśród prowadzących, słucham też dlatego, że mam Schadenfreude na polską ligę. Pewnie to ukryty smutek po tym, że zatopiono (a raczej: załoga wycelowała armatę w dno statku i podpaliła lont) mi „mój” ełkaes, który obecnie błąka się po ligach tak niskich, że małe dziecko potrzebuje palców do ich policzenia.

Przykładowy odcinek: HattrickPL 34

The Final Third

http://soundcloud.com/thefinalthird

To trochę antyteza do Football Weekly, bo amatorski i irlandzko-szkocki, a trochę synteza, gdyż zarówno komentarz, jak i opinie pochodzą od ludzi, którzy rozumieją sport. No i bluzgają, bo trochę antyteza.

Zawsze Zielone

Polecane już we wcześniejszych odcinkach i „na zawsze w mym sercu”.

The Jeff and Casey Show

https://jeffandcaseyshow.com/jacs_all_podcast.rss

Anime World Order Podcast

http://www.animeworldorder.com/

Dan Carlin’s Hardcore History

http://www.dancarlin.com/

Overthinking It Podcast

https://www.overthinkingit.com/

Posłowie

Mój proces filtrowania podcastów jest bezlitosny. Jeśli moje serce nie trzepocze z ekscytacji na widok nowego odcinka, znaczy to, że już niedługo się z audycją pożegnam. Dość powiedzieć, że usunąłem kilka z tej listy podczas pisania. Otrzymujecie więc zestaw sprawdzony i wystarczy, że będziecie identyczni ze mną pod względem charakteru, ideałów i zainteresowań, aby cieszyć się nim bez ograniczeń.

A kto się nie cieszy, ma swoje własne propozycje lub po prostu chce wskazać literówki i lapsusy, może zawsze napisać mi e-mila.

  1. prawdziwi jednoprocentowcy
  2. taki odcinek, który mniej więcej reprezentuje, co się zwykle dzieje
  3. Jest to wynik mojego uprzedzenia, jak i złości, że sam nigdy nic nie zrobiłem. O szczegóły trzeba zapytać mojego psychoanalityka

Etos Zróbtosamowca

Wychodzi mi na to, że cała moja kariera internetowego pisarczyka zamyka się w syzyfowym cyklu wpadania na doskonały pomysł i patrzeniu, jak ten pomysł toczy mi się na sam dół, na karty notatnika. Nawet teraz, pisząc o tym, nie piszę o czym miałem. A miałem pisać o Linuksie. Osiem lat temu myślałem, że miałbym doskonały tekst o mojej dziesięciolatce z tym systemem, potem przepuściłem piętnastoletnią rocznicę, bo myślałem, że szesnastoletnia będzie doskonała jako żart, bo to taka okrągła rocznica.

To było dwa lata temu i mogę Wam obiecać, że za dwa lata też nie napiszę na dwudziestą. Prawdopodobnie. Szczerze mówiąc nawet nie wiem, co można powiedzieć, zmiany w tych latach są tak daleko idące, że nie potrafiłbym ich wymienić. Te na gorsze łatwiej, bo człowiek współczesny żyje lepiej w trybie auto-wzburzenia. Jeśli nie mogę zebrać się na jakiś sensowny raport z tego, co było, może lepszym tekstem byłby moje zeznania: „czemu się skazałeś na taki los?”.

Kiedy zaczynałem z Linuksem, system ten miał przypiętą łatkę ziemi obiecanej dla smutnych, zbyt chudych, zbyt grubych, brodatych, cytujących religijnie programy komediowe, ateistów z twarzami naznaczonymi binarnie pryszczami, mieszkających w ciemnych norach, w których nocami popychają kijami od szczotki pakiety. Wpasowując się idealnie w ten stereotyp wiedziałem, że to miejsce, gdzie odnajdę — jeśli nie szczęście — zadowolenie.

To oczywiście żart. Trochę. Moją krótką przygodę z Windowsem (2001-2002) zakończyło uzależnienie się od radykalnej i bezwzględnej wolności do robienia tego, co mi się podoba. Automatyzacji. Zmieniania. Zestawiania ze sobą rzeczy, które osiągają masę krytyczną niszcząc system, oraz wiedza, że mogę go odbudować, jeśli tylko zrozumiem dlaczego eksplozja nastąpiła. Wiele z tego to tylko żonglerka piłami łańcuchowymi, gdzie widz podziwia bezużyteczną umiejętność i ma trochę nadzieję, że żongler złapie za którymś razem za ostrą część. Jest jednak druga strona, ktoś kto ma 12 pił będących jego źródłem utrzymania bardzo szybko uczy się, jak się je oliwi, ile trzeba wlać paliwa na jeden pokaz żeby było ekonomicznie i wreszcie, jak nie łapać za tę część, która przynosi natychmiastowy ból i odbiera zdolność liczenia do 10 bez ściągania butów.

Któregoś dnia, zaproszony na piwo przez sąsiadów którzy mieli jakieś tam znajomości z moją ówczesną dziewczyną, próbowałem im wytłumaczyć jak działa to całe otwarte oprogramowanie. Byli to bardzo grzeczni ludzie, jedyną rzeczą wychylającą się poza normę, było to że jeździli motorynką po mieszkaniu, więc słuchali uważnie i typowym dla gospodarzy zainteresowaniem, gdzie nie spoglądasz na zegarek. Wysnułem analogię: jest wielu autorów opowiadań oraz ktoś, kto zbiera je do kupy i wydaje antologię. Wydawało mi się, że to bardzo dobra analogia, bo nikt nie robi jednego i drugiego dla fortuny. Nie wiem, czy to kupili.

Bezcelowa anegdota, ale ukazuje co mnie zwabiło.

Komputer osobisty nazywa się tak dlatego, że mamy do niego fizyczny dostęp i przechowuje nasze prywatne dane. Ja posiadam komputer swojski, jak smak matczynej pomidorówki z ryżem. Robi to, co mu mówię. Chyba że popełniam błąd, ale za radykalną wolnością idzie też odpowiedzialność za czyny. Kiedy mówię mu „skacz!” pyta, „jak wysoko?”. Odpowiadam: 129, a on zapada się pod ziemię. 1

Postanowiłem o tym napisać, gdyż dziś, mimo zaaplikowania dopiero jednej kawy, ukazał mi się bóg wszystkich Zoś-Samoś i wyszeptał mi do ucha, „ha ha, niezły haks, ziom.”, więc opowiem, jak było.

Do czytania poczty używam Mutta, którego sloganem jest „wszystkie klienty poczty ociągają, Mutt mniej”, co jest prawdą. Ponieważ moje życie spędzam przybity do konsoli terminala, używam wraz z nią programu tmux, który pozwala na uruchamianie wielu aplikacji podczas jednej sesji i umieszczenia ich w tabach, tak ja Wy to robicie z kartami przeglądarki. Nieustannie, przez nieuwagę lub zwykłe zapomnienie, odpalam kilka kopii Mutta, co zwykle nie powoduje problemów, ale często psuje mi ciąg pracy, bo trafiam na złego. Linuks nie pyta, po co Ci 37 klientów pocztowych, widocznie masz taką potrzebę. Znów, radykalna wolność do bycia niekompetentnym. Kiedy o 9 rano doszedłem do trzeciego Mutta coś we mnie strzeliło i pomyślałem, „nie no, kurwa, to już jakieś żarty, zaraz się wścieknę i to naprawię!”.

Ponieważ musiałem wejść do biura postanowiłem przemyśleć problem człapiąc się ulicami. Dosłownie człapiąc, gdyż skręciłem nogę i trasa, która zajmuje mi normalnie nie więcej niż kwadrans teraz potrafi się przeciągnąć nawet do minut czterdziestu.

Przeczytałem dokumentację, drugą i zanim wypiłem pierwszą szklankę kawy w biurze, miałem rozwiązanie. Skrypt, który, jeśli wywołuję polecenie po raz drugi, nie odpala aplikacji kolejny raz, przełącza tab na ten, który ją zawiera. Zatarłem ręce i zaśmiałem się do siebie. Dwanaście pił łańcuchowych krążyło w powietrzu, bez widowni, a ja byłem zadowolony, że osiemnaście lat nie poszło na marne! Tylko w życiu osobistym, ale ono, oczywiście, nie przychodzi z kodem źródłowym, a Jahwe nie akceptuje patchy.

  1. ciężki żart

Buenos Aires

Podchodzi do mnie facet na skrzyżowaniu, rękę ma wyciągniętą i jasne jest, że oczekuje uścisku. Patrzy mi się prosto w oczy i kiedy wreszcie podaję mu dłoń, potrząsa nią energicznie, jakby spotkał przyjaciela, który przepadł w odmętach historii. Czyżbym znów padł ofiarą prosopagnosii, choroby, na którą z pewnością nie cierpię, a która często służy mi za wymówkę w takich właśnie sytuacjach? Pytam więc typa, czy się znamy, a jeśli tak, to gdzie się poznaliśmy.

— Cztery lata temu kupił Pan ode mnie uszczelkę.

— Kupiłem uszczelkę?

— Bez wątpienia.

Ta historia nigdy się nie wydarzyła - na ulicy miasta. Dzieje się non-stop w mojej skrzynce pocztowej, gdzie Firma Nieznana na przemian z Firmą Anonimową składają mi szczere życzenia z okazji naszej iluś-tam-letniej współpracy, która polegała na tym, że zakupiłem od nich jakiś drobiazg, albo, w ramach uprawiania startupowej rozwiązłości, założyłem konto, żeby zbadać, co niesie przyszłość.

Przyszłość przyniosła tylko e-maile o naszej przeszłości.

Wiadomo, że utrzymywanie kontaktu z klientem jest niezmiernie ważne. Niezmiernie fałszywie brzmi jednak list, który udaje, że świetnie się znamy i dzwonimy do siebie w niedzielne wieczory, by opowiedzieć o swoich smutkach, nadziei nadchodzącego tygodnia i kobietach, które kochamy. W dobie wtykania przyuczania mechanicznego i „sztucznej inteligencji” wydawałoby się, że sprofilowanie odbiorcy nie będzie wielkim problemem. A tu nie. Obcy ludzie wyciągają dłonie w geście powitania.

To nie jest jednak najgorsze. Rozumiem, że nie każdy, kto wynajmuje serwer za piątaka i internetowy sklep by przemo™, musi wychodzić mentalnie poza model ulotek wciskanych do skrzynki.

Kiedy rdio, serwis streamingowy (który już wyciągnął nogi) pojawił się na polskim rynku, założyłem konto, żeby „rzucić uchem” na ofertę. Przed bliższym zapoznaniem się powstrzymała mnie inercja i tarcie: na Spotify jest Lan, a Lan ma najlepsze listy odtwarzania. Przesłuchałem dwa utwory i zostawiłem, żeby sobie gniło.

Kilka tygodni później otrzymałem e-mail od rdio, że mój najukochańszy zespół, ten, którego dwa utwory przesłuchałem wcześniej, jest mi polecany.

Sytuacja powtórzyła się znów. I znów. Dwa odsłuchania spowodowały, że w oczach serwisu stałem się kompletnym fanem kapeli Maanam. Z pewnego punktu widzenia mieli rację: 100% odsłuchań.

Siedziałem w lesie i opowiadałem tę historię pijanemu przyjacielowi. Czwarta nad ranem, on już nie rozumie, a może ja nie potrafię tego opowiedzieć. Ptaki śpiewają, ognisko jeszcze pracuje nad poranną mgłą.

Tablet robi pik.

Maanam wydało singla.

Za kilka dni kolejny numer njuslettera do czytania. Można się zapisać.


We’re fine. We’re fine here now, thank you. How are you?

Star Wars było kamieniem węgielnym na którym wielu z nas zbudowało swoje dziwaczne kościoły, pełne zabobonów, zwyczajów i cytowania materiału źródłowego, aż do odpadnięcia uszu przypadkowego słuchacza.

Nie moim. Dużo większy wkład w moje przyszłe życie miały Tron i Wizard. Ten drugi miałem nawet kiedyś zrecenzować 1 ale ostatecznie się poddałem. Tron? Tron wiadomo. Programiści, programy.

To nie znaczy, że nie ma w moim sercu miejsca na Gwiezdne Wojny.

Moja historia z Skywalkerem jest trochę inna, jest naznaczona.

Był któryś rok, przypominając sobie jak wyglądała moja siostra, zgaduję, że jeszcze przed latami dziewięćdziesiątymi. Od kilku lat byliśmy szczęśliwymi posiadaczami odtwarzacza wideo, który Ojciec kupił gdzieś z zachodniego przemytu, w stanie, który dziś na Allegro opisuje się jako „nieprzetestowany”. Głowica była martwa. Na szczęście, nieznanymi dla mnie drogami, zapasowa głowica znalazła się we Wrocławiu.

Ojciec, zaraz po zatrzymaniu się na Wrocławiu Głównym, udał się do ZOO, gdzie zakupił nielegalnie głowicę od pana Gucwińskiego. Tu mógłbym skończyć opowiadanie, bo handel nielegalnym osprzętem elektronicznym w PRL-u to było coś. W zeszłym miesiącu kupiłem naklejki z USA i się zgubiły po drodze. Ach, gdzie ci przemytnicy zeszłych lat, cyberpank nic na was nie ma.

W każdym razie mamy wideo, a ja na imieniny dostałem własną kasetę; kasetę, którą mogłem kompletnie rządzić. Co jest na niej, co zostanie skasowane. Poezja.

Dostaję informację, że w weekend będzie w telewizji Bardzo Dobry Film. Był to też weekend w którym mieliśmy odwiedzić prababcię Annę w celu okołorodzinnym.

Ustawiłem więc timer, ponieważ technika zawsze była miękka w moich dłoniach i pojechałem z rodziną. Już zupełnym dodatkiem było to, że dużo starszy kuzyn zaprezentował mi tam Myszkę Miki zbierającą jajka, przenośną grę nieznanej mi firmy Game & Watch Nintendo.

Minął czas, Ojciec odpalił Syrenę i wróciliśmy do domu. Kaseta wystawała z paszczy odtwarzacza, tak jak to zaplanowałem.

Włożyłem ją i zacząłem oglądać.

Każdy wie, jak to idzie: Darth Absolutny Drań Vader, dwa zachodzące słońca, Wuj Obi, zespół z kantyny, Han strzela pierwszy, scena w zsypie na śmieci. Wszystko to opanowało mnie na przynajmniej rok. A gdy minął (a może więcej?), dostaję informację, że w weekend będzie w telewizji Bardzo Dobry Film. Był to też weekend w który mieliśmy odwiedzić prababcię Anię w celu okołorodzinnym.

Na rynku były już rosyjskie podróbki Game & Watch.

Nie byłem pewien, czy chcę skasować Gwiezdne Wojny. Znałem je na pamięć, ale to przecież nic nie znaczy. Ojciec namawiał. Mówił, że jest więcej dobrych filmów. Dałem się przekonać.

Kaseta była wysunięta, gdy wróciliśmy. Znak, że znów się udało. Pamiętam podniecenie na myśl, co przyniesie mi kolejny Dobry Film!

Zacząłem oglądać i z każdą minutą rosło moje rozczarowanie, złość i żal, po skasowanym hicie. Nagrałem Odyseję Kosmiczną 2001: film z pewnością wspaniały, ale kompletnie nie do zrozumienia dla umysłu prawdopodobnie-mniej-niż-dziesięciolatka. A końcowe sceny? Kompletny dadaizm.

Gdzie jest triumf dobra nad złem? Eksplozja? Ceremonia wręczania orderów? 2

Minęło już wiele lat, nowelkę przeczytałem przynajmniej kilka razy (pierwszy raz nie łącząc jej nawet z filmem, który wyparłem) ale nadal nie mogę wybaczyć Kubrickowi, że puścili go wtedy na Jedynce. I za każdym razem, gdy słucham kulturoznawców mówiących o przełomowym filmie science-fiction nie mogę nie skomentować w swojej głowie „że chuj tam, że sztuka, skasowałem przez to Gwiezdne Wojny, nic się nie działo, a potem stary facet jadł zupę”.

A jutro idę o północy zobaczyć premierę nowych Star Warsów, a gdy wrócę, zjem zupę, gdyż też jestem starym człowiekiem.

  1. zrobiłem nawet filmową plejlistę do czytania
  2. w fanowskiej wersji Chewie dostaje medal, jestem zadowolony

Humanum TERMINATED est

Diamenty potłuczonego szkła rozsypały się po ulicy. Za nimi podążyły drzazgi framugi i odgłos dudnienia. Dudnienie zbliżało się.

Przedwczoraj wszystko było w porządku. Przedwczoraj odpalaliśmy nasz wielki projekt. A dziś nasz wielki projekt położy nam kres.

Nikt już nie wie, czy utraciliśmy kontrolę, czy może programiści — jak zwykle — dostarczyli kod pełen dziur i nieprzetestowanych zakamarków. Bez względu na wagę swej pracy programiści nie mogą się nigdy wznieść nad swój zwykły poziom. Strona pizzerii, na której nie działa koszyk zamówień, i łódź podwodna, której włazy otwierają się automatycznie o 12:38, traktowane są z taką samą powagą. Obie sytuacje mogły być nawet spowodowane tym samym błędem.

Robot. Właściwie tylko lekko humanoidalny czołg – nikt nie miał w budżecie kasy na danie mu emocji, skomplikowanych wspomnień z czasów, zanim istniał, żeby miał konflikt wewnętrzny. Nie miał nawet twarzy, o ile nie liczyć reflektorów, miał rakiety, działa, gąsienice płaszczące wszystko bez dyskryminacji. Był to pragmatyczny robot: żadnych snów o owcach, za to doskonały układ celowniczy.

Wczoraj nic nie było w porządku. Wczoraj miasto skonsumował ogień. Szczątki obywateli zalepiały szczeliny między ogniwami gąsienicy. Na szczęście w swojej pracy robot był metodyczny i spopielał blok za blokiem, zgodnie z mapą topograficzną miasta.

Działka budowlana? Napalm. Działka z budynkiem? Napalm. Fabryka napalmu? To samo.

Biedne dzielnice, które trzymały się pazurami brzegów miasta, zostały już spopielone i teraz, powoli, padną parki. Padną butiki. Padną ławki stojące na czystym bruku. Spopieleją kawiarnie, czarnymi kałużami spłyną sklepy z winylowymi płytami.

Na szczęście nikt już nie stanie się gąsienicowym smarem. Mieszkancy wyciągnęli wnioski i pod osłoną nocy wynieśli się za granicę zasieków ustawionych przez połączone siły wojska i policji.

Dziś robot stoi w okolicach parku prowadzącego wprost do centrum. Nie pada żaden strzał, napalm jest letni, a brak drżenia gąsienic sugeruje zamarcie silników.

W sztabie dowodzenia konsternacja. Czy to pułapka? Czy jednak przepowieści z książek fantastyczno-naukowych się spełniły – gąsienice poznały smak ludzkiej krwi i teraz czekają na więcej?

Zapadła decyzja: zobaczymy, co się stanie. Przyszło jutro i nie stało się nic.

Ekipa złożona z żołnierzy i naukowców przesuwała się nieśmiało ulicami w kierunku zasłaniającego wschodzące słońce robota. Stanęli wreszcie w obecności niedawnego niszczyciela i dyskutowali, który z nich spróbuje dotrzeć do panelu kontrolnego, sprawdzić, co się stało, i ewentualnie przyłożyć rękę do utrwalenia tego stanu.

Drogą losowania wybrano ochotnika. Nieszczęśnik, uzbrojony w płaski śrubokręt, zaatakował.

Klapa ochronna nie stawiała wielkiego oporu, zresztą nie była kompletnie dokręcona: z czterech śrub trzymały tylko dwie. Ekran obudził się. Ochotnik złapał się za głowę i, nie montując ponownie osłony, zszedł do ciasno zbitej grupki kolegów.

Pomachał im, dając znaki, że nie ma zagrożenia, a kiedy zbliżył się na słyszalną odległość, powiedział:

— Mamy szczęście, że jesteśmy głupimy nierobami. Nasza głupota nas dziś uratowała. Robota można zaciągnąć do fabryki. No, jak będzie fabryka – spojrzał w kierunku spalonych części miasta – w przyszłości. Okazało się, że nie załadowaliśmy mu kompletu map, a gdy chciał to naprawić, pobierając aktualizację… bum! Sprawdzanie certyfikatów jest passé, prawda?

Naukowiec przestał mówić, machnął ręką z rezygnacją i oddał śrubokręt pierwszej napotkanej osobie, po czym poszedł w kierunku dowództwa.

Kiedy grupa dotarła do ekranu konsoli, dało się przeczytać:

Miejski dostęp do Internetu, proszę się zalogować.


Wyciek godny zaufania

Nieważne jak mówią, ważne, żeby mówili: to powiedzonko jest przykazaniem ludzi, którzy żyją ze sławy. Mam nierozsądne opinie o piosenkarzach, których muzyki nigdy nie słyszałem. To bardzo złe podejście, ale też zupełnie naturalne. W ogóle mnie zatem nie dziwi, że jednym z najważniejszych narzędzi w rękach nastolatka szukającego społecznej akceptacji w grupie jest udawanie niewiedzy o popularnych wydarzeniach i osobach.

Też nie czytałem Coelho, gdyż śmierdzi chujem.

Ludzie sławni żyją w symbiozie z tymi, którzy ich nienawidzą. Weźmy nastoletniego kanadyjskiego piosenkarza, który powiedział coś głupiego — mówienie głupich rzeczy jest wbudowane w nastoletniość. Ci, którzy go nie znoszą, mogą odczuwać przyjemność moralnej wyższości, natomiast jego fani mogą zewrzeć się jeszcze mocniej w oblężonej twierdzy, pozbyć się nieprawomyślnych ze swoich szeregów i, chwytając się za ręce, stawić opór.

Wszyscy wygrali.

Prawdziwy problem narodził się wraz z urzeczywistnieniem powiedzenia: „każdy ma w życiu swój kwadrans sławy”. Na własne życzenie lub organicznie, dzięki mediom społecznościowym.

Trzy miesiące temu w Internecie pojawiła się informacja o wycieku danych z serwisu randkowego reklamującego się jako idealne miejsce dla ludzi, którzy szukają przygód poza związkiem.

Nie czytałem nazbyt uważnie, bo wycieki danych w 2015 nie powinny dziwić nikogo, kto „robi w Internecie”. Pod sztandarem “move fast and break things” nie ma miejsca na bezpieczeństwo. Bezpieczeństwo danych jest nudne, żmudne i wymaga obecności ludzi, którzy poświęcą problemowi dodatkową uwagę. To wszystko kosztuje, a oprogramowanie zjada świat dlatego, że taniej zainstalować najpopularniejszy framework niż zbudować fabrykę. Włam do systemu to nie kwestia „czy”, ale „kiedy”.

Ktoś, kto podjął się zadania pozyskania informacji, ma cały wachlarz metod technicznych. Jednak może też zwyczajnie zaczaić się na parkingu, poczekać na najchudszego programistę, dać mu w ryj i uciec z laptopem, który z pewnością zawiera zrzut bazy.

Czasem trzeba naprawić problem na „prawdziwych danych” i taka baza się przydaje! W ten sposób usprawiedliwiam takie sytuacje przed sobą. Wy macie pewnie własne wymówki.

W każdym razie: dane wyciekły do Ciemnej Strony Internetu, a stamtąd, niemal tradycyjnie, do zainteresowanych programistów, którzy lubią dłubać w zwłokach cudzych projektów. Zawsze można zebrać kilka darmowych głasków na Hacker News za analizę metody składowania haseł. To dobrze, że próbujemy uczyć się na cudzych błędach.

Następnym punktem programu jest serwis, w którym można sprawdzić, czy twoje dane znajdują się w wycieku. Jakiś sprytny osobnik wyłuskuje identyfikowalną informację (tu: adres e-mail) i powiadamia cię, czy w zbiorach znajduje się wpis z nią skojarzony. Zazwyczaj jest to sygnał dla ciebie do zmiany haseł, obserwowania innych kont na okoliczność prób nieuprawnionego dostępu, ogólnie — do zachowania informatycznej higieny.

Zwykle taka przeszukiwarka danych z wycieku jest niezmiernie pożyteczną usługą, która zwalnia zwykłego użytkownika z konieczności przebycia szybkiego kursu poruszania się po Ciemnej Stronie Internetu, instalowania i konfiguracji bazy danych, importowania skradzionych informacji i potwierdzania obecności własnych danych. Tym razem było inaczej: serwis, do którego się włamano, miał własny ciężar moralny. Zdrada! Tematy blognotek pisały się same.

Minęły dni i w świat poszła kolejna analiza. Serwis okazał się nie tylko męską szatnią, dodatkowo duża część damskich kont wyglądała jak sztuczne twory. O samej analizie dowiedziałem się z Twittera dzięki linkowi, który wrzuciła Paulina. W ramach empatii z autorami kodu chciałem trochę ich bronić. Zacząłem tłumaczyć — spopularyzowaną przez twórców reddita — metodę urzeczywistniania serwisu za pomocą tworzenia sztucznego ruchu przez pracowników. Podczas rozruchu systemu, który jeszcze nie ma użytkowników, projekt wygląda na martwy dla odwiedzających. Budowniczy reddita pozakładali więc wiele kont, z których sami dodawali linki i komentowali, budując złudzenie istniejącej społeczności.

Jeżeli “growth hacking” jest moralny w serwisie z odnośnikami, jest też moralny w serwisie randkowym. Albo tak samo niemoralny.

Rozmawialiśmy głównie o płynnej granicy między tym, co kto pojmuje za zdradę. Czy zdrada jest zdradą tylko jeśli jest czynem aktywnym? Gdzie na tej skali aktywności znajduje się założenie konta na serwisie randkowym? Podczas tej wymiany zdań potknąłem się o prawdziwy temat tego tekstu. Żeby go lepiej przedstawić, posłużę się anegdotą.

Piotr Waglowski jest znanym autorem, który często-gęsto na łamach swojego serwisu opisuje problemy związane z prawem oraz informacją publiczną i dostępem do niej. Kilka lat temu zajął się sprawą policyjnego monitoringu 1. Podczas próby wyjaśnienia Piotr otrzymał anonimową kopertę zawierającą dowody, które popierały jego hipotezę. Nie pamiętam już, jakim kanałem się o tym dowiedziałem, ale byłem pod wrażeniem. Ktoś, komu po cichu daje się dowody, musi być człowiekiem zaufania publicznego. Zapytałem, kiedy ma zamiar udostępnić te informacje. Nie zamierzał. Kiedy spytałem dlaczego, powiedział mi, że nie ma jak ich zweryfikować i równie dobrze ktoś mógł mu zostawić wygodną dla niego narrację i na przykład próbować pozbyć się uciążliwego kolegi z pracy, umieszczając w tych materiałach jego nazwisko.

Do dziś pamiętam moje zdziwienie, że nigdy o tym nie pomyślałem! Być może Piotr jest paranoikiem węszącym spiski? A może ja jestem supernaiwniakiem i on doskonale wie, o czym mówi. Rachunek sumienia wskazał mi, że jednak to drugie.

Załóżmy — hipotetycznie — że wchodzę w posiadanie bazy danych serwisu zliludzie-zleczyny.com.pl (.com.pl, gdyż nic dobrego nie ma w com.pl). Buduję więc serwis, który pozwala zlokalizować użytkowników, i oddaję go w szpony Internetu. Dla żartu piszę jedno UPDATE, które zmienia imię i nazwisko posła partii politycznej na imię i nazwisko kolegi z ławki, który nie oddał mi kasety od 27 lat.

Teraz — nadal hipotetycznie — ciekawy współpracownik lub bliska mu osoba wklepuje jego adres e-mail. Dowiaduje się, że żyje ze złym człowiekiem.

Pewnie myślicie, że przecież można wytłumaczyć taką rzecz bliskiej osobie. Czyli brakuje Wam doświadczenia i empatii. Spróbujcie wytłumaczyć partnerowi obecność na serwisie randkowym zoptymalizowanym pod zdradę.

A teraz, kiedy już przegraliście z tą myślą, wytłumaczcie losowym osobom na mediach społecznościowych swoją obecność na serwisie, którego profil kładzie się cieniem na wasz charakter.

Kanadyjski piosenkarz z początku tekstu ma swoich spinmasterów i ludzi od PR, ma też fanów. Wy macie wielki chuj.

Dane pochodzące z włamów do systemów powinny być witane z większym sceptycyzmem, niż ma to miejsce do tej pory. Dodanie lub zmiana danych jest trywialna dla osoby zaznajomionej z tematem. Na końcu wszystkie dane są tekstem.

Przenieśmy się znów do krainy fantazji. Mój przyjaciel Piotr wychodzi z nudnego spotkania i zostawia laptop na stole. Mam kilka minut.

piotr@mak ~/.mozilla/firefox/msqq1vhj.default sqlite3 places.sqlite 
SQLite version 3.8.2 2013-12-06 14:53:30
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite&gt; 
INSERT INTO moz_places (
 url, 
 title, 
 rev_host, 
 visit_count
) VALUES (
  'http://strasznapornografia.com.pl/chaos',
  'pornografia tak straszna, że oko pęka',
  'http://strasznapornografia.com.pl', 
  '666'
);

Teraz czekam, aż Piotr wróci i podłączy się do rzutnika. Niedbale żartuję, że ogląda straszną pornografię, a gdy zaprzecza, proszę go, żeby zaczął wpisywać adres strony, która taką treść zawiera. Szok, horror! ODWIEDZA!

Integralność danych w systemach informatycznych często polega na zaufaniu i dostępie. Gdy bezpieczeństwo dostępu zostaje złamane — bez względu na to, czy to włam, czy tylko ja usiadłem w cudzym miejscu na dwie minuty — zaufanie do danych spada do zera.

Być może brzmię jak apologeta ludzi, którzy robią złe rzeczy i zostają przyłapani na gorącym uczynku. Moje hipotetyczne scenariusze nie mają umocowania w rzeczywistości, przedstawiam tylko techniczną możliwość ich wykonania.

Być może wszyscy obecni w bazie serwisu randkowego zapisali się do niego. Może profile kobiet były dodane przez autorów serwisu w niecnym celu. Jeśli przyłożycie mi do gardła brzytwę Ockhama, to się zgodzę, oczywiście.

Internet to zespół naczyń połączonych, a ciecz, która się w nich przelewa i stabilizuje, to głównie szambo.

Nie chcę jednak, żebyśmy porzucali zdrowy sceptycyzm tylko dlatego, że ktoś pozyskał dane. Nie mamy technicznej możliwości sprawdzenia ich wiarygodności, bo takie potwierdzenie musiałoby pochodzić od autora włamu, a to, czy wierzyć autorowi włamu, musicie rozważyć we własnym sercu.

Technologia wkradła się tak gwałtownie do życia ludzi, że w zbiorowej świadomości istnieje nadal jako coś, co ma znamiona magii. Kiedy ktoś słyszy, że dane pochodzą wprost z bazy danych, to brzmi jak najmocniejsze zapewnienie. Baza danych to kamień, na którym zbuduje swój kościół. Gdyby ludzie znali podbrzusze technologii, wiedzieliby, że to nie magia, a kuglarstwo. Podwójne dno w kapeluszu, znaczone karty i odwracające uwagę gesty.

Technologia jest amoralna, ale jej zastosowanie nie. Dlatego naszym obowiązkiem jako „ludzi od Worda i poziomu atramentu w drukarce” jest tłumaczenie nowej rzeczywistości, w której przyszło wszystkim żyć.

Coś, co mogło być kiedyś tematem na thriller technologiczny, dziś, w świecie w którym rządy podkładają sobie nieprzyjemne oprogramowanie, zaczyna być codziennością. Dlatego jestem za ograniczeniem zaufania elektronicznych artefaktów życia społecznego. Do pokonania tego progu rozwoju potrzebujemy więcej edukacji, lepszych narzędzi i pewnie lepszego społeczeństwa. Tymczasowym rozwiązaniem (wobec brak wcześniej wymienionych czytelników) jest rozwaga i sceptycyzm.

  1. mogę się mylić, że chodzi o tę konkretną sprawę, to było lata temu i nie jest kluczowe

Zbieractwo: Holes in your pocket

Zbieractwo wszelkiego rodzaju niesie ze sobą konekwencje. Do niedawna musieliśmy się borkykać z pułapkami zastawianymi na nas przez rzeczywistość: „gdzie to wszystko upchnąć?”.

Amator statków w butelce mógł ich zgromadzić tylko tyle, ile miał dostępnej przestrzeni. Kiedy odwiedzający znajomi muszą przesunąć pół marynarki wojennej żeby skorzystać z ubikacji, na horyzoncie pojawia się perspektywa interwencji. To wbudowany w zbieractwo hamulec, zaciągany przez bliskich lub administrację budynku.

Wszystko zmieniło się wraz z postępem technologii. Dzięki, technologio. Teraz zbieracz może kolekcjonować wszystkie animowane GIF-y z kotami, przepisy kulinarne i odnośniki jakie tylko przewiną się przez ekran. Eldorado dla fanów gromadzenia cyfrowego gruzu, gdzie nikt nie sądzi cię na podstawie katalogu „pobrane”.

Niby nic w tym zdrożnego, co komu szkodzi, że mam kilka gigabajtów instrukcji i schematów do C64 na zawsze uwięzionych w Dropboksie? Kiedyś je przeczytam, ręka na moim czarnym sercu.

Moje ulubione powiedzonko o prokrastynacji idzie tak: z prokrastynacją jest jak z masturbacją, frajda jest, ale na końcu nadchodzi czas na refleksję, sam się wyruchałeś. Co to ma wspólnego z e-chomikowaniem? To ta sama natychmiastowa gratyfikacja (odłożyłem ten artykuł o bardzo ważnym problemie programistycznym) wywodząca się z budowanie własnego obrazu człowieka, który czyta ważne rzeczy.

To odpowiednik magazynu opinii rzuconego na stolik w salonie, nie służy on do czytania, ale jako sygnifikator kulturowo-klasowy. Jego bracia i siostry z poprzednich tygodni są już wyściółką dla kuwety, w tym wygrywają ze zbieractwem postępowym, przydają się nawet w drugim obiegu.

Weźmy moją przyjaciółkę, Lan. Oboje uwielbiamy aplikację Pocket, pozwalającą na archiwizację napotkanych w sieci artykułów. Opcja przetwarzani ich w wersje pozbawione dekoracji i dostęp offline znacząco poprawiały moje samopoczucie w ostatnich latach, gdy dużą część czasu przebywałem pozbawiony dostępu do Internetu.

Pocket ma też wygodną opcję dzielenia się znaleziskami. Jedno kliknięcie i już cyfrowy odpowiednik statku w butelce pojawia się na ekranie ofiary. Używam go tak często, jak mogę.

Różnica między mną a Lan jest następująca: jestem pozbawiony skrupułów. Jeżeli patrzę na tekst drugi raz i nie mogę przebrnąć przez lead in to bezceremonialnie go kasuję. Ona je trzyma. Za każdym razem kiedy wysyłam kolejny tekst, odczuwam ukłucie wyrzutów sumienia. Znów dokładam się do jej nieszczęścia, kolejny tekst na wieki uwięziony i omijany, walczący o uwagę z setkami innych.

Zażartowałem kiedyś, że napiszę programik, który przyjdzie i wyrzuci jej wszystko, co jest stare. Nie można wierzyć osobom uzależnionym, potrzebny jest zewnętrzny arbiter. Arbiter powinien być arbitralny, pozbawiony emocji, więc najlepiej zaprogramowany.

Po raz kolejny technologia pozwoli mi rozwiązać problem stworzony przez technologię!

Minął tydzień, potem drugi. Aplikacji nie pisałem, gdyż jestem rzemieślnikiem programowania, a kto to widział żeby rzeźnik po powrocie do domu podcinał gardła dla zabawy. Kiedy wreszcie udało mi się zebrać, Lan powiedziała, że odmawia! No ładnie. Nie pozostaje mi nic innego jak zaofiarować go innym, potencjalnym ofiarom.

Holes in my pocket, kliknij, gdyż link.

Zasada funkcjonowania jest prosta. Autoryzujemy się, sprawdzam, czy są jakieś teksty, które są starsze niż 30 dni i oferuję archiwizację. Klik i poszły. Dodałem też możliwość cofnięcia tej procedury dla tych, co się poddali i chcą znów zboczyć ze słusznej ścieżki.

W ramach podkręcenia ironii w tekście o czyszczeniu kolejki Pocketa: używasz IFTTT i Pocket? Pozwól mi dołożyć się do chaosu.


Jeszcze prawie trzy kilometry, mam czas sobie to zapisać

Jest poniedziałek, więc wracam spacerem do domu. Przynajmniej ja to nazywam spacerem, dla innych perspektywa pijackiego marszu przez osiem kilometrów nazywa się inaczej, bardziej złowieszczo. Niestety, pochodzę z rodziny, gdzie miejską legendą jest kartka, którą mojej babci zostawił ojciec i wujek w wigilię wakacji:

„Mamo, poszliśmy nad morze.”

Przejść się nad morze jest ciężko, zwłaszcza z Łodzi, ale się przeszli. Kim bym był, gdybym dosiadał nocnego autobusu, kłaniał się automatom biletowym?

Zupełnie jednak nie o tym chciałem: idąc tak myślałem. Głównie nad pierdołami, ale jakoś tak z boku zaszła mnie myśl o ulicy Ogrodowej jako metaforze ostatnich 20-tu lat zmian ogólnie.

Ulica Ogrodowa w Łodzi była zawsze kłamstwem. Jedyną rzeczą, która miała jakikolwiek związek z ogrodami, były dwa — przylegające do siebie — cmentarze, gdzieś w jej środku.

Poza tym była to łódzka ulica do szpiku kości. Z jednej strony mocne kamienice, bramy pełne twardych ludzi, a głębiej, obsrane przez psy podwórka, duszne od dymu tanich papierosów palonych przez babcie-wrony, obsiadające krzywe ławki, które opowiadają jak im było lepiej za Stalina.

W jednej z takich bram napadli mnie kibice ŁKS-u. Co jest jedną z większych życiowych zagadek dla mnie: będąc kibicem tego klubu przez całą swoją stadionową karierę napadali mnie tylko ełkaesiacy.

Skopali mi plecak w którym niosłem twardy dysk. Kiedy kilka dni później udało mi się ich dopaść z grupą kolegów, w ramach akcji odwetowej, wytłumaczyli mi dlaczego:

„Na chuj nosisz po mieście koszulkę Amica (Wronki)?” 1

Polonistka miała rację, co do zagrożeń, które niesie ze sobą upadek czytelnictwa. Na koszulce było „Amiga”.

Po drugiej stronie ulicy stała fabryka. Wielka, zasłaniająca słońce mieszkańcom kamienic, zimna, martwa, zakurzona.

Fabryka kiedyś musiała coś produkować, ale ciężko było sobie wyobrazić, co można produkować mają do dyspozycji taką przestrzeń. Ile tam musiało wejść komputerów osobistych w dziewiętnastym wieku?

Dumając nad swoją przyszłością, siedząc w jednym ze szczytowych mieszkań kamienicy, gdzie mieliśmy swoją nerdowską melinę, nie mogliśmy pominąć fabryki. Co w przyszłości będzie z fabryką?

Wiadomo, w fabryce będą koncerty techno, gdzie kurz będzie strzelał spod butów rejwerów, jak na “No Good” The Prodigy. A po północy piętra będą przejmować pancerni gabbrzy i deptać deski ciężkimi buciorami.

To miało sens. Powiedziano nam, że będzie lepiej, a jak może być lepiej niż kilometry kwadratowe skaczących, szczęśliwych ludzi? Miało kompletny sens.

Teraz fabryka wreszcie żyje: klinkierowa cegła chroni hotelowych gości przed estetycznym dyskomfortem. Na dachu jest przeszklony basen, z którego okna-dna machają do spacerowiczów pływacy.

I to jest metafora, w tym sensie, że wszystko jest lepiej, jeśli mierzyć obiektywnie, ale zupełnie inaczej, niż sobie wyobrażałem.

Tak jakbym leżał rozciągnięty na podłodze, masują szczękę, kiedy po rozłożeniu planszy do gry w warcaby, drugi gracz wyciągnął figury szachowe, by zaraz po ich ustawieniu przywalić mi prosto w ryj: techniczny knockout.

Po prostu nikt nie wiedział w co gramy.

  1. taki klub piłkarski

3.5mm do nieba

W drodze do Olki postanowiłem zatrzymać się w jakiejś knajpie i wrzucić coś do wielkiego, pustego brzucha. Wybrałem lokal, wpakowałem się, złożyłem zamówienie i usiadłem.

Podkręciłem głośność słuchanego podcastu, a z plecaka wyciągnąłem laptopa żeby napisać Olce e-maila o potencjalnym spóźnieniu.

W polu mojego widzenia pojawiła się damska ręka, podniosłem głowę i zobaczyłem kelnerkę, która przyjmowała zamówienie. Przyniosła narzędzia kulinarne: nóż, widelec, talerz. Kiedy przesunąłem szybko rzeczy na bok i podziękowałem, nadal w słuchawkach, usłyszałem że Pani mówi coś do mnie.

Zsunąłem słuchawki.

— Przepraszam bardzo – powiedziała – czy mogę zobaczyć te słuchawki?

— Eeee… Tak? – ściągnąłem je i podałem pytającej dziewczynie, która podsunęła sobie krzesło do mojego stolika.

Przez chwilę przewracała je w dłoniach by po chwili wsadzić je na głowę.

— Proszę coś puścić.

O jeżu malinowy: coś puścić? Z moich list odgrywających? Co? Słowackie ska, japoński hip hop, polski dżez? Czyżbym padł ofiarą własnego gustu. 1 Będę się musiał wytłumaczyć czemu wokalista krzyczy do akompaniamentu trąbek?

Leciałem w dół listy utworów, a po osiągnięciu końca odbijałem się znów ku górze. W tym czasie komitet testowania moich słuchawek: sztuk jeden, czekał spokojnie.

Wreszcie wybrałem coś, co wydawało mi się mało krępujące i kliknąłem plej, patrząc w stół podczas gdy komisja testowała.

Co trzeba wiedzieć o tym spacerze, dla pokreślenia tego, co nastąpi za chwilę: wracałem ze spotkania, gdzie śpiewano peany na temat moich technologicznych zdolności. Jestem raczej skromnym człowiekiem, ale potok zapewnień o tym jak ważnym trybikiem w świecie e-maszyn jestem wreszcie przecisnął się do mojej świadomości.

Słuchawki wylądowały na stole, a pani uśmiechnęła się do mnie i powiedziała, że całkiem dobre. Ucieszyłem się, że ktoś docenia mój zakup, który wykonałem metodą „ile mogę wydać, bo poprzednie się urwały”.

I wtedy się zaczęło, ta bardzo przystojna, pewnie z 15 lat ode mnie młodsza, blondynka zaczęła wymieniać listę parametrów, które rozważa podczas zakupu następnych słuchawek.

Było o paśmie przenoszenia i o Ohmach, gdzie wtrąciłem jak kretyn, że „wiem, co to są Ohmy!” tylko po to by dogonić kompletnie uciekającą mi dyskusję o technologii, co było lekką nowością. Zwykle mogę przynajmniej kreatywnie udawać.

Kiedy usłyszałem o relacji głośności, rezystancji, potęgach dwójki, typach wyciszenia i trendach na rynku postanowiłem uznać się za kompletnie pokonanego i powtarzałem tylko: „Uhu”, „Ehe” i „Nie wiem, prze pani, ja tylko podkastów słucham…”

Kiedy werbalne lanie się skończyło, Pani jeszcze raz uśmiechnęła się do mnie i poszła do kuchni po mój obiad.

Patrzyłem się w pieczarkę na talerzu i myślałem, że przynajmniej ona wie jeszcze mniej niż ja o akustyce.

Ale tylko ja będę musiał z tym żyć.

I ją zjadłem.

  1. Hipster detected

Game Days 2015: tête-à-tête

IMG_8439_M

Ludzie

Pod koniec mojej rozmowy z jedym z gości naszego piętra pełnego starych komputerów zostałem zapytany, czy jestem może pracownikiem “CD-ACTION”. Pytanie nie było strzałem z biodra, po sali kręciło się kilka osób w ich koszulkach. Zaprzeczyłem, a wtedy dopytał mnie, czy w takim razie jestem jakąś „ważną indywiualnością”. Zaprzeczyłem ponownie, bo przecież nie jestem. Pan odszedł, a ja wróciłem do tańca między biurkami, na których spoczywały lata historii technologicznej. Tej znanej szerzej i tej kompletnie nieznanej.

Zanim pójdę dalej, muszę się do czegoś przyznać. Nie lubię ludzi. Znaczy ogólnie ludzi jako takich — tak, jestem nawet fanem ludzkości, ale gdy są dookoła mnie en masse, zaczynam robić się niespokojny. Rozmawianie z obcymi ludźmi zwykle wysyła mnie do piekła zdenerwowania: czy jestem zziajany? A jak powiem coś głupiego? Czy czuć ten ostatni papieros w moim oddechu, a może rozpiął mi się rozporek? Nieustająca karuzela wątpliwości aż do mdłości.

IMG_8378_M

Przypadłość ta powoduje, że jestem zwykle bezużyteczny jako organizator, sprzedawca siebie i swoich pomysłów oraz „człowiek warty zapamiętania”. Jeżeli ludzie mają personal brand, to ja jestem “TESCO VALUE”.

Kiedy kolejna fala gości opadła i wycofała się do innych pokojów, zdałem sobie sprawę, że wykonałem niesamowite postępy w byciu normalnym człowiekiem. Zaskoczony tym sukcesem postanowiłem głośno (ale we własnej głowie), że może nie jestem ważną osobistością zwykle, ale stojąc na tej pododze, wśród komputero-archeologicznych eksponatów, pełnię bardzo ważną funkcję: jestem klechą tego kościoła.

A ludzie, którzy do niego przychodzą, chcą się wyspowiadać i uzyskać odpuszczenie.

Przeszłość w naszej głowie to wyidealizowany obraz ludzi o przekłamanych charakterach oraz kaców, które nie były straszne, choć były. Nikt nie jest pewien, czy „tak rzeczywiście było”. A ja, jak każda religijna instytucja, dostarczam im pewności.

Tak, była taka gra. Tak, Amiga była najlepszym komputerem. Tak, C64 był najlepszym komputerem. Tak, gry wczytywały się tyle czasu. Nie, gry wczytywały się szybciej.

Niczym dickensowski duch świąt przeszłych pokazuję ludziom, jak wyglądał świat, zanim zdziczeli, dorośli.

No i rozgrzeszam.

Przestawiałem głowicę w magnetofonie. Kiedy grałem z kolegą, zawsze dawałem mu gorszy joystick. Do tej pory nie oddałem pożyczonej kopii tego a tego.

Pokuty nigdy nie są ciężkie, partyjka w Space Invaders, rundka w Cannabalt na C64. Za najcięższe występki karzę grą w Lotus Turbo Esprit III na Atari ST na dwóch graczy.

Pojawiają się czasem biskupi, którzy bez mojej interwencji zajmują miejsce przy komputerze i wprawnym ruchem uruchamiają swoją ulubioną grę, a po kilku rundkach wstają, potakują mi zza stołu i przechodzą dalej. Raz zawitał nawet papież — instalator i programista komputerów Odra. Ucałowałem jego token-ring.

IMG_8601_M

Gry

U mnie z grami jest tak, że wiem tylko jakie mi się podobają. Podobają mi się głównie te, które już znam i managery piłkarskie, choć do nich nie mam już cierpliwości.

Obserwując dziesiątki ludzi w różnym wieku, różnych płci i różnego, już nabytego, zainteresowania komputerami dokonałem destylacji własności i funkcji gry doskonałej.

Aby skoczyć, skocz

Żadna z często wybieranych gier nie posiadała części „uczącej”. Nauka zasad wynikała z gry. Pewna Pani po którymś kolejnym nabiciu się na miecz strażnika w Prince of Persia zrozumiała, że należy się uzbroić.

IMG_8404_M

Dwóch graczy, jedna konsola

W świecie, gdzie gry z trybem multiplayer drukują miliony dolarów wydawcom, świat zapomniał o tym, że można podłączyć więcej niż jeden kontroler i grać razem na jednym ekranie.

Kiedy ktoś z silnym rosyjskim akcentem powie Ci przez słuchawki, że sypia z Twoją matką odpowiesz najwyżej wzruszeniem ramionami. Kiedy ktoś siedzący obok Ciebie powie Ci to samo odczucie jest dużo intensywniejsze. Zwłaszcza, gdy grasz z Ojcem.

IMG_8414_M

Co świeci, co buczy, nie bawi, nie tłuczy

Space Invaders na ośmiobitowym Atari było jednym z hitów wystawy, tak wśród młodych jak i starych. Gra prezentuje się na zielonym monitorze Neptun jak produkt jelita obciążonego szpinakiem, a brzmi jak wypadek w którym udział brał TIR pełen tablic szkolnych uderzający w salon urody z dobrze zaopatrzonym działem sztucznych paznokci.

Nikt nie powiedział złego słowa o tym fakcie, wszyscy zajęli się eksterminacją najeźdźców.

IMG_8490_M

[Tu wkładam bezwstydnie reklamę właśnie powstającej książki o projektowaniu gier „Inżynieria Gier. Level design dla początkujących”.]

Podsumowując: trudna gra na dwóch graczy, w którą grasz z Tatą, wyglądająca jakkolwiek, którą przegrywasz non-stop dzięki krępującym wrzutom rodziciela.

Podziękowania

Chciałbym serdecznie podziękować „Muzeum Historii Komputerów i Informatyki” za zaproszenie nas do wzięcia udziału w Game Days, gościom za znoszenie mojego nagabywania do dania C64 szansy oraz Irze i Piotrowi Poterze oraz Tomaszowi Marcinkowskiemu za odtworzenie atmosfery kolonijnego pokoju: od picia alkoholu w łóżku po śmianie się z tego, że ktoś pierdzi pod kołdrą. Póki człowieka śmieszy pierd po 29h pracy skondensowanej w dwa dni póty jest nadzieja, że ten świat nie jest skazany na zagładę.

Zdjęcia: Ira Potera