poniedziałek, 31 grudnia 2007

Szybsze geokodowanie zdjęć: gpsPhoto.pl

Wprawdzie jestem/byłem sceptyczny co do rezultatów, ale postanowiłem sprawdzić empirycznie ile warte jest dodanie współrzędnych geograficznych przy wykorzystaniu techniki zsynchronizowania czasów GPSa i aparatu. Ustawiłem czas Geko na Paryż. To co odbiornik wyświetlał z grubsza się zgadzało z czasem na zegarku. No akurat wiem, że GPS z definicji może ,,robić'' za ultra dokładny zegarek. Z aparatem było gorzej--wyświetla tylko godziny i minuty. Ustawiłem czas na tyle dokładnie na ile się dało.

Po zapisaniu śladu do pliku GPX okazało się, że czas zapisany przez Geko jest circa godzinę do tyłu w porównaniu do tego co jest wyświetlane. Wyświetla czas lokalny a zapisuje UTC? Chyba tak, bo w dokumentacji skryptu GPSphoto jest o czymś takim wspomniane. Zdjęcie z kolei jest oznaczone czasem lokalnym i taki czas jest zapisywany. No i dodatkowo jest pewna różnica wynikająca z niezbyt precyzyjnego zgrania obu urządzeń. Prosty pomysł jak je zgrać dokładnie podano w dokumentacji GPSphoto: po prostu trzeba zrobić zdjęcie Geko z wyświetlonym na ekranie czasem. Faktycznie, prościej chyba się nie da:-) Ale nie do zastosowania w urządzeniach GPS bez ekranu (por. komentarz z tego bloga.)

Żeby sobie ułatwić skrypt zrobiłem wykorzystujący Image::ExifTool. Na wejściu pobiera nazwę pliku ze zdjęciem, a wypisuje zawartość pola DateTimeOriginal. Jeżeli podam -- jako drugi parametr -- czas w notacji gg:mm:ss, to skrypt wypisze też różnicę w sekundach:


exif_datetime.pl -f dscf2451.jpg -b 15:49:20

Wyszło 44 sekundy. Dodałem 3600 sekund jako różnicę między czasem aparatu a czasem garmina, wpisując z wiersza poleceń:


perl gpsPhoto.pl --dir=jpgs --gpsfile=20071228.gpx --timeoffset=-3644 \
--kml 20071228.kml

Szczerze mówiąc za pierwszym razem nie dodałem znaku minus przed wartością 3644. W rezultacie większość zdjęć została pominięta. Ale kilka zostało oznaczonych. Uruchomiłem gpsPhoto drugi raz, tym razem poszło lepiej. Powstały plik wyświetliłem w googleearth i konsternacja: część zdjęć jest oznaczona prawidłowo, ale kilka ma współrzędne kompletnie do kitu. Do tego ślad jak zwykle jest przerwany i ma jeden gigatyczny ,,odlot'' od prawdziwego przebiegu trasy. Najbardziej zdumiewało mnie jednak to, że zdjęcia na śladzie nie były wstawione chronologicznie, tylko przemieszane. Niechybnie oznaczało to, że coś namieszałem.

Straciłem sporo czasu kombinując czemu tak się stało. Wreszcie wróciłem do źródeł, czyli zacząłem studiować dokumentację gpsPhoto.pl. Dodałem opcję --overwrite-geotagged, słusznie mniemając, że skoro jest taka opcja, to geo-oznakowane pliki nie są domyślnie brane pod uwagę. Ostatecznie zatem uruchomiłem gpsPhoto w następujący sposób:


perl gpsPhoto.pl --dir=jpgs --gpsfile=20071228.gpx --timeoffset=-3644 \
--overwrite-geotagged --kml 20071228.kml

Wynikowy plik 20071228.kml pokazuje, że współrzędne geograficze poszczególnych zdjęć są całkiem precyzyje. Tak się jednak stało, że w wszystkich miejscach gdzie robiłem zdjęcia garmin nie miał problemów z rejestrowaniem śladu. Zobaczymy jak będzie np. w lesie, albo w mieście, przy wysokich budowlach.

Reasumując, muszę odszczekać to co napisałem wcześniej no i być mniej sarkastyczny. Ślad z mojego pierwszego eksperymentu jest tutaj. Na razie nie ma na nim zaznaczonych zdjęć; są dostępne na flickr.com. Muszę też doczytać na temat formatu KML.

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.

czwartek, 27 grudnia 2007

Wycieczka do Białej Góry

Biała Góra to miejsce gdzie zaczyna się rzeka Nogat. Jest tam historyczna śluza i starorzecze Wisły. Było strasznie zimno -- to nie był dobry termin na wycieczkę. Także z tego względu, że flora i fauna śpi. Było trochę ptaków, które zapewne tam zimują. Dzikich ptaków. Nie takich, jak na molo, że z daleka lecą po chleb. Ledwo usłyszały Miśka już uciekały więc bez lornetki trudno było rozpoznać gatunki. Jedne wyróżniały się wymiarami--chyba żurawie albo czaple. Wrócę jak będę miał EOSa:-)

Photo Photo Photo Photo

środa, 26 grudnia 2007

Kupowanie książek za granicą

Ten problem jest dyskutowany ([1] [2] [3] [4]), pojawiają się sprzeczne, często nieprawdziwe opinie. Nawet na liście GUST-l było pytanie w tej sprawie. Nie chwaląc się mam ,,w tym obszarze'' pewne doświadczenie-- w ostatnich latach kupiłem głównie via Internet kilkadziesiąt książek od różnych sprzedawców. Główne książki naukowe, literaturę fachową (informatyka), ale także trochę książek nt. historyczno-wojenne, które lubię sobie poczytać (przykładowo: Antony Beevor Stalingrad: The Fateful Siege, 1942-1943, Clay Blair, Hitler's U-Boat War, książki Martina Middlebrooka dot. różnych operacji RAF w drugiej wojnie światowej, itp.) Większość z nich oraz kilkanaście płyt CD kupiłem na amazon.com, tym amerykańskim. Opłaty za przesyłkę są na poziomie 10 USD w przypadku pojedynczej książki, jak książek jest więcej, to oczywiście jednostkowe koszty transportu są mniejsze. Uprzedzając obawy -- nie jest doliczane żadne cło. W ostatnich chyba dwóch latach wiele książek kupiłem w amerykańskich antykwariatach via Amazon. Płacę zawsze kartą debetową Visa/Electron wydaną przez Intelligo, używałem też e-karty m-Banku. Oczywiście amazon akceptuje także inne karty -- w tym, a zwłaszcza -- karty kredytowe, ale ja takowej nie posiadam.

Książki z antykwariatów są czasami dużo tańsze niż nowe, czasami różnica jest niewielka. Nie zawsze zatem opłaca się kupować z drugiej ręki, tym bardziej, że opłata za transport jest zwykle nieco większa dla książki używanej. No i kupujemy wtedy jedną książkę, więc nie ma możliwości rozłożenia kosztów transportu na wiele pozycji. Ważna sprawa: Amazon nie wysyła książek używanych do Polski. Najbliżej można wysłać do Niemiec. Można też wysłać do UK, Irlandii i jeszcze do innych krajów, ale do Polski nie da rady... Może dodadzą Polskę w najbliższym czasie do listy, ale na razie na niej nie jest. Trzeba mieć zatem ,,metę'' w tych krajach, do których książka może być wysyłana a z stamtąd sprowadzić już na własną rękę. Nie każdy antykwariat wysyła książki do Europy--jest to zaznaczone zwrotem international shipping available w opisie książki.

To czy książkę można czy nie można wysłać do Europy jest komunikowane na ostatnim etapie kupna--przy wybierze adresu do wysyłki. Klikamy ship to this address (jeżeli mamy zadeklarowany jeden adres wysyłkowy, to być może nie musimy nawet klikać -- ja mam ich kilka) i na górze strony ukazuje się niewinne ostrzeżenie ,,There is a slight problem...'' Faktycznie -- very slight -- na dole jest wyjaśnienie: this item can't be shipped to the country you selected. W tej sytuacji należy spróbować z innym sprzedającym, a zwykle jest ich wielu. Książki, które kupiłem zawsze powtarzam zawsze były w świetnym stanie, nawet te, które nie były opisane jako like new.

Inne potencjalne źródło książek to e-bay. W tym wypadku moje doświadczenie jest mniejsze: kilka pozycji. Kupiłem przykładowo Software Engineering: A Practitioner's Approach, która to książka kosztuje ca 120 USD na amazon.com, a cena używanej zaczyna się od 50 USD. Mówię o piątym wydaniu, które do tej pory ukazało się wyłącznie jako hardcover. A na e-bay można znaleźć ww. pozycję po kilka dolarów. Hmm... podejrzana sprawa. W opisie czytamy Containing exactly the same material as the US Hardcover edition... International Editions have different ISBN... This books is printed Black and White. Często koszty przesyłki są dość zaporowe, ale nie zawsze. Dla celów naukowych (tj. chciałem sprawdzić co i czy w ogóle przyjdzie) zaryzykowałem: znalazłem dostawcę z Chin(!), wydając całe 9 USD plus ca 15 USD za dostawę. BTW nie była to oferta najtańsza! Książka przyszła coś po tygodniu, jest absolutnie zgodna z opisem.

A czemu tak tanio? A bo na okładce jest napisane: This book cannot be re-exported from the country to which it is sold by Mc-Graw Hill. No i się wyjaśniło--segmentacja rynku. W USA łoimy do kaleson, a w Azji taniej bo kogo tam stać na książki po 100 dolarów. Nie jestem za to pewien czy kupowanie tych książek jest do końca zgodne z prawem. Na zdrowy chłopski rozum nie jest, ale z drugiej strony takich ofert jest na e-bay bardzo dużo, są one starannie i uczciwie opisane, łącznie z podaniem numeru ISBN (który jest różny od wydania International). Wygląda więc, że jest to co najmniej tolerowane.

Polskich pośredników unikam (ostatnie transakcje z nimi jakieś 3 lata temu, więc może coś się zmieniło). Kupując na konto UG nie miałem wyboru i korzystałem z różnych polskich importerów (bo moja firma nie pozwala na płacenie kartą kredytową). I dłużej i drożej... Przykładowo ceny książek sprowadzanych przez firmę ABE Books w porywach były wyższe o połowę od tych na amazon.com. Na pytanie czemu, odpowiedź, że to niemożliwe, bo oni kupują ,,bezpośrednio od wydawcy''. Aha, no tak, szczególnie jak się z tym wydawcą rozliczają w EUR.

Jeżeli chodzi o polskie książki, to nie kupię już niczego ani na merlin.pl ani na empik.com. Fatalna obsługa, ceny wcale nie najniższe. Do tego empik miał stronę WWW wprawdzie pstrokato-jarmarczną, ale nie działającą poprawnie w systemie Firefox/Linux. Polskie książki kupuję w małych księgarniach internetowych i jeszcze się nigdy na nich zawiodłem. A taki Merlin potrafił mi wysłać uszkodzą płytę DVD (widoczna nieuzbrojonym okiem rysa) a następnie ,,olać'' moją reklamację. Olać, tj. nic nie odpisać. Empik podpadł już przy pierwszym i zarazem ostatnim zamówieniu, wysyłając książkę przez miesiąc.

niedziela, 23 grudnia 2007

Wywiad premiera T.

Jak kończyłem poprzedni wpis, to w budynku obok premier Tusk produkował się w TV z okazji wigilii wigilii (czyli 23 grudnia). Jakieś 100 metrów w linii prostej. Na wypadek gdyby ten wpis czytał ktoś spoza kręgu moich znajomych, to spieszę donieść, że za płotem mojego bloku jest ,,coś w rodzaju'' hotelu zarządzanego przez Pomorski Urząd Wojewódzki. Piszę coś w rodzaju, bo to raczej widomy znak jak się marnuje pieniądze podatników -- zwykle toto stoi puste. Nieważne...

Więc przed 18 przyjechała TV, ustawili prądnice, światła i kamery. Włączyli wszystko, zaczęli świecić i burczeć. Od razu było widać, że jakiś ważny gość przyjedzie. No i tak świecili i burczeli przez 2 godziny. Potem przyjechał premier, wywiad był w środku, trwał chyba raptem ca 15 minut -- nie oglądałem to nie wiem. Przyznam, że premier mnie nie fascynuje, a jego wypowiedzi dot. zmiany stylu itp. rewelacje jeszcze bardziej mnie nudzą. Raczej czekam na konkrety i decyzje, i to niekoniecznie w/s CBA.

O 20.30 pojechali. Po co oświetlali ten budynek z zewnątrz tyle czasu -- do tej pory mnie to zastanawia. Chyba nie planowali wywiadu w ogrodach, bo na zewnątrz było dość rześko, jakieś -3 stopnie.

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.

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.

piątek, 14 grudnia 2007

Nowa usługa na flickr.com

Niedawno (13 grudnia 2007) Flickr uruchomił nowy serwis pn. stats! Użytkownicy serwisu z wykupioną usługą pro (ca 25 USD, czyli niedużo -- jak to się czasy zmieniły BTW) mają dostęp do różnych statystyk dotyczących swoich zdjęć. Informacje o usłudze zobaczyłem dzisiaj. Żeby z niej skorzystać trzeba się zasubskrybować -- czytaj nacisnąć duży guzik ze stosownym napisem. Wówczas ukazuje się napis, że OK, ale statystyki będą jutro. Grozę potęguje animacja gościa z pneumatycznym młotem. Widocznie jestem jednym z pierwszych bo były od razu -- wystarczyło odświeżyć stronę.

A więc pro-user dostaje takie informacje jak: liczba odsłon dla każdego zdjęcia oraz statystyki adresów referer w podziale na ,,wczoraj'' oraz ,,ogółem''. Ponadto wykres liniowy liczby odsłon zawierający dzienne dane z ostatniego miesiąca oraz zestawienie tabelaryczne zawierające podsumowania liczby odsłon (wczoraj, ostatni tydzień, ostatni miesiąc oraz ogółem) dla stron głównych (photostream), zbiorów (sets), kolekcji (collections) i stron pojedynczych zdjęć.

Statystki ,,oglądnięć'' dostępne ze strony http://www.flickr.com/photos/tprzechlewski/stats/allphotos/ (Nie ma co klikać, więc i linka nie ma -- strona dostępna po zalogowaniu:-) są kompletne, tj. dla każdego zdjęcia dostępna jest liczba odsłon (z wczoraj, z ostatniego tygodnia oraz ogółem).

W pierwszej chwili pomyślałem, że nowa usługa renders obsolete jak mawiają Anglicy moje skrypty, które z takim zapałem ostatnio udoskonalałem. Ale niekoniecznie! Dane ze strony stats! primo nie są trwałe (niektóre tak -- ale nie wszystkie, np. dzienne statystyki oglądalności dostępne są tylko dla ,,wczoraj''), secundo żeby były trwałe trzeba je ściągać na swój komputer na przykład codziennie. No i tu się przyda programik flickr_store_views.pl, który potrafi się zalogować na flickr.com, pobrać stronę i zapisać co trzeba na dysk. Zamiast ściągać 170 stron i z nich wyciągać potrzebne informacje wystarczy teraz ściągnąć kilka stron spod adresu tprzechlewski/stats/allphotos/yesterday/pageliczba robiąc to metodycznie, czyli codziennie.

Jeszcze link z forum z informacjami nt. omawianej wyżej usługi. Your stats will eventually be a rolling 28 day window, czyli dostępne będą tylko dane z ostatniego miesiąca. Zwracam też uwagę na komentarz dot. tłumaczenia słowa interestingness na język hiszpański jako interesidad. Że niby takie słowo nie istnieje. Faktycznie nie ma w słowniku a google znajduje raptem 4 strony z interesidad (w tym powyższa). Ale jak przetłumaczyć interestingness (za WordNet: the power of attracting or holding one's interest), np. na j. polski? Moc przyciągania?

Dopisane 13 maja 2008: Skrypt flick-store-views.pl przestał działać. Coś zostało zmienione w procedurze logowania. Nie chce mi się tego poprawiać...

czwartek, 13 grudnia 2007

Ciągły kłopot z dźwiękiem w Skype

Ten wpis to takie przypomnienie dla mnie. Skype używam sporadycznie i jak włączę to z reguły rozmówca mnie nie słyszy bo FC5 ciągle się rozkonfigurowuje. Zatem aby mnie słyszano trzeba, np. kliknąć w środowisko-preferencje-regulacja głośności i tam przełączyć nastawy w zakładce nagrywanie tak jak to widać na zrzucie ekranowym obok. Tutaj są pomysły na permanentne rozwiązanie problemu zobaczymy czy działające...

wtorek, 11 grudnia 2007

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...

wtorek, 27 listopada 2007

Czy flickr umie liczyć -- lepsze rozwiązanie

Wymyśliłem lepsze rozwiązanie problemu opisanego tutaj. Ściągane strony są obrabiane ,,w locie'' a w pliku na dysku są zapisywane tylko informacje o liczbie odsłon. Mówiąc konkretniej korzystam z metod store/retrive modułu Storable, zapisując/czytając hasz postaci $PhotoLog{data}{photoid}= views. Generowaniem podsumowań zajmuje się inny skrypt, który wypisuje wyniki w postaci dobrze sformatowanego fragmentu dokumentu HTML (,,opakowanego'' wewnątrz elementu <div>). Ten fragment następnie można wstawić w odpowiednie miejsce strony HTML. Wreszcie ostatni skrypt tworzy wykres liniowy (przy wykorzystaniu modułu GD::Graph) liczby odsłon oraz liczby odsłoniętych zdjęć. Trzy skrypty można połączyć w całość:


#!/bin/bash
perl flick-store-views.pl
if [ "$?" -ne "0" ] ; then echo "** Problems ..." ; exit 1 ; fi
perl flick-report-views.pl -lang=pl -max=25 > 00-pl.phtml && \
perl flick-graph-views.pl
if [ "$?" -ne "0" ] ; then echo "** Problems ..." ; exit 1 ; fi
echo "OK"

Jakoś tak... Przykład wykorzystania jest na tych stronach [1] [2] [3]. Skrypty można pobrać stąd (flick-store-views.pl, flick-report-views.pl oraz flick-graph-views.pl.) Powyższe można nawet wsadzić do crona. Skrypty wykorzystują m.in. moduły GD::Graph::lines oraz Storable. Ten pierwszy musiałem doinstalować do mojej FC5. Z tym był zresztą pewien kłopot ponieważ yum nie zadziałał--nie wiem czemu. Ostatecznie sprawę rozwiązało ,,ręczne'' ściągnięcie perl-GDGraph-1.4307-1.fc5.noarch.rpm, perl-GDTextUtil-0.86-7.fc5.noarch.rpmperl-GD-2.35-1.fc5.i386.rpm ze strony rpm.pbone.net.

Przy okazji dowiedziałem się jak ,,porządnie'' wycentrować tabelę w oknie przeglądarki:


<table style='margin-left: auto; margin-right: auto;' ...

niedziela, 18 listopada 2007

Czy flickr umie liczyć -- rozwiązanie

Łączną liczbę odsłon dla wszystkich zdjęć -- por. poprzedni wpis na ten temat -- można ustalić programistycznie ściągając wszystkie strony albumu (mają one URLe kończące się na pageliczba, tj. page1, page2, page3, itp.). Pod miniaturą każdej fotografii jest odpowiednia informacja. Zwykłe LWP::Simple w zupełności by do tego wystarczył:


use LWP::Simple;
my $max_page = $ARGV[0] || 1; # nie podano ile -- ściągnij pierwszą
$urlbase = "http://www.flickr.com/photos/tprzechlewski/page";

for ($p=1; $p =< $max_page; $p++ ) {
$content = get($urlbase . $p );
die "Couldn't get it!" unless defined $content;
print $content; }

Niech powyższy kod zapisano w ftotal.pl. Teraz można by np. ściągnąć wszystkie strony podając ftotal.pl 161 > ftotal.log a następnie wyłuskać odpowiednie informacje z pliku ftotal.log innym skryptem.

Ale... Ale jest jeden problem. Flickr słusznie nie liczy odsłon (zalogowanego) właściciela albumu. Skrypt nie autoryzuje dostępu i działa jako ,,osoba trzecia'' więc jednocześnie sztucznie nabija statystykę. Jeżeli skrypt byłby uruchamiany cyklicznie zmieniłby znacząco statystykę odsłon głównych stron w albumie. Przykładowo w moim przypadku byłoby to dodanie 161 odsłon, bo tyle liczy -- obecnie -- stron głównych mój album. Można by machnąć ręką, ale z drugiej strony jakby udało się skrypt zalogować...

Logowanie do www.flickr.com jest jednak cokolwiek skomplikowane. Kombinowałem na różne sposoby szukając w google albo gotowców albo podpowiedzi. Pierwszym ,,podejrzanym'' był moduł WWW::Mechanize:


#!/usr/bin/perl
use WWW::Mechanize;

my $mech = WWW::Mechanize->new( autocheck => 1 );

$mech->credentials( 'login' => 'password' );
$mech->get( 'http://www.flickr.com/photos/tprzechlewski/page1/' );
print $mech->content();

Nie działa... Próbowałem, też WWW::Mechanize::Shell, opisany przykładowo w tekście Michaela Schilli Simple Data Scraper (tutaj jest polskie tłumaczenie). BTW były pewne kłopoty z jego zainstalowaniem, ponieważ make test kończy się błędem... Szukając wskazówek do rozwiązania mojego problemu znalazłem także potencjalnie przydatny tekst pt. Secure Web site access with Perl. Podsumowując WWW::Mechanize okazał się strzałem w płot, ale może się przyda do czegoś innego...

Rozwiązanie znalazłem -- jak to często bywa -- trochę przypadkowo. Punktem wyjścia były skrypty ze strony: coder.home.cosmic-cow.net (ich kopie umieściłem tutaj). Następnie posługując się wtyczką do Firefoxa pn. Live HTTP headers ustaliłem co i gdzie trzeba zmienić. Skrypt wykorzystuje moduły HTTP::Request::CommonLWP::UserAgent, koncepcyjnie jest mało skomplikowany ale dość rozwlekły bo liczy ca 100 wierszy. Nie będę go więc cytował, jest dostępny tutaj. Nie do końca jestem też pewny czy wszystkie wywołania GET są potrzebne, ale nie mam czasu/wiedzy tego optymalizować, ważne że działa, tj. udaje zalogowanego użytkownika serwisu flickr.

Skrypt działa w ten sposób, że ściąga n stron ,,głównych'' z mojego konta flickr (te URLe przypominam kończą się na pageliczba). Liczbę n, podaną jako parametr wywołania skryptu, ustalam ,,empirycznie'' konsultując się z flickr.com (ewentualnie w wersji gold-extended skryptu można by to zautomatyzować):


perl flick-total-views.pl 161 > flick-total-views.log && \
perl -h flick-aggr-totals.pl flick-total-views.log > stats.html

Skrypt flick-aggr-totals.pl zlicza co trzeba parsując flick-total-views.log. Na razie pomija pliki, które nie były wcale oglądane (tj. 0 views), ale to łatwo poprawić/zmienić, bo kod HTML generowany przez www.flickr/ nie jest specjalnie zaplątany. Wynik pierwszego zastosowanie ww. skryptów zamieściłem na mojej stronie.

środa, 14 listopada 2007

Czy flickr umie liczyć?

Flickr wyświetla liczbę że tak powiem odsłon pod każdym zdjęciem, zbiorczo dla każdego zbioru oraz łącznie dla całego albumu (zakreślone na czerwono na rysunkach poniżej). Wydawać by się mogło, że np. sumując odsłony dla wszystkich zdjęć otrzyma się łączną liczbę odsłon w albumie, to znaczy ile razy oglądano nasze zdjęcia. Już na pierwszy rzut oka widać, że tak nie jest. Po prostu nic nie jest sumowane a każdy licznik ,,liczy'' swoją stronę. Odzielnie jest sumowana ,,strona główna'', oddzielnie każda strona dla pojedynczego zdjęcia i oddzielnie strona główna każdego zbioru.

A jak obliczyć łączną liczbę odsłon dla wszystkich zdjęć? Wydawałoby się, że to pryszcz, bo flickr słynny jest ze swojego API. Akurat tego jednak nie da się ustalić -- nie ma takiej metody. Wprawdzie flickr.activity.userPhotos. zwraca m.in. liczbę wyświetleń każdej pojedynczej strony, ale tylko dla stron na których coś się stało: dodano komentarz, ktoś dodał taga albo dodał zdjęcie do swoich ulubionych. Do tego maksymalnie można ściągnąć 50 zdjęć na raz (maksymalna wartość per_page), parametr timeframe może przyjąć maksymalnie wartość jednego miesiąca (30d, większe wartości są ignorowane) a metodę można uruchomić powtórnie nie częściej niż co godzinę (czyli co godzinę można ściągnąć jedną stronę). Poddałem się...

Nie ustaliłem wprawdzie ile było odsłon zdjęć w moim albumie ale eksperymentując z API flickera odkryłem przynajmniej jak można obejść się bez perlowego pakietu Flickr-API (ale nie bez Perla). Otóż wystarczą moduły LWP::Simple oraz Digest::MD5:

Niektóre metody nie wymagają uwierzytelnienia. Ich wywołanie jest szczególnie proste -- nie jest potrzebny nawet moduł Digest::MD5 -- i sprowadza się do konstruowania adresów URL według następującego schematu (znak \ na końcu oznacza kontynuację wiersza):


http://www.flickr.com/services/rest/?method=metoda&parametr1=wartość1\
&parametr2=wartość2...

W metodach, które uwierzytelnienia wymagają sprawa się komplikuje. Trzeba podać api_key, auth_token oraz secret (poniżej nazwany shared_secret) opisane tutaj i/lub w dokumentacji modułu Flickr-Upload. Najpierw należy zbudować napis według schematu:


secretapi_keyapi_keyauth_tokenauth_tokenmethodmethodarg1wart1arg2wart2 ...

Następnie utworzyć jego skrót za pomocą funkcji MD5. W przypadku Perla może to wyglądać jak na poniższym przykładzie (metoda flickr.activity.userPhotos ma argumenty page, per_page oraz timeframe). Obliczony skrót dodajemy jako ostatnią część adresu URL:


Digest::MD5 qw(md5_hex);
my $method = 'flickr.activity.userPhotos';

## ...
## skrót MD5:
my $api_sig = md5_hex( "${shared_secret}api_key${api_key}auth_token${auth_token}method${method}" .
"page${page}" . "per_page${per_page}" . "timeframe${timeframe}" ) ;

my $url = "http://www.flickr.com/services/rest/?method=$method" .
"&api_key=$api_key" . "&auth_token=$auth_token" .
"&page=$page" . "&per_page=$per_page" .
"&timeframe=$timeframe" . "&api_sig=$api_sig" ; ## wstaw skrót tutaj

print $url;

Przy okazji -- jak to często bywa -- znalazłem ciekawą stronę dotyczącą języka Perl. Jest też na ww. stronie opis pakietu Flickr-Upload, z którego też korzystam. Norman Walsh zaimplementował nawet API flickra w XSLT -- ciekawe ale przydatność taka sobie.

wtorek, 13 listopada 2007

Jerzy Ustupski

Ten wpis to remanent z tegorocznych wakacji, w czasie których byłem m.in. w Zakopanem. Poszliśmy na słynny cmentarz na Pęksowym Brzysku. Elka wypatrzyła (szkolona:-) grób Jerzego Ustupskiego (,,Patrz a tu jakiś wioślarz...''). Ustupski to medalista olimpijski w deblu czyli dwójce podwójnej z Rogerem Vereyem. Obaj panowie to legendy polskiego sportu. Ciekawy tekst na ten temat znalazłem tutaj. Wyniki z Berlina są zaś tutaj (Men's Double Sculls, BTW walki na finiszu to raczej nie było). Verey napisał książkę pn. 40,000 kilometrów na skifie -- znalazłem ją parę miesięcy temu na Allegro ale już była sprzedana.

Aha, czemu o tym piszę. Bo sam kiedyś, dawno temu--jeszcze karbonowych wioseł nie było--uprawiałem wioślarstwo w AZS-AWF Gdańsk. Bez większych sukcesów, ale sentyment pozostał.

Więcej zdjęć z Pęksowego Brzyska jest tutaj.

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.

niedziela, 11 listopada 2007

Przeliczanie ceny z USD/EUR na PLN

Kiedyś to się mnożyło cenę w USD razy trzy a rezultatem był ekwiwalent w PLN. Ostatnio jednak kurs dolara tak szybko spada, że pomyślałem o jakimś bardziej precyzyjnym narzędziu. Gdyby tak na przykład Firefox wyświetlał co trzeba przeliczone na PLN..., jakiś plugin (currency converter?). Najpierw spróbowałem wtyczkę Change ale nie podobał mi się sposób w jakim ona działa--być może niesłusznie. Za duże zadęcie jak dla mnie: oddzielna belka w menu (podobno można ukryć bez straty dla wygody obsługi) i ciągle musiałem wybierać że chcę konwertować na PLN. Usunąłem Change i zainstalowałem z kolei Yahoo! Finance Currency Converter (wymaga uprzedniego zainstalowania Greasemonkey.

Z tego co zauważyłem do tej pory skrypt powoduje problemy na stronach onet.pl. Nie jest to jednak poważna usterka. Po pierwsze rzadko oglądam strony na onet.pl, a po drugie bardzo łatwo wyłączyć Greasemonkey klikając na ikonę umieszoną na dole okna FireFoxa.

poniedziałek, 5 listopada 2007

Usunięcie zdjęcia ze zbioru (na flickr.com)

Dodać jest łatwo, ale jak usunąć? Nie jest to oczywiste. Ale doszedłem jak to zrobić: uruchomić tzw. organizera (czyli kliknąć w organize). Teraz kliknąć w  Set&Collections. Wybrać -- dwuklikiem -- odpowiedni zbiór (Set). Jak się załadują miniaturki zdjęć przeciągnąć niechciane poza ramkę zawierającą miniaturki jednocześnie wciskając klawisz r. Powinno działać. U mnie przynajmniej działało z FF (wersja 2.0.0.4).

Losowy podpis w programie pine

Jak wstawić losowy cytat via program fortune opisano na tej stronie. Jeżeli podpis ma być generowany a nie wklejany z pliku, to w konfiguracji Pine (setup -> config) literal-signature ma mieć wartość No Value Set a w signature-file należy wstawić (na końcu obowiązkowo znak ,,|''):


ścieżka-do-skryptu/skrypt |

No i dobrze. A ja chciałem w swojej sygnaturze losowy URL do mojego zbioru zdjęć na www.flickr.com/. Do tego zaadaptowałem następujący skrypcik, który ściąga informacje na temat n (konkretnie $max_photos) ostatnio umieszczonych na koncie flickr zdjęć i z tej n-ki losowo drukuje jedno:


#!/usr/bin/perl -s
# The program prints URL of random image out of $max_photos photos ...
use LWP::Simple;

my $my_flickr_id='20425995@N00'; # insert your ID
my $my_flickr_dir='http://www.flickr.com/photos/tprzechlewski';
my $max_photos = '20';
my $api_key = '????????????????'; # insert your API key here
my $method = 'flickr.people.getPublicPhotos';

my $url = "http://www.flickr.com/services/rest/?method=$method&" .
"api_key=$api_key&user_id=$my_flickr_id&per_page=$max_photos";

my $xml = get $url;

if ($xml =~ m/rsp stat=[ \t]*[\`\"]ok/) {# no errors so print
while ($xml =~ m/id=[ \t]*[\`\"]([^\"\']+)[\`\"]/g) { push @Photos, $1; }
} else { die "** Problems fetching $max_photos of $my_flickr_id **"; }

print "$my_flickr_dir/" . $Photos[ int(rand($max_photos)) . "\n";

Skrypcik jest specjalnie odchudzony, tak że korzysta wyłącznie z LWP::Simple i dzięki temu ma większe szanse działania w sytuacjach kiedy dociągnięcie tego czy tamtego modułu jest kłopotliwe. Z tego samego powodu do wyłuskania odpowiednich informacji nie parsuję pliku XML (posługując się np. XML::Simple), a używam wyrażeń regularnych (regułowych?).

środa, 31 października 2007

Inkscape

Do tej pory diagramy tworzyłem korzystając albo z Dia albo z Metaposta. Oba są dobre ale nie do wszystkiego więc dziś, w wolnej chwili, poświęciłem sporo czasu na rozpoznanie programu Inkscape. Jest w Inkscape nawet plugin pozwalający importować wzory generowane w LaTeXu. Plugin to nawet chyba zbyt mocno powiedziane: wzorek wpisany w okienko dialogowe jest kompilowany przez LaTeXa a następnie zamieniany na SVG za pomocą programu pstoedit. Za całość odpowiada skrypt pythonowy, u mojej Fedorze umieszczony w: /usr/share/inkscape/extensions/eqtexsvg.py.

Wprawdzie skrypt kończy działanie wyświetlając dość dziwny komunikat: Skrypt nie zgłosił błędu, jednak możliwe, że wynik jego działania jest inny niż spodziewany, sugerujący błąd, ale nie -- wszystko jest dobrze. (W mojej dystrybucji FC5 mam Inkscape w wersji 0.45 a pstoedit w wersji 3.44.) Przykładowy ekran zamieszczony jest obok.

Jeżeli ktoś używa Inkscape w systemie Windows firmy Microsoft i też chciałby wstawiać wzorki z LaTeXa, to być może pomocne będą wskazówki, które na swoim blogu umieścił Dave Herman.

niedziela, 28 października 2007

Monitor Iiyama, cd

Musiałem wrócić do tematu konfigurowania nowego monitora, bo okazało się, że pulpit w moim KDE jest przesunięty o jakieś 3 mm w prawo. Dopasowałem go ostatecznie używając programu xvidtune. Używając xvidtune trzeba pamiętać, że wszelkie manipulacje przyciskami Left, Right, Up, Down itp., w tym programie są widoczne dopiero po naciśnięciu guzika Apply (co może być dość zaskakujące--jak się nie wie, można odnieść wrażenie, że program nie działa). Z kolei guzik Show powoduje wypisanie w oknie terminala wiersza zawierającego parametry do Modeline. Moje szczęśliwe numerki, to:


"1680x1050" 188.1 1680 1820 2004 2288 1050 1051 1054 1100 -hsync +vsync

Powyższe wkleiłem do pliku /etc/X11/xorg.conf do sekcji Monitor. I jest lepiej. Tak przy okazji, po raz pierwszy pokazał mi xvidtune kol. Rysiu Kubiak, gdzieś circa 1990 r.

Okazała się też, że nie działa żaden program do odtwarzania plików video: mplayer, xine itp. W przypadku mplayera pomogło wpisanie do ~/.mplayer/config:


# Write your default config options here!
monitoraspect=1680/1050
# http://portal.suse.pl/wiki/index.php/Mplayer#xv
vo=x11

Podobnie dla xine wstawiłem do ~/.xine/config polecane:


video.driver:xshm

Tym razem rezultat jest taki sobie. Film się odtwarza ale są kłopoty z komunikacją z programem via mysz. Program jakoś niechętnie (albo wcale) reaguje na kliki. Mało korzystam z xine, nie jest to więc istotna sprawa. W wolnej chwili może uda mi się problem rozwiązać lepiej.

piątek, 26 października 2007

Klęcznik dla fakira

Klęcznik (kneeler chair) lesund kupiony w sklepie Ikea z przeznaczeniem do zabrania do pracy okazał się jeszcze mniej starannie wykonany niż poprzedni, też kupiony w tym samym sklepie. W przeciwieństwie do większości asortymentu był on sprzedawany w stanie złożonym. Wygląda, że fachowcom odpowiednich śrubek zabrakło i siedzisko dokręcili w ten sposób, że śruba sterczała wewnątrz ,,tapicerki'' (por. [1]). Bubel był finezyjny, bo dopiero po pewnym czasie coś zaczynało uwierać. Krótszych śrub na wymianę nie miałem, ale wstawiłem w roli podkładki dwie grube nakrętki, których mam w nadmiarze (por. [2]). Od razu też zabezpieczyłem regulowaną, dość rachityczną podpórkę -- która w poprzednim egzemplarzu pękła -- ściskając ją dwoma obejmami (por. [3] i [4]) po 1,60 zł za sztukę (do nabycia w dowolnym sklepie z artykułami metalowymi).

środa, 24 października 2007

Monitor Iiyama TFT E2001WSV

W końcu zdecydowałem się na zmianę monitora CRC na płaski. Używałem do tej pory 19 calowego modelu NEC MS95F. Straszna skrzynia, a tego kolory wyraźnie wyblakły no i przede wszystkim grzał jak piec. Po dłuższym kombinowaniu i przeglądaniu opinii w Internecie poszedłem ,,na pałę'' do Balty we Wrzeszczu bez określonych preferencji. Sprzedawca okazał się być użytkownikiem Linuksa--chyba pierwszy raz w życiu spotkałem kogoś sprzedającego sprzęt, którego wiedza nie ogranicza się wyłącznie do MSW. Pan z Balty polecał 20 calowy szeroki monitor albo 19 calowy o normalnych wymiarach ekranu--oba firmy Iiyama. Zachęcał to tego szerokiego i mówił, że sam takiego używa.

Trochę się tego szerokiego bałem, bo jakoś tak podświadomie mam zakodowane, że z nowościami mogą być problemy. A ja w tematach hardware'owych jestem totalnym ignorantem. No ale niecałe 900 zł to nie majątek więc wziąłem większy. Iiyama TFT E2001WSV. Podłączyłem i kicha: coś tam out of range, ekran czarny. Ctrl-Alt-F3 zmieniłem ustawienia ,,ręcznie'' w /etc/X11/xorg.conf na ,,generyczny LCD'' w trybie 1024x768. W tym trybie wszytko na pulpicie było oczywiście znacząco i denerwująco większe niż być powinno a ponadto prawa część pulpitu była obcięta.

Konsultując problem z google znalazłem wiele porad wzmiankujących bliżej mi nie znany wpis ModeLine (z /etc/X11/xorg.conf) o tyle nieprzyjemny, że zawierający ca 10 parametrów liczbowych, będących dla mnie kompletną czarną magią. Mój ,,stary'' xorg.conf zresztą nie zawierał ani jednego wiersza zawierającego ModeLine.

Ignorując na razie ModeLine, metodą kilku prób i błędów doszedłem do następującej zawartości pliku /etc/X11/xorg.conf (poniższy listing zawiera tylko relewantne fragmenty):


Section "Monitor"
## ...
HorizSync 31.5 - 83.0
VertRefresh 56.0 - 75.0
EndSection

Section "Device"
Identifier "Videocard0"
Driver "nv"
VendorName "Videocard vendor"
BoardName "nVidia Corporation NV11 [GeForce2 MX/MX 400]"
## poniższe wpisy znalazłem via google, być może są zbędne:
Option "NVreg_SoftEDID" "true"
Option "IgnoreEDID" "true"
EndSection

Section "Screen"
Identifier "Screen0"
Device "Videocard0"
Monitor "Monitor0"
DefaultDepth 24
SubSection "Display"
Viewport 0 0
Depth 24
Modes "1680x1050" "1280x800"
EndSubSection
EndSection

Prawie działało. Tzn. pulpit miał w zasadzie dobre wymiary i nic nie smużyło, tylko ikony i fonty były ciągle obłędnie duże. No trudno, poddałem się na dziś. Jutro doczytam o parametrach ModeLine. Pomógł przypadek: Elka chciała pilnie wysłać pocztę, zalogowała się jako ela no i się okazało, że u niej jest ślicznie. Sprawdziłem Środowisko->Preferencje->Rozdzielczość ekranu. Było ustawione tak jak trzeba, czyli: 1680 na 1050. Okazało się, że u mnie jest ciągle 1152x864 czy coś w tym stylu. Wystarczyło zmienić i już było dobrze. Obyło się bez czytania nt. ModeLine.

Corpus delicti jest tutaj.

wtorek, 16 października 2007

TrueType core fonts a dołączanie fontów

Dziś zostałem zapytany czy można dołączyć do dokumentu PDF font Times New Roman ze zbioru TrueType core fonts for the Web. Na zdrowy tzw. chłopski rozum, wydaje się, że tak ale z kolei w przypadku firmy MS może być różnie więc niekoniecznie może to być możliwe (zgodne z licencją).

Sprawdziłem licencję i można. Oczywiście jeżeli dokument zawiera podzbiór znaków (emedded subset) ale to akurat jest normalne/zwyczajowe ograniczenie. Na ten temat traktuje też [11] [8].

niedziela, 14 października 2007

Adieu, les bleus!

Co się odwlecze. Francja przegrała 9 do 14. Sędzia tym razem nie pomagał. Gwizdnął słusznie faul ca 5 minut przed końcem dający Anglikom prowadzenie, potem Wilkinson dodał trzy punkty z dropa. Kibicowałem Anglikom bo byli lepsi, może nie dużo lepsi ale jednak. Dziś wieczorem RPA vs Argentyna. A w eliminacjach Anglia poległa z RPA haniebnie. Ciekawe czy już w finale będzie miała okazje do rewanżu a tym razem zagra Wilkinson.

Przy okazji: aż do wczoraj ta strona nie wyświetlała się w Operze z powodu błędu składniowego. Dla FF wszystko było OK. Sprawdziłem zatem porządnie co jest nie tak:


http://pinkaccordions.homelinux.org/wblog && \
xmllint --valid --noout wblog

i faktycznie był błąd. Teraz jest OK. W IE#6 jest kompetnie do kitu ale nie mam motywacji sprawdzać co jest nie tak.

środa, 10 października 2007

Michalak forward pass, cont

W nawiązaniu do wpisu nt. meczu Francji i Nowej Zelandii: na youtube jest filmik gdzie widać wszystko co i jak. Zwłaszcza w 77 sekundzie tego klipa (w tle widać machającego rękami w geście protestu Joe Rokocoko (NZ) -- nr 14). Nie ulega wątpliwości, że sędzia, Wayne Barnes powinien przerwać akcję po podaniu Traille'a. Aż dziw, że tego nie zauważył. Krótka relacja nt. całej afery z N. Zelandii jest tutaj.

poniedziałek, 8 października 2007

Michalak forward pass

Jak powszechnie wiadomo podanie ręką piłki w przód jest zabronione a wielu twierdzi, że decydujące punkty w ćwierćfinałowym meczu Pucharu Świata w Rugby na Millenium Stadium w Cardiff pomiędzy Francją a faworyzowaną Nową Zelandią zdobyte zostały po takim właśnie podaniu. Wpisanie w google Michalak forward pass daje w rezultacie -- dwa dni po meczu --42,000 stron. Miał bowiem w tym zamieszaniu swój udział ,,nasz człowiek, czyli Frédéric Michalak. Ledwo wszedł na boisko 12 minut przed końcem meczu, złapał piłkę podaną przed Damiena Traille'a (to podanie właśnie -- zdaniem wielu -- było w przód, np. Within seconds of his arrival Michalak took a pass from Damien Traille -- it looked forward but may have been flicked back by an All Black), przebiegł 30 metrów, podał piłkę Yannickowi Jauzion, który jak to się mówi ,,dopełnił formalności''. Szczerze mówiąc to przegapiłem ten moment oglądając transmisję a wszystkie klipy na youtube dotyczące tego incydentu są usuwane (Ten film wideo jest już niedostępny z powodu otrzymania zgłoszenia o posiadaniu praw autorskich przez użytkownika Rugby World Cup Limited). Zresztą IMHO w pozostałych do końca meczu 12 minutach N. Zelandia nic nie pokazała a gdyby była dobra to nawet ewentualny błąd sędziego by Francji nie pomógł.

Poza ww., kontrowersji nie było. Anglia w ciężkim boju wygrała 12 do 10 z Australią. Anglicy zaimponowali: po porażce 0 do 36 z RPA wydawali się bez szans z silnym zespołem. A jednak. Wspomniane RPA nie bez wysiłku pokonało Fiji. No i wreszcie Argentyna pewnie wygrała ze Szkocją. Ten ostatni mecz był najbardziej jednostronny.

Polsat tym razem się nie popisał. Transmitowali tylko mecz Anglików z Australią. Zamiast reszty hitów puszczali jakieś piłkarskie pierdoły. Na szczęście francuska TV5 dawało wszystko live tyle tylko, że komentatorów nie szło zrozumieć (a jednym był Olivier Magne).

Ś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).

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*.

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).

czwartek, 4 października 2007

Nazwy plików a system SVN

W zasadzie prosta sprawa. Nazwy plików różniące się tylko wielkością znaków (duże/małe litery) w systemie MSW są nierozróżnialne. Jeżeli takimi plikami zarządza system kontroli wersji SVN, to w linuksie i podobnych systemach wszystko działa, a w MS Windows nie -- i w pierwszej chwili nie wiadomo dlaczego. A nie działa zapewne dlatego, że plik jest nadpisywany i SVN-owi nie zgadza się liczba ściągniętych dokumentów.


#!/usr/bin/perl
# Rekursywnie przeszukuje bieżący katalog wypisując pliki, których nazwy
# różnią się tylko wielkością liter (małe/duże).
# Takie pliki nierozróżnia tzw. W-System, co może być źródłem problemów.

use File::Find;
find(\&fcmp, ".");

sub fcmp {
$dir = lc("$File::Find::dir");
$file = lc("$File::Find::name");
$Files{$dir}{$file}++;
}

for $d (sort keys %Files ) {
for $f (sort keys %{ $Files{$d}} ) {
if ($Files{$d}{$f} > 1) {
print "** $Files{$d}{$f} Duplicates found for: $d $f\n" ;
}
}
}

Powyższy skrypt perlowy wypisze pliki, które potencjalne mogą powodować problemy.

sobota, 22 września 2007

Lejkowiec dęty

Taki grzybek o oryginalnej nazwie i kształcie. Wczoraj znalazłem wracając lasem z Fikakowa do domu. Po raz pierwszy w życiu z tym, że jeszcze do niedawna nie uważałem tego grzyba za coś jadalnego. Znalezisko uwidoczniłem na zdjęciach [1] [2] [3] [4]. Jak to można przyrządzić opisano tutaj.

A w Fikakowie byłem z dziećmi (u ortodonty). Potem odwiedziłem Fabiana i jego serwis rowerowy na Makuszyńskiego 20.

czwartek, 20 września 2007

Crouch, Touch, Pause, Engage

Takie cztery słowa mówi sędzia przy wiązaniu się młynów. Znalazłem cztery urocze--przynajmniej moim zdaniem--fotki pokazujące walkę w tej formacji: [1] [2] [3] [4]. W telewizji młyn zwykle nie wygląda specjalnie efektownie, co najwyżej może imponować łączna masa ciała przepychających się zawodników. Jutro Francja gra z Irlandią, a w niedzielę Nowa Zelandia vs Szkocja.

środa, 5 września 2007

Instalowanie pdftk

W uzupełnieniu informacji o manipulowaniu plikami PDF dziś wypróbowałem program pdftk do dzielenia plików PDF na strony. Działa. Jedyny kłopot był z instalacją. Z pomocą yuma się nie dało. Z pliku *.src.rpm ani kompilując ze źródeł też nie, bo za każdym razem był zgłaszany jakiś błąd. Znalazłem wreszcie działający pdftk-1.12-7.fc5.i386.rpm pod 'egzotycznym' adresem: linuxmirror.museum.state.il.us

Przy okazji zmieniłem swój skrypt do publikowania wpisów na tym blogu. Ułatwić sobie chciałem, żeby mi skróty rozwijał do pełnych adresów URL. Nie wchodząc w banalne szczegóły, problem pojawił się w miejscu, w którym apostrof i cudzysłów miały być częścią perlowego wyrażenia regularnego cytowanego w skrypcie basha. Jakoś tak:


perl -ne '..coś-tam...; s/blog:["'] ...itd... '

Po dłuższym kombinowaniu (głównie wokół dokumentów HERE) wreszcie wpadłem na oczywiste rozwiązanie:


perl -ne 'my $qchars = "\042\047"; ...coś-tam; s/blog:[$qchars] ...itd... '

piątek, 31 sierpnia 2007

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.

czwartek, 30 sierpnia 2007

Łą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.

wtorek, 28 sierpnia 2007

Ł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.

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).

sobota, 25 sierpnia 2007

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).

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

piątek, 24 sierpnia 2007

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.

poniedziałek, 20 sierpnia 2007

Ł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

niedziela, 19 sierpnia 2007

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.

wtorek, 31 lipca 2007

Fuji FinePix A820

No i kupiłem z rekomendacji kol. Wanteda nowy aparat Fuji FinePix A820. Przy okazji się dowiedziałem (ale już po zakupie), że nie każdy aparat cyfrowy da się zamontować, ot tak po prostu wsadzając kabel do portu USB. Mówimy o systemie Linux, of course. Systemu, do którego producent dostarczył sterowniki jakoś nie zamierzam używać. Okazało się też, że takie aparaty obsługuje program gphoto2. Jakoś do tej pory nie widziałem potrzeby jego używania a teraz nie mam wyjścia.

Kol. Wanted radził też spróbować gphotofs albo mtpfs. Pierwszy z wymienionych wykorzystuje bliżej mi nieznany FUSE i pozwala zamontować aparat wykorzystujący protokół PTP. Nawet się zainstalowało w moim FC5:


yum install gphoto2
yum install fuse fuse-devel gphoto2-devel libexif-devel

wget http://orion.lcg.ufrj.br/RPMS/src/gphotofs-0.3-1.fc6.lcg.src.rpm
rpm -ivh gphotofs-0.3-1.fc6.lcg.src.rpm
rpmbuild -ba /usr/src/redhat/SPECS
rpm -Uvh /usr/src/redhat/RPMS/i386/gphotofs-*

Wpisałem też do /etc/fstab:


gphotofs /media/camera fuse users,rw,noauto,defaults 0 0

No i tyle dobrych wieści. Jak wpiszę:


gphotofs /media/camera

system wisi i nic się nie dzieje. Może za jakoś czas; póki co na liście dostępnych aparatów (gphoto2 --list-cameras | grep -i Fuji) są różne Fuji, ale modelu FinePix A820 akurat nie ma.

Posługiwanie się gphoto2 z wiersza poleceń o tyle jest niewygodne, że nie są wyświetlane daty (Albo ja nie wiem jak to osiągnąć). W połączeniu z tym, że nie lubię kasować zdjęć od razu po zgraniu na dysk, jest problem bo nie wiadomo, które zdjęcia są bieżące, a które stare. Same kłopoty z tym Fuji...

Jakimś rozwiązaniem jest gtkam, kolejna aplikacja z projektu gphoto2. Odpowiednie pliki .rpm znalazłem w archiwum http://drpixel.tuxfamily.org/, z którego wcześniej nie korzystałem, zatem najpierw:


rpm -ivh http://drpixel.tuxfamily.org/fedora/drpixel-release-1-1.noarch.rpm

a następnie:


yum install --enablerepo=drpixel gtkam gtkam-gimp-plugin

W promocji został jeszcze zainstalowany pakiet libexif-gtk. Gtkam wyświetla miniaturki zdjęć, można je zaznaczać używając prawego przycisku myszy, kopiować i/lub usuwać.

Ostatni problem do rozwiązania: dlaczego gphoto2 nie widzi portu USB, jeżeli działam jako zwykły użytkownik. Coś nie tak z dostępem, tylko co?


gphoto2 --list-files
Wystąpił błąd w bibliotece io \
('Nie udało się zawłaszczyć urządzenia USB'):

Jest trochę stron w google na temat udev, gphoto2 i wyżej wymienionego problemu dostępu. Jest też rozdział na ten temat w dokumentacji gphoto2. Próbowałem różnych podpowiedzi -- guzik działa. Ostatecznie, okazało się, że jak się włączy usługę haldaemon to wszystko jest OK (Uprzednio ją wyłączyłem, bo wydawała się niepotrzebna.) Zresztą czy wszystko, to się okaże -- przynajmniej gphoto2 działa lepiej.

niedziela, 29 lipca 2007

Koniec Tour de France

Dziś skończył się Tour de France. Wygrała drużyna Discovery Channel i Alberto Contador. Nie jest natomiast jasne na jakiej podstawie usunięto, bo chyba tak należy to określić, Michael Rasmussena. Zawodnika, który był liderem aż do etapu numer 16 i zdecydowanym faworytem do końcowego sukcesu. Być może czegoś nie wiem, ale z tego co wiem nie popełnił on żadnego czynu zabronionego regulaminami UCI czy TdF. Wiele wskazuje za to, że padł ofiarą bałaganu i/lub kłótni pomiędzy działaczami UCI i TdF oraz histerii antydopingowej rozpętanej przez media.

Dla mnie jest to największy skandal a Contador dołączył do takich dziwnych zwycięzców z przypadku typu Rogera Walkowiaka.