Zajęcia

Termin:
piątki, godz. 12.15-13.45.
Miejsce:
laboratorium 2044.

Tablica ogłoszeń

Na tej stronie znajdziecie ogłoszenia (głównie natury organizacyjnej), materiały do laboratoriów oraz linki do różnych innych stron związanych z zajęciami.

9.05.2008 - sprawy zaliczeniowe

Gwoli wyjaśnienia, ze spraw starych: projekt jest na ocenę; oddając go po terminie można dostać maks. 4; za każde niezaliczone małe zadanie traci się 0.5 oceny, przy czym można mieć niezaliczone tylko dwa.

Ze spraw nowych: jako, że w projekcie ostatecznie nie będziecie używać własnego logowania tylko django.contrib.auth, dlatego zadanie 5 ze scenariusza o Django jest opcjonalne. Wykonanie go poprawnie to 0.5 oceny w górę (do maks. 5! na koniec).

24.04.2008 - wirtualny lab

W dniach 3.05-24.05 będę uprawiał risercz w hameryce. W związku z tym zajęcia w tym okresie (8/15/22.05) będą wirtualne. Oznacza to, że lab fizycznie nie będzie się odbywał natomiast będe umieszczał (bardziej obfite niż zwykle) informacje o materiale do przerobienia na zajęciach. Polityka oddawania zadań pozostaje taka jak wcześniej (dot. zadania z Django).

28.03.2008 - zadania z HTML i CSS

Przepraszam, ale nie zdążyłem sprawdzić wczoraj i będą sprawdzone dopiero 6.04 - cierpliwości.

26.03.2008 - zastępstwo

W związku z tym, że nie będzie mnie za tydzień będziecie mieli zastępstwo z Aleksandrem Jankowskim. Zadanie z jutrzejszego labu należy przesłać mi do poniedziałku 6.04.

27.02.2008 - oddawanie zadań z labów

Z ustaleń odgórnych: po każdych fizycznie odbytych labach prześlijcie prowadzącemu informację o tym, gdzie stoi rozwiązanie zadania. Macie prawo dwa razy tego nie zrobić przed kolejnymi zajęciami. Reguła ta obowiązuje od dnia dzisiejszego. Termin oddania wiki (oraz CMSa) to następne laby.

Laboratoria

Skrótowe scenariusze oraz materiały z laboratoriów będą się pojawiać wraz z kolejnymi zajęciami.

Wiki (lab. 1, 20.02)

Cel

Celem jest zainstalowanie własnego wiki na swoim koncie na students.

Wymogi wstępne

Wpierw upewnij się, że:

  1. wiesz jak działają prawa dostępu w Linux'ie,
  2. posiadasz katalog public_html w swoim katalogu domowym
    (opcjonalnie: wiesz jak kontrolować zachowanie serwera w poszczególnych katalogach przy pomocy plików .htaccess),
  3. wiesz z grubsza co to jest CGI,
  4. wiesz co to jest URL i czym się różni od ścieżki katalogowej.

Zadanie

Scenariusz oraz szczegółowe instrukcje do zadania znajdziesz na wiki labów.

CMS (lab. 2, 27.02)

Cel

Tym razem na swoim koncie na students chcemy zainstalować system zarządzania treścią (CMS).

Wymogi wstępne

Na końcu przyda nam się zainstalowane na poprzednich labach wiki.

Zadanie

Scenariusz oraz szczegółowe instrukcje do zadania są dostępne na wiki labów.

HTML i CSS (lab. 3/4, 6/13.03)

Cel

Rozpoczeniemy pracę nad dużym zadaniem zaliczeniowym poprzez stworzenie projektu interfejsu w postaci kilku statycznych stron (HTML) z arkuszami stylów (CSS).

Wymogi wstępne

Znajomość podstaw HTML i CSS, np. z wykładu, czy z jednej z referencji lub kursów podlinkowanych w scenariuszu (część "Być może przydatne linki").

Zadanie

Scenariusz z wymaganiami odnośnie stron i arkuszy dostępne są na wiki labów.

Uwaga: ze względu na to, że jest to zadanie na dwa laby to ostateczny termin oddania zadania to lab 5. Na labie 4-tym obejrzę dotychczasowe wyniki pracy (co najmniej strona główna + układ, rozwijane menu i wersja do druku).

Wskazówki i dyskusja

Tu znajdziecie przykładowe rozwiązanie samego układu strony, zgodnie z wymogami z zadania oraz kilkoma dodatkowymi, które ja (scrollbar na brzegu przeglądarki i statyczny układ) oraz część z Was (wyśrodkowana strona) chciała mieć spełnione. CSS jest obficie komentowany. Polecam ściągnięcie i pobawienie się (obecnie odkomentowane są właściwości do debugowania np. przezroczystość tła).

Wykonanie statycznego layoutu w praktyce nie jest najlepszym rozwiązaniem, zwłaszcza jeśli chodzi o czas i wygodę wykonania (i szczerze mówiąc nie polecam). Ma jednak dużą zaletę akademicką odnośnie nauki pozycjonowania. Rozwiązania z pływającymi panelami też będą uznawane za poprawne.

Wyśrodkowanie strony bez ustalonej szerokości (czyli z ustaloną szerokością marginesu) też jest raczej ćwiczeniem akademickim i w przypadku tego zadania służy jedynie spełnieniu jego wymogów odnośnie skalowania panelu głównego do pewnej minimalnej szerokości.

JavaScript (lab. 5, 20.03)

Cel

Dodamy pierwsze elementy logiki do tworzonego projektu w postaci prostego, "ręcznego" mechanizmu bezpiecznego zakładania konta i logowania.

Wymogi wstępne

Zadanie

Scenariusz oraz szczegółowe instrukcje do zadania dostępne są na wiki labów.

AJAX (lab. 6, 27.03)

Cel

Przerobimy mechanizm logowania tak aby używał AJAX. Do tego dodamy ekstra info wyświetlane na czas przetwarzania żądania logowania.

Wymogi wstępne

Zadanie

Serię zadań z instrukcjami znajdziecie na wiki labów.

Biblioteki JavaScript (lab. 7, 3.04)

Zastępstwo z Aleksandrem Jankowskim

Cel

Na czas logowania wyświetlane będą całkowicie zbędne i radosne wodotryski.

Wymogi wstępne

Zaimplementowane logowanie z użyciem AJAX z poprzedniego labu.

Zadanie

Pomysły na wodotryski oraz linki do bibliotek JavaScript (prototype, jQuery etc.) znajdziecie na wiki labów.

Python (lab. 8, 17.04)

Cel

Prosty pająk internetowy napisany w Pythonie.

Wymogi wstępne

Podstawy Pythona (np. crash course).

Zadanie

Standardowo znajdziecie je na wiki labów.

Uwagi wielkiej wagi

  1. Superfajny shell (kolorki, tab-uzupełnienie, szybki help przez ?): ipython.
  2. Referencje (język i biblioteka) znajdziecie na stronie z dokumentacją Pythona.
  3. Do otwierania URLi posłuży biblioteka urlib2, która jest zainstalowana na students. Obsługa:
    import urllib2
    # ...
    url = urllib2.urlopen("http://thedailywtf.com/")
    # Uwaga: jako argument prawowity URL, tzn. z nazwą protokołu "http://..."
    Po konkret: from urllib2 import urlopen - wtedy można używać bez prefiksu urllib2..
  4. Do parsowania HTML'a przyda się biblioteka Beautiful Soup, koniecznie w wersji 3.0.7a. Żeby zainstalować lokalnie: python setup.py install --home path_to_home. Używa się jakoś tak:
    # ...
    from BeautifulSoup import BeautifulSoup
    soup = BeautifulSoup(''.join(url.readlines()))
    soup.body
    Więcej w dokumentacji.
  5. Do podawania URLi zamiast standardowego wejścia można użyć pliku w formacie 1 URL/linia. Czytanie z pliku:
    f = open(r'filename', 'r') # r'...' - raw string (na backslashe i te sprawy)
    for line in f.readline():
        #....
    f.close()
    Standardowe wejście i tablica z argumentami z linii poleceń dostępne są poprzez bibliotekę systemową sys
    #...
    import sys
    # ...
    sys.argv
    # ...
    line = sys.stdin.readline()
    while line:
        # ...
        line = sys.stdin.readline()
    Opcjonalnie dla prosów tudzież pedantów: getopt.
  6. Wykonywanie skryptów pythonowych:
    #!/usr/bin/env python
    # ...
    if __name__ == "__main__": # moduł został uruchomiony do wykonania a nie importowany
        # kod do wykonania np. main()
    i z linii poleceń python myapp.py lub odpowiednio zmienić uprawnienia i ./myapp.py.
  7. Do obsługi polskich znaków zapisanych w UTF-8, na początku pliku może się przydać info o jego kodowaniu (za info o interpreterze):
    # -*- coding: utf-8 -*-
  8. Jeden wątek może obsługiwać jednego URLa (zob. krótki tutorial do wielowątkowości w Pythonie). Przy czym, jak słusznie zauważył Pan Tomasz Kaftal, limit na liczbę wątków jest na tyle mały (różnie, zazwyczaj ~1000), że przy takim rozwiązaniu może łatwo zostać przekroczony. Rozdzielanie zadań realizuje wzorzec Thread Pool. Można skorzystać z jego gotowej implementacji w Pythonie.
    Uwaga: wątki Pythonowe nie działają prawdziwie równolegle. Dla zainteresowanych, więcej na ten temat można przeczytać np. w tym zgrabnym artykule.
  9. Wygląda na to, że nie da się uniknąć monitorowania czasu podczas wykonywania kolejnych żądań (zob. poprzednią uwagę). Z tego powodu traktujemy jednominutowy limit czasu ściśle.

Django (lab. 9/10, 24.04/15.05)

Cel

Dorabiamy mięso do wcześniej przygotowanych statycznych stron projektu.

Wymogi wstępne

Zadanie

Ogólnikowy opis kroków do wykonania znajdziecie na wiki labów.

Wirtualny nauczyciel

Na pierwszym (jeszcze nie wirtualnym labie) wykonaliśmy zadania 0-2 ze scenariusza, co oznacza, że powinieneś być zaznajomiony z:

  1. projektem i aplikacjami (zob. 1 cz. tutoriala),
  2. modelem danych,
  3. interfejsem administracyjnym.

W ramach wirtualnego laba z 15.05 przeczytaj o kolejnych klockach aplikacji WWW tworzonej z pomocą Django, tzn o:

  1. Widokach Django, czyli funkcjach generujących dynamicznie strony w zależności od wartości parametrów, którymi poza żądaniem (zwykłego HTTP lub np. typu POST) mogą też być wartości przechwycone przez dyspozytor URLi (jak np. bazo-danowy identyfikator obiektu).
  2. Szablonach, których widoki używają do generowania wynikowych stron HTML. Szablony (poza HTML'em, CSSem i JSem etc.) to prosty język tagów i zmiennych, plus niesamowicie wygodny mechanizm dziedziczenia i includowania, pozwalający unikać redundancji (i późniejszych męczących poprawek w wielu miejscach).

Tak doedukowany wykonaj dla swojej aktualnie tworzonej aplikacji w ramach projektu Django zadania 3 i 4 ze scenariusza. Uwzględnij co najmniej jeden formularz. Następnie opcjonalnie wykonaj trudniejsze zadanie 5-te (będzie ono wymagało ogarnięcia wcześniej wymienionych elementów Django) - być może przydatne linki znajdziesz w treści. Jeżeli nie będziesz robił zad. 5 to do uwierzytelniania użytkowników użyj django.contrib.auth.

Uzupełnij projekt tak aby poza logowaniem i rejestracją działała jeszcze jakaś funkcjonalność (galeria lub blog). Spakowany projekt Django (paczka .zip) jest do dostarczenia jako zaliczenie tych dwóch labów (do 25.05). W razie jakichkolwiek pytań piszcie mejle!

Zadanie zaliczeniowe (lab. 11-13, 22/29.05 i 5.06)

Cel

Przygotowanie finalnej wersji projektu.

Wymogi wstępne

Zaliczone zadania z wszystkich poprzednich labów z wyjątkiem maksymalnie dwóch.

Zadanie

Znajdziecie je na wiki labów

Uwagi