dinsdag 17 augustus 2010

Nederlanders blijken actiefste online kopers van Europa

Op de Nederlandse retailmarkt koopt 71% van de consumenten wel eens iets online. Het aantal Nederlanders dat online artikelen koopt zal volgens Forrester de komende vier jaar met 2 miljoen stijgen van 9 miljoen naar 11 miljoen.

Nederlanders blijken bovendien relatief veel vertrouwen te hebben in de veiligheid waarmee online financiële gegevens kunnen worden achtergelaten bij een aankoop. Minder dan 7% van de Nederlanders is bezorgd over de problemen die bij online transacties kunnen ontstaan. Het onderzoek van Forrester besloeg de West-Europese en Amerikaanse online retailmarkt. Naar verwachting zal in deze landen het aantal online kopers oplopen van 141 miljoen nu naar 190 miljoen in 2014. Ook de bestedingen zullen stijgen, in de Verenigde Staten naar verwachting met jaarlijks 10% en in Europa met gemiddeld 11%. In 2014 zal de omzet zijn opgelopen tot 114 miljard euro.

In Nederland bereikt de omzetgroei naar verwachting het Europese gemiddelde van 11%, terwijl Duitsland en het Verenigd Koninkrijk waarschijnlijk een gemiddelde jaarlijkse omzetgroei van respectievelijk 9 en 10% zullen bereiken. Wel blijft de Britse online retailmarkt de grootste van West-Europa, met een omzet van 40 miljard euro en een aandeel van 35%.

Bron: profnews

dinsdag 13 april 2010

OHRA kiest ISAAC voor her-implementatie websites

Na een uitgebreide oriëntatie kiest OHRA voor ISAAC als partner bij  het implementeren van één centraal content management systeem (CMS). De combinatie van jarenlange ervaring binnen de banking & finance markt enerzijds, en de gedegen expertise van ISAAC aangaande het krachtige content management systeem dotCMS anderzijds, is voor OHRA in deze keuze bepalend geweest.

Binnen de Delta Lloyd groep, waar OHRA toe behoort, verleent ISAAC reeds enkele jaren diensten op het gebied van interaction design, usability advies, conversie optimalisatie en technische ondersteuning. Tevens realiseerde ISAAC de website izio.nl en diverse aanvraagmodules voor financiële producten.


Gehele online portfolio beheren binnen één CMS
De online portfolio van OHRA omvat, naast de website van het eigen label, diverse websites voor de verkoop van verzekeringen en financiële diensten via internet. Deze websites zijn in het verleden gerealiseerd door verscheidene leveranciers, al dan niet voorzien van een CMS en gebaseerd op diverse technieken.

Deze diversiteit en het ontbreken van standaarden komt het beheer van de websites niet ten goede. Derhalve de wens vanuit OHRA om deze websites te beheren vanuit één content management systeem.


Flexibiliteit en schaalbaarheid met dotCMS
ISAAC biedt met dotCMS een sluitende  oplossing voor deze problematiek. dotCMS is een open-source content management systeem en tevens leverbaar als enterprise versie (met support beschikbaar). dotCMS biedt de mogelijkheid om meerdere websites te beheren binnen één content management systeem. Eerder zette ISAAC dotCMS al in voor meer dan 30 domeinen in de financiële sector.

Door het standaardiseren van de verschillende websites betekent dit gemak in beheer en een reductie van de productietijd bij het opzetten van nieuwe websites. Tevens beschikt dotCMS over  een uitgebreid rechtensysteem om delen van websites beheerbaar te maken voor specifieke gebruikers.

Andere voordelen van dotCMS zijn onder andere:

  • Gebruiksvriendelijke admin-interface
  • Herbruikbaarheid van content binnen meerdere websites
  • Staging functie, aanpassingen doorvoeren binnen het CMS zonder deze direct live te plaatsen
  • Plug-in architectuur voor het toevoegen van maatwerk en nieuwe functies
  • Volledig gebaseerd op open standaarden

ISAAC is één van de drie certified partners van dotCMS binnen Europa. Wilt u weten welke voordelen dotCMS uw organisatie kan opleveren? Of geïnteresseerd in een demonstratie? Neem dan contact op met ISAAC.

vrijdag 26 maart 2010

Publiek kiest voor Modern.nl als beste webwinkel

Modern.nl heeft de publieksprijs gewonnen voor de beste webwinkel in consumentenelectronica en huishoudelijke apparatuur. Dat werd bekend tijdens het gala van de Nationale Thuiswinkel Awards 2010 op 26 maart jl.

Het publiek stemde massaal op modern.nl tijdens een vooronderzoek waarbij consumenten de mogelijkheid hadden te stemmen op hun favoriete webwinkel. In de categorie grote webwinkels voor electronica en huishoudelijke apparatuur was de concurrentie groot, maar modern.nl won de Thuiswinkel Award overtuigend met de meeste stemmen.

Powered by ISAAC

ISAAC is erg trots dat Modern.nl deze prestigieuze prijs won. ISAAC en Modern.nl werken al jaren samen aan de ontwikkeling van de webwinkel. Snel inspelen op de behoeftes van de klant is belangrijk bij het daadwerkelijk succesvol maken van een webshop. ISAAC is dé partner voor Modern.nl als het gaat om de juiste uitstraling, een heldere gebruikersinterface en thematisering van de site rond speciale dagen als Moederdag, Valentijn en Kerst. Daarnaast verzorgt ISAAC de Modern.nl nieuwsbrieven en bieden wij ondersteuning in de online marketing. Ook ontwikkelden we diverse actiematige onderdelen, zoals een gedichtengenerator met Sinterklaas en een WK-wedstrijd. Die samenwerking betaalt zich nu uit in de waardering van het publiek!

ISAAC ondersteunt naast Modern.nl ook andere webshops. Zowel op technisch gebied als strategie en interaction design is ISAAC specialist in succesvolle webshops.

Meer weten over ISAAC webshop diensten?

vrijdag 29 januari 2010

Kostenreductie op het gebied van customer service

Self Service diensten

Voor de financiële dienstverlener Laser Nederland heeft ISAAC een volgende fase in het project "Self Service" afgerond. De compleet door ISAAC ontwikkelde portals worden maandelijks door tienduizenden klanten gebruikt. In februari 2009 zijn de portals voorzien van extra functionaliteit waarmee klanten, in een beveiligde omgeving, zelf wijzigingen kunnen doorvoeren in het back-office van Laser.

Met behulp van "self service" weet Laser Nederland flinke reducties te behalen op de werkdruk van het call-center. Klanten kunnen zonder wachttijd aan de telefoon hun aanpassingen direct doorvoeren, waardoor het back-end main-frame de meest actuele data bevat zonder dat hiervoor (zorgvuldig getrainde) agents als interactiemiddel tussen klant en systeem nodig zijn.

In dit traject werkt ISAAC nauw samen met business analisten van Laser. Elk nieuw "self service"-item is een zorgvuldige, op de online wereld toegespitste adaptatie van een bestaand werkproces van het Laser call-center. ISAAC werkt hiervoor een interactieve schermflow uit, ontwikkelt deze tot een online wizard (geschikt voor alle veelgebruikte internetbrowsers), en verzorgt de technische real-time interactie met het main-frame. Deze interactie verloopt via een geavanceerde, in eigen huis ontwikkelde JEE middle-ware laag uit de "Pangaea Finance"-familie. De Pangaea middle-ware laag is sinds 2007 in gebruik bij Laser en biedt een robuuste omgeving met de steeds toenemende drukte op de websites.

Meer weten over customer portals of kostenreductie op het gebied van customer service, neem contact op met ISAAC.

donderdag 24 december 2009

Software ontwikkelen is een prachtvak!

We kennen allemaal de beroepen die standaard een hoog aanzien genieten in onze maatschappij. Neem nu bijvoorbeeld de chirurg, de piloot of de architect. Voor sommige mensen is het zelfs statusverhogend om te vermelden dat de broer van de neef van de schoondochter arts is. Logisch is dat natuurlijk wel, het zijn nu eenmaal beroepen die gemakkelijk tot de verbeelding spreken. De chirurg die een mensenleven redt, de architect die een prachtig – voor iedereen dagelijks te bewonderen – gebouw heeft ontworpen, en de piloot die de bijna goddelijke gave bezit om ons binnen een etmaal naar de andere kant van de planeet te vliegen.

Maar mag ik nu even de aandacht om het over een zeker zo mooi beroep te hebben (tromgeroffel): De Software Ontwikkelaar. Vergeleken met bovengenoemde beroepen bestaat dit vak nog niet zo lang en spreekt het misschien wat minder tot de verbeelding. Omdat het vak nog niet zo lang bestaat, betekent dit dat we voor veel problemen die we tegenkomen nog geen standaard oplossing hebben, en dus iets nieuws zullen moeten verzinnen. En dat is nu juist hetgeen dat dit vak zo interessant maakt. Nieuwe inzichten en technieken volgen elkaar dan ook in rap tempo op. Gelukkig houden wij dit bij ISAAC nauwgezet in de gaten en proberen we de nuttige dingen eruit te pikken.

Het schrijven van de code door de software ontwikkelaar is een creatief proces. In grote lijnen weet de ontwikkelaar wel op welke manier deze de applicatie zal gaan vormgeven, maar tijdens het ontwikkelen dienen er nog veel oningevulde vragen te worden beantwoord. Gelukkig maar, want dit is een creatief proces dat dit vak zo leuk maakt! Het is hierbij van groot belang dat een ontwikkelaar op de hoogte is van standaard design patronen (design patterns) en algemene design principes. Hieraan kan de eigen geschreven code voortdurend getoetst worden. Een goede ontwikkelaar denkt bij het schrijven van elk stuk code of dit in lijn is met de algemene design principes en weegt voor en nadelen af. Ook herkent een goede ontwikkelaar de problemen die met de toepassing van een standaard design patroon (design pattern) kunnen worden opgelost. Het kan een enorme kick geven om op deze manier hele schone, beknopte en onderhoudbare code te schrijven. Vakwerk dus!

Het goede nieuws is, dat ondanks de razendsnelle ontwikkelingen op het vakgebied, deze algemene patronen en principes veel minder aan verandering onderhevig zijn en dus de kwaliteit van de software kunnen waarborgen.

Om af te sluiten met een paar hele mooie (object georiënteerde) design principes:

  • Encapsulate what varies (iets dat vaak verandert, kun je beter isoleren zodat je het kunt wijzigen zonder andere onderdelen te beinvloeden).
  • Program to interfaces, not implementations (gebruik een interface om tegen een component aan te praten, zodat je de concrete component later nog kunt wijzigen).

maandag 16 november 2009

ISAAC voor derde keer bij 50 snelste groeiers

PERSBERICHT

Eindhovens internettechnologiebedrijf groeit snel verder
ISAAC voor derde keer bij 50 snelste groeiers

Eindhoven - Internettechnologiebedrijf ISAAC uit Eindhoven blijft snel doorgroeien. Dat leverde voor het derde jaar op rij een plek op in de Deloitte Fast 50; de ranglijst van vijftig technologiebedrijven met de hoogste procentuele omzetgroei. Een plek veroveren was dit jaar aanzienlijk moeilijker, want de lijst bevat voor het eerst niet alleen Nederlandse maar ook Belgische bedrijven.

Waar menig aanstormend technologiebedrijf in de Fast 50 kortstondige groei doormaakt en vervolgens net zo snel weer uit de lijst tuimelt, weet ISAAC al drie jaar op rij stand te houden. De omzetstijging van 457% sinds 2004 is dus duidelijk geen kortstondige groeispurt, maar een teken van stabiele groei. Passie voor internet is wat volgens CEO Mark Hogendoorn aan het succes ten grondslag ligt. "Onze professionals weten niet alleen alles van de nieuwste technologieën, maar kunnen die ook zodanig toepassen dat ze een daadwerkelijke bijdrage leveren aan de resultaten van onze klanten."

Internet onvermijdelijk in vitale bedrijfsprocessen
ISAAC ondersteunt haar klanten bij het optimaal benutten van de zakelijke mogelijkheden van internet. Uitgangspunt is dat het voor organisaties steeds vaker onvermijdelijk wordt om internet in te passen binnen vitale bedrijfsprocessen. Tot de kerntaken van ISAAC behoren advies, ontwerp, realisatie en beheer van online applicaties. In de praktijk varieert dat van het bouwen van websites tot de online ontsluiting van complexe backoffice-applicaties. Een opvallende ontwikkeling binnen het bedrijf is dat het zich steeds meer toelegt op specifieke sectoren, zoals retail en in toenemende mate ook de financiële dienstverlening.

Internettechnologie maakt bank transparanter
Banken en andere financiële dienstverleners ontdekken dat de technische know how van ISAAC nieuwe mogelijkheden biedt voor transparantie naar consumenten. Denk aan saldo-informatie via de mobiele telefoon, realtime inzicht in creditcarduitgaven en inzicht in de actuele status van pensioenen en verzekeringen. Ontsluiting van die gegevens via internet was vaak een probleem vanwege de veelal verouderde databasearchitectuur van veel financiële instellingen. ISAAC ruimt dat obstakel effectief uit de weg met Pangaea middleware. Dankzij dat revolutionaire ‘enterprise application integration’-systeem kunnen uiteenlopende applicaties probleemloos met elkaar en met gekoppelde websites communiceren.

Over ISAAC
ISAAC ontstond in 1999 aan de Technische Universiteit Eindhoven. Sindsdien groeide het uit tot een zelfstandig bedrijf met meer dan dertig medewerkers en grote klanten als LaSer Lafayette Services Nederland (bekend van o.a. PrimeLine, Directa en cobranded Visa kaarten), De Harense Smid, Impact Retail, Paysquare en Repay International.

woensdag 4 november 2009

"Grensverleggende integratie en productiviteit" met Adobe CS4


Voor de Adobe Cross-Media Roadshow 2009 trokken de webdesigners en webdevelopers van ISAAC dinsdagmiddag 3 november naar de Witte Dame te Eindhoven.

Dagelijks terugkerende taken efficiënter uitvoeren

Aan de hand van een Cross-Media campagne toonden de Adobe experts ons daar de workflow voor het creëren, bewerken en publiceren van onze ontwerpen. Zowel productspecifieke functies alsmede de samenwerking tussen de verschillende CS4-applicaties stonden centraal.

Aan bod kwamen o.a. Adobe Bridge, Adobe Photoshop, Adobe Illustrator, Adobe Flash, Adobe Dreamweaver en Adobe Indesign; software waar de web-afdeling van ISAAC dagelijks mee werkt aan haar web-projecten.

4 nieuwe functies waarmee Creative Suite 4 (Web Premium) ISAAC tijd bespaart en onze klanten geld bespaart:

Slimme objecten in Dreamweaver (Dreamweaver)
Plaats een Adobe Photoshop® PSD-document in Dreamweaver om een afbeelding te maken als slim object, direct gekoppeld aan het bronbestand. Breng wijzigingen aan in de bronafbeelding en werk uw afbeelding bij in Dreamweaver zonder Photoshop te openen.

Objectgebaseerde animatie (Flash)
Verkrijg volledige controle over afzonderlijke animatieattributen dankzij objectgebaseerde animatie, waarmee tweens rechtstreeks op objecten worden toegepast in plaats van op sleutelbeelden. Breng moeiteloos wijzigingen aan in bewegingen dankzij de Bézier-handvatten.

Live weergave (Dreamweaver)Ontwerp uw webpagina's in browsersituaties uit de praktijk met de nieuwe functie Live weergave in Adobe® Dreamweaver® CS4, met behoud van rechtstreekse toegang tot de code. Wijzigingen aan de code worden onmiddellijk weerspiegeld in de gerenderde weergave.

Zo schalen dat inhoud behouden blijft (Photoshop)
Met de nieuwe en revolutionaire functie Zo schalen dat inhoud behouden blijft, kunt u een afbeelding automatisch opnieuw samenstellen als u de grootte ervan aanpast, terwijl essentiële gebieden behouden blijven wanneer de afbeelding de nieuwe afmetingen aanneemt. Maak de perfecte afbeelding in één stap, zonder tijdrovende bewerkingen om de afbeelding bij te snijden of te retoucheren.

Genoeg voor nu, wij gaan experimenteren met deze nieuwe functies...

maandag 12 oktober 2009

Sociale netwerk explosie

Afgelopen jaren is er steeds meer en een steeds grotere focus door websites op het sociale aspect van het internet. De gebruikers kregen de kans om zelf inhoud toe te voegen aan websites door bijvoorbeeld het schrijven van beoordelingen. Een van de eerste die hiermee begon was Amazon die haar klanten reviews op de website liet plaatsen (wat nu al 15 jaar geleden is).
Tegenwoordig is er een ware explosie gaande in het aantal sociaal georiënteerde websites. En als je al een website hebt wil je of inhaken op bestaande sociale netwerk websites, of zelf functionaliteit hiervoor toevoegen.

Daarom zie je tegenwoordig ook veel websites met de mogelijkheid om een pagina te ‘tweeten’, of toe te voegen aan je Facebook of MySpace pagina. Mits dit goed gebeurd kan dit een zeer krachtige marketing tool zijn en kan zelfs goed gebruikt worden voor klantenondersteuning.
Veel mensen hebben het succes gezien van de al bestaande grote jongens op het gebied van sociale netwerken. En proberen het succes te kopiëren, of proberen een nieuwe unieke dienst aan te bieden, in de hoop hun eigen niche te vinden. En dit heeft voor een explosie gezorgd in het aantal sociale netwerken en van websites die hiervan gebruik maken.

En dit levert inderdaad soms interessante resultaten op. Zoals de dating site Gelato die jouw gegevens van andere sociale netwerk sites verzamelt voor het bouwen en weergeven van je profiel. Of bijvoorbeeld Wakoopa die statistieken verzamelt over je software gebruikt. En je in contact brengt met vergelijkbare gebruikers of nieuwe software voorstelt.

De genoemde voorbeelden zijn leuk en interessant om eens mee te spelen. Maar er is een nieuwe die echt mijn aandacht heeft getrokken en ik niet kan wachten tot ik hier eens goed mee kan spelen. En deze sociale netwerk site is FourSquare.

FourSquare laat een nieuwe trend zien (en is niet de enige hierin): het sociale netwerk als spel.
Bij FourSquare doe je een ‘Check in’ als je een bepaalde locatie bezoekt, bijvoorbeeld een bioscoop of je favoriete bar. En voor elke ‘Check in’ krijg je punten of zelfs zogenaamde ‘badges’. Grappig om te zien en aan mee te doen, maar nog niet gelijk waarom ik zo enthousiast ben over de nieuwe sociale netwerk site.

Waar ik vooral heel enthousiast over ben is dat gebruikers tijdens zo’n ‘check in’ iets over de locatie kunnen schrijven. Dus ervaringen, tips en suggesties kunnen delen. Dit geeft je gelijk een goed idee hoe mensen over de zaak denken en wat er te doen is op dat moment. Zeer waardevolle informatie als je even wilt weten of een bepaalde zaak of locatie goed is.

En door dit heeft FourSquare ook de aandacht getrokken en enkele bekende financiers gekregen. En FourSquare heeft ook gelijk een inkomstenbron veilig gesteld: advertenties (iets wat Twitter nog steeds niet gelukt is om goed te integreren). En dit zijn niet de standaard advertenties in de vorm van een banner hier en daar. De advertenties zijn gericht op de gebruiker en waar hij is. Dus als je bijvoorbeeld bij een bepaalde bar een ‘check in’ doet, kan het zijn dat je een advertentie te zien krijgt met daarin een aanbod om een drankje met korting te kopen. Zeer slimme manier om te adverteren, en gelijk ook op een manier die interessant is voor de gebruiker (en zeer mogelijk de participatie verhoogt).

Jammer genoeg heeft de website op dit moment nog één zeer groot nadeel. Je kan op dit moment in Nederland alleen in Amsterdam ‘check ins’ uitvoeren. Amsterdam is namelijk de enige stad die op dit moment beschikbaar is. Ze zeggen dat zodra ze meer capaciteit hebben ze meer steden gaan toevoegen. Maar het geeft wel een flinke restrictie in hoe en waar je de website kunt gebruiken.
Maar als deze restrictie weg is, en gebruikers helemaal vrij zijn in het gebruik van de website, ben ik zeer benieuwd wat er zal gebeuren. De potentie om iets heel unieks te worden is er.

dinsdag 6 oktober 2009

Einde aan boilerplate met Project Lombok

Weer een getter en setter schrijven, weer die equals en hashCode updaten omdat er weer een field bij is gekomen. Gelukkig heb je die twee generiek gemaakt via reflectie. Maar wat word daardoor die HashSet toch traag, toch maar weer handmatig implementeren. En oeps, een tikfout die toch wel valid Java blijkt te zijn is erin geslopen! En oh ja, ook nog toString aanpassen…

Toch vreemd dat zoiets als een getter, setter, toString, equals en hashCode toch weer zoveel problemen geven, vooral omdat IDE’s deze toch al weer een tijdje voor je kunnen genereren. Maar deze zul je toch ook nog moeten onderhouden (al was het alleen maar regenereren van deze methodes). Je zou toch haast zeggen dat dit werk is voor een computer? Daarnaast blijf je constant tegen die methodes aankijken in de source, en dat geeft, en brengt, extra mentale belasting die eigenlijk helemaal niet nodig is in de meeste gevallen.

Er zijn over de jaren een aantal oplossingen bedacht voor dit probleem, een ervan is equals, hashCode en toString via reflectie. Dit werkt, helaas werkt het ook traag. Dit komt omdat de JVM (HotSpot) deze niet goed kan inlinen omdat het in feite type-less code is. En reflectie kan ook geen getters en setters maken die je in je code kan gebruiken (of in Swing).

Daarnaast zijn er door de jaren heen een aantal JSR Proposals geweest om een property keyword te krijgen, zodat getters en setters automatisch gegenereerd worden.
Bijvoorbeeld:

class Point {
public property int x;
public property int y;
}

om het volgende te genereren:
class Point {
private int x;
private int y;

public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
}

Maar de meest recente versie van deze proposal, in Project Coin, heeft de selectie niet gemaakt (voor Project Coin). Daarnaast lost dit ook niet direct het equals, hashCode en toString probleem op (uiteraard wel met de reflectie oplossing).

Het is in feite interessant om te zien dat, bijvoorbeeld, Scala dit soort dingen wel doet, in de vorm van case classes, bijvoorbeeld de Point klasse hierboven:
case class Point(var x:Int, var y:Int)

Dit genereert constructor, getters, setters, toString, equals, hashCode en Scala specifieke features, zoals Pattern Matching.

Maar er is licht aan het einde van de tunnel.

In Java5 zijn er, samen met Generics, Annotations toegevoegd. Hiermee kan je klassen, methoden, fields en parameters annoteren met metadata. En samen hiermee is er ook "APT" of "Annotation Processing Tool" uitgebracht. Dit is een losse tool, zoals javac, dat met een set processors een selectie klassen doorloopt en deze aanpast. Het is voornamelijk een source processing tool, waarbij acties getriggerd worden op annotaties.

Het is dus mogelijk om een annotatie te schrijven die een getter en setter van een veld genereert, of een toString, etc, etc. Het mooie is ook dat zodra dit is gebeurd je de nieuwe methode direct kan zien, en gebruiken, in een IDE, de meeste IDEs gebruiken class files om te zien of een methode (of zelfs class) bestaat.
Maar het schrijven van een AnnotationProcessor is lastig, en dit is een losse stap, en je kan het dus vergeten, en dan kan je leuke situaties krijgen, bijvoorbeeld dat getters en setters niet bestaan terwijl je deze op andere plekken wel verwacht.

Gelukkig is het in Java6 nu mogelijk om direct, bij het aanroepen van javac, annotations te processen. En daarom is er nu Project Lombok.

Lombok komt met een aantal standaard annotations om boilerplate te verwijderen.
Je voegt het gewoon toe aan je classpath (tijdens het compilen) en de annotation processors erin gaan aan het werk. Een lijstje met de annotations die meegeleverd worden zijn:
  • @Getter en @Setter
  • @ToString
  • @EqualsAndHashCode
  • @Data
  • @Cleanup
  • @Synchronized
  • @SneakyThrows
Alle annotations zijn te configureren.
De eerste drie (punten, vier annotations) spreken voor.
@Data combineerd de eerste 3 punten.
@Cleanup kan je gebruiken op variabelen in methodes zodat deze try { } finally { } blocken genereerd en een methode aanroept (default is close, maar kan ook "myOwnCleanupMethod" zijn).
@Synchronized is een method level annotation en word gebruikt om een algemeen synchronized pattern te gebruiken die beter locked op een field i.p.v. een (static) field. Het is ook mogelijk om meerdere, andere, locks te definieren (beter gezegd, specifieke velden te gebruiken).
Als laatste is er @SneakyThrows, dit word gebruikt om een methode bepaalde checked exceptions te laten throwen, zonder dat deze in de method descriptor hoeven te staan (de throws keyword). Een voorbeeld is UnsupportedEncodingException, zeg nou zelf, wat is de kans dat UTF-8 niet bestaat in jouw JDK? Wat dit doet is je methode wrappen in een try { } catch() {} block, en de ongewenste exception catchen, en deze dan te throwen met een unchecked exception.
Enkel voor de @SneakyThrows hoeft de lombok.jar runtime beschikbaar te zijn (omdat het een utility methode aanroept die de echte sneaky-throw doet).

Mijn vorige voorbeeld klasse kan met Lombok gereduceerd worden tot:
@EqualsAndHashCode @ToString
class Point {
@Setter @Getter private int x;
@Setter @Getter private int y;
}

Of nog korter:
@Data
class Point {
private int x;
private int y;
}
En dat is veel beter! Nog mooier is dat je het niet kan vergeten, als je de lombok.jar vergeet tijdens het compilen dan kan de compiler de verschillende annotaties niet vinden, en kan het compilen niet werken.

Om af te sluiten raad ik het je aan om de screen-cast te bekijken die op de Project Lombok website staat, en het gewoon uit te proberen. Eindelijk einde aan boilerplate code!

vrijdag 4 september 2009

CSS uitdagingen bij DotCMS


Ik heb al een aantal keren wat verteld over de mogelijkheden van DotCMS, maar ik heb nog niets verteld over de interessante uitdagingen die erbij komen kijken om het gebruiksvriendelijk te houden. Het is niet zo moeilijk om een pagina (template) te definiëren waar je content in kan plaatsen, maar hoe zorg je ervoor dat de klant in zijn WYSIWYG editor ook meteen krijgt te zien wat er op de website komt te staan? En hoe ver moet je gaan om dat zo echt mogelijk te laten lijken? Daar ga ik het over hebben.



DotCMS maakt gebruik van TinyMCE, een gratis open-source WYSIWYG editor. In deze editor komt in standaard HTML te staan hoe de opmaak eruit zou kunnen komen te zien, maar in de praktijk is dat altijd anders. Nu kun je aan de WYSIWYG editor wel een stylesheet koppelen (per website), maar dan ben je er nog niet. Want de WYSIWYG editor weet niet in welke div je bezig bent, dus klopt het nog niet allemaal. Hoe kun je dit nu netjes oplossen?

Het antwoord is: "Dat ligt eraan...". Als je maar 1 soort content hebt op 1 plaats in een pagina (bijvoorbeeld in de div 'container'), dan kun je overal waar iets staat zoals '#container p {}' vervangen door 'p {}'. Dit werkt! Of je maakt gebruik van de class 'mceContentBody' die de WYSIWYG editor gebruikt (maar dan moet je vanalles 2x definieren, daar word je ook niet vrolijk van). Maar, stel je hebt 2 verschillend gekleurde templates met dezelfde content, of je hebt 1 template met daarin witte content en een grijze banner content, dan heb je een probleem.


Dus de vraag is eigenlijk: hoe ver wil je gaan om alles in de WYSIWYG editor precies zo te krijgen als in het echt? Ik zou zeggen: niet heel ver. Je kan niet rekening houden met alles. Wat je wel kan doen is standaard fonts definieren die in 90% van de gevallen worden gebruikt (h1, h2, p, a). Maar zelfs dat zou ik niet zo snel doen. Wat ik wel zou doen is speciale classes definieren. Bijvoorbeeld speciale classes voor tabellen, speciale a classes en speciale inputs. Dat een H1 net een andere kleur heeft is niet zo erg, maar je wil wel zien dat je link met class='fancybutton' een fancy knop weergeeft ipv een blauw tekstje.

Dit soort afwegingen en het spelen met de CSS maken het werken met DotCMS wel leuk en interessant. Bij veel css zaken moet je je afvragen hoe je het definieert en wat de gevolgen zijn voor de pagina's, de edit mode (daar heb ik het nog nieteens over gehad!) en de WYSIWYG editor. En hoe maak je het zo makkelijk mogelijk voor de klant om daarna zelf zijn pagina's op te maken in de, toch beperkte, WYSIWYG editor. Ik kan er nog wel aardig wat bladzijden over voltypen maar ik ga weer even verder met mijn CSS issues bij Lasercards in DotCMS :)

donderdag 3 september 2009

JavaScript laden zonder de browser te blokkeren


Er zijn heel veel factoren die invloed hebben op de snelheid waarmee een webpagina wordt afgebeeld. Zaken zoals het aantal requests per pagina, het wel of niet gebruik maken van een Content Delivery Network, het instellen van gzip voor bepaalde type content en een juiste plaatsing van scripts en stylesheets in de pagina, dragen allemaal bij aan de ervaring die de gebruiker heeft als hij de pagina opvraagt. Als de ontwikkelaar te veel van deze zaken fout aanpakt, dan zal hij de woede van de gebruiker op zijn hals halen en wellicht hevig bloedend ergens in een greppel treurig aan zijn einde komen.

Er zijn twee lekker pragmatische en niet te dikke boeken over deze onderwerpen geschreven die ik even wil aanstippen: “High Performance Web Sites” en “Even Faster Web Sites”, beide van Steve Souders (http://stevesouders.com/hpws/rules.php). Beide boeken zijn binnen ISAAC in ieder geval verplichte kost voor alle web develeopers.

In deze blogpost wil ik een van de technieken uit het tweede boek kort introduceren: “JavaScript laden zonder de browser te blokkeren”. Het probleem dat hier speelt is dat scripts die worden geladen m.b.v. een SCRIPT tag tot gevolg hebben dat de browser helemaal niets anders zal downloaden tijdens het laden en interpreteren van deze code. Dit alles kan resulteren in een significante verlenging van de laadtijd en dus tot een tragere pagina. Zonde, want browsers kunnen in theorie meerdere bestanden parallel downloaden.

De reden dat de browser niets anders downloadt is dat de JavaScript die op dat moment wordt gedownload de rest van de pagina kan wijzigen na executie. Het aantal en de volgorde van de andere resources kan afwijken van wat er in de oorspronkelijke HTML is gespecificeerd (bv met de document.write(…) constructie). Dit wijzigen van de HTML is in het overgrote deel van de gevallen helemaal niet aan de orde en resulteert dus in een onnodig lange laadtijd. Daarnaast is de volgorde waarin externe JavaScript bestanden zijn gedefinieerd in de HTML tevens de volgorde waarin ze moeten worden geëxecuteerd door de browser. Deze executievolgorde is eigenlijk niet van belang voor de volgorde waarin de scripts worden gedownload, iets dat tot nu toe alleen de ontwikkelaars van IE8, Safari 4 en Chrome 2 hebben begrepen: deze browsers ondersteunen het parallel downloaden van scripts wel. Andere resources worden echter wel nog steeds geblokkeerd.

In “Even Faster Web Sites” worden een aantal technieken geïntroduceerd die dit probleem (ten dele) oplossen. Ik zal deze hier kort introduceren. Voor de details verwijs ik echter door naar het boek zelf.

XHR Eval.
In deze techniek worden de scripts met een XMLHttpRequest gedownload en vervolgens met een aanroep van eval() geïnterpreteerd. Dit werkt: de browsers blokkeren het downloaden van de andere resultaten niet. Het grote probleem is echter dat je op deze manier alleen scripts kan laden die van hetzelfde domein komen als de pagina zelf.

XHR Injection
Deze methode lijkt enigszins op de voorgaande: het script wordt geladen mb.v. de XMLHttpRequest functie, maar wordt geëxecuteerd door een SCRIPT tag in de DOM te creëren en de gedownloade code daarin te injecteren. Deze methode is soms iets sneller dan het gebruik van eval(), maar lijdt onder dezelfde beperkingen.

Script in Iframe
Iframes worden parallel geladen met andere componenten op een pagina. Door in iframe’s HTML pagina’s te laden die verwijzen naar de gewenste scripts, worden deze scripts dus parallel gedownload. Ook deze techniek is beperkt tot scripts die op hetzelfde domein staan als de hoofdpagina zelf. Bovendien moet de code worden aangepast om een verbinding tussen de hoofd- en de iframepagina te leggen.

Script DOM Element
Als alternatief voor het initieel opnemen van een SCRIPT tag in de HTML, kan er ook een on-the-fly worden gecreëerd m.b.v. document.createElement(…). Deze tag wordt dan dynamisch voorzien van een src attribuut en vervolgens in de HTML geïnjecteerd. Deze methode is geschikt voor scripts die komen van een andere domein dan het domein van de pagina zelf.

Script defer
IE ondersteunt het DEFER attribuut bij de SCRIPT tag. Defer is een indicatie aan IE dat het gerefereerde script geen DOM wijzigingen zal uitvoeren en dat het niet meteen hoeft te worden gedownload. Dit heeft tot gevolg dat IE andere bestanden parallel met dit script zal downloaden. Het werkt echter alleen in IE en enkele nieuwe browsers.

Document.write Script tag
In deze techniek wordt net als bij de “Script DOM Element” methode een SCRIPT tag dynamisch aan de HTML toegevoegd, dit keer echter met een document.write() constructie. Het verschil is dat deze techniek alleen resulteert in het parallel downloaden van andere scripts, alle andere bestanden worden toch geblokkeerd.

Conclusie
Na het lezen van de technieken lijkt het redelijk simpel: kies altijd voor de “Script DOM Element” methode. De realiteit is echter niet zo eenvoudig. De keuze hangt af van het gewenste gedrag van de “busy indicators” in de browser (de visuele hints die aangeven dat er iets wordt gedownload) en van de wens om de download- en executievolgorde af te dwingen. Voor meer details over wanneer je nou precies wat moet kiezen verwijs ik je graag door naar hoofdstuk 4 van “Even Faster Web Sites”.

woensdag 19 augustus 2009

Magical Magento

ISAAC en e-commerce is al tijden een succesvolle combinatie. Tot dusver heeft ISAAC altijd maatwerk webwinkels gerealiseerd, met name omdat veel van onze klanten de webwinkel volledig geïntegreerd willen hebben met reeds bestaande back-end en beheer systemen. Maar sinds enige tijd hebben de technische specialisten van ISAAC zich verdiept in open-source e-commerce pakketten die alle broodnodige functionaliteit , voor een succesvolle webwinkel aan boord hebben. Ook de sales afdeling en de internet marketeers hebben de producten eens goed tegen het licht gehouden op basis van de wensen uit de markt en de aanwezige kennis van succesvolle webwinkels.

Nadat de stofwolken geklaard waren en de nodige pakketten getest waren, stond nog maar 1 pakket in de arena overeind: Magento.

Op technisch gebied is Magento een relatief jong open-source product. Dit heeft een aantal voordelen, bijvoorbeeld dat het product moderne en beproefde technieken gebruikt.
Een plugin systeem laat ontwikkelaars modules realiseren met extra, maatwerk, functionaliteit. Het voordeel van deze werkwijze is dat de kern van de applicatie, de webwinkel zelf, altijd stabiel draait zelfs als een module niet correct functioneert. Omdat de applicatie open-source is, is hierdoor ook een enorme bibliotheek ontstaan met reeds gemaakte modules. De webwinkel uitbreiden is dan ook op deze manier doorgaans het spreekwoordelijke “plakje cake”: zoek of iemand reeds een module heeft gemaakt voor het doel wat je wilt bereiken, download en installeer het….tadaaaa.
Naja, uiteraard zal het in boze echte wereld altijd iets anders werken: doorgaans moet je nog configureren, testen eventueel nog wat aanpassen voordat het werkt zoals je wilt. Maar, je hoeft in ieder geval niet altijd het wiel volledig overnieuw uit te vinden.
Op het gebied van aangeboden functionaliteit kun je een e-commerce product beoordelen op 4 primaire pijlers, namelijk “Komen, Kijken, Overtuigen en Kopen”. Ik zal Magento eens afzetten tegen deze 4 pijlers.

Komen

Zoek Machine Optimalisatie is natuurlijk het kernpunt van de pijler “Komen”. Magento is uitstekend doorzoekbaar voor zoek machines en biedt uitgebreide mogelijkheden op het gebied van tags, keywords, URL rewrites et cetera. Dat klinkt als en is een boel terminologie uit de IT, maar het zijn wel de zaken die Google graag ziet en jij dus wilt hebben.

Andere functionaliteiten die Magento ondersteunt is “tell a friend”, waarmee de bezoeker een vriend of vriendin op de hoogte kan stellen van een product op jouw website. Ook kan een bezoeker een verlanglijstje sturen naar zijn vrienden met producten uit de webwinkel.

Kijken


Zodra een bezoeker uiteindelijk in de webwinkel terecht komt, is het uiteraard de bedoeling dat de klant alle informatie snel en eenvoudig kan vinden. Magento biedt alle mogelijkheden hiertoe, zoals een goede zoekfunctie en uitstekende sorteer en filter mogelijkheden.
Zodra een bezoeker een product heeft gekozen, kunnen ook accessoires voor het en soortgelijke producten getoond worden. Het gehele kijk, vind-wat-je-zoekt aspect is keurig geregeld in Magento.

Overtuigen

Uiteindelijk gaat het er natuurlijk om dat een klant overtuigd wordt om een product aan te schaffen. Op internet kun je dan geen dialoog aangaan met je klant om er achter te komen welke beweegredenen belangrijk zijn voor de klant. Je zult dus een heel arsenaal aan overtuigingsmiddelen in moeten zetten, en dan ook nog op dusdanige wijze dat de bezoeker de voor hem relevante middelen snel en eenvoudig kan inzien.
Voorbeelden van overtuigingsmiddelen zijn uitgebreide productomschrijvingen, grote foto’s, vergelijkingsmogelijkheden, duidelijke communicatie omtrent organisatie, contactmogelijkheden, geaccepteerde betaalwijzen, bezorgkosten, aanbiedingen (van….voor….), productreviews, orderstatus, Top 5 best verkocht, actiecodes, tijdelijke aanbiedingen.
Al deze zaken zijn te realiseren in Magento op een gebruiksvriendelijke wijze waardoor u als ondernemer snel en eenvoudig uw acties kunt coördineren.

Kopen


Zodra een bezoeker in uw webwinkel terecht gekomen is, het product wat hij zocht gevonden heeft en er van overtuigd is om het aan te schaffen, is alleen het afreken proces nog een mogelijke drempel. In het kijken en overtuigen aspect zijn al zoveel mogelijk drempels weggehaald door een duidelijke communicatie over totale kosten (inclusief de bezorgkosten), over geaccepteerde betaalwijzen en levertijden. Een heldere en gebruiksvriendelijke afrekenprocedure is belangrijk waarbij een bezoeker er voor kan kiezen om een account aan te maken of om zonder account de bestelling te plaatsen. Een bezoeker kan een ook een ander bezorgadres kiezen of de datum en tijdstip voor aflevering.
Wederom geeft Magento de mogelijkheid om het check-out proces helder en laagdrempelig te houden. Daarnaast biedt het ook de vrijheid aan ontwerpers om het design te optimaliseren voor conversie.

Zoals gezegd is het mogelijk om nog een laatste pijler toe te voegen, namelijk retentie. Ook hiervoor biedt Magento weer mogelijkheden met nieuwsbrieven, actie mogelijkheden voor groepen gebruikers.

Inmiddels zijn de eerste Magento webwinkels door ISAAC gerealiseerd of in ontwikkeling. We kunnen stellen dat de ISAACi enthousiast zijn over de vele standaard mogelijkheden in dit pakket terwijl we toch onze dingen kunnen blijven doen: een unieke oplossing of dienst neerzetten die bijdraagt aan de bedrijfsdoelstelling zonder concessies te doen aan nieuwe of bestaande processen.

Wilt u ook weten wat Magento voor u kan betekenen, neem even contact met mij of mijn collega’s op, we maken graag een afspraak om de mogelijkheden die Magento biedt, te laten zien. Ik ben te bereiken op 040 215 53 52 of Paul.Luedke@isaac.nl.

dinsdag 28 juli 2009

OWASP

Nee, dit gaat niet over een in cirkeltjes rondzoemende wesp uit Silicon Valley, maar over the Open Web Application Security Project. Met het mission statement van http://www.owasp.org/ schiet je al wat meer op bij het begrijpen van deze obscure afkorting. Daar lezen we in een Wiki-achtige layout namelijk:

“[OWASP] is a worldwide free and open community focused on improving the security of application software. Our mission is to make application security visible, so that people and organizations can make informed decisions about true application security risks.”

Het meest bekend is OWASP van de “Top 10”, een lijst met de tien belangrijkste kwetsbaarheden in (o.a. Java Enterprise Edition) web-applicaties. Deze lijst is behoorlijk pragmatisch tot stand gekomen, wat een goed gevoel geeft. Het gaat niet om zuiver theoretische chasing-a-once-in-a-million-cases, maar om heel concrete zaken die (te) regelmatig fout gaan bij de beveiliging (en dus ontwerp en ontwikkeling) van een webapplicatie. OWASP maakt elke paar jaar een nieuwe versie van de Top 10, uiteraard steeds pas wanneer de omstandigheden voldoende veranderd zijn. De huidige versie is die van 2007, en ten opzichte van 2004 (de vorige versie) zijn er wat items van de lijst verdwenen (o.a. buffer overflows), en wat andere toegevoegd.

Aandacht voor zaken op de OWASP Top 10 tijdens het hele ontwerp- en ontwikkelproces zorgt voor betere, veiligere, en, uiteindelijk, goedkopere webapplicaties, in elk geval qua total-cost-of-ownership. Soms is een OWASP-check min of meer verplicht, bijvoorbeeld om een PCI-DSS “audit” door te komen. De kans op grootschalig misbruik van je applicatie is dan wellicht niet zo groot (tenzij je Amazon, Ebay, Rabobank of PayPal heet natuurlijk), maar *als* het mis gaat zijn de gevolgen ook voor kleinere sites niet makkelijk te overzien.

De Top 10, versie 2007 (tromgeroffel! Uiteraard schaamteloos onder Creative Commons geript van de Wiki van het nogal trage OWASP.org zelf):
A1 - Cross Site Scripting (XSS)
XSS flaws occur whenever an application takes user supplied data and sends it to a web browser without first validating or encoding that content. XSS allows attackers to execute script in the victim's browser which can hijack user sessions, deface web sites, possibly introduce worms, etc.

A2 - Injection Flaws
Injection flaws, particularly SQL injection, are common in web applications. Injection occurs when user-supplied data is sent to an interpreter as part of a command or query. The attacker's hostile data tricks the interpreter into executing unintended commands or changing data.

A3 - Malicious File Execution
Code vulnerable to remote file inclusion (RFI) allows attackers to include hostile code and data, resulting in devastating attacks, such as total server compromise. Malicious file execution attacks affect PHP, XML and any framework which accepts filenames or files from users.

A4 - Insecure Direct Object Reference
A direct object reference occurs when a developer exposes a reference to an internal implementation object, such as a file, directory, database record, or key, as a URL or form parameter. Attackers can manipulate those references to access other objects without authorization.

A5 - Cross Site Request Forgery (CSRF)
A CSRF attack forces a logged-on victim's browser to send a pre-authenticated request to a vulnerable web application, which then forces the victim's browser to perform a hostile action to the benefit of the attacker. CSRF can be as powerful as the web application that it attacks.

A6 - Information Leakage and Improper Error Handling
Applications can unintentionally leak information about their configuration, internal workings, or violate privacy through a variety of application problems. Attackers use this weakness to steal sensitive data, or conduct more serious attacks.

A7 - Broken Authentication and Session Management
Account credentials and session tokens are often not properly protected. Attackers compromise passwords, keys, or authentication tokens to assume other users' identities.

A8 - Insecure Cryptographic Storage
Web applications rarely use cryptographic functions properly to protect data and credentials. Attackers use weakly protected data to conduct identity theft and other crimes, such as credit card fraud.

A9 - Insecure Communications
Applications frequently fail to encrypt network traffic when it is necessary to protect sensitive communications.

A10 - Failure to Restrict URL Access
Frequently, an application only protects sensitive functionality by preventing the display of links or URLs to unauthorized users. Attackers can use this weakness to access and perform unauthorized operations by accessing those URLs directly.

Genoeg aandachtspunten dus!

dinsdag 7 juli 2009

Google haalt software uit beta



Het is ongelooflijk, maar Gmail is eindelijk niet meer in beta. Naast Gmail, die vijf jaar in beta heeft gestaan, zijn ook Google Docs (2006), Calendar (2007) en GTalk (2005) uit beta gehaald.

vrijdag 3 juli 2009

Mobiele variant van de Monitor Applicatie

De afgelopen maanden heeft Roel geploeterd om voor ISAAC een applicatie te maken die de monitor tool van LaSer kan weergeven op een mobiel device, waaronder een blackberry. Dit moest hij voor elkaar krijgen zonder enige voorkennis over Java, JBoss, Eclipse en browsermogelijkheden van mobiele apparaten... een hele opgave dus.

Maar, afgelopen week is hij geslaagd en heeft hij de eerste versie van de 'mini monitor' klaar. Het is een hele basic HTML versie die precies doet wat de gebruiker wil: in één oogopslag zien of er iets mis is, en zo ja wat er mis is en waardoor het komt. Zo kan de gebruiker direct actie ondernemen als hij even zijn blackberry checkt.

Tijdens zijn afstuderen kwamen er wel enkele interessante zaken naar voren, bijvoorbeeld de beperktheid van de browserfunctionaliteit van veel mobiele devices. Ze hebben allemaal vaak andere standaarden en ondersteunen niet allemaal hetzelfde (IE6-7-8, firefox, opera... all over again). Er is dus helaas geen eenvoudige manier om een website mobiel-proof te maken. Daar zullen we nog even mee moeten wachten totdat de mobiele devices de 'standaard browsers' gaan draaien of meer gaan ondersteunen.

Ook bleek dat java niet zo eenvoudig is als het lijkt, in elk geval voor mensen die meer ervaring hebben met script-talen. Dat heeft Roel met de harde hand ondervonden, maar hij is er uiteindelijk toch wel enigszins uitgekomen (met een beetje hulp). En hij was erg enthousiast over de Expression Language, en daarmee scoor je natuurlijk ook punten bij mij ;)

Website optimalisatie

foto door: Dave & Karin
Moderne websites zitten tjokvol afbeeldingen en "rich" onderdelen (javascript libraries als JQuery of Dojo) en hoewel bijna iedereen tegenwoordig ultrasnelle internet verbindingen heeft is het aan te raden om je website te optimaliseren. Door dit te doen laadt de pagina sneller en is de user-experience dus beter. Een goed begin om iets over website optimalisatie te leren is door het boek "High Performance Websites" te lezen. Hierin staat in detail uitgelegd waar je op moet letten bij het maken van een website. Hieronder vind je een overzicht van de grootste snelheidswinsten die je kunt behalen.

- Het aantal HTTP requests beperken
- Javascript en CSS verkleinen
- De site gzippen
- CSS sprites gebruiken

Hiernaast zijn er nog veel meer mogelijkheden om snelheid te winnen, zoals het plaatsen van css files bovenaan in de webpagina en javascripts juist onderin, het vermijden van CSS expressies en redirects voorkomen. Maar we beperken ons nu tot de bovenstaande technieken omdat deze de grootste winsten boeken.
Het aantal requests beperken kan een behoorlijke winst opleveren. Stel dat je site zes javascript files inlaad. Hiervoor zijn dus ook zes requests nodig. Deze requests zitten op elkaar te wachten en dit kan dus voor een behoorlijke vertraging zorgen. Het aantal request kun je beperken door de zes javascript files te bundelen tot een enkele file. Dit zorgt ervoor dat de scripts niet op elkaar hoeven te wachten en met 1 request ingeladen kunnen worden. Naast de javascript bestanden kun je ook kijken naar de stylesheets die worden ingeladen en afbeeldingen. Afbeeldingen kun je ook bundelen tot een enkele afbeelding met behulp van CSS sprites. Een CSS sprite is eigenlijk een grote afbeelding met alle afbeeldingen op de site naast elkaar. Door in je CSS aan te geven waar je afbeelding begint, kun je de enkele afbeelding voor alle afbeeldingen op de site hergebruiken en hoeft er dus maar 1 afbeelding ingeladen te worden.

Naast het verminderen van het aantal requests die gedaan worden kan ook het verminderen van de hoeveelheid data een snelheidswinst opleveren. De hoeveelheid data die je verzend kun je verminderen door, bijvoorbeeld, javascript en css bestanden te "minify-en". Je haalt dan alle overtollige tekens uit de bestanden (zoals enters, spaties, opmerkingen) waardoor de files stukken kleiner worden. Daarnaast kun je de hoeveelheid data verminderen door de site te g-zippen. gzip is een protocol die door de meeste browsers wordt ondersteund en de hoeveelheid data met 70 tot 80 procent kleiner kan maken.

vrijdag 26 juni 2009

Frontcontrollers


Tijdens het volgen van een SCWCD (Sun Certified Web Component Developer) training kom je de coolste dingen tegen om een webapplicatie te ontwerpen en implementeren. Er wordt voortdurend op gehamerd dat je elk component in een webapplicatie (POJO, EJB, Servlet, JSP e.d.) moet gebruiken waar het voor dient, en ze niet misbruikt door bijvoorbeeld logica in een JSP te gaan stoppen omdat dat ook wel werkt. Neen! Men doet er verstandig aan de verschillende lagen van een applicatie te scheiden, het voornaamste voorbeeld hiervan is het MVC (Model-View-Controller) model. De details hiervan laat ik even achterwegen (Wikipedia is your friend) maar kort gezegd krijg je door dit model te implementeren een applicatie waarin de bussiness logic, het ophalen van data uit de bussiness logic en het tonen daarvan van elkaar gescheiden zijn.

Bovenstaande kan gerealiseerd worden door in bijvoorbeeld een servlet de bussiness logic (via EJB o.i.d.) aan te spreken en het resultaat te delegeren naar JSP's die gevuld worden met deze data. Echter is dit model op deze manier ook niet perfect. In een website met omvangrijke grootte kan het schrijven van dergelijke code redundant en onoverzichtelijk worden. Je voelt het misschien al aankomen, maar inderdaad, ze hebben ook hier iets op gevonden. Een techniek (eigenlijk een design-pattern) met een vrij algemene naam "frontcontroller". Frontcontrollers zijn kleine frameworkjes die je kunt gebruiken om de code die je in je controllerlaag gebruikt om de bussiness logic aan te spreken evenals de code die je gebruikt om de view-laag aan te spreken in herbruikbare objecten te stoppen. Op die manier hoef je code om requests af te handelen niet steeds opnieuw te schrijven voor elke servlet die je in je applicatie gebruikt. Dit leidt al gauw tot meer overzicht in de code die makkelijker onderhoudbaar is. Een belangrijke kenmerk van een frontcontroller is dat het een centraal punt vormt in een applicatie voor het ontvangen van requests en het delegeren daarvan.

Een keerpunt van een dergelijke techniek is dat je al je logica zult moeten implementeren in de frontcontroller, wat tot heel wat configuratie en omslachtigheid kan leiden. Bijvoorbeeld het delegeren van een bepaald request naar een bepaalde servlet kun je dan niet even snel met een RequestDispatcher doen, maar je zult een object moeten schrijven dat de configuratie en logica voor die delegatie bevat. Op die manier is het gebruik van een frontcontroller aan de ene kant een zegen en aan de andere kant een vloek. Zoals een bekende voetballer ooit zei (ja, Kruijff): elk noadeel heb een foordeel!

Een bekende Java implementatie van een frontcontroller is Jakarta Struts, wat niet bij iedereen geliefd is. Dit geldt echter ook voor Spring, wat minder bekend is maar ook gebruikt wordt in de webwereld om je controller en view netjes neer te zetten. Spring heeft echter ook roots in de modellaag, eigenlijk een frontcontroller++ :P. Beide technieken implementeren het frontcontroller pattern op hun eigen manier, en je wilt ermee werken of niet. Mij persoonlijk lijkt het gebruik van Struts wel interessant, en misschien zelfs wel nuttig. Echter denk ik niet dat je het moet gebruiken in websites van kleine omvang omdat je dan waarschijnlijk niet het potentieel eruit haalt.

vrijdag 19 juni 2009

Open Source


Open source wordt vaak gezien als iets dat te maken heeft met software. Zo kennen we veel handige open source tools in het land van Java. Voorbeelden hiervan zijn onder andere Hibernate als ORM laag tussen databases en de eigen Java applicatie en Wicket een web framework voor java.

Maar er zijn ook nog andere vormen van open source. Zo is er bijvoorbeeld de "open game license", ontworpen voor role playing games. Deze licentie is in 2000 ontworpen door Wizards of the Coast voor het 'd20 systeem'. Helaas is er ook kritiek op de licentie, onder andere door de controle die Wizards of the Coast er over heeft, aangezien deze een aantal uitgevers de kop gekost heeft.

Nog een interessant open source product is de openmoko. Dit is een open source smartphone waar alle aspecten van de telefoon open zijn gehouden (met uitzondering van een aantal chips, voor zover ik weet), dus niet alleen de software. Je kunt de schemas van de electronica en de CAD files gewoon downloaden op de website. Wel moet er gezegd worden dat het nog een "work in progress" is. De software om alle hardware aan te sturen is nog niet af. Zelfs de hardware heeft nog bugs, maar dat is op te lossen voor mensen die niet al te bang zijn en durven te solderen in hun telefoon. Gelukkig is de tweede versie van de telefoon (GTA02 Freerunner) al een stuk beter als de eerste. De volgende blog post zal de openmoko verder uitdiepen.

Meer Taart voor ISAAC


Een van de ISAAC teams werd vandaag blij verrast met taart. Laser Nederland, Een van ISAACs partners, heeft vandaag taart laten bezorgen als dank voor de extra inzet rondom nieuwe release.

Wij zijn natuurlijk erg blij dat onze inzet wordt gewaardeerd. Dus Laser Nederland bedankt!

vrijdag 12 juni 2009

Van ontwikkelomgeving naar test- en productieomgeving

Een van de dingen waar een applicatieontwikkelaar mee te maken krijgt, is het configureren van de software voor verschillende omgevingen. De applicatie wordt ontwikkeld op een ontwikkelomgeving, gaat daarna in het algemeen naar een omgeving waar de klant een en ander kan bekijken en testen, en wordt vervolgens op een productieomgeving geplaatst, al dan niet na een aantal aanpassingen. Deze omgevingen hebben hun eigen instellingen nodig. Bij het uitrollen van een nieuwe versie van de applicatie naar een omgeving moet de omgeving de juiste instellingen krijgen en/of houden. Er zijn veel manieren om dit mogelijk te maken, een van de eenvoudigste is via files in verschillende bestandsformaten. Er worden dan verschillende files gemaakt met per omgeving de specifieke configuratie. Vaak is er een file met standaard instellingen, die overschreven kan worden om specifieke eigenschappen aan te passen. Deze files moeten op een goede manier worden beheerd en uitgerold. Er zijn veel verschillende frameworks en tools om dit te realiseren. Een ervan is de Commons Configuration van het Apache Commons project, te vinden op de Apache website. Hiermee kan configuratie worden ingelezen vanuit bijvoorbeeld properties files, XML files, Windows INI files, System properties, etc. Eigenschappen kunnen meerdere waardes hebben indien gewenst, en zijn bovendien van een bepaald type. De toegang tot de eigenschappen verloopt via de generieke Configuration interface.
ISAAC heeft inmiddels in verschillende projecten naar tevredenheid gebruik gemaakt van de XMLConfiguration van Apache Commons. Handmatige aanpassingen na het uitrollen van een applicatie zijn voor deze projecten niet meer nodig.