\documentclass{beamer}

\mode<presentation>
{
  \usetheme{Darmstadt}

  \setbeamercovered{transparent}
}

\usepackage{listings}

%\usepackage[english]{babel}
\usepackage[polish]{babel}

\usepackage[MeX]{polski}
\usepackage[utf8]{inputenc}
\usepackage[OT4]{fontenc}

\lstset{ %
language=Python,                % the language of the code
basicstyle=\small,       % the size of the fonts that are used for the code
tabsize=4,                      % sets default tabsize to 2 spaces
captionpos=b,                   % sets the caption-position to bottom
breaklines=true,                % sets automatic line breaking
breakatwhitespace=true,        % sets if automatic breaks should only happen at whitespace
}

\title[Short Paper Title] % (optional, use only with long paper titles)
{Django i Flask}

\subtitle
{Porównanie frameworków webowych w języku Python} % (optional)

\author[Michał Rudowicz] % (optional, use only with lots of authors)
{Michał Rudowicz\\171047}
% - Use the \inst{?} command only if the authors have different
%   affiliation.

\institute[PWr] % (optional, but mostly needed)
{
  Wydział Elektroniki\\
  Politechnika Wrocławska
}
% - Use the \inst command only if there are several affiliations.
% - Keep it simple, no one is interested in your street address.

\date[Short Occasion] % (optional)
{13 maja 2011}

\subject{Talks}

\begin{document}

\begin{frame}
  \titlepage
\end{frame}

\begin{frame}{Spis Treści}
  \tableofcontents
  % You might wish to add the option [pausesections]
\end{frame}


% Since this a solution template for a generic talk, very little can
% be said about how it should be structured. However, the talk length
% of between 15min and 45min and the theme suggest that you stick to
% the following rules:  

% - Exactly two or three sections (other than the summary).
% - At *most* three subsections per section.
% - Talk about 30s to 2min per frame. So there should be between about
%   15 and 30 frames, all told.

\section{Ogólne informacje o frameworkach}

\subsection{Django}

\begin{frame}{Cechy Django}
  \begin{itemize}
  \item<1->
    Doskonale nadaje się do tworzenia dużych, skomplikowanych serwisów
  \item<2->
    Duża ilość wbudowanych funkcjonalności
	\begin{itemize}
		\item ORM
		\item System szablonów
		\item Automatycznie generowany panel administracyjny
		\item Zarządzanie użytkownikami
		\item Wiele innych
	\end{itemize}
  \item<3->
    Stosunkowo dużo kodu koniecznego do napisania prostej aplikacji
  \end{itemize}
\end{frame}

\subsection{Python + BaseHTTPServer}

\begin{frame}{Cechy programów napisanych z użyciem BaseHTTPServer}
  \begin{itemize}
  \item<1->
    Całkowita kontrola nad działaniem aplikacji
  \item<2->
    Konieczność pisania dużej ilości kodu
  \item<3->
    Korzysta tylko z bibliotek dodawanych do standardowej instalacji Pythona
  \end{itemize}
\end{frame}

\begin{frame}{Przykładowa aplikacja}
\lstinputlisting[basicstyle=\tiny]{hello_basehttp.py}
\end{frame}

\subsection{Werkzeug}

\begin{frame}{Cechy Werkzeug}
  \begin{itemize}
  \item<1->
    Wbudowany debugger wykorzystujący JavaScript
  \item<2->
    Obsługa sesji i podpisanych ciasteczek
  \item<3->
    Nadal dość skomplikowana obsługa
  \end{itemize}
\end{frame}

\begin{frame}{Przykładowa aplikacja}
\lstinputlisting{hello_werkzeug.py}
\end{frame}

\subsection{Flask}

\begin{frame}{Cechy Flaska}
  \begin{itemize}
  \item<1->
    Oparty na Werkzeug, więc posiada wszystkie jego zalety
  \item<2->
    Zintegrowany z systemem szablonów Jinja2
  \item<3->
    Uproszczona obsługa
  \end{itemize}
\end{frame}

\begin{frame}{Przykładowa aplikacja}
\lstinputlisting{hello_flask.py}
\end{frame}

\section{Wdrożenie} % (fold)
\label{sec:Wdrożenie}

\subsection{Django} % (fold)
\label{sub:WdrozenieDjango}
\begin{frame}{Django}
\begin{itemize}
    \item<2-> Potrzebujemy Apache i mod\_python
    \item<2-> Włączamy mod\_python w Apache
    \item<3-> Konfigurujemy Apache tak, aby korzystał
    z mod\_python
    \item<3-> Konfigurujemy mod\_python tak, aby korzystał
    z naszej aplikacji
    \item<4-> Konfigurujemy Apache tak, aby serwował pliki
    statyczne (opcjonalnie)
    \item<5-> Albo korzystamy z graficznego kreatora w Cherokee
    \item<6-> Oczywiście, istnieją też inne sposoby wdrażania aplikacji
    napisanej w Django
\end{itemize}
\end{frame}        % Django
% subsection WdrozenieDjango (end)

\subsection{SimpleHTTPServer} % (fold)
\label{sub:WdrozenieSimpleHTTPServer}
\begin{frame}{SimpleHTTPServer}
\begin{itemize}
    \item<2-> Uruchamiamy skrypt Pythona, który serwuje strony na wybranym porcie
    \item<3-> Opcjonalnie konfigurujemy serwer tak, aby działał jako reverse
    proxy i serwował pliki statyczne
\end{itemize}
\end{frame}        % SimpleHTTPServer
% subsection WdrozenieSimpleHTTPServer (end)

\subsection{Werkzeug} % (fold)
\label{sub:Werkzeug}
\begin{frame}{Werkzeug}
\begin{itemize}
    \item<1->Możliwość integracji serwera w pythonie, dzięki czemu wdrożenie przebiega tak, jak w przypadku SimpleHTTPServer
    \item<2->Możliwość uruchomienia aplikacji jako pliku CGI
    \item<3->Możliwość uruchomienia poprzez wsgi lub FastCGI
\end{itemize}
\end{frame}        % Werkzeug

% subsection Werkzeug (end)

\subsection{Flask} % (fold)
\label{sub:Flask}
\begin{frame}{Flask}
\begin{itemize}
    \item<1-> Jako, że framework jest oparty na Werkzeug, mamy takie same możliwości wdrażania jak tam
    \item<2-> Wbudowany serwer HTTP sprawia, że uruchomienie aplikacji
    tak, jak w przypadku SimpleHTTPServer jest jeszcze łatwiejsze
\end{itemize}

\end{frame}        % Flask
% subsection Flask (end)
% section Wdrożenie (end)
\section{Podsumowanie} % (fold)
\label{sec:Podsumowanie}
\begin{frame}{Podsumowanie}
\begin{itemize}
    \item<2-> Django jest doskonałym frameworkiem do dużych projektów, ponieważ zawiera wszystko wbudowane
    \item<3-> SimpleHTTPServer jest przeznaczone raczej jako dodatek do innych aplikacji, niż jako baza dla aplikacji internetowych
    \item<4-> Werkzeug jest dobrym frameworkiem dla projektów mniejszych lub dla osób potrzebujących dużej kontroli nad aplikacją
    \item<5-> Flask dobrze nadaje się dla aplikacji niewielkich, gdyż łączy prostotę budowy Werkzeuga z łatwością obsługi Django oraz swoimi ułatwieniami
\end{itemize}
\end{frame}        % Podsumowanie
% section Podsumowanie (end)
\end{document}
