szarak@jabster.pl


Zapraszam na wykład o Django

Wpis na 1. poziomie, wysłany 15 marca 2009 o 18:33:56

Zapraszam na mój wykład na temat podstaw Django - pythonowego frameworka webowego. Już w najbliższą środę, 18 marca 2009 w auli A0 WIMiI, PCz.

Zapraszamy na wykład poświęcony tworzeniu dynamicznych aplikacji webowych w Pythonowym frameworku Django. Spotkanie będzie wprowadzeniem do programowania w Django, na którym zobaczymy jak małym nakładem pracy stworzyć schludne, wydajne i bezpieczne aplikacje. Wstęp wolny. Znajomość Pythona mile widziana, lecz nie jest wymagana. Zapraszamy ;)

Dodaj komentarz | *nix CzLUG django Internet Progamowanie Różne |

MPD i Sonata w (k)ubuntu

Wpis na 1. poziomie, wysłany 17 stycznia 2009 o 17:05:03

Używałem już wielu odtwarzaczy muzyki, jednak zawsze było jakieś "ale". Ostatnio najbardziej przeszkadzała mi kiepska praca z dużą kolekcją. Sporo softu po prostu wywalało się już przy indeksowaniu. Po przejściu na kde4 zainteresowałem się amarokiem. Radził sobie dobrze z indeksowaniem mojej kolekcji, ale niestety mam ją na dysku przenośnym, a ten jest montowany czasem w różnych katalogach. Musiałem bardzo często tworzyć kolekcję od nowa, a to trwa zbyt długo. Po dodaniu katalogów ręcznie, z panelu "Pliki", Amarok2 często nie wczytywał tagów id3, nie wczytywał w ogóle okładek itd...

Coś podkusiło mnie, żeby wypróbować MPD. Zainstalowałem serwer mpd. Konfiguracja prosta, najważniejszą zmianą było ustalenie katalogu z kolekcją. Dodałem sobie w nim jeszcze tylko symlinki do najczęstszych folderów pod którymi montuję swój dysk przenośny. Przejrzałem dostępne klienty i wybór padł na Sonatę.

Zalet używania mpd wymieniać nie będę, wystarczy pogooglać. Powiem tylko, że błyskawicznie skanuje kolekcję, ściąga okładki praktycznie do wszystkiego bez naszej ingerencji (aczkolwiek można w tym pomóc) i poprawnie wyświetla pliki bez poprawnych tagów id3 (dlaczego tak wiele osób zakłada, że wszystkim innym chce się uzupełniać tagi do swoich plików?). Po prostu nirvana, wszystko szybko, prosto, bez zjadania ogromnych ilości zasobów.

Jedyne co nie działało, to wyszukiwanie tekstów utworów. Ogólnie to jestem leniwy i nie chce mi się naprawiać mało istotnych rzeczy, ale aż tak leniwy, żeby nie sprawdzić w google, to nie jestem. Łatwo znalazłem wątek na forach ubuntu na ten temat. Ludziska winią w nim niekompatybilną wersję ZSI.

W skrócie mówiąc, wrzuciłem ręcznie nową wersję - ZSI-2.1_a1-py2.5.egg - do "/usr/local/lib/python2.5/site-packages/". Jedyną zmianą w stosunku do wątku do którego linkowałem wcześniej, jest to, że tego .egg'a trzeba uzipować - to zip, nie tar. Po restarcie sonaty teksty są na swoim miejscu. P.S.:

Teksty pobierane są z lyricwiki.org, pomóżmy rozwijać ten serwis ;)

1 komentarz | *nix Internet Różne |

Wygodna edycja w vim plików zaszyfrowanych gnupg

Wpis na 1. poziomie, wysłany 01 maja 2008 o 02:00:58

Uwaga. Nudny wpis o pluginie do vim.

Gdy mamy kilka plików od których wymagamy minimum dyskrecji dobrze jest je zaszyfrować. Ja uznałem, że do szyfrowania takiego pojedynczego pliku idealnie nadaje się GnuPG, szczególnie, że używam go codziennie np. do podpisywania poczty etc..

Najprostszy screnariusz - odpowiednio szyfrowanie i odszyfrowywanie, oba w wersji długiej i krótkiej: gpg --encrypt --recipient 'Imię Nazwisko' plik.txt
gpg -e -r imie plik.txt
gpg --decrypt plik.txt
gpg -d plik.txt

Jednak troszkę to mało wygodne. Tyle pisania dla szybiego zerknięcia w plik. Długo rozwiązaniem dla mnie był kgpg, który podpasował mi funkcjonajnością i wyglądem. kgpg jest menedżerem kluczy gnupg z wbudowanym edytorem. Tym właśnie edytorem mogłem wygodnie edytować szyfrowane pliki (a raczej szybko, klikając, (od)szyfrować ).

Jeszcze wygodniej byłoby używać do tego Swojego Ulubionego Edytora - Vim'a.
Gnupg - plugin do vim'a = rozwiązanie ;)

Procedura instalacji skomplikowana niesamowicie:

  • Pobierz pliczek gnupg.vim
  • Przenies do katalogu z pluginami vim'a (u mnie /usr/share/vim/vim71/plugin/ lub $HOME/.vim/plugin )
Od teraz gdy otworzymy plik zaszyfrowany gnupg/pgp (*.gpg, *.asc, *.pgp) (g)vim po prostu zapyta o hasło do klucza.

Plusy:

  • Nie trzeba wywoływać zewnętrznych narzędzi
  • Plik jest ponownie szyfrowany po każdym zapisie i przy wyjściu z edytora - automatycznie

P.S.: Różne rzeczy wpadają mi w ręcę, które chciałbym opisać, ale jakoś tak, ehm, brakuje chęci :) Zostają krótkie, proste wpisy i jakoś tak się składa, że są to notatki z vima... czy to jest nudne? :P

1 komentarz | *nix Różne |

Własny filrt w szablonie Django

Wpis na 1. poziomie, wysłany 01 kwietnia 2008 o 01:02:10

W szablonach Django dostępny jest spory zestaw filtrów. Używa się ich prosto:

{{ obiekt|filrt }} {{ obiekt|filtr:"parametr" }}

Dostępne filtry pokrywają większość popularnych sytuacji, ale może czasem przydać się zrobienie jakiegoś własnego.



Wejdź do katalogu swojej aplikacji w której chcesz używać filtru. Stwórz katalog templatetags, a w nim pliki init.py i twoja_nazwa.py.

 
mkdir templatetags
touch templatetags/__init__.py
touch templatetags/TWOJANAZWA.py
 

w pliku TWOJANAZWA.py:

 
from django import template
register = template.Library()
 
@register.filter("nazwa_naszego_filtra")
def nazwa_naszego_filtra(value):
    #tutaj jakies operacje.
    return cośtam
 

Jak pisałem wcześniej, filtr może przyjmować parametr:

 
def nazwa_naszego_filtra(value, argument):
    #tutaj jakies operacje.
    return value + argument
 

Przed użyciem naszego filtra w szablonie ładujemy go za pomocą:
{% load nazwa_filtra %}

i używamy:

{{ obiekt|filtr:"argument" }}


Mam nadzieję, że zbytnio nie namieszałem ;)

Dodaj komentarz | *nix django Internet Progamowanie Różne Techblog |

Vim / Gvim i kopiowanie

Wpis na 0. poziomie, wysłany 23 marca 2008 o 22:30:13

Z notatnika użytkownika vim’a… ;)

Kopiowanie do vima jest proste. Jeśli pracujemy w terminalu kopiujemy tak, jakbyśmy wklejali polecenie itp. Środkowy przycisk myszki, albo shift+insert. Warto zapamiętać, że gdy np. edytujemy kod i vim robi automatycznie wcięcia, po wklejeniu dostaniemy kod z wcięciami do wcięć – czyli papke nieczytelnego spaghetti. Pozbyć się problemu możemy uprzednio wpisując:
:set paste
Teraz wszystko powinno się ładnie wkleić.

Ale co z kopiowaniem i wklejaniem w drugą stronę? Skopiować z vim nie jest trudno. Gdy pracujemy w terminalu po prostu zaznaczamy tekst i już mamy go w schowku. Gorzej z Gvim. Samo zaznaczanie nie wystarcza.

Postępujemy następująco: Po wybraniu tekstu w trybie wizualnym (za pomocą v i kursory, shift+v i kursory, bądź zaznaczenie myszką wprowadzamy:
"+y
co skopiuje zaznaczenie do schowka systemowego. Finito.

Ot niby głupie, proste i dawno powinienem to znać, ale jakoś mnie ta wiedza ominęła (czyt. ja ominąłem spory kawał podręcznika).

3 komentarze | *nix Progamowanie Różne Techblog |

Komputer zdalnie sterowany

Wpis na 0. poziomie, wysłany 20 marca 2008 o 23:54:06

Dzisiaj znów o rzeczach związanych z bluetooth’owymi pierdołami.


Anyremote: oprogramowanie do sterowania komputerem przez telefon komórkowy za pomocą bluetooth. Opcja bluetooth nie jest jedyną, projekt chwali się możliwościa sterowania przez irdę, wifi, przez internet – oczywiscie tez przez aplikację w java, jeśli komputer jest widoczny z zewnątrz, oraz przez interfejs web…

Dostępne są graficzne nakładki, ganyremote i kanyremote które mocno ułatwiają sprawę – w końcu jesteśmy leniwi – przecież nie chce nam się nawet sięgnąć do komputera… ;p

Co w nim fajnego czego inne programy nie mają: z paczuszką, którą zainstalowałem (nie ma go w repo Debiana, ani Ubuntu, lecz są ładne paczuszki na stronie projektu) było już sporo napisanych configów dla różnego oprogramowania. Z tego co widzę, program nie wyświetla configów (pluginów? :P) do softu którego nie mamy zainstalowanego. Pluginy/configi są całkiem proste i lektura tych przykładowych pozwala na napisanie swojego bez sięgania po dokumentację, lecz prawdopodobnie to nie będzie konieczne.


Możliwości tego oprogramowania są całkiem spore. Po stronie komputera możliwa jest każda akcja, jeśli tylko da się ją przedstawić za pomocą polecenia systemowego, lub naciśnięcia klawisza ;) W konfigu możemy zdefiniować sobie ikonki jakie będą przypisane poszczególnym klawiszom w aplikacji javowej (postaram się pokazać to na zdjęciach). W tym samym miejscu definiujemy wszelkie akcje klawiszy.


ganyremote

Ok, mamy już skonfigurowany soft po stronie komputera (chociaż prawdopodobnie dołączone z nim konfigi będą działać ładnie). Teraz komórka. Wrzucamy plik .jar z aplikacją na telefon. Ja zainstalowałem plik .deb z odpowiednimi pliczkami (takie troche dziwne … pakiet z paroma plikami i to nawet nie na kompa… ;p).


ganyremote


Teraz, mając uprzednio włączony anyremote (uruchomiliśmy ganyremote) uruchamiamy aplikację w JAVA, wybieramy urządzenie z którym mamy się połączyć i dalejmy connect. Ach, byłbym zapomniał. Zakładamy, że komórka z komputerem jest już sparowana (innym programem). Powinien wyświetlić się nam ekran z niebieskimi, pustymi przyciskami odzwierciedlającymi odpowiednio klawisze [123456789*0#].


ganyremote

Jeśli widzisz wyjątek wyrzucony przez javę pod przyciskami, nie przejmuj się jeszcze :). Teraz w aplikacji graficzne odpalamy jeden z konfigów (zaznaczamy i wybieramy „run”). Po wczytaniu w naszej komórce powinny pojawić się ikonki klawiszy wyświetlanych na ekraniku (chyba, że ten konfig nie ma ich ustawionych, wtedy będzie ikonka domyślna). Obsługa jest prosta.


ganyremote

Wciskasz odpowiednio klawisze komórki, bądź wybierasz je joystick’iem na wirtualnej klawiaturze. Wszystko powinno działać szybko i bezboleśnie.

Ciekawą funkcją, która bije na głowe typowe piloty, jest możliwość nie tylko np. oglądania tytułu aktualnie odtwarzanego utworu na wyświetlaczu komórki, ale także np. wybranie filmu w telefonie!

Taka obsługa jest dobra nie tylko dla leniwców/do kina domowego. Można przecież podłączyć pod to dowolne aplikacje. Ja np. ciesze się, że na następnej imprezie będę mógł zmieniać i wybierać piosenki, ściszać itp. gdy komputer będzie zablokowany przed niepowołanym, pijanym dostępem ;) ba, mogę być nawet w innym pokoju, pijąc piwo u sąsiadów kontrolować muzykę :)

ganyremote
ganyremote

Dla projektu wbrew temu co wcześniej myślałem jest sporo alternatyw. Wymienię tylko krótko jedną z nich: Bluepad. Projekt ładne zobrazowany na ich stronie, więc nie będę się już rozpisywał. Z różnic: w bluepad możemy wybierać akcje/klawisze wykonywane na komputerze w menu aplikacji na telefonie! Niestety miałem spore problemy ze stabilnościa tej aplikacji. Dodatkowo na korzyść anyremote przekonała mnie możliwość szybkiej zmiany konfiguracji pod różne aplikacje, jakiej w bluepad nie było.

1 komentarz | *nix Gadżet gnome Techblog |

Regex w Nautilus

Wpis na 1. poziomie, wysłany 06 stycznia 2008 o 20:45:23

Czasem zachodzi potrzeba wybrania jakichś konkretnych plików w menedżerze plików. O ile gdy korzystam z ls/cp/mv/itd. nie ma żadnego problemu, to przy narzędziach graficznych jest czasem niezbyt oczywiste jak podejść do rozwiązania. Klikania oddzielnie w każdy plik jest zabawne tylko poniżej 10ciu plików w katalogu :D


Dzisiaj segregowałem kilka fotek i obracałem je przed publikacją. Skrypt gnomowo/nautilusowy nautilus-image-converter dodał mi suffix do każdej przerobionej kopii pliku. Gdyby to był prefix nie byłoby problemu, bo po prostu przekręcone fotki byłyby ułożone jedna po drugiej, ale niestety są rozsiane po całym katalogu.
Na szczęście Nautilus ma możliwość zaznaczania wyrażeniem regularnym dostępną pod ctrl+s lub z menu Modyfikuj- wybierz wyrażenie. Wpisujemy tam nasze wyrażenie (np. *resized*) i gotowe.


Często zapominałem o takiej możliwości w Nautilusie, a cenie sobie takie właśnie menedżery plików. Pozwalają mi na łatwą pracę z plikami gdy istotna dla mnie jest ich zawartość, a położenie i nazwa mają w sobie wiele przypadku.

Dodaj komentarz | *nix gnome |

Python z matplotlib jako narzędzie naukowe – czyli po co utrudniać sobie życie?

Wpis na 1. poziomie, wysłany 22 listopada 2007 o 14:38:25

Jeśli nie interesuje Cie tło sprawy, pomiń następne dwa akapity :)
Stanąłem przed następującym faktem: muszę napisać program zajmujący się prostymi obliczeniami statystycznymi. Wyznaczanie trendów itp. itd. Musze to zrobić „na wczoraj” :)


Problemy: nie wiedziałem, że w ogóle będę się zajmował taką tematyką. Przedmiot na którym to piszę, miał być czymś zupełnie innym – miał skupiać się na programowaniu obiektowym, zarządzaniem projektem i planowaniem. Jak się okazało, w trakcie semestru zmienił mi się prowadzący, na panią, która o programowaniu pojęcie ma średnie. Owszem, teorii trochę, ale nie interesują jej bebechy naszych aplikacji, możemy sobie pisać w czym chcemy i jak chcemy. Skupić się trzeba jednak na rozwiązaniu problemu statystycznego (wcześniej każdy pisał co innego – od gier po aplikacje użytkowe, symulatory…). Olałem w ogóle sprawę ale wreszcie trzeba było do tego siąść. Trzeba było działać szybko, więc wymyśliłem sobie, że zamiast bawić się w c++ i qt (z czego to pierwsze jest jak dla mnie ok, to drugie mniej), to zrobie aplikacje w czymś całkiem nowym, może łatwiejszym.


Wybór padł na język Python. Dlaczego? Bo denerwują mnie aplikacje w nim pisane (jakoś zasobożerne mi się wydają, może trochę ociężałe), ale jednak z jakiegoś powodu sporo ludzi ciągle w tym pisze. Czyli w skrócie ciekawość.


Co się okazuje? W parę godzin nauczyłem się tyle, że byłem w stanie napisać program parsujący plik xml i wyświetlający dane w postaci wykresu z interfejsem w gtk+ – z czego połowe tego czasu spędziłem na szukaniu beznadziejnie głupiego błedu, o czym później.


Co do języka: jest dość prosty przy pierwszym kontakcie. Pisze się szybko, łatwo a co najważniejsze przyjemnie. Obiektowością przesiąknięty całkowicie, a korzysta się z niej wręcz intuicyjnie. Trochę inna składnia niż mi znana, ale łatwa do przyswojenia. Wcięcia w kodzie zamiast klamer … uh, z tym ciężko, ale prawdę mówiąc teraz na mnie wymusza to czystość w kodzie i już nie narzekam. A do tego łatwo dostępna pomoc/podręczniki, np. Dive into Python.


Zachęca również spora ilość bibliotek, które prawdopodobnie pokryją 70% zadań, które przed Tobą czekają. Do parsowania xml wybrałem minidom. Z jego pomocą i tutorialem zczytanie pliku zajęło chwilkę i zajmuje mniej niż 15 linii kodu. Interfejs graficzny stworzyłem za pomocą pygtk. Jego obsługa jest ładnie opisana w tutorialach, jak znasz obsługe sygnałów z jakiegoś innego języka/biblioteki to załapiesz w mig. No to teraz przyszedł czas na wizualizację wyników, gdzie z pomocą przyszła biblioteka matplotlib.


Matplotlib w Pythonie obsługiwany jest przez moduł „pylab.py”. Narysowanie prostego wykresu sprowadza się np. do:
from pylab import *
plot([1,2,3,4,5,4,3,2,1])
show()

Co oznacza załadowanie modułu pylab (i wczytanie dostępnych funkcji do standardowej przestrzeni nazw – tak sobie to wytłumaczyłem, przekładając to na rozumowanie z c++. Można jeszcze „zainkludować” moduł poprzez import pylab, ale wtedy z dostępnych funkcji trzeba korzystać poprzez pylab.show() itp.. Pythonowców z góry przepraszam za niefachowość i nieścisłość. Wszystkiego uczyłem się na wariata, by jak najszybciej pokazać wynik pracy, a nie poprawnie zrozumieć język ;p). Druga linia kreśli wykres. Wygląd domyślny, oś x domyślna (kolejne liczby naturalne), wartości na osi y podane są w nawiasie w postaci tablicy – oznacza się ją przez nawiasy kwadratowe. Show() wyświetli nam wykres na ekranie w postaci okna gtk z układem współrzędnych dostosowanym do danych, możliwością powiększania i przesuwania wykresu, historią zmian widoku, a nawet zapisem do pliku. Wszystko w 3 liniach. Szczegółów nie piszę, wszystko jest ładnie opisane na stronie matplotliba, którą podałem. Po polsku 3 słowa na ten temat znajdziecie np.tutaj.

Nie powiem, pierwszy kontakt z pythonem i matplotlibem bardzo pozytywny. Pani prowadząca cieszyła się, że widzi ładny wykres, ja się cieszyłem, bo poświęciłem temu minimalną ilość czasu i poznałem coś nowego. Mam nadzieje, że moja przyjaźn z tym językiem szybko nie zniknie.

2 komentarze | *nix gnome Progamowanie Różne |