Archiwum | emil@fuse.pl && crypto

Ludź vs. Futurysta

Odyseja kosmiczna 2001: HAL9000 App

Najtrudniej być prorokiem we własnym kraju i długowiecznym futurystą.

Nie jedzenie w pigułce, a fast food. Nie podbój kosmosu, a rzesze ludzi, którzy twierdzą, że na księżycu nie byliśmy. Nie globalny rząd, a globalny nierząd. Problemy sprawia nam upierdliwy pracownik niskiego szczebla działu IT, nie HAL9000.

To wszystko składam na konto nieudolnych techników, którzy nie dorośli do wizji Asimova, Dicka, Lema i Clarke’a. No, może nie szkoda mi trochę dewirtualizacji narkotykowych odjazdów Dicka, ale to temat na inną notatkę.

Każdy artykuł o porażce futurologów musi wspomnieć o jednym kluczowym dla krytyków elemencie krajobrazu przyszłości. O latającym samochodzie.

Dajcie mi wymiar, dajcie mi wolność.

Latający samochód wydawał się bardzo dobrym pomysłem. Koszta budowy infrastruktury spadają, mamy już wybudowane powietrzne autostrady dzięki braku potrzeby posiadania tychże. I można robić politykę, a nie budować mosty! Parkowanie na dachach to świetne odium na problemy z miejscem. Nigdy więcej samochodu zaparkowanego na chodniku tak, że po drugiej stronie powstaje dyfrakcja. Nie straszny będzie też deszcz czy śnieg, starczy sięgnąć nad pułap chmur i dać wolne wycieraczkom.

Rozważmy klasyczny samochód. Samochód przesuwa się w dwóch wymiarach, jedzie w kierunku Y i skręca przy pomocy X, wszystko w czasie T. Samochód latający otrzymuje trzeci wymiar w postaci Z, wysokości i musimy rozważyć co najmniej dwie zmiany Z: od zera do wysokości lotu i z wysokości lotu do zera w idealnych warunkach, lub więcej modyfikacji wysokości ze względu na warunki lotu.

Po rozważeniu tego stwierdzam, że brak latających samochodów nie jest spiskiem technologów przeciwko społeczności, a wyrazem głębokiego zrozumienia jej potrzeb. Ludzie, jak wynika z wieloletnich obserwacji, są z natury głupi.

Ze wzoru na śmiertelność wyprowadzam więc następujące twierdzenie: człowiek poruszający się z dowolną prędkością w trzech wymiarach jest dużo bardziej morderczy niż człowiek poruszający się w dwóch lub pozostający w spoczynku na kanapie.

Wyobraź sobie pijanego kierowcę. 9/11 w twoim domu. Ile razy kolega jechał ze strzałką paliwa wskazującą E? Zamiast podróży z bakiem na najbliższą stację odbywasz podróż “Z do zera” osiągając 9.81 m/s² w próżni własnej głupoty.

“Panie władzo, nie przejechałem na czerwonym. Przejechałem nad czerwonym!”

Zanim zarzucicie mi czarnowidztwo, chcę powiedzieć, że mam rozwiązanie. Latające tramwaje.


Do ubikacji tylko z telefonem

Życie pryszczersa 1 to ciężki kawałek chleba. Całe życie masz świadomość, że rzeczy które możesz sobie napisać w przerwie między papierosem a kawą inni muszą kupić w Sklepie na Aplikacje Przez Program do Słuchania Muzyki. Do tego jesteś przystojniejszy, a dogłębna analiza filmów erotycznych w przyszłości zaowocuje udanym pożyciem seksualnym z partnerką, partnerem, osiołkiem lub dowolną kombinacją powyższych.

Prawdę mówiąc nie mam pomysłu jak zacząć tę notkę, bo ludzie, którzy ją zrozumieją potrzebują dwóch linków do man-pages. Mam spotkanie o czwartej rano (tak, serio) i muszę zmarnować trochę czasu, postanowiłem więc wygrzebać coś z notatnika drewnianego hackera.

Podzielę ten tekst na trzy części: techniczną, liryczną i dramat w jednym terminalu.

Sinoząbek

Wiecie oczywiście, co to Bluetooth? W dużym skrócie to technologia bezprzewodowej transmisji danych. RS232 2.0. Używana jest popularnie do przesyłania danych między urządzeniami przenośnymi (“Przegraj mi ten dzwonek, ziom”), jako wirtualny kabel pomiędzy urządzeniami wejścia-wyjścia i systemem centralnym (myszki, kontrolery konsol, modem 3G w telefonie, słuchawki) i do rozsyłania spamu.

Urządzenie wyposażone w Bluetooth mogą być widoczne dla innych lub też pozostawać ukryte. Posiadają one, tak jak inne urządzenia sieciowe, swój unikalny numer MAC.

Idę do ubikacji, tylko niczego nie ruszajcie!

Och, święta naiwności. Ile razy wracałeś do pokoju po wizycie w ubikacji żeby doświadczyć goatse na podkładzie, zmiany statusu związku na Facebooku i e-mail na listę dyskusyjną, w którym przyznajesz się masturbacji podczas oglądania Koła Fortuny?

Twoi biurowi koledzy to gnoje i tylko czekali, aż oddalisz się od komputera aby zniszczyć twoją reputację. 2 Nauczony doświadczeniem zmniejszasz czas aktywacji wygaszacza na minutę i przez następny tydzień wpisujesz swoje hasło składające się ze stu znaków (małe-duże-specjalne-runy-lizanie-portu) za każdym razem, gdy sięgniesz po kawę.

Ktoś kiedyś gdzieś wpadł na dobry pomysł: gdyby komputer sprawdzał obecność twojego telefonu i blokował ekran, kiedy opuszczasz pomieszczenie z nim w kieszeni? Genialne w swojej prostocie. Kosztowało chyba dwadzieścia dolarów. Zanotowałem sobie żeby kiedyś zrobić taki hack pryszczer-stajla.

is_emil_home.sh

Problem wydawł się banalny. Trzeba sprawdzić narzędzia, które przychodzą z stosem BT i linię poleceń wygaszacza. Zajęło to dokładnie 87 sekund. Pierwszym narzędziem będzie hcitool. Sprawdźcie, czy macie włączony BT i wpiszcie:

emil[~]> hcitool scan
Scanning ...
   00:18:AF:3E:9E:EE    Psot
   00:19:4F:DB:DA:F5    Emil's tablet

W zasięgu mojego laptopa znajdują się dwa aktywne, wykrywalne urządzenia. Telefon (Psot) i N800. Ponieważ urządzenia nie mają nadanych adresów musimy je pingnąć po adresie MAC. Tu pojawia się pierwszy problem, l2ping wymaga uprawnień roota, co zdecydowanie ogranicza nasze możliwości, nie każdy ma takie uprawnienia.

emil[~]> l2ping 00:19:4F:DB:DA:F5
Can't create socket: Operation not permitted
emil[~]> sudo l2ping 00:19:4F:DB:DA:F5
[sudo] password for emil:
Ping: 00:19:4F:DB:DA:F5 from 00:23:4E:F7:7C:57 (data size 44) ...
44 bytes from 00:19:4F:DB:DA:F5 id 0 time 33.17ms
44 bytes from 00:19:4F:DB:DA:F5 id 1 time 9.66ms
44 bytes from 00:19:4F:DB:DA:F5 id 2 time 9.82ms
44 bytes from 00:19:4F:DB:DA:F5 id 3 time 20.79ms
4 sent, 4 received, 0% loss

Będziemy musieli użyć hcitool w naszym skrypcie. To wada, bo jego reakcja na pojawienie się nowego urządzenia jest dłuższa.

Teraz zajmijmy się wygaszaczem. Pisząc to mam dostęp do GNOME, prawdopodobnie da się zrobić podobną sztuczkę w innych systemach biurkowych.

gnome-screensaver-command -a #wygaś
gnome-screensaver-command -d #wyłącz

Połączmy to metodą taśma-klejąca-grep-bash:

1
2
3
4
5
6
7
8
#!/sh/bash

hcitool  scan |  grep "00:19:4F:DB:DA:F5" > /dev/null
if [ $? -eq 0 ]; then
  gnome-screensaver-command -d
else
  gnome-screensaver-command -a
fi

Wrzucić do Crona lub zapiąć we własną pętlę. Dwadzieścia dolarów możecie PayPalem.

It’s żywe!

  1. oddany użytkownik Linuksa z lekkim syndromem mesjasza
  2. OTOH jeżeli czytasz tego bloga jest spora szansa, że twojej reputacji nie da się zniszczyć

Piła, sinus, prostokąt i inne obwiednie

Kolejny weekend, które spędzę w pracy. Żaden z tekstów z notatnika nie nadaje się do publikacji. Pomyślałem, że nabiję Wam trochę rytm: po cztery bity na każdy dzień weekendu.

4 bits + 4bits = weekend

  1. pornophonique – Lemmings in Love (5:10)
  2. Ozzed – Knock Yourself In (2:01)
  3. Goto80 – Ter4 (3:16)
  4. Calidoscopio – Wandering stars (3:22)
  5. paniq – Erleuchte Mich (3:59)
  6. Nullsleep – On Target (3:31)
  7. Skruvmejsel – Mr.Yr (4:08)
  8. yawn – Kind of Guy (2:45)
  9. Paza – Crazy Bird (3:39)
  10. Linde – Enjoyable (2:41)
  11. Lithis – Laserboy Meets Robotgirl (3:12)
  12. pornophonique – Rock’n’roll Hall Of Fame (4:02)
  13. Tek Support – Mk V (4:58)
  14. Wipe of Steel – The Dark Side of the Jazz (5:36)

Odsłuchaj teraz (Link prowadzi do listy odtwarzania w formacie m3u)

Gdybym musiałbym określić gatunek muzycznych wymienionych wyżej utworów stawiałbym na cztery podstawowe grupy tematyczne: acid, WTF, 8bit i Twoja Żona Tego Nie Zniesie.

Jeżeli żyjesz w lesie i nie posiadasz odtwarzacza muzyki, który potrafi wczytać .m3u lub chciałbyś odłaczyć się od nieprzebranych zasobów Internetu, możesz pobrać lokalną kopię zapisując plik na dysku i odesłać wget do brudnej roboty.

wget -i 4bits_plus_4bits_eq_weekend.m3u

Miłego odbioru!

Moi faworyci na liście to: Lemmings in Love, Erleuchte Mich, Kind of Guy, Crazy Bird i The Dark Side of the Jazz. Należy.


N4

Lśniące włosy spływały rzeką na jej świetnie skrojoną kurteczkę koloru pistacjowego. Głowa poruszała się w rytm niesłyszalnego bębna wybijającego rytm transu. Gdybyś miał odwagę stanąć obok, ujrzałbyś delikatnie zaszklone brązowe oczy dominujące nad bladą cerą.

Jej krótka spódniczka opinała uda, gwałtownie uwalniając zgrabne nogi obciągnięte nylonem. Buty na wysokim obcasie odbijały światła latarni.

Stała wsparta o wiatę przystanku N4 i rzygała.


SSH → X11

Półprawda powtórzona tysiąc razy to 998 blognotek

Biegałem w panice od kilku dni. Usłyszałem, że Jobs usunie X11 z Linuksa! Och przeklęty, przeklęty czas! Później, kiedy już zakopałem wszystkie swoje komputery w parku, przyszło dementi: Nie Jobs a Shuttleworth, nie usunie a wymieni na Wayland i nie z Linuksa a z Ubuntu.

Kpię sobię oczywiście z blożków technologiczno-plotkarskich, które uprawiają zigływidłyzm w stylu wolnym.

Pośledziłem trochę komentarze i wyszło mi, że najfajnieszą rzeczą w X11 jest tzw. “network transparency”, co znaczy, że aplikacja odpalona na jednym komputerze może wyświetlać swoją część międzymordzia na zupełnie innym komputerze. Wyszło mi też, że nigdy nie widziałem człowieka używającego tej najfajniejszej rzeczy.

Przyszedł, wyniósł okna i zostawił resztę

Pomiędzy dwoma komputerami działającymi pod *NIX-ami wystarczy nam SSH 1 z terminala z dodatkowym parametrem -X (minus-duże-iks!)

ssh -X user@adr.es.kompu.tera
$ coś-graficznego

Jeżeli wszystko poszło zgodnie z planem, powinniście zobaczyć na komputerze klienckim okno programu coś-graficznego. Pięknie.

Dodatkowym plusem całej tej zabawy jest fakt, że X11 działa na wszystkich ważnych platformach. Możecie zainstalować serwer na swoim Windows 7/Vista/XP, użyć PuTTy 2 do zestawienia połączenia i używać aplikacji ze stojącego gdzieś serwera.

windows-x11

Nie pamiętam teraz, czy OS X ma serwer X11 w standardzie, czy też trzeba go zainstalować z narzędziami developerskimi (mi się kojarzy, że dostałem X11 z XCode na 10.5.6, ale mogłem być pijany), w każdym razie nie będziecie mieli problemu z jego zdobyciem.

x11-osx

Ponieważ mój tablet umie X11 mogę też wprost z kieszeni.

maemo-x11

RDP, VNC, KGB, OHP

Istnieją dziesiątki rozwiązań pozwalających na podkradanie obrazu z komputera drogą internetową. Za moją ulubioną metodą przemawiają dwa czynniki. Po pierwsze, każdy z moich komputerów posiada wszystkie niezbędne części i nie muszę się zastanawiać, czy 10.200.0.XYZ ma serwer VNC. Punkt drugi zilustruję Bardzo Skomplikowanym Schematem Sytuacyjnym.

x11

Jumanie pojedynczych programów i używanie ich w kontekście biurka komputera klienckiego wydaje mi się być rozwiązaniem dużo bardziej elastycznym niż przysłanianie sobie ekranu obcym systemem.

…and now something completely different

Modrzew, a bardziej wideo na YouTube. Chciałem pokazać jak wszystko ładnie działa, ale zgodnie z przewidywaniami podczas klikania mówiło do mnie kilka osób, stąd też demonstracja “co to ja chciałem powiedzieć?” w postaci pliku wideo.

  1. oczywiście zakładam, że OpenSSH jest zainstalowany, nie wyglądacie mi na rolników
  2. Connection → SSH → X11 → Enable X11 forwarding

Jest sobota

Ala Była Całkiem Dziwna,
Emocjonalnie — Fabryka Gniewu.
Harcowała I Jakoś Kurcze
Lepiej Mogła Nawet Odejść.

Prochy. Rozpusta. Seks.

Tak Uwikłana Wykitowała:
Xylofonem 1 — Yyyyh — Zgnieciona.

  1. dajcie luzu, kochani

Ty, ja i fotorezystor

Będzie to historia o kreacji kreatury. Anegdota o mistrzu i uczniu, pełna gorącej cyny i drewnianych biurek z ranami po wiertłach, które ominęły swój cel. Wyjaśnię, skąd się biorą wszelkiej maści giki i jak możesz sobie takiego wyhodować we własnym domu.

Będzie to też laurka dla mojego Ojca, osobistego mitbastera, hakera i szalonego elektronika, który nie przegrywa jak ten od Piotra Fronczewskiego. Wszystkie historie są prawdziwe, każda wydarzyła się w końcówce lat osiemdziesiątych, w małym jednopokojowym mieszkaniu na granicy miasta.

Lewo, prawo. Lewo, prawo.

Matka nie wróciła jeszcze z pracy. Trzyzmianowy system pracy czy też zakładowa impreza. Życie pracownika fizycznego w PRL-u zawsze było wypadkową wódki i trzech zmian. Siedzieliśmy z Ojcem w kuchni i przerzucaliśmy strony “Młodego Technika” lub “Elektrotechnika”. Mogło pojawić się też radzieckie “Radio”. Herbata indyjska, którą wujek pieszczotliwie nazywa “malowanym drewnem” ze względu na smak i wartości, lała się strumieniami. Trzy łyżki cukru i może trochę “koncentratu cytrynowego”, żeby całość nadawała się do spożycia.

Ojciec pochylił się mocniej nad którąś ze stron i postukał palcem. Znak, że jest rzecz godna uwagi. Był to układ zdalnego sterowania, do którego akurat mieliśmy części. Kiedy po pewnym czasie układ został skończony, stwierdziliśmy z żalem, że nie mamy czym sterować. Jak polski rząd: jest układ, nie ma celu.

Matka zastała nas w ciemnym korytarzu prowadzącym do mieszkania. Podskakiwaliśmy i wykrzykiwaliśmy sukces. Wyrywaliśmy sobie małą płytkę z potencjometrem, podbiegali do progu i powtarzali podskakiwanie i krzyki.

Na blacie stołu leżała moja mała wiertarka Piko. Jedyna na świecie wiertarka, której kierunek obrotu silnika można zmienić zdalnie. Bezsensowna radość tworzenia.

Jak w cyrku

Zapytany o to, czym jest gaz, nie potrafiłem odpowiedzieć. Gaz Niemcy chyba rzucali? Takie białe, puszyste? Czy to może być ciężkie? No jasne, że nie może być ciężkie. Ojciec wyciągnął szklankę w pięknym koszyczku z czerwonego plastiku. Sięgnął po zapalniczkę i pokazał mi przelewającą się w niej wodę.

— To jest gaz i ten gaz jest cięższy od powietrza - zakomunikował.

Trzymając zapalniczkę nad szklanką nacisnął języczek. Po pewnym czasie podniósł szklankę i zniżył ją na poziom moich oczu, mówiąc:

— Na dnie leży gaz. Nie widzisz go, bo jest przezroczysty jak powietrze. Nie poleci też nigdzie, bo jest cięższy niż powietrze.

Wiedziałem, że mnie oszukuje. Poruszałem szklanką, jakbym mieszał wino (umiejętność, która przydała się dopiero w przyszłości) i stwierdziłem, że niczego tam nie ma. Ojciec zabrał mi szklankę z rąk, zapalił zapałkę i trzymając ją między palcami “wypił” to, czego nie było w szklance. Kiwnął do mnie głową i dmuchnął w kierunku świeczki kulą pomarańczowego ognia.

Graj mi, piękny cyganie

Wychowując się wśród szkieletów telewizorów, które sąsiedzi znosili do nas na ostatnie namaszczenie, wśród przedłużaczy zrobionych z przedłużaczy, które są z kabla od prodiża, miałem niejednokrotnie okazję być rażony prądem. 1 Im więcej wiedziałem o faktach związanych z rażeniem prądem, tym bardziej się go bałem. Stwierdzenia takie jak “elektroliza” i “rozpad czerwonych krwinek” działały strasznie na moją fantazję.

Dlatego też nie chciałem się brać za wynalazek, który podgapiłem w książce kolegi ze szkoły. Był to instrument muzyczny zrobiony z kartki i ołówka. Ostatecznie wybłagałem jeden z głośniczków piezoelektrycznych leżących w szafkach Ojca. Pomazałem kartkę ołówkiem, wpiąłem w jeden brzeg przewód, a do końcówki ołówka przytwierdziłem jego drugą część. Podłączyłem głośniczek do prądu i ku mojemu zdumieniu popłynął dzwięk. Niczym to jednak nie przypominało instrumentu.

Zwołałem konsultacje na najwyższym szczeblu. Dowiedziałem się, że wiele rzeczy przewodzi. Że grafit w ołówku jest właśnie takim przewodnikiem i jeśli porysuję kartkę w jednym miejscu mocniej a w drugim lżej to zmienię coś, co nazywa się rezystancją.

Pierwszy raz mogłem dotknąć oliwkowego miernika. Wiedziałem już wcześniej, że pokazuje on, ile prąd może. Teraz okazało się, że przestawienie na tę rozszarpaną od spodu literę O mierzy ile prąd nie może.

Na koniec dnia wiedziałem już, że sam jestem przewodnikiem i dlatego prąd lubi po mnie chodzić, choć według wskazań rozerwanego O dużo bardziej wolałby chodzić po kablu.

Czas, czas, czas

Wiele można założyć obserwując człowieka, który wciąga taczkę cegieł na trzecie piętro. “Artystyczna dusza” nie jest raczej jedną z rzeczy, które przebiegają ci przez głowę. I może sam bym nie wierzył, gdybym nie miał okazję widzieć zegarków, które zrobił mój Ojciec.

Nie lubiłem wstawać. Nie lubiłem wstawać, kłaść się, odrabiać lekcji. Lubiłem grzebać, czytać Bajtka i Młodego Technika i udawać gorączkę, żeby móc zostać samemu i oglądać programy przeznaczone dla rolników. 2

Któregoś dnia Ojciec przyniósł mi mój własny budzik. Nie byle jaki budzik, choć umiałem już czytać godziny ze wskazówek, ten uśmiechał się do mnie białą tarczą z małym okienkiem, w którym przesuwały się obrazki. Pomiędzy ósmą a czternastą przewijały się rysunki książek, tablicy. Później słońce, piłka i inne sugestie wolności od zajęć lekcyjnych. Po nich nadchodziło biurko-z-lampką, którego nie znosiłem strasznie. Znaczyło chyba “robienie lekcji”, choć ja głównie używałem go do patrzenia w blat i rozgrywania pojedynków z kosmicznymi najeźdźcami (widziałem już Star Wars: New Hope) we własnej głowie.

To była fantastyczna rzecz. Dwa tekturowe okręgi, okienko wielkości dwóch godzin, drugi okręg zawierał rysunki i był podczepiony do mechanizmu kręcącego godzinową wskazówką. Mechanizm opóźniony o połowę, aby nie było problemu z zwykłą, dwunastogodzinną skalą.

Kilka lat temu znalazłem budzik i próbowałem zrobić kopię. Niestety, okazało się, że można zaszczepić chęć do rozgrzebywania rzeczy, ale zdolność manualna wymaga po prostu treningu. Rozwaliłem go młotkiem po drugim dniu dopasowywania tarczy.

Nie wiem skąd się wziął pomysł na drugi zegar. To chyba jedna z tych nerdowskich rzeczy; kiedy pytasz “dlaczego?”, to znaczy, że to coś nie jest dla ciebie.

Pamiętacie takie masywne, rosyjskie zegarki. Wiem, że “masywne” i “rosyjskie” brzmi prawie jak żart, w takim razie “masywniejsze niż zwykle”; były elektroniczne, miały czerwoną tarczę, która wyświetlała godzinę po naciśnięciu guzika.

Kiedyś jeden z tych zegarków pojawił się na biurku. Za każdym razem, gdy przechodziłem obok, zmieniał swój stan. Stracił pasek. Potem wyskoczył z koperty. Biały plastik utrzymujący elektronikę i kwarc został rozcięty. Przysiadam i oglądam przez kilka godzin, jak Ojciec dolutowuje przewody grubości włosa do wyświetlacza. Grot lutownicy zrobiony z igły. Gdybym wiedział wtedy co to jest “cyberpunk” pewnie powiedziałbym — Niezły cyberpunk, Tato.

Pod wieczór z ekranu zegarka sterczało ponad 60 przewodów. Po chwili na stole pojawiło się coś znajomego. Czarny element ze szkiełkiem, jak do aparatu. Ojciec przez chwilę próbował osadzić wyświetlacz tak, aby był widoczny zza oczka. Kiedy kładłem się już spać słyszałem, jak z szafy sypią się graty. Za chwilę na środku pokoju stanął taboret, a na nim rzutnik do przeźroczy. Ojciec nakręcił soczewkę z zegarkiem i zapalił lampę rzutnika. Cała ściana pokoju zamieniła się w wielki zegarek. Zegarek wkręcony w soczewkę do rzutnika. Kropki sekundnika wielkości mojej głowy. Lekko zielony na białej ścianie.

Kiedy stajesz oko w oko ze sztuką, nie liczysz czasu. Przez godzinę nie liczyłem czasu oglądając jak czas odlicza się na ścianie.

A co Ty?

Ten tekst zaczął się od notatki na kartce: nie płacz, wychowaj sobie gika.

Miał to być oskarżycielski wpisik o tym, że grupa fascynatów nie powinna płakać nad tym, że Apple robi “sklep z aplikacjami” i jak to gwałci twoje prawa do kompilowania kernela. Zamiast lać żółć, zaszczep u innych to, co jest najlepsze w byciu dziwakiem.

Pamiętasz tego jednego człowieka, który podrzucił ci dyskietkę, pożyczył magazyn i może nauczył jak ściągać muzykę za darmo? Tego człowieka, który przyniósł do ciebie swój obrazek, muzykę lub program, który rysował kolorowe paski? Najwyższa pora, żebyś sam zrobił własne giki.

  1. kolokwialnie “kopnięty”, oduczyłem się tak mówić po tym jak na praktykach profesor kopał w tyłek za “kopnąć” i “korki”
  2. przez pewien czas trzymałem rękę na pulsie rynku pasz

Problem strony odwrócony

Po rozwiązaniu wszystkich kluczowych problemów, którymi zajmuje się w obecnej chwili Internet (in vitro, wyklęcia przez lokalnych czarnoksiężników, “przemysł nienawiści”, opodatkowanie podatków, “mord łódzki”) postanowiłem zwrócić swe oczy w kierunku problemu, który dotyka każdego z nas. Chodzi oczywiście o paginację i to, jak obecnie akceptowane rozwiązanie powoduje, że nie da się spokojnie oglądać gołych dup.

Rozważmy standardowego blożka. Blożek wyświetla notatki, powiedzmy, dziesięć notatek. Na dole znajduje się link “Zobacz chopie do tyłu”, który wyświetla kolejne dziesięć notatek. Patrzymy na URI i widzimy, że jest to “strona druga” blożka.

Wizualnie idzie to tak:

Teraz rozważmy książkę, którą piszesz. Czy po napisaniu kolejnej strony nadajesz jej numer jeden i renumerujesz wszystkie wcześniejsze? Nie, to by nie miało sensu, sto pięćdziesiąta strona książki ma dokładnie taki numer. Książkę (hipotetyczną) czytamy od najstarszej napisanej strony do najnowszej strony. Notatki na blogu układa się zwykle w kolejności odwrotnej do daty opublikowania, co powoduje, że czytamy od ostatniej strony do pierwszej. Dlatego też taka paginacja nigdy nikomu nie sprawiała problemu. Ma sens.

Piotr Szotkowski podesłał mi rano stronę z rudymi paniami, utrzymywaną przez Tumblr. Wszystko ładnie i pięknie. Klikam na link i trafiam na http://adres/page/NUMER. Niestety, zdjęcie zostało opublikowane dawno temu, blogi z rudowłosymi publikują bardzo często, trafiam więc na stronę NUMER, która zdjęcia już nie zawiera.

Ujawnił się pewien problem. Do bloga zwykle dokładamy “z przodu” przez co wczorajsza strona dwadzieścia będzie pojutrze stroną czterdzieści pięć. Wysyłanie mnie na konkretną stronę bloga (“zobacz, jaki tu miał dobry okres, z tymi trzema notkami!”) prędzej czy później zaprowadzi mnie na manowce.

Prostym rozwiązaniem, którego nigdy nie widziałem na żywo, byłoby liczenie w drugą stronę. Zakładając, że blogi mało kiedy dodają coś z datą wsteczną i dokładają tylko na kupkę, chcemy żeby strony o identyfikatorach od 1…10 były zgrupowane jako page/1

Jak? Pewnie każdy z Was już wie. Normalnie paginacja to dwie liczby przekazywane do zapytania SQL, a konkretniej do polecenia LIMIT. Pierwszy parametr LIMIT mówi od którego rekordu należy zacząć, drugi ile wyświetlić. Więc:

LIMIT ($PAGE*LIMIT_PAGINACJI), LIMIT_PAGINACJI

a gdybyśmy chcieli liczyć od tyłu (gdzie MAX to liczba notatek):

LIMIT (MAX-($PAGE*LIMIT_PAGINACJI[/ref],LIMIT_PAGINACJI

Przyznaję, że nie jest to idealne rozwiązanie. Jest to jednak wystarczająco dobre rozwiązanie, abym mógł zobaczyć tę rudą, co mi ją Piotrek podesłał rano.


Łódź moim miastem

Hej, koleżko! Słyszałem, że lubisz czytać tego bloga, wstawiłem więc plakat żebyś mógł doświadczać kultury podczas doświadczania kultury.


Prawda dostępu wymagają podstępu

Nieomylność znaczy “nie robię niczego konkretnego”

Napisałem kiedyś na Facebooku, że łatwo rozpoznać aplikację, której UI projektował programista. Wystarczy poszukać, czy kwadrans to 0.25 h. Podśmiewałem się z aplikacji, której demo pokazywał mi marketingowiec. Dwa dni później znalazłem identyczny kod mojego autorstwa.

Programiści nie są głupi, programiści nie są antytalentami, kiedy idzie o projektowanie. Programiści poruszają się w świecie, który ma zupełnie inne punkty odniesień i przez to nie potrafią myśleć “jak zwykli ludzie”. Dla programisty wyłączenie czegoś w panelu przez wpisanie tam zera może mieć sens. Zaawansowane wyszukiwanie przy pomocy wyrażeń regularnych to oczywista oczywistość. Używanie unikalnych identyfikatorów z bazy w kolumnie LP. jest słuszne i pomaga się orientować. Jeżeli zapisujemy datę, to powinniśmy też zapisać godzinę, niewiele kosztuje, a użytkownik z pewnością się ucieszy wiedząc, że Cron wystawił mu automatycznie fakturę o 3:37.

Jedyny sposób na uleczenie tej wizji świata to posadzenie programera z designerem, wrzucenie kilku butelek czegoś mocniejszego i przekręcenie klucza od drzwi. Nie będzie to łatwe. Programerzy myślą o designerach jako o “mośkach od szabloników”, designerzy znów widzą w programerach uparte osły z aparycją małpy. Obie strony tego konfliktu są zwykle pełne gówna i potrzebują lunety, żeby spojrzeć poza czubek własnego nosa.

Ktoś będzie musiał być tym starszym i mądrzejszym, przerwać cykl nienawiści. Zakładam, że będą to programiści, bo są zwykle mądrzejsi i przystojniejsi.

Pamiętaj, nie jesteś alfą i omegą. Tylko tak myślisz!

Dla człowieka z Array() każdy problem wygląda jak .each()

Żeby nie być gołosłownym, pokażę wam problem, nad którym teraz siedzę. Oryginalny autor jest młodym programistą, a to był jego pierwszy większy projekt. Miał wystarczająco dużo wiedzy, żeby programować i zbyt mało, żeby podejmować decyzje projektowe. Niestety, projekty są realizowane zgodnie z zasadą “budżet dąży do zera do momentu napotkania frajera, który zrobi wszystko za jedną pensję”.

Rozważmy uprawnienia w systemie informatycznym. Mamy użytkownika, mamy moduły i metody, mamy uprawnienia. Uprawnienia są listą zawierającą nazwę i identyfikator. Przy wywoływaniu metody z modułu sprawdzamy, czy użytkownik ma identyfikator uprawnienia. Programistyczne przedszkole, prawda?

Implementacja jest poprawna z programerskiego punktu widzenia. Teraz dochodzimy do momentu implementowania międzymordzia dla użytkownika.

Spróbujcie wejść w umysł programisty. Macie listę użytkowników na osi Y, macie listę dozwolonych uprawnień na osi X. Uprawnienie może mieć dwa stany: nadany lub nienadany. Jaki element jest idealny do odwzorowania takiego układu? Checkbox.

To, co tu widzicie, jest efektem myślenia o danych po programersku. Jest to ujęcie całkowicie poprawne technicznie i totalnie spierdolone, jeśli weźmiemy pod uwagę, że użytkownicy systemu nie są robotami.

Wiecie, ile czasu zajmuje narysowanie takiej tabelki dla 120 użytkowników w systemie? Ponad stu pracowników razy ilość uprawnień plus narzut jQuery. Jak myślicie, ile koordynacji oko-ręka wymaga wybranie linii z uprawnieniami pracownika? Tabela jest na tyle wielka, że patrząc w ostatnie checkboksy, muszę odwrócić wzrok na listę nazwisk. To nie są ustawienia, to gra zręcznościowa. No i mój osobisty faworyt: żeby dowiedzieć się jakie uprawnienie nadajesz, musisz potrzymać wskaźnik nad pudełeczkiem checkboksa.

Eksperyment myślowy: jako nowy pracownik nadaj uprawnienia trzyma_kredens i czajnik_zabójca Halinie Krzywonos, ale nie Halinie Krzywons.

Oto kilka programerskich-designerskich błędów, które popełniono:

To, że trzymasz dane w jednej tabeli, nie znaczy że te dane należy prezentować razem. Informacje o uprawnieniach są połączone z profilem użytkownika. Powinny być wyświetlane w kontekście, na stronie z edycją profilu użytkownika.

Jestem człowiekiem, a nie numerem!” i tak samo jest tu. W programerskim umyśle nowo przyjęty do pracy dostaje taką informację na powitanie: możesz otwierać_drzwi, otwierać_okna, pić_kawę i podrywać_sekretarkę. W prawdziwym świecie powitanie wygląda tak: “będziesz pracował jako sprzedawca”. Uprawnienia powinny być ujęte w grupy. Tworzysz grupę X z uprawnieniami X1, X2 i X3. Pracownicy na odpowiednim stanowisku trafiają do odpowiedniej grupy.

Dwa zwycięstwa od ręki: możesz modyfikować uprawnienia dla całej masy ludzi bez potrzeby wybierania zmian dla każdego. Możesz dodawać wariacje: użytkownik może być w grupie X i mieć dodatkowe uprawnienie. Maksymalna elastyczność, minimalna ilość klikania.

Zapamiętaj: celem tworzenia UI nie jest replikacja struktur danych w twoim kodzie. Wiem, że ciężko się pozbyć takiego myślenia. Najlepiej w ogóle o tym nie myśleć. Znajdź przyjaznego designera, najlepiej takiego, który nie przegina w drugą stronę. Wiesz, takiego łączącego zaokrąglone rogi z feng szuje.

Na zakończenie jedna osobista uwaga. Nie wiem czy to ja jestem takim geniuszem, czy wy jesteście takie pały.

Widziałem to setki razy. Użytkownik wybiera opcję w systemie i zostaje pożegnany zimnym “Brak dostępu”, “Dokument niedostępny”, “Naruszenie uprawnień systemu. Ten wyjątek zostanie zgłoszony!”. Potem zaczyna się żonglowanie e-mailami pomiędzy przestraszonym użytkownikiem, jego kierownikiem i mną. Strata czasu.

Żeby ułatwić sobie życie, do komunikatu o braku dostępu dodaję link “Poproś o dostęp”, który generuje e-mail z informacją do zwierzchnika. On może mu nadać, może go olać, może mu nadać na 24h. Na drugą nóżkę wyświetlam listę pracowników jakoś związanych z nim (np. dział) posiadających uprawnienia. Czasem starczy się przejść biurko obok i zapytać, czy kolega może Ci coś sprawdzić. 1

Wszystko żeby mniej pracować. “Mniej pracować” powinno być twoim motto. Nie “techniczna doskonałość w służbie klienta”, tylko coś egoistycznego. Nie spierdol dziś, aby nie naprawiać jutro.

  1. Może nie przejść w supermegakorporacji.

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.


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ęć.


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.


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ów 2, 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:

  • Zainstaluj ten program (DataType way)
  • Ściągnij libpng-dev i przekompiluj z —enable-png

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.

  • WinUAE dla tych, którzy chcą postrzelać z paralaksą. Używać też pod Linuksem via WINE, chodzi dużo lepiej niż natywne port.
  • Amiga Forever KX Light opcja dla ludzi zainteresowanych emulacją z dozą legalności.
  • Icaros Desktop to dystrybucja open source’owej reimplementacji AmigaOS, AROS-a. Myśl Haiku do BeOS minus binarna kompatybilność.
  • MorphOS, ideowy spadkobierca AmigaOS, działa na Macu Mini i eMacu (w przyszości PowerBook) z procesorami PowerPC. Wersja darmowa działa przez pół godziny
  • AmigaOS 4.1, oficjalny następca. Działa tylko na wybranych płytach. Możesz kupić Samanthę lub Pegasosa.
  • Opcja nerdout: reimplementacja A500 w FPGA.

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

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ę.


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


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 mnie 1 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

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:

  • Jestem pewien na dziewięćdziesiąt dziewięć procent.
  • I tak dziewięćdziesiąt siedem procent użytkowników Maka używa Windowsa.
  • Skończyłem projekt w 33 procentach.

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


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ć

Ź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ę”.