Dwa litry napoju

Wracam z biura. Jest środa. Może czwartek. Ale bliżej dziewiątej wieczór niż maja. Moja droga wiedzie przez przekładaniec z warstw społeczeństwa. Bogato, biedno i white anglo-saxon protestants.

Na granicy wyznaczonej przez skrzyżowanie ulic znajduje się sklep. Można płacić kartą do 22:00. Rzuciłem szybkie spojrzenie w kierunku grupki bywalców ściśniętych przy schodach. Nigdy nie wiadomo, kiedy ktoś zapyta, czy mam problem, a ja mam problem w postaci zmęczenia życiem i dwa laptopy. Szarpać mi się nie chce, a do biegania nie jestem odpowiednio ubrany.

Kiedy tak lustrowałem sytuację, zauważyłem że schody pokonuje jakaś niewielka istota. Trzyma w rękach wielką butelkę napoju gazowanego. Człowiek, płci żeńskiej, znaczy dziewczynka. Pięć czy sześć lat. Patrzę z zaciekawieniem, jak walczy z ciężarem dwóch litrów o smaku zgodnym z naturalnym i wypatruję, kiedy pojawi się za nią ktoś dorosły. Dziewczynka mija mnie i skręca za róg. Opiekun nie pojawia się i po chwili podejmuję drogę do domu. Idę więc, a dziewczynka drepcze przede mną, chwiejąc się co jakiś czas pod ciężarem.

Myślę do siebie, że wypadałoby przypilnować dziecka, które spaceruje nocą. Czuję radość, że ktoś zaufał dziecku i puścił je po zakupy bez opieki. Pozostaję więc kilka kroków z tyłu i na chwilę pogrążam się w myślach. Nie wiem czy ja przyśpieszyłem, czy ona zwolniła, ale po jakimś czasie zrównaliśmy się w marszu i gdy odwróciłem się w jej stronę zauważyłem, że coś mówi. Zsunąłem słuchawki.

– Dobry wieczór – powiedziała dziewczynka.

– Dobry wieczór – odpowiedziałem lekko zbity z tropu.

– Nie boi się pan tak iść samemu w nocy? – zapytała zmieniając pozycję butelki tak, żeby było ją trochę zza niej widać.

– Trochę się boję – przyznałem – ale skoro idziemy razem, to z pewnością nic mi się nie stanie.

Przytaknęła i szliśmy tak przez jakiś czas w ciszy. Najdziwniejsza para na ulicy. Dziewczynka walcząca z ciężarem butelki, sięgająca mi może do kolana i ja, brodaty dziad w kapeluszu, z postawionym kołnierzem.

Tu oblewa mnie zimny pot, a głowa wypełnia się scenariuszami nadchodzącej tragedii. Jak ja wyglądam idąc tak z jakimś dzieckiem? Czy któryś z sąsiadów zauważył nas przez okno i dzwoni właśnie do ojca dziewczynki, który niechybnie wypadnie na mnie z następnej bramy? Czy uda mi się wytłumaczyć, że jestem przyjaznym gentlemanem, który docenia zaufanie, jakie pokłada w córce i robi to, co powinien zrobić każdy dobrze wychowany człowiek, to znaczy zerknąć czy dziecku w tej okolicy nie przytrafi się nic złego?

– Myśli pan, że są tacy ludzie, co porywają dzieci z ulicy? – przeczytała moje myśli dziewczynka.

– Nie. Nie, takie rzeczy się nie zdarzają – odpowiedziałem, czując się tak nieswojo jak wtedy, kiedy matka przyłapała mnie podczas masturbacji. Cokolwiek zrobisz, będzie źle.

– Tu mieszkam – doszedł mnie jeszcze głos z korytarza. – Dobranoc!

Dobranoc, burknąłem do siebie. Czułem się źle, źle. Wyciągnąłem papierosa. Bo tak, jeżeli ta dziewczynka powie rodzicom, że spotkała pana, który ją odprowadził do domu. Dlaczego czuję się podle mimo tego, że zrobiłem coś dobrego? W jakim spierdolonym, bez szans na naprawę społeczeństwie żyję, że czuję się jak gwałciciel.

Jak daleko sięga kontrola świadomości? Uważam się za kogoś, kto nie daje latających faków za opinię społeczeństwa i jednocześnie chcę się wrócić, odszukać klatki, drzwi i wytłumaczyć się z tego, co zrobiłem.

2010/09/02 8 komentarzy »

1979

Dziad lub pedofil: wybór należy do Ciebie

Stoimy na skrzyżowaniu i czekamy na zmianę świateł. Podchodzi do nas przedstawiciel lokalnej społeczności, że żul znaczy. Zagaja. Osłaniam trochę Annę, bo z ryja mu jebie, jakby wcześniej stołował się w zakładach oczyszczania. Wygląda mi zza ramienia i zwraca się do mnie z pytaniem.

- Córka?
- Hę?
- Córka?
- …Żona — zażartowałem.

Żul rzuca kolejne szybkie spojrzenie przez moje ramie.

- Panie, przecież ona jest młodsza od pana o jakieś dwadzieścia lat.

Teraz nie wiem, czy ja mam czterdzieści pięć, czy Anna pięć.

2010/08/07 Cisza »

1979

Vim. WordPress.

Piotr Szotkowski dostarczył mi kilka stron poprawek do poprzedniego tekstu. Ignorowałem jego e-mail tak długo, jak mogłem. Wreszcie zdobyłem się na odwagę i odpaliłem edytor dostępny w WordPressie, by po raz kolejny przekonać się, że pisanie w textarea jest wyjątkowo uciążliwe.

Potrzebowałem jakiegoś lepszego rozwiązania. Wiem! Napiszę sobie wtyczkę do Vima i będę mógł edytować teksty po ludzku.

Rzecz dzieje się w Internecie, okazało się więc, że spóźniłem się z tym pomysłem jakieś trzy lata. Przedstawiam Państwu Vimpress. Instalacja jest banalnie prosta:

cd
mkdir -p .vim
cd .vim
wget http://www.vim.org/scripts/download_script.php?src_id=7348 -O vimpress.tgz
tar zxf vimpress.tgz
rm vimpress.tgz
vi plugin/vimpress.vim
(w Vimie) :56

W pięćdziesiątej szóstej linii konfigurujemy dostęp do naszego bloga. Jeżeli wszystko poszło zgodnie z planem :BlogList powinno wyświetlić listę notatek.

2010/07/29 Cisza »

1979

Dwadzieścia pięć lat minęło

Dwadzieścia pięć lat. Dziewięć lat na pierwszej linii innowacji i postępu. Szesnaście lat epickiej opery mydlanej i bratobójczych walk pod każdą długością i szerokością geograficzną. Amiga, jedyna platforma, którego średnia użytkowników chorych psychicznie wypada jakoś jeden i jedna trzecia na użytkownika.

Amiga to taka Polska w wersji binarnej. Pamiętamy jak w 1410 żeśmy tym chrześcijanom spuścili lanie, że tylko my na Moskwę z sukcesem i kiedy tak wspominamy, to przysłowiowe psy srają po chodnikach.

Amiga to też jedyna platforma, której byłem fanbojem. Kiedy mówię fanbojem, to myślę o kimś, kto rozwalał płyty PC-ta dla zabawy. Ktoś, kto nie dorzucił się jakiemuś biednemu człowiekowi ze sceny do biletu po tym, jak zauważył że to użytkownik innej platformy. Ktoś, kto wtedy schylił się tak, aby dało się odczytać z czapki “A M I G A” i powiedział swoim młodzieńczym basem: “chyba gramy dla innej drużyny”.

Mam nadzieję, że czytelnicy poznali mnie na tyle, żeby pojąć, że nie chodziło o czystej krwi totemizm.1

AmigaOS był genialny. AmigaOS był systemem, który mimo swoich technologicznych problemów potrafił wciągnąć każdego, kto kochał komputery w ten czysty sposób, w jaki można było kochać komputery w 1992, zanim Twoja Stara wrzucała foty na Naszej Klasie.

Dwadzieścia pięć lat później siedzę w domu i piję piwo czytając relacje z różnych imprez związanych z tą, jak to nazwał jeden z portali, “okrągłą rocznicą”. Dopada mnie nostalgia i rzucam się w kierunku laptopa. Zainstaluję sobie AmigaOS 3.1 i powiem Wam, co było w nim fajnego.

Jestem z siebie trochę dumny, a trochę mi żal, że marnuję głowę na takie informacje. Postawiłem cały system od zera, z dwóch dyskietek. W godzinę. Bez większego problemu. Ostatni raz używałem Amigi na poważnie w 2003. Niektóre rzeczy nie chcą wyjść z głowy. Pierwsza dziewczyna, pierwsza wódka, pierwszy komputer, którym rządziłeś.

AmigaOS zachwyca. Jak to nie zachwyca, jak zachwyca?

Przypisano mi te zasoby

Urządzenia w AmigaOS posiadały dwie nazwy: logiczną i fizyczną. To nie jest całkowita prawda, ale to bardzo dobre kłamstwo. Nazwy dysków nie miały znaczenia w takim sensie, w jakim jesteśmy do tego przyzwyczajeni na innych systemach. Główny dysk dysk twardy zwyczajowo przyjmował fizyczną nazwę DH0: co stanowiło logiczne ciągłość, jeżeli wiedziało się, że wewnętrzna stacja dyskietek to DF0:. DH0: to nasz /dev/sda1 lub C:, nic nie stało jednak na przeszkodzie, żeby dysk ten nazywał się Cherbata:. Nic, prócz ortografii.

Kiedy uruchomiłeś swój system z dysku Cherbata:, to w tle działa się czarna magia zwana przypisami. Komputer zaczynał odzywać się do dysku startowego per sys: i doklejał do ważnych katalogów kolejne nazwy. I tak katalog Libs/ na dysku Cherbata: stawał się Libs:, to samo działo się z katalogami C, S, Devs, Fonts i innymi.

A co to dawało praktycznie? No cóż, wszystkie zasoby w AmigaOS (czcionki, biblioteki, sterowniki) były w pewnym sensie programami, a przypis mógł wskazywać na więcej niż jedną ścieżkę. Przykład z życia: wpada kolega narysować kolekcję obwisłych penisów, której to kolekcji użyje jako argumentu w podwórkowej dyskusji o wyższości klubów sportowych. Znajomość anatomii pozwala mu szybko ukończyć dzieło, niestety nie posiadam na dysku jego ulubionych fontów. Zamiast przegrywać jego czcionki do mojego systemu, piszę po prostu (zakładając, że dysk kolegi to DH1 w moim systemie):

assign fonts: dh1:fonts add

Raz, dwa, trzy i już może używać swojej ulubionej kombinacji bold-kapitalik-underline-outline.

Inny przykład. Odwiedzając znajomych ze swoim dyskiem, co i raz natrafiałem na system, na którym mój dysk nie chce wystartować z pełnym systemem. Honorową odznaką było posiadanie takiego systemu, który sobie radzi z wieloma rodzajami rozszerzeń i zwężeń dostępnych dla komputerów Amiga. Napisałem mały program, który wykrywał typ procesora i koprocesora oraz innych flaków i wykonywał stosowne przypisy do katalogów z bibliotekami. Możecie o tym myśleć jako o przenośnym systemie, który zależnie od tego, czy jest uruchamiany w środowisku 32- lub 64-bitowym, wybiera stosowny zestaw bibliotek do użycia.

Dzięki odkryciu rozkazu assign zostałem też guru dla wielkiej rzeszy niedomytych amigowców, którzy używali komputera zgodnie z jego przeznaczeniem, to znaczy strzelali do obcych w rytm muzyki techno, kiedy w tle zapieprzała paralaksa z miliardem kolorów, przy których lata sześćdziesiąte wyglądały jak proszona herbatka u babci Jadwigi.

Wspominałem o tym kłamstwie z nazwą logiczną i fizyczną? Dobrze. Robiło się tak. Jeżeli miałeś szczęście, to dyskietka z grą była systemowa (to znaczy zawierała normalną strukturę danych jak katalogi i pliki i dawała się odczytać przez system bez własnego bootloadera) i najczęściej po jej włożeniu do napędu DF0: na ekranie pojawiała się jej ikonka podpisana np. PornPart1 co znaczyło dla nas tyle, że w fizycznym napędzie DF0: dostępny jest logiczny wolumin PornPart1:. Wszystko co musiałeś zrobić, to przegrać pliki ze wszystkich dyskietek do katalogu na twardym dysku i napisać skrypt. O, taki:

assign PornParty1: dh0:gry/pornparty
assign PornParty2: dh0:gry/pornparty
dh0:gry/pornparty/pornparty

Gra, szukając dyskietki pornparty1:, zostanie odesłana do katalogu na dysku. Teraz wystarczy to zapakować, zanieść na giełdę i zebrać obietnice przyszłego piwa, które kupią Ci lamerzy, jak tylko skończysz więcej niż piętnaście lat.

Mała piracka trivia dla lokalnych amigowców. Po tylu latach już chyba mogę? Moim największym osiągnięciem na scenie crackerskiej było przystosowanie zajumanej wersji Sensible World of Soccer do działania na Amidze 500. Piracka wersja sprzedawana w znanym wszystkim miejscu na ulicy Przybyszewskiego nie działała, ku wielkiemu smutkowi większości użytkowników zbyt skąpych na oryginał nie mówiąc już o Amidze 1200. Enter The Emil. Szybki rzut oka na dyskietkę i okazało się, że została ona przygotowana pod nowy system plików, którego A500 nie umiała gryźć. Siedem sekund później już umiała. Odniosłem swoją wersję do sklepu za co uzyskałem stosownie duży kredyt na nowości z katalogu z żółtą okładką.

Jeżeli kupowałeś SWOS-a na dwóch dyskietkach tam, w tym sklepie, i grałeś na swojej ukochanej pięćsetce, to możemy sobie przybić piątkę! Ręka w rękę zadeptaliśmy jakikolwiek sens pisania oprogramowania na naszą platformę. Karma trochę dziwka, ay?

Wracając do przypisów. Obraz wart tysiąca słów.

Utwór zaczyna się spokojnie, trwa i spokojnie się kończy

Prawdziwego mężczyzny nie poznaje się po tym jak zaczyna, podobno. Podobno też miło jak zaczyna bez skarpetek. Amiga zaczynała proces bootowania bez niczego.

Doszliśmy dziś do momentu, w którym sekwencja startowa systemu to praktycznie system sam w sobie. Dawno zapomniano o prostocie autoexec.bat i config.sys, dziś potrzebne są rekursywne skrypty, event-driven i żeby jeszcze backend koniecznie w XML, a jak się nie da, to jebnijmy jakąś bazę.

Żeby nie było, rozumiem, z jakiego powodu jesteśmy tu, gdzie jesteśmy. Dobrze, gdzie ja jestem, a ja nie jestem w stanie prześledzić całego procesu wczytywania się systemu na swoim laptopie. Ofiary własnego sukcesu.

Były jednak czasy, gdy mężczyźni byli mężczyznami, kobiety kobietami, a pociągi jeździły na węgiel. Czasy prostsze, sielanka pod gruszą i s:startup-sequence, który rozkręcał Amigę.

Prosto i do celu. Mimo całej świadomości, że nie da się utrzymać współczesnego systemu, który zwisałby z jednego skryptu startowego, to lubię wspominać czasy, w których wiedziałem, co też się dzieje pod maską mojego komputera.

Co robi antagonista Jamesa Bonda? Daje mu szansę ucieczki

To jedna z tych rzeczy, o których zapomniałem, że mi ich brakuje. Ktoś mógłby powiedzieć, że w takim razie mi ich nie brakowało, ja znów twierdzę, że pogodziłem się z losem.

Programiści nie są specjalnie znani z ich zamiłowań do dokumentacji, która nie odnosi się bezpośrednio do przekładania bajtów z jednego miejsca na drugie. Podręczniki zawierające informacje co do stylu traktowane są jako delikatna sugestia i nic więcej. Z tym większym zdziwieniem przypomniałem sobie, że prawie każdy program do ustawiania preferencji (programy systemowe zwykły mieć osobny “konfigurator” dostępny gdzieś w sys:prefs) posiada opcję “Use”.

Zanim o tym, kilka słów o przechowywaniu ustawień w AmigaOS. Słyszeliście kiedyś o RAM-dysku? RAM-dysk to taki wirtualny dysk, który znajduje się w pamięci (serio, kapitanie Oczywistość? Dziękujemy!) i jego zawartość ulatuje razem z resetem komputera. W AmigaOS RAM-dysk jest niezbywalną częścią systemu. Co różniło jego implementację (i w pewien sposób wpłynęło na to, że to jedyny system na którym stał się popularny) od innych to fakt, że dokonywał on automatycznie przydziału pamięci. DOS-owy odpowiednik miał określone przy tworzeniu, że zajmie np. megabajt i już. RAM-dysk w Amidze zajmował tyle, ile zajmowały umieszczone tam pliki, a górną granicą była dostępna dla systemu pamięć.

RAM-dysk był używany do trzech rzeczy

  1. rozpakowywania programów celem przetestowania, nie trzeba było sprzątać po sesji
  2. zapisywanie plików tymczasowych
  3. przechowywanie ustawień

Przy starcie komputera system kopiował zawartość katalogu EnvArc: do RAM:Env i przypisywał do niego nazwę Env:, katalog EnvArc (od Environment Archive) zawierał ostatnie zapisane ustawienia, a Env: ich bieżącą kopię. Przejdźmy do slajdu numer następny.

“Save”, “Use” i “Test”. Kliknięcie “Use” powodowało zapisanie zmiany do katalogu Env: (więc na RAM-dysk) i pozwalało przetestować zmiany. Jeżeli udało nam się ustawić czarny tekst na czarnym podkładzie i spowodować aby wskaźnik myszy przesuwał się tylko o cal, to jeden reset dalej czekało nas wybawienie z opresji. To jedna z takich banalnych rzeczy, które cieszą.

Oczywiście dziś trzymam swoje dotfiles w repozytorium GIT-a, co wymagało kilku skryptów2, drugiego serwera, który utrzymuje te dane i wprawdzie wszystko jest rozproszone i nowoczesne, to jednak nie mogę się jakoś oprzeć wrażeniu, że kopiowanie katalogu ma w sobie jakąś prostotę, przy której moje rozwiązanie jest wymęczone jak Stanisław Lem po maratonie “Na Wspólnej”.

O tym jak kodeki dało się instalować bez “paska narzędziowego” Aleksy dla IE

Dzisiejszym słowem-wytrychem jest skalowalność, wczorajszym była modułowość. Jeżeli program był modularny, to znaczyło, że marketingowiec mógł zawsze powiedzieć o tej rozpieprzonej części programu “wystarczy wymienić moduł”. Zaraz, miało być o tym systemie z lat dziewięćdziesiątych.

AmigaOS miał wbudowany system DataTypes. Co to znaczyło? Wyobraź sobie, że piszesz program graficzny, ale nie masz specjalnie czasu na te wszystkie głupie formaty plików, które krążą po dyskietkach znajomych. Odwołujesz się więc do DataTypes przez standardową bibliotekę systemową i mówisz mu “wczytaj obrazki, o których wiesz jak”. Ta dam!

DataTypes to dekodery (animacji, obrazków, dźwięków) napisane tak, aby używając wspólnego API pozwolić użytkownikowi wczytywać media bez potrzeby zmieniania programu. Jeżeli wczoraj nie było formatu PNG (młodsi mogą nie pamiętać, że nie było. Czasy wielkiej schizmy LZW wywarły piętno na nas wszystkich) a Twój program jest napisany według zasad, to pojutrze ktoś napisze odpowiedni “datatyp”, użytkownik go sobie zainstaluje i gotowe.

Nie mówiąc już o tym, że odpowiednie dekodery mogły być przygotowywane pod specjalne linie procesorów czy też kart graficznych, dzięki czemu mogłeś sobie wybrać coś, co będzie działało jak sobie życzysz.

Po raz kolejny, mimo mojego kompletnego umiłowania do kompilowania programów, co brzmi lepiej dla Zwykłego Usera:

Więcej niż piktogramy

Ikona w AmigaOS była czymś więcej niż ikony w innych systemach. Po pierwsze była dodatkowym plikiem, którego nazwa zgadzała się z nazwą pliku, który miała opisywać i rozszerzenia .info. Każda ikona posiadała dwa stany: przed i po kliknięciu. Prawdopodobnie miało to pomóc określić stan w jakim znajduje się ikona, praktycznie skupiło się to na projektowaniu uroczych ikonek, które wyglądały jeszcze zabawniej po kliknięciu. Hipopotamek z zamkniętą buzią. Po kliknięciu z otwartą i nutki. Tak się włączało szlagierowy odtwarzacz muzyki HippoPlayer.

Nie tylko lansem stały ikony. Metadanymi stały też.

Poza standardowymi rzeczami, takimi jak atrybuty pliku, komentarz i data utworzenia, widzimy pole “Default tool”, co jak bardziej rozgarnięci czytelnicy mogą zgadnąć, jest miejscem do wpisania domyślnego programu, który włączy się przy dwumlasku Bieleckiego. Mogłeś więc komponować sobie muzykę w programie muzycznym, zawrzeć nazwę tego programu w polu “Default tool” i klikając wracać do pracy nad nim, ale mogłeś też bez problemu zaciągnąć ikonę do HippoPlayera i posłuchać efektów.

A te “Tool Types”? To nic innego jak dodatkowy sposób na konfigurowanie programu w stylu .ini, zmienna = wartość. Pozwalało to zmienić domyślne ustawienia wywoływanego programu (w przypadku zrzutu ekranu jest to instalator aplikacji).

Wrócę jeszcze do komentarzy. Komentarze to była dopiero super sprawa. Ponieważ AmigaOS nie dostarcza żadnych narzędzi do zarządzania swoim cyfrowym żywotem i do tego jest systemem jednoużytkownikowym, to normą było ręczne kopiowanie plików do systemu. Jak ktoś miał świeższą wersję reqtools.library na dysku, to nie ściągał pakietu instalacyjnego, tylko kopiował go sobie do libs:, przy takim podejściu do systemu komentarze do plików pozwalały mi zachować zmysły.

Przed instalacją programu wpisywałem w konsoli polecenie, które ustawiało komentarze dla wszystkich plików programu na np. “Plik pochodzi z programu XYZ, zainstalowano w marcu”. Potem pozwalałem się mu instalować. Kiedy coś mi nie grało z fontem czy biblioteką, po prostu patrzyłem na komentarze i już wiedziałem, że plik został nadpisany. Jak nie masz dpkg to masz łeb!

A jak było naprawdę?

AmigaOS w tamtym wcieleniu był systemem bardzo dobrym. Na lekko dokarmionej Amidze człowiek pracował jak pszczółka i czuł się jak bóg. Bo i serio nie było specjalnie przeciwników. Apple było praktycznie nieznane, a OS7 powodował tylko pusty śmiech. Microsoft miał dopiero przywalić z Windows 95 i zgarnąć pulę nad długie lata. Atari, poza małą niszą, nigdy nie przekonało nikogo TOS-em, a Falcon spadł z drzewa zanim się dobrze wykluł. Ośmiobitowce dawno już trafiły na karty historii.

Światu nie zabrało długo by dopaść, a później przegonić AmigaOS. Potem wybuchła wojna domowa i dzięki wielkiemu wysiłkowi walczących stron prawie nikt nie przeżył. Powstały trzy największe obozy, tak wielkie, że po ustawieniu ich na łbie od szpilki zostanie miejsce dla kilku milionów diabłów. Ale to już historia na inną okazję. Jeżeli chcecie posłuchać mojej jednostronnej i absolutnie zakłamanej historii współczesnej świata po Commodore, to możecie napisać e-maila. Zbiorę się na pięćdziesięciolecie.

Przekonałeś mnie

Miałeś Amigę i nagle zachciało Ci się klikać? Są opcje.


Full disclosure, kumpluję się z eFUNZINe. Jak coś kupicie powołując się na ten tekst to mogę obiecać, że coś surpresę.

  1. od tego w tamtych czasach miałem ŁKS. Jak powiedział kiedyś nbw: Amiga i ŁKS, zawsze mieliśmy przejebane []
  2. żeby mi się .git nie mieszał z katalogiem domowym []

2010/07/27 24 komentarzy »

1979

Sen nocy letniej

Stoją tam we dwie. Ta niższa robi za trybunał. O nieobecnej koleżance opowiada historię, która odbija się od wiat przystanku autobusowego linii N4. Otóż ona, ta nieobecna, mówi “kupiliśmy” kiedy to jej chłopak kupił pralkę. Poza tym mieszkają osobno, ta nieznajoma i chłopak z pralką. Gacie tylko do niego nosi. W domyśle, że chyba brudne. Poza tym nie gotuje. Nie potrafi.

“Ja” — wspomniała oratorka — “też nie potrafię”. Zupę jednak zrobię. Bo zupę się wstawia, ona się gotuje, ja się maluję. Dobre czasy. Koleżanka, ale ta co stoi na przystanku, nie ta od pralki, potakuje. Rozumie. Ona też by, gdyby nie. Żartują obie o zupce chińskiej przy świecach.

Tak stoją dwie czarownice, nocą letnią, biadoląc o cudzym szczęściu. Kolejną noc spędzą rzucając się w zimnej poscieli marząc o rycerzu z własną pralką.

Kiedy teraz siedzę i próbuję zapisać to, co widziałem, jestem zagadywany. Jakiś młodzieniec przysiadł się do mnie i pyta o czym piszę. Odpowiadam, że tylko notuję. Czemu notuję, pyta. Chyba żeby nie zapomnieć. Pukając się w nos i wskazując siedzące przede mną dziewczyny mówi, że on dzisiejszej nocy nie zapomni. Kiedy autobus zatrzymuje się po raz kolejny, podnosi się z okrzykiem “dziewczyny, wysiadamy!” i zostaje sam na przystanku. Dziewczyny jadą dalej, a on tej nocy nie zapomni z pewnością.

Gdyby miał pralkę.

2010/07/09 Jeden komentarz »

1979

Twórca w nowych czasach

W ostatnim odcinku podcastu LoFijiNKS Joel Watson, autor komiksu Hijinks Ensue opowiada na pytania związane z problemami i możliwościami przed jakimi staje dziś niezależny autor, który chce publikować w Internecie.

Od “jak się promować?” po “jak zarabiać?” przez Creative Common i piractwo z ust gościa, który w przeciwieństwie do “ekspertów” od social media ma doświadczenia z pierwszej ręki.

LoFijiNKS Podcast #7, 1:24:55h

2010/07/06 Cisza »

1979

Poniedziałek the 14th

Nie jestem fatalistą, ale koniec jest bliski. Na szczęście tylko poniedziałku, który zaczął się tak.

Wstałem o piątej. Wyznaję zasadę, że trzeba iść jak najszybciej do pracy żeby wyjść jak najpóźniej. Nie jestem jednak pracoholikiem który zarabia worki pieniędzy. Jestem po prostu idiotą. Wypiłem śniadanie składające się z dwóch kaw i na paluszkach, żeby nie obudzić dzielącej ze mną norę mieszkalną kobiety, przedostałem się do przedpokoju gdzie stwierdziłem brak kluczy do biura.

Rozważyłem opcje i nie znajdując rozwiązań opadłem znów przed laptopa. Popisałem kilka zdenerwowanych e-maili, które zaczynały się od wulgaryzmów, zawierały kilka innych w treści i miały priorytet ustawiony na High co uznaję za wulgaryzm wysmakowany.

Pracuję z ludźmi, którzy wszystkie godziny przed 11:30 uważają za środek nocy. Szansa zobaczenia ich w biurze przed czternastą jest znikoma.

Szczęście uśmiechnęło się do mnie1 około dziewiątej, gdy thung stwierdził, że jest w stanie przybyć do biura już przed jedenastą. Uradowany tą wiadomością spakowałem się bardzo szybko, ucałowałem osobę pełniącą rolę żony i jednym płynnym gestem wylałem na siebie stojącą na stole herbatę.

Przebrałem się i ze śpiewem na ustach, słowa piosenki były głównie o mojej nienawiści do świata jako takiego, udałem się do biura.

Za jakiś czas pojawił się Potera i od drzwi oznajmił nam, że się wywalił. Na laptopa, bo nie chciał się ubrudzić. Pocieszyłem go, że przecież chyba nic się nie stało, jego wylizany MacBook Pro, który otrzymuje więcej zabiegów higienicznych przy pomocy miękkich szmatek i płynu antybakteryjnego niż dwa wagony tramwaju linii 11, nie może się zepsuć przecież ot tak, od wywrotki.

A potem go wyciągnął z torby.

Brzydki Maczek to tak jak niedziałający PC. Udało się nam trochę poodginać porty i nawet działa.

Dzień upływał dalej zwykłym rytmem. Zadzwoniliśmy do klienta, z którym to klientem przygotowujemy projekt od dwóch miesięcy, żeby usłyszeć taką linię: “Nie mogę przekonać szefów, zajmijcie się czymś innym”. Było coraz lepiej.

Wieczorem opuściłem biuro by spotkać się z przyjacielem, napić się piwa i może zobaczyć mecz Włochy – Paragwaj. Spotkaliśmy się w knajpie, gdzie przy piwie opowiedziałem mu o naszym strasznym dniu. Popatrzył na mnie i od niechcenia wspomniał o tym, że rano upuścił kubek kawy na podłogę, który rozbił się na kawałki zalewając wnętrze jego komputera, który nie chce się już włączyć. Pośmialiśmy się z naszych tragedii. Potem dodał, że następna osoba z którą się umówiłem nie dotarła do pracy, bo urwało mu się koło w jego BWM M3. Pośmialiśmy się jeszcze trochę i postanowiliśmy już niczego się w tym dniu nie dotykać.

Zasiedliśmy więc po staropolsku, przy jadle, napoju i włączonym telewizorze nastawionym na Szpakowskiego. Dzwonek do drzwi. Na scenę wchodzi Krzaku i dramatycznym gestem pokazuje na swoje oczy, które pozbawione są białek. Opowiada: zacząłem grać w filmie, pani mi mordę pudrowała pierwszy raz, puder dostał się pod soczewki, zasnąłem w soczewkach, ostre zapalenie spojówek wyłączające mnie z dalszej działalności artystycznej związanej ze szczerzeniem się do oka kamery.

Zebrał oklaski, bo był dobrą kropką nad naszym “i” w “tragedia!”.

  1. ostatni raz []

2010/06/15 Cisza »

1979

Będąc w dziewięćdziesięciodziewięcio procentowej mniejszości

Będzie krótko i węzłowato. Proszę, jeżeli chcecie napisać, że jesteście zupełnie pewni, że nigdy nie spotkaliście się z kimś kto robi to czy tamto inaczej, że prawie coś skończyliście, to nie piszcie:

Czytając takie zdania widzę od razu naukowca w odmianie reklamowej. Takiego od bielszej bieli, takiego ślepiącego się w rosnące słupki, które nie mają podziałki.

Ile wynosi jeden procent waszej pewności? Trzy bibliotekogodziny? Skąd bierzesz dane dotyczące użytkowników? A ile to jest w naprawionych błędach?

“Zupełnie pewny”, “większość użytkowników, których znam”, “zamknąłem trzy błędy”.

Gdy piszecie notkę o tym, jak bardzo wam unikalni użytkownicy obrodzili, powstrzymajcie się proszę od przechwalania się procentami bez podania bazowej. Nasza Klasa, popularny wśród pracowników biurowych serwis ze zdjęciami, próbowała takiej sztuczki wklejając na swoim blogu wykres. Bardzo im urosło. Nie wiadomo co, nie wiadomo porównując do czego, ale urosło.

Porównywanie “przyrostów” bez kontekstu nie ma sensu. Wiecie jak łatwo mieć przyrost w tysiącach procentów posiadając pięciu użytkowników i jak trudno o procentowy wzrost posiadając tych użytkowników milion?

Podsumowując. Procent to nie jest wasza prywatna dziwka żebyście ją pakowali gdzie wam się podoba. Samo wstawianie liczb nie nadaje niczemu powagi. Wstawianie liczby od czapy zabiera co najmniej 17.39 procent lansu. Większa połowa z was i tak nie zrozumie, prawda?

Na marginesie: jak wszyscy wielcy blogerzy przede mną zamknąłem komentarze. Foch? blog@bronikowski.com

2010/06/07 Cisza »

1979

“Nieuporządkowane” sortowanie w MySQL

To bardziej note-to-self niż notatka.

Musiałem dziś posortować dane wg kolumny, która zawierała tekst i narzucić porządek ustalony odgórnie i nie zawarty w logice bazy. Na początku napisałem wielki UNION, który łączył trzy zapytania z różnymi parametrami do WHERE, ale wydawało mi się to wybitnie nieeleganckie.

Okazało się, że jest piękne rozwiązanie. To parametr FIELD do ORDER BY.


SELECT
  id,
  soup_name,
  how_salty_avg
FROM
  soups
ORDER BY
  FIELD(
   soup_name,
    'Pomidorowa',
    'Szczawiowa',
    'Niespodzianka',
    'Odpadek'
  )

Człowiek uczy się całe życie. Na szczęście za część tej edukacji płacą1 klienci.

  1. to bardzo ryzykowna teza, ale nie waham się jej postawić []

2010/06/05 Cisza »

1979

Źle, gorzej

Działo się to dość dawno temu.1

Wróciłem ze szkoły i już od drzwi poczułem tę zimną atmosferę, której obawia się każdy nastolatek, który ma zbyt wiele za uszami. Może dzwonili ze szkoły zapytać, czemu nie było mnie na zajęciach w maju? Może zadzwoniła policja, która spisała mnie w drodze na trening za wznoszenie okrzyków o ambicji zajebania łódzkiej policji?2

Przeszedłem do pokoju rodziców i zastałem ich w pozycji „usiądź i porozmawiamy”, usta zaciśnięte w białe kreski, wzrok wycelowany wprost we mnie. Usiadłem. Rozmowę rozpoczęła matka. Zapytała mnie czy wiem, co mógł znaleźć ojciec. Ojciec mógł znaleźć wiele rzeczy, nie chciałem więc zgadywać i odkrywać wszystkich kart. Odpowiedziałem, że pojęcia nie mam. Ojciec podniósł się, stanął na stole i sięgnął za kolumnę stojącą na szafie. Wyciągnął zza niej kasetę VHS i położył ją na stole.

Okładka przedstawiała panią i pana podczas wyjątkowo namiętnego seksu analnego. Węgierski tytuł obwieszczał coś o „anal” i coś o „terminator”. Zapytano mnie, czy mam coś do dodania. Nie miałem niczego do powiedzenia, otworzyłem pudełko i wyjąłem kasetę, włączyłem odtwarzacz i telewizor. Mimo protestów matki, które uciszyłem gestem „chwila, robię”, włączyłem film.

Wielkie jest prawdopodobieństwo, że w ten dzień, w tym miejscu, moja rodzina straciła resztki wiary co do mojej przyszłości. Telewizor rozświetlił się ostatnim odcinkiem „Czarodziejki z Księżyca”, który nagrałem dla innych nerdów ze szkoły. Jako jedyny posiadałem sprzęt i dość wolnego czasu wynikającego z wagarów. To jedyna kaseta, na której nam nie zależało i przeznaczyliśmy ją do skasowania. Schowałem ją z uwagi na okładkę.

  1. Nie pamiętam czy już kiedyś o tym nie pisałem, to popularna historia wśród moich znajomych, postanowiłem więc zapisać ją i na przyszłość po prostu podawać odnośnik. []
  2. Prawy pomocnik krzyczał, mnie spisali. Jak powiedział Pan policjant, kiedy odmówiłem wskazania winnego: „Chcesz mieć miękkie serce to musisz mieć twardą dupę”. []

2010/05/27 3 komentarzy »

1979

HTML 2 PDF: wkhtmltopdf

Zadanie: przygotować dokument PDF zawierający wszystkie faktury wystawione przez system w ostatnim roku.

Problem: system nie zapisuje faktur w PDF-ach, są wyświetlane jako strony HTML na ekranie monitora i drukowane przy pomocy arkuszy stylów z odpowiednimi definicjami @media dla wydruków.

Problem: faktury, które trafią do dokumentu muszą wyglądać identycznie jak te dostępne w systemie. Napisanie zewnętrznego generatora, który na podstawie danych z bazy zapisze odpowiedni PDF będzie kłopotliwe i czasochłonne.1

Problem: programy, które potrafiły generować PDF z HTML-a nie potrafiły robić tego dobrze. Większość była szlachetnie nieświadoma istnienia definicji w style.css — pamiętajmy — celem jest identyczny wygląd.

Rozwiązaniem byłoby zautomatyzowanie wydruków przy pomocy przeglądarki. Nie miałem za bardzo pomysłu jak tego dokonać. Do tego dochodzi okienko przed wydrukiem, którego chyba nie da się oskryptować.

Pokarmiłem wyszukiwarkę różnymi słowami kluczowymi i znalazłem projekt wkhtmltopdf, który zrobił mi dzień. WebKit HTML To PDF to jak ławo zgadnąć program zawierający w sobie silnik WebKit i wypluwający na jego podstawie PDF. Czego można chcieć więcej? Potrafi używać osobnych stylów, interpretuje JavaScript (więc nie ma problemu z robieniem zrzutu aplikacji generującej wygląd przez dżejkłery czy co tam teraz jest modne do fruwania elementów) i zmienić automatycznie kolorystykę na odcienie szarości, co pomaga przy drukowaniu. Innymi słowy robi jedną rzecz i robi ją dobrze.

Przykłady: piotrpotera.com, bronikowski.com, riddle.pl2

Jak widać “tekst jest tekstem”, obrazki się wczytały, zewnętrzne czcionki także zaskoczyły. Jestem miło zaskoczony. Faktury nadal się konwertują. Jeden testowy przebieg trwa około pięciu godzin. Tę noc spędzę w objęciach kawy.

  1. dorzućmy do tego problem z kodowaniem, który powstał w wyniku dawnej aktualizacji MySQL-a do 4.1, która to wersja lubiła definiować latin1 dla pól tekstowych []
  2. Strona Riddle się delikatnie popsuła. Nie żeby mnie to specjalnie dziwiło, on jest psuja od CSS, a wersji WebKita z którą zbudowany jest wkhtmltopdf na moim systemie nie znam. []

2010/05/19 9 komentarzy »

1979

Bajka z morałem

W pewnym królestwie, którego nazwa ginie w mrokach historii, mieszkał książę. Fucha była całkiem niezła, płaca dobra, a jedyne zagrożenie stanowiła kombinacja złej wiedźmy i czaru zamieniającego w żabę. Na tę okazję książę utrzymywał kilka kurew o złotym sercu, które za dukaty pocałują praktycznie wszystko.

Idylla została zburzona. Królewska toaleta się zapchała. Gówno, a i obiekty natury okołohigienicznej wrzucane z pewnością przez roztargnionych domowników do muszli, rzuciły wyzwanie prawom fizyki.

Zawstydzony książę postanowił nie wzywać hydraulika. Raz po raz pociągał za spłuczkę pełen nadziei, że materia nieożywiona wreszcie odpłynie i dołączy do swoich braci w kanale. Tchórzył jednak za każdym razem, gdy poziom wody podnosił się zbyt wysoko. Nie pozostało nic innego. Trzeba będzie fizycznie usunąć to gówno.

Strapił się książę. Najbliżej czegoś co dziedziczyło wszystkie właściwości fizyczne gówna znalazł się podczas tego spotkania z dyplomatami kraju, którego nie kochał przesadnie. Zabawa ekstremistami nie znajdowała się wysoko na liście rzeczy, których szlachetnie urodzeni podejmowali się bez żachnięcia. Nie licząc tych zboków od markiza De Sade. Z sercem pełnym rozpaczy i duszą pełną strachu pociągnął za spłuczkę jeszcze raz.

Obserwował jak poziom wody podnosi się i podnosi. Kiedy wydawało się, że już za chwilę woda przeleje się za brzegi rozległo się ciche mlaśnięcie i breja opadła gwałtownie. Sytuacja została opanowana dzięki odwadze wrodzonej niechęci do pracy fizycznej i wiary, że Einstein pomyli się w przyszłości mówiąc, że problemów nie da się rozwiązać tym samym sposobem myślenia jakim się te problemy stworzyło.

Prawdziwy intelektualista woli poczekać, aż mu się kibel zapcha z jego własnej winy. Gdy się już zapcha, zaryzykuje rozwiązanie proste i o małych szansach powodzenia. Jan Kowalski popchnie gówno sam. Dlatego właśnie świat pełen jest szczęśliwych prostaków i zasrańców oczekujących, że problemy zasadniczo rozwiązują się same jeśli się poczeka dość długo.

2010/05/05 4 komentarzy »

1979