Skala ocen
Do zdobycia było 60 pkt. Minimum na zalicznie to 30pkt.
Pozostała skala:
Punkty | | Ocena |
53 | < . | | | bdb |
47 | < . < | 54 | | db+ |
41 | < . < | 48 | | db |
35 | < . < | 42 | | dost+ |
29 | < . < | 36 | | dost |
0 | < . < | 30 | | ndst |
Zasady zaliczenia pracowni - zmiany
Ponieważ zadań będzie więcej niż planowałem (ale za to łatwiejsze ;-),
więc skala ocen może ulec zmianie. Na pewno będę się trzymał
zasady, że na zaliczenie potrzeba zdobyć połowę maksymalnej
liczby punktów.
Zasady zaliczenia pracowni
Pracownia będzie polegała na wykonaniu 5 różnych zadań. Tak na prawdę,
będzie to jedno zadanie rozwijanie na kolejnych pracowniach. Treść tego
zadania będzie można w pewnym momencie samodzielnie wybrać. Łącznie za te zadania będzie
można otrzymać 80 pkt, do zaliczenia będzie potrzebne uzyskanie 40pkt.
Każde zadanie ma przypisany termin oddania oraz maksymalną
liczbę punktów jaką można za nie otrzymać. Po
przekroczeniu terminu jeszcze przez tydzień będzie można uzyskać
punkty, jednak nie więcej niż połowę. Później nie będzie ono
oceniane.
Zadane szóste (i ostatnie)
Zadanie polega na dodaniu do istniejącej aplikacji
możliwości drukowania (zestawienia, raportu itp.),
tj. wygenerowania odpowiedniego Postscriptu, jego
przejrzenia i ew. wydrukowania.
Termin: ostatnia pracownia w semestrze.
Zadane piąte
Zadanie składa się z dwóch części:
przerobienia swojej aplikacji na aplikację GNOME,
tj. aby główne okno było oknem
GnomeApp;
oraz dorobienie tłumaczenia na wybrany język
(przynajmniej nagłówek okna i jedna z gałęzi menu).
Do zrobienia tego zadania może być przydatny dokument
Malcolma Tredinnicka
Internationalising GNOME applications.
Termin: 13 stycznia.
Zadane czwarte
Jest to dalszy rozwój projektu. Zadanie
polega na dorobieniu do swojej aplikacji
trzech elementów:
- uzupełnienie swojej aplikacji o dostęp do danych
zapisywanych na dysku (serwerze SQL itp);
- dodanie możliwości przeglądania danych za pomocą
GtkTreeView (zamiast danych można też dodać
przeglądanie parametrów programu czy struktury dokumentu);
- dorobienie możliwości korzystania z drag-and-drop.
Termin: ostatnie zajęcia w grudniu.
Zadane trzecie
Zadanie trzecie jest już wstępem do realizacji projektu.
Polega ono na implementacji okna z menu oraz
wybranych okien edycji. Dla wygody można założyć,
że na razie mamy tylko jedną daną każdego rodzaju
przechowywaną w pliku i tylko ona jest poddawana edycji.
Można przyjąć, że na razie nie nie są przeglądane ani
przetwarzane żadne masowe dane - to będzie treścią kolejnego
zadania.
Termin
koniec listopada.
Zadanie drugie na pracownię (10 pkt)
Zadanie będzie polegało na implementacji poniższych zadań. Implementacja każdego zadania powinno
być umieszczone w odrębnym pliku, a plik z funkcją
main powinien
zawierać testy poszczególnych rozwiązań. Proszę dodać też odpowiednie pliki nagłówkowe
z deklaracjami implementowanych funkcji. Rozwiązanie to należy połączyć z
rozwiązaniem zadania pierwszego umieszczając pliki źródłowe w katalogu
src
i modyfikując odpowiednie pliki konfiguracyjne.
Lista zadań:
- Zaimplementuj proceduję, która w zależności od parametru przekonwertuje wskazany plik
ISO-8859-2 do UTF-8 lub odwrotnie.
- Korzystając z zadeklarowanego w GLib typu GList (implementującego listy dwukierunkowe)
zaprogramuj funkcję GList * wstaw(GList * lista, gchar * napis, gint pos), która
do listy znaków UTF-8 lista na pozycję pos wstawi podlistę utworzoną z napisu
zakodowanego w UTF-8 napis. Korzystając ze standardowego iteratora
g_list_foreach zaprogramuj również funkcję printlist(GList * lista)
drukującą napis zapamiętany w liście lista.
- Zaimplementuj funkcję konwertującą zadany napis z jednego standardu kodowania do drugiego,
np. z CP1250 do Mazovii (chodzi tu o jednobajtowe standardy kodowania). Wykorzystaj w tym
celu zbalansowane drzewa binarne GTree zaimplementowane w GLib
- Tak samo jak poprzednie, ale wykorzystując tablice haszujące GHashTable.
- Korzystając z wątków GThreads zaprogramuj wyścigi wątków: każdy wątek ma swój własny
licznik. Program wątku to pętla, która zwiększa licznik i co pewien czas informuje, jaka jest
wartość licznika. Zwycięża ten wątek, którego licznik osiągnie wartość wskazaną w parametrze
wywołania procedury.
- Korzystając z typu GScanner implementującego skaner leksykalny napisz funkcję, która jako argument bierze napis gchar *, a jako wynik zwraca listę tokenów znalezionych w napisie. Lista
ma być typu zaimplementowanego w GLib.
Każde zadanie jest warte 4 punkty, przy czym nie można oddać więcej niż dwa zadania.
2 punkty można zdobyć za połączenie tego zadania z
poprzednim, ale uzupełniając Makefile.am w src/ o odpowiednie zależności.
Proszę też sprawdzić (i ew. uzupełnić), czy zaimplementowane w poprzednim zadaniu
skrypty sprawdzają istnienie w systemie biblioteki GLib w odpowiedniej wersji.
Termin:
20 i 21 października
Pomoce
Opis biblioteki GLib
Zadanie pierwsze na pracownię (10 pkt)
Zadanie polega na utworzeniu w swoim katalogu plików i katalogów zgodnie z
GNU Coding Standards dostosowanych do aplikacji GNOME opisanych w
niniejszym dokumencie.
Przede wszystkim wymagane są te pliki i skrypty konfiguracyjne, które
umożliwiają automatyczne wygenerowanie odpowiednich plików i skryptów. Są
to przede wszystkim pliki wspomnianych na wykładzie:
configure.in oraz
Makefile.am.
W katalogu src/ proszę umieścić króciutki programik napisany w C
(w stylu 'Hello, world') tak, aby możliwe było przetestowanie poprawności
plików konfiguracyjnych. Pełna realizacja to możliwość automatycznego wygenerowania
pliku
Makefile, skompilowania pliku źródłowego przez wydanie polecenia
make w głównym katalogu aplikacji, a także wygenerowanie odpowiedniego
pliku dystrybucyjnego (polecenie
make dist).
Z plików pełniących rolę informacyjnych wystarczy
utworzenie (i wypełnienie krótką acz sensowną informacją) plików
README i
Changelog.
Opis narzędzi: Automake i autoconf
Programy automake i autoconf są szczegółowo opisane
tu
oraz
tu.
Chętni mogą przeczytać pełen opis
GNU Coding Standards, ale nie jest to
konieczne do wykonania zadania.
Jest też
wprowadzenie w jezyku polskim.
Termin
13 i 14 października (w zależności od grupy).
Projekty na pracownię
Zadania opisane są skrótowo; nie umieszczałem w nich informacji
o konieczności dodawania elementów, ich edycji czy usuwania
uważając to za oczywiste. Uszczegółowienie specyfikacji
zostawiam Wam. Można oczywiście wykazać się
własną inwencją i zaproponować modyfikacje czy nawet
całkowicie nowy projekt.
Uwaga:
większość poniższych zadań ma charakter bazodanowy.
Ponieważ są to zajęcia z tworzenia aplikacji w środowisku
GNOME/GTK, nie będzie oceniana efektywność przetwarzania danych,
można więc samodzielnie zaimplementować własny elementarny system
dostępu do danych. Można też skorzystać z istniejących już narzędzi,
np. do przetwarzania danych
przechowywanych w pliku (przykładem jest biblioteka
Berkeley DB przechowująca dane w plikach XML). Możliwe jest też
przechowywanie danych na jakimś serwerze SQL, lecz zwykle
wymaga to kontaktu z administratorem.
Wypożyczalnia
Zaprogramuj system obsługujący wypożyczalnię, np. filmów
DVD i VHS czy książek i czasopism. System zawiera
zarówno spis klienów wypożyczalni, jak i rejestr
zawartości wypożyczalni.
Kursy walut
Podczas rozliczeń międzynarodowych ważne jest, aby
znać kursy walut we wskazanym dniu (np. ogłaszany
przez Narodowy Bank Polski). Zadaniem systemu jest przechowywanie
kursów różnych walut z kolejnych dni. Dodatkowo
warto zrobić mały kalkulator walutowy.
Miary i wagi
Jest to aplikacja służąca do przeliczania
wielkości wyrażanych za pomocą różnych jednostek miar,
np. z metrycznych na anglosaskie. Oczywiście, możliwe
jest interakcyjne dodawanie nowych jednostek miar.
Układanie planu zajęć
Zakładamy, że danymi wejściowymi jest spis nauczycieli, lista
klas i lista przedmiotów. System ma wspomagać inteakcyjny przydział
zajęć do klas i prowadzących do zajęć.
Przeglądarka logów systemowych
System ma możliwość czytania i filtrowania logów z
wybranych plików rejestrujących zdarzenia w systemie.
Można dodać możliwość generowania różnych zestawień,
a nawet wykresów.
Generator ankiet
Zadaniem systemu jest generowanie ankiet zawierających
różnego rodzaju pytania (można przyjąć, że przynajmniej
wprowadzenie tekstu, liczby, czy wybór jednej z kilku
możliwości). Oprócz tego system ma zawierać program,
który na podstawie wygenerowanego wzoru ankiety
"odpyta" i zapisze otrzymaną odpowiedź.
Firma transportowa
Firma transportowa przewozi towary z miasta A do
miasta B. Firma ta dysponuje flotą pojazdów, przy czym
każdy pojazd ma określoną ładowność.
Oprócz tego w pliku jest zapisane, jakie
toway i jakiej ładowności należy przewiść z miasta A
do miasta B. Program ma wspomóc wizualny przydział
towarów do pojazdów, jednak tak, aby nie przekroczyć
zadanej ładowności. Uwaga: jeśli towarów jest wiele,
może zajść konieczność kilkakrotnych kursów
pojazdów. Uwzględnij więc fakt, że pojazdowi można przydzielić
kilka kursów.