<commit_before>#### {% title "Zadania" %}

<blockquote>
<p>
  Always code as if the guy who ends up maintaining your code will be
  a violent psychopath who knows where you live.
</p>
<p class="author">— <NAME></p>
</blockquote>

* Z Pythona na Ruby.<br>
  Termin oddania: 9.10.11.
* Prosta aplikacja Rails (Fortunka, Trekking, …)<br>
  Termin oddania: 23.10.11.
* Przechodzimy na nierelacyjną bazę danych (MongoDB, …)<br>
  Termin oddania: 7.11.2011.
* Projekt zespołowy – wybór tematu projektu (podział na grupy, założenie repozytoriów, …)<br>
  Termin oddania: 20.11.2011.
* Rozliczenie projektu zespołowego<br>
  Termin oddania: 18.12.2011.
* Prezentacje gotowych projektów<br>
  Termin: styczeń 2012.

Projekty należy umieścić w osobnych repozytoriach git
na swoim koncie na *github.com*.


<blockquote>
{%= image_tag "/images/ralph-waldo-emerson.jpg", :alt => "[<NAME>]" %}
<p>
  Jeśli ktoś potrafi napisać lepszą książkę, wygłosić lepsze kazanie,
  albo sporządzić lepszą pułapkę na myszy niż jego sąsiad, to choćby
  zbudował swój dom w lesie, świat wydepcze ścieżkę do jego drzwi.
</p>
<p class="author">— <NAME> (1803–1882)</p>
</blockquote>

# Egzamin

Na egzamin należy przygotować i uruchomić serwis www wg własnego
pomysłu. Serwis piszemy w zespołach 4–5 programistów.<br/>
Prezentacje projektów: styczeń 2012. Harmonogram: grudzień 2011.


# FAQ

1. Co będzie jak nie oddam projektu w terminie?
   *Odpowiedź:* Ocena z laboratorium zostanie obniżona o 1.
1. Co będzie jeśli zespół nie zaprezentuje swojego projektu
   na jednym z wykładów w styczniu.
   *Odpowiedź:* Maksymalna ocena za taki projekt to 3.


# Zadania

…wraz opisem o co chodzi i co nalezy zaprogramować.


## Z Pythona na Ruby

Zadanie polega na przetłumaczeniu
[tego skryptu](http://code.google.com/intl/pl-PL/apis/maps/documentation/elevation/#CreatingElevationCharts)
na język Ruby.

Mniej lub bardziej użyteczne linki do tego zadania:

* [Elevation](http://code.google.com/intl/pl-PL/apis/maps/documentation/javascript/services.html#Elevation) –
  dwa proste przykłady.
* [The Google Elevation API](http://code.google.com/intl/pl-PL/apis/maps/documentation/elevation/).
* [Google Maps API Family](http://code.google.com/intl/pl-PL/apis/maps/)
* [Google Maps Javascript API V3 Reference](http://code.google.com/intl/pl-PL/apis/maps/documentation/javascript/reference.html)


## Prosta aplikacja Rails

Aplikacja powinna korzystać z layoutu przygotowanego z szablonu
[html5-boilerplate](https://github.com/paulirish/html5-boilerplate/blob/master/index.html).
Kod szablonu jest opisany na stronie [HTML5 Boilerplate](http://html5boilerplate.com/).

Na stronie [Initializr 2](http://www.initializr.com/) można wygenerować
„a clean customizable template based on Boilerplate with just what you need to start”.

Przykładowy [Rails 3.1+ compatible **Application Template** based on the HTML5 Boilerplate project](https://github.com/russfrisch/h5bp-rails)
przygotował [Russ Frisch](https://github.com/russfrisch).


### Fortunka v2.0

Funkcjonalność aplikacji można zwiększyć dodając na przykład:

1. Paginację do widoku *index*.
Skorzystać z gemu [kaminari](https://github.com/amatsuda/kaminari).
Wystylizować linki do kolejnych „stron”.
Jak to się robi opisał <NAME>,
[Pagination Gallery: Examples And Good Practices](http://www.smashingmagazine.com/2007/11/16/pagination-gallery-examples-and-good-practices/) i <NAME>,
[Samples of pagination styling for will_paginate](http://mislav.uniqpath.com/will_paginate/).
2. „AJAX rating” dla komentarzy.
Skorzystać z jakiejś gotowej wtyczki lub gemu
(wcześniej sprawdzić czy wybrana biblioteka działa z jQuery 1.6+ Rails 3.1+).
3. Autentykację. Zrobić to tak jak, to
przedstawił R. Bates w screencaście
[Simple OmniAuth](http://railscasts.com/episodes/241-simple-omniauth).
4. Komentarze, tak jak to będzie przedstawione na wykładzie.

Warto już teraz uprościć kod formularzy. Jak?
Obejrzeć screencast R. Batesa [Simple Form](http://railscasts.com/episodes/234-simple-form).
Następnie zamienić wygenerowane formularze na formularze korzystajęce
z metod [tego gemu](http://github.com/plataformatec/simple_form).


### Trekking

O co chodzi w aplikacji Trekking? Najprościej jest przekonać się
samemu wchodząc na stronę
[Google Maps JavaScript API v3 Example: Elevation](http://www.geocodezip.com/v3_elevation-profile_distance.html).

Mniej lub bardziej użyteczne linki:

* wtyczka jQuery [gMap](http://labs.mario.ec/jquery-gmap/) –
  gMap helps you embed Google Maps into your website.
  With only 2 KB in size it is very flexible and highly customizable
* [map icons collection](http://mapicons.nicolasmollet.com/)
* gem [Cartographer](https://github.com/joshuamiller/cartographer) (?)

Zainstalować następujące rozszerzenia do przeglądarki Firefox:

* [Firebug](http://getfirebug.com/)
* [FireQuery](https://addons.mozilla.org/en-US/firefox/addon/firequery/)
* [CSS Usage](https://addons.mozilla.org/en-US/firefox/addon/css-usage/)

oraz do przgladarki Chrome:

* [PageSpeed](http://code.google.com/intl/pl-PL/speed/page-speed/docs/using_chrome.html)
* [Yslow](http://developer.yahoo.com/yslow/)

Działającą aplikację ocenić za pomocą rozszerzenia *YSlow* oraz *PageSpeed*.
Sprawdzić jakość kodu CSS za pomocą rozszerzenia *CSS Usage*.
**Zacząć** od [Page Speed Online](http://pagespeed.googlelabs.com/pagespeed/).

**Ciekawy ekperyment:**
[Strona www Instytutu Informatyki](http://inf.ug.edu.pl/) +
[PageSpeed Online](http://pagespeed.googlelabs.com/pagespeed/) +
[SpriteMe](http://spriteme.org/).


## Przechodzimy na nierelacyjną bazę danych

W swojej aplikacji zamienić relacyjną bazę danych na dokumentową bazę
danych MongoDB.

Kilka linków:

* dokumentacja do gemu [Mongo](http://api.mongodb.org/ruby/current/)
* screencast R. Batesa, [Mongoid](http://railscasts.com/episodes/238-mongoid).


# Zadania różne<commit_msg>Poprawki w treści zadania.<commit_after>#### {% title "Zadania" %}

<blockquote>
<p>
  Always code as if the guy who ends up maintaining your code will be
  a violent psychopath who knows where you live.
</p>
<p class="author">— <NAME></p>
</blockquote>

* Z Pythona na Ruby.<br>
  Termin oddania: 9.10.11.
* Prosta aplikacja Rails (Fortunka, Trekking, …)<br>
  Termin oddania: 23.10.11.
* Przechodzimy na nierelacyjną bazę danych (MongoDB, …)<br>
  Termin oddania: 7.11.2011.
* Projekt zespołowy – wybór tematu projektu (podział na grupy, założenie repozytoriów, …)<br>
  Termin oddania: 20.11.2011.
* Rozliczenie projektu zespołowego<br>
  Termin oddania: 18.12.2011.
* Prezentacje gotowych projektów<br>
  Termin: styczeń 2012.

Projekty należy umieścić w osobnych repozytoriach git
na swoim koncie na *github.com*.


<blockquote>
{%= image_tag "/images/ralph-waldo-emerson.jpg", :alt => "[<NAME>]" %}
<p>
  Jeśli ktoś potrafi napisać lepszą książkę, wygłosić lepsze kazanie,
  albo sporządzić lepszą pułapkę na myszy niż jego sąsiad, to choćby
  zbudował swój dom w lesie, świat wydepcze ścieżkę do jego drzwi.
</p>
<p class="author">— <NAME> (1803–1882)</p>
</blockquote>

# Egzamin

Na egzamin należy przygotować i uruchomić serwis www wg własnego
pomysłu. Serwis piszemy w zespołach 4–5 programistów.<br/>
Prezentacje projektów: styczeń 2012. Harmonogram: grudzień 2011.


# FAQ

1. Co będzie jak nie oddam projektu w terminie?
   *Odpowiedź:* Ocena z laboratorium zostanie obniżona o 1.
1. Co będzie jeśli zespół nie zaprezentuje swojego projektu
   na jednym z wykładów w styczniu.
   *Odpowiedź:* Maksymalna ocena za taki projekt to 3.


# Zadania

…wraz opisem o co chodzi i co nalezy zaprogramować.


## Z Pythona na Ruby

Zadanie polega na przetłumaczeniu
[tego skryptu](http://code.google.com/intl/pl-PL/apis/maps/documentation/elevation/#CreatingElevationCharts)
na język Ruby.

Mniej lub bardziej użyteczne linki do tego zadania:

* [Elevation](http://code.google.com/intl/pl-PL/apis/maps/documentation/javascript/services.html#Elevation) –
  dwa proste przykłady.
* [The Google Elevation API](http://code.google.com/intl/pl-PL/apis/maps/documentation/elevation/).
* [Google Maps API Family](http://code.google.com/intl/pl-PL/apis/maps/)
* [Google Maps Javascript API V3 Reference](http://code.google.com/intl/pl-PL/apis/maps/documentation/javascript/reference.html)


## Prosta aplikacja Rails

Aplikacja powinna korzystać z layoutu przygotowanego z szablonu
[html5-boilerplate](https://github.com/paulirish/html5-boilerplate/blob/master/index.html).
Kod szablonu jest opisany na stronie [HTML5 Boilerplate](http://html5boilerplate.com/).

Na stronie [Initializr 2](http://www.initializr.com/) można wygenerować
„a clean customizable template based on Boilerplate with just what you need to start”.

Przykładowy [Rails 3.1+ compatible **Application Template** based on the HTML5 Boilerplate project](https://github.com/russfrisch/h5bp-rails)
przygotował [<NAME>](https://github.com/russfrisch).


### Fortunka v2.0

Funkcjonalność aplikacji można zwiększyć dodając na przykład:

1. Paginację do widoku *index*.
Skorzystać z gemu [kaminari](https://github.com/amatsuda/kaminari).
Wystylizować linki do kolejnych „stron”.
Jak to się robi opisał <NAME>,
[Pagination Gallery: Examples And Good Practices](http://www.smashingmagazine.com/2007/11/16/pagination-gallery-examples-and-good-practices/) i <NAME>,
[Samples of pagination styling for will_paginate](http://mislav.uniqpath.com/will_paginate/).
2. „AJAX rating” dla komentarzy.
Skorzystać z jakiejś gotowej wtyczki lub gemu
(wcześniej sprawdzić czy wybrana biblioteka działa z jQuery 1.6+ Rails 3.1+).
3. Autentykację. Zrobić to tak jak, to
przedstawił R. Bates w screencaście
[Simple OmniAuth](http://railscasts.com/episodes/241-simple-omniauth).
4. Komentarze, tak jak to będzie przedstawione na wykładzie.

Warto już teraz uprościć kod formularzy. Jak?
Obejrzeć screencast R. Batesa [Simple Form](http://railscasts.com/episodes/234-simple-form).
Następnie zamienić wygenerowane formularze na formularze korzystajęce
z metod [tego gemu](http://github.com/plataformatec/simple_form).


### Trekking

O co chodzi w aplikacji Trekking? Najprościej jest przekonać się
samemu wchodząc na stronę
[Google Maps JavaScript API v3 Example: Elevation](http://www.geocodezip.com/v3_elevation-profile_distance.html).

Mniej lub bardziej użyteczne linki:

* wtyczka jQuery [gMap](http://labs.mario.ec/jquery-gmap/) –
  gMap helps you embed Google Maps into your website.
  With only 2 KB in size it is very flexible and highly customizable
* [map icons collection](http://mapicons.nicolasmollet.com/)
* gem [Cartographer](https://github.com/joshuamiller/cartographer) (?)

Zainstalować następujące rozszerzenia do przeglądarki Firefox:

* [Firebug](http://getfirebug.com/)
* [FireQuery](https://addons.mozilla.org/en-US/firefox/addon/firequery/)
* [CSS Usage](https://addons.mozilla.org/en-US/firefox/addon/css-usage/)

oraz do przgladarki Chrome:

* [PageSpeed](http://code.google.com/intl/pl-PL/speed/page-speed/docs/using_chrome.html)
* [Yslow](http://developer.yahoo.com/yslow/)

1\. Działającą aplikację uruchomić w trybie *production*.
Sprawdzić jaką uzyska ocenę od *YSlow* a jaką od *PageSpeed*.

2\. Powtórzyć ocenę dla aplikacji uruchomionej w trybie *development*.

3\. Sprawdzić jakość kodu CSS za pomocą rozszerzenia *CSS Usage*.

**Zacząć** od [Page Speed Online](http://pagespeed.googlelabs.com/pagespeed/).

**Ciekawy ekperyment:**
[Strona www Instytutu Informatyki](http://inf.ug.edu.pl/) +
[PageSpeed Online](http://pagespeed.googlelabs.com/pagespeed/) +
[SpriteMe](http://spriteme.org/).


## Przechodzimy na nierelacyjną bazę danych

W swojej aplikacji zamienić relacyjną bazę danych na dokumentową bazę
danych MongoDB.

Kilka linków:

* dokumentacja do gemu [Mongo](http://api.mongodb.org/ruby/current/)
* screencast R. Batesa, [Mongoid](http://railscasts.com/episodes/238-mongoid).


# Zadania różne
{'fraction_non_alphanumeric': 0.11795045235478144, 'fraction_numerical': 0.017164116005749557, 'mean_word_length': 4.840987654320988, 'pattern_counts': {'":': 0, '<': 52, '<?xml version=': 0, '>': 54, 'https://': 14, 'lorem ipsum': 0, 'www.': 10, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '1029908', 'n_tokens_mistral': 4929, 'n_tokens_neox': 4803, 'n_words': 1137}