piątek, 25 stycznia 2008

Iblue 747 GPS logger

GPS logger to odbiornik GPS wyposażony w pamięć pozwalającą na rejestrację przebytej drogi (śladu). Ślad z GPSa jest mi potrzebny do dodania współrzędnych geograficznych do zdjęć. Do tej pory do tego celu wykorzystywałem odbiornik Geko 301 firmy Garmin. Geko jednakże jest urządzeniem starszego typu i generalnie nie działa jeżeli nie widzi ,,czystego nieba''. Nie działa w lesie, często są duże problemy w terenie mocno zabudowanym, itp.

Postanowiłem kupić lepszy odbiornik. Czytając fora i blogi poświęcone GPS najpierw dowiedziałem się, że jest coś takiego jak SIRF. Już chciałem takiego SIRFa kupić ale doczytałem o chipsecie MTK. Według niektórych doniesień jest on lepszy niż SIRF 3 (są też tacy co twierdzą, że tak nie jest; głosów w stylu X to syf a ja jestem wielkim znafcom nie biorę pod uwagę).

Ceny loggerów na allegro zaczynają się od 300 zł (styczeń 2008) a ja znalazłem coś chwalonego, podobno działającego z Linuksem co jest dla mnie bardzo ważne i (okazało się) tańszego pn. i-Blue 747 Dziwne, ale w Polsce nikt tego nie sprzedaje, przynajmniej w Internecie. Znalazłem i-Blue na ebay za mniej niż 200 zł przy czym 30% tej kwoty stanowiły koszty wysyłki.

BTW opis na e-bay był w języku włoskim, sklep w Niemczech, sklepowy (sądząc po imieniu i nazwisku, Turek) po angielsku słabo pisał, ale się dogadaliśmy i paczka doszła.

Do obsługi loggera jest dołączony CDrom z programem. Program jest of course na system MSW, ale podobno działa z wine. Dokładnie postępując według instrukcji stąd dało się go uruchomić: należy zainstalować wine, uruchomić winecfg, a następnie:


cd ~/.wine/dosdevices
ln -s /dev/ttyUSB0 com1

Teraz należy skopiować plik instalacyjny i uruchomić wine DataLog.exe. Program zostanie zaistalowany tyle, że u mnie nie działa. Ściąga ślad całkiem dziarsko ale nie do końca bo zwisa. Próbowałem dwa razy raz zawisł gdy wskaźnik był na 49% drugi raz na 89%. W google znalazłem opinie użytkowników Ubuntu utrzymujących, że w ich systemie wszystko działa (like a charm). BTW w MS Windows też były problemy, zarówno z instalacją, jak i z uruchomieniem, ale jak w końcu poszło, ale co z tego przecież nie będę go używał w systemie W.

Uwaga: Aby ściągnąć ślad albo zmienić konfigurację urządzenia przełącznik musi być w pozycji LOG. Po uruchomieniu programu pierwsze co trzeba zrobić to zatrzymać zapis śladu (można to zrobić tylko programowo), bo inaczej logger cały czas zapisuje dane.

Zainstalowałem też w bólach bt747 (aplikacja Javy). Zresztą autor ostrzega, że dokumentacja jest niedoskonała. Po rozpakowaniu zipa, zainstalowałem zawartość katalogu rxtx-2.1-7-bins-r2, zgodnie z tym co jest napisane w pliku INSTALL, umieszczonym w tym katalogu. Następnie uruchomiłem skrypt run_rxtx.sh, zmieniając wartość zmiennej MYROOTPATH=/usr/local/bt747. Żby użytkownik miał dostęp do /dev/ttyUSB0 musi być w grupie uucp, to już ustaliłem wcześniej. Dalej jednak nie działało (check_group_uucp(): error testing lock file creation Error details: Permission denied check_lock_status: No permission to create lock file.). Kluczowa okazała się zmiana praw dostępu do /var/log:


chmod 777 /var/lock

Aplikacja, jak widać obok, wygląda okropnie, ale funkcjonalnie jest OK: ściąga dane i kasuje LOG. Więcej nie potrzebuję. Żeby skrypt run_rxtx.sh działał uruchamiany z dowolnego katalogu musiałem jeszcze zmienić wartości zmiennej CLASSPATH (albo wstawić zawartość CLASSPATH jako wartość opcji -cp przy uruchamianiu javy):


CLASSPATH=${RXTXJAR}:$MYROOTPATH/webstart/Waba_only.jar:\
$MYROOTPATH/dist/BT747_rxtx.jar:.:$CLASSPATH

Wreszcie jest też aplikacja pn. MTKbabel (skrypt Perla), działająca podobnie do programu GPSbabel, czyli z wiersza poleceń. Do działania wymaga zainstalowania modułu Device::SerialPort. Ten sposób działania podoba mi się najbardziej. Pobranie danych sprowadza się do wydania następującego polecenia:


mtkbabel -f nazwa-pliku-bez-rozszerzenia -t

Powstaną dwa pliki (dlatego nie podaje się rozszerzenia): jeden w formacie binarnym, drugi w fomacie GPX. Jedno wielkie ale -- transmisja jest bardzo wolna: plik binarny o wielkości ca 650 kB (czyli ca 30% pamięci) był ściągany z loggera 9 minut 47 sekund. Czyli cała pamięć byłaby ściągana 30 min. Hmm... Dla porównania obie wcześniej wymienione aplikacje ściągały te 650 kB w circa 2 minuty. Różnica jest.

Wykonałem już dwa eksperymenty porównujące iblue z moim Garminem 301. Pierwsza trasa to las, w wielu miejscach gęsty i wysoki. Do tego też w wielu miejscach jary o stromych zboczach. Trasa zapisana przez geko oraz trasa zapisana przez iblue. Nie ma porównania, bo geko w zasadzie w lesie nie działał.

Druga trasa to teren zabudowany, a konkretnie Sopot. Zabudowa w większości 3--4 kondygnacyjna. Dwa razy wszedłem do sklepu (Geko zgubił w pierwszym ślad, ale poczekałem po wyjściu aż znajdzie, a za drugim razem sam szybko się odnalazł). Oba ślady wyglądają nieźle (cf. geko iblue). Iblue pogubił się w okolicach skrzyżowania 1-go Maja z Aleją Niepodległości, gdzie wszedłem do sklepu (na dłużej). Nie zgubił satelity, tak jak geko, ale trasa w tym miejscu jest nieprawidłowa (wielki `tik' od 1-go Maja wzdłuż Al. Niepodległości w stronę Gdańska. Na mapie od szpilki oznaczonej jako `sklep' do szpilki `tik'. W rzeczywistości od sklepu poszedłem do szpilki oznaczonej `tunel' i dalej wzdłuż ul. Bohaterów Monte Cassino, co zresztą też jest zaznaczone). Nie ma różnicy pomiędzy śladami zredukowanymi do 500 punktów i dużo większym -- 2500 punktów.

Reasumując: wszystkie zdjęcia zrobione na obu trasach zostały (z zadowalającą precyzją) oznakowane współrzędnymi geograficznymi na podstawie śladu z Iblue, a po to go kupiłem.

Ślad iblue zredukowałem za pomocą gpsbabela, bo oryginalny ślad składa się z tysięcy punktów. Iblue zapisuje ślad co sekundę, Garmin w trybie auto (Iblue nie ma czegoś takiego jak auto). Kiedyś eksperymentowałem z Garminem i też go przestawiłem na zapis sekundowy, ale nie zaobserwowałem różnicy pomiędzy takim trybem a trybem auto. Polecenie uproszczenia śladu wygląda następująco (Log.nma zawiera dane zapisane jako NMEA):


gpsbabel -i nmea -f Log.nma -x simplify,count=450 \
-o gpx -F 2008-01-23BT_x.gpx

Poniżej bardziej zaawansowane polecenie: zapisz jako GPX, ślad od 2008-01-24T13:40 od 2008-01-24T14:50, następnie upraszczając go do 500 punktów. Uwaga: opcje -x nie są przemienne, tj. ich zamiana skutkowałaby najpierw uproszczeniem do 500 punktów, a potem wycięciem od-do, dając w rezultacie ślad dużo bardziej uproszczony:


gpsbabel -i nmea -f GPSDATA-20080123.nmea \
-x track,start=200801241340,stop=200801241450 -x simplify,count=2500 \
-o gpx -F 20080124BT_x.gpx

Kończąc, trochę mnie zastanawia/niepokoi trwałość tego urządzenia, bo jakość wykonania jest taka sobie (100% chińszczyzna). Jakby mi, np. wypadł z ręki, to chyba byłby to jego ostatni lot. Nawet nie próbuję tego sprawdzać. Poza tym logger wydaje się całkiem, całkiem...

Dopisane 16 marca 2008: Dioda GPS: pomarańczowa -- szuka satelitów; pomarańczowa/miga -- nawiguje; niebieska/miga -- mało pamięci (mniej niż 20%); niebieska -- pamięć jest zapełniona, stop (cokolwiek to znaczy); trzykrotny błysk -- zarejestrowanie POI. Dioda baterii: czerwona -- bateria prawie wyczerpana; zielona -- ładowanie; zielona/miga -- naładowana. Dioda BT: niebieska -- BT włączone, ale nie połączony; wolno miga -- połączony w sleeping mode; szybko miga -- połączony i gotowy.

Dopisane 16 marca 2008: projekt formularzy w aplikacji bt747 jest daleki od ergonomicznego, stąd poniżej krótka rekapitulacja. Aby usunąć plik: Fmt/Erase (albo Fmr/Set&erase). Pobranie pliku i zapis na dysk: Log/Get Log i inne przyciski z tej karty. Karta File: konfiguracja. Karta Con: połączenie z urządzeniem. Innych kart w zasadzie nie używam.

Dopisane 19 marca 2008: Poniżej skrypt do zamiany pliku NMEA pobranego z bt747 na plik GPX. Skrypt upraszcza uruchomienie gpsbabela. Ponadto uruchomiony z opcją -U wycina niepotrzebne znaczniki (np. <ele>, czyli wysokość, która w moim przypadku zawsze wynosi zero. Dodatkowo liczy długość wyciętego śladu. Pełny skrypt jest tutaj.


# !/bin/bash
#
# Skrypt ułatwiający uruchomienie programu gpsbabel
# Wycina fragment ścieżki + upraszcza ślad do zadanej liczby punktów
# Na koniec plik podaje długość wyciętego śladu.
#
OUT=''
FORMAT=nmea
ROK=`date +"%Y"`
XREDUCE="NO"

while test $# -gt 0; do
case "$1" in

-help|--help) echo "$USAGE"; exit 0;;

-od) shift; START="$1";;
-od*) START="`echo :$1 | sed 's/^:-od//'`";;
-do) shift; STOP="$1";;
-do*) STOP="`echo :$1 | sed 's/^:-do//'`";;
-max) shift; COUNT="$1";;
-max*) COUNT="`echo :$1 | sed 's/^:-max//'`";;
-rok) shift; ROK="$1";;
-rok*) ROK="`echo :$1 | sed 's/^:-rok//'`";;
-format) shift; FORMAT="$1";;
-format*) FORMAT="`echo :$1 | sed 's/^:-format//'`";;
-U) XREDUCE="YES";;
-out) shift; OUT="$1";;
-out*) OUT="`echo :$1 | sed 's/^:-out//'`";;

-h) echo usage; exit;;
-h*) echo usage; exit;;

*) FILE="$1";;
esac
shift
done

if [ "$XREDUCE" = "YES" ] ; then
echo "** Tracks will be simplified! (Option -U)" ; fi

EXTENSION=${FILE##*.}
BASE=`basename $FILE .$EXTENSION`

if [ "$OUT" = "" ] ; then OUTFILE="$BASE.gpx" ;
else OUTFILE="$OUT" ; fi

if [ "$START" != "" -a "$STOP" != "" ] ; then PERIOD="-x track,start=$ROK$START,stop=$ROK$STOP" ;
elif [ "$START" != "" ] ; then PERIOD="-x track,start=$ROK$START" ;
elif [ "$STOP" != "" ] ; then PERIOD="-x track,stop=$ROK$STOP" ;
fi

if [ "$COUNT" != "" ] ; then SIMPLIFY="-x simplify,count=$COUNT" ; fi

if [ -f "$BASE.$EXTENSION" ] ; then
gpsbabel -i $FORMAT -f $BASE.$EXTENSION $PERIOD $SIMPLIFY -o gpx -F $OUTFILE

if [ -f "$OUTFILE" -a "$XREDUCE" = "YES" ] ; then
extension=${OUTFILE##*.}
simname="`basename $OUTFILE .$extension`_s.$extension"
echo "** File $OUTFILE simplified to $simname" ;
# perl -e 'while ( <> ) { unless(/<ele|fix|course|speed>/) ... to błąd !!
perl -e 'while ( <> ) { unless(/<(ele|fix|course|speed)>/) { print $_ }} ' $OUTFILE > $simname
OUTFILE=$simname
fi
else echo "File $BASE.$EXTENSION found!" ; echo "$USAGE"
fi

if [ -f "$OUTFILE" ] ; then
## Oblicz dystans:
echo "** Counting distance covered in: $OUTFILE "

perl -e 'use Geo::Distance; my $geo = new Geo::Distance;
my $qchars = "\042\047"; # znaki cytowania pojedynczy i podwojny
while (<>) {
if (/<trkpt\s+lat\s*=\s*([$qchars])([^$qchars]+)\1\s+lon\s*=\s*([$qchars])([^$qchars]+)\3/) {
$lat=$2; $lon=$4;
unless ($trkpt < 1) { $dist += $geo->distance( "meter", $plon, $plat => $lon, $lat ); }
$trkpt++; $plat=$lat; $plon=$lon;
}
}
print "** Distance covered (meters): $dist\n"; ' $OUTFILE
fi

sobota, 19 stycznia 2008

Polonizacja FOPa

Fop w wersji 0.2* zniknął już dawno ze strony xmlgraphics.apache.org/fop/ co spowodowało m.in. że moja notka nt. polonizacji była nie tylko przestarzała ale także myląca. W szczególności fop 0.9* ma inną składnię pliku konfigurującego fonty, więc jeżeli ktoś próbował moich wskazówek, to mu raczej fop nie działał.

Uaktualniłem zatem notkę, poprawiłem ją także w paru miejscach bo była mętna a nawet błędna. Przetestowałem działanie z trzema zestawami fontów: MS Core Fonts, DejaVue. Całość jest tak sobie przydatna dla mnie -- fopa na co dzień nie używam, ale widzę z logów, że od czasu do czasu ktoś wpisuje do google fop+polskie+znaki no i ten dokument jest oglądany.

Synchronizacja książki adresowej w Thunderbirdzie

Do poprzednio zainstalowanych wtyczek: Attachment Extractor, Display Mail User Agent, Enigmail, Quick Locale Switcher oraz Virtual Identity doinstalowałem Sync Kolab, dzięki któremu mam zsynchronizowaną książkę adresową. Nie mogłem uruchomić tej wtyczki, z powodu błędu pn. Mail account '...' not found!. Podpowiedź znalazłem w dokumencie Geek to Live: Sync your address book via IMAP Giny Trapani. Nie miałem foldera na gmail.com na moje kontakty, po jego utworzeniu poszło gładko.

BTW Gina T. to chyba jakaś znana osoba. A tu link do jej projektu pn. lifehacker.com. Wygląda ciekawie.

poniedziałek, 14 stycznia 2008

Fedora Core 8

Wczoraj na komputerze kupionym na Św. Mikołaja w zeszłym roku zainstalowałem Fedora Core 8. Wykorzystałem, że Elka wyjechała z Jasiem i Krzysiem na ferie do Habovki. Nie będę raczej z tego komputera korzystał, bo został kupiony dla dzieci -- chciałem sprawdzić jak mi pójdzie z instalacją.

Na dysku był już zainstalowany produkt MSC pn. Windows XP (dzieciom do gier potrzebny). Doinstalowanie FC8 poszło świetnie i zajęło circa 40 minut. Można sprawdzić na zdjęciach porównując wartości tagów Exif ze zdjęć obok. Jest Firefox, Pidgin, Thunderbird, OpenOffice. Czegóż więcej potrzeba 99% użytkowników PCtów? Pewnie będzie problem z aplikacjami do audio/wideo, no ale to już jest problem nie do przeskoczenia, bo natury prawnej.

Emacs pisze out-of-the-box w Unicode. Czas już sprawdzić, jak ten UTF działa w Linuksie.

Mój PCet się zepsuł. Co pewien czas się resetuje. Kol. Pacek przelutował kondensatory, ale to tym razem nie pomogło. Pomogło za to wyłączenie cache w BIOSie. Coś jest nie tak albo z procem albo z płytą. Teraz wprawdzie nie ma resetów, ale komfort pracy taki sobie. Już jestem umówiony z kol. Markiem na upgrade. Jak będzie nowy komputer, to wtedy pomyślę o upgrade do FC8.

czwartek, 10 stycznia 2008

Kłopoty z Firefoksem

Rozjechał mi się Firefox. Objawy są takie, że przy starcie okno się od razu zamyka. Nie zawsze, ale bardzo często. Okno potrafi się zamknąć także później. Zawsze bez żadnych komunikatów, ani uruchamiania rozszerzenia Talkback.

Uaktualniłem Firefoksa ze strony www.firefox.pl/ do wersji 2.0.0.11. Nie pomogło. Wykonałem jeszcze kilka chaotycznych prób, ale to też nic nie dało. Między innymi zaktualizowałem pakiet nss.i386 3.11.5-0.5.1.fc5. Wreszcie radykalnie:


mv ~/.mozilla ~/.mozilla.kopia

Wygląda, że coś się poplątało w cache bo teraz wygląda, że jest OK. Okno Firefoksa się nie zamyka. BTW Firefoxa instaluję w katalogu /usr/local/firefox211 a potem dodaję następujące linki:


ln -s /usr/local/firefox/firefox /usr/local/bin/firefox
ln -s /usr/local/firefox211 /usr/local/firefox

piątek, 4 stycznia 2008

Strojenie Emacsa cd.

Do pisania skryptów w Perlu używam trybu cperl. Aby cperl był domyślnym trybem (zamiast perl-mode) trzeba wpisać do .emacs:


(defalias 'perl-mode 'cperl-mode)

Tryb cperl ma użyteczną funkcję: cperl-info-on-command (C-c C-h F). Wystarczy ustawić kursor na nazwie funkcji/polecenia nacisnąć C-c C-h F aby została wyświetlona pomoc z podręcznika Perla. Konkretnie jest wyświetlana strona w formacie .info. Dokumentację do Perla w tym formacie musiałem ściągnąć samodzielnie i umieścić w katalogu, w którym system oczekuje plików .info (u mnie jest to /usr/local/share/info/). Podręcznik jest dostępny pod adresem:


CPAN/doc/manual/info/perl5-old/perl5-info.tar.gz

Tyle, że stary (wersja 5.6 Perla). Ewentualnie można samemu wygenerować strony nowego podręcznika w formacie .info za pomocą pod2texi. Są one dostępne pod adresem:


CPAN/doc/manual/info/perl5/pod2texi-0.1.tar.gz

Tryb cperl zwolnił dramatycznie w Emacsie 22 zainstalowanym na laptopie. Po wpisaniu w google emacs+22+cperl+slow dotarłem do dyskusji na ten temat. Podmiana oryginalnego cperl.el z dystrybucji Emacsa na wersję ściągniętą z tej strony pomogła. W PC poprawnie działa oryginaly cperl, problem jest zatem z gatunku magicznych.

Magicznie też zmienił mi się program do sprawdzania pisowni. Ponieważ aspell był wolny i nic nie wnosił za pomocą niewielkiego haka używałem dalej ispella. W Emacs 22 znowu zaczął być używany aspell. Dopisałem zatem do .emacs:


(setq-default ispell-program-name "ispell")

Ale to już chyba ostatni raz. Wprawdzie aspell dalej jest wolniejszy, ale już można z nim normalnie pracować. Przy następnej zamianie systemu już mi się nie będzie chciało kompilować ispella.

czwartek, 3 stycznia 2008

Wypisanie się z grupy na flickr.com

Zapisać się łatwo. Wypisać trudniej. Należy wybrać stronę your Groups, następnie wybrać grupę. Po prawej stronie wyszukać link Quit nazwa-grupy. Po kliknięciu znajdziemy się na stronie, na której będzie się można wypisać.

środa, 2 stycznia 2008

Kłopoty z Emacs i AWK

Emacs 22 nie współpracuje z pakietem session.el, który służy do zapisania do pliku na potrzeby następnej sesji iluś tam ostatnio wykonanych poleceń, otwartych plików itp. Ćwicząc Emacs 23 już to przerabiałem i na taką okoliczność wstawiłem do plików startowych tryb desktop-save:


(if (< emacs-major-version 22)
(progn
(require 'session)
(add-hook 'after-init-hook 'session-initialize))
(progn
(desktop-save-mode 1)
(setq history-length 250)
(add-to-list 'desktop-globals-to-save 'file-name-history)))

O tych wszystkich nastawach zdążyłem już zapomnieć. A że Emacs na starcie czyta kilkanaście plików to nie od razu doszedłem czemu wraz z przejściem na Emacsa 22 przestał działać session.el a włączyło się coś innego. (Ten blog jest w dużej części po to, aby takich sytuacji uniknąć w przyszłości:-)

Tryb desktop-save nie podoba mi się: przy starcie Emacsa ładuje się kilkadziesiąt plików, większość z nich zupełnie niepotrzebnie. Najgorzej wygląda sprawa z plikami edytowanymi poprzez trampa. Emacs łączy się z odległą maszyną. Nie wiem czemu robi to kilkakrotnie. Wszystko to trwa oczywiście a próba okiełznania desktop-save nie dała zadowalającego rezultatu. W dokumentacji jest zresztą niewiele na ten temat. Spróbowałem przykładowo ustawić zmienną desktop-restore-eager, ale to niewiele pomogło. Faktycznie Emacs szybciej startował, ale jak tylko chwilę nie dotykałem klawiatury zaczął otwierać resztę buforów. Nie szło tego przerwać... Jednym słowem mulił, tylko że nie na początku.

W ,,sprawie trampa'' wyczytałem w odpowiedzi na żale jakiegoś użytkownika żeby dać sobie z nim spokój i działać na maszynie odległej przez fuse-sshfs. Czy ja wiem? Jak przed uruchomieniem nie zamontuję odległego katalogu, to co zrobi desktop-save? To chyba nie jest dobre rozwiązanie.

Ostatecznie przełączyłem się na standardowy tryb savehist. Działa z grubsza jak session.el. Czemu ja w ogóle zacząłem używać tego ostatniego--nie pamiętam. Tryb desktop-save wyłączyłem.

W temacie AWK też pojawił się problemik. Dawno, dawno temu (ca 1994 mówiąc konkretnie) zrobiłem skrypcik do podliczania moich rocznych finansów. Działał. Aż w tym roku przestał (a może przestał wcześniej, tylko nie zwróciłem na to uwagi). Zaczęło się od komunikatu division by zero.

Miałem od dawna świadomość, że jakiś mądry tak przerobił gawka, iż przy ustawieniu lokali na PL traktuje on jako kropkę dziesiętną przecinek a nie kropkę. Po co to zrobiono--nie wiem. Wydaje mi się, że zrobiono bez sensu. Ponieważ mój skrypt był uruchamiany via skrypt basha, wystarczyło dopisać LANG=C:


#!/bin/bash
LANG=C exec gawk -f $AWKDIR/foo.awk $*

I działa znowu.

Dopisane 19 marca 2008: fuse_sshfs jest jednak świetnym rozwiązaniem. Ostatecznie nie pracuję na dziesiątkach maszyn, tylko na dwóch. W razie potrzeby montuję odległy katalog i już. Super wygodnie, nie tylko w połączeniu z Emacsem. Pakietu tramp już nie używam.

Szybsze geokodowanie zdjęć: podsumowanie

W okresie świątecznym i na przełomie roku wykonałem kilka eksperymentów weryfikujących jakość dodawania współrzędnych za pomocą synchronizacji czasu odbiornika GPS i aparatu. Dokładnie siedem prób (odpowiednio data: zdjęcia ogółem/zdjęcia oznaczone): 20071226: 61/61, 20071228: 11/11, 20071229: 29/29, 20071230: 71/71, 20071230: 48/48, 20080101: 30/30, 20080102: 8/22. Łącznie zdjęć było zatem 260 z czego 16 (6,1%) nie zostało zsynchronizowanych. Większość zdjęć została oznakowana z zadowalającą albo nawet dobrą dokładnością. Niektóre trasy były łatwe: płaski teren. Ale trasa z 31.12 prowadziła w sporej części przez gęsty las a GPS się nie pogubił. Dziś poszedłem jeszcze dalej do lasu, no i GPS tym razem odmówił kooperacji. A GPSa -- zgodnie z zaleceniem, żeby był jak najwyżej -- noszę pod czapką!

Przerobiłem swoje skrypty, oraz bibliotekę dla Emacsa. Aby odróżnić zdjęcia zawierające zdefiniowane tagi EXIF ze współrzędnymi geograficznymi od tych, które tej informacji nie zawierają, generowana miniatura zdjęcia zawiera czerwony prostokąt w lewym górnym rogu (jeżeli zdjęcie jest już geotagowane). No tak to sobie wymyśliłem.

Niektóre ślady GPS na mojej stronie zawierają teraz miniatury zdjęć. Publikuję też dane w formacie KML. Uaktualniony opis jest tutaj. Detaliczna instrukcja jak używać GPSphoto. jest zaś tutaj.

Dopisane 8 maja 2008/Zmodyfikowane 27 sierpnia 2008: Podsumowanie procedury pobrania śladu z urządzenia GPS i ich zamiany na ślad w formacie GPX/KML:

  1. Ślad z urządzenia jest pobierany albo za pomocą gpsbabela albo programu  bt747.

  2. Skrypt nmea2gpx zamienia dane w formacie NMEA na GPS w razie potrzeby wycinając fragment śladu i upraszczając go (opcja -max liczba-punktów). Skrypt akceptuje także inne formaty danych wejściowych (opcja -format):


    nmea2gpx -od czas -do czas -max liczba [-format format ] [-U ] [-out plik.gpx] plik
  3. Skrypt My-photo-sync.sh (wykorzystujący gpsPhoto.pl) ,,synchronizuje'' ślad ze zdjęciami i generuje plik w formacie KML:


    My-photo-sync.sh -d katalog-zdjęć -f plik.gpx -t różnica-czasów

    różnica czasów jest obliczana za pomocą skryptu exif_datetime.pl


    exif_datetime -b czas_z_GPSa -f zdjęcie -o GMT_offset_in_seconds

    gdzie: zdjęcie, to nazwa pliku ze zdjęciem ekranu GPSa; czas_z_GPS, to czas wyświetlany przez GPSa na ww. zdjęciu; GMT_offset_in_seconds, różnica między czasem lokalnym a GMT (niektóry GPSy to wyświetlają, a jak nie to łatwo jest to obliczyć). Ponieważ uruchamianie exif_datetime w ww. sposób dla każdej sesji zdjęciowej jest pracochłonne można też napisać:


    exif_datetime

    Powyższe wyświetli przesunięcia czasowe zapisywane w pliku ~/.time_offset. Ponieważ czas w aparatach rozsynchronizowuje się w miarę wolno, wystarczy co kilka tygodni aktualizować ~/.time_offset.

    Można też napisać:


    My-photo-sync.sh -d katalog-zdjęć -f plik.gpx -a

    Przesunięcie zostanie pobrane automatycznie z pliku ~/.time_offset. [Nie trzeba uruchamiać exif_datetime .]

  4. W wyniku wykonania My-photo-sync.sh powstaje także plik .kml. Skrypt perlowy kml-adjust-urls zamienia linki do zdjęć w pliku KML, tak aby wskazywały na zdjęcia umieszczone w serwisie flickr.com (skrypt My-photo-sync.sh oryginalnie wstawia linki lokalne). Przed wykonaniem kml-adjust-urls należy wykonać flickr_update_kb bo kml-adjust-urls pobiera informacje nt. zdjęć lokalnie z bazy utworzonej przez flickr_update_kb.


    kml-adjust-urls plik.kml

    Ubocznym efektem działania kml-adjust-urls jest plik plik.wpts zawierający elementy <wpt> określające linki do zdjęć umieszczonych na flickr.com. Zawartość tego pliku można dodać do pliku plik.gpx uzskanego w kroku #2. Ślad -- wyświetlony w googlemaps -- będzie wtedy zawierał ,,pinezki'' z minaturami zdjęć.

    Niektóre zdjęcia z lokalnego katalogu nie są umieszczone na flickr.com. Skrypt kml-skip-deadlinks usuwa takie zdjęcia z pliku KML. Mało eleganckie rozwiązanie -- jeden skrypt by wystarczył, ale nie mam czasu w tej chwili poprawiać skryptu kml-adjust-urls: Skrypt kml-adjust-urls usuwa takie zdjęcia z pliku .kml.

Gdzie mieszka premier?

A raczej gdzie jest zameldowany. Właśnie sobie uświadomiłem widząc w TV premiera w kuchni przed Wigilią bodajże, że nigdy nie widziałem go na ,,żywo'' mimo, że obaj mieszkamy w całkiem małym mieście. Nawet prezydenta Sopotu widziałem i to nago. On mnie zresztą też w tym stanie widział, bo spotkanie było w szatni basenu MOSiR:-). No więc wygląda na to, że Tusk to nie z mojej dzielni jest. A z jakiej? Wpisanie w google: Tusk+Sopot jest zbyt trywialne. Spróbowałem: Tusk+pozew. Na pozwie musi być adres a wielcy ludzie lubią się procesować albo na nich pozwy piszą. No i faktycznie jest (kopia). Skarżący wygląda wprawdzie na pieniacza a pozew hmm... Absurdalnie... A może nie... Media nawet niektórych takich promują. Widocznie jednak pan TB niewłaściwą osobę pozwał więc nie został sławny:-)

Ale adres jest i wygląda na prawdziwy.