sobota, 30 kwietnia 2011

Wycieczka do Węgier i Parpar

W nawiązaniu do poprzedniego wpisu.

Zachęcony relacjami Szlakiem kamieni i dworów..., Słupki graniczne WMG, i Węgry-kamienie graniczne WMG też się wybrałem obejrzeć ww. słupy graniczne d. Wolnego Miasta Gdańska.

Plany miałem ambitne: chciałem odnaleźć kamienie 7--21 k. Węgier plus 1--5 niedaleko Białej Góry. Najpierw ustaliłem ich położenie posługując się mapą i metodą opisaną w poprzednim wpisie. Rezultat jest tutaj (niebieska trasa/zielone pinezki). Wyznaczyłem też trasę (używając Gmaps pedometer) rozpoczynającą i kończącą się Tczewie.

Jak zwykle nie poszło zgodnie z planem. Planowo to było do Gościszewa. Później zjechałem z trasy i nie w tym miejscu dojechałem do Nogatu. W ,,normalnym'' terenie nie miałoby to większego znaczenia ale marsz (z rowerem -- do momentu, w którym stwierdziłem, że to nie ma sensu) po brzegu Nogatu naprzeciwko Pogorzałej Wsi okazał się niezwykle uciążliwy: bardzo stroma skarpa i mnóstwo powalonych gałęzi i przeszkadzających krzaków. Straciłem dużo czasu zanim dotarłem do słupka nr 7. GPS wskazywał jego pozycję z dokładnością do 30 m. Podobnie było ze słupem nr. 8, który też odnalazłem bez problemów. Pozostałem słupki odpuściłem wobec znaczącego obsuwu czasowego w stosunku do planowanego harmonogramu no i miałem już serdecznie dość łażenia po krzakach.

Kierując się na Białą Górę znowu fatalnie pomyliłem drogę. Do tego, to co na mapie jest drogą publiczną w tzw. realu okazało się drogą nawet nie szutrową a piaszczystą. W wielu miejscach nie szło jechać i trzeba było iść... Teren trzeba przyznać odludny i dziki. Ale żeby nie było idealnie to: tutajtutaj smrodzą (to drugie wygląda na mieszalnie pasz lub cóś w tym stylu)...

W związku z obsuwem czasowym słupki 1--5 także odłożyłem na później i z Białej Góry pojechałem bez zatrzymywania się (pod zimy i przeciwny wiatr) do Tczewa.

Trasa jest tutaj. Zielone pinezki to słupki graniczne wg mapy 2079_Wernersdorf_1939.jpg ustalone za pomocą procedury opisanej w poprzednim wpisie. Czerwone to miejsce zrobienia zdjęcia...

PS: jeżeli planuje się podróż PKP z rowerem nie należy klikać na rozkładzie w pole `Przewóz rowerów', bo wtedy wyświetlona zostanie tylko część pociągów, którymi można jechać z rowerem. Np. pociągi osobowe (zwykle/zawsze? składy typu EN57) Przewozów Regionalnych z definicji zabierają rower a wg. rozkładu nie. Rozkład rozklad-pkp.pl nie uwzględnia też połączeń SKM (a SKM kursuje m-dzy Tczewem a Słupskiem).

PS2: moja trasa jest w okolicach Parpar delikatnie mówiąc do kitu... Teraz już nawet nie wiem dlaczego tak to sobie ,,zaplanowałem''...

środa, 27 kwietnia 2011

Messtischblaetter

Tyle wiem na temat co jest na wikipedii. Mapy są dostępne np. tutaj. Weźmy jako przykład Wernersdorf, która zawiera m.in. okolice Piekła i Białej Góry.

Ściągnąłem oba wyżej wymienione pliki 2079_Wernersdorf_1939_jpg.map oraz 2079_Wernersdorf_1939.jpg.

Po to aby wprowadzić współrzędne interesujących mnie punktów do GPSa posłużyłem się programem OziExplorer (w wersji Trial). Po załadowaniu pliku 2079_Wernersdorf_1939_jpg.map w pasku na na górze okna ukazują się współrzędne punktu, na którym znajduje się wskaźnik myszy. W notacji mieszanej, tj. przykładowo 53° 54,918' oraz 18° 53,170 minut (mieszanej bo nie ma sekund tylko dziesiąte części minuty). Pewnie można to przestawić, ale ja spisałem jak jest i zamieniłem na układ 100% dziesiętny używając skryptu:


#!/usr/bin/perl
use Geo::Coordinates::DecimalDegrees;
my @dms = @ARGV ;
print STDERR "*** dms2decimal deg min sec ... deg/min/sec niekoniecznie sa liczbami calkowitymi....\n";
print STDERR "*** każde trzy liczby w linii poleceń są traktowane jako deg min sec *** \n";

while (@dms) {
$deg = shift @dms ; $min = shift @dms ; $sec = shift @dms ;
printf "%f %f %f = %.6f\n", $deg, $min, $sec, dms2decimal($deg, $min, $sec);
}
## przykład:
dms2decimal.pl 53 54.918 0 18 53.170 0
> 53.000000 54.918000 0.000000 = 53.915300
> 18.000000 53.170000 0.000000 = 18.886167

Czyli 53° 54,918'/18° 53,170 to 53.915300/18.886167 w notacji dziesiętnej. Nb. wszystkie on-line serwisy do konwersji deg→dms, które oglądałem, wymagają całkowitych wartości stopni/minut/sekund, a Geo::Coordinates::DecimalDegrees nie. Inna sprawa czy to co podaje jest poprawne. Na 100% pewności nie mam ale chyba tak.

Na mapie Google wygląda to tak.

Wg mapy Wernersdorf i OziExplorera w tym miejscu jest środek mostu nad Nogatem na drodze nr 605 w Białej Górze, czyli ten punkt.

Różnica dla długości i szerokości geograficznej wynosi odpowiednio 53.915300 - 53.913498 = 0,001802 oraz 18.886167 - 18.883739 = 0,002428.

W odpowiedź na pytanie czy ja coś poplątałem czy ktoś inny na razie nie będę się wgłębiał. Zamiast tego to co odczytam w OziExplorerze skoryguję (na razie) za pomocą wyżej wyznaczonych poprawek.

OziExplorer się instaluje w Fedorze, się uruchamia za pomocą wine, ale beznadziejnie kończy pracę komunikatem o brakującej pamięci...

wtorek, 19 kwietnia 2011

Zmiana wyglądu ikony w Google maps

W bibliotece, z której korzystam do wizualizowania plików GPX na google maps, do wyświetlenia punktu (czyli elementu wpt) wykorzystywana jest funkcja GPXParser.prototype.CreateMarker:


GPXParser.prototype.CreateMarker = function(point)
{
var lon = parseFloat(point.getAttribute("lon"));
var lat = parseFloat(point.getAttribute("lat"));
// ... ... ...
var marker = new GMarker(new GLatLng(lat,lon));
// ... ... ...
}

W powyższym symbol // ... ... ... oznacza pominięte fragmenty funkcji.

Wszystkie ikony dla elementów wpt są oznaczone standardową dużą czerwoną pinezką. Ja chcę, żeby moja pinezka ,,reagowała'' na obecność elementu type, który według schematu GXP, określa typ punktu. Przykładowo miejsce odwiedzone będę oznaczał jako:


<wpt lat="54.071729" lon="18.446817"><ele/>
<name>Skarszewy</name>
<type>visited</type>
<extensions><html>Skarszewy</html></extensions></wpt>

Tak oznaczone miejsca mają być wyróżniane za pomocą niebieskiej ikony. Pozostałe będą oznaczane czerwoną:


GPXParser.prototype.CreateMarker = function(point)
{
var lon = parseFloat(point.getAttribute("lon"));
var lat = parseFloat(point.getAttribute("lat"));

var wpType = point.getElementsByTagName("type")[0] ; // czy istnieje element type?
var wpTypeTxt = "?";

if ( wpType ) { wpTypeTxt = wpType.firstChild.nodeValue; } // jeżeli tak przypisz wartość

// ... ... ...
// zmiana wyglądu, skopiowane z: http://kody.wig.pl/tag/gmarker/
var cIcon = new GIcon();

// Ikony do pobrania z http://sites.google.com/site/gmapicons/
// umieszczam w katalogu '/icons_/'
if ( wpTypeTxt == "visited" ) { cIcon.image = '/icons_/mm_20_blue.png'; }
else { cIcon.image = '/icons_/mm_20_red.png'; }

cIcon.shadow = "/icons_/mm_20_shadow.png";
var marker = new GMarker(new GLatLng(lat,lon), cIcon );

cIcon.iconSize = new GSize(12, 20);
cIcon.shadowSize = new GSize(22, 20);
cIcon.iconAnchor = new GPoint(6, 20);
cIcon.infoWindowAnchor = new GPoint(5, 1);

// ... ... ...
}

Wynik można obejrzeć tutaj.

poniedziałek, 18 kwietnia 2011

Xetex i PDF: kilka problemów

Dawno temu zrobiłem systemik formatujący pewien plik XML do postaci pliku PDF. Ten cel jest realizowany na dwa pas. Najpierw skrypt Perla zamienia XML na plik TeXa, który to plik jest zamieniany pdfTeXem na dokument PDF. 10 lat działało i nagle ktoś dostrzegł, że zakładki (bookmarks) są nie po polsku. No nie są, bo kiedyś było to trudne do wykonania... A teraz faktycznie nie jest trudne -- wystarczy zamienić kodowanie z jednobajtowego na UTF-8.

Po tej właśnie linii zaatakowałem problem, tj. 1) zmieniłem kodowanie w generowanym pliku TeXowym z ISO8859-2 na UTF-8 oraz, w związku z tym 2) zmieniłem pdfTeXa na XeTeXa. Jak zwykle nie obyło się bez problemów:

  1. Elementy nawigacyjne są definiowane inaczej w XeTeXu niż w pdfTeXu, więc za pierwszym razem bookmarki zniknęły w ogóle. Gdybym swoje makra pisał w LaTeXu problem by nie istniał, ale w plain TeXu zwykle trzeba wszystko samemu... Tym razem na szczęście z pomocą google znalazłem działające gotowe makra pn. navigator.

  2. Kolory też są inaczej definiowane. Ja to zrobiłem tak:


    \def\cmykRed{0 1 1 0}
    \def\setcolor#1{\special{color push cmyk #1}}
    \def\endcolor{\special{color pop}}

    \setcolor\cmykRed \bf Cośtam-coś-tam-na-czerwono \endcolor
  3. Miłą cechą XeTeXa jest to, że można korzystać z fontów systemowych. Wymyśliłem zatem, że dokument będzie składany fontem TeX Gyre Heros w odmianie wąskiej. Można to zadeklarować następująco:


    %% Podstawowym fontem jest TeX Gyre Heros w odmianie `Condensed'
    %% cf. http://www.gust.org.pl/projects/e-foundry/tex-gyre/heros
    \def\MainFont{TeX Gyre Heros Cn}\def\MainXFont{TeX Gyre Heros}
    \font\rm = "\MainFont:mapping=tex-text"
    \font\bf = "\MainFont/B:mapping=tex-text"
    \font\it = "\MainFont/I:mapping=tex-text"
    %% W stopniu 8pt zamiast odmiany wąskiej używamy normalnej %%
    \font\eightrm = "\MainXFont:mapping=tex-text" at 6.25pt
    \font\eightbf = "\MainXFont/B:mapping=tex-text" at 6.25pt
    \font\eightit = "\MainXFont/I:mapping=tex-text" at 6.25pt

    Zapis mapping=tex-text oznacza, że font ,,reaguje'' na TeXowe ligatury, m.in -- oraz --- zamieniając je (odpowiednio) na półpauzę i pauzę. Zapis /B włącza odmianę grubą a /I kursywę...

  4. I gdy już wszystko było prawie gotowe nieopatrzenie zajrzałem do pliku .log a tam cała masa wpisów:


    Invalid UTF-8 byte or sequence at line 22 replaced by U+FFFD.

    Czyli Perl jednak sygnalizował coś brzydkiego wypisując:


    Wide character in print at ....

    Mój skrypt czyta plik XML, parsuje go z wykorzystaniem XML::Parser, który to -- jak powszechnie wiadomo -- wypluwa dokument w UTF-8. Więc czemu w efekcie dostaję błędnie kodowany plik?? Ustalenie co jest nie tak zajęło mi kilka godzin a sprawa sprowadzała się do dodania:


    open (OUT, ">:utf8", "plik-out") # zamiast open (OUT, ">plik-out")

    zamiast open (OUT, ">:utf8"... można wpisać:


    use open ":encoding(utf8)";
    use open IN => ":encoding(utf8)", OUT => ":utf8";

    Wpisanie zaś:


    use utf8 ;

    wskazuje tylko tyle, że skrypt Perla jest kodowany w UTF-8.

czwartek, 14 kwietnia 2011

Kreator przemówień

Stary dowcip sięgający czasów tzw. PRL, a może i dalej. W oryginale, który znam dotyczył drętwych mów działaczy PZPR...

Przykładowo w tabeli poniżej należy połączyć dowolną frazę z kolumny 1 z dowolną frazą z kolumn 2--4. W ten sposób powstaje tekst samograj. Zwykle wierszy jest 10, co daje około 6,5 tys różnych zdań. Przy 5 wierszach jest tego dużo mniej...

1 2 3 4
Kaczyński swoim seansem nienawiści pokazał chamstwo i bezczelność prowadząc do wojny domowej.
Hoffman podczas tego haniebnego spędu przekroczył granicę zbydlęcenia pokazując swoje prostactwo moralne.
Macierewicz tam na Krakowskim Przedmieściu szkodzi dobremu wizerunkowi Polski podpalając Polskę i dzieląc Polaków.
Brudziński mówiąc te dyrdymały bzdury i wypociny podnosi rękę na demokratyczny rząd , powinien trafić do szpitala psychiatrycznego.
Ziobro oczerniając i obrzucając błotem premiera zachowuje się jak nazista schodząc poniżej poziomu dna wyznaczonego przez Kempę.

Powyższy kreator przemówień aktywisty partii rządzącej znalazłem dziś w Sieci (reklamowany jako kreator przemówień marszałka S. Konstantego Myszkiewicza-Niesiołowskiego).

Gotowy plik z frazami do generatora jest tutaj. A tu skrypt perla generujący przemówienie o zadanej objętości. Przykładowo:


## 15 zdaniowy news do pokazania w `TuskVaselinaNetwork':
perl cliche.pl cliche-PO.txt -zdania 15

co daje:


Brudziński swoim seansem nienawiści przekroczył granicę zbydlęcenia
podpalając Polskę i dzieląc Polaków. Macierewicz mówiąc
te dyrdymały bzdury i wypociny przekroczył granicę
zbydlęcenia , powinien trafić do szpitala psychiatrycznego.
Ziobro oczerniając i obrzucając błotem premiera pokazał
chamstwo i bezczelność , powinien trafić do
szpitala psychiatrycznego. Macierewicz tam na Krakowskim Przedmieściu
pokazał chamstwo i bezczelność pokazując swoje prostactwo
moralne. Macierewicz mówiąc te dyrdymały bzdury i
wypociny podnosi rękę na demokratyczny rząd ,
powinien trafić do szpitala psychiatrycznego. Ziobro mówiąc
te dyrdymały bzdury i wypociny podnosi rękę
na demokratyczny rząd prowadząc do wojny domowej.
Brudziński oczerniając i obrzucając błotem premiera zachowuje
się jak nazista schodząc poniżej poziomu dna
wyznaczonego przez Kempę. Kaczyński tam na Krakowskim
Przedmieściu zachowuje się jak nazista schodząc poniżej
poziomu dna wyznaczonego przez Kempę. Macierewicz tam
na Krakowskim Przedmieściu szkodzi dobremu wizerunkowi Polski
schodząc poniżej poziomu dna wyznaczonego przez Kempę.
Hoffman oczerniając i obrzucając błotem premiera szkodzi
dobremu wizerunkowi Polski podpalając Polskę i dzieląc
Polaków. Hoffman swoim seansem nienawiści podnosi rękę
na demokratyczny rząd pokazując swoje prostactwo moralne.
Kaczyński swoim seansem nienawiści pokazał chamstwo i
bezczelność , powinien trafić do szpitala psychiatrycznego.
Ziobro swoim seansem nienawiści szkodzi dobremu wizerunkowi
Polski schodząc poniżej poziomu dna wyznaczonego przez
Kempę. Ziobro oczerniając i obrzucając błotem premiera
przekroczył granicę zbydlęcenia pokazując swoje prostactwo moralne.
Hoffman mówiąc te dyrdymały bzdury i wypociny
zachowuje się jak nazista prowadząc do wojny

Dłuższej `kongresowej' wersji:


perl cliche.pl cliche-PO.txt -zdania 500

może nie będę cytował. Za mało jest wierszy, stąd tekst pełny jest podobnie brzmiących zdań. Tekst 10 wierszowy wypada lepiej -- tu jest przykład (z czasów koalicji PSL-SLD) jak ktoś nie wierzy.

piątek, 8 kwietnia 2011

Weather station

The unit I have bought is Termometerfabriken Viking 02049--a clone of Fine Offset Electronics WS 2080 which in turn is a newer version of the well known WS 1080/1090 models. This weather station measures wind speed and direction, outside temperature and humidity, inside temperature and humidity, rainfall and barometric pressure. It is equipped with 4 outside sensors namely: a thermo-hygrometer (THS), a wind direction sensor, a wind speed sensor, and a rain gauge. Only the temperature and humidity sensor is equipped with radio transmitter unit, so wind & rainfall sensors are connected to THS with telephone cables.

I have decided not to follow mounting as described in the manual. I put THS inside my wooden Stevenson screen which I have built some time ago and which I consider much better than the plastic ersatz included with the station. A rainfall sensor is mounted nearby. A real problem is the wind sensors. I plan to buy 30 m extension cable (original cable is only 2,5 m long) and mount the sensor at the roof of my flat. Complicated, but there are no other viable alternatives :-)

The software included is of no use to me as well. Fortunately there are free alternatives: wview and pywws. I have started with the first one not being aware of pywws existence.

Wview installs w/o problems in Lenny:


apt-get install wview

but fails to work:


/etc/init.d/wview start
/etc/init.d/wview: line 57: 1934 Illegal instruction $WVIEWD_BIN
htmlgend[1936]: &1302287846673> : system init failed!
wvalarmd[1937]: &1302287846719> : wviewd process is not running - aborting!
wvcwopd[1938]: &1302287846764> : wviewd process not running - aborting!
wvhttpd[1939]: &1302287846807> : wviewd process no running - aborting!
wviewftpd[1940]: &1302287846850> : wview daemon lock file /var/lib/wview/wviewd.pid does not exist - aborting!
wviewsshd[1941]: &1302287846896> : wviewd process not running - aborting!
wvpmond[1942]: &1302287846942> : wviewd process not running - aborting!

Looking via Google how to proceed I have found nothing except the impression that wview is not finely maintained nor top quality software. Fortunately I have discovered pywws which installs and works flawlessly.

Useful links: Personal Weather Station using BifferBoardpywwsWatson W8681 Wireless Weather Station ReviewPersonal Weather Station.

Example pages generated with pywws: www.jump.me.ukwww.lauritsnielsen.dkmy page.