2013. április 4., csütörtök

Xtend


Egy Eclipse által fejlesztett új programozási nyelv, amit szerényen csak "better java"-ként minősítenek. Elsőre átsiklottam rajta, de tüzetesebben átnézve a doksit valóban nagyon jó kis eszköz. Olyasmiket tud, mint opcionális típushasználat, kompaktabb deklarációk, objektumok dinamikus kiterjesztése, stb. Tulajdonképpen ami hirtelen eszembe jutott, hogy nem szeretem a Java-ban, arra találtam benne megoldást, de ha valami újat szeretnénk, ki is lehet terjeszteni a fordítót. Ami azonban a legjobban tetszik benne, hogy nem bájtkódot, hanem Java kódot fordít, így később jól lehet debugolni, ha kell, bármilyen környezetben. Így például Androidra is fejleszthetünk vele.

+Lóránd Somogyi +Richárd Kovács nektek tetszeni fog szerintem. 

http://www.eclipse.org/xtend/

#blog  





Xtend - Modernized Java
Xtend is a statically typed programming language sitting on top of Java.

2013. március 27., szerda

Portolják az Unreal Engine-t JavaScript-re


Utána néztem kicsit a technológiának. C/C++ kódot eddig is lehetett JavaScript-re fordítani úgy, hogy lefordítottuk LLVM virtuális gépre, amit Emscripten-el lehet JavaScript-re fordítani. Pár alkalmazást portoltak is már így JavaScript-re. Persze ez azért jelentős teljesítmény romlást is jelent, mivel a JavaScript ugye nem natív kód.

Erre a Google megoldása a NaCl (Native Client), amivel natív kódot futtathatunk a böngészőben. Ez egy JavaScript-től teljesen független saját technológia, tehát a támogatásához külön plugin kell, illetve minden platformra külön kell fordítani (bár ha jól tudom, itt is készül LLVM-es megoldás, amit az adott platformon futtatás előtt fordítanak natív kódra).
 
A Mozilla megoldása (amit most az Unreal Engine-hez is használnak) egy asm.js nevű kiterjesztés a JavaScript-hez. Az asm.js-es kód sima JavaScript, de van benne néhány speciális változó, stb. amit az asm.js-t támogató JavaScript engine-ek jobban tudnak optimalizálni. Ezeknek a változóknak fix típusa van például, így ki lehet pl. hagyni a dinamikus változókat érintő plusz konverziókat, ellenőrzéseket, stb. illetve előre natív kódra lehet fordítani, így nem kell interpreterrel futtatni. Ennek ugye az a nagy előnye, hogy sima JavaScript, nem kell hozzá semmilyen böngésző plugin (mint az NaCl esetén), mégis natívhoz közeli sebességgel fut.

Itt még érdemes megemlíteni szerintem a Dart-ot, ami ugyancsak JavaScript-re fordítható, tehát plugin nélkül is tud futni a böngészőben, de ha a saját virtuális gépben fut, akkor az opcionális típusoknak, SIMD műveleteknek, stb. hála natív kódhoz közeli sebességgel futtathatunk kódot. Mivel a js fordítónak köszönhetően ehhez sem kell külső plugin, ezért ez sokkal inkább tekinthető az asm.js alternatívájának.  

Akármelyik technológiát is nézzük, a lényeg, hogy a webes alkalmazások lassan de biztosan kezdik teljesítményben is felvenni a versenyt a natív alkalmazásokkal.

#blog  

Reshared post from +TechCrunch
To show off what game developers can do with a modern browser & without plugins, Mozilla and Epic teamed up to port Unreal Engine 3 to the web.





Mozilla And Epic Games Bring Unreal Engine 3 To The Web, No Plugin Needed | TechCrunch
TechCrunch is a leading technology media property, dedicated to obsessively profiling startups, reviewing new Internet products, and breaking tech news.

2013. március 26., kedd

Egy nagyon jó előadás Dr

Orosz Lászlótól, ahol Dr. Egely György könyveiről beszél

Az előadás a könyvekben elkövetett hibákról szól. Érdemes megnézni mindenkinek, akit az örökmozgó téma érdekel. Az érdekessége, hogy az előadást Egely is végigülte a hallgatókkal. A végén azért van Egely-től egy ügyes odavágás, amit nem tudott a prof. jól hárítani. Azt remekül megmutatta az előadás, hogy milyen matematikai és fizikai hibákat ejtett Egely (azért Egely zsenialitása mellet szól, hogy ezeket nem mindig könnyű kiszúrni), és ezzel a célját maradéktalanul teljesítette is. Ugyanakkor arra nem kaptunk választ, hogy a jelenségek maguk léteznek-e. Valószínűleg a gyakorlat is a professzort igazolná, de ezt a kérdést valóban csak kísérletekkel lehet eldönteni, ahogyan Egely is felhozta az előadás végén. És ebben a helyzetben tényleg hibás volt a prof. hozzáállása, hogy "Nem kell elvégeznem a kísérletet, a nélkül is le tudom vezetni". A dolognak egyébként könnyen pontot lehetne tenni a végre azzal, hogy Egely-ék hozzák a jelenséget, a prof. a matekot és a fizikát. Elvégzik a mérést, és ha azt prof. magyarázni tudja az eszközkészletével, akkor neki volt igaza, ha nem, akkor Egely-ék valóban találtak valamit. 

Köszönet a linkkért +Krisztián Kovács -nak.

#blog  

Áltudományos mechanika - Dr. Orosz László előadása

2013. március 17., vasárnap

Az ember tragédiája mint Cloud Atlas


Az ember tragédiájából (http://hu.wikipedia.org/wiki/Az_ember_trag%C3%A9di%C3%A1ja - igen igen az a Madách féle még irodalom óráról) kicsit kiszínezve, hollywoodi köntösbe bújtatva szerintem nagyon jó Cloud Atlas szerű filmet lehetne készíteni. A szereplők (Ádám, Éva, Lucifer és pár mellékszereplő) ugyanúgy reinkarnálódnának az egyes korokon át, mint a Cloud Atlas szereplői. Ugyanúgy be lehetne csempészni kis áthatásokat az egyes idősíkok közé, bár igazából ezt nem is kell külön erőltetni, mivel a tézis-antitézis-szintézis folyam önmagában megteremti a síkok egymásra hatását. A Falanszter részt kicsit ki lehetne csicsázni egy valódi jövőbeli világgá repülő autókkal, robotokkal, miegymás. Az űr béli színt valahogy úgy magyarázni, hogy Ádám milliárdosként valami űrbázisra költözik ki, stb. Kéne rajta dolgozni, csiszolgatni kicsit a mai kor szellemének megfelelően, de szerintem zseniális lenne. Megkockáztatom, hogy sokkal jobb, mint a Cloud Atlas (ami amúgy maga sem rossz film), sokkal mélyebb történettel és mondanivalóval. Szinte fáj, hogy ez a film bizonyára nem fog elkészülni ... 

#blog   

jQuery alapok


A jQuery az egyik legelterjedtebb JavaScript programkönyvtár. Rengeteg oldal használja, és sok JavaScript keretrendszer épül rá. A követezőkben nagyon röviden azt szeretném bemutatni, hogy mi is ez a jQuery, miért jó, és mire lehet használni. A leírás olvasása alapvető HTML és CSS és JavaScript ismereteket igényel. Ezekre nem térek majd ki külön, mert nagyon elnyújtaná a bejegyzést.

Ha egy mondatban kellene meghatározni, akkor azt mondanám, hogy a jQuery olyasmi mint a CSS, csak itt nem designt rendelünk az egyes HTML elemekhez, hanem működést. Az elemek kijelöléséhez ugyanazokat a szelektorokat használhatjuk, mint CSS esetén, és az így kijelölt elemeket manipulálhatjuk, eseménykezelőket aggathatunk rájuk, lekérdezhetjük az értéküket, vagy valamilyen más működéssel láthatjuk el. Hamarosan mutatok példákat is, de gyorsan nézzük át, mik ennek az egésznek az előnyei:

- Ahogyan a CSS esetén elválik a design a HTML kódtól, ugyanúgy leválasztható a jQuery segítségével a működés is az elemekről. (Ez véleményem szerint néha hasznos, néha nem, de ebbe most ne menjünk bele.)
-  A jQuery-s működés elrejti előlünk a böngészők közötti különbséget. Amire adott esetben többféle elágaztatott JavaScript-re lenne szükség, az jQuery-ben egyetlen hívással megoldható. A jQuery egyébként (tudtommal) az összes ismert nagy böngészőt támogatja, ide értve a desktop és mobil változatokat is.
- Sok mindent sokkal egyszerűbb megoldani jQuery-ben, mint tiszta JavaScript-ben, ráadásul nagyon egyszerűen lehet hozzá új funkciókat adni pluginek formájában, és rengeteg plugin elérhető hozzá a weben. Köztük olyan komplex dolgok is, mint wysiwyg editor, adattáblák, tree komponens, miegymás.

No, akkor nézzük is, hogy megy mindez a gyakorlatban. Ha jQuery-t szeretnénk használni, akkor ugye egy script tag-el be kell hivatkozni. Ezt két módon tehetjük meg. Vagy letöltjük a jQuery aktuális változatát, és azt használjuk, vagy CDN-ről hivatkozzuk be. A CDN egy fix hely a weben, ahol az aktuális változat megtalálható. A legismertebb ilyen CDN a Google féle (http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js). Ennek az az előnye, hogy innen a böngésző egyszer letölti a JavaScript kódot, és utána cache-eli. Mivel sokan használják így a jquery-t, ezért jó esetben már valószínűleg cache-elve van a böngészőben, így mikor a mi weblapunk töltődik be, ezt már nem kell újra letölteni. Olyan baromi nagy különbség amúgy nincs a két megoldás közt, csak érdekesség.

Ha behivatkoztuk a lib-et, elkezdhetjük használni. Készítsünk egy kis HTML olalt, amin van egy gomb (button tag). Rakjunk erre egy eseménykezelőt, ami klikkelésre kiír valami üzenetet. Ez így néz ki:

$('button').click(function(){
  alert('Hello World');
})

Láthatóan nem valami bonyolult. A jQuery-re a $ fv.-el tudunk hivatkozni, aminek paramétere egy css szelektor. Ezek ugyanazok a jelölések, amit css esetén használunk az elemek kijelölésére. Tehát a $('button') jelen esetben azt jelenti, hogy minden button elem-re vonatkozzon a kijelölés. Ezt ki is próbálhatjuk. Rakjunk be még egy gombot az oldalra. Így akármelyikre gyomunk, meg fog jelenni az alert. A $ jel helyett használhatjuk a jQuery nevet is, de olyat is láttam, ahol jq-t használtak. Tehát a $('button'), a jQuery('button') és a jq('button') ugyanazt jelölik. Ha kijelöltük az elemet, akkor jöhetnek az azon végzett műveletek. Jelen esetben a click, ami egy eseménykezelőt helyez az adott elemre. Most nézzünk egy olyan példát, ahol nem eseménykezelőt rakunk az elemre, hanem valamilyen manipulációt végzünk rajta.

$('button').css('font-weight', 'bold');

Ez a sor az összes gomb font-weight tulajdonságát bold-ra állítja, tehát minden gomb felirata vastagon lesz szedve. A jQuery hívásokat láncolhatjuk is, így:

$('button').css('font-weight', 'bold').click(function() {
  alert('!!!');
})

Persze kettőnél sokkal több hívás is követheti egymást, így egész komplex működéseket egész egyszerűen írhatunk le. Ha egy eseménykezelőben az aktuális elemre akarunk hivatkozni, azt a this kulcsszóval tehetjük meg. A this ez esetben a HTML objektumot jelöli, így ha jQuery-s műveletet akarunk rajta végezni, akkor $()-be kell rakni. Erre itt egy példa:

$('button').click(function() {
  $(this).hide('slow');
});

Ez így annyit csinál, hogy ha megnyomjuk a gombot, akkor szépen animálva elrejti azt. De ez alapján elrejthetünk/megjeleníthatünk komplett formokat, stb.

Eddig ugye minden esetben a gombok mindegyikére vonatkozott az adott művelet. Ha pontosabban ki szeretnénk jelölni a célt, akkor használjuk a szokásos css szelektorokat. Adjunk az egyik gombnak egy 'gomb' class-t. Erre a $('.gomb') -al hivatkozhatunk. Így csak a 'gomb' osztályú elemekre fog hivatkozni az adott hívás. Ha egy adott elemet akarunk kijelölni, akkor adjunk neki valami id-t. Ha 'gomb' id-t adunk neki, akkor a css-hez hasonlóan $('#gomb') -al hivatkozhatunk rá. De persze mennek a bonyolultabb szelektorok is. Pl. az item class-u li elemeken belüli gomb class-u gombok, stb.

Amivel még gyakran találkozni, az a $('document').ready esemény, ami jQuery-ben az onload megfelelője. Tehát amit ide írunk, az akkor fog végrehajtódni, ha már teljesen betöltődött az oldal. Amolyan ökölszabályként elmondható, hogy érdemes a teljes jQuery kódot ebbe írni, valahogy így:

$( document ).ready(function() {
  $('button').click(function() {
    $(this).hide('slow');
  });
  ...
});

Hát, indulásnak kb. ennyi szerintem elég. Rengeteg példát találni weben, és a jQuery honlapján (http://jquery.com/). Igény esetén készülhet hasonló leírás egy egy témáról, de mivel a jQuery eszközkészlete elég szerteágazó, írjátok le, hogy pontosan melyik része érdekel, és ha azzal a résszel kapcsolatban van tapasztalat, azt szívesen leírom.

#blog   #jquery

2013. március 16., szombat

Készítettem egy ilyen kis PHP + AngularJS mintát

Van benne kis PHP, kis AngularJS, kis SQL (SQLite-al), meg egy kis JavaScript. Akit érdekel, Cloud9-en ki tudja próbálni, bele tud nézni a forrásba, esetleg igény esetén kár ki is elemezgethetjük, hogy mi mit csinál. 

Reshared post from +Laszlo Fazekas
PHP messageboard

Kíváncsi voltam, hogy lehet-e csupán +AngularJS használatával "értelmes" üzenőfalat csinálni. Végül is az eredmény egy kis (a sallangot leszámítva 1 fájl) PHP alkalmazás lett. Az üzenetek tárolására sqlite-ot használtam, a szerver oldal PHP, a kliens oldal pedig AngularJS és egy kis AngularUI (csak az animáció miatt). Akit érdekel, klónozza le Cloud9-be (itt van hozzá leírás: https://plus.google.com/115334992192871078712/posts/gxfBQsDEsp4) , és ki tudja próbálni. Ehhez ugye index.php-n nyomjunk egy Run-t, majd két böngészőfülön nyissuk meg az url-t. Ha az egyik oldalon írunk valamit, akkor az a másik oldalon is megjelenik 5mp-es frissítéssel. Nem nagy valami, de a célnak pont megfelel.

Gitub repo: git://github.com/TheBojda/php-messageboard.git

#blog   #php   #angularjs   #angularui  

PHP messageboard


Kíváncsi voltam, hogy lehet-e csupán +AngularJS használatával "értelmes" üzenőfalat csinálni. Végül is az eredmény egy kis (a sallangot leszámítva 1 fájl) PHP alkalmazás lett. Az üzenetek tárolására sqlite-ot használtam, a szerver oldal PHP, a kliens oldal pedig AngularJS és egy kis AngularUI (csak az animáció miatt). Akit érdekel, klónozza le Cloud9-be (itt van hozzá leírás: https://plus.google.com/115334992192871078712/posts/gxfBQsDEsp4) , és ki tudja próbálni. Ehhez ugye index.php-n nyomjunk egy Run-t, majd két böngészőfülön nyissuk meg az url-t. Ha az egyik oldalon írunk valamit, akkor az a másik oldalon is megjelenik 5mp-es frissítéssel. Nem nagy valami, de a célnak pont megfelel.

Gitub repo: git://github.com/TheBojda/php-messageboard.git

#blog   #php   #angularjs   #angularui