Weblog Tomasza Przechlewskiego [Zdjęcie T. Przechlewskiego]


scrum
random image [Photo gallery]
Zestawienie tagów
1-wire | 18b20 | 1wire | 2140 | 3rz | adamowicz | afera | alsamixer | amazon | amber | amman | anniversary | antypis | apache | api | applebaum | arm | armenia | astronomy | asus | atom.xml | awk | aws | bachotek | bakłażan | balcerowicz | balta | banan | bash | batumi | berlin | białowieża | białystok | bibtex | bieszczady | birzeit | biznes | blogger | blogging | blosxom | bme280 | bono | borne-sulinowo | breugel | bt747 | budapeszt | budyniowo | budyń | bursztyn | campagnolo | canon | cedewu | chaos | chello | chiller | chillerpl | chown | christophe dominici | chujowetaśmy | ciasto | cmentarz | contour | coronavirus | covi19 | covid | covid19 | cron | css | csv | cukinia | curl | cycling | d54250wykh | darkages | dbi | debian | dejavu | dhcp | dht22 | dia | docbook | dom | dp1500 | ds18b20 | duda | dulkiewicz | dulkiewiczowa | dyndns | dynia | ebay | economy | ecowitt | ekonomia | elka | elm | emacs | emacs23 | english | ep | erasmus | erasmusplus | ess | eu | eurostat | excel | exif | exiftool | f11 | fc | fc11 | fc15 | fc29 | fc5 | fc8 | fedora | fedora21 | fenix | ffmpeg | finepix | firefox | flickr | folau | fontforge | fontspec | fonty | food | fop | forms | foto | france | francja | fripp | froggit | fuczki | fuji | fuse | gammu | garden | garmin | gas | gawk | gazwyb | gdańsk | gdynia | gender | geo | geocoding | georgia | gft | ggplot | ghost | git | github | gmail | gmaps | gnokii | gnus | google | google apps script | googlecl | googleearth | googlemaps | gotowanie | gphoto | gphoto2 | gps | gpsbabel | gpsphoto | gpx | gpx-viewer | greasemonkey | gruzja | grzyby | gus | gw1000 | haldaemon | handbrake | helsinki | hhi | historia | history | hitler | holocaust | holokaust | hp1000se | hpmini | humour | iblue747 | ical | iiyama | ikea | imagemagick | imap | inkscape | inne | internet | j10i2 | javascript | jhead | jifna | jordania | k800i | kajak | kamera | karob | kibbeh | kleinertest | kml | kmobiletools | knuth | kociewie kołem | kod | kolibki | komorowski | konwersja | krutynia | krynki | kuchnia | kurski | kłamstwo | latex | latex2rtf | latex3 | lcd | legend | lenny | lesund | lewactwo | lgbt-folly | liban | liberation | linksys | linux | lisp | lisrel | litwa | lizbona | logika | ltr | lubowla | lwp | lwów | m2wś | malta | mapquest | mapsource | maradona | marchew | marimekko | marvell | math | mathjax | mazury | mbank | mediolan | mencoder | mevo | mex | mh17 | michalak | michlmayr | microsoft | monitor | mp4box | mplayer | ms | msc | mssql | msw | mswindows | mtkbabel | museum | muzyka | mymaps | mysql | mz | nafisa | nanopi | natbib | navin | neapol | nekrolog | neo | neopi | netbook | niemcy | niemieckie zbrodnie | nikon | nmea | nowazelandia | nuc | nxml | oauth | oauth2 | obituary | ocr | odessa | okular | olympus | ooffice | ooxml | opera | osm | otf | otftotfm | other | ov5647 | overclocking | ozbekiston | padwa | palestyna | panoramio | paryż | pdf | pdfpages | pdftex | pdftk | pedophilia | perl | photo | photography | pi | picasa | picasaweb | pim | pine | pis | pit | pizero | plain | plotly | pls | plugin | po | podcast | podlasie | podróże | pogoda | politics | polityka | polsat | portugalia | postęp | powerpoint | połtawa | prelink | problem | propaganda | pseudointeligencja | pstoedit | putin | python | pywws | r | r1984 | radio | random | raspberry | raspberry pi | raspberrypi | raspbian | refugees | relaxng | ridley | router | rower | rowery | roztocze | rpi | rsync | rtf | ruby | rugby | rumunia | russia | rwc | rwc2007 | rwc2011 | rwc2019 | ryga | rzym | salerno | samba | sds011 | selenium | sem | senah | sernik | sheevaplug | sienkiewicz | signature | sikorski | sks | skype | skytraq | smoleńsk | sqlite | srtm | sshfs | ssl | staszek wawrykiewicz | statistcs | statistics | stats | statystyka | stix | stretch | supraśl | suwałki | svg | svn | swanetia | swornegacie | szwajcaria | słowacja | tallin | tbilisi | terrorism | tesseract | tex | texgyre | texlive | thunderbird | tomato | totalnaopozycja | tourism | tramp | trang | transylwania | truetype | trzaskowski | ttf | turcja | turkey | turystyka | tusk | tv | tv5monde | tweepy | twitter | tykocin | typetools | ubuntu | uchodźcy | udev | ue | ukraina | umap | unix | upc | updmap | ups | utf8 | uzbekistan | varia | video | vienna | virb edit | virbedit | vostro | wammu | wdc | wdfs | weather | weathercloud | webcam | webdav | webscrapping | weewx | wenecja | wh2080 | wiedeń | wikicommons | wilno | win10 | windows | windows8 | wine | wioślarstwo | wojna | word | wordpress | wrt54gl | ws1080 | wtyczka | wunderground | ww2 | www | wybory | wybory2015 | włochy | węgry | xemex | xetex | xft | xhtml | xine | xml | xmllint | xsd | xslt | xvidtune | youtube | yum | zaatar | zakopane | zakupy | zawodzie | zdf | zdrowie | zeropi | zgarden | zgony | zprojekt | łeba | łotwa | świdnica | żywność
Archiwum
06/2023 | 02/2023 | 01/2023 | 11/2022 | 10/2022 | 09/2022 | 07/2022 | 06/2022 | 04/2022 | 03/2022 | 02/2022 | 12/2021 | 09/2021 | 03/2021 | 01/2021 | 12/2020 | 11/2020 | 10/2020 | 09/2020 | 08/2020 | 07/2020 | 04/2020 | 03/2020 | 02/2020 | 01/2020 | 12/2019 | 11/2019 | 10/2019 | 09/2019 | 08/2019 | 07/2019 | 06/2019 | 04/2019 | 02/2019 | 01/2019 | 12/2018 | 11/2018 | 10/2018 | 09/2018 | 08/2018 | 07/2018 | 05/2018 | 04/2018 | 03/2018 | 02/2018 | 01/2018 | 11/2017 | 10/2017 | 09/2017 | 08/2017 | 07/2017 | 06/2017 | 05/2017 | 04/2017 | 03/2017 | 02/2017 | 01/2017 | 12/2016 | 11/2016 | 10/2016 | 09/2016 | 08/2016 | 06/2016 | 05/2016 | 04/2016 | 02/2016 | 12/2015 | 11/2015 | 09/2015 | 07/2015 | 06/2015 | 05/2015 | 02/2015 | 01/2015 | 12/2014 | 09/2014 | 07/2014 | 06/2014 | 04/2014 | 02/2014 | 01/2014 | 12/2013 | 11/2013 | 10/2013 | 09/2013 | 08/2013 | 07/2013 | 05/2013 | 04/2013 | 03/2013 | 02/2013 | 01/2013 | 12/2012 | 11/2012 | 10/2012 | 09/2012 | 08/2012 | 07/2012 | 05/2012 | 03/2012 | 02/2012 | 01/2012 | 12/2011 | 11/2011 | 10/2011 | 09/2011 | 08/2011 | 07/2011 | 06/2011 | 05/2011 | 04/2011 | 03/2011 | 02/2011 | 01/2011 | 12/2010 | 11/2010 | 10/2010 | 09/2010 | 08/2010 | 07/2010 | 06/2010 | 05/2010 | 04/2010 | 03/2010 | 02/2010 | 01/2010 | 12/2009 | 11/2009 | 10/2009 | 09/2009 | 08/2009 | 07/2009 | 06/2009 | 05/2009 | 04/2009 | 03/2009 | 02/2009 | 01/2009 | 12/2008 | 11/2008 | 10/2008 | 09/2008 | 08/2008 | 07/2008 | 06/2008 | 05/2008 | 04/2008 | 03/2008 | 02/2008 | 01/2008 | 12/2007 | 11/2007 | 10/2007 | 09/2007 | 08/2007 | 07/2007 |
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
Kilometry dla Gdańska 2022

Namówili mnie to wziąłem udział, chociaż uważam tenże konkurs za typową lipę za cudze pieniądze (LzCP).

No więc regulamin jest taki, że należy dojeżdżać rowerem do pracy; za dojechanie/odjechanie do miejsca zdeklarowanego jako praca dostaje się 50 punktów. Za kilometr przejechany 1 punkt. Za każdy odcinek dodatkowe 10 punktów (jeżeli od poprzedniego odcinka upłynęło minimum 30 minut.) Czyli każdy odcinek to tyle punktów ile kilometrów plus 50 lub 10 punktów w zależności czy się zaczęło/zakończyło w pracy lub nie. Jest rywalizacja indywidualna ale też jest zespołowa, w której liczy się wszystkich jeżdżący w firmie. Firmy są podzielone na kategorie a moja Powiślańska Szkoła Wyższa w Gdańsku jest w grupie ,,Uczelnie''. Wynik zespołowy to liczba kilometrów/punktów podzielona przez liczbę zatrudnionych/studentów (także tych niejeżdżących). Zatem im więcej jeździ w firmie tym ten wskaźnik będzie wyższy.

Ma to teoretycznie sens, ale w praktyce i grupie ,,uczelnie'' już niekoniecznie (w innych może jest inaczej nie patrzyłem). Że frekwencja jest żenująco znikoma (0,5% w grupie uczelni przyznajmy że to porażka--kto ma jeździć na rowerze jak nie studenci), to mała firma z jednym ,,koniem'' ma lepszy wskaźnik, bo się dzieli na mniejszą liczbę tych co nie jeżdżą. No to w naszej szkole ,,koniem'' jestem ja. Szczegóły niżej:

  szkola     s   c         p
  ---------------------------
     psw    350   2 0.5714286
     gum   6150 139 2.2601626
     awf   1950  30 1.5384615
      pg  14500  90 0.6206897
      ug  21500  52 0.2418605
     asp    800   3 0.3750000
 ateneum   1300   2 0.1538462
     wsb  15200  19 0.1250000
     wsz   2000   4 0.2000000

Przy czym: s to zadeklarowana przy rejestracji liczba studentów (tak mi powiedział kolega co rejestrował PSW; czemu tylko studentów a nie studentów + pracowników to ja nie wiem); c to liczba cyklistów, czyli tych co jeżdżą (u nas dwie osoby); p to s/c $\times$ 100 czyli w procentach ci co jeżdżą do liczby studentów. Jak widać GUMed ma najwięcej 2.26% my zaledwie 0.57%. Moim zdaniem WSB się rąbnęło, nie wierzę że w GDA studiuje tam 3/4 tego co UG; ich strata...

Łącznie jeździ 340 cyklistów, łącznie zadeklarowano 63750 studentów. Wychodzi 0.53% czyli nędza. BTW szkół z niezerowym wynikiem jest 9 (jest jeszcze kilka zgłoszonych, ale tam nikt nie jeździł)

Powyższe wartości są przybliżone, bo w aplikacji rejestrującej/publikującej wyniki nie ma danych ile kto podał studentów, ale to można obliczyć. Aplikacja podaje ,,kilometry na studenta'' z dokładnością do jednego miejsca po przecinku oraz łączną liczbę kilometrów. Więc wystarczy podzielić tę łączną liczbę przez p, żeby uzyskać s.

BTW wszystkich cyklistów w GDA jest około 6 tys. Co jak na 450,000 (oficjalnie) miasto stanowi 1.3%. Około 3700 z tych 6 tysięcy przejechało więcej niż 1km/dzień, co daje 3700/450 tys = 0,8%. Faktycznie jest jeszcze mniej, bo ja np. nie mieszkam w GDA.

Konkurs zaczął się 12. września a trwał do 13 listopada. Z grubsza dwa miesiące. Od 13 października (czyli z grubsza od drugiej połowy) punkty wg powyższych zasad były mnożone przez dwa (tj. za przyjazd/odjazd z pracy na przykład dawali 100 a nie 50). Ja się zapisałem 24 września co oznaczało, że za 12 pierwszych dni nic mi nie zapisali. Mój ,,dojazd do pracy'' wyglądał następująco. Mam otóż działkę na Olszynce gdzie często jeżdżę. Po drodze na działkę jest PSW. Wystarczyło stanąć i zrobić 30 minut przerwy żeby regulaminowo dostać 100 punktów (Pellowski zarobił, który jest w pobliżu.) Powyższe to najpopularniejsza trasa z wielu wariantów, a ślady (prawie) wszystkich tras są poniżej na mapce.

Punkty można było wymienić na nagrody. Do wygrania były bluzy, bidony, sakwy, drobne akcesoria rowerowe oraz skarpety. Skarpety były najtańsze, do wygrania już 777 punktów, sakwy/bluzy za prawie 8 tys. Były też nagrody na 4/3 tysiące. Skarpety się skończyły tak na początku listopada, co uważam za promocyjne dziadostwo. Gdyby ich zamówili więcej ile by zapłacili więcej? Obstawiam że niewiele... A tak podejrzewam, że wielu uczestników nie wygrało nic, bo 8 tysiaków nie uskładali, a skarpety--jedyna tania nagroda, którą mogliby traktować jako pamiątkę z imprezy się przewcześnie skończyła. No tak to jest w Gdańsku...


Mój udział w KdG2022

Wszyscy

Aktywni

Wyniki są takie, że przejechałem 3294km co przeliczyło się na 11060 punktów. Ten co wygrał przejechał 12138km (26 tys punktów); trzeci przejechał 9,3 tys km a dziesiąty prawie 7,0 tys km. To są oczywiście absurdalne dystanse (odpowiedno 6.0, 4.6 oraz 3.5 tys/mc.; dla tych co nie wiedzą: kolarz zawodowy przejeżdża około 3 tys/mc przy czym jedzie znacząco szybciej, więc zajmuje mu to mniej czasu). Moje ślady przedstawia górny rysunek obok.

W konkurencji uczelni PSW wygrało (44 punkty/10,9 km); przed GUMedem (34/4,5). Szczegółowe wyniki są następujące:

  szkola    km/s p/s    kmt      c/c1
  ------------------------------------
     psw    10.9  44   3806,3    2/2
     gum     4.2  34  26147,7  139/75
     awf     4.5  32   8710,3   30/22
      pg     2.3  16  33285,0   89/69
      ug     1.7  11  37859,5   52/48
     asp     1.1  13    878,2    3/3
 ateneum     1.0   7   1233,2    2/1
     wsb     0.4   2   6506,1   19/15
     wsz     0.3   3    640,6    4/1
  ------------------------------------
    Razem      x   x 118426.0  340/235

Przy czym: km/s to wskaźnik kilometry/studenta; p/s to punkty na studenta; kmt to łączna liczba kilometrów; c to liczba cyklistów; c1 to liczba cyklistów, którzy coś przejechali w ogóle. Jeżdżący cykliści to 70% liczby wykazywanej w aplikacji BTW.

Niektórzy jeżdżą więcej niż symbolicznie. Załóżmy że aktywny cyklista to taki to dojeżdżał do pracy w 2/3 wszystkich dni pracujących (30 dni w okresie konkursu). Zakładając minimalny dystans dojazdu równy 1,5 x 2 = 3.0 km x 30 dni. Daje to 90km... Takich aktywnych cyklistów było 162 tj. nieco mniej niż połowa tego co wykazuje aplikacja (47,6% albo 162 osoby). Aktywni przejechali 98% całkowitego wykazywanego dystansu (116051.0 km). Rozkład ogólnego dystansu przedstawiają wykresy obok (środkowy wszyscy jeżdżący/dolny tylko aktywni.)

Reasumując: wygrali nie tyle ci co jeżdżą do pracy ale ci co jeżdżą w pracy albo jacyś fanatycy co tylko jeżdżą, ale nie do pracy bo już na to nie mają czasu. Frekwencja zaś była znikoma (np. ledwie 160 aktywnych cyklistów wśród studentów/pracowników wszystkich Gdańskich szkół wyższych). Jeżeli toto miało promować rower jako alternatywę dla samochodu to nie wyszło, bo bez konkursu też by jeździli (tacy jak ja na przykład). Liderzy konkursu byli zaś jaskrawym jeżdżącym przykładem wypaczenia jego idei. Do tego nagrody się skończyły przedwcześnie i nie wszyscy dostali nawet głupie skarpety. Czyli promocyjnie też klapa. Zatem typowe dulkiewiczowanie (od cwaniakowanie) za publiczne pieniądze (Kto miał zarobić to zarobił a piniondz sam się nie wyda....)

Dane i skrypt do obliczeń jest tutaj.

url | Tue, 15/11/2022 06:32 | tagi: ,
Kamera Ghost XL


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

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

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

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

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

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

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

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

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

url | Wed, 20/07/2022 19:20 | tagi: , ,
Kilka tras rowerowych wokół Trójmiasta

Generalne uwagi

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

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

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

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

Lista tras

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

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

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

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

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

url | Fri, 29/04/2022 08:56 | tagi: , ,
Zmiana osprzętu z włoskiego na chiński

Tekst w ramach nadrabiania zaległości...

W zeszłym roku prawie nie jeździłem na swoim flagowym rowerze (Ridley Fenix ale alu), bo się połamała klamka. A połamała się wkurwiająco ponieważ rower był w bagażniku, mieliśmy stłuczkę, przesunął się, uderzył klamką w ścianę bagażnika (Skoda Octavia) i już... Nikomu nic się nie stało tylko straty w sprzęcie (samochód + rower) Enough-is-enough. Zacząłem przemyśliwać jakby się wyplątać z tego całego Campagnolo (którego używam od zawsze; nigdy nie jeździłem na czymś innym), które tak poza tym staje się coraz bardziej egzotyczne, czego dowodem na przykład może być skromna oferta używanych części na Allegro.

Tak sobie myślałem cały 2020 a w zimie kolega CF powiedział mi, że właśnie kupił chiński osprzęt firmy Sensah i że to jest klon Srama i wygląda ten osprzęt całkiem-całkiem. No to ja też kupiłem tego Sensaha na AliEx, tyle że nie tylko manetki, ale całą grupę (Sensah Empire 11s), w tym korbę która jest chyba innej firmy, bo nazywa się ZRace (a model RX). Całość kupiona pod koniec marca 2021, przyszła jakoś tak po miesiącu chyba, bo przesyłka dość długo szła. Długą i dość pokrętną drogą szła: najpierw do Belgii potem do Hagi w Holandii, potem do Amsterdamu. Stąd do Polski... Całość manetki, hamulce, korba, kaseta, łańcuch + przerzutki kosztowało 1030 PLN (bez podatku VAT, bo go jeszcze wtedy nie naliczali)

BTW ja ślubowałem nigdy-przenigdy nie kupować czegokolwiek od firmy z nazwą w trybie fekalno-oznajmującym (jest jeszcze w tej Ameryce firma z nazwą w trybie f-ostrzegawczym czyli OSRAM), ale ta chińska przecież nazywa się Sesnah więc jest OK.

Ekstra musiałem kupić za 340 PLN w Wertykalu bębenek do piasty (Campagnolo Zonda) kompatybilny z Shimano/SRAM. I tak byłem szczęśliwy, że tylko 340 PLN ekstra kosztował mnie rozwód z Campagnolo.

To że zamiast trzech dźwigni Camapgnolo jest jedna dźwignia (system SRAM) to się dowiedziałem od mechanika co mi to wszystko zamontował (że jest mniej niż w Campagnolo to podejrzewałem, ale spodziewałem się dwóch, jak w Shimano:-); nie stanowiło to wszakże wielkiego problemu. Powiem że posługiwanie się tym jest proste i intuicyjne, tyle że z hamowaniem trzeba trochę bardziej uważać niż w Campagnolo, bo manetka jest cóśkolwiek ruchoma (co oczywiste) i jak się za bardzo pociągnie ją do osi roweru to oprócz hamowania, zmieni się bieg...

No więc w 2020 nic nie jeździłem na Feniksie a w 2021 nie jeździłem na innych prawie wcale tylko na Feniksie. Przjechałem już 4500km i wszystko działa, nic się nie popsuło i jestem zachwycony. Do tego stopnia, że jak umyśliłem sobie kupić tryb na wymianę + łacuch a się okazało, że firma dolicza transport do każdej pozycji i wyszło 200 EUR za dwa tryby i łańcuch (jeżeli dobrze pamiętam), to kupiłem jeszcze raz w tym samym sklepie na AliEx całego Sensaha+ZRace za 240 EUR czyli 1090 PLN. Jak sprzedam klamki i korbę na Allegro, to będę miał łańcuch + tryb za normalną cenę:-)

No i tyle, bo skoro działa, to nie ma o czym specjalnie pisać. Generalnie to w ogóle przechodzę na chiński: chiński smartfon, rower, a nawet GPS do roweru też chiński. Otóż do tej pory używałem Garmina Ege 500 (mam już trzy w tym dwa popsute) a teraz kupiłem Xossa G+ za 150 PLN. Tu akurat mieszane uczucia -- być może kwestia przyzwyczajenia. Na minus: nie można podłączyć do PCta (obsługa tylko przez smatfona) i nie można skonfigurować wyświetlacza. Ja lubię mieć czas bieżący, prędkość, dystans przed oczami. W Xoss jest to na dwóch ekranach. Przełączanie się między nimi nie stanowi problemu, ale jakby można sobie zdefinować co się chce oglądać, to byłoby jeszcze lepiej a nie można. Na plus długi czas pracy baterii.

BTW2: jest jeszcze jeden plus: a na czym to kolega jeździ Ultegra/Sram RED? -- Sensah... I nikt nie wie o co chodzi. I o to chodzi...

url | Thu, 16/09/2021 10:31 | tagi: , , ,
Kaszebe Runda 2020 (pandemiczna)

Mijamy Betlejem

Zdecydowałem się na start na średnim dystansie. Trochę poruta, ale 200 km to dla mnie ciut za dużo zwłaszcza w tym roku. Na stronie jest 1164 zgłoszeń z czego 1010 opłaconych. Do tego: każdy wchodzący do biura zobowiązany jest do poddania się pomiarowi temperatury, zasłonięcia ust i nosa i utrzymania dystansu społecznego w wyznaczonych strefach bezpieczeństwa. Biorąc pod uwagę, że te pomiary i strefy mogą spowodować tłok i bałagan na starcie, zarządzam pobudkę na 4:00 rano.

No więc pojechaliśmy z Elką 4:30 do Kościerzyny żeby na spokojnie wystartować z pierwszą grupą o 7:00 (średni dystans czyli 125km oficjalnie ale chyba w rzeczywistości 5km mniej). Przyjechaliśmy na miejsce jakoś tak 5:30. Generalnie pustki. Z tą temperaturą to lipa była--nikt nie mierzy. Ale za to start kawałek od biura. Zanim się przebrałem, przyczepiłem numer, znalazłem start itd. to w sumie już było 20 minut przed siódmą.

Na starcie tłoku nie ma. Pojechałem jak planowałem z pierwszą grupą--nie wiem czy nas 15 było, no może. Po chwili już było tak na oko z 10. W tym składzie dojechaliśmy do pierwszego bufetu, bo ten wyścig ma taką oto specyfikę że są po drodze bufety gdzie można się pożywić regionalnymi specjałami. Tym razem z tych specjałów to był tylko smalec+ogórek konserwowy+jajecznica. Słabo ale, że nie jadłem śniadania ani nic nie wziąłem do jedzenia, to zjadłem trochę tej jajecznicy + kawałek chleba i ogórek (słony) Większość z naszej grupy na tym bufecie została (konsumując?) a dalej pojechaliśmy w trzech.

Następny przystanek też smalec+ogórek, tyle że kawy nie ma. Pojechaliśmy już dalej we dwóch. Trzeci bufet olaliśmy antycypując że tam też smalec. Zresztą tłum tam był, bo trasa już była wspólna od pewnego czasu z dystansem 55km. BTW dzięki temu zrobiło się trochę mniej nudniej, bo co chwila kogoś wyprzedzaliśmy. Ostatni bufet stajemy bo trzeba coś jednak zjeść. Znowu smalec, więc chwilę tylko tu stoimy i jedziemy dalej. Wreszcie za Betlejem (jest taka wieś na Kaszubach) dogoniliśmy gościa o porównywalnym z naszym tempie. Więc dalej we trzech ciagle mijając tych zmagających się z 55km.

Meta tak z zaskoczenia przyszła, bo patrząc na GPSa myślałem że jeszcze trochę mam do przejechania. A tu za zakrętem jakaś tablica świetlna się pojawiła. To chyba meta jest? W rzeczy samej...

Podium nazwijmy to (gdzie medale dawali) było w jeszcze jednym miejscu, a makaron jeszcze w innym dawali. Że widziałem kilkunastu ludzi, którzy wyglądali na takich co jadą 120km, a 3/4 trasy przejechaliśmy w dwóch/trzech to myślałem, że frekwencja katastrofa a ja tym samym osiągnąłem światowy wynik :-) ale nie -- okazało się, że w kategorii jechało prawie 200, a ja skończyłem na 21 miejscu. Całkiem nieźle anyway...

Po wyścigu i zjedzeniu makaronu wróciłem do domu DK20. Razem wyszło zatem 120+65 = 185km czyli prawie tyle co max-dystans w Kaszebe Runda, ale przyznam się że od Rębiechowa, to ledwo kręciłem pedałami i całe szczęście że od tego miejsca do domu to generalnie z góry jest. Kompletnie uszło ze mnie powietrze. Jednak dystans średni to była racjonalna decyzja...

Po długiej przerwie skorzystałem ze swojej kamery. Wyszło 90Gb filmu, który zamieniłem na 6Gb w niskiej rozdzielczości podzielone na trzy kawałki. Dodałem dane telemetryczne z pliku FIT za pomocą VirbEdit Garmina (próbowałem konkurencyjnego dashware, ale poległem na synchronizacji śladu z wideo; dla mnie to niewykonalne w dashware.)

No więc wyniki są tutaj (skopiowane ze strony organizatora i posortowane). Mój wynik konkretnie to: 27.67km/h i czas 4:20 Ślad GPS tutaj a film z trasy (w trzech częściach) tutaj tutaj oraz tutaj.

url | Sat, 26/09/2020 10:23 | tagi: , ,
Podsumowanie poprzedniego roku rowerowego


Podsumowanie zacząłem od wsadzenia (wreszcie) całego dorobku na githuba. Są tam detaliczne dane od 1993roku (27 lat, nie bójmy się słów); do tego w latach 1990--92 przejechałem 20,760, ale ten wyczyn nie jest, aż tak detalicznie udokumentowany. Razem wychodzi w latach 1990--2019 (30 lat) 242,355 km. Czyli do 250 tysięcy zostało 7645 km. Dam radę (jak zdrowie nie przeszkodzi)...

Na githubie jest w szczególności plik opus_magnum.csv, który zawiera cztery kolumny: dd;mm;yyyy;dist (dzień, miesiąc, rok oraz dystans; czasami dni mogą się powtarzać--to nie jest błąd, tylko oznacza, że jeździłem kilka razy dziennie):

require(ggplot2)
require(dplyr)

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

dm <- d %>% mutate(cat = factor(yyyy)) %>%  group_by (cat) %>%
  summarise( tdist = sum(dist, na.rm=TRUE) /1000 ) %>%
  as.data.frame
  
yyyy.first <- first(dm$cat)
yyyy.last <- last(dm$cat)

time.period <- sprintf ("%s--%s", yyyy.first, yyyy.last)

p.m <- ggplot(dm, aes(x = cat, y = tdist )) +
    ggtitle(sprintf ("Distance by year (%s)", time.period)) +
    xlab("year") + ylab("ths km") +
    geom_bar(position = 'dodge', stat = 'identity', fill = "steelblue") +
    geom_text(data=dm, aes(label=sprintf("%.2f", tdist), y= tdist),
    vjust=1.5, color="darkblue", size=3 )
ggsave(p.m, file="opus_magnum.pdf", width=12)
### ###
cy <- 2019
d <- d %>% filter (yyyy == cy) %>% as.data.frame

rides = nrow (d)
total = sum (d$dist)
mride = mean (d$dist)

dm <- d %>% mutate(cat = factor(mm)) %>% group_by (cat) %>%
  summarise( ss = sum(dist, na.rm=TRUE)) %>%
  as.data.frame

p.m <- ggplot(dm, aes(x = cat, y = ss )) +
ggtitle(sprintf ("Cycling in %i (total: %.1f kms/ %i rides/ %.1f kms per ride)",
   cy, total, rides,  mride)) +
    xlab("month") + ylab("km") +
    geom_bar(position = 'dodge', stat = 'identity', fill = "steelblue", alpha=.5) +
    geom_text(data=dm, aes(label=sprintf("%.0f", ss), y= ss),
    vjust=1.5, color="white" )

p.m

outfile <- sprintf ("opus_%i.pdf", cy)
ggsave(p.m, file=outfile, width=10)

Wyniki obok.

url | Sat, 04/01/2020 21:16 | tagi: ,
Mevo kaputt

No i się skończyło (Kompletne fiasko systemu za miliony złotych):

Decyzję o częściowym wypowiedzeniu umowy z wykonawcą NB Tricity podjął Zarząd Obszaru Metropolitalnego Gdańsk-Gdynia-Sopot. Powodem były między innymi niedotrzymywanie terminów w dostawach rowerów, usterki, czy brak dostępności jednośladów. -- Dalsza współpraca z nierzetelnym kontrahentem nie rodzi nadziei na poprawę, a dalsze czekanie na rozwój wydarzeń w spółce NB Tricity byłoby zbyt dużym ryzykiem dla publicznych pieniędzy -- czytamy w oświadczeniu OMGGS.

Własnością Obszaru Metropolitalnego są 1224 rowery, 660 stacji, system IT i całe oprogramowanie internetowe.

Rower Metropolitalny Mevo miał być najnowocześniejszym systemem roweru miejskiego w Europie.

Od siebie dodam że nie tylko miał być ale był. Przez pół roku:-) Co do majątku (rowery/stacje/ITsystem), to mniemam, że jest gówno warty (w szczególności system, który zgodnie z umową kosztował 600 tys PLN, LoL). Dane dotyczące wykorzystania MEVO, które zgromadziłem (kwiecień-październik) udostępniam tutaj.

url | Tue, 19/11/2019 10:57 | tagi: ,
Mevo na umbrielu








Umbriel to mój serwer. W pliku crontab są następujące nastawy:

## co 120s
*/2 * * * * /home/tomek/bin/mevo_get.sh
## Codziennie 2:33 po północy
33  2 * * * /home/tomek/bin/mevo_process_yesterday.sh
## Raz w miesiącu 2:43 (musi być po mevo_process_yesterday.sh)
43  3 1 * * /home/tomek/bin/mevo_process_lastmonth.sh

Uruchamiany co 2 minuty mevo_get.sh pobiera (mevo_get_store.pl) ze strony plik locations.js, wyciąga z niego najważniesze dane, które dopisuje do pliku YYYYMMDD_log.csv

Uruchamiany raz dziennie mevo_process_yesterday.sh agreguje (robi to skrypt mevo_yesterday_f.pl) dane z pliku YYYYMMDD_log.csv, które zapisuje do pliku MEVO_DAILY_BIKES.csv.

Zawartość MEVO_DAILY_BIKES.csv jest następująca:

day;bikes;zb;dist.total;ga;gd;sop;tczew;rumia;s10111;s10111d;s10112;s10112d;zstat;sstat;\
gd0p;ga0p;sop0p;tczew0p;rumia0p;gd1p;ga1p;sop1p;tczew1p;rumia1p;slope3;\
slope5;stage2;stage4;stage6;stage8;stage10;stage12;stage14;stage16;stage18;stage20;stage99

gdzie:

bikes -- łączna liczba rowerów dostępnych/wykazanych w ciągu dnia w plikach locations.js;

zb -- łączna liczba rowerów wykazanych, które nie były używane (zero-bikes);

dist.total -- dystans łącznie (liczony po prostej);

ga/gd/sop/tczew/rumia -- dystans łącznie (liczony po prostej dla miast; jeżeli rower przejechał z miasta do miasta to każde miasto dostaje połowę);

s10111/s10112 --przeciętna liczba rowerów na stacjach s10111/s10112 liczona jako $\sum_{i=1}^N r_i / N$ (N -- liczba pobrań pliku locations.js, jeżeli pobrano wszystkie to $24 \times 30 = 720$);

s10111d/s10112d -- przeciętna liczba rowerów na stacjach s10111/s10112 w godzinach 5--23;

zstat -- przeciętny odsetek stacji bez rowerów (zero-stations), liczony jako $\sum_{i=1}^N s_i / (S \times N)$ (N -- liczba pobrań pliku locations.js, $S$ -- liczba stacji w systemie);

sstat -- przeciętny odsetek stacji z maksimum jednym rowerem (single-stations), liczony jako $\sum_{i=1}^N s_i / (S \times N)$;

gd0p/ga0p/sop0p/tczew0p/rumia0p -- przeciętny odsetek stacji bez rowerów (zero-stations) dla miast (gd/ga/sop/tczew/rumia). Liczony jak zstat tylko $S$ -- liczba stacji w danym mieście oczywiście;

gd1p/ga1p/sop1p/tczew1p/rumia1p -- przeciętny odsetek stacji z maksimum jednym rowerem (single-stations) dla miast (gd/ga/sop/tczew/rumia). Liczony jak sstat tylko $S$ to liczba stacji w danym mieście oczywiście a nie ogółem;

slope3/slope5 -- łączny dystans przejechanych odcinków o nachyleniu przeciętnym 3%/5%;

stage2/stage4 itd -- łączny dystans przejechanych odcinków o dlugości 0--2km, 2--4km itd...

Następnie uruchamia skrypt mevo_daily_report.pl, który z pliku MEVO_DAILY_BIKES.csv wyciąga ostatni i przedostatni dzień; kompiluje raport dzienny tj. oblicza podstawowe statystyki, tworzy raport tekstowy (ograniczony do 280 znaków bo Twitter więcej nie potrafi) tworzy bardziej obszerny raport w formacie TeXa, konwertowany później do obrazka (za pomocą XeTeXa/converta) Publikuje na twitterze (twitter_post.py) obrazek i ww raport tekstowy.

Następnie uruchamia skrypt mevo_yesterday_hr_f.pl, który agreguje dane z pliku YYYYMMDD_log.csv w ujęciu godzinowym. Zapisuje wynik do pliku MEVO_STAT_BIKES_HRS_YYYYMM.csv (plik przechowuje zagregowane dane godzinowe dla miesiąca). Ten skrypt niczego nie publikuje na twitterze

Plik MEVO_STAT_BIKES_HRS_YYYYMM.csv ma następującą zawartość:

day;hr;bikes;nzstations;bikesGD;bikesGA;bikesSP;nzsGD;nzsGA;nzsSP

day/hr -- dzień i godzina;

bikes -- przeciętna liczba rowerów na wszystkich stacjach (definiowana jako suma rowerów/suma pomiarów);

nzstations -- przeciętna liczba stacji z minimum jednym rowerem (non-zero stations);

bikesGD/bikesGA/bikesSP -- przeciętna liczba rowerów na stacjach w mieście

nzsGD/nzsGA/nzsSP -- przeciętna liczba stacji z minimum jednym rowerem w mieście

Wykonywany raz w miesiąc mevo_process_lastmonth.sh uruchamia mevo_monthly_report.pl, który agreguje w skali miesiąca dane z pliku MEVO_DAILY_BIKES.csv; kompiluje raport miesięczny tj. oblicza podstawowe statystyki, tworzy raport tekstowy i obrazek (w sposób analogiczny jak raport dzienny) publikuje na Twitterze (twitter_post.py) obrazek i raport tekstowy.

Następnie uruchamia skrypt mevo_stat_bikes_hrs.pl, który konwertuje/łączy MEVO_DAILY_BIKES.csvMEVO_STAT_BIKES_HRS_YYYYMM.csv do pliku MEVO_HRS.csv. Na podstawie danych z pliku MEVO_HRS.csv tworzone są wykresy, do czego wykorzystywany jest R.

Plik MEVO_HRS.csv ma następującą zawartość:

dow;dowNN;hr;bikes;bikesGd;bikesGa;bikesSp;stats;statsGd;statsGa;statsSp;\
pbikes;pbikesGd;pbikesGa;pbikesSp;pstats;pstatsGd;pstatsGa;pstatsSp

gdzie:

dow -- dzień tygodnia (0 -- powszedni; 1 -- święta, soboty i niedziele)

dowNN -- liczba dni powszednich i niepowszednich (w miesiącu)

hr -- godzina

bikes/bikesGd/bikesGa/bikesSp -- przeciętna liczba rowerów na wszystkich stacjach i na stacjach w mieście;

stats/statsGd/statsGa/statsS -- przeciętna liczba stacji z minimum jednym rowerem ogółem i w mieście;

pbikes/pbikesGd/pbikesGa/pbikesSp -- przeciętna % rowerów na stacjach ogółem i w mieście (% średniej dobowej);

pstats/pstatsGd/pstatsGa/pstatsSp -- przeciętny % stacji z minimum jednym rowerem ogółem i w mieście (% średniej dobowej);

Konkretnie zaś uruchamiany jest R ze skryptem mevo_hrly.R, który generuje wykresy do pliku Mevo_hrly_YYYYMM.pdf. Następnie Mevo_hrly_YYYYMM.pdf jest konwertowane (convert) do formatu JPG (Mevo_hrly_YYYYMM-0.jpg, Mevo_hrly_YYYYMM-1.jpgMevo_hrly_YYYYMM-2.jpg).

Publikuje na twitterze (twitter_post.py) Mevo_hrly_YYYYMM-*.jpg

Uruchamia R ze skryptem mevo_daily_bikes.R. Uruchamia R ze skryptem mevo_daily_zstats.R. Skrypty generują wykresy do plików mevo_daily_bikes.pdfmevo_daily_zstats.pdf. Pliku mevo_daily_bikes.pdf/mevo_daily_zstats.pdf są zamieniane na format JPG. Publikuje na twitterze (twitter_post.py) mevo_daily_bikes.jpg/mevo_daily_zstats.jpg.

Reasumując tworzone/wykorzystywane są następujące pliki danych: YYYYMMDD_log.csv (dzienny log dopisywany co 2min); MEVO_DAILY_BIKES.csv (dzienny log aktualizowany co 24h (o 2:33)); MEVO_STAT_BIKES_HRS_YYYYMM.csv (dzienny log godzinowy aktualizowany co 24h (o 2:33)) MEVO_HRS.csv (plik tymczasowy z MEVO_DAILY_BIKES.csv/MEVO_STAT_BIKES_HRS_YYYYMM.csv (raz w m-cu))

Przy okazji się okazało że XeTeX na Debiana 4.9.51-1 (chyba Stretch) w wersji Armel jest epicko spieprzony. Konkretnie nie może znaleźć fontów systemowych, bo szuka jakiś dziwnych obciętych nazw. Przykładowo Iwona-Reg.otf nie znajduje, bo szuka Iwona-Reg.. Dziwaczny błąd. Zrobiłem link ln -s Iwona-Reg. Iwona-Reg.otf i działa bo mi się nie chciało tracić czasu na poprawienie tego lepiej.

Anyway za 4 ostatnie miesiące zbiorcza statystyka wygląda następująco (dystanse w tys km za wyjątkiem Dist/r -- miesięczny średni przebieg roweru w km):

YYMM Days   Dist %Change Dist/r   GD %Change    GA %Change   SOP %Change
------------------------------------------------------------------------
201905 31  569.8  241.1  531.5  359.5  235.6  126.6  267.3   42.9  244.3
201906 30  856.9  150.4  677.4  501.4  139.5  220.5  174.2   76.2  177.7
201907 31  751.4   87.7  570.9  438.8   87.5  187.9   85.2   69.0   90.5
201908 31  781.0  103.9  592.3  466.5  106.3  180.3   96.0   73.3  106.3
------------------------------------------------------------------------

Czyli najlepiej było w Czerwcu, bo jeżdżą wcale nie przyjezdni tylko miejscowi do roboty. Potwierdza to też zmienność tygodniowa (mniej się jeździ w soboty i niedziele). Połowa odcinków ma mniej niż 4km (liczone w linii prostej przypominam). Długość odcinków o nachyleniu 3% jest śladowa (a 5% to już ślad w śladzie). Resztę na wykresach widać...

url | Wed, 04/09/2019 19:05 | tagi: , ,
MEVO: rozkminianie systemu (odcinek trzy)

Miało nie być o MEVO do września, ale najechałem na stojący w zasadzie w polu rower przed Chwaszczynem. Zrobiłem zdjęcie i się okazało że figuruje on w bazie. Przypomnę, że w poprzednim odcinku trylogii o MEVO założyłem że plik locations.js zawiera informacje nt stacji oraz informacje o luźnych-rowerach-w-dziwnych-miejscach (np w Warszawie), które postanowiłem pomijać. Że przypomnę:

[luźne-rowery] mają dziwną nazwę a w atrybucie bike mają true (albo jeden), a w atrybucie spot mają zero (czyli false). Z tego wychodzi, że te stacje to nie są stacje tylko jakieś luźne rowery pozasystemowe. Taką mam koncepcję...

Znalezisko spod Chwaszczyna podkopało moją wiarę w koncepcję. No bo jeżeli baza zawiera także rowery normalnie eksploatowane, ale nie parkowane na stacjach, to pomijam -- być może istotną -- część ruchu w systemie MEVO. Żeby ustalić w miarę szybko stan rzeczy wymyśliłem, że podsumuję pozycje wszystkich rowerów -- zarówno tych na stacjach i tych luźnych -- i zobaczę co wyjdzie. Konkretnie czy parkowanie poza stacjami to incydent, który można pominąć czy niekoniecznie oraz czy dzikie parkingi się skupiają w pewnych lokalizacjach, a jak się skupiają, to gdzie?

Plik locations.js zawiera zmienną NEXTBIKE_PLACES_DB, która wygląda jakoś tak:

  var NEXTBIKE_PLACES_DB = '[{"places":[
  {"uid":14242676,
   "lat":52.281631111111,
   "lng":21.011891111111,
   "bike":true,
   "name":"Jagiellońska 88A",
   "address":null,
   "spot":false,
   "number":0,
   "bikes":1,
   "booked_bikes":0,
   "bike_racks":0,
   "free_racks":0,
   "special_racks":0,
   "free_special_racks":0,
   "maintenance":false,
   "terminal_type":"","
   bike_list":[{"number":"600262","bike_type":114,
      "lock_types":["frame_lock"],
      "active":true,
      "state":"ok",
      "electric_lock":true,
      "boardcomputer":7551015898,
      "pedelec_battery":62,
      "battery_pack":{"percentage":62}}],
 "bike_numbers":["600262"],
 "bike_types":{"114":1},
 "place_type":"12",
 "rack_locks":false,
 "city":"Gdańsk-Wawa"}]}]';

Pole places zawiera listę elementów, z których każdy to opis miejsca, tj. stacji lub pozycji luźnego roweru (dalej LB od luźnego-bajka). Czy jest to stacja czy rower można wykoncypować na podstawie wartości pola bike (jeżeli true/1 to luźny rower). Są ponadto współrzędne miejsca (lat, lng); numer miejsca (number, lub zero dla LB) liczba rowerów zaparkowanych w miejscu (bikes); lista numerów rowerów w miejscu (bike_numbers); nazwa miejscowości (city). Pole uid to moim zdaniem unique id miejsca. Zatem stacja ma numer, LB nie ma numeru. Każda para współrzędnych ma ten sam uid.

W zasadzie jeżeli bike = true, to bikes=1 ale niekoniecznie i nie potrafię wykoncypować co znaczy taki rekord:

{"uid":14302318,
 "lat":54.350404444444,"lng":18.586652222222,
 "bike":true,
 "name":"BIKE 99170",
  ...
 "bikes":0,
 ...
 city":"Gdańsk"}

Takich wpisów jest circa pięć więc pomijam wyjaśnienie tego fenomenu. Robię skrypt parsujący apiać wszystkie pliki locations.js pobrane w okresie maj--lipiec (ostatni miesiąc niekompletny). Skrypt zapisuje: uid, numer, pozycję, miasto, typ miejsca (stacja albo LB) oraz liczbę powtórzeń (liczba wpisów dotyczących miejsca o współrzędnych lat/lng; każda stacja w tym okresie ma 53 tysiące wpisów. LB ma mniej oczywiście.) Dla czerwca wychodzi 20 tysięcy różnych zarejestrowanych miejsc. Dla całego okresu 60 tysięcy (różnych).

Wyświetlenie 60 tys kropek na mapie nie będzie proste więc wymyśliłem sobie, że rozpocznę od zagregowania liczby ,,parkingów'' do rozsądnej wielkości rzędu kilku tysięcy. W pierwszym podejściu założyłem, że duża liczba miejsc parkowania to rezultat błędów w ustalaniu pozycji GPS i że pozycji będzie mniej jak się zmniejszy dokładność pomiaru. Konkretnie zamiast 8 cyfr spróbować zastosować 4 (tj. przykładowo 54.12345678 obciąć do 54.1234) i zobaczyć co wyjdzie.

Wyszło 40 tysięcy czyli redukcja taka sobie, ale ujawniły się dziwne miejsca koncentracji: w Gdańsku na ul. Pokoleń Lechii/Amber Expo, w Warszawie na ulicy Jagiellońskiej w okolicach numeru 88 oraz w Cedrach Wlk! W Cedrach na ul. Pionierów Żuław 42 (gdzie na Google Maps jest firma UEGZ). Wygląda, że wszystkie wymienione miejsca to stacje, tyle że serwisowe rowerów.

Ponieważ oprócz Warszawy LB sporadycznie są raportowane także, w różnych innych dziwnych miejscach, to wymyśliłem, że będę pomijał miejsca znajdujące się poza prostokątem o współrzędnych wierzchołków równych: 53.8/17.4 (dolny lewy) i 55.0/19.5 (górny prawy).

Na okoliczność LB z Pokoleń Lechii/Amber Expo dodałem warunek, że pomijane są także miejsca znajdujące się wewnątrz prostokąta o współrzędnych wierzchołków równych: 54.387395/18.630779 (górny lewy) i 54.385733,18.635221 (dolny prawy). Cedry zostawiłem w spokoju za to policzyłem kwantyle tych 40 tysięcy miejsc (bez 650 oficjalnych stacji):

kwantyl 25%   50%   75%   90%   95%  100%
------------------------------------------
wpisy     2    9     29  121    246 32760

Dwa wpisy to 4 minuty skoro każdy wpis jest co 2 minuty średnio. 50% miejsc było zajmowanych przez około 20 minut, a 5% wszystkich miejsc to parkingi na 8 godzin i dłużej (w ciągu 2,5 miesiąca przypominam) czyli dalej niewiele. Zamiast kombinować z dokładnością pomiaru można pominąć te miejsca które pojawiają się sporadycznie. Jeżeli za typowe przyjmiemy takie, które występują minimum 250 razy (około 5% największych wartości), to miejsc jest 2232 (w tym 650 stacji). Co ważniejsze udział wpisów dotyczących LB w całości wpisów to 5,6%. Spokojnie można tego nie analizować bo przecież i tak moje szacunki są przybliżone. A pominięcie LB ma tą zaletę że upraszcza rachunki. Na mapie te 5% najczęściej powtarzających się miejsc wygląda następująco:

Zostało osiem miejsc z liczbą wpisów większą od 5000, w tym 5 w Cedrach (gdzie jak już ustaliłem coś serwisują niechybnie). Te 3 duże dzikie parkingi to: Stężyca (2) oraz Sierakowice.

Reasumując: znalezisko spod Chwaszczyna niewiele zmienia. Nie będę uwzględniał w statystykach wykorzystania MEVO rowerów parkowanych poza stacjami.

url | Tue, 16/07/2019 15:57 | tagi: , ,
MEVO po trzech miesiącach

Rowery/dystanse

Rowery na stacjach 10111/12

Obiecuję ostatni wpis n/t Mevo. Następny po wakacjach, czyli po mitycznym 18 sierpnia (czemu mitycznym poniżej).

Obszerny wywiad z prezesem się ukazał 19 maja, ale ja go przeczytałem dopiero przedwczoraj (cały wywiad w repo na githubie, link poniżej). Prezes pisze, że:

26 marca na ulice wyjechały 1224 rowery [...] [Potem] liczba rowerów zaczęła spadać. Trafiały do serwisu, mieliśmy problem z ładowaniem. Zainteresowanie systemem w pierwszych dniach nas zaskoczyło [...] Zwiększyliśmy zatrudnienie do około 40 osób, przenieśliśmy serwis do większej hali w MTG. Codziennie wyjeżdża stąd około 250 rowerów. Przygotowujemy się do obsługi pełnej floty docelowych 4 tysięcy rowerów [...] Kolejne rowery planujemy dostarczać stopniowo, po 100-200-300 tygodniowo. Ostatnią partię dostarczymy 18 sierpnia.

Mój komentarz. Po pierwsze: czy wyjechało 1224 to ja nie wiem -- pewnie tak, ale w kwietniu średnio jeździło niecałe 800, a raczej jeździło 624 a 163 nie jeździło tylko było (wykazywane że są, ale nie przejechały nic). W tym kontekście twierdzenie prezesa, że przyczyną (wielokrotnie podkreślaną) problemów jest nadzwyczajne zainteresowanie rowerami jest cokolwiek niezborne ze stanem przygotowań. System jest sprawny na 800/4000 = 20%, a on jest zaskoczony, że rowerów brakuje. Nie wiem co prezes kończył za szkoły, ale z logiką na bakier jest... No i pytanie pomocnicze: gdyby wyjechało na przykład 2000 rowerów (w sensie wyjechało i jeździło) czyli 250% tego co jeździło (w kwietniu), to dalej byłaby klapa czy jednak nie? A te 2000 to 50% tego co miało jeździć. Albo inaczej po co system na 4000 rowerów skoro miało wystarczyć 1220?

Dwa: zatrudniają 40 ludzi do obsługi około 1000 rowerów (dane za maj). Ile musi być zatrudnionych do obsługi 4000 (czyli o 300% więcej niż mają) i to do 18 sierpnia (w trzy miesiące licząc od daty wywiadu).

Trzy: 250 wyjeżdżających rowerów z MTG to jak rozumiem rowery niesprawne, serwisowane i włączane z powrotem do ruchu. Hmmm... czy to oznacza, że z grubsza jest codziennie 250 serwisowanych (czyli wyłączonych z ruchu)? Że rower się psuje, to normalne więc nie ma w tym nic dziwnego, że są rowery popsute i trzeba je naprawiać. Wychodzi, że tych rowerów jest 250 z 1250 czyli około 20%. Albo i nie, bo dziennikarz nie dopytuje... Ale jeżeli tak, to na 4000 będzie 800 popsutych przy założeniu 20%. No może mniej będzie, bo obciążenie/rower będzie mniejsze, a rowery będą usprawniane pod kątem słabych punktów, ale nawet jak będzie to 10% to dalej jest 400 rowerów do naprawy codziennie czyli o 60% więcej niż teraz (40 ludzi:-) może nie wystarczyć.)

Cztery: jeżeli planują dostarczyć stopniowo po 100--300 tygodniowo a mają do dostarczenia 2800, to dostarczając 100/tydzień przez 3 miesiące dostarczą 2400. He, he... Gorzej że na dziś system wykazuje około i zaledwie 1500 rowerów. Pozostało 2500 do dodania, a tygodni do 18 sierpnia zostało 5. Wychodzi po 500/tydzień, starting from now...

+--------------------------------------------------+
|           |         średnio dzienne              |
| Miesiąc   +--------------------------------------+
|           |     NZB |      ZB | NZB+ZB  | NZB%   |
| ----------+---------+---------+---------+------- +
| kwietnia  |  624.93 |  163.87 |  788.81 | 79.09  |
| maja      |  893.13 |  179.03 | 1072.16 | 83.18  |
| czerwca   | 1094.97 |  172.07 | 1267.03 | 86.45  |
| lipca     | 1089.00 |  248.25 | 1337.25 | 81.58  |
+-----------+---------+---------+---------+--------+

NZB -- rowery ruszające się; ZB -- rowery które nie jeździły, ale były wykazywane. Porównaj też wykresy. Drugi wykres pokazuje dostępność rowerów na stacjach 10111/10112 (Sopot Mickiewicza/Armii Krajowej), które są najbliżej mojego domu. Dostępność liczona jako prosta średnia (liczba rowerów)/(liczba pomiarów)...

Generalnie trend jest OK tylko to ślimacze tempo. Załamanie lipcowe spowodowane jest przypuszczalnie (fatalną) pogodą (lipiec liczony dla tylko dla pierwszych 8 dni). Dane są przypominam tutaj.

url | Tue, 09/07/2019 10:08 | tagi: , ,
Mevo w czerwcu 2019

Zestawienie wybranych parametrów pomorskiego roweru miejskiego MEVO (maj--czerwiec 2019). Dystanse i średnie są w kilometrach. Zapis Łącznie x% nach. oznacza łączną długość odcinków z przeciętnym nachylenie x% oraz większym. Odcinki z nachylenie 5% i więcej stanowiły odpowiednio 0,06% (maj) oraz 0,05% (czerwiec) łącznego przejechanego dystansu (ŁPD) a z nachyleniem 3% i więcej odpowiednio 0,72% oraz 0,66% ŁPD. To tyle odnośnie potrzeby instalowania silników elektrycznych w każdym rowerze ponieważ Trójmiasto pełne jest stromych podjazdów. Chyba chodziło o coś innego z tymi silnikami...

Wyszczególnienie Maj Czerwiec Zmiana
Liczba rowerów 1333 1518 13.9%
Łącznie odcinki 235455 330074 40.2%
Dystans łącznie (km) 649904.3 974943.1 50.0%
Średnio na rower/dzień (km) 15.7 21.4 36.3%
Średnio na rower/miesiąc (km) 487.6 642.3 31.7%
Łącznie 5% nach. (km) 393.9 491.5 24.7%
Łącznie 3% nach. (km) 4687.1 6440.4 37.4%
Łącznie 2% nach. (km) 16722.7 23386.0 39.8%

Przypominam, że powyższe policzono w taki oto sposób iż: ze strony https://rowermevo.pl/ co 120 sekund jest pobierany plik locations.js który zawiera listę rowerów zaparkowanych na stacjach w systemie roweru miejskiego Mevo. Długość/szerokość geograficzna stacji jest w pliku locations.js. Wysokość npm. stacji (SRTM) dodałem korzystając z programu gpsprune.

Mapa najczęściej używanych odcinków:

Dane, że tak powiem źródłowe dotyczące ruchu rowerów MEVO maj/czerwiec 2019 są dostępne tutaj.

url | Mon, 01/07/2019 15:42 | tagi: , ,
MEVO: rozkminianie systemu (odcinek dwa)

Numery stacji w systemie MEVO są pięciocyfrowe i zaczynają się od 10, 11 oraz 12. Takich stacji jest 654 (albo 653 zależy jak liczył). Oprócz tego jest stacja 999993 o współrzędnych w Wawie(52.261177495785/20.968099236488), która zapewne omyłkowo jest wykazywana w zestawie (https://rowermevo.pl/mapa-stacji/). Jak się naciśnie guziczek Pobierz bieżące lokalizacje, to się dostanie plik CSV o nazwie locations_YYYY-MM-DD_HH-MM-SS.csv. Plik ten ma 704 stacje czyli o 50 więcej niż wykazywana na stronie. Te pomijane stacje mają numer zero.

Z tych 654 stacji 363 jest w Gdańsku 55,56%; Gdynia 145 (22,17%); Tczew 28 (4,28%); Sopot 27 (4,13%); Rumia 23 (3,52%); Reda 17 (2,60%); Puck 14 (2,14%); Inni 18 (Władysławowo, Kartuzy, Sierakowice, Somonino, Stężyca, Żukowo.)

Te 50 coś stacji-niestacji wygląda jakoś tak:

uid;number;name;city;latlng;bikes;bike;spot;bikeSpot;terminal;address
13915356;0;BIKE 99127;Tczew;54.08056000 18.79086222;1;1;0;;;

Mają dziwną nazwę a w atrybucie bike mają true (albo jeden) a w atrybucie spot mają zero (czyli false). Z tego wychodzi, że te stacje to nie są stacje tylko jakieś luźne rowery pozasystemowe. Taką mam koncepcję...

url | Mon, 17/06/2019 14:25 | tagi: , ,
Mevo w maju

Ze strony https://rowermevo.pl/ co 120 sekund jest pobierany plik locations.js który zawiera (jak mniemam) listę rowerów zaparkowanych na stacjach w systemie roweru miejskiego Mevo. Jak rower zmienił stację to znaczy, że ktoś się nim przejechał (lub go przewieziono dla jakiś celów.)

Pobrane dane są dostępne tutaj. Konkretnie plik MEVO_bikes_ROKMIESIĄC.csv to plik CSV, którego każdy wiersz zawiera czas, idRoweru, stanBaterii oraz współrzędne geograficzne. Rejestrowane są tylko przemieszczenia, tj. na przykład jeżeli rower jest wykazywany przez 10 kolejnych pobrań jako zaparkowany w tym samym miejscu, to tylko pierwszy wpis jest zapisywany. Z kolei MEVO_tracks_ROKMIESIĄC.csv zawiera idRoweru, liczbę przemieszczeń oraz kompletny ślad w postaci par współrzędnych.

Plik MEVO_bikes_201905.csv (czyli za maj) zawiera 265 tys wierszy, plik MEVO_tracks_201905.csv zawiera 1550 wierszy (czyli zarejstrowanych rowerów w systemie). Tutaj uwaga: część wpisów/rowerów jest dziwna: są rowery jeżdżące po Warszawie, po Bałtyku a nawet w księstwie Monako. Szczegóły tutaj.

Na podstawie pliku MEVO_tracks_ROKMIESIĄC.csv obliczyłem łączny i średni dystans pokonany przez rowery w maju, pomijając „dziwne” wpisy. Za kryterium dziwności przyjęto punkt znajdujący się na zewnątrz prostokąta 53.8--55.0/17.4--19.5 (długość/szerokość). W ten sposób zostało 1370 rowerów a odpadło 180 „dziwnych”. Konkretnie policzyłem poniższym skryptem:

#!/usr/bin/perl
use Geo::Distance;
my $geo = new Geo::Distance;

my $distGrandTotal;
my $distTotal;

while (<>) {  chomp();
  ($bike, $nodes, $track) = split /;/, $_;
  $track =~ s/[ \t]+$//;
  @trkpts =  split / /, $track;

  $distTotal=0;  $skipBike = 0;

  foreach $t (@trkpts) {
     ($lon, $lat) = split /,/, $t;
     if ($lat < 53.8 || $lat > 55.0 || $lon < 17.4 || $lon > 19.5 ) {##
        $skipBike = 1;
        print STDERR "SKIPPED $bike: lat = '$lat' / lon = '$lon'\n";
     } 
     else { 
        if ($latPrev > 54.0 ) {
           $dist = $geo->distance( "meter", $lonPrev, $latPrev => $lon, $lat );
           $distTotal += $dist;
        }
        $lonPrev =  $lon; $latPrev = $lat;
     }
  }

  unless ($skipBike) {
    $mean = $distTotal / 31;
    printf "%s;%.2f;%.2f\n", $bike, $distTotal, $mean;
    $distGrandTotal += $distTotal;
    $validBikes++;
  }
}

$grandMean =  $distGrandTotal / (31 * $validBikes);
print STDERR "Średnio: $grandMean ($validBikes)\n";

Wyniki i analiza

Minimum przejechane 0km, pierwszy kwartyl 12,8km, mediana 17,8km trzeci kwartyl 21,2km. Maksimum 30,7km. Przypominam, że są to średnie dzienne dla 31 dni maja. Oczywiście nie są to wielkości prawdziwe: po pierwsze dystans jest liczony jako proste pomiędzy punktami (rejestrowanymi co 120s); po drugie nie wszystkie przemieszczenia polegają na pedałowaniu--czasami rower jest wieziony. Arbitralnie przyjmijmy że prawdziwa wartość to 200% zarejestrowanej (to chyba dużo mimo wszystko). Dalej załóżmy że gdyby z roweru korzystało się 6 godzin na dobę (można by policzyć ile się korzysta ale tego jeszcze nie zrobiłem)--co dalej nie wydaje się czymś nadmiernie wyśrubowanym (połowa czasu od 8 rano do 20 wieczorem). Wreszcie przyjmijmy 12km/h jako prędkość przemieszczania się (jak na pojazd z silnikiem -- moim zdaniem -- już mniej się nie da). Wychodzi 6 x 12 = 72km. A jest 30km czyli nawet nie połowa...

Rozkład średnich przedstawia histogram poniżej

url | Mon, 03/06/2019 08:42 | tagi: ,
Spóźnione podsumowanie 2018

Dystans wg dni tygodnia

Średni dystans wg dni tygodnia

Dystans wg tygodni w roku

Średnio rocznie wg tygodni

To był rekordowy rok w wielu kategoriach:-)

Zacznijmy od pogody, którą mierzę od 2010 roku przypominam. U mnie średnia wyszła 9,56 C, do tej pory rekord to było 9,44 C w 2015 r. Szczegółowo to tak wygląda:

rok     : 2010  2011  2012  2013  2014  2015  2016  2017  2018
--------------------------------------------------------------
średnia : 8.65  8.94  8.17  8.63  9.33  9.44  9.18  8.75  9.56

Rekordowo niska była też suma opadów: 447.9mm (148 dni opadowych); dla porównania w 2017 roku spadło 763,8mm deszczu (194 dni). Rekord do tej pory to 2014 rok: 450,6 (148 dni) czyli w zasadzie tyle samo (z dokładnością do błędu).

Na rowerze przejechałem 19,100 km (302 razy, co nie oznacza dni, bo czasami były dwa razy dziennie). Poprzedni rekord z 2017 r wynosił 17,855 km. Z tej okazji podsumowałem swoje życiowe wyczyny, a mam statystykę szczegółową od 1993 r. Kurcze 26 lat pykło, w których to latach przejechałem prawie 210 tys km. Do tego w latach 1990--1992 przejechałem ponad 20 tys km, ale nie zachowała się niestety dokładna rozpiska. Z okazji tych wszystkich wyczynów podsumowanie zrobiłem wg dni tygodnia i wg. tygodni w roku (wg. miesięcy to liczę na bieżąco). Konkretnie to podsumowanie jest zestawem 7 wykresów słupkowych rysowanych w R. Dane do skryptu i sam skrypt jest z kolei generowany przez prosty program w Perlu:

  #!/usr/bin/perl -w
use Date::Calc qw(Week_Number Day_of_Week);

##my $RRcmd = 'R CMD BATCH'; ## see below

my $color= 'pink';
my $current_yr = 2019;

my %Miesiac = (1 => 'styczeń', 2 => 'luty', 3 => 'marzec', 4 => 'kwiecień',
        5 => 'maj', 6 => 'czerwiec', 7 => 'lipiec', 8 => 'sierpień',
        9 => 'wrzesień', 10 => 'październik', 11 => 'listopad', 12 => 'grudzień',);
my %DoWName = ( 1 => 'pon', 2 => 'wto', 3=> 'sro', 4 => 'czw', 5 => 'pia', 6 => 'sob', 7 => 'nie' );


open(O, ">dow.R") || die "Cannot open!\n";
open(P, 'LANG=C grep "dist\|date" c*.xml|' ) || die "Cannot open!\n";

while (<P>) { 
  chomp();
  ##print ">>$_;";
  if (/date[^'"]+["']([0-9\/]+)["']/) {$date = "$1";}
  if (/dist[^'"]+["']([0-9\/]+)["']/) {$D{$date} += $1;}
}

close(P) || die "Cannot close!\n";

for $d (sort keys %D ) {    
  ($dyy, $dmm, $ddd) = split '/', $d;
  if ($dyy == $current_yr ) { next } ### skip as incomplete

  my $dow = Day_of_Week($dyy,$dmm,$ddd);
  $DoWs{$dow} += $D{$d}; $DoWNums{$dow}++;

  my $woy = Week_Number($dyy,$dmm,$ddd);
  $WoYs{$woy} += $D{$d}; $WoYNums{$woy}++;
  $RdT++;
  $Years{$dyy}=1;
}

@YNo = sort(keys (%Years));
$YNo = $#YNo +1;

print O "##Generated content == do not edit\n";
print O "##By Day of Week\n";
#
for $d (sort keys %DoWs) { 
  $mean = sprintf "%.1f", $DoWs{$d} / $DoWNums{$d}; 
  $t += $DoWs{$d}; 
  $days_totals .= "$DoWs{$d}, ";
  $days_means .= "$mean, ";
  $days_ns .= "$DoWNums{$d}, ";
  $days_labels .= "'" . $DoWName{$d} . "', ";
  ##printf "%-12.12s %7i %.1f (%i)\n", $DoWName{$d}, $DoWs{$d}, $mean, $DoWNums{$d};
  ;
}
$days_totals =~ s/, $//; $days_means =~ s/, $//;
##$days_ymeans =~ s/, $//;
$days_ns =~ s/, $//; $days_labels =~ s/, $//;

print O "days_totals <- c($days_totals);
  days_means <- c($days_means);
  days_ns <- c($days_ns);
  days_labels <- c($days_labels);\n";

print O "barplot(days_totals, 
 main='Distance (total $YNo[0]--$YNo[$#YNo]): $t kms', horiz=F,  
 names.arg=days_labels, col=c('$color'));
barplot(days_means, main='Day means ($YNo[0]--$YNo[$#YNo])', 
 horiz=F,  names.arg=days_labels, col=c('$color'));
barplot(days_ns, main='RideDays (total): $RdT', horiz=F,
 names.arg=days_labels, col=c('$color'));\n";

print STDERR "##Razem: $t\n";

##print "====\n";

print O "\n\n##By Week of Year\n";

for $w (sort {$a <=> $b } keys %WoYs) { 
  $mean = sprintf "%.1f", $WoYs{$w} / $WoYNums{$w}; 

  $vals_totals .= "$WoYs{$w}, ";
  $vals_ymeans .= sprintf "%.1f, ", $WoYs{$w}/$YNo;
  $vals_means .= "$mean, ";
  $vals_ns .= "$WoYNums{$w}, ";
  $vals_labels .= "$w, ";
}

$vals_totals =~ s/, $//; $vals_means =~ s/, $//;
$vals_ymeans =~ s/, $//;
$vals_ns =~ s/, $//; $vals_labels =~ s/, $//;

print O "vals_totals <- c($vals_totals);
  vals_ymeans <- c($vals_ymeans);
  vals_means <- c($vals_means);
  vals_ns <- c($vals_ns);
  vals_labels <- c($vals_labels);\n";

print O "barplot(vals_totals, main='Distance (total $YNo[0]--$YNo[$#YNo]): $t kms', 
  horiz=F,  names.arg=vals_labels, col=c('$color'));
barplot(vals_ymeans, main='Weak means ($YNo[0]--$YNo[$#YNo])', 
  horiz=F,  names.arg=vals_labels, col=c('$color'));
barplot(vals_means, main='Day means ($YNo[0]--$YNo[$#YNo])',
  horiz=F,  names.arg=vals_labels, col=c('$color'));
barplot(vals_ns, main='RideDays (total): $RdT', 
  horiz=F,  names.arg=vals_labels, col=c('$color'));\n";

print O "### ENDE!\n";

close(O);

print STDERR "##R dow.R\n";

system ("R", "CMD", "BATCH", "dow.R");
print STDERR "##xpdf Rplots.pdf\n";

print STDERR "##convert -density 300 Rplots.pdf opus_by_dow.jpg\n";
system ("convert", "-density", "300", "Rplots.pdf", "opus_by_dow.jpg");

Na koniec przyznam że mam mieszane uczucia co do zeszłorocznego wyczynu, w sensie że za dużo wyszło. Oprócz roweru też jest życie...

Tak więc w przyszłym roku raczej rekordu nie będzie.

url | Thu, 24/01/2019 20:19 | tagi: , ,
Podsumowanie listopada

Wizyta w rezerwacie Ptasi Raj (26/10/2018)

Jeszcze formalnie październik, ale warto też wspomnieć w zestawieniu listopadowym, bo byłem pierwszy raz w życiu w rezerwacie PtasiRaj (Sobieszewo w kierunku Górek Zachodnich). Wrażenia pozytywne (przyroda) i negatywne bo coś śmierdziało i hałasowało non stop praktycznie. Ludzi mało, bo zwykły weekday i po sezonie. Hałas był niewielki--bardziej stanowił kontrast pomiędzy pierwotną przyrodą rezerwatu--człowiek myślał że jest w Białowieży a tu coś stuka i wierci w oddali (stocznie a głos po wodzie się niesie). Puściutka-dzika plaża, ale na horyzocie widać Port Północny albo instalacje Lotosu.

Teren zagospodarowany w tym sensie że są wytyczone ścieżki edukacyjne, tablice z opisami flory/fauny, dwie wieże obserwacyjne (lornetkę należy mieć koniecznie) a nawet restauracja (przed rezerwatem oczywiście) Wracając do smrodu, to może dzień był pechowy--też nie tak że jakość strasznie cuchnęło ale było czuć że bynajmniej nie jest to zapach bryzy-od-morza.

Stutthoff -- 1-sza wizyta (27/10/2018)

Pierwszy raz w Niemieckim KL w ogóle (nigdy nie byłem w Auschwitz/Majdanku itp). Nie lubię takich miejsc oglądać ale się reklamowali że jest wystawa czasowa pn `Prawo i zagłada' o roli Policji w Trzeciej Rzeszy w Zbrodniach (jak mniemam) No więc ponieważ interesuję się historią, a temat wydał się ciekawy to postanowiłem pojechać i obejrzeć. Upewniłem się czy w Sobotę działają. Działają tyle że krócej, bo mają imprezę plenerową później.

Jadę (rowerem). Dojeżdżam o 12:20 (wg info mieli działać do 13:00).
-- Wystawa?--no dziś zamknięta
-- Nosz kurna toż się pytałem
-- No to pracujemy ale wystawa zamknięta wyjątkowo bo mamy koncert o 18:00

Czyli typowe w PL-państwówce. Mieli pretekst to sobie poszli do domu o 12.45 (bo już o tej godzinie zamknęli bramę) bynajmniej nie pomagać przy imprezie (która zaczynała się za 5h). Ale jak już tam byłem, to wlazłem na teren. Niewiele tam jest do oglądania--prawie nic. Chyba że coś pominąłem ale raczej nie, by się w oczy rzucało. Nie ma atmosfery grozy miejsca zbrodni--taka łąka a la ośrodek wypoczynkowy tyle że płot z drutem kolczastym. Krematorium niby jest ale teraz to palenie zmarłych nie jest czymś niezwykły, izby w (bodajże czterech) barakach co zostały niezniszczone/albo je odbudowali -- przerobione na sale muzealne, urządzenia sanitarne nieliczne (jedna łazienka konkretnie).

Wiele instalacji (ogród obozowy) ewidentnie nieoryginalna. To co jest to gabloty z papierami i jakimiś drobnymi przedmiotami typu łyżka czy but...

Kopalino #1 (02/11/2018)

Pierwszy raz w życiu--ciekawe miejsce, zwłaszcza po sezonie.

Tutaj są zdjęcia.

Do Jankowa k/Kowal 03/11/2018

Tam w sklepie rowerowym A. Wojtasa (m.in. masażysta Bora-HansGrohe (B-HG)) fajna impreza była, o której się dowiedziałem z FB. Trwało to 2 godziny, w tym czasie właściciel sklepu (czyli Wojtas) opowiedział (w detalach) jak wyglądało odżywianie kolarzy podczas jednego (6 godzinnego) etapu Tirreno-Adriatico (na którym R. Majka zajął 2-gie miejsce BTW). W przerwach między gadaniem gotował ryż (z owocami--przepis na zdjęciu), z którego potem zrobił kostki po 60--70g (25g suchego ryżu podobno). Masa wskazówek jak uzyskać właściwą konsystencję, jak opakować żeby łatwo odpakować na rowerze itp...

Przy okazji wiele ciekawostek opowiedział na przykład na temat diety Sagana (że misie Haribo lubi i makaron z manufaktury Martelli co kosztuje B-HG całkiem okrągłą kwotę), że B-HG ma autobus restauracyjny, tj. kolarze jedzą w autobusie, a nie w hotelu (szybciej i lulu spać), że B-HG ma samochód meblowy i przed etapem taki samochód jedzie do hotelu i wymienia materace, kołdry, itp w pokoju na swoje. Że B-HG zatrudnia 80 ludzi (do obsługi 30 kolarzy) i ma budżet 22mln EUR z czego 4mln idzie na TdF.

Tutaj są zdjęcia.

Sztutowo #2 06/11/2018

Byłem w Sztuthoffie raz jeszcze. Wykorzystałem okazję bo Elka jechała do Łomży to mnie odstawiła do Nowego Dworu Gdańskiego więc praktycznie miałem w jedną stronę podwózkę. Obleciałem cały obóz. Poprzednio pominąłem parę rzeczy typu komora gazowa. Byłem też na tej wystawie co ją chciałem obejrzeć, ale okazała się w sumie lipą. Takie tam Niemieckie bicie się w piersi (jak już wszyscy potencjalnie do oskarżenia nie żyją)--bo wystawa jest Niemiecka. Ogólnie znane fakty; no i mała--kilkanaście plansz.

Ciekawostkowo: nie było ochrony, wlazłem ot tak. Do tej pory jak tam byłem dwa razy bodajże, to zawsze opiernicz od ochrony, że rower, nie wolno itp. Bo jak już się przejdzie przez bramę, to na terenie obozu nie ma żadnego dozoru, tylko napisy że kamery są...

Wystawa niemiecka była w szklarni. Poprzednio jak byłem, to nie mogłem wejść, bo szklarnia była zamknięta. Komuś kurna nie chciało się pójść i zamka przekręcić--bo reszta obozu była dostępna, a szklarnia -- nie wiedzieć czemu -- nie.

Tutaj są zdjęcia

Otwarcie mostu na W. Sobieszewską 10/11/2018

Przypadek polegał na tym że pojechałem celem zwiedzenia rezerwatu ,,Ptasi Raj'' a nie na otwarcie (o którym nie miałem pojęcia). Nawet chciałem poczekać i obejrzeć uroczystość ale chaos był i nie było wiadomo kiedy się zacznie. Otóż organizatorzy nie pomyśleli i moim zdaniem źle zaplanowali otwarcie. Postawili mikrofony na początku mostu i przewidzieli otwarcie-podniesienie jako gwóźdż programu (bo to zwodzony jest most). Widząc tłum na moście kazali ludziom stanąć przed mostem, co znakomicie pozbawiłoby wielu możliwości obejrzenia czegokolwiek. Więc przez 15 minut trwały targi żeby tłum się cofnął, a że się nie cofał to sobie odpuściłem. Tam z boku był plac było tam zrobić przemówienia a potem otworzyć most (na przykład.)

Co do smrodu, to był mniejszy i w innym miejscu. Las przy plaży pełen śmieci i ludzi (bo to sobota była). Za to nie było hałasu ze stoczni...

Tutaj są zdjęcia. A tutaj jest filmik.

Cmentarz francuski (12/11/2018)

Impreza na 100 lecie rozejmu kończącego 1-szą wojnę światową. Ja sie znam z konsulem honorowym rep. Francuskiej (też rowerzysta) to poszedłem z ciekawości. Miał być ambasador i w ogóle...

Przyjechałem grubo za wcześnie, bo mi się godziny pomyliły, ale nie byłem pierwszy. Młody mężczyzna jakiś chodził między grobami w zielonym berecie, ale ubrany w cywilne łachy. Sylwetka sportowa, ogolony łep na rekruta... Oho myślę ochrona ambasadora. Ale potem przyszedł drugi, starszy, o lasce z całą klatą w medalach w takim samym berecie. A potem następny i jeszcze następny, razem z 10 było, w różnym wieku. Się okazało że to Polacy, bo po polsku gadali. No to się przyjrzałem bliżej bo naszywkę każdy miał na ręce:

Legion Entrangere.

O-żesz. Mówili perfekt polszyzną (do siebie bo jak się ustawili do warty to przeszli na francuski) i bez przekleństw, a nie kurwa-kurwa co drugie słowo jak nie przymierzając b. premier Belka. Czyli selekcja jest i byle kogo do Legii nie biorą.

Ciekawostka #2. Były 2 przemówienia: krótsze ambasadora i dłuższe biskupa Głodzia, który pierdyknął mowę na 10 minut (albo i lepiej), ale o czym mówił to ja nie wiem, bo było po francusku... Szczena nie tylko mi chyba opadała bo generalnie ma on nie najlepszą opinię.

Tutaj są zdjęcia.

13/11/2018 Cmentarz angielski

Podobna impreza, ale w Malborku bo tam jest cmentarz Brytyjskiej Wsp. Narodów. Słabiej wypadło. Liczyłem na kobziarzy, a przyszedł tylko pluton w mundurach polowych + pułkownik z ambasady. Orkiestry nie było, tylko na trąbce sygnały grali. Za to miejscowi się starali (a w GDA nie--z UM/Urzędu Wojewódzkiego to ja w GDA nikogo nie widziałem.)

Był jeden kombatant (na zdjęciu), ksiądz anglikański. Po uroczystości Angole złożyli wieniec (z plastikowych maków) na jednym grobie. Pytam się czy to ktoś z ich jednostki (bo tam tradycja -- oddziały po 300 lat istnieją) ale nie rodzina przysłała/dała wieniec to położyli.

Powrót w ulewnym (miejscami) deszczu. Takie były w sumie prognozy ale miałem nadzieję. Jakoś takoś jednak nie przemarzłem (dobra kurtka przeciw deszczowa) i doturlałem się z Malborka do GDA, a tam do SKM-ki bo już mi się nie chciało przez miasto jechać.

Tutaj są zdjęcia

15/11/2018 Kopalino#2/Mechowo

Drugi raz się kopsnąłem w tym kierunku. Pierwszy raz byłem w Grotach Mechowskich. Atrakcja taka sobie--bilet trzeba kupić żeby nie tyle wejść--bo słowo grota to na wyrost jest -- co podejść do groty... Nie kupiłem:-) Spieszyło mi się, poza tym płot jest 5m od groty i jest ażurowy więc widać co jest za płotem...

Tutaj są zdjęcia.

Upgrade roweru

Cichcem zrobiłem upgrade swojej bryki CX kupując koła Campagnolo Vento (drugie od dołu:-) 1100 PLN nowe). Fajne koła za 400 PLN, używane, ale w dobrym stanie. Jeszcze nawet opony dodał gość, ale te akurat 23mm i dupiate (Hutchinson za 40 PLN nowe) w zasadzie do wywalenia, mimo że w dobrym stanie, m.in. dlatego, że ja definitywnie przeszedłem na 25mm.

Ponadto wymieniłem sztycę, bo w starej już dwa razy złamała się śruba mocująca. Niby firmowa (Amoeba), a miała IMO defekt konstrukcyjny: śruby mocujące siodło to zaledwie #5. No ktoś przesadził. Minimum 6mm i się nie łamią. Tu z kolei kupiłem niby karbonowego Ritcheya, a nieoficjalnie chińską podróbkę tegoż (za 170 PLN nie kupi się Richeya). Że chiński to wskazuje także to, że sztyca ma ciut za małą średnicę i się osuwała w rurze podsiodłowej. Okleiłem ją taką taśmą przeciwogniową z warstwą aluminium (klej ma toto dobry) i jakby teraz nie spada...

Jeszcze dokupiłem pedały jednostronne Kellys za 99 (przecenione z 300 PLN na Allegro). Fajne pedały. Wreszcie przypadkiem nowe siodło 4za za 95 PLN (czyli Ridley--żółte do żółtego roweru!) Kiedyś używałem podobnego siodła i się pałąk łamał--kijowe było, ale tamto to był Stratus a to Cirrus (wizualnie to to samo:-). Ten Cirrus to nawet jest tańszy--ale to może i lepiej, bo tańsze to często są trwalsze

Rower waży teraz 9,9kg (opony 35mm, dętki też niczego sobie) co uważam za b. dobry wynik.

url | Thu, 29/11/2018 04:49 | 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: ,
Ż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: , ,