wk voetbalpool webapp: dag 3

 
06 april 2010

Bij de dagelijkse stand-up meeting van vandaag meldt Jan-Willem dat het nogal lastig is om de Lift-voorbeeldjes aan de praat te krijgen. Het stadium van Hello World is inmiddels voorbij, we willen nu wel eens wat JSON heen en weer gooien. Maar dat is kennelijk nog knap lastig. We moeten eens heroverwegen in hoeverre Lift ons uberhaupt van dienst gaat zijn, want we gebruiken maar een heel klein deel ervan dat waarschijnlijk ook relatief makkelijk zelf te bouwen is door in Scala direct Servlet te extenden.

Er staat alleen wel het voordeel tegenover dat Lift ook van zichzelf Comet lijkt te ondersteunen. Dat hebben we nodig in een Actor-gebaseerd model omdat de enige communicatie van het type fire-and-forget is; je kan dus niet een traditioneel request afvuren en dan verwachten dat je direct antwoord krijgt. Nee, de webbrowser vuurt bijv. een login-request af, het domein behandelt dat request asynchroon – dus er is nog geen antwoord te geven – en even later vuurt het domein een LoginSuccessEvent (o.i.d.) terug. Dan heb je Comet nodig om dat naar de browser te pushen.

Ook GWT, de Google Web Toolkit komt ter sprake, omdat die Java naar JavaScript vertaalt en je de client dus in Java (en hopelijk dus ook Scala) kan programmeren. Anatoly gaat hiernaar kijken.

De suggestie van Ivo (zie zijn reactie op dag 1) om in de Google App Engine cron jobs te gebruiken komt ter tafel: een soort ‘geplande taken’ of ‘timer’ die je elke seconde (of langer) kan opstarten. In eerste instantie lijkt dit een goed idee, maar ofwel we moeten elke keer het hele domein met alle Actoren live trekken wat waarschijnlijk redelijk funest is voor de performance, ofwel we hebben per Actor een cron job, maar dan moet je per afgevuurd bericht de rest van de seconde wachten totdat de target-Actor weer up is om hem af te handelen. Met een beetje complex communicatiepad gaat dat dus ook flink lang duren als we pech hebben. We houden het idee dus in het achterhoofd, maar gaan er nog niet actief mee aan de slag.

Het inwerken in Lift blijkt inderdaad niet heel erg makkelijk. Het is voor mij nitwit soms een hele toer om te achterhalen hoe verschilende onderdelen van de voorbeeld-applicatie samenhangen, hoe een url naar een stuk code gemapt wordt, hoe de template wordt aangevuld met door de code gegenereerde content, enzovoort. Maar na wat bloed, zweet en tranen is toch wel te achterhalen dat bijv. de <lift:bind name=”xxx”> uit bestand yyy.html in de hidden-templates directory samenhangt met de <lift:surround with=”yyy” at=”xxx”> om het ene fragment in het andere in te bedden, en dat de content die op de plaats van <lift:helloWorld.howdy> letterlijk uit de methode ‘howdy’ in klasse HelloWorld komt.

Het stuk voorbeeldcode dat op de website staat om een REST webservice te bouwen, blijkt niet te werken. Het lijkt kennelijk voor een oudere (of misschien wel nieuwere?) versie van Scala en/of Lift te zijn. Het aanpassen van de code blijkt ook nog helemaal geen sinecure te zijn, zeker als je nog geen Scala kent. De syntax van Scala is erop gericht om zo kort en bondig mogelijk te zijn, maar het resultaat is dat het soms zo kortaf is dat het voor een beginneling niet altijd erg makkelijk is om je binnen te vechten. Daarbij is de eclipse plugin ook niet helemaal je van het, waardoor er rode kriebeltjes blijven staan op plekken die je inmiddels al hebt opgelost, enzovoort.

Toch lijken we langzaamaan vorderingen te maken. Babystapjes, dat wel. Met name Jan-Willem (die zich samen met mij op de backend gaat richten) is al een stuk verder. Morgen gaan we ons dus maar eens op Actoren zelf richten, daar was het tensotte om te doen.

…en daarmee werd het half zes, en alles was wel.


Werken met ?
Kijk dan bij onze mogelijkheden voor zowel starters als ervaren engineers.


Categorieën: Development