# HG changeset patch # User Michał Rudowicz # Date 1306147788 -7200 # Node ID d017e2ab3027ac5942e6b33172d83cc94353cc47 # Parent 6a9e2b3b4398920fd2ca89953f8af35dfddabe23 Poprawki z rana 23 maja, prezentacja django-flask diff -r 6a9e2b3b4398 -r d017e2ab3027 frontend/doc/api.rst --- a/frontend/doc/api.rst Sat May 21 10:01:30 2011 +0200 +++ b/frontend/doc/api.rst Mon May 23 12:49:48 2011 +0200 @@ -12,7 +12,7 @@ ``/api/getjob//``, gdzie ID jest identyfikatorem zadania Serwer aplikacji powinien zwrócić dokument w formacie JSON zawierający -wszystkie dane znajdujące się w bazie, dotyczące tego zadania. +wszystkie dane znajdujące się w bazie dotyczące tego zadania. Pobieranie informacji o wszystkich zadaniach ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ diff -r 6a9e2b3b4398 -r d017e2ab3027 frontend/doc/conf.py --- a/frontend/doc/conf.py Sat May 21 10:01:30 2011 +0200 +++ b/frontend/doc/conf.py Mon May 23 12:49:48 2011 +0200 @@ -40,8 +40,8 @@ master_doc = 'index' # General information about the project. -project = u'Aplikacja rozproszona do łamania hashy (LEPSZY TYTUŁ?)' -copyright = u'2011, TU WPISAĆ NAZWĘ GRUPY' +project = u'Krakersik' +copyright = u'2011' # The version info for the project you're documenting, acts as replacement for # |version| and |release|, also used in various other places throughout the @@ -173,6 +173,11 @@ # The paper size ('letter' or 'a4'). latex_paper_size = 'a4' +latex_elements = { + 'classoptions': ',openany,oneside', + 'babel' : '\\usepackage[polish]{babel}' +} + # The font size ('10pt', '11pt' or '12pt'). latex_font_size = '10pt' diff -r 6a9e2b3b4398 -r d017e2ab3027 frontend/doc/config.rst --- a/frontend/doc/config.rst Sat May 21 10:01:30 2011 +0200 +++ b/frontend/doc/config.rst Mon May 23 12:49:48 2011 +0200 @@ -11,7 +11,7 @@ # W przypadku sqlite, ścieżka do pliku bazy Database = baza.sqlite # Wygenerować losowy dla każdej instalacji bazy - Secret_Key = TakBardzoTajne + Secret_Key = TajnyKlucz # Dla poważnej instalacji ustawić na 0 Debug = 1 # Algorytm wyliczający hashe dla haseł @@ -25,7 +25,7 @@ Database Nazwa pliku zawierającego bazę danych. Secret_Key - Tajny plucz. Podczas automatycznego tworzenia pliku konfiguracyjnego + Tajny klucz. Podczas automatycznego tworzenia pliku konfiguracyjnego generowany jest losowy 10-znakowy klucz. Debug Powoduje wyświetlanie informacji o debugowaniu w przypadku błędu diff -r 6a9e2b3b4398 -r d017e2ab3027 frontend/doc/database.rst --- a/frontend/doc/database.rst Sat May 21 10:01:30 2011 +0200 +++ b/frontend/doc/database.rst Mon May 23 12:49:48 2011 +0200 @@ -20,7 +20,7 @@ "state" INTEGER NOT NULL DEFAULT (0), -- Obecny stan operacji "result" TEXT, -- Wynik operacji "percent" INTEGER, -- Procent ukończenia operacji - "last_checked" TEXT, -- Ostatnio sprawdzany hash + "last_checked" TEXT, -- Ostatnio sprawdzana wartość "min_pass_len" INTEGER NOT NULL DEFAULT (1), -- Minimalna długość hasła "max_pass_len" INTEGER NOT NULL DEFAULT (5), -- Maksymalna długość hasła "method" INTEGER NOT NULL DEFAULT (0), -- Metoda sprawdzania hashy @@ -30,6 +30,28 @@ Opisy pól w bazie danych ------------------------ +jobs.id +^^^^^^^ + +Pole zawierające generowany automatycznie numer jednoznacznie +identyfikujący zadanie w bazie danych. + +jobs.label +^^^^^^^^^^ + +Opis zadania, ułatwiający jego identyfikację przez użytkownika. + +jobs.owner_id +^^^^^^^^^^^^^ + +Identyfikator użytkownika z tabeli `users`, określający właściciela +zadania. + +jobs.hash +^^^^^^^^^ + +Hash do zdekodowania. + jobs.state ^^^^^^^^^^ @@ -39,6 +61,40 @@ 1. Zadanie w trakcie wykonywania 2. Zadanie zakończone +jobs.result +^^^^^^^^^^^ + +Jeśli operacja ukończyła się sukcesem, to w tym polu znajdzie się +wartość wynikowa. + +jobs.percent +^^^^^^^^^^^^ + +Wartość procentowa postępu operacji. + +jobs.last_checked +^^^^^^^^^^^^^^^^^ + +Wartość, która była ostatnio sprawdzana przez aplikację rozproszoną. +Może być to wartość przybliżona ze względu na szybkość operacji. + +jobs.min_pass_len +^^^^^^^^^^^^^^^^^ + +Minimalna długość sprawdzanego hasła. Pozwala na zawężenie obszaru +poszukiwań i przyspieszenie procesu. + +jobs.max_pass_len +^^^^^^^^^^^^^^^^^ + +Maksymalna długość sprawdzanego hasła. + +jobs.method +^^^^^^^^^^^ + +Medota używana podczas łamania hasha. Możliwe wartości są ustalane +przez aplikację rozproszoną. + Funkcje wspomagające operacje na bazie danych --------------------------------------------- diff -r 6a9e2b3b4398 -r d017e2ab3027 frontend/doc/index.rst --- a/frontend/doc/index.rst Sat May 21 10:01:30 2011 +0200 +++ b/frontend/doc/index.rst Mon May 23 12:49:48 2011 +0200 @@ -9,6 +9,7 @@ :maxdepth: 2 wymagania + koncepcja quickstart config api diff -r 6a9e2b3b4398 -r d017e2ab3027 frontend/doc/koncepcja.rst --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/frontend/doc/koncepcja.rst Mon May 23 12:49:48 2011 +0200 @@ -0,0 +1,58 @@ +Koncepcja +========= + +Projekt koncepcyjny +------------------- + +Aplikacja składa się z trzech modułów: + +* Strony klienta +* Serwera aplikacji +* Aplikacji rozproszonej + +Moduły aplikacji +---------------- + +Aplikacja rozproszona +^^^^^^^^^^^^^^^^^^^^^ + +Aplikacja rozproszona składa się z komputera pełniącego rolę +mastera oraz przynajmniej dwóch komputerów pełniących rolę +slave. + +Po pobraniu zadania w formacie CSV master przesyła komputerom pełniącym rolę +slave za pomocą metody broadcast fragmenty zadania. Po przetworzeniu +swojego fragmentu slave wysyła wynik do komputera pełniącego rolę +mastera, który w przypadku istnienia dalszych nieprzetworzonych +fragmentów zadania przesyła je do komputera slave. Jednocześnie +uaktualnia informacje o zadaniu na serwerze aplikacji. + +W przypadku zakończenia zadania master przesyła całościowy wynik +do serwera aplikacji i informuje komputery pełniące rolę slave o +zakończeniu operacji. + +Do komunikacji master-slave wykorzystywana jest technologia +MPICH. + +Serwer aplikacji +^^^^^^^^^^^^^^^^ + +Serwer aplikacji udostępnia łatwy w użyciu interfejs dla +aplikacji rozproszonej umożliwiający pobieranie i aktualizowanie +informacji w bazie danych przy pomocy zapytań typu GET i POST +w protokole HTTP. + +Serwer aplikacji wykorzystuje język Python wraz z frameworkiem +Flask, natomiast do obsługi bazy danych wykorzystywany jest +Sqlite. + +Z bazą danych komunikuje się tylko i wyłącznie serwer aplikacji. + +Strona klienta +^^^^^^^^^^^^^^ + +Strona klienta została napisana w języku HTML z użyciem CSS i +JavaScript. Jest ona udostepniana przez serwer aplikacji przy +użyciu protokołu HTTP. Strona klienta umożliwia dodawanie nowych +zadań oraz przeglądanie zadań w systemie, pokazując ich stan, +procent ukończenia i informację o wyniku. diff -r 6a9e2b3b4398 -r d017e2ab3027 frontend/doc/quickstart.rst --- a/frontend/doc/quickstart.rst Sat May 21 10:01:30 2011 +0200 +++ b/frontend/doc/quickstart.rst Mon May 23 12:49:48 2011 +0200 @@ -10,6 +10,7 @@ Instalacja Pythona (jeśli jeszcze nie został zainstalowany): .. code-block:: bash + $ su -c "yum install python" Instalacja Flaska sprowadza się do wydania polecenia diff -r 6a9e2b3b4398 -r d017e2ab3027 prezentacja-django-flask/Makefile --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/prezentacja-django-flask/Makefile Mon May 23 12:49:48 2011 +0200 @@ -0,0 +1,6 @@ +prezentacja.pdf: prezentacja.tex + rubber -d prezentacja.tex + rubber --clean prezentacja.tex + +clean: + rm *.pdf diff -r 6a9e2b3b4398 -r d017e2ab3027 prezentacja-django-flask/prezentacja.tex --- a/prezentacja-django-flask/prezentacja.tex Sat May 21 10:01:30 2011 +0200 +++ b/prezentacja-django-flask/prezentacja.tex Mon May 23 12:49:48 2011 +0200 @@ -17,7 +17,7 @@ \usepackage[OT4]{fontenc} \lstset{ % -language=Octave, % the language of the code +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 @@ -107,7 +107,7 @@ \end{frame} \begin{frame}{Przykładowa aplikacja} -\lstinputlisting[language=Python, basicstyle=\tiny]{hello_basehttp.py} +\lstinputlisting[basicstyle=\tiny]{hello_basehttp.py} \end{frame} \subsection{Werkzeug} @@ -124,7 +124,7 @@ \end{frame} \begin{frame}{Przykładowa aplikacja} -\lstinputlisting[language=Python]{hello_werkzeug.py} +\lstinputlisting{hello_werkzeug.py} \end{frame} \subsection{Flask} @@ -141,7 +141,75 @@ \end{frame} \begin{frame}{Przykładowa aplikacja} -\lstinputlisting[language=Python]{hello_flask.py} +\lstinputlisting{hello_flask.py} \end{frame} -\end{document} \ No newline at end of file +\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}