A következő címkéjű bejegyzések mutatása: tanítás. Összes bejegyzés megjelenítése
A következő címkéjű bejegyzések mutatása: tanítás. Összes bejegyzés megjelenítése

Texture splatting 2020. április 21., kedd - 0:51


A Wikipédia is ír róla egy cikket, képtalálatok közt is sok jó ötletet látni a kifejezésre keresve.

Példa:


Ebbe a problémába én legelőször a Three.js-sel futottam. Más környezetekben már eleve kész megoldás van rá, lásd Unity3D-nél. Rajzolhatsz paint-szerűen 3d-ben, és azonnal tökéletes az egész.

Régen az első ötletem a Metin2 miatt az volt, hogy biztos az egész pálya textúrázása Photoshop-szerűen meg van rajzolva már előre, majd ezt feldarabolták (ez az egész művelet akár automatizált is lehet, a lényeg azon van, hogy előre elkészítve történik a dolog) kis részekre, akárcsak magát a pályát, és egyszerűen betölti a megadott chunk textúráját a megadott területre.

Ez tuti működő, és nagyon CPU-kímélő, cserébe rohadtul helyigényes, de memóriaigényes is. A metinből ki is nézném, de igencsak ott sem ez van a háttérben.

A fenti kép példán jól látszik a lényeg. Adott N textúra, amiket L hosszúságú átmenettel akarunk ellátni egymás felé, bármelyikből bármelyikbe.

A Three.js megoldása shaderes alapú, amit egy tanárEmbör valósított meg példa módon, és tett is közzé, amit köszön neki minden élő, mert remek alap.

Én magam is kísérleteztem vele, az ő megoldásával két nagy gond van (nem is a megoldásával, hisz  csak példaképp hozta létre, nyilván olyan céllal, hogy aki többet akar, az tovább is fejlesztheti).
  1. csak előre meghatározott hosszúságban tud átmenet keletkezni a megoldásával 2 textúra közt
  2. csak egymás után következő textúrák tudnak átmenetelni a másikká.
    • A-ból lehet B, B-ből C, C-ből D, viszont A-ból D nem, stb.
Az meg már csak mellékes, hogy ő magassághoz kötötte a dolgot. Adott Y magasságot elérve van egyik-másik textúra.

De ez a módszere alapja shaderrel.
Lényegében:

A domborzatra, vagy síkra (mindegy) minden textúra ki van rajzolva egyszerre. Ugyanakkor a shader ad egy virtuális magasságot a textúráknak, amik le tudnak menni 0-ra vagy alá is (ekkor meg sem jelennek, hanem egy default fekete kirajzolási szín veszi át a helyüket, amit a textúrák egyébként ki tudnak takarni). És tulajdonképp a trükk annyi, hogy bizonyos magasságtól indulva hullámszerűen az egyik textúra elkezd kiemelkedni 1 irányába, míg az épp látszódó elsüllyed 0 felé, és idővel helyetcserélnek, így képezve adott pontokon az átmenetet. És ugyanez megy végbe más-más Y magasságoknál a textúrákon.

És hogy lehetne ezt javítani?

Mármint olyan értelemben, hogy bármelyik textúra bármelyikbe át tudjon menni, és akár változtatható hosszúságú átmenettel is?

A netes leírások alapján sokan színhez kötik a textúrát egy térképen, mint fenti képen látható. Így alapvetően 3 vagy 4 szín jelöl 3/4 textúrát, és ezek egymásba kábé bármilyen átmenettel át tudnak menni. A hiba ezzel kettő: a textúrák mennyisége, és hogy egy majdnem real méretarányú textúrára valósítják meg. És pont a spórolás a lényege a dolognak. Szóval faja, hogy egy ekkora képen több tíz pixel átmenetével szép átmenetet képeznek a textúrák közt is, de egy játékbéli térképen majd 4-5 pixel is soknak fog hatni, több métert fed át a játékon belül (már amennyiben a Metinhez hasonlóan kb 300-500 pixeles térképek vannak, amik több száz métert fednek le a játékon belül).

Megoldás röviden: az RGB minden betűje. Tulajdonképp ugyanezt megcsinálva, de mondjuk jól kihasználva a színeket egy PNG képpel már 256 textúrát tárolhatunk akár (trükközéssel még többet is). Hogyan? (És itt jön a lényeg, ami előtt rizsázok mióta.) Mondjuk a red sáv jelöli a kép pixelében az original textúrát (hogy miből induljon az átmenet), a zöld szín a "melyikké" textúra indexét, és a kék szín utolsó helyen pedig az átmenet állapotát százalékban. Ennyi. Már csak meg kéne valósítani, hogy a shaderes megoldással ez király legyen, és ez némi gondolkodást igényel majd, meg számítást.
Magát a kis térképet, amin ez a miből, mibe és hány% típusúan, a pixelben lévő színek összetételét meg vizualizálhatjuk is egyből 3d-ben, akár egy Unity-szerű painttal (ilyet is akarok), és végül a memóriában tárolt bittérkép alapján menthet egy PNG képet a megtervezett térképről, így már szinte tényleg semmi munka nem lesz vele, és teljesen Unity hatást kapunk készítés közben és használati performancia közben is.

Idővel majd megvalósítom, már egyszer elkezdtem, félig kész is volt, de félbehagytam, és törölték a tárhelyem is, talán viszont volt mentés /de akkor is 0-ról csinálom újra, tökmindegy/.

Ezt a bejegyzést majd folytatom, ha lesz kedvem a leírtakat is megvalósítani.

Időkép-kamera 2020. január 31., péntek - 2:12


Hát röviden, bátyám ötlete volt, de király ötlet. Mármint az, hogy kell kamera, IP kamera, amit kirakhatunk az időképre. Neki már volt egy közvetítése, androidos, régi, már nem használt telefonról az utcánkra, ez így egy szintlépés volt tulajdonképp.

Most a történetet hosszasan nem írnám le. Itt érhető el az új kamerája egyébként.

Egyébként innen rendeltük, és erről a kameráról van szó, amihez még ezt a csomagot kell hozzácsapni a kosárba.

Megjegyzendő, hogy pár Ft-tal drágábban egészen jobb minőségű kamerák is kaphatóak ugyanitt, szóval ha ilyesmit fontolgatsz, nézd át az oldalt!

A Google szemszögéből bemutatva; kábé erre és néz, és innen, az én kamerám.

Ha pont ezt a kamerát vennéd meg, akkor a következő lépéseket kell megtenni:
  • bedugod a kamerát a laptopodba/PC-dbe egy UTP kábellel
  • bedugod az adapterét az áramforrásba
  • nyitsz egy Internet Explorer 8+-t, mivel a kezelőfelülete ActiveX-et használ, így ez megkerülhetetlen :(
  • valószínűnek tartom, hogy WIN10 van a gépeden, így:
    • a tálcán jobb-lent, ahol a kábeles/wifi jelecske van, azon jobb kattintás
    • hálózati beállítások, vagy ilyesmi
    • bal menüben kiválasztod az Ethernet pontot
    • rányomsz a csatlakoztatott lehetőségre
    • legörgetsz, az alján az IP-beállításoknál a szerkesztésre nyomsz
    • átállítod a DHCP-t kézire, lenyomod az IPv4-et, és valami olyat produkálsz, mint a lista alatti képen van
      • itt annyi a lényeg, hogy legyél közös alhálón a kamerával, ami default 0.168 végződésű, vagy 1.168, az utolsó előtti számjegyed legyen ugyanaz
  • megnyitod az IE-ben a 192.168.0.168 címet (ha jó rémlik, ez volt a default, ha mégsem, akkor 1.168 a vége)

Ott pedig be tudsz lépni az alapértelmezett adatokkal, valami papíron tuti le van írva, vagy elsőre jelszót kell megadnod, ilyesmi.

Tök jó, hogy sok dolgot be lehet rajta állítani, először nem árt az IP címet átállítani arra, amit otthon amúgy is használsz, és ezután visszaállíthatod a saját IP-det is DHCP-re. Meg igazából ezután átdughatod a kábelt a gépedből a routerbe, úgyis eléred otthonról már a kamerát, IE-ből.

Valójában ez így már kész is, egy DDNS-t érdemes beállítani. A kamera beállításai közt tuti van ilyesmi, javasol is egyet, automatikusan frissíti ő magát a kábeles neten. Érdemes még kiszedni a videó-megtekintéshez való autentikációt, hogy a felvételt /ha nyilvánosnak van úgyis szánva/ azonnal megnyissa bármi, jelszó és egyéb nélkül.

Egy azonnali pillanatképet elérhetsz a kamerás cuccod elérhetőségén http-vel kezdve, majd útvonal szerint "/snap.jpg".
// ez persze eltérhet kameránként, de én ugye ezt a leírást ahhoz írom, amit mi rendeltünk.

No hát no, az Időképnek van saját leírása több is az oldalon, hogy oldd meg a képet.

Ehhez persze elengedhetetlen, hogy meg kell osztanod a kamera-eszközöd belső IP-jéhez a 80-as és az 554-es portot (az utóbbit csak akkor, ha live videót is akarsz engedélyezni). A port forwardnak könnyű utánajárni, én most Digi-s vagyok; nincs lehetőség port range megadására első ránézésre, DE a trükk az, hogy állíts be appnak bármit, akkor megjelenik a portszámok inputja, ahova írhatod őket, és utána akár vissza is állíthatod egyedire amúgy a radiobuttont.. (Mindegy, ez csak Digi-s extra help.)

De röviden a kamera beállításoknál az oldalukon megadod képletöltési linknek ezt a snap.jpg-t, live-nak meg megadhatod az rtsp://IPCIMED:554 címet nyugodt szívvel.
az IPCIMED helyére természetesen a külsőleg elérhető IPv4 címed kell, de persze érdemes DDNS-sel folyton frissítve tartani, és akkor az állandó átirányítási cím kell oda.

Ezzel valójában kész is, ezután automatikusan működik az időkép kamerád.

Az enyém itt érhető el egyébként:
https://www.idokep.hu/webkamera/eprog

Raknék ide egy pillanatképet róla, de ugye a HTTPS oldal nem szereti a HTTP contentet, és így hajnal 2-kor lusta vagyok valamivel leparseolni a képet, szóval majd máskor. Vagy kattints ide..

Végezetül egy csodás kép, hogy is sikerült elhelyezni a kamerát az erkélyen:


Edit:
Az első nap körülbelül 500 megtekintés volt a kamerán, és egyből kikerült ebbe a cikkbe.

Edit (2021-04-24):
Április elsején valószínűleg új szabályt hozott az Időkép, minimum méretre korlátozta a kameraképet, azalattiakat nem jelenít meg. Muszáj volt alkalmazkodni most már, hiába csinál kis snapshotot a 2 megapixeles kamera az 1-hez képest. Így most megoldódott az is, ugyanis most már a stream méretével megegyező képeket mentek. Röviden:



SOP és AJAX 2018. november 27., kedd - 10:02


Sokat SOPtam már a Same-origin policy miatt.

Röviden ez egy olyan biztonsági eljárás a böngészőkben, alapértelmezetten, logikus módon bekapcsolva, hogy ha valami komolyabb dolog történik egy másik host közbenjárásával, akkor azt megtiltja a böngésző - így elkerülve azt, hogy pl. egy weblapon lévő képet átemeljünk a canvasunkra, mert hátha az nem is kép, hanem vírus. Vagy mai esetemben, hogy jquery ajax-szal POST kérést küldjek egy PHP-nak, ami másik webcímen van.

Ugyanis olyan helyzet adódott, hogy kéne egy rendszert írnom, ami automatizálja (egy kattintásra rövidít) egy megszokott adatmentési folyamatot, amiben szerepel két kép elmentése, egy email elmentése, és pár fájl/mappa létrehozása/átnevezése. Ehhez egy weblap adatbázisára van szükség, és sajnos nem igazán tudtam hozzáférni. Szóval a terv az volt, hogy egy kattintásra megnyílik az adatbázis adott sorának típusával GET-ben egy oldal, ami feldolgozza az összes adatot a sorból, és megfelelő formátumban. És a célom az volt, hogy ezeket az adatokat, többek közt a két kép URL-jét is GET formába szerializálva a linkbe építem, ami egy localhostos oldalra irányít át. Majd a localhoston lévő kis PHP progi a többit elintézi, hisz az már a saját gépen tud mappákat nyitogatni, létrehozni, átnevezni fájlokat, meg a képeket letölteni, pl. cURL hívással.

Persze a cURL-lal is szívtam, mire sikerült megkerülnöm az SSL-t..

$ch = curl_init('https://weboldal.hu/image.jpg'); $fp = fopen('localhostom/letoltottkep.jpg', 'wb'); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_FILE, $fp); curl_setopt($ch, CURLOPT_HEADER, 0); curl_exec($ch); curl_close($ch); fclose($fp);
De ugye a GET hátránya, hogy nem nagyon lehet végtelen hosszúságú stringet továbbítani, ezért POST-tal kellett volna megoldani, viszont nem voltam biztos benne, hogy lehetséges, hogy egy random URL-ről JS-ből küldve POST kérés lefusson pl. a localhoston. Jól működött a dolog, a teszt alatt kiderült, hogy megfelelő engedélyekkel még fordítva is megy. Localhost POST AJAX megkapta az eredményt a webre feltöltött PHP-tól. Csak a headerrel keleltt kicsit bénázni. Örülök. :D

header("Access-Control-Allow-Origin: *"); header('Access-Control-Allow-Credentials: false'); header("Access-Control-Allow-Methods: GET, POST, OPTIONS"); header('Content-Type: text/html; charset=utf-8');
Gondoltam leírom, hátha más is szenved, vagy csak nem volt ilyesmiben biztos /mint én is/, de érdekelné.

Helpdesk mode on 2018. szeptember 8., szombat - 14:56


A nagynéném rám írt, hogy kéne infós segítség neki. Van egy notebook, amit kaptak, de nem tudnak belépni rá, mert jelszót kér, amit nem ismernek.

Már ekkor gondoltam, hogy itt valami nagy baj készül. Az informatikusok rémálma. Telefonos segélynyújtás. Egyébként Messengeren ment a diskurzus. Nem kezdtem volna bele, ha nem rokon. Ráadásul nem is infós.

Szóval jött a kérdés, hogy "melyik gombot nyomjam meg?". Javasoltam pl. ezt a leírást, noha angol.
Egyébként még személyesen, ha ott lettem volna, sem lettem volna biztos, hogy sikerülhet a dolog. De nézzük, hátha.. Elsőre azt javasoltam, hogy az újratelepítés a leggyorsabb módszer, és van hozzá eszközöm is.

Hamar kiderült pár dolog, pl. hogy épp a világ másik felén vannak, így a telepítés ugrott. Végképp nem reménykedtem, és gondoltam, hogy valami hosszú dolog következik. Meg az is, hogy a laptopon Windows XP van, ami viszont visszaadott egy kis hitet.

Mindegy, sikerült eljutni az F8 gombbal odáig, hogy bejöjjön a boot választó menü. Én itt már lelkileg tapsoltam, már láttam a reményt.


Csökkentett mód parancssorral működött, a Rendszergazda opció megjelent, és jelszót sem kért. Hihetetlen szerencse.

Már csak a felhasználók listája kellett, meg azok jelszavának átírása.. a net user parancs szerencsére létezik..

Kicsit fura, hogy volt egy Vendég nevű fiók, meg egy xy is.

Nem baj, nem fukarkodtunk. Sikerült mindkettőre beírni egy jelszócserét, amire a cmd azt adta válaszul, hogy sikeres művelet. Én még akkor is kételkedtem, kizártnak tűnt, hogy tényleg csak ennyi, és sikerült. De sikerült, valóban. Újraindították a gépet, és az 123456 jelszóra be tudtak lépni.

Ugyan ezt a sztorit leírtam vagy 2 ismerősömnek, hasonlóképp, de tényleg hősnek érzem magam ezek után.



Eloszlás (distribution) #matek 2018. július 14., szombat - 1:31


Elkezdtem csinálni egy "fél órás" projektet. Egy Cleverbothoz hasonló csetbotot. Alapesetben ezt közel sem fél óra lenne megcsinálni, főleg, ha csicsázzuk a dolgot mindenféle extra dologgal, elágazásokkal, vizsgálatokkal, fene tudja. Alapvetően az egyszerűsége annyiban van egy YAML struktúrát használó bothoz képest (vagy valami ilyen, már nem emlékszek, bátyám foglalkozott ezzel többet), hogy nem kell előre megírni ötmillió beszélgetést, hogy értelmesnek látszódjon, hanem magától tanul.

Ezt majd részletezem másik bejegyzésben, viszont szükségem volt egy normál eloszláshoz hasonló véletlenszerű generálásra. A chatbothoz. De nem találtam, vagy nem értelmeset, vagy magas gépigényűt, stb. Miért?

Mármint, minek ez nekem, meg mi ez? Egyszerű. Igazából egy súlyozott véletlenszerűen választó szkript kellett nekem. Példa: a "hogy vagy?" kérdésre tegyük fel, hogy 100-ból 70 ember azt írja, hogy "jól.", 20 azt, hogy "megvagyok.", és 10 azt, hogy "rosszul". Ez százalékban is pont így jön ki.

Az én tanuló chatbotom az ugyanolyan kérdésre ugyanolyan adott válaszokat nem jegyzi fel magának többször, helyette egy számlálót növel mindössze. Ez a számláló mutatja, hogy mire mennyiszer mondták azt, hogy ... blablabla. Pl. az előző példa - hogy a chatbottal való beszélgetés közben hányszor mondták a "hogy vagy?" kérdésre, hogy "jól.".

Ez a chatbot visszafelé is így működik. Tehát ha Te írod neki, hogy "hogy vagy?", erre ő válaszol az ezutáni emberi válaszok közül valamelyikkel, véletlenszerűen. De minél többen mondtak egy adott választ, annál valószínűbb, hogy ő is azt fogja rá mondani. Na, erre kellett nekem ez a normál eloszlás. Ha valamit 500-an mondtak, és valamit csak 1x, akkor szinte soha ne azt a "csak egyszer" választ adja, hanem azt, amit 500 ember.

De erre épkézláb megoldást nem találtam (emberi nyelven / JÓ programozói megoldással; nem matematikusi megfogalmazást), csak 2-3 feltett, de nagyjából megválaszolatlan Stack Overflow kérdést. De az egyik béna tömbös megválaszolása után eszembe jutott egy viszontlag memória- és CPU kímélő megoldás a problémára. Most teszteltem is, jónak tűnik.

Előbb leírom a konkrét PHP kódot (phptester.net-en nyomtam le, de bárhogy lehet tesztelgetni):

$results = array('Jól', 'Megvagyok', 'Rosszul'); $odds = array(70, 20, 10); $max = 0; for($i = 0; $i < count($results); $i++) $max += $odds[$i]; $rand = mt_rand(0, $max); $choosenIndex = 0; /* echo "Esély: $rand<br />"; */ for($i = 0; $i < count($results); $i++) { $rand = max(0, $rand - $odds[$i]); if($rand == 0) break; else $choosenIndex++; } echo ' - Hogy vagy? <br /> - ' . $results[$choosenIndex];

Van egy tömbnyi választandó elemem, meg egy tömbnyi ugyanolyan sorrendbe feltöltött esélyem. Persze, megoldható kétdimenziós tömbbel is, vagy ilyesmi, de én most az egyszerűség kedvéért így csináltam.

Nem is bonyolult így nézve, ugye? Az esélyek bármennyik lehetnek. Végül van egy maximum számom, a randomizálás tetőpontja. Ez az összes elem esélye összeadva. 70+20+10 (lehetne 5000+20+10 is, működik úgy is, ofc).

Majd egy változót tényleg randomizálunk 0 és max közt. Kell még egy index változó, ami a számok alapján kiválasztottnak ítélt tömbindexet mutatja majd.

Innentől logikus. Csinálunk egy akkora for ciklust, mint a tömb elemeinek száma. A randomunkból minden "körben" kivonjuk az épp ciklusváltozó szerinti sorrendben következő esélyek tömb számát. Nem muszáj 0-ra redukálni, de úgy szebb. Ezután ellenőrizzük, hogy a randomunk kevesebbegyenlő-e, mint 0. Ha igen, akkor elértünk oda, hogy a jelenlegi index esik abba a szakaszba, amivel párosul a választott tömbelem a másik tömbben. Ha nem, akkor túlléptünk egy elemnek a lehetőségén. Ennyi.

Ezt nem is igazán tudom elmagyarázni, ezért lerajzolom, így befejezésképp:


Orosházi fősulis kaland 2018. április 12., csütörtök - 20:57


Mondjuk ha egy ilyen dolgot kalandnak hívok, a Pamkutyáék kalandvideóihoz képest, ez kb. úgy hat, mint a magyarországi YouTuber közösség challenge videói a külföldiekével szemben.. Mindegy.

Éééljen, 2 éve voltunk Szegeden, mint iskolakirándulás résztvevői. Akkor volt a... mi is? Nem emlékszek a nevére, de azért jó volt.. Fotóztam egy csomót. Videót is sokat vettem fel róla, YT-n meg lehet keresgélni őket. Pl. itt egy, meg itt, meg itt.

Szóval ma megindultunk Orosházára, mint iskolai kirándulás. Hivatalos cuccot (nem találtam) az eseményről a Facebookon itt találtok, viszont itt van másik leírás: részletesebb és rövid.
De ott is kaptunk egy ilyen program-leíró valamit, bár a másik oldalán egy szegedi, jövőbeni (hasonló) program van meghirdetve.


Előadások voltak itt nagyrészt. Némelyiket néztük, másikat épp kihagytuk valami miatt.. Az emeleten voltak ezek termekben kivetítve, de valahol az épületen belül élőben ment ugye. A földszinten meg volt mindenféle földi jó, amiket lehetett nézegetni, meg tapogatni, nyomkodni. :D

Amit lehetett, megnézegettük. Volt egy Acer sarok a bejárat felőli oldalon, a másik végben meg egy HP sarok, de ugye köztesen még volt Mozaik, meg az SKC-t is láttam (felsőbbi plakáton lévő cucc, bár sosem hallottam még róla, lol), a Fujitsu nem rémlik. De lehet nézegettem, csak nem volt úgy kiírva.




Az Acer résznél robotkar volt a fő látványosság, ami programozható is (ilyen kis bubikkal, nem szeretem az ilyesmit, de ez van). Volt ott még ilyen hard PC config bemutató is, bár épp csak egy loopolt sample videó ment rajta. De mikor én odamentem, már birizgálták páran, egyik osztálytársam azt mondta, hogy WoT-ot akartak tölteni rajta, csak nincs internet. Mivel épp ilyen 5 perces szünet volt a hangosbemondós fickónak, így befoglaltam kicsit a gépet. Hiába a világító, gondolom jó drága billentyűzet, egyértelműen nem programozásra való. Jó, hát gémer bill., de tényleg kegyetlen rossz volt rajta gépelni. Ugyanis arra gondoltam, hogy ha már net nincs, de Firefox van, meg... Notepad... :'( Valamit mondom összetákolok JavaScriptben. Csináltam egy random színes téglalap generátort. Volt vagy 5 perc tényleg. Akkor sarkon fordultam, és nézett rám a két Aceres kolléga. "Te programozol?" - hát.. ja. Már indultam volna onnan el, de még jött a kérés, hogy "Visszacsinálod?". Akkor még egyúttal beírtam a nevem a végére a HTML fájlnak - hátha keresnek. :P

Az SKC részlegnél egy csinos lány ilyen VR-szerű cuccot reklámozott, mint bemutatni való. Hát, arrafelé sok szem tekintgetett.. :D



HP részlegénél elég sokat voltak a srácok, ugyanis nyereményjáték volt. Egy kérdőív kitöltése esetén lehetett (volna) nyerni. Főleg amolyan "te melyik terméket használod / használnád" jellegű kérdésekkel. Mivel én hülye vagyok a hardverhez és a mai eszközöket sem ismerem, így nem kockáztattam meg az égést sok hülye válasz adásával. De aki kitöltötte, ilyen szép világoskék HP-s nyakbaakasztót kapott. Mint a nagyobbik VR-os képen Bagolynál (center guy). Egyébként ilyen akasztót az Acer asztalnál is lehetett lopni, az meg zöld. (Azt Roland random hozzám is vágott egyet, szóval az van.)



Aztán a Mozaik részen, ott is a saját szoftvereiket mutogatták, mint az SKC (egyébként); az annyira nem tetszett - valószínűleg elég részletes, bonyolult programok, amolyan naptár-szerű dolgokat láttam ránézésre, de hasonlókat nem lenne sok idő legyártani. Ettől még nem rosszak persze, és a valódi hasznuk épp használat közben látszana szerintem, viszont egy bemutatón - még ha az oktatás korszerűsítése, digitalizálás is a téma - nem túl látványos. Főleg egy nem-programozónak, mint a vendégek nagyobbik része.
Volt viszont egy tök jó sample program (sok hasonló volt a gépen, most nagyon a 3D-re mentek). Maga az ötlet tetszik. Állatok, szilánkokra lettek generálva (rombuszokra, de a térben randomnak tűnő pozícióban és dőlésben). Ujj húzgálásával a 3 tengelyen lehetett forgatni, de középpont körül forgott az összes darabka. A FOV elég alacsony lehetett, mert nem nagyon torzultak a darabok, és/vagy még a perspektíva is ki volt kapcsolva (orthographic projection). A lényeg, hogy csak egyetlen forgatási szögben, de úgy kirakódtak az állatok. Nagyon menő. Egérrel romlik az élmény kicsit, de szerintem elég kis aranyos, 1 perces pointless alkalmazás lenne (lesz) belőle, ami bővítheti a tárházát a kis listámnak.. :D


Egyébként jól látható, 11:00-tól Minecraftos előadás ment a felsőbb termekben.. MC előnyei az oktatásban. Ilyesmi vázlatpontokkal, hogy ...
  • fejleszti a térlátást
  • a rendelkezésre álló anyagok/eszközök jobb beosztását, felhasználását tanítja
  • redstone révén "programozásra" tanít (szerintem nagyobb részt fizika)
  • fejleszti a kreativitást
  • hálózati játék = csapatmunka
... meg ilyesmik. Volt még egy jó, de nem jut eszembe, hiába gondolkodok..

Aztán elmentünk egy elég távoli terembe még a földszinten, ott aztán tényleg mindenféle jó volt. Először láttam életemben 3D nyomtatót, ráadásul működés közben.. Hát, mivel nem halad fénysebességgel, így mondjuk végeredményre nem vártam. És a srác a monitornál Blenderről tolta a modelleket. (Azt pont nem fotóztam.)


Ebben a teremben voltak még könyvek pl. (Programozás oktatás gyerekeknek, stb), de pl. szintén robot is volt. Azt videóztam, pályán tartó mozgást végző kerekes robot. A pálya egy fekete vonal volt. Ez amúgy egy tök jó dolog. Jó alatt érdekeset értek leginkább. Ilyesmivel - ha nem is közvetlenül szoftver - legalább felületesen foglalkoznék is pl. suliban. Vagy itthon, hobbi-sideprojektként.


Ezen túl nem sokat maradtunk (azért ez sem rossz), 13:00-kor indultunk "haza" - ami annyit jelent, hogy a Csaba Centerbe mentünk, Békéscsabára. Ahogy odaértünk, Márknak az az ötlete támadt, hogy menjünk a hangszerboltba, mert miért ne? Szóval mentünk oda inkább, jött Pajzán is, legalább egy bő fél óra azzal is eltelt. Először voltam életemben hangszerboltban. Jó helynek tűnt.


Pénz híján én csak néztem és fotóztam, viszont legalább tudtam venni egy az akusztikus gitáromhoz márkában passzoló, egyébként is szép 150 Ft-os pengetőt. A következő téma alá rakom a képet.

Aztán csak benéztünk a Centerbe is. A csapat egy része az oda tervezett 1 órából a maximális időt a teszt-konzoloknál töltötte. Sok bénaság van a PS4-en.. De azért a Dragon Ball az tetszett, még ha ezek az új játékokban más sem jó, csak a grafikájuk.



Aztán hazaindultunk. Még kint fotózkodtunk kicsit, arról tanárnőnek van képe, nekem nincs. Viszont ezt lekaptam, ok nélkül:


Meg csináltam eljövet egy videót a buszról, de a gyönyörű busz-párbeszédek visszhangja sok ... mindegy, lecseréltem YT hangsávra. Ez egész jó kis dallam, múltkor hallottam Damien White videójában aláfestésként, és kikerestem. (1 óra volt, ezért leírom a címét, oda is leírtam: Letter Box - Far The Days Come)


S végül, találtam itthon egy piros nyakbaakasztót is, még a Pákász Futamon kaptam, épp ennyim van összesen is, így lényegében - bár nincs HP-m, de kijött az RGB. :D

Node.js, Socket.IO - 2# alapok 2017. december 28., csütörtök - 16:34


Ahogy írtam, egy videó formájában szeretném ezt a fél órát kitölteni. Pár apróságot még írok majd a videó alatt, itt a bejegyzésben, hogy mik a használathoz elengedhetetlen parancsok/kódsorok.



A projekt


Az új projektedhez hozz létre egy mappát az előző fejezetben kitárgyalt "package.json" mellé.
Ebbe a mappába kell minden hozzá tartozó fájlt raknod - persze almappákat használhatsz benne.
Első sorban hozz létre egy "index.js" nevű fájlt. Ez lesz a szerver kódja, amit a Node futtat.
Tipp: Hogy ne kelljen mindig parancssorból elindítanod, csinálj egy "akármi.bat" (én server.bat-nak szoktam elnevezni) fájlt, amibe ennyit másolj bele:
node index.js
pause
Nyissuk meg az "index.js" fájlt, amibe pár alap sort kell gépelni. A videóban röviden elmondtam, hogy mi miért kell, de akit érdekel utánaolvashat (illetve valamennyire egyértelmű is):
const express = require("express");
const app = express();
var http = require('http').Server(app);
var io = require('socket.io')(http);
app.use(express.static(__dirname));

/* új változókat, funkciókat itt hozz létre */

io.on('connection', function(socket) {
  /* ide jön a bejövő adatok vizsgálata */
});

http.listen(1337, function() {
  console.log('A szerver fut az 1337-es porton.');
});
A bejövő adatok vizsgálata részbe pedig funkciókat tudsz pakolászni, amik egy jelzésre figyelnek.
socket.on('test', function(data) {
  socket.emit('onlyForSender', data);
  io.emit('allConnected', data);
});
Ha a kliens küld a szerver felé egy 'test' "üzenetet", akkor a szerver csak neki visszaküld egy 'onlyForSender' nevű üzenetet, mindenkinek pedig (beleértve a küldőt is) egy 'allConnected' üzenetet. Így tudsz funkciókat létrehozni, valamint választ küldeni a szerver részéről a csatlakozó feleknek.

A kliens oldalon a "kötelező" dolog jóval rövidebb - be kell szúrni egy szkriptet a <body> után, lehetőleg minél közelebb:
<script src="/socket.io/socket.io.js"></script>
Ezen kívül a szkript elejére valahova, (ahol kezded) kelleni fog egy rövidke
window.socket = io();
sor, innentől pedig eléred a 'socket' paranccsal annak funkcióit. Példa az adat küldésére és fogadására:
socket.emit('test', 1);
// a küldött adat lehet szám, tömb, objektum, stb

socket.on('receive', function(data) {
  /* és itt tevékenykedhetsz,
     mi történjen a kapott data-val */
});
Röviden ennyi lenne, innentől a fantáziádra van bízva, mit hozol ki belőle.

Ide kattintva egy Google Drive mappa jön be, ahonnan letölthetitek a sablont a kezdéshez (azzal a pár sorral), meg a videó végén lévő kész kódot is, kipróbálhatjátok.

Sok sikert, jó próbálkozást, alkotást!

// Előző "fejezet"

Node.js, Socket.IO - 1# telepítés 2017. december 28., csütörtök - 2:33


Már ugyan volt valami alap Node.js leírás, de az elég egyszerűsített volt, ez meg végül lehet - majd - egy sorozat lesz, talán videóval (is).

Röviden - mi(k) ez(ek), mire jó?


A Node.js lényegében lehetőséget nyit szerver létrehozására, amit JavaScript nyelven írhatunk meg. Ez a szerver alapvetően olyan, hogy programokkal tudsz az új szervered nyitott portjára csatlakozni TCP/IP használatával, pl. a parancssorban - illetve én a teszteléskor telnettel csatlakoztam az így készült szerverre.
Azonban a Node.js kiegészíthető az 'express' nevű keretrendszerrel, ami webes elérhetőséget biztosít. Így már nincs szükség a parancssorra, készíthetünk webes játékot is. De valami még hiányzik.
A játékokhoz (is) általánosan használt socketek, hogy tudjunk menő szerver-kliens kapcsolatot kiépíteni, rendes csomagküldéssel-fogadással. Ehhez kell a Socket.IO. /* Más szavakkal, (akár) csinálhatsz HTML5 alapon MMORPG-t. */

Telepítésük

  1. a Node.js hivatalos oldaláról töltsd le az utolsó stabil kiadást (LTS), és telepítsd fel (csak next-next, semmi extra)
  2. ha feltelepült a NodeJS, akkor hozz létre a jövőbeni projektjeidnek egy mappát (lehetőleg az elérési útjában ne legyen ékezetes karakter, szóköz - az én ilyen mappám: "C:\Users\EProg\Documents\Projektek\socketio")
  3. hozz létre ebbe a mappába egy "package.json" nevű fájlt, majd nyisd meg, másold bele a következő sablonszöveget:
    {
      "name": "socket-examples",
      "version": "0.0.1",
      "description": "my socket.io apps",
      "dependencies": {}
    }
    (ebbe a fájlba fognak feljegyződni (automatikusan) - a dependencies részhez - a letöltött keretrendszerek)
  4. nyissunk egy parancssort (rendszergazdai jogosultságokkal lehetőleg), és abban lépjünk be ebbe a mappánkba (akár úgy is bele tudsz menni, hogy kimásolod a mappa címsorát, és a parancssorba beírod a cd utasítás után, így: "cd C:\Users\EProg\Documents\Projektek\socketio") – majd írjuk be ezt a rövid parancsot, ha a mappánkban vagyunk:
    npm install --save express@4.15.2
    ha sikerült, valahogy így nézhetett ki a parancs után a konzolod:

  5. még mindig ugyanabban a mappában maradva, ezt a parancsot is kövessük el:
    npm install --save socket.io
    ha sikerült, valahogy így nézhetett ki a parancs után a konzolod:
  6. amennyiben ez kész – akkor kész vagy a telepítéssel, a "package.json" fájlodban látható is a két framework a dependenciesnél (ha sikerült)
A telepítés ennyiből állt volna. Innentől ebbe a mappádba hozz létre újabb mappákat, minden egyes nodejs-socketio projekted számára. A példafájl kódja, ami mindjárt következik - úgy működik, hogy az adott mappában lévő összes fájlt (és további mappát, meg tartalmát) átküldi a böngészőnek (a kliens oldalnak), ha a szerver fut és elérhető – ezért is kell külön mappa minden projektnek.

// A következő "fejezet" egy videó formájában fog készülni - nagyrészt. Benne lesz, hogyan kezdj neki, mik az alapvető lehetőségek, a kész forrás működőképesen letölthető lesz.

Végtelen térkép generálás bármely irányba 2017. október 1., vasárnap - 23:03


Ahogy visszanéztem gyorsan, ez az első tényleg programozással kapcsolatos bejegyzésem. Amikor a blogot kezdtem, úgy voltam vele, hogy itt mindenféle elmélet és megoldás lesz ezen belül. És gondoltam, hogy azért előtte lesz pár bejegyzés, de hogy 51 bejegyzést írjak előtte (több, mint 1 éven át), amiből csak pár darab hajazott a programozásra.. :D (A node.js szenvedésem is csak hasonló volt, de ott a telepítésen volt a hangsúly, nem a használatán.)

Bevezető off.
Szóval:

Ahogy a cím is mutatja - a napokban elkezdtem a szabadidőmben (amikor épp nincs semmi fontos egyéb) egy Minecrafthoz hasonló, de 2D játékot csinálni. Mindezt természetesen multiplayer formába öntve, hiszen mit ér az alkotás, ha nem láthatja senki az eredményt? Mariocraft a kódneve, mert egyébként - jobb híján - Mario a főkarakter, egyelőre.
( Meg hát egy hálózaton játszható játék külön fényévekkel jobb, a legtöbb esetben. )


(Jobbra a kicsit újabb, árnyékos verzió látható.)

És ha már ilyen Minecraft-Terraria típusú játékba kezdtem, eszembe jutott egy olyan téma, amiről szívesen hallanám mások véleményét, megoldási módjait, hátha tanulhatok és/vagy van jobb, mint amit én ismerek. A Facebookos Amatőr játékfejlesztők csoportban feltettem a kérdésem, ami egy elég jó kis közösség - és pár aktív tagja között igazán nagy koponyák vannak, akik nagyon régóta űzik az ipart.


Kaptam is jó néhány választ, néhány még új információ is volt – tehát megérte a kérdést feltenni. Tanulhattam kicsit.

Összefoglalva: a kérdés, téma lényege az, hogy a legtöbb egyszerű játékban elég az, ha a játéktér térképe egy kétdimenziós tömb (főleg a csempéből felépülő játékoknál - erről van egy nagyon jó tutorial itt. Leír mindent, hogy miért jó ez, miért hasznos.).

Ez annyit tesz, hogy csak "egyirányúan" bővíthető a tér. A számítógépen a leggyakoribb módszer a 2D játékoknál (top-down view "felülnézetes", sidescroller "platform, mászkálós"), hogy a nullpont a bal felső sarok. Onnan indul ki a térkép összerakása, és tart egészen a jobb alsóig.
Ez pont kézenfekvő, hiszen a térképet tömbben szokás tárolni, a tömbök indexelése 0-tól indul, és tart N-ig. A tömb dinamikus is lehet, tehát nem lehetetlen, hogy akár játék közben IS nőhessen a pálya mérete. De csak (az előbbit alapul véve) jobbra, és lefelé.

És mi van, ha én egy Minecrafthoz hasonló játékot akarok, de oldalnézetből? Vagy valami katonás, akármilyen játékot felülnézetből? És mondjuk hasonló, generált térképpel, hogy az az érzésem legyen, hogy bármerre mehetek?

Erre több megoldás is van.

Volt, aki azt mondta pl. (Oli volt, csekkoljátok az oldalát, rengeteg jó játékot csinált már! Java és HTML5 főként. Az én kedvencem pl. a JAVA minigolf játéka.),
hogy ez megoldható azzal, ha a tömb elejére szúrunk be új elemeket (ha a mínusz irányokba haladunk), és/vagy csúsztatjuk a tömb elemeit (inkább ezt írta, csak nekem elsőre beszúrás ugrott be, de az sem butaság, amennyiben feljegyezzük, hogy mennyivel lett csúsztatva a pálya, és ezt minden koordinátájához hozzáadjuk. Akkor ránézésre nem mozdul semmi sehova, de mégis nő a pálya mérete.) Ha csak csúsztatunk az elemeken, és ami kicsúszik, az elvész, akkor nem jó az ötlet egy dinamikus pályával rendelkező játékhoz, de egyébként igen.

Volt, aki hasonló, indexeléses módszert írt, seed alapon generálással (így simán csak ugyanazt generálja a játék az adott helyen, ha visszatérünk oda). Ez akkor nem jó, ha változtatható a pálya. Mint jelen esetben.

Kaptam egy Circular buffer nevű módszert, amit még nem olvastam el részletesen, de ez is új infó nekem, ennek egy változatát már használtam, anélkül, hogy tudtam volna róla, meg arról, hogy mi ez.

Még páran írtak, egy elég jó kis beszélgetés lett belőle.

Az én módszerem annyi, hogy adott egy (Minecraft megnevezéssel) chunk, egy darabka, egy részlet a pálya egészéből. Ez magába foglal N*N további kis játékelemet, "csempét" (tile-t). A Minecraftban ez 16x16x16 méretet jelent (mert 3D), de a mérete mindegy. Lényegében ezen chunkoknak is van egy koordinátája, ami ugyanúgy 0, 1, 2, stb., de egy ilyen koordinátán N*N elem található. Úgy is mondhatjuk, hogy az 1/N-ed része a pályának egy chunk.
Bár a pályát, a chunkok tartalmát tömbökben tárolom én is, de magukat a tömböket objektumok értékeként. A tulajdonság pedig egy string, egy szöveg, ami tartalmazza a chunk koordinátákat is.
Mivel ez egy szöveg, ez mehet negatív egész számba is, hiszen az is szöveg. Hivatkozásképp van használva, kicsit úgy, mint egy asszociatív tömb. Így nem is lassít semmit (érzékelhetően), annak ellenére, hogy string.

Ez kicsit zagyva lehet, de épp ezért gyorsan megírtam működőben is, hogy tesztelhető, látható legyen, mire gondolok. Így nem elég, hogy "negatív indexbe", mármint koordinátára is mehetünk a játékon belül, de ez generálható a végtelenségig, mert ugyanúgy dinamikus, és még a tömböket sem kell birizgálni, ha újabb tér tárul fel, így nincs plusz processzorhasználat sem.

Ide kattintva megnézhető a kis tesztem.
Az irányítás is egyszerű: a kurzorbillentyűk a vörös téglalapot mozgatják. A WASD pedig az egész nézetet, amit csak látunk.

A vörös téglalap mutatja a játékos képernyőjét; ha ez egy játék lenne, azt a területet látná be a játékos. Ahogy látható, mindig előre betöltődik annyi, amennyi szükséges, a chunkokból. A kirajzolás persze nem így történne, hiszen ez nem túl takarékos, de a bemutató célja nem is az volt.
A két kék vonal szimbolizálja a nullpontot, az X és Y tengelyt, amitől "jobbra" és "lefelé" szokás a pályát építeni alapesetben - de itt ugye átléphető minden irányba, bármekkora távolságra.



Egyébként a barátommal beszélgettem, miközben beugrott egy sokkal egyszerűbb módszer is, ami ugyanezt eredményezi.


Ez pedig annyi, hogy négy térkép tömb van, ami tárolja a pályát. Általában egy van, de ha vesszük a két tengelyt, akkor az 4 részre osztja a pályát, és pont az a gond a tömbbel, hogy nincs negatív index.
De ha van egy topright, bottomright, bottomleft és topleft tömböm, amik a négy teret szimbolizálják, akkor már más a helyzet. A bottomright-ot használjuk ugyanúgy, mint alapból szokás. Az összes többi pedig a tükörkép. Mielőtt dolgoznánk a tömbünkben, előtte egy vizsgálat eldönti, hogy melyik tömbben dolgozunk a 4 közül. Ha negatív az X, akkor értelemszerűen left lesz, különben right. Ha az Y negatív, akkor pedig top lesz, különben bottom. És már csak annyi az extra, hogy a tömbhöz használt index-számot, ami egyébként koordináta (valószínűleg), annak az abszolút értékét használjuk, bármelyik tömbben is dolgozunk. Így a mínuszból plusz lesz, és egy sokkal egyszerűbb módszert kapunk a 4 irányba való generáláshoz, szintén végtelenségig (hiszen dinamikus ugyanúgy lehet mind).

De ezt most nem valósítom meg, el lehet képzelni. :)

Ezért szép a programozás, végtelen megoldás van ugyanarra a "problémára", még ha némelyik nem is a legjobb.

A BKK-botrány 2017. július 23., vasárnap - 15:07


Haladjunk sorba. Rengeteg cikk foglalkozik most a BKK-s botrány dolgaival. Ezekre nem térek ki hosszan, inkább csak egy-egy rövid sort kapnak, mert sok cikk van, amit linkelek.


A BKK - nem túlzok - baromi sok és baromi nagy hibá(ka)t vétett az új, online jegyvásárló oldalán.
Egyrészt egyszerűen feltörhető - ebből indult az első botrány, itt olvasható.
Másrészt, hogy miért rossz az egész új e-jegy? Itt olvasható.
Még az ellenőrök sincsenek vele kapcsolatban tisztában a dolgokkal, ráadásul átverhetőek.

Egy fiatal, 18 éves, most érettségizett (gondolom infós) srác letesztelte, hogy tud-e csalni a megvett jegy árával, és sikerült. Ezután írt egy üzenetet a BKK-nak, hogy szar a rendszerük, ugyanis bárki megmondhatja, mennyit kell fizetnie a jegyért-bérletért. Ezt a cselekményt etikus hackerkedésnek nevezik - mikor a "hacker" nem tönkretesz egy rendszert, vagy nem kihasználja, hanem megkeres egy vagy több hibát, majd azokat jelzi a tulajdonos felé, hogy javítani kéne, mert ezt más, (nem etikus / black hat) hackerek kihasználhatják.

Erre mi történt? A BKK feljelentette a srácot, akit el is vittek a rendőrök.
Most pedig a nép összefogva, egy emberként kiáll a srác mellett.
De pl. egy informatikával foglalkozó cég ösztöndíjat ajánlott fel a szerencsétlen fiúnak (aki valóban szerencsétlen, mert ez röhejes.)
Mindeközben pedig a T-Systems vezérigazgatója (Kaszás Zoltán) "bocsánatot kért" a BKK-s dolgokért.
Ez a bocsánatkérés csak idézőjeles, valójában továbbra is hárítás.. (A T-Systems a fejlesztője a szutyok rendszernek [weboldal és a többi], amiről ez a cikk szól)

Szóval, ez lenne a történet. A két kiemelkedőbb dolog lényegében az lenne, hogy a jegyet-bérletet bárki bármennyi pénzért megveheti, ugyanis nincs rendes szerver oldali validáció vagy ellenőrzés, vagy bármi.
A másik ilyen dolog, hogy plain textként van tárolva a DB-ben a jelszó. Hogy érthetőbb legyen:


Konyhai nyelven elmagyarázva azt, hogy milyen következmények lehetnek, röviden:

Az ár megváltoztatása talán egyértelműbb - még többen bliccelhetnek, ezzel rontva a bevételét a BKK-nak, ami által (ahogy a linkek közti egyik videóban is szerepelt) járatcsökkentéshez vezet a kevesebb bevétel miatt, és közlekedési problémákat hozhat létre BP-n. Ennek senki nem örülne valószínűleg.

A plain text jelszó tárolás is alapvetően kerülendő dolog. Jelszót úgy tárolunk az adatbázisban (weblapokon, és másol is egyébként), hogy valamilyen egyirányú titkosítást (legtöbb esetben hash-elést) végzünk rajta.
Ha simán szövegként van tárolva a jelszó, ami mondjuk 'pistike123', akkor az adatbázisba is így kerül be, és ha feltörik az adatbázist, mindenki jelszavát megtudják ránézésből (erre pedig senki nem szeretne még esélyt sem adni). Ha viszont egy md5 titkosítást nyomunk rá a jelszóra, akkor máris így kerül be az adatbázisba: '472ed8fbe10e36d2c72e410607f19cbc'.
Ez máris biztonságosabb. Persze ezen még szokás variálni, mert léteznek hatalmas, milliós adatbázisok, ahol visszafejthetőek az ilyen dolgok, ha nincs bennük valami extra kis kódrész, amit salt-nak hívnak. Ha sózzuk is a kódot, pl ezzel: '$_1bPŐ:*', meg persze többszörösen egymásra nyomjuk az md5-öt (vagy sha títikosítást, vagy amit használ az oldal), mondhatjuk, hogy megközelítőleg sosem lesz visszafejthető a jelszó.

Egy kis oktatás: de ha lekódoljuk a 'pistike123'-t, akkor hogy tud beléptetni a rendszer? Az oké, hogy az adatbázisba egy fura kódként kerül be a jelszó, amit nem tud senki visszafejteni, de hogy nézi a rendszer, hogy én jó jelszót írtam-e be?
A válasz: Ugyanúgy.
Regisztrációkor a megadott jelszódat átkódolja mindenféle módszerrel, pl egy ilyen képlettel, a példa kedvéért:

md5( md5( JELSZÓ + SALT ) )
Akkor a 'pistike123'-mal behelyettesítve:
md5( md5( pistike123$_1bPŐ:* ) )
Így a végeredmény ilyesmi lesz: '6f3b4746192028d89764e29f1dc10005'

Amikor pedig belépsz, az akkor beírt szöveget pont ugyanígy átkódolja, és az akkor beírt, majd átkódolt jelszódat nézi meg, hogy ugyanaz-e, mint az adatbázisban lévő kód. Ha ugyanazt az alapszöveget (jelszót) írtad be, akkor ez a végső kód is pont ugyanaz lesz.

Szóval BKK, T-Systems, nagy háborúba kezdtetek. Valószínűleg innentől mindenki ott próbálja tönkretenni a rendszereteket, ahol éri, amíg egy ténylegesen nagyon jót nem csináltok, ha már ráköltöttetek több millió Ft-ot... (Aminek a töredékéért megcsinálta volna a mostaninál 100x jobbra és biztonságosabbra bármelyik webbel foglalkozó cég.)

Kicseszett MsSQL feladat 2017. május 14., vasárnap - 22:59


Olyat kaptam az egyik tanáromtól, de olyat, hogy csak néztem. MS Access-es feladatot. Tehát MsSQL.

Így nézett ki:

Nézzük végig azt a bizonyos.. őő.. miez, feladatot:
Már az első sorban Marsh Eszer. Nem EszTer.

Mindegy, ez csak elírás. Bár hasonló hülyeség sok van benne.. A piros betűs feladatok végén a lekérdezések mentendő neve szerepel, a zárójelben. Miért fele ékezetes, fele nem? Semmi értelme. xD
De a feladatoook. Már az is egy kín szenvedés volt, hogy hozd létre az adatbázist, csináld meg a mezőket majd töltsd fel a rekordokat, mindezt kézzel..

Az én megoldásaim itt vannak egyébként:

Még azt hozzátenném, hogy wtf.. Oké, többféleképp is értelmezhetőek a feladatok, de ha tényleg jól akarjuk megcsinálni őket, akkor a második nevetségesen bonyolult; a harmadik még fejtörést okozhat annak, aki nem ismeri (és lusta utánakeresni) a dátum funkcióknak (főleg itt, retekSQL-ben). Mert egyébként a kettes egy laza SELECT COUNT(DISTINCT Település) FROM alkalmazottak; lett volna, ha MySQL-ben tolhatná az ember.

Igazából csak a második akasztott ki, fél órám ráment, mire subqueryvel sikerült Accessben megkapni a numbers of group-t.

Kicsit olyan érzésem van ettől, mint anno webes résznél. Suliban mindig a lehető leghibásabb, legrosszabb dolgokat kötelező használni. Biztos van, aki használja, szereti és védi is a Microsoft termékeket, de az nem én vagyok. Az Access egy retek, és a MsSQL is egy retek változata az SQL nyelveknek.

És régen is pont így jártunk egy osztálytársammal. Anno a suliban csináltam valami egyszerű PHP-s cuccot, adatbázissal, és mivel suliban a XAMPP a menő [kötelező], az volt feltelepítve. Olyan random hibát dobott ki, hogy még a Google-ben sem igen találtam hasonlót megválaszoltan. Kérdés volt persze sok, csak megoldása nem volt senkinek.

Nem létező hibákat generál ok nélkül. Nem is véletlen utálom. Én itthon mindig az AppServ általi összeállítást használom, soha nem hibázott még hülye okokra hivatkozva.

Suliban lecseréltem a XAMPP-ot (nem hiszem, hogy bárkit érdekelt volna), egyből ugyanaz a megváltoztatás nélkül kód lefutott, hiba nélkül. Ami XAMPP-on nem. Pedig csak webszervert váltottam..

Szóval egy osztálytársamnak is volt pont ilyen problémája kevésbé régen, írt, hogy mit kezdjen a hibával. Mondom töröld a retket, rakd fel az AppServet. Nem hittem amúgy, hogy ennyi megoldhatja a problémáját, de más nem jutott eszembe.. Szimplán csak nem szeretem a másikat, mert nekem nem igazán működött sokszor. Meglepődtem, mikor írt a Bence, hogy "ja, már működik", és ugyancsak a webszervert váltotta le kizárólag.

AppServ-ből töltsetek, azt' minden jó lesz. (És nem, ez nem egy fizetett reklám volt, csak tapasztalat.)

Hackerkedjünk 2016. október 30., vasárnap - 0:23


Jelenleg megpróbálom röviden összefoglalni az összes dolgot, ami csak eszembe jut ezzel kapcsolatban.
Az első dolog, hogy a pecásoknak, a művelt embereknek és azoknak, akik már olvasták legalább egyszer ezt a poént, a hekk egy halat jelent.

Másodszor - persze ez nyilvánvaló -, az angol hack szó a törést jelenti, informatikában valaminek a feltörésére értik, köznyelvben "meghackel" elterjedéssel. Feltörni valamit (fiókot, weblapot, stb), vagy valamilyen nem könnyen módosítható dolgot módosítani (pl. hackprogramok játékokhoz - wallhack, aimbot, stb).

Az a lényeg, hogy alapvetően negatív dolgok jutnak az embernek eszébe róla, kivéve ha ő a használó / művelő. Meg neten el van terjedve mint állat, hogy fehér-kalapos (etikus) / fekete-kalapos (nem etikus) hacker, meg anyámkínja. Én nem bontogatom soha több rétegre, felesleges. Olyan ez nekem, mint a sajtok. Mindegy, hogy minek nevezzük, számomra sajt marad.. Meg a pirosnak is van sok árnyalata, de nekem mind csak szimplán piros.

- Rizsa off -

A lényeg következik


Aszondja.. Pár éve már találtam egy bizonyos oldalt. Ne kérdezzétek, hogy miért, és hogyan..
HackerKépzés volt a címe. Ide kattintva megnézhetitek a weblapot.

Elmondom, hogy én, mint laikus a témában, bár informatikában nagyon érdekelt személy (közel 10+ év hobbiszkripteléssel-programozással a hátam mögött) hogyan látom ezt az egész weblapot, kicsit elemezgetve. Ránézésre meggyőző a sok információ. Egy jó átverés alapja az, hogy valami meggyőző legyen. Ha valakivel valamit el akarsz hitetni, írj róla sokat, mert sok dolgot nehezebb kétségbe vonni, mint pár rövid infót. Majd a képeket megnézve az ugrott be, hogy ha ez a bizonyos HackerKépzés ekkora nagy ultra-mega-hype dolog, miért vannak olyan rossz minőségű képek a weblapon, hogy még telefonnal nézve sem lehet kinézni némelyiket?

Hazudtam egyébként. Nálam a legelső dolog egy weblap megtekintésekor az első pillantás után egy jól irányzott CTRL+U (forráskód megtekintése). Már az első sorban lévő "HTML 4.01" validáció kiszúrja a szemet. (Ma már HTML5-öt használunk alapvetően, egyszerűbb és modernebb.)
A behúzásokat ocsmánynak tartom mellesleg, már ami van. Így már két tényező is arra utal, hogy átverés.

Tovább. 50% kedvezmény. Meg hasonló kedvezmény dumák mindenütt. Persze, pont most van ilyen is.. Mekkora mákom van, mindjárt gyorsan rendelem is..

A videóról - már ha megtaláljátok - de ide kattintva is eléritek - megint egy csomó mindent elárul. A hackerkedés hallásból egy olyan dolog, amihez nagyon precíznek kell lenni, pontosan tudni kell, hogy mit csinálsz, egész rendszerek (valószínűleg nem árt az Unix alapú operációs rendszerek ismerete, meg rengeteg keretrendszeré mindenféle programozási nyelven, no meg persze maguk a nyelvek ismerete).
Ennek ellenére a weblap tele van pontatlanságokkal, de a videó is. Már eleve a címe a videónak is..

"Jelszófeltörés 2016" - a bemutatott módszerek közül 1 a jelszófeltörés, a többi lopás. Másrészről a lopás bűncselekmény, mindegy, hogy kézzel fogható dologról van-e szó, vagy szellemi termékről.
Fontos még továbbá, hogy mások programjait használta fel, ingyenes linuxos (Ubuntu Linux op.rendszert használt ránézésre a videó felvételéhez) termékeket.
A hackerkedés, mint olyan, nem bűncselekmény. Akkor lesz törvényellenes, ha közben vétünk a törvény ellen. Logikus, nem? Ha a saját gépeden szórakozol, és senkinek nem ártasz vele, akkor nem törvényellenes. Amíg nem lopsz/szerzel olyan adatokat, amiket a tulajdonos nem adna ki amúgy, és a tudta nélkül teszed ráadásul. (Értelemszerűen ha tud róla, de nem akarja, az is törvénysértés, vagy ilyesmi..)

Na jó, rövidre fogom. A weboldal hibás, sok link nem elérhető (fórum pl.), normális üzenőfelület nincs (azért van tiltva mindenféle kommentmező, mert túl sok lenne a fújjogás, a negatívkodás, hogy nem működik semmi - de hát hogy működne bármi is, ha átverés az egész?) - Egy kommentmező van csak az oldal alján, azt meg valószínűleg szűri kézzel. Csak pozitív dolgokat enged be, vagy nem negatív üzeneteket (kérdéseket pl, ami még nem anyázás).

Az egész oldal egy kamu. Sok olyat ígér, amit nem ad(na) meg, ha fizetnél sem. Nem igazán van letölthető tartalom sem, de ha mégis találnátok, vírusirtó és kémprogram védelem legyen a gépeteken..

Most pedig a fejlemények


Mint már említettem, régen volt az első találkozásom az oldallal. (Akkor még nem volt videó. Komoly újítás.)
Akkoriban le is oltottam ezerrel a csávót, mert még a Facebook kommentboxát használta, amibe írtam is neki jókat. Egész oldalnyi üzenetet, hogy törölje az oldalt és keressen barátokat az életben. Valószínűleg törölte az egész üzenőizét, mert még FB-n sem tudom visszakeresni, vagy a tevékenységnapló erre nem jó. Mindegy, egy ilyet viszont találtam - ez csak mellékes, de mik vannak, nem is emlékeztem.

Szóval most újra az oldalra tévedtem, sőt. Nem is a hackerkepzes.hu-ra, hanem egy másikra, de ránézésre tudtam, kb. 3 év után is, hogy ez tuti az övé - övé is, nem tévedtem. Ez lenne az új oldala. Vagy ez is, mert ki tudja mennyi ilyet csinált már.. Újabb kamu cucc, vagy még ha valós is, lopott. Úgy értem, találta a programot neten, már ha egyáltalán letölthető. Nem néztem meg igazán, nem érdekel ilyen hülyeség.

Egy zseniális sorozatot nézek, amiben a főszereplők egyike egyébként egy ilyen zárkózott informókus, hacker, stb. A célszemély a magyar cím, tényleg rohadtul jó, ajánlom mindenkinek, még akinek ez a téma unalmas is. Részben ennek okára találtam az új hülyeségére a fickónak (vagy nőnek? nem valószínű amúgy.)

Szóval kutakodni kezdtem, de mint állat. A filmsorozat inspirált, hogy kezdjem el, hátha lesz valami, hát a lehetőségeimhez és tudásomhoz méltóan megtettem, amit lehetett. A domain.hu rendszerén a részletes keresésben megnéztem mindenekelőtt a két weboldal címét - és igen. Mindkettőt a Go Go Internet Kft. regisztrálta, amely elvileg egy Szegeden lévő kisvállalkozás (interneten utánakerestem, 1 főt számlál a társaság... nem kizárt, hogy a tulaj ez a hackerképzés-kamu gyártója, nevezetesen Németh István. Ellenben ha mégsem ő lenne, csak a gyökérnek az áldozata azáltal, hogy nála, egy tök ismeretlen és kis cégnél regisztráltatta a weblapjait, akkor itt kérek elnézést a megnevezett személy "rágalmazásáért")

További dolog, hogy találtam a kommentek között a kezdőlapon (visszatérve a hackerképzéses oldalhoz) egy közvetlen linket a fickótól. Ha idekattoltok, megnézhetitek, de semmi esetre se fizessetek neki!

Viszont nyugodtan megnézhetitek. Ez a legutolsó dolog, ami kell a bizonyításához, hogy egy átverés az egész.
Az előbb linkelt lap alján banki átutalás esetén mit ír? Ezt: "Amint megérkezett az összeg, küldjük a csomagot."

Igen? Küldik? Hova? xD Egy rohadt űrlap nincs, semmit nem kér, adatokat, semmit. Utald el neki a pénzt szépen, és... ő majd meghackeli a számlaszámod alapján a rendszert, ami alapján kideríti gyors, hogy ki vagy, és a pontos címedet is.. Nyilvánvaló.

És a másik két lehetőség is.. Pfúh..DE VÁRJATOK, HOPPÁ!
MIT ÍR OTT? JÓL LÁTOM?
"Barion Payment Zrt."

És akkor néztem azt a bizonyos számot meg mindent. Összeállt ránézésre számomra..

Név - Számlaszám - Közlemény...
Ugyanígy működik a Paypal számla is. Ha utalni akarsz a virtuális számládra, akkor a közleményben megadott szám lesz az azonosító. Onnan tudja a Paypal rendszere / alkalmazottai, mittudomén, hogy pontosan kinek is utalják az adott összeget (tovább, miután számukra beérkezett a rendszerbe).

Na de nem vagyok én hülye (annyira), egy próbát megér - gondoltam. Megnéztem ennek a Barion Zrt.-nek az oldalát. Nincs vele semmi gond. Bár ezt nem elemeztem, de nem is volt cél, valódi az oldal, működő.

A lap aljára görgettem, találtam 3 kedves dolgozót, és a középsőnek (aki a képe alatt lévő leírás alapján relevánsabb volt a témában) írtam egy szép e-mailt, mindent beletéve, amit ezelőtt megtaláltam és most leírtam nektek, bár kicsit feldúlt voltam, és nem fogalmaztam gyönyörűen, de nézzétek el, remélem ő is elnézte, ugyanis marhára kedvesen válaszolt! Nem tehetem közzé a tudta nélkül azt, amit válaszolt, de a lényegét leírhatom, elvileg.

Tudnak róla már egy ideje, hogy a rendszerüket nem úgy (illetve arra) használta, amire kellett volna, már régebben felvették a kapcsolatot a fickóval (vagy nővel? áh, kizárt), és most újra fel fogják venni.

Sőt, a fejleményekről tájékoztat is majd engem. (az bizony új bejegyzés lesz, muhaha :) )

Így nézve pedig - számomra meglepő módon -, elég pozitívan végződött, sikerrel zárul ez a kis történet...
(Vagy ez csak a kezdet..?)

Tanítás és tanárok 2016. szeptember 21., szerda - 8:45


Nem tudok nyilatkozni minden tanárról, mivel engem nem tanítottak, de azokról, akik korábban tanítottak és most tanítanak, azokról igen. Elvileg Magyarország oktatási rendszere nem jó, gyakorlatilag nem tudom, hogy milyen, mert nincs megbízható statisztika róla, vagy én nem ismerek ilyet.

Véleményem szerint az tud valamit jól tanítani, aki annyira ért is ahhoz a bizonyos dologhoz, hogy. Ebből adódik sokszor a probléma, azt hiszem. Ugyanis ha egy tanár bár szeret tanítani, de nem feltétlen ért az adott tantárgyhoz olyan szinten, mint kéne, akkor nem tudja jól tanítani. Mert nem érti annyira, hogy több stílusban elmagyarázza.

De más probléma is adódhat. Vagy régimódi a tanár, vagy furcsa a stílusa. Bár ezek ritkábbak. Én ugyan 'informatikus' vagyok, de ezen az ágon főként adódhatnak problémák.

Amikor a tanár a reál tantárgyat bemagoltatja az anyagot a megértetés helyett, az elég probléma. Azt a humán tantárgyakkal kell, sőt, azoknak is csak a nagy részét. Szerintem viszont egy reál (és a matek, fizika után az informatika az egyik legreálosabb) tantárgyat elemenként elmagyarázni kell, megértetni, hogy mi miért az, ami, hisz' ennek az a lényege, hogy csak a megoldás módszerét jegyezzük meg, amivel minden abba a típusba tartozó feladat megoldható legyen.

Sok ilyen után pedig már szinte semmi segítséggel is rá tudhat jönni egy ember egy probléma megoldására, még annyi magyarázatra sem szorul, mert vannak előismeretei, megnő a problémamegoldó képességének hatékonysága. Konkrétan kialakul valamilyen szinten egy olyan készség, amivel magukat a problémákat tudja megoldani. Vagy ilyesmi.. ← Erre jó példa a programozók.

Nekem főleg az a problémám, mikor mindig az alapjaitól kezdünk valamit tanulni. Szerintem ez nem helyes módszer. Kifejtem mindjárt. Meg az, amikor órákig tanulunk egy apróságot, ami egyébként elég érthető, vagy fél óra alatt több órányi anyag megtanítható lenne elvileg. És az utolsó: amikor nem látványos dolgokat tanulunk, hanem a száraz, unalmas és/vagy nehéz dolgot.

Az előzőre visszatérve: szerintem felesleges mindent a legrészletesebben kifejtve a legelejéről kezdeni, nemhogy még óránként újrakezdeni ezt. Sokkal egyszerűbb, és logikusabb először felületesen, pár óra alatt átvenni átfogóan mindent, ami később tanítva lesz, hogy képben legyünk, mivel is fogunk szemben állni. Mint a könyveknél a tartalomjegyzék. Mint rajznál a vázlat. Majd ezután kezdhetjük részletezni a dolgokat, de én még ezelőtt is párszor rövidebben, de az előzőnél mindig kicsit hosszabban venném át. Szerintem ez a jó módszer.

A második dolog az magától értetődő. Semmi értelme magyarázni valamit feleslegesen hosszan. A rövidebb magyarázat is elég, amit példának kell követnie. A száraz szöveg néha jó, de a példa a legjobb tanár.

Utolsó pedig, programozási példát felhozva, semmi értelmét nem látom a C# tanításával kezdeni. Kétfajta ember van: van, aki annyira elszánt, és egyébként az élete értelme is az lesz, amit épp tanul, ezért akkor sem hagyja abba, ha halálosan unalmas és nehéz is, meg van az, aki eltántorodik, ha nehéznek és unalmasnak látszik, vagy az is, pedig talán ha jól tanították volna, profi lett volna belőle.

A legtöbb ember az utóbbi. Nem él mindenki - hovatovább - alig van ilyen ember, aki a munkájának él. De miért tanítanak valamit unalmasan és nehezen, ha van jobb, könnyebb módszer, legalább ugyanolyan hatékonysággal, vagy még jobbal?

Szerintem előbb látványosan és könnyen kell tanítani, és ha már az jól megy, akkor kell átállni a szárazabb és nehezebb dolgokra. (HTML leírónyelv a kezdeti programozás tanuláshoz, ami látványos és hasznos is, továbbá könnyű, majd aztán a többi, a nehezebbek. a JS, a PHP, A C#, stb..)