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 | 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 | hhi | historia | history | hitler | holocaust | holokaust | hp1000se | hpmini | humour | iblue747 | ical | iiyama | ikea | imagemagick | imap | inkscape | inne | internet | j10i2 | javascript | jhead | 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 | 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 | 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 | 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 | świdnica | żywność
Archiwum
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
Clone Garmin settings to another unit

Copy settings from #1 unit

Connect unit via USB. Copy the files from the Settings, Elevations, and Sports folders. Copy the Device.fit file from the Garmin folder.

Copy settings to #2 unit

Connect unit via GPS and copy the backup files into the same folders on it. Put Device.fit into Garmin, Settings.fit into the Settings folder, Elevations.fit into the Elevations folder, and Cycling.fit into the Sports folder.

All settings and menu configurations will now be available in #2 unit, saving you lots of time recreating them from scratch. Probably works with all Garmin Edge units (tested on 500 series).

url | Tue, 08/12/2020 00:27 | tagi: ,
Zamiana MOV na MP4

W sobotę nagrałem na rowerze ponad 1,5 godziny filmu, który jest podzielony na 3 kawałki -- każdy po 4Gb. Teraz chciałem dodać do niego nakładki z danymi typu prędkość, dystans itp używając Garmin Virb Edit, ale ponieważ Virb Edit nie przetwarza plików większych od 4Gb, to trzeba najpierw połączyć wszystko w jeden plik, jednocześnie zmniejszając rozmiar (można też synchronizować każdy kawałek osobno w VE a potem połączyć, ale ja wolę prościej):

### zamiana na 720p, z redukcją jakości do 23 (domyślnie 20)
HandBrakeCLI -w 1280 -l 720 -q 23 -i Plik.mov -o Plik.mp4 --preset="Normal"

Pliki po konwersji jak wyżej mają circa nieco ponad 1Gb każdy.

Teraz trzeba połączyć je do kupy:

MP4Box -cat plik1.mp4 -cat plik2.mp4 -cat plik3.mp4 -new ALL.mp4

Ostatni etap to dodanie nakładek w VE, niestety w tym celu trzeba się przełączyć na MS Windows. Shame...

url | Sun, 05/06/2016 08:48 | tagi: , , ,
Garmin Virb Edit

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

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

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

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

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

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

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

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

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

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

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

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

url | Thu, 12/05/2016 06:53 | tagi: , , ,
Gmap-pedometer i ograniczenia Legenda

Intensywne używanie http://www.gmap-pedometer.com/ spowodowało, iż dotarłem do granic możliwości Legenda, o których NB. do niedawna nie miałem pojęcia. Otóż Legend może przechować do 1000 punktów (waypoints), 20 śladów (tracks) oraz do 50 tras (routes), każda o długości do 250 punktów... Ponieważ punkty trasy liczą się do puli punktów, 5 tras 200 punktowych zawala pamięć ,,na amen''. Co zresztą niedawno miało miejsce...

Usunięcie wszystkich punktów i wszystkich tras z Garmina jest bardzo łatwe. Tyle, że chciałbym niektóre zachować... Można wprawdzie usuwać punkty według związanych z nimi symboli, ale to by wymagało porządku przy ich definiowaniu. A ja, póki co, mam w tym względzie bałagan. Zatem:

  1. Zgrałem zawartość pamięci Garmina do pliku. Wywaliłem wszystkie trasy i ślady oraz związane z nimi punkty (są one łatwo rozpoznawalne po nic nie mówiącej nazwie typu Turn 233 albo GRTP-202). Pozostawiłem pozostałe punkty. (Wywalając trasy trzeba usunąć wszystkie, bo nie wiadomo jaki punkt należy do jakiej trasy -- tak jest szybciej i prościej.)

  2. Wyczyściłem pamięć urządzenia. W tym celu w menu głównym należy wybrać ikonę Waypoints→przycisk menu/find→Delete. Teraz wybrać All Symbols i potwierdzić. Uwaga: przycisk menu/find jest po lewej na dole pod przyciskami góra/dół.

  3. Załadowałem z powrotem plik GPX (nazwałem go LEGEND_MEM.gpx):

    gpsbabel -r -w -t -i gpx -f LEGEND_MEM.gpx -o garmin -F /dev/ttyUSB0
    

Plik LEGEND_MEM.gpx zawiera moją bazę podstawowych punktów i tras (jeżeli takowe są)... Resztę będę ładował w miarę potrzeby, a jak się znowu zapełni pamięć Legenda, to powtórzę opisaną wyżej procedurę... Przy okazji 225 jako górny limit punktów na trasie wygląda na zbyt dużo. Spróbuję 100 punktów, wtedy zmieści się więcej tras....

url | Fri, 25/06/2010 22:04 | tagi: , , , , ,
Ikony punktów nawigacyjnych w Garminie

W opisie tzw. waypointa (punkt nawigacyjny), w formacie GPX jest m.in. znacznik <sym>, którego zawartością jest napis określający symbol punktu. Do tej pory zawsze wstawiałem tam Flag, a Legend oznaczał taki punkt ikoną niebieskiej flagi. Wprawdzie teoretycznie to (chyba) może być dowolny napis, ale lepiej ograniczyć się do tych kilkanastu--kilkudziesięciu, które Garmin zna i ,,reaguje'' na nie podstawiając odpowiednią ikonę. Zestaw tychże znalazłem tutaj. Na stronach Garmina zaś trudno się doszukać stosownej informacji.

Przykładowo pierwszy z punktów (poniżej) to cmentarz a drugi Miejsce Polowania wybrany na oznaczanie ,,grzybowych miejscówek'' -- ponieważ w zestawie symboli nie ma takiego, który by się lepiej nadawał na oznaczenie miejsca ,,gdzie rosną grzyby''

<wpt lat="54.0704694444" lon="18.9803833333">
  <name>Stogi k/M Cment</name>
  <cmt>Stogi k/M Cment</cmt>
  <desc>Stogi k/Malborka Cmentarz Mennonitów</desc>
  <sym>Cemetery</sym>
</wpt>
<wpt lat='54.84425261' lon='18.000581109'>
  <name>Boczniak1</name>
  <cmt>Boczniak Ostrygowaty</cmt>
  <desc>Boczniak Ostrygowaty na pniu buka</desc>
  <sym>Hunting Area</sym>
</wpt>

Jak już opisałem kiedyś bazę moich punktów trzymam w pliku (konkretnie w ~/.gps/local.wpts) co ułatwia jej modyfikowanie. Jeżeli baza się zmieni, to przesyłam plik (synchronizuję) do urządzenia wykorzystując program gpsbabel.

url | Wed, 11/11/2009 20:50 | tagi: , , , ,
Naprawa garmina
Garmin Legend w trakcie naprawy

W Garminie odlepiła się gumowa taśma ochronna -- częsty przypadek sądząc z tego co na ww. temat zawiera google. Naprawiłem w sposób szczegółowo opisany przez Mieszko Zagańczyka. W sumie sposób nie sprawdzony tak do końca, ale lepszego nie znalazłem.

Na wypadek gdyby wpis na ww. blogu zniknął podaję skrótowo co należy zrobić. Potrzebne są: silikon akwarystyczny (do akwariów) i benzyna ekstrakcyjna. Benzyną należy oczyścić gumę i odbiornik z resztek kleju. Posmarować silikonem (jedna tubka 8 ml, za 2 PLN) wystarczy. Nałożyć gumę. Owinąć bandażem elastycznym i zostawić owinięte na 24 godziny żeby silikon związał.

url | Sun, 18/10/2009 13:26 | tagi:
Przewyższenie i profil śladu

Etrex mimo, że nie ma barometru dość sensownie podaje wysokość npm. Jakoś do tej pory umknęło to mojej uwadze.

Poniżej skrypt wyznaczający długość trasy, łączną sumę wysokości podjazdów (przewyższenie, aka cumulative elevation gain) oraz rysujący profil w postaci pliku PNG. To ostatnie niekoniecznie jest sensowne, bo GD::Graph::lines traktuje dane z osi OX jako napisy a nie liczby i w związku z tym odstępy między poszczególnymi punktami na tej osi są równe. Zamiast GD::Graph::lines trzeba użyć czegoś innego, np. Chart::Graph::Gnuplot.

#!/usr/bin/perl
#
# Tworzy plik PNG przedstawiający profil śladu (wysokość mnpm)
# z danych podanych (jako argument skryptu) w pliku GPX
# tprzechlewski[_at_]gmail.com sierpień/2008
#
use XML::LibXML;
use Geo::Distance;
use Getopt::Long;

GetOptions( 'log' => \$print_log, 'pic' => \$print_pic, );

$usage = "Usage: $0 [-p | -l]  plik.gpx ;; -p generate PNG file ; -l show log.\n";

my $geo = new Geo::Distance;

my $file = shift || die "$usage"; 

my $parser = XML::LibXML->new;

open my $fh, $file || die "problems...";

$doc = $parser->parse_fh($fh);

my @tracks = $doc->getElementsByTagName('trk');
my $ptnum=0;

for $tx (@tracks) {

    @segments = $tx->getChildrenByTagName('trkseg');
    if ( $name = $tx->getChildrenByTagName('name')->[0] ) {  # pierwszy element to nazwa śladu
        if ($print_log)  { print "<!-- track:: ",  $name->textContent(), " -->\n"; } 
    }

    for $sx (@segments) {

      @points = $sx->getChildrenByTagName('trkpt');

      for $px (@points) {
         @data = $px->getChildrenByTagName('*');
         @attrs = $px->attributes();

         if ($print_log)  {  print "-> " ; }

         for $dx (@data) {
            if ($print_log)  { print $dx->nodeName, " = ", $dx->textContent(), " ; " ; }
            if ($dx->nodeName eq 'ele') { $ele = $dx->textContent();
		push @Elevations, $ele; 
	    }
         }

         for $ax (@attrs) {
            if ($print_log)  { print " ", $ax->nodeName, " = ", $ax->getValue() ; }
	    if ($ax->nodeName eq 'lon') { $lon = $ax->textContent() }
	    elsif ($ax->nodeName eq 'lat') { $lat = $ax->textContent() }
         }

          if ($print_log)  { print " ;;\n"; }

	 if ( $ptnum > 0 ) {
	   $curr_dist = $geo->distance( "meter", $plon, $plat => $lon, $lat );
	   $dist += $curr_dist ;
	   push @Distances, $curr_dist;
	   if (($ele_diff = $ele - $pele ) > 0) { $totalEleGain += $ele_diff ; }

	 } else { 
	   push @Distances, 0; 
	 }

	 $plon = $lon; $plat = $lat ; $pele = $ele ; $ptnum++;
      }
   }
}

# http://en.wikipedia.org/wiki/Cumulative_elevation_gain (przewyższenie):
printf "*** Dist: %.1f meters *** EleGain: $totalEleGain ***\n", $dist;

## Drukowanie profilu trasy

unless ( $print_pic ) { exit 0 }

use GD::Graph::lines;
use POSIX; # floor 

my $img_file = "${file}.png" ;

my @data = (\@Distances, \@Elevations, );

my $mygraph = GD::Graph::lines->new(400, 300);

# skip some dates to avoid label overlapping on X-axis:
my $x_factor = floor (($#Distances + 1) / 10 ) + 2;
print "$#Distances observations. X-axis labels printed evey ${x_factor}th one!\n";

$mygraph->set_text_clr('black');
$mygraph->set(
    x_label     => 'Dist',
    y_label     => '#',
    title       => "# Elev",
    # Draw datasets in 'solid', 'dashed' and 'dotted-dashed' lines
    line_types  => [1, 1, ],
    # Set the thickness of line
    line_width  => 2,
    # Set colors for datasets
    dclrs       => ['blue', 'red', 'cyan'],
    #x_tick_number => 'auto',
    x_label_skip => $x_factor,
    transparent => 0, ## non-transparent
    bgclr => 'white',
    fgclr => 'black',
    borderclrs => 'black',
    boxclr => '#ede7e7',
    labelclr => 'black',
    #axislabelclr,
    legendclr => 'black',
  ) or warn $mygraph->error;

  $mygraph->set_legend_font(GD::gdMediumBoldFont);
  $mygraph->set_legend('ele', 'ele2', '???');

  my $myimage = $mygraph->plot(\@data) or die $mygraph->error;

  ## for cgi script uncomment:
  ##print "Content-type: image/png\n\n";

  open ( IMG, ">$img_file") or die " *** Problems opening: $img_file ***" ;

  print IMG $myimage->png;

  close (IMG);

  ##print "@Distances\n"; ## debug

##

Wykorzystuję od jakiegoś czasu XML::LibXML. W skryptach do obsługi flickr.com korzystałem z XML::Simple ale do parsowania plików GPX ten pakiet się nie nadaje -- nie zachowuje porządku elementów (bo je czyta do hasza). W oczywisty sposób porządek punktów na śladzie nie może być dowolny.

A tutaj ktoś zrobił coś podobnego tyle, że używając Pythona.

url | Wed, 20/08/2008 09:23 | tagi: , , , ,
Garmin Etrex H

Dokupiłem najtańszy odbiornik Garmina pn. Etrex h. Urządzenie to ma monochromatyczny wyświetlacz i nie obsługuje map. Nie ma wysokościomierza jak geko, nie ma też kompasu elektronicznego. Wysokościomierz barometryczny geko wskazywał pi-razy-drzwi a kompas jest niepotrzebny. Etrex pokazuje kierunek bez kompasu, wystarczy się poruszać.

Etrex h (z literą H) ma chipset firmy MTK, tej samej co zrobiła Iblue747. Wyświetlacz tego urządzenia jest duży, litery wyraźne. Łatwiej też wyświetlić bieżący czas na ekranie; w geko wymagało to extra ekwilibrystyki. Z drugiej strony, podgumowane guziki są bardziej toporne niż w geko i trochę trudniej nimi operować.

Garmin Etrex H

Wygląda, że urządzenie ma wadę polegającą na błędnym wyliczaniu średniej i przebytej drogi (widać to na zdjęciu obok). Jeżeli podczas wędrówki wyłączę Etrexa a następnie włączę -- przy ograniczonej widoczności nieba -- na ekranie pojawiają się wyniki typu 2000 km/h. Na szczęście zapisany ślad jest OK, nie ma na nim punktów z Afryki czy Hondurasu. Niby nie jest to wada z gatunku mocno uciążliwych, ale denerwuje. No co tu dużo mówić: bubel.

Porównanie śladów iblue, etrexa oraz geko jest tutaj (czerwony ślad to etrex, niebieski iblue, turkusowy geko 301). Etrex wyłączył się nie wiedzieć czemu w pewnym momencie.

Ślady w różnych kolorach wymagały drobnych zmian w bibliotece gpx-viewer Kaza Okudy. Oryginalna biblioteka rysuje tylko na czerwono a moja modyfikacja zmienia kolor dla każdego elementu <trk> zawierającego <cmt> (por. GPX 1.1). Zmiana koloru dla każego elementu trk nie byłaby dobrym pomysłem, bo ślad pobrany z GPSa często jest dzielony na wiele elementów trk. Dodanie cmt ma wymusić zmianę koloru na żądanie. GPSbabel nie wstawia cmt do śladu pobieranego z urządzenia.

url | Sat, 09/02/2008 19:31 | tagi: , ,
Skrypty Gpx-viewer, gpsbabel i zdjęcia na Google Maps

Zrezygnowałem wreszcie z używania do komunikacji z GPSem programu GPSman na rzecz GPSBabela. Ten pierwszy jest programem interaktywnym a przez to niezbyt wygodnym bo trzeba się trochę naklikać żeby przegrać zawartość pamięci Geko na PC. GPSBabel działa w trybie wsadowym, dzięki czemu można oszczędzić dużo (cennego) czasu:

#!/bin/bash
TODAY=`date +"%Y%m%d"` # zapisz do pliku yyyymmdd.gpx
gpsbabel -t -r -w -i garmin -f /dev/ttyS0 -o gpx -F "$TODAY.gpx" 

Przyznać muszę, że podchodziłem do tego GPSBabela jak do jeża bo przy poprzednich próbach coś mi tam nie działało. A niesłusznie -- wystarczyło przeczytać dokumentację.

Najwięcej czasu straciłem zresztą na podłączeniu Garmina do komputera. Mój Geko 301 jest podpięty do PC standardowym ,,fabrycznym'' kablem pn. RS232 serial port connector (part number: 010-10310-00). Port szeregowy, tj. /dev/ttyS0 w nomenklaturze Linuksa, w FC5 jest dostępny tylko dla superużytkownika. BTW mam poczucie, że wcześniej był dostępny dla wszystkich. Kłopot ten rozwiązałem w sposób przedstawiony tutaj:

ls -l /dev/ttyS0
crw-rw---- 1 root uucp 4, 64 gru 18  2007 /dev/ttyS0
/usr/sbin/usermod -G uucp tomek # dodanie tomka do grupy uucp

Uwaga: program usermod działa tak, że jeżeli użytkownik jest obecnie członkiem grupy, której nie podano na liście--wartości opcji -G, to zostanie z niej usunięty. Lepiej więc zwyczajnie uruchomić vi i dopisać co trzeba do /etc/groups.

Mając już zgrany ślad (track) i punkty (waypoints) zacząłem kombinować co dalej z tym robić. Sposób w jaki publikuję moje ślady korzysta z biblioteki gpx-viewer Kaza Okudy. Każdy punkt z pliku GPX jest przedstawiony w postaci standardowej ,,pinezki'' znanej z google maps. Pinezka po kliknięciu zamienia się w okienko zawierające zawartość elementów-dzieci elementu wpt (tj. ele, name, cmt, desc oraz sym) oraz atrybuty tego elementu (latlon), np.:

<wpt lat="54.443087485" lon="18.540491704">
  <ele>69.340332</ele>
  <name>168</name>
  <cmt>168</cmt>
  <desc>168</desc>
  <sym>Flag</sym>
</wpt>

Gdyby ww. element zawierał element extension, to pokazana by była tylko zawartość extension. W przykładach ze strony Okudy extension zawiera element img zawierający z kolei zdjęcie zrobione w tym właśnie miejscu:

<wpt lat="49.237919" lon="-122.760106">
  <ele>4.0</ele>
  <name>Photo 2</name>
  <extensions><html><![CDATA[
       <a href="http://okuda.blogspot.com/2005/07/traboulay-poco-trail.html" target="_blank">
         <img src="blog/2005-07/IMG_2370-01.jpg" />
       </a>
    ]]></html></extensions>

Teraz mała dygresja: odsyłacze do zdjęć na flickr.com są tworzone według pewnego schematu. Strona główna zdjęcia ma adres http://www.flickr.com/tprzechlewski/<photo_id>/, gdzie <photo_id> oznacza identyfikator zdjęcia. Plik ze zdjęciem ma zaś następujący URL:

http://static.flickr.com/<server>/<photo_id>_<secret>_<size>.jpg

Wartości <server> oraz <secret> można ustalić np. poprzez wykonanie metody flickr.people.getPublicPhotos. Wartościami sizes (square), t (thumbnail), m (small), b (large), o (original). Oznaczają one odpowiednio pliki o wielkościach 75, 100, 200, 1024 pikseli i wielkość oryginalną. Rysunek typu square to kwadrat, pozostałe to prostokąty o dłuższym boku równym podanej licznie pikseli. Prostokąt o dłuższym boku równym 500 pikseli to wielkość zdjęcia, która jest wyświetlana na stronie głównej zdjęcia. Ta wielkość jest wybierana jeżeli URL nie zawiera części _<size>.

Ja chciałem żeby element img wewnątrz extension w pliku GPX wskazywał na zdjęcie w rozmiarze thumbnail na flickr.com a element a odsyłał na stronę główną tego zdjęcia. Żeby nie wpisywać kodu ręcznie wymyśliłem to następująco.

Za pomocą skryptu flickr_getphotolist.pl pobieram informacje nt. wszystkich zdjęć (publicznych, ale to ograniczenie akurat jest OK). Skrypt zapisuje informacje w postaci następującej listy haszy:

@photos = (
{'owner' => '20425995@N00','isfriend' => '0','ispublic' => '1','secret' => '95826dcd42',\
 'farm' => '3','title' => 'dscf1209','server' => '2343','id' => '1747402167','isfamily' => '0'},
...

do pliku ~/.flickr/hr.icio.ph. Prosty skrypt zwraca kompletne adresy URL po podaniu tytułu zdjęcia (działa przy założeniu, że tytuły są unikatowe):

#!/usr/bin/perl
require "$ENV{HOME}/.flickr/hr.icio.ph" ;
$photo_title = shift;
for (@photos) { if ($photo_title eq $_->{title} ) {
print "<extensions><html><![CDATA[
       <a href=\"http://www.flickr.com/tprzechlewski/$_->{id}/\" target=\"_blank\">
         <img src=\"http://static.flickr.com/$_->{server}/$_->{id}_$_->{secret}_t.jpg\" />
       </a> ]]></html></extensions> \n";
  }
}

Teraz wystarczy dopisać w .emacs funkcję, która w miejscu wywołania albo zapyta o tytuł zdjęcia, albo pobierze go sama z wiersza gdzie jest kursor po czym wstawi to co wypluje ww. skrypt do Emacsowego bufora. Genialne:-) Na próbę dodałem zdjęcia do śladu wygenerowanego 16. 12. 2007 r.

BTW patrząc na ten dziwny ślad nie mogę się powstrzymać od sarkazmu, mając w pamięci opinię niejakiej squishy z forum flickr.com: ... it's smaller than many cell phones and I think it's fabulous. I just turn it on and toss it in a backpack, then download the track log later to sync with photos... Gdzie ona mieszka? Na pustyni Gobi? Albo pracuje w Garminie... Albo to sync with photos jest plus/minus 10 kilometers. Bo mój geko 301 prawie zawsze zgubi ślad w trudnym terenie typu las, duże budynki, głębokie doliny itp...

url | Wed, 19/12/2007 09:54 | tagi: , , , , , , ,
Problemów z Garminem ciąg dalszy

Okazało się, że w sobotę (28 lipca) mój Garmin Geko 301 nie tylko przestawił magicznie częstotliwość zapisu śladu, ale także cofnął się w czasie. W rezultacie kilka wpisów ,,zachodzi'' chronologicznie na siebie. Wyszło to dzisiaj, gdy usiłując wyciąć kawałek śladu przy pomocy programu gpsbabel uruchomionego w następujący sposób (por. Data Filters):

gpsbabel -t -i gpx -f plik-we.gpx -x track,start=2007081907,stop=2007081915 -o gpx -F plik-wy.gpx

otrzymałem:

trackfilter-init: Track points badly ordered (timestamp)!

Nie wiem czemu tak się stało. Mniejsza z tym. Zamiast ręcznie poprawiać błędne wpisy można spróbować dodać opcję merge, która łączy wszystkie ślady w jeden usuwając ,,części wspólne'' (jeżeli ślady nie zachodzą na siebie można zamiast merge, użyć pack)

gpsbabel -t -i gpx -f plik-we.gpx -x track,merge,start=2007081907,stop=2007081915 \
    -o gpx -F plik-wy.gpx

Powyższe wytnie ślad utworzony od siódmej do piętnastej, 19 sierpnia 2007 r. BTW: do ściągnięcia zawartości Geko na dysk użyłem następującego skryptu:

#!/bin/bash
# http://wiki.openstreetmap.org/index.php/How_to_get_data_from_a_Geko_201
filename="`date +%y%m%d-%H%M`"
echo "creating $filename-waypoints.gpx"
gpsbabel -i garmin -f /dev/ttyS0 -o gpx -F $filename-waypoints.gpx
sleep 2
echo "creating $filename-tracklog.gpx"
gpsbabel -t -i garmin -f /dev/ttyS0 -o gpx -F $filename-tracklog.gpx

Do tej pory używałem okienkowego programu gpsman; gpsbabel jest wygodniejszy bo nie trzeba klikać, tyle że gpsman potrafi wyświetlić ślad, co czasami się może przydać, więc nie skreślam go ostatecznie.

url | Sun, 19/08/2007 22:30 | tagi: , , ,
Problem ze zbyt gęstym śladem GPSa

W sobotę (28 lipca) mój Garmin Geko 301 na chwilę się przestawił magicznie i rejestrował --przez dłuższy czas--położenie co sekundę. Powstały w rezultacie ślad (trace) miał ca 0,5Mb, znacząco więcej niż normalnie. Ponieważ stało się to po raz pierwszy byłem nieco zaskoczony, co z tym fantem począć. Wysyłanie tego do mojego repozytorium tras rowerowych nie miało sensu. Po krótkiej interakcji z Google znalazłem sposób na rozwiązanie mojego problemu na stronie wiki.openstreetmap.org:

gpsbabel -i gpx -f plik-we.gpx -x simplify,count=500 -o gpx -F plik-wy.gpx
url | Sun, 29/07/2007 15:56 | tagi: , , ,