niedziela, 28 listopada 2010

Zdjęcia z flickr.com na googlemaps

Flickr2Map to usługa, dzięki której użytkownicy flickr.com mogą wyświetlić geotagowane zdjęcia m.in. na google maps. Przykład:


http://www.robogeo.com/Flickr2Map?referer=http://www.flickr.com/photos/tprzechlewski/3087054865/&type=map&view=satellite

Żeby za dużo nie musieć wpisywać, zrobiłem skrót do usługi.

czwartek, 25 listopada 2010

poniedziałek, 22 listopada 2010

sobota, 20 listopada 2010

Przykład wykorzystania pakietu keyval

LaTeXowe makro z dwoma opcjonalnymi i dwoma obowiązkowymi argumentami. Wartością domyślną opcjonalnych argumentów są argumenty wymagane. Można to zaimplementować następująco:


\documentclass{article}
\usepackage{keyval}
\makeatletter
%% ...
\define@key{hopla}{foo}{\def\HoplaArgFoo{#1}}
\define@key{hopla}{bar}{\def\HoplaArgBar{#1}}
\newcommand\HoplaCommand[3][]{%
%% `reset' wartości poleceń \HoplaArgFoo/\HoplaArgBar
\let\HoplaArgFoo \@empty \let\HoplaArgBar \@empty
\setkeys{hopla}{#1}%%
%% jeżeli \HoplaArgFoo jest empty, tj. nie podano argumentu foo:
\ifx\HoplaArgFoo \@empty \def\HoplaArgFoo{#2} \fi
%% to samo dla \HoplaArgBar:
\ifx\HoplaArgBar \@empty \def\HoplaArgBar{#3} \fi
%% demonstracja:
FooArg: \HoplaArgFoo. BarArg: \HoplaArgBar. [#2 #3]\par }
\makeatother
%% ...
\begin{document}

\HoplaCommand[foo=OA1,bar=OA2]{Arg1}{Arg2}

\HoplaCommand[bar=OA2]{Arg1}{Arg2}

\HoplaCommand{Arg1}{Arg2}
\end{document}

BTW: plik latex.ltx zawiera \def\@empty{} -- gdyby ktoś był ciekaw co to za tajemnicze \@empty.

piątek, 19 listopada 2010

Sprawdzanie poprawności dokumentów na pinkaccordions.homelinux.org

Sprawdziłem dziś http://pinkaccordions.homelinux.org/wblog za pomocą xmllinta i ponieważ się okazało, że są błędy postanowiłem skończyć z partyzantką. Od dziś kilka stron będę weryfikował automatem, np. w taki sposób:


SGML_CATALOG_FILES=~/etc/xml/catalog xmllint --catalogs --noout --valid http://pinkaccordions.homelinux.org/

Jeżeli korzystamy z domyślnego /etc/xml/catalog, to podanie SGML_CATALOG_FILES jest zbędne. W tymże pliku ~/etc/xml/catalog dodałem wpisy:


<uri name="http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"
uri="file:///home/tomek/etc/xml/dtd/xhtml/1.1/xhtml11.dtd" />
<uri name="http://www.w3.org/TR/ruby/xhtml-ruby-1.mod"
uri="file:///home/tomek/etc/xml/dtd/xhtml/1.1/xhtml-ruby-1.mod" />
<rewriteSystem systemIdStartString="http://www.w3.org/TR/xhtml-modularization/DTD/"
rewritePrefix="file:///home/tomek/etc/xml/dtd/xhtml/1.1/" />
<rewriteURI uriStartString="http://www.w3.org/TR/xhtml-modularization/DTD/"
rewritePrefix="file:///home/tomek/etc/xml/dtd/xhtml/1.1/" />

Uwaga: pierwsze dwa wiersze nie wystarczą, bo xhtml11.dtd dołącza całą chmarę innych plików -- konkretnie 35 plików .mod oraz 3 .ent. Wszystkie te pliki skopiowałem do /home/tomek/etc/xml/dtd/xhtml/1.1/

Teraz wywołuję xmllint za pomocą prostego skryptu:


#!/bin/bash
# Sprawdzanie poprawnosci wybranych stron na pinkaccordions.homelinux.org
LOGFILE=~/Logs/WWW/xhtml-errors.log
XMLCATALOG=~/etc/xml/catalog
LINT=/usr/bin/xmllint
TODAY=`date`

for url in 'http://pinkaccordions.homelinux.org/wblog' 'http://pinkaccordions.homelinux.org/' ...
do
SGML_CATALOG_FILES=$XMLCATALOG $LINT --catalogs --noout --valid $url

if [ "$?" -ne 0 ] ; then
echo "Error found in $url [$TODAY]" >> $LOGFILE
fi
done

Ewentualnie można też tak:


#!/usr/bin/perl
# Sprawdzanie poprawnosci za pomoca `W3C Markup Validation Service'
use LWP::Simple;
$LOGFILE='/home/tomek/Logs/WWW/xhtml-errors.log';
my $today = localtime;

open LOG, ">>$LOGFILE";

my @URLs = (
'http://validator.w3.org/check?uri=http%3A%2F%2Fpinkaccordions.homelinux.org%2Fwblog',
'http://validator.w3.org/check?uri=http%3A%2F%2Fpinkaccordions.homelinux.org',
... );

foreach $url (@URLs) { print STDERR "Sprawdzam: $url...\n";
$content = get("$url");
if ($content =~ /Information on validation.*Congratulations/m) { print STDERR "$url is OK\n" } else
{ print LOG "$today => errors found => $url\n" ; }
}

close (LOG);

W3C ma też API do serwisu walidacyjnego, ale skomplikowane to API jest...

piątek, 12 listopada 2010

Uruchomienie Smart PLS w Linuksie

Program smartpls, który służy do modelowania ścieżkowego cząstkową metodą najmniejszych kwadratów (PLS path modelling), jest typowym przykładem aplikacji napisanej przez amatora:-). Program jest za free, ale autor nie udostępnia kodu źródłowego (pewnie się wstydzi).

W systemie FC8 działał a w FC11 przestał działać, zgłaszając na starcie błąd:


lookup error: ~/spls/configuration/org.eclipse.osgi/bundles/58/1/.cp/libswt-mozilla-gtk-3232.so: \
undefined symbol: _ZN4nsID5ParseEPKc

Pomogło doinstalowanie starego Firefoxa (w wersji 2). Przykładowo jeżeli stary FF znajduje się w katalogu ~/bin/ff2, to program działa uruchomiony w następujący sposób:


MOZILLA_FIVE_HOME=~/bin/ff2 spls

Napisałem o ww. problemie na forum spls -- może autor się przejmie i skompiluje spls w wersji korzystającej z FF3; albo --co też jest bardzo prawdopodobne -- zmiany umożliwiające kompilację z FF3 są tak duże, że mu się nie będzie chciało...

czwartek, 4 listopada 2010

Sony Ericsson Elm J10i2

Nie to żebym się chwalił ale od pewnego czasu posiadam. Ten telefon ma GPS...

Jak się zdjęcia robi, to można ustawić aparat tak, żeby zdjęcia były geo-tagowane, tj. żeby były dodawane współrzędne geograficzne. Ale jest pewien myk. Mianowicie jeżeli GPS nie będzie włączony -- cokolwiek to znaczy -- to geo-pozycja zdjęcia będzie wyznaczona tylko w oparciu o numer komórki (cell). Wygląda to tak:

$ exiftool -X -xmp:all dsc00001.jpg

<rdf:Description rdf:about='dsc00001.jpg'
xmlns:et='http://ns.exiftool.ca/1.0/' et:toolkit='Image::ExifTool 8.06'
xmlns:XMP-rdf='http://ns.exiftool.ca/XMP/XMP-rdf/1.0/'
xmlns:XMP-cell='http://ns.exiftool.ca/XMP/XMP-cell/1.0/'>
<XMP-rdf:About> </XMP-rdf:About>
<XMP-cell:Mcc>260</XMP-cell:Mcc>
<XMP-cell:Mnc>3</XMP-cell:Mnc>
<XMP-cell:Lac>30203</XMP-cell:Lac>
<XMP-cell:Cellid>32930160</XMP-cell:Cellid>
<XMP-cell:TagR>5</XMP-cell:TagR>
<XMP-cell:Cgi>260-3-30203-32930160</XMP-cell:Cgi>
</rdf:Description>
</rdf:RDF>

Można powyższe zamienić na współrzędne wpisując:

http://www.opencellid.org/cell/get?mcc=260&mnc=3&cellid=32930160&lac=30203

Ale wyniki jest tylko przybliżony...

Teraz w instrukcji telefonu jest, że GPS sam się wyłącza jak nie jest potrzebny. A jak go włączyć na zicher? Zainstalowałem TrekBuddy i używam go jako loggera. Efekt uboczny jest taki, że GPS działa non-stop [zapewne da się to także osiągnąć inaczej].

Zdjęcia zrobione w takim trybie są już oznaczone precyzyjnie:

exiftool -X  j10i10_1103007.jpg | grep GPS
xmlns:GPS='http://ns.exiftool.ca/EXIF/GPS/1.0/'
<GPS:GPSVersionID>2.2.0.0</GPS:GPSVersionID>
<GPS:GPSLatitudeRef>North</GPS:GPSLatitudeRef>
<GPS:GPSLatitude>54 deg 26' 22.62"</GPS:GPSLatitude>
<GPS:GPSLongitudeRef>East</GPS:GPSLongitudeRef>
<GPS:GPSLongitude>18 deg 33' 2.50"</GPS:GPSLongitude>
<GPS:GPSAltitudeRef>Above Sea Level</GPS:GPSAltitudeRef>
<GPS:GPSAltitude>41 m</GPS:GPSAltitude>
<GPS:GPSMapDatum>WGS-84</GPS:GPSMapDatum>
<Composite:GPSAltitude>41 m Above Sea Level</Composite:GPSAltitude>
<Composite:GPSLatitude>54 deg 26' 22.62" N</Composite:GPSLatitude>
<Composite:GPSLongitude>18 deg 33' 2.50" E</Composite:GPSLongitude>
<Composite:GPSPosition>54 deg 26' 22.62" N, 18 deg 33' 2.50" E</Composite:GPSPosition>

Natomiast zapisywany przez TrekBuddy ślad w formacie NMEA jest do kitu. Na blogu blog.4zal.net znalazłem informację, że w istocie: ,,osoby chcące skorzystać z logowania, a posiadające GPS wbudowany w komórkę powinny uważać na logowanie w formacie NMEA. W przypadku niektórych telefonów (np. Sony Ericsson) tak wygenerowane dane będą niekompletne''.

Zatem przestawiłem format na GPX i dziś zrobiłem pierwszy test. Poszedłem do Oliwy [na wywiadówkę] i z powrotem z telefonem i Garminem w kieszeni.

Ślady są tutaj. Niebieski to Elm, czerwony -- Legend. Hmm....

Dopisane 11 stycznia 2011: Dłuższe hmmmmmm jest takie, że każde zdjęcie kosztuje 25 gr. Wybierając opcję geotagowania wyświetla się komunikat, że to może kosztować. No więc nie tylko może ale kosztuje (Orange). Zresztą jak ustaliliśmy wyżej pozycja ustalana domyślnie przez telefon jest taka sobie dokładna, a ponieważ Elm ma wbudowany odbiornik GPS, to przecież teoretycznie mógłby wstawiać współrzędne bez łączenia się z centralą... Ale nie ma tak, trzeba płacić nawet jak się nie korzysta -- jak się wyłączy opcję dodawania współrzędnych, to zdjęcia nie są geotagowane. Jednym słowem kolejna wielka lipa...

Nawet specjalnie tego nie żałuję, bo marny ten GPS -- jak startuje 5 minut to jest szybko.