środa, 14 września 2022

Trip to Roztocze

So we went to Roztocze region, which is at the south-east of Poland. We stayed near Zwierzyniec--small town next to also small but much more famous Szczebrzeszyn. Szczebrzeszyn is peculiar because it contains `sz' (twice) `cz' and `rz' sounds, which are extremely difficult to pronounce for foreigners. So Szczebrzeszyn is near-impossible to pronounce for strangers. There is also a short poem by Jan Brzechwa (for children so every Poles knows it) which starts from ``W Szczebrzeszynie chrząszcz brzmi w trzcinie'' (cf short video)

We arrived to Szczebrzeszyn about 18:00 and made a quick 1 hour tour. Then we went to Zwierzyniec or to be precise to Sochy--a village 3km away from Zwierzyniec. Next day we walked around Sochy/Zwierzyniec and went by car to another small town Józefów. In Wednesday we visited famous Nature reserve ``Cascades on Tanew River'' (cf https://roztocze.love/p4871) and similar reserve on river Sopot nearby. In Thursday we completed a kayak trip from Zwierzyniec do Szczebrzeszyn on river Wieprz. The best kayak trip ever.

In Friday we moved west to Sandomierz, a medium-sized city at the Vistula river (160 km from Cracow); It is an old town in the center of an interesting region. We stay there for two days. We returned home in Sunday about 18:00

Photo-track of our is here and the photos are available at my flickr account.

The weather was sunny and warm Monday--Friday and cloudy but (almost) no rain in Saturday. Perfect.

środa, 20 lipca 2022

Kamera Ghost XL

Normalne action cameras, takie jak słynny GoPro (którego nigdy nie miałem), to 1,5--2 godziny nagrywania jak wiadomo. Nawiasem zwykle producenci nie chwalą się tym parametrem. Że to mało, to są dwa wyjścia: 1) ładować i nagrywać jednocześnie; 2) kupić kamerą która ma większą baterię.

Wariant pierwszy nie zawsze jest możliwy, ale niektóre kamery to potrafią, np moja Xiaomi ale... Ale to jednak kłopot trzeba gdzieś powerbank przyczepić i kabel ciągnąć. Da się, ale niewygodnie (próbowałem)

Drugie rozwiązanie to kamera o dłuższym czasie nagrywania. W tym roku wreszcie kupiłem taką, która podobno jest pod tym względem najlepsza: Draft Ghost XL. Całe osiem (a nawet 9 wg producenta) godzin nagrywania. Wg recenzji internetowych, które studiowałem przed zakupem (na Amazonie) inne parametry ma średnie (w tym rozdzielczość) ale coś za coś. Poza tym IMO nagrywanie w 4K skutkuje ogromniastymi plikami--nie dla mnie zabawa albo przerost formy nad treścią. Nie mam ani sprzętu ani chęci ani czasu...

Kamerę kupiłem już w lutym w sklepie digital24.pl bo sprzedawali ją po atrakcyjnej cenie 624 PLN (teraz widzę, że kosztuje już 850). Przyszła a ja nie bardzo wiedziałem co dalej. Do Xiaomi miałem obudowę montowaną pod kierownicą (moim ulubionym punktem zaczepienia kamery) a tutaj kamera ma dziurę na śrubę + jakieś dziwne plastikowe uchwyty.

Wreszcie w czerwcu kupiłem na Allegro za 30 PLN dedykowany uchwyt. Uchwyt już na zdjęciu wydał się mocno toporny (innego nie było) a jak przyszedł to okazał się jeszcze gorszy niż na zdjęciu. Już nie pamiętam czemu, ale wtedy wreszcie zrobiłem generalny remanent swoich bambetli rowerowych i się okazało, że mam doskonały uchwyt kupiony już nie wiem do czego (i to jest problem--bo bym kupił drugi na drugi rower). Po prostu jest to obejma na rurę ze śrubą fotograficzną.

Że kamerę się nakręca (zamiast przykręcać kamerę do uchwytu śrubą) nie ma możliwości żeby się przypadkowo odkręciła i odpadła (co się zdarza jak uchwyt ma dziurę na śrubę, bo śruba jak to śruba--potrafi się odkręcić i jak człowiek nie sprawdza stanu śruby, to nieszczęście gotowe). Obsługa jednym guzikiem: dłuższe przytrzymanie włącza kamerę, co jest sygnalizowane głośnym dźwiękiem. Potem naciśnięcie tego samego klawisza uruchamia nagrywanie. Co też sygnalizuje głośny dźwięk. Z tyłu kamery jest mały ekran LCD. Jak jest zielony to znaczy że kamera się włączyła a jak pomarańczowy to że nagrywa. Doskonale to widać z pozycji siodła na rowerze nawet jak kamera jest pod kierownicą. Inne moje kamery miały ten feler, że trudno było ustalić jej stan: czy się włączyła i czy nagrywa. Niby też to było sygnalizowane dźwiękiem, ale cichym, który w ruchu ulicznym był skutecznie zagłuszany. Ekran LCD w kamerze Xiaomi -- nawet większy niż w Ghoście -- nie był widoczny z pozycji siodła. Do tego tło ekranu jest zawsze takie same, a stan kamery sygnalizują trudno widoczne (z pozycji siodła) napisy.

Generalnie obsługę Ghosta w ruchu uważam za rewelacyjną. Niezawodnie się włącza i nagrywa. Z moimi innymi kamerami było różnie. NB Ghost ma jeszcze inne przyciski do obsługi ale ja używam (na razie) tylko jednego...

Lista kontrolna moje Ghosta jest taka: po jeździe otwieram klapkę z gniazdem USB do ładowania kamery i kartą pamięci. Wsadzam wtyk i kamera się ładuje. Jak chcę przegrać film wyjmuję kartę. Mam dwie karty 64Gb która starcza tak mniej więcej na 8h oraz 128Gb. Nie odkręcam kamery, ale nie jest to przesadnie czasochłonne.

Ostatnia (zabawna) sprawa: fabrycznie kamera nagrywa -- nazwijmy to -- w trybie portret: obraz to wąski ale wysoki prostokąt. Ja bym wolał szeroki ale niski prostokąt. W tym celu trzeba przekręcić obiektyw. Jest to opisane w podręczniku i nawet na YT można film znaleźć demonstrujący przekręcenie obiektywu. No to kręcę i ni-chu-chu... Piszę do sklepu a oni, że w tym modelu się nie da. Ale dopisali: a skąd pan ma informację że się da?. Ja piszę: z podręcznika. Za chwilę odpowiedź, że faktycznie da się, tyle że za pierwszym razem może być ciężko. Skoro napisali że nie urwę, to spróbowałem znowu. I faktycznie dało się i faktycznie było bardzo ciężko i faktycznie wyglądało, że jak już się ten obiektyw ruszy to wtedy obraca się on lżej...

sobota, 16 lipca 2022

Nietransfobiczna piramida wieku

Niewątpliwie piramida wieku to rysunek okropnie transfobiczny. Statistics Canada rozwiązał ten problem.

Kto uważa się za kobietę jest liczony jako W, kto za mężczyznę jest liczony do M. Prosta sprawa. Dla statystyka liczy się dokument lub oświadczenie; a czy pytany ma fiuta albo brodę go (statystyka) nie obchodzi. Problem jednak jest z tymi co nie mogą się zdecydować:

Given that the non-binary population is small, data aggregation is necessary to protect the confidentiality of responses provided. Most 2021 Census information is disseminated using a two-category gender variable. In these cases, people in the category ,,non-binary persons'' are distributed in the other two gender categories and are denoted by the + symbol.

Przyznam że mocno niejasne. Ludzie niebinarni są distributed in the other two gender categories? Liczy się ich dwa razy? Albo zlicza do jakiś other two categories? Ale jakich... Mocno to mętne i żadnych other two tutaj nie widać (cf https://www12.statcan.gc.ca/census-recensement/2021/dp-pd/dv-vd/pyramid/index-en.htm) Zakładając więc, że liczy się takiego jednak dwa razy (raz jako kobietę a raz jako mężczyznę) mamy razem 36,991,985. W innym zestawieniu jest liczba ludności łącznie (https://www150.statcan.gc.ca/t1/tbl1/en/tv.action?pid=9810000101) 36,991,981. Różnica wynosi 4 osoby. To te persony binarne?

Tyle się narobić dla czegoś co jest 4 rzędy mniejsze od typowego błędu statystyczneg? Tylko ideologiczne zaślepienie może to wytłumaczyć...

czwartek, 23 czerwca 2022

Idioten aller Länder, vereinigt euch!

Tusk w swojej działalności wyróżnia się 100% jałowością, demagogią oraz bezczelnością (na tle Hołowni, K-Kamysza czy Czarzastego). Przykładem drożyzna -- na-tem-chwilę temat numer jeden. Jest drogo/winny jest PiS. Co konkretnie ten PiS źle zrobił nie wiadomo. Albo nieszczęsna Leszczyna, która musi dupę podcierać za szefa. Pieprzy szef jak połamany, że na przykład mieszkanie prawem albo, że da 20% podwyżki dla wszystkich urzędników, potem się Leszczyny w RFM pytają o szczegóły a ona: że po wyborach będzie (o mieszkaniach), albo że nie jest ekonomistką! (o podwyżce 20%.) I wychodzi na idiotkę, albo i nie -- dochodzimy bowiem do kluczowgo pytania.

Może strategia Tuska ma sens? Może mamy już tylu idiotów, że zero-programowość, 100% demagogia, strategia wszystkim-obiecam-wszystko przyciągnie odpowiednią ich liczbę, partia osiągnie wynik a demagog zostanie premierem? Czy też jednak nie i dziad się przeliczył? Zobaczymy najdalej za nieco mniej niż półtora roku.

Aktualizacja WP na nazwa.pl

Kolega DM używa wordpressa na nazwa.pl. Dostawca do czerwca kazał mu zmienić system z Ubuntu 16 na 20 udostępniając stosowny guziczek w panelu https://admin.nazwa.pl/. Po wciśnięciu guziczka z Ubuntu 20 wordpress przestał działać. Trzeba było czterech listów do dostawcy żeby uruchomić WP w Ubuntu 20. A w sumie chodziło o jeden wiersz w konfiguracji (chyba):

/** The name of the database for WordPress */
define('DB_NAME', 'danmarszal_test');
/** MySQL database username */
define("DB_USER", 'danmarszal_test');

W starym systemie nie było deklaracji DB_USER; nie było--to niepotrzebna pomyślałem; a góffno się okazało, że potrzebna i to wcale nie username tylko ma zawierać to samo co DB_NAME. Helpdesk nazwa.pl nie potrafił nam tego wytłumaczyć; ani nie było to jasno napisane w ich (beznadziejnej) dokumentacji.

Teraz dobrze by było zaktualizować WP, bo kolega używa jakiejś prehistorycznej wersji 4.9. Na szczęście jest zainstalowane wp-cli. Dla bezpieczeństwa połączyłem się z nazwa.pl przez sshfs; skopiowałem wsio do siebie i dopiero teraz:

wp core update 

Bezproblemowo zadziałało. Przejście na nowsze PHP znowu skończyło się błędem PHP. Ręcznie z panela WP uaktualniłem pluginy i wtedy aktualizacja PHP też się powiodła. Kolega ma teraz WP6+PHP8. Najnowsze.

Na przyszłość warto wypróbować full-upgrade za pomocą wp-cli, żeby nie klikać:

## najpierw eksport potem upgrade
wp db export && \
wp core update && wp plugin update --all &&\
wp core language update

plain LuaTeX

luaTeX to najlepsza wersja TeXa bo ma tę przewagę nad pdfTeXem, że natywnie używa Unicode + potrafi korzystać z fontów systemowych. Jak się używa LaTeXa, to na tym można zakończyć. Jak ktoś chce plain-TeX (czyli zapewne kiedyś używał MeXa), to potrzebuje jako minimum: format z polskimi regułami przenoszenia wyrazów, no i możliwość dołączania rysunków.

W luaTeXu robi się to następująco (TeXlive):

Należy odszukać plik etex.src (np. /usr/local/texlive/2022/texmf-dist/tex/luatex/hyph-utf8/etex.src). Plik ten powinien zawierać wiersz:

  \addlanguage {USenglish}{hyphen}{}{2}{3}%

Po tym wierszu należy dodać

\addlanguage{polish}{loadhyph-pl.tex}{}{2}{2}

Teraz należy wygenerować format:

  luatex -ini luatex.tex
  ## powstał plik luatex.fmt; który kopiuję
  ## do katalogu z innymi formatami

Polskie reguły są włączane poleceniem:

\uselanguage{polish}

Fonty można deklarować tak, jak w poniższym przykładzie, w którym zakładamy skład fontem ChaparralPro

\input luaotfload.sty
%% https://www.wfonts.com/font/chaparral-pro
%% Potrzebujemy `family name` ale ChaparralPro też działa (why?)
%% otfinfo -a FONT wypisze family name
\def\MainSFont{name:Chaparral Pro}
\font\rm = "\MainSFont:+tlig" at 9.9pt
\font\it = "\MainSFont/I:+tlig" at 9.9pt
\font\bf = "\MainSFont/B:+tlig" at 9.9pt
\font\bi = "\MainSFont/BI:+tlig" at 9.9pt
%% \bf włącza odmianę grubą \it kursywę jak to plainie...

Zwróćmy uwagę, że odmiana jest deklarowana jako /X po nazwie kroju; potem po dwukropku (opcjonalnie) deklaruje się font features. Jako minimum warto dodać tlig, co włączy ligatury TeXowe (takie jak -- zamiast myślnika.) Inne użyteczne features, to smcp oraz onum:

%% Caps/smallcaps
\font\sc = "\MainSFont:+tlig,+smcp" at 9.9pt
%% Old style numbers
\font\sco = "\MainSFont:+tlig,+smcp,+onum" at 9.9pt

Dołączanie rysunków/kolorowanie/obracanie:

%% zPlainowany LaTeXowy pakiet graphicx:
\input graphicx.tex
\includegraphics[width=.9\hsize]{plik.png}
%% zPlainowany LaTeXowy pakiet color:
\input color.tex
\textcolor{red}{bbb}  \colorbox{green}{one two}
%% obracanie:
\rotatebox{90}{\colorbox{blue}{\textcolor{yellow}{Stand with Ukraine}}}
%% skalowanie
%% x-przeskaluj na 40% \hsize
\resizebox{.4\hsize}{!}{Stand with Ukraine}
%% xy-przeskaluj na 40%
\resizebox{.4\hsize}{2cm}{Stand with Ukraine}
%% Powiększ oryginał 2 razy
\scalebox{2}{Stand with Ukraine}

No i tyle. Podstawowa funkcjonalność jest. Z MeXa zostały tylko wzorce przenoszenia. Reszta stała się zbędna, więc nie ma czegoś takiego jak luaMeX. Postęp jest nieubłaganyn nawet w świecie TeXa...

Kompletny mini-przykład

%% -*- coding: utf-8 -*-
%% należy kompilować luaTeXem
\input luaotfload.sty
\input graphicx.tex
\input color.tex
%%
\uselanguage{polish}
%%%
\def\MainSFont{Iwona}
\font\rm = "\MainSFont:+tlig;+onum" at 9.9pt
\font\it = "\MainSFont/I:+tlig;+onum" at 9.9pt
\font\bf = "\MainSFont/B:+tlig;+onum" at 9.9pt
\font\bi = "\MainSFont/BI:+tlig;+onum" at 9.9pt
%% Small caps
\font\sc = "\MainSFont:+tlig;+smcp" at 9.9pt
%% Old style numbers
\font\sco = "\MainSFont:+tlig;+smcp;+onum" at 9.9pt

\def\SwUA{\colorbox{blue}{\textcolor{yellow}{Stand with Ukraine}}}
\def\dig{0123--456---789}

\rightskip0pt plus 1fil
\nopagenumbers

\rm \SwUA \dig {\bf \SwUA \dig } {\it \SwUA \dig }

{\sc \SwUA \dig } vs {\sco \SwUA \dig }


\rotatebox{90}{\resizebox{.4\hsize}{!}{\SwUA}}

\scalebox{2}{\SwUA}
\bye

i wynik

UWAGA: uważny czytelnik zauważy, że nie do końca jest to co miało być (small caps zawsze jest z OldStyleNumbers i nie idzie tego wyłączyć), bo niektóre font features są ignorowane. Z fontem Chaparral jest jeszcze gorzej: nawet smcp jest ignorowane.

Żeby było śmieszniej po usunięciu \input luaotfload.sty i kompilacji xeTeXem jest OK. Dalsze testy można streścić następująco: niektóre fonty nie są poprawnie deklarowane; deklarowanie tych samych fontów w LaTeXu daje poprawne rezultaty (ale z użyciem fontspeca); przetwarzanie xeTeXem też daje poprawne rezultaty. Na moje coś jest spieprzone w plainowej wersji luaotfload, ale konkretnie co to nie ustaliłem albo fontspec jest bardziej cwany i lepiej deklaruje fonty.

Relewantna literatura to dokumentacja do dwóch pakietów: https://www.ctan.org/pkg/fontspec oraz https://www.ctan.org/pkg/luaotfload.

Dopisane 23 czerwca 2022 (wieczorem): Pytanie zadałem na githubie (https://github.com/latex3/luaotfload/issues/229) i już wiem co było nie tak. Trzeba było dodać mode=node;script=latn, tj. na przykład:

\font\sc = "\MainSFont:mode=node;script=latn;+tlig;+smcp" at 9.9pt

You can check in the log how exactly fontspec specifies the font and copy that in your plaintex document.

wtorek, 7 czerwca 2022

Nasz człowiek w Warszawie

Cytat za https://gospodarka.dziennik.pl/news/artykuly/8438295,donald-tusk-ukraina-pomoc-wojna-rosja-zboze-rolnicy.html

Tusk o sytuacji polskich rolników: Jest wojna, jest blokada portów, coraz więcej transportów (z produktami rolnymi) idzie z Ukrainy przez Polskę do innych krajów, ale z punktu widzenia polskich rolników oznacza to, że część tych zbóż będzie sprzedawana tutaj w Polsce po wyraźnie niższych cenach. To także powoduje, że opłacalność produkcji polskiego rolnika może okazać się bardzo kłopotliwa -- powiedział Tusk.

Chcemy wszyscy pomagać Ukrainie, to jest bezdyskusyjna sprawa, ale trzeba to też tak zorganizować, aby pomoc dla Ukrainy nie oznaczała jakichś bardzo dotkliwych strat dla polskich rolników. Władze muszą wziąć pod uwagę ten niespodziewany problem, bo chcemy pomagać, ale musimy także zadbać o swoich ludzi -- dodał.

Ukraina jest jednym z największych światowych eksporterów zboża, które eksportuje głównie drogą morską. Rosyjska blokada portów Morza Czarnego zagraża niedoborom żywności w wielu krajach Afryki i Bliskiego Wschodu. W związku z blokadą portów Ukraina nie jest w stanie wywieźć około 22 mln ton zboża zgromadzonego w silosach. Trwają zabiegi dyplomatyczne w celu zdjęcia blokady. Komisja Europejska uruchomiła w piątek platformę do nawiązywania kontaktów biznesowych między przedsiębiorcami z Ukrainy i UE, co ma w założeniu pomóc w eksporcie ukraińskiego zboża.

Mój komentarz: jest wojna nie judzimy na wiecach politycznych w/s wojennych, zwłaszcza jak nie mamy nic lepszego do powiedzenia oprócz tego, że rząd robi źle.

czwartek, 28 kwietnia 2022

Kilka tras rowerowych wokół Trójmiasta

Generalne uwagi

Trasy mają po 50--100 km; jak za mało to można samemu przedłużyć. Jak za dużo można w połowie zawrócić:-)

Wyjazd na południe (Kaszuby) jest najbardziej skomplikowany. Duże korki/brak ścieżek; ale da się (trasa do Żukowa).

Osobiście zacząłbym od Żuław

Trasy są stworzone w aplikacji plotaroute. Można pobrać ślad w szczególności (być może do tego celu trzeba założyć konto/za darmo)

Lista tras

Do Żukowa a potem do elektrowni wodnej w Rutkach; (W Żukowie klasztor i cmentarz z krzyżawi żeliwnymi) #1

Żuławy (płasko ale może wiać, bo nie ma lasów) Wyspa Sobieszewska (po ścieżkach/drogach o względnie małym ruchu) #2

Dłuższy wariant poprzedniej. Od 1.go maja działa prom w Świbnie więc można spróbować tak: (koniec w Sztutowie / dawny KL Stutthoff) #3

Statkiem na Hel a potem rowerem. Hel--Rumia (potem powrót SKM; rower w SKM za darmo) #4

Inny wariant zaczynający się na Helu. Hel-Żarnowiec (elektrownia szczytowo-pompowa/punkt widokowy) #5

środa, 9 marca 2022

Napaść Rosji na Ukrainę

Luźne uwagi pro memoria żeby potem sprawdzić co się okazało prawdą a co nie...

Wojna zaczęła się 24 lutego (czwartek); poprzedziła ją długotrwała koncentracja wojsk więc sama inwazja nie była aż tak wielkim zaskoczeniem.

Postawa Niemiec

Jeszcze przed inwazją nowy kanclerz zamiast jechać sam do Moskwy wysyła kompetnie zieloną minister SZ opowiadającą różne głupstwa. Upiera się że NS2 nie powinien być objęty sankcjami w odpowiedzi na ewentualną agresję itp.. Torpeduje pomoc wojskową dla Ukrainy (po DDRowskie haubice z Łotwy, loty do Polski naokoło Niemiec). Ośmiesza się wysłaniem 5000 hełmów co trwa zresztą ze 2 tygodnie. Dno i pukanie od dołu.

Postawa USA

Przed inwazją taka sobie. Biden odwiesiła sankcję na NS2 przypominam w maju 2021 czyli tak 7--8 miesięcy przed inwazją (fajny mają wywiad); Potem na jesieni ten temat wrócił i znowu sankcji nie nałożono. Mieli inne sprawy na głowie: kompromitacja w Afganistanie...

Rosja

Putin groził użyciem broni jądrowej (dwa razy, raz w sposób zaowalowany, drugi że postawił siły strategiczne w stan alertu--one chyba zawsze są w stanie alertu BTW?). Teraz ew. zaangażowanie się NATO po stronie Ukrainy jest uważane za szaleństwo bo Rosja zaatakuje bronią jądrową. W związku z tym NATO nie powinno itp. Monachium do kwadratu....

NB Rosja to dziwne państwo. Bogaci Rosjanie mieszkają w Europie, tam robią zakupy, tam kształcą dzieci. Ale wg Putinowców jak Ukraina się stanie częścią Europy/UE/NATO, to będzie to dla Rosji śmiertelnym zagrożeniem. To się nie trzyma kupy. Hitlerowcy nie jeżdzili na wakacje do Francji ani nie kształcili tam dzieci. Putinowcy są jeszcze bardziej pierdolnięci od nazistów...

Inwazja

Plan Rosji z perspektywy 2 tygodni, które minęły wydawł się nieskomplikowany: zaatakowali z każdego kierunku + jakieś bezsensowne desanty. Wygląda że liczyli, że prezydent Zełenski ucieknie, armia się podda, oni zainstalują kogoś swojego i po tygodniu będzie po sprawie.

Coś nie tak poszło. Ani Włodymyr Zełenski ani armia UA nie uciekła; internet za to pełen jest zdumiewających filmików zniszczonego/porzuconego ruskiego sprzętu. Po dwóch tygodniach podeszli pod kilka większych miast, które ostrzeliwują artylerią. Znowu internet jest pełen filmików pokazujących zniszczone domy, ataki rakietowe na dzielnice mieszkalne itp. przestępstwa wojenne...

Ponieważ wojna nie skończył się w 3 dni USA+Europa nałożyły jakieś tam sankcje na Rosję. Piszę jakieś bo to różnie mówią nt ich dolegliwości; niewątpliwie kupowanie od Rosji gazu/ropy jako wyjątek, przy którym upierają się Niemcy co świństwo. Ale inni też kupują w tym nasza nieugięta Ojczyzna tylko o tym nie mówią głośno (70% ropy/40% gazu z tego co mi się wydaje). Godny odnotowania i niespodziewany jest masowy bojkot Rosji ze strony biznesu korporacyjnego; masa firm zawiesiła działalność (Ikea, IBM, Google itd)

Gdyby tak powiedzmy 15 stycznia było dla Rosji jasne co będzie w razie inwazji to może do wojny by nie doszło. Ale zamiast jasnego przekazu były targi co wykluczyć z sankcji z NS2 na czele...

Niemcy wreszcie zmienili front. NS2 jest dead and buried (podobno na zawsze). Nie będą się orientować na Ruski gaz a wręcz przeciwnie (na razie nie wiadomo na co). Zwiększą budżet na armię i wstydzą się za Schroedera. O Merkerl nikt już nie mówi jaka to była dama stanu. Jeszcze nie mówią że była przeciętną kunktatorką, której jedynym sukcesem było to, że jej fotela kanclerza spod dupy nie wyrwali przez 16 lat, ale i na to przyjdzie czas.

Uchodźcy się pojawili w PL. Fenomenalna sprawa. Zamknięcie ryja (przynajmniej na chwilę) tym wszystkim specjalistom od polskiego szowinizmu. Ochujska ochujała... żal patrzeć

Wojskowa pomoc dla UA

Ukraina prosi o pomoc. Ale nikt się nie kwapi jej udzielić. Tzn dostaje jakąś pomoc w postaci pocisków NLAW czy Stinger, ale nic ponadto. Polskie MIGi niewiele wniosą a i z tym są problemy. Prawdziwa pomoc UA to nie danie im sprzętu (bo ten zaawansowany to oni nie potrafią używać--musieli by się najpierw nauczyć), a zaangażowanie się z własnym wojskiem. A wojna z Rosją nie wchodzi w grę. Nawet pomijając te groźby Putina o atakach jądrowych. Kto miałby walczyć? Nikt nie chce. USA po Afganistanie ma dość. W Europie nie ma armii za wyjątkiem Francji. My po 6 latach gadania jacy jesteśmy wspaniali na tym odcinku (2% PKB itp) mamy taką armię że szkoda gadać... I to jest dramat, ale takie są realia. Ukraina będzie walczyć sama

Dla PL smutne perspektywy. Nikt nie będzie bronił PL jak na nas przyjdzie kolej. Ale to za czas jakiś jeżeli w ogóle, bo Putinowcy ugrzęźli na Ukrainie na perłowo. Na moje to nie ma szans zajęcia całej Ukrainy za dużo to by ich kosztowało. Mam nadzieję że dojdzie do jakieś formy rozejmu. Jutro rozmowy w Turcji...

Wszyscy mówią że Putin się nie cofnie, co wydaje się normalne u dyktatora ale może znajdzie się jakaś forma uratowania przez niego twarzy. Inwazja na UA wydaje się katastrofą dla Rosji już w tej chwili. Stracili Niemcy, stracili zapewne Europę/USA jako partnera. Wszyscy chcą się zbroić bo teraz Rosja to bandyckie państwo. W mediach rozważania na ile realna jest utrata władzy przez Putina.

środa, 23 lutego 2022

Update Debiana do wersji 11

W trybie awaryjnym, że tak powiem. Ale dałem radę w miarę sprawnie:

apt install texlive emacs gimp mc vim sqlite3 vlc r-base \
  dia gretl evince xpdf geeqie sshfs thunderbird
  flameshot ## do screenshotów
  recordmydesktop ## do zgrywania pulpitu
  jmtpfs ## podłączenie Adroida
  libtext-csv-perl
  libmethod-signatures-perl
apt install default-jre
apt install r-cran-ggplot2 r-cran-ggthemes r-cran-ggpubr

Doinstalowałem do chroma: adblock oraz 'print friendly and pdf' (taka długa nazwa.)

Doinstalowałem (MS) teams, Rstudio oraz google-chrome:

dpkg -i google-chrome-stable_current_amd64.deb 
dpkg -i rstudio-2022.02.0-443-amd64.deb 
dpkg -i teams_1.4.00.26453_amd64.deb 

Obsługa xmla/xslt:

apt install xsltproc libxml2-utils
apt install git

Ładowanie plików FIT na stravę przez CLI:

https://metacpan.org/dist/WebService-Strava
apt install gpsbabel
##
Doinstalowane z cpana 
https://metacpan.org/pod/Scalar::Util::Reftype
## fit2tcx (skompilować)
https://github.com/adiesner/Fit2Tcx
apt install libtinyxml-dev libscalar-list-utils-perl libjson-parse-perl 
    liblwp-authen-oauth2-perl libconfig-tiny-perl install libmoo-perl

Wysyłanie postów na bloga

apt install libxml-libxml-perl

Przestał działać skrypt do autoryzacji przez Oauth2 bo nie ma polecenia python. Gorzej nie działa nawet jak się go wywoła z python2 (brak biblioteki httplib2 w wersji na python2). Z kolei z python3 zgłasza błędy; składnia się zmieniła. Poprawiłem składnię. Dociągnąłem:

apt install python3-oauth2client

Drobna zmiana ustawień:

##/etc/fuse.conf
user_allow_other

Używam jeszcze czegoś takiego jak słownik polsko-angielsko-niemiecki (nieistniejącej) firmy YDP z Gdańska (kupiony legalnie ze 20 lat temu albo i lepiej.) Z tego ci mi się wydaje ni-chu-chu żeby to działało w Windows (natywnym bądź co bądź środowisku), ale pod linuksem jest zastępcza nakładka i działa jak najbardziej:

sudo apt-get install autotools-dev
automake libtool gettext
## ściągnąć
## https://github.com/wojtekka/ydpdict/blob/master/README.md
## i skompilować

czwartek, 9 grudnia 2021

Zgony nadmiarowe w Europie

Że czwarta fala szaleje to nadmiarowe zgony w Europie sobie liczę, w której to kategorii Polska cytując poetę trzecie miejsce w świecie (Kazik Staszewski/Amnezja)

Dane pobieram za pomocą get_eurostat (pakiet eurostat):

library("eurostat")
# demo_r_mwk_ts = Deaths by week and sex
z <- get_eurostat("demo_r_mwk_ts",  stringsAsFactors = FALSE) %>%
  mutate (time = as.character(time)) %>%
  mutate (year = as.numeric(substr(time, 1, 4)), 
          week = as.numeric(substr(time, 6,7)),
          sex = as.factor(sex),
          geo = as.factor(geo)) %>%
  select (sex, geo, year, week, value=values) %>%
  filter (sex == 'T')

Końcowy filter usuwa liczbę zgonów dla kobiet/mężczyzn osobno, bo chcemy tylko analizować ogółem czyli Total.

W pliku ecdc_countries_names_codes3166.csv są nazwy krajów (bo w bazie Eurostatu są tylko ISO-kody):

## country names
nn <- read.csv("ecdc_countries_names_codes3166.csv", sep = ';',  header=T, na.string="NA" )

Teraz liczę 5-letnie średnie dla okresu przed pandemią czyli dla lat 2015--2019 włącznie:

## mean weekly deaths 2015--2019
z0 <- z %>% filter ( year >= 2015 & year < 2020) %>% 
  group_by(geo, week) %>% 
  summarise (d0 = mean(value, na.rm=T))

Oraz tygodniowe liczby zgonów dla lat 2020--2021

## weekly deaths 2020--2021
z1 <- z %>% filter ( year > 2019 ) %>% 
  group_by(geo, year, week) %>% 
  summarise ( d1 = sum(value))

Łączę z0 z z1; liczę różnice między zgonami 2020--2021 a średnimi. Najpierw usuwam wiersze z NA w kolumnach zawierających zgony/średnie (drop_na). To w szczegolności usunie wiersze z tygodni (w roku 2021), dla których jeszcze nie ma danych.

## join z0 z1 and compute differences
zz <- left_join(z0, z1, by=c("week", "geo")) %>% 
  drop_na(d0,d1) %>%
  mutate (exp = (d1 - d0)/d0 * 100, exm = d1 - d0 )
zz <- left_join(zz, nn, by=c('geo'='id'))

Osobno liczę numer ostatniego raportowanego tygodnia w roku 2021. Pytanie o numer ostatniego w ogóle jest bez sensu, bo w 2020 będzie to ostatni tydzień. Ten fragment ciut mało robust jest bo w 2022 trzeba go będzie zmodyfikować

## if NA then the country stop reporting in 2020
zz.last.week <- zz %>% filter (year == 2021) %>% 
  group_by (geo) %>% 
  summarise (lw = last(week)) %>%
  drop_na(lw)
  
## najbardziej aktualny raportowany tydzień (różne kraje raportują różnie)
latestweek <- max (zz.last.week$lw)

Uwaga: niektóre kraje nie raportują w 2021, więc ich nie będzie w ramce zz.last.week z uwagi na filter.

Ramka zzt zawiera sumy różnic; bezwzględne (exm) oraz względne w procentach względem poziomu średniego 2015--2019 (exp):

### total exmort 
zzt <- zz %>% group_by(geo) %>%
   summarise(country=last(country), 
   exm = sum(exm),
   nm = sum(d0)) %>%
  mutate (exmp = exm/nm * 100)

Dodajemy informację z ramki zz.last.week; jeżeli w tej ramce nie ma kraju (bo nie raportował w 2021) to usuwamy go (drop_na(lw)). Wypierniczamy kraje raportujące więcej niż 6 tygodni po kraju (krajach), który przysłały raport najpóźniej. Np jak jakiś kraj-prymus dostarczył w 47 tygodniu to tylko kraje raportujące z tygodni 41 i później zostają a inne są usuwane (jako nieporównywalne)

zztt <- left_join(zzt, zz.last.week, by='geo') %>%
  drop_na(lw) %>%
  filter (lw >= latestweek - 6)
## ile zostało krajów (dla ciekawości):
countries.left <- nrow(zztt)

Wykres słupkowy względnej nadmiarowej umieralności (Total excess mortality by country) Trochę go komplikujemy bo słupek PL ma być wyróżniony (w tym celu tworzymy zmienną base a potem ręcznie ustawiamy legendę scale_fill_manual):

p6 <- zztt %>%  mutate( base=ifelse(geo=='PL', "1", "0")) %>% 
  ggplot(aes(x = reorder(country, exmp ), fill=as.factor(base))) +
  geom_bar(aes(y = exmp), stat="identity", alpha=.4 ) +
  geom_text(aes(label=sprintf("%.1f", exmp), y= exmp ), 
            vjust=0.25, hjust=1.25, size=2, color='black' ) +
  geom_text(aes(label=sprintf("%.0f", lw), y= 0 ), 
            vjust=0.25, hjust=-1.25, size=2, color='brown4' ) +
  xlab(label="") +
  ylab(label="") +
  ggtitle("Total Excessive deaths in Europe 2020--2021",
          subtitle ="Sum of (deaths_2020/2021 - average_2015--2019) / average_2015--2019 * 100%") +
  theme_nikw() +
  coord_flip() +
  scale_fill_manual( values = c( "1"="red", "0"="steelblue" ), guide = FALSE ) +
  labs(caption=x.note)

Wykres dynamiki. Ponieważ krajów jest dużo to usuwamy (pierwszy filter) `nieciekawe' (małe lub te które mają jakiś feler, np dane niepełne);

p7 <- zz %>% filter (! geo %in% c('AL', 'AM', 'IE', 'IS', 'UK', 'CY', 'GE', 'LI', 'ME')) %>%
  mutate(date= as.Date(sprintf("%i-%i-1", year, week), "%Y-%U-%u") ) %>%
  ##ggplot(aes(x = date, y =exp, group=geo, color=geo )) +
  ggplot(aes(x = date, y =exp)) +
  facet_wrap( ~country, scales = "fixed", ncol = 4, shrink = F) +
  geom_point(size=.4) +
  geom_smooth(method="loess", size=1, se = F, color="red",  span =.25) +
  geom_hline(yintercept = 50, color="firebrick", alpha=.2, size=1) +
  scale_y_continuous(breaks=seq(-100, 200, by=50)) +
  coord_cartesian(ylim = c(-100, 200)) +
  ggtitle("Excessive deaths in Europe 2020--2021",
          subtitle ="(deaths_2020/2021 - average_2015--2019) / average_2015--2019 * 100%") +
  theme_nikw() +
  xlab(label="%") +
  labs(caption=note)

Teraz wszystko na jednym ale ponieważ krajów jest za dużo (w sensie za mało byłoby kolorów żeby wykres był czytelny), to dzielimy je na dwie grupy: Polska i reszta. Każda grupa innym kolorem:

p8 <- zz %>% filter (! geo %in% c('AL', 'AM', 'IE', 'IS', 'UK', 'CY', 'GE', 'LI', 'ME')) %>%
  mutate( base=ifelse(geo=='PL', "1", "0")) %>% 
  mutate(date= as.Date(sprintf("%i-%i-1", year, week), "%Y-%U-%u") ) %>%
  ggplot(aes(x = date, y =exp,  color=as.factor(base ))) +
  ##ggplot(aes(x = date, y =exp)) +
  geom_point(size=.4) +
  geom_smooth(aes(x = date, y =exp, group=geo), method="loess", size=.3, se = F, span =.25) +
  geom_hline(yintercept = 50, color="firebrick", alpha=.2, size=1) +
  coord_cartesian(ylim = c(-100, 200)) +
  scale_color_manual( values = c( "1"="red", "0"="steelblue" ), guide = FALSE ) +
  theme_nikw() +
  ylab(label="%") +
  ggtitle("Excessive deaths in Europe 2020--2021 and Poland (red)",
          subtitle ="(deaths_2020/2021 - average_2015--2019) / average_2015--2019 * 100%") +
  scale_y_continuous(breaks=seq(-100, 200, by=50)) +
  labs(caption=note)

Wszystko działa (i koliduje jak mówił Bolec), bo działało na PC, ale był problem na raspberry, na którym to ostatecznie ma być uruchamiane z automatu co dwa tygodnie. Bo tam Debian starszy (Buster) i na arma. Zapodanie:

install.package("eurostat")

Skutkowało pobraniem wielu pakietów i błędem przy kompilacji czegoś co się nazywało s2. Kombinowałem na różne sposoby jak to skompilować bo stosownego pakietu w Debianie nie było. Ni-chu-chu.

W przypływie olśnienia obejrzałem zależności tego eurostatu, wśród których żadnego s2 nie było. Był za to sf, które z kolei rzekomo zależał od s2. Żeby było śmieszniej sf dało się zainstalować (mimo że s2 nie było -- stąd rzekomo):

apt install r-cran-sf/oldstable

Problem się rozwiązał...

Skrypt będzie się uruchamiał co dwa tygodnie. Generował rysunki i wysyłał je na twittera

Całość jest na githubie i to w dodatku jako plik Rmd, ale nie na moim koncie tylko na koncie Koła Naukowego SM w PSW w Kwidzynie, którego póki co jestem opiekunem i jedynym członkiem w jednym (por. github.com/knsm-psw/ES-mortality)