Weblog Tomasza Przechlewskiego [Zdjęcie T. Przechlewskiego]


scrum
random image [Photo gallery]
Zestawienie tagów
1-wire | 18b20 | 1wire | 2140 | 3rz | alsamixer | amazon | anniversary | antypis | apache | api | applebaum | arm | armenia | astronomy | asus | atom.xml | awk | aws | bachotek | bakłażan | balcerowicz | balta | bash | berlin | bibtex | bieszczady | biznes | blogger | blogging | blosxom | borne-sulinowo | breugel | bt747 | budapeszt | canon | cedewu | chello | chiller | chillerpl | chown | chujowetaśmy | ciasto | cmentarz | contour | cron | css | csv | curl | cycling | d54250wykh | dbi | debian | dejavu | dhcp | dht22 | dia | docbook | dom | ds18b20 | dyndns | dynia | ebay | economy | ekonomia | elka | elm | emacs | emacs23 | english | ess | eu | excel | exif | exiftool | f11 | fc | fc11 | fc15 | fc5 | fc8 | fedora | fedora21 | fenix | ffmpeg | finepix | firefox | flickr | fontforge | fontspec | fonty | food | fop | foto | france | francja | fripp | fuczki | fuji | fuse | gammu | garmin | gawk | gazwyb | gdańsk | gdynia | gender | geo | geocoding | georgia | gft | git | github | gmail | gmaps | gnokii | gnus | google | googlecl | googleearth | googlemaps | gotowanie | gphoto | gphoto2 | gps | gpsbabel | gpsphoto | gpx | gpx-viewer | greasemonkey | gruzja | grzyby | haldaemon | handbrake | historia | history | hitler | holocaust | holokaust | hpmini | humour | iblue747 | ical | iiyama | ikea | imap | inkscape | inne | internet | j10i2 | javascript | jhead | k800i | kajak | kamera | kleinertest | kml | kmobiletools | knuth | kociewie kołem | kod | kolibki | komorowski | konwersja | krutynia | kuchnia | kurski | latex | latex2rtf | latex3 | lcd | legend | lenny | lesund | lewactwo | liberation | linksys | linux | lisp | lisrel | litwa | lizbona | logika | ltr | lubowla | lwp | lwów | m2wś | mapquest | mapsource | marvell | math | mathjax | mazury | mbank | mediolan | mencoder | mh17 | michalak | michlmayr | microsoft | monitor | mp4box | mplayer | ms | msc | mssql | msw | mtkbabel | museum | muzyka | mymaps | mysql | nanopi | natbib | navin | nekrolog | neo | neopi | netbook | niemcy | niemieckie zbrodnie | nikon | nmea | nowazelandia | nuc | nxml | oauth | oauth2 | obituary | okular | olympus | ooffice | ooxml | opera | osm | otf | otftotfm | other | overclocking | panoramio | pdf | pdfpages | pdftex | pdftk | perl | photo | photography | picasa | picasaweb | pim | pine | pis | pit | plotly | pls | plugin | po | podróże | politics | polityka | polsat | portugalia | postęp | powerpoint | prelink | problem | propaganda | pstoedit | putin | python | r | radio | random | raspberry pi | refugees | relaxng | ridley | router | rower | rowery | rpi | rsync | rtf | ruby | rugby | russia | rwc | rwc2007 | rwc2011 | rzym | samba | sem | sernik | sheevaplug | sienkiewicz | signature | sks | skype | skytraq | smoleńsk | sqlite | srtm | ssl | staszek wawrykiewicz | statistics | stats | statystyka | stix | stretch | suwałki | svg | svn | swanetia | swornegacie | szwajcaria | słowacja | tbilisi | terrorism | tex | texgyre | texlive | thunderbird | tomato | totalnaopozycja | tourism | tramp | trang | truetype | ttf | turystyka | tusk | tv | tv5monde | twitter | typetools | ubuntu | uchodźcy | udev | ue | ukraina | umap | unix | upc | updmap | ups | utf8 | varia | video | vienna | virb edit | vostro | wammu | wdc | wdfs | webcam | webdav | wh2080 | wiedeń | wikicommons | wilno | windows | windows8 | wine | wioślarstwo | word | wordpress | wrt54gl | ws1080 | wtyczka | ww2 | www | wybory | wybory2015 | włochy | węgry | xemex | xetex | xft | xhtml | xine | xml | xmllint | xsd | xslt | xvidtune | youtube | yum | zakopane | zakupy | zdf | zdrowie | łeba | świdnica | żywność
Archiwum
O stronie
wykorzystywany jest blosxom plus następujące wtyczki: tagging, flatarchives, rss10, lastbuilddatexhtmlmime. Niektóre musiałem dopasować nieco do swoich potrzeb. Więcej o blosxom jest tutaj
Subskrypcja
RSS 1.0
Czy Platforma Obywatelska to kryptonaziści?


Po występach przewodniczącego Juliusa Schetyny można było mieć wątpliwości, że to jednorazowy amok. Ale znaleźli się wszakże podwładni Juliusa, którzy postanowi pokazać, że są równie mądrzy jak szef, a nawet dużo mądrzejsi. Naprawdę trzeba nie mieć mózgu w ogóle, żeby przerobić Goebbelsowski plakat z podpisem Pracuj z Niemcami a będziesz uratowany i takie coś publikować z dumą na Twitterze. No a przecież wcześniej był/jest w tej partii ważna figura pn. Protasiewicz co się na bagażowym wyżywała we Franfurcie wrzeszcząc na niego Heil Hitler czy jakoś tak. No już trzech mamy KN (kryptonazistów) -- jeszcze dwóch i będzie tylu co w słynnym reportarzu w #WaffelTV, co taką gównoburzę wywołał w styczniu br.

Znamienne jest tak nawiasem mówiąc milczenie takich opertkowych figur jak pan Bodnar (na przykład), który miał gębę pełną frazesów a nawet listy dramatyczne do premiera i ministra sprawiedliwości pisał, kiedy ww. WaffelTV ujawniła ww. groźny spisek 5 idiotów w lesie (Konieczne wydaje się opracowanie nowej, kompleksowej strategii mającej na celu zwalczanie rasizmu i ksenofobii w Polsce -- uważa Rzecznik Praw Obywatelskich, Adam Bodnar) Teraz nie ma problemu operetkowy pan Bodnar, i nie widzi żadnej potrzeby a to zapewne z tej prostej przyczyny, że skończonym idiotą okazał się chłop z ferajny, a nie żaden tam anonimowy zresztą nacjonalista.

Jeżeli ktoś nie wie czemu Juliusz/Julius a nie Grzegorz. Ano temu że, Dr. Goebbels nie tyle wymyślił co udowodnił empirycznie, że kłamstwo powtórzone 1000 razy staje się prawdą. Mianowicie w tekstach publikowanych w gazecie Der Angriff przekręcał systematycznie i uporczywie imię szefa Berlińskiej Policji, określając go Izydorem (co ma/miało żydowskie konotacje w Niemczech podobno), aż większość Berlińczyków faktycznie uznała w końcu, że Bernhard Weiss ma na imię Izydor.

url | Mon, 15/10/2018 16:19 | tagi: ,
Koniec pobierania danych wyborczych

Dobrnąłem w końcu do finału pobierając ostatecznie ze strony PKW dane dotyczące siedmiu wyborów, które odbyły się w latach: 2015, 2014 (samorządowe), 2011, 2010 (samorządowe), 2007, 2006 (samorządowe), 2005.

Wyniki wcześniejszych wyborów nie są już dostępne na poziomie komisji obwodowych (a przynajmniej ja nie potrafię takowych odszukać). Protokoły z wyborów z 2006 roku też nie były dostępne, ale udało się je w części odtworzyć ze stron z wynikami kandydatów (zawierającymi liczbę głosów oddanych na kandydata w poszczególnych komisjach obwodowych).

Dla każdych wyborów wykreśliłem histogram poparcia dla mainstreamowych partii: PSL, PO, PiS oraz SLD. Zgodnie z oczekiwaniami rozkłady poparcia są jednomodalne, prawostronnie symetryczne, ale z dwoma wyjątkami: rozkład poparcia dla PO jest bimodalny i ta tendencja wydaje się stała. Rozkład poparcia dla PSL z roku 2014 (cud nad urną) różni się -- na zasadzie znajdź element niepasujący do pozostałych -- od sześciu pozostałych rozkładów poparcia dla tej partii (czemu to już inna historia).

Dane są tutaj

url | Thu, 11/10/2018 08:31 | tagi: , , ,
Pobranie danych z wyborów samorządowych 2010

Co wybory to inaczej oczywiście...

Wyniki wyborów 2010 są na stronie http://wybory2010.pkw.gov.pl/. Punktem wyjścia jest zaś strona z wynikami dla województwa postaci http://wybory2010.pkw.gov.pl/geo/pl/020000/020000-o-020000-RDA-2.html?wyniki=1, w której wiodące 02020000 to kod teryt województwa a 2 przed .html to numer okręgu wyborczego. Zatem pobranie wszystkich stron `okręgowych' sprowadza się do:

#!/usr/bin/perl
#
use LWP::Simple;
#
my $uribase = 'http://wybory2010.pkw.gov.pl/geo/pl';
@Woj = ("02", "04", "06", "08", "10", "12", "14", "16",
  "18", "20", "22", "24", "26", "28", "30", "32");
@Okr = (1,2,3,4,5,6,7,8,9,10); ## nadmiarowo (max jest 8 chyba)

for $w (@Woj) {
  for $o (@Okr) {
    $url = "$uribase/${w}0000/${w}0000-o-${w}0000-RDA-${o}.html?wyniki=1";
    $file = "ws2010_woj_${w}_${o}";
    getstore($url, $file);
    print STDERR "$url stored\n";
  }
}

Teraz się okazuje że każdy taki plik zawiera odnośniki postaci /owk/pl/020000/2c9682212bcdb46c012bcea96efe0131.html. Każdy taki plik opisuje kandydata startującego w wyborach. Ich pobranie jest równie banalne:

#!/usr/bin/perl
#
use LWP::Simple;
use locale;
use utf8;
binmode(STDOUT, ":utf8");
use open IN => ":encoding(utf8)", OUT => ":utf8";

$baseURI="http://wybory2010.pkw.gov.pl";
$file = $ARGV[0];

while (<>) {
  chomp();
  if (/(owk\/[^<>"]*)/) {
     $url= "$baseURI/$1";
     if (/(owk\/[^<>"]*)[^<>]*>([^<>]*)/) {
       $who = "$2"; $who =~ s/ //g;
       $who =~ tr/ĄĆĘŁŃÓŚŻŹ/ACELNOSZZ/;
       $who =~ tr/ąćęłńóśżź/acelnoszz/;
     } else {$who = "XxYyZz"; }

     $outFile = "owk_${file}__${who}";
     getstore($url, $outFile);
     print STDERR "$url stored ($outFile)\n";
  }
}
## pobranie wszystkich owk-URLi to:
## for i in ws2010_woj* ; do perl pobierz-owk.pl $i ; done

W plikach `owk' są linki do protokołów z wynikami z poszczególnych komisji. Są to linki postaci: /obw/pl/3206/bacbedd03197794e2e1e8e438bff87e1.html. Należy je wszystkie pobrać (URLe nie pliki) i posortować usuwając duplikaty. Powinno być takich URLi około 25--27 tysięcy (tyle ile komisji):

#!/usr/bin/perl
#
$baseURI="http://wybory2010.pkw.gov.pl";
$file = $ARGV[0];

while (<>) {  chomp();
  if (/(obw\/[^<>"]*)/) {
     $url= "$baseURI/$1";
     if (/(obw\/[^<>"]*)[^<>]*>([^<>]*)/) {
         $obwNr = "$2"; }
     $outFile = "${file};${obwNr}";
     print "$url;$outFile\n";
} }
## for i in owk_2010* ; do perl pobierz-obw.pl $i ; done > proto0.csv
## awk -F';' '{print $1";"$3}' proto0.csv | sort -u > protokoly.csv
## wc -l protokoly.csv
## 25464 protokoly.csv

Każdy URL jest postaci /obw/pl/0201/051595429cc31a526f8b2455602ab929.html. Te 0201 to pewnie teryt powiatu, ale reszta wydaje się losowa więc nie da się ustalić jakiegoś schematu URLi protokołów, bo go nie ma po prostu. Teraz postaje pobrać te 25464 plików-protokołów z komisji obwodowych. Na wszelki wypadek będę zapisywał te protokoły wg schematu: proto_ws_2010_terytPowiatu_nrkomisji:

#!/usr/bin/perl
##
use LWP::Simple;
open (O, "protokoly.csv") || die "No protokoly.csv!";
while (<O>) { chomp();
  ($url, $nrk) =  split /;/, $_;
  $_ =~ m#http://wybory2010.pkw.gov.pl/obw/pl/([0-9][0-9][0-9][0-9])#;
  $teryt = $1;
  $outFile = "proto_ws_2010_${teryt}_$nrk";
  getstore($url, $outFile);
  print STDERR "*** $url stored ($outFile)\n";
}
close(O);
## time perl get-proto.pl

Mi się ściągało 62 minuty 30 sekund.

url | Wed, 03/10/2018 06:04 | tagi: , , ,
Wybory 2014 i jeszcze więcej rozkładów

Rozkład odsetka głosów nieważnych (definiowanego jako głosy nieważne / (głosy ważne + nieważne)) w wyborach samorządowych w 2014. Pierwszy histogram dotyczy całej Polski (27455 komisji), drugi województwa pomorskiego (1856) a trzeci Mazowieckiego (3574).

#!/usr/bin/Rscript
# Skrypt wykreśla histogramy dla danych z pliku ws2014_komisje.csv
# (więcej: https://github.com/hrpunio/Data/tree/master/ws2014_pobranie_2018)
#
par(ps=6,cex=1,cex.axis=1,cex.lab=1,cex.main=1.2)
komisje <- read.csv("ws2014_komisje.csv", sep = ';',
       header=T, na.string="NA");

komisje$ogn <- komisje$glosyNiewazne  / (komisje$glosy + komisje$glosyNiewazne) * 100;

summary(komisje$glosyNiewazne); fivenum(komisje$glosyNiewazne);
sX <- summary(komisje$ogn);
sF <- fivenum(komisje$ogn);
sV <- sd(komisje$ogn, na.rm=TRUE)
skewness <- 3 * (sX[["Mean"]] - sX[["Median"]])/sV

summary_label <- sprintf ("Śr = %.1f\nMe = %.1f\nq1 = %.1f\nq3 = %.1f\nW = %.2f", 
  sX[["Mean"]], sX[["Median"]], sX[["1st Qu."]], sX[["3rd Qu."]], skewness)

## ##
kpN <- seq(0, 100, by=2);
kpX <- c(0, 10,20,30,40,50,60,70,80,90, 100);
nn <- nrow(komisje)

h <- hist(komisje$ogn, breaks=kpN, freq=TRUE,
   col="orange", main=sprintf ("Rozkład odsetka głosów nieważnych\nPolska ogółem %i komisji", nn), 
   ylab="%", xlab="% nieważne", labels=F, xaxt='n' )
   axis(side=1, at=kpN, cex.axis=2, cex.lab=2)
   posX <- .5 * max(h$counts)
text(80, posX, summary_label, cex=1.4, adj=c(0,1))

## ##
komisje$woj <- substr(komisje$teryt, start=1, stop=2)

komisjeW <- subset (komisje, woj == "22"); ## pomorskie
nn <- nrow(komisjeW)
sX <- summary(komisjeW$ogn); sF <- fivenum(komisjeW$ogn);
sV <- sd(komisjeW$ogn, na.rm=TRUE)
skewness <- 3 * (sX[["Mean"]] - sX[["Median"]])/sV

summary_label <- sprintf ("Śr = %.1f\nMe = %.1f\nq1 = %.1f\nq3 = %.1f\nW = %.2f", 
  sX[["Mean"]], sX[["Median"]], sX[["1st Qu."]], sX[["3rd Qu."]], skewness)

h <- hist(komisjeW$ogn, breaks=kpN, freq=TRUE,
   col="orange", main=sprintf("Rozkład odsetka głosów nieważnych\nPomorskie %i komisji", nn), 
   ylab="%", xlab="% nieważne", labels=T, xaxt='n' )
   axis(side=1, at=kpX, cex.axis=2, cex.lab=2)
   posX <- .5 * max(h$counts)
text(80, posX, summary_label, cex=1.4, adj=c(0,1))

komisjeW <- subset (komisje, woj == "14"); ## mazowieckie
nn <- nrow(komisjeW)
sX <- summary(komisjeW$ogn); sF <- fivenum(komisjeW$ogn);
sV <- sd(komisjeW$ogn, na.rm=TRUE)
skewness <- 3 * (sX[["Mean"]] - sX[["Median"]])/sV

summary_label <- sprintf ("Śr = %.1f\nMe = %.1f\nq1 = %.1f\nq3 = %.1f\nW = %.2f", 
  sX[["Mean"]], sX[["Median"]], sX[["1st Qu."]], sX[["3rd Qu."]], skewness)

h <- hist(komisjeW$ogn, breaks=kpN, freq=TRUE,
   col="orange", main=sprintf("Rozkład odsetka głosów nieważnych\nMazowieckie %i komisji", nn), 
   ylab="%", xlab="% nieważne", labels=T, xaxt='n' )
   axis(side=1, at=kpX, cex.axis=2, cex.lab=2)
   posX <- .5 * max(h$counts)
text(80, posX, summary_label, cex=1.4, adj=c(0,1))

Wyniki są takie oto (indywidualne wykresy tutaj: #01 #02 #03):

Rozkłady odsetka poparcia dla PSL/PiS/PO w wyborach samorządowych w 2014 w całej Polsce, w miastach/poza miastami oraz w poszczególnych województwach. Poniższy skrypt generuje łącznie 60 wykresów słupkowych:

#!/usr/bin/Rscript
# Skrypt wykreślna różnego rodzaju histogramy dla danych z pliku ws2014_komitety_by_komisja_T.csv
# (więcej: https://github.com/hrpunio/Data/tree/master/ws2014_pobranie_2018)
#
showVotes <- function(df, x, co, region, N, minN) {
   ## showVotes = wykreśla histogram dla województwa (region)
   kN <- nrow(df)
   sX <- summary(df[[x]], na.rm=TRUE);
   sV <- sd(df[[x]], na.rm=TRUE)
   ## współczynnik skośności Pearsona
   skewness <- 3 * (sX[["Mean"]] - sX[["Median"]])/sV

   summary_label <- sprintf ("Śr = %.1f\nMe = %.1f\nq1 = %.1f\nq3 = %.1f\nS = %.1f\nW = %.2f", 
     sX[["Mean"]], sX[["Median"]],
     sX[["1st Qu."]], sX[["3rd Qu."]], sV, skewness)

   if (minN < 1) {
   t <- sprintf("Rozkład głosów na %s\n%s ogółem %d komisji", co, region, kN ) } 
   else { t <- sprintf("Rozkład głosów za %s\n%s ogółem %d komisji (N>%d)", co, region, kN, minN ) } 

   h <- hist(df[[x]], breaks=kpN, freq=TRUE, col="orange", main=t, 
     ylab="%", xlab="% poparcia", labels=F, xaxt='n' )
     axis(side=1, at=kpN, cex.axis=2, cex.lab=2)
   ## pozycja tekstu zawierającego statystyki opisowe
   posX <- .5 * max(h$counts)
   text(80, posX, summary_label, cex=1.4, adj=c(0,1))
}

## Wczytanie danych; obliczenie podst. statystyk:
komisje <- read.csv("ws2014_komitety_by_komisja_T.csv", 
   sep = ';', header=T, na.string="NA");

komisje$ogn <- komisje$glosyNiewazne  / (komisje$glosy 
   + komisje$glosyNiewazne) * 100;

summary(komisje$PSL); summary(komisje$PiS); summary(komisje$PO);
fivenum(komisje$PSLp); fivenum(komisje$PiSp); fivenum(komisje$POp);

## ## ###
par(ps=6,cex=1,cex.axis=1,cex.lab=1,cex.main=1.2)
kpN <- seq(0, 100, by=2);
kpX <- c(0, 10,20,30,40,50,60,70,80,90, 100);
kN <- nrow(komisje)
region <- "Polska"
minTurnout <- 0

## cała Polska:
showVotes(komisje, "PSLp", "PSL", region, kN, minTurnout);
showVotes(komisje, "PiSp", "PiS", region, kN, minTurnout);
showVotes(komisje, "POp",  "PO",  region, kN, minTurnout);

## Cała Polska (bez małych komisji):
## ( późniejszych analizach pomijane są małe komisje)
minTurnout <- 49
komisje <- subset (komisje, glosyLK > minTurnout); 
kN <- nrow(komisje)

showVotes(komisje, "PSLp", "PSL", region, kN, minTurnout);
showVotes(komisje, "PiSp", "PiS", region, kN, minTurnout);
showVotes(komisje, "POp",  "PO",  region, kN, minTurnout);

## Typ gminy U/R (U=gmina miejska ; R=inna niż miejska)
komisjeW <- subset (komisje, typ == "U"); 
kN <- nrow(komisjeW)
region <- "Polska/g.miejskie"
showVotes(komisjeW, "PSLp", "PSL", region, kN, minTurnout);
showVotes(komisjeW, "PiSp", "PiS", region, kN, minTurnout);
showVotes(komisjeW, "POp",  "PO",  region, kN, minTurnout);

komisjeW <- subset (komisje, typ == "R"); 
kN <- nrow(komisjeW)
region <- "Polska/g.niemiejskie"
showVotes(komisjeW, "PSLp", "PSL", region, kN, minTurnout);
showVotes(komisjeW, "PiSp", "PiS", region, kN, minTurnout);
showVotes(komisjeW, "POp",  "PO",  region, kN, minTurnout);

## woj = dwucyfrowy kod teryt województwa:
komisje$woj <- substr(komisje$teryt, start=1, stop=2)

cN <- c("dolnośląskie", "dolnośląskie", "kujawsko-pomorskie",
 "lubelskie", "lubuskie", "łódzkie", "małopolskie", "mazowieckie",
 "opolskie", "podkarpackie", "podlaskie", "pomorskie", "śląskie",
 "świętokrzyskie", "warmińsko-mazurskie", "wielkopolskie",
 "zachodniopomorskie");
cW <- c("02", "04", "06", "08", "10", "12", "14", "16", "18",
 "20", "22", "24", "26", "28", "30", "32");

## wszystkie województwa po kolei:
for (w in 1:16) {
  wojS <- cW[w]
  ###region <- cN[w];
  region <- sprintf ("%s (%s)", cN[w], wojS);

  komisjeW <- subset (komisje, woj == wojS); ##

  showVotes(komisjeW, "PSLp", "PSL", region, kN, minTurnout);
  showVotes(komisjeW, "PiSp", "PiS", region, kN, minTurnout);
  showVotes(komisjeW, "POp",  "PO",  region, kN, minTurnout);
}
## ## koniec

Dla całej Polski wyniki są następujące:

Indywidualne wykresy zaś tutaj: #01 #02 #03 #04 #05 #06 #07 #08 #09 #10 #11 #12 #13 #14 #15 #16 #17 #18 #19 #20 #21 #22 #23 #24 #25 #26 #27 #28 #29 #30 #31 #32 #33 #34 #35 #36 #37 #38 #39 #40 #41 #42 #43 #44 #45 #46 #47 #48 #49 #50 #51 #52 #53 #54 #55 #56 #57 #58 #59 #60):

url | Tue, 02/10/2018 17:08 | tagi: , , ,
Wybory samorządowe 2014/2018. Profil wiekowy kandydatów cd

Rozkłady wieku kandydatów (2014/2018) i radnych wybranych do sejmików wojewódzkich 2014.

require(ggplot2)
### ### ###
co <- "Wiek kandydatów do sejmików wojewódzkich (2014 / Polska)"

## deklaracja końców klas (hist)
wB <- c(18,20,25,30,35,40,45,50,55,60,65,70,75,80,95);
wZ <- c(36,38,40,42,44,46,48,50,52,54,56);
wD <- seq(18, 92, by=2);

komitety <- "DB = Demokracja Bezpośrednia | RN = Ruch Narodowy | NPKM = Nowa Prawica JKM";

k <- read.csv("kandydaci_ws_2014.csv", sep = ';',  header=T, na.string="NA", dec=",");

with (k, table(komitet))

aggregate (k$wiek, list(Numer = k$komitet), fivenum)
## analiza dotyczy tylko kandydatów z komitetów ogólnopolskich
kandydaci <- subset (k,
    (komitet == "PSL" | komitet == "DB" | komitet == "PiS" | komitet == "PO" |
     komitet == "RN" | komitet == "NPKM" | komitet == "SLDLR"));
kandydaciPL <- kandydaci
kNum <- nrow(kandydaciPL) 
kNum

with (kandydaci, table(komitet))

aggregate (kandydaci$wiek, list(Numer = kandydaci$komitet), fivenum)

sumS <- summary(kandydaci$wiek)
sumV <- sd(kandydaci$wiek)
summary_label <- sprintf ("Śr = %.1f\nMe = %.1f\nQ1 = %.1f\nQ3 = %.1f\nS = %.1f",
        sumS[["Mean"]], sumS[["Median"]],
        sumS[["1st Qu."]],  sumS[["3rd Qu."]],  sumV)

#par() ## przegląd parametrów
# ps = stopień pisma
par(ps=11,cex=1,cex.axis=1,cex.lab=1,cex.main=1.2)
h <- hist(kandydaci$wiek, 
   breaks=wB, 
   freq=TRUE,
   col="orange", main=co,
   ylab="liczba kandydatów", xlab="wiek", labels=T, xaxt='n')
   axis(side=1, at=wB)
   text(80, 600, summary_label, cex = .8, adj=c(0,1))

par(ps=6,ce=2,cex.axis=2,cex.lab=2,cex.main=2)
h <- hist(kandydaci$wiek, 
   breaks=wD, 
   freq=TRUE,
   col="orange", main=co, ylab="liczba kandydatów", xlab="wiek", labels=T, xaxt='n' )
   axis(side=1, at=wB, cex.axis=2, cex.lab=2)
   text(80, 600, summary_label, cex=0.4, size=3, pos=3, adj=c(0,1))

### ### ###

aggregate (kandydaci$wiek, list(Numer = kandydaci$nr), fivenum)
aggregate (kandydaci$wiek, list(Numer = kandydaci$komitet), fivenum)

### ### ###

ggplot(kandydaci, aes(x=komitet, y=wiek, fill=komitet))  +
   geom_boxplot() +
   ylab("Wiek") +
   xlab("Komitet") +
   annotate(geom="text", x = 1, y = 90, hjust=0, size=3,
   label = komitety ) +
   guides(fill=FALSE) ;

### ### ### Pomorskie TERYT=22 ### ### ###
co <- "Wiek kandydatów do sejmików wojewódzkich (2014 / Pomorskie)"

kandydaci <- subset (kandydaci, (woj == "22" ))
aggregate (kandydaci$wiek, list(Numer = kandydaci$komitet), fivenum)

ggplot(kandydaci, aes(x=komitet, y=wiek, fill=komitet))  +
   geom_boxplot() +
   ylab("Wiek") +
   xlab("Komitet") +
   annotate(geom="text", x = 1, y = 90, hjust=0, size=3,
    label = komitety ) +
   guides(fill=FALSE) ;

sumS <- summary(kandydaci$wiek)

summary_label <- sprintf ("Śr = %.1f\nMe = %.1f\nQ1 = %.1f\nQ3 = %.1f",
    sumS[["Mean"]], sumS[["Median"]], sumS[["1st Qu."]],  sumS[["3rd Qu."]])

## przywrócenie wartości parametrów
par(ps=11,cex=1,cex.axis=1,cex.lab=1,cex.main=1.2)

h <- hist(kandydaci$wiek, 
   breaks=wB, 
   freq=TRUE,
   col="orange", main=co, xlab="wiek", ylab="liczba kandydatów", labels=T, xaxt='n')
   axis(side=1, at=wB)
   text(80, 40, summary_label, cex = .8, adj=c(0,1))

with (kandydaci, table(komitet))

### ## ###
kandydaciPL$okrN <- paste (kandydaciPL$woj, "o", kandydaciPL$okr)
a <- aggregate (kandydaciPL$wiek, list(Numer = kandydaciPL$okrN), fivenum)

h <- hist(a$x[,3], 
   breaks=wZ, 
   freq=TRUE,
   col="orange",
   main="Mediana wieku kandydatów wg okręgów [Polska 2014]",
   xlab="wiek", ylab="liczba okręgów", labels=T, xaxt='n')
   axis(side=1, at=wZ)
   text(80, 40, summary_label, cex = .8, adj=c(0,1))

## ## ### radni (czyli wybrani)
radni <- read.csv("radni_ws_2014.csv", sep = ';',
     header=T, na.string="NA", dec=",");

sumS <- summary(radni$wiek)
sumV <- sd(radni$wiek)

summary_label <- sprintf ("Śr = %.1f\nMe = %.1f\nQ1 = %.1f\nQ3 = %.1f\nS = %.1f",
    sumS[["Mean"]], sumS[["Median"]], sumS[["1st Qu."]],  sumS[["3rd Qu."]],  sumV)

h <- hist(radni$wiek,
   breaks=wB,
   freq=TRUE,
   col="orange", 
   main="Wiek radnych do sejmików wojewódzkich 2014", 
   ylab="liczba radnych", xlab="wiek", labels=T, xaxt='n')
   axis(side=1, at=wB)
   text(80, 80, summary_label, cex = .8, adj=c(0,1))
 




url | Mon, 01/10/2018 18:21 | tagi: , ,
Wybory samorządowe 2018. Profil wiekowy kandydatów



Na stronie https://wybory2018.pkw.gov.pl/pl/geografia#general_committee_stat jest informacja, że w wyborach na radnych sejmików wojewódzkich bierze udział/zostało zarejestrowanych 7076 kandydatów. Zaczynając od tej strony można się doklikać do stron dla każdego województwa oraz okręgu. Są to odpowiednio strony tworzone według schematu:

https://wybory2018.pkw.gov.pl/pl/geografia/220000#geo_committee_stat
https://wybory2018.pkw.gov.pl/pl/geografia/220000/voiv_council/1

Strona okręgu zawiera listę kandydatów a jej HTML jest tak nieskomplikowany, że zamiana na na przykład plik CSV jest banalnie prosta.

Po ściągnięciu 85 ,,stron okręgowych'' i ich zamianie na CSV, faktycznie otrzymałem plik składający się z 7076 wierszy, z których każdy jest postaci:

woj;okr;komitet;nr;kandydat;wiek;skad;oswidczenie;uwagi
02;o1;SLD-LR;1;SIKORA Arkadiusz;45;Oleśnica;;

Dalszą analizę przeprowadziłem wykorzystując R:

k <- read.csv("kandydaci_ws_2018_3.csv", sep = ';',  header=T, na.string="NA", dec=",");
with (k, table(komitet))
Komitet liczba kandydatów liczba okręgów
BS 447 62
K15 675 84
KW INICJATYWA OBYWATELSKA POWIATU TARNOGÓRSKIEGO 31 4
KW STOWARZYSZENIA LEX NATURALIS 12 2
KW STRONNICTWA PRACY 6 1
KW ŚLĄSKIEJ PARTII REGIONALNEJ 85 12
KW ŚLONZOKI RAZEM 40 5
KW WSPÓLNA MAŁOPOLSKA 51 KW WYBORCÓW AKCJA NARODOWA 27 5
KW WYBORCÓW ISKRA 38 6
KW WYBORCÓW JEDNOŚĆ NARODU -- WSPÓLNOTA 118 18
KW WYBORCÓW AGNIESZKI JĘDRZEJEWSKIEJ 5 1
KW WYBORCÓW MNIEJSZOŚĆ NIEMIECKA 31 4
KW WYBORCÓW POLSKIE RODZINY RAZEM 28 4
KW WYBORCÓW PROJEKT ŚWIĘTOKRZYSKIE BOGDANA WENTY 30 4
KW WYBORCÓW SPOZA SITWY 23 4
KW WYBORCÓW Z DUTKIEWICZEM DLA DOLNEGO ŚLĄSKA 45 5
KW ZJEDNOCZENIE CHRZEŚCIJAŃSKICH RODZIN 40 7
KW ZWIĄZKU SŁOWIAŃSKIEGO 173
PiS 722 85
PO-N 722 85
PSL 722 85
RAZEM 549 85
RN 528 79
SLD-LR 713 85
WiS 448 63
WwS 574 77
ZIELONI 349 57

Dalszą analizą objęto 10 komitetów, które zarejestrowały kandydatów w ponad połowie okręgów wyboczych (WsS to Wolność w Samorządzie; WiS to Wolni i Solidarni a BS oznacza Komitet pn Bezpartyjni Samorządowcy):

aggregate (k$wiek, list(Numer = k$komitet), fivenum)

wB <- c(18,20,25,30,35,40,45,50,55,60,65,70,75,80,95);
summary_label <- paste (sep='', "Średnia = ", sprintf("%.1f", sumS[["Mean"]]),
  "\nMediana = ", sumS[["Median"]],
  "\nQ1 = ", sumS[["1st Qu."]],  "\nQ3 = ", sumS[["3rd Qu."]] )

## wykres słupkowy
h <- hist(kandydaci$wiek, 
   breaks=wB, 
   freq=TRUE,
   col="orange", main="Wiek kandydatów do sejmików...",
   ylab="liczba kandydatów", xlab="wiek", labels=T, xaxt='n')
   axis(side=1, at=wB)
   text(80, 600, summary_label, cex = .8, adj=c(0,1))

   ## wykres pudełkowy
ggplot(kandydaci, aes(x=komitet, y=wiek, fill=komitet))  +
   geom_boxplot() +
   ylab("Wiek") +
   xlab("Komitet") +
   annotate(geom="text", x = 1, y = 90, hjust=0, size=3,
    label = "WwS = Wolność w Samorządzie | ...") +
   guides(fill=FALSE) ;
#komitetminq1Meq3max
1BS18.036.044.057.081.0
2K1518.032.042.053.082.0
3PiS18.040.051.059.079.0
4PO-N18.041.051.060.075.0
5PSL20.044.055.062.080.0
6RAZEM18.028.034.042.087.0
7RN18.027.034.048.081.0
8SLD-LR18.044.058.065.083.0
9WiS18.038.050.061.585.0
10WwS18.024.031.043.083.0
11ZIELONI18.034.044.055.080.0

To samo dla woj. pomorskiego:

kandydaci <- subset (kandydaci, (woj == "22" ))
aggregate (kandydaci$wiek, list(Numer = kandydaci$komitet), fivenum)

## itd...
1BS23.036.544.047.572.0
2K1523.037.050.058.073.0
3PiS21.042.549.063.571.0
4PO-N22.039.050.060.575.0
5PSL28.049.062.068.080.0
6RAZEM19.029.033.538.087.0
7RN21.027.031.549.066.0
8SLD-LR18.050.059.062.575.0
9WwS19.027.032.038.567.0
10ZIELONI19.039.048.054.067.0

url | Wed, 26/09/2018 09:51 | tagi: , ,
Żuławy w Koło 2018 (how it unfolded)

Trasa z kierunkiem wiatru

Nonsensowny drogowskaz na Rubno Wlk.

00:20 wracam do domu z niesamowitej imprezy urodzinowej kol. BL zorganizowanej w Blues Club Gdynia.

01:05 idę spać. Straciłem z pół godziny (żeby rano zaoszczędzić 15 minut) usiłując kupić bilet do Malborka przez Internet ale się nie udało. System nie działał. Tzn. prawie działał. Naciśnięcie ostatniego guzika skutkowało zwisem...

04:20 wstaję. 04:55 jadę na dworzec PKP, kupuję bilet i jadę pociągiem do Malborka. Wysiadam 06:10, przedtem jem śniadanie z pudełka w pociągu.

W Malborku jest już szaro. Z mocnym wiatrem w plecy jadę do Nowego Dworu Gdańskiego (circa 25 km). 07:15 jestem na miejscu. Start za 45 minut bo podobnie jak w imprezie Kociewskiej plan jest taki żeby zapierdzielać w grupie dopóki się da, a na bufetach stawać i jechać z następną grupą. Więc żeby tych grup do podczepienia się było potencjalnie jak najwięcej chcę zacząć z pierwszą. Pierwszy bufet zamierzam odpuścić, bo jest na 37 km czyli blisko startu.

Pogoda jest niezła. Dużo lepsza niż była prognozowana. Miało być zimno, wietrznie i miało padać. Jest około 13C, czyli nie aż tak bardzo zimno, faktycznie wieje, ale nie pada i się nie zanosi żeby padało, a to najważniejsze.

07:50 ustawiam się na linii startu. Trochę wcześnie, ale chę być w pierwszej grupie, bez konieczności wpychania się poza kolejnością. Wśród czekających rowerzyści-turyści na rowerach nie do końca stricte szosowych.

Startujemy z lekkim opóźnieniem o 08:05.

Tempo pierwszego kilometra turystyczne dyktują ci na turystycznych. Inaczej niż w zeszłym roku -- słynny start z kol. Wiktorem -- kiedy to startując w grupie #2 już od początku mieliśmy wściekły zapieprz. Wygląda na to, że najwięksi ściganci się nie spieszą i ustawiają się w kolejnych grupach na starcie. No i dobrze...

Po pierwszym kilometrze zmiana. Prowadzących i tempa. Jedziemy na wschód z wiatrem jakieś 33--35 km. Miło i przyjemnie, do czasu aż doganiają nas ci superściganci. Zabieram się z nimi. Tempo może i specjalnie nie wzrasta, ale to tylko dlatego, że teraz mamy wiatr boczny, a potem czołowo-boczny. Wieje całkiem mocno na wschód/północny-wschód (na Kaliningrad he, he). Zapieprz całkiem konkretny, aż do skrętu na drogę 502 w Tujsku. Tutaj poprawia się jakość asfaltu, ale też tempo wzrasta. Z jednym takim mocnym w nogach, ale powiedzmy słabym w taktyce odpadamy. Mocarze pojechali. Za nami z kolei też nikogo nie widać. Mój kompan jest tak mocny, że gdyby miał lepszą taktykę, to bez problemu by jechał w pierwszej grupie, a tak to mnie tylko holuje (zmian nie daję, o czym go uprzedzam).

Dojeżdżamy do bufetu #1. Ponieważ sytuacja się rozwinęła, tak jak się rozwinęła sugerują żeby stanąć. Pierwszy bufet w Jantarze tak trochę na uboczu, z drogi go nie widać. Zajeżdżamy. Okazuje się, że grupa czołowa też tu stanęła. Bufet super zaopatrzony zresztą: ciasta domowej roboty, naleśniki, bułki z czymśtam. Nawet jakaś zupa. Jakby spróbować tylko każdej z potraw to by człowiek nie był w stanie dalej jechać. Jem dwa kawałki ciasta i dwa naleśniki. Dwa następne w kieszeń...

Jadę dalej. Nawet zaczynam z grupą czołową znowu, ale za duże tempo więc odpuszczam. Dogania mnie za to całkiem mocny gość a potem jeszcze jeden. Jedziemy zgodnie tym razem aż do Nowej Kościelnicy. Tutaj wyłącza mi się kamera (bo zapomniałem włączyć guziczek `Ładuj' w Powerbanku--zawsze czegoś zapomnę). Mówię tym, z którym jadę żeby chwilę zwolnili, bo chcę ustalić co dalej z kamerą, ale oni nie potrafią wolno--no trudno zostałem sam, ale z tyłu ktoś kręci, więc się nie napinam tylko czekam aż mnie dogonią.

Znowu dwóch, ale innych. Słabsi niż ci co nie chcieli czekać i do tego słabi technicznie, że tak powiem. Ja tam po zmianie się za nich chowam oni nie--na kole nie jadą, tylko obok albo 10m za. Mimo tego trzymają się, pomimo tego wściekłego bocznego wiatru. Jedziemy wzdłuż Wisły aż do Mątowów (Dorota z Mątew), tyle że po drodze wreszcie urywam swoich partnerów, ale mam za to dwóch innych. Jednego już znam, jechałem z nim wcześniej. Przeoczyłem bufet #2, on stanął a teraz mnie doszedł (z kolegą).

Za Mątowami skręt jakby na wschód, na wschód, na Miłoradz. Teraz wiatr jest w plecy aż do bufetu #3 (raptę parę kilometrów). Jedziemy we trzech spacerowo, tym bardziej że jeden z nas ma kapcia (ale takiego że idzie jechać--zmieni dętkę na bufecie). Jest generalnie przekonanie że od Miłoradza będzie miło i przyjemnie z wiatrem. Potem się okazało że nie było i nawet nie było szans żeby było przy tym kierunku wiatru (o tym później). Wykorzystując przerwę w zapieprzu uświadamiam współścigantom gdzie są. Że są w Mątowach, wsi w której urodziła się słynna bł. Dorota. Pytam się czy słyszeli o Dorocie. Nie. No to ja że to matka 9-ga dzieci, która kazała się zamurować w celi, gdzie zmarła. No bo jak taki/taka się już zamurował, to no-way, wychodził już tylko nogami do przodu. -- Ale po co? pyta współścigant. -- Ku chwale Bożej -- odpowiadam -- dawniej ludzie tak mieli. -- No ale coś z tego było? A to nie wiem -- odpowiadam :-)

Bufet w Miłoradzu całkiem zwyczajny: chleb z marmoladą i smalcem. Ale dają też kopytka na słodko. Swoim zwyczajem nie rozsiadam się, jem kopytka i dalej sam--dogonią mnie. I faktycznie doganiają w Pogorzałej Wsi. Stąd jest z wiatrem wzdłuż Nogatu prosto do Malborka. Zapierdzielamy całkiem żwawo, a mnie się już przstało chcieć, jeszcze dociągam do Zamku i odpuszczam na zakręcie DK55 na Kościeleczki. Co się będę spinał--z wiatrem sobie pojadę te ostatnie 20km sam (sobie myślę).

Bym znał profil trasy dokładnie, to bym nie miał takich złudzeń. Znowu wieje nieprzyjemny boczny wiatr (aż do Lubiszewa czyli aż praktycznie do mety). Generalnie z tym wiatrem to masakra była. Kilka odcinków z wiatrem, reszta zwykle z nieprzyjemny bocznym albo nawet pod wiatr.

Kilka kilometrów jadę sam, ale dogania mnie następna grupa. Ci są z firmy, są jednakowo ubrani, całkiem mocni i wiedzą co to jazda w grupie. Jadę z nimi prawie do końca, czyli do Lubiszewa. Tam odpuszczam, bo tempo wzrasta a mi się już nie chce (pobudka 4:20 ostatecznie--więc mam wymówkę)

13:02 jestem na mecie. Jem makaron i do Malborka na pociąg. Jest pod wiatr, non-stop. No ale ja się nie spinam. Mam pociąg 15:02 i dużo czasu, tyle że jak się jedzie 18kmh, po przejechaniu 25 +135 = 160 km to trochę się dłuży droga, by się już chciało skończyć.

Dojeżdżam jakoś tak 14:40. Się okazuje, że pociąg jest 14:57 i całkiem sporo ludzi w kolejce do kasy. Kupuję bilet, jest 14:50.

W Kałdowie dosiada się współścigant z pierwszej grupy. Podobno był drugi, jechał circa 4:20 (ja circa 4:57). Na mecie się ociągał, wyjechał o 14:00 i ledwo zdążył pod ten wiatr. By pociąg nie stawał w Kałdowie (nie wszystkie stają, bo to mały przystanek jest bez kas i budynku, a nie żadna stacja), to by nie zdążył. Uświadamiam go jakie miał szczęście :-) NB ja też mogłem w Kałdowie wsiadać, ale wolałem do Malborka, bo to różnie bywa (w sensie, że w Malborku bardziej komfortowo się do pociągu wejdzie--co jest istotne jak się ma takiego klamota jak rower)...

W domu jestem circa 16:20. Minęło 12h od pobudki...

Filmik dając pojęcie jak (ciężko) było :-) jest tutaj. BTW odszukaj na googleMaps Rubno Wlk jeżeli nie wiesz czemu drogowskaz w Marzęcinie wydaje się bezsensowny.

url | Mon, 24/09/2018 05:30 | tagi: ,
UE, PL i (rzekome) wartości

Poezja na unijnych salonach. Timmermans poleciał "Itaką"

Autor: Katarzyna Szymańska-Borginon

Ubrał się w szaty Odyseusza i chce wciąż utrzymywać się na fali. Nawet przez kolejnych pięć lat. A do tego potrzebna mu jest Polska.

Wiceprzewodniczący Komisji Europejskiej Frans Timmermans przyznał, że takie ma plany, używając przy tym poetyckiego porównania. Okazuje się, że gdy polityk w przypływie szczerości zaczyna cytować wiersze, to mówi coś bardzo prawdziwego o sobie samym i swoich rzeczywistych intencjach. Podczas konferencji prasowej po wysłuchaniu Polski w Radzie UE dziennikarka zapytała Fransa Timmermansa, czy nie obawia się, że wysłuchania Polski będą się mnożyć, a rezultatu nie będzie.

Wtedy polityk przypomniał wiersz Konstandinosa Kawafisa "Itaka". To jeden z moich ulubionych poetów -- pochwalił się komisarz. Nagrodą dla Odyseusza nie jest powrót do Itaki, ale sama podróż, którą odbył -- interpretował wiersz. W ten sposób opisałbym artykuł siódmy --dodał wiceprzewodniczący KE. Tłumaczył następnie, że najważniejsze w procedurze artykułu siódmego jest nie to, czy będzie głosowanie w Radzie UE (w sprawie sankcji, czy uznania Polski za kraj niepraworządny), ale "działania", "wspólny wysiłek", "dialog", "sam proces". Nadzwyczajna szczerość. Komisarz otwarcie więc powiedział to, co mówi się w  brukselskich kuluarach po cichu. Cel artykułu siódmego, czyli głosowanie w Radzie UE jest mniej istotny (bo i tak na razie nie ma szans realizacji), ważna jest sama "podróż", czyli "grillowanie Polski" i stałe "nękanie" poprzez wysłuchania, czy rezolucje. Ciekawe, czy Timmermans chciał to powiedzieć, czy powiedział za dużo. Bo na pewno nie służy to mobilizowaniu Warszawy.

W pewnym momencie Frans Timmermans nie miał nawet problemu z utożsamieniem siebie z Odyseuszem. Gdy dziennikarz zwrócił uwagę, że Odyseusz nie był ograniczony liczącą pięć lat kadencją, komisarz od razu podjął temat. A kto powiedział, że kończę w przyszłym roku? Nie mam zamiaru odejść. Mam zamiar kontynuować -- tłumaczył. I znowu, wpadając w sidła metafory, Timmermans potwierdził oficjalnie to, o czym szeptano od dawna. Zamierza powtórnie ubiegać się o stanowisko holenderskiego komisarza. Takie wyznanie na konferencji prasowej, gdy głównym tematem jest kwestia praworządności w Polsce - oznacza tylko jedno - połączenie obu spraw. W takiej sytuacji staje się jasne, że ostre stanowisko w sprawie Polski, poprawia Timmermansowi notowania. Być może nawet pomaga w robieniu kariery.

W kontekście zbliżających się wyborów europejskich (także na stanowiska komisarzy) sensowne jest więc pytanie o prawdziwe intencje wiceprzewodniczącego Timmermansa.

Jeżeli najważniejsza jego zdaniem jest "podróż" (grillowanie Polski), to wyjaśnia się dlaczego, nie było widać po stronie Timmermansa woli osiągnięcia kompromisu z Polską, w momencie, kiedy stanowisko objął Mateusz Morawiecki.

Teraz już sprawy zaszły za daleko. Z winy Warszawy, ale także dlatego, że Timmermans chce zrobić karierę kosztem Polski. I nie można udawać, że się tego nie widzi. Na zakończenie. Lepiej, żeby politycy nie cytowali poezji na konferencjach prasowych.

A tak to widzą w FT. Mniej poezji więcej konkretów. Co bardziej kuriozalne tezy wytłuściłem

The intervention of two big EU powers underscores the bloc's internal divisions over the rise of illiberal parties to government in central Europe and elsewhere. = Problemem nie jest są zatem Europejskie Wartości tylko to że nie ci rządzą co trzeba

We hope that Poland acts constructively and does not take actions which cannot be changed afterwards = nie twój zasrany interes Teutonie (zwłaszcza w kontekście poprzedniego zdania)

Tuesday's hearing in Brussels ended inconclusively = kogo zatem to oświadczenie dotyczy? No wygląda że nie PL tylko tych co nie dość entuzjastycznie chcą się dołączyć

Cały (prawie) tekst brzmi jak następuje:

Germany and France urge Poland to halt judicial overhaul

Germany and France have joined forces to press Poland to back down over a contentious judicial overhaul in the latest sign of the widening EU rift over the alleged authoritarian drift of some member states.

Michael Roth, Berlin's Europe minister, said in a joint statement with Paris on Tuesday that the Polish case had become ``more urgent than ever'' in the bloc's fight for fundamental values including the rule of law.

The Franco-German comments came in a hearing by the EU's other 27 member states of a case launched by the European Commission in December over Warsaw's possible breaches of EU values. The intervention of two big EU powers underscores the bloc's internal divisions over the rise of illiberal parties to government in central Europe and elsewhere.

The commission is expected to up the pressure on Poland on Wednesday by launching a separate complaint to the European Court of Justice over the judicial changes, EU diplomats said.

Mr Roth deplored the lack of progress made in five EU ministerial meetings so far on the so-called Article 7 case launched by the commission against Poland. He said the matter had become still more urgent as Warsaw had pressed ahead with rules to force some Supreme Court judges to retire and had begun steps to replace them.

We hope that Poland acts constructively and does not take actions which cannot be changed afterwards,'' he said.

Tuesday's hearing in Brussels ended inconclusively. Member states critical of Poland's action need a four-fifths majority of the EU27 to press the case forward -- a high bar. A move to impose sanctions such as suspending Warsaw's voting rights would require unanimity, which Hungary has said it will block. [...]

Frans Timmermans, EU commissioner, said there was not ``much good news'' from the hearing as Poland's government had failed to address concerns about its supreme court law in particular.

``The situation has not improved'' said Mr Timmermans.

He insisted that the power of the Article 7 process was not about getting member states to agree to sanction Poland but engage Warsaw in a process of dialogue.

``The reward for Ulysses is not arriving home but the voyage to get there. That is how I would like to describe Article 7. We have not reached Ithaca yet''.

url | Wed, 19/09/2018 16:35 | tagi: ,
Żuławy w Koło 2018

Się tak rozochociłem, że zapisałem się na Żuławy w Koło 2018 (99 PLN). W ramach przygotowań, że tak powiem taktycznych postanowiłem rozpoznać możliwości przeciwnika:-) Konkretnie ustalić jak jechali ci co się zapisali, a co już startowali w ŻwK w roku 2017 albo 2016. Zadanie zatem polega na odszukaniu na liście zgłoszeń tych co się zapisali na edycję 2018 i jednocześnie ukończyli ŻwK w latach 2016/2017. Oczywiście nie ręcznie, tylko automatem:

## poniższe ściąga plik z listą zapisanych
wget 'http://www.czasomierzyk.pl/zapisy2016/zulawywkolo/index.php?akcja=lista' -O ZwK2018.out

Plik HTML ma tak prostą strukturę, że jego zamiana (za pomocą wyrażeń regularnych) na CSV jest banalna. Jak już mam ten plik CSV, to porównuję go do połączonych wyników z lat 2017/2016 (też w formacie CSV). Skrypt mam co porównuje pliki CSV:

perl join_csvs.pl -fn1 ZwK201809190908.csv  -fs1 1,2 -fn2 ZwK16_17.csv -fs2 1,2

Porównuje pliki ZwK201809190908.csv oraz ZwK16_17.csv, w oparciu o (wspólną) wartości dla kolumn nr 1 oraz nr 2 (w tym przypadku są to kolumny zawierające nazwisko i imię). Innymi słowy fs1 c1,c2..., to klucz główny, a fs2 c1,c2, to klucz obcy. Skrypt wypisuje połączone wiersze odpowiadające tym wierszom dla, których klucz główny = klucz obcy. Na dziś (19 września) takich wierszy wypisał 55, (na 104 zgłoszenia na dystansie 140km), ale pomijam tych co startowali kiedyś na najkrótszym dystansie lub tych, którzy startowali wprawdzie na najkrótszym, ale mieli średnią mniejszą niż 24kmh (odpada w ten sposób 10 zostaje 45). Na koniec plik jest zapodawany do prostego skryptu rysującego wykres słupkowy:

z <- read.csv("ZwK_2018_vs_2017.csv", sep = ';',
   header=T, na.string="NA", dec=".");

s140 <- summary(z$speed)

z <- subset (z, ( speed > 16.0 )); ## bez maruderów

# wykres słupkowy
h <- hist(z$speed,
  breaks=c(18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35),
  freq=TRUE,
  col="orange",
  main="Dystans: 140 (biorący udział w latach 2017-16)",
  xlab="Prędkość średnia w latach 2017--16 [kmh]",ylab="L.kolarzy",
  labels=T, xaxt='n' )
  axis(side=1, at=c(18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35))
  text(38, 37, summary_label, cex = .8, adj=c(1,1) )

Jak widać paru ludków w okolicach 30kmh jest. Będzie za kim jechać.

url | Wed, 19/09/2018 12:54 | tagi: , , ,
Wybory 2014 (drugie pobranie danych)

Ściągnąłem protokoły z wyborów do sejmików wojewódzkich jeszcze raz. Punktem wyjścia były indywidualne pliki dla każdej gminy pobrane ze strony samorzad2014.pkw.gov.pl. Te pliki zawierają zsumowane wyniki wyborów dla danej gminy, ale także zawierają adresy URL do plików z wynikami na poziomie poszczególnych komisji (z tej gminy). Mają one adres URL wg schematu:

http://samorzad2014.pkw.gov.pl/357_rady_woj/0/NR_TERYT_GMINY

Mając zestawienie numerów TERYT gmin pobieram indywidualne pliki za pomocą prostego skryptu:

use LWP::Simple;
## Na wejściu lista 6-cyfrowych numerów gmin
while (<>) { $nn++;
   chomp();
   $File{"$_"}++;
   $url = "http://samorzad2014.pkw.gov.pl/357_Sejmiki_wojewodztw/0/$_";

   if ( $File{"$_"} > 1 ) {
   $file = "./html/$_" . "$File{$_}_"  . ".html"; }
   else { $file = "./html/$_" . ".html"; }

   getstore($url, $file);
   print STDERR "$nn = $url => $file... stored\n";
}

Z tych plików wydłubuję numery komisji (które są wartościami atrybutu href do pliku z protokołem i mają postać 321_protokol_komisji_obwodowej/NRKOMISJI) i zapisuję do pliku o strukturze:

020101;321_protokol_komisji_obwodowej/NRKOMISJI

Teraz z plików komisji odczytuję adresy URL protokołów wyborów do sejmików. Ten URL wygląda następująco:

020101;321_protokol_komisji_obwodowej/NRKOMISJI/rdw_COŚTAM

Przy czym COŚTAM to cyfra, np. rdw_5. Problem, że ta cyfra nie zawsze jest taka sama, stąd konieczność przeczytania pliku i odszukania w nim odsyłacza do protokołu wyborów do sejmików. Na szczęście pliki HTML są w miarę proste i do odszukania tego co trzeba wystarczy proste wyrażenie regularne. Poniższy skrypt po odszukaniu odsyłacza pobiera plik protokołu i zapisuje w katalogu ./protokoly_sw/:

#!/usr/bin/perl
use LWP::Simple;
my $log = "protokoly_sw.log";
open (LOG, ">$log") || die ("Nie mogę pisać do $log");

while (<>) {  $nn++;
  chomp();
  ($teryt, $postfix, $nrk) = split /[;\/]/, $_;

  unless ( -f "./protokoly_sw/$nrk" ) {
     $file = "./protokoly_sw/$nrk";

     open (LOGP, "./komisje/$nrk");

     while (<LOGP>) { chomp();
        if (/([^\/]*protokol_komisji.*)">Sejmik/) {## URL do protokołu
           $prot_url = $1;
           print "$1\n";
           last
        }
     }
     close (LOGP);
     $url = "http://samorzad2014.pkw.gov.pl/$prot_url";
     getstore($url, $file);
     print LOG "$nn = $url => $file stored\n";
     print STDERR "*** $nn = $url => $file stored\n";
  } else { print STDERR "*** $url => $file stored already\n"; }
}

Teraz analizuję pobrane protokoły zapisując informacje do trzech plików .csv: ws2014_komisje.csv ws2014_listy.csv oraz ws2014_kandydaci.csv. Pierwszy zawiera informacje zbiorcze takie jak liczba uprawnionych czy liczba głosów ważnych dla każdej komisji, drugi informacje zbiorcze o liczbie głosów oddanych na każdą listę wyborczą w każdej komisji a trzeci o liczbie głosów oddanych na każdego kandydata w każdej komisji. W związu z tym:

wc -l ws2014_*csv
  3062457 ws2014_kandydaci.csv
   301876 ws2014_listy.csv
    27393 ws2014_komisje.csv

Tj. ws2014_komisje.csv ma 27393 wierszy (i tyle jest komisji); ws2014_listy.csv ma 301876, a ws2014_kandydaci.csv ponad 3mln wierszy (wynik kandydata w każdej komisji, w której był zarejestrowany). Skrypt (nieco uproszczony) wydłubujący potrzebne informacje z pliku protokołu wygląda następująco:

#!/usr/bin/perl
open (LOG, ">>ws2014_log.log");

open (L, ">>ws2014_listy.csv");
open (K, ">>ws2014_kandydaci.csv");
open (X, ">>ws2014_komisje.csv");

$fileName = $ARGV[0];
$fileName =~ s/(\/[^\/]+)$/$1/;

while(<>) {
   chomp();
	    
   if (/<h2>/) {  $mode = 'I'; 

       while (<>) {
          chomp();
	  if (/<div>Kod terytorialny/) { $Teryt = next_line(); }
          if (/<div>Numer obwodu/) { $IdO = next_line(); }
           if (/<div>Adres/) { $Addr = next_line();
             $IdDataFull = "$fileName;$Teryt;$IdO;$Addr";
             $IdData = "$fileName;$Teryt;$IdO";
             last;
          }
       }
   }
   if ($mode eq 'I') {
   }

   if (/Wyniki wyborów na Kandydatów/) {  $mode = 'C' }
   if (/ZESTAWIENIE WYNIKÓW/) {  $mode = 'S';
       while (<>) {
          chomp();

	  ## pobieranie informacji nt. komisji
	  ## pominięto kilkanaście wierszy postaci:
	  ## if (/<div>###/) { $xxx = next_line() }
	  ## ...
          if (/<div>Liczba kart ważnych/) { $N_karty_wazne = next_line(); }
          if (/<div>Liczba głosów ważnych oddanych/) {
	    $N_glosy_wazne = next_line() ;
	    print X "$IdDataFull;$N_uprawnieni;$N_karty_otrzymane;$N_karty_niewykorzystane;"
	      . "$N_karty_wydane;$N_pelnomocnicy;$N_pakiety;$N_karty_wyjete;$karty_z_kopert;"
	      . "$N_karty_niewazne;$N_karty_wazne;$N_glosy_wazne;$N_glosy_niewazne\n";
	    last;
          }
       }

   ##########
   if (/Wyniki wyborów na listy/) {
     $mode = 'L' ;
     $colNo=0;
     %List = ();
     $start = 0;
     while (<>) {
          chomp();
          if (/<tbody>/) {$start = 1}
          if ($start == 1 ) {
              if (/<td[^<>]*>/ ) {
	         $colNo++;
                 $List{$colNo} = clean($_);
              }
              if (/<tr>/) {
                  $colNo=0;
                  %List = ();
		}
	      if (/<\/tr>/) {
		$line_ = "$IdData;";
		for $x (sort keys %List ) { $line_ .= "$List{$x};" }
		print L "$line_\n";
              }
              if (/<\/tbody>/ ) {###
                 last;
              } ##//
	    }
	}
   }
   ###########

   if ($mode eq 'C' && /<tr>/) {
       $colNo=0;
       %Candidate = ();
       while (<>) {
	 chomp();
	 
          if (/<table>/) { next } ## skip this line

	 if (/<\/tr>/ ) { 
              $line_ = "$IdData;";
              for $x (sort keys %Candidate ) {  $line_ .= "$Candidate{$x};" }
              print K "$line_\n";
              last; 
          } ## //end 
          if (/<td[^<>]*>/ ) { #############
	       $colNo++;
               $Candidate{$colNo} = clean($_);
	     }
	}
     }

}

### ### ### 

sub clean {
  my $x = shift;

  $x =~ s/<[^<>]+>//g;
  $x =~ s/^[\t ]+|[\t ]+$//g;
  $x =~ s/"//g;
  return ($x)
}


sub next_line {
   while (<>) {
      chomp();
      return (clean ($_));
   }
}

close(L);
close(K);
close(X);

print LOG "$fileName...\n";
close (LOG);

Kilka minut i po bólu. Teraz sprawdzam czy to co się pobrało i to co było do tej pory z grubsza się zgadza.

#!/usr/bin/perl
$pobranie1="komisje-frekwencja-ws2014.csv"; ## z 2015r
$pobranie2="ws2014_komisje.csv";

open(WX, $pobranie1) || die "cannot open $pobranie1\n";

while (<WX>) {
  chomp();
  ($teryt, $nrk, $nro, $adres, $lwug, $lkw, $lkwzu, 
        $lgnw, $lgw, $freq, $pgnw) = split /;/, $_;
  $LWUG1{"$teryt:$nro"} = $lwug; ## liczba wyborców
  $LGW1{"$teryt:$nro"} = $lgw; ## glosy ważne
  $ADDR1{"$teryt:$nro"} = $adres; ##
}
close (WX);

### ### ###

open(WY, $pobranie2) || die "cannot open $pobranie2\n";
while (<WY>) {
  chomp();
  ($id, $teryt, $idk, $adres, $uprawnieni, $kartyOtrzymane, 
    $kartyNiewydane, $kartyWydane, $pelnomocnicy, $pakiety, 
    $kartyWyjete, $koperty, $kartyNiewazne, $kartyWazne,
    $glosy, $glosyNiewazne) = split /;/, $_;
  $LWUG2{"$teryt:$idk"} = $uprawnieni;
  $LGW2{"$teryt:$idk"} = $glosy;
  $ADDR2{"$teryt:$idk"} = $adres;
}
close (WY);

### LWUG1 ma mniej głosów ## ### ### ### ###
for $ik ( sort keys %LWUG1 ) {
    if ( ( $LWUG1{$ik} != $LWUG2{$ik} ) || 
       ($LGW1{$ik} != $LGW2{$ik} )) {
       print "$ik $LWUG1{$ik} = $LWUG2{$ik} $LGW1{$ik} = $LGW2{$ik}\n";
    }
}

Identyfikatorem komisji na stronach PKW jest 6-cyfrowy numer TERYT + numer komisji (w gminie). Porównanie 26477 komisji pobranych 2015r. z 27446 komisjami pobranymi teraz (+969 komisji) daje w rezultacie:

021901:1 2020 = 2020 914 = 913
021901:2 2189 = 2189 742 = 741
026401:112 2039 = 2039 746 = 744
026401:17 2001 = 2001 536 = 534
026401:178 2073 = 2073 765 = 762
026401:18 1600 = 1600 474 = 473
026401:194 1615 = 1615 637 = 628
026401:215 1457 = 1457 528 = 527
026401:245 2058 = 2058 695 = 697
026401:42 1892 = 1892 504 = 503
026401:70 1823 = 1823 597 = 593
026401:78 1918 = 1918 762 = 760
241004:4 994 =  850 350 = 350
241005:13 1736 = 1736 764 = 762
241005:22 1422 = 1422 569 = 567
241005:6 1441 = 1441 732 = 723
241005:7 1668 = 1668 623 = 621

Czyli dane nie były picowane :-) Dobrze wiedzieć

Pobrane dane są tutaj.

url | Wed, 19/09/2018 08:54 | tagi: , ,
Wybory 2014 (revisited)
https://raw.githubusercontent.com/hrpunio/MBlog/master/pic/pgnw_correlations-0.png
pgnw vs PSL
https://raw.githubusercontent.com/hrpunio/MBlog/master/pic/pgnw_correlations-1.png
pgnw vs PiS
https://raw.githubusercontent.com/hrpunio/MBlog/master/pic/pgnw_correlations-2.png
pgnw vs PO

Że się zbliżają wybory samorządowe, to ja znowu pochyliłem się nad wynikami z poprzednich tj. z roku 2014. Piszę znowu, bo dane pobrałem dawno temu ze strony http://wybory2014.pkw.gov.pl/. Przypomnę też, że wybory te zakończyły się nielichym skandalem. Po pierwsze system informatyczny Państwowej Komisji Wyborczej zawiódł spektakularnie. Po drugie, nie tylko tradycyjnie odnotowano niską frekwencję, ale dodatkowo i z niewiadomych do końca powodów, doszła niesłychanie wysoka liczba oddanych głosów nieważnych. Po trzecie dramatyczna różnica pomiędzy wynikiem prognozy exit pool, a wynikiem oficjalnym spowodowała, że ówczesna opozycja oskarżyła ówczesnych rządzących o fałszerstwo wyborcze. Różnica sama w sobie nie jest oczywiście czymś niemożliwym, ale też prognozy exit pool są no raczej na tyle dokładne, że na ich podstawie jedni uznają się za wygranych, a inni za przegranych w tzw. cywilizowanym świecie. A w PL akurat ktoś się rąbnął o 50%.

BTW wyobraźmy sobie reakcję #SektyPancernejKonsytytucji (aka #OpozycjiTotalnej) na coś takiego dziś.

Wracając do bazy protokołów. Jest ona niekompletna, co było stanem na czas po wyborach kiedy była pobierana i co (według mnie) było spowodowane przez system informatyczny PKW (czytaj chaos w PKW). Teraz widzę, że baza na stronie PKW wygląda inaczej i być może jest kompletna, ale nie chce mi się tego (na razie) jeszcze raz pobierać. Moja baza jest oryginalna, a nie picowana (żart :-)), a zawiera ponad 96% tego co powinna zawierać (zakładając, że obwodów jest 27435 ja mam 26495). Ta baza jest dostępna tutaj.

Mówiąc konkretnie i porównując z listą 27435 obwodów braki są następujące: Dolnośląskie = 38; Kujawsko-Pomorskie = 17; Lubelskie = 14; Lubuskie = 12; Łódzkie = 14; Małopolskie = 22; Mazowieckie = 1139; Opolskie = 7; Podkarpackie = 10; Podlaskie = 5; Pomorskie = 20; Śląskie = 28; Świętokrzyskie = 13; Warmińsko-Mazurskie = 12; Wielkopolskie = 14; Zachodniopomorskie = 18. Zatem baza jest w miarę kompletna (za wyjątkiem woj. Mazowieckiego, w przypadku którego protokoły nie były opublikowane nawet kilka miesięcy po wyborach).

Każdy protokół zawiera adres i kod teryt komisji obwodowej, tyle że TERYT jest 6 cyfrowy, a nie pełny. Z tego powodu klasyfikację miasto/wieś dokonałem w taki sposób że gmina jest `miejska' jeżeli wg klasyfikacji teryt ma ona typ `gmina miejska' (U) a w każdym innym przypadku (miejsko-wiejska, wiejska, miasto w gminie miejsko-wiejskiej albo obszar wiejski w gminie miejsko-wiejskiej) gmina jest `wiejska' (R). Jest 9996 gmin typu U, a 16881 gmin jest typu R.

Na początek wykonałem prostą analizę eksploracyjną licząc wartości średnie, korelacje oraz regresje pomiędzy głosami nieważnymi a poparciem dla partii. Stosowny fragment R-skryptu wygląda następująco:

## Korelacje pomiędzy % głosów a % głosów niewaznych
cor(d$pgnw14, d$pslp, use = "complete")

## Wykresy rozrzutu  ## ###
lm <- lm(data=d, pslp ~ pgnw14 ); summary(lm)
lmc <- coef(lm);
title <- sprintf ("psl = %.2f pgnw + %.1f", lmc[2], lmc[1] );

ggplot(d, aes(x = pgnw14, y=pslp )) +
  geom_point(colour = 'blue') +
  ggtitle(title) +
  theme(plot.title = element_text(hjust = 0.5)) +
  xlab(label="pgnw") +
  ylab(label="pslp") +
  geom_smooth(method = "lm", colour = 'black')

lm <- lm(data=d, pisp ~ pgnw14 ); summary(lm)
https://raw.githubusercontent.com/hrpunio/MBlog/master/pic/mapa-pgnw0.png
pgnw
https://raw.githubusercontent.com/hrpunio/MBlog/master/pic/mapa-pgnw1.png
pgnw vs psl
https://raw.githubusercontent.com/hrpunio/MBlog/master/pic/mapa-pgnw2.png
pgnw vs pis
https://raw.githubusercontent.com/hrpunio/MBlog/master/pic/mapa-pgnw3.png
pgnw vs po

Wynik są następujące:

  ## pgnw (procent głosów nieważnych)
  Min. 1st Qu.  Median    Mean 3rd Qu.    Max.  Grupa
  0.00    8.20   11.67   12.82   16.05   56.41  Razem
  0.00   12.55   18.18   18.75   23.98  100.00  Miasto
  0.00   17.05   21.37   22.15   26.38   77.42  Wieś
  ## poparcie
  ## Miasto
  0.00   6.719   10.12   13.82   16.53  100.00  PSL
  0.00   20.83   25.91   27.12   32.35  100.00  PiS
  0.00   25.20   32.56   32.90   39.84   85.00  PO
  ## Wieś
  0.00   20.11   32.61   35.86   49.27  100.00  PSL
  0.00   15.42   22.60   25.55   32.96  100.00  PiS
  0.00   7.748   15.43   18.53   26.44   92.65  PO
  ## wsp. korelacji (pgnw vs poparcie)
  ## PSL             PiS             PO         Grupa
  0.4053339      -0.1972364      -0.3321558     Razem
  0.4333851      -0.2104114      -0.2648886     Miasto
  0.0905243      -0.1931745      -0.0370197     Wieś

Liczba głosów nieważnych była wyższa na obszarach wiejskich (średnia 22,15% vs 18,75%). Poparcie dla czołowych partii był na wsi najwyższe dla PSL, potem PiS a na końcu PO; w mieście dokładnie odwrotnie. Wystąpiła dodatnia korelacja pomiędzy liczbą głosów nieważnych, a poparciem w przypadku PSL. Nieoczekiwanie była większa na obszarach większych miast, a mniejsza poza nimi. W przypadku zarówno PiS jak i PO korelacja była ujemna (większy udział głosów nieważnych oznacza mniejsze poparcie). Zależność pomiędzy liczbą głosów nieważnych a poparciem ilustrują także wykresy.

Jest zatem różnica między `miastem' a `wsią'. A czy jest różnica w decyzjach w aspekcie przestrzennym? Obliczyłem średnią wartość współczynnika korelacji pomiędzy liczbą głosów nieważnych, a poparciem w powiatach:

powiat <- substr(d$teryt, 0, 4)
d[,"powiat"] <- powiat;

p.psl <- d %>% group_by(powiat) %>% summarise(V1=cor(pgnw14,pslp))
p.pis <- d %>% group_by(powiat) %>% summarise(V1=cor(pgnw14,pis))
p.po  <- d %>% group_by(powiat) %>% summarise(V1=cor(pgnw14,po))

print(p.psl, n=Inf)
print(p.pis, n=Inf)
print(p.po, n=Inf)

> fivenum(p.psl$V1)
[1] -0.5984602  0.1066262  0.2906827  0.4491453  0.8536293
> fivenum(p.pis$V1)
[1] -0.7985236 -0.4216242 -0.2965959 -0.1658306  0.1877184
> fivenum(p.po$V1)
[1] -0.8092580 -0.4891280 -0.3725242 -0.2420753  0.4726305

Jak widać są znaczące różnice...

Google Fusion Tables (GFT)

Jedyne narzędzie jakie znam/mam/używam do przestrzennej wizualizacji danych.

Protokoły komisji zawierają adresy. Wykonałem geokodowanie tychże adresów za pomocą geocodera Google. Z różnym skutkiem, mianowicie 27435 komisji zgeokodowało się na 21716 różnych adresów. Zdarza się faktycznie, że dwie (a nawet więcej) komisje mają siedzibę w tym samym budynku. Nie mając ani chęci ani czasu na dokładną inspekcję sprawdziłem jak wygląda rozkład siedzib/adresów względem liczby komisji:

perl chk_duplicated_coords.pl | sort  -n
...
15 49.9062558 21.7658112
16 51.663189 16.5125886
18 51.2070067 16.1553231
20 49.9953359 21.3075494
28 50.5798603 21.6925451
40 52.6483303 19.0677357
50 54.3520252 18.6466384

Pierwsza kolumna to liczba komisji. Można przyjąć że jeżeli liczba komisji jest większa od 4 to doszło do błędnego geokodowania. Takich wątpliwych adresów jest:

perl chk_duplicated_coords.pl | awk '$1 > 4 {print $0}' | wc -l
142  

Zostawiam ten problem na później przy czym z punktu widzenia wizualizacji za pomocą GFT, coś co ma identyczne współrzędne się nałoży na siebie, np. 50 komisji o współrzędnych 54.3520252/18.6466384 będzie pokazane na mapie jako jedna kropka (przy założeniu że zastosujemy kropkę do wizualizacji oczywiście). Żeby wszystkie komisje były widoczne (nawet te które mają prawidłowe ale identyczne współrzędne), to można zastosować losowe drganie (jitter). Tyle na razie.

Plik powiaty_korelacje_pgnw_poparcie.csv zawiera m.in. obliczone w R współczynniki korelacji pomiędzy liczbą głosów nieważnych, a poparciem. Mam też plik zawierający obrysy powiatów i ich środki (teryt_powiaty_BB.csv). Na pierwszej mapie przedstawiono przeciętne wartości pgnw (odsetek głosów nieważnych). Czerwone i niebieskie kropki oznaczają wysokie wartości pgnw. Wyraźnie widać, że powiaty na zachodzie / północnym zachodzie mają wyższe wartości pgnw niż w pozostałej częsci kraju. Takiej przestrzennej zależności nie widać dla trzech pozostałych mapek, ilustrujących przeciętną wielkość współczynnika korelacji pomiędzy poparciem dla partii (PSL, PiS, PO) a odsetkiem głosów nieważnych. Wniosek: sympatycy wszystkich partii mylili się podobnie, a ich błąd był korzystny dla PSL.

Dane, skrypty i reszta wykresów są tutaj. Mapy GFT: poparcie/pgnw/powiaty oraz pgnw/obwody.

url | Thu, 13/09/2018 09:56 | tagi: , ,
Kociewie Kołem 2018 (how it unfolded)


Z Elką wyjechaliśmy 6:10 albo coś w tym stylu (plan był że o 6:00)

Po z grubsza godzinie byliśmy na tym Owidz-Grodzisku...

Poleciałem po numer i 7:40 byłem gotowy. Elka odjechała. Na start podjechałem 7:50 a tam tłumów nie ma; ostatecznie wystartowałem o 8:06 z pierwszą grupą.

Plan był taki żeby zapierdzielać w grupie dopóki się da, ale na bufetach stawać i jechać z następną grupą. W tym zbożnym celu nie wziąłem prawie nic do jedzenia (ostatecznie za start zapłaciłem 111 PLN, więc niech się chociaż trochę zwróci). Ponieważ dobrze mi szło i ponieważ pierwszy bufet był już na 40 km, to go ominąłem. Być może to był błąd, bo tak do 70 km to mi szło, a potem już jakby nie do końca. Do 80 km jeszcze się trzymałem, ale do bufetu #2 (na prawie 100 km) dotarłem w kiepskim stanie i za grupą. W bufecie szandar i ciasta, przy czym szandar, to zapieczone utarte ziemniaki z cebulą i boczkiem. Rodzaj mega-placka ziemniaczanego (przepis w goole można znaleźć). Jem tego 2/3 porcji, resztę w kieszeń na spróbowanie dla Elki. Do szandara kawka + mały serniczek i jadę dalej. BTW mi ten szandar smakował, ale opinia może być nieobiektywna, bo głodny byłem.

Część grupy, z którą jechałem bufetowała tak długo, że mogę kontynuować jazdę w mocnym towarzystwie. Całkiem nieźle mi znowu idzie, co z jednej strony pewnie zasługą szandara, a z drugiej że grupa ciut wolniej pomyka, bo jednak najsilniejszych już w niej nie ma. Na 115 km bufetu #3. Ja skręcam do bufetu, a moja grupa nie. Na bufecie tłumy, bo tą część trasy pokonują już uczestnicy, którzy się zapisali na krótsze dystanse. Zamiast szandara dają racuchy i jakąś zupę z kapustą. Za zupę dziękuję, jem dwa racuchy (dwa następne biorę na spróbowanie dla Elki) z kawką i dalej.

Teraz jadę w sumie sam, mijając pojedynczych maruderów. Wreszcie dogania mnie poważna grupa i następne parę kilometrów mam solidne koło. Tylko parę, bo bufet #4 jeszcze został (130 km). Moja grupa jedzie dalej a ja skręcam. Dobra decyzja, bo bufet #4 najlepiej zaopatrzony. Wprawdzie bardziej oglądam niż jem, ale nawet dla popatrzenia warto było stanąć. Są omasty w tuzinie bodajże wariantów (z nieśmiertelnym smalcem na czele, ale zmieszanym z grzybami), ciasta, jogurty... Ja decyduję się na kaszę manną z czarną jagodą + dwie małe porcje jogurtu. Kasza tak mi smakuje, że dwie porcje ładuję do bidonu dla Elki (w domu się dowiaduję, że Elka nie lubi kaszy mannej.)

Od bufetu #4 do mety mam 25km. Z 10 km jadę ze starszym gościem, resztę sam. Dojeżdżam do mety o 13:20 czy jakoś tak czyli po 5h z niewielkim ogonkiem. Trasa co mi się wydawała na rysunku mocno sfalowana okazała się całkiem płaska. Jedyna niewielka dolegliwość to stan dróg, nie tyle dziurawych co o nierównej nawierzchni (pofalowany/popękany asfalt)

Idę po medal, potem po makaron. Potem jadę 30 km do Tczewa na pociąg :-). Do Pelplina jest bliżej, ale tam najbliższy pociąg do Gdańska odjeżdża o 16:45.

Żeby się nie stresować, nie sprawdzam połączeń z Trójmiastem z Tczewa do którego docieram o 15:15. Pociąg mam 15:17 i już na niego nie zdążę. Następny jest o 16:30. Pech...

W domu jestem o 17:40.

Sprawy sprzętowe

Eksperymentalnie dokleiłem do mostka powerbank (Anker Mini 3000 mAh) do zasilania kamery, która normalnie działa circa 2h. Alternatywą byłoby wymienianie akumulatora na bufetach, ale to zawsze stres i kłopot, bo trzeba odkręcić śrubę mocującą, wyjąć kamerę z obudowy a potem wsadzić i zakręcić. U mnie nie jest to aż tak trywialne z uwagi na konstrukcję obudowy i sposób jej umieszczenia (pod kierownicą, bo przecież nie będą jeździł z obciachowo sterczącą kamerą.) Pomysł z powerbankiem się sprawdził, a kamera się wyłączyła no dokładnie na linii mety (czasami ma się szczęście.) Teraz mam 128Gb do przetworzenia...

Ślad jest tutaj (albo kml.) Kilka zdjęć jest tutaj.

url | Mon, 10/09/2018 07:18 | tagi: ,
Przygotowania do Kociewie Kołem


W zeszłym roku wziąłem udział w imprezie kolarsko-rekreacyjnej pn. Żuławy w Koło, a teraz zapisałem się na Kociewie Kołem, która ma się odbyć 9 września. Ta sama firma organizuje jak się łatwo domyśleć.

Żeby nie jechać w ciemno pobrałem stosowne dane ze strony organizatora, zamieniłem je na plik CSV i policzyłem różne statystyki. W 2016 średnia prędkość na najdłuższym dystancie (170 km) wyniosła na przykład 27,05 km/h. Rok później (dystans 155 km) było to 26,69 km/h. Czyli sporo, bo na płaskiej i krótszej trasie Żuławy w Koło było dla przykładu w 2016 roku 25,47 km/h, a w 2017 26,23 km/h. Więcej szczegółów na wykresach pudełkowych obok.

Ściągnąłem też w środę listę uczestników, których okazało się jest 719, w tym z Gdańska 332, z Gdyni 107, a tak w ogóle to ze 120 różnych miejscowości. Za pomocą Google Fusion Tables można pokazać listę na mapie. Żeby kropki z tej samej miejscowości się nie nakładały na siebie zastosowałem losowe `drganie' (jitter) wg. algorytmu:

### Jitter w kole o średnicy $r
$factorJ = 0.00001; ## ustalone heurystycznie

$sd = sqrt($factorJ * $N); # $N liczba kropek dla miejscowosci, tj dla GDA 332
$r = $sd * sqrt(rand()); $theta = rand() * 2 * $pi;
$rand_lat = $lat + $r * cos($theta);
$rand_lon = $lon + $r * sin($theta);

### Jitter w prostokącie o boku $r
$rand_lat = $lat + rand($sd);
$rand_lon = $lon + rand($sd);

Rezultat jak na obrazku poniżej, albo tutaj.

Lewy obrazek to mapa bez `jittera' a prawy z zastosowanym `jitterem'.

url | Fri, 07/09/2018 07:46 | tagi: , , , , ,
Rysowanie profilu wysokości w R

Ze śladu GPX prostym skryptem wyciągam co trzeba tworząc plik CSV o następującej zawartości (nazwy kolumn: data-czas,wysokość,prędkość,dystans przebyty):

daytime;ele;speed;dist  

Teraz poniższym skryptem rysuję profile wysokości (wysokość/prędkość vs czas oraz wysokość/prędkość vs dystans)

library(reshape)
require(ggplot2)

graphWd <- 6
graphHt <- 5

args = commandArgs(trailingOnly = TRUE);

if (length(args)==0) { stop("Podaj nazwę pliku CSV", call.=FALSE) }

fileBase <- gsub(".csv", "", args[1]);
outFile1 <- paste (fileBase, "_1.pdf", sep = "");
outFile2 <- paste (fileBase, "_2.pdf", sep = "");

what <- args[2];

# http://stackoverflow.com/questions/7381455/filtering-a-data-frame-by-values-in-a-column
d <- read.csv(args[1], sep = ';',  header=T, na.string="NA");
coeff <- median(d$ele)/median(d$speed)
d$speed <- d$speed * coeff


p1 <- ggplot(d, aes(x = as.POSIXct(daytime, format="%Y-%m-%dT%H:%M:%SZ"))) +
  geom_line(aes(y = ele, colour = 'wysokość', group = 1), size=1.5) +
  geom_line(aes(y = speed, colour = 'prędkość', group = 1), size=.5) +
  stat_smooth(aes(y=speed, x=as.POSIXct(daytime, format="%Y-%m-%dT%H:%M:%SZ"), colour ='prędkość wygładzona')) +
  ylab(label="Wysokość [mnpm]") +
  xlab(label="czas") +
  scale_y_continuous( sec.axis = sec_axis(name="Prędkość [kmh]",  ~./ coeff)) +
  labs(colour = paste( what )) +
  theme(legend.position="top") +
  theme(legend.text=element_text(size=12));
p1
ggsave(file=outFile1, width=graphWd, height=graphHt )

p2 <- ggplot(d, aes(x = dist)) +
  geom_line(aes(y = ele, colour = 'wysokość', group = 1), size=1.5) +
  geom_line(aes(y = speed, colour = 'prędkość', group = 1), size=.5) +
  ##geom_smooth() +
  stat_smooth(aes(y=speed, x=dist, colour ='prędkość wygładzona')) +
  ylab(label="Wysokość [mnpm]") +
  xlab(label="dystans") +
  scale_y_continuous( sec.axis = sec_axis(name="Prędkość [kmh]",  ~./ coeff)) +
  labs(colour = paste( what )) +
  theme(legend.position="top") +
  theme(legend.text=element_text(size=12));
p2

ps <- stat_smooth(aes(y=speed, x=dist));

ggsave(file=outFile2, width=graphWd, height=graphHt )

Teraz na koniec ciekawostka. Mój smartfon produkuje pliki GPX z superdokładnym stemplem czasu np. 2018-08-23T04:52:43.168Z, na czym wysypuje się R. Po prostu usuwam część po kropce dziesiętnej oraz samą kropkę (tj. .168Z) i działa.

url | Fri, 31/08/2018 07:40 | tagi: , ,
Wycieczka do Gruzji #4
Pierwszy raport (może będzie później bardziej szczegółowy)...

Guesthouse #1


Guesthouse #2


Guesthouse #3


Ushguli



Lodowiec (po drodze)

Dojazd 18--19.08

Wyjazd 8:20 z Sopotu na Lotnisko Katowice-Pyrzowice. Po drodze przystanek w Częstochowie w lokalu Bistro-Setka (polecamy). Samochód został na parkingu Wczasowicz (też polecamy).

Start krótko po 17:00 Lądowanie w Kutaisi około 22:00 (różnica czasu). Od razu lecimy po gruzińską kartę SIM. Mamy wprawdzie gruzińskie SIMy z poprzedniej wycieczki, ale akurat nie ma tej konkretnej firmy w Kutaisi na lotnisku (karta była kupowana w Tbilisi). Ponieważ jest jedenasta w nocy, ponieważ rano pojedziemy na zadupie gdzie w ogóle nic przypuszczalnie nie załatwimy i ponieważ karta kosztuje zaledwie kilka lari kupujemy nowe. Procedura jest szybka i sprawna tyle, że moja karta nie działa. Nie było czasu na reklamacje, ważniejsze było dostanie się do Kutaisi więc problem odpuściłem. Kupiliśmy bilety na marszrutkę i pojechaliśmy do miasta. Po drodze dołączyliśmy do dwójki dziewczyn z PL, które miały rezerwację w hostelu. One miały, my nie ale też nas przenocowali za 15 GEL/osobę. Do tego zamówili taksówkę na rano na dworzec autobusowy skąd odchodzą marszrutki do Mestii. Bilet do Mestii kosztuje 25 lari. Odjazd o 8:00.

Po dotarciu do Mestii spotykamy się z naszym przewodnikiem, który wiezie nas na kwaterę. Mówiąc całkiem szczerze to kupiliśmy kota w worku. Zabrałem się bowiem za organizowanie naszego trekingu na tyle późno, że przewodnika wynajeliśmy w klasycznej strategii rozpoznania walką. Po wpisaniu w google trekking Mestia Ushguli, wysłałem mejla do firmy, której strona/opis mi się spodobała. Firma odpisała że jak najbardziej a nawet w terminie 20--23 będzie przewodnik mówiący po polsku. OK, wchodzimy w to. Teraz w Mestii poznajemy w co...

Więc polskojęzyczny przewodnik nazywa się Agnieszka i Lasza, polsko-gruzińskie małżeństwo prowadzące firmę pn. GeoPol travel (są na FB). Nas poprowadzi Agnieszka (pierwszy dzień z mężem). W kontrakcie mamy też wyżywienie, co w praktyce oznacza, że każdy guesthouse serwuje nam śniadanie i kolację oraz wręcza launchbox do zjedzenia na trasie. Jedzenie nieprzetworzone: chleb, ser, warzywa... Samo zdrowie...

Rozpakowujemy się. Popołudnie czas wolny, trekking rozpoczynamy jutro. Zwiedzamy Mestię, w tym muzeum oraz wieżę do której można wejść. Po powrocie z miasta okazuje się, że mamy towarzystwo w hostelu: dokwaterowała się wycieczka z Izraela (ok 10 os osób--nie liczyliśmy dokładnie)

dzień #1: 20.08 Mestia-Zabeshi (17,0 km na moim GPS)

Rano śniadanie o 8:00. Wycieczka z Izraela je wcześniej i wcześniej wychodzi na tą samą trasę co my (wkrótce ich miniemy bo wolno chodzą). Ponieważ wynajęliśmy przewodnika trekking przebiega bezstresowo. Idziemy tam gdzie każą i podziwimy widoki po drodze. Atrakcją są noclegi, będące okazją do poznania ludzi dosłownie z całego świata. Pierwszy nocleg mamy w guesthausie Beqa Naveriani (Beka to popularne imię męskie tutaj). Na kwaterze jesteśmy my i 6 Niemców + ich przewodnik (których nb. już poznaliśmy na trasie). Niemcy (starsi od nas) idą bez bagaży, które wiezie wynajęty koń powożony przez wynajętego człowieka. Można wynająć samochód, bo do wiosek idzie dojechać drogą, ale podobno koń jest tańszy. Wspólną kolację zakłóca wyłączenie prądu (do rana). Trochę siedzimy przy świecach, ale w końcu idziemy spać. Wstaję rano i prądu dalej nie ma. Nie ma też w związku z tym wody w kranach i nie tylko (jak u Kazika S.: wszystkie deski zasikane/wszystkie kible zasrane/Mars napada) Rano podczas śniadania włączają prąd.

dzień #2: 21.08 Zabeshi-Adishi (11,6 km)

Śniadanie o 8:00. Po drodze zbieramy grzyby, które Agnieszka przygotuje na kolację. Nocujemy (guesthouse Bedo&Tamila jeżeli dobrze odczytałem nazwę) w składzie: 2 Hindusów, Hiszpan (wszyscy Cambridge/fizyka) Węgierka + Francuz mieszkający w Budapeszcie, Żydówka z Izraela (polskie korzenie) oraz dwóch Niemców z Monachium, pokonujących szlak na rowerach downhillowych (jeden z Polskim nazwiskiem, ale nic poza tym). Z tym downhillem to dziwaczny pomysł, ja bym nie rekomendował...

dzień #3: 22.08 Adishi-Iprali (18,5 km)

Dzień najdłuższy na całej wycieczce. Urozmaiceniem jest przejazd przez rzekę na koniu (z braku mostu). Można przejść, ale wtedy trzeba mieć jakieś inne obuwie no i zdejmować buty. Po drodze do Iprali mijamy pozostałości wioski Khalde Nocujemy w Ucha guesthouse, w którym nocuje chyba połowa tych co idą szlakiem do Iprali i nie chcą spać w namiotach:-)

dzień #4: 23.08 Iprali-Ushguli (16,1 km)

W zasadzie koniec wielkiego trekkingu. Rano jedziemy do Uszguli samochodem. Tam idziemy oglądać lodowiec, po powrocie zwiedzamy Uszguli. Około 16:00 powrót samochodem do Uszguli (2 godziny, bo droga jest w budowie) W Uszguli/Mestii jest masa rowerzystów na rowerach MTB. NB: byłem już 3 razy w Gruzji i praktycznie nie widziałem rowerzystów, a teraz całe stada--miejscowi (głównie dzieci), turyści. Widziałem nawet porządny sklep w Kutaisi i masę rowerów na targu (tureckim) tamże. Nie wiem czy to ,,efekt Swanetii'' czy też rowery stały się bardziej popularne w całej Gruzji.

dzień #5: 24.08 Mestia (ok. 20km)

Zostajemy jeden dzień dłużej w Mestii i idziemy oficjalnym szlakiem na punkt widokowy Zuruldi. Trasa taka sobie, bo połowa wiedzie wzdłuż drogi asfaltowej. Nie dochodzimy do Zuruldi tylko do Heshkili huts. Tam spotykamy wycieczkę młodych Gruzinek. Jedna przyznaje się do Polskiego pochodzenia (babka Różycka). To już trzecia osoba przyznająca się do Polskiego przodka BTW (Żydówka/Adishi, Angielka/Iprali). Wracamy tą samą drogą.

Powrót

Sumując przeszliśmy ok 63,0km + 20km ostatniego dnia idąc na Zuruldi (ale nie dochodząc tam)...

Odjazd z Mestii teoretycznie 8.00 Teoretycznie bo przez circa 30 minut busik krążył po mieście w poszukiwaniu pasażerów, których ciągle brakowało do kompletu. W końcu zdesperowany kierowca zajechał na stację benzynową na rogatkach miasta, gdzie zarządził przesiadkę do innego busa. Teraz już był prawie komplet, tyle że to nie był koniec kombinacji. Po jakieś pół godzinie zjeżdżania serpentynami z Mesti do Zugdidi pojawił się nieoczekiwanie pierwszy bus z jednym pasażerem w środku--który później okazał się zmiennikiem kierowcy a z pobliskiej chałupy wyłonił się tłum 9 Gruzinów, ewidentnie kandydatów na wakujące 5 miejsc. Kurcze co teraz...

Szczęśliwie z tej dziewiątki, troje było żegnających, więc nie było aż tak wielkich problemów z upchaniem reszty. Papierosek, buzi-buzi i jedziemy. Nawet nam idzie i doganiamy całe stado marszrutek, które robią sobie przerwę w no-name miejscu przed Zugdidi. Niestety nasi kierowcy też tu śniadaniują potem palą, co w rezultacie skutkuje następnymi 30 minutami w plecy. Jest 10:30, jechaliśmy może 1,5 godziny reszta to przerwy. No ale teraz bus rwie w dół i jest nadzieja. Całkiem sprawnie mijamy Zugdidi, zjeżdżamy do stacji benzynowej. Przerwa. Idziemy do sklepu, wracamy a samochód właśnie odjechał chuj-wi-gdzie. Współpasażer z Ukrainy oznajmia, że celem wymiany koła. Siedzimy czekamy. Bus wraca po 20min. Jedziemy dalej ale nie za długo bo bus zjeżdża do pierwszej przydrożnej wulkanizacji. Coś jednak nie gra, ale widać nie mają tego co trzeba bo stoimy zaledwie 5 minut i jedziemy do następnej przydrożnej wulkanizatorni, a potem do jeszcze następnej. Tam chyba mają. Chyba bo nie jedziemy dalej, ale też nic się nie dzieje. Kierowcy poszli do kanciapy wulkanizatora i widocznie na coś czekają. Po 20 minutach wreszcie pojawia się podnośnik i nowe (pardon nowsze koło). 2 minuty roboty i możemy jechać dalej... Ciekawe czemu służyły te 20 minut przygotowań... Jesteśmy zdrowo spóźnieni docierając około 15:00 do Kutaisi. Wysiadamy życząc współpasażerom bezawaryjnej dalszej jazdy do Tbilisi, do której dotrą -- w razie spełnienia się naszych życzeń -- po następnych 4h czyli około 19:00 (11 godzin w busie celem przejechania około 450km)

Różne rzeczy

Olympus OMD/EM10 + Sony RX100M3. GDP pocket się sprawdził i warto go zabierać. Powerbanki okazały się niepotrzebne, ale chyba jednak warto je zabierać. Pogoda Była rewelacyjna. W szczególności zero opadów.

Do pobrania ślad ze zdjęciami; ślad ze wszystkimi zdjęciami; zdjęcia; ślady gpx/kml.

url | Thu, 30/08/2018 11:17 | tagi: , , , ,
Wycieczka do Lwowa 2018

Że Wizzair lata z GDA do Lwowa, to polecieliśmy na wycieczkę.

W poniedziałek 16 lipca o 6:50 polecieliśmy, lądując 1:30 później, tj. circa 9:15 we Lwowie. Ja w sobotę się zaprawiłem na rowerze na fest i wprawdzie w niedzielę było trochę lepiej, ale w poniedziałek dalej byłem cały zasmarkany, więc niespecjalnie mnie ucieszył rzęsisty deszcz na powitanie we Lwowie. Elka mówi, że prognozy są kiepskie i będzie padać cały tydzień. No masz załatwię się na amen...

Sprzed terminala pojechaliśmy trolejbusem do centrum. Nasza kwatera, wynajęta przez AirBNB jest na ulicy Szpitalnej. Pierwszy punkt wycieczki zatem, to dotrzeć na Szpitalną. Ciągle leje. Trolejbus dociera do centrum. Wysiadamy, w kiosku kupujemy kartę SIM (za circa 8PLN) i idziemy do kawiarni zamienić karty w moim Xiaomi. Internet działa na początku kiepsko (potem jest OK), ale ponieważ Szpitalna jest w pobliżu, to bez problemu znajdujemy kwaterę. Lokal jest OK.

Po zainstalowaniu się w kwaterze zwiedzamy stare miasto i wchodzimy na wzgórze pn Wysoki Zamek. Wracamy na kwaterę o 17:00.

Cmentarz Łyczkowski

Ponieważ pogoda w kolejnych dniach jest niepewna, to decydujemy się zwiedzić cmentarz Łyczakowski póki nie pada. Idziemy na cmentarz piechotą, żeby po drodze zwiedzić miasto (można tramwajem jechać). W rezultacie zwiedzanie plus dojście zajmuje nam pół dnia. Do tego ponad godzinę trwa konsumpcja obiadu, a to dlatego, że długo trzeba czekać na podanie (częste w restauracjach, które zwiedziliśmy; być może powodem jest sezon turystyczny). Po obiedzie jedziemy do miasteczka Żółkiew. Do Żółkwi jeżdżą autobusy z Północnego Dworca Autobusowego (ulica Bohdana Chmielnickiego 225). Ponieważ dworzec jest dość daleko od centrum, to pytamy się baby w kiosku czym dojechać. Mówi, że tramwajem nr 6 bodajże (zły pomysł, bo potem jeszcze trzeba kawałek podejść--podała po prostu numer tramwaju z najbliższego przystanku). Zwiedzamy Żółkiew, wracamy. Tym razem po dotarciu z powrotem do Północnego Dworca Autobusowego idziemy na autobus (bo już wiemy że tramwajem nie warto). Na kwaterę docieramy nawet później niż pierwszego dnia (około 18).

Od programu wycieczki była Elka, ale ja wieczorem przeglądając Internet znajduję informacje, że jest tu potencjalnie ciekawy i godny obejrzenia skansen. W środę postanawiamy jechać/iść do skansenu. Janek od razu odmawia, bo się zmęczył -- będzie dalej zapoznawał się z centrum Lwowa.

Plan wprawdzie był żeby jechać do skansenu tramwajem, ale upieram się, że to blisko więc idziemy. Google wytycza dziwną trasę -- po lesie -- długą na 3,1km. Skansen jak najbardziej jest OK i ciekawy, spędzamy tam 1,5h. Wracamy. Tym razem idziemy na trolejbus, tyle że jakoś nie możemy trafić na przystanek. Włączam Xiaomi. Do opery jest 2,1km--eee idziemy. W kwaterze jesteśmy o 14:00. Idziemy z Jankiem na obiad do Premiery Lwowskiej. Podają szybko i sprawnie ale i tak po obiedzie jest już w miarę późno. Jak rano we wtorek łaziłem do mieście, to znalazłem kilka małych muzeów w rynku. Idziemy zobaczyć co tam jest. Pierwsze muzeum jest w budynku palarni kawy. Wchodzimy i z mety chcą nam sprzedawać bilety -- ale za co? Oprócz tabliczki muzeum, i że zbiory etnograficzne, to nic więcej nie wiadomo -- odpuszczamy. Drugie też odpuszczamy. Jakaś wystawa czasowa jest reklamowana, którą uznajemy za nieciekawą i nastawiamy się na zwiedzanie ostatniego -- muzeum poczty -- potencjalnie ciekawe. Podchodzimy do budynku, drzwi otwarte, w środku ewidentnie trwa remont. No to mamy zwiedzone -- idziemy do domu... Elka po drodze jeszcze dostrzega, że Opera jest otwarta i można ją zwiedzać -- to zwiedzamy.

Drohobycz

W czwartek do Drohobycza. Janek znowu zostaje, bo mu się nie chce. Elka za to ustaliła, że można tam pojechać autobusem, który odjeżdża spod dworca kolejowego. Idziemy na dworzec (w miarę blisko, circa 2km). Sugeruję najpierw sprawdzić czy nie da się pociągiem. Są rozkłady, ale dla pewności idziemy do informacji kolejowej, tym chętniej że przed okienkiem nie ma żadnej kolejki. Się okazuje, że nie ma bo płacić trzeba -- 5 hrywien. Najpierw płacisz potem mówią co wiedzą. Nietypowe, ale co kraj to obyczaj. Nawet paragon za te 5 hrywien dali...

Idziemy do kas. Bilet na przejazd kosztuje około 7 PLN. Pomimo tak nędznej ceny mamy rezerwację miejsca, ale -- ciekawostka -- żeby kupić bilet trzeba pokazać paszport. Nasz pociąg jedzie z Diepropietrowska do Truskawca, a nasz wagon to wagon sypialny, tyle że my siedzimy, a nie leżymy. Prycza twarda jak deska, a naprzeciw nas drzemie przykryta kocem dziewczyna. Też jedzie do Drohobycza, co się ujawni po godzinie i 30 minutach (tyle jedzie pociąg ze Lwowa do Drohobycza). Obsługa pociągu przynosi bilet przed stacją, na którą ma się wysiąść (jak w PL w sypialnych); dziewczyna wstaje podnosi pryczę, się okazuje, że tam jest miejsce na bagaże -- wsadza koc i wyciąga swoje walizki. He, być może i my mogliśmy na kocu zamiast na dechach ale to już nieistotne...

W Drohobyczu zbiera się na deszcz. Jedyną taksówkę wynajęli inni Polacy, idziemy na autobus. Trzeba podjechać ponieważ dworzec jest za miastem. Zwiedzanie zaczynamy od cerkwi św. Jura (czyli Jerzego). Za zwiedzanie trzeba zapłacić; w zamian przewodniczka opowiada szczegółowo o historii cerkwi (po ukraińsku, więc osobiście to nie wszystko rozumiem). Wychodzimy z cerkwi--pada deszcz... Elka coś wyczytała o wydobywaniu/kopalni soli w Drohobyczu a pani z cerkwi indagowana w sprawie potwierdza, że faktycznie tuż obok istnieje coś takiego. Idziemy szukać...

Okolica mało malownicza i nie możemy znaleźć. Miejscowy wskazuje konkretne miejsce, wyglądające jak tytułowa Baza z powieści Baza ludzi umarłych Newerlego. Kompleks baraków w stanie daleko posuniętego rozkładu. Przed jednym z baraków wielka kupa kłod drewna i facet z siekierą... Omijamy dziada, pytamy się kobiety, która wylazła z któregoś z baraków. Tak jest fabryka soli, nie ma żadnego muzeum. Generalnie to nie są szczęśliwi, że nas tu widzą, ale pozwalają obejrzeć instalacje. Faktycznie produkują tutaj sól metodą `na króla Ćwieczka': pompują solankę z 50 metrów bodajże, która potem jest odparowywana w dwóch sporych rozmiarów odparnikach a sól ostatecznie `konfekcjonowana' w trzech betoniarkach... Facet rąbiący drewno zapewnia energię potrzebną do odparowania wody. Post factum znalazłem w Internetach coś takiego:

Stara jak Drohobycz `manufaktura', położona między dwiema starymi drewnianymi cerkwiami, do dziś produkuje sławną `Jodowaną Sól Drohobycką' stanowi również `funkcjonujący eksponat' Muzeum Ziemi Drohobyckiej! Za małą opłatą można spokojnie zwiedzić zakład pod nadzorem pracowników, a także zrobić kilka zdjęć na pamiątkę (www.nieznanaukraina.pl/2045/drohobycka-kopalnia-fabryka-soli/).

Dla mnie to był Dickens (Karol) a nie żaden `funkcjonujący eksponat'. Być może dorabiana jest muzealna teoria żeby dziadostwo lepiej wyglądało. W szczególności nigdzie nie widzieliśmy żadnej tablicy informacyjnej iż i jakoby jest to `Muzeum Ziemi Drohobyckiej', które faktycznie istnieje ale w innym miejscu (nie byliśmy)... Nastawienie obsługi też nie było entuzjastyczne do zwiedzania, a zwłaszcza do robienia zdjęć.

Ustalamy, że w zasadzie to wracamy, tyle że po drodze obejrzymy jeszcze miejsca związane z Bruno Szulcem oraz synagogę (udaje się). Ponieważ dworzec kolejowy jest za miastem, a autobusowy bliżej centrum Elka decyduje żeby wracać autobusem. Cena z grubsza ta sama. Atrakcją 20 km jazda po monumentalnych dziurach. Drogę porównywalnej `jakości' widziałem dotąd raz w życiu w Armenii w dolinie Alawerdi.

W piątek odlot o 14:10. Dla pewności ustalamy że na lotnisko pojedziemy o 11:00 więc wizyta w Drohobyczu to był ostatni punkt wycieczki, bo do 11:00 to już nie będziemy niczego zwiedzać (tym bardziej, że większość biznesów zaczyna się tak co najmniej od 9:00). Robimy odprawę przez internet, potem idę na miasto wydrukować karty pokładowe i wydać 200 hrywien co nam zostały. Kupuję ormiański lawasz:-) i ser wędzony. Terminal pustawy, nie to co w GDA. Przed kontrolą bagażu w szczególności nie ma żadnej kolejki... O 14:10 odlot do GDA.

BTW w GDA pan z Wizzair skierował mój plecak do bagażu (nieodpłatnego), bo za duży. Że niby teraz duże bagaże są transportowane w luku mimo, że dalej są `podręczne' (formalnie i zgodnie z nowym regulaminem nie ma gwarancji, że bagaż podręczny poleci z pasażerem). Można oddać od razu lub przy wsiadaniu do samolotu. Wybrałem to drugie, a na płycie lotniska już się nikt nie upominał o mój plecak więc ostatecznie pojechał ze mną a nie w luku bagażowym.

Do pobrania ślady kml ze zdjęciami; zdjęcia; ślady gpx/kml.

url | Fri, 27/07/2018 09:22 | tagi: , , ,
Posokowiec bawarski

UWAGA: Będzie długie i o jeleniu (na zwłoki którego najechałem w sobotę)

Znajomy (korposzczur -- jego własne określenie więc się nie obrazi) się przejął (bardziej niż ja) i mnie mobilizuje do alarmowania świata w temacie: ,,czy etyczne jest, że ktoś dopuścił do tego, że zwłoki jelenia leżą na polu.'' Przypuszczalnie zwierzę zostało postrzelone, uciekło i padło, że tak powiem w pewnym oddaleniu od strzelca. Takie rzeczy się zdarzają oczywiście. Skoro się zdarzają to pewnie są jakoś regulowane choćby zwyczajowo (etycznie/nieetycznie)

No to sru... piszemy w google i mamy (UWAGA: Postrzałek = postrzelone zwierzę; moje komentarze wewnątrz [[ .. ]]):

Rozporządzenie ministra środowiska z dnia 23 marca 2005 r. w sprawie szczegółowych warunków wykonywania polowania i znakowania tusz Dz.U. z dnia 15 kwietnia 2005 r.; Zmieniona wersja (2011-12-14) Dz.U.2011.257.1548. Albo www.lowiecki.pl/gdansk/lowiec/regpol.html Albo Poszukiwanie postrzałka przy użyciu psa.

Art5/8: polowanie na zwierzynę grubą może odbywać się pod warunkiem zapewnienia udziału w poszukiwaniach postrzałka, ułożonego w tym celu psa.

[[Jeżeli nie miał psa to naruszył prawo. To jest zapis chyba obowiązujący od 2010 r.]]

[[To teoria, a teraz praktyka:]]

Udział psa w polowaniu -- czy na co dzień respektujemy przepisy prawa łowieckiego?/Zbigniew Ciemniewski. Ciekawe też tutaj: http://www.bowhunting.pl/pies-dla-mysliwego-z-lukiem/b/34

[[polowanie z łukiem. Ja pierdziu... BTW ale: ]]

Nie każdy myśliwy ma możliwość posiadania własnego psa. Charakter pracy, trudne warunki lokalowe, powodują, że trzymanie psa w domu często staje się niemożliwe. Nie zwalnia to jednak myśliwego z obowiązku szukania postrzałka z pomocą psa. Nie znam koła czy obwodu, w których nie ma przynajmniej jednego psiarza, do którego można zadzwonić po pomoc. Przy niektórych zarządach okręgowych PZŁ istnieją nawet tzw. pogotowia postrzałkowe zrzeszające właścicieli psów ułożonych do poszukiwania postrzałków. Zapisanie numerów telefonów do kolegów posiadających psy i korzystanie z ich pomocy pomoże wypełnić regulaminowy obowiązek każdego myśliwego, który mówi że polowanie na zwierzynę grubą może odbywać się pod warunkiem zapewnienia w poszukiwaniach postrzałka udziału ułożonego w tym celu psa (Art 5. 1. 8 regulaminu polowań).

[[czyli jakaś tam small-afera mogłaby być. Ale niekoniecznie (klubposokowca.org.pl/?page_id=87):]]

Co prawda rozporządzenie ministra środowiska w sprawie szczegółowych warunków wykonywania polowania, zobowiązuje myśliwych do zapewnienia udziału w poszukiwaniach postrzałka ułożonego w tym celu psa, jednak interpretacja pojęcia ,,ułożonego psa'' nie jest podana i w związku z tym jest bardzo dowolna.

[..]

Oczywiście mistrzami w tej dziedzinie pracy myśliwskiej są posokowce.

:-) Oczywiście. Kurde nawet nie wiedziałem że coś takiego istnieje podróże kształcą :-) Do dziś jakby mi ktoś powiedział POSOKOWIEC to bym to z owadem kojarzył prędzej, które to mają bombastic nazwy często.

Więc na koniec: https://www.olx.pl/zwierzeta/psy/q-posokowiec-bawarski/.

A na finalny-koniec: jeżeli ktoś doczytał aż tu i ma wśród znajomych myśliwego, który by się ustosunkował, to będę wdzięczny za komentarz.

url | Tue, 22/05/2018 04:32 | tagi:
Pętla: Skarszewy-Starogard-Pelplin-Tczew

Pojechałem sobie w niedzielę (19.05) właśnie taką trasą

Mieszkając w środku 3Miasta ma się problem z wyjechaniem z miasta w kierunku wschód/zachód. Na północ się nie pojedzie, bo morze. Pozostaje południe, tyle że się nudzi te ciągłe jeżdżenie na kierunku Osowa-Chwaszczyno-Kielno.

Weekend jest zatem dobrym momentem przejechania przez duże miasto w miarę sprawnie (światła/ruch/skrzyżowania), a zwłaszcza w godzinach porannych. Tak do 6:00--7:00 Gdynia to prawdziwe #GhostTown. W Gdańsku jest już wtedy większy ruch, ale też bez porównania z tym co się dzieje później, o ruchu w normalne dni/godziny nie wspominając.

No to pojechałem na Kociewie, rozpoczynając o 7:10. Wg planu przejechałem Gdańsk swoją trasą optymalną (dłuższą niż wzdłuż al. Zwycięstwa ale minimalizującą liczbę świateł, na których trzeba stawać i czekać na zmianę): Czyżewskiego-Polanki-Partyzantów-Matejki-Do Studzienki. Potem Końskim Traktem aż do Ronda Ofiar Katynia (lepiej znanym pod nazwą Plac Zebrań Ludowych). Teraz 3 Maja-Armii Krajowej i myk już jestem na #DK91. Ruch znikomy więc komfortowo pomykam na Pruszcz. DK91 generalnie jest bezpieczna, bo szeroka, tyle że jak jest duży ruch to hałas jest. Tą ścieżką na wale nie jeżdżę--nawierzchnia słaba/dużo przeszkód typu wysokie krawężniki. Nie mam obowiązku używania tej ścieżki zresztą więc działam też zgodnie z kodeksem.

Wylot (albo wlot) na Starogard (#DK222) jest zamknięty -- bo remont -- więc jadę dalej do Pruszcza z zamiarem wjechania na #DK226 albo #DK222. Skręcam od razu w ul. Raciborskiego, czyli decyduję się na DK222. Bym jechał dalej to mógłbym skręcić w ul. Zastawną (pierwszy skręt w prawo za Radunią). O tyle ten wariant jest nie-ten-teges, że ileś świateł jest po drodze i to takiej pryncypialnej, że trochę głupio na czerwonym wjeżdżać (a nawet bardzo głupio). Się zresztą okazało, że DK222 jest remontowana nie tylko na odcinku ulicy Starogardzkiej, ale później też. Co jakiś czas ruch jest tylko jednym pasem. Światła na krańcach takich odcinków skutecznie zniechęcają potencjalnych użytkowników, więc droga jest praktycznie pusta. Hurraaa! Do tego wiatr w plecy więc podjeżdżanie na odcinku Pruszcz--skrzyżowanie DK222/DK226, gdzie generalnie jest pod górę, idzie w warunkach komfortowych.

Dalej też zgodnie z planem DK226 do Mierzeszyna, a tutaj wątpliwość co dalej z uwagi na niejasny drogowskaz. Pytam się miejscowego, ale on nie wie, która to 226 (co za ciemniak), i że jak na Nową Karczmę to prosto. Na szczęście się go nie słucham i skręcam w lewo. Droga robi się jakościowo mocno średnia: dziur nie ma, ale nawierzchnia jest wyboista więc trzęsie. Sucha Huta--odludna wieś na skraju dużego lasu. Jeszcze parę kilometrów i skręt na Skarszewy. Do tej pory miałem wrażenie, że wjeżdżam z prawym bocznym przeciwnym wiatrem pod górę. Teraz będzie z wiatrem w plecy. No i dużo w dół, bo generalnie mam się finalnie znaleźć na poziomie Wisły.

W Skarszewach kilka fotek w tym malownicze rozlewisko Wierzycy i dalej jadę na Starogard. Przed Starogardem w Linowcu natykam się, prawie na poboczu na zastrzelonego jelenia. Dziwna sprawa, bo jest około 10:00 a zwierzę leży. Jeżeli to efekt polowania (o czym by świadczyłaby ogromna dziura z boku klatki piersiowej), to pewnie straciło życie wcześnie rano więc upłynęło już wystarczająco dużo czasu żeby go zabrać. Anyway pierwszy raz w życiu widzę coś takiego.

Starogard bez historii--nie planują się tutaj zatrzymywać. Jadę na Pelplin drogą #DK222/#DK229. Wzdłuż obu zbudowali ścieżkę, a na drodze non stop zakaz jazdy rowerem. Zakaz to zakaz--nie jadę. Ścieżka jest bardzo dobrej jakości. Da się jechać szybko, prowadzi jedną stroną drogi więc nie ma tak uciążliwych w przypadku wielu innych ścieżek miedzymiastowych zmian prawa/lewa strona drogi co kilka kilometrów.

Mijam A1 (aka autostrada Bursztynowa), wjeżdżam do Pelplina. To tak w ogóle ciekawe miasteczko jest i godne zwiedzania: muzeum diecezjalne/katedra, ale ja zwiedzałem i jedno i drugie niedawno, więc tylko zdjęcie katedry na dowód, że byłem i jadę dalej kierując się na Rajowy-Maniowo-Radostowo.

Droga znowu robi się wyboista (ale nie dziurawa). Tempo spada wiatr przestał wiać w plecy, jest teraz boczny, często niesprzyjający. W Rajkowach widzę kościół i skręcam. Dobra decyzja: przy kościele stary cmentarz z grobami z końca 19 wieku. Polskie nazwiska i inskrypcje. Jeden kuty krzyż o interesującym wyglądzie oraz jeden żeliwny odlewany. Ha, jeden skalp więcej (mowa o tym żeliwnym odlewanym--których geotagowane zdjęcia kolekcjonuję). Następny przystanek jest już planowany: gospodarstwo pn. Radostowskie Rarytasy. Z daleka widać napis sprzedaż serów czy jakoś tak.

Radostowskie Rarytasy wypatrzyłem na Facebooku. Spodobało mi się, że się fajnie promują. Teraz mam okazję zobaczyć sklep w realu i też mi się podoba. Kupuję kilka małych kawałków różnych serów. Każdy elegancko opakowany w firmowy papier. Do tego masło dla Elki. Pani proponuje jeszcze twaróg i mleko, no ale ja nie mam już miejsca w plecaku, no i do Sopotu jeszcze trochę zostało więc plecak za ciężki to też nie powinien być. Pani sprzedawczyni robi mi zdjęcie przed sklepem i jadę dalej.

Wjeżdżam na DK91 w Subkowach, skręcam na Tczew.

Oczywiście Tczew też warto zwiedzić tak w ogóle, ale ja tu już byłem milion razy więc nie wjeżdżam do miasta tylko DK91 na Gdańsk.

NB chciałem wracać przez Żuławy, ale zmieniam zdanie. Na liczniku już circa 120 km, do domu jeszcze trochę zostało. Szacuję że jak pojadę DK91 to wyjdzie circa 170. Przez Żuławy byłoby dalej. Jadę DK91. Wbrew pozorom jazda tą drogą jest całkiem OK--ruch jest mały, bo większość aut jeździ po A1. Teraz jest pod wiatr, ale ponieważ jest ciepło, to jest OK, tyle że jadę wolniej niż gdyby wiało w plecy.

W Gdańsku mógłbym wracać z grubsza tą samą trasą co jechałem rano, ale decyduję się na inny wariant: DK91 do Huciska (tunelem pod DK501/Armii Krajowej w szczególności)-- Podwale Staromiejskie--Podmłyńska/Rajska (albo Stolarska/Łagiewniki). Jeżeli Podwale Staromiejskie to do skrzyżowania przy Zieleniaku no i dalej standard czyli ścieżka rowerowa wzdłuż al. Zwycięstwa. Jeżeli zaś Stolarska/Łagiewniki, to bardziej skomplikowana trasa: Marynarki Polskiej--Uczniowska--Czarny Dwór itp. Dziś wybieram wariant #1 Podmłyńska/Rajska--al. Zwycięstwa.

W domu jest tuż przed 15:00, na liczniku (prawie) 170km.

Niedziela

Zaczynam godzinę później tj. 8:10. Miasto puste (niehandlowa niedziela BTW). Trasa znana i już raz objechana w całości, a wielu fragmentach, to nawet wielokrotnie: Gdynia-Pierwoszyno-Mrzezino-Puck-Łebcz-Władysławowo. W Pucku ciekawostkowe muzeum jest BTW eksponujące modele wodnosamolotów Lublin R-XIII (nie zwiedzałem, podobno ciekawe). Inna atrakcja w drodze do Pucka to Rzucewo gdzie jest pałac/hotel oraz zejście na plażę z minimolem. Tyle, że droga do Rzucewa (3km) koszmarnie dziurawa

We Władysławowie powrót drogą główną, tj. DK216 (mały ruch) do Widlina, tam skręt na Mrzezino. Stąd praktycznie tą samą trasą co rano tyle, że w przeciwną stronę.

Wycieczka bez historii. W Połchowie są groty (trzeba skręcić przy sklepie w prawo na Gdynię), na które tak w ogóle warto rzucić okiem (google:grota połchowo), ale ja już rzucałem więc nie skręcam. Poza tym, przed Połchowem dogania mnie i śmiało wyprzedza facet na niebieskim Fuji. No to ja mu na koło i jedziemy. Odnoszę wrażenie że gość chce mnie urwać. Zagina się i rantuje. W końcu odpuszcza--się zorientował, że wprawdzie gość (czyli ja) wolno jechał sam, ale teraz to magicznie ożył i nie-da-rady go zgubić. Typ mruka o silnych nogach. Nie odzywa się, ani cześć ani pocałuj-wójta... Za Mrzezinem facet zaczyna się denerwować, widać że moja jazda za nim nie podoba mu się, w końcu macha rękami, zwalnia i zjeżdża w lewo. No to daję zmianę, ale gość nie korzysta z koła--jedzie 10m za mną. Amatorka totalna. Tak dojeżdżamy do skrzyżowania z DK100, gdzie znowu mnie wyprzedza. Tym razem daję mu spokój. A niech jedzie. Niedziela jest, co go będę stresował:-)

W domu jest tuż przed 12:45, na liczniku (prawie) 110km.

Do pobrania ślady kml ze zdjęciami; zdjęcia (flickr); ślad gpx; ślad kml.

url | Mon, 21/05/2018 12:54 | tagi: , ,
Bardzo długi weekend (podsumowanie)

W tym roku długi weekend był naprawdę długi bo trwał 10 dni. Zaczął się w piątek 27 kwietnia a skończył dziś 6 maja. Do tego wyjątkowo dopisała pogoda. Nie padało, było słonecznie ale nie upalnie. No może noce/ranki były trochę zimnawe, ale przecież to przełom kwietnia/maja więc jakby tak ma być.

Plan był taki: do Bachotka (na TeX-konferencję) w piątek, tam posiedzieć do 29 kwietnia do południa. Z Bachotka pojechać na Warmię, konkretnie na jej część wokół Braniewa. Zwiedzanie tej części Warmii miałem od dawna w planach. Zatem 29 kwietnia Bachotek-Nowa Pasłęka, potem 30 kwietnia pętla przez Pieniężno/Górowo i drugie nocowanie w Nowej Pasłęce. Wreszcie 1 maja powrót do Sopotu. Tyle było w planach, pozostałe rowerowanie w dniach 2--6 maja to już było spontanicznie i wokół Sopotu. Szczegóły przedstawia zestawienie:

Dzień27.0428.0429.0430.041.052.053.054.055.056.05
Dystans1854020018515570802519075

Zawartość sakw/plecaka/kieszeni koszulek

Razem dystans przejechany 1205 km w tym 765 km na żółtym z bagażem oraz 435 km na czarnym. Pierwszy raz w życiu jeździłem na rowerze z sakwami. Do tej pory jeździłem do Bachotka bez bagażu, który podrzucałem znajomym do przewiezienia. W tym roku było inaczej i w tym celu wyposażyłem rower w dużą torbę na kierownicę Ortlieb Ultimate oraz bagażnik Authora na rurę podsiodłową. Obie rzeczy kupiłem dawno temu, ale niespecjalnie z nich korzystałem.

Ponieważ z dawnych czasów kiedy parę razy go założyłem pamiętałem, że bagażnik Authora na szybkozamykacz miał tendencję do przekręcania się w czasie jazdy, zmieniłem szybkozamykacz na normalną śrubę z imbusem. Ponadto przypadkowo zupełnie da się wstawić ten bagażnik w tylne widełki ramy mojego roweru przełajowego i zamocować go na rurze ramy a nie na rurze podsiodłowej. W tej pozycji bagażnik znajduje się niżej co obniża środek ciężkości i lepiej wygląda. Bagażnik wyposażony był w niewielką sakwę, na którą dołożyłem miękką sakwę podsiodłową. Tę miękką też kupiłem kiedyś a nie teraz i nawet wykorzystuję ją od czasu do czasu, ale uważałem ją za średnio wygodną i mało pakowną. Teraz zyskała na wygodzie i pakowności bo zamiast wisieć, leży na bagażniku. Całość jest owinięta gumowymi ściągaczami.


Rower gotowy do wycieczki

No więc koncepcja się sprawdziła: nie nie odpadało, nic się nie luzowało. Pewien problem był z przodu, bo torba powodowała, że zdjęcie obu rąk z kierownicy wprowadzało rower w silne drgania. W rezultacie nie dało się jechać bez trzymanki, a lubię tak robić co jakiś czas celem rozprostowania pleców. Próbowałem problem rozwiązać, przepakowując maksimum lekkich rzeczy do torby na kierownicę, ale to tylko go zmniejszyło ale nie zlikwidowało całkowicie (drgania pojawiały się później i były mniejsze).

Torba na kierownicy powoduje zresztą inny kłopot: nie da się zamontować kamery (well by się dało ale trzeba pogłówkować). W rezultacie zamiast kamery 4K Xaomi przeprosiłem się z Contourem i zamocowałem go uniwersalnym uchwytem do rur na goleniu widelca. 1/3 obrazu zajmuje wtedy kręcące się koło ale lepsze to niż nic. Trudny wybór: można by zrezygnować z tej torby (na moje dałoby upchnąć wszystko z tyłu) ale z drugiej strony, to co jest w Ortliebie jest bajecznie łatwo dostępne (nawet bez zatrzymywania się, w czasie jazdy, da się otworzyć/zamknąć tę torbę.)

Co zabrałem? Trochę odzieży żeby nie chodzić w kolarskich (spodnie, bluza, bielizna cywilna no i ekstra skarpety. Do tego bluza/spodnie termoaktywne plus kurtka ROADR 900 B'Twin na wypadek zimnych nocy/deszczu), trochę jedzenia na wszelki wypadek (jak zjadłem miałem lżej). Mały ręcznik + pasta i szczoteczka. Nie miałem cywilnych butów. Dużo elektroniki: 2 aparaty fotograficzne, bardzo mały komputer (0,5kg), smartfona, kamerę sportową. Różne kable i zasilacze (i tak jednego zapomniałem). Kamera jechała na rowerze, smartfon i aparat kompaktowy (Sony RX100) były w kieszeniach koszulek a drugi większy aparat (Olympus E-M10 + obiektyw Panasonica 12--32mm) w plecaku (albo w Ortliebie, no ale wtedy drgania większe:-)) celem łatwego dostępu. Nie zabrałem powerbanku--co było błędem. Koniecznie trzeba. Generalnie dużo to ja nie wziąłem,ale i tak rower był odczuwalnie cięższy. Bagaż było ustawiony raczej pod dobrą pogodę, ale gdyby padało to też nie byłoby problemu tyle, że musiałbym błotniki zamontować (a mam takowe do tego roweru pn. SKS XRaceblade -- bardzo dobre, mimo że połówkowe).

Czy mój wybór bagażu jest OK, no to by wymagało weryfikacji także w gorszych warunkach pogodowych. Na moje odzież nie stanowi wielkiego problemu--zawsze można coś kupić w sklepach z tanią odzieżą. BTW takie sklepy są powszechne na prowincji, a już zakup brakujących kabli/ładowarek może być problematyczny, albo zbędnie-kosztowny.

Uprzedzając pytanie nigdy nie byłem fanem nocowania w namiocie. Więc w czasach gdy znalezienie agroturystyki jest bajecznie proste i tanie raczej nikt mnie na wożenie namiotu/śpiwora nie namówi.

W planach następne wojaże--stay tuned.

url | Sun, 06/05/2018 17:47 | tagi: ,
Wyjazd w długi weekend (Bachotek 2018)

27 kwietnia: Sopot--Bachotek (185km) z przystankiem w Nowym Mieście Lubawskim. Źle policzyłem czas/dystans i będąc w niedoczasie pojechałem najkrótszą drogą: Tczew-Malbork-Pasłęk-Susz-Iława. W sumie bez historii dotarłem do NM Lubawskiego, gdzie byłem umówiony z koleżeństwem ADD (jeszcze z liceum się znamy), które tam mieszka. Mile spędziliśmy 2 godziny, po czym pojechałem dalej do Bachotka. Na miejscu byłem około 21:30.

28 kwietnia: dzień wolny (miał być), ale jednak pojechałem dwa razy do Brodnicy po zakupy (4x10km = 40km). Drugi wyjazd po produkty na grila, się bowiem nagle okazało, że ogniska nie będzie 28. kwietnia tylko dzień później. Zamiast na ognisko zaprosiłem ADD na grila. Fajnie było...


Cmentarz hrabiów zu-Dohna-Lauck (mój ślad obok)

29 kwietnia: odwrót z Bachotka, ale nie do domu tylko do Nowej Pasłęki. Znowu wyjechałem za późno do tego zapomniałem naładować smartfona (błędem było także niezabranie powerbanku). W rezultacie mocno nadłożyłem drogę i przyjechałem na kwaterę znowu ciemną nocą (200km). Do tego uparłem się zobaczyć płyty nagrobne w Markowie koło Morąga. Na szczęście: ostatni fragment trasy był dość nieskomplikowany, droga równa i bez dziur a księżyc w pełni. Dotarwszy do Nowej Pasłęki pytam się pierwszej osoby gdzie jest pensjonat `U Rybaka', w którym miałem zarezerwowany nocleg. Pan do mnie przyjechał to tutaj. Się okazało, że `U Rybaka' jest blisko wjazdu/wyjazdu na Braniewo. BTW fajna i godna polecenia agroturystyka.

Co do płyt z Markowa, to i tak ich nie zobaczyłem. Pod presją czasu nie zdecydowałem się na ich szukanie. Wyjeżdżając z Bachotka nie odrobiłem pracy domowej, zakładając że jakoś trafię. Pytałem się miejscowych, ale dupa-zbita--nie było to takie proste. Teraz widzę, że nawet za pomocą Google nie jest to proste--większość stron nie podaje gdzie to dokładnie jest. W końcu znalazłem (http://www.ciekawemazury.pl/info.htm#1856/pl/i/pseudomegalityczny_cmentarz_dohnow) i wydaje się że informacja jest poprawna (pałac Dohnów jest oznaczony poprawnie, to pewnie cmentarz też). Byłem blisko, co wiadać na zrzucie z googleMaps.

30 kwietnia: objazd Warmii (północnej). Pojechałem przez Pieniężno do Górowa-Iławieckiego. W obu miastach już kiedyś byłem, ale krótko i przelotem. Tym razem chciałem zwiedzić muzeum Księży Werblistów (Pieniężno) oraz muzeum gazownictwa (Górowo). Miało być 160 km, a wyszło 180.

Muzeum Weblistów bardzo fajne i godne polecenia. Urządzone pomysłowo i ze smakiem. Dużo strojów/masek oraz kilkadziesiąt egzotycznych instrumentów muzycznych (coś dla Elki). Nie wiem czy to standard jest w każdym przypadku, ale zostałem wpuszczony do środka i pozostawiony samym-sobie (jak pan będzie wychodził, to pan drzwi zatrzaśnie). Za to muzeum gazownictwa okazało się totalną porażką. Słabo z informacją -- na mieście nie ma drogowskazów, co jest jakby standardem w przypadku tego typu placówek. Po odszukaniu stosownego adresu za pomocą googleMaps nie bardzo wiadomo jak wejść. Się okazuje, że muzeum jest bezobsługowe -- żeby zwiedzać, to trzeba zadzwonić do miejscowej Informacji Turystycznej. Ja miałem pecha, telefon nawet ktoś odebrał ale zostałem poinformowany, że dzisiaj nieczynne. Podany powód był dziwaczny i raczej dla mnie był jeszcze jednym dowodem na to, że muzeum niespecjalnie jest warte uwagi.

Górowo jako atrakcję reklamuje też: Żywkowo często nazywane [...] Stolicą Bocianów. Do tej składającej się z dziewięciu gospodarstw i zamieszkanej przez 25 osób wsi co roku przylatuje około 100 bocianów. Odlatuje z niej około 200. Pojechałem, bez rewelacji. Gdybym nie pojechał to bym wiele nie stracił. Droga do Żywkowa dziurawa...

1 maja: powrót do domu przez Żuławy. Wystartowałem o 5. coś tam rano... Jadę do Fromborka, tam już byłem więc nie zatrzymuję się, zresztą nie ma po co. Jest 6 rano i miasto jest całkowicie wymarłe. Następne miasteczko--Tolkmicko zwiedzam pobieżnie. W Suchaczu na plaży jem śniadanie. Cała plaża to 100x30m piasku pośrodku ogromnych trzcinowisk. Omijam S7/E28 i jadę do domu przez Żuławy--super malownicza trasa wzdłuż Nogatu. Setki wędkarzy na brzegu i na łodziach. Nogat przekraczam na moście w Kępkach/Bielniku Drugim (oryginalna nazwa!) Droga jest całkiem dobrej jakości.

W Kępkach kieruję się na Stegnę, ale za Rybiną z drogi 502 skręcam na Sztutowo (jest drogowskaz). W rezultacie wyjeżdżam tuż obok obozu Stuthoff. Z rowerem nie wpuszczają, ale odwiedzam księgarnię, sprzedającą m.in. publikacje wydane przez Muzeum Stuthoff. Miła pogawędka z ochroniarzem, który mnie opierdolił bezceremonialnie w zeszłym roku:-) za próbę wjechania rowerem, przy czym od razu wyjaśniam że zrobiłem to nieumyślnie. W KL Stuthoff są bowiem co najmniej dwie bramy, pierwsza przy drodze i jak na moje to nie wiadomo po co jest, bo można nią swobodnie wchodzić/wychodzić (ale nie wjeżdżać--szlaban jest) i przy tej bramie nie ma żadnych kas itp instalacji. Do drugiej położonej ze 100m od pierwszej nie dotarłem -- pewnie są tam kasy i kontrola biletów przy wejściu. Mi się wydawało, że zakaz jazdy--całkowicie zrozumiały, bo przecież jest to jeden wielki cmentarz -- jest od kas/wejścia za biletem. No nie jest--faktycznie jest znak zakazu jazdy rowerem już przy pierwszej bramie, na który nie zwróciłem uwagi zakładając, że i tak nie wjadę do obozu, ale do kas jeszcze mogę...

Chcę sobie skrócić/urozmaicić drogę więc jadę na Mikoszewo gdzie za 5 PLN przekraczam Wisłę promem. Full luda, w obie strony. Od Przejazdowa droga na Gdańsk pusta. Przed Gdańskiem policja mnie molestuje że nie-ścieżką-to-tamto. W końcu puszczają bez mandatu. Generalnie pełno policji chuj-wi-po co (bo ruchu nie ma), to szukają pretekstu, żeby kumendant ich nie opierdolił po powrocie, że w krzakach spali zamiast patrolować. Oczywiście standardowe pierdolenie jak to oni dbają o moje bezpieczeństwo swoją (w oczywisty sposób zbędną) działalnością. Ciekawe czy sami wierzą w te brednie? Jeżeli zamiast mózgu nie mają gówna, to pewnie tak -- niełatwo jest żyć ze świadomością bycia pasożytem. NB. 3-go maja jeszcze mniejszy ruch i jeszcze więcej policji. Pierwszy samochód jaki zobaczyłem zaczynając wycieczkę do Rewy o 5:30 rano to był radiowóz. Normalnie państwo policyjne.

No ale summa sumarum udana wycieczka nie skończyła się mandatem więc nastrój tylko trochę mi popsuli. Do domu przyjeżdżam jakoś tak koło 14:00. Na liczniku 155km. Łącznie przejechałem +750km. Warmia to fajnie miejsce do rowerowania: mały ruch i drogi generalnie dobrej jakości (są wyjątki oczywiście z odcinkiem Markowo--Klekotki--Godkowo na czele, który jest tak dramatycznie kiepski, że nawet na GoogleMaps to wyraźnie widać.).

Do pobrania ślady kml ze zdjęciami; zdjęcia (flickr); ślad gpx; ślad kml.

url | Fri, 04/05/2018 17:48 | tagi: , ,
Uwagi na temat pozycji na rowerze

Moim zdaniem na problem w plecach generalnie pomaga skrócenie zasiegu, tj odległości od siodła do kierownicy. Ja (192cm/względnie krótkie nogi/długi tułów) mam tą odległość równa 55--6cm, liczone od czubka siodła do środka kierownicy. Różnica siodlo--kierownica circa 7 cm.

Żeby skrócić pozycję można:

1. Zmienić mostek na krótszy i o większym wzniosie i/lub zamontować go w pozycji odwrotnej. Mostki mają typowo wznios plus/minus 8--10° (stopni). Zakłada się je w pozycji minus, ale ponieważ rura sterowa ma nachylenie 73 stopnie, to 90° - 73° - 8° = 9° stopni wzniosu. Jeżeli mostek się przekręci to będzie 90° - 73° + 8° = 25° (czyli dużo więcej).

Subtelny problem: czy lepiej zmienić np 12cm na 8cm bez odwrócenia mostka czy 12cm odwrócić? Oczywiście krótszy mostek będzie bliżej siodła ale kierownica będzie niżej, dłuższy oddala kierownicę ale będzie ona wyżej. Moje doświadczenia są takie że lepiej mieć mniejszą różnicę siodło-kiera czyli lepszy będzie 12cm odwrócony

2. Zmienić kierownicę na kompaktową. Kierownice mają różne gięcie, które charakteryzują dwa parametry zasięg (reach) oraz głębokość (depth). Im większy zasięg tym większa odległość do klamek, im większa głębokość tym trzeba się bardziej zgiąć w dolnym chwycie.


Rys. 2. Kompakt jest po lewej jak się łatwo domyśleć

3. Podsunąć siodło maksymalnie w stronę kierownicy bez przejmowania się o pozycję wzg pedałów (ja tak zrobiłem w swoim rowerze).

4. Zmienić sztycę (wspornik siodła) na zero offsetową. Większość sztycę ma offset w stronę tylnego koła:


Rys. 3. Zero offetowa sztyca jest po prawej jak się łatwo domyśleć (na sztycy po lewej strzałką zaznaczono offset)

Ja mam mostek 12cm odwrócony (10°) + zero offsetową sztycę i kierownicę FSA compact (reach: 80mm/depth): 125 mm). FSA to nazwa firmy produkującej BTW.

url | Mon, 23/04/2018 10:08 | tagi: ,