Időjárás Budapesten

Talált időjárás Widget

A Widgets constructor – OpenWeatherMap weblapon nézelődve megtetszett ez a Widget:

aktuális időjárás Budapest

Főleg az volt nagyon szimpatikus, hogy milyen egyszerűen beépíthető mindez egy webes/mobil felületre az alábbi JavaScript forráskóddal:

Mindössze egy regisztráció szükséges hozzá a Members OpenWeatherMap weboldalon a fenti forráskódba behelyettesítendő API kódért. Az egy sorba ömlesztve kapott forráskódot a Javascript Viewer, Beautifier and Formatter, Editor weblapon formáztam könnyen olvashatóvá.

Saját fejlesztés

Kedvet kaptam ezt a funkcionalitást összerakni úgy, hogy a hálózati kommunikációra helyeztem a hangsúlyt.
A nézet réteg ezért igen egyszerű, Java swing felületen, JFrame form-ként varázsolt az alábbiak szerint, mindössze JPanel és JLabel vizuális komponensekből áll. Egy JLabel osztályú komponens képes szöveg és/vagy kép megjelenítésére is.

aktuális időjárás Budapest

1. feladat

A modell rétegben tárolt település nevét és a szolgáltatás igénybevételéhez szükséges API kulcsot összerakva a Current weather data – OpenWeatherMap oldal specifikációját követve, megkapjuk az adatok lekérdezéséhez szükséges URL-t:

időjárás API URL

2. feladat

A hálózati kapcsolatot felépítve el kell kérni ( GET) az URL-ről kapott JSON formátumú adatot és tárolni kell azt a modellben ( jsonPuffer). A kivételkezelést nem részleteztem, mert most nem ezen van a hangsúly.

A jsonPuffer objektum ezt tartalmazza:

IdojarasJSON

A könnyen átlátható formátumot a JSON FORMATTER & VALIDATOR weblapon állítottam elő.

3. feladat

A JSON-t fel kell dolgozni és a különböző adatokat formázni/konvertálni kell, alkalmazkodva a megjelenítés igényeihez (például hőmérséklet Celsius fokban egész számra kerekítve, szélsebesség egytizedes pontossággal, hónap neve angolul, szükségesek a megfelelő mértékegységek). Külön gondoskodni kell arról, hogy az aktuális időjárást szimbolizáló ikonhoz (képként külön letöltve) is hozzájussunk, mert az API csupán az útvonalát jelentő URL-ből csak a fájl nevét (azonosítóját) adja meg. A kivételkezelést itt sem fejtettem ki.

4. feladat

Végül a modelltől elkért adatokkal frissíteni kell a nézetet.

Az eredmény

IdojarasBudapest


IdojarasLondon

IdojarasHouston

IdojarasTokyo

Aki kedvet kapott, annak többféle API is rendelkezésére áll, dokumentációval és példákkal együtt a https://openweathermap.org/api weboldalon. Kísérletezni bátran szabad, illetve érdemes megnézni és értelmezni azokat az adatokat, amiket JSON formátumban visszakapunk, de ehhez a feladathoz nem volt rájuk szükség.

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

A feladat a Java EE szoftverfejlesztő tanfolyam 9-12. óra: XML feldolgozás és 13-16. óra: JSON feldolgozás alkalmaihoz kapcsolódik.

Denevérek a barlangban

Évekkel ezelőtt hálózatos Java EE esettanulmányt akartunk készíteni Lengyel Borisz kollégával. Ötleteltünk: milyen technológiával és hogyan kommunikáljon egymással a szerver és a kliens(ek). A távoli metódushívás (Remote Method Invocation) mellett döntöttünk és elkészült a denevérek a barlangban projekt, amely evolúciós projektként azóta több változatot is megélt. A felhasználói felület (barlang) betölt néhány képet (denevér kliensek), amelyek a szerver segítségével mozognak.

Ismertetjük a tervezés folyamatát, a kliens és szerver funkcióit részletesen, végül ötleteket adunk a továbbfejlesztésre.

A főbb feladatokat így határoztuk meg:

  • az RMI kommunikációs módszer megismertetése,
  • az RMI szolgáltatás reprezentálása látványos grafikus/swinges klienssel,
  • alternatíva nyújtása a TCP protokoll közvetlenül csatlakozó socket-jére.

Elkészítettük az alábbi osztálydiagramot (persze ez nem az első változat):

Denevérek a barlangban - Osztálydiagram

A szerver és kliens funkcióit megvalósító osztályok/interfészek feladatait így határoztuk meg:

BarlangDenevérInterfész interfész:

  • véletlen 5 és 10 közötti a denevérek száma,
  • méretek a GUI-hoz.

Denevér osztály:

  • megvalósítja az RMI kliens funkciót,
  • JLabel leszármazott, külső képfájlt tölt be ( bat.jpg),
  • egyedi azonosítója van,
  • eldönti mozgásának irányát (4) és léptékét (3), mintha ultrahangot adna,
  • a szerver megadja neki, hogy az új helyre elmozdulhat-e,
  • saját magát képes mozgatni.

Pozíció interfész:

  • öröklődik a java.rmi.Remote interfészből,
  • két távolról hívható metódus fejét tartalmazza.

BarlangSzerver osztály:

  • megvalósítja az RMI szerver funkciót,
  • implementálja a Pozíció interfészt,
  • JFrame leszármazott,
  • figyel arra, hogy a denevérek ne mozogjanak ki a barlangból.

BarlangFelület osztály:

  • JFrame leszármazott,
  • GUI az RMI kliensek megjelenítéséhez.

BarlangSzerverTérkép osztály:

  • JPanel leszármazott,
  • GUI a szerveren a kliensek mozgásának követésére.

Ha futtatjuk az elkészült szerver és kliens programot, akkor ezt láthatjuk:

Denevérek a barlangban - animáció

A fejlesztés és tesztelés közben sok-sok továbbfejlesztési ötletet/javaslatot fogalmaztunk meg:

  • háttérkép a barlangról,
  • a háttérkép megvalósíthat labirintust, koordináta-rendszert,
  • átlátszó illetve egyedi képfájlok a denevéreknek,
  • a denevérek mozgásának tetszőleges iránya (360°),
  • a denevérek mozgásának egyedi léptéke,
  • a denevérek figyeljenek egymásra (ne ütközzenek össze),
  • a denevérek figyeljenek a környezetükre (ne ütközzenek bele sziklákba, cseppkövekbe),
  • a szerver követheti a denevérek útvonalát,
  • a szerver archiválhat, szerializálhat, készíthet statisztikát.

A bejegyzéshez tartozó – több lépésben továbbfejlesztett – forráskódot ILIAS e-learning tananyagban tesszük elérhetővé tanfolyamaink résztvevői számára.

A feladat a Java EE szoftverfejlesztő tanfolyam 21-24. óra: RMI alapú kommunikáció alkalmához kapcsolódik.

Multimédia az oktatásban 2018

NJSZT-MMO logó

NJSZT-MMO logóA Neumann János Számítógép-tudományi Társaság (NJSZT) „Multimédia az oktatásban” Szakosztály által – évente – szervezett XXIV. Multimédia az oktatásban című nemzetközi konferencia a Nemzeti Közszolgálati Egyetemen Államtudományi és Közigazgatási Karán került megrendezésre 2018. május 31. és június 2. között.

A konferencia célja

  • elősegítse az oktatás, a kutatás és a fejlesztés különböző területein dolgozó szakemberek tapasztalatcseréjét és találkozását,
  • bemutatkozási lehetőséget adjon az oktatóknak, kutatóknak és PhD hallgatóknak az új kutatási eredmények széleskörű szakmai megismertetésére és megvitatására előadások, kiállítások és kiadványok segítségével.

19 témakörben hirdették meg az előadóknak a jelentkezési lehetőséget, köztük néhány hozzánk kötődő

  • multimédia alkalmazása,
  • mLearning/eLearning és környezete,
  • felhőalapú szolgáltatások,
  • multimédiafejlesztések, eredmények, alkalmazások.

Letölthető a konferencia programja.

Részt vettünk a konferencián

Már többször is részt vettem előadóként ezen a konferencián szakmai előadással, magyar és/vagy angol nyelvű cikkel, poszterrel az oktatói csapat tagjaival együtt. Ezek a publikációs listámban megtalálhatók.

2018-ban előadást tartottam „Az XML feldolgozás lehetőségeinek összehasonlítása Java nyelven” címmel 25 percben, amely a konferencia „Multimédia és a tudományos kutatás összefonódása” című szekciójába került. Az előadás látványos, összefoglaló, rendszerező jellegű volt és a DOM, SAX, JAXP, JAXB, StAX, JAX-RPC, JAX-WS lehetőségeket/technológiákat/osztálykönyvtárakat érintette. Körülbelül 30-an voltak jelen a szekcióban. Hasznos és kellemes élmény volt találkozni sok-sok régi ismerőssel a konferencián.

Berecz Antónia kolléganő is tartott egy előadást az MMO 2018 konferencián „Oktatási stratégia megvalósítása e-learning modellosztályok segítségével” címmel. Ez az előadás a „Tanulási élmény a XXI. században / Multimédiafejlesztések, eredmények, alkalmazások bemutatása” című szekcióba került, amelynek Antónia szekcióelnöki feladatait is ellátta. Antónia korábbi szakdolgozó hallgatói közül négyen az MMO szakdolgozatversenyen I., II. és két III. helyezést értek el. Ehhez személyesen gratuláltam neki a konferenciát záró eseményén, de most írásban is kifejezem elismerésemet.

Az előadásom prezentációját ILIAS e-learning tananyagban tesszük elérhetővé tanfolyamaink résztvevői számára.

Az előadásom témája a Java EE szoftverfejlesztő tanfolyam 9-12. óra: XML feldolgozás és 13-16. óra: JSON feldolgozás alkalmaihoz kapcsolódik.

Programozási alapok K-MOOC online kurzus az Óbudai Egyetemen

Az Óbudai Egyetemen 2014-ben megalakult a KÁRPÁT-MEDENCEI ONLINE OKTATÁSI CENTRUM (K-MOOC), amelynek egyik fő célja, hogy biztosítson kredittel elismert online oktatási formát a Kárpát-medencei, részben, vagy egészben magyar tannyelvű képzést folytató felsőoktatási intézmények hallgatói számára, illetve egy oktatási formát az élethosszig tartó tanulás megvalósítására. A pályázat célja, hogy a K-MOOC hálózatához csatlakozott felsőoktatási intézmények bekapcsolódjanak a kurzuskészítés és meghirdetés folyamatába. Ezzel gazdagítják a kurzusok tárházát és az elérhető tudományterületeket is. Lehetőséget teremtenek az oktatók számára a meglévő kredit értékű tárgyaik megújítására. A korszerű tananyagok kifejlesztése hozzájárul a képzés színvonalának növeléséhez.

2016 tavaszán az ÓE meghirdette Online kurzusok fejlesztésére magyarországi és határon túli magyar oktatási nyelvű felsőoktatási intézmények oktatói számára című pályázatát.

A pályázat keretében fejlesztett tananyagokaz a K-MOOC keretében publikálták. A tananyagok kidolgozásánál a pályázónak alkalmazói szinten ismernie kellett a kurzust működtető keretrendszert. A Moodle esetében kötelező volt figyelembe venni a Moodle szabványait. A tananyagfejlesztés tevékenységnek minden esetben online elérhető, oktatásban alkalmazható, tantárgykövetelményhez igazodó végtermékkel kell zárulnia. A pályázathoz 4 félévre szóló fenntartási kötelezettség is kötődött. A pályázónak vállalnia kellett, hogy a kurzust 4 oktatási félévig menedzseli a K-MOOC keretében, mialatt a kifejlesztett tananyagot aktualizálni kellett. A kurzus moduljainak minimális száma meghatározott volt, ahogyan egy-egy modul kötelező elemei is: cél, követelmény, időszükséglet, tartalom, önellenőrzés, ellenőrzés.

A Programozási alapok című tananyagommal pályáztam és nyertem.

Az online kurzus célja volt, hogy megismertesse a programozás alapfogalmait, megismertesse az alapvető strukturált és objektumorientált programozási technikákat, megismertesse egy programozási nyelv (Java) és osztálykönyvtár filozófiáját, stabil eligazodást nyújtson különböző feladattípusok, sémák, módszerek, paradigmák és programozási tételek között, tervezési és programozási stílust alakítson ki.

Az online kurzus értékelése így zajlott. Gyakorlati jegyet kellett szerezni a szorgalmi időszakban. Mindig 4 db előre bejelentett számonkérés volt, ebből 2 db elméleti teszt, amely 20-20%-ot jelentett és 2 db kódolási feladat, amely 30-30%-ot jelentett. A tesztkérdések témakörönként véletlenszerű kiválogatása 200-nál több kérdésből álló publikus tesztkérdés-gyűjteményen alapult. A elméleti részek előtt korlátlan számú anomin gyakorlási lehetőség volt adott és a számonkérő alkalmak során egy alkalommal időkorlátosan volt elérhető a teszt. A kódolási feladatok a tantárgyhoz tartozó példatár (200-nál több Java nyelvű forráskód) elemeihez hasonló feladatok voltak, időkorlátosan voltak elkészítendők. A feladatkiírások részletesen specifikáltak voltak, a megoldások konstruktív problémamegoldást igényeltek, értő szövegolvasási készséggel kellett rendelkezni, értelmesen gondolkodni kellett tudni, lépésekre, tanult alapelemekre kellett tudni bontani a tervezés során a feladatot, valamint a megszerzett tudást alkalmazni/átültetni/testre szabni/paraméterezni volt szükséges.

Az online kurzus tematikájának elemei – jelentősen kibővítve – belekerültek a Java SE szoftverfejlesztő tanfolyamunk tematikájába.

Az online kurzus a 2016/2017-es és a 2017/2018-as tanév őszi és tavaszi féléveiben is meghirdetésre került. A pályázathoz kötődő 4 féléves fenntartási kötelezettség a mai nappal lezárult. Sok-sok hallgató felvette a kurzust. Sokan lemorzsolódtak, de sokan teljesítették is. Mindegyik félév szorgalmi időszakában szinte állandó, aktív szakmai párbeszéd folyt az online kurzus fórumain, chat formájában. Döntően önszerveződő volt a kommunikáció, a témák orientálásán túl moderálásra nem volt szükség. Elenyésző volt a „nem találom, hová kell kattintani”, illetve a „lemaradtam a feladat leadási határidejéről, nem-e lehetne-e-e-e még beadni” jellegű üzenetek aránya.

Egy matematika érettségi feladat megoldása programozással 2018

érettségi logó

érettségi logóA 2018-as középszintű matematika érettségi feladatsor 10. feladata inspirált arra, hogy a programozás eszköztárával oldjuk meg ezt a feladatot. Szükséges hozzá néhány programozási tétel: sorozatszámítás, eldöntés, kiválasztás. Érdekes belegondolni, hogy mennyire más lehetne a problémamegoldás, ha programozhatnánk a matematika érettségi vizsgán. A teljes feladatsor a megoldásokkal együtt letölthető az oktatas.hu-ról.

10. feladat

Adja meg az alábbi adathalmaz móduszát, mediánját és terjedelmét!
2; 6; 6; 6; 6; 6; 3; 3; 4; 4; 4; 5; 5; 5; 5

Tervezés

A Java 8 által biztosított újdonságok közül használunk néhányat. Célszerű konstans tömbben tárolni a megadott számsorozatot, ami könnyen konvertálható generikus listába. Alkalmazkodni kell ahhoz, hogy a lista indexelése 0-tól lista.size()-1 -ig értelmezhető. Hasznos, ha a konkrét feladatok helyett általános megoldásokban gondolkodunk és a feladatot 3 metódusra bontjuk, amelyek ellenőrzéseket is végeznek. Például extrém esetek:

  • ha a lista üres, akkor nincs módusz, medián, terjedelem,
  • ha a lista egyetlen elemből áll, akkor a módusz és a medián megegyezik az elemmel, a terjedelem pedig nulla,
  • ha leggyakrabban több különböző szám is előfordul, akkor a módusz ezek közül a (leg)kisebb számot adja vissza.

Elvárjuk, hogy probléma esetén a metódusok dobjanak kivételt. Lényeges, hogy a referencia szerinti paraméterátadás során megváltozna a listában az elemek sorrendje, mert a megoldás igényli az elemek rendezettségét, akkor készüljön másolat az adatszerkezetről, hogy egy-egy részfeladat megoldása nem járjon azzal a mellékhatással, hogy az eredeti adatszerkezetben megváltozik az elemek sorrendje. Felhasználjuk a primitív típusú változók és a csomagolóosztályok közötti konverziós lehetőségeket: autoboxing és unboxing.

Megoldás: módusz

A módusz a lista leggyakoribb értékét adja meg. Másképpen az az érték, amelyik az adatsorban a legtöbbször előfordul.

A modusz() metódus átveszi a szamLista-t és készít róla lista néven egy másolatot, majd utóbbit növekvő sorrendbe rendezi. A másolat a Stream API-val készül el. Ezután csoportváltás algoritmussal feldolgozza a listát. Egy csoportba az azonos számok kerülnek és léptetés közben a belső ciklus megszámolja, hogy hány azonos szám alkotja az aktuális csoportot. Végül összehasonlítás következik a szélsőérték-kiválasztás ( aktSzamDb>maxAktSzamDb) beépítésével.

Megoldás: medián

A medián a lista középső értéke, amelynél az ennél kisebb és nagyobb elemek száma azonos. Rendezett adatsornál páratlan elemszám esetén a középső elem, illetve páros elemszám esetén a két középső elem átlaga.

A median() metódus átveszi a szamLista-t és készít róla lista néven egy másolatot, majd utóbbit növekvő sorrendbe rendezi. Ezután páros elemszám esetén visszaadja a két középső elem átlagát, illetve páratlan elemszám esetén a középső elemet. A metódusnak valós értéket ( double) kell visszaadnia, mert a két középső elem átlaga nem feltétlenül egész szám.

Megoldás: terjedelem

A terjedelem azt mutatja meg, hogy mekkora értékközben ingadoznak a lista elemei. A terjedelem az adatok változékonyságának „legdurvább” jellemzője, ami a szélsőértékek (minimum és maximum) közötti különbséget jelenti.

A terjedelem()  metódus átveszi a szamLista-t paraméterként és visszaadja a két szélsőérték különbségét, amelyek a Collections  osztály metódusaival könnyen előállítható. Persze egyetlen ciklussal is megkaphatnánk a két szélsőértéket.

Eredmény

A vezérlést az alábbi main()  metódus végzi el:

A konzolon az alábbi eredményt kapjuk:

Ajánljuk matematika érettségi feladat címkénket, mert a témában évről-évre blogolunk.

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

A feladat a Java SE szoftverfejlesztő tanfolyam szakmai moduljának 17-28. óra: Objektumorientált programozás alkalmaihoz kötődik.