Adam Cebula „Error displaying the error page”

 

Nie jest to jakaś fantazja, nie cytat z kabaretu czy też filmu SF. To prawdziwy komunikat, który można przeczytać, gdy leży serwer strony internetowej działający na tzw. programie cms.

Refleksje na temat, któremu właśnie chcę się poświęcić, naszły mnie już wiele lat temu przy okazji zabaw z układem 8255. Intel 8255. Że niby co? No to takie czarne, elektryczne, z wieloma nóżkami z blaszki. Podłącza się do komputera, żeby móc coś do niego podłączyć. No właśnie tak, żeby coś podłączyć, najpierw podłączamy to. Z powodu sposobu współpracy szyny danych procesora z urządzeniami zewnętrznymi.

Zapewne jakieś dinozaury elektroniki jeszcze rozumieją, o co chodzi, i znają się nawet z tym 8255, ale sprawa jest ogólniejsza. Mianowicie było tak, że kleciłem jakąś maszynerię i to było coś w stylu snów scenografa, który miałby zaprojektować dekorację do filmów o szalonych wynalazcach w stylu wyobrażeń o Tesli. Mnóstwo kabelków, skrzyneczki z lampeczkami, obfitość pstryczków i gałeczek, archaiczne mierniki ze wskazówkami. Jeden szczegół: posłużenie się maszynerią wymagało przejścia sporej liczby kroków. Trzeba było włączać i wyłączać, pilnować zmieniających się wielkości.

Kilkakrotnie właściwie już mogłem odtrąbić sukces, że działa, wszystko piknie, ale… jak się zastanowić, to tamto czy owo mogłoby jeszcze… samo się zrobić. Maszynerią sterował komputerek przypominający z wyglądu klawiaturę, więc aż się prosiło, by dopisać kilka linijek kodu, dołożyć jeszcze jedną skrzyneczkę, dolutować kilka kabelków i… dojdziemy wreszcie do stanu, gdy wystarczy klepnąć magiczny klawisz „enter” i reszta zrobi się sama.

Z czego brało się przekonanie, że to i tamto powinno robić się samo? Bo to okazywało „drastycznie proste”, oczywiste, wymagające ledwie odrobiny wysiłku. Właśnie dzięki temu układowi 8255. Tak, gdyby trzeba było, mamy gotowe inne układy scalone. Dołączamy je i to urządzenie pewnie jest w stanie pośredniczyć między komputerem pokładowym a rakietą kosmiczną. Możemy podłączyć do niego jakieś kilka- lub kilkadziesiąt tysięcy urządzeń i do każdego posyłać kilkadziesiąt tysięcy rozkazów oraz z każdego z nich odbierać kilkadziesiąt tysięcy komunikatów.

Konkluzja, jaka mi przyszła do głowy przy okazji kontaktu z tym urządzeniem, brzmi: komplikowanie jest proste. Wytworzyliśmy całą technologię (zabrzmi to jak oksymoron) sakramencko upraszczającą to komplikowanie.

Urządzenia z mikroprocesorami mają komplikację wrzuconą w oprogramowanie. Fizyczna budowa w dużej części jest standardowa. To staje się kulturowym stereotypem. Użytkownicy urządzeń cyfrowych reprezentujący (przynajmniej na oko) jakiś poziom wiedzy technicznej wierzą wręcz, że cała „moc” siedzi w oprogramowaniu. Np. na portalach poświęconych fotografii często się pisze, że jedna firma potrafi „oprogramować matrycę”, innej idzie to gorzej, i przez to aparaty mają lepsze lub gorsze parametry.

Bardzo często nie ma to związku z rzeczywistością – takie urządzenia jak aparat fotograficzny czy kamera zawierają kawał technologii „analogowej” i technika cyfrowa może jedynie ukryć pewne wady. Dowcip w tym, że zupełnie realne jest, że np. po aktualizacji oprogramowania mogą się pojawić w urządzeniu zupełnie nowe możliwości. Przykładem może być projekt Magic Lantern. To inicjatywa z gatunku Open Source, której celem jest rozwijanie firmware’ów aparatów marki Canon. Jeden z trików, jakie zastosowali programiści, pozwala na znaczne przekroczenie tzw. dynamiki matrycy. Jednak to jedynie trik, który polega na przełączaniu czułości, czyli wzmocnieniu toru analogowego podczas odczytu poszczególnych pikseli, podczas gdy „prawdziwa” dynamika pozostaje na tym samym poziomie.

Konsekwencją tego, że w urządzenie wsadziliśmy z głową mikrokomputer (coś trochę więcej niż mikroprocesor) jest, że da się – zmieniając oprogramowanie – mocno zmieniać funkcjonowanie urządzenia. Na przykład już przyzwyczailiśmy się, że można przedefiniować działanie przycisków. Ponieważ działa to tak, że procesor właśnie poprzez taki układ jak opisywany na początku 8255 dowiaduje się, że któryś guziczek naciśnięto, a następnie sprawdza w programie, co w tej sytuacji się robi, modyfikacja jest banalna. Zmieniamy linijkę kodu i zrobione.

Jest zasada inżynierska, że na komputer zwala się jak najwięcej roboty, czasami z pozoru zupełnie niekomputerowej. Przykład? Generowanie przebiegu sterującego buczykiem, takim, jaki znajdziemy w elektronicznych stoperach czy aparatach fotograficznych. Takim, co potrafi tylko pikać. Jeśli jest on sterowany sprzętowo, potrafi odezwać się w jednym tonie, z jedną głośnością. Jeśli to mikrokomputer generuje przebieg, można zaprogramować i wysokość, i barwę tonu. Możemy doprowadzić do tego, że buczyk będzie wysyłał komunikaty np. w alfabecie Morse’a. To już nasz problem, czy go znamy.

Podobnie jest z diodami LED, sygnalizującymi działanie urządzenia. Zdawać by się mogło, że rozsądne jest np. przyłączenie takiej lampki do „migacza” zbudowanego na dwóch tranzystorach, który w odpowiednim momencie zostaje włączony i wyłączony, albo do czegoś w rodzaju elektronicznego pstryczka, któremu procesor wysyła sygnał „świeć!” i można zapomnieć o nim do czasu, gdy trzeba go wyłączyć. Jeśli podepniemy taką diodę wprost do portu, ewentualnie poprzez jakiś bufor mocy (tranzystor), to np. zapalając i gasząc diodę sto razy na sekundę, poprzez regulację współczynnika wypełnienia impulsu możemy uzyskać różną jasność czy efekty świetlne w postaci np. stopniowego narastania jasności, różnych przebiegów pulsowania, nadawania „kropek i kresek” itd. Tylko fantazja nas tu ogranicza.

To dzięki programowej obsłudze przycisków mamy takie niespodzianki, że np. przytrzymanie jakiegoś guziczka przez trzy sekundy przełączy nasze wspaniałe urządzenie w zupełnie nieznany nam tryb. Podobnie działa wciśnięcie jednocześnie dwóch (więcej?) przycisków. Tu także ogranicza programistę tylko fantazja. Jeszcze się z tym nie spotkałem, ale całkiem dobrze można zrealizować np. przypisanie jakiejś specjalnej funkcji wciskaniu na przemian długo-krótko.

Szał możliwości! Producenci poprzez zmianę firmware wielokrotnie dokonywali „zbiorowej reparacji” sprzętów, w których coś tam szwankowało. Np. w aparatach fotograficznych szwankuje autofokus, więc robimy upgrade firmware’u i… powinno być lepiej. Czasem jest katastrofa, nic nie działa, lecz plan jest taki, że będzie dobrze. Możliwe jest też np. dostosowanie starego sprzętu do nowych komponentów, które mają z nim współpracować. Dodajemy nowy protokół komunikacji i maszyneria powinna ożyć.

To wszystko dzięki genialnej technologii prostego implementowania komplikacji. Genialne!

Słusznie czekasz, drogi czytelniku, na „tak, ale”.

Jeśli zmajstrujemy jakieś urządzenie z mikrokomputerem na pokładzie – powtórzę: mikroprocesor to część mikrokomputera – to możliwe jest coś takiego, że np. pralka zamieni się w przeglądarkę internetu, o ile tylko wprowadzimy odpowiednie zmiany w oprogramowaniu. W pewnych okolicznościach można faktycznie uzyskać niezwykłą wręcz elastyczność rozwiązania i… związane z tym wszystkie problemy i kłopoty.

Podejrzewam, że jednym z najbardziej niedocenianych aspektów komputeryzacji wszystkiego jest przekonanie tak zwanego użytkownika, że bez ucyfrowienia nic już nie może działać. Jeśli coś po włączeniu zasilania nie bootuje się przez przynajmniej kilka sekund, nie ma wyświetlacza LCD, a w szczególności nie da się tego czegoś zawirusować, urządzenie nie jest godne zainteresowania.

Ściągnij tekst: