Weblog Tomasza Przechlewskiego [Zdjęcie T. Przechlewskiego]


scrum
random image [Photo gallery]
Zestawienie tagów
1-wire | 18b20 | 1wire | 2140 | 3rz | adamowicz | afera | alsamixer | amazon | amber | amman | anniversary | antypis | apache | api | applebaum | arm | armenia | astronomy | asus | atom.xml | awk | aws | bachotek | bakłażan | balcerowicz | balta | banan | bash | batumi | berlin | białowieża | białystok | bibtex | bieszczady | biznes | blogger | blogging | blosxom | bme280 | bono | borne-sulinowo | breugel | bt747 | budapeszt | budyniowo | budyń | bursztyn | campagnolo | canon | cedewu | chaos | chello | chiller | chillerpl | chown | christophe dominici | chujowetaśmy | ciasto | cmentarz | contour | coronavirus | covi19 | covid | covid19 | cron | css | csv | cukinia | curl | cycling | d54250wykh | darkages | dbi | debian | dejavu | dhcp | dht22 | dia | docbook | dom | dp1500 | ds18b20 | duda | dulkiewicz | dulkiewiczowa | dyndns | dynia | ebay | economy | ecowitt | ekonomia | elka | elm | emacs | emacs23 | english | ep | erasmus | erasmusplus | ess | eu | eurostat | excel | exif | exiftool | f11 | fc | fc11 | fc15 | fc29 | fc5 | fc8 | fedora | fedora21 | fenix | ffmpeg | finepix | firefox | flickr | folau | fontforge | fontspec | fonty | food | fop | forms | foto | france | francja | fripp | froggit | fuczki | fuji | fuse | gammu | garden | garmin | gas | gawk | gazwyb | gdańsk | gdynia | gender | geo | geocoding | georgia | gft | ggplot | ghost | git | github | gmail | gmaps | gnokii | gnus | google | google apps script | googlecl | googleearth | googlemaps | gotowanie | gphoto | gphoto2 | gps | gpsbabel | gpsphoto | gpx | gpx-viewer | greasemonkey | gruzja | grzyby | gus | gw1000 | haldaemon | handbrake | hhi | historia | history | hitler | holocaust | holokaust | hp1000se | hpmini | humour | iblue747 | ical | iiyama | ikea | imagemagick | imap | inkscape | inne | internet | j10i2 | javascript | jhead | jordania | k800i | kajak | kamera | karob | kibbeh | kleinertest | kml | kmobiletools | knuth | kociewie kołem | kod | kolibki | komorowski | konwersja | krutynia | krynki | kuchnia | kurski | kłamstwo | latex | latex2rtf | latex3 | lcd | legend | lenny | lesund | lewactwo | lgbt-folly | liban | liberation | linksys | linux | lisp | lisrel | litwa | lizbona | logika | ltr | lubowla | lwp | lwów | m2wś | malta | mapquest | mapsource | maradona | marchew | marimekko | marvell | math | mathjax | mazury | mbank | mediolan | mencoder | mevo | mex | mh17 | michalak | michlmayr | microsoft | monitor | mp4box | mplayer | ms | msc | mssql | msw | mswindows | mtkbabel | museum | muzyka | mymaps | mysql | mz | nafisa | nanopi | natbib | navin | neapol | nekrolog | neo | neopi | netbook | niemcy | niemieckie zbrodnie | nikon | nmea | nowazelandia | nuc | nxml | oauth | oauth2 | obituary | ocr | odessa | okular | olympus | ooffice | ooxml | opera | osm | otf | otftotfm | other | ov5647 | overclocking | ozbekiston | padwa | panoramio | paryż | pdf | pdfpages | pdftex | pdftk | pedophilia | perl | photo | photography | pi | picasa | picasaweb | pim | pine | pis | pit | pizero | plain | plotly | pls | plugin | po | podcast | podlasie | podróże | pogoda | politics | polityka | polsat | portugalia | postęp | powerpoint | połtawa | prelink | problem | propaganda | pseudointeligencja | pstoedit | putin | python | pywws | r | r1984 | radio | random | raspberry | raspberry pi | raspberrypi | raspbian | refugees | relaxng | ridley | router | rower | rowery | roztocze | rpi | rsync | rtf | ruby | rugby | rumunia | russia | rwc | rwc2007 | rwc2011 | rwc2019 | rzym | salerno | samba | sds011 | selenium | sem | senah | sernik | sheevaplug | sienkiewicz | signature | sikorski | sks | skype | skytraq | smoleńsk | sqlite | srtm | sshfs | ssl | staszek wawrykiewicz | statistcs | statistics | stats | statystyka | stix | stretch | supraśl | suwałki | svg | svn | swanetia | swornegacie | szwajcaria | słowacja | tbilisi | terrorism | tesseract | tex | texgyre | texlive | thunderbird | tomato | totalnaopozycja | tourism | tramp | trang | transylwania | truetype | trzaskowski | ttf | turcja | turkey | turystyka | tusk | tv | tv5monde | tweepy | twitter | tykocin | typetools | ubuntu | uchodźcy | udev | ue | ukraina | umap | unix | upc | updmap | ups | utf8 | uzbekistan | varia | video | vienna | virb edit | virbedit | vostro | wammu | wdc | wdfs | weather | weathercloud | webcam | webdav | webscrapping | weewx | wenecja | wh2080 | wiedeń | wikicommons | wilno | win10 | windows | windows8 | wine | wioślarstwo | wojna | word | wordpress | wrt54gl | ws1080 | wtyczka | wunderground | ww2 | www | wybory | wybory2015 | włochy | węgry | xemex | xetex | xft | xhtml | xine | xml | xmllint | xsd | xslt | xvidtune | youtube | yum | zaatar | zakopane | zakupy | zawodzie | zdf | zdrowie | zeropi | zgarden | zgony | zprojekt | łeba | świdnica | żywność
Archiwum
02/2023 | 01/2023 | 11/2022 | 10/2022 | 09/2022 | 07/2022 | 06/2022 | 04/2022 | 03/2022 | 02/2022 | 12/2021 | 09/2021 | 03/2021 | 01/2021 | 12/2020 | 11/2020 | 10/2020 | 09/2020 | 08/2020 | 07/2020 | 04/2020 | 03/2020 | 02/2020 | 01/2020 | 12/2019 | 11/2019 | 10/2019 | 09/2019 | 08/2019 | 07/2019 | 06/2019 | 04/2019 | 02/2019 | 01/2019 | 12/2018 | 11/2018 | 10/2018 | 09/2018 | 08/2018 | 07/2018 | 05/2018 | 04/2018 | 03/2018 | 02/2018 | 01/2018 | 11/2017 | 10/2017 | 09/2017 | 08/2017 | 07/2017 | 06/2017 | 05/2017 | 04/2017 | 03/2017 | 02/2017 | 01/2017 | 12/2016 | 11/2016 | 10/2016 | 09/2016 | 08/2016 | 06/2016 | 05/2016 | 04/2016 | 02/2016 | 12/2015 | 11/2015 | 09/2015 | 07/2015 | 06/2015 | 05/2015 | 02/2015 | 01/2015 | 12/2014 | 09/2014 | 07/2014 | 06/2014 | 04/2014 | 02/2014 | 01/2014 | 12/2013 | 11/2013 | 10/2013 | 09/2013 | 08/2013 | 07/2013 | 05/2013 | 04/2013 | 03/2013 | 02/2013 | 01/2013 | 12/2012 | 11/2012 | 10/2012 | 09/2012 | 08/2012 | 07/2012 | 05/2012 | 03/2012 | 02/2012 | 01/2012 | 12/2011 | 11/2011 | 10/2011 | 09/2011 | 08/2011 | 07/2011 | 06/2011 | 05/2011 | 04/2011 | 03/2011 | 02/2011 | 01/2011 | 12/2010 | 11/2010 | 10/2010 | 09/2010 | 08/2010 | 07/2010 | 06/2010 | 05/2010 | 04/2010 | 03/2010 | 02/2010 | 01/2010 | 12/2009 | 11/2009 | 10/2009 | 09/2009 | 08/2009 | 07/2009 | 06/2009 | 05/2009 | 04/2009 | 03/2009 | 02/2009 | 01/2009 | 12/2008 | 11/2008 | 10/2008 | 09/2008 | 08/2008 | 07/2008 | 06/2008 | 05/2008 | 04/2008 | 03/2008 | 02/2008 | 01/2008 | 12/2007 | 11/2007 | 10/2007 | 09/2007 | 08/2007 | 07/2007 |
O stronie
wykorzystywany jest blosxom plus następujące wtyczki: tagging, flatarchives, rss10, lastbuilddatexhtmlmime. Niektóre musiałem dopasować nieco do swoich potrzeb. Więcej o blosxom jest tutaj
Subskrypcja
RSS 1.0
Moje pierwsze macro w OO Basicu

Jak zamienić wiele plików w formacie MS Powerpoint na dokumenty PDF przy pomocy programu OpenOffice ale z poziomu wiersza poleceń opisał Bob DuCharme w tekście Moving to OpenOffice: Batch Converting Legacy Documents. W skrócie postępuje się następująco: w OO należy przejść do okna dialogowego Narzędzia->Makra->Zarządzaj Makrami. Następnie utworzyć moduł, np. MyConversion i wpisać do okienka następującą treść :

' BASIC, see: http://www.xml.com/pub/a/2006/01/11/from-microsoft-to-openoffice.html
' Based on code from http://www.oooforum.org/forum/viewtopic.phtml?t=3772
' Save document as an Acrobat PDF file.
Sub SaveAsPDF( cFile )
   cURL = ConvertToURL( cFile )
   ' Open the document. Just blindly assume that the document 
   ' is of a type that OOo will correctly recognize and open 
   ' without specifying an import filter.
   oDoc = StarDesktop.loadComponentFromURL( cURL, "_blank", 0, _
            Array(MakePropertyValue( "Hidden", True ),))

   cFile = Left( cFile, Len( cFile ) - 4 ) + ".pdf"
   cURL = ConvertToURL( cFile )
   
   ' Save the document using a filter.   
   oDoc.storeToURL( cURL, Array(_
            MakePropertyValue( "FilterName", "writer_pdf_Export" ),)
   
   oDoc.close( True )
End Sub

' Save document as a Microsoft Word file. 
Sub SaveAsDoc( cFile ) 
   ' mostly a copy of SaveAsPDF
   cURL = ConvertToURL( cFile )
   oDoc = StarDesktop.loadComponentFromURL( cURL, "_blank", 0, (_
            Array(MakePropertyValue( "Hidden", True ),))


   cFile = Left( cFile, Len( cFile ) - 4 ) + ".doc"
   cURL = ConvertToURL( cFile )
   
   oDoc.storeToURL( cURL, Array(_
            MakePropertyValue( "FilterName", "MS WinWord 6.0" ),)
   oDoc.close( True )

End Sub


' Save document as an OpenOffice 2 file. 
Sub SaveAsOOO( cFile ) 
   ' mostly a copy of SaveAsPDF. Save as an OpenOffice file. 
   cURL = ConvertToURL( cFile )
   oDoc = StarDesktop.loadComponentFromURL( cURL, "_blank", 0, _
            Array(MakePropertyValue( "Hidden", True ),))

   ' Set output file extension based on lower-case 
   ' version of input extension.
   Select Case LCase(Right(cFile,3))
     Case "ppt"         ' PowerPoint file.
       cFileExt = "odp"
     Case "doc"         ' Word file.
       cFileExt = "odt"
     Case "xls"         ' Excel file.
       cFileExt = "ods"
     Case Else
       cFileExt = "xxx"
    End Select
       
   cFile = Left( cFile, Len( cFile ) - 3 ) + cFileExt
   cURL = ConvertToURL( cFile )
   
   oDoc.storeAsURL( cURL, Array() )
   oDoc.close( True )

End Sub


Function MakePropertyValue( Optional cName As String, Optional uValue ) _
   As com.sun.star.beans.PropertyValue
   Dim oPropertyValue As New com.sun.star.beans.PropertyValue
   If Not IsMissing( cName ) Then
      oPropertyValue.Name = cName
   EndIf
   If Not IsMissing( uValue ) Then
      oPropertyValue.Value = uValue
   EndIf
   MakePropertyValue() = oPropertyValue
End Function

Uruchamia się to następująco (Linux):

ooffice -invisible "macro:///Standard.MyConversion.SaveAsPDF($PWD/plik.ppt)"

albo via prosty jednoargumentowy skrypt oo2pdf:

#!/bin/bash
# Konwersja do formatu PDF
echo "Konwertuję $1..."
ooffice -invisible "macro:///Standard.MyConversion.SaveAsPDF($PWD/$1)"

Koniecznie trzeba podać pełną ścieżkę do pliku (stąd zmienna PWD) bo inaczej zgłoszony zostanie błąd. W MS Windows też trzeba podać pełną nazwę, co nie do końca może być wygodne. Ale to już nie moje zmartwienie. Makra działają nie tylko dla plików .ppt, ale też .doc.odt/odp.

Na ww. stronie jest też podana następująca zgrabna pętla zamieniająca wszystkie pliki (w tym przypadku .ppt) w katalogu bieżącym i jego podkatalogach:

for i in $(find ./ -name "*.ppt"); do oo2pdf $i ; done 

Być może to find ./ -name jest nawet przesadne i wystarczy zwykłe for i in *.ppt; do.

url | Fri, 31/08/2007 13:27 | tagi: , , ,
Łączenie plików PDF w jeden

Jak połączyć wiele plików PDF w jeden? Okazuje się, że tego typu montaż jest możliwy przy wykorzystaniu program epdftex, który jest standardowym składnikiem każdej nowej dystrybucji TeXa i poniższego skryptu (autor P. Pianowski):

\nopagenumbers
\def\picdir {pic/}

\hoffset -1in \voffset -1in \topskip 0pt

\newdimen\HS \HS=210mm   \newdimen\VS \VS=297mm
\hsize\HS \vsize\VS

\pdfpagewidth=\HS \pdfpageheight=\VS

%\def\letter {letter} \def\aiv {a4}

\def\stronapdf #1#2#3#4{\pdfximage page #1 {\picdir #2}
  \vbox to\VS{\vskip #4 \hbox to\HS{\hskip #3%
  \pdfrefximage\pdflastximage \hss}\vss}
  }

\newcount\odstrony \newcount\dostrony
\newcount\nstr  \newcount\lstr

\def\strony#1#2#3#4#5{%
  \odstrony #1 \dostrony #2
  \def\przesunieciex {#3} \def\przesunieciey {#4}
  \lstr \numexpr \dostrony-\odstrony+1 \relax
  \nstr 1
  \loop
    \stronapdf \nstr{#5}\przesunieciex\przesunieciey
    \vfil\break
  \ifnum\nstr<\lstr \advance\nstr 1 \repeat
}

%% --- tu zmieniać: ---
\strony {01}{12}{5mm}{5mm}{plik_0.pdf}
\strony {13}{18}{5mm}{5mm}{plik_1.pdf}
 ... itd ...
\bye

Oczywiście koniec pliku należy zmodyfikować, wywołując polecenie \strony tyle razy ile trzeba. Powyższe wypróbowałem i działa doskonale. Trzeci i czwarty argument polecenia \strony określa przesunięcie i umożliwia dopasowanie marginesów na stronie (dla każdego pliku oddzielnie).

Inne proponowane do tego celu rozwiązania to: latex plus pakiet pdfpages, pdftk (ORA wydało nawet książkę PDF Hacks--nie wiedziałem) albo ghostscript uruchomiony w następujący sposób:

gs -q -sPAPERSIZE=A4 -dNOPAUSE -dBATCH -sDEVICE=pdfwrite \
   -sOutputFile=out.pdf in1.pdf in2.pdf...

Więcej informacji na temat łączenia plików PDF można znaleźć w tekście: How to concatenate PDFs without pain.

url | Thu, 30/08/2007 20:29 | tagi: , ,
Ładniejszy Emacs, uzupełnienie

W nawiązaniu do tekstu nt. Emacsa, kol. Wanted podpowiedział, że oprócz Bitstream Vera, który faktycznie nie ma za dużo diakrytyków, jest klon tego fontu z dużą liczbą znaków pn. DejaVu (DejaVu fonts). Spróbowałem to zainstalować wpisując yum install dejavu-fonts, ale się nie udało:

Error: dejavu-fonts conflicts with fontconfig >= 2.3.0

Hmm, dziwne. Żeby czegoś nie popsuć wolałem działać ostrożnie. Rozpakowałem archiwum .rpm:

rpm2cpio dejavu-fonts-2.18-1.rf.noarch.rpm | cpio -idv

W środku nie było nic nazwyczajnego. Pliki ttf + dokumentacja. Pliki .ttf umieściłem ręcznie w /usr/share/fonts/dejavu/. Na wszelki wypadek uruchomiłem w tym katalogu mkfontdirmkfontscale. Uruchomiłem Emacsa w następujący sposób:

/usr/local/emacs23/bin/emacs-23.0.0 --font "DejaVuSansMono-14" --multibyte

Wygląda, że działa. Przy okazji i zupełnie przypadkowo wygooglałem informację nt. projektu fontów STIX. Z tego co wyczytałem ma to być podobna do Times New Roman rodzina bogatych w diakrytyki fontów. Na dniach mają być gotowe i upublicznione. Zobaczymy, być może będzie to coś ciekawego.

url | Tue, 28/08/2007 20:52 | tagi: , , , , ,
Kolibki Adventure Park

Pomiędzy Sopotem a Gdynią ,,od zawsze'' znajdował się tor do wyścigów motocrosowych. Akurat ten sport mnie specjalnie nie pasjonuje, łaziłem tam jednak od czasu do czasu. Obok toru jest taki zapomniany teren: jakieś budy, w których ewidentnie ciągle ktoś mieszka, zniszczone ogródki działkowe i inne budowle. Trochę to dziwne miejsce, bo kilometr-dwa obok (czyli w Sopocie) metr kwadratowy mieszkania kosztuje majątek a tutaj taka dzicz i żadnego zainteresowania zaprowadzeniem cywilizacji. BTW z zeszłym roku pełno tu było ucha bzowego. Taki nietypowy grzybek, jadalny, ale mało kto go je (przynajmniej w Polsce). Nietypowy ze względu na kształt i czas, w którym można go zbierać (zima). Aha, tak dla porównania chiński grzyb mun aka cloud ear fungus vel auricularia polytricha, gdyby ktoś uważał ucho za coś obrzydliwego.

No więc dziś się okazało, że na motocrossie jest centrum różnych dziwnych sportów. Na stronach Urządu Miasta w Gdyni: znalazłem więcej informacji na ten temat: W czwartek, 2 sierpnia w Kolibkach (na terenach dawnego motocrossu) ruszył największy park przygody w Polsce... No to Misiek przeoczył takie wydarzenie! Ale byliśmy w Zakopanem więc jest usprawiedliwiony.

Na terenie ,,bud i działek'' jest też (nowa) wieża widokowa. Przypadkowo na nią wlazłem w zeszłym roku jak była w budowie. Teraz jest już gotowa i można z niej oglądać Trójmiasto plus Hel na horyzoncie (zdjęcia, regulamin). Z dziećmi albo jak z gośćmi z Polski nie ma co robić, to można się wybrać --powinno się spodobać. Najprościej się tu dostać idąc od strony Gdyni ulicą Spółdzielczą (początek w okolicach przystanku PKP Gdynia-Orłowo). Alternatywnie, od strony Sopotu z ulicy Bernadowskiej należy skręcić w lewo, w leśną drogę, naprzeciw pierwszego budynku po prawej stronie tej ulicy, idąc od strony torów PKP (tę drogę widać na google maps).

url | Tue, 28/08/2007 20:09 | tagi: , ,
Przed RWC 2007

Do sukcesów odchodzącego rządu oprócz spadku bezrobocia i przestępczości oraz likwidacji specsłużb dodam możliwość (wreszcie) oglądania w TV pucharu świata w najbardziej zespołowej z gier zespołowych czyli Rugby. Do tej pory był z tym kłopot, a ja jestem wielkim (platonicznym) fanem tej gry. Piłka nożna no nie wytrzymuje porównania.

Ale w tym roku i od tej edycji wreszcie przełom. RWC 2007 ma być pokazywany w Polsacie. W fazie grupowej, która kończy się 30 września interesująco zapowiadają się mecze: w grupie A -- Anglii, RPA i Samoa (9, 14, 22); w grupie B -- Walii i Australii (15); w grupie C -- Nowej Zelandii, Szkocji i Włoch (8, 23, 29) oraz w grupie D -- Francji, Irlandii i Argentyny (7, 21, 30).

url | Sat, 25/08/2007 17:35 | tagi: , , ,
Statystyki rowerowe

Jak większość jeżdżących na rowerze pilnie notuję przejechane kilometry i inne przydatne dane. Robię to w sposób dość elementarny:

  <day date="2007/08/25">
   <ride dist="60" exdist="60.00" bike="b">
    <by name='Banino' />
    <by name='Miszewo' />
    <by name='Przodkowo'/>
    <by name='Czeczewo'/>
    <by name='Warzno'/>
    <by name='Kielno' />
   </ride>
  </day>

Jak widać jest to plik w formacie XML; co oznaczają poszczególne elementy i atrybuty można IMHO się zorientować po ich nazwach. Odpowiednie skrypty XSLT formatują dane, liczą średnie miesięczne i roczną. Całość jest dostępna tutaj. Ponieważ system jest w miarę toporny, dziś zrobiłem rozpoznanie co w tym zakresie oferują inni i znalazłem dwa potencjalnie interesujące serwisy: bikestats oraz bikebrother.

Pierwszy z wymienionych jest prostszy: pozwala na oznakowanie wyjazdów za pomocą daty, czasu, przejechanych kilometrów oraz krótkiego opisu. Bikebrother ma dużo bardziej rozbudowany opis. Więcej można przesłać ślad GPSa trasy. Pliki GPS mogą pobrać inni użytkownicy.

Oba serwisy prezentują dane w efektowny sposób i to jest ich jedyny plus. Minusów jest więcej: dodawanie danych za pomocą formularzy to przeżytek:-) Jakiś REST-based API byłoby dużo bardziej wygodniejsze. Wpisywanie wszystkich danych do formularza Bikebrothera musi być męczące. Nie ma (albo jest bardzo starannie ukryte) eksportu danych, więc i tak trzeba robić kopie.

Reasumując na razie minusy zdecydowanie przewyższają nad plusami. No i na koniec: licencje. Oczywiście na ten temat nic nie ma, pliki zawierające ślady GPS są udostępnione ,,na kocią łapę'' (albo nie na kocią: są własnością autorów). Może jestem przewrażliwiony ale nie lubię w ten sposób dzielić się danymi. Tzn. lubię dzielić się ale na określonych zasadach, np Creative Commons. Za granicą też zresztą kombinują zamiast korzystać ze sprawdzonych rozwiązań.

Poniżej przykładowe ekrany wpisywania danych (pierwszy z Bikestat, drugi z BB; jak się kliknie to będą większe):

Bikestat Bikebrother

url | Sat, 25/08/2007 16:33 | tagi: ,
Zamiana plików TeX na MS Word

Jakiś czas temu Elka uaktualniła fragment swojej książki nt. akordeonów. Ma on być wydany w postaci artykułu w wydawnictwie prestiżowej Akademii Muzycznej. Oczywiście podesłanie tego w formacie .tex nie wchodziło w grę. Dokument nie jest specjalnie skomplikowany, ale zwiera kilkadziesiąt przypisów, kilkanaście rysunków i setki poleceń służących do tworzenia skorowidzów. W oryginale był to dokument plain TeXa, tyle, że łatwo (na szczęście) go było zamienić na dokument LaTeXowy:

%& --translate-file=il2-pl
\documentclass{article}
\usepackage{polski}
\usepackage{graphicx}
\newcommand\PICDIR{} %
\renewcommand\index[1]{} %% eat
\newcommand\xindex[1]{} %
\newcommand\AWindex[2][NIL]{} % 
\newcommand\Piece[2][NIL]{\emph{#2}} % eat
\renewcommand{\includegraphics}[2][NIL]{%
  \begin{center}\texttt{#2.eps}\end{center}}
\renewcommand\dywiz{-}
\setcounter{secnumdepth}{-1}

\title{Polska literatura akordeonowa...

Polecenia indeksujące \index, \xindex, \AWindex oraz \Piece zostały przedefiniowane: zjadają swoje argumenty i nie wstawiają nic do składu. Przedefiniowałem też \includegraphics, bo plik .rtf ze wstawionymi rysunkami miał ponad 40 Mb. Skoro ostateczny skład ma być w InDesign, to rysunki można wysłać osobno i w lepszym formacie.

BTW: konstrukcja \newcommand\polecenie[2][NIL] przedefiniowuje polecenie, które ma dwa argumenty, w tym jeden (pierwszy) jest opcjonalny, tzn. użycie takiego polecenia ma postać: \qq[pierwszy]{drugi} albo \qq{drugi}. Napis NIL, to domyślna wartość, tego (opcjonalnego) argumentu.

Kiedy mam potrzebę zamiany pliku LaTeXa na MS Word używam latex2rtf. Nie jest to program idealny, ale lepszego nie znam:

latex2rtf -i polish -C latin2 akordeony.ltx

Przełącznik -i polish powinien wstawiać generowane napisy w języku polskim (tj, Rysunek zamiast Figure itp.). Kłopot, bo tego nie robi (wersja 1.9.16a, beta). Próbowałem na różne sposoby a rzecz wydaje się banalna, jednak uparcie wstawiane są teksty angielskie (można to ew. poprawić edytując plik RTF, np. Perlem). Za to przełącznik -C, ustawiający stronę kodową, działa.

Po uruchomieniu latex2rtf, pojawiło się kilka ostrzeżeń:

akordeony.ltx:3 Unknown style option polski ignored
akordeony.ltx:4 Unknown style option graphicx ignored
akordeony.ltx:9 No existing definition for \index
akordeony.ltx:13 No existing definition for \includegraphics
akordeony.ltx:14 No existing definition for \dywiz

Ale konwersja została dokonana (prawie) prawidłowo. W szczególności latex2rtf prawidłowo zinterpretował moje redefinicje i pominął zwartość poleceń indeksujących a zamiast plików graficznych wstawił ich nazwy. Jedyny błąd jaki zauważyłem, to wstawianie zbędnego odstępu pomiędzy \footnote a następującym po numerze przypisu znakiem przestankowym, tj. numer-odstęp-kropka, zamiast numer-kropka.

Przy okazji konwersji z LaTeXa do MSW: dia potrafi wyeksportować dobrej jakości diagramy w formacie EMF.

url | Fri, 24/08/2007 14:11 | tagi: , , , , ,
Ładniejszy Emacs

Kierując się wskazówkami ze strony www.emacswiki.org skompilowałem Emacsa 23, wersja alfa. Ten Emacs umie wreszcie korzystać z dobrej jakości fontów TrueType dzięki wsparciu Xft. Zatem:

cvs -z3 -d:pserver:anonymous@cvs.savannah.gnu.org:/sources/emacs co -r emacs-unicode-2 emacs
./configure --with-gtk --enable-font-backend --with-xft --prefix=/usr/local/emacs23
make
mkdir /usr/local/emacs23 
chown tomek:tomek /usr/local/emacs23

Na wszelki wypadek dociągnąłem jeszcze yum install giflib-devel, bo ./configure zgłosił błąd (po co mi gify?). Oczywiście nie chcę zmieniać starego emacsa na wersję alfa, stąd pomysł zainstalowania wszystkiego w katalogu /usr/local/emacs23. Będę miał dwa The one true editor -- prawdziwie skumulowana potęga.

Teraz uruchamiam:

emacs --font "Bitstream Vera Sans Mono-10"

Krój Vera fajnie wygląda, ale polskich ogonków nie ma, i nawet nie jest to wina Emacsa tylko po prostu nie ma ich w foncie (Bitstream Vera Fonts).

Spróbowałem zatem z innym ustawieniem, i po dłuższym kombinowaniu czemu zamiast polskich znaków widzę coś zupełnie innego udało się:

## emacs-23 zdaje sie działać:
/usr/local/emacs23/bin/emacs-23.0.0 --font "Monospace-13" --multibyte

Na etapie rozruchu dodałem jeszcze --debug-init, dzięki czemu szybko ustaliłem co się gryzie ze starego .emacs i innych plików startowych z nowym Emacsem. Nie było tego dużo: hscroll-global-mode, pakiety session, trampjde. Zamiast session w dystrybucji Emacsa jest desktop.el; tramp.el też jest już w dystrybucji -- konflikt dotyczył starej wersji. Dodałem zatem kilka warunków w stylu:

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

Emacs faktycznie używa fontu TrueType. Można to sprawdzić, np. za pomocą sposobu podanego w CSE HUJI Emacs Fonts HOWTO:

(frame-parameter nil 'font)

Wpisujemy powyższe do dowolnego bufora, ustawiamy kursor za zamykającym nawiasem a następnie C-x C-e. W minibuforze pojawi się:

"-b&h-luxi mono-medium-r-normal--15-*-*-*-*-*-fontset-startup"

Wygląda zatem, że to luxi mono Charlesa Bigelowa i Krisa Holmesa.

Jakość (czytelność) tekstu jest faktycznie znacząco lepsza, ale z wyświetlaniem poszczególnych znaków (na pierwszy rzut oka) jest różnie: niektóre znaczki jakby trochę są krzywe:-). Może to kwestia fontu? Sprawa wymaga dalszego zbadania. Poniżej dwa przykładowe ekrany (jak się kliknie to będą większe):

Emacs Emacs

url | Tue, 21/08/2007 01:12 | tagi: , , , ,
Problemów z Garminem ciąg dalszy

Okazało się, że w sobotę (28 lipca) mój Garmin Geko 301 nie tylko przestawił magicznie częstotliwość zapisu śladu, ale także cofnął się w czasie. W rezultacie kilka wpisów ,,zachodzi'' chronologicznie na siebie. Wyszło to dzisiaj, gdy usiłując wyciąć kawałek śladu przy pomocy programu gpsbabel uruchomionego w następujący sposób (por. Data Filters):

gpsbabel -t -i gpx -f plik-we.gpx -x track,start=2007081907,stop=2007081915 -o gpx -F plik-wy.gpx

otrzymałem:

trackfilter-init: Track points badly ordered (timestamp)!

Nie wiem czemu tak się stało. Mniejsza z tym. Zamiast ręcznie poprawiać błędne wpisy można spróbować dodać opcję merge, która łączy wszystkie ślady w jeden usuwając ,,części wspólne'' (jeżeli ślady nie zachodzą na siebie można zamiast merge, użyć pack)

gpsbabel -t -i gpx -f plik-we.gpx -x track,merge,start=2007081907,stop=2007081915 \
    -o gpx -F plik-wy.gpx

Powyższe wytnie ślad utworzony od siódmej do piętnastej, 19 sierpnia 2007 r. BTW: do ściągnięcia zawartości Geko na dysk użyłem następującego skryptu:

#!/bin/bash
# http://wiki.openstreetmap.org/index.php/How_to_get_data_from_a_Geko_201
filename="`date +%y%m%d-%H%M`"
echo "creating $filename-waypoints.gpx"
gpsbabel -i garmin -f /dev/ttyS0 -o gpx -F $filename-waypoints.gpx
sleep 2
echo "creating $filename-tracklog.gpx"
gpsbabel -t -i garmin -f /dev/ttyS0 -o gpx -F $filename-tracklog.gpx

Do tej pory używałem okienkowego programu gpsman; gpsbabel jest wygodniejszy bo nie trzeba klikać, tyle że gpsman potrafi wyświetlić ślad, co czasami się może przydać, więc nie skreślam go ostatecznie.

url | Sun, 19/08/2007 22:30 | tagi: , , ,
Konfigurowanie blosxom

Pro memoria spisałem swoje męki związane z zainstalowaniem i skonfigurowaniem skryptu blosxom. Głównie myślałem o sobie, ale może komuś też się przyda. Tekst jest tutaj.

url | Fri, 10/08/2007 15:28 | tagi: , , , ,
Wysyłanie zdjęć na Wikicommons

W tym tekście opiszę w jaki sposób wysyłam swoje zdjęcia na Wikimedia Commons stosując lekko podrasowany skrypt Erika Möllera (wersja oryginalna). Po pierwsze należy zarejestrować się na Wikimedia Commons (w sposób opisany na podanej wyżej stronie). Potem zmodyfikować skrypt, nadając odpowiednie wartości zmiennym $username oraz $password, znajdującym się na początku skryptu. Teraz należy skopiować wszystkie obrazki do katalogu i uruchamiać skrypt (,,z poziomu'' katalogu nadrzędnego) w następujący sposób:

perl upld2wc.pl katalog

W wyniku działania skryptu powstanie zaślepkowy plik files.txt, który wygląda jakoś tak:

>plik1.jpg
{{Information
|Description= [[:pl:Sopot|Sopot]], Poland
|Source=own work
|Date=2007
|Author=Tomasz Przechlewski
|Permission={{cc-by-2.5}}
}}

>plik2.jpg
{{Information
|Description= [[:pl:Sopot|Sopot]], Poland
|Source=own work
|Date=2007
|Author=Tomasz Przechlewski
|Permission={{cc-by-2.5}}
}}
...

Teraz trzeba dodać/zmodyfikować opis do każdego rysunku (wiersz Description); następnie należy uruchomić skrypt powtórnie:

perl upld2wc.pl katalog

Jakoś nie mogę się przekonać do używania Unicode (nie mam też specjalnie do tego motywacji -- jeden bajt cały czas mi wystarcza), dlatego skrypt ,,oczekuje'', że plik files.txt jest kodowany w wariancie iso-8859-2, natomiast to co jest wysyłane na Wikimedia Commons jest w Unikodzie.

Zdjęcia zrobione w trybie pionowym trzeba oczywiście obrócić. Do tego celu używam programu jpegtran, ale taki sposób żeby zostały zachowane metadane EXIF. Do modyfikowania metadanych EXIF używam programu exiv2:

# kompletny skrypt jest tutaj
exiv2 ex plik-we.jpg # zapisuje EXIF w pliku plik-we.exv 
jpegtran -rotate 90 plik-we.jpg > plik-wy.jpg # obrót
mv plik-we.exv plik-wy.exv # zmiana nazwy
exiv2 -in plik-wy.jpg # wstawia EXIF do obróconego pliku

W podręczniku programu exiv2 błędnie podane jest exiv2 -it zamiast exiv2 -in. Uwaga: podanie exiv2 -pt powoduje wyświetlenie wszystkich metadanych. Zamiast jpegtran można spróbować skorzystać z programu exiftran, który potrafi obrócić obrazek z zachowaniem metadanych. Program exiftran znajduje się w archiwum fbida (przynajmniej w dystrybucji FC5).

Wreszcie nie zawadzi dodać informacje dotyczące autora/licencji do samego pliku ze zdjęcie modyfikując odpowiednie pola EXIF, w tym przypadku Exif.Image.Artist oraz Exif.Image.Copyright:

# kompletny skrypt jest tutaj
exiv2 -M"set Exif.Image.Copyright Licence: CC Attribution" \
  -M"set Exif.Image.Artist Creator: Tomasz Przechlewski" plik

BTW: do manipulowania metadanymi EXIF w skryptach Perla służy świetny pakiet Image::ExifTool. (Por. Mój sposób na dodawanie zdjęć na flickr.com).

Dopisane 21 lutego 2008: Exiv2 jest do kitu, a co najmniej niepotrzebny. Zdjęcie można obrócić dużo prościej. Zamiast mnożyć byty w postaci skryptów basha, My_jpeg_rot (BTW znak minus w nazwach jest niepoprawny w bashu) jest funkcją, którą należy umieścić w ~/.bash_profile:

# Obrót pliku .jpg z zachowaniem metadanych EXIF
# wykorzystanie: My_jpeg_rot [-l -r -u] plik
function My_jpeg_rot () {

ROT="90"

while test $# -gt 0; do
  case "$1" in
       -l) ROT="90" ;;
       -r) ROT="270" ;;
       -u) ROT="180" ;;
        *) FILE="$1" ;;
  esac
  shift
done

if [ "$FILE" = "" ] ; then
  echo " *** Podaj nazwę pliku ***"
else
  f=`basename $FILE .jpg`
  jpegtran -rotate 90 -copy all -outfile "${f}_r".jpg "$f".jpg
  # clear rotation/orientation so that some viewers (e.g. Eye
  # of GNOME) won't be fooled
  jhead -norot "${f}_r".jpg 
fi

unset FILE ROT f 
}

Zobacz też HOWTO: Rotate JPG images in GNOME's Nautilus File Manager.

Podobnie skrypt dodający informacje dotyczące autora/licencji zmieniłem na program w Perlu wykorzystujący doskonały moduł Image::ExifTool zamiast exiv2:

#!/usr/bin/perl -w
# Wykorzystnie: $0 [-l licencja ][-c autor] plik1 plik2 ...
use strict;
use Image::ExifTool;
use Getopt::Long;

my $credentials = "Creator: Tomasz Przechlewski";
my $license_stmt = "Licence: CC Attribution";
my $help = 0;

GetOptions( 'help' => \$help,
    'credentials=s' => \$credentials,
    'license=s' => \$license_stmt,);

if ($help) { print "$0 [-l cpr_notice][-c creator] file1 file2 ...\n"; exit 0 ;}

my $eT = new Image::ExifTool; 

while( my $photo = shift @ARGV ) {
  $eT->ExtractInfo($photo);

  #add_more_exif($exifTool);
  $eT->SetNewValue(Artist => "$credentials");
  $eT->SetNewValue(Copyright => "$license_stmt");

  # rewrite Photo to update Exif:
  
  $eT->WriteInfo($photo);
  print "Done: $photo $credentials $license_stmt\n";
}
## -- end --
url | Wed, 01/08/2007 23:00 | tagi: , , , ,