Zadanie 1 - KOMIKSY
===================

WPROWADZENIE
============

Celem tego zadania jest napisanie skryptu służącego do tworzenia
i zarządzania podręcznym zbiorkiem ulubionych komiksów.

Zajrzyj tutaj:
    http://www.gocomics.com

Możesz wybierać z bogatej oferty komiksów, z których większość ma
nowe odcinki codziennie. Na przykład:

    http://www.gocomics.com/garfield
    http://www.gocomics.com/adamathome

Naszym celem jest usprawnienie ściągania nowych odcinków ulubionych
komiksów tak, aby nie trzeba było codziennie uruchamiać przeglądarki,
wchodzić na strony itd... Na przykład obrazek z Garfieldem znajduje
się zawsze w pliku

    http://images.ucomics.com/comics/ga/YYYY/gaYYMMDD.gif
    
gdzie Y-rok, M-miesiac, D-dzień. Podobnie mają inne komiksy (zajrzyj
do źródeł strony). Wystarczy ograniczyć się do takich komiksów, które
pasują do tej reguły nazewnictwa (niektóre trochę odbiegają np.
Calvin and Hobbes). Skrypt powinien umożliwiać ściąganie kilku
komiksów z bieżącego dnia.

Na stronie gocomics można przeglądać poprzednie odcinki każdego
komiksu, do miesiąca wstecz.

Komiksy często grupują się w dłuższe serie, powiązane ze sobą
tematycznie. Na przykład Garfieldy z okresu od 2006.10.10 do
2006.10.14,  możnaby opatrzyć wspólnym tytułem "Beware of dog".
Chcemy, żeby skrypt pozwalał na takie przydzielanie
komiksów do większych serii (w obrębie jednego typu komiksu).

Wreszcie skrypt ma służyć do wyświetlania komiksów według typu, daty
lub serii w obrębie komiksu.



SZCZEGÓŁY
=========
Rozwiązaniem zadania jest skrypt o nazwie comic, który ściąga co najmniej
2 różne komiksy (ustalone przez rozwiązującego). Wszystkie dane skryptu
i ściągnięte obrazki powinny być przechowywane w katalogu .comic w katalogu
domowym użytkownika, który skrypt wywołał. Do rozwiązania proszę dołączyć
kompletny katalog .comic zawierający choć kilka obrazków (żebym miał od
czego zacząć). Skrypt obsługuje następujące opcje:


comic list
----------
Wypisuje obsługiwane komiksy. Najlepiej, żeby ich nazwy były krótkie, bo
będą często używane np. "gar", "cal", "adam".

Przykład:
./comic list
gar
adam

comic show _komiks [_n]
-----------------------
Pokazuje _n ostatnich odcinków komiksu _komiks. Jeśli nie podano _n wtedy
jakąś stałą liczbę np. 5.

Przykład:
./comic show gar 3

comic today
-----------
Pokazuje wszystkie komiksy z dzisiaj. Jeżeli dzisiejszych nie ma, to
pokazuje dla każdego komiksu ostatni odcinek, który jest.

comic get
---------
Ściąga dzisiejsze komiksy. Dla każdego komiksu, jeżeli jego dzisiejszy odcinek
już jest ściągnięty, to nie należy łączyć się z serwerem i ściągać go ponownie.
Tylko w tym poleceniu wchodzimy w interakcję z siecią, pozostałe są lokalne.

comic Slist _komiks
-------------------
Pokaż listę serii komiksu _komiks. Każda seria powinna mieć kolejny numer,
nazwę i liczbę odcinków w tej serii. Ostatnia powinna byc sztuczna seria
obejmująca te odcinki, które nie są w żadnej innej serii.

Przykład:
./comic Slist gar
1: Beware of dog, 5
2: Going to the vet, 8
3: Going to see Liz, 3
4: Inne, 5

comic Sshow _komiks _seria [_n]
-------------------------------
Wyświetl wszystkie odcinki komiksu _komiks które należą do serii _seria. Serię
można podać na dwa sposoby: jako numer serii (według numerów z listy powyżej)
lub jako nazwę serii lub fragment tej nazwy. Jeżeli nie ma serii o takim numerze
lub takiej nazwie, lub (uwaga!) jeśli podany fragment nazwy pasuje do wielu 
nazw serii należy wypisać stosowny komunikat. Obrazki z serii należy pokazywać
w kolejności chronologicznej, od najstarszych. Parametr _n jest opcjonalny - 
jeśli podany to wyświetlamy tylko _n najnowszych obrazków z danej serii.

Przykłady:
./comic Sshow gar 2
    [pokazuje serię o weterynarzu]
./comic Sshow gar Beware
    [pokazuje serię numer 1]
./comic Sshow gar "Going" 6
Niejednoznaczna nazwa serii

comic Sadd _komiks _seria [_data]
---------------------------------
Dodaj odcinek z dnia _data komiksu _komiks do serii _seria. Opis serii jak 
porzednio. Jeżeli data nie jest podana to chodzi o dzisiejszy (lub jeśli go
nie ma, ostatni jaki jest) odcinek. Jeden odcinek można dodać do wielu serii.

Przykład:
comic Sadd gar Beware

comic Snew _komiks _nazwa
-------------------------
Stwórz nową, pustą serię o nazwie _nazwa w komiksie _komiks.

Przykład:
comic Snew gar "Eating lasagna"



UWAGI
=====
Do ściągania stron, obrazków itp. z WWW służy program wget. Do wyświetlania
obrazka lub listy obrazków służy wiele programów np. ee, qiv, display.
Przykłady:

    wget -nd "http://images.ucomics.com/ga/2006/ga061019.gif"
    display obr1.gif obr2.gif obr3.gif

Po każdej operacji byłoby miło wypisać jakiś krótki komunikat co się stało.
Jeżeli w wywołaniu brakuje obowiązkowych parametrów to też. Skrypt powinien
sprawdzić, czy używany program do wyświetlania obrazków jest zainstalowany
w systemie - jeżeli nie to odmówić działania.

Byłoby dobrze, żeby skrypt dawał się łatwo rozbudowywać. Łatwo widać, że 
najbardziej newralgicznym momentem jest ściąganie obrazków: trzeba to robić 
indywidualnie dla każdego obsługiwanego komiksu, reszta operacji jest taka sama
dla każdego typu komiksów. Wobec tego może np. realizacja polecenia get dla
każdego komiksu powinna znajdować się w osobnym skrypcie i takie skrypty dla 
nowych komiksów dałoby się dodawać przy minimalnych (a najlepiej żadnych!) 
zmianach w skrypcie głównym. To nie będzie testowane, ale polecam przemyślenie
takiego eleganckiego rozwiązania.

Do uznania rozwiązującego pozostawiam też organizację danych w katalogu 
.comic oraz format daty wczytywanej od użytkownika.



TERMIN ITP.
===========
Proszę wysłać skrypt i jakąś małą bazkę spakowane w jednym archiwum
do 30.11.2006 na aszek@mimuw.edu.pl. Tam też wszelkie pytania, problemy itp.



NIEOBOWIĄZKOWE ROZSZERZENIA
===========================
Gdyby to kogoś wciągnęło to można później np. pomyśleć o tym aby:
1) comic get ściągało zaległe komiksy z poprzednich dni, jeżeli przez kilka dni
   nie ściągaliśmy
2) dało się ściągać komiksy o innej budowie nazwy pliku np. Calvin and Hobbes,
   albo nie pojawiające się codziennie. W szczególności chodzi tu o komiks
   PHD: www.phdcomic.com (to ma związek z poprzednią uwagą o łatwym
   rozbudowywaniu skryptu!!!).
3) przenoszenie starych komiksów do jakiegoś archiwum