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 | birzeit | 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 | helsinki | hhi | historia | history | hitler | holocaust | holokaust | hp1000se | hpmini | humour | iblue747 | ical | iiyama | ikea | imagemagick | imap | inkscape | inne | internet | j10i2 | javascript | jhead | jifna | 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 | palestyna | 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 | ryga | 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 | tallin | 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 | łotwa | świdnica | żywność
Archiwum
06/2023 | 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
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: , , , , ,
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;' ...
url | Tue, 27/11/2007 16:41 | tagi: , , , ,
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.

url | Sun, 18/11/2007 11:47 | tagi: , , , ,