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 | bono | 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
Ż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: ,
Ż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: , , ,
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: , , , , ,
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: , ,
Żuławy wKoło 2017 -- podsumowanie



Podsumowanie wyników dla lat 2015--2017

z16 <- read.csv("wyniki_zulawy_2016_D.csv", sep = ';',  header=T, na.string="NA", dec=",");
aggregate (z16$time, list(Numer = z16$dist), summary)
z16$year <- 2016;

z15 <- read.csv("wyniki_zulawy_2015_D.csv", sep = ';',  header=T, na.string="NA", dec=",");
aggregate (z15$time, list(Numer = z15$dist), summary)
z15$year <- 2015;

z17 <- read.csv("wyniki_zulawy_2017_D.csv", sep = ';',  header=T, na.string="NA", dec=".");
aggregate (z17$time, list(Numer = z17$dist), summary)
z17$year <- 2017;

zz15 <- z15[, c("dist", "kmH", "time", "year")];
zz16 <- z16[, c("dist", "kmH", "time", "year")];
zz17  <- z17[, c("dist", "kmH", "time", "year")];

zz <- rbind (zz15, zz16, zz17);

## tylko dystans 140
zz140 <- subset (zz, ( dist == 140 ));
sum140 <- aggregate (zz140$kmH, list(Numer = zz140$year), summary)

boxplot (kmH ~ year, zz140, ylab = "Śr.prędkość [kmh]", col = "yellow", main="140km" )

## tylko dystans 55
zz75 <- subset (zz, ( dist > 60 & dist < 90 ));
sum75 <- aggregate (zz75$kmH, list(Numer = zz75$year), summary)
sum75
boxplot (kmH ~ year, zz75, ylab = "Śr.prędkość [kmh]", col = "yellow", main="80/75km" )

## tylko dystans 55
zz55 <- subset (zz, ( dist < 60 ));
sum55 <- aggregate (zz55$kmH, list(Numer = zz55$year), summary)
sum55
xl <- paste ("średnie 2015=", sum55$x[1,4], "kmh   2016=",
  sum55$x[2,4], "kmh   2017=", sum55$x[3,4], " kmh")

  boxplot (kmH ~ year, zz55, xlab = xl,
  ylab = "Śr.prędkość [kmh]", col = "yellow", main="55km" )

A ja (numer 418) byłem 70 w kategorii 140 km, z czasem 5:42:03 co dało 24,56 kmh przeciętną. Do pierwszego bufetu się spinałem, potem już nie...

url | Thu, 28/09/2017 05:17 | tagi: , ,
Przed Żuławy w Koło 2017

Jutro planuję przejechać 140km biorąc udział w imprezie pn. Żuławy wKoło 2017. Niby Żuławy a profil trasy sugeruje jakieś istotne wzniesienie w okolicach 25--40km:

Uważnie przyjrzenie się liczbom (zwłaszcza na osi OY) pozwala stwierdzić, że jest to złudzenie, wynikające z różnicy w jednostkach miary obu osi (kilometry vs metry). W rzeczywistości góra tam jest symboliczna o czym można się przekonać robiąc wykres nachyleń. Żeby pozbyć się przypadkowych błędów związanych z niedokładnością pomiaru oryginalne 673 punktowe dane zostały zmienione na 111 punktowe (uśrednienie minimum 1 km) lub 62 punktowe (uśrednienie minimum 2 km).

Przy czym uśrednienie minimum $x$ oznacza obliczenie nachylenia dla najkrótszego odcinka kolejnych $n$ punktów z oryginalnego śladu GPX, który będzie dłuższy niż $x$.

Skrypty R/dane są tutaj. Oryginale ślady GPX/TCX skopiowane ze strony ŻwK są tutaj.

url | Sat, 23/09/2017 17:02 | tagi: , , ,
Żuławy w koło 2016

Żuławy w koło to maraton rowerowy (czyli przejazd rowerem na dłuższym dystansie -- nie mylić z wyścigiem) organizowany od paru lat na Żuławach jak nazwa wskazuje. Sprawdziłem jak ta impreza wyglądała pod kątem prędkości w roku 2016. W tym celu ze strony Wyniki żUŁAWY wKOŁO 2016 ściągnąłem stosowny plik PDF z danymi, który następnie skonwertowałem do pliku w formacie XLS (Excel) wykorzystując konwerter on-line tajemniczej firmy convertio.pl. Tajemniczej w tym sensie, że nie znalazłem informacji kto i po co tą usługę świadczy.

Konwersja (do formatu CSV) -- jak to zwykle konwersja -- nie poszła na 100% poprawnie i wymagała jeszcze circa 30 minutowej ręcznej obróbki. Być może zresztą są lepsze konwertery, ale problem był z gatunku banalnych i wolałem stracić 30 minut na poprawianiu wyników konwersji niż 2 godziny na ustalaniu, który z konwerterów on-line konwertuje ten konkretny plik PDF (w miarę) bezbłędnie.

Po konwersji wypadało by sprawdzić (chociaż zgrubnie) czy wszystko jest OK.

## Czy każdy wiersz zawieraja 9 pól (powinien)
$ awk -F ';' 'NF != 9 {print NR, NF}' wyniki_zulawy_2016S.csv

## Ilu było uczestników na dystansie 140km?
$ awk -F ';' '$7 ==140 {print $0}' wyniki_zulawy_2016S.csv | wc -l
133

## Ilu było wszystkich (winno być 567 + 1 nagłówek)
$ cat wyniki_zulawy_2016S.csv | wc -l
568 # ok!

Przykładowy wykres pudełkowy

Do analizy statystycznej wykorzystano wykres pudełkowy (porównanie wyników na różnych dystansach) oraz histogram (rozkład średnich prędkości na dystansie 140km). BTW gdyby ktoś nie wiedział co to jest wykres pudełkowy to wyjaśnienie jest na rysunku obok. Objaśnienie: Me, $Q_1$, $Q_3$ to odpowiednio mediana i kwartyle. Dolna/górna krawędź prostokąta wyznacza zatem rozstęp kwartylny (IQR). Wąsy ($W_L$/$W_U$) są wyznaczane jako 150% wartości rozstępu kwartylnego. Wartości leżące poza ,,wąsami'' (nietypowe) są oznaczane kółkami.

Ww. wykresy wygenerowano następującym skryptem:

#
co <- "Żuławy wKoło 2016"
#
z <- read.csv("wyniki_zulawy_2016_C.csv", sep = ';',
  header=T, na.string="NA", dec=",");

aggregate (z$meanv, list(Numer = z$dist), fivenum)

boxplot (meanv ~ dist, z, xlab = "Dystans [km]",
    ylab = "Śr.prędkość [kmh]", col = "yellow", main=co )

## tylko dystans 140
z140 <- subset (z, ( dist == 140 ));

## statystyki zbiorcze
s140 <- summary(z140$meanv)
names(s140)

summary_label <- paste (sep='', "Średnia = ", s140[["Mean"]], 
  "\nMediana = ", s140[["Median"]],
  "\nQ1 = ", s140[["1st Qu."]],  "\nQ3 = ", s140[["3rd Qu."]],
  "\n\nMax = ", s140[["Max."]] )
# drukuje wartości kolumny meanv
# z140$meanv
# drukuje wartości statystyk zbiorczych
s140

# wykres słupkowy
h <- hist(z140$meanv, breaks=c(14,18,22,26,30,34,38), freq=TRUE, 
   col="orange", 
   main=paste (co, "[140km]"), # tytuł
   xlab="Prędkość [kmh]",ylab="L.kolarzy", labels=T, xaxt='n' )
# xaxt usuwa domyślną oś 
# axis definiuje lepiej oś OX
axis(side=1, at=c(14,18,22,26,30,34,38))
text(38, 37, summary_label, cex = .8, adj=c(1,1) )

Dane i wyniki są tutaj

url | Mon, 11/09/2017 08:10 | tagi: , , ,
O lepsze liczenie kadencji

Informacja o kadencji jest w pliku .tcx rejestrowana (przez GarminaEdge 500) w następujący sposób:

  <Activities>
    <Activity Sport="Biking">
      <Lap StartTime="2017-08-31T14:51:16Z">
	<Cadence>77</Cadence>
	...
	<Track>
  	  <Trackpoint>
             <Time>2017-08-31T14:52:02Z</Time>
             <Cadence>0</Cadence>
          </Trackpoint>
	  <Trackpoint>
	     <Time>2017-08-31T14:52:06Z</Time>
	     <Cadence>46</Cadence>
	  </Trackpoint>
	  <Trackpoint>
            <Time>2017-08-31T14:52:07Z</Time>
	    <Cadence>53</Cadence>
	  </Trackpoint>

Lap-ów może być wiele. Każdy zawiera element Track, w którym zapisana jest informacja o fragmencie trasy. Pomiędzy LapTrack znajduje się nagłówek zawierający różne obliczone/zbiorcze informacje, m.in. średnią kadencję. Co by oznaczało, że w powyższym przykładzie średnia kadencja wynosiła 77 obrotów/min. Na odcinku od 14:52:02Z do 14:52:06Z (4 sekundy) średnia kadencja wyniosła 46 o/min, zaś na odcinku 14:52:06Z--07Z (1s) 53 o/min.

Można też policzyć kadencję samodzielnie, co pozwoli na uzyskanie dodatkowej informacji. Liczenie kadencji jest proste. Mnożąc średnią kadencję odcinka razy czas w sekundach otrzymamy liczbę obrotów korby na tym odcinku (kadencję należy podzielić przez 60 bo jest podana w minutach). Odcinki o zerowej kadencji pomija się (Garmin też tak oblicza BTW). Dzieląc łączną liczbę obrotów przez czas otrzymamy średnią kadencję. Ja dodałem opcję pomijania odcinków o pewnej minimalnej prędkości (np. 8 kmh) -- takie odcinki to zwykle jakieś nietypowe fragmenty, zaniżające tylko średnią.

#!/usr/bin/perl
# Cadence calculator for GarminEdge tcx files (or converted fits)
# tprzechlewski@gmail.com
use Getopt::Long;

my $prev_Time = -1;
my $parsingTrack ='N';
my $regCadence = 'N';
my $min_speed = -1; # minimum speed
my $trackNo=1;

GetOptions( "s=f"  => \$min_speed, );
$min_speedMS = ($min_speed *1000)/3600.0;

if ($min_speed > 0) {
  print "*** Segments with speed below $min_speed kmh skipped ***\n";
}

while (<>) {
  chomp();

  # Order is importany (first check for <Track>:
  if ( /<Track>/ ) {
    if ( $regCadence eq 'N' ) {
      ## Check if Cadence is registered
      print STDERR "*** No cadence registered! ***\n";
      exit 1;
    } else {
      $parsingTrack = 'Y' ; print STDERR "### Parsing track #$trackNo...\n";
      $trackNo++;
    }
  }

  # Parsing header:
  if ($parsingTrack eq 'N' ) {
    if ( /<TotalTimeSeconds>/) {
      $edge_LapTime = xmlEleValue('TotalTimeSeconds', $_) ; }
    elsif (/<Cadence>/) {
      $edge_LapCadence = xmlEleValue('Cadence', $_) ; $regCadence = 'Y' }
    elsif (/<DistanceMeters>/) {
      $edge_LapDist = xmlEleValue('DistanceMeters', $_) ;  }
    ##print STDERR "## Parsing track info: $_\n";
    next;
  }


  ## start parsing Track now:
  if (/Speed>/)  { $speed = xmlEleValue ('Speed', $_);
  } elsif ($_ =~ /<Time>(.*)T(.*)Z<\/Time>/ ) {
    $time = $2;
    ($h, $m, $s )  = split /:/, $time;
    $current_time = $h * 60 * 60  + $m * 60 + $s ;
    ##print STDERR "$current_time\n";
  } elsif (/<Cadence>/ ) {
    $cadence = xmlEleValue ('Cadence', $_);
  } elsif (/<DistanceMeters>/ ) { 
    $distance = xmlEleValue ('DistanceMeters', $_);
  } elsif ($_ =~ /<\/Trackpoint>/ ) {

    if ( $prevTime > 0 ) {## pomija pierwsze
      $lastTime = $current_time ;
      if ($cadence > 0 && $speed > $min_speedMS ) {
	$timeDiff = $current_time - $prevTime; 

	$total_time_cycled += $timeDiff ;
	$total_cycles += $cadence * $timeDiff / 60;

	$prevTime = $current_time ;
      }
      else {
	$timeDiff = $current_time - $prevTime; 

	$total_time_idle += $timeDiff ;

	$prevTime = $current_time ;
      }

    } else {
     $prevTime = $current_time ;
     $firstTime = $current_time ;
  }

 }

if ( /<\/Track>/ ) {
   $total_Time = $total_time_idle + $total_time_cycled;

   printf "Time = Idle: %d s Spinning: %d s Total: %d s\n", $total_time_idle,
      $total_time_cycled, $total_Time;
   printf "Time = Idle: %.2f%% Spinning: %.2f%% Total: %.2f%%\n",
      $total_time_idle/$total_Time *100,
      $total_time_cycled/$total_Time * 100, $total_Time/$total_Time *100;

   print "Rotations (total) = $total_cycles\n";
   print "Mean cadence (computed) = " . $total_cycles/$total_time_cycled * 60 . "\n";

   $totalTimeTime = $lastTime - $firstTime;

   print "Total time (last - first) = $totalTimeTime s\n";

  print "Registered (header) values: lap time: $edge_LapTime "
    . "cadence: $edge_LapCadence lap distance (m): $edge_LapDist\n";
  
  ## reset values ## ## ## 
  $grand_total_time_idle += $total_time_idle; 
  $grand_total_time_cycled  += $total_time_cycled ;
  $grand_total_cycles += $total_cycles ;
  $grand_total_Dist +=  $edge_LapDist;

  $total_time_idle = $total_time_cycled = $total_cycles = 0 ;
  $prev_Time = -1; 
  $parsingTrack ='N';
  $regCadence = 'N';
}

} ##/while

## Grand Totals:
$trackNo--;
$grand_total_Time = $grand_total_time_idle + $grand_total_time_cycled;

print "====== Totals/means for $trackNo tracks =====\n";
printf "Time = Idle: %d s Spinning: %d s Total: %d s\n", $grand_total_time_idle,
      $grand_total_time_cycled, $grand_total_Time;
   printf "Time = Idle: %.2f%% Spinning: %.2f%% Total: %.2f%%\n",
      $grand_total_time_idle/$grand_total_Time *100,
      $grand_total_time_cycled/$grand_total_Time * 100, 
      $grand_total_Time/$grand_total_Time *100;
print "Rotations (total) = $grand_total_cycles\n";
print "Mean cadence (computed) = " . $grand_total_cycles/$grand_total_time_cycled * 60 .  "\n";
print "Total distance (registered): $grand_total_Dist (m)\n";

## ### ### ### ### ###

sub xmlEleValue {
  my $en = shift; # element name
  my $el = shift; # line

  $el =~ /<$en>(.*)<\/$en>/;

  return "$1";

}

Przykładowy wydruk dla pliku fit/tcx zawierającego trzy segmenty:

$ cadencecalc.pl 2017-08-31.tcx
### Parsing track #1...
Time = Idle: 552 s Spinning: 2082 s Total: 2634 s
Time = Idle: 20.96% Spinning: 79.04% Total: 100.00%
Rotations (total) = 2684.95
Mean cadence (computed) = 77.3760806916427
Total time (last - first) = 2634 s
Registered (header) values: lap time: 2438.06 cadence: 77 lap distance (m): 16339.2
### Parsing track #2...
Time = Idle: 80 s Spinning: 652 s Total: 732 s
Time = Idle: 10.93% Spinning: 89.07% Total: 100.00%
Rotations (total) = 860.716666666666
Mean cadence (computed) = 79.2070552147239
Total time (last - first) = 3366 s
Registered (header) values: lap time: 731.05 cadence: 79 lap distance (m): 4994.82
### Parsing track #3...
Time = Idle: 29 s Spinning: 105 s Total: 134 s
Time = Idle: 21.64% Spinning: 78.36% Total: 100.00%
Rotations (total) = 120.716666666667
Mean cadence (computed) = 68.9809523809524
Total time (last - first) = 3500 s
Registered (header) values: lap time: 134.378 cadence: 69 lap distance (m): 761.78
====== Totals/means for 3 tracks =====
Time = Idle: 661 s Spinning: 2839 s Total: 3500 s
Time = Idle: 18.89% Spinning: 81.11% Total: 100.00%
Rotations (total) = 3666.38333333333
Mean cadence (computed) = 77.4860866502289
Total distance (registered): 22095.8 (m)

Podając jako minimalną prędkość 9 km/h otrzymamy:

$ cadencecalc.pl -s 9 2017-08-31.tcx
*** Segments with speed below 9 kmh skipped ***
### Parsing track #1...
Time = Idle: 654 s Spinning: 1980 s Total: 2634 s
Time = Idle: 24.83% Spinning: 75.17% Total: 100.00%
Rotations (total) = 2582.11666666667
Mean cadence (computed) = 78.2459595959596
Total time (last - first) = 2634 s
Registered (header) values: lap time: 2438.06 cadence: 77 lap distance (m): 16339.2
### Parsing track #2...
Time = Idle: 80 s Spinning: 652 s Total: 732 s
Time = Idle: 10.93% Spinning: 89.07% Total: 100.00%
Rotations (total) = 860.716666666666
Mean cadence (computed) = 79.2070552147239
Total time (last - first) = 3366 s
Registered (header) values: lap time: 731.05 cadence: 79 lap distance (m): 4994.82
### Parsing track #3...
Time = Idle: 29 s Spinning: 105 s Total: 134 s
Time = Idle: 21.64% Spinning: 78.36% Total: 100.00%
Rotations (total) = 120.716666666667
Mean cadence (computed) = 68.9809523809524
Total time (last - first) = 3500 s
Registered (header) values: lap time: 134.378 cadence: 69 lap distance (m): 761.78
====== Totals/means for 3 tracks =====
Time = Idle: 763 s Spinning: 2737 s Total: 3500 s
Time = Idle: 21.80% Spinning: 78.20% Total: 100.00%
Rotations (total) = 3563.55
Mean cadence (computed) = 78.1194738765071
Total distance (registered): 22095.8 (m)

Idle oznacza czas w którym nie kręcimy i/lub jedziemy poniżej prędkości minimalnej (podawany jest czas w sekundach i udział w całości). Rotations to liczba obrotów. Obliczone wartości wyglądają na prawidłowe na co wskazywałoby, że są bliskie wartościom liczonym przez Garmina.

url | Wed, 06/09/2017 11:09 | tagi:
Podsumowania rowerowe 200 tys/7 tys

Jeszcze się nie skończył czerwiec a ja już nabiłem rekordowe 7 tysięcy kilometrów przejechanego rocznego dystansu (4 czerwca dokładnie to się stało). Do tej pory mój rekord to było 6 tys na koniec czerwca, teraz wygląd, że będzie z łatwością osiem.

Nawiasem mówiąc 24 maja osiągnąłem 200 tys na liczniku życiowego dystansu (może da się dociągnąć do 250 tys?).

Z tej okazji podsumowałem mój życiowy dystans (bez lat 1992--1991, dla których nie mam detalicznych danych) z podziałem na pierwsze/drugie półrocze. Wyniki są następujące:

----------------------------------------------------
kwartał km    %%      |  kwartał km    %%     razem%
----------------------------------------------------
1993_1  2330  44.13   |  1993_2  2950  55.87  100.00
1994_1  2805  62.06   |  1994_2  1715  37.94  100.00
1995_1  1710  47.90   |  1995_2  1860  52.10  100.00
1996_1  1546  33.90   |  1996_2  3014  66.10  100.00
1997_1  2055  40.73   |  1997_2  2990  59.27  100.00
1998_1  2530  38.13   |  1998_2  4105  61.87  100.00
1999_1  3065  47.63   |  1999_2  3370  52.37  100.00
2000_1  4910  43.82   |  2000_2  6295  56.18  100.00
2001_1  5255  48.86   |  2001_2  5500  51.14  100.00
2002_1  6240  59.68   |  2002_2  4215  40.32  100.00
2003_1  5130  48.72   |  2003_2  5400  51.28  100.00
2004_1  3575  41.16   |  2004_2  5110  58.84  100.00
2005_1  4415  49.33   |  2005_2  4535  50.67  100.00
2006_1  0000   0.00   |  2006_2  2880 100.00  100.00
2007_1  1855  46.73   |  2007_2  2115  53.27  100.00
2008_1  2380  36.12   |  2008_2  4210  63.88  100.00
2009_1  2535  45.97   |  2009_2  2980  54.03  100.00
2010_1  3060  47.81   |  2010_2  3340  52.19  100.00
2011_1  3535  43.45   |  2011_2  4600  56.55  100.00
2012_1  3285  45.44   |  2012_2  3945  54.56  100.00
2013_1  3710  45.13   |  2013_2  4510  54.87  100.00
2014_1  4020  54.55   |  2014_2  3350  45.45  100.00
2015_1  4100  46.80   |  2015_2  4660  53.20  100.00
2016_1  5365  47.80   |  2016_2  5860  52.20  100.00
2017_1  7155 100.00   |  2017_2  0000   0.00  100.00
----------------------------------------------------
Średnio: kw1 = 46.63 kw2 = 53.37 razem% = 100.00 (25 lat)
Razem: 200835.00

Zawsze mi się wydawało, że w drugim półroczu przejeżdżam mniej a tu proszę--faktycznie jest dokładnie odwrotnie.

url | Thu, 08/06/2017 03:40 | tagi: ,
Montaż błotników SKS Bluemels


Ponieważ zamierzam ostro jeździć w zimie (bo zimy ostatnio się zrobiły dość łagodne) zmodyfikowałem swój rower MTB (koła 26 cali) pod kątem zabezpieczenia przed wodą. Do tej pory używałem błotników szybko montowanych: tylny -- SKS X-Tra Dry zakładany na sztycę plus jakiś tam tani przedni nasadzany na szynę przymocowaną do plastikowego korka wbitego w dziurę w rurze widelca. Patent na przedni widelec jest fajny, ale błotniki -- ponieważ jednak znajdują się w znacznej odległości od opony -- nie zabezpieczają przed wodą jak błotniki zamontowane porządnie.

Zdecydowałem się zatem na takie porządne i wybrałem SKS Bluemels. Do nabycia w CentrumRowerowym.pl za circa 95 PLN (z dostawą). Przed zakupem w CR sprawdziłem czy aby ktoś nie sprzedaje takowych na OLX. I faktycznie sprzedawał, praktycznie nowe, za 70 PLN (z dostawą). Bonusem zakupu na OLX było też to, że pierwszy właściciel poprzykręcał te wszystkie druty, nakładki i śrubki, oszczędzając mi pewnie ze dwie godziny albo i więcej.

Montaż tylnego nie stanowił problemu: mój zmodyfikowany Author Traction ma dziury na błotniki w tylnym widelcu. Z przednim było gorzej -- widelec nie ma dziur montażowych. Kupiłem zatem na Allegro, w sklepie z częściami samochodowymi, cztery aluminiowe opaski/obejmy w osłonie gumowej-- z tego co mi się wydaje te obejmy normalnie używane są do tuningu motocykli czy coś w tym stylu. Z dostawą za obejmy zapłaciłem 40 PLN, czyli więcej niż 50% tego co za błotniki. Trochę dużo ale niech tam, bez dziadowania ma być...

Plan był taki, że dwie obejmy przykręcone na dole goleni widelca posłużą do przymocowania drutów, a do dwóch przymocowanych na górze dokręcę poprzeczną blaszkę, do której z kolei przyśrubuję błotnik (za uchwyt z dziurą, który normalnie pasuje do dziury w widelcu). Na razie szukam estetycznej blaszki i prowizorycznie unieruchomiłem błotnik opaskami zaciskowymi, ale już wiem że plan był dobry i błotnik dało się elegancko wpasować tak że nie lata, nie hałasuje i da się dość szybko zdemontować/zamontować z powrotem (trzeba było w tym celu trochę skrócić druty). No dałem radę tym razem...

url | Wed, 21/12/2016 05:55 | tagi: , , ,
Garmin Virb Edit

Według producenta program: łączy nagrania wideo z kamery sportowej VIRB z danymi GPS i innymi informacjami pochodzącymi ze zgodnych urządzeń firmy Garmin. Faktycznie łączy dane zapisane w formacie FIT/GPX z dowolnym plikiem wideo zapisanym w formacie MP4.

VIRB Edit można ściągnąć za darmo ze strony Garmina (dostępne są wersje dla systemów MS Windows/Mac).

Moja niegarminowska kamera zapisuje obraz w formacie MOV (Dane GPS są faktycznie z urządzenia firmy Garmin, ale równie dobrze mogłyby być ze smartfonu albo chińskiego loggera.) Zamieniam plik MOV do formatu MP4 za pomocą aplikacji HandBrakeCLI. Poniższe polecenie wykonuje konwersję, a wynikowy plik.mp4 będzie około 50% mniejszy niż plik MOV:

time HandBrakeCLI -i PLIK.MOV -o PLIK.mp4 -w 1280 -l 720 --preset="Normal"

Trzydziestominutowy plik MOV, zamieniany jest przez około pół godziny (Linux IntelNuc/i5/8Gb pamięci).

Uparłem się zainstalować HandBrakeCLI w systemie Fedora21, a ponieważ nie ma stosownych pakietów .rpm musiałem go skompilować:

yum install yasm zlib-devel bzip2-devel libogg-devel libtheora-devel \
libvorbis-devel libsamplerate-devel libxml2-devel fribidi-devel \
freetype-devel fontconfig-devel libass-devel dbus-glib-devel \
libgudev1-devel webkitgtk-devel libnotify-devel \
gstreamer-devel gstreamer-plugins-base-devel

sudo yum groupinstall "Development Tools" "Development Libraries" \
"X Software Development" "GNOME Software Development"

yum install lame-libs lame-devel x264-devel intltool

tar -xvzf HandBrake-0.10.3.tar.bz2
cd HandBrake-0.10.3
./configure
cd build
make
make install

W sumie mogłem sobie darować powyższe, bo i tak w końcu muszę używać MS Windows, no ale może ten HandBrake przyda się do czegoś innego.

Na mojej stronie na youtube można obejrzeć wygenerowane za pomocą VIRB filmiki z dodanymi danymi GPS.

url | Thu, 12/05/2016 06:53 | tagi: , , ,
Wycieczka z Damnicy do Lęborka

W sobotę pojechałem SKMką do Damnicy (15 PLN) a stąd już rowerem przez Dębnicę Kaszubską i Czarną Dąbrówkę do Lęborka. Głównym celem (oprócz rowerowania) było odwiedzenie poniemieckich cmentarzy w Damnicy, Lubuniu, Dobieszewie, Dobrej, Gogolewie i Gogolewku.

Usiłując dostać się do Lubunia od strony Dębnicy ugrzęzłem beznadziejnie na piaszczystych drogach i zmarnowałem tutaj sporo czasu. Wracając z Lubunia -- w akcie desperacji -- usiłowałem poszukać innej drogi -- co nie było dobrym pomysłem i nie tylko skończyło się nadłożeniem kilku kilometrów ale nawet forsowaniem strumienia. Z Lubunia do Dębnicy chyba nie ma możliwości dojechania droga utwardzoną -- a jeżeli, to strasznie naokoło!

Cmentarzy w Dobrej i Gogolewku nie odszukałem, bo i tak wycieczka się przeciągnęła i obawiałem się czy zdążę na powrotny pociąg w Lęborku.

Na koniec został powrót SKMką w wagonie dla rowerów w nieprzyjemnym towarzystwie palących, pijących piwo, słuchających głośnej muzyki typu disco polo i przeklinających prostaków. Przypomiał mi się Al Sieber, Chief of Scouts (grany przez Roberta Duvalla) z filmu Geronimo: Amerykanska legenda: ,,Must be Texans... the lowest form of white man there is''1. Tylko zamiast Texans (Teksańczycy) podstawiłem Kaszub.

Ślad jest poniżej:


Pokaż Damnica-Lębort(trk) na większej mapie

1To muszą być Teksańczycy...najniższa forma białego człowieka

url | Mon, 21/05/2012 14:49 | tagi: ,
Kamień graniczny WMG w Matarni

#1: Selfportrait

#2: Janek H.

Za Wikipedią: Parafia św. Walentego w Gdańsku powstała na przełomie XIII/XIV wieku w kościele zbudowanym przez cystersów, do których należała aż do powstania listopadowego w 1830, po którym przeszła pod jurysdykcję diecezji chełmińskiej, a w 1993 po zmianach terytorialnych została włączona do diecezji gdańskiej. Obecny barokowo-rokokowy wystrój kościoła pochodzi z okresu po potopie szwedzkim w 1655, podczas którego kościół uległ znacznemu zniszczeniu.

Kościół jest mały i słabo widoczny od strony ulic Słowackiego/Budowlanych. Znajduje się obok niewielkiego cmentarza. Przy kościele jest kilka starych grobów. Na cmentarzu nie byłem...

Ciekawostką jest bocianie gniazdo znajdujące się na dachu kościoła.

Koło plebanii parafii św. Walentego jest wkopany słup graniczny Wolnego Miasta Gdańska. Dzisiaj tam byłem z kolegą Jankiem H. Kolega H. się wstydzi więc na zdjęciu #2 jest tylko jego ręka.

Po obejrzeniu słupa (długo nam to nie zajęło) wróciliśmy do Sopotu przez Dolinę Radości, po drodze oglądając jeszcze owocnik soplówki jeżowatej (Hericium erinaceus).

Nota bene trasa do Matarni doliną Radości jest do wykonania przez każdego, kto umie na rowerze jeździć. Można z Matarni wrócić tą samą drogą albo pojechać naokoło wzdłuż potoku Strzyży przez Matemblewo. Droga jest pokryta asfaltem za wyjątkiem fragmentu od kościoła św. Walentego do Matemblewa, przy czym w lesie wzdłuż Strzyży może być błoto i piach (ale to niewielki fragment). Poniżej plik GXP route z zaznaczonymi ciekawymi miejscami: pokaż.

url | Mon, 05/12/2011 18:54 | tagi: , ,
Ormo czuwa

Obrazek z dziś. Prawie pusta, prosta droga (konkretnie ulica Nowatorów w Gdańsku). Gość się uparł, że nauczy rowerzystów, iż powinni jechać ścieżką dla rowerów a nie jezdnią.

Na szczęście na tyle był kumaty, że nie usiłował nikogo łapać (za klapy albo coś w tym stylu), bo by jeszcze poprzewracał.

Takie rzeczy tylko w BudyńLandzie:-)

url | Sat, 03/12/2011 18:15 | tagi:
Ostatnie prosta

Dziś przejeżdżając skromne 30 km, dociągnąłem do 149,925 km życiowego przebiegu... Zostało zatem zaledwie 80 km do okrągłej liczby 150 tys...

url | Wed, 02/11/2011 20:37 | tagi:
Wycieczka rowerowa do Brodnicy

W poprzednią sobotę/niedzielę (2/3 09. br.) pojechałem z Miśkiem na rowerach do Brodnicy (za Kartuzami) i z powrotem. Ślady są tutajtutaj.

url | Wed, 14/09/2011 17:32 | tagi: ,
Wycieczka na Hel

Popłynęliśmy wczoraj (30 08) z KP i JP na Hel tzw. tramwajem wodnym z Sopotu na Hel. Bilety (1 normalny i dwa ulgowe + bilety na trzy rowery za 45 PLN) kupiliśmy w kasie na molo poprzedniego dnia. Z Helu pojechaliśmy do Władysławowa (jakieś 35 km) gdzie zjedliśmy obiad w tawernie/barze Checz. Po obiedzie pojechaliśmy do Pucka. W Pucku JP miał dość i pojechał dalej pociągiem a my we dwójkę przez Rzucewo i Połchowo do Rumii. Tam wsiedliśmy w SKM i do domu... Razem wyszło rowerem ca 80 km.

Ślad jest tutaj, a zdjęcia tutaj.

url | Wed, 31/08/2011 10:57 | tagi: ,
Ostatnie okrążenie

Dziś przejeżdżając skromne 35 km, przekroczyłem 145 tys życiowego przebiegu... Zostało 5 tys. do okrągłej liczby 150 tys. i jest szansa, że dociągnę jeszcze w tym roku...

url | Wed, 11/05/2011 15:21 | tagi:
Na rondzie w Osowie

Dziś (tj. 2011/03/13) na rondzie frekwencja była naprawdę duża (21--22 plus 3 dojechało przed lotniskiem). Zdjęcia są tradycyjnie tutaj a film będzie jutro jak się w nocy prześle na YT.

Dopisane 13 marca 2011 wieczorem: Nie czekałem do jutra i uruchomiłem przesyłanie przed pójściem do kościoła na 18. Filmik jest tutaj.

url | Sun, 13/03/2011 13:30 | tagi:
Cztery flandryjskie górki

Link do mapki z zaznaczonym położeniem geograficznym czterech słynnych górek. Współrzędne ustalone dzięki bazie climbbybike. (Jak dojechać: SNBC:-)

url | Fri, 11/03/2011 14:13 | tagi: ,