W ostatni czwartek zdarzyło mi się wynająć w ovh.pl prywatny serwer RPS I. Miał on służyć testom nowego startupa. Docelowa grupa testerów (około 80 osób), Celeron 1,2 GHz, 512 RAM, Łącze 100 Mbps bez limitu transferu, dysk 10 GB i 50 zł miesięcznie. Dobry serwer do testów można by rzec. Można by… ale:
Prywatne RPSy to rozwiązanie „ekologiczne” i tanie. Aby takim było żadna z maszyn nie posiada fizycznego dysku. Dane przechowywane są na wielkiej, wspólnej macierzy dyskowej dostępnej przez sieć za pomocą NFSa lub iSCSI.
Z grubsza powinno to działać tak:

Ale działa niestety tak:

Mały dowód:
$ time ls /sbin/
real 0m41.424s
user 0m0.008s
sys 0m0.004s
dla porównania mój laptop
$ time ls /sbin/
real 0m0.071s
user 0m0.000s
sys0 m0.003s
Dysk praktycznie nie istnieje a serwer staje się przez to zupełnie nieużyteczny. Nie żeby był to odosobniony przypadek. Wystarczy poczytać ten wątek na forum aby się o tym przekonać.
Na RPSa zdecydowałem się, bo słyszałem, że problemy z dyskami już ustały. Otóż nic podobnego! Od następnego miesiąca przesiadam się na serwer dedykowany z własnym dyskiem. Pewnie skończy się na Kimsufi w opcji L. Chyba, że polecacie coś lepszego w podobnej cenie.
Podsumowując:
Ostatnio rozglądałem się za tutorialem do budowy prostego gadżetu w Pythonie, który siedział by sobie na przezroczystym tle na moim pulpicie. Gadżety Screenlets czy gDesklets działają różnie, zazwyczaj niestabilnie albo, któryś (akurat przydatny) całkowicie się nie odpala. Poza tym potrzebowałem coś maksymalnie prostego a nie całej platformy dla gadżetów.
Wpadłem więc dziś na pomysł wykorzystania Tildy jako ładnego kontenera. W zasadzie to do pełni szczęścia potrzebne były dwie paczki: tilda i python-feedparser. Znajdziecie je w każdej dystrybucji. Dla archowców:
# pacman -S tilda python-feedparser
Tildę najlepiej skonfigurować następująco:
W sekcji Command w polu Custom Command umieszczamy adres skryptu, ale o tym za chwilę.
Teraz czas na Pythona. Wystarczy sworzyć malutki skrypt o takiej treści:
#! /usr/bin/env python
import feedparser
import time
import os, sys
# nieskonczona petla
while 1:
# pobierz RSS
feed = feedparser.parse("http://jogger.pl/rss/")
# wyczysc ekran
sys.stdout.write(os.popen('clear').read())
# dla kazdego wpisu
for note in feed['entries']:
# wypisz tytul
print "- %s" % note['title']
print "\nhttp://jogger.pl/"
# odczekaj 60 sekund
time.sleep(60)
Skrypt wystarczy zapisać np. jako jogger.py i wpisać ścieżkę do niego w polu Custom Command. W moim przypadku jest to:
python /home/tomek/go/python/jogger.py
I to by było na tyle. Po ponownym uruchomieniu Tildy powinniśmy mieć ładny przegląd wydarzeń na joggerze odświeżany co 60 sekund. Gdy coś nas zainteresuje wystarczy przytrzymać ctrl i kliknąć link do joggera.

Oczywiście może to być dowolny kanał RSS/Atom czy coś zupełnie innego np. statystyki obciążenia naszego serwera. Żadnych tam Googlowych gadżetów z tysiącem funkcji. Prosto łatwo i przyjemnie.
Już dawno miałem o nim napisać notkę jednak zawsze gdzieś mi to uciekało. Ale nie tym razem.
Język dot służy do opisywania schematów za pomocą tekstu. Pewnie brzmi to niewyraźnie, dlatego od razu przejdźmy do konkretów. Aby skorzystać z dobrodziejstw języka dot instalujemy pakiet graphviz.
# pacman -S graphviz
Następnie otwieramy nasz ulubiony edytor tekstu i zaczynamy pisać:
digraph linux {
Linux -> Debian;
Linux -> "Red Hat";
Debian -> Ubuntu;
Debian -> Knoppix;
Ubuntu -> Kubuntu;
Ubuntu -> Edubuntu;
Ubuntu -> Xubuntu;
"Red Hat" -> Mandrake;
"Red Hat" -> Fedora;
Mandrake -> Mandriva;
}
Tak przygotowany plik zapisujemy jako test.dot A teraz najlepsza część, czyli budujemy schemat
$ dot -Tpng test.dot -o test.png
TIP: Pliki możemy eksportować również do innych formatów
W efekcie powinniśmy otrzymać plik test.png, który wygląda tak:

Narysowanie czegoś takiego w Inkscape pewnie zajęło by Wam kilka minut więcej. Najlepszą według mnie zaletą języka dot jest to, składa on się ze zwykłego tekstu, dzięki czemu w łatwy sposób możemy generować te pliki przez różne mechanizmy. Np. jeżeli mamy bazę danych firmy gdzie jakaś tabela obrazuje zależności pomiędzy przełożonymi a podwładnymi wówczas możemy szybko napisać skrypt w PHP czy Pythonie, który z pomocą tej tabeli wygeneruje nam plik dot a następnie utworzy z niego ładny schemat.
Na tym jednak nie koniec. Język dot to prawdziwe bogactwo kształtów grotów i kolorów. Za pomocą kombinacji różnych tych elementów możemy dokładnie zamodelować to co chcemy.

Więcej przykładów znajdziecie w galerii.
Od dawna chciałem już zrobić coś związanego z kamerą. W tym semestrze nadarzyła się okazja i zaproponowaliśmy prowadzącemu własny temat projektu z przedmiotu o nazwie „struktury systemów informatycznych”. Naszym zamierzeniem było stworzenie programu, który działałby podobnie jak gesty wykonywane myszą w Firefoksie tyle, że rolę myszki odegrać miała kamera. Założenia wstępne: platforma – Linux, język – Python.
Najwięcej problemów sprawiła nam sama kamera, a dokładniej to zbieranie i przetwarzanie jej obrazu.
Na początku zabraliśmy się za testowanie reacTIVision, które w zasadzie jest oprogramowaniem dla ekranów wielodotykowych. ReacTIVision ma swoją bibliotekę 89 symboli, które potrafi rozpoznać określając ich numer id, pozycję x-y, kąt nachylenia a nawet przyśpieszenie.
Działo to całkiem sprawnie. Jeżeli wykonaliśmy szybszy ruch markerem, a dokładniej przyśpieszenie markera przekroczyło pewną granicę, wówczas rozpoczynał się rysować gest. Wadą jednak tego rozwiązania były markery. Jeżeli nie miało się markera to program był bezużyteczny. Trzeba było więc go zastąpić czymś co ma każdy, np. ręką :-)
Do łapania obrazu z kamery tym razem wykorzystaliśmy moduł Pythona pyvideograb. Znaleźliśmy nawet bardzo przydatny skrypt, który wykrywał punkty ruchu w obrazie poprzez porównywanie dwóch sąsiednich klatek. Co prawda autorzy zaznaczyli, że działa tylko pod Windowsem z uwagi na moduł do przychwytywania obrazu z kamery, ale ten łatwo można było podmienić.
Teraz wystarczyło wrzucić wszystko do Pygame’a i już pierwsze efekty były widoczne.

Program wykrywał ruch i potrafił określić współrzędne punktu ruchu, co w przypadku poruszającej się większej powierzchni oznaczało jej środek.
Po naciśnięciu spacji możemy już wykonywać gest.

Następny etap to sieć neuronowa a dokładniej sieć Hopfielda. Dzięki niej jesteśmy w stanie rozpoznać, czy wykonany gest zgadza się z jednym z 4 wzorców. Jeżeli tak, wykonywane jest przypisane do niego polecenie.
W konsoli wygląda to tak:
W tej chwili program ma wprowadzone 4 wzorce (plik: patterns.txt)

Przypisane do nich działania można łatwo edytować (interfejs.py)
Jeżeli ktoś miał by ochotę się tym pobawić lub zrobić z tym coś więcej to proszę bardzo.
Projekt – 4.5, radość ze zrealizowanego pomysłu – bezcenna ;-)
Współautorzy:
– Marek Knaga
– Jarosław Miazga
UPDATE: ponieważ strona projektu pyvideograb od jakiegoś czasu jest martwa zamieszczam spakowany moduł pyvideograb.tar.gz
Odkąd zagościł u mnie dżin używam tylko jego. Jest szybki i ma wszystko czego mi trzeba. No może prawie wszystko. Brakowało mi tylko snippetów czyli po polsku wstawek. To ostatnia rzecz jakiej brakowało mi do szybkiej i efektywnej pracy. Bo co klepać linie kodu, kiedy można klepnąć tabulator :-)
Co jakiś czas sprawdzałem czy pojawiła się już odpowiednia wtyczka zapewniająca taką funkcjonalność, ale póki co nadal jest to tylko pozycja na liście życzeń. Dopiero wczoraj znalazłem w dokumentacji, że większość jest już zrobiona !
W katalogu w którym zainstalował się Geany znajdziecie plik snippets.conf. U mnie pełna ścieżka to:
/usr/share/geany/snippets.conf
Teraz wystarczy skopiować go do naszego katalogu domowego:
$ cp /usr/share/geany/snippets.conf ~/.geany/
I już możemy dodawać do niego dowolne wstawki. W bloku [Special] możemy zadeklarować słowa kluczowe, których będziemy używać przy tworzeniu naszych wstawek. Np. żeby nie powtarzać często ładnego otwarcia bloku kodu {} deklarujemy to raz:
klamry=\n{\n\t\n}\n
a następnie możemy używać tego słowa kluczowego przy deklaracji naszych wstawek:
[PHP]
for=for ($i = 0; $i < %cursor%; $i++)%klamry%
Na początek zadeklarowałem sobie kilka wstawek z HTML-a. Jeżeli ktoś chce to niech się częstuje:
wget http://citizen.ovh.org/stuff/snippets.conf -O ~/.geany/snippets.conf
Efekt działania
Niedawno Google wypuściło bardzo fajną rzecz. Usługa nazywa się Google Sites i jest częścią aplikacji przeznaczonych dla własnej domeny (Google Apps for Your Domain). Nie będę tutaj opisywał całości funkcjonalności, bo pewnie do wieczora bym nie skończył. Trzeba zobaczyć to na własne oczy i samemu poklikać.
Na początek filmik
Teraz należy udać się na kilka przykładowych stron: Company intranet, Team project, Employee profile, Classroom.
Myślę, że jest to świetna usługa dla wszelkiego rodzaju projektów. Szkoda że Google Code nie ma takiej funkcjonalności. Z minusów jakie zauważyłem to niewątpliwym jest brak możliwości komentowania przez odwiedzających. Taką możliwość mają tylko osoby kolaborujące. Mam nadzieję, że wkrótce jakoś to naprawią bo wpływa to w znacznym stopniu na feedback ze strony użytkowników.
Kolejna cześć sagi „zaktualizowałem jądro i sieciówka się posypała”. Próba skompilowania mojego ostatniego wydania sterowników kończy się błędem
scripts/Makefile.build:46: *** CFLAGS was changed in „src/Makefile”. Fix it to use EXTRA_CFLAGS. Stop.
Natomiast próba zbudowania paczki z AUR kończy się dla odmiany innym ;-)
atl2_main.c:1451: error: implicit declaration of function ‘SET_MODULE_OWNER’
Sterowniki z AUR naprawić jednak łatwo. Wystarczy wyedytować plik atl2_main.c i posłać linię 1451 w krzaki
...
netdev = alloc_etherdev(sizeof(struct atl2_adapter));
if(!netdev) goto err_alloc_etherdev;//SET_MODULE_OWNER(netdev);
SET_NETDEV_DEV(netdev, &pdev->dev);pci_set_drvdata(pdev, netdev);
adapter = netdev_priv(netdev);
...
Wersja dla leniwych: atl2-2.0.3.tar
Po rozpakowaniu wchodzimy do katalogu i czarujemy
# make
# cp atl2.ko /lib/modules/2.6.24-ARCH/kernel/drivers/net/
# modprobe atl2
i powinno działać
Pacnet jest próbą kategoryzacji pakietów z repozytoriów Arch Linuksa zgodnie z kategoriami używanymi przez Gentoo Portage. Na chwilę obecną znajduje się tutaj 4138 pakietów z repozytoriów core, extra i community.
Jeżeli zauważycie, że jakiś pakiet znajduje się w niewłaściwej kategorii, nie czujcie się skrępowani żeby ją zmienić. Pakiety mogą być niewłaściwie przypisane do kategorii, ze względu na rozbieżności w nazewnictwie pomiędzy obiema dystrybucjami.
Liczę na to, że z Waszą pomocą doprowadzimy szybko to repozytorium do porządku i co najważniejsze – przydatności.
Ostatnio wiele serwisów donosiło o nowym wydaniu (v1.0) programu do obsługi kamer – wxCam. Żaden nie wspomniał jednak że w nowej wersji dodano bardzo interesującą funkcję – nagrywanie przy wykryciu ruchu. Ale po kolei.
W repozytorium Archa paczki nie ma, nie ma też nic w AUR. Trzeba radzić sobie samemu. Główne wymagania to:
Revel kompilujemy standardowo:
# ./configure
# make
# make install
CImg kompilujemy tak:
cd examples
make olinux
w wyniku tego katalog wyżej powstanie nam pliczek CImg.h, który należy skopiować do katalogu ze źródłami wxCam.
wxCam kompilujemy standardowo:
# ./configure
# make
# make install
Gotowe. Teraz polecenie wxcam powinno odpalić nam program.
Klikamy Capture > Show movement detection areas i zaznaczamy interesujący nas obszar
Następnie klikamy Capture > Movement detection i możemy już rozpocząć nagrywanie. W przypadku braku ruchu nagrywanie powinno się automatycznie zatrzymać.
Przykład:
Możliwe jest też zaznaczenie kilku obszarów
Chociaż wxCam nie ma żadnego API do którego można by podpiąć jakiś „alarm” to jednak łatwo to zrobić. Wystarczy tylko napisać skrypt monitorujący wielkość pliku do którego nagrywany jest obraz. Jeżeli plik zacznie się zwiększać oznaczać to będzie, że wykryto ruch i można wykonać jakieś działanie.
Dodatkowo wxCam oferuje kilka filtrów obrazu np.:
i kilka innych
W związku z ostatnimi zmianami loga Archa postanowiłem dopracować mój laptopowy system i dogonić Ubuntu w estetyce startu systemu. W tym celu zainstalowałem wynalazek o nazwie Splashy który ładnie maskuje kilobajty tekstu generowanego przy starcie przykrywając je ładnym obrazkiem. W tym miejscu opisałbym instalację, ale dobrzy ludzi już to zrobili więc tylko zlinkuję
Uwaga! Przy instalacji podmienianych jest kilka plików konfiguracyjnych w /etc/ np. rc.conf zostaje zastąpiony nowym a stary zapisywany jest jako rc.conf.pacsave więc nie zapomnijcie przywrócić starych plików przed ponownym uruchomieniem.
Po instalacji możemy zabrać się za zmianę motywu. Ja używam takiego
# splashy_config -i archer-black-splashy.tar.gz
Ponieważ zmiana motywu jest zmianą w konfiguracji musimy przebudować jądro
# mkinitcpio -p kernel26
Teraz wystarczy jeszcze zadbać o menadżer logowania. W moim przypadku jest to taki motyw dla Slima. Kopiujemy zawartość archiwum do /usr/share/slim/themes/, edytujemy plik /etc/slim.conf i zmieniamy current_theme
current_theme archer-black
I tapetka
Całość prezentuje się tak:
(wiem trochę słabo widać, ale lepiej się nie udało)
Na koniec żeby nie było za słodko, mały błąd. Po instalacji Splashy w górnym menu pojawiły mi się dziwnie skupiska małych kreseczek
Temat jest znany i prawdopodobnie jest to bug. Jednak w moim przypadku nie jest on zbyt uciążliwy.
Ostatnio zaczynam mieć dość webowych aplikacji. Oglądanie wszystkiego w przeglądarce nie zawsze jest wygodne, no i nie zawsze szybkie zważywszy na ilość rozszerzeń jakie wcieliłem do Firefox-a. Czasami też wyłączam okno przeglądarki zapominając, że w któreś z zakładek siedzi coś co np. odtwarza muzykę z Jamendo. Do webaplikacji Googla używam już od jakiegoś czasu Prisma. Działa to lepiej ale nadal nie jest to /to coś/ czego szukam. Jeżeli mogę staram się używać aplikacji natywnych np. Gmail via Thunderbird (przez IMAP) czy Google Calendar via Lightning (rozszerzenie do Trunderbird-a). Aplikacje webowe mają jednak bardzo dobrą cechę – są mobilne. Nie mając naszych ulubionych aplikacji pod ręką i tak zawsze się do nich dostaniemy choćby przez tfu IE tfu.
Dzisiaj trochę bawiłem się PyGTK wynikiem czego wykombinowałem mały skrypt. Sam się zdziwiłem jak można łatwo ubierać strony w jakieś natywne GUI. Poniższy skrypt jest zwykłym oknem przeglądarki opartej na gtkmozembed tyle, że potrafi schować się do ikonki w zasobniku systemowym dzięki czemu świetnie sprawuje się już jako odtwarzacz moich ulubionych utworów z Jamendo.
Przy pierwszym uruchomieniu należy się zalogować w serwisie (nowej wersji serwisu), a przy następnych od razu ładowany będzie ichniejszy player.
Skrypt: jtip.py
Odpalamy standardowo jak na pythona przystało:
$ python jtip.py
Oczywiście skrypt łatwo wykorzystać do obsługi innej strony.
BTW: Kiedy ktoś zrobi wtyczkę do QuodLibet obsługującą Jamendo ?
BTW2: Jak spowodować aby klikanie na krzyżyk chowało aplikację do ikonki w zasobniku? W moich próbach okno niby udało mi się ukryć nie wyłączając aplikacji, ale dźwięk się urywał a po kliknięciu na ikonkę w zasobniku przywracało się gołe okno.
Jakiś czas temu pojawił się u mnie router WiFi, a ponieważ chciałem uchronić moje łączę przed wiszącą na nim połową osiedla musiałem transmisję poddać szyfrowaniu.
Router D-link 524, całkiem fajny

O ile otwarte sterowniki bcm43xx dobrze radziły sobie z transmisją otwartą to jednak o szyfrowaniu można było pomarzyć. Musiałem więc poszukać czegoś innego i tutaj z pomocą przyszedł NDISwrapper Ogólnie rzecz ujmując potrafi on emulować sterowniki kart sieciowych napisane dla Windowsa tak, aby działał pod Linuksem.
Instalacja NDISwrapper-a jest dość prosta. Na początek musimy się pozbyć dotychczasowego sterownika bcm43xx jeżeli go używamy. Można zrobić to usuwając pakiet lub dodając go do czarnej listy modułów, tak aby nie był ładowany przy starcie systemu. W Archu czarna lista znajduje się w pliku /etc/rc.conf i dodanie do listy wyglądało by np. tak:
MOD_BLACKLIST=(asus_acpii bcm43xx)
Następnie instalujemy NDISwrapper-a. Każda szanująca się dystrybucja powinna mieć odpowiednie paczki w swoim repozytorium. Zazwyczaj są to dwie paczki: ndiswrapper i ndiswrapper-utils. W Archu wygląda to tak:
# pacman -S ndiswrapper ndiswrapper-utils
Po instalacji sięgamy po płytkę ze sterownikami do naszej karty sieciowej i ładujemy odpowiedni plik do NDISwrapper-a.
# ndiswrapper -i bcmwl5.inf
# ndiswrapper -l
# modprobe ndiswrapper
# ndiswrapper -m
Jeżeli jednak nie mamy sterowników możemy je pobrać z sieci. Trzeba tylko dokładnie wiedzieć jaki numerek ma nasza karta sieciowa. Dowiedzieć można się tego wydając takie magiczne zaklęcie:
# lspci -n | egrep '14e4:43(06|07|11|12|18|19|21|24|25|28)'
Następnie mając numerek karty możemy pobrać odpowiedni plik. Dokładna listę które numerki pasują do których strowników znajdziecie w helpie Ubuntu
Jak już pisałem ostatnio po aktualizacji jądra do wersji 2.6.23 całkowicie wysypała mi się karta sieciowa Attansic L2. Kompilacja sterowników zatrzymywała się na błędzie informującym o nieznanej funkcji eth_copy_and_sum. Z pomocą przyszedł jednak rlblaster i chociaż trafił na notkę pewnie przypadkiem i zupełnie nie miał pojęcia o języku polskim to jednak podpowiedział jak rozwiązać błąd. Wyżej wymieniona funkcja została pewnie usunięta z nowej wersji jądra, dlatego musimy napisać ją sami. A wygląda to mniej więcej tak:
Około linii 243 w pliku at_main.c dopisujemy taką oto funkcję:
void eth_copy_and_sum(struct sk_buff *dest, unsigned char *src, int length, int base)
{
memcpy(dest->data, src, length);
}
Dzięki temu zabiegowi błąd z nieznaną funkcją zostaje zażegnany. Pozostaje co prawda problem z dwiema innymi funkcjami ale jak przeczytałem na jednym z blogów wystarczy zakomentować wnętrze tych funkcji pozostawiając tylko komendę return.
Tak załatany sterownik zaczął działać, ale szybko zauważyłem, że zamiast przepustowości rzędu 2000 kbps wyciąga około 50 kbps. Wróciłem więc do kodu sterownika i zacząłem grzebać dalej. Okazało się, że w nowym jądrze zmianie uległa też nazwa innej funkcji. Rozwiązaniem było zastąpienie odwołań do:
vlgrp->vlan_devices[vid]
na:
vlgrp->vlan_devices_arrays[vid]
zamiast komentować ciała funkcji które zawierają te linie.
Teraz sieciówka działa już pełną parą.
Wersja dla leniwych: atl2.tar
Po rozpakowaniu wchodzimy do /src/ i wydajemy komendy
# make && make install
A później ładujemy sterownik
# modprobe atl2
Zaczęło się od tego, że wtrąciłem mały offtopic w temacie o uploaderze dla Picasa Web, kiedy tu znienacka zjawił się Marek Wiewórski z gotowym rozwiązaniem
Ale od początku. Do skryptu potrzebna będzie nam biblioteka flickyou Wystarczy że pobierzemy ją z na dysk, rozpakujemy, wejdziemy do katalogu i wpiszemy:
# python setup.py install
Flickyou do działania potrzebuje też innego modułu pythona — simplejson. Jeżeli więc go jeszcze nie posiadamy to:
# emerge -av dev-python/simplejson
Aby połączyć się z API serwisu Flickr należy zdobyć dwa klucze – key i secret, czego możemy dokonać na tej stronie
Kiedy mamy już klucze tworzymy w katalogu domowym plik .flikr.cfg o następującej strukturze:
[Auth]
api_key: KLUCZ_KEY
secret_key: KLUCZ_SECRET
Oczywiście zamiast KLUCZ_KEY i KLUCZ_SECRET wstawiamy odpowiednie numerki.
Teraz zabierzmy się za skrypt właściwy Nadajmy mu prawa do wykonania:
# chmod +x flickr.py
I przenieśmy do /usr/bin/ aby był widziany jako polecenie
# mv flickr.py /usr/bin/flickr
Od tej chwili mamy prawie działający skrypt. Prawie bo czeka nas jeszcze pierwsze uruchomienie. A wygląda to najprościej jak można.
$ flickr jakis_plik.png
Teraz jeżeli wszystko zrobiliśmy dobrze pozostaje nam potwierdzenie autentyczności programu posługującego się naszym kluczem API. Powinna otworzyć nam się przeglądarka tekstowa a naszym zadaniem jest zalogowanie się do serwisu Flickr i kliknięcie na link zezwalający naszemu skryptowi na korzystanie z API. Dokładniej wygląda to tak, że po zalogowaniu klikamy w jeden redirect a na następnej stronie znajdziemy już na środku link zezwalający. Po całej operacji można już zamknąć przeglądarkę i gotowe! Nasz skrypt powinien już działać jak należy.
Jak widać skrypt do razu podaje nam linki do miniaturki oraz pełnego rozmiaru. Po prostu idealne do zastosowania blogowego lub gdy chcemy szybko komuś pokazać jakiś screen.
Jako że przeniosłem się na gibkie Xfce wypadałoby skorzystać z jego zalet. Sprawa jest banalnie prosta. Odpalamy Thunara i klikamy Edycja > Konfiguruj akcje… Tutaj znajdziemy małe okienko gdzie dodamy upload grafiki na Flickr. Klikamy w plusik i wpisujemy co następuje:
nazwa: Flickr
Opis: Upload grafiki na Flickr
Polecenie: flickr.py %F > /tmp/flickr && geany /tmp/flickr
Ikonka: Ściągamy z http://yourkee.com/icon/flickr.png

Tutaj małe objaśnienie samego polecenia. Symbol %F wstawia nam ścieżki do wszystkich plików, które zaznaczymy w Thunarze. Jednak, jeżeli nie odpalimy całego polecenia w terminalu, to nie będziemy mieli podglądu na wyświetlane linki do miniaturki i pełnej grafiki, co nam się nie podoba ;-) Przekierujemy więc wyjście całego polecania do pliku /tmp/flickr a następnie, po zakończeniu uploadu otwieramy go naszym ulubionym edytorem. W moim przypadku jest to Geany ale równie dobrze możecie zrobić to Geditem czy czymkolwiek innym.
Teraz przechodzimy do zakładki Warunki pokazywania i zaznaczamy tam Pliki graficzne

Integracja zakończona! Teraz w Thunarze po kliknięciu prawym przyciskiem myszy na jakiś plik graficzny w menu kontekstowym powinniśmy widzieć opcję Flickr. Możemy też zaznaczyć w ten sposób kilka plików graficznych i wrzucić je jednocześnie.
Mirage czyli przeglądarka grafiki, o której wspomniałem ostatnio ma podobnie jak Thunar możliwość definiowania własnych czynności. Wystarczy kliknąć Modyfikuj > Własne czynności > Konfiguruj. Na tej samej zasadzie możemy więc dorobić tutaj upload na Flickr. Mamy możliwość, a nawet musimy przypisać każdej nowej akcji odpowiedni skrót klawiszowy. Ot taka dbałość o wygodę użytkownika ;-). Ja sobie przypisałem Ctrl+Shift+F
To by było na tyle. Miłego użytkowania i podziękujcie Markowi
PS. O konsolowym uploaderze do Picasa Web pisałem wcześniej
Dwa dni temu postanowiłem zrealizować wreszcie mój pierwotny pomysł na linuksa czyli Gentoo+Xfce4. Pokrótce więc opowiem jak to przebiegło.
Żeby usunąć Gnoma najpierw należy pozbyć flagi gnome z wszelkiego oprogramowania jakie jej używa. W moim przypadku wystarczyło z make.conf wywalić globalną flagę gnome.
# vim /etc/make.conf
Należy się też upewnić czy flaga gnome nie występuje przypadkiem w pliku package.use
# vim /etc/portage/package.use
Robimy tak dlatego, aby po usunięciu oprogramowania, wywołanie revdep-rebuild nie przywróciło nam wszystkiego, o co prosić będą programy posiadające ową flagę. Po usunięciu flagi musimy przekompilować world.
# emerge -avuDN world
Teraz zabieramy się za właściwe usuwanie. Potrzebny będzie nam tutaj programik eix służący do szybkiego przeszukiwania pakietów. Jeżeli jeszcze go nie mamy to
# emerge -av eix
A następnie tworzymy bazę informacji o pakietach
# update-eix
Sprawdzamy teraz jakie pakiety mają zostać usunięte
# eix -C -I gnome | grep "\[I\]" | awk '{print $2}' |xargs emerge -pC
No i wreszcie usuwamy Gnoma
# eix -C -I gnome | grep "\[I\]" | awk '{print $2}' | xargs emerge -C
Po wszystkim sprawdzamy czy nie uszkodziliśmy jakiś zależności
# revdep-rebuild
Więcej: gentoo-wiki
Teraz instalujemy główne środowisko Xfce4
# emerge -av xfce4
Oraz kilka dodatków
# emerge -av xfce4-extras
Więcej: gentoo-wiki
Jako że moim założeniem była maksymalna szybkość, lekkość i zwiewność to pozbyłem się również GDM-a i zamieniłem go na lekkiego SLiMa No bo po co mi np. możliwość zdalnego logowania i inne bajery skoro i tak ich nie używam.
# emerge -av slim
Dodamy też klika motywów
# emerge slim-themes
Plik konfiguracyjny znajdziemy tutaj
# vim /etc/slim.conf
Sprawdźmy w nim czy nasza sesja xfce znajduje się na liście sesji
sessions xfce4,icewm,wmaker,blackbox
Jest, czyli wszystko gra. Domyślnie będziemy logowani do xfce a w razie potrzeby możemy zmienić sesję naciskając F1 podczas logowania.
Listę dostępnych motywów znajdziemy tutaj:
# ls /usr/share/slim/themes/
Jeżeli chcemy zmienić motyw wystarczy w pliku konfiguracyjnym Slima podać właściwą nazwę katalogu z motywem w linijce:
current_theme rainbow
Można też wypisać kilka po przecinku, wtedy za każdym razem włączy się losowy. Sam motyw jest bardzo prosty do zrobienia samemu, bo składa się zaledwie z trzech plików (grafika tła, grafika „formularza” logowania i prosty plik konfiguracyjny).
Po instalacji każemy systemowi ładować SLiMa zamiast GDMa
# vim /etc/rc.conf
Zmieniamy linijkę
DISPLAYMANAGER="gdm"
na
DISPLAYMANAGER="slim"
oraz linijkę
XSESSION="gnome"
na
XSESSION="startxfce4"
Więcej: gentoo-wiki
No i gotowe! Po restarcie powinniśmy zobaczyć coś takiego
A później gładko i szybko zalogować się do Xfce.
Jako że środowisko jest bardzo lekkie i szybkie, oraz zrobiliśmy już pierwszy krok w postaci zamiany GDMa na Slima to czas pójść za ciosem.
Oczywiście integruje się z Thunarem dzięki czemu naciskając prawym na katalog mamy w menu pakuj/rozpakuj.

Geany to w zasadzie hit sezonu. Zainstalowałem dżina na krótko przed usunięciem Gnoma i uruchamiał się o wiele szybciej niż Gedit Praktycznie to uruchamia się natychmiast po kliknięciu na ikonkę. Przy czym ma wszystko czego potrzebuję: kolorowanie wielu składni kodu, podpowiadanie poleceń i zwijanie kodu. Nie wysypuje mi się też na zastępowaniu wyrazów w przeciwieństwie do gPHPEdita
Programy którym pozostałem wierny:
No i oczywiście: Firefox, Mplayer, OpenOffice, Gimp, Inkscape oraz kilka innych.
Więcej: Xfce-wiki
Sam się zastanawiam dlaczego wcześniej tego nie zrobiłem, teraz wszystko działa ile fabryka dała. Xfce jest bardzo elastyczne i szybko przystosowałem je do przyzwyczajeń jakie wyniosłem z Gnoma. Po prostu pięknie!
Niedawno jeszcze użerałem się z F-spotem który jak na złość nie potrafił przejść autoryzacji Picasa. W dodatku biblioteka libgphoto2 z której korzysta F-spot gryzła się z gnomowym automount’erem sprzętu przez co pingwin nie wykrywał mi aparatu. Zmuszony więc byłem odesłać F-spota na /dev/drzewo i poszukać alternatywy.
Z pomocą przyszedł Marcin Sochacki (Wanted) ze swoim bardzo wygodnym w użyciu skryptem opartym o Pythonowe API dla Googla
Skrypt wystarczy zapisać na dysku, następnie wyedytować plik i wpisać swój login oraz hasło
username = 'UZYTKOWNIK'
password = 'HASLO'
Teraz nadajemy skryptowi prawa do wykonywania
$ chmod +x picasa_upload.py
I dla wygody przerzucamy go rootem do /usr/bin aby stał się poleceniem:
# mv picasa_upload.py /usr/bin/picasa
Gotowe. Do dyspozycji mamy teraz polecenie picasa którego składania jest bardzo prosta. Jeżeli chcemy np. wrzucić na Picasa zdjęcia znajdujące w katalogu abc wystarczy że wejdziemy do niego i wklepiemy:
$ cd abc/
$ picasa Zdjecia-z-pikniku *.jpg
Skrypt założy nowy album o nazwie Zdjecia-z-pikniku i wrzuci do niego wszystkie pliki o rozszerzeniu .jpg które znajdują się w katalogu. Pice of cake!
Jako, że wczoraj zotałem napadnięty i zarzucono mi nie bycie dość pr0 więc dzisiaj nadrabiam straty ;)
Kilka razy już chciałem nagrać jakiś filmik z ekranu i wrzucić go na Google Video, ale za każdym razem wynik był marny – za duża kompresja i za mała rozdzielczość. Dotyczy to również klasycznych nagrań z kamery, które chcilibyśmy pokazać w nieco większej rozdzielczości.
Do tego celu potrzebne będą nam 3 rzeczy:
Nagrywany filmik. Produktem wyjściowym jest film.avi.
Przy pomocy magicznego zaklęcia konwertujemy film do postaci flashowej.
ffmpeg -i film.avi film.flv
Jeżeli chcemy skompresować do danego wymiaru to:
ffmpeg -i film.avi -s 320x240 -ar 44100 -r 12 film.flv
Podpinamy plik film.flv pod nasz flashowy odtwarzacz:
<object type="application/x-shockwave-flash" data="FlowPlayer.swf" width="924" height="690" id="FlowPlayer">
<param name=„allowScriptAccess” value=„sameDomain” />
<param name=„movie” value=„FlowPlayer.swf” />
<param name=„quality” value=„high” />
<param name=„scale” value=„noScale” />
<param name=„wmode” value=„transparent” />
<param name=„allowNetworking” value=„all” />
<param name=„flashvars” value=„config={
autoPlay: false,
loop: false,
initialScale: ‘scale’,
showLoopButton: false,
showPlayListButtons: false,
playList: [
{ url: ‘http://karbownicki.com/files/baner.jpg’ },
{ url: ‘film.flv’ },
{ url: ‘http://karbownicki.com/files/baner.jpg’ } ]
}” />
</object>
FlowPlayer obsługuję playlisty, więc możemy przed i po właściwym filmiku wstawić jakiś obrazek czy inny filmik. W ten sposób można np. założyć własną telewizję internetową i utrzymywać się z reklam wstawianych przed właściwymi filmikami ;)
Gotowe. Zobacz przykład
Wczoraj moim oczom ukazała się dobra nowina. Gajim po włączeniu i połączeniu się z kontem googlowym ładnie wyświetlił transporty i równie ładnie się do nich zalogował. Tym samy dziwny problem, znikających od jakiegoś czasu transporów, o którym pisałem w poprzedniej notce odszedł w zapomnienie.
Dodatkowo Googlowcy zwiększyli powierzchnię kont webowych albumów Picasa z 250 MB do 1GB. Wprowadzona została też wyszukiwarka zdjęć przeszukująca tagi wszystkich udostępnionych albumów Picasa w obrębie serwisu.
Co prawda w porównaniu z Flickr’em Google pozostaje w tyle i nadal brakuje tak oczywistych funkcji jak ostatnio dodane do albumu komentarze, ale… Małymi kroczkami, byle do przodu.
Kilka tygodni temu pomyślałem sobie, że do kontaktów biznesowych potrzebna mi będzie jakaś własna domena. Korzystając więc z okazji, że w domu mieli karnawałową promocję, rozbiłem mBankową świnkę skarbonkę i wydałem okrągłe 24,28 PLN. Całość operacji, łącznie z oznaczeniem domeny jako zapłacona, zamknęła się w 10 minutach.
Podpięcie joggera pod domenę również nie sprawiło żadnych kłopotów. Oddelegowałem rekord A pod odpowiedniego (217.110.127.251) IP’ka i rano (6h później) wszystko już ładnie działało.
karbownicki.com A 3600 217.110.127.251
Jakieś dwa tygodnie później postanowiłem zabrać się z usługę Google Apps for Your Domain czyli podpięcie usług Googla pod własną domenę. Jako, że korzystam z wieli G-usług taka możliwość wydała mi się bardzo przydatna. Rejestracja nie jest trudna, chociaż nie ma (jeszcze) wersji polskiej. Po wypełnieniu formularza zostajemy poinformowani, jakie wpisy musimy dodać do DNS’a obsługującego naszą domenę. Jednym z nich jest wygenerowany dla nas specjalny adres, który ustawieni udowodni Googlowi, że to rzeczywiście my jesteśmy właścicielami tej domeny. Ustawiamy go jako jako rekord typu CNAME odsyłający do google.com
Po weryfikacji własności domeny zakładamy sobie użytkownika (w wersji FREE możemy ich założyć nawet 100) z prawami admina i logujemy się na niego. Po zalogowaniu mamy do dyspozycji taki oto panel
Początkowo nie usługi nie mają jednak adresów typu coś.naszadomena.com tylko takie brzydkie googlowe. Wystarczy jednak wejść do każdej z usług, kliknąć Change URL i wybrać odpowiadający nam adres. Zostaniemy wówczas poproszeni o dodanie do DNS’a odpowiedniego rekordu CNAME odwołującego się do ghs.google.com. W przypadku wysyłania i odbierania poczty musimy dodać rekord MX odwołujący się do 10 ASPMX.L.GOOGLE.COM
karbownicki.com MX 3600 10 ASPMX.L.GOOGLE.COM
Moje problemy pojawiły się dopiero przy uruchomienia jabbera pod własną domeną. Niby wszystko działało, ale mogłem pogadać jedynie z googlowymi kontaktami. Po dłuższym czasie googlowania i przeglądania różnych zakamarków pomocy trafiłem na rozwiązanie. Magicznymi zaklęciami okazały się brakujące rekordy SRV
_jabber._tcp.karbownicki.com SRV 3600 5 0 5269 xmpp-server.l.google.com
_xmpp-server._tcp.karbownicki.com SRV 3600 5 0 5269 xmpp-server.l.google.com
Hura, działa. No prawie.. A właściwie nie bardzo. Tzn. sam jabber działa świetnie, łączy się z innymi serwerami itd. Nie mogę jednak dodać transportów. Po rejestracji w transporcie nie dodaje się one do listy, no ale nic, zawsze można dodać ręcznie. Po rozłączeniu i ponownym połączeniu również działa. No prawie.. A właściwie nie bardzo. Transport jest bo jest, ale już sam nas nie zaloguje do innej sieci. Trzeba go popychać ręcznie. Najdziwniejsze jest jednak to, że po wyłączeniu komunikatora i ponownym uruchomieniu po transportach już nie ma śladu (sprawdzone na Gajim-ie i Psi). A najlepsze jest to, po wywaleniu transportów na starym googlowym koncie i próbie ponownego dodania dzieje się to samo, chociaż wszystko działało do tej pory dobrze.
Ktoś ma jakiś pomysł ?
Na początku byłem święcie przekonany, że zastanę możliwość podpięcia dotychczasowych usług pod moją domenę. Niestety byłem w błędzie. Nowo założony użytkownik dostaje „nowe” usługi. Nie ma nawet możliwości importowania wiadomości ze starego konta gmailowego, bo jak wiadomo ta opcja jest dopiero w fazie testów i dostępna jest dla losowo wybranych użytkowników. Np. na starym gmailu mam opcję pobierania wiadomości z innych kont, ale pod domeną już nie :) Jedyne więc co mi pozostaje to włączyć forwardowanie i czekać na możliwość importu. Kolejna ciekawostka jest taka, że pojemność konta pocztowego jest stała i wynosi 2GB. Nie zwiększa się codziennie o kilka MB jak to ma miejsce w przypadku zwyczajnych skrzynek gmaila.
Ilość usług dostępnych w domenie jest mocno okrojona. Dokładniej to jest to tylko:
Przy czym np. strona startowa też jest mocno okrojona. Co prawda mamy do dyspozycji prosty edytorek to stworzenia i pokolorowania strony głównej…
...ale np ilość gadżetów do wstawienia z listy:
to 5-6 elementów w każdej kategorii z czego jedyne używalne to kalendarz, podgląd poczty i lista TODO.
Skromność usług wynagrodzić może nam jednak wstawienie własnego logo ;)
Google Apps for Your Domain – no cóż, nie ma rzeczy idealnych. Trzeba się po prostu cieszyć, że jest za darmo i podstawową funkcjonalność oferuje.