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

Twit Programmers of the Year (6)

Blog robi się powoli monotematyczny, dziś znowu o programowaniu, głownie na Androida.

Klient już czwarty tydzień załatwia papiery, a oczywiście terminy zakończenia poszczególnych etapów już ustalone i potem czasu będzie mało. No ale nie moje zmartwienie, ja zrobię co się da, ale tym razem o nadgodzinach mogą zapomnieć. Za to siedzę w domu i rozpracowuję prywatne programowanie pod Androida na koszt pracodawcy. Całkiem dobry układ. Jakbym był na własnym rozrachunku, to mogłoby boleć, a tak nie mam stressu (oczywiście poza stressem związanym z oddawaniem co miesiąc braterskiej części tego co klient płaci pracodawcy, ale coś za coś).

Do mojego nowego komputera dokupiłem porządny zasilacz. Dwa tej firmy (BeQuiet!) już w domu miałem, do serwera kupiłem nówkę, modularnego (znaczy kabelki dołącza się według potrzeby) serii 8 (im mniejszy numer, tym starszy, aktualne serie to 11), drugi to była używka dla syna, niemodularny serii 8 (syn ma komputer w normalnej obudowie mini tower, więc kabelki nie przeszkadzają specjalnie w przepływie powietrza). Teraz też nastawiłem się na używkę na eBayu, modularnego serii 7 lub 8. Prawie aktualne (serii 10) jako używki chodzą po 70-80 EUR, jak mocne to nawet wyżej. Serie 7 i 8 dają się kupić za jakieś 35-40 z wysyłką. Udało mi się wylicytować za zaledwie 31 z wysyłką, bo sprzedawca się trochę przechytrzył wystawiając cenę startową aż 25 EUR i nikt poza mną się nie zainteresował. A zasilacz jest z bardzo drogich serii high-endowych (Dark Power Pro P7), wygląda na nie używany (niemal wszystkie kabelki mają jeszcze oryginalne zawieszki), jak go obejrzałem to szczęka mi opadła. Już opakowanie wyraźnie różni się od tych tańszych (ma okienko, kabelki pakowane są indywidualnie w kartoniki), zasilacz jest trochę większy niż standardowy (znaczy pasuje jako ATX, tylko w jedną stronę jest trochę dłuższy, w moją małą obudowę wszedł bez problemu). Kabelków jest duży asortyment w różnych kombinacjach, wentylator zasilacza jest podłączany do złącza monitoringu na płycie głównej, a zasilacz może jeszcze sterować czterema dodatkowymi wentylatorami. Praktycznie go nie słychać, nawet z bliska. Super rzeczy, te zasilacze, polecam.

Decyzja o zrobieniu sobie komputera z 8GM RAM była bardzo dobra - system + Thunderbird + Firefox + inne drobiazgi + Android Studio + emulator biorą łącznie 6-6,5 GB, jeżeli ktoś ma zamiar próbować robić apki na 4GB to odradzam z góry, szkoda nerwów.

Wróćmy do programowania. Próbuję robić aplikację, i Android nie za bardzo mi się podoba. Znaczy API sporo potrafi, jest tam trochę niezłych koncepcji, ale wyraźnie za mało zastanawiali się nad usability. Bo wygląda to tak:

Aplikacja Androidowa zbudowana jest z Activities. Activity (upraszczając) to jest screen + kod do niego, ma to swój wieloetapowy lifecycle, można wydzielić sobie reusable kawałki GUI zwane Fragment. Fragment ma znowu swój lifecycle, trochę inny niż Activity. No i porządnego, pełnego diagramu tych lifecykli nie znajdziecie na http://developer.android.com, trzeba szukać gdzie indziej. Zasadniczy problem polega jednak na tym, że w Androidzie wszystko jest asynchroniczne, nie ma nawet czegoś takiego jak windowsowy dialog modalny. Nawet okienko w rodzaju Yes/No/Cancel jest niemodalne, aplikacja biegnie dalej i trzeba wszystko synchronizować we własnym zakresie. Nie byłby to aż taki wielki problem, gdyby nie to, że ma to również znaczenie podczas lifecycle Activity/Fragmentu. Na przykład mogą one wymagać uprawnień dostępu do jakichś serwisów (na przykład kamery). I jak praw nie ma to albo trzeba o nie interaktywnie zapytać, albo rzucić jakimś błędem. No ale to jest w trakcie startu, nasz kawałek jeszcze nie jest w żadnym stabilnym stanie! Nie da się zatrzymać startu, a o wyniku zapytania użytkownika (czyli czy w ogóle jest sens startować) dowiemy się dopiero później. Przecież to wcale nie chce współgrać ze sobą! Zacząłem więc kombinować jak powinna wyglądać architektura standardowej aplikacji, żeby to wszystko sensownie działało i to wcale nie jest proste. Poguglałem i widzę, że co bardziej kumaci deweloperzy też mają podobne uwagi i kombinują różne rozwiązania. Muszę jeszcze trochę poczytać, co proponują. Na razie znalazłem rady żeby robić Reactive Programming przy pomocy JavaRx, no jest to jakaś propozycja, ale nie jestem całkiem przekonany czy będzie to pasować do moich koncepcji.

Ale tak według mnie, to powinno być zadanie projektantów systemu! Jeżeli każdemu deweloperowi każemy wymyślać koncepcje, jak by tu ogarnąć chaotycznie zaprojektowany system, nie dając mu nawet szkicowych szablonów rozwiązań, to z góry można założyć, że minimum dziewięćdziesiąt kilka procent wymyślonych rozwiązań będzie marnych. Nawet jak deweloper jest ogólnie dobry, to dopiero po paru skończonych aplikacjach będzie wiedział, co robił źle. Co się dzieje jak nie ma patternów to ja widzę na codzień w pracy. Na moje oko to Androidowi brakuje jakiejś porządnej warstwy albo frameworku żeby łatwo dało się pisać bardziej złożone aplikacje. Bo proste quick and dirty idzie łatwo i przyjemnie, ale porządne, z pełną obsługą błędów i wszystkimi szykanami to duży problem. Powiedziałbym, że to prawie jak programowanie aplikacji windowsowych bez MFC. (Tylko nie bierzcie tego porównania zbyt dosłownie - API Androida jest znacznie bliższe MFC niż czystym Windowsom z ręcznie robionym event loopem, w końcu sporo lat minęło od tamtych czasów, tyle że API Androida jest o wiele bardziej skomplikowane niż windowsowe).

A tu jeszcze dokłada się fakt, że system jest w ciągłej zmianie. Nowe idee się pojawiają, stare zmieniają się (i to często więcej niż raz), jeżeli aplikacja ma chodzić na iluś wersjach wstecz to zaczynają się schody. Google dostarcza biblioteki robiące kompatybilność wsteczną, ale o dokłada tylko następny stopień złożoności - której trzeba użyć, a bez której można się obyć. A potem aplikacja na latarkę ma dwa megabajty, bo ciągnie ze sobą bez sensu ileś bibliotek kompatybilnościowych - nie są reusowalne w systemie, o nie. Ma to swoje uzasadnienie w koncepcji systemu (każda aplikacja to osobny user unixowy i nie ma sharingu czegokolwiek wprost między aplikacjami, zawsze musi to iść przez mechanizmy systemowe), ale skutki są niemiłe.

Dla ilustracji: Najstarsze urządzenie Androidowe jakie w domu mam, ma wersję Androida 4.1.2 (kryptonim: Jelly Bean, co to za US-amerykański pomysł, żeby nazywać wersje od jakichś obrzydliwych słodyczy, Lollipop, Marshmallow, rzygać mi się chce jak to czytam) to jest API numer 16. Logiczne więc, że chcę żeby moje apki chodziły przynajmniej od tej wersji. Ma to oczywiście również związek z wielkością rynku docelowego - w użyciu są urządzenia rożnych wersji, im wcześniej zaczynać, tym większa ilość potencjalnych klientów. Startując od API 16 pokrywamy jakieś 96% używanych na świecie urządzeń, im późniejsze API tym urządzeń mniej. Nadchodzący Android 8 (SDK i emulacja już jest, można sobie obejrzeć) to będzie API 26. W wersjach 4.x prawa dostępu były akceptowane przez użytkownika podczas instalacji, przy braku akceptacji aplikacja nie była instalowana. W późniejszych wersjach użytkownik był pytany dopiero przy starcie aplikacji i mógł odpowiedzieć tak albo nie, zależnie od humoru, a aplikacja mogła mu pokazywać wyjaśnienie, po co potrzebuje dostęp do tego. No i to oczywiście są kompletnie różne koncepcje, jednolite obsłużenie tego żeby chodziło w dowolnej wersji jest trudne. Ponieważ jest trudne, to Google wrzucił na GitHuba całkiem niezłą bibliotekę do tego (nazywa się easypermissions), zastrzegając sobie przy tym brak jakiejkolwiek odpowiedzialności i wsparcia, ale ja się pytam, dlaczego to nie jest wprost w API, a przynajmniej w SDK? I skąd początkujący developer ma wiedzieć, że takie rozwiązanie w ogóle jest, a nawet, że go potrzebuje?

Co do marnej obsługi wyjątków, na którą narzekałem poprzednio to powoli widzę, dlaczego nie dało się zrobić jej porządnie, z checked exceptions, ale oczywiście to nie jest komplement. Znalazłem natomiast, co można zrobić z nieobsłużonymi wyjątkami - jest taki serwis, do którego informacje o wyjątkach mogą być wysyłane. Nazywa się to fabric, wymyślił to Twitter, teraz należy do Googla. Ze dwie linie w programie, rejestracja w sieci i można mieć informacje o wszystkich nieobsłużonych wyjątkach w swojej aplikacji u dowolnego użytkownika z wszystkimi danymi (stack trace, sprzęt, czy rootowany, wersja systemu itd.). Do tego można mieć jeszcze life data o swojej aplikacji - ilu użytkowników używa jej w danej chwili, chyba nawet można wiedzieć co robią (jeszcze nie sprawdzałem tak dokładnie). Z jednej strony piękna rzecz przy developmencie, z drugiej to aż się zimno człowiekowi robi - przy każdym starcie aplikacji wysyłany jest do Google również AdvertisingId, co pozwala imiennie zidentyfikować każdego użytkownika z wszystkimi jego najprywatniejszymi danymi. Deweloper oczywiście tego nie dostaje do ręki, ale Google to ma. Podobno większość aplikacji używa tego fabrica, więc żadna różnica czy ja go użyję, czy nie - Google ma użytkownika na talerzu i tak. No i jeszcze trzeba zainstalować plugin u siebie, w Android Studio, i ten plugin zna każdy projekt w workspace. Kto zagwarantuje, że Google nie ogląda sobie tych projektów żeby wyłapać nowe idee i wejść z tym samym wcześniej?

Pamiętam hejt na Microsofta ćwierć wieku temu (Gates w mundurze SA, z flagą w której swastyka została zastąpiona logo Windowsów, na czele rzeszy SA-manów, pod hasłem "Ein Reich, ein Führer, ein OS") , pamiętam jak mieli koncepcje żeby Windowsy były na wszystkim (Windows for Pen, Windows for TV...), wczesne reklamy Apple sugerowały że Microsoft to Wielki Brat. No ale przecież najdalej posunięte pomysły MS to było małe miki w porównaniu z tym co robi "Don't be evil" Google. A Google jakoś nikt w podobny sposób nie karykaturuje.

Rysunek o MS  znalazłem tylko we fragmencie, pewnie pousuwali te całe ze względu na tekst.

Ein Reich, ein Führer, ein OS - to była gruba przesada

Ein Reich, ein Führer, ein OS - to była gruba przesada

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

Dotyczy: ,

Kategorie:Programowanie

Komentarze: (2)

Twit Programmers of the Year (5)

W pracy skończył mi się projekt, inny dział chce mnie koniecznie do innego projektu, tym razem dla klienta z trójramienna gwiazdą, ale zanim papiery załatwią to jestem w domu na koszt firmy. Pierwszy raz w życiu nie mam bieżącego projektu. Całkiem fajnie - wyporządkowałem już pół piwnicy i dalej walczę z programistycznymi twitami od Androida.

 Miałem już wszystko poustawiane, w Eclipsie, domowy serwer Git-a, Jenkins, itd., wymyśliłem czym się pobawię na początek i zacząłem ściągać przykładowe aplikacje do analizy. Na początku wziąłem jakieś stare, i wszystko było OK. Potem zassałem coś aktualnego od Googla i nie poszło. Bo chciało mieć niejakiego Gradla, to taki nowy pomysł na make. To dołożyłem Gradla, ale dalej coś się nie zgadzało. To zaktualizowałem Android SDK i dopiero się zaczęło. Nic już się nie chciało kompilować. Po dłuższej chwili ciężkiej walki poczytałem co o tym piszą w sieci i wyszło, że Google wycofał się z supportu developmentu pod Eclipse w końcu zeszłego roku, a całkiem niedawno poprzestawiał coś w SDK tak, że w Eclipse nie ma już szans. Tylko Googlowe Android Studio. (Uprzedzając wypadki - jak się cofnąć z wersją SDK Tools, to Eclipse jeszcze działa, przynajmniej z projektami w starej strukturze).

Cóż było zrobić - zainstalowałem Android Studio. No i mać, mać, mać, ono na 4GB RAM pod Linuxem się ślimaczy! Mam wystartowany tylko browser (w końcu muszę mieć doku) i Android Studio i po chwili 1 GB w swapie. Tak się nie da pracować! O puszczeniu równolegle emulatora Androida mogę zapomnieć.

No i znowu - co zrobić, trzeba nowy komputer. Mojemu notebookowi 7 lat stuknęło, dotąd wystarczał, ale pamięci rozszerzyć się nie da. Ale teraz koncepcja będzie inna. Notebook ma w zasadzie tylko dwie zalety:

  • Wszystko jest w jednym kawałku i łatwo go przenieść albo zabrać ze sobą
  • Ma w środku UPS-a (w pierwszym świecie nie jest to jednak specjalnie potrzebne, sprawdzić czy nie USA)

Poza tym same wady, a największa to to, że musisz zaplanować i zapłacić już dziś, twoje potrzeby na jutro i pojutrze. Jak się nagle pojawi całkiem nowa, niezaplanowana potrzeba w sprzęcie, to notebook musi być nowy. A jak zaplanowałem moje potrzeby na jutro, to wyszedł mi notebook z kategorii 1000+ EUR. Sorry, ale nie. Nie przy takich wadach:

  • Jak wypasiony taki notebook by nie był, to i tak wszystko w nim jest w wersji spowolnionej w porównaniu z desktopem.
  • Klawiatura zawsze jest w niestandardowym układzie, nawet jak to jest 18''. Do tego klawisze o krótkim skoku, i od pewnego czasu wszyscy robią takie, żeby się nie dało wyczuwać granic miedzy nimi. Po podświetleniu bajerancko wygląda, ale dobrze pisać na tym się nie da. I zazwyczaj jest za wysoko.
  • Teoretycznie można podłączyć klawiaturę na USB, ale wtedy ekran wychodzi za daleko.
  • Można podłączyć drugi ekran, ale wtedy nie da się mieć klawiatury na środku (czytaj: Co chwilę trzeba kręcić głową), albo patrz punkt poprzedni.
  • Przy pracy kabelek i tak trzeba mieć, do prądu, nie wierzcie w reklamy o bezkabelkowej wolności
  • Podłączenie do serwera idzie przez WiFi (czyli trochę wolne), albo trzeba mieć drugi kabelek.
  • Te twity od notebooków wymyśliły sobie kiedyś dotykowe wyłączniki, zwłaszcza do WiFi. Autora rozwiązania należałoby dla przykładu rozstrzelać - w większości notebooków z jakimi miałem do czynienia bardzo łatwo jest dotknąć  tego wyłącznika przypadkiem, potem nagle nie ma połączenia z siecią i nie wiadomo dlaczego. Gdyby był mechaniczny, to by się  wyłączenie poczuło, a tak co i raz ciśnienie skacze.

I tak dalej. Więc nowa koncepcja: skręcę sobie desktopa wykorzystując część elementów które już mam (zasilacz, karta graficzna, dysk z notebooka (bo miałem w nim dwa)), tylko Linux. Pracuję na stole, komputer będzie na półce, do monitora pociągnę jakieś 3,5 m kabelka i będę mógł pracować jak dotąd, a po robocie odstawić monitor na półkę i mieć wolny stół. I tak:

  • Obudowę kupiłem taką samą jak do serwera. Przy okazji się okazało, że Cooltek nie jest jej producentem, robi je firma Jonsbo i oni mają jeszcze kilka innych wariantów małej, zgrabnej obudowy na płytę w formacie MicroATX i zasilacz ATXowy. Niestety żadna z nich nie ma miejsca na dysk optyczny, ale to nic, później dokupię zewnętrzny na USB.
  • Wentylator zasilacza z piwnicy hałasuje przy starcie, ale potem się uspokaja. To też nic, wkrótce kupie używany zasilacz firmy BeQuiet. One są takie świetne, że naprawdę nie warto kupować nówki sztuki, paroletnia używka chodzi kolejne lata bez zarzutu. A nówki tanie nie są.
  • Kupiłem najtańszą płytę główną jaką się dało, za 40 EUR (po przeczytaniu testu, z którego wyszło że nie ma różnicy w prędkości między tą, a znacznie droższymi).
  • Procesor też był najtańszy (za niecałe 30 EUR). I tak według indeksów prędkości jest dwa i pół raza szybszy od tego z notebooka, a jeszcze różnica w prędkości busa, VT (Virtualisation Technology) support, ...
  • 8GB RAM DDR4 nie daje się kupić za bezcen.
  • Dysk 2,5'' z notebooka jest całkiem spoko, jest i tak dwa razy szybszy od tego, który był tam oryginalnie.
  • Kupiłem set klawiatura/mysz bezprzewodowe, Cherry, teraz wreszcie daje się pisać w tempie i bez zmęczenia.
  • Monitor miał być 22'' (bo tyle miejsca jest na niego na regale), miał mieć VGA, DVI i HDMI + głośniki i wyjście na słuchawki. Tu wyszło, że w rachubę wchodzi tylko jeden model Iiyamy. Też jest spoko.
  • Do monitora pociągnąłem cztery pięciometrowe kabelki (zasilanie, HDMI, audio i USB, USB musiał być z repeaterem). Kabelki owinąłem razem taką spiralą, w sumie jest to jak jeden grubszy kabel, handling jest świetny.
  • Dałem sobie spokój z Windowsami, i tak coraz rzadziej w ogóle bootowałem na Win. A używałem raptem ze trzy programy bez odpowiedników linuksowych (IrfanView, Picture Shark, Elster Formular, ...), teraz się okazało, że dały się bez problemów zainstalować pod PlayOnLinux

W sumie całość, włącznie z kabelkami kosztowała 350 EUR, czyli jakąś jedną trzecią tego co poszłoby na notebooka. Chodzi super, jak wcześniej emulator Androida startował ponad cztery minuty, to teraz poniżej 30 sekund. Instalacja drivera do nVidii była nietrywialna i nie dla początkujących linuksiarzy, ale nie jestem początkującym linuksiarzem. Za to teraz emulowane urządzenie Androidowe chodzi w takim samym tempie jak prawdziwe (o ile nie szybciej).

Ale oczywiście nie obyło się bez spotkań z programistycznymi twitami. Na przykład: klawiatura bezprzewodowa chodzi z baterii i oczywiście nie ma LEDów do capslocka i numlocka. Żeby wiedzieć jaki jest ich stan, trzeba mieć jakiś kawałek programu. No i na Linuxa w zasadzie jest taki, sztuk jeden. Obsługuje on wszystkie trzy klawisze, ale miejsce do pokazywania jest tylko jedno. A przy każdej zmianie pokazuje się na ekranie notyfikacja. To jest tak głupie i niepraktyczne, że nie wiem nawet jak to skomentować. Poradziłem sobie instalując taki kombajn, co na bieżąco wykresy wszelakie pokazuje (zajętość pamięci, obciążenie procesora, temperatury, swap, transfery dysku, ...)  i jeszcze krawaty wiąże i usuwa ciążę, ale jak powyłączać wszystko inne, to można go mieć za wskaźnik tych locków. Też głupota, ale co zrobić.

Następny problem jest, że mój komputer stoi teraz prawie za mną i żeby zobaczyć diodę od HDD to muszę się obrócić. Programu do pokazywania symulacji takiego LED-a na ekranie nie ma. W zastępstwie można najwyżej pokazywać wykresiki transferu do dysku, robi to również ten kombajn, co pokazuje locki. Dobre chociaż to.

A teraz Android Studio, to w zasadzie jeden wielki twit.  W sieci spotkałem wypowiedzi, że jest lepsze od Eclipsa, bo to co w Eclipsie szło ciężko, to tu idzie łatwo. Sorry, ale nie mogę tego potwierdzić. Zgoda, ono ma dobre chęci i chce na każdym kroku ułatwić, podpowiedzieć i zapobiec błędom. Tyle że skutek jest taki, że żeby zrobić całkiem podstawowe rzeczy to trzeba program wykiwać robiąc je na boku, w czym innym. Na przykład:

  • Jak chcieć założyć testy, czy to jUnitowe, czy na urządzeniu, trzeba umieścić je w bardzo konkretnych katalogach. I tych katalogów NIE DA się utworzyć w GUI Android Studio! Trzeba zrobić to normalnie, na dysku, czy to w CLI, czy w jakimś file managerze, ale nie w Android Studio!
  • Jeszcze gorzej: Nawet jak te katalogi utworzyć, to ich w Android Studio nie widać, dopóki nie ma w nich jakiegoś pliku! Czyli trzeba utworzyć tam jakiś plik, nawet pusty, dowolnym narzędziem, dopiero potem da się cokolwiek z tymi katalogami zrobić! To już nie Twit of the Year, to Twit of the Century!
  • Menu kontekstowe pozwala na utworzenie najmniej pięćdziesięciu różnych klas obiektów, ale nie tych, które są potrzebne - na przykład absolutnie podstawowe pliki build.gradle. I znowu trzeba je zakładać czymś innym.
  • AS reaguje standardowo tylko na klawisze kursora, a nie na te z bloku numerycznego. Można zamienić na te z bloku numerycznego (a ja zaczynałem od klawiatury AT i umiem tylko na tych), ale wtedy klawisze kursorowe są ignorowane. No mać, to aż takie trudne, żeby reagować na dwa różne?

Muszę przyznać, że chociaż import projektów Androidowych z Eclipsa działa dobrze. Ale dalej jest gorzej:

Chciałem przećwiczyć cały proces aż do Jenkinsa i ślicznych wykresów tendencji. Więc do zaimportowanego z Eclipse starego przykładu dorobiłem lokalne testy jUnitowe, takie byle by jeden był OK, a drugi failed, zacheckinowałem do Gita, puściłem build na Jenkinsie. No i wszystko cacy, tyle że protokołu z testów nie było. No i zaczęło się grzebanie. Okazuje się, że to dłuższa historia, pełna twitów. Sam muszę sobie to trochę uporządkować.

  • Jeżeli dobrze zrozumiałem, to Google przez długi czas uważało, że zautomatyzowane testy mają sens tylko na urządzeniu albo w emulacji. Jakiekolwiek unit testy na pececie były be  (facepalm!)
  • Ponieważ ludzie tak nie uważali (szacun), powstał niezależny framework do testowania na pececie zwany Robolectric.
  • Niedawno Google trochę pomroczność przeszła i zaakceptowali i wprowadzili do struktury projektu lokalne testy jUnitowe. Niestety, jednocześnie coś się pozmieniało i z Robolektrikiem są jakieś problemy (chyba na podobnej zasadzie jak z Eclipsem, to pewnie wykańczanie konkurencji).
  • Problem z raportami z jUnita polega na tym, że w Eclipsie raporty robił specjalny task Anta, którego nie zrobiono w Gradlu dla Androida.
  • W Gradlu można by ustawić generację raportu jUnita, ale tylko dla kawałka czysto jUnitowego. Ustawienie jUnit gryzie się z ustawieniem Android i nie da się ich użyć jednocześnie.
  • Podejrzewam, że dałoby się zrobić osobny build.gradle w katalogu testów lokalnych i tam ustawić że to jUnit, ale jeszcze jestem słaby w Gradlu i będę musiał trochę popróbować.

Przyznacie chyba, że testy automatyczne nie pozostawiające po sobie protokołu są jakieś takie nie ten tego...

 Ale teraz wyśmieję każdego, kto powie że Google zatrudnia świetnych programistów.

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

Dotyczy: ,

Kategorie:Programowanie

Komentarze: (17)

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

Komentarze: (24)

Ale Meksyk tutaj jest

Ostatnio mam mnóstwo zajęć i nie dochodzę do pisania notek, a tyle miałbym do opowiedzenia. Ale spróbuję, może się uda dociągnąć notkę do końca w rozsądnym czasie. Dziś o podróży do Meksyku, zanim wszystko zapomnę.

W notce pisanej on location twierdziłem, że Meksyk jest jak Polska około 1995. Niedawno chciałem coś na temat Meksyku sprawdzić w Wikipedii i zauważyłem podany tam dochód narodowy brutto na mieszkańca. Poszedłem tym tropem i porównałem go z tym samym parametrem dla Polski. Teraz Polska leży oczywiście znacznie wyżej, ale z danych historycznych wyszło mi, że tyle co ma Meksyk teraz było właśnie gdzieś około połowy lat dziewięćdziesiątych. Jakie to proste.

Zacznijmy od podróży:

  • Na lotnisku we Frankfurcie przy kontroli zapomniałem zdjąć zegarka (mocno metalowego). Zapoznałem się dzięki temu z takim dużym, cylindrycznym skanerem na człowieka. Działa - na ekranie pojawiła się moja sylwetka z zaznaczonym lewym nadgarstkiem.
  • Do Mexico City leciałem Lufthansą, 747-800. Miałem miejsce przy oknie, ale w zasadzie nie było potrzebne - na monitorku można było wybrać sobie obraz z kamery z przodu samolotu (sensowne tylko przy kołowaniu) albo widok w dół. Mała rzecz, a cieszy.
Cień samolotu

Cień samolotu

  • Z Mexico City do Guadalajary leciałem linią Aeromexico - całkiem normalny lot, nic do opowiadania.
Mexico City by night

Mexico City by night

  • Kontrole w Meksyku były najdokładniejsze - elektronikę kazali układać w jednej warstwie i sprawdzali o wiele bardziej niż gdzie indziej. Za to w USA kazali wszystko z kieszeni włożyć do plecaka i luzacko skanowali wszystko na raz na kupie.
  • W Meksyku ze względu na mafie taksówkarskie, na lotnisku można kupić bilety na taksówkę. Mówi się dokąd, płaci w kasie, dostaje bilet, daje się go taksówkarzowi i nie zostaje się orżniętym. Tyle że mi szefostwo zorganizowało jakiegoś pracownika który po mnie przyjechał, a po przywiezieniu do hotelu powiedział że zwyczajowo się takiemu płaci, tyle a tyle. Może nie było specjalnie drogo, z grubsza tyle co za Ubera, tyle że bez rachunku. To już bym wolał ten bilet na taksówkę.
  • Powrót miałem United przez Houston. Straszne sknery na tym krótkim locie - przy każdym ekraniku był czytnik do kart płatniczych, nawet żeby oglądać mapę trzeba było zapłacić. Przy check-inie online do wyboru pokazywały się tylko miejsca za dopłatą. Dałem spokój z online i dobrze zrobiłem - dostałem bez dopłaty miejsce przy oknie, po stronie odsłonecznej.
Meksyk z góry

Meksyk z góry

  • Przy pasie w Guadalajarze stoją stare, złomowane samoloty. Ale na muzeum techniki jeszcze za mało.
Złom na lotnisku w Guadalajarze

Złom na lotnisku w Guadalajarze

  • W Houston zarezerwowali mi połączenie z czasem przesiadki około 2 godzin. No to było knapp - odstałem te krótsze kolejki, nie musiałem pobierać i zdawać bagażu, a dotarłem do gejta na dziesięć minut przed boardingiem. Nawet nie zdążyłem zajrzeć do kiosku z gazetami. Na drugi raz - jeżeli będzie drugi raz, bo aż tak się do tego nie palę - muszą dać więcej czasu. Może nawet tyle, żeby zdążyć jeszcze zobaczyć rakiety? Tym by mnie mogli przekonać do powtórzenia akcji.
  • Z Houston do Frankfurtu leciałem też United, Dreamlinerem. Taki był niby ładny, amerykański, ale kamer do wyglądania na zewnątrz nie miał. Okienka nie były zasłaniane mechaniczną zasłonką, tylko przyciemniane elektrycznie i problem jest taki, że rano nikomu się nie chce przełączyć na przezroczysto (bo i bez tego coś tam widać) i ze środkowego rzędu nawet nie da się powiedzieć czy już jest dzień, czy jeszcze nie. To już lepsze były te zasuwki. I jeszcze: przy każdym siedzeniu są gniazdka USB i 110V w standardzie amerykańskim, ale tak umieszczone, że żeby trafić w gniazdko wtyczką sieciową to chyba trzeba by się położyć na podłodze, bo inaczej nie widać gdzie wkładać i trafia się w te gniazda USB. Po prostu katastrofalne.

Teraz trochę wrażeń z Meksyku:

  • Toalety to oni mają w systemie amerykańskim. Widziałem kiedyś kawałek lets-playa z Simsami i dziwiło mnie, dlaczego tam co chwilę ktoś wyciera podłogę w łazience. Teraz już wiem dlaczego - te muszle się po prostu zapychają. Tam w Meksyku koło każdej muszli stoi wiadro, do którego wrzuca się zużyty papier toaletowy, żeby się muszla nie zapychała. Nawet w firmie tak jest, tyle że w firmie mają automatyczne spłukiwanie minimalną ilością wody.
Meksykańska toaleta

Meksykańska toaleta

  • Również w firmie krany w umywalkach nie leją wody jak europejskie, tylko rozpylają ją w delikatną mgiełkę. Z drugiej strony trudno się dziwić - bardzo sucho tam jest, wodę trzeba oszczędzać.
  • Liczniki prądu są ogólnodostępne, na zewnątrz posesji. Podobno to dlatego, że przy problemach z płatnością po prostu wymontowuje się licznik bez konieczności wchodzenia na teren prywatny.
Licznik energii na ulicy

Licznik energii na ulicy

  • Chodząc po mieście zobaczyłem jak układają tam instalację wodną: Mieli wyskrobaną w ziemi bruzdę, głęboką na jakieś pięć centymetrów, układali w niej rurkę miedzianą i przysypywali ziemią. U nas by nie działało, u nas bywa jeszcze mróz. W podobnie uproszczony (w porównaniu z europejskim) sposób układali drogę.
  • Główne ulice zorganizowane są tak, że na środku są po dwa pasy w każdą stronę, dalej po obu stronach oddzielenie i znowu po dwa pasy. Skręcanie w boczne ulice działa z tych zewnętrznych, przejazdy między pasami zewnętrznymi i wewnętrznymi tylko co pewien czas. Oznakowanie poziome jest daleko nie wszędzie. Wszyscy ciągle skaczą między pasami wewnętrznymi a zewnętrznymi, co jeszcze powiększa wrażenie chaosu w ruchu drogowym.
  • Na skrzyżowaniach światła dla samochodów umieszczone są za skrzyżowaniem, a świateł dla pieszych nie ma wcale, trzeba się orientować na światła dla samochodów. Ale w ogóle ruch pieszy był bardzo mały, jak na miasto na półtora miliona w niezbyt bogatym kraju.
  • W supermarketach mieli różne ciekawe ciastka, ale żadnych torebek czy czegoś takiego, a zapytać nie umiałem bo nie hablam wcale. Dopiero w firmie mi wyjaśnili, że gdzieś tam muszą leżeć metalowe tace i szczypce, bierzesz taki set, kładziesz na tacy ciastka i idziesz z tym do pani na stoisku, a ona pakuje do torebek i przyczepia ceny.
  • Na samoobsługowym stoisku z wędlinami zobaczyłem kiełbaski "Salchichas estilo Polaco" no i musiałem spróbować. Były to parówki, nawet nie najgorsze, zrobione w USA, co wiele wyjaśnia.
  • Koledzy zachwalali meksykańskie kakao, ale nie takie w proszku. Sprzedają oni takie duże "pastylki" kakao z cukrem, jedną pastylkę rozpuszcza się w litrze gorącego mleka. Kupiłem parę wariantów, synowi bardzo smakowało (oprócz tych słodzonych stewią, w ogóle sporo używają tam stewii)
  • Chciałem spróbować zjeść coś małego, meksykańskiego po drodze, w jakimś centrum handlowym. Ze trzydzieści stoisk, ale głównie nie miejscowe - sandwicze, słodkie, pizza, chińskie... Za czwartym obejściem zdecydowałem się na coś takosowego (głównie dlatego że były zdjęcia i mogłem pokazać palcem). Oczywiście nie mówili po angielsku, ja na wszystkie pytania "czy dodać..." odpowiadałem "si". Problem powstał przy napoju. Pokazali cztery słoje, zawartość trzech nie przypominała niczego, a w czwartym pływały plasterki świeżego ogórka. Wybrałem więc czwarty, a na pytanie "czy dodać..." odpowiedziałem "no". Napój okazał się wodą o smaku ogórkowym, a to czego nie chciałem to prawdopodobnie była sól. A na stolikach soli nie było. Tak to jest jak się miejscowego języka nie umie, a miejscowi nie umieją we wspólnym.
  • W centrum handlowym był sklep zoologiczny i trochę mnie zaszokowało że w klatkach mieli psy, również szczeniaki. No mać, taki szczeniak potrzymany przez kilka tygodni w ciasnej klatce musi mieć potem problemy z socjalizacją!
Szczeniaki w sklepie zoologicznym

Szczeniaki w sklepie zoologicznym

  • Większość ich słodyczy to cukier z cukrem posypany cukrem i obtoczony w cukrze (próbowałem już wcześniej, bo co chwilę ktoś przywoził), ale mają też ciekawsze rzeczy, w rodzaju suszonego przecieru z miąższu jakichś owoców, przyprawionego chili. To jest niezłe, ale bardzo intensywne. Zaleta jest taka, że nie da się tym obżerać, to można jeść tylko powoli i nie za dużo.
  • Meksykańska czekolada jest nieco inna niż europejska. Nie znam różnic technologicznych, ale jest inna.
  • Hotel był naprawdę dobry (sieci Riu) tylko, cholera, oni mają taki system pościeli jak we Francji. Znaczy dwa prześcieradła i koc. Prześcieradła miały brzegi włożone artystycznie i głęboko pod materac, a koce leżały w szafie zapakowane do pojemnika. Żeby ułożyć sobie to wszystko w sposób nadający się do spania trzeba się było cokolwiek narobić, a następnego dnia pokojówka układała wszystko znowu tak jak na początku i chowała koc do szafy. No szlag by ich trafił, masa nikomu niepotrzebnej roboty dla obu stron.
  • Śniadania hotelowe były rewelacyjne. Kosztowały co prawda kilkanaście euro, ale jedzenie było jakościowe a do wyboru było tyle, i na ciepło, i na zimno, i owoców, i ciast, i napojów, i t.d., że przez ten ponad tydzień nie zdążyłem nawet wszystkiego spróbować. Jedno mi się tylko nie podobało - oni tam w Meksyku używają do niektórych potraw jakiejś takiej przyprawy, która smakuje jak rozpuszczalnik (przynajmniej ja ją tak odbieram) i musiałem ostrożnie próbować, najpierw nie za dużo, żeby się nie okazało że tego akurat nie jestem w stanie jeść. Tak się obżerałem na śniadanie, że nie miałem ochoty nie tylko na obiad, ale często nawet na kolację.
  • Telewizja meksykańska beznadziejna totalnie, powiedziałbym że nawet gorsza niż w Polsce a.d. 1995. Oglądałem głównie US-amerykańskie kanały informacyjne, ale oni też przynudzali.
  • Nie ma tam wróbli i wron, ale są podobne, miejscowe zamienniki. Nawet lepsze, bo nie tak hałaśliwe.
Meksykański zamiennik wróbla

Meksykański zamiennik wróbla

Meksykański zamiennik wrony

Meksykański zamiennik wrony

  • Dzień i noc prawie równo po 12 godzin to nie jest to, strefa umiarkowana rulez.
  • Gringom odradzają jeżdżenie taksówkami, jeździ się Uberem. Kierowcy bywają zaskakujący, raz na przykład jechaliśmy z facetem w garniturze i słuchającym muzyki klasycznej. Najczęstsze skojarzenie z Niemcami które obserwowaliśmy u Uberowców to Allemania - Rammstein! Serio, paru takich sam widziałem, a wszyscy opowiadali że z takimi się zetknęli nie raz. To jest dopiero rozpoznawalność marki. W samochodzie jednego z tamtejszych programistów, który raz odwoził mnie do hotelu leciał Blind Guardian, a on sam twierdził że akurat wszystkie jego ulubione zespoły są niemieckie.
  • Raz wracaliśmy Uberem z firmy z kolegą mówiącym nie najgorzej po hiszpańsku, jedynym który lubi tam w Meksyku siedzieć (bo jest młodym, przystojnym singlem, mieszka tam w najlepszym hotelu i wyrywa najlepsze dziewczyny). Kierowcy tak się dobrze z nim rozmawiało, że nadłożył kilka kilometrów (w Uberze nie zmienia to opłaty za przejazd). Temu Niemcy kojarzyły się (oprócz piłkarzy) z Hitlerem, ale wbrew pozorom było to u niego skojarzenie pozytywne. Rozmowa potoczyła się w dziwnym kierunku (mimo że nie hablam, rozumiałem mniej więcej o czym mowa). Wysiedliśmy zdegustowani.
  • W mieście na półtora miliona nie znalazłem ani jednego sklepu z pamiątkami. No ale może to dlatego, że w tym wielkim mieście w ogóle niewiele do zobaczenia jest, tylko katedra, zabytków tyle co kot napłakał, a muzea całe trzy mniej więcej, z czego żadne po opisie mnie nie zachęciło.
Katedra w Guadalajarze

Katedra w Guadalajarze

  • Za to na lotnisku, w strefie wolnocłowej tyle sklepów z pamiątkami i wyrobami regionalnymi, ile jeszcze w takim miejscu nie widziałem. Kupiłem pocztówki i chciałem wysłać, ale się okazało że tam się nie da kupić znaczka pocztowego. Pytałem w wielu sklepikach, ale wszyscy mówili że nie ma (o ile w ogóle znali jakieś słowa po angielsku, a przecież w takim miejscu to by się jednak przydało). Pocztówki musiałem wysłać z Niemiec.
  • Z ciekawostek: w Guadalajarze w 1992 pewnego dnia przez sześć godzin wybuchała kanalizacja. Rzędu 500 ofiar śmiertelnych (dane bardzo różne, zależy gdzie przeczytać), 8 kilometrów ulic zniszczone, 15.000 ludzi straciło dach nad głową. Więcej TUTAJ (jest też po polsku, ale słabo przetłumaczone)

Podsumowanie: Ciekawe doświadczenie, raz można było polecieć, ale na powtórkę nie jestem bardzo chętny. Jeden z kolegów, skoro już tam był, to zrobił sobie dwutygodniowe wczasy (z rodziną), objechał dużą część Meksyku, pokazywał zdjęcia, ale też mnie aż tak bardzo nie zachęciły.

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

Dotyczy:

Kategorie:Ciekawostki, Warto zobaczyć

Komentarze: (14)

Jak to się robi w Niemczech: Lewicowe (?) psycholstwo

Niedawno blogokomentator red1grzeg zadał pytanie o AfD z niemieckiego punktu widzenia. To bardzo ciekawy temat i mam zamiar o tym napisać, ale teraz zacznę od drugiego (przynajmniej w deklaracjach) bieguna sceny politycznej.

Już ponad dziesięć lat temu WO miał na swoim blogu notkę w której wysnuwał tezę, że w Polsce psycholi przyciąga głównie prawica, a w innych krajach bywa inaczej. Przypomniało mi się to, gdy znowu w mojej skrzynce pocztowej znalazła się broszurka (no może broszurka to za dużo powiedziane, to zawsze ma objętość jednej-dwu kartek A4 zadrukowanych dwustronnie) sygnowana przez niejaki "Bund gegen Anpassung" ("Związek przeciw dopasowaniu"). Druki ktoś wtyka do wszystkich skrzynek pocztowych kilka razy do roku. A ja to próbuję czytać i mam z tymi tekstami stały problem - nic nie rozumiem.

Znaczy ja rozumiem wszystkie używane słowa, dobrze rozumiem gramatykę zdań, rozpoznaję źródła stylistyki i retoryki, rozumiem całe zdania, ale co do treści to mam naprzemiennie WTF i facepalm oburącz. Bo to jest tak:

Autor uważa się za lewicowca. Tak wygląda jego logo (napisy głoszą: "kontrola urodzeń", "skrócenie czasu pracy", "powszechna równość"):

 Bund gegen Anpassung - logo

Jego retoryka i inwektywy są lewackie w pierwotnym znaczeniu tego słowa. Ciągle jest o przebrzydłych kapitalistach, imperialistach, zwykłych pognębionych ludziach itd. Tyle że jest to napisane tak grafomańsko i egzaltowanie, że trudno wyłapać o co właściwe autorowi chodzi. Ja jak się mocno nie skupię, to odpadam zanim doczytam do końca akapitu.

Ale jak już doczytam, to zaraz mam mindfucka. Na przykład w ostatniej ulotce autor podziwia Trumpa (i to nie pierwszy raz) jako dobroczyńcę prostego ludu (WTF?) i przeciwstawia go złemu Sorosowi, który przecież dla "prawdziwej prawicy" jest synonimem wrednego lewaka finansującego komunizm. Lewicowość autora w konkretnych poglądach przejawia się głównie w krytykowaniu USA i generalnie świata zachodniego i bezkrytycznym wychwalaniu Rosji (WTF?). Jak ktoś uważa współczesną Rosję za lewicowy wzór do naśladowania to chyba musi mieć co najmniej trzydziestoletniego jetlaga i zasługuje najwyżej na facepalma.

Z tym że takie skrzywienie prezentuje nie tylko on. Podobnie widzi temat na przykład partia Die Linke. Ona ogólnie jest rzeczywiście mocno lewicowa i nawet czasem zastanawiam się czy na nią nie zagłosować, ale zaraz wyłazi im dziedzictwo SED (z którego przecież bezpośrednio się wywodzą), wygłaszają coś w stylu proradzieckiej propagandy jaką pamiętam ze studiów i chęć głosowania na nich zaraz mi przechodzi.

Teraz lekka dygresja. Mam tu we Frankfurcie dalekiego krewnego z pokolenia moich rodziców, który wyemigrował jeszcze w latach siedemdziesiątych. On uwielbia czytać o spiskach i podarował mi pewien czas temu popularną w Niemczech książkę o przyczynach tego wszystkiego, co dzieje się obecnie na Bliskim Wschodzie, Książka ma tytuł "Wer den Wind sät..." ("Kto sieje wiatr..."), napisał ją Michael Lüders, który niby ma się na temacie znać. Według przedmowy książka ma burzyć powszechnie utrwalony obraz że to wszystko przez tych wstrętnych Ruskich i opowiada historię ostatnich stu kilkudziesięciu lat tego regionu praktycznie wcale nie wspominając o Związku Radzieckim i Rosji. Jest tam tylko o tym, jak przebrzydli zachodni imperialiści ciągle się mieszali w wewnętrzne sprawy spokojnych, niezależnych i samorządnych krajów regionu (i Afganistanu też). Oj dana, dana, wszystko przez Reagana.

Michael Lüders - Wer den Wind sät

Michael Lüders - Wer den Wind sät

Znaczy ja nie przeczę że się mieszali, mieszali się jak cholera, ale opowiedzenie tego całkowicie pomijając rolę ZSRR jest taką samą manipulacją, jak zwalenie wszystkiego na Ruskich. I założę się, że wielu (zwłaszcza mniej oczytanych) czytelników nie zwróciło uwagi na przedmowę tylko wzięło tekst poważnie jako "ukrywaną, najprawdziwszą prawdę historyczną".

Wróćmy do naszego ulotkowego psychola: Podobnie było przy TTIP. On też jojczył nad TTIP, ale mindfuck mi zrobił gdy puścił ulotkę pod alarmującym tytułem "TTIP to przesądzona sprawa" jak już od dobrych kilku tygodni było dokładnie wiadomo, że nic z tego nie będzie. Czym zresztą nic się nie różnił od polskich politycznych psycholi głównie z obozu PiSowskiego. A wystarczyło się chociaż trochę tematem interesować żeby wiedzieć, że negocjacje w sprawie TTIP posuwały się w tempie ślimaczym, umowa miała mieć 17 rozdziałów, a przez wiele lat negocjacji do samego końca nie udało się uzgodnić ani jednego z nich i cokolwiek do podpisania w ogóle nie istniało. Co nie przeszkadzało oszołomom wszelkiej maści krzyczeć "UNIA ODDAJE SIĘ AMERYKANOM W NIEWOLĘ!!!ONE!". No mać, mać, mać, jak by tak bardzo chciała się oddać to umowę podpisano by w try miga, problem polegał na tym, że Amerykanie rzeczywiście chcieli wziąć wszystko co możliwe, ale Unia wcale nie była skłonna im tego dać. Ja rozumiem, że polscy psychole nie mają pojęcia o niemieckiej polityce i mogą wypisywać głupoty w rodzaju "Merkel musi szybko podpisać TTIP bo Deutsche Bank ma straty i zaraz padnie" (autentyczny tekst, który widziałem w paru miejscach) - skąd biedacy mają wiedzieć że Deutsche Bank mimo Deutsche w nazwie to firma prywatna (niemiecki bank emisyjny nazywa się Deutsche Bundesbank, ale jaki świr by na to wpadł?), i że Merkel ma rząd koalicyjny a za negocjacje TTIP odpowiedzialni byli ministrowie z SPD, bez nich i tak nic by nie podpisała. No ale mieszkając w Niemczech i interesując się chociaż trochę polityką trudno było nie zauważyć jak Steinmeier (akurat najbardziej kompetentny w temacie, bo odpowiedzialny za negocjacje TTIP minister spraw zagranicznych z SPD) oznajmił że TTIP jest martwy i za to publiczne stwierdzenie faktu mu się z różnych stron dostało. A ten świr od ulotek nie zauważył do tego stopnia, że ostatnio przypisał jedyną zasługę w nie dojściu TTIP do skutku Trumpowi.

Z kolejnych jego poglądów to on jest (jeżeli dobrze wyczytuję z jego mętnych figur retorycznych)  generalnie przeciw przyjmowaniu uchodźców. Jakoś nie za bardzo pasuje to do wrażliwości lewicowej. Stałym jego tematem jest "Lügenpresse" (czyli że "prasa kłamie") - w zasadzie z tymi dwiema rzeczami mógłby od razu przystąpić do Pegidy a nawet AfD. Od razu wyjaśnię temat "Lügenpresse" - z pewnością do mediów niemieckich można mieć takie czy inne zastrzeżenia, ale gdzie jest ten ideał? Pluralizm mediów w Niemczech z całą pewnością istnieje, a rozdział mediów publicznych od państwa działa tak dobrze, jak chyba nigdzie na świecie. Jak ktoś uważa akurat media niemieckie za generalnie "Lügenpresse" to musi nie mieć najbledszego pojęcia o innych krajach. #problemypierwszegoświata.

Jeszcze można by tak długo. Ale trzeba przyznać, że ten dysonans między retoryką a poglądami jest fascynujący, nazbierałem już kilkanaście ulotek "Bund gegen Anpassung", bo takiego kuriozum nie będę wyrzucał. A autor musi też znajdować sympatyków, bo jednak drukowanie sporych nakładów i rozprowadzanie ich wymaga trochę grosza, a nie sądzę żeby pokrywał to wszystko z własnej kieszeni.

Poszukałem kto właściwie za tym wszystkim stoi: Autorem ulotek jest niejaki Fritz Erik Hoevels, mieszkający tu, we Frankfurcie. Jest on psychoanalitykiem i publicystą, oraz przewodzi organizacji pod nazwą "Bund gegen Anpassung". Hoevels na studiach był zafascynowany lewicą, zapisał się do Sozialistische Deutsche Studentenbund (Socjalistycznego Związku Studentów Niemieckich), organizacji początkowo bliskiej SPD, która potem zdryfowała daleko na lewo. Hoevels stał się aktywnym działaczem, ale potem coś swoimi akcjami narozrabiał (nie znam szczegółów). Jako swoich idoli podaje on Marksa, Engelsa (to jeszcze całkiem spoko), Lenina i Trockiego (tu wskazówka wykrywacza świrów wychyla się już znacząco), oraz Freuda i Reicha, tego od orgonów (wskazówka wykrywacza świrów dochodzi do oporu mechanicznego). Do lewicowego zestawu idoli nie tylko mi nie pasują jego poglądy - przez wiele źródeł jest od klasyfikowany jako "skrajna prawica" + "sekta". On sam przed wyborami kilka lat temu zalecał swoim zwolennikom głosowanie na NPD (czyli faszystów) albo Piratów, zestaw przedziwny.

Autor ma swoją stronę w sieci, podstrona "O autorze" jest nawet przetłumaczona na polski. Ciekawe kto tłumaczył, bo tłumaczenie bardzo dobrze oddaje kwiecisto-mętny styl oryginału.

Jakie z tego wnioski? Po pierwsze WO ma rację, że prawica nie ma monopolu na psycholi. W Polsce poglądy lewicowe zostały spalone przez okres realnego socjalizmu, gdzie indziej tak nie jest.

Po drugie: Psychol to psychol. Czy przyznaje się do prawicy, czy do lewicy, poglądy wychodzą bardzo zbliżone.

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

Dotyczy: , ,

Kategorie:Jak to się robi w Niemczech?

Komentarze: (13)

Warto zobaczyć: Muzeum historii medycyny, Charite Berlin

Mnóstwo miejsc które warto zobaczyć czeka na opisanie, a ja ciągle mam zbyt wiele zajęć żeby do tego dojść. Ale to, co widziałem ostatnio było tak mocne, że muszę się podzielić.

W ostatnich tygodniach niemiecka telewizja publiczna pokazała premierowo nowy, sześcioodcinkowy serial o lekarzach z berlińskiego szpitala Charite. Nazwa ta chyba nie jest większości czytelników z Polski znana, ale główni bohaterowie z pewnością tak. Są to słynny patolog Rudolf Virchof, i trzej laureaci Nagrody Nobla: Robert Koch, Paul Ehrlich i Emil von Behring. Serial całkiem nie najgorszy, oczywiście nie jest to rzecz naukowa, tylko popularna historyjka na faktach i tle, ale da się oglądać a i istotne fakty się zgadzają. Tu trailer:

A poczytując w sieci informacje uzupełniające znalazłem, że w szpitalu Charite jest muzeum. Wracając z kraju zajechaliśmy więc. No i okazało się że muzeum jest po prostu zajebiste. Zaplanowałem że zejdzie na nie godzinka, a po wyjściu okazało się, że minęły ponad trzy - to chyba najlepsza rekomendacja. Tak naprawdę to za dużo wrażeń na jeden raz, należałoby pójść tam parę razy. Jedyny problem jest taki, że absolutnie nie pozwalają tam robić zdjęć i notka będzie opatrzona tylko dwoma zdjęciami budynków z zewnątrz.

Charite, Berlin

Charite, Berlin

Muzeum mieści się w budynku, w którym wykładał Virchof, i w którym miał on swoją kolekcję preparatów. Sala w której wykładał zachowała się w stanie ruiny - w końcu wojny budynek został częściowo zniszczony, potem odbudowano nad salą strop (tyle że z betonu), ale w sali zostało tylko to, co było z cegły.

Zwiedzanie zaczyna się od wystawy okresowej, teraz jest to wystawa poświęcona kryminalistyce. Bardzo interesująca, wszystkie aspekty szukania, zabezpieczania i analizy śladów przestępstw są dokładnie pokazane i omówione. Może to być szczególnie wartościowe dla miłośników kryminałów.

Wystawa stała zaczyna się od historii kolekcjonowania preparatów patologicznych, wywiedziona ona jest z gabinetów osobliwości, którymi chwalili się wszyscy szanujący się (i odpowiednio bogaci) szlachcice. Wywód prowadzi oczywiście do kolekcji Vichofa, która jest trzonem najciekawszej części ekspozycji.

Virchow był jednym z najbardziej znanych patologów tamtych czasów, jego mottem było "Kein Tag ohne Preparat" (z grubsza "Dzień bez preparatu to dzień stracony"). Nagromadził on mnóstwo zadziwiających preparatów, nierzadko naprawdę szokujących. UWAGA: Rzecz nie jest dla delikatesów! Na przykład płód, na oko 7-8 miesięczny z jednym okiem pośrodku czoła - regularny cyklop - musi zrobić wrażenie na nieprzygotowanym fachowo obserwatorze, nawet dość odpornym. Wyraźnie odradzają (odradzają - nie mylić z "zakazują") chodzenie tam z dziećmi poniżej 16 lat. Oczywiście wszystko jest do decyzji rodziców, widziałem tam chłopaka na oko 12 letniego, radził sobie bez problemu (ale może ma rodziców chirurgów, albo sporo grał w Brutal Doom).

Oprócz tego jest tam jeszcze ciekawa kolekcja narzędzi i przyrządów medycznych z różnych okresów, sporo o historii szpitala oraz szpitalnictwa w ogólności. Na okrasę jest jeszcze trochę tablic związanych z serialem. Ale od razu wyjaśnienie co do serialu: Nie był on kręcony "on location" w Berlinie, a głównie w Pradze, bo tam wnętrza zachowały się w stanie bliskim tego sprzed około stu lat.

Charite, Berlin

Charite, Berlin

Po obejrzeniu kolekcji Virchofa naszły mnie przemyślenia (nie żeby specjalnie nowe). Syn poznał ostatnio we Frankfurcie jednego studenta pierwszego roku biologii, który jest zwolennikiem Inteligentnego Projektu. Mam nadzieję że nie dotrwa on końca studiów jako fan ID, znaczy albo go nauczą faktów, albo wywalą. Ale uważam że każdy wyznawca "Genialnego, Inteligentnego Projektanta" powinien pooglądać sobie taką kolekcję. Przecież gdyby ktoś w przemyśle zaprojektował produkt czy proces robiący tak poważne problemy i z tak wysoką stopą błędów, to szybko wyleciałby z roboty. Naprawdę ktoś chce wierzyć w geniusz takiego fuszera? I to będąc przedstawicielem gatunku, u którego jedną z najczęstszych przyczyn śmierci jest przytkanie takiej jednej rurki? Jeżeli już naprawdę upierać się przy osobowym stwórcy, to o wiele łatwiej i niesprzeczniej jest wyobrazić sobie "Wielkiego Zegarmistrza" konstruującego mechanizm (ewolucyjny) i puszczającego go w ruch. Bo wtedy co złego, to nie On, to wygenerował biegnący proces, a nie "Projektant". Oczywiście nie rozwiązuje to ostatecznie problemu niedostatecznej fachowości "Zegarmistrza" tworzącego zawodny mechanizm, tylko odsuwa go z centrum uwagi - ale to inny temat.

Szpital leży w dawnej części wschodniej, bardzo blisko niegdysiejszego muru. Z parkowaniem w okolicy jest ciężko, polecam parkhaus, zwłaszcza że trudno ocenić ile czasu będzie potrzebne na zwiedzanie (z pewnością bardzo zależy to od własnej odporności i zainteresowania tematem).

 Adres:

Berliner Medizinhistorisches Museum

Charitépl. 1, 10117 Berlin - tak jest podane w sieci, ale to adres bramy głównej szpitala, który spory jest. Muzeum mieści się w drugim końcu terenu, wewnętrzne ulice mają swoje nazwy i adres wewnętrzny to Virchofweg 18

Otwarte:

  • Wtorek, czwartek, piątek, niedziela - 10-17
  • Środa i sobota 10-19
  • W poniedziałki nieczynne

Wstęp:

  • Bilet normalny 9 EUR
  • Bilet ulgowy 4 EUR
-----------------------------------------------------------------------------------------------------------------------

Dotyczy: , ,

Kategorie:Warto zobaczyć

Komentarze: (5)

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

Komentarze: (10)

Meksyk czyli podroż w przeszłość. Tak ze dwadzieścia lat wstecz

Notkę piszę z Meksyku, bo pracodawca mnie wysłał. To znaczy przez dłuższy czas odmawiałem, ale niedawno rzuciłem że jak dobrze zapłacą to możemy porozmawiać żeby tak na jakiś tydzień. No i po dwóch dniach przyszło szefostwo i zaproponowało że zapłacą za każda godzinę od wejścia do samolotu we Frankfurcie do wyjścia po powrocie do Frankfurtu stawkę projektową plus diety, plus najlepszy, pięciogwiazdkowy hotel w mieście docelowym. No za ponad czterokrotną stawkę na rękę to właściwie czemu nie? (była środa) Tak? To pakuj się, w następną sobotę lecisz.

No tylko jest mały problem. Paszport w kieszeni mam tylko polski, przesiadka w USA nie wchodzi w rachubę, nawet z lotem nad USA mogą być problemy. Jest jeszcze tylko jedna szansa: Obywatelstwo niemieckie dostałem już w połowie grudnia (może kiedyś dojdę do napisania notki o szczegółach), tyle że nie zdążyłem jeszcze złożyć wniosku o paszport. Ale jest tryb ekspresowy, 3 dni robocze, za dodatkowe około 30 euro.

No i tą metodą mam już w kieszeni paszport niemiecki, za który zapłaci pracodawca, super sprawa. Ale wróćmy do Meksyku.

Przyleciałem z soboty na niedziele, i w niedziele, dla walki z jetlagiem (i oczywiście również z wrodzonej ciekawości) wybrałem się na naprawdę długą wycieczkę pieszą po mieście. Poczytałem wcześniej w sieci na temat bezpieczeństwa, no i bywalcy twierdzili że nie jest źle, lepiej niż w podobnej wielkości miastach w USA. Byle nie epatować bogactwem i nie szukać guza. No i wycieczki zrobiło mi się dobre 25 kilometrów, krokomierz naliczył ponad 33.ooo kroków. I im dłużej włóczyłem się po mieście (dużym - to Guadalajara, drugie w tym kraju) tym bardziej wszystko wydawało mi się znajome. Takie dejavu. Ja to wszystko już widziałem, tylko marki samochodów były inne i ludzie mniej opaleni. Następnego dnia zbetryzowani do szpiku kości Bawarczycy od klienta na trzy litery pierwsza B byli przerażeni, no ale betryzacja robi swoje. Nie jestem straceńcem, ja też nie pójdę wszędzie, nie ma co przesadzać, trafiłem na przykład na slums, ale nie pchałem się przez środek. Jakieś zdjęcia wrzucę jak wrócę, tu nie mam narzędzi. Przy okazji: Sorry za ewentualne problemy z polskimi literami - ta akcja była taka szybka że nie zdążyłem zainstalować mojego drivera do polskich znaków na klawiaturze niemieckiej.

A skąd dejavu? Dokładnie tak jak ten Meksyk wyglądała Polska około 1995, przed wstąpieniem do Unii. I tak:

  • Ulice i chodniki tak samo dziurawe
  • Ruch uliczny tak samo mało cywilizowany
  • Śmieci i ogólna bylejakość na każdym kroku
  • sporo budynków porzuconych w trakcie budowy
  • ogólne olewanie przepisów i zasad
  • w co drugim domku jakiś biznesik, wyglądający na bardzo wąsato-szemrany
  • grodzone osiedla (chociaż grodzenia domków drutem kolczastym jakoś z Polski nie pamiętam)
  • mafie taksówkowe
  • mnóstwo oszustów i naciągaczy
  • nachalne bandy wyciągające pieniądze za mycie szyb na skrzyżowaniach
  • lokaliki i stoiska z jedzeniem w których zdecydowanie bym nie zjadł z przyczyn higienicznych
  • ludzie na ulicach smutni i skwaszeni
  • EDIT: sklepy wielobranżowe "mydło i powidło", od słodyczy, przez ubrania, jakieś pralki (w rodzaju Frani tylko większe), telefony, komputery do skuterów, i to wszystko na 100-200 metrów kwadrat
  • itd. itd.

Czytelnikom nie pamiętającym tamtych czasów, czy to ze względu na wiek, czy na amnezję, chciałbym krótko przypomnieć, dlaczego Polska wygląda dziś jednak trochę lepiej niż Meksyk: Jedyną przyczyną tego było wstąpienie do Unii. To tylko dzięki kasie z Unii oraz przyjęciu unijnego ustawodawstwa wiele rzeczy się zmieniło.  Bez kasy i nacisku na pewne zasady i wartości kraj szybko wróci do stanu meksykańskiego. Co polecam rozwadze.

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

Dotyczy: ,

Kategorie:Ciekawostki

Komentarze: (10)

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

Komentarze: (7)

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

Komentarze: (8)

Strona 1 z 5312345...1020...Koniec