Byłem na działce, fajnie się zaczyna robić. Tulipany jeszcze nie kwitną, ale
to już niedługo. Więc wyżywałem się na bratkach i innych takich. Hmm, od
jakiegoś czasu używam na pulpicie tylko tych tapet które samemu złożyłem.
Tak jest i z tym tutaj... ponieważ to moje "dzieło", to i się napatrzyłem
i trudno mi powiedzieć, czy to ładne czy nie... więc mile widziane opinie
z zewnątrz :) Podobnie zresztą z tą tutaj
tapetą. Może to zbyt banalne?
Swoją drogą to mogę tu pokazać jeden z tych powodów w których fajnie jest mieć w aparacie trochę więcej megapikseli niż się ostatecznie wymaga. Dzięki temu mogę z oryginalnego zdjęcia wykadrować sobie tylko interesujący mnie fragment (oznaczony ramką)...
A, ostatnia nowina - RSS ruszyło. To całe przechodzenie na CGI itp. miało na celu uporządkowanie bajzlu jaki mi z czasem narósł w Repo, a gdy się coś ułoży z głową to i potem łatwiej jest to obrabiać itp. Więc po przekształceniu danych w ChangeBlogu na osobne wpisy przetwarzane w locie bardzo łatwo było napisać generator RSS (72 wiersze kodu w pythonie, licząc razem z pustymi wierszami, szablonem XML w jaki feed jest oprawiany itp.). Więc teraz dostępne są dwa feedy, jeden okrojony (lekki) zawierający tylko nagłówki wpisów (normalnie byłyby to tytuły, ale ja nie tytułuję wpisów więc pokazuję zamiast tego pierwszych parę słów - to tak samo dobre) i jeden full-wypas (ciężki jak cholera) zawierający całą treść wpisów z ostatnich 40 dni. Ten drugi może być dobry dla samodzielnych czytników RSS, jeśli ktoś nie lubi korzystać z przeglądarki WWW. Na samym dole strony doszły odpowiednie linki jeśli ktoś by potrzebował (razem z linkami do walidatorów css/xhtml, jak szaleć to szaleć ;)
Każdy wpis ma też od teraz swój identyfikator (anchor) w treści, było to konieczne by móc w rss-ie dać link wskazujący na konkretne miejsce strony. Pewnie przy okazji dorobię też widok "pojedynczy", w którym będzie widać jeden wpis, coś jak podwaliny pod widok wpisu z komentarzami. Bo pewnie dojdzie też możliwość komentowania pojedynczych wpisów (wzdycha). Pewnie zrobię cały system a potem i tak będzie tylko jeden komentarz na miesiąc... a może i nie będzie tak źle? Się zobaczy.
A, do Psi-CVS wlazła obsługa awatarków. Chyba tej drugiej generacji, z nowszego JEP-a. Tej w której awatarki są trzymane na serwerze, a nie serwowane każdemu z maszyny właściciela. Wygląda to bardzo ładnie i działa, choć upload jest skopany i z jakichś powodów Psi nie chciało poprawnie załadować niektórych plików na serwer (nie chodziło o ich objętość ani wymiary, to było coś bardziej nieuchwytnego), więc ostatecznie skorzystałem z uploadu ręcznego (instrukcja jest np. tutaj) i już bez komplikacji wpakowałem swojego avatarka. 128x128 pikseli, JPEG, 4393 bajty. Wymiary ma większe niż polecane, ale myślę że rozsądne programy będą ew. skalowały w dół w razie potrzeby. A że Psi pokazuje ładnie awatarki właśnie do 128x128, to i z tego skorzystałem. A co. Zresztą rozmiar fotki utrzymałem niziutki, więc chyba mi wolno. Duże wymiary, ale ciężar znikomy. Widok awatarków został, z typową dla Psi elegancją, wkomponowany w podgląd informacji o kontakcie. Fajne. Żeby jeszcze dodali wsparcie dla tego starszego JEP-a i ew. widok awatarków w oknie rozmowy (chyba kiedyś takie coś było, ale wycofali kod).
Rozrywka sieciowa: Dzisiaj trochę czasy zmarnowałem na tym. Prosta zabawa - masz działo, masz zapas kociaków i teren naszpikowany przeszkadzajkami. Wystrzel kociaka tak by doleciał jak najdalej. Obowiązkowa rozrywka dla miłośników kotów :)
O, albo coś ambitniejszego - Grow. To układanka, coś w rodzaju zabawnego treningu pamięci i inteligencji. Moim zdaniem właśnie tak powinny wyglądać prawdziwe testy mierzące inteligencję... Aha - udało mi się to ułożyć, choć zajęło mi to chyba kawałek popołudnia :) Polecam, fajne. A zasady są proste - do dużej kuli dodaje się kolejne elementy (przeciągając je) - elementy te mają po ileś-tam stopni "rozwoju" każdy (różna liczba etapów dla każdego z elementów) i ich rozwijanie się (stąd nazwa "Grow") nie jest takie do końca liniowe, bo zależy od obecności i stopnia rozwoju innych elementów. Brzmi skomplikowanie, ale po paru próbach wiadomo o co chodzi. Należy znaleźć odpowiednią kolejność w której elementy mają być dodawane do kuli tak, by wszystkie zdążyły się maksymalnie rozwinąć.
I jeszcze może staroć - komiks "Bunny". To da.killa mi kiedyś podesłał, łącznie z tym obrazkiem. Pytając czy Grepi mi się gdzieś nie pałęta. No bo faktycznie, wszystko by pasowało (modulo kolor futra, ale może się maskowała). "The bunny had borrowed someone else's imaginary friend to play with" :)
A, na koniec jeszcze coś - MPD. Harnir mnie trochę podpytywał o różne regułki sedowe do użycia z czymś zwanym "mpc" (front-endem do MPD), na potrzeby menu w Crystalu (tak swoją drogą to mechanizm PipeRead w fvwm jest do kitu - tyle problemów z cytowaniem, że po wklepaniu jakiejś bardziej skomplikowanej regułki trzeba przez pół godziny szukać które też znaczki trzeba dodatkowo wyeskejpować... ciągi '\\\\' mieszane z regexpami nie są wcale zabawne). No ale w końcu sam się zainteresowałem tym czymś. MPD, Music Player Daemon, to system odtwarzania muzyki. Czyli player, jak wiele innych. Ale, co mniej spotykane, zbudowany w układzie klient-serwer. MPD jako taki nie posiada GUI, ani nawet TUI. Można go za to kontrolować przez sieć... np. telnet :) Istnieje parę ciekawych klientów które się z nim komunikują, jak również ułatwiająca sprawę biblioteka i moduł pythonowy (aczkolwiek moduł wypróbowałem i jest średnio używalny - już lepiej jest sobie potelnetować z poziomu pythona). Inną ciekawą sprawą jest to, że MPD zaprojektowano tak by radził sobie z równoległym podłączeniem wielu klientów. Czyli można mieć podpięte parę różnych gui, a zmiany wprowadzane w jednym z nich będą propagowane od razu na resztę. Działa to naprawdę zadziwiająco gładko. Sam MPD operuje pojęciem biblioteki muzyki (to ostatnio popularne), więc indeksuje podany mu katalog. To przyspiesza zmienianie playlist, bo tagi nie są odczytywane za każdym razem z plików z muzyką, ale w wykonaniu MPD taka biblioteka jest bezużyteczna przy odtwarzaniu ad-hoc (np. po wrzuceniu do napędu CD z empetrójkami nie da się tak po prostu ich włączyć w MPD - należałoby najpierw zrobić symlink katalogu z podmontowanym cd-romem gdzieś do katalogu z biblioteką muzyki, wywołać w MPD funkcję update i dopiero wtedy można coś robić...). Ale pomijając ten detal reszta jest ekstra. Stan daemona jest zapamiętywany między restartami. Jeśli wyłączy się go w połowie odtwarzania jakiejś ścieżki, to przy następnym starcie wznowi on akcję od razu od tego miejsca. Ma jakiś crossfade. Obsługuje te najpopularniejsze formaty - mp3, ogg, flac, chyba mpc też, no i wszystko co libmikmod przełknie. Odtwarza sobie spokojnie nawet gdy nie ma do niego podłączonego żadnego klienta. Daemon nie wymaga X-ów, więc można np. restartować całe GUI a muzyka nie przestaje grać. No i obsługa telnetem... laski aż piszczą gdy widzą jak robisz coś takiego:
[j:0 c:1]/home/grzegorz> telnet localhost 6600 Trying 127.0.0.1... Connected to quatrin.pl. Escape character is '^]'. OK MPD 0.11.5 clear OK add AuralPlanet OK play OK playlist 0:AuralPlanet/Lightflow/01.mp3 1:AuralPlanet/Lightflow/02.mp3 2:AuralPlanet/Lightflow/03.mp3 3:AuralPlanet/Lightflow/04.mp3 4:AuralPlanet/Lightflow/05.mp3 5:AuralPlanet/Lightflow/06.mp3 (...)
(wystarczyłoby dodać jeszcze tab-completion, a takie TUI mogłoby być świetnym sposobem obsługiwania tego na co dzień, przynajmniej na moim biurku. Szybciej wklepuję polecenia niż klikam. Aha, tak naprawdę to laski nie piszczą i nie podrywam babek "na hakera" - muszę zdementować te pogłoski. Ale to taki fajny stereotyp ;)
Ale oczywiście istnieją mniej ekstrawaganckie sposoby obsługi, jest kilka klientów tekstowych, klika z GUI, w tym jeden który mi się spodobał, kmp [screenshot]. Wygodny, estetyczny, bez bajerów, za to z bardzo funkcjonalną i seksownie wyglądającą ikonką w trayu (serio, jest bardzo ładna)
Kto wie, może w przyszłości sam dopiszę sobie jakieś szybkie UI do MPD. Pierwszy byłby klient lirc, nie powinien być trudny... A potem coś tekstowego z tab-completion, pewnie w Pythonie ;)
OK, na dzisiaj to chyba wszystko już... mógłbym jeszcze popisać o nowym wydaniu glibc-2.3.5 (chociaż nie ma co pisać - są i działają, tyle), o teście wydajności JS/CSS który zrobiłem mojej Operze i Firefoksowi (miażdżąca przewaga Opery, na tej stronie spokojnie właziłem z Operą 8b3 do TopTen (wynik 4.84 sekundy, w kategorii linuksowej nawet pierwsze miejsce dostawałem, podczas gdy firefox potrzebował kilka razy więcej czasu i nie zajmował miejsc godnych uwagi :), więc wyszło to co pewnie wszyscy wiedzą - Opera to błyskawica, a Firefox to nie Opera. Ale używam Ognioliska właśnie, bo ma Adblock i kupę innych dodatków o których pod Operą mogę tylko pomarzyć).
Mógłbym też dodać, że wykonałem kilka testowych kompilatów Firefoksa by sprawdzić, czy zmiana -Os na -O2 spowoduje przyspieszenie renderowania i odkryłem, że przyspieszenia nie dała. Nawet odrobinkę (mikroskopijnie) spowolniło z -O2. Więc lepiej pozostać przy -Os, przynajmniej na moim Sempronie z 256KB cache.
Dalej, mógłbym dodać, że w podobny sposób zbenchmarkowałem gcc i że zauważyłem drobny (kilka-kilkanaście sekund w skali 10 minut) spadek wydajności kompilatora po przejściu na -Os (domyślnie buduję gcc z -O2), zarówno dla gcc jak i g++, ale musiałbym nadmienić że wyniki były dosyć mocno rozchwiane (mogło więc chodzić o błąd statystyczny).
Mógłbym też pewnie pisać o innych Szalenie Pasjonujących Sprawach, np. o tym jak to wlazłem na portal randkowy o2.pl, wklepałem swoje wymagania i przeglądałem potencjalnie pasujące babki z mojego województwa, aaaale o tym to może w ogóle lepiej nie mówmy ;)