2012. június 23., szombat

Google App Engine - Tapasztalatok

Ma rászántam magam végre, és feltöltöttem az első alkalmazásom eddig elkészült részét a Google App Engine-be. Persze az azonosító, amit kigondoltam foglalt volt, úgyhogy egyelőre megmaradok a juzraai-nál. :D Előtte azért átnéztem a súgót, mert egy felhasználó max. 10 alkalmazást üzemeltethet: ha egy alkalmazást törlök, akkor visszakapom azt az 1 lehetőséget, szóval ezzel nincs gáz, lehet próbálkozni.

No, hát a feltöltés tök egyszerű, az appcfg update <a-projekt-web-mappája> parancssal. Utána a webes felületen egyszerűen ki lehet igazodni, listázza a verziókat, sőt, verziónként az egyes példányokat is, melyek lefutottak, és hiba esetén megtekinthető a log.

És erre szükség is volt...

My Last Breath

My Last Breath (Demo)

Szintén az egyik kedvencem Amy Lee-éktől, rengeteg érzelem van benne.

2012. június 21., csütörtök

Pár érdekesség

Most vettem észre, hogy tegnap kijött a Google Data API v3 (legalábbis Bloggerhez és Calendarhoz; YouTube-hoz még nem). Elvileg REST technológiát alkalmaz és az eredményt JSON formátumban küldi. A Java kliens lib még bétaverziónál tart.

Illetve haladok a webappommal, remélem majd sikerül felvarázsolnom GAE-be, local gépen működik. JSF 2.0-hoz ajánlanék egy oldalt, nagyon jó tutorialokat találtam itt: mkyoung.com.

2012. június 18., hétfő

Google App Engine SDK + Java

Ma letöltöttem az SDK-t, és kipróbáltam az appszervert. Létrehoztam egy JSF-es webalkalmazást, és ráengedtem.

Persze egy rakat kivételt dobott, picit keresgélni kellett, milyen XML-ekre van szüksége (app-engine.xml), de a legtöbb időt arra vesztegettem, hogy a ClassNotFoundException: javax.faces.webapp.FacesServlet kivétel és a GAE kapcsolatára gugliztam.

A JSF implementáció nem része a GAE-nek, ezért pótolni kell manuálisan. Kipróbáltam a Glassfish könyvtárában levőt, de gondja van vele, újabb (de legalább más) kivételekkel örvendeztet meg. Találtam egy cikket, ahol valaki leírja, mi a hiba, és megoldotta, meghekkelve a jsf-impl lib-et. Ezt a jsf-impl-gae.jar-t és a jsf-api.jar-t (ez utóbbit pl. a GlassFish mappájából) kell hozzáadni a projekthez, és már JSF-et is használhatunk.

Közben pedig támadt már egy webapp ötletem, kíváncsi leszek, futtatható-e GAE-vel. :-)

2012. június 17., vasárnap

Google App Engine

Keresgéltem ingyenes app szervereket, nem sokat találtam. Aztán beugrott, hogy mintha a guglinak lenne, és van: Google App Engine. Beleolvastam a hivatalos leírásba, illetve találtam egy blogot, ahol valaki már használja is, és publikálja tapasztalatait.

Amit nagy vonalakban tud (leírás alapján):
  • fejenként 10 appot lehet feltölteni, mindegyik kap egy *.appspot.com címet (sőt, subdomain-ek is lehetnek még)
  • 1GB-os tárhely, havi 5 millió db oldalletöltés, 60 sec request feldolgozási időkorlát
  • van egy SDK, amivel a local gépen szimulálni lehet az App Engine környezetét, és van uploader tool
  • feltöltéskor új verzió keletkezik, amit ki lehet próbálni, és lehet választani, mely verzió legyen élő a nagyérdeműnek
  • viszont elvileg a fájlrendszer read-only, meg socket-eket sem lehet használni (<- ezek azért ijesztő dolgok :D)

Ki fogom próbálni. :-)

Update @ 2012.06.18: első tapasztalatok az SDK-val

Glassfish érdekesség

Érdekes dolgot tapasztalok az Üveghal szerverrel. Ha NetBeans-ből futtatom a szervert, és leállítom, már nem tudja később újraindítani. Amikor megnézem NB-ben a domain-eket, a kiválasztott domain-re azt írja, hogy "admin-listener disabled or no enabled http-listener". Kérdés, vajon miért állítódik el?

Az első megoldás az volt, hogy létrehoztam egy új domaint. Most kikísérleteztem annyit, hogy csak a domain config mappáját kell lecserélni az első futtatás előttire (esetleg egy manuális indítás utáni verzióra), és akkor ismét tudom indítani NB-ből. De hát ez így nem állapot.

A NB egyébként annyiból is bugos, hogy a JavaDB network servert nem állítja le kilépéskor, manuálisan kell megtenni a javadb/bin/stopNetworkServer.bat-tal.

(NetBeans 7.1beta, Glassfish 3.1.1, a NB töltötte le)

Update @ 12:22: Rájöttem! :D

Egész egyszerűen nem szereti az ékezetes betűket a domain.xml-ben. Merthogy a projektem elérési útvonalában volt 1-2 ékezet, és ez az elérési út bekerül ebbe a fájlba, és a szerver indításakor ParseError-t produkál. (Amit az üveghal manuális indításakor kiírt exception sorozatból olvastam ki, a NB erről véletlenül sem tájékoztat.)
Tanulság: felejtsük el az ékezetes mappaneveket! :D

2012. június 16., szombat

And the journey begins

Ma jutottam el odáig, hogy telepítettem a GlassFish szervert, létrehoztam az első EE-s projektemet, és beírtam a gugliba: "java ee tutorial". :D

Találtam egy "nagyongyorstalpalót", ami arra jó volt, hogy legalább valami fogalmam van róla, kb. miről szól az EE, meg 1-2 fogalmat is definiált (még ha talán "pongyolán" is).

Persze az első találat a hivatalos Oracle tutorial volt, amit már ismertem is korábbról, csak valahogy nekem nagyon töménynek tűnt anno.

Aztán találtam egy könyvajánlót: Beginning Java EE 6 Platform with GlassFish 3: From Novice to Professional (Antonio Goncalves tollából). Ahogy belelapoztam, egész korrekten elmagyarázza, a JPA-t is, szerintem ezt fogom forgatni.

u.i.: jó érzés volt, amikor olvastam a "nagyongyorstalpalót", hogy új dolgokat tanultam :-)

2012. június 14., csütörtök

YouTube API + Java

Neki is ültem, és kipróbáltam a YouTube API-hoz készült Java kliens library-t.

A bevezető doksiban leírtak eléggé pongyolák, mert nem csak a gdata-client-xx és a gdata-youtube-xx JAR fájlok kellenek a futáshoz, hanem még jó pár. Illetve még le kell tölteni hozzá a Java Mail API-t is.

A következő library-k kellenek a projekthez (ami egy videó feed/entry adatait kérdezi le):
  • gdata-client-1.0.jar
  • gdata-core-1.0.jar
  • gdata-media-1.0.jar
  • gdata-youtube-2.0.jar
  • guava-11.0.2.jar
  • mailapi.jar

Az alábbit próbáltam ki, és működik, egész pofás. :-)
YouTubeService yts = new YouTubeService("My first YouTube API app :-)");

String url = "https://gdata.youtube.com/feeds/api/users/juzraai/uploads?v=2";
VideoFeed vf = yts.getFeed(new URL(url), VideoFeed.class);

for (VideoEntry ve : vf.getEntries()) {
    printVideoEntry(ve, true); // ld. doksi
}

Amit a doksiból bemásolt metódus nem ír ki, az a yt:rating elem adatai, amiben a like és dislike számlálók vannak. Ezt a VideoEntry-ből a getYtRating()-gel kérdezhetjük le.
String url = "https://gdata.youtube.com/feeds/api/videos/XPBwXKgDTdE?v=2";
VideoEntry ve = yts.getEntry(new URL(url), VideoEntry.class);

System.out.println(ve.getTitle().getPlainText());
System.out.println(ve.getHtmlLink().getHref());

if (ve.getYtRating() != null) {
    System.out.println("Likes:    " + ve.getYtRating().getNumLikes());
    System.out.println("Dislikes: " + ve.getYtRating().getNumDislikes());
}

YouTube Data API

Ezerrel agyalok ötleteken, milyen progit írjak, ami hasznos is és érdekes is. Ma feltöltöttem egy YouTube videót, és bevillant valami: írhatnék egy progit, ami megnézi nekem, hányszor nézték meg, hogy értékelték, etc. Persze, ezt megnézhetném én is, böngészőből, de így elsőre érdekesnek tűnik. :D

A Google (szerintem) minden termékéhez van egy API, melyek tulajdonsága, hogy HTTP protokollon keresztül lehet adatokat lekérdezni (és frissíteni!), az adatokat pedig XML formátumban kapjuk.

A YouTube-hoz is van ilyen, és böngészőből nézve is egész kényelmesen lehet használni infószerzésre. Az alábbi sémájú URL-ekről lehet adatokat elérni:

https://gdata.youtube.com/feeds/api/videos/<videó azonosítója>?v=2
https://gdata.youtube.com/feeds/api/users/<felhasználónév>?v=2
https://gdata.youtube.com/feeds/api/users/<felhasználónév>/uploads?v=2
stb.

Le lehet kérdezni, hogy az egyes videókat hányszor nézték meg, hány like/dislike érkezett rá, hányan rakták kedvencekbe; le lehet kérdezni egy felhasználó kedvenc videóit, saját feltöltéseit, stb. 

A linkek végére a v=2 paraméter azért kell, mert azzal kaphatjuk meg a legfrissebb, YouTube API 2.0 által szolgáltatott adatokat. Például, ha nem tesszük oda, akkor még a régi, 5 fokozatú értékelés adatait kapjuk csak meg egy videóhoz.

Persze nem muszáj XML-ekkel bajlódni, létezik Java-hoz (meg más nyelvekhez is) library. :-)

Ki is próbáltam...

Ki van ez találva

Tegnap rögzítettem az alábbi covert. Instant metál verzió Kowalsky meg a Vega Ki van ez találva c. számából. Nem hibamentes, de sebaj, a lényeg, hogy ott sikere[m] volt, ahol szerettem volna. :-)


Technikai adatok: Vorson EDG-46 LH gitár, Powerstate PG-10G erősítő, Beta Aivin HM-100 effekt (igen, low-budget infrastruktúra, de a hobbi szinthez megteszi :D). Az ASUS laptopommal rögzítettem. :-)

2012. június 7., csütörtök

Alkotói válság

Habár anno úgy határoztam, semmilyen személyes jellegű írást nem teszek közzé, ez most mégis egy picit az lesz. Elsősorban azért mégiscsak a programozáshoz kapcsolódik, ezért találtam úgy, hogy kiírom.

Mostanság (= az elmúlt pár évben) alkotói válságban vagyok: vagy nincs ötletem, hogy mit programozzak, vagy ha van, akkor belekezdek és 10 perc múlva kiikszelem az IDE-t. Ez most, a vizsgaidőszak végével és a nyár berobbanásával ismét nagyobb gond. És próbálok agyalni, milyen programot írjak, ami fenntartja az érdeklődésem.

Tervben van egy gitáros progi, amilyet már korábban is készítettem más nyelveken, meg átnézhetném a többi régi Delphi-s progimat - hátha valamelyik szimpi és kedvem támad remake-elni Java-ban. (Hmm... például az amőba progim!) A minap elkezdtem egy sudoku modellt is, de egyszerűen lusta vagyok folytatni, pedig érdekes.

Továbbfejleszthetném a szakdolim is, ez is az ötletlistán van: újraépíteném a GUI-t, meg még 1-2 funkciót implementálhatnék. Ki akarom próbálni az új Scene Builder-t a JavaFX-hez, csak a múltkori upgrade mizéria után már kisebb fenntartásokkal vágnék bele egy újabb telepítés sorozatba. :D (Noha NB 7.2beta kell neki... és múltkor is a beta verzió volt működőképes :D)

Viszont ami a jövőm szempontjából kiemelten hasznos lenne: Java EE. Neki akarok indulni, át akarom látni, meg akarom tanulni. Csak el kell kezdeni. :-)

Vendégkönyv

Arra gondoltam, hogy csinálok egy vendégkönyvet a blogomra, ahol általános, nem a konkrét bejegyzésekhez kapcsolódó megjegyzésekkel lehet színesíteni az oldalt - pl. vélemény nyilvánítás, ötletek, kritikák. Szóval íme, ez a bejegyzés lesz a vendégkönyv. :-)