Programozó Páternoszter újratöltve

C, C++, Java, Python és AspectJ esettanulmányok

Bátfai, Norbert

E. adjunktus, DEIK.
Egyetemi adjunktus
Debreceni Egyetem, Informatikai Kar
Információtechnológiai Tanszék

Keszthelyi, András

Szakmai lektor 
F. adjunktus, ÓEKGK
Főiskolai adjunktus
Óbudai Egyetem

Szerzői kiadás

A tananyag a TÁMOP-4.1.2.A/1-11/1-2011-0103 pályázat keretében készült.

Magyarország megújul logó.

Új Széchenyi Terv logó.

A jelen jegyzetet és a jegyzet környezetének további könyveit a szerző igyekszik azok szerzői kiadásában folyamatosan ápolni, karban tartani. Ezek a szerzői kiadások megtalálhatóak a http://www.inf.unideb.hu/~nbatfai/konyvek/ lapon.

2014

Verziótörténet
Verzió 0.0.12012. április 26.Bátfai
Elkezdem a jegyzet összeállítását DocBook 4.4 XML-ben. Alapstruktúra: C, C++, Java, Python, AspectJ külön partok, amelyeken belül az esettanulmányok lesznek a fejezetek.
Verzió 0.0.22012. április 27.Bátfai
A jegyzetről, szerzőről részek átvétele a PARP-ból, hangolása.
Verzió 0.0.32012. április 29.Bátfai
A könnyebb záróvédési feladat bevezetése (rcssserver/sampleclient alapú robotfoci csapat).
Verzió 0.0.42012. április 30.Bátfai
C++ rész bevezetése, a könnyebb záróvédési feladat egy szekvenciális alternatív megoldásának bevezetése. A Bolyongó SE bemutatása.
Verzió 0.0.52012. május 2.Bátfai
A Bolyongó SE felélesztése a Batfai_Prog1 virtuális (VBox) képben.
Verzió 0.0.62012. május 3.Bátfai
A jegyzet környezetének bemutatása (egységesen az összes TÁMOP jegyzetemben).
Verzió 0.0.72012. május 5.Bátfai
A Bolyongó FC++ bemutatása.
Verzió 0.0.82012. május 11.Bátfai
A Debreceni Lobogó FC++ bemutatása.
Verzió 0.0.92012. május 12.Bátfai
A Debreceni Egyetértés FC++ bemutatása.
Verzió 0.0.102012. május 13.Bátfai
A Debreceni Hivatásos FC++ bemutatása.
Verzió 0.0.112012. május 14.Bátfai
rcssserver-15.0.1.*.tar.bz2 csomagok áttekintése.
Verzió 0.0.122012. július 3.Bátfai
Az Az RCSS MI alapú szimulációs modelljének kiherélése átvétele az angol változat „Emasculation of the AI-based simulation model of RCSS” című fejezete alapján.
Verzió 0.0.142012. július 22.Bátfai
A MINIX kerneles példák.
Verzió 0.0.152012. július 27.Bátfai
A Linux kerneles példák.
Verzió 0.0.162012. július 28.Bátfai
A Berkeley socket API Sys V IPC, IO multiplexeléses példák.
Verzió 0.0.172012. július 29.Bátfai
Javítások.
Verzió 0.0.182012. július 29.Bátfai
A bevezető részek megírása.
Verzió 0.0.192012. július 30.Bátfai
Javítások, a MINIX IPC képek át a DEIK_MIPPOS_2008tavasz_BN_KiemeltOttoni_OR168_38.odt-ból.
Verzió 0.0.202012. július 31.Bátfai
Javítások, Linux kernelmodulos kiegészítés.
Verzió 0.0.212012. július 31.Bátfai
A Berkeley socket API Sys V IPC, IO multiplexeléses példa folytatása.
Verzió 0.0.222012. augusztus 2.Bátfai
A hálózati rész kiegészítése.
Verzió 0.0.232012. augusztus 3.Bátfai
A hálózati rész tesztelése egy gépen (localhost), illetve két gépen.
Verzió 0.0.242012. augusztus 4.Bátfai
Kulcsszavak átnézése az első 3 esettanulmányban. (Átléptem a vállalt leütésszámot, most már: 339.717)
Verzió 0.0.252012. augusztus 5.Bátfai
A hálózati és a Hetedik szemes példa a virtuális gépen.
Verzió 0.0.262012. augusztus 6.Bátfai
Hiányzó mottók keresése, javítások.
Verzió 0.0.272012. augusztus 7.Bátfai
A Hetedik szem valódi mobilon fotók készítése.
Verzió 0.0.282012. augusztus 8.Bátfai
A laborvédési feladat (félév közepe), majd a tudatminták összehasonlításának bemutatása.
Verzió 0.0.292012. augusztus 9.Bátfai
Linuxos rész kiegészítése.
Verzió 0.0.302012. augusztus 10.Bátfai
Python és AspectJ részek.
Verzió 0.0.322012. augusztus 12.Bátfai
Könyves Kálmán rész kiegészítése.
Verzió 0.0.332012. augusztus 16.Bátfai
A Debrecen Great Forest FC++ bemutatása.
Verzió 0.0.342012. augusztus 17.Bátfai
A Debrecen Deep Forest FC++ bemutatása.
Verzió 0.0.352012. augusztus 19.Bátfai
A Debrecen Round Forest FC++ bemutatása.
Verzió 0.0.362012. augusztus 23.Bátfai
Az online coach/team_graphic a Debrecen Round Forest FC++ csapatba, a Debrecen Woodland FC++ és a Debrecen Murmurs FC++ csapatnevek megemlítése.
Verzió 0.0.372012. augusztus 26.Bátfai
Hiányzó idézetek, AspectJ rész kiegészítése. Leütések száma = 557821, DocBook mélység (különböző féle tagok száma) = 165.
Verzió 0.0.382012. szeptember 16.Bátfai
A jegyzet környezetében lévő PARP könyvhöz hangolás.
Verzió 0.0.392012. október 6.Bátfai
Nyomtatás, átolvasás.
Verzió 0.0.402012. október 7.Bátfai
Nyelvi hibák javítása.
Verzió 0.0.412012. október 10.Bátfai
Pályázat azonosítójának, a Magyarország megújul és az Új Széchenyi Terv logójának beillesztése.
Verzió 0.0.422012. november 4.Bátfai
A szakmai lektor észrevételeinek, javításainak átvezetése, véleményének beillesztése.
Verzió 0.1.02013. január 22.Bátfai
A pályázati adminisztrációtól (2012.dec.13) kapott új logókkal felülírva a régiek; illetve apró javítások.
Verzió 0.1.12014. január 28.Bátfai
Javítások.
Verzió 0.1.22014. február 7.Bátfai
A jegyzet környezetének frissítése a Debreceni Egyetem programozói évkönyvével.
Verzió 0.1.32014. február 13.Bátfai
Javítások.
Verzió 0.1.4-0.1.92014. február 15.Bátfai
Javítások és a meta könyvtárban az xml fájlok frissítése, a video könyvtárba egy README elhelyezése, amely listázza a YouTube-ra feltöltött filmeket (nehézkes volt a fájlrendszerből kezelni, jóval könnyebb a YouTube-ra feltenni és oda linkelni rá).
Verzió 0.2.0Bátfai
A videók ne csak a YouTube-ról, hanem a lokális állományrendszerből is.

Ajánlás

Ezt a jegyzetet a közösségi portálos ismerőseimnek ajánlom.

Tartalom

Előszó
1. Bevezetés
A Programozó Páternoszter
A jegyzetről
A jegyzet környezete
A jegyzet kurzusai
A szerzőről
A szakmai lektorról
I. C esettanulmányok
2. MINIX kernel hacking: a mikrokernel IPC-jének elemzése
Bevezetés: a MINIX mint az open source detonátor
A MINIX mikrokernel és a MINIX IPC
A MINIX3 rendszer telepítése
Telepítés a VirtualBox-ban
Az első MINIX kernel hacking
A MINIX3 mikrokernel IPC-jének elemzése
A feladat megoldása a PCB módosításával
A feladat megoldása új rendszerhívás bevezetésével
3. GNU/Linux kernel hacking: bejegyzés a /proc virtuális fájlrendszerbe
A Linux monolitikus kernele
Kernelfordítás
Kernelmodulok
Bejegyzés a /proc virtuális fájlrendszerbe
A modul a VirtualBox-ban
4. Berkeley socket API, Sys V IPC, IO multiplexelés
Berkeley socket API, Sys V IPC, IO multiplexelés
Hálózati vegyérték
A kliens oldal
A szerver oldal
A kiens-szerver példa tesztelése
II. C++ esettanulmányok
5. 2D RCSS robotfoci
Robotfoci
A világklasszis japán Agent2D csapat
Az rcssserver/sampleclient telepítése forrásból
A sampleclient/client.cpp tárgyalása
A sampleclient/client.cpp módosítása
Egy teljesen „from scratch” saját csapat váza
6. A 2D RCSS protokolljának felpuhítása
Az RCSS MI alapú szimulációs modelljének kiherélése
Egy új pozícionáló parancs bevezetése az RCSS kliens protokollhoz
A Debrecen Great Forest FC++
A bedobás megvalósítása
A felállások bevezetése
A Debrecen Deep Forest FC++
A Debrecen Deep Forest FC++ értékelése
A Debrecen Round Forest FC++
A „lájtosított” szerver kapcsolói
Az online coach bevezetése
III. Java esettanulmányok
7. Közösségi tudat-háló
A Hetedik Szem
A példa pöccre indul
A Hetedik Szem működése és a közösségi tudat-háló
IV. Python esettanulmányok
8. Egy virtuális könyvtáros
Könyves Kálmán
Az AIML fájlok szerkezete
V. AspectJ esettanulmányok
9. Van-e az OO programoknak anyanyelvük?
Egy analitikai szövés
Egy gyakorlati szövés
Irodalomjegyzék

Az ábrák listája

2.1. A SEND és a RECEIVE üzenetküldési primitívek.
2.2. A küldő blokkolódik, amíg nem áll készen a fogadó.
2.3. Az üzenetet váró blokkolódik, amíg üzenet nem érkezik.
2.4. A virtuális MINIX nevének megadása.
2.5. A virtuális MINIX indítása.
2.6. A telepítés indítása.
2.7. A rendszer betöltése lemezről.
2.8. A „kulcscsomó az enterre” telepítés.
2.9. Immár lemezről indul a MINIX.
2.10. A kernel/main.c forrásállomány nyitása a vi-al.
2.11. A kernel/main.c forrásállomány announce() függvényének bővítése.
2.12. A most lefordított kernel bootolása.
2.13. Üzenet a kernelből.
2.14. A csomagkezelés első lépése.
2.15. Az NR_PROCS állítása.
2.16. A PCB és a processztábla méretének kiíratása.
2.17. Olvassuk le a PCB és a processztábla méretét!
2.18. A MINIX PCB bővítése.
2.19. Az üzenetek számlálása.
2.20. A kernel processz táblázata.
2.21. A nyomkövető függvény funkció billentyűhöz kötése.
2.22. Az uzenetszam_dmp függvény eleje.
2.23. Az uzenetszam_dmp függvény közepe.
2.24. Az uzenetszam_dmp függvény vége.
2.25. Az uzenetszam_dmp függvény prototípusa.
2.26. Az „IPC mátrix” első megoldásbeli megjelenítése.
2.27. A nem üres slotok listája a processztáblából.
2.28. Tömb az „IPC mátrix” tárolásához.
2.29. Az uzenetszam tömb megfelelő elemének inkrementálása.
2.30. Az uzenetszam tömb a szerver szinten.
2.31. A létrehozandó sys_getmatrix rendszerhívás használata.
2.32. A mátrix kiíratása.
2.33. A sys_getmatrix rendszerhívás hívásának makrója.
2.34. A GET_MATRIX megadása.
2.35. A do_getinfo rendszerhívás kiegészítése.
2.36. Az „IPC mátrix” második megoldásbeli megjelenítése.
3.1. A kernel beszerzése.
3.2. A .config összeállítása a make menuconfig-al.
3.3. A Kernel .config support beállítása.
3.4. A kernel fordításának indítása.
3.5. A kernel telepítésének indítása.
3.6. Az éppen futó kernel verziója.
3.7. A GRUB menüje az újraindítás után.
3.8. Az új kernel verziója.
3.9. Az Enable loadable modul support kikapcsolása.
3.10. A vmlinuz fájlok mérete.
3.11. A PCB-k láncolása a Linux kernelben.
4.1. A kliens és a szerver fordítása.
4.2. A kliens és a szerver futtatása.
4.3. Az eredmények ellenőrzése.
5.1. Az rcssmonitor program.
5.2. Az 1-es ágens helyezkedjen a balhátvéd pozíciójába!
5.3. Öt fokonként forgás az rcssmonitor programban.
5.4. Öt fokonként forgás a soccerwindow2 programban.
5.5. A Bolyongó SE a pályán a középkezdés előtt.
5.6. A Bolyongó SE a pályán a középkezdés után.
5.7. A Bolyongó SE a pályán a középkezdés előtt a Batfai_Prog1 virtuális gépen.
5.8. A Bolyongó SE a pályán a középkezdés után a Batfai_Prog1 virtuális gépen.
5.9. A Bolyongó FC++ felállása a középkezdésnél.
5.10. A Bolyongó FC++ : Bolyongó FC++ 13:1 (6:1) mérkőzés egy (nem ön)gólja.
5.11. A Debreceni Lobogó FC++ helymeghatározásának tesztelése.
5.12. A Debreceni Lobogó FC++ ágensének valódi pozíciója.
5.13. A Debreceni Lobogó FC++ helymeghatározásának tesztelése más zászlókra.
5.14. A Debreceni Lobogó FC++ ágensének valódi pozíciója.
5.15. 7 passes to 1.
5.16. 1129.
5.17. 1130.
5.18. 1131.
5.19. 1132.
5.20. 1133.
5.21. 1134.
5.22. 1135.
5.23. 1136.
5.24. 1137.
5.25. 1138.
5.26. 1139.
5.27. 1140.
6.1. A LightFC++ csapat középkezdéskori felállása a move parancs használatával.
6.2. A kirúgás után a játékosok a pos parancs használatával mozognak.
6.3. A bedobás tesztelése: a 11-es játékossal kirúgatjuk a labdát
6.4. A bedobás tesztelése: a 4-es játékos megindul a labda felé.
6.5. A bedobás tesztelése: közelebb 30 méternél.
6.6. A bedobás tesztelése: a 4-es odaért a labdához.
6.7. A bedobás tesztelése: 4-es a 3-asnak.
6.8. A bedobás tesztelése: a dobás úton a 3-as játékos felé.
6.9. A 4-3-3 felállás bemutatása.
6.10. Felállás szögletnél.
6.11. A 3-as és 6-os játékosnak mennie kellene a labdára.
6.12. Az ellenfél játékosa szerzi meg a labdát.
6.13. A soccerwindow2 nyomkövető információinak részlete.
6.14. A csapat logója a soccerwindow2 és az rcssmonitor megjelenítőkben.
7.1. A Sun Java Wireless Toolkit for CLDC 2.5.2 ML telepítése.
7.2. A Maven forrásprojekt Hetedik Szem tárgyának előállítása.
7.3. A Hetedik Szem JAD-jának átadása a szimulátornak.
7.4. A Hetedik Szem indítása a szimulátorban.
7.5. A Hetedik Szem futása a szimulátorban.
7.6. A Hetedik Szem indító ikonja.
7.7. A Hetedik Szem splash képernyője.
7.8. A Hetedik Szem tartalmi főmenüje.
7.9. Az LZW fa kézzel.

A táblázatok listája

5.1. Pillanatképek a kilogolt 7 passes to 1 üzenet környékéről

A példák listája

2.1. Processzek száma
2.2. PCB mérete
2.3. Nem üres slotok
3.1. A PCB tagjai
3.2. Játék a current makróval
3.3. Kézi memória dump rajzolása
4.1. 30 processz - egy rajzolós feladat papírra, ceruzára
5.1. A könnyebb záróvédési feladat
5.2. A Mátrix lelövése, avagy ismerkedés a forrással
5.3. Csapatnév parancssorból
5.4. Vonal feladat
5.5. Közös ős feladat
5.6. Távolsághoz-erő feladat
5.7. Bedobás és szöglet feladat
6.1. Védő a kapufához, egy támadó előre kontrához
6.2. Szabadrúgás
6.3. Ne passzoljon hátrafelé!
6.4. Kell egy jó kezdés!
6.5. Készíts saját XPM csapatlogót!
7.1. A Hetedik Szem felélesztése
7.2. Közösségi tudat-háló kliens oldal
7.3. Közösségi tudat-háló szerver oldal
7.4. Közösségi tudat-háló közösségi feladata
7.5. Tudat-háló alapú közösségi portál feladata
7.6. A program funkcionális részének értelmező olvasása, azaz rajzold meg kézzel az LZW fát
8.1. Könyves Kálmán IRC-n a Program W-vel
8.2. Könyves Kálmán a weben a Program D-vel
8.3. Saját csevegőrobot
9.1. Az analitikus szövés beleszövése az előző rész csevegőjébe
9.2. Nagytestvér, szőjj bele egy aspektust a csapatomba!