HTML

Programozó Páternoszter

Ez a Programozó Páternoszter (PP) blogja, a programozásról szól. Aktualitása, hogy a Debreceni Egyetem Informatikai Kara Magasszintű programozási nyelvek 1-2, C++ esattanulmányok, Java esettanulmányok című kurzusainak blogja is egyben.

A vadászat

A Debreceni Egyetem Programozói Évkönyve: az UDPROG projekt. A szakmai fórumunk a Facebook-en. Az új előadások a prezin.
A régi előadások:
Prog1:
1. C bevezetés
2. C tárgyalás
3. C befejezés
4. C a gyakorlatban
5. C++ bevezetés
6. C++ tárgyalás
7. C++ befejezés
8. C++ a gyakorlatban
9. Java platform bevezetés
10. Kvantuminformatikai alg. bev.
Prog2:
1. Java bevezetés
2. Java tárgyalás
3. Java befejezés
4. Java a gyakorlatban
5. Software Engineering bev.
6. Java EE bevezetés
7. AspectJ bevezetés
8. BPMN-BPEL SOA programozás
9. C++ haladó
10. Tensorflow

Kövess engem!

Friss topikok

Linkblog

Ó, mondd, te kit választanál?

2013.09.17. 19:18 nb

"Valakinek holnap le kell győzni a sötétséget
Mondd, te kit választanál?
Valakinek holnap át kell írni a régi meséket
Ó, mondd, te kit választanál?
Valakinek holnap meg kell váltani ezt a világot
Mondd, te kit választanál?"

István a király

Az első laborfeladat (szept. 23): a Prog1-beli első (humán genomos) védési feladatodat írd át C++ nyelvről Java-ra. Ez a bemelegítő feladat demonstrálja, hogy a Java, C# és társai valóban a "homokozó"... Természetesen magam is dobok egy megoldást, de ezt csak akkor nézd meg, ha önállóan nem sikerül!

Itt találod: http://www.inf.unideb.hu/~nbatfai/LZWBinFa.java

Egyszerűen fogtam a védési referencia z3a7.cpp forrást, s az eredeti kommenteket, kódot is meghagyva, egyszeri szekvenciális csipetenkénti átírással Java-ra alakítottam. Miért is és milyen szempontból "homokozó" ez? Lásd még az előadást majd a teljes képhez. de pl. a szereplő

public:
  LZWBinFa ():fa (&gyoker)
  {
  }
   ~LZWBinFa ()
  {
    szabadit (gyoker.egyesGyermek ());
    szabadit (gyoker.nullasGyermek ());
  }

helyett elegendő ennyi:

  public LZWBinFa() {

    fa = gyoker;

  }

hiszen itt nincs a megszokott (tag, referencia, pointer) csak a referencia, de mivel más nincs, így azt sem kell tudni, hogy ez referencia :-) s amit a programozó nem tud, az nem zavarja össze :-)))

20 pont annak az első 3-nak, aki ugyanígy magától átírja (s természetesen ugyanúgy működik), de a kód ne legyen nyilván ugyanaz, mint az enyém, hiszen azért még nem jár egy rúgóra az agyunk, tehát ne másoljuk, az enyémet csak végső elkeseredésben nyissuk ki! További 20 pont annak, aki átírja C#-ba is, s még további 20, aki Python-ba, ez esetekben is kérem a futás riportolását, hogy lássam első szűrőként, hogy ugyanúgy müxik.

Határidő: szept. 23., a labor., ahol ez lesz a hivatalos feladat is a labor-közösségnek.

Ki-kit választana?

Az előadás alatti ismerkedés meggyőzött, hogy a közösség képes lehet egy közös fejlesztést véghezvinni, ennek kapcsán itt az első házi feladat! Az alábbi használati esethez készíts pár Android tabletes, mobilos vagy webes kliens oldali képernyőtervet!

A pártválasztási preferencia (killer :) app használati esete

Intelligens polgári avatár/Pártválasztási preferencia

Ádám belép kedvenc közösségi portáljára és ott kitölt egy rövid kérdőívet, amivel anonim és implicit módon Éva pártválasztási preferenciáját próbálja prediktálni.

Lucifer mobiltelefonján közvetlenül a polgári avatár/pártválasztási preferenciával foglalkozó webes felületét keresi fel és kitölti az Éva pártválasztási preferenciáját implicite vizslató rövid kérdőívet.

Évának fülébe jut ismerősei ténykedése, de ő maga nem is foglalkozik ezzel egészen a választások előestéjéig, amikor is bosszantják a polgári avatár választási szimulációi alapján kialakulni látszó erőviszonyok, ezért most már ő maga is meghajtja a rendszert néhány ismerősének jellemzésével.

Másnap a választások eredménye alapján azt állapíthatjuk meg, hogy a polgári avatár pártválasztási szimulációi az idő előrehaladtával szépen konvergáltak a kapott eredményhez! Véleményünk szerint az intelligens polgári avatár pártválasztási preferencia alkalmazás „killer alkalmazás” lehet.

Határidő: szept. 23., a labor.

Te hogy készíted el?

Nem jönnek tömegesen a kétségbeesett kommentek, hogy keveset tudunk a fejlesztendő alkalmazás koncepciójáról a feladott képernyőskiccekhez... ennek oka az lehet, hogy még nem gondoltatok bele. Íme hát egy kis gondolatébresztő az elinduláshoz:

A legegyszerűbb az lenne, ha a felhasználó anonim maradna, viszont megadná, hogy az X Y nevű Z-beli U utca I házszám alatti lakos az O párt szavazója... Ő, azaz a felhasználó szerint. (Ennél már csak az lehetne kényelmesebb, ha az "Ő" is megadja az adatait...) Hoppá!

Próbáljuk meg hoppá nélkül, mert ez elég aggályosan hangzi, abból a szempontból, hogy börtön lehet a vége egy ilyen rendszernek - gondolom én, persze teljesen laikusként és nyilván azért túlozva-sarkítva. De az bizonyos, hogy ez a koncepció nem lenne elfogadható!

Szóval láthatóan a polgárokat leképezni a szoftverünk "polgári-avatárjába" lehetetlen...

Sokan ezzel lezártnak is tekinthetnék a fejlesztést, de mindig a lehetetlennek tartott dolgok egy elfogadható megoldása adja az innovációt, a felfedezés élményét; így ez a konklúzió minket ne tántorítson egy pillanatra sem. Sokkal inkább lássuk azt, hogy ez a fejlesztés biztosan nem a háromszög területének kiszámítása. De bajban vagyuk nem vitás, gondolkoznunk kell, mert a lehetetlen kifejleszteni érzést csak egy jó ötlettel tudjuk lelkesedésre változtatni, szóval hoppá nélkül:

Lássunk néhány agyvihart a leendő felhasználói követelmények tekintetében:

  1. a felhasználók teljesen anonimek legyenek, tehát a regisztrációkor nem kérünk be sem nevet, sem címet (hanem csak mondjuk egy tetszőleges emailt a sztenderd jelszóváltáshoz; talán egy város belefér, esetleg a fővárosban kerület)
  2. a felhasználók által jellemzett polgárok is teljesen anonimek legyenek, azaz itt se szerepeljen se név, se cím (sőt ide már a város sem kell)
  3. a felhasználók a saját lokális kapcsolati hálójukban (barátok, ellenségek, szomszédok stb.) mérnek
  4. a felhasználói mérés nem más, mint kijelentések tevése, pl. profilokba szervezve
    Exem profil/
    az exem egy "SZABAD SZAVAS SOREDITOR"
    az exem "PÁRT CHOICE" szavazó
    stb.
    Szomszédok profil/
    az alsó szomszédom egy "SZABAD SZAVAS SOREDITOR"
    az alsó szomszédom "PÁRT CHOICE" szavazó
    a bal oldali szomszédom egy "SZABAD SZAVAS SOREDITOR"
    stb.
  5. a fejlesztendő rendszer tudjon olyan térképes riportot generálni, amelyen az országtérképen a város és kerület felbontásban lászik a pártok százalékos megoszlása

Tehát ebben az értelmezésben a feladat kigondolni olyan attributumok összességét, amelyet a felhasználó hajlamos megadni egyrészt, másrészt alkalmasak arra, hogy valamilyen hatásfokkal velük a felhasználók és az általuk jellemzett polgárok megfeleltethetők anonim, de valóságos polgároknak, ami (városonként vett) leképezés alapján már triviálisan használható egy párteloszlás számolásához.

Tehát általánosan a fejlesztendő szoftver feladata a bevitt információkból, pontosabban azok redundanciájából egy "térképet" generálni éppen a redundanciák kiszűrésével (az X  jobb szomszédú bal szomszédja X és tk. az Y is X p valséggel mert ugyanazok a leíró tulajdonságai és...)

Az iménti c. pont lokális hálójának felvitele lesz a laborok első lépése, íme a kapcsolódó feladatok:

yanonymous1.png

az ehhez vezető első lépést vittem be a laborra, ezt nyomkodtuk a kurzus-tableten stb., de patetikusabban: a hallgatóság többségének ez volt az első Java programja! A kép a lokális kapcsolati-háló rajzoló verzióinak második lépését mutatja, amelyet a laboron kértem, hogy ne csak a csomópontokat, hanem az éleket is rajzolja ki. Ezek a lépések növekvő erősorrendben itt találhatóak (nyilván apránként töltöm fel, hogy az igényeseknek megmaradjon a saját megoldás adásának öröme). Az aktuális feladatok a következők:

  • 3. lépés - a tabletet forgatva (emulátorban Ctrl+F11 az AVD ablakban) újraskálázva a koordinátákat helyesen rajzolja ki a gráfot /10 pont/
  • (3.1 lépés - laboron volt, de már elfeleltettem, de még jó, hogy kommenteltek:) a húzásnak legyen nyoma /5 pt/ persze ezt a feature-t a saját app-otok felülírhatja, ha máshogy szervezitek meg a használatát, pl. nem akartok benne ilyen "vonszolást")
  • 4. lépés - húzzon politikai profilt a gráfra: nálam az élek lesznek a "barátok, ellenségek, szomszédok" (pl. csajom, tesóm stb.), a csomópontok pedig a pártpreferencia, első lépésben több profilt egyelőre ne szuszakoljunk be életünk első Android progijába :) /20 pont/
  • 5. lépés - a lehúzott csomópontokat és kapcsolatokat törölje /5 pt/
  • 6. lépés - legyen pár gomb, például "Clear" illetve "Upload" stb. (utóbbi persze csak gomb, egyelőre funkcionalitás nélkül) /15 pt/
  • 7. lépés - a lokális kapcsolati hálót mentse kilépéskor, belépéskor pedig töltse be /20 pt/

Kötelező olvasmány-csipet

Nyékyné Gaizler Judit [et al.], Java 2 : útikalauz programozóknak : 5.0 8. átdolg., bőv. kiad.

könyv első 55 oldalának értő-elolvasását kérem, s ebből írásban mindenki magának jelöljön meg szokásosan 3 olyan részt, ami nem világos, vagy kevésbé világos.

Pár szórakoztató kérdés zárásul:

milyen bitminával kezdődnek a Java bájtkódok? (Jávácska kérdés, csak 12 év alattiaknak, így erre 1 pontot adok, de aki nem tudja, annak -5 pontot :-)

Jöjjenek hát az éles kérdések, az alábbi prezi 17. feladatától van pár szórakoztató kvíz kérdés, kérdésenként adnék 5 pontot a válaszoló első három hallgatónak (figyelem ez most játék, nem laborkártya!) - azaz csak nyerni lehet vele..

47 komment

Közös feladatok, államvizsga beugró

2013.03.10. 13:24 nb

Mi sarkantyúzna, nagy eszmék miatt,
Hogy a muló perc élvéről lemondj?
Míg most, jövőd ködön csillogva át,
Ha percnyi léted súlyától legörnyedsz,
Emel majd a végetlen érzete.
S ha ennek elragadna büszkesége,
Fog korlátozni az arasznyi lét.
És biztosítva áll nagyság, erény.

Madách Imre, Az ember tragédiája, http://mek.oszk.hu/00900/00914/html/madach15.htm

Kedves Hallgatóim, ebben a posztban az ("interprogkurzus") közös feladatsort állítjuk össze. Hogy idővel ezek a feladatok kinövik-e magukat a most (és egy ideje már) tervezett államvizsga beugró programozási feladatoknak, az jelen pillanatban még kérdéses. S könnyen meglehet, hogy az a szintén jobbító motivációjú, ám opponens megközelítés győz, miszerint "scanf háromszög oldalai, printf területe" jellegű feladatok kellenek az államvizsgára. Ez a megközelítés tőlem nagyon távol áll, mert meggyőződésem, hogy a tervezett államvizsga feladatsorokat a külső megfigyelők, például

  • az egyetemet kereső közéspiskolások
  • a K+F feladatokat, vagy egyszerűen szakértést kihelyezni tervező
  • a munkaerőt kereső cégek
  • a támogató vagy versenyben álló társintézmények

a mi interpretációnktól függetlenül a képzésünkkel fognak azonosítani, azzal az egyszerű heurisztikával, hogy "mi ezt tudjuk".

Az imént említett "opponenes példa" programozási nyelvi szempontból véleményem szerint értékelhetetlen (nem a beépített matematika miatt, hiszen egy algoritmusnak egy hatékony megvalósítását, mondjuk párhuzamos környezetben például CUDA-val, vagy OpenMP-vel természetesnek és fontosnak tartom - mint ahogyan vannak is ilyen laborfeladataink -  de ezek az algoritmusok azért túl kell mutassanak a szóban forgó Hérón képlet szimpla alkalmazásán :)

S persze azt se feledjük, hogy a mi megközelítésünkben a hallgató minden esetben internetes gépével dolgozhat (így a prog1 laborvédéseken, szóbeli és írásbeli vizsgán vagy akár a tervezett államvizsga beugrón is). Jó intuitív kép, ha az ideális informatikus mérnök hallgatónkat úgy képzeljük el, hogy a Linuxos laptopja rá van operálva a karjára :)

prog1.png

A kép csak illusztráció.

E kis bevezető után tehát íme a mi kurzusunk hozzájárulása a prog1 közös feladatok halmazához. Vegyük észre, hogy az általunk a közösbe delegált feladatok rendre a  laborfeladataink, a másodiktól labortól az utolsókig. (A feladat nehézségét a kiírás elején tüntetem fel, s egyben most fel is adom ide beküldhető trófeának a feladat tiszta C++* megvalósítását, feladatonként az első 10 hallgatót pontozom).

  1. [7 pont] A Google PageRank algoritmus implementációja C++ nyelven (didaktika: kvázi két egymásba ágyazott for ciklus a mátrix-vektor szorzás megvalósítására). Ezzel a feladattal a 2. laboron foglalkoztunk.
  2. [9 pont] Az EXOR-os titkosítás brute force törése C++ nyelven. Ezzel a feladattal a 3. laboron foglalkoztunk.
  3. [15 pont] Liv, Zempel, Welch algoritmussal bináris szófa építése, a fát jellemző mennyiségek meghatározása a Humán Genom 2. kromoszómájára, C++ nyelven. Ezzel a feladattal a 4-5. laborokon foguk foglalkozni (illetve ez lesz az első laborvédés témája).
  4. [20 pont] A Conway-féle életjáték grafikus megvalósítása Qt C++-ban. (Tavaly itt foglalkoztunk vele, idén majd slot-signal-ra átírni a callback helyett lesz a téma.)
  5. [22 pont] OpenMP alapú Mandelbrot-halmaz nagyító és mentő program írása C++ nyelven. (Tavaly itt foglalkoztunk ezzel.)
  6. [23 pont] POSIX Threads alapú Mandelbrot-halmaz nagyító és mentő program írása C++ nyelven. (Tavaly itt foglalkoztunk ezzel.)
  7. [27 pont] CUDA alapú Mandelbrot-halmaz nagyító és mentő program írása C++ nyelven. (Tavaly ez nem volt, de itt a részletes kidolgozása.)
  8. [35 pont] 2D grafikus megjelenítő írása a Quantum Consciousness Soccer Simulator - kvantum-tudatos foci szimulátorhoz C++ nyelven, Qt-vel.
  9. [70 pont] Saját Lexer osztállyal felszerelt 2D RoboCup Soccer Simulation multiágens robotfoci csapat készítése C++ nyelven. (Kiindulási csapatod lehet például majd a Debrecen Round Forest FC++, természetesen nem ezzel kezdünk a laboron.)
  10. [100 pont] Saját Quantum Consciousness Soccer Simulator multiágens foci és szurkolói csapat készítése C++ nyelven.

A második laborvédés témájaként az utolsó 3 feladat egyike választható (amelyet nyilván egészen más szinten kell ismerni közös feladatként illetve laborvédésként).

*: C++ headerek, malloc->new stb.

127 komment

süti beállítások módosítása