wk voetbal webapp: dag 2

 
05 april 2010

Dag twee begint voor mij met het verder onderzoeken van wat de mogelijkheden van de Amazon EC2 (Elastic Compute Cloud) zijn. Amazon heeft zijn EC2 goed gedocumenteerd; er is een uitgebreid overzicht te vinden op de overzichtspagina waarvandaan je kan doorklikken naar o.a. een pagina met resources (documentatie, gereedschappen, voorbeeldcode, artikelen, …). De Getting Started Guide (HTML, PDF) geeft een stap-voor-stap instructie hoe je een AMI (Amazon Machine Image) moet aanvragen, opstarten, en weer down brengen. Zo’n AMI is in feite gewoon een VM image om in de EC2 te draaien, en er zijn er al vele tientallen kant-en-klaar beschikbaar met allerlei combinaties van besturingssystemen (Linux, Windows, Solaris, …) en software – en als ze je niet bevallen kan je er zelf een bouwen. Via de AWS Management Console start je de instanties op en sluit je ze weer af, en je kan met SSH/Putty of met remote desktop verbinding maken met een draaiende instantie.

Vervolgens werd het tijd om Scala eens nader te bekijken. Er is een vergadering met de opdrachtgever om half twee binnengekomen, dus alle tijd, dacht ik. Er zou eerst vergaderd worden om tien uur, maar dat is kennelijk uitgesteld… dacht ik. Dus om 5 over tien staat Ralf naast mijn buro: waar ik blijf? Hm, oeps!

Het nadeel van interne projecten is dat bijna alles voorrang heeft: niet alleen ziekte of dagjes vrij, maar ook gesprekken met de coach of presentaties voor nieuwe Sogyo-werknemers. Een kleine opkomst dus. Ik doe snel mijn verhaal over EC2 en daarna gaat het over het ontwerp van het programma. Welke actoren spelen een rol? De User is een actor, dat is al vrij snel duidelijk. De verschillende wedstrijden uit de competitie lijken niet ‘actief’ te zijn, dus daar hoeven we waarschijnlijk geen actoren van te maken. De views die de beeldschermen representeren zijn waarschijnlijk weer wel actoren, maar deze zitten voornamelijk in het ‘query’-gedeelte (in CQRS-termen) en niet echt in het domein zelf (in DDD-speak) dus of dit ook echt actoren moeten worden…? Het heetste hangijzer (qua Actor-schap) zijn nog wel de verschillende pools. Kan een speler meedoen aan meerdere pools? En kan hij dan ook voor verschillende pools verschillende voorspellingen invullen? Dat is nog niet echt duidelijk, en de vergadering met de opdrachtgever moet hierin meer duidelijkheid brengen.

Om half twee is nu ook Jan-Willem aanwezig. Hij weet tegen wie Nederland als eerste moet spelen. We hebben dus eindelijk een domein-expert in ons midden! In deze vergadering komt ook weer het design-to-nog-toe aan de orde, met de nadruk op hoe de verschillende onderdelen naar de buitenwereld moeten gaan communiceren: hoe praat het domein met de webserver? Gaan we een webservice bouwen of houden we het bij een webapplicatie? Doen we REST of een ander protocol? Hoe praten de Android- en iPhone-applicaties met het domein? Nog geen definitieve beslissingen, maar er passeren wel heel wat mogelijkheden de revu. REST lijkt een makkelijk toepasbare en bekende ‘standaard’ te zijn, dus we zullen eerst onderzoeken of dat een mogelijkheid is.

De rest van de dag gaat op aan het up-and-running krijgen van achtereenvolgens eclipse (simpel, gewoon een zipje downloaden en uitpakken); scala (via eclipse: menu help -> install new software -> work with: http://www.scala-lang.org/scala-eclipse-plugin); en het Lift webframework (volledig geschreven in Scala, en te downloaden vanaf www.liftweb.net). Op hun website staat een simpel stukje voorbeeldcode dat een REST-service implementeert – reden te meer om Lift eens in te zetten – al is het maar op proef. Lift heeft Maven nodig, wat als onderdeel van de installatie meegenomen kan worden.

Als proefopstelling volgen we de instructies in Getting Started with Lift om een eerste webapplicatie via Lift de lucht in te krijgen; vanzelfsprekend is dat Hello World. Een ingewikkeld Maven-commando (zie de Getting Started; ik weet net genoeg van maven om te weten dat een pom een soort makefile is) moet hiervoor zorgen, en de eerste 5 a 10 minuten is’ie alleen bezig met alleen al poms en jars en weet ik wat niet al aan het downloaden. Daarna staat er een helloworld-directory klaar met source code en een pom. Het commando ‘mvn jetty:run’ zorgt ervoor dat de webapplicatie gebuild en gerund wordt – maar niet nadat ook ditmaal een hele berg poms en jars worden gedownload. Jetty moet tenslotte ook eerst geinstalleerd zijn voordat we er gebruik van kunnen maken.

Toch: so far so good – na afloop surfen we naar localhost poort 8080 en warempel, Hello World!

Maar we willen meer. Op zijn minst willen we dat we ‘Blablabla’ op ons beeldscherm krijgen te staan, laat staan dat er een REST-based webservice komt te draaien. Het lanceren van Jetty en Hello World kon nog buiten eclipse om, maar nu willen we het project toch binnen eclipse hebben om de source te kunnen aanpassen. Gelukkig bestaat er een Maven plugin voor eclipse, zodat we hopelijk de zonet gegenereerde pom kunnen importeren. Deze installeer je ook weer via help -> install new software -> work with: http://m2eclipse.sonatype.org/sites/m2e.

Na installatie wordt gevraagd om eclipse opnieuw op te starten. En dan begint de ellende: de maven-plugin wil per se dat eclipse op een java-omgeving uit de jdk draait; de ‘gewone’ jre is niet goed genoeg. Niet alleen de binnen eclipse geinstalleerde JRE’s moeten uit de JDK komen – nee, ook de eclipse.ini moet aangepast worden zodat hij naar een jdk wijst. maar de optie -vm lijkt in dit geval niets uit te halen. Het path met of zonder aanhalingstekens eromheen, geen verschil. Vooraan of achteraan de .ini, het maakt niets uit. Google lijkt ook niet erg te helpen, maar we vinden uiteindelijk wel een manier om hem vanaf de opdrachtprompt zonder klagen te starten. Waarom dezelfde optie binnen de .ini niet lijkt te werken is een raadsel… totdat we na misschien wel een uur erachter komen dat de optie-schakeling -vm en de argumenten ervoor… NIET OP DEZELFDE REGEL MOGEN STAAN!?!?

Maar uiteindelijk is die horde genomen, en kunnen we de pom importeren. eclipse laat meteen een flink aantal rode kruisjes zien: errors! En runnen als Maven build geeft de error dat er geen settings.xml in mijn maven-directory staat. Nou is die met kladblok en google redelijk simpel in elkaar te knutselen: alleen het document element hoeft erin, verder is niets verplicht. Opnieuw opstarten (voor de zekerheid) en de run as Maven build geeft alleen nog waarschuwingen. Helaas blijkt het vervangen van ‘Hello world’ door ‘blablabla’ op poort 8080 niet veel indruk te maken. En die kruisjes dus nog, da’s wel vreemd.

Maar rechtsklikken op het project geeft menu-optie Scala -> Add Scala Nature (ik ga mijn volgende programmeertaal ‘Buddha’ noemen) en de kruisjes zijn weg. Nogmaals rechtsklikken, run as… Maven install, en jawel, op de valreep van het weekend is het dan gelukt. Poort 8080 zegt braaf ‘blablabla’.

…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


Reactie

  • Leuk om te lezen Jasper, vlot geschreven en tussendoor nog best wat nuttige info. :-)

    Geplaatst op 08 april 2010 om 20:05 Permalink