Gdzieś między Polską a Niemcami, a szczególnie w NRD

Sztuczna inteligencja nas kiedyś zastąpi?

Po dwóch poprzednich odcinkach czytelnikowi może się wydawać, że nie doceniam aktualnego stanu prac nad generatywnym AI, a nawet go wyśmiewam. To nie jest tak. W porównaniu z tym, jak wyglądało automatyczne tłumaczenie dziesięć lat temu, to aktualne to rewelacja. Do generacji tekstów i obrazków można mieć wiele zastrzeżeń, ale to już jest naprawdę coś. Moje uwagi wynikają przede wszystkim z tego, że to wcale nie jest pierwszy hype na AI, a od zawsze miała ona zastąpić człowieka. Prawie tak, jak ta automatyczna generacja kodu z poprzedniej notki.

A było to tak:

  • "Perceptron", czyli sieć neuronową z użyciem "sztucznych neuronów" wymyślono teoretycznie w roku 1943, pierwszy komputer oparty na perceptronach (Mark I Perceptron) zbudowano w roku 1957. Hype na ten "sztuczny mózg" był taki, że przez dłuższy czas wszelkie komputery nazywano "mózgami elektronowymi", i miały one zastąpić człowieka we wszystkim.
Mark I Perceptron
Mark I Perceptron. Źródło: https://americanhistory.si.edu
  • IBM próbował stworzyć "Rozwiązywacz problemów wszelakich" ("General Problem Solver") już w roku 1959. (oczywiście nie wyszło).
  • W sześćdziesiątych i siedemdziesiątych faktyczne osiągnięcia w AI były dość umiarkowane, głównie ze względu na brak mocy obliczeniowej ówczesnych komputerów. Ale hype, chociaż mniejszy, istniał nadal - na przykład w sporej części SF istotną rolę grał duży, inteligentny i samoświadomy komputer komunikujący się z użytkownikami głosowo (na przykład w "Luna to surowa pani" Heinleina).
  • W siedemdziesiątych zdarzył się jednak Cybersyn - projekt który nie został zakończony i raczej nawet gdyby go  zakończyć nie dałby spodziewanych rezultatów, ale na wyobraźnię podziałał.
  • Rozwój AI istotnie przyspieszył w osiemdziesiątych. Rozpoczęto na przykład próby z autonomicznymi pojazdami, zarówno  wojskowymi, jak i cywilnymi. SF pokazywała autonomiczne roboty (np. "Terminator"). Według hype AI miała na początek zastąpić zawody żołnierza i kierowcy.
  • Nawet w takim NRD uważano AI za ratunek dla kraju i prowadzono intensywne (choć w tak naprawdę mało obiecujące) prace nad tym tematem.
  • W dziewięćdziesiątych pojawiły się dostępne nawet dla amatora programy do analizy technicznej kursów giełdowych, oparte na sieciach neuronowych. Hype mówił, że wyeliminują one zawód tradera.
  • W dwutysięcznych hype trochę opadł - prace nad AI posuwały się intensywnie, ale wyraźnie było widać że wyniki sa dość odległe od wygórowanych oczekiwań. Automatyczne tłumaczenie było marne, autonomiczne pojazdy nie nadawały się za bardzo do wypuszczenia ich samodzielnie na drogę, praktycznie działały jedynie zabawki w rodzaju "Furby", albo autonomiczne odkurzacze. A powiedzmy sobie otwarcie, że autonomiczny odkurzacz to poziom trochę lepszego "cybernetycznego żółwia" z sześćdziesiątych.
  • Najnowszy hype na generatywne AI nie jest więc niczym nowym.

Generalnie to prawie każda nowa technologia w trakcie jej rozwoju generuje cykle hype-hate. Tak typowo to ani nie jest z nią tak dobrze jak odczuwa się to  w fazie hype, ani tak źle jak odczuwa się w fazie hate. Nie inaczej jest z AI.

Współczesne AI świetnie nadaje się do wykrywania wzorców w danych wejściowych, tu pojawia się sporo istotnych zastosowań i dokonanych dzięki niej odkryć. AI generatywna jest jednak w fazie over-over-hype. Ona coś już  potrafi, to robi wrażenie, ale realistycznie patrząc to do zastępowania człowieka jest jej bardzo daleko. I to nie jest tak, że wystarczy trochę skorygować implementację, dać szybszy komputer albo więcej pamięci i już - nie, ograniczenie tkwi w samej jej koncepcji. żeby zrobiło się znacząco lepiej potrzeba nowej koncepcji. I to nie będzie rok czy dwa.

Moja prognoza (żadna tam szklana kula czy głęboka futurologia - po prostu będzie tak, jak zawsze): 

  • W najbliższych latach będzie się próbować wtykać generatywną AI wszędzie, gdzie tylko się da. Powstanie trochę w miarę użytecznych narzędzi, ale
  • generalnie efekty tego będą takie sobie, znacznie poniżej oczekiwań.
  • Hype powoli przejdzie w hate.
  • Tymczasem będzie się pracować nad nowymi koncepcjami
  • Cykl się powtórzy. Następny hype będzie za 10-20 lat.

Czyli na Zachodzie bez zmian. Generalnie można spać spokojnie, AI miejsca pracy wam raczej nie zabierze. Jakieśtam, ewolucyjne zmiany w pracy w różnych zawodach na pewno będą, ale nie takie, żeby zaraz połowę pracowników wyrzucać (A jeżeli jakiś zbyt łatwowierny manager mimo wszystko połowę wyrzuci, to wkrótce pożałuje).

A już zwłaszcza nie za wiele zmieni się w zawodzie programisty. CEO Nvidii Jensen Huang uważa, że przyszłe pokolenia w ogóle nie będą musiały uczyć się języków programowania, ale według mnie to zależy od definicji "języka programowania". Pan Huang ma chyba definicję bardzo zawężoną do języków imperatywnych - i tu nawet mógłbym się zgodzić. Programowanie imperatywne to prowadzenie komputera za rączkę, i na dłuższą (ale naprawdę dłuższą, chyba nawet nie za mojego życia) metę powinno to się zmienić. Ale na językach imperatywnych świat się nie kończy, mamy jeszcze bardzo szeroki wybór języków deklaratywnych. Taki na przykład Prolog powstał już w roku 1972, i od początku był uważany za "język sztucznej inteligencji".

Dalej pan Huang stwierdził: "It is our job to create computing technology such that nobody has to program and the programming language is human. Everybody in the world is now a programmer”. Ale jakoś przecież musimy komputerowi (nawet sztucznie inteligentnemu komputerowi) powiedzieć, czego dokładnie od niego chcemy. Zresztą żywym programistom/architektom też musimy to jakoś powiedzieć, i użycie przy tym języka naturalnego od zawsze jest jednym z najpoważniejszych źródeł problemów. Do tego stopnia, że już dziś przy tworzeniu requirementów używamy co prawda języka naturalnego, ale częściowo sformalizowanego (na przykład jest dokładnie zdefiniowane, w jakiej sytuacji piszemy "shall", w jakim "should", a w jakiej "may". Takich reguł jest więcej). Przy formułowaniu requirementów używamy formalnych  notacji matematycznych (np. "6V < Ubatt < 18V"), wzorów matematycznych i diagramów w sformalizowanych notacjach (np. UML czy SysML). Wiele typów tych diagramów potencjalnie daje się automatycznie przekształcić w wykonywalny kod przy użyciu różnych generatorów kodu (BTDT), co według mnie spełnia definicję "języka programowania". Użycie języka naturalnego do programowania uważam za mrzonkę, to nigdy nie działało dobrze i nie będzie dobrze działać.

Ale najśmieszniejsze jest to jego "Everybody in the world is now a programmer". Całkiem podobne hasła towarzyszyły rozposzechnieniu internetu i prostych Authoring Tools. Everybody in the world miał być now kreatywnym muzykiem, grafikiem, pisarzem, poetą, filmowcem, popularyzatorem nauki czy kim tam jeszcze. Dostaliśmy garść wartościowych artystów, i miliony tiktokerów, influencerów i szurów. Nie jestem pewien, czy było warto. Większość ludzi wcale nie chce być artystą albo programistą, a większość tych którzy chcieli by być (zwłaszcza bez włożenia w to wysiłku), wcale się do tego nie nadaje.

TL;DR? Będzie jak zawsze. Zmiany ewolucyjne, nie rewolucyjne.

 

 

-----------------------------------------------------------------------------------------------------------------------

Dotyczy:

Kategorie:Pomyślmy

Skomentuj

Sztuczna inteligencja zastąpi nas, programistów.

Zawodem szczególnie podatnym na zastąpienie przez AI miałby być zawód programisty. Tak przynajmniej można ostatnio usłyszeć i przeczytać w różnych mediach. Zastanówmy się, czy tak naprawdę jest. Bo przecież AI może wygenerować śliczny kod programu na podstawie opisu, co ten program ma robić. Może, prawda? Prawda?

Zacznijmy od tego, że mówimy o kodowaniu, czyli pisaniu tekstu, który po przekształceniu jest wykonywany przez komputer - aktualna AI nie potrafi przecież nic innego niż generowanie tekstów. Tyle że nawet gdyby AI naprawdę wygenerowała nam śliczny i bezbłędny kod, to i tak nie eliminuje to zawodu programisty, a co najwyżej kodera. Programowanie to cały proces, kodowanie to tylko jeden, najmniejszy jego etap. Programowanie z kodowaniem utożsamiają tylko ludzie nie mający o tym pojęcia, co bardziej amatorscy programiści-amatorzy i może jeszcze jakieś dziadowskie firmy programistyczne.

Na przykład u mnie w branży automotive przy tworzeniu oprogramowania obowiązuje norma ISO26262, definiująca proces zwany V-Model. Na obrazku wygląda to tak:

V-model w ISO26262
V-model w ISO26262

Zauważmy, że w tym modelu kod źródłowy (czyli właśnie kodowanie) jest na samym dole diagramu, i nie przypadkiem jest to V-model (ze szpicem w dół), a nie na przykład Λ-model (ze szpicem w górę). Kodowanie jest po prostu najmniej istotnym elementem procesu. Nawet gdyby udało się je całkowicie wyeliminować, pozostałą większość roboty i tak będzie musiał zrobić no kto? Żywy programista oczywiście.

Teraz drugi problem. Załóżmy, że AI naprawdę wygeneruje nam dobry kod, kiedy jej powiemy co ten kod ma robić. W sumie żywemu programiście też musimy powiedzieć, co ten kod ma robić. I tak typowo to nie mówimy mu tego, tylko piszemy w formie requirementów. I tych requirementów do uwzględnienia zawsze trochę jest. Na szczęście nie musimy specyfikować każdego najdrobniejszego szczegółu, bo ten programista taki całkiem głupi nie jest, i z grubsza będzie rozumiał dlaczego pewne rzeczy mają być zrobione tak, a nie inaczej (bo przecież sam jeździ samochodem), zajrzy do dokumentacji procesora (i do erraty też), będzie znał ograniczenia użytej platformy (albo o to zapyta), itp. itd. Inaczej mówiąc: będzie korzystał ze swojej i innych wiedzy o świecie.

No ale AI, jak już wiemy z poprzedniego odcinka, nie ma wiedzy o świecie. I w związku z tym specyfikacja dla niej musi być o wiele bardziej szczegółowa niż dla programisty. I w którymś momencie to przestanie mieć sens - jeżeli będziemy musieli pokazać AI paluszkiem każdy szczegół, to po jaką cholerę nam takie AI? Szybciej napiszemy to sami, bez kombinowania z tłumaczeniem (nawiasem mówiąc tak samo bywa z żywymi programistami, sytuacja że lepiej napisać samemu niż komuś tłumaczyć nie jest znowu taka rzadka). I jakoś o podobnym przypadku już pisałem przy marzeniu lat 60-tych, czyli "dowodzeniu poprawności programów": Jeżeli wyspecyfikujemy nasz program bardzo dokładnie, to w zasadzie powinno dać się z tego zrobić implementację, nawet bez AI.

Kolejny problem z requirementami jest taki, że tak normalnie to one powinny przychodzić od klienta. Tyle  że klient bardzo często:

  • Sam nie wie, czego właściwie chce.
  • Przekopiował requirementy z wcześniejszego projektu, a tu niezupełnie pasują.
  • Nie zauważył sprzeczności w requirementach.
  • Nie znał ograniczeń sprzętu.
  • Sam nie rozumie, co właściwie napisał.
  • itp. itd.

Teoretycznie wszystkie takie problemy powinno dać się wyłapać zanim dojdzie do kodowania, ale to jest naprawdę tylko teoria. Zależności jest zbyt wiele, żeby tak się dało przy rozsądnym nakładzie pracy. W praktyce wcale nie tak rzadko programista przy kodowaniu musi sprawdzać, co poeta miał na myśli na którymś w wyższych etapów V-modelu, i czy na pewno jest pewny. (Dygresja: po niemiecku "poezja" to "Dichtung", tak samo jak "uszczelka", co pozwala konstruować mnóstwo bardzo suchych sucharów na takie tematy). Jakoś nie za bardzo potrafię wyobrazić sobie AI pytające autora inputu o uszczegółowienie albo uściślenie, to tak nie działa, tego ona nie potrafi.

Jest w tym wszystkim kolejny aspekt: To nie jest tak, że napiszemy kod raz a dobrze, i tak on zostanie na wieki. Zawsze wkrótce okazuje się, że coś trzeba tam jednak zrobić inaczej, wcale niekoniecznie dlatego, że nasz kod jest zły. Gdy piszemy ręcznie, poprawiamy te parę linii, aktualizujemy specyfikację tych paru testów, robimy nowe testy zmienionego kawałka i już. Tymczasem przy AI musimy kazać jej wygenerować całość od nowa, a ona jest niedeterministyczna z założenia i wygeneruje nam całkiem nowy kod, całkiem inny niż poprzedni. No i lokalność zmiany szlag trafia, trzeba od nowa robić pełne testy całości, review kodu (full, nie tylko delta), certyfikację, czy co tam jeszcze jest wymagane. Jeżeli norma wymaga pokrycia testami wszystkich branchy w kodzie, to musimy mocno pozmieniać nasze testy. I tak dalej, i tak dalej. Przecież z czymś takim nie da się pracować, to generuje więcej roboty niż było bez tego.

Oczywiście moglibyśmy generować z AI raz, a potem poprawiać w kodzie generowanym. Tyle że to nie za wiele daje - wtedy musimy analizować nie swój kod. I po kilku poprawkach i tak kod będzie w sporym stopniu nasz, nie AI. I wtedy po co nam to AI? Współczesne IDE generują nam szkielety zawartości nowych plików kodu i mogą wtykać snippety kodu w żądane miejsca, i to robić to deterministycznie - na cholerę nam bawić się w analizę intencji AI?

A już całkowicie pomijam fakt, że taki AI generator kodu absolutnie nie da się certyfikować na safety, głównie ze względu na jego indeterminizm. A w szczególności nie da się spełnić wymagań normy ISO26262 dla narzędzi programistycznych. Znaczy każdy safety-relevant kod wygenerowany przez AI musi przejść pełny review.

Teraz napiszę kontrowersyjną rzecz: Cała historia informatyki to historia walki o zastąpienie  kodowania przez programistę generacją kodu. Było to tak:

  • Na początku komputery programowało się wpisując kody rozkazów do pamięci przy pomocy klawiatury binarnej, a później ósemkowej. Mi też się kiedyś coś podobnego zdarzyło (tyle że bez tej klawiatury), to był prawdziwy hardkor, tak się nie da pracować z kodem dłuższym niż parędziesiąt rozkazów.
  • Dlatego wymyślono assembler. Już nie potrzeba było hardkorowego kodera, każdy głupi mógł wpisać tekstowo op-cody rozkazów i program już działał. No ale tu też przy większych programach zaczęły się problemy z ogarnięciem kodu. (Zauważmy, że assembler jest de facto generatorem kodu - na podstawie tekstu generuje kod maszynowy)
  • Dlatego do assemblera dodano makra, tworząc makroassembler. Teraz każdy głupi mógł sobie radykalnie skrócić program używając makrosów. No ale tu też przy większych programach zaczęły się problemy z ogarnięciem kodu. (Zauważmy, że warstwa makro jest generatorem kodu - na podstawie tekstu makrosów generuje tekst rozkazów assemblera).
  • Dlatego powstał język wysokiego poziomu nazwany COBOL. Teraz każdy user mógł sobie napisać program w języku naturalnym, a komputer zrobił wszystko, czego ten user chciał. Przynajmniej jeżeli chciał zrobić jakieś operacje na bazie danych. No ale nie wszystko robi się na bazie danych. No i ta "naturalność" języka była dość relatywna. (I oczywiście taki kompilator jest generatorem kodu maszynowego).
  • Dlatego powstały inne języki programowania, na przykład FORTRAN, Algol 60, Algol 68, Pascal czy C. Teraz każdy głupi mógł sobie łatwo napisać program. (Zauważmy, że każdy kompilator czy interpreter jest też generatorem kodu, a do dziś wiele kompilatorów nie generuje wprost kodu maszynowego tylko kod źródłowy w assemblerze. A pierwsza faza kompilacji programu w C to preprocesor, czyli ewidentny generator kodu).
  • Potem zmniejszać ilość kodu miała koncepcja modularności / obiektowości (Modula2, C++, Java, ...). Jakościową zmianą w generacji kodu były na przykład Templates w C++.
  • Dalej pojawiły się pierwsze próby z low-code: wszystkie te języki Visual-XXX (Basic, C++, ...). Tu użytkownik miał po prostu narysować aplikację GUI, i napisać tylko troszeczkę kodu w callbackach. Resztę robił generator. To nawet jakoś działało.
  • Następna próba była - moim zdaniem - najbardziej obiecująca ze wszystkich: Model Driven Development. Kod miał być wygenerowany z modelu, co potencjalnie mogło zintegrować generację w cały proces tworzenia oprogramowania. To nawet działało (BTDT), ale nie było pozbawione wad i nie było dla każdego.
  • Po opadnięciu hype na MDD poszło to wszystko raczej w stronę konfiguracji w jakimś narzędziu i generacji kodu z templates tekstowych albo czysto programowej. Tak działa cały ten AUTOSAR i to jest mix no-code z low-code.
  • Do niedawna na topie było właśnie low-code i no-code, ale to są głównie scamy - przychodzi jakiś akwizytor, na pokazie w parę minut wyklikuje działającą aplikację, i managerstwo się na to łapie. A potem się okazuje, że wyklikać da się tylko to, co producent wbudował do środka, a zrobienie w tym czegoś więcej jest od cholernie trudnego do niemożliwego.
  • Od dłuższego już czasu IDE wrzuca szkielety kodu do nowo tworzonych plików, albo ma jakiś katalog snippetów do różnych zadań. To też jest forma generatora kodu. No i zawsze można przekopiować coś ze StackOverflow albo z jakiegoś starego projektu.
  • No i teraz wchodzi, cała na biało, generacja kodu przez AI. No i tak serio serio to ma być wreszcie to ultymatywne rozwiązanie, żeby już nic nie kodować? Przecież to już chyba ósma dekada tego eliminowania kodowania, że już-tylko-chwila i programiści staną się niepotrzebni. Prawie jak z tą syntezą termojądrową.

Podsumowanie: Jak na razie nie ma się czym ekscytować (no chyba że przez cały czas kodujesz maski do aplikacji bankowych, ale wtedy i bez AI lepiej się trochę przebranżowić). Jak będzie dalej? Moja prognoza w następnym odcinku.

-----------------------------------------------------------------------------------------------------------------------

Dotyczy:

Kategorie:Pomyślmy

Skomentuj

Sztuczna inteligencja nas zastąpi

Strasznie dawno nic nie pisałem, ale wcale nie dlatego, że nie mam o czym. Tematów jest mnóstwo, tyle że freelancerstwo zajmuje mi bardzo dużo czasu. Trudno się opędzić od klientów i projektów. Po drodze potłumaczyłem angielskojęzyczne notki WO o wojnie z jego substacka na niemiecki, pomagając sobie DeepL-em i tłumaczem Googla, i to był jeden z triggerów tej notki.

Drugim triggerem był nieustanny szum medialny o tym, jak to AI zastąpi mnóstwo zawodów, a w szczególności programistów. Akurat poczytałem trochę jak te aktualne implementacje AI są skonstruowane, połączyłem tę wiedzę z obserwacjami efektów ich działania i oto moje wnioski. Dla ustalenia uwagi: Piszę nie o AI generalnie, tylko o realnie istniejących implementacjach generujących teksty i obrazy.

Najpierw parę słów o tym, jak to (w uproszczeniu) działa. I to jest tak: To wszystko są modele językowe. Taka AI "wie" tylko tyle, że w kontekście K po słowie S1 z prawdopodobieństwem P następuje słowo S2. A "wie" to tylko z tekstów, którymi została nakarmiona. Tam nie ma żadnej wiedzy o świecie, tam są tylko słowa, słowa, słowa.

Dla zrozumienia konsekwencji mały rys historyczny. W początku wieku XX pojawił się prąd artystyczny zwany dadaizmem. Dadaiści odrzucali logikę, racjonalizm i estetykę kapitalizmu. Zamiast tego wszystkiego proponowali nonsens i nieracjonalność, a to wszystko miało być tylko "sztuką dla sztuki". Jedną z ich koncepcji było tworzenie wierszy przez losowanie słów. Tu cytat z "Manifestu Dada":

TO MAKE A DADAIST POEM

Take a newspaper.
Take some scissors.
Choose from this paper an article of the length you want to make your poem.
Cut out the article.
Next carefully cut out each of the words that makes up this article and put them all in a bag.
Shake gently.
Next take out each cutting one after the other.
Copy conscientiously in the order in which they left the bag.
The poem will resemble you.
And there you are – an infinitely original author of charming sensibility, even though unappreciated by the vulgar herd.

ABY STWORZYĆ DADAISTYCZNY WIERSZ

Weź gazetę.
Weź nożyczki.
Wybierz z tej gazety artykuł o długości, jaką chcesz nadać swojemu wierszowi.
Wytnij artykuł.
Następnie ostrożnie wytnij każde ze słów, które składają się na ten artykuł i włóż je wszystkie do woreczka.
Delikatnie potrząśnij.
Następnie wyjmij każdy wycinek jeden po drugim.
Kopiuj sumiennie w kolejności, w jakiej opuściły woreczek.
Wiersz będzie przypominał ciebie.
I oto jesteś - nieskończenie oryginalny autor o czarującej wrażliwości, choć niedoceniany przez wulgarne stado.

Oczywiście pełna losowość kolejności słów dawała wiersze nie nadające się nawet do czytania, więc w praktyce wycinano raczej całe linie tekstu źródłowego a nie pojedyncze słowa. Przy tym podejściu efekty bywały nawet nie najgorsze, ale sensu już programowo nie było w nich żadnego. Zwracam uwagę na proroczą linię Manifestu "The poem will resemble you" - za chwilę do niej wrócę.

Potem pojawiły się komputery, i zaczęto próbować robić podobne rzeczy na komputerze, bawiono się w to już na mainframe, pamiętam też takie programiki na Commodorka. Komputer zastąpił żmudne wycinanie nożyczkami i umożliwił ograniczenie losowości tak, żeby tekst wychodził jako-tako poprawny gramatycznie, ale sensu nadal nie było w nim żadnego.

Obecne implementacje AI idą mały krok dalej - robią ten (nadal w sporym stopniu losowy) tekst takim, jak statystycznie piszą ludzie, i to jest właśnie "The poem will resemble you". Niestety nie "an infinitely original author of charming sensibility" tylko "the average human", ale to zawsze coś. Zauważmy jednak, że nadal sens w tym wszystkim pojawia się co najwyżej jako efekt uboczny tego naśladowania człowieka - bo nie ma skąd inąd się wziąć. W moim rozumieniu sens musi brać się z wiedzy o świecie, a tu jej nie ma. Zresztą nie tylko w moim rozumieniu tak jest - na przykład Trurl tworząc Elektrybałta zaczął od wymodelowania całej historii Wszechświata, a dopiero na tej podstawie zabrał się za wierszokletstwo.

Ktoś może argumentować, że przecież taka AI ma pełen dostęp do Internetu, i może sobie wszystko wyguglać. Hmm, a powiedz, jaki procent wyników twoich zapytań googla jest sensowne i odpowiada na twoje pytanie? I w jaki sposób oddzielasz wyniki sensowne/prawdziwe (czyli zgodne ze światem rzeczywistym) od bezsensownych/nieprawdziwych? Nie przypadkiem na podstawie twojej wiedzy o świecie? Bez wiedzy o świecie możesz najwyżej powiedzieć który wynik jest podobny do twojego modelu językowego, a który nie. Nic więcej. (Dokładnie ten sam błąd popełniają ludzie twierdzący "Po co mam się uczyć, skoro mam googla?". A jakim cudem chcesz potem zrozumieć wyguglaną odpowiedź?).

Pewien czas temu można było zauważyć spory hype na automatyczne tłumaczenie. Ponieważ poćwiczyłem takie tłumaczenie na notkach WO, mogę coś na ten temat powiedzieć (przynajmniej o niemieckim jako języku docelowym). I to jest tak: Rzeczywiście oszczędza to sporo tej fizycznej roboty z tworzeniem gramatycznie poprawnych zdań w języku docelowym. Ale nadal nie można wyniku puścić bez sprawdzenia i poprawienia. Przy tym DeepL ma całkiem inny styl niż tłumacz Googla. Google gubi się w zdaniu częściej niż DeepL, ale w innych miejscach i zawsze warto porównać obie wersje. Który jest lepszy stylistycznie to kwestia gustu. Za to Google potrafi poprawnie użyć indirekte Rede, przy DeepL nigdy tego nie zaobserwowałem.

Ale oba mają ten sam problem: Brak im wiedzy o świecie. Na przykład kiedy w kontekście lat 90-tych pada nazwisko Clinton bez imienia, dla obu jest to "ona" (Hilary, a nie Bill), bo tak było w nowszych tekstach, którymi je uczono. Trzeba wyłapywać i poprawiać odniesienia do popkultury, zwłaszcza nie najnowszej (cytaty, tytuły), bo oba jej po prostu nie znają. Idiomy też są dla nich poważnym wyzwaniem. Itp., itd. Znaczy: AI usprawnia pracę tłumacza, ale nie da rady go zastąpić.

Jeszcze anegdotka: WO w swojej notce przetłumaczył (prawdopodobnie automatycznie) z rosyjskiego na angielski fanfik Girkina o puczu Prigożina w stylu "Trudno być Bogiem" Strugackich. Nie chciałem robić tłumaczenia tłumaczenia, więc znalazłem oryginał rosyjski (nie chcę linkować, jak ktoś chce zobaczyć, to proszę ręcznie: na "t.me/s/strelkovii" poszukać "Трудно быть чёртом"), przetłumaczyłem go na niemiecki obydwoma tłumaczami, i oba miały ten sam problem - były tam wspomniane "Серые Роты", czyli "Szare Roty" (albo "kompanie", takie oddziały wojska). Formy liczby mnogiej słów "Рота" i "Рот" ("pysk") są identyczne, i obu AI-tłumaczom wychodziły "die Grauen Mäuler" ("Szare Pyski" albo "Szare Mordy"). Dla informacji: W tłumaczeniu Ireny Piotrowskiej były to "Szare Oddziały".

Wróćmy do prądów artystycznych sprzed 100 lat: Dadaiści proponowali również losowość w sztukach wizualnych, np. kolaże z przypadkowych wycinków. AI też to potrafi, w praktyce dość wiernie oddając produkt generacji tekstów na obrazku. Na tyle wiernie, że wszystkie problemy aktualnych AI generujących teksty można jeszcze łatwiej zauważyć na tych obrazkach. A zwłaszcza gdy poprosimy o obrazek czegoś z tekstem, na przykład plakatu filmowego albo pudełka z setem Lego - AI umieszcza na nim grupy pikseli przypominające litery i słowa, ale nigdy nie są to sensowne i czytelne napisy. To tylko wizualnie przypomina to, co robią w tym miejscu ludzie, ale AI nie "rozumie" ich sensu.

Set LEGO według AI
Set LEGO według AI

Znaczy ja doceniam, że udało się zimplementować przerobienie opisu słownego w spójny wizualnie obrazek a nie dadaistyczny kolaż, ale to, co jest na tym obrazku, to nadal nie ma wielkiego sensu, właśnie ze względu na brak wiedzy o świecie generatora. Na przykład jak poprosić o obrazek o "katastrofie elektrowni w Czarnobylu", dostajemy elektrownię z kominami. Przy zwrotach typu "wycierać kurze" albo nazwach w rodzaju "Mniszek lekarski" dostajemy "jak sobie mały Kazio wyobraża znaczenie takich zwrotów".

"Wytrzyj kurze" według AI
"Wytrzyj kurze" według AI
"Mniszek lekarski" według AI
"Mniszek lekarski" według AI

O, z tym "małym Kaziem" to jest ciekawy trop. Porównajmy sobie aktualne AI z człowiekiem. Według mnie porównanie z dzieckiem w jakimś wieku nie jest dobre, bo z jednej strony AI ma braki w wiedzy o świecie podobne do nie za dużego dziecka, ale z drugiej ma o wiele większą sprawność językową niż wielu dorosłych. Ale powiem, że poznałem w życiu trochę dorosłych ludzi na podobnym poziomie kognitywnym co ta AI. Znaczy powtarzających zasłyszane/przeczytane zdania jak z gazety na podstawie słów kluczowych, jednak bez ich weryfikacji i zrozumienia ich znaczenia. Podejrzewam, że większość moich czytelników też takich ludzi spotkała, przynajmniej w sieci. Zazwyczaj są to zwolennicy różnego rodzaju teorii spiskowych oraz partii populistycznych. Czyż na przykład płaskoziemcy nie wydają wam się skonstruowani podobnie do aktualnego AI? Znaczy że mają tylko model językowy bez modelu świata? (A może te dwa modele po prostu nie są u nich połączone?)

EDIT 2024.04.06: Przypomniałem sobie mojego znajomego Putinverstehera i ogólnie teoriospiskowca. On jest inżynierem automatykiem, urodził się w Polsce, ale od prawie 50 lat jest w Niemczech. I on pewnego razu przy dyskusji na temat znajomości języka powiedział "Ja potrafię powiedzieć więcej (po niemiecku), niż rozumiem". Wtedy mnie to rozbawiło jako oczywista bzdura, ale teraz się nad tym zastanawiam. Czyżby był to właśnie przypadek modelu językowego nie połączonego z modelem świata?

Teraz przejdźmy do konsekwencji dla rynku pracy: Widzę jeden zawód, który może z marszu zostać zastąpiony przez AI (i nie jest to zawód dziennikarza): Bezproblemowo można zastąpić wszystkich tych tekściarzy wymyślających opisy do produktów w katalogach sprzedaży wysyłkowej. To jest przecież właśnie beztreściowe blablabla, trochę podobne do tego, jak piszą ludzie. Taka generacja opisów do sprzedawanych produktów jest już dostępna dla każdego przy tworzeniu aukcji na eBayu. I powiem szczerze, że ja takich tekstów tworzyć nie umiem, AI jest tu ode mnie o wiele lepsze. Ale czy można nazwać to inteligencją?

Przy innych zawodach nie jest już tak prosto - w większości produkowane teksty muszą mieć jednak jakieś odniesienia do świata zewnętrznego. AI potrafi świetnie "lać wodę", ale kiedyś trzeba jednak dojść do konkretów. Przedstawiciele paru zawodów już zdążyli się przejechać na próbach użycia AI do ich pracy, bo generowane teksty nie wytrzymały konfrontacji z rzeczywistością (na przykład że AI zmyśliło paragrafy kodeksu karnego). Jakaś dziennikarka bardzo ładnie podsumowała swoje próby z AI: "Te teksty brzmią jakby napisał je golden retriever". To może zastąpić stażystów piszących zapchajdziury, ale nie dziennikarza piszącego o czymś konkretnym.

Podejrzewam, ze większość moich czytelników interesuje przede wszystkim pytanie, czy AI zlikwiduje ich miejsca pracy jako programistów, jednak notka zrobiła mi się na tyle długa, że ten temat wrzucę do drugiego odcinka. A może jeszcze będzie i trzeci, z moimi prognozami na przyszłość.

-----------------------------------------------------------------------------------------------------------------------

Dotyczy:

Kategorie:Pomyślmy

Skomentuj

Twit Programmers of the Year (4)

W pracy kończy mi się walka z programistycznymi twitami, przynajmniej w tym projekcie. Startuje powoli następny, oczywiście znowu o stopień trudniejszy (teraz będzie dużo wariantów z różną funkcjonalnością i procesor z symmetric multicore). No ale trzeba oszczędzać i pewnie mnie przy nim nie będzie, przynajmniej na początku (pewnie zawołają mnie dopiero jak się zacznie walić i palić) . Zobaczymy gdzie teraz trafię.
Ale za to w domu zabrałem się za eksperymenty z Androidem. Na początek spróbowałem działać z sensorami i też od razu natknąłem się na mnóstwo twitów:

  • Na początek zrootowałem swojego tableta (Acer Iconia A700). Nawet łatwo poszło.
  • Wgrałem mu custom recovery, całkiem fajnie działa
  • Wgrałem też mu custom system (CyanogenMod). Tu był problem - jest dużo programów instalujących ten system na zrootowanym urządzeniu, tyle że całkiem niedawno ten projekt przemianował się (na LineageOS) i w ogóle coś się pozmieniało i te starsze wersje zginęły z sieci. Żaden z instalatorów nie działa. Na szczęście znalazłem gdzieś w sieci odpowiedni kompilat (samemu skompilować jeszcze mi się nie udało) i wgrałem go na tableta. I to jest dobre, oryginalny Android ślimaczył się już straszliwie, a ten chodzi całkiem przyjemnie, można było wywalić cały bloatware i ma to parę funkcji więcej.
  • Pisałem wcześniej o problemach z emulatorem Androida, dałem sobie z nim spokój. USB debugging chodzi bardzo dobrze. Potem kupię sobie parę używanych urządzeń z różnymi rozdzielczościami.
  • USB debugging chodzi, tyle że nie na moim telewizorze. Philips ma politykę, że ich telewizory są nierootowalne, soft można instalować tylko z Google Play, a USB debugging mimo że można odblokować, to nie chodzi (tu jeszcze potencjalny problem połączenia USB-A z USB-A). Chociaż ostatnio trochę odpuścili, po niedawnym updacie opcja instalacji z innych źródeł się pojawiła, i co nieco narzędzi poinstalowałem. Debugging ma móc chodzić przez Ethernet, podobno komuś się z tym modelem telewizora udało, mi jeszcze nie. W ogóle to motywacja Philipsa jest "Bo jak zbrickujesz sobie telewizor za 2500 EUR to będziesz płakał" - tyle że mój telewizor był tańszy od mojej komórki i niewiele droższy od mojego tableta. Uprzedzając pytanie: Nie, nie mam komórki za 2500+.
  • No to zacząłem od tableta. Na początek postanowiłem zapoznać się z obsługą sensorów. Jest do tego mnóstwo przykładowego kodu w sieci.
  • Analiza kodu i zależności fizycznych pokazała, dlaczego niemal wszystkie (o ile nie wszystkie) programy robiące za kompas są do niczego. Przyczyny są dość skomplikowane, ale do pojęcia. Objaśnię je, bo to ciekawe:
    • Niemal każda komórka ma akcelerometr, którym można ustalić kierunek "w dół" (to tam, gdzie statycznie mamy przyspieszenie 1g), żyroskop do obrotów i magnetometr, pokazujący kierunek na magnetyczną północ
    • GPS podaje geolokalizację urządzenia, ale nie w którą stronę jest obrócone, więc GPS się do kompasowania nie nadaje.
    • Magnetometr podaje kierunek wprost (przez Ziemię) do bieguna magnetycznego.  Znaczy to jest (jak u nas) jakieś 40º do poziomu.
    • Duża część programów na kompas bierze po prostu składową magnetyczną w płaszczyźnie urządzenia, relatywnie do jego osi Y. Ale jak trzymać urządzenie w ręku i pochylić je trochę do siebie, to ta płaszczyzna ustawia się paskudnie blisko prostopadłości do żądanego wektora, całą dokładność szlag gwałtowny trafia i kompas kręci się na chybił-trafił.
    • Sytuację może poprawić użycie kombinacji  sygnałów z akcelerometru i magnetometru.
    • W zasadzie coś takiego jest dostępne jako wirtualny sensor pozycji urządzenia, tyle ta funkcja zrobiła się deprecated lata temu (od v2.2.x, około 2010).
    • Ponieważ nowe rozwiązanie wymaga jednego calla więcej i trochę zrozumienia (słowo kluczowe: quaternion), prawie nikt nie jest w stanie tego pojąć i prawie wszyscy robią to po staremu.
    • Nawet po nowemu, to pokazuje kierunek na północ magnetyczną, a nie na "prawdziwą" północ.
    • Znając geolokalizację (z GPS-u) można od systemu dostać wartość poprawki żeby pokazać prawdziwą północ, ale nie znalazłem jeszcze ani jednego przykładu żeby ktoś to zrobił. Ja też jeszcze nie załapałem w którym momencie trzeba wykonać jaką operację na quaternionach, ale dojdę do tego.
    • Nawet jak zrobić to dobrze, pokazywany kierunek będzie zakłócany przez zewnętrzne pola magnetyczne.
    • Generalnie wszystkie te programy są zrobione maksymalnie prosto - obracają obrazek igły kompasu zależnie od danych z sensora. Nie będzie to sensownie działać (nawet porządnie zrobione) jak nie trzymać komórki poziomo. Mam pomysł znacznie lepszego interfejsu użytkownika. I jeszcze parę innych pomysłów na aplikacje związane z kompasem.
    • Dlaczego cała ta kombinacja składowych do orientowania się na prawdziwą północ nie jest dostępna jako proste API?
  • Jeszcze generalna uwaga co do API Androida: W całym tym API nie są w ogóle deklarowane wyjątki jakie funkcje mogą rzucać (deklaracja throws). Jak dla mnie to jest zupełnie podstawowy brak w designie - nieprzemyślana obsługa błędów.

Ładnie się zaczyna. Ciekawe jak będzie dalej.

-----------------------------------------------------------------------------------------------------------------------

Dotyczy: , ,

Kategorie:Pomyślmy, Programowanie

24 komentarze

Hannah Arendt i banalność wszystkiego

Notka przeleżała mi się już dobry miesiąc, głównie przez nieustanną walkę z programistycznymi twitami i związany z nią wyjazd do Meksyku. Na szczęście bieżąca kampania zbliża się do końca. Ale pojawiło się coś, czym muszę się podzielić. Był to pokazany przez arte film "Hannah Arendt". Nazwisko to oczywiście znałem, miałem też obowiązkowe skojarzenie z banalnością zła, ale jakoś tak się złożyło że "Eichmanna w Jerozolimie" dotąd nie czytałem. Film był niezły, jak na film o kimś kto głównie siedzi i pisze albo wygłasza wykłady akademickie to trzymał w niezłym napięciu. I finałowa scena polemiki na wykładzie zachęciła mnie do sięgnięcia po książkę. Zwłaszcza że w filmie wszyscy bohaterowie dzieło komplementowali, nawet jeżeli fragmenty im się bardzo nie podobały.

No i książka rozczarowuje. Znaczy relacja z procesu Eichmanna jest interesująca (chociaż przygnębiająca), dowiedziałem się z niej sporo nowych rzeczy o karierze Eichmanna, jego aresztowaniu i procesie, mechanizmach Zagłady, różnicach między antysemityzmem w różnych krajach, itd., niestety relacja jest dość chaotyczna. Narracja leci jednym ciągiem bez żadnej strukturyzacji tekstu, rozdziały wynikają chyba tylko z pierwotnego podziału tekstu na odcinki drukowane w gazecie. No ale pewnie jako inżynier mam tu zbyt wysokie wymagania. Gorzej, że z książki niewiele mogłem się dowiedzieć na temat poddtytułowej tezy o "banalności zła". Słowo "banal*" występuje w całej książce zaledwie trzy razy i to w dużych odstępach. Brak jest jakiejś syntezy, chociaż takiej jak pojawiła się w filmie. Film jest zazwyczaj gorszy od książki, więc sądziłem że finałowa scena wykładu to tylko okrojony wybór fragmentów z tekstu, tymczasem było to właśnie to, czego w tekście brakowało. W dodatku zasadniczą treścią sceny były wyjątki z polemiki z krytycznym listem, nie należącej do pierwotnego tekstu, a tylko dodanej w późniejszych wydaniach jako postscriptum.

Jako przyczynek do "banalności zła" film jest znacznie lepszy niż książka. Na przykład książka tylko wspomina o tym (dwa razy), że Eichmanna na procesie pytano czy zabiłby swojego ojca gdyby Führer kazał, film zawiera oryginalne nagranie filmowe z procesu i pokazuje cały dialog, bardzo mocny zresztą. A akurat ten dialog bardzo dobrze ilustruje tezę autorki, naprawdę nie rozumiem dlaczego w książce nie został przytoczony. W praktyce to podtytuł "Rzecz o banalności zła" jest bardziej efektowną reklamą, niż oddaje treść książki. To znaczy książka jest też o tym, ale uzasadnienie tezy jest tylko "do samodzielnego montażu" - trzeba samemu znaleźć w książce odpowiednie argumenty i zsyntetyzować własnoręcznie. Niecierpliwym polecam jednak film. A pozostałym i książkę, i film, raczej zaczynając od filmu.

Teraz może coś o samej tezie. Autorka przed procesem Eichmanna była przekonana że zło zawsze jest "radykalne", a proces przekonał ją, że może być "banalne". Banalność miała postać niezbyt rozgarniętego i zapatrzonego w siebie nieudacznika Eichmanna, człowieka zupełnie przeciętnego i nudnego, który zza biurka zorganizował logistycznie zabicie milionów ludzi, nie potrafiąc przy tym odróżniać dobra od zła. Ja jakoś nie jestem przekonany, żeby zjawisko było takie nowe - przecież już w Rzymie cezarów jacyś przeciętni i nudni urzędnicy zza ówczesnych odpowiedników biurek organizowali zaopatrzenie legionów idących wyrzynać zbuntowaną ludność tu czy tam. I nie trzeba zaraz nikogo wymordowywać, normalne korpo też opiera się na takich ludziach, którzy zrobią wszystko co im się każe, bez zastanawiania się nad etyką. Patrz aktualny skandal dieslowski Volkswagena - przecież tam z całą pewnością nikt nie zrobił nic z uświadomionej złośliwości, czy innych niskich pobudek. Wszyscy robili to, co uznawali za dobre, każdy w swoim kawałku, najwyżej leciutko naciągając zasady, bo zawsze znalazły się jakieś usprawiedliwiające okoliczności. Przecież ja też robię w takim korpo i bywam na przykład na zebraniach z udziałem szefa całej fabryki. I to jest taki sam chłopek-roztropek jak ten uwieczniony na materiałach filmowych z procesu Eichmann. Praktycznie każdy rodzaj działalności ludzkiej wymaga współdziałania w większym zespole, skutki decyzji podejmowanych na wielu stanowiskach pojawiają się często o wiele później i zupełnie gdzie indziej. Odpowiedzialność się rozmywa, łatwo jest powiedzieć sobie jakieś "ja tylko..."  I tak będzie zawsze.

Jedno tylko mnie niepokoi. Banalny i przeciętny Eichmann był idealnym zwolennikiem dowolnej dyktatury. On nigdy nikogo nie zabił, ale zabiłby swojego ojca gdyby Führer powiedział że to zdrajca i trzeba go zabić. Ja rozumiem że tacy ludzie istnieją, jest ich w populacji całkiem spory procent i trzeba z tym żyć. Tylko ostatnimi czasy znowu udaje się różnym takim ich skutecznie zmobilizować. Świat nie idzie w dobrym kierunku. Tylko co na to poradzić?

-----------------------------------------------------------------------------------------------------------------------

Dotyczy: , ,

Kategorie:Pomyślmy

10 komentarzy

Twit programmers of the year (3)

Dziś kolejne doniesienia z frontu walki z programistycznymi twitami, bo na nic innego chwilowo nie mam czasu.

Projekt w którym dotąd robiłem ma od dłuższego czasu dwa projekty pochodne dla dwóch innych modeli samochodów. Jeden z tych dwóch ma dwa warianty - z HUDem i bez. No ale to wszystko jest na tej samej bazie sprzętowej i ma robić z grubsza to samo, różnice są głównie w wyświetlaczu, rozłożeniu LEDów i zegarkach pokazujących niekoniecznie to samo. Tylko wziąć ten wcześniejszy projekt i trochę dopasować. No i prawdziwy twit manager of the year potrafi spieprzyć nawet coś takiego - każda z tych wersji jest wyraźnie inna, te same moduły są w różnych wersjach, albo są wręcz zupełnie inne, nawet mnóstwo nazw tych samych obiektów się nie zgadza. Nikt tego po prostu nie pilnuje. Największy problem jest z jednym z zasadniczych modułów, już w tym pierwszym projekcie on jako-tako działa tylko dlatego, że kiedyś połowę jego zrobiłem na nowo rysując statechart w Rhapsody i generując kod. Teraz zreimplementowałem go całego również w Rhapsody, narysowałem czyste i klarowne statecharty z dobrze zdefiniowanymi interfejsami, w dwa dni było zrobione, a teraz od półtora tygodnia próbuję to zintegrować z wszystkimi trzema systemami. No i wyłazi na każdym kroku to, co im powtarzam od lat: Tak się nie da pisać programów tej wielkości. Ten system jest zrobiony w AUTOSARze - to taka koncepcja modułowości do C, całkiem nie najgorsza (chociaż w pewnych aspektach nie domyślana do końca). Działa to mniej więcej tak, że każdemu modułowi definiujemy w XML porty z dobrze wyspecyfikowanymi interfejsami, a potem te porty łączymy, też w XML, są do tego narzędzia. Całość klei generowany kawałek kodu. Konsekwentnie użyte dałoby to niezły, modularny system, mimo że w C. Tyle że te twity cały czas idą po linii najmniejszego oporu i przestawiają na AUTOSAR tylko to, co absolutnie niezbędne, a pozostałe połączenia międzymodułowe są nadal robione jak ćwierć wieku temu przez #define funkcja1 funkcja2, potem w innym miejscu jest #define funkcja2 funkcja3 i tak dalej. W rezultacie nie ma żadnej modularności, a system przypomina węzeł gordyjski.

Przy okazji zauważyłem, że te nowe projekty kompilują się dobrze ponad dwa razy dłużej niż ten pierwotny, mimo że są mniejsze. Oczywiście nikt z twitów się nie skarży, ale przy czasie rekompilacji powyżej pół godziny rozsądna praca nie jest możliwa, i jest to jedna z przyczyn dlaczego te projekty są w stanie katastrofalnym. Postawiłem hipotezę roboczą, że gdzieś kluczowy header file inkluduje o wiele za dużo. Sprawdziłem i się okazało, że losowo wybrany plik źródłowy inkluduje pośrednio 55.000 headerów. Tak, dobrze widzicie: słownie pięćdziesiąt pięć tysięcy. Krótka analiza pokazała, że to idzie tak: AUTOSAR ma taki specjalny mechanizm definiowania, do której sekcji linkera dany obiekt ma iść - definiuje się powiązany z tą sekcją symbol preprocesora i includuje plik "MemMap.h" (przed obiektem i po obiekcie, zarówno przy definicji jak i deklaracji). Ten plik includuje wszystkie pliki z konkretnymi definicjami, a jest ich z grubsza tyle, ile modułów. To już robi całą masę includów. Ale teraz każdy z tych plików includuje zawsze ten sam plik z definicjami kompilatora, a przecież wystarczyłoby raz. Wywaliłem te niepotrzebne includy i ilość pośrednich includów w moim losowym pliku źródłowym spadła zaraz o 20.000 a czas rekompilacji spadł o jakieś 10%. Zawsze coś, ale w tym pierwszym projekcie jest dokładnie ten sam problem i to nie jest przyczyna różnicy czasów kompilacji. Na moje oko przyczyną jest to, że większość modułów includuje losowo i bez sensu, w pierwszym projekcie dużo tego wyczyściłem albo kazałem ludziom wyczyścić, a w tych nowych nikt się tym nie zajął, ani nawet nie przeniósł do nich poprawek. Niby drobiazg, ale 15 niepotrzebnych minut na każdą kompilację, przy sporym zespole przekłada się na stratę liczoną w osobodniach na tydzień!

W tym pierwotnym projekcie już dawno temu zauważyłem, że kompilacja idzie bez sensu: kompilowało się równolegle na pięciu corach, tyle że największy plik (wygenerowany przez AUTOSAR), kompilujący się przez 6 minut jest w grupie o nazwie alfabetycznie prawie na samym końcu. W związku z tym na końcu pozostałe cory nie mają nic do roboty, a jeden jeszcze przez 5 minut mieli ten jeden plik. Przesunąłem więc tą grupę na początek i voila - kompilacja skróciła się o prawie 5 minut czyli 30%.

W ogóle problematyka czasu i wygody kompilacji i ich wpływu na produktywność, a nawet sukces projektu jest mocno niedoceniana. Znany jest mi wypadek projektu który padł, bo każda generacja kodu z modelu trwała ponad 30 minut. Poprzednią robotę rzuciłem między innymi dlatego, że klient dla którego robiliśmy wymyślił sobie świetny tooling: Program (w Javie) składał się z sześciu części, i żeby je skompilować trzeba było każdą część kliknąć z osobna, i to nie wszystkie naraz, ale po kolei. Każda część kompilowała się 3-4 minuty, czyli akurat tyle żeby tymczasem się przełączyć i coś porobić. Tyle że jak się potem przełączało do Eclipsa to było zawsze "O k..., znowu nie pamiętam który ostatnio klikałem!".  Focusu już nie było, z konsoli też nie dało się łatwo wywnioskować. Efekt był taki, że klikało się parę razy w to samo, albo coś się pomijało i trzeba było od wszystko od nowa. Rozwiązania typu notować na karteczce, albo cały czas się gapić w tego Eclipsa były tak upierdliwe, że aż poszukałem książki od tego badziewia, ale po paru godzinach prób zrobienia żeby wszystko startowało się automatycznie z Anta dałem spokój. Nie dało się i już. Mój szef, też bardzo dobry w te klocki, nie chciał w to uwierzyć, sam się za to zabrał ale wkrótce też się poddał. Dla zainteresowanych podaję słowo kluczowe, po usłyszeniu którego trzeba szybko uciekać: Buckminster.

 Na zakończenie coś dla zmniejszenia hermetyczności notki. Przykłady twitowego i nietwitowego designu UI w elektronice konsumpcyjnej. Najpierw twitowy:

Budzik z twitowym UI

Budzik z twitowym UI

To jest typowy budzik za kilka euro, różne warianty i odmiany można kupić w każdym sklepie. Każdy ma trochę inne ustawianie czasu budzenia, praktycznie zawsze nieintuicyjne. Podejrzewam, że projektanci tego sprzętu w ogóle go nie używają, albo mają jakieś zaburzenia ze spektrum autystycznego i obudzeni w środku nocy, po ciemku, bez problemu potrafią przypomnieć sobie sekwencję klawiszy konieczną żeby alarm na stałe wyłączyć.

Ten konkretny model jest jeszcze bardziej twitowy, bo piszczy przy każdym przyciśnięciu przycisku. Autor tego rozwiązania jest z całą pewnością samotny, albo mieszka u rodziców i ma swoją, osobną sypialnię, nie dzieloną z nikim. Ale przy tak daleko posuniętym autyzmie to nic dziwnego.

A można inaczej. UI tego budzika jest zrobione genialnie:

Budzik z nietwitowym UI

Budzik z nietwitowym UI

Włączenie i wyłączenie alarmu robi się przy pomocy suwaków z boków. Suwak w górę - alarm włączony, suwak w dół - alarm wyłączony. Czas alarmu ustawia się po po przyciśnięciu jednego z tych większych przycisków po lewej i po prawej. Z wyświetlacza znika wtedy wszystko poza ustawianym czasem i naprawdę nie sposób tego nie umieć, nawet bez instrukcji.

Budzik z nietwitowym UI - ustawianie czasu

Budzik z nietwitowym UI - ustawianie czasu

Suwaki podnoszą oczywiście koszt całości o kilka centów - bo program to żadna różnica, te kilkanaście linii kodu przeliczone na wielkość produkcji to koszt przyzerowy. Za to za taki budzik kasują 25 euro (sugerowana cena producenta), w sieci daje się znaleźć oferty od kilkunastu. W bonusie ma jeszcze różne cuda z podświetleniem wyświetlacza. Można? Można!

-----------------------------------------------------------------------------------------------------------------------

Dotyczy: ,

Kategorie:Ciekawostki, Pomyślmy

7 komentarzy

Twit Programmers of the Year (2)

Poprzednia notka spotkała się z żywym odzewem czytelników, więc ponieważ ostatnio temat bardzo mnie zajmuje - zarówno w pracy jak i prywatnie - to może następna.

W pracy ostatnio miałem satysfakcję z gatunku Schadenfreude - od dobrych dwóch lat marudzę przy każdej okazji szefowi działu że tak jak robią to nic z tego nie będzie i trzeba coś zmienić (lista propozycji w załączeniu). Oczywiście, jak to w korpo, nic się nie zmienia. Projekt w którym jestem udało mi się doprowadzić do jako-tako szczęśliwego końca w zasadzie tylko w taki sposób, że co poważniejsze problemy popoprawiałem na własną rękę albo powymuszałem różne rzeczy tworząc fakty dokonane. Ale równolegle idzie projekt pochodny, do innego wariantu, w zasadzie tylko przejąć ten "mój" i trochę pozmieniać. Tego nowego projektu dotąd nawet nie dotknąłem i jest on w stanie tragicznym. No i w czwartek szefu był u klienta na zebraniu kryzysowym, pojawił się tam szef działu testowania (zresztą o polskim nazwisku), stwierdził że jakość tego softu jest katastrofalna (co i ja ciągle szefowi mówię) i zaczął zadawać pytania w stylu "a czy macie development patterny?", "a czy macie continous integration?", "a czy macie automatyczne testy?" - i wszystkie te pytania pokrywały się dokładnie z tym, o czym marudzę. No i już w piątek było "Powiedz nam, co mamy robić żeby ten projekt się nie zawalił?".

Jak źle jest? SOP jest na marzec, to jest do tańszego modelu więc od samego początku ilości będą rzędu 5000 tygodniowo, a na dzień dzisiejszy kompilator daje aż 25.000 warningów. Szybko przejrzałem listę i zauważyłem, że większość z nich musi być z bardzo niewielu miejsc - pół godziny szukania, znalazłem że w dwóch miejscach ktoś zainkludował headery wewnątrz funkcji. Po usunięciu ich, ilość warningów spadła do poniżej 10.000. Rzecz graniczy z sabotażem. Funkcjonalnie to nawet nie przejęli sporej części rzeczy, które od dawna działają u nas. Jedną dość kluczowy moduł infrastrukturalny który opracowałem, zamiast go po prostu przejąć zrobili "lepiej". Poświęcili na to masę czasu, zawracali mi dupę mnóstwo razy, ale oczywiście nie zintegrowali najpierw mojej wersji, tylko od razu zabrali się za poprawianie, czym opóźnili o miesiące włączenie mechanizmów ochrony pamięci - które przecież pozwalają znaleźć sporo błędów. Na koniec jeszcze nie wszystko działa, a nie mają z tego wszystkiego żadnych zalet poza tą abstrakcyjną "lepszością". Za to będzie teraz źle, bo rozwiązania tego samego w obu projektach są różne (a na przykład cały generator kodu jest wspólny, oni poprawiają moje zmiany za każdym razem). Przy pierwszym problemie każę im to wywalić do kosza i wrócić do mojego. Tragedia po prostu, znowu trzeba będzie ratować im dupy, za każdym razem z coraz głębszego szamba.

No dobrze, ale bywa jeszcze gorzej. Wróćmy do naszych ulubionych Twit Programmers z consumer electronics.

Mam w domu zegar ścienny z DCF, produkcji znanej firmy Citizen. Trochę lat już ma. Taki zegar synchronizuje się z nadajnikiem DCF-77 (tu niedaleko, koło Aschaffenburga) w południe i o północy, jeżeli wychodzi mu że się spóźnia to nie ma sprawy - wskazówki pojadą trochę do przodu. Gorzej jest, jak się spieszy - taki zegar do tyłu się nie pokręci. Ja bym zrobił tak, że zegar powinien trochę poczekać aż upływ czasu dogoni czas wskazywany, a potem niech chodzi dalej, w końcu o ile może się pospieszyć przez 12 godzin. Tymczasem tutaj jakiś twit programmer wymyślił, że zegar pokręci się niecałe 24 godziny do przodu. Ponieważ to stara konstrukcja i wszystkie wskazówki są posprzęgane na stałe, to sekundnik musi się w tym celu obrócić 12*60=720 razy dookoła, a trwa to prawie 20 minut. Oczywiście spać się w tym pokoju nie da, jak zegar o północy przez 20 minut warczy. A teraz najlepsze: Zegar przy czasie letnim ZAWSZE stwierdza, że się spieszy - ten twit nie uwzględnił przy porównaniu flagi DST.

Teraz honourable mention dla elektroników którzy projektowali mojego notebooka marki Acer. To jest 18'' desktop replacement i ma dwie karty graficzne. Jedna (Intel) jest wolna, ale bierze mało prądu, druga (ATI Radeon HD4670) odwrotnie. Tyle że jakiś twit wymyślił, że ta szybka będzie niestandardowa i będzie wymagała specjalnego drivera. Notebook był zaprojektowany do Windowsów Vista, ja kupiłem go z Windows 7 i na początku ta szybka karta jeszcze działała. Potem, po jakiejś aktualizacji systemu przestała, w Windows 10 też nie działa. Aktualizacji drivera już nie ma i nie będzie, szlag by ich trafił. Pod Linuxem też nie chodzi, bo tam specjalnego drivera też nie ma.

Problem jest taki, że załamany twitami piszącymi soft na Androida wymyśliłem, że sam sobie napiszę rzeczy które potrzebuję. Zainstalowałem Eclipse z developmentem do Androida, on ma emulację urządzenia z Androidem. Tyle że na moim notebooku ta emulacja startuje się 11 minut. Popatrzyłem co się da zrobić i radykalne przyspieszenie dałoby włączenie hardwarowej wirtualizacji, ale do tego potrzebne jest Intel Virtualisation Technology w procesorze, a w moim tego nie ma. Następna możliwość to włączenie opcji użycia hardware karty graficznej, a tutaj ta szybka nie działa, a do wolnej nie ma już aktualnych driverów. No to może Linux? Partycję z Linuxem miałem, zainstalowałem tam takiego samego Eclipsa, Linux ma driver do tej karty od Intela i emulacja startuje w minut pięć. No to może nie ideał, ale zawsze znacznie lepiej. Na razie zorganizuję sobie to wszystko, a jak dojdę do poważnej roboty to kupię nowego notebooka.

Tak więc przeszedłem na Linuxa na notebooku. Poinstalowałem na moim serwerze Linuxowym trochę serwerowych narzędzi żeby robić development porządnie, i tu też zaraz wykryłem paru twitów. Na przykład u Epsona. Linuxowy driver drukarki od Epsona występuje w dwóch wersjach: Jedna drukuje wszystkie kolory poprzesuwane o parę milimetrów, druga trafia z kolorami we właściwe miejsca, ale wcale nie drukuje koloru żółtego. Wybór należy do Ciebie.

Następny twit jest od projektów do Eclipse. Zainstalowałem na serwerze CDO Repository Server żeby trzymać moje modele w czymś porządnym. A tu jakiś twit nie upilnował, żeby nazwy tabel w bazie danych były pisane zawsze tak samo. Na Windowsach nie ma problemu - tabele lądują w plikach a Windowsom jest scheissegal czy piszemy nazwy plików dużymi czy małymi literami. Ale Linuxowi nie jest to obojętne i od razu wychodzi błąd że nie można znaleźć tabel. Jako workaround podają żeby włączyć w MySQL-u opcję konwertującą nazwy tabel do małych liter, ale ta opcja jest globalna dla całej instancji serwera bazodanowego i wtedy zaczynają mi się wywalać wcześniej utworzone bazy, w których nazwy tabel zawierają duże litery. Wygląda na to, że na początek będę musiał poprawić na własną rękę CDO Server Project (na szczęście jest w źródłach).

I tak dalej, i tak dalej. Teraz na pociechę: Nie każdy problem z softem/hardwarem jest wywołany przez twitów. Typowy przykład to "na początku mój WiFi stick/WiFi router/urządzenie z WiFi chodziło dobrze, a teraz coraz wolniej, na pewno to przez jakiegoś twita od driverów". Otóż nie. Jak kupowałeś tego sticka, WiFi miało tylko trzech sąsiadów i to nie w Twojej klatce. Teraz WiFi mają wszyscy, a kanały mają poustawiane całkiem randomowo. Tak wygląda to u mnie w paśmie 2,4 GHz.

WiFi-2-4-GHz

WiFi w paśmie 2,4GHz

WiFi jest o tyle źle zrobione, że komunikacja na kanale n zakłóca komunikację na kanałach od n-2 do n+2. Jakby poprzydzielać kanały jakoś centralnie to jeszcze może dałoby się to jakoś opanować, ale tak w realnych warunkach sieci jest tyle i poustawiane są na tyle źle że całość się ślimaczy. U mnie było jeszcze gorzej, bo pojawiał się jakiś nieprawdopodobnie mocny sygnał (chyba z biurowca naprzeciwko) zagłuszający wszystko dookoła. Jest na to tylko jeden sposób - przejść na pasmo 5GHz. Tak wygląda u mnie pasmo 5GHz:

WiFi-5-GHz

WiFi w paśmie 5GHz

Czego i czytelnikom życzę.

-----------------------------------------------------------------------------------------------------------------------

Dotyczy: ,

Kategorie:Ciekawostki, Pomyślmy

8 komentarzy

Twit Programmers of the Year

Tytuł notki zainspirowany jest notką Boniego - "Twit of the Year". A co do meritum:

Jako - było nie było - fachowiec od inżynierii oprogramowania, z za chwilę trzydziestoletnim doświadczeniem, ze zgrozą obserwuję poziom wykonania programów wszędzie dookoła. Tak w zasadzie to tworzenie oprogramowania jest stosunkowo proste. Są do tego dość jasno określone zasady, cała kupa darmowych narzędzi pomocniczych, mnóstwo książek, nieprawdopodobne ilości porad do znalezienia w sieci, ... Co prawda w dowolnej innej branży też są dość jasne zasady, narzędzia, książki, tyle że przy programowaniu jest łatwiej - bardzo dużo można sobie po prostu wypróbować i poćwiczyć w domu, praktycznie za darmo. A na przykład w takim budownictwie to jakoś tak nie bardzo da radę.

Tymczasem w realnym świecie trudno o kawałek programu, który nie jest spieprzony i to najczęściej w sposób który powinien być łatwy do uniknięcia. Jaki-taki poziom mają najczęściej programy z okolic Free Software pisane w Javie, ale też wcale nie wszystkie. Dlaczego tak jest? To jest proste: Oni tam stosują się do ogólnie znanych reguł - używają development patternów, robią module testy, konsekwentnie robią komentarze w Javadocu z których potem powstaje dokumentacja, testy wykonują automatycznie w jakimś serwerze CI w rodzaju Jenkinsa, ... W sumie nic skomplikowanego, tyle że inni tego nie robią, albo robią to źle.

Ja rozumiem że bardzo duża część programów które można zdownloadować w systemowym sklepie jak Google Play czy Windows Store to produkcje półamatorskie i ich autorzy nie mają większego pojęcia o tym, co robią. Ale w produkcjach profesjonalnych, zwłaszcza w branżach które nie zajmują się tylko czystym softem nie jest wiele lepiej. Na przykład u mnie, w automotive.

U nas w fabryce, jestem jedyny który ma rzeczywiście pojęcie o inżynierii oprogramowania. Cała reszta to elektronicy, którzy na studiach mieli pobocznie cośtam o programowaniu. Albo i nawet nie i są samoukami. Niektórzy są nawet nieźli, myśleć logicznie potrafią, tyle że podstaw im brakuje. No i potem wygląda to na przykład tak, że w kawałkach w C++ nie jest nawet dobrze określone który header file jest do C, a który do C++ i jak pojawiają się problemy przy includowaniu, to ktoś łata problem takimi sposobami,  że jakbym miał jeszcze dość włosów na głowie, to bym je sobie powyrywał. W innych, zupełnie podstawowych sprawach też nie jest lepiej. A jak jakiś problem trzeba rozwiązać, to niemal każdy szuka podobnego miejsca w innym module i zrzyna rozwiązanie. A ponieważ to rozwiązanie rzadko tylko jest dobre, to złe rozwiązania rozprzestrzeniają się coraz bardziej. Testy modułowe są wymuszane przez klienta - więc robi się je na sam koniec, często już po tym jak program poszedł do na produkcję. Według mnie to zbędna robota, równie dobrze można by wyprodukować oszukany test report, nic by nie zmieniło a roboty mniej. I tak dalej, i tak dalej, ogólnie to cieszcie się że samochody w ogóle są w stanie ruszyć z miejsca.

No ale mimo wszystko programiści z automotive nie zasługują jeszcze na tytuł "Twit Programmers of the Year". Ponieważ samochód podpada pod różne takie tam związane z bezpieczeństwem (znaczy może kogoś zabić), to producenci wymuszają na wykonawcach żeby program nie wieszał się co chwilę, a przynajmniej żeby się potem jakoś znalazł. Na spełnienie tych wymagań idzie niesamowita ilość wysiłku a modus operandi typowego projektu w automotive to eskalacja. Jeszcze nigdy nie słyszałem o projekcie w automotive który by nie wszedł w eskalację. Mi to ręce opadają, bo tego wszystkiego można by uniknąć, gdyby chociaż trochę stosować się do ogólnie znanych zasad.

Ale jest branża w której jest jeszcze gorzej - to consumer electronics. Soft do telewizora jeszcze nigdy nikogo nie zabił, więc nikt nie wymusza w nim zachowania zasad fuctional safety. Ba, jak poklikać trochę w jakiś współczesny telewizor to wychodzi że oni w ogóle nawet podstawowego system testu to raczej jednak nie robią.

Skąd mi się temat wziął? Mój sprzęt audio-video już się mocno historyczny zrobił. Telewizor był jeszcze CRT, od Sony, ale nic bardzo specjalnego. Ciągłe mam video VHS i analogowy zestaw kina domowego z wejściem przez SCART. Najnowszym z urządzeń był dekoder kablowy, też dający sygnał na SCARTa. No i ten dekoder zaczął mieć problemy. Zaczęło się od różnych zakłóceń w obrazie, potem odbierał coraz mniej kanałów, w końcu zostało tylko Russia Today. A potem poszedł z niego dym - sfajczyły się dwa elektrolity. No i po analizie opcji wyszło mi, że najlepiej będzie kupić nowy telewizor, bo tunel kablowy będzie w zestawie, a i nagrywanie na dysk USB przynajmniej częściowo zastąpi video. A w następnej kolejności będzie nowe kino domowe.

Jako warunki brzegowe postawiłem rozmiar 32 cale (wystarczy mi), FullHD (4K to przesada, ale poniżej FullHD w dzisiejszych czasach bez sensu) i żeby był Smart. No i zaraz wybór skurczył mi się do zaledwie kilku modeli. A potem się doczytałem, że są już telewizory z Androidem. Ponieważ moje zdanie o programistach od telewizorów było utrwalone już od dawna, stwierdziłem że wezmę taki - jak nie będą pisać wszystkiego sami tylko wezmą za bazę niezłego Linuxa i jakie-takie API od Googla to okazji do narobienia głupot będą mieli mniej.

Od paru dni mam taki telewizor i jak widzę, prawdziwy Twit Programmer of the Year potrafi spieprzyć nawet taką integrację:

  • To nie jest "telewizor na Androidzie" tylko "telewizor z własnym systemem + Androidem". Miejsca sklejenia widać dość wyraźnie. Ale i tak jest trochę lepiej niż bez Androida.
  • Do telewizora można podłączyć mysz. Wszystko pięknie, tyle że rolka myszy chodzi w różnych menu, ale nie w web browserze. Po prostu nie chodzi i już, do scrollowania strony trzeba klikać w suwak, nawet ciąganie go nie działa.
  • Można sobie utworzyć cztery listy ulubionych kanałów, ale wybrać jakiejś już nie. Znaczy okienko wyboru się pojawia, na liście są utworzone listy, ale listy wszystkich kanałów na niej nie ma. Nie muszę chyba pisać, że niezależnie od tego co wybiorę, po wyjściu z okienka ustawiona jest lista wszystkich kanałów. Zmienić to mogę tylko przy użyciu programu zdalnego sterowania na innym urządzeniu Androidowym. Na telewizorze nie da rady, próbowałem chyba z pół godziny. Proszę sobie darować komentarze że RTFM- w manualu nie ma o tym nawet słowa. Tytuł Twit Programmer of the Year słusznie się należy.
  • Własny program do zdalnego sterowania z innego urządzenia Androidowego od producenta telewizora nie łączy się z telewizorem. Inne, od jakichś amatorów, jakoś się łączą (ale też nie wszystkie). Może ma to związek z tym, że w drugim urządzeniu WiFi chodzi na 2,4GHz, a telewizorowe na 5 GHz, ale amatorzy radzą sobie mimo routera po drodze.
  • Nagrywać na dysk USB można tylko to, co się widzi. To akurat zrozumiałe - tuner jest tylko jeden. Ale nie da się odtwarzać nagranego programu na komputerze (przez DLNA) oglądając co innego.
  • Jak ustawić nagrywanie na powiedzmy za dwa dni, dysk kręci się przez te dwa dni cały czas, nawet przy wyłączonym telewizorze. Naprawdę nie można go obudzić na pięć minut przed nagraniem?
  • Już raz mi się coś powiesiło - oglądać TV można było, ale nie chodziło odtwarzanie nagranego programu i nic z internetem. Pomógł dopiero twardy reset z odłączeniem zasilania. Chyba zwisała część Androidowa.

Oczywiście nie twierdzę, że ten model telewizora przebija dno, z pewnością są gorsze. Ale programiści od consumer electronics rozumianej jako cała branża z pewnością zasługują na tytuł Twit Programmers of the Year

Jeszcze autoreklama, jakby czytał to jakiś decydent z branży: Za odpowiednią opłatą zorganizuję wam to bez porównania lepiej. Tylko poważne propozycje.

-----------------------------------------------------------------------------------------------------------------------

Dotyczy: ,

Kategorie:Ciekawostki, Pomyślmy

39 komentarzy

Marzenie o olimpiadzie

Obejrzałem wczoraj na arte ciekawy program - film dokumentalny "Der Traum von Olympia" ("Marzenie o olimpiadzie") - i muszę się podzielić.

Film opowiada historię olimpiady 1936 w Berlinie z punktu widzenia dwóch osób:

  • Wolfganga Fürstnera - jednego z głównych jej organizatorów, oficera Wehrmachtu odpowiedzialnego za organizację i działanie wioski olimpijskiej
  • Gretel Bergmann - lekkoatletki niemieckiej pochodzenia żydowskiego

Obu tych historii nie znałem, obie są bardzo znamienne i interesujące.

Najpierw o formie: Film zrobiony jest jako fabularyzowany dokument, zdjęcia dokumentalne opatrzone są pierwszoosobowym komentarzem obu bohaterów, w scenach aktorskich bohaterowie często zwracają się wprost do kamery z ich monologami wewnętrznymi. Ogólnie konwencja całkiem ciekawa. Klamra fabularna została wzięta z "Bulwaru Zachodzącego Słońca" - zaczyna się to od pierwszoosobowego monologu martwego ciała w jeziorze, kończy na scenie śmierci.

Teraz o faktach. Wolfgang Fürstner był zaangażowanym i wierzącym w narodowy socjalizm oficerem Wehrmachtu, na tyle sprawnym organizatorem, że powierzono mu organizację wioski olimpijskiej. Wymyślił on wiele z różnych chwytów, dzięki którym olimpiada 1936 w Berlinie stała się wielkim sukcesem propagandowym, Wtedy właśnie zaczęło się wykorzystywanie sportu do propagowania ideologii, zwłaszcza totalitarnych i do dziś na każdej olimpiadzie (zwłaszcza w kraju z jakąś dyktaturą, ale nie tylko) wiele rzeczy robi się dokładnie tak samo.

Fürstner przeprowadził swoje koncepcje żeby wszystko wyglądało maksymalnie pokojowo wbrew swojemu oponentowi - Wernerowi von Gilsa, który chciał żeby porządku na olimpiadzie pilnowało umundurowane wojsko dowodzone przez niego. Natomiast Fürstner zaangażował do tego zadania umundurowanych na biało synów oficerów armii i bardzo pilnował, żeby w wiosce olimpijskiej nie pojawiały się swastyki. Fürstner bardzo się starał, wierząc że będzie to wstęp do jego wielkiej kariery w Rzeszy. Ale już w trakcie organizacji olimpiady uchwalono "Ustawy Norymberskie" i zaczęto grzebać w życiorysach. I w sposób całkowicie niespodziewany znaleziono Fürstnerowi dziadka w Wehrmachcie że jego dziadek był przechrzczonym Żydem. Wbrew pozorom skłoniło to Fürstnera do jeszcze większych starań, bo wierzył on że jak wszystko pójdzie perfekcyjnie to nieprawomyślne pochodzenie zostanie mu zapomniane.

Ale tak nie było. Krótko przed otwarciem olimpiady zdegradowano Fürstnera do zastępcy komendanta wioski olimpijskiej (komendantem został jego konkurent Werner von Gilsa) pod pozorem że jak był dzień otwarty w wiosce to zwiedzający coś popsuli. Fürstner zrobił dobrą minę do złej gry i perfekcyjnie przeprowadził wszystko do końca z uśmiechem na ustach. Trzy dni po zakończeniu olimpiady został jeszcze odznaczony Niemieckim Olimpijskim Medalem Honorowym pierwszej klasy, a po imprezie na cześć uhonorowanych się zastrzelił.

Teraz druga linia narracji: Gretel Bergmann miała wielkie szanse na medal w skoku wzwyż, ale mieszkała w Anglii i miała wystartować w jej barwach. Wezwano ją więc do Niemiec (grożąc represjami dla rodziny jeżeli nie przyjedzie) i posłano na treningi z innymi sportowcami niemieckimi. Tyle że w ostatnim momencie odmówiono jej prawa do startu. I na koniec Niemcy zdobyły w skoku wzwyż medal srebrny.

Obie te historie zadedykowałbym ludziom znającym się na czymkolwiek, starającym się zrobić karierę w jakiejkolwiek dyktaturze, nawet raczej łagodnej (jak na razie), w stylu PiSowskim. Dyktatura to bardzo marny ustrój - może i na początku radzi sobie lepiej i sprawniej niż rozlazła demokracja, ale na dłuższą metę nie może być lepsza. Jeżeli nawet najlepszy fachowiec może w każdym momencie popaść w niełaskę, i to również z przyczyn całkowicie niezależnych od niego, to jeżeli tylko można, lepiej dla fachowca byłoby wybrać jakiś inny system. A i sam system dobrowolnie rezygnuje z zaangażowanych w niego fachowców pod byle pozorem - tak nie można wygrać, niektórzy ludzie są naprawdę niezastąpieni.

Los bohaterów jest też charakterystyczny: Fürstner zabił się już 1936, von Gilsa popełnił samobójstwo w 1945 po wpadnięciu w niewolę radziecką, a Gretel Bergmann która przeniosła się do USA, zdobyła tam kilka tytułów w różnych dyscyplinach sportu i żyje do dziś (ma 102 lata). Dyktatura nie jest zdrowa.

Na arte będą jeszcze dwa powtórzenia tego filmu, jedno za godzinę (niedziela 17.07. o 15:25), jedno w piątek 05.08. o 9:25, ale z pewnością można będzie go jeszcze nie raz zobaczyć.

I jeszcze dodam, że wioska olimpijska jeszcze istnieje i można ją zwiedzać. Kiedyś się wybiorę (ale będzie to raczej dopiero koło najbliższej Wielkanocy)

-----------------------------------------------------------------------------------------------------------------------

Dotyczy: , ,

Kategorie:Pomyślmy, Telewizja

4 komentarze

„Żaden X nie będzie biegał z karabinem, strzelał do ludzi i podkładał bomb”

Ostatnimi czasy w sieci często spotykam się z tekstami w rodzaju:

  • Wszyscy muzułmanie to terroryści.

No to jest tak piramidalny idiotyzm, że szkoda czasu na debunk. Ale są też inne głupie wypowiedzi typu:

  • Żaden X nie będzie biegał z karabinem, strzelał do ludzi i podkładał bomb

gdzie X to do wyboru:

  • Europejczyk
  • chrześcijanin
  • katolik

No i sorry, ale wypowiadający takie stwierdzenia mają bardzo poważne braki w wykształceniu ogólnym. Więc gwoli edukacji, wzorem WO, zrobię ranking od czapy poświęcony europejskim organizacjom terrorystycznym. UWAGA: Ranking jest naprawdę od czapy, nie aspiruję do jego kompletności, kolejność dość subiektywna. A przy okazji znalazłem ciekawą stronę: (niestety z Europy uwzględnia tylko Włochy) Również niestety w wielu wypadkach nie daje się znaleźć sumarycznego body countu danej organizacji.

Kryteria zaliczenia do rankingu będą takie:

  • Organizacja ma działać po WWII
  • Złożona ma być z Europejczyków (przynajmniej głównie)
  • Ma to być organizacja z jakimiś zamachami na koncie, nie klub dyskusyjny rozważający możliwości

Zaczniemy od honourable mentions, przykłady które nie mieszczą się w podanych kryteriach:

  • Na początek: Polacy nie gęsi, i swoich terrorystów mają. Co prawda trochę nieudacznych. Bracia Kowalczykowie przygotowali zamach bombowy, bomba nawet wybuchła, ale nikogo w sali nie było. Body count: 0. No i co to za organizacja - dwóch braci nie da się policzyć jako organizacja terrorystyczna. I naprawdę nie mogę zrozumieć jak można ich czcić tablicami pamiątkowymi czy domagać się ich rehabilitacji. Na szczęście im się nie udało, ale to był podręcznikowy terroryzm.
  • Jak jesteśmy przy Polakach, to AK zrobiła parę zamachów bombowych na stacje w Berlinie. Body count: 54 + 198 rannych. Nie liczy się do rankingu bo przed 1945.
  • Nie mieszczą się w rankingu również różne zamachy na kliniki aborcyjne w USA. Nie udało mi się znaleźć sumarycznego body count, ale zamachów było w sumie ponad 200. Najczęściej bombowe, ale bywało że biegali terroryści z karabinami i strzelali do ludzi. Motywacja - religia chrześcijańska. Ostatni zamach był w listopadzie 2015, zginęły 3 osoby. No ale to nie Europejczycy, nie liczymy.
  • Nie wliczę również częstych w latach 70-tych porwań samolotów. Robiły je różne organizacje, niekoniecznie europejskie, trudno zliczyć ile ludzi zabili terroryści a ile zginęło od kul szturmującej policji, więc żeby uniknąć sporów tylko honourable mention. Ale nie zapominajmy, że żadne inne akcje terrorystyczne nie spowodowały jakichś trwałych zmian w społeczeństwie - a przez te porwania wprowadzono kontrole pasażerów i bagażu przed wejściem do samolotu. Możemy to zobaczyć na filmach - na przykład w pierwszych filmach z cyklu o Gangu Olsena bohaterowie bez problemu wsiadają do samolotów z walizkami pełnymi gotówki. w ostatnich bywa że akcja toczy się wokół kontroli na lotnisku.

Teraz ranking:

  • Miejsce 5: Niemiecki RAF, czyli Rote Armee Fraktion (nie mylić z Royal Air Force). Body count: 34, ranni: 200+. To niedużo, ale akcje ich były bardzo spektakularne. Specjalizowali się w porwaniach i morderstwach polityków i managerów bardzo wysokiego szczebla. Motywacja: lewicowo-anarchistyczna + finansowanie z bloku wschodniego.
  • Miejsce 4: Włoskie Czerwone Brygady (Brigate Rosse). Nie znalazłem body countu, ale był na pewno wyższy niż RAF-u. Plus za mocny PR - szczególnie akcja z porwaniem Aldo Moro spowodowała bajeczny wzrost rozpoznawalności marki. Nawet dzieci przedszkolne w komunistycznej Polsce ją znały. Motywacja: lewicowo-anarchistyczna.
  • Miejsce 3: Hiszpańska ETA (Euskadi Ta Askatasuna) Body count: 823-864 (zależnie od źródła). Motywacja: początkowo antyfaszystowska, potem lewicowo-nacjonalistyczna.
  • Miejsce 2: Europejscy chrześcijanie-katolicy z IRA. (Irlandzkiej Armii Republikańskiej). Body count 1696. (Źródło) Szczytowe osiągnięcie: 22 bomby jednego dnia w jednym mieście. Motywacja: to skomplikowane. Raczej narodowa niż religijna.
  • And the number one is: OAS (Organisation de l’Armée Secrète)! Może i większość działalności tej organizacji prowadzona była w Afryce Północnej, ale byli to stuprocentowi Europejczycy. Szczytowe osiągnięcie: 120 zamachów bombowych jednego dnia w jednym mieście. Motywacja: nacjonalistyczno-kolonialistyczna. Niestety nie udało mi się znaleźć sumarycznego body countu, ale ta organizacja miała największą skalę działania i najwięcej czynnych uczestników ze wszystkich europejskich organizacji terrorystycznych. Przy OAS-ie zamachy ISIS to małoskalowe amatorstwo.

 Więc młody czytelniku przekonany że uchodźcy przynoszą nie znany tu wcześniej terroryzm do pacyfistycznej Europy: Przeczytałeś - idź i nie bzdurz więcej.

-----------------------------------------------------------------------------------------------------------------------

Dotyczy: , ,

Kategorie:Pomyślmy

16 komentarzy