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
Konwersja DTD na RNC: trang i nXML

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ę trangiem:

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.

url | Sun, 19/02/2012 16:08 | tagi: , ,
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:-)

url | Mon, 15/08/2011 18:55 | tagi: , , , , , , , ,
Numer bieżącego roku w Emacsie

Poniższe przypisuje zmiennej current-year napis zawierający numer bieżącego roku:

(setq current-year (number-to-string (nth 5 (decode-time (current-time)))))

Bez number-to-string zmienna current-year zawierałaby liczbę. Ale wtedy byłby problem jeżeli coś takiego byłoby argumentem funkcji concat.

url | Tue, 02/03/2010 20:26 | tagi: ,
Emacs 23

Od 29 lipca 2009 najnowszą wersją Emacsa jest 23.1. Warto zmienić wersję 22 na 23, bo ta ostatnia potrafi m.in. korzystać z fontów TrueType.

url | Tue, 11/08/2009 06:38 | tagi: ,
Elka w wikicommons
Elka+Misiek disguised as Welsh Rugby Fans

Skrypt Erika Möllera , którego używałem do ładowania zdjęć na WikiCommons przestał działać. Konsultacja na stronie wykazała, że jest outdated and should be considered deprecated and useless. Program proponowany w zamian nie podoba mi się. Może i jest dobry, ale zbytnio się różni od poprzedniego a ja nie mam czasu go rozgryzać. Znalazłem za to poprawioną wersję skryptu Möllera, która działa, tutaj (lub tutaj).

Jest ciągle problem z kodowaniem (używam domyślnie ISO-8859-2), bo po przesłaniu na WC tekst jest niepoprawnie zakodowany. Metodą prób i błędów ustaliłem, że działa dopisanie na początku skryptu czegoś takiego:

binmode( STDOUT, ':utf8' );
use open IN => ':encoding(iso-8859-2)'; ## I am using legacy encoding, ha!
use open OUT => ':utf8'; ## write utf8

Opis zdjęcia w pliku tekstowym jest w ISO, po przesłaniu na WC kodowanie jest OK. Próbowałem wysyłać pliki kodowane jako UTF-8, ale to też nie działało (mój perl jest w wersji v5.8.8).

Rysunek obok znalazłem przypadkiem. Ktoś skopiował moje zdjęcie z flickr.com na WC dodając zabawny opis...

Przy okazji ustaliłem jak przejść do ,,trybu UTF'' otwierając nowy plik w Emacs: C-x C-m f utf-8

url | Fri, 24/04/2009 17:01 | tagi: , , , , ,
Poprawianie plików PDF w edytorze Emacs

Opisany wcześniej skrypt uruchamiam ,,spod'' Emacsa działającego w trybie BibTeX. Konkretniej poniższa funkcja bibtex-adjust-pdf-filename pobiera wartości pól author, title, year oraz tp:keywords, a następnie przekazuje te wartości w postaci argumentów ww. skryptu uruchamianego jako polecenie systemowe. Mam nadzieję dzięki temu mieć większy porządek w przechowywanych dokumentach pobranych z różnych archiwów elektronicznych.

(defun bibtex-adjust-pdf-filename (file)
"Dla bieżącego rekordu bibtexa modyfikuje plik zawierający relewantny dokument PDF 
(dodaje co trzeba do słownika Info oraz modyfikuje nazwę). Oryginalna nazwa pliku
PDF jest podana z minibufora. Modyfikacja jest dokonywana przez zewnętrzny skrypt. 
Cała ta procedura jest po to żeby można łatwiej później odszukać plik na dysku...."
  (interactive "fNazwa pliku: ")
  (save-excursion
    (bibtex-beginning-of-entry)
    (let* ( (author (bibtex-text-in-field "author"))
	    (year (bibtex-text-in-field "year")) 
	    (keywords (bibtex-text-in-field "tp:keywords")) 
	    (title (bibtex-text-in-field "title")) 
	    (command (format "%s -rename -f \"%s\" -t \"%s\" -a \"%s\" -k \"%s\" -y \"%s\""
			  (executable-find "pdf_set_info.pl") ;; script name
			  (expand-file-name file) title author keywords year)) )
      (progn  (shell-command command)
	      (previous-line)
	      (beginning-of-line)
	      (insert (concat "%% patched with pdf_set_info.pl %%" ))))))

Przy okazji namiar na bloga anonimowego użytkownika Emacsa zawierającego parę ciekawych rzeczy.

url | Mon, 24/11/2008 17:23 | tagi: , ,
Formatowanie elementu optional (w Docbook XML)

W nazwiązaniu do poprzedniego wpisu. W dokumencie o XPath pojawia się taki oto fragment:

[predykat]*]]>

Co ma oznaczać, że wyrażenie ścieżkowe XPath składa się z  osi i testu oraz opcjonalnego predykatu, który może być powtórzony wielokrotnie (stąd *). Teraz standardowo szablony XSL Docbook (aka XSLDB) zamieniają ww. fragment XML na coś takiego:

oś::test[[predykat]*]

Niezręczność polega na tym, że nawiasy kwadratowe raz są używane do oznaczania części opcjonalnej a raz oznaczają, że należy je wstawić literalnie. W XSLDB znaki wstawiane wokół elementu optional są sparametryzowane -- są to mianowicie: arg.choice.opt.open.str oraz arg.choice.opt.close.str. Zamiast `[' i `]' zdecydowałem się na U+27E8 (Mathematical left angle bracket) oraz U+27E9 (Mathematical right angle bracket) Teraz próba uruchomienia:

xsltproc --stringparam arg.choice.opt.open.str "&#x27e8;" \
   --stringparam arg.choice.opt.close.str" select="&#x27e9;" ...

Kończy się błędem basha... Ciekawe czemu? Można podać ww. znaki binarnie -- wtedy wszystko działa. Ale UTF-8 w Makefile? Miałem opory, dodałem więc do arkusza uruchamiającego transformację XML → XHTML:

<xsl:param name="arg.choice.opt.open.str" select="'&#x27e8;'" />
<xsl:param name="arg.choice.opt.close.str" select="'&#x27e9;'" />

Teraz omawiany fragment wygląda mniej dwuznacznie:

oś::test⟨[predykat]*⟩

BTW w trybie nxml wpisanie &#x27e8; powoduje, że automagicznie kształt znaku pojawia się za średnikiem (ale nie jest wstawiany do tekstu -- po prostu jest to podpowiedź Emacsa, jak wygląda kształt znaku.) Dodatkowo po najechaniu myszą na encję wyświetlana jest nazwa znaku (w oknie podpowiedzi zwanym tooltip). Te ułatwienia są fajne w środowisku jednobajtowym--a ja póki co używam jako domyślnego kodowania ISO-8859-2.

Przy okazji użyteczne zestawienie znaków Unicode -- odpowiedników różnych TeXowych symboli matematycznych. Wystarczy zaznaczyć myszą i wkleić do Emacsa a następnie C-x = (what-cursor-position) wyświetli co zacz, w tym numer znaku.

url | Sat, 01/11/2008 20:58 | tagi: , , , ,
Projektowanie schematów XSD w edytorze Emacs
Zrzut z ekranu

Można używać nxml-mode do tworzenia schematów XSD. To odkrycie jest wynikiem szukania edytora/IDE ułatwiającego projektowanie Schemy. Oczywiście jest XMLSpy ale tylko dla MSW. Jest też jakiś moduł do netBeans, którego nie próbowałem... Niezbędny dla działania nxml-mode schemat do schemy w formacie RNG/RNC jest dostępny ze strony www.relaxng.org. W związku z tym odkryciem zmieniłem konfigurację emacsa:

(load "rng-auto.el")
;; http://www.emacswiki.org/emacs-en/NxmlMode
(add-to-list 'auto-mode-alist (cons (concat "\\." 
  (regexp-opt '("xml" "xsd" "rng" "xslt" "xsl" "svg" "rss") t) "\\'")
  'nxml-mode))

Należy teraz ,,zarejestrować'' schemat do schemy w pliku konfiguracyjnym pakietu nxml-mode (schema/schemas.xml):

  <uri pattern="*.xsd" typeId="XML Schema"/>
  <namespace ns="http://www.w3.org/2001/XMLSchema" typeId="XML Schema"/>
  <typeId id="XML Schema" uri="xmlschema.rnc"/>

Oryginalny schemat powoduje błąd: regular expression too big in xmlschema.rnc. Na tej stronie jest to dokładnie opisane i jest udostępniony plik .diff, tyle że nie byłem w stanie go zastosować uruchamiając patch. Poprawiłem plik ręcznie. Nie ma 100% gwarancji, że poprawka jest OK, ale dla kilku schematów nxml-mode działał poprawnie, więc szanse są, że tak jest. Poprawiony plik .rnc jest tutaj

Teraz wszystkie pliki XML (w tym szablony XSLT oraz schematy XSD) mogę edytować w trybie nxml (dowód w postaci zrzutu ekranu obok).

url | Sun, 26/10/2008 10:09 | tagi: , , , , ,
Emacs 23 w FC8

Zainstalowałem Emacsa w wersji 23 z plików rpm przygotowanych przez Brada Walkera (cf. rpm.bradmwalker.com/). Wygląda na to, że rpm miał być przygotowany w taki sposób, żeby dodawał nową wersję emacsa do systemu bez usuwania starej (poprzez polecenie alternatives). Ale coś nie wyszło: u mnie usunął starego, a nowy został zainstalowany w katalogu /usr/bin pod nazwą: emacs-23.0.60. Ręcznie zatem dodałem:

/usr/sbin/alternatives --config emacs

Wpis dotyczący Emacs 23 już był--nie trzeba była uruchamiać alternatives --install. Dodałem też wpis do /etc/X11/Xresources:

Emacs.font: Monospace-10

Można też to samo wpisać do ~/.Xresources, ale wtedy nie będzie system wide.

url | Thu, 06/03/2008 11:02 | tagi: , ,
Emacs i UTF-8
F. Michalak
F. Michalak
F. Michalak

Emacs 22 działa z UTF-8 out-of-the-box. Miałem dziwny problem, cały bufor zmienił się w drobną kaszkę (co widać obok--musiałem go odtworzyć via Google btw). Podejrzewałem moją funkcję do wstawiania niełamliwej spacji.

(defun insert-nbspace()
  "Insert character 160, no-break space "
  (interactive) 
  (insert " ") )

Okazało się jednak, że ww. funkcja nie powoduje problemów a teraz nawet nie mogę odtworzyć błędu, który wtedy wystąpił. Tak czy owak, pliki UTF-8 są otwierane jako UTF-8, a te kodowane jednobajtowo jako ISO-8859-2. W Gnus 5.11 też to wszystko działa, do tego smilies sa w full kolorze. Rewelacja. Tim Bray (ten od XML) też używa Emacsa.

url | Mon, 18/02/2008 14:46 | tagi: ,
Strojenie Emacsa cd.

Do pisania skryptów w Perlu używam trybu cperl. Aby cperl był domyślnym trybem (zamiast perl-mode) trzeba wpisać do .emacs:

(defalias 'perl-mode 'cperl-mode)

Tryb cperl ma użyteczną funkcję: cperl-info-on-command (C-c C-h F). Wystarczy ustawić kursor na nazwie funkcji/polecenia nacisnąć C-c C-h F aby została wyświetlona pomoc z podręcznika Perla. Konkretnie jest wyświetlana strona w formacie .info. Dokumentację do Perla w tym formacie musiałem ściągnąć samodzielnie i umieścić w katalogu, w którym system oczekuje plików .info (u mnie jest to /usr/local/share/info/). Podręcznik jest dostępny pod adresem:

CPAN/doc/manual/info/perl5-old/perl5-info.tar.gz

Tyle, że stary (wersja 5.6 Perla). Ewentualnie można samemu wygenerować strony nowego podręcznika w formacie .info za pomocą pod2texi. Są one dostępne pod adresem:

CPAN/doc/manual/info/perl5/pod2texi-0.1.tar.gz

Tryb cperl zwolnił dramatycznie w Emacsie 22 zainstalowanym na laptopie. Po wpisaniu w google emacs+22+cperl+slow dotarłem do dyskusji na ten temat. Podmiana oryginalnego cperl.el z dystrybucji Emacsa na wersję ściągniętą z tej strony pomogła. W PC poprawnie działa oryginaly cperl, problem jest zatem z gatunku magicznych.

Magicznie też zmienił mi się program do sprawdzania pisowni. Ponieważ aspell był wolny i nic nie wnosił za pomocą niewielkiego haka używałem dalej ispella. W Emacs 22 znowu zaczął być używany aspell. Dopisałem zatem do .emacs:

(setq-default ispell-program-name "ispell")

Ale to już chyba ostatni raz. Wprawdzie aspell dalej jest wolniejszy, ale już można z nim normalnie pracować. Przy następnej zamianie systemu już mi się nie będzie chciało kompilować ispella.

url | Fri, 04/01/2008 22:59 | tagi: ,
Kłopoty z Emacs i AWK

Emacs 22 nie współpracuje z pakietem session.el, który służy do zapisania do pliku na potrzeby następnej sesji iluś tam ostatnio wykonanych poleceń, otwartych plików itp. Ćwicząc Emacs 23 już to przerabiałem i na taką okoliczność wstawiłem do plików startowych tryb desktop-save:

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

O tych wszystkich nastawach zdążyłem już zapomnieć. A że Emacs na starcie czyta kilkanaście plików to nie od razu doszedłem czemu wraz z przejściem na Emacsa 22 przestał działać session.el a włączyło się coś innego. (Ten blog jest w dużej części po to, aby takich sytuacji uniknąć w przyszłości:-)

Tryb desktop-save nie podoba mi się: przy starcie Emacsa ładuje się kilkadziesiąt plików, większość z nich zupełnie niepotrzebnie. Najgorzej wygląda sprawa z plikami edytowanymi poprzez trampa. Emacs łączy się z odległą maszyną. Nie wiem czemu robi to kilkakrotnie. Wszystko to trwa oczywiście a próba okiełznania desktop-save nie dała zadowalającego rezultatu. W dokumentacji jest zresztą niewiele na ten temat. Spróbowałem przykładowo ustawić zmienną desktop-restore-eager, ale to niewiele pomogło. Faktycznie Emacs szybciej startował, ale jak tylko chwilę nie dotykałem klawiatury zaczął otwierać resztę buforów. Nie szło tego przerwać... Jednym słowem mulił, tylko że nie na początku.

W ,,sprawie trampa'' wyczytałem w odpowiedzi na żale jakiegoś użytkownika żeby dać sobie z nim spokój i działać na maszynie odległej przez fuse-sshfs. Czy ja wiem? Jak przed uruchomieniem nie zamontuję odległego katalogu, to co zrobi desktop-save? To chyba nie jest dobre rozwiązanie.

Ostatecznie przełączyłem się na standardowy tryb savehist. Działa z grubsza jak session.el. Czemu ja w ogóle zacząłem używać tego ostatniego--nie pamiętam. Tryb desktop-save wyłączyłem.

W temacie AWK też pojawił się problemik. Dawno, dawno temu (ca 1994 mówiąc konkretnie) zrobiłem skrypcik do podliczania moich rocznych finansów. Działał. Aż w tym roku przestał (a może przestał wcześniej, tylko nie zwróciłem na to uwagi). Zaczęło się od komunikatu division by zero.

Miałem od dawna świadomość, że jakiś mądry tak przerobił gawka, iż przy ustawieniu lokali na PL traktuje on jako kropkę dziesiętną przecinek a nie kropkę. Po co to zrobiono--nie wiem. Wydaje mi się, że zrobiono bez sensu. Ponieważ mój skrypt był uruchamiany via skrypt basha, wystarczyło dopisać LANG=C:

#!/bin/bash
LANG=C exec gawk -f $AWKDIR/foo.awk $*

I działa znowu.

Dopisane 19 marca 2008: fuse_sshfs jest jednak świetnym rozwiązaniem. Ostatecznie nie pracuję na dziesiątkach maszyn, tylko na dwóch. W razie potrzeby montuję odległy katalog i już. Super wygodnie, nie tylko w połączeniu z Emacsem. Pakietu tramp już nie używam.

url | Wed, 02/01/2008 18:14 | tagi: , ,
Emacs i Firefox

Funkcja browse-url wyświetla w przeglądarce WWW stronę o podanym adresie URL. Takie tam drobne ułatwienie: nie trzeba wklejać adresu do przeglądarki; wystarczy ustawić ,,na nim'' kursor i wywołać funkcję za pomocą M-x lub uprzednio zdefiniowaną kombinacją klawiszy. Wtedy Emacs uruchomi przeglądarkę, a ta z kolei wyświeli żądaną stronę.

Domyślną przeglądarką jest Mozilla; u mnie np. jest to Mozilla 1.7.12. Wraz z przejściem na wersję 22 Emacsa wróciłem do sprawy skonfigurowania Emacsa z Firefoksem i spróbowałem nastaw podanych na emacswiki.org:

(setq browse-url-browser-function 'browse-url-firefox
   browse-url-new-window-flag  t
   browse-url-firefox-new-window-is-tab t)
(global-set-key (kbd "C-c C-L") 'browse-url) 

Działa ale wyświetla każdą kolejną stronę w nowej karcie Firefoxa podczas gdy Mozilla pokazuje nową stronę w starym oknie. Wolę sposób działania Mozilli, więc pozostanę przy domyślnych ustawieniach.

url | Mon, 31/12/2007 12:12 | tagi: , ,
Migracje grudniowe

W uczuciach jestem stały, nie lubię zmian i związanego z nimi zamieszania i ryzyka. Ale wreszcie po latach pożegnałem Telekomunikację Polską na rzecz firmy UPC. Bo UPC jest tańsze. Prawdę powiedziawszy to wcale nie będę płacił o wiele mniej -- ponieważ wybrałem dość szybkie łącze -- ale gdybym takie coś zamówił w TP to by wyszło znacząco drożej. W związku ze zmianą trzeba było kupić nowy modem, którego konfiguracja była jeszcze prostsza od tego poprzedniego, używanego z Neostradą.

Internet z UPC działa sprawnie za to firma denerwuje mnie swoją absolutnie fatalną stroną WWW. Sprawa o tyle mnie dotyczy, że w ramach umowy mam opłacać faktury via ww. stronę. Z mojego zatem punktu widzenia jej funkcjonalność sprowadza się wyłącznie do możliwości pobrania plików PDF z formularzem faktury. Wydawać by się mogło, że nie można spartaczyć tak prostego zadania. A jednak w globalnej korporacji wszystko jest możliwe: jakiś ,,myśliwy'' wymyślił, że strona będzie wykorzystywała flasha. Po co? Nie wiadomo. Za to nie działa w moim L-systemie. Być może w jakimś bardziej up-to-date by działało ale nie będę sprawdzał. Anyway sprawa jest kuriozalna...

Jest coś śmiesznego w zaufaniu tzw. przeciętnego człowieka do tzw. wielkich firm... Wracając zaś do tematu, w UPC mam mieć ten sam numer co w TP. Zobaczymy co z tego wyjdzie, bo mam niejasne przeczucie, że z tym też będzie problem.

Kontynuując temat migracji: założyłem konto looseheadprop1 na gmail i teraz jest to moja główna skrzynka. Włączyłem IMAP. Na tym etapie doszło zresztą do pewnego nieporozumienia, bo na relewantnych stronach google nie jest napisane wprost, że IMAP jest dostępny wyłącznie dla kont w języku angielskim. Innymi słowy, aby włączyć IMAP trzeba zmienić Gmail display language na English US inaczej można czekać na włączenie się IMAP ad mortem defecatus. No cóż, widocznie ten co pisał ww. stronę założył, że jak dokument jest w j. angielskim to tylko Anglosasi go przeczytają. Taka sobie logika... Problem zresztą być może już nie istnieje, albo zniknie wkrótce.

ScreenDump
ScreenDump

W związku z powyższym zacząłem korzystać z Thunderbirda (poprzednio używałem pine), który skonfigurowałem według wskazówek ze strony google i wszystko działa doskonale. Doinstalowałem kilka wtyczek: Attachment Extractor, Display Mail User Agent, Enigmail, Quick Locale Switcher oraz Virtual Identity. Na razie tylko korzystam z Display Mail User Agent:-). Więc jeżeli ktoś nie chce wyjść w moich oczach na buraka używającego Outlooka, to przynajmniej niech usunie z nagłówka wiersz X-Mailer (do was m.in. piję w tej chwili kol. BL:-). Wtyczka Quick Locale Switcher przyda się jak będę większego coś w języku wysyłał. Trochę mi się nie podoba sposób jej działania, ale podobna wtyczka Dictionary Switcher nie działa wcale -- i to nie tylko u mnie -- co widać po komentarzach na ww. stronie.

Tak się rozochociłem tą zmianą, że -- idąc za ciosem -- skonfigurowałem też gnusa jako alternatywę do czytania poczty. Nie wchodząc w szczegóły po co mi to, uruchomienie gnus wymagało zainstalowania Emacsa w wersji 22, bo zarówno sam pterodactyl jak i niezbędne do współdziałania z gmailem biblioteki są w wersji 21 raczej dated. W FC5 nie ma -- z tego co mi się wydaje -- wersji 22 Emacsa zatem przygotowałem pliki rpm z archiwum źródłowego. Na marginesie: w swoim czasie skompilowałem i uruchomiłem Emacsa 23, ale... Ale to jest wersja alfa. Niby działa tyle, że co pewien czas następuje crash, zatem do pracy raczej kłopotliwe narzędzie. Od dziś zamiast wersji 21 będę miał 22. Wersja 23 zaś będzie służyła promocji Emacsa w tym, a zwłaszcza, powalaniu niewtajemniczonych na kolana:-)

Zawartość plików ~/.gnus.el oraz ~/.imap-authinfo skopiowałem z bloga Aleksieja Simakowa. Ale to było za mało żeby działało. Poza tym chciałem skonfigurować gnusa do czytania grup nowości, czegu u Simakowa nie ma. Dodałem zatem:

(setq gnus-select-method '(nntp "news.task.gda.pl" ))

A do konfiguracji konta pocztowego wykorzystuję zmienną gnus-secondary-select-methods:

(setq gnus-secondary-select-methods '((nnimap "imap.gmail.com"
     (nnimap-address "imap.gmail.com")
     (nnimap-server-port 993)
     (nnimap-authinfo-file "~/.imap-authinfo")
     (nnimap-stream ssl))))

Ponieważ gnus, z niewiadomych powodów, wstawiał błędne nagłówki, ustawiające kodowanie na us-ascii, dodałem wpisy:

(setq message-default-charset 'iso-8859-2)
(setq gnus-default-charset (quote iso-8859-2)) 
(setq gnus-default-posting-charset (quote iso-8859-2))

Prawie OK. Tzn. w buforze *Groups* widać grupy nowości, mogę je przeglądać i wysyłać wiadomości. Niestety nie widać nigdzie folderów z gmaila. Zaś bufor *Messages* nie zawiera informacji o jakichkolwiek błędach--wygląda, że się z gmailem łączy i wszystko jest OK. Zatem guglamy dalej. No i jest odpowiedź: magiczny klawisz ^, po naciśnięciu którego faktycznie pokazują się foldery i można czytać listy. Niestety, nie można wysyłać -- wyświetlany jest błąd: Sending failed; SMTP protocol error. Znowu google. I jest wskazówka: potrzebne jest zainstalowanie: gnutls-cli. Myślałem, że już to mam, bo locate gnutls coś tam wyświetlało... Zatem:

yum install -y gnutls-utils

I wreszcie (prawie) wszystko działa.

Na koniec wrócę do Emacs jako takiego. Problemy z migracją do wersji 22 są na razie drobne i łatwe do usunięcia. Nie działa ess. Na razie wstawiłem po prostu ; przed (require 'ess-site). Nie działa zapis /ssh::~/public_html (dotyczy biblioteki tramp), należy wpisać w pełnym brzmieniu /ssh:tomasz@gnu.univ.gda.pl:~/public_html. Funkcja My-flickr-images-initmojej biblioteki do ładowania zdjęć na flickr.com wyświetliła wspaniałe okno dialogowe a la MS Windows zamiast skromnie wyświetlić pytanie w minibuforze. Nie tylko wybranie katalogu trwa kilka razy dłużej, ale na dodatek szukane są tylko istniejące pliki. To ostatnie to akurat zapewne mój błąd: parametrem interactive było "fdir: ", a powinno być:

(interactive "Fdir: ")

Tyle, że oba ustawienia działają w ,,trybie minibufora''. Na szczęście nawet deweloperzy Emacsa mieli widocznie wątpliwości co do tego czy w tym wypadku nowe jest lepsze, bo już w ww. oknie dialogowym jest podpowiedź jak wrócić do starych sprawdzonych rozwiązań:

(setq use-file-dialog nil)

Kolejny drobny problem, to nieznana funkcja compile-internal. Faktycznie w dokumentacji jest oznaczona jako obsolete ze wskazaniem compilation-start jako zamiennika. Także i w tym przypadku modyfikacja też była bardzo prosta.

Reasumując: po raz kolejny się okazało, że wszystko poszło w miarę sprawnie. No ale ja z natury jestem panikarz.

url | Sun, 23/12/2007 22:44 | tagi: , , , , , , ,
Skrypty Gpx-viewer, gpsbabel i zdjęcia na Google Maps

Zrezygnowałem wreszcie z używania do komunikacji z GPSem programu GPSman na rzecz GPSBabela. Ten pierwszy jest programem interaktywnym a przez to niezbyt wygodnym bo trzeba się trochę naklikać żeby przegrać zawartość pamięci Geko na PC. GPSBabel działa w trybie wsadowym, dzięki czemu można oszczędzić dużo (cennego) czasu:

#!/bin/bash
TODAY=`date +"%Y%m%d"` # zapisz do pliku yyyymmdd.gpx
gpsbabel -t -r -w -i garmin -f /dev/ttyS0 -o gpx -F "$TODAY.gpx" 

Przyznać muszę, że podchodziłem do tego GPSBabela jak do jeża bo przy poprzednich próbach coś mi tam nie działało. A niesłusznie -- wystarczyło przeczytać dokumentację.

Najwięcej czasu straciłem zresztą na podłączeniu Garmina do komputera. Mój Geko 301 jest podpięty do PC standardowym ,,fabrycznym'' kablem pn. RS232 serial port connector (part number: 010-10310-00). Port szeregowy, tj. /dev/ttyS0 w nomenklaturze Linuksa, w FC5 jest dostępny tylko dla superużytkownika. BTW mam poczucie, że wcześniej był dostępny dla wszystkich. Kłopot ten rozwiązałem w sposób przedstawiony tutaj:

ls -l /dev/ttyS0
crw-rw---- 1 root uucp 4, 64 gru 18  2007 /dev/ttyS0
/usr/sbin/usermod -G uucp tomek # dodanie tomka do grupy uucp

Uwaga: program usermod działa tak, że jeżeli użytkownik jest obecnie członkiem grupy, której nie podano na liście--wartości opcji -G, to zostanie z niej usunięty. Lepiej więc zwyczajnie uruchomić vi i dopisać co trzeba do /etc/groups.

Mając już zgrany ślad (track) i punkty (waypoints) zacząłem kombinować co dalej z tym robić. Sposób w jaki publikuję moje ślady korzysta z biblioteki gpx-viewer Kaza Okudy. Każdy punkt z pliku GPX jest przedstawiony w postaci standardowej ,,pinezki'' znanej z google maps. Pinezka po kliknięciu zamienia się w okienko zawierające zawartość elementów-dzieci elementu wpt (tj. ele, name, cmt, desc oraz sym) oraz atrybuty tego elementu (latlon), np.:

<wpt lat="54.443087485" lon="18.540491704">
  <ele>69.340332</ele>
  <name>168</name>
  <cmt>168</cmt>
  <desc>168</desc>
  <sym>Flag</sym>
</wpt>

Gdyby ww. element zawierał element extension, to pokazana by była tylko zawartość extension. W przykładach ze strony Okudy extension zawiera element img zawierający z kolei zdjęcie zrobione w tym właśnie miejscu:

<wpt lat="49.237919" lon="-122.760106">
  <ele>4.0</ele>
  <name>Photo 2</name>
  <extensions><html><![CDATA[
       <a href="http://okuda.blogspot.com/2005/07/traboulay-poco-trail.html" target="_blank">
         <img src="blog/2005-07/IMG_2370-01.jpg" />
       </a>
    ]]></html></extensions>

Teraz mała dygresja: odsyłacze do zdjęć na flickr.com są tworzone według pewnego schematu. Strona główna zdjęcia ma adres http://www.flickr.com/tprzechlewski/<photo_id>/, gdzie <photo_id> oznacza identyfikator zdjęcia. Plik ze zdjęciem ma zaś następujący URL:

http://static.flickr.com/<server>/<photo_id>_<secret>_<size>.jpg

Wartości <server> oraz <secret> można ustalić np. poprzez wykonanie metody flickr.people.getPublicPhotos. Wartościami sizes (square), t (thumbnail), m (small), b (large), o (original). Oznaczają one odpowiednio pliki o wielkościach 75, 100, 200, 1024 pikseli i wielkość oryginalną. Rysunek typu square to kwadrat, pozostałe to prostokąty o dłuższym boku równym podanej licznie pikseli. Prostokąt o dłuższym boku równym 500 pikseli to wielkość zdjęcia, która jest wyświetlana na stronie głównej zdjęcia. Ta wielkość jest wybierana jeżeli URL nie zawiera części _<size>.

Ja chciałem żeby element img wewnątrz extension w pliku GPX wskazywał na zdjęcie w rozmiarze thumbnail na flickr.com a element a odsyłał na stronę główną tego zdjęcia. Żeby nie wpisywać kodu ręcznie wymyśliłem to następująco.

Za pomocą skryptu flickr_getphotolist.pl pobieram informacje nt. wszystkich zdjęć (publicznych, ale to ograniczenie akurat jest OK). Skrypt zapisuje informacje w postaci następującej listy haszy:

@photos = (
{'owner' => '20425995@N00','isfriend' => '0','ispublic' => '1','secret' => '95826dcd42',\
 'farm' => '3','title' => 'dscf1209','server' => '2343','id' => '1747402167','isfamily' => '0'},
...

do pliku ~/.flickr/hr.icio.ph. Prosty skrypt zwraca kompletne adresy URL po podaniu tytułu zdjęcia (działa przy założeniu, że tytuły są unikatowe):

#!/usr/bin/perl
require "$ENV{HOME}/.flickr/hr.icio.ph" ;
$photo_title = shift;
for (@photos) { if ($photo_title eq $_->{title} ) {
print "<extensions><html><![CDATA[
       <a href=\"http://www.flickr.com/tprzechlewski/$_->{id}/\" target=\"_blank\">
         <img src=\"http://static.flickr.com/$_->{server}/$_->{id}_$_->{secret}_t.jpg\" />
       </a> ]]></html></extensions> \n";
  }
}

Teraz wystarczy dopisać w .emacs funkcję, która w miejscu wywołania albo zapyta o tytuł zdjęcia, albo pobierze go sama z wiersza gdzie jest kursor po czym wstawi to co wypluje ww. skrypt do Emacsowego bufora. Genialne:-) Na próbę dodałem zdjęcia do śladu wygenerowanego 16. 12. 2007 r.

BTW patrząc na ten dziwny ślad nie mogę się powstrzymać od sarkazmu, mając w pamięci opinię niejakiej squishy z forum flickr.com: ... it's smaller than many cell phones and I think it's fabulous. I just turn it on and toss it in a backpack, then download the track log later to sync with photos... Gdzie ona mieszka? Na pustyni Gobi? Albo pracuje w Garminie... Albo to sync with photos jest plus/minus 10 kilometers. Bo mój geko 301 prawie zawsze zgubi ślad w trudnym terenie typu las, duże budynki, głębokie doliny itp...

url | Wed, 19/12/2007 09:54 | tagi: , , , , , , ,
Dodawanie zdjęć na flickr.com w trybie My-flickr-upld

Znacząco poprawiłem swój tryb do dodawania zdjęć na flikr.com. Teraz wszystko się dzieje wewnątrz Emacsa łącznie z uruchomieniem wysyłania plików na serwer. W starej wersji pliki konfiguracyjne czytał Emacsowy moduł xml.el co było może i eleganckie ale odbywało się przeraźliwie wolno. W nowej wersji plik konfiguracyjny jest plikiem lispowym wygenerowanym skryptem Perla z plików XML. Jak to działa opisałem na oddzielnej stronie. Jedna sprawa jest tajemnicza:

#!/usr/bin/perl -w
require 'login2flickr.rc';
require 'flickr_utils.rc';

my @tmpx = get_sets_ids();
my @tmpy = get_pools_ids();

W plikach login2flickr.rc oraz flickr_utils.rc są zdefiniowane procedury, który czytają plik z dysku i zwracają zmienne. W szczególności flickr_utils.rc zawiera dwie prawie identyczne procedury (get_sets_ids oraz get_pools_ids), czytające różne pliki konfiguracyjne. Kurcze... na jednym komputerze perl zwraca błąd: Undefined subroutine &main::get_pools_ids called at... a na drugim działa. Ten sam perl, ta sama wersja FC5, jedna procedura z pliku dołączanego poleceniem require jest zdefiniowana druga nie... Wystarczy zmienić kolejność poleceń require żeby powyższe działało w obu systemach. Nic mi do głowy nie przychodzi...

url | Tue, 11/12/2007 20:58 | tagi: , , , , ,
Konfigurowanie Emacsa

Domyślne ustawienia w moim Emacsie zmieniają właściciela pliku podczas zapisu (konkretnie grupę). Przykładowo Elka edytuje plik, który należy do grupy family, a jak go zapisze, to plik już nie należy do family tylko do grupy elka. W dokumentacji Emacsa nie mogłem odszukać co trzeba ustawić, ale znalazłem tutaj:

(setq backup-by-copying-when-mismatch t)

Przy okazji pisania o ustawianiu Emacsa wspomnę także o tym jak nakazać tworzenie kopii w katalogu ~/.emacs-backups/, co zapobiega zaśmiecaniu dysku plikami ,,z tyldą'':

;; polecam szczególnie użytkownikom pakietu tramp
(defun make-backup-file-name (file)
  (concat "~/.emacs-backups/" 
    (file-name-nondirectory file) "~")) 

Powyższe nastawy należy oczywiście umieścić w pliku ~/.emacs.

url | Tue, 13/11/2007 08:42 | tagi: , ,
Środowisko R i pakiet ESS: instalowanie i rozpoczęcie pracy

R to środowisko do obliczeń statystycznych i wchodzi w skład każdej praktycznie dystrybucji Linuksa. Zainstalować można go bez problemu używając yuma, jeżeli już wcześnie nie został zainstalowany domyślnie. Dokumentację w formacie html odnaleźć można w katalogu /usr/lib/R/html/.

Emacs ma wsparcie do R w postaci pakietu ESS. Instalowanie ESS jest proste: należy rozpakować i dodać do plików startowych Emacsa następujące dwa wiersze (katalog ~/.emacs-local/ess/lisp oczywiście należy dopasować do własnych ustawień):

(add-to-list 'load-path "~/.emacs-local/ess/lisp")
(require 'ess-site)

Uruchamianie ESS jest jakby nieco mniej oczywiste; być może nawet to co opisałem poniżej jest nieoptymalne. Startuję R z wnętrza Emacsa za pomocą M-x R Enter. Zostanie wyświetlone w minibuforze pytanie o katalog roboczy, np.:

ESS [S(R): R] starting data directory ...

Należy wybrać odpowiedni katalog. Po pewnej chwili Emacs przejdzie do bufora *R*, który umożliwia interaktywną pracę z R. W buforze *R* można działać w środowisku R z wnętrza Emacsa dzięki czemu pracuje się wygodniej: działa dopełnienie (Tab) oraz help (C-c C-v). Tyle, że w buforze *R* polecenia R i wyniki obliczeń są przemieszane i szybko można się pogubić. Lepiej pisać program (skrypt) R w osobnym buforze a wyniki oglądać w buforze *R* (ogólnie *R:numer-procesu*, jeżeli działamy z więcej niż jednym skryptem, tj. dla drugiego skryptu zostanie utworzony bufor *R:2*, dla trzeciego *R:3*, itd.). Aby to osiągnąć należy otworzyć (nowy) plik za pomocą standardowego polecenia C-x C-f. Plik powinien mieć rozszerzenie .r. Bufor przejdzie do trybu ESS co zostanie zasygnalizowane pojawieniem się napisu ESS w wierszu trybu (modeline).

ESS

W tym buforze także działa pomoc (C-c C-v) i dopełnianie (C-c C-Tab). Pojedynczy wiersz ze skryptu R można uruchamiać za pomocą ess-eval-line (C-c C-j; uwaga: polecenia podzielone na wiersze wymagają naciśnięcia C-c C-j dla każdego wiersza); cały blok poleceń zaś za pomocą ess-eval-region (C-c C-r). Drobna niedogodność to przechodzenie pomiędzy różnymi oknami: tematów pomocy, R oraz bufora ze skryptem R (ESS otwiera/zamyka okna mało ,,intuicyjnie''). Ponieważ skrypty R są krótkie dobrym pomysłem jest podział ekranu na pół (C-x 2) i wyświetlanie w drugim oknie bufora *R*.

ESS

Prosty przykład wykorzystania R do określenia związku między poziomem korupcji a sposobem głosowania w sprawie zaakceptowania przez ISO specyfikacji OOXML można znaleźć w Corrupt countries were more likely to support the OOXML document format (Kai Puolamäki). Rysunek obok pokazuje wykonanie skryptu R z ,,wnętrza'' Emacsa (jak widać nawet okno zawierające histogram też się ładnie wyświetliło).

url | Mon, 08/10/2007 11:59 | 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: , , , , ,
Ł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: , , , ,