Toto je muj (neprilis rozsahly a originalni) seznam temat na zapoctove programy a
rocnikove projekty. Z temat na rocnikove projekty lze v pripade zajmu vyextrahovat
nejaky podproblem, pouzitelny jako zapoctak.
Temata vhodna na rocnikovy projekt
Nasledujici temata jsem vypsal jako rocnikove projekty v letnim semestru
2005/2006 a nasledne v zimnim semestru 2006/2007. V roce 2007 rocnikove
projekty nevedu, jelikoz jeho vetsi cast stravim v zahranici, presto se vsak
jimi muzete inspirovat.
U vsech z nich by melo byt
pomerne snadne rozsirit je na bakalarskou praci. Vysledek musi byt pod GPL,
a nemel by byt uplne "na zahozeni" -- mel by byt bud pridan do nejakeho jiz
existujiciho projektu, nebo samostatne prezentovan napriklad na SourceForge.
- GO -- go je cinska deskova hra; a i pres podstatny pokrok v poslednich
leted, soucasne nejlepsi programy jsou stale
slabsi nez kvalitni lidsti hraci. Ukolem by zde asi nebylo toto zmenit,
ale spis se zamerit na nekterou dulezitou cast hry (zahajeni, volba joseki,
life-and-death, ...) a pokusit se napsat program na jeji reseni. Jednou z moznosti
je pridani vysledku tohoto projektu do programu GNU Go. Jina varianta je
implementace vlastniho bota, ktery by hral go na nekterem z verejnych internetovych
serveru (kgs, igs).
- Manipulace se zdrojaky v C -- program, ktery by si umel naparsovat zadane
soubory s Ceckovymi zdrojaky (pro tuto fazi je mozne pouzit jiz existujici
kod, napriklad parser z GCC).
Vysledny syntakticky strom by pak umel dale zpracovavat -- presouvat a prejmenovavat
funkce a promenne, "vykousnout" oznacenou cast kodu do zvlastni funkce
(samozrejme tak, aby to nezmenilo semantiku programu, tj. vcetne prevedeni potrebnych
lokalnich promennych na parametry funkce) nebo naopak volani funkce zainlinovat
(pripadne vcetne jednoduchych optimalizaci typu odpropagovani konstant, pokud byly
pouzity jako parametry volani dane funkce), apod.
- Generovani grafu -- nastroj pro induktivni generovani grafu podle obecnych predpis
(pridavanim vrcholu, hran, usi, podrozdelovani hran, apod.), a pripadne jejich filtrovani
(odstranovani isomorfnich vysledku a orezavani podle zadanych vlastnosti). Takto ziskane
grafy by bylo mozne dale zpracovavat (vybirat z nich podle zadanych podminek, pocitat jejich
vlastnosti) a zobrazovat je. Zadavani podminek a vlastnosti pro generovani by melo byt snadno
rozsiritelne (naimplementovanim svych vlastnich funkci). Take by bylo vhodne nejake uzivatelske
rozhrani (napriklad webove), jimz by sly v primerene genericke podobe pouzivat kombinace zakladnich
vestavenych funkci. Tento projekt by mel byt vypracovan v Haskellu.
Ostatni
- Sitovy make -- se sklada ze dvou casti, serveru a klienta. Servery
bezi na nekolika strojich v siti a prijimaji pozadavky od klientu.
Klient dostane makefile (na zapoctak samozrejme staci prijimat nejakou
rozumnou podmnozinu bezne syntaxe) a necha servery provadet kompilace
paralelne. Samozrejme je nutne doresit spoustu navrhovych otazek (rozdelovani
uloh, kopirovani souboru, ...). V pripade komplexnejsiho zpracovani je mozne
rozdelit mezi vice lidi.
Obtiznost -- spise vetsi, na druhou stranu je potom mozne tento zapoctak
udat minimalne jeste na unixu.
- Editor MetaPostovych zdrojaku -- MetaPost je programovaci jazyk na kresleni
obrazku. Jsou veci, ktere se v nem delaji skvele (grafy funkci, obrazky vytvarene
skladanim casti podle nejakeho vzoru a podobne), bohuzel ale i spousta dalsich,
ktere uz tak moc dobre ne. Zejmena je otravne muset pocitat souradnice bodu, odhadovat
rozmery a podobne. Moje predstava editoru je takova, ze by se skladal ze dvou casti --
okna se zdrojaky a okna zobrazujiciho aktualni obrazek (prekreslovan na pozadani).
Klikanim by se daly vytvaret body, manipulovat krivky a podobne, to vse by se promitalo
na aktualni misto zdrojaku; samozrejme lze zaroven zdrojak editovat rucne. Mozno rozdelit
na vice casti (grafika, editor vcetne zvyraznovani syntaxe, ...). Je treba doresit problemy
(obrazky v MetaPostu je mozno volne manipulovat; tj. nemusi byt rovnou vykreslovany,
je mozne je posunovat a otacet, atd. -- co s tim?)
Obtiznost -- podle zpracovani, od pomerne jednoduche (jednoduchy editor, klikanim lze
vytvaret pouze jednotlive body) az po velmi narocne (komplexni zpracovani ktere muze
i "rozumet" netrivialnim castem semantiky MetaPostu).
- Hlasem ovladany editor zdrojaku -- pripadne spojujici ovladani hlasem, klavesnici a mysi.
Hlasem jde ovladat polohu ve zdrojaku ("nahoru", "o stranku nahoru", "na radku 55", "na definici
funkce bla"), pridavat syntakticke konstrukce ("for", "while", "prirazeni") a pripadne je upravovat
a mazat. Operandy (vyrazy) je mozne zadavat z klavesnice nebo diktovat. Hlasove prikazy by melo jit
predefinovat (na vlastni skreky :-) ) -- moznost ulozeni vice profilu pro ruzne uzivatele (neni nutne,
aby program s jednim profilem dokazal rozpoznat vyslovnost vice lidi) a definice semantiky ve skriptovacim
jazyce.
Obtiznost -- vhodne spis na rocnikovy projekt.