strona główna

Archive for March, 2008

Oiola.com - technicznie

Monday, March 31st, 2008

W zeszłym tygodniu opublikowaliśmy kolejny serwis pod szyldem BLF:
oiola.com. O funkcjonalności można poczytać na blogu
binarylifeforms.com
, tutaj – jak poprzednio – opowiem o stronie
technicznej.

Jak już wspominałem, krótkie projekty pozwalają na szybkie i pełne
przetestowanie nowych narzędzi. Tym razem padło na:

  • Django w wersji newforms-admin,
  • deseb,
  • vobject,

oprócz tego po raz kolejny wykorzystałem BeautifulSoup, feedparser i
Instant Django, ale o nich pisałem już wcześniej, więc teraz ograniczę
się do stwierdzenia że potwierdziły swoją przydatność.

A teraz szczegółowo.

newforms-admin

Newforms to biblioteka Django służąca do możliwie wygodnego tworzenia
i obsługi formularzy – generowania HTML, czyszczenia i sprawdzania
poprawności danych.

Newformsy jednak są zarąbiste

Newforms-admin to rozwojowa wersja Django, w której interfejs
administracyjny zmieniono tak, żeby korzystać z newforms zamiast
wcześniejszej biblioteki (nazywanej teraz oldforms).

Chciałbym uzupełnić moją wczorajszą wypowiedź...

W skrócie, jest świetnie. Django słynie z dopracowanego i wygodnego
panelu administracyjno-edytorskiego, który jednak był dość sztywny:
trudno było go rozbudować w sposób chociaż trochę wychodzący poza
bazowy schemat "lista aplikacji, lista obiektów, formularz zmiany
obiektu." Wersja newforms-admin pozwala bardzo łatwo tworzyć nowe
strony, czy całe moduły funkcjonalne zintegrowane z resztą panelu. Do
tego stopnia, że w oiola.com organizatorzy imprez korzystają właśnie z
tego interfejsu, nieco rozbudowanego, ale bez żadnych zmian w kodzie
Django. Rezultatem jest ładny, sensownie wyglądający panel obsługi
wydarzeń uzyskany bardzo niewielkim kosztem (dla porównania – w
webcomicspot.com interfejs edycji komiksów pochłonął mniej więcej 50%
czasu).

To jest spory temat i planuję przygotować obszerniejszy tekst lub
prezentację na temat newforms i gałęzi newforms-admin, więc mam
prośbę: jeśli macie jakieś pytania lub sugestie (na co zwrócić uwagę,
na jakich przykładach warto to zademonstrować (byle nie kolejny
blog-w-20-minut)), napiszcie o nich w komentarzach lub prześlijcie na
mój adres email.

deseb

Django Experimental Schema Evolution Branch, wbrew temu co można
wyczytać z nazwy, nie jest gałęzią, ale biblioteką która
nieprzyzwoicie upraszcza zmiany bazy danych podczas prac nad
projektem. Podczas prac nad oiola.com najczęstszą zmianą bazy było
dodanie kolejnego pola do już istniejącego modelu, co wymaga
odpowiednio skonstruowanych poleceń "ALTER TABLE". We wcześniejszych
projektach wykonywałem te polecenia ręcznie albo tworzyłem własne
narzędzia do stopniowej ewolucji bazy (co sprawdza się szczególnie
dobrze, jeśli nad projektem pracuje kilku programistów), ale DESEB
sprowadza cały problem do wydania polecenia "./manage.py evolvedb".

Pisałem już o uproszczeniu współpracy w zespole dzięki Instant Django;
po dodaniu do projektu deseb wystarcza dopisać do skryptu startowego:

python manage.py evolvedb –noinput –dont-save"

I już, od tego momentu przestały być potrzebne maile "pojawiły się
nowe pola, usuń plik z bazą danych."

vobject

Ważnym drobiazgiem w oiola.com jest możliwość łatwego dodania
informacji o wydarzeniu do kalendarza. Odpowiednim standardem w sieci
jest iCalendar, a biblioteka vobject służy właśnie do obsługi plików w tym formacie,
dzięki czemu bardzo krótki kod wzorowany na tym:

Exposing calendar events using iCalendar in Django

Pozwala na udostępnienie w sieci informacji o wydarzeniach z taką samą
łatwością, jak RSS:

class EventCalendarFeed(ICalendarFeed):

    def items(self, id, ext_id=None):
        return [get_event_or_404(id, ext_id)]

    def item_uid(self, item):
        return str(item.id)

    def item_start(self, item):
        return item.start.replace(tzinfo=tzlocal())

    def item_end(self, item):
        return item.end

    def item_summary(self, item):
        return str(item)

    def item_uri(self, item):
        return item.get_absolute_url()

Odpowiedni fragment urls.py:

    url(r'^e/(?P[^-/]+)/ical/$', EventCalendarFeed()),

podsumowanie

Po raz kolejny poświęciłem więcej czasu na szukanie i uczenie się
istniejących bibliotek niż na pisanie kodu, to się po prostu opłaca.
Najwięcej chyba pochłonęło poznawanie newforms-admin – to wersja
eksperymentalna, dokumentacja nie jest kompletna, na szczęście Python
ma bardzo przejrzystą składnię :)

Slajdy: Greasemonkey na bootstrapie 8.03

Monday, March 17th, 2008

Na szybko: bootstrap 8.03 się odbył, poniżej slajdy z mojej prezentacji.

PS. czy tylko ja mam problemy z normalnym (bulk) uploadem na SlideShare? Firefox pod Linuksem, albo "upload failed", albo wywałka przeglądarki. Szczęśliwie jest też dostępna wersja tradycyjna formularza.

Bootstrap 8.03

Friday, March 7th, 2008

Już za tydzień kolejny bootstrap. tym razem prawie tradycyjnie: jedna prezentacja biznesowa (LiveChat Software S.A.) i jedna techniczna (moja, o Greasemonkey). Szczegóły tutaj.

A w ramach eksperymentu: jeśli masz pomysł, o którym chciał(a)byś porozmawiać w szerszym gronie, to oferujemy rzutnik, 5 minut czasu, publiczność i szansę na zdobycie w krótkim czasie opinii dużej grupy praktyków. Warto :)