I was not aware that \titlepage
command resets
page counter. Have no idea why LaTeX works this way but
in result \setcounter{page}
is ignored no matter where one inserts it in the source code.
It somehow works if \setounter{page}
is executed after
\begin{titlepage}...
(or \maketitle
which uses titlepage
)
but page number for titlepage is always 1.
Worse: definitely LaTeX would be more user-friendly if it would write such brute actions as page counter resets to log file.
Simple fix is to redefine titlepage
environment. For example
below is
a simplified titlepage
environment
from article.cls
:
\renewenvironment{titlepage} {% \if@twocolumn \@restonecoltrue\onecolumn \else \@restonecolfalse\newpage \fi \thispagestyle{empty}% %%\setcounter{page}\z@ }% {\if@restonecol\twocolumn \else \newpage \fi }
The unwanted \setcounter
was commented-out
in the code above.
Jest coś takiego jak Katalog Polskiej Muzyki Akordeonowej (KPMA), który powstaje przy wykorzystaniu cutting edge technologii: jest redagowany jako plik XML w edytorze strukturalnym.
Na początku KPMA był plikiem TeXowym, później (2002 r.) został przerobiony na XML
i odtąd był redagowany w Emacsie,
w trybie psgml.
Struktura dokumentu była/jest opisana za pomocą stosownego DTD, które psgml
potrafi
interpretować.
W tzw. międzyczasie
tryb psgml
stał się obsolete na rzecz
nXML
.
Można wprawdzie dalej używać psgml
(działa bez problemów) i być może
dałoby się skonfigurować Emacsa, w taki sposób iż
dokumenty KPMA byłby redagowane w psgml
a inne dokumenty XML w trybie nXML
, ale koniec końców zdecydowałem się
na zmianę.
Aby zmienić DTD na RNC, wystarczy posłużyć się trang
iem:
trang -I dtd -O rnc lkompc.dtd lkompc.rnc
Teraz należy dodać schemat do konfiguracji nXML. Wystarczy w tym celu wczytać
plik Kompozycje.xml
a następnie wybrać XML→Set Schema→File. Wybrać plik lkompc.rnc
.
W katalogu z dokumentem XML (tj. Kompozycje.xml
w tym konkretnym przypadku) zostanie
zapisany plik schemas.xml
, zawierający:
<?xml version="1.0"?> <locatingRules xmlns="http://thaiopensource.com/ns/locating-rules/1.0"> <uri resource="Kompozycje.xml" uri="lkompc.rnc"/> </locatingRules>
Od tego momentu Kompozycje.xml
będzie edytowany z nastawami
schematu określonymi w lkompc.rnc
.
Plik XML wygląda tak:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE lista.kompozycji SYSTEM "lkompc.dtd" > <lista.kompozycji> <kompozycja typ="i.orkiestro"> <tytul>Atlantyda I na orkiestrę symfoniczną</tytul> <xsklad>4 akordeony w orkiestrze</xsklad> <autor> <nazwisko>Augustyn</nazwisko> <imie>Rafał</imie> </autor> <rok>1979</rok> <sklad>4 acc</sklad> <wydawca>manus</wydawca> </kompozycja> ... <kompozycja typ="solo"> <tytul>Rapsodia</tytul> <xsklad>akordeon solo</xsklad> <autor> <nazwisko>Krzanowski</nazwisko> <imie>Andrzej</imie> </autor> <autor> <nazwisko>Krzanowska</nazwisko> <imie>Grażyna</imie> </autor> <rok>1983</rok> <wydawca>PWM</wydawca> <nagranie>KM</nagranie> </kompozycja> ... </lista.kompozycji>
a ma wyglądać tak:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE lista.kompozycji SYSTEM "lkompc.dtd" > <lista.kompozycji> <kompozytor id='Augustyn.R'><!-- *** Augustyn:Rafał# --> <kompozycja typ="i.orkiestro"> <tytul>Atlantyda I na orkiestrę symfoniczną</tytul> <xsklad>4 akordeony w orkiestrze</xsklad> <rok>1979</rok> <sklad>4 acc</sklad> <wydawca>manus</wydawca> </kompozycja> <kompozycja typ="i.orkiestro"> <tytul>Atlantyda II na wielką orkiestrę i chór</tytul> <xsklad>4 akordeony w orkiestrze</xsklad> <rok>1983</rok> <sklad>4 acc</sklad> <wydawca>manus</wydawca> <nagranie>LP</nagranie> </kompozycja> </kompozytor> ... <kompozytor id='Krzanowski.A#Krzanowska.G'><!-- *** Krzanowski:Andrzej#Krzanowska:Grażyna# --> <kompozycja typ="solo"> <tytul>Rapsodia</tytul> <xsklad>akordeon solo</xsklad> <rok>1983</rok> <wydawca>PWM</wydawca> <nagranie>KM</nagranie> </kompozycja> ... </lista.kompozycji>
To znaczy, że
z elementu kompozycja
mają zniknąć elementy autor
.
Wszystkie kompozycje tego samego kompozytora mają być elementami-dziećmi
elementu kompozytor
.
Element kompozytor
ma identyfikować
kompozytora za pomocą atrybutu id
, którego wartość jest wyznaczana
(w przypadku gdy dzieło jest ma jednego autora) jako:
nazwisko.inicjał
W przypadku gdy kompozycja jest dziełem zbiorowym, identyfikator kompozytora zbiorowego ma mieć postać:
nazwisko.inicjał#nazwisko.inicjał nazwisko.inicjał#nazwisko.inicjał#nazwisko.inicjał ...
Powyższe realizuje taki oto skrypt:
#!/usr/bin/perl use XML::DOM; binmode(STDOUT, ":utf8"); my $file2parse = $ARGV[0]; my $parser = new XML::DOM::Parser; my $doc = $parser->parsefile ($file2parse); for my $kompozycja ( $doc->getElementsByTagName ("kompozycja") ) { my $author_id = ''; ## przeglądamy kolejne elementy autor: for my $autor ($kompozycja->getElementsByTagName("autor")) { $im = ($autor->getElementsByTagName("imie"))[0]->toString(); $nz = ($autor->getElementsByTagName("nazwisko"))[0]->toString(); $author_id .= "$nz:$im#"; ## autorów może być dużo stąd .= a nie = $author_id =~ s/<[^<>]+>//g; ## usuń tagi, zostaw sam tekst ##print STDERR "$author_id\n"; ## usuń element autor: $kompozycja->removeChild($autor); } ## Hash of Arrays, cf http://docstore.mik.ua/orelly/perl2/prog/ch09_02.htm push @{ $Kompozycje{ $author_id }}, $kompozycja->toString (); } ### Druk ############################################################ print "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n"; print "<!DOCTYPE lista.kompozycji SYSTEM \"lkompc.dtd\" >\n"; print "<lista.kompozycji>\n"; for $autor (sort keys %Kompozycje ) { $autor_i = $autor; $autor_i =~ s/:([^#:])[^#:]+#/.\1#/g; # tylko inicjały chop($autor_i); print "\n\n\n\n<kompozytor id='$autor_i'><!-- *** $autor -->\n\n"; for $kompozycja ( @{ $Kompozycje{ "$autor" }} ) { print $kompozycja, "\n"; } print "\n</kompozytor>\n"; } print "</lista.kompozycji>\n"; ## koniec ###
Jeżeli się nie doda binmode
, to UTF jest malformed (Ah ten Perl.)
Podpowiedź znalazłem
tutaj.
Nawiasem mówiąc i w innym skrypcie:
s/<imie>([^<>])([^<>]+)<\/imie>/<inicjal>\1<\/inicjal>/gm;
Też zwraca malformed UTF-8 jeżeli np. imieniem jest Łukasz. A jak zaczyna się od A-Z to jest OK.
Zainstalowałem sobie (i Elce też) Dropboksa. Sprytny program i podoba mi się.
Po bezproblemowej instalacji w górnym panelu pojawiła się ikona Dropboksa, po kliknięciu
w którą można zarządzać kontem za pomocą nautilus
a.
Ja po prostu kopiuję pliki z poziomu basha do
katalogu ~/Dropbox/
, bo tak jest szybciej.
Pliki z katalogu ~/Dropbox/Public/
są dostępny z zewnątrz.
Nie jest oczywiste w pierwszej chwili pod jakim adresem, ale można
to ustalić empirycznie klikając w ikonę Dropboksa,
następnie prawy-klik na pliku→ Dropbox→ Copy Public Link.
Wklejamy przez Paste/Wklej oczywiście. Procedura prosta, tyle że klikanie męczy...
Dla plików `epl112_2120369.jpg' oraz `How to use the Public folder.txt' wyszło odpowiednio:
http://dl.dropbox.com/u/61315145/epl112_2120369.jpg http://dl.dropbox.com/u/61315145/How%20to%20use%20the%20Public%20folder.txt
Co by wskazywało, że URL jest tworzony według schematu:
http://dl.dropbox.com/u/id_użytkownika/nazwa_pliku
.
Gdm
się uruchamia i tyle. Działa mysz,
ale z klawiatury
nic się nie wpisze, więc nie da się siłą rzeczy zalogować.
Problem pojawił się nagle, nic nie aktualizowałem ostatnio, itp.
Po pierwsze loguję się w trybie tekstowym (runlevel 3). Następnie:
W momencie startu, kiedy system wyświetla na ekranie Boot from
...
naciskam klawisz Del
. Na ekranie pojawia się
menu gruba, np.:
Fedora (2.6.42.3-2.fc15.i686) Fedora (2.6.41.10-3.fc15.i686) Fedora (2.6.41.9-1.fc15.i686)
e
. Pojawia się menu zawierające (przykładowo):
root (hd0,0) kernel /boot/vmlinuz-2.6.42.3-2.fc15.i686... initrd /boot/initramfs-2.6.42.3-2.fc15...
vmlinuz
,
naciskam znowu e
i dopisuję 3
na końcu
wiersza. Naciskam Enter
, a potem b
(boot).
Doinstalowuję kdm
:
yum install kdeutils-libs kdeutils kdm
Byłem uprzejmy przy instalacji FC15 kdm
a usunąć, bo jego
obecność wymaga zainstalowania m.in. programu (demona)
gpsd
, który z kolei -- jeżeli zostanie uruchomiony -- gryzie
się z -- intensywnie wykorzystywanym przeze mnie -- programem
gspbabel
. No więc skoro się gryzie i skoro nie jest mi do
niczego nie potrzebny, to go wywaliłem, ale być może to był
błąd. (Inna sprawa że zależność pomiędzy menedżerem logowania
a programem do obsługi urządzeń GPS wydaje się czymś,
hmmm... absurdalnym.)
Teraz reboot i wszystko działa.
Podobno plik /etc/sysconfig/desktop
deklaruje
menedżera logowania oraz typ środowiska graficznego.
Zajrzałem do środka /etc/sysconfig/desktop
:
less /etc/sysconfig/desktop DESKTOP="KDE" DISPLAYMANAGER="KDE"
Programy →Administracja→Narzędzie przełączania środowisk.
Było KDE
, ustawiłem na Xfce
. Po restarcie:
less /etc/sysconfig/desktop DESKTOP="KDE" DISPLAYMANAGER="KDE"
Hmm..., jakby nic się nie zmieniło. Ale to co widzę na pulpicie to
na oko Xfce
a nie KDE
.
Dokumentacja Fedory
określa, że wartościami dla DESKTOP
mogą być tylko GNOME
lub KDE
.
Widocznie
zmiana środowiska jest dokonywana
w inny sposób a zawartość /etc/sysconfig/desktop
jest (częściowo) ignorowana.
Pozostaje pytanie: czemu rozjechał się GDM?
Google fusion tables another excercise.
Two data sets describe football players who plays in Polish t-Mobile ekstraklasa (1st division) and Pierwsza Liga (2nd division) in 2011/2012 (autumn).
To show from where the player came a straight line is drawn from a player's birthplace to club's stadium, the player plays for.
Figure 1. 1st division.
Figure 2. 2nd division.
Players from 2nd division seems to be born closer to the clubs they play for:-)
Warning: in considerable number of cases the geocoding as performed by Google maybe wrong due to poor data quality--have no time to check/correct.
As simple as:
ffmpeg -ss start-time -t duration -i file-in file-out
Usually start-time/stop-time are given so duration have to be computed. Nothing difficult but the following bash script calculates duration for us:
#!/bin/bash # cnt_sec function converts string `hh:mm:ss' to seconds, both # `hh' and `mm' are optional function cnt_sec () { echo $1 | awk -F":" '{ if (NF>2) { sec += 60*60 * $(NF-2) } ; if (NF>1) { sec += 60 * $(NF-1) } ; if (NF>0) { sec += $NF } ; print sec }' } STRT_TIME=`cnt_sec $1` STOP_TIME=`cnt_sec $2` DURATION=$((STOP_TIME-STRT_TIME)) echo $DURATION # cut from file $3 from $1 to $2 write to $4 # both $1 and $2 are time durations in `hh:mm:ss' format ffmpeg -ss $1 -t $DURATION -i $3 $4
Yet another excercise, which tests Google Fusion Tables.
The data set contains--among other things--birth place for 600+ rugby players who last year take part in Rugby World Cup in New Zealand. The raw data is available here and here.
On the following diagram (cf. Figure 1) the players are mapped by column containing birthplace coordinates
Figure 1. World's concentration of top Rugby Union players.
The map do not show which player plays for which country. To show that a straight line is drawn from each player's birthplace to the country's capital, the player plays for (cf. Figure 2).
Figure 2. The origin of top Rugby Union players by federation.
Some lines look strange and the problem is particularly evident around New-Zealand-Samoa-Tonga-Fiji. For example it seems that many Samoan players were born at high ocean (cf. Figure 3).
Figure 3. The origin of top Rugby Union Samoan players.
BTW mapping Samoans one-by-one is OK (try it). The problem is when all rows are mapped together by Visualize→Map function.
Accidentaly around 600 miles to the East of New Zealand lies antipodal meridian ie. a meridian which is diametrically opposite the Greenwich meridian (a pime one). The longitude of points lying on antipodal meridian can be referenced (at least in GoogleMaps) both as -180° or 180° (ie. -36,-180° and -36,+180° refers to the same place). Perhaps it is the cause of observed errors...