wtorek, 20 grudnia 2011

Crime Story z polityką w tle w relacji z Głosu Cadyka

Historia faceta, który zrabował (bo nie ukradł) plecak + klapki wg relacji z Wybiórczej (zwanej także Głosem Cadyka):

1 sierpnia, godz. 17.45. Warszawa. 20-letni Damian K. ps. ''Koziołek'' idzie na trening. Przystaje na światłach koło przystanku tramwajowego ''Dzika''. Dostrzega trzech mężczyzn biegnących w jego kierunku.
[...]

Było tak: Damian K. kuli się na podłodze. Kopią go ''Staruch'' i ''Byku'' (tak, ze względu na posturę, określa go pokrzywdzony). Trzeci -- ''Mały'' -- nie może się dopchać.
[...]

Nie wiadomo też, dlaczego doszło do napadu. ''Koziołek'' uważa, że chcieli mu ukraść torbę, bo liczyli, że są w niej dokumenty i dowiedzą się, gdzie mieszka. To domniemania. Motyw znają jedynie oskarżeni. Jednak ''Staruch'' milczy. ''Byku'' i ''Młody'' też. Prokuratura, godząc się na dobrowolne poddanie się karze, mogłaby zażądać szczegółowych wyjaśnień od dwóch oskarżonych. Ale rezygnuje z okazji, by złamać zmowę milczenia panującą w środowisku kiboli.

Piotr Machajski/2011-12-19. Wytłuszczenia moje...

Ewidentnie zatem było ich czterech: ,,Staruch'', ,,Byku'', ,,Mały'' i ,,Młody''.

PS: mnie w tej historii najbardziej intryguje fakt że policja całego świata w sytuacji takiej jak domniemany rozbój p. Starucha przyszłaby po niego rano we trzech zamiast mobilizować batalion i zatrzymywać gościa w środku tłumu takich jak on na mieście. Czyżby zgadywali życzenia premiera? A może nie zgadywali?

PS2: przestaje też dziwić określanie GC terminem G#wno Prawda albo -- w wersji <18 lat -- Nowe Radio Erewań.

poniedziałek, 5 grudnia 2011

Kamień graniczny WMG w Matarni


#1: Selfportrait

#2: Janek H.

Za Wikipedią: Parafia św. Walentego w Gdańsku powstała na przełomie XIII/XIV wieku w kościele zbudowanym przez cystersów, do których należała aż do powstania listopadowego w 1830, po którym przeszła pod jurysdykcję diecezji chełmińskiej, a w 1993 po zmianach terytorialnych została włączona do diecezji gdańskiej. Obecny barokowo-rokokowy wystrój kościoła pochodzi z okresu po potopie szwedzkim w 1655, podczas którego kościół uległ znacznemu zniszczeniu.

Kościół jest mały i słabo widoczny od strony ulic Słowackiego/Budowlanych. Znajduje się obok niewielkiego cmentarza. Przy kościele jest kilka starych grobów. Na cmentarzu nie byłem...

Ciekawostką jest bocianie gniazdo znajdujące się na dachu kościoła.

Koło plebanii parafii św. Walentego jest wkopany słup graniczny Wolnego Miasta Gdańska. Dzisiaj tam byłem z kolegą Jankiem H. Kolega H. się wstydzi więc na zdjęciu #2 jest tylko jego ręka.

Po obejrzeniu słupa (długo nam to nie zajęło) wróciliśmy do Sopotu przez Dolinę Radości, po drodze oglądając jeszcze owocnik soplówki jeżowatej (Hericium erinaceus).

Nota bene trasa do Matarni doliną Radości jest do wykonania przez każdego, kto umie na rowerze jeździć. Można z Matarni wrócić tą samą drogą albo pojechać naokoło wzdłuż potoku Strzyży przez Matemblewo. Droga jest pokryta asfaltem za wyjątkiem fragmentu od kościoła św. Walentego do Matemblewa, przy czym w lesie wzdłuż Strzyży może być błoto i piach (ale to niewielki fragment). Poniżej plik GXP route z zaznaczonymi ciekawymi miejscami: pokaż.

sobota, 3 grudnia 2011

Ormo czuwa

Obrazek z dziś. Prawie pusta, prosta droga (konkretnie ulica Nowatorów w Gdańsku). Gość się uparł, że nauczy rowerzystów, iż powinni jechać ścieżką dla rowerów a nie jezdnią.

Na szczęście na tyle był kumaty, że nie usiłował nikogo łapać (za klapy albo coś w tym stylu), bo by jeszcze poprzewracał.

Takie rzeczy tylko w BudyńLandzie:-)

środa, 30 listopada 2011

Fedora 15 bugs

Fedora Desktop variant #1
XFce variant #1
Fedora Desktop variant #2
XFce variant #2

As I've found Gnome 3 unusable I've switch to Xfce which is much better than Gnome 3 but not perfect:

  • Freezes frequently if save session is active. This problem was solved by switching off save session feature.

  • Changes workspace layout from time to time. Most of time it displays variant #1 of the Desktop but sometimes the desktop switches to variant #2. Have no idea why. Unsolved.

  • Problems (fortunately very rarely) with The Workspace Switcher panel plugin (which allows one to switch between virtual desktops and/or display workspace layout in the panel)---number of displayed workspaces is suddenly reduced to 1 (or even 0). Unsolved as well.

Both unsolved `features' are annoying.

Finally I cannot update Fedora:


## LANG=C to switch to English
LANG=C yum update

Error: Package: ffmpeg-libs-0.6.90-0.2.rc0.fc15.i686 (@rpmfusion-free)
Requires: libx264.so.114
Removing: x264-libs-0.0.0-0.29.20110227.fc15.i686 (@rpmfusion-free)
libx264.so.114
Updated By: x264-libs-0.0.0-0.30.20110620.fc15.i686 (rpmfusion-free-updates)
Not found
You could try using --skip-broken to work around the problem

I have downgraded ffmpeg-libs (/etc/yum.conf contains exclude=ffmpeg-libs ffmpeg), otherwise I was unable to play AVI files. But sopcast insists on packages which are in conflict with my setup. In result I haven't sopcast installed.

I've been using Linux as my desktop operating system for about 12 years. I have started with Red Hat 4.0 (or 5.0) in 1989 or 1990 and since then I've stuck with Red Hat/Fedora. Actually I have never used MS Windows except version 95 (for starting DOS box) or when forced to do so. Looking back at all the Fedoras/RedHats I have used I am disappointed. Bugs were in every distributions, but with the help of Google I was able to cope with them. For the first time I cannot...

piątek, 18 listopada 2011

Problemy z updmap w TeXlive 2011

Powtórzyłem procedurę opisaną w Próbowanie fontów STIX, tj.:


otftotfm -a -e qx.enc STIXGeneral.otf STIXGeneral--qx

Powyższe generuje pliki vf/tfm/pfb w odpowiednie podkatalogi katalogu /home/tomek/.texlive2011. Uruchamia nawet program updmap, ale coś tam jest nie tak:


otftotfm -a -e qx.enc STIXGeneral.otf STIXGeneral--q
I had to round some heights by 18.0000000 units.
I had to round some depths by 3.0000000 units.
I had to round some heights by 18.0000000 units.
I had to round some depths by 3.0000000 units.
Config file: "/home/tomek/.texlive2011/texmf-config/web2c/updmap.cfg"
/home/tomek/.texlive2011/texmf-config/web2c/updmap.cfg unchanged. Map files not recreated.
/opt/tex/bin/updmap: Updating ls-R files.
otftotfm: warning: `updmap --nomkmap --enable Map \
/home/tomek/.texlive2011/texmf-var/fonts/map/dvips/lcdftools/lcdftools.map;
updmap >/dev/null 2>&1' exited with status 1;
otftotfm: warning: run it manually to check for errors

Powtarzam zatem:


$ updmap --nomkmap --enable Map /home/tomek/.texlive2011/texmf-var/fonts/map/dvips/lcdftools/lcdftools.map
updmap --nomkmap --enable Map /home/tomek/.texlive2011/texmf-var/fonts/map/dvips/lcdftools/lcdftools.map
Config file: "/home/tomek/.texlive2011/texmf-config/web2c/updmap.cfg"
/home/tomek/.texlive2011/texmf-config/web2c/updmap.cfg unchanged. Map files not recreated.
/opt/tex/bin/updmap: Updating ls-R files.
## nie wiem o co chodzi, ale jedziemy dalej
##
$ updmap
updmap
Config file: "/home/tomek/.texlive2011/texmf-config/web2c/updmap.cfg"
.. .. ..
ERROR: The following map file(s) couldn't be found:
/home/tomek/.texlive2011/texmf-var/fonts/map/dvips/lcdftools/lcdftools.map
Did you run mktexlsr?

updmap nie może zatem odszukać pliku lcdftools.map zadeklarowanego w pliku ~/.texlive2011/texmf-config/web2c/updmap.cfg

Próby ustalenia co jest nie tak zawiodły:


kpsewhich -expand-path '$TEXFONTMAPS'

Wydruk z powyższego zawiera ~/.texlive2011/texmf-var/fonts/map/dvips/lcdftools a wykonanie mktexlsr nie pomaga.

Skopiowałem zatem lcdftools.map do katalogu systemowego /usr/local/texlive/2011/texmf-var/fonts/map/dvips/updmap. Potem


## jako root
mktexlsr ;
## jako zwykły użytkownik, bo pliki tfm/vf/pfb są w moim katalogu domowym
updmap

Teraz działa. Wygląda na błąd w TL 2011. Znalazłem nawet w google radę zdesperowanego użytkownika, który radził wywalenie updmap.

Słuszną linię ma nasza partia

Podatki w górę, świadczenia budżetowe w dół, ,,bierzemy się do roboty'' z Nowakiem i Arłukowiczem, no i najważniejsze -- 300 PLN/łeb funkcjonariusza PP (Policji Państwowej) od lipca przyszłego roku.

Mam tylko jedno pytanie czy te 300 PLN to nie za mało i czy od lipca to nie za późno?

świnie
Snowball (pierwszy od prawej)

Dopisane 20 listopada 2011: Teraz jest moda na zwiększające klikalność zwykle kretyńskie mini-ankiety dodawane obok tekstu. To ja też dodam, tyle, że taką fake:

Dlatego ministrowie, niezależnie od dziedziny, jaką będą się zajmowali, będą musieli precyzyjnie planować i zdawać raporty...

Kto powiedział powyższe: 1. Premier Nikodem Dyzma w powieści Kariera Nikodema Dyzmy Tadeusza Dołęgi-Mostowicza; 2. Premier Donald Tusk w expose wygłoszonym 18. listopada 2011 r.; 3. Obaj wymienieni w pytaniach 1 i 2; 4. Świnia Snowball w powieści Animal Farm George'a Orwella.

wtorek, 8 listopada 2011

Data sets for statistical education

IMHO there is acute lack of interesting data sets for statistical education purposes, particularly cross-sectional in nature and not related to biology/medicine/astronomy. The domains I am looking for are management, demography and economics but sport is OK too as many students are interested in sport.

I agree there is a lot of data published (mainly) by various government agencies but its almost 100% time series data. There are many test datasets too (like UC Irvine Machine Learning Repository), but they are usually boring, often categorical and short:-)

To remedy a little the lack of good data I compiled myself a few databases and I intend to add more in the future. At present my repository consists of 4 datasets concerning: -- 1100 or so German WW2 U-boots; -- 2200 or so Titanic passangers/crew members -- 1200 or so Rugby Union players who took part in RWC 2011 and RWC 2007 tournaments.

The repository is available at my github account.

niedziela, 6 listopada 2011

Zmarł John McCarthy

Aż wstyd, że dopiero dziś się dowiedziałem.

24. października br. zmarł John McCarthy, twórca języka LISP (1958 r.), drugiego po Fortranie języka wysokiego poziomu powszechnie używanego do dziś. Ja też -- nie chwaląc się -- czasami go używam, choć go prawie nie znam:


(defun My-count-words (&optional begin end)
"count words between BEGIN and END (region); if no region defined,
count words in buffer"
(interactive "r")
(let ((b (if mark-active begin (point-min)))
(e (if mark-active end (point-max))))
(message "Word count: %s" (how-many "\\w+" b e))))

Nieoficjalna nazwa LISPa, to Lots of Irrelevant Silly Parentheses.

środa, 2 listopada 2011

Ostatnie prosta

Dziś przejeżdżając skromne 30 km, dociągnąłem do 149,925 km życiowego przebiegu... Zostało zatem zaledwie 80 km do okrągłej liczby 150 tys...

poniedziałek, 24 października 2011

How to import content from Blosxom to google Blogger

I have decided to give a try to Google Blogger service. I am an old dinosaur used to command line and tired with mouse and menus but as there is GoogleCL I am not scare. The problem is with my old posts---there is no way to post backdated blog entries with GoogleCL. A problem...

Fortunately there is export/import features on Blogger: one can backup blog content and/or upload it back to Google. In particular to import posts (and comments) into a blog, one have to click Import Blog from the blog's Settings. Next one have to select appropriate file and fill out the word verification beneath. The Blogger data format is Atom. So, to successfully import my old Blosxom entries I have to convert them to Atom.

I have made a few test entries and export them to check how the data looks like. Pretty wired but most of the content is irrelevant as it is concerned with formatting (css styles and such stuff is included). Also as I had comments disabled at my previous blog the problem is further simplified.

I have consulted Atom schema and tried with the following:


<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"
xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/"
xmlns:georss="http://www.georss.org/georss"
xmlns:gd="http://schemas.google.com/g/2005"
xmlns:thr="http://purl.org/syndication/thread/1.0">';

<id>tag:blogger.com,1999:blog-1928418645181504144.archive</id>
<updated>2011-10-22T12:34:14.746-07:00</updated>
<title type='text'>pinkaccordions.blogspot.com</title>
<generator version='7.00' uri='http://www.blogger.com'>Blogger</generator>

The meaning of the elements should be obvious. The last element (generator) is required by Blogger import facility, otherwise error message is returned.

According to the schema inside feed element there is zero or more entry elements:


<entry>
<id>ID</id>
<published>DATE</published>
<updated>DATE</updated>
<category scheme="http://schemas.google.com/g/2005#kind" term="http://schemas.google.com/blogger/2008/kind#post"/>

<!-- tags, each as value of attribute `term' of element category -->
<category scheme='http://www.blogger.com/atom/ns#' term='tag1'/>
<category scheme='http://www.blogger.com/atom/ns#' term='tag2'/>
<title type='text'>title</title>
<content type='html'>post content ... </content>
</entry>

There is a final </feed> to guarantee that XML file is well formatted.

I have assumed the only important feature of id element is that it's content should be unique. I have decided to use MD5sum of the post content as IDs to guarantee that.

Finally, my old Blosxom-compatible entries looks similar to the example below:


<?xml version='1.0' encoding='iso-8859-2' ?>
<html xmlns="http://www.w3.org/1999/xhtml"><head>
<title>Przed finałami RWC 2011</title>
<!-- Tags: rwc2011,rugby,francja,polsat-->
</head><body><!-- ##Published : 2011-10-20T07:20:26CEST ##-->


<p>W RWC 2011 zostały już tylko dwa mecze: jutro (piątek), o trzecie miejsce oraz

So it was extremly easy to extract title, tags and publication date and format Atom-compliant XML file with the following Perl script:


#!/usr/bin/perl
# Variant of Blosxom to Blogger conversion
# 2011/10 t.przechlewski
#
use Digest::MD5 qw(md5_hex);

print '<?xml version="1.0" encoding="UTF-8"?>
<!-- id, title/updated jest wymagane w elementach feed/entry reszta opcjonalna -->
<!-- wyglada na minimalne oznakowanie -->
<feed xmlns="http://www.w3.org/2005/Atom"
xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/"
xmlns:georss="http://www.georss.org/georss"
xmlns:gd="http://schemas.google.com/g/2005"
xmlns:thr="http://purl.org/syndication/thread/1.0">';

print "<id>tag:blogger.com,1999:blog-1928418645181504144.archive</id>";
print "<updated>2011-10-22T12:34:14.746-07:00</updated>";
print "<title type='text'>pinkaccordions.blogspot.com</title>";
print "<generator version='7.00' uri='http://www.blogger.com'>Blogger</generator>\n";

foreach $post_file (@ARGV) {

my $post_title = $post_content = $md5sum = $published = '';
my @post_kws = ();
my $body = $in_pre = 0;
my $rel_URLs = 0;

print STDERR "\n$post_file opened!\n";
open POST, "$post_file" || die "*** cannot open $post_file ***\n";

while (<POST>) {
chomp();

if (/<title>(.+)<\/title>/) {$post_title = $1 ; next ; }
if (/<!--[ \t]*Tags:[ \t]*(.+)[ \t]*-->/) {$tags = $1 ; next ; }

if (/<\/head><body>/) {
$body = 1 ;
## </head><body><!-- ##Published : 2011-10-20T07:20:26CEST ##-->
if (/##Published[ \t]+:[ \t]+([0-9T\-\:]+).+##/) { $published = $1; }
print STDERR "Published: $published\n";
next;
}

if (/<\/body><\/html>/) { $body = 0 ; next }

if ( $body ) {
## sprawdzam `przenosnosc URLi':
if (/src[ \t]*=/) {
if (/pinkaccordions.homelinux.org/ || !(/http:\/\// ) ) { $rel_URLs = 1; }
}
## zawartość pre nie powinna być składana w jednym wierszu:
if (/<pre>/) { $in_pre = 1; $post_content .= "$_\n"; next ; }
if (/<\/pre>/) { $in_pre = 0; $post_content .= "$_ "; next ; }
if ( $in_pre ) { $post_content .= "$_\n"; }
else {
$post_content .= "$_ "; # ** musi być ze spacją **
}
}
}

### ### ###

if ($published eq '') {
warn "*** something wrong with: $post_file. Not published? Skipping....\n" ;
close(POST);
next ;
}
if ( $tags eq '' || $post_title eq '' ) {
die "*** something wrong with: $post_file (tags: $tags/title: $post_title)\n"; }
if ($rel_URLs) { die "*** suspicious relative URIs: $post_file\n"; }

$post_content =~ s/\&/&amp;/g;
$post_content =~ s/</&lt;/g;
$post_content =~ s/>/&gt;/g;

print STDERR "Title: $post_title Tags: $tags\n";

@post_kws = split /,/, $tags;
$md5sum = md5_hex($post_content);
print STDERR "MD5sum: $md5sum\n";

print "<entry>";
print "<id>tag:blogger.com,1999:post-$md5sum</id>";
print "<published>$published</published>";
print "<updated>$published</updated>";
print '<category scheme="http://schemas.google.com/g/2005#kind" term="http://schemas.google.com/blogger/2008/kind#post"/>';

## tags:
foreach $k (@post_kws) { print "<category scheme='http://www.blogger.com/atom/ns#' term='$k'/>"; }

print "<title type='text'>$post_title</title>";
print "<content type='html'>$post_content</content></entry>";

close(POST);

}

print "</feed>";

The minor problem was the default formatting of <pre>...</pre> which I use to show code snippets. I have to preserve line breaks (cf. $in_pre in the above Perl script) of pre element content as well as have to add the following to the default CSS styles (it is possible to modify CSS via Project →Template Designer →Advanced →Add CSS1)


pre { white-space:nowrap; font-size: 80%; }

To convert simply run script as follows:


perl blogspot-import.pl post1 post2 post3.... > converted-posts.xml

The above described script can be downloaded from here.

1In Polish: Projekt →Projektant szablonów →Advanced →Dodaj Arkusz CSS

czwartek, 20 października 2011

Przed finałami RWC 2011

W RWC 2011 zostały już tylko dwa mecze: jutro (piątek), o trzecie miejsce oraz w niedzielę finał Nowa Zelandia vs Francja. Oba na kanałach sportowych Polsatu. A więc finał jak w pierwszym turnieju i wynik też zapowiada się podobny.

Półfinał Francja vs Walia to było shame on Wales. Byli lepsi za wyjątkiem kopania z karnych. Z bodajże 5 kopnęli 1 (a przegrali 8:9) trzy razy zmieniając kopacza. Temu trzeciemu w pierwszej i ostatniej jego próbie w 75 min z 50 metrów prawie się udało (piłka przeleciała ciut pod poprzeczką).

Do tego sędzia usunął Walijczyka za tzw. tip tackle (przykład, po polsku wysoka szarża) już w 20 min, tj. prawie godzinę Walia grała w 14 przeciw 15. Nb. Francuz spadł na łeb, ale w dużym stopniu było to unintentional więc wielu ocenia decyzję sędziego jako pochopną... Pozostał niesmak... Francja nie zagrała jednego dobrego meczu a jest w finale.

środa, 19 października 2011

Completely plain emails in Thunderbird

To switch Thunderbird (version 7.*) to compose mails in plain text (completely plain emails) go to Edit → Preferences → Advanced → Config Editor (in Polish: Edycja → Preferencje → Zaawansowane → Edytor Ustawień) and set both mail.html_compose and mail.identity.default.compose_html to false.

BTW according to the Thunderbird documentation: When you write a message in Thunderbird, you use either an HTML editor or a plain text editor. If you use an HTML editor, then you can send the message in HTML, plain text, or both. If you use a plain text editor, then you can only send the message in plain text. You usually specify which type of editor to use by identity. In your account settings, on the Composition and Addressing page, either check or clear the checkbox: "Compose messages in HTML format". Unfortunately there is no such a checkbox in version 7 of TB, or it is hidden perfectly...

In order to temporarily shift between plain-text and HTML editors hold the SHIFT key while clicking the Compose (or Replay) buttons.

wtorek, 18 października 2011

Fragment ścieżki dźwiękowej filmiku z YT

Poniższe operacje miały na celu wykonanie (oryginalnego) dzwonka do telefonu.

Po pierwsze, zamieniłem plik z YToube na mp3 korzystając z serwisu www.flv2mp3.com. Rezultat konwersji ściągnąłem ,,do siebie''.

Po drugie, za pomocą ffmpeg wyciąłem pierwsze 8 sekund zaczynając od 2 sekundy:


ffmpeg -ss 00:00:02 -t 8 -i plik.mp3 -acodec copy -vcodec copy plik-8s.mp3

koniec

piątek, 14 października 2011

Zmarł Dennis Ritchie

Umarł Dennis Ritchie (9 października). Współtwórca systemu Unix i języka C. Parę dni wcześniej, jak umarł Steve Jobs, który na dobrą sprawę nic nie wymyślił -- był zdolnym managerem w stylu Gatesa czy Forda (tego antysemity od samochodów), to cały świat płakał...1

W takiej sytuacji przypomniała mi się historia Biblii Gutenberga, która powinna się nazywać Gutenberga-Fusta, a nawet Fusta, bo przecież wykolegował on był Gutenberga. A jednak nie, wielcy sprzedawcy nie przechodzą do historii...

1No prawie cały... RMS nie płakał.

czwartek, 13 października 2011

Wycieczka z Tczewa do Kwidzyna przez Gniew

Z Tczewa do Kwidzyna przez Walichnowy i Gniew. W Gniewie promem na drugi brzeg Wisły. Asfalt kiepski (ale nie bardzo kiepski), do tego kawałek drogi szutrowej ale takiej, że na upartego to nawet na oponach 23mm dałoby się jechać. Bardzo mały ruch samochodowy... Ogólnie mogę polecić. Zamiast do Kwidzyna można wykręcić zurik na Tczew przez Piekło-Białą Górę.

Ślad jest tutaj.

Dictionary-style headers in LaTeX

It is pretty simple to define dictionary-style headers in LaTeX. Look at the example below:


\documentclass[twoside]{report}
\usepackage{multicol}

%%% \leftmark/\rightmark inserts appropriate \mark{...}
\usepackage{fancyhdr}
\pagestyle{fancyplain}
\fancyhead{}
\fancyhead[LE]{\normalfont \small\itshape \rightmark }
\fancyhead[RE]{\normalfont \small\itshape \leftmark }
\fancyhead[RO]{\normalfont \small\itshape \leftmark }
\fancyhead[LO]{\normalfont \small\itshape \rightmark }
\fancyfoot[CO,CE]{\thepage}

\title{Vocabulary layout -- example}

\newcommand{\Entry}[2]{\par \leavevmode
\ignorespaces\markboth{#1}{#1} #1 #2}

\begin{document}
\maketitle

\begin{multicols}{2}

\Entry{AA BB CC DD00001}{aa bb cc dd ee ff gg hh ii jj mm nn oo pp qq rr ss tt uu vx 00001 zz.}
\Entry{AA BB CC DD00002}{aa bb cc dd ee ff gg hh ii jj mm nn oo pp qq rr ss tt uu vx 00002 zz.}
\Entry{AA BB CC DD00003}{aa bb cc dd ee ff gg hh ii jj mm nn oo pp qq rr ss tt uu vx 00003 zz.}

... ... ...

\Entry{AA BB CC DD00299}{aa bb cc dd ee ff gg hh ii jj mm nn oo pp qq rr ss tt uu vx 00299 zz.}
\Entry{AA BB CC DD00300}{aa bb cc dd ee ff gg hh ii jj mm nn oo pp qq rr ss tt uu vx 00300 zz.}


\end{multicols}

\end{document}

Crucial commands are \markboth, \leftmark and \rightmark. See also Typesetting a Dictionary with LaTeX.

piątek, 7 października 2011

How to Delete Duplicate Files in Linux

There is a dedicated tool in Linux to finds duplicate files in a given set of directories.


yum install fdupes

Now, if---for example---one wants to find duplicates in the /cmn and /home/tomek directories, one have to enter the following command:


fdupes -r /cmn /home/tomek
## or prompt the user for files to preserve, deleting all others:
fdupes -r -d /cmn /home/tomek
## or preserve the first file in each set of duplicates and delete
## the others without prompting the user (terrifying dangerous:-):
fdupes -r -d -N /cmn /home/tomek

Note -r for recursive. Without -r subdirectories are not scanned. One have to remember not to remove duplicates one needs.

Fdupes searches the given paths for duplicate files. Such files are found by comparing file sizes and MD5 signatures, followed by a byte-by-byte comparison.

środa, 28 września 2011

Perl, MySQL i UTF-8

Strasznie dużo czasu zmarnowałem usiłując zmienić kodowanie w bazie MySQL na UTF i dopasować skrypty Perla do tej zmiany.

Przestawienie MySQLa na UTF-8 jest proste:


mysql -u www -p --default-character-set=utf8
CREATE database kpma CHARACTER SET utf8 COLLATE utf8_bin;

Baza kpma (użytkownika www) będzie kodowana w UTF-8. Można też określić domyślne kodowanie wszystkich baz w pliku konfiguracji MySQLa, tj. w pliku /etc/mysql/my.cnf (Debian):


[mysqld]
...
default-character-set = utf8

Trochę diagnostyki:


use kpma;
show variables like 'char%';
show table status;

select tytul from Utwor;
## jest OK -- na konsoli widać poprawne różne znaki diakrytyczne

Prawdziwa męka to było zmuszenie Perla do poprawnego traktowania danych UTF.

Trzy kluczowe dla poprawnego przetwarzania UTF sprawy to: 1) klauzula binmod (patrz poniżej); 2) klauzula use utf8 (jeżeli skrypt zawiera napisy kodowane w UTF); 3) wpisy mysql_enable_utf8/SET NAMES utf8 dotyczące MySQLa.

Szkielet skryptu Perla wygląda następująco:


#!/usr/bin/perl -w
# -*- coding: utf-8 -*- --
#
use strict;
use utf8; ## skrypt zawiera napisy kodowane UTF
use CGI qw(:standard);
use DBI;
binmode(STDOUT, ":utf8"); ## bez tego problemy z UTF

my $dbname = 'kpma'; ## Nazwa bazy
my $dbuser = 'www'; ## Nazwa użytkownika MySQL
my $dbpasswd = '??????'; ## Hasło dla $dbuser

my $dsn = "dbi:mysql:$dbname:localhost:3306";

my $dbh = DBI->connect($dsn, "$dbuser", "$dbpasswd", { ChopBlanks => 1 });
$dbh->{'mysql_enable_utf8'} = 1;
$dbh->do('SET NAMES utf8');

my $SQL = "SELECT tytul FROM Utwor WHERE id_kompozytor1 = 59 ORDER BY rok ";
##my $SQL = "SELECT nazwisko FROM Kompozytor ";

my $sth = $dbh->prepare($SQL);

$sth ->execute();

while ( my @piece = $sth->fetchrow_array() ) { print ">> @piece\n"; }

$dbh->disconnect || warn "Nie mogę zamknąć bazy $dbname\n";

Jeżeli skrypt korzysta (pobiera dane) z param() to koniecznie należy zastosować funkcję decode_utf8:


use Encode; ## param() trzeba dekodować

if (param()) {# -- Wypełniono formularz --
## http://ahinea.com/en/tech/perl-unicode-struggle.html
my $who = Encode::decode_utf8(param("kto"));

Działa nawet z dość starym Perlem:


$perl --version

This is perl, v5.10.0 built for arm-linux-gnueabi-thread-multi

Copyright 1987-2007, Larry Wall

środa, 14 września 2011

Wycieczka rowerowa do Brodnicy

W poprzednią sobotę/niedzielę (2/3 09. br.) pojechałem z Miśkiem na rowerach do Brodnicy (za Kartuzami) i z powrotem. Ślady są tutajtutaj.

Wojna za progiem...

10 maja 1941 roku Rudolf Hoess (formalnie zastępca Adolfa Hitlera, tj. człowiek który zostałby fuererem gdyby, przykładowo wodzowi coś zaszkodziło) wystartował z Augsburga a następnie wyskoczył ze spadochronem niedaleko Eaglesham w Szkocji. Został aresztowany i resztę wojny spędził w więzieniu.

Propaganda 3Rz tłumaczyła prostemu ludowi powyższy -- przyznajmy szokujący incydent (wiceprezydent Biden wyskakuje na spadochronie z F16 pod Teheranem) -- iż towarzysz partyjny Hoess zwariował (Goebbels uważał takie tłumaczenie za prostackie i niewiarygodne).

Minister finansów RP 14. 09 br (albo dzień wcześniej) palnął publicznie, ich zitiere: Rostowski przywołał na koniec swą niedawną prywatną rozmowę z ,,prezesem wielkiego polskiego banku'', pracującym w ministerstwie za czasów transformacji w Polsce. Miał on mu powiedzieć, że po takich wstrząsach gospodarczych i politycznych, jakie teraz dotykają Europę, ,,rzadko się zdarza, by po 10 latach nie było także katastrofy wojennej''. I -- jak mówił minister -- ten prezes banku dodał, że ,,poważnie się zastanawia nad tym, by uzyskać dla dzieci zieloną kartę w USA''.

I co teraz na to Ministerstwo Propagandy, Oświecenia publicznego i Informacji?

Założenie repozytorium na github

Konfiguracja Gita

  1. Konfigurowanie kluczy SSH.

    Połącz się z https://github.com/<username>. Kliknij w Account SettingsSSH Public KeysAdd another public key. Skopiuj zawartość pliku id_rsa.pub do odpowiedniego pola tekstowego.

    (Uwaga: w dokumencie Set Up Git jest opisane dokładniej jak wygenerować id_rsa.pub.)

  2. Określenie użytkownika oraz jego adresu email.


    $ git config --global user.name "Firstname Lastname"
    $ git config --global user.email "your_email@youremail.com"

  3. Konfigurowanie GitHub token.

    Pobierz tokenAccount SettingsAccount Admin. Wykonaj poniższe:


    $ git config --global github.user username
    $ git config --global github.token 0123456789yourf0123456789token

    Uwaga: zmiana hasła wymaga aktualizacji tokena.

Utworzenie repozytorium

Kliknij w https://github.com/repositories/new (poprzez DashboardNew Repository).

Stwórz plik README (zalecane)


$ mkdir ~/Hello-World
$ cd ~/Hello-World
$ git init
$ touch README

## przeslanie do lokalnego repo
$ git add README
$ git commit -m 'first commit'

## przeslanie na github
$ git remote add origin git@github.com:<username>/Hello-World.git
$ git push origin master

Przykład

Repozytorium zawierające przykłady z książki Praca magisterska ...


$ git init
Initialized empty Git repository in /home/tomek/Projekty/LaTeX/text/book-examples-git/.git/
$ git add *
$ git status
# On branch master
#
# Initial commit
#
# Changes to be committed:
...

$ git commit -m 'first commit'
$ git remote add origin git@github.com:hrpunio/pmdzpl.git
$ git push -u origin master

Repozytorium zawierające przykłady dot. akceptacji Oprogramowania Open Source


$ git init
Initialized empty Git repository in /home/tomek/Projekty/HP/hbook/aoos-data-git/.git/
$ git add *
$ git commit -m 'first commit'
$ git remote add origin git@github.com:hrpunio/aoos.git
$ git push -u origin master
$ git status

poniedziałek, 12 września 2011

Fixing /dev/ttyUSB0 permissions for GPSBabel in fedora 15 (revisited)

Having fixed Garmin-babel communication some time ago I have encountered similar problem with another GPSdevice, namely MTK's BT747 logger. This time fixing the problem was simple.

I added the following to the /etc/udev/rules.d/51-garmin.rules:


SYSFS{idVendor}=="10c4", SYSFS{idProduct}=="ea60", MODE="0666"

Vendor ID and product ID can be figured out inspecting dmesg log:


# connect the device first
dmesg | less

So my /etc/udev/rules.d/51-garmin.rules file looks like in the following listing:


SYSFS{idVendor}=="091e", SYSFS{idProduct}=="0003", MODE="0666"
SYSFS{idVendor}=="10c4", SYSFS{idProduct}=="ea60", MODE="0666"

One has to remember to stop/remove gps demon (gpsd).

środa, 31 sierpnia 2011

Pobieranie informacji o książce/płycie o podanym numerze UPC/EAN z amazon.com

Jest gotowa aplikacja służąca do katalogowania książek za pomocą czytnika kodów kreskowych opisana w artykule A Perl script catalogs books and CDs... (tu jest wersja HTML z likiem do kodu źródłowego opisanego skryptu).

Od pierwsze strzału aplikacja nie działa. Żeby w ogóle Perl chciał program wykonać należy z przodu pliku dodać wiersz:


## http://perlmeister.com/forum/viewtopic.php?t=3596&sid=59d9cb0bda64235bda70315d6e9031e8
use POE::Loop::Tk ;

Teraz działa ale nie zawsze. Ponadto program Schilli'ego w zamierzeniu obsługuje tylko kody UPC a moje książki/płyty są oznaczane kodem UPC i/lub EAN.

Kody EAN są 13 cyfrowe a UPC 12 cyfrowe. Żeby było śmieszniej amazon.com nie rozumie kodów EAN -- trzeba odpytywać jakąś europejską filię, np. amazon.co.uk.


## moja wersja procedury amzn_fetch:
sub amzn_fetch {
my($upc_or_ean) = @_;
my $resp;

my $amz_locale = 'us'; # default is US
if ( length ("" . $upc_or_ean ) > 12) {
$amz_locale = 'uk';
print STDERR "*** $upc_or_ean looks like EAN code\n";
} else {
$amz_locale = 'us';
print STDERR "*** $upc_or_ean looks like UPC code\n";
}

my $amzn = Net::Amazon->new(
token => $amz_token,
secret_key => $amz_secret,
locale => $amz_locale,
ua => $UA,
);

my $req ;
if ( $amz_locale eq 'uk') {
print STDERR "*** Fetching from $amz_locale with mode $current_amz_cat ***\n";
$req = Net::Amazon::Request::EAN->new(
ean => $upc_or_ean,
mode => $current_amz_cat,
);
} else {
print STDERR "*** Fetching from $amz_locale with mode $current_amz_cat ***\n";
$req = Net::Amazon::Request::UPC->new(
upc => $upc_or_ean,
mode => $current_amz_cat,
);
}

$resp = $amzn->request($req);

## ... itd ...

Skrypt Schilli'ego zakłada ponadto, że zapytanie zawiera UPC/EAN oraz nazwę kategorii (books, music DVD), bo tak kiedyś działał Amazon. Teraz wydaje się, że działa inaczej. Podanie np. kodu książki + kategorii music, daje błąd. Nie zamierzałem grzebać w pakiecie Net::Amazon, więc zmieniłem skrypt w ten sposób, że kategoria jest deklarowana explicite przez operatora:


my @MODES = qw(books music dvd);

## ... itd ...

## cf. http://www.ibm.com/developerworks/aix/library/au-perltkmodule2/
my $MODE = $top->Label();

my $current_amz_cat = $MODES[0]; ## domyślną jest pierwsza kategoria
foreach(@MODES) {
$MODE->Radiobutton(
-text => $_,
-value=> $_,
-variable => \$current_amz_cat,
-command => sub {
print STDERR "*** Current mode is: $current_amz_cat \n";
} )->pack(-side => 'left', -expand => '1', -fill => "x" )
}

Na wypadek gdyby operator zapomniał kliknąć w co trzeba:


if($mode eq "books") {

eval { $resp->properties()->isbn(); } ; ## bez eval będzie krasz

if ($@) {## błąd jeżeli `item' nie zawiera isbn, tj. nie jest książką...
print STDERR "*** ERROR: $@\n";
$PRODUCT->configure( -text => "NOT BOOKS TYPE ITEM / REENTER"); return 1; }
## ... itd ...

Opis książki różni się od opisu CD (np. książka ma element isbn a płyta tracks). Schilli ominął ten problem ignorując elementy specyficzne, definiując jeden typ rekordu i jedną tabelę. Ostatnia zmiana w porównaniu do skryptu Schilli'ego, to dodanie do bazy pola przechowującego opis książki/CD w formacie XML (zamiast definiowania różnych tabel dla książek, płyt CD i filmów). W zależności od typu danych ten opis XML zawiera to co trzeba (czyli specyficzne dla opisywanego obiektu atrybuty). Np:


Edward R. Tufte
Edward R. Tufte
The Visual Display of Quantitative Information
Graphics Press USA
2nd edition
2001-01-31
0961392142

]]>

Tak działającym skryptem skatalogowałem jakieś 30--40% zawartości mojej biblioteki. Stare książki nie mają kodu kreskowego. Część polskich książek jest w zasobach Amazona ale części nie ma (np. książki wyd. Readme -- i słusznie bo to prawie w całości badziewie:-)

Tu jest corpus delicti. Moja biblioteka jest tutajtutaj -- jakby ktoś był ciekaw.

Skrypty można znaleźć tutaj.

Dopisane 1 września 2011: Zapomniałem napisać o istotnej sprawie. Żeby móc odpytywać Amazon trzeba się zapisać do Product Advertising API, tj. założyć konto. Aby móc korzystać z ww. API trzeba wypełnić odpowiedni formularz i zgodzić się na licencję, która jest mówiąc oględnie taka sobie.

To begin the enrollment process, you must submit a complete and accurate enrollment form. In your enrollment form, you must describe the application you intend to develop and use with the Product Advertising API or on which you intend to display Product Advertising Content. We will evaluate your enrollment form and notify you of its acceptance or rejection. We may reject your enrollment form if we determine that your application is unsuitable. Unsuitable applications include those that:

do not have as their principal purpose advertising and marketing the Amazon Site and driving sales of products and services on the Amazon Site

Wygląda groźnie ale wystarczy podać -- jako opis aplikacji -- URL, pod którym będziemy ,,promować'' Amazon. Proces koncesyjny jest (póki co?) uproszczony -- nikt niczego nie rozpatruje. Ale to się może zmienić...

In addition, we may terminate or suspend your license to access and use the Product Advertising API, Data Feed, or any part of or all Product Advertising Content at any time without terminating this License Agreement by giving you written notice.

Jednym słowem do poważnych zastosowań to się nie nadaje. Ale do katalogowania własnej biblioteczki może być...

Po założeniu konta, pod adresem Manage Your AccountAccess IdentifiersClick here w rubryce Access Credentials tworzymy/zarządzamy Access Key ID/Secret Access Key -- niezbędnymi do korzystania z opisywanego wyżej skryptu:


my $amz_token = '???'; ## Access Key ID
my $amz_secret = '???'; ## Secret Access Key

Wycieczka na Hel

Popłynęliśmy wczoraj (30 08) z KP i JP na Hel tzw. tramwajem wodnym z Sopotu na Hel. Bilety (1 normalny i dwa ulgowe + bilety na trzy rowery za 45 PLN) kupiliśmy w kasie na molo poprzedniego dnia. Z Helu pojechaliśmy do Władysławowa (jakieś 35 km) gdzie zjedliśmy obiad w tawernie/barze Checz. Po obiedzie pojechaliśmy do Pucka. W Pucku JP miał dość i pojechał dalej pociągiem a my we dwójkę przez Rzucewo i Połchowo do Rumii. Tam wsiedliśmy w SKM i do domu... Razem wyszło rowerem ca 80 km.

Ślad jest tutaj, a zdjęcia tutaj.

piątek, 19 sierpnia 2011

Fixing /dev/ttyUSB0 permissions for GPSBabel in fedora 15

Gpsbabel does not work at all in brand new fedora 15. I have followed suggestions from https://bugzilla.redhat.com/show_bug.cgi?id=713483 and rebuild it from the source .rpm. I have also fixed udev rules, as described here:


## /etc/udev/rules.d/51-garmin.rules
SYSFS{idVendor}=="091e", SYSFS{idProduct}=="0003", MODE="0666"

Now (sometimes) I was able to fetch GPX trace but only as a root.

Inspecting /var/log/messages I noticed suspicious messages from gpsd daemon, ie:


Aug 14 16:50:09 darkstar gpsd.hotplug: gpsd_control(action=add,arg=/dev/ttyUSB0)

Moreover the deamon starts/stops in some tricky way as it is down if one looks in Programs →Administration→Services, but ps uax | grep gpsd indicates something contrary:


nobody 2530 0.0 0.0 12652 1412 ? S<s 13:31 0:00 gpsd -n -F /var/run/gpsd.sock

As gpsbabel works flawlessly in my fc11 w/o gpsd I have decided to remove it:


yum erase gpsd
## removes also following dependencies:
kdeutils-libs-4.6.5-2.fc15.i686 kdeutils-4.6.5-2.fc15.i686
kde-settings-kdm-4.6-10.fc15.noarch kdm-4.6.5-2.fc15.i686
digikam-1.9.0-2.fc15.i686 digikam-libs-1.9.0-2.fc15.i686
kdeedu-marble-4.6.5-1.fc15.i686 kdeedu-marble-libs-4.6.5-1.fc15.i686
kdeplasma-addons-4.6.5-1.fc15.i686
kdeplasma-addons-libs-4.6.5-1.fc15.i686 ktorrent-4.1.1-1.fc15.i686
ktorrent-libs-4.1.1-1.fc15.i686 kpackagekit-0.6.3.3-2.fc15.i686
kde-plasma-networkmanagement-vpnc-0.9-0.53.20110616git.nm09.fc15.i686
kde-plasma-networkmanagement-openvpn-0.9-0.53.20110616git.nm09.fc15.i686
plasma-scriptengine-python-4.6.5-2.fc15.i686
kdenetwork-4.6.5-1.fc15.i686 kdenetwork-libs-4.6.5-1.fc15.i686
kde-plasma-networkmanagement-pptp-0.9-0.53.20110616git.nm09.fc15.i686
kde-plasma-networkmanagement-0.9-0.53.20110616git.nm09.fc15.i686
kde-plasma-networkmanagement-libs-0.9-0.53.20110616git.nm09.fc15.i686
kdebase-workspace-4.6.5-2.fc15.i686
kdebase-workspace-libs-4.6.5-2.fc15.i686 gpsd-2.95-6.fc15.i686
## and disables the following udev rules:
ostrzeżenie: /etc/udev/rules.d/99-gpsd.rules zapisano jako
/etc/udev/rules.d/99-gpsd.rules.rpmsave

Pretty surprising that so many KDE packages depends on gpsd! Now I have access to gpsbabel as normal user. (It needs 10--20 second to plug the device in fc15 while in fc11 it was instantaneously.)

Moreover my Gnome3 desktop once unusable looks much better (I still intend to use Xfce however). It seems KDE in FC15 interfere in a nasty way...

Added 24 august 2011: Xine error while playing .avi file resolved.


$ rpm -qa '*ffmpeg*'
ffmpeg-devel-0.7-0.3.20110612git.fc15.i686
ffmpeg-libs-0.7-0.3.20110612git.fc15.i686

$ rpm remove ffmpeg-devel
$ yum downgrade ffmpeg-libs

Removed:
ffmpeg-libs.i686 0:0.7-0.3.20110612git.fc15

Installed:
ffmpeg-libs.i686 0:0.6.90-0.2.rc0.fc15

xine now works with .avi. Btw:


$ rpm -qa '*git*'
emacs-git-el-1.7.6-1.fc15.noarch
emacs-git-1.7.6-1.fc15.noarch
git-1.7.6-1.fc15.i686

It appears ffmpeg-libs-0.7-0.3.20110612git and ffmpeg-devel-0.7-0.3.20110612git were the only compiled from git shapshots packages installed in my system (providing gip snapshots are always marked by adding git to package name).

It is convenient to add exclude=ffmpeg-libs to /etc/yum.conf to prevent yum to update ffmpeg libs with yum update command.

Added 31 august 2011: According to man xine one can specify ``additional command line arguments'' using ~/.xine/xinerc where each line specifies an additional command line argument. However --geometry 990x650 does not work, as well as -G 990x650. By trial and error I have figure out the only(?) working syntax:


##vi ~/.xine/xinerc
-G990x650

Note no space after -G.

wtorek, 16 sierpnia 2011

Katalogowanie książek -- pierwsze rezultaty

Pobieranie informacji o książce/płycie o podanym numerze UPC (z amazon.com):


#!/usr/bin/perl
#
use Net::Amazon;
use Net::Amazon::Request::UPC;

my $code = '633367991522' ; # UPC (z kodem EAN są problemy)

# Token/secret_key do pobrania po zarejestrowaniu się na str.
# https://aws-portal.amazon.com/gp/aws/developer/account/index.html/177-3749078-2923747
my $ua = Net::Amazon->new(
token => '####################',
secret_key => '########################################',
);

my $req = Net::Amazon::Request::UPC->new( upc => $code, mode => 'music', );

# Response is of type Net::Amazon::Response::UPC
my $resp = $ua->request($req);

if($resp->is_success()) {
print $resp->as_string(), " (UPC)\n"; } else {
print "Error: ", $resp->message(), "\n"; }
# end

poniedziałek, 15 sierpnia 2011

Aktualizacji mojego Linuksa ciąg dalszy...

Aparat PTP

Od ręki nie działa. Próbowałem rozwiązać problem instalując następujące pakiety:


yum install gphoto2 gvfs-gphoto2 gtkam digikam gthumb geeqie

Geeqie to zamiennik gqview, które używałem do tej pory. DigiKam nie działa (gryzie się z XFce). Wydaje mi się, że większość tego co zainstalowałem nie jest potrzebna -- istotne jest geeqie, dzięki któremu mogę wygodnie zaimportować zdjęcia z aparatu na komputer (lądują w katalogu ~/Pictures).

Wysyłanie fotek na flickr.com za pomocą Emacsa

Prawie działa. Problem stanowią słowa kluczowe zawierające polskie znaczki. Trzeba nieco zmodyfikować skrypty generujące bazę słów kluczowych tj. flickr_getalltags, i inne.

Cała procedura odświeżania tagów i innych metadanych jest uruchamiana skryptem flickr_update_kb, który w uproszczeniu wygląda następująco:


#!/bin/bash
# Get list of public photos with 'flickr.people.getPublicPhotos
flickr_getphotolist.pl -u hr.icio

# Refreshing information on tags/sets/geolocs"
# Get information on sets defined by the user:
flickr_getsets && \
# Get tags from flickr for current user
flickr_getalltags && \
# Get information on groups to which one can add photos
flickr_getgroups && \
## For flickr_xml2el we need _special treatment_ otherwise UTF is spoiled
PERL_UNICODE=S flickr_xml2el > ~/.flickr/hr.icio.el

cd ~/.knows && make 2flicker && \
cd ~/.flickr && make check

Z nieustalonych powodów cześć komunikatu zwracana przez flickra jest teraz kompresowana (a nie była -- nowsza wersja pakietu Perla?). Z tego też powodu konstrukcja (ze skryptu flickr_getalltags.pl -- w innych skryptach podobnie):


my $xm = $xmlp->XMLin($response->{_content}, forcearray=>[raw]);

została zamieniona na:


## zmienione 15.08.2011 (gzip as content-encoding)
## ustalenie w jakim `content_encoding' jest _content
my $content_encoding = $response->{_headers}->{'content-encoding'} ;
my $plain_content;
if ($content_encoding =~ /gzip/ ) {## jeżeli gzip to odpakować:
$plain_content = Compress::Zlib::memGunzip( $response->{_content});
} else { $plain_content = $response->{_content}; }

Powyższe załatwia problem z (nie) działaniem skryptów flickr_getphotolist.pl, flickr_getsets, flickr_getalltags, flickr_getgroups.

Konwersja plików XML do formatu Emacsa za pomocą skryptu flickr_xml2el daje w rezultacie las komunikatów Wide character in print at... a plik wynikowy jest błędnie kodowany. Problem ciągle wraca a ja ciągle nie wiem czemu. Zaślepkowo pomogło dodanie PERL_UNICODE=S (zaklęcie to należy wstawić w odpowiednie miejsce także do pliku Make w katalogu ~/.knows).

Po tych wszystkich ww. zabiegach (które zajęły mi pół dnia) jestem w stanie odświeżyć bazę metadanych z mojego konta na flickr.com. Sukces:-)

Dopisane 16 sierpnia 2011: Nie działa xine + pliki .AVI (1 errors in postprocess string "hb:a,vb:a,dr:a"). No i ciągle ten gpsbabel.

sobota, 13 sierpnia 2011

Aktualizacja mojego Linuksa (przejście z FC8 na FC15)

Przejście z FC8 na FC15 rozpoczęło się od wymiany starego dysku (250Gb) na WDC EADS 1Tb (Green Power). Już na początku się zdarzył falstart, bo zarówno BIOS jak i Linux utrzymywał uparcie, iż dysk ma pojemność ok. 33Mb. Nie wchodząc w szczegóły problem powoduje błąd w BIOSie (starych) płyt Gibabyte (cf. WD10 EADS problem ..from 1TB to 31MB). The reason the drive is reporting 33MB is that Gigabyte's BIOS has a bug that incorrectly adjusts the drive's capacity after creating the HPA. 1TB drives are reduced to 33MB, 1.5TB become 500GB, and 2TB become 1TB. (cf. Lost Partition on Hitachi...).

Więcej na temat można się dowiedzieć wpisując w Google HDA+Gigabyte i/lub ze strony Wikipedii.

Aby przywrócić ,,fabryczną'' pojemność postąpiłem wg. zalecenia: The solution is to use a tool such as HDAT2 or the HDD Capacity Restore Tool to remove the HPA (Host Protected Area), tyle że zamiast HDAT2/HDDCRT użyłem poczciwego hdparm.


## Potrzebny jest hdparm > 8.0 cf http://en.wikipedia.org/wiki/Host_protected_area
## w zapisie p1953525168 litera `p' jest OK i oznacza `permanent'
[root@darkstar]#hdparm -N p1953525168 /dev/sdb

/dev/sdb:
setting max visible sectors to 1953525168 (permanent)
max sectors = 1953525168/1953525168, HPA is disabled

[root@darkstar]#hdparm -N /dev/sdb

/dev/sdb:
max sectors = 1953525168/1953525168, HPA is disabled

Teraz podzieliłem dysk na partycje używając gparted: / (ok. 50Gb), /swap (ok. 2Gb), /boot (ok. 500Mb), /home (ok. 750Gb). Zainstalowałem FC15 używając do tego obrazu Fedora-15-i686-Live-Desktop ze strony http://torrent.fedoraproject.org/. Instalacja zakończyła się dziwnym błędem, objawiającym się tym, że partycja / miała 50Gb według np. fdiska, a 2,5Gb tak w ogóle i na prawdę. W drugiej próbie podział na partycje został wykonany przez instalator i wtedy było dobrze. Czemu było źle za pierwszym razem nie wiadomo...

Z jakiś powodów Fedora gadała do mnie po angielsku (Założyłbym się, że w czasie instalacji nikt mnie się nie pytał czy chcę po angielsku czy nie...) Zmieniłem to wpisując do /etc/sysconfig/i18n:


##LANG="en_US.UTF-8" ## tak było po instalacji
LANG="pl_PL.UTF-8"
SYSFONT="latarcyrheb-sun16"

Jednym słowem zamierzam przejść na Unicode (do tej pory używałem ISO-8859-2). Kompatybilność wstecz gwarantuje mi Emacs, w którym redaguję moje dokumenty/pliku tekstowe. Dla przypomnienia następujące zaklęcia gwarantują, że Emacs przełączy się na właściwe kodowanie:


% -*- coding: iso-8859-2 -*-
tra-ta-tata

% Local Variables:
% coding: iso-8859-2
% ispell-local-dictionary: "polish"
% End:

Zaklęcie % -*- coding: iso-8859-2 -*- musi być w pierwszym wierszu. Wpisy Local Variables: ... End: na końcu pliku. Do przestawienia kodowania wystarczy albo wpis w pierwszym wierszu albo Local Variables:. Można zastosować też oba na raz -- nie będzie błędu.

Gnome3

Po kilkugodzinnej walce z Gnome 3 zmieniłem go na Xfce. Szkoda czasu na deliberowanie, w jaki sposób zdefiniować tak elementarne rzeczy, jak przykładowo skrót do programu (Nb. sposoby podane np. tu albo tu u mnie nie działają.)

Gpsbabel

Fundamentalna dla mnie aplikacja, a mianowicie gpsbabel nie działa. Na szczęście, ktoś już z tym walczył przede mną (cf. libusb-config missing from libusb-devel):


## Gpsbabel w fc15 jest `broken' trzeba go skompilować:
wget http://mirrors.xmission.com/fedora/updates/15/SRPMS/gpsbabel-1.4.2-6.fc15.src.rpm
## bo nie bo w http://download.fedoraproject.org/pub/fedora/linux/releases/15/

rpm -ivh gpsbabel-1.4.2-6.fc15.src.rpm
## się rozpakował w /root/rpmbuild/

yum install rpm-build rpm-build-libs
rpmbuild -ba /root/rpmbuild/SPECS/gpsbabel.spec # tam się rozpakował SPEC
rpm -Uvh /root/rpmbuild/RPMS/i386/gpsbabel-*
## zgłaszany jest konflikt zatem
rpm -e gpsbabel
rpm -Uvh /root/rpmbuild/RPMS/i386/gpsbabel-*
##

## Poniższe jest potrzebne do moich skryptów obsługujących ściąganie śladu z Legenda:
wget http://search.cpan.org/CPAN/authors/id/B/BL/BLUEFEET/Geo-Distance-0.17.tar.gz
tar -zxvf Geo-Distance-0.17.tar.gz && cd Geo-Distance-0.17
perl Makefile.PL && make && make install

Niestety coś się zmieniło i magiczne zaklęcie (wpisane do /etc/udev/rules.d/51-garmin.rules) działające w poprzednich fedorach:


SYSFS{idVendor}=="091e", SYSFS{idProduct}=="0003", MODE="0666"

przestało działać. Na razie odpuszczam i będę ściągał ślady jako root; z czasem się dowiem jak problem pokonać.

Googleearth

Instalowanie Googleearth też nie okazało się oczywiste:


wget http://dl.google.com/earth/client/current/GoogleEarthLinux.bin
sh ./GoogleEarthLinux.bin
## się wysypało z błędem, przy czym
## skrypt pyszczył, że mu brakuje LSB
yum install redhat-lsb redhat-lsb-graphics

## dalej się wysypuje. Ale znalazłem via google co robić:
./GoogleEarthLinux.bin --target /tmp/ge
## kończy się błędem ale idziemy dalej:-)

cd /tmp/ge/setup.data/bin/Linux/x86/
mv setup.gtk setup.gtk2
cd /tmp/ge
## poniższe polecenie jako `root' oczywiście:
./setup.sh

Na razie tyle... Da się tego używać, ale z ostateczną oceną się na razie wstrzymuję -- zobaczymy co jeszcze zostało spartolone...

Dopisane 15 sierpnia 2011: Dopisałem do .emacs polecenia, które mają powodować, że pliki TeXa oraz pliki w formacie Blosxoma są domyślnie redagowane w Emacsie w kodowaniu jednobajtowym:


(modify-coding-system-alist 'file "\\.blx\\'" 'iso-8859-2)
(modify-coding-system-alist 'file "\\.tex\\'" 'iso-8859-2)

Zastanawiam się też nad dodaniem czegoś takiego (najpierw wypróbuję czy na pewno działa):


(modify-coding-system-alist 'process "svn" 'iso-8859-2)

Dopisane 18 sierpnia 2011: Pobieranie zrzutu ekranu. W gnome jest do tego gnome-screenshot a w Xfce -- xfce4-screenshooter (cf. http://goodies.xfce.org/projects/applications/xfmpc). Program gnome-screenshot (uruchamiany jako gnome-screenshot --interactive) działa ,,nieintuicyjnie'' przy wybraniu zrzutu z okna, xfce4-screenshooter działa lepiej

Dopisane 21 sierpnia 2011: Avatary w ekranie logowania (gdm). W internecie są sprzeczne informacje na ten temat. Niektórzy twierdzą, że się nie da. W rzeczy samej sposób najprostszy, a polegający na umieszczeniu stosownej ikony w postaci pliku o nazwie .face w katalogu domowym użytkownika nie działa, ale działa umieszczenie tegoż pliku (niekoniecznie nazywającego się .face tym razem) do katalogu /var/lib/AccountsService/icons/ oraz dodanie do każdego pliku z katalogu /var/lib/AccountsService/users/ wpisu:


Icon=/var/lib/AccountsService/icons/nazwa_pliku_zaw_avatara

Por. https://bugzilla.redhat.com/show_bug.cgi?id=705240.

Dopisane 26 sierpnia 2011: Konfigurowanie drukarki (system-config-printer). Zalecany sterownik pn. HP LaserJet 6P Cups+ Gutenprint v.5.2.7 simplified [en] czasami nie działa (np. plik .ps generowany przez pstops drukuje ohydnymi fontami bitmapowymi o niskiej rozdzielczości). Pomaga przestawienie na sterownik pn. HP LaserJet 6P Foomatic/ljet4.

Dodałem też syntax off do ~/.vimrc ponieważ kolorowane pliki były skrajnie nieczytelne.

Prywatne pakiety R, takie jak Rcmdr będę instalował w katalogu R_LIBS=$HOME/R. Odpowiedni wpis dodałem zatem do ~/.bash_profile.

czwartek, 4 sierpnia 2011

Pxfonts/qxfonts gryzie się inputenc

Zaczęło się od tego, że LaTeX złożył tabelę w taki sposób, iż wszystkie wiersze zostały nałożone na siebie, tworząc jeden wiersz. Usuwając kolejno dołączane pakiety ustaliłem, że ww. dziwny efekt jest spowodowany błędem w pakiecie pxfonts (qxfonts oczywiście też)... A objawia się, jeżeli pakiet ów jest dołączony łącznie z pakietem inputenc.

Gorzej... Czego nie widać na pierwszy rzut oka, pxfonts przedefiniowuje LaTeXa, a konkretnie polecenie \k, które zamiast wstawiać znak ą albo ę wstawia dwa nałożone na siebie znaki, np. aogonek. Tak się składało polskie teksty w LaTeXu 20 lat temu...

Za powyższe anomalie odpowiada w pakiecie pxfonts wewnętrzne polecenie: \T@n@@nc@d@ngM@cr@M@d. Wydaje się, że wystarczy wpisać do preambuły:


\def\T@n@@nc@d@ngM@cr@M@d{}

aby usunąć błąd. (Wszystko będzie też OK, jeżeli w tekście nie pojawi się znak zawierający ogonek...)

Do tej pory uważałem pakiety pxfonts/qxfonts za dobrej jakości. Do tego stopnia dobrej, że w książce Nie za krótkie wprowadzenie..., które współtłumaczyłem jest on polecany. Teraz zrobiłem kwerendę w google na okoliczność, i stwierdziłem, że 1) pakiety te wydają się być mało używane, 2) nie są od lat pielęgnowane i 3) można znaleźć opinie o ich kiepskiej jakości. Hmmm...

Z drugiej strony trudno jest znaleźć coś jednoznacznie lepszego...

Mini-przykład ilustrujący problemy zamieszczam poniżej:

\documentclass{report}

\usepackage{polski}
\usepackage[utf8]{inputenc}
\usepackage{tgpagella}
\usepackage{pxfonts,qpxmath} %% <---
\usepackage[T1]{fontenc}

%% Poprawia błąd w pakiecie pxfonts
\makeatletter %%
\def\T@n@@nc@d@ngM@cr@M@d{}
\def\T@n@@nc@d@ngM@cr@M@d{% w pxfonts oryginalnie było jak niżej:
%%\DeclareTextCommand{\k}{T1}[1]{\ooalign{\hidewidth\char12\crcr##1}}}
\DeclareTextCommand{\k}{T1}[1]{\ooalign{\hidewidth\char122\crcr##1}}}
\makeatother
\title{\k{A} \k{e}} %% <-- odkomentuj (będzie jeszcze śmieszniej)
\begin{document}
\maketitle
\k{A} \k{e} %% <-- odkomentuj (będzie najśmieszniej)
\chapter{Rozdział}
\section{Zakres dostępnych informacji o~użytkowniku}

\begin{tabular}{|l|l|l|}
0 & (1, 11, 13725) & (1, 12, 10980), (1, 13, 8235), (2, 2, 0), (3, 1, 0) \\
2745 & (1, 12, 10980) & (1, 13, 8235), (2, 2, 0), (2, 3, 0), (3, 1, 0) \\
5490 & (1, 12, 13725) & (2, 2, 2745), (2, 3, 0), (3, 1, 0) \\
8235 & (1, 12, 16470) & (1, 13, 13725), (2, 2, 2745), (2, 3, 0), (3, 1, 0) \\
10980 & (1, 12, 16470) & (1, 13, 13725), (2, 2, 2745), (2, 3, 0), (3, 1, 0) \\
13725 & (1, 12, 16470) & (1, 13, 13725), (2, 2, 2745), (2, 3, 0), (3, 1, 0) \\
16470 & (1, 13, 16470) & (2, 2, 2745), (2, 3, 0), (3, 1, 0) \\
19215 & (1, 12, 16470) & (1, 13, 13725), (2, 2, 2745), (2, 3, 0), (3, 1, 0) \\
21960 & (1, 12, 16470) & (1, 13, 13725), (2, 2, 2745), (2, 3, 0), (3, 1, 0) \\
24705 & (1, 12, 16470) & (1, 13, 13725), (2, 2, 2745), (2, 3, 0), (3, 1, 0) \\
27450 & (1, 12, 16470) & (1, 13, 13725), (2, 2, 2745), (2, 3, 0), (3, 1, 0) \\
30195 & (2, 2, 2745) & (2, 3, 0), (3, 1, 0) \\
\end{tabular}

\textbf{Styl ultra Budo-Ruski}: % ilustracja problemów z ogonkami
Aczkąlwięk w~ciągu ostątnich ląt skłąd tękstu wspomągąny komputęrówó
cąłkówicię wyęliminował stosowąnie trądycyjnych tęchnik drukarskich\dots
\end{document}
]]>

środa, 27 lipca 2011

Z zielonej wyspy na słoneczną wyspę (i z powrotem)

Ślady z wycieczki rowerowej na Bornholm, 20--25 lipca 2011: dzień 1, dzień 3, dzień 4, dzień 5, dzień 6. W drugi dzień lało i z konieczności była przerwa.

Całość trasy z zaznaczeniem różnymi kolorami poszczególnych dni: dzień 1--6.

Ponadto w promocji: -- wycieczka (moja) po okolicach Kołobrzegu, czyli tzw. dzień 0; -- rejs (powrotny) statkiem ,,Jantar'' z Nexo do Kołobrzegu; -- podróż (powrotna) pociągiem TLK relacji Kołobrzeg-Kraków (wersja alternatywna).

poniedziałek, 18 lipca 2011

Jeszcze jedna książka nt. LaTeXa

Okładka
Okładka

Wydali książkę, którą napisałem. Jest to jeszcze jeden podręcznik do LaTeXa.

Podręczników do LaTeXa jest multum ale mój ma być zwięzły i w miarę aktualny (takie były przynajmniej założenia). Okładka przyciąga uwagę (także logiem LaTeXa w wersji poor man's) -- ale to akurat nie jest moja zasługa.

Namiary na informację w katalogu wydawcy są tutaj. Tutaj są namiary na dodatkowe materiały. Tutaj jest zaś wersja robocza (może być trochę obszerniejsza od tej na CTANie).

Tomasz Przechlewski (2011), Praca magisterska i dyplomowa z programem LaTeX. Jak szybko tworzyć profesjonalnie wyglądające dokumenty, Wolters Kluwer Polska, Warszawa, ISBN: 978-83-264-1441-1. http://www.eoficyna.com.pl/x_C_I__P_40158734__PZTA_0D.html

niedziela, 17 lipca 2011

Odsyłacze bibliograficzne w schemacie autor-rok

Używam pakietu natbib ograniczając się do poleceń: \citet, \citealt, \citep, \citealp, \citeyearpar oraz \citetext.

Poniższy hak powoduje, że odsyłacze wewnątrz \citet będą odzielone przecinkiem, a wewnątrz \citep -- średnikiem. (,,Standardowy'' natbib stosuje jeden ,,globalny'' znak separującego kolejne odsyłacze.)


\documentclass[a4paper]{article}
\usepackage{polski}
\usepackage[authoryear]{natbib} %%&---
%% http://tex.stackexchange.com/questions/3125/a-comma-separator-for-citet-and-a-semicolon-separator-for-citep-simultaneou
\usepackage{etoolbox}
\makeatletter
\newcommand\bibstyle@comma{\bibpunct(),a,,}
\newcommand\bibstyle@semicolon{\bibpunct();a,,}
\makeatother
\pretocmd\citet{\citestyle{comma}}\relax\relax
\pretocmd\citealt{\citestyle{comma}}\relax\relax
\pretocmd\citep{\citestyle{semicolon}}\relax\relax
\pretocmd\citealp{\citestyle{semicolon}}\relax\relax

\begin{document}
...

Sposoby użycia ilustrują poniższe przykłady:


Przeciętna wariancja wyodrębniona (\emph{average variance extracted}, AVE)
jest definiowana następująco~\citetext{por.~\citealp[s.~612]{HairetAl98};
\citealp{sztemberg-lewandowska2008}; \citealp[s.~1213--1214]{FornellLarcker81}}:

Przeciętna wariancja wyodrębniona (average variance extracted, AVE) jest definiowana następująco (por. Hair i inni, 1998, s. 612; Sztemberg-Lewandowska, 2008; Fornell i Larcker, 1981, s. 1213--1214):


Tendencje przedstawione przez Orlikowski i~Baroudiego potwierdzają inne przeglądy,
por.~\citet{AbareshiMartin2008,RungtusanathamChoiHollingworth2003,NewstedHuffMunro98}
oraz \citet{PinsonneaultKraemer1993}.

Tendencje przedstawione przez Orlikowski i Baroudiego potwierdzają także inne przeglądy, por. Abareshi i Martin (2008), Rungtusanatham i inni (2003), Newsted i inni (1998) oraz Pinsonneault i Kraemer (1993).


Model Akceptacji Technologii [...] i~akceptację systemów informacyjnych w~praktyce
badawczej informatyki ekonomicznej~\citep{VenkateshEtAl03,VenkateshDavis00}.

Model Akceptacji Technologii (Technology Acceptance Model, TAM) jest najczęściej wykorzystywaną teorią objaśniającą wykorzystanie i akceptację systemów informacyjnych w praktyce badawczej informatyki ekonomicznej (Venkatesh i inni, 2003; Venkatesh i Davis, 2000).


Praktyka badawcza [...] oceniania w~pracach Hensleya~\citeyearpar{Hensley1999}
oraz Malhotry i~Grovera~\citeyearpar{MalhotraGrover1998}, a~w~obszarze
informatyki ekonomicznej w~pracach:
\citet{StraubBoudreauGefen2004,RaiLangWelker2002,BoudreauGefenStraub2001,Straub89}
oraz~\citet{NewstedHuffMunro98,GefenStraub2005} a~także \citet{Segars1997}

Praktyka badawcza ustalania trafności w dziedzinie nauk o zarządzaniu jest z kolei oceniania w pracach Hensleya (1999) oraz Malhotry i Grovera (1998), a w obszarze informatyki ekonomicznej w pracach: Straub i inni (2004), Rai i inni (2002), Boudreau i inni (2001), Straub (1989) oraz Newsted i inni (1998), Gefen i Straub (2005) a także Segars (1997).

czwartek, 23 czerwca 2011

Niepotrzebne mlocate

Dziś wpisując df przeraziłem się widząc, że pozostało mi 17% wolnej przestrzeni na pinkaccordions.homelinux.org (8Gb karta SDHC) bo do niedawna było to ca. 70%. Szukając winnego znalazłem ponad 3Gb plik w katalogu /var/lib/mlocate, który powstał (i powiększał się) ponieważ lekkomyślnie zamontowałem katalog ,,/'' z dugiej szewy poprzez fusermount. Z kolei ta druga szewa ma podłączony 2 Tb dysk (który nie jest przez nią indeksowany dzięki dodaniu czego trzeba do /etc/updatedb.conf).

W pierwszej chwili chciałem zablokować indeksowanie podmontowanego katalogu. Po chwili namysłu zdecydowałem się na bardziej radykalne wywalenie mlocate:


apt-get remove mlocate && rm -rf /var/lib/mlocate/*

Alternatywnie można dodać do /etc/updatedb.conf


vim /etc/updatedb.conf
# PRUNEPATHS to, które _nie będą_ indeksowane, dodaję /<ssfhs-katalog> żeby
# nie był indeksowany katalog zamontowany via fusermount
# PRUNEPATHS="/tmp /var/spool /<ssfhs-katalog>"

Ale po co mi w ogóle indeksowanie systemu plików na serwerze? Niepotrzebne... A im mniej zapisów tym -- podobno -- karta dłużej wytrzyma.

Przy okazji problemów z szewą: mój sposób synchronizacji czasu nie działa na jednej szewie jeżeli przy starcie systemu ntp nie połączył się z serwerem czasu... Poprawiłem czas (z pomocą kol. Rafiego):


# /etc/init.d/ntp stop
* Stopping NTP server ntpd [ OK ]
# ntpdate ntp.ubuntu.com
# /etc/init.d/ntp start

środa, 25 maja 2011

Rocznica pinkaccordions.homelinux.org

Minął rok odkąd zarejestrowałem w www.dyndns.com adres pinkaccordions.homelinux.org (dokładnie pierwszy wpis w access.log ma datę 23 maja 2010 r.). Działa doskonale....

Przy okazji: dzisiaj przeniosłem anemometr z płotu na dach bloku. Prędkości wiatru od razu wzrosły...

środa, 11 maja 2011

Ostatnie okrążenie

Dziś przejeżdżając skromne 35 km, przekroczyłem 145 tys życiowego przebiegu... Zostało 5 tys. do okrągłej liczby 150 tys. i jest szansa, że dociągnę jeszcze w tym roku...

środa, 4 maja 2011

Jak odkręcić zakleszczony filtr Hoya

Pojechaliśmy na Warmię (niem. Ermland) na dwa dni (2--3 maja) zwiedzając Pasłęk, Ornetę, Dobre Miasto i Lidzbark Warmiński (zdjęcia są tutaj).

W Ornecie Misiek upuścił aparat (w torbie i z niewielkiej wysokości) tak nieszczęśliwie, że uszkodził się dekiel i stłukł filtr nakręcony na obiektyw. Sam obiektyw (Olympus Zuiko 12-60 mmm) wydaje się intact. Filtr z kolei był tani--jakaś Hoya UV/72mm za 40 PLN. Zatem straty minimalne, ale... Ale nie szło odkręcić oprawki filtra. Próbowałem nawet to złapać kombinerkami za brzeg (szkła już nie było więc było więcej miejsca) i guzik...

Szukając pomocy wpisałem do Google hoya filter stuck. Problem generalnie jest znany i proponowane są różne rozwiązania:

  1. Wsadzić obiektyw na chwilę do lodówki. Wsadziłem na 5 minut do zamrażalnika--nie pomogło.
  2. Otoczyć filtr skórzanym paskiem. Pasek zacisnąć i spróbować przekręcić. Też nie działa.
  3. Położyć na kawałku gumy. Docisnąć i przekręcić. Akurat miałem kawał w miarę miękkiej gumy. Misiek trzymał gumę ja kręciłem obiektywem. Już myślałem czy nie połączyć punktu 1 (lodówka) z punktem 3 i wtedy puściło...

Uff...

PS: ślad wycieczki: dzień 1dzień 2.

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.