Tankocka – Hozzárendeléses táblázat: Java kollekciók

Folytatjuk Tankockák blog bejegyzés sorozatunkat. A feladatban a Java kollekciók közül a halmaz adatszerkezeteket megvalósító osztályok tulajdonságait kell hozzárendelni a táblázatban. Ez a témakör mindhárom tanfolyamunkhoz kötődik: Java SE szoftverfejlesztő tanfolyam, Java EE szoftverfejlesztő tanfolyam, Java adatbázis-kezelő tanfolyam.

Érdemes ismerni a kollekció keretrendszer további osztályainak/interfészeinek tulajdonságait, viselkedésüket: tömb, lista, sor. (Esetleg egyebeket is: verem, prioritásos sor, többdimenziós adatszerkezetek, kulcs-érték pár alapú elérés, adatszerkezetek egymásba ágyazása). Hasznos tudni, hogy melyiket mikor érdemes vagy éppen nem érdemes használni. Melyik a gyorsabb? Milyen karbantartó műveleteik vannak? Lehetnek-e bennük egyedi elemek, ismétlődések? Mitől függ az elemek sorrendje? Van-e indexe? Hogyan járható be/végig? Biztosít-e iterátoron keresztül hozzáférést az elemekhez? Használható-e többszálú környezetben? Szálbiztos-e az adott kollekció?

Tankocka – Párosítós játék: Programozás Java nyelven

Ez a Tankockák blog bejegyzés sorozatunk első része. A feladatban meg kell találni a 15 db összetartozó párt a játékban. Ez a témakör mindhárom tanfolyamunk tematikájához kötődik: Java SE szoftverfejlesztő tanfolyam, Java EE szoftverfejlesztő tanfolyam, Java adatbázis-kezelő tanfolyam.

Át kell gondolni, hogy mi lehet a kapcsolat a párok elemei között. Előkerülnek adattípusok, vezérlő szerkezetek, adatszerkezetek, csomagok, eseménykezelők, kivételkezelés, fájlformátumok, hálózati kapcsolatok, grafikus komponensek, AWT/swing osztálykönyvtár, illetve adatbázis-kezelés is. Közös jellemzőt/tulajdonságot kell találni. Észre kell venni az összefüggést. Nem kétszer előforduló elemeket kell keresni. Persze nem árt, ha minél kevesebb lépésbe kerül a játék. 😉 A párosítós játék az eltelt időt nem méri. Hajrá!

Programozási Hét 2021 – CodeWeek.eu

Programozási hét CodeWeek.eu

Programozási hét CodeWeek.euAz Európai Programozási Hét idén 2021. október 9-24-ig került megrendezésre. Ez egy önkéntesek által működtetett, alulról szerveződő kezdeményezés. Az önkéntesek saját országukban a Programozási Hét nagyköveteként népszerűsítik a programozást. Ehhez nyílt és ingyenes (online és offline) eseményeket hirdetnek meg a CodeWeek.eu weboldalon.

A Programozási Hét célja

  • a programozással való alkotás megünneplése,
  • az emberek felvértezése képességekkel,
  • az emberek összekapcsolása,
  • még több ember érdeklődésének felkeltése a tudomány, a technológia, a mérnöki ismeretek és a matematika iránt.

Miért jó ez az érdeklődőknek/résztvevőknek?

  • A programozás szórakoztató!
  • Programozni kreatív tevékenység! Az emberiség a kezdetektől fogva alkot: agyagból, kőből, téglából, papírból vagy fából. Manapság programozással is alkotunk.
  • A programozás felvértez! Sokkal többre is képesek vagyunk annál, hogy csak fogyasszuk a digitális tartalmat; programozással sokféle dolgot alkothatunk, és azokat milliók számára elérhetővé tehetjük. Létrehozhatunk weboldalakat, játékokat, irányíthatunk egy számítógépet vagy egy robotot.
  • Értsük meg a világot! Manapság egyre több minden össze van kapcsolva. Ha némi rálátásunk van arra, hogy mi történik a színfalak mögött, akkor a világot is jobban megérthetjük.
  • A programozás megtanítja nekünk a számítógépes gondolkodást, fejleszti a problémamegoldást, kreativitást, kritikus érvelést, analitikus gondolkodást, valamint csapatmunkára késztet.
  • Manapság a munkahelyek 90%-a digitális készségeket, köztük programozási ismereteket követel a munkavállalóktól.

2015-től veszünk részt az esemény szervezésében, programozást népszerűsítő előadások, laborgyakorlatok meghirdetésével és megtartásával. 2020-ben világszerte 80+ országban 3,4 millió érdeklődő résztvevő csatlakozott.

Meghirdetett eseményeink

2021-ben is három it-tanfolyam.hu-s eseményt hirdettünk meg a Programozási Hét 2021 rendezvényen.
Helyszín: 1056 Budapest, Váci utca 47., 3. emelet 309-es terem, megközelítés
Dátum és időpont: 2021. október 16. 9:00-11:55-ig
Az események ingyenesek voltak, de a részvétel előzetes regisztrációhoz kötött.

Rendezvényünk plakátja

A rendezvény jó hangulatban telt, közel 40-en látogattak el hozzánk. Többféle motivációval érkeztek: a fiatalabbak inkább a kíváncsiság, pályaorientáció, első szakma, az idősebbek inkább a karrierváltás miatt. Igazán tartalmasan telt el idén is ez a rendezvényre szánt három óra. Köszönjük mindenkinek, aki részt vett a Programozási hét 2021 – CodeWeek.eu rendezvényünkön. Az előadások prezentációit és a röptében írt forráskódokat tanfolyamaink hallgatói számára – a témához kapcsolódó témakörökhöz, ILIAS-ra feltöltve – tesszük elérhetővé.

[bg_collapse view=”button-orange” color=”#72777c” icon=”arrow” expand_text=”Részletes programot mutat” collapse_text=”Részletes programot elrejt”]9:00-9:55 – Szegedi Kristóf: Játékprogramok nyerő stratégiáinak elemzése
A tudásalapú rendszerek elméleti alapjaihoz tartoznak a mesterséges intelligencia különböző megoldáskereső módszerei, az állapottér-reprezentáció és a klasszikus keresési stratégiák. Egy játék állapotait valahogyan nyilvántartjuk egy adatszerkezetben. Lehet, hogy néhány lépést előre kalkulálunk (kiterjesztünk) és ezek elágazásaiból fát (fa adatszerkezet) tudunk építeni. Ezeket hatékonyan karban kell tartani konstrukciós és szelekciós műveletekkel. Döntéseket is kell hozni. Vajon melyik állapot a jobb, vagy kevésbé rossz, legalább olyan jó mint ahol járunk? Ki kell értékelni és abba az irányba érdemes haladni, amelyben végül a döntések sokasága igazolja és egyben adja a nyerő stratégiát. Ha ez nem megy, akkor még mindig játszhatunk nem vesztő stratégiával, azaz lehet cél a hosszabb játékmenet, vagy akár a döntetlen állapot is. Az előadás ismertet néhány tipikus problémaszituációt, játékteret leképező reprezentációs gráfbeli navigációt és összehasonlít néhány fabejáró/gráfbejáró stratégiát. A program mindhárom Java tanfolyamunk orientáló moduljához kötődik. Előismeretként feltételezünk némi jártasságot a programozási alapismeretek, programozási tételek, ciklusok, metódusok, tömbök témakörökből.

10:00-10:55 – Kaczur Sándor: Java kollekciók hatékonysága
Adott egy ismert algoritmus egy ismert problémára. A gyakorlati bemutató példákat mutat arra, hogy az ismert Java kollekció keretrendszer különböző adatszerkezeteinek funkcionalitását/szolgáltatásait felhasználva mennyire eltérő megoldásokat tudunk készíteni. Mindegyik megoldás ugyanazt az eredményt adja, de alapjaiban más gondolatmenettel születtek. Vajon melyik tekinthető hatékonyabbnak? Mennyi tárhelyet igényelnek? Mennyi idő alatt hajtódnak végre? Mennyire bonyolultak, azaz mennyire könnyű/nehéz megérteni/dokumentálni/elmagyarázni? Előkerülnek különböző Set, Queue, List, Map implementációk, programozási tételek. Amit csak lehet, mérünk, összehasonlítunk, elemzünk. Végül az eredmények alapján javaslatokat adunk: mikor, miért, mit (mit ne), hogyan (hogyan ne) használjunk. A program a Java SE szoftverfejlesztő tanfolyamunk tematikájához kötődik. Előismeretként feltételezünk némi jártasságot a programozási alapismeretek, programozási tételek, ciklusok, metódusok, tömbök, listák, halmazok, lambda kifejezések témakörökből.

11:00-11:55 – Kiss Balázs: Gondolkodjunk logikusan!
Az előadás során áttekintjük az intelligencia, a kreatív problémamegoldó és logikus gondolkodás összefüggéseit és izgalmas feladatokból válogatva közösen megoldunk néhány fejtörő feladatot. Néhány példa: Hány éves a kapitány?CHOO + CHOO = TRAIN, Logikus gondolkodás teszt. A program mindhárom Java tanfolyamunk orientáló moduljához kötődik. Előismeretként feltételezünk némi jártasságot az algoritmusok, programozási alapismeretek, programozási tételek témakörökből.
[/bg_collapse]

 

Keresztrejtvény készítése

Támogatjuk a keresztrejtvények készítését Java programmal. A program grafikus felülete eszköztárból és a keresztrejtvényből áll. Az elkészült programban 10×10-től 15×15-ig beállítható négyzetrács készíthető elő. A tiltott négyzetek száma 15-től 30-ig beállítható. Mivel a tiltott négyzetek helyzete véletlenszerű, így nem biztos, hogy az elsőre jó/szerencsés lesz, ezért újragenerálható a négyzetrács. A program a tipikus követelményeknek megfelelően sorfolytonosan sorszámozza a négyzetrács elemeit, ami alapján megadhatók hozzá a vízszintes és függőleges feladványok. A program az elfogadott négyzetrácsot többféle képformátumban is el tudja menteni.

Az elkészült Java program grafikus felülete

Objektumorientált tervezés

A keresztrejtvény ábrája egy négyzetrácsból áll, amelyben rejtvénymezők helyezkednek el. A rejtvénymezőnek megfelel egy örökítéssel felüldefiniált címkekomponens. A rejtvénymezőt körülveszi egy szegély/keret, tiltott vagy sem állapotától függően fekete vagy fehér a háttérszíne, valamint van a bal felső sarkához igazított kis méretű betűvel nem kötelezően megjeleníthető sorszáma. A tiltott és sorszám tulajdonságait kell tudni beállítani és megkérdezni. Ez a feladatban a RejtvenyMezo POJO. A négyzetrács sorai és oszlopai azonos méretűek (pixelre és darabszámra egyaránt).

Algoritmus a keresztrejtvény sorszámozására

A rejtvénymezők kétdimenziós négyzetes mátrixban/tömbben helyezkednek el. A sorszámozáshoz hasznos, ha a négyzetrácsot körbeveszi egy tiltott rejtvénymezőkből álló keret. Először a rács sorain és oszlopain végighaladó egymásba ágyazott ciklusok létrehozzák a POJO-kat úgy, hogy a négyzetrács keretén lévő rejtvénymezők tiltottak, a többi nem tiltott. Ezután véletlenszerűen ki kell választani – a még nem tiltottak közül – a szükséges mennyiségű tiltott rejtvénymezőt. Ezután sorfolytonosan sorszámozni kell azokat a rejtvénymezőket, ahol vízszintes vagy függőleges feladvány kezdődik. Ehhez is két egymásba ágyazott ciklus kell, amelyben minden még nem tiltott rejtvénymező egyre növekvő sorszámot kap, ha tőle balra tiltott és tőle jobbra nem tiltott rejtvénymező helyezkedik el, de akkor is, ha felette tiltott és alatta nem tiltott rejtvénymező található.

A keresztrejtvényt sorszámozó algoritmus Java megvalósítása

Továbbfejlesztési lehetőségek

  • A feladványok listázhatók és kideríthető a hosszuk.
  • A tiltott rejtvénymezők véletlenszerű elhelyezése helyett lehetne valamilyen szabály, stratégia az egymáshoz való helyzetükre, távolságukra, közvetlen szomszédságukra vonatkozóan. Figyelembe vehetnénk valamilyen szimmetriát is, mintákat, alakzatokat is. Véletlenszerű elhelyezésük nem biztos, hogy mindig jó/szerencsés: például a tiltott rejtvénymezők körbezárhatnak egy nem tiltottat, hosszabb feladványokat nehezebb találni…
  • A Java SE szoftverfejlesztő tanfolyam tematikájához kötődően többféle szótárból, fájlformátumból betölthetünk a feladványokhoz használható, például 7 betűs országnevek, 2 betűs kémiai elemek, női/férfi keresztnevek, autójelek, pénznemek, szinonimák…
  • A Java EE szoftverfejlesztő tanfolyam tematikához kötődően többféle webes adatforrásból, Wikipédiából, szótárból, API hívásokkal letölthetünk a feladványokhoz használható listákat, meghatározásokat, kulcs-érték párokat. A swing-es felületet lecserélhetjük böngészőben futó webes GUI-ra is.
  • A Java adatbázis-kezelő tanfolyam tematikájához kötődően a fentiek kiegészítéseként tervezhetünk és építhetünk helyben tárolt tudástárat, adatbázist, amiből hatékonyan lekérdezve adhatunk feladványokat a keresztrejtvényhez.
  • Miután a fentiek szerint valahogyan – tipikusan visszalépéses algoritmussal – meghatároztuk a feladványokat, a keresztrejtvényből menthetünk kitöltött változatot is.

A bejegyzéshez tartozó teljes forráskódot ILIAS e-learning tananyagban tesszük elérhetővé tanfolyamaink résztvevői számára.

Kutatók éjszakája 2020

Kutatók éjszakája logó

Kutatók éjszakája logóA Kutatók éjszakája nemzetközi rendezvénysorozat 2005-ben indult. Magyarország 2006-ban csatlakozott. Azóta évről-évre egyre több intézmény nyitja meg hazánkban kapuit, szervez érdekes programokat, sok-sok településen, több száz helyszínen, több ezer eseményt meghirdetve sok tízezer érdeklődő/résztvevő látogatónak biztosít tartalmas estét.

Bár a kezdeményezés elsősorban a kutatói pálya népszerűsítését szolgálja, ezért leginkább a tizen- és huszonévesekre számít, az események vonzók és elég érdekesek ahhoz, hogy a kisgyerekektől a legidősebbekig mindenki megtalálja a számára izgalmas programokat. Korábban nagyobb felsőoktatási intézmények és kutatóintézetek szerepeltek döntően, de az utóbbi néhány évben egyre több kisebb intézmény, tehetséggondozással foglalkozó középiskola, cég, egyesület is csatlakozott a rendezvényhez. A Kutatók éjszakája rendezvény minden meghirdetett programja ingyenes.

Rendezvényünk plakátja

Az it-tanfolyam.hu 2020-ban is csatlakozott. Három oktatónk hirdetett öt programot a kutatokejszakaja.hu weblapon. Az eseményekre regisztrálni kellett a weblapon, ami talán szervezőként ránk keresve bizonyult legegyszerűbbnek. A regisztrációs időszak november 16-26-ig tartott és a programjainkra november 27-én 17:40-20:50 óráig került sor. Az élő közvetítés linkjét a programra regisztráltak e-mail-ben megkapták. Néhány online látogatónk jelzéséből megtudtuk, hogy ez a folyamat sajnos nem volt zökkenőmentes. Valószínűleg ennek az lehetett az oka, hogy a központi honlap még azután is engedte a regisztrációt a meghirdetett programokra, miután kiküldtük az élő közvetítés linkjét. Tőlük ezúttal is elnézést kérünk.

Terveztük, hogy az előadások élő közvetítését rögzíteni fogjuk és tanfolyamaink hallgatói számára – a kapcsolódó témakörökhöz, ILIAS-ra feltöltve – elérhetővé tesszük. A központi honlap szervezői a rendezvény előtt néhány órával (pénteken 10 órakor) körlevélben értesítettek mindenkit az alábbiak szerint: „Nem készíthetnek és nem tölthetnek fel semmilyen webhelyre vagy fórumra olyan videót vagy felvételt, amelyen a becsatlakozó látogató felismerhető, azaz az arca látszik, neve felismerhető, hangja nevéhez vagy arcához köthető, azaz a személy azonosítható. Ezért rögzíteni bármit csak úgy szabályos, ha erre külön beszerzik a résztvevők hozzájárulását. Amennyiben rögzítésre sor kerülne, felhívjuk a figyelmet arra is, hogy kiskorúak esetében a törvényes képviselőktől is szükséges a hozzájáruló nyilatkozat beszerzése. Hozzájárulás hiányában a felvétel rögzítése, közlése úgy lehet szabályos, ha azon a résztvevők bármilyen technika segítségével felismerhetetlenek, azaz kitakarásra, anonimizálásra kerülnek.” Sajnos erre nem készültünk fel előre és aznap már nem tudtuk megoldani a hozzájáruló nyilatkozatok beszerzését. Ezért az élő közvetítést nem rögzítettük. Ezt kifejezetten sajnáljuk, hiszen sok-sok előkészítő munkát fektettünk bele és a meghirdetett öt programból három teljesen újonnan összeállított anyag volt, egy korábbit frissítettünk és egy pedig igazi örökzöld téma. Természetesen a prezentációkat elérhetővé tettük tanfolyamaink hallgatói számára.

[bg_collapse view=”button-orange” color=”#72777c” icon=”arrow” expand_text=”Részletes programot mutat” collapse_text=”Részletes programot elrejt”]17:40-18:10 – Kaczur Sándor: Szoftverek architekturális tervezésének szempontjai
Az előadás áttekinti, hogyan válasszunk az ismert/tipikus tervezési minták közül és válaszokat ad a következő kérdésekre. Legalábbis megpróbálja. Mekkora a mozgástér a választás során? Mikor jó az MVC? Mikor kell a Factory? Mikor nem jó a Bridge? Mikor hasznos a Chain-of-responsibility? Hogyan csoportosítsuk az igényeinket? Hogyan osszunk szét jól specifikált funkciókat az alkalmazás rétegei között? És vajon mi a teendő kevésbé körültekintő specifikáció esetén? Milyen alapvető modulok állnak rendelkezésre? Minden célszerű ismerni ahhoz, hogy vállalható döntést tudjunk hozni? Hogyan osszunk szét funkciókat a szerver és a kliens oldal között? Mekkora strukturális redundancia kell/hasznos elosztott alkalmazások esetén? Hogyan értékelhető egy szoftver architekturális terve? Lehet két hasonló? Ha igen, melyik lehet a jobb? Ha nem, miért nem? Hogyan kell(ene) dokumentálni egy szoftver architekturális tervét? A program a Java tanfolyamaink orientáló moduljához kötődik.

18:20-18:50 – Kaczur Sándor: Java kollekciók hatékonysága
Adott egy ismert algoritmus egy ismert problémára. A gyakorlati bemutató példákat mutat arra, hogy az ismert Java kollekció keretrendszer különböző adatszerkezeteinek funkcionalitását/szolgáltatásait felhasználva mennyire eltérő megoldásokat tudunk készíteni. Mindegyik megoldás ugyanazt az eredményt adja, de alapjaiban más gondolatmenettel születtek. Vajon melyik tekinthető hatékonyabbnak? Mennyi tárhelyet igényelnek? Mennyi idő alatt hajtódnak végre? Mennyire bonyolultak, azaz mennyire könnyű/nehéz megérteni/dokumentálni/elmagyarázni? Előkerülnek különböző Set, Queue, List, Map implementációk, programozási tételek. Amit csak lehet, mérünk, összehasonlítunk, elemzünk. Végül az eredmények alapján javaslatokat adunk: mikor, miért, mit (mit ne), hogyan (hogyan ne) használjunk. A program a Java SE szoftverfejlesztő tanfolyamunk tematikájához kötődik.

19:00-19:30 – Kaczur Sándor: Reflexjátékot fejlesztünk
Játékprogramot tervezünk és fejlesztünk, grafikus felülettel. Egy 2×2, 3×3, …, 9×9 négyzetrács alkotja a játékteret, ahol minden négyzet színnel kitöltött. A kitöltés véletlenszerű, de annyiban manipulált, hogy a színek minél különbözőbbek legyenek. A játékmenet során minél gyorsabban ki kell választani a rácsban az egyik négyzetet. Azt, amelyik ugyanolyan színű, mint egy minta. A rács miatt a játék egyre nehezebb. Ez az alapeset, tekintsük ingyenes 1.0-ás verziónak. Ötletelünk a továbbfejlesztési lehetőségek között. Például beépíthetnénk időkorlátot: a teljes játékmenetre globálisat, vagy akár négyzetrácsonként lokálisat is. Csalhatnánk is, akár többféleképpen is. Tűnhetnénk engedékenynek azzal, hogy nem a pontos találatokat számoljuk össze, hanem a hasonló színek is pontot érnek, de arányosan kevesebbet, minél inkább különböznek. Skálázhatjuk a pontszámot, például százalékosan. A megjelenítést GUI kliensprogram végzi, amely a feladatokat a szervertől kapja, amely pontoz is. A program a Java EE szoftverfejlesztő tanfolyamunk tematikájához kötődik.

19:40-20:10 – Szegedi Kristóf: Mihez kezdhetünk a kétszeresen kivételes tanulókkal?
Áttekintjük milyen az, amikor találkozik a tehetség és a deficit. Hiszen a természet általában kompenzál. Hogyan vegyük észre? Hogyan éljünk vele (a lehetőséggel)? Hogyan profitáljunk belőle? Milyen soft skillek fedhetik (legalább részben) el a deficitet? Milyen tréningek javasolhatóak? Hogyan bontakoztatható ki a tehetség? Három főbb kategóriát érint az előadás: Asperger-szindróma, ADHD-szindróma, tanulási zavar. Renzulli, Czeizel, Csíkszentmihályi tehetségmodelljeiből kiindulva fokozatosan közelítünk Bagdy Emőke tehetség kibontakozási koncepciójához. Ismertetünk néhány tipikus, atipikus, kritikus és paradigmatikus esetet. Vajon Einstein, Darwin, Michelangelo, Newton, Hitchcook, Cher, Daryl Hannah, Steve Jobs miben volt tehetséges és deficites? Miben különleges a Pokémon Go megalkotója? Előkerül az Esőember, Dr. Murphy és persze Dr. Sheldon Cooper sem maradhat ki.

20:20-20:50 – Kiss Balázs: Gondolkodjunk logikusan!
Az előadás során áttekintjük az intelligencia, a kreatív problémamegoldó és logikus gondolkodás összefüggéseit és izgalmas feladatokból válogatva közösen megoldunk néhány fejtörő feladatot.
[/bg_collapse]

 

A programjaink népszerűek voltak. A Google Meet online platformon kb. 80-an csatlakoztak. A többség több programon is részt vett. Néhányan kifejezetten egy-egy adott program iránt érdeklődtek. Az online platform sokaknak újdonságot jelentett, de azért a chat felületen élénk kérdezz-felelek párbeszéd zajlott. Ahogyan számítottunk rá, markánsan más célközönséget vonzott az első három és az utolsó kettő programunk. Köszönöm oktató kollégáimnak, hogy örömmel csatlakoztak. Külön köszönöm Hollós Gábor kolléga előkészítő tevékenységét, valamint a rendezvény ideje alatt a technikai ügyelet biztosítását. Mindannyian jól éreztük magunkat. Igazán tartalmas esti programot állítottunk össze. Nem akartunk pusztán előre felvett videókat megosztani. Megvolt a varázsa az élő közvetítésnek, hiszen így sokkal személyesebb és interaktív élményt jelentett. Szívesen emlékszünk majd rá. Jövőre talán már az offline világban is szervezhetünk eseményeket, tarthatunk rendezvényeket.