måndag 12 maj 2008

JavaOne 2008 - Groovy och Grails

Egentligen handlar inte detta om Groovy eller Grails. Det handlar lika mycket om Ruby och Rails eller JRuby. Det är ju i det stora hela i princip samma sak. Rails som ett MVC-webbramverk har länge legat högt upp på min privatprojektslista (alltför länge). Athegas techdagar har handlat om Ruby on Rails, men jag har lyckats missa dom. Därför var det Graeme Rocher från G2One Inc som på JavaOnes första dag äntligen bände upp ögonen på mig. Jag gick i taket!

Så elegant! Under den tio minuter långa frågestunden som följde efter hans 50 minuterssession, skapade jag min första Grails-applikation – gnote, för att spara anteckningar från exempelvis JavaOne-sessioner. :)

Om du också vill skapa din första Grails-applikation på tio minuter, kan du följa denna minitutorial.

Ladda ner och packade upp Groovy och Grails:

wget http://dist.codehaus.org/grails/grails-bin-1.0.2.tar.gz
wget http://dist.groovy.codehaus.org/distributions/groovy-binary-1.5.6.zip

Sätt några miljövariabler:

export GRAILS_HOME=/usr/local/grails-1.0.2/
export GROOVY_HOME=/usr/local/groovy-1.5.6/
export PATH=$PATH:$GRAILS_HOME/bin:$GROOVY_HOME/bin

När miljön är på plats är det bara att skapa applikationen:

grails create-app gnote

Mina anteckningar måste sparas någonstans, så jag skapar en Note-klass:

cd gnote
grails create-domain-class Note

Jag editerar den skapade filen, grails-app/domain/Note.groovy, och lägger till två fält, note och title:

class Note {
String title
String note
}

Till sist vill jag klistra ihop allt med en View och en Controller:

grails generate-all Note

Klart! Starta webbappen:

grails run-app

Det fungerar!


Allt jag behöver göra för att kunna droppa den här applikationen i min favorit-container (Tomcat, Resin, Glassfish, etc.) är:

grails war

Det ger mig en war med kompilerad Javakod innehållandes min applikation, som under ytan förlitar sig på kända ramverk såsom, Hibernate, Spring och log4j.

Därför skulle jag vilja tacka Graeme Rocher, för att du bände upp mina ögon. Jag kan tänka mig en rad olika områden, där jag kommer använda Groovy och Grails framöver.

fredag 9 maj 2008

JavaOne 2008 - Dag 1

Den stora kick-offen! Java + YOU. Spåret i år – det handlar om dig (och Java då förstås). Den stora General Sessions-salen fylls med ca 15 000 människor och på scenen dansar ett ganska trist dansgäng som inte hade klarat uttagningarna till ens den nordiska varianten av So You Think You can Dance. Till cool musik hoppar James Gosling fram och börjar kasta egenhändigt designade T-shirts på publiken med hjälp av en jätteslangbella. Tyvärr har de ingen rökmaskin, det enda som saknas för att vinna över de sista tvivlarna på hur mycket geek JavaOne faktiskt är.

Två saker står ut från öppningsnumret. Neil Young kommer in och berättar att han älskar Java och Blu-ray och passar samtidigt på att sälja på oss hans liv i form av Blu-ray-diskar. Samtidigt hävdar Suns VD att det finns en JVM i alla Blu-ray-spelare. Det hade jag ingen aning om. På vägen ut försöker Neil ta med sig demo-PS3an, fast han skojar bara.

Det andra är att Suns VD, Jonathan Schwartz, är sjukt lik vår finansminister, Anders Borg. Kolla bara; till vänster Jonathan i en bild jag tog på invigningstalet och till höger en bild på Anders som Mats Strand tagit vid ett helt annat tillfälle. Jag har inte gjort något annat med bilderna än att jag frilagt dem.

JavaFX
Tydligen var JavaFX den stora grejen förra året på JavaOne, men då var ju inte jag här så därför var det ganska roligt att se hur lätt man kan skapa allt från GUI-komponenter till grafisk effekter såsom morphning eller animationer. Tyvärr krävs Java 6 som av någon mycket märklig anledning inte finns till min 32-bitars MacOs X. :(

keyFrames: [
KeyFrame {
time: 0s
values: [
geom => shape1 tween Interpolator.EASEBOTH,
color => Color.YELLOW tween Interpolator.EASEBOTH
]
},
KeyFrame {
time: 3s
values: [
geom => shape2 tween Interpolator.EASEBOTH,
color => Color.GREEN tween Interpolator.EASEBOTH
]
}
]

Mycket mer kod än så behövs inte för att morpha från en gul form till en annan, grön form tre sekunder. Ganska intressant. Vem vinner kriget, Microsoft (Silverlight), Adobe (Flex/Air) eller Sun (JavaFX)?

Störst för mig denna dag var ändå Groovy och Grails. Det kräver sin egen post!

onsdag 7 maj 2008

JavaOne 2008 - Java University

Det är ett helt samiskt tempo på sessions, BOFar, Labbar och fester, så det har varit svårt att hinna med att rapportera från JavaOne 2008. Därför kommer här nu en första rapport från i onsdags, två-tre dagar för sent.

Jag hade två kurser inbokade, Developing Enterprise Applications with the Spring Framework på förmiddagen och
Web 2.0: Leveraging the Project jMaki and Google Web Toolkits for Rapid Website Development på eftermiddagen.

Tyvärr satt ingen av kurserna så där perfekt som jag hade hoppats. Chris Richardson, som höll i kursen, lyckades i alla fall få mig att på allvar titta närmare på AOP, aspektorienterad programmering. En annan mycket viktig fördel som Spring hjälper dig med är decoupling (vad man nu kallar det på svenska). Ju öppnare och renare du lyckas hålla det mellan dina klasser och moduler, desto lättare blir det att testa, underhålla och förstå koden. Dessutom låser du dig inte till ett visst teknikval i samma utsträckning.

Vore det inte märkligt att behöva bestämma sig för en livsmedelsaffär där man handlar och sedan behöva leva med det valet för resten av sitt liv?

public class You {
private Konsum store = new Konsum();

public void shop() {
store.shop();
}
}

I det här fallet är You starkt kopplad till affären Konsum och det är svårt eller omöjligt att byta affär utan att skriva om koden. Om vi nu istället tänker oss att vi har ett interface, Store, som representerar en affär där vi handlar och låter något annat (Spring) avgöra var vi handlar:

public class You {
private Store store

public void setStore(Store store) {
this.store = store;
}

public void shop() {
store.shop();
}
}

I Springs konfigurationsfil:

...
<bean id="icaStore" class="se.athega.stores.Ica"/>
<bean id="you" class="se.athega.persons.You"/>
<property name="store"><ref bean="icaStore"></property>
</bean>

...

Allt jag behöver göra nu för att byta affär är att ändra i en XML-fil. När jag vill testa You kan jag enkelt mocka Store och livet har blivit så mycket enklare.

På eftermiddagen var jag på väckelsemöte för Google Web Toolkits. Själva frälsningen stod David Geary för. Han menade att det var synd om alla som använde Struts och skrek "AJAX!" varje gång något hände på sidan utan att den laddades om, även om det bara var att uppdatera ett textfält. Förutom GWT, fick jag en introduktion till JMaki som är en wrapper runt de flesta populära Web 2.0 JavaScript-ramverken, såsom Dojo, YUI, etc. Jag kommer definitivt att använda JMaki för de fall jag behöver blanda de olika ramverken.

Fördelarna med GWT är framför allt att du kan programmera med Layout-paneler och UI-komponenter på samma sätt som du skulle om du gjorde ett desktopprogram. GWT översätter sedan Javakoden du skriver till HTML, CSS och JavaScript, helt automagiskt. Detta ger dessutom en fantastisk fördel tillsammans med Googles fakebrowser, som du kan använda under utveckling, där du kan debugga och stega dig igenom kod, oavsett om det är serverkod eller klientkod.

söndag 4 maj 2008

Avstamp

När jag var 22 år gammal, startade vi Athega. Det är över tio år sedan nu. Jag kan fortfarande komma ihåg känslan när vi, alla fyra samtidigt höll i kuvertet till PRV, på väg in i den gula brevlådan. Vi hade en idé om att Internet kunde användas till mer än hypade webbsidor, skapade av glödheta så kallade webbyråer. Vår plan var att utveckla tre produkter, vilka vi hade någorlunda färdiga på ritbordet.

Den första var ett system för undersökningsföretag att enkelt kunna göra enkätundersökningar på nätet. Den andra ett verktyg för att ta bort flaskhalsen (en HTML-kunnig person) att publicera information på intranätet eller hemsidan. Tanken var att informationslämnaren själv skulle kunna uppdatera sidan. Den tredje var ett system för att skapa en produktkatalog med detaljerad produktinformation, handel med kundvagn och avancerad administration.

1997 fanns ingen av dessa lösningar i någon speciellt imponerande utsträckning. 1999 fanns de dock allihop på marknaden, Vestigo (webbenkäter), Athega NetPublisher (CMS), Athega BizKit (produktkatalog) och hos företag som Skandia, Ericsson och Allgon.

Idag känns det inte särskilt revolutionerande att prata om webbapplikationer, men på den tiden var vårt mantra, ”Hej, vi kommer från Athega. Vi är inte en webbyrå”. Athega kom under åren att utvecklas till ett företag man vände sig till för skräddarsydda webblösningar. När man behövde något som inte gick att köpa i krympplast och kartong. Parallellt med detta började vi också hyra ut specialister inom systemutveckling och projektmetodiker.

Tidigt började varje Athegian skriva fredagsrapporter på vårt intranät. Tanken var att en gång i veckan dela med sig av nya erfarenheter, idéer och tankar. Kort sagt var det som en intern blogg, fast begreppet ”blogg” var inte uppfunnet ännu.

Välkommen till min fredagsrapport!