Devoxx, JavaFX

Bij de Devoxx was JavaFX behoorlijk vertegenwoordigd in sessies en keynotes. Behalve de keynotes heb ik geen JavaFX sessies bezocht – op JFall had ik al wat van JavaFX gezien. JavaFX lijkt een fraaie taal en techniek voor maken van GUI’s: op een weblog van Sun staat een kort verslag over JavaFX bij Devoxx. Het fraaie van JavaFX is het declaratief kunnen programmeren van GUI’s, in plaats van moeten programmeren in een mix van XML en Javascript variant gebruiken zoals bij Adobo’s flex. Toch weet ik niet zo heel zeker of ik een nieuwe taal als JavaFX wil gaan leren.

DeVoxx ’08

The English presentation of this posting can be found at my new weblog.

Afgelopen dagen ben ik naar DeVoxx’08 gegaan, in Antwerpen en ik ben erg enthousiast! Veel goede presentaties gezien.

Van alle presentaties die ik heb gezien, dit is mijn top:

  1. From Concurrent to Parallel by Brian Goetz – een steengoede presentatie. De ParallelArray structuur en de Fork-Join – beide in Java 7 – lijken zeer krachtig.
    Het boek van Brian Goetz Java Concurrency in practice heb ik gekocht. Helaas behandeld de nieuwe feature van Java 7 niet, het boek komt uit 2006.
  2. The Feel of Scala by Bill VennersBuitengewoon veelbelovende en goede taal. Vooral de demonstratie hoe Scala ook de mogelijkheden van mogelijkheden heeft voor uitbreiden en aanpassen van bestaande classes zoals in Ruby kan (add methods), maar met static type checking. En hoe in Scala veel refactor-operaties deterministisch  zijn, versus heuristic zoals in dynamische talen. Deterministisch refactoring betekent dat je code gegarandeerd hetzelfde blijft werken na refactoring.
    Het nieuw aangeschafte boek ‘Programming in Scala‘ ligt nu op mijn buro.
  3. Be smart! by Ivar JacobsonEen zeer energieke en inspirende man. Ik ben veel eens met wat hij beweerd eens en vond een een gedeelte al langer zo, maar hij kan het wel veel beter brengen.
  4. RESTful Design, Patterns and Anti-Patterns by Stefan TilkovDoor zijn praatje ben ik erg enthousiast geworden over REST. Het was ook erg verhelderend te horen dat SOAP eigenlijk een bloated (hoewel niet zo gezegd) remoting framework is, en niet echt voor open, goed herbruikbare services zorg. Tenminste niet meer dan andere remoting frameworks als RMI.
  5. Effective Pairing: The Good, the Bad and the Ugly by Dave NicoletteLeuk en inspirerend. Voorbeelden hoe pairing wel en niet moet,maar niet zo interessant vermoed ik als je er niet direct bij bent.
  6. Implementing agile at enterprise level by Jef Cumps Heel even leek de spreker niet zo over te komen, maar al snel kwam hij los, voor mij tenminste. Zeer interessant hoe Scrum is geïntroduceerd binnen een organisatie als The Belgian Post. Mooi was ook een plaatje van een echt Scrum-bord (met gele en roze post-its) zoals gebruikt is.
  7. What’s new in Spring Framework 3.0? by Arjen Poutsma and Alef ArendsenSpring blijft een krachtig framework als je Java gebruikt. Ik vond het interessant te horen welke nieuwe mogelijkheden er zijn, aangezien ik het Spring-framework bijna iedere dag gebruik.
  8. Java + XSLT 2.0
    Doug Tidwell
    Behoorlijk interessant, en goede spreker. Vooral interessant voor mij, omdat ik pas een stukje over XSLT heb geschreven en het eerder gebruikt heb. XSLT 2.0 lijkt zeer nuttig, vooral de mogelijkheid om aanroepen van Java-code te embedden.
  9. Patterns in Mule
    by Antoine Borg Redelijk interessant, Mule lijkt een zeer mooi tool. Ik heb organisaties gezien die het messenging, queuing probleem met custom-code of wel niet hebben opgelost, Mule lijkt prima in te passen. Spreker kwam alleen niet zo heel goed over, hij was niet zo interactief en sprak soms wat ‘voorlezend’.
  10. How Do We Test This Stuff?
    by Frank Cohen
    – Uiteraard wil ik goed testen. De spreker kwam goed over, maar inhoudelijk was de presentatie niet zo interessant, ik hoorde niet veel nieuws. Vooral over open-source test tools, PushToTest, Selenium, SoapUI.
  11. Preventing bugs with pluggable type-checking for Java
    by Mahmood Ali
    Erg veelbelovend en interessant idee en bij behorend framework: een pluggable type-system via annotations. De spreker kwam alleen niet zo goed over. Ik kreeg idee dat hij verkouden was, en wat nerveus.
  12. Introduction to NIO.2
    by Jean-Francois Arcand
    Deze presentatie viel behoorlijk tegen. De spreker sprak erg warrig, half afgemaakte zinnen, van de hak op de tak en met een zwaar Frans accent. NIO2 en Grizzly-framework lijkt wel zeer krachtig, dat kwam wel over.

Ik ben overtuigd, ook van wat ik van andere heb gehoord op de conferentie, dat er andere erg goede sessies waren. Helaas kan ik niet overal bij zijn, dus ik kijk uit naar wanneer de presentaties online komen op Parleys.

Devoxx logo

Java Concurrency In Practice
Java Concurrency In Practice
Tim Peierls & Brian Goetz
Effective Java
Effective Java
Joshua Bloch

Generic CRUD component

Belangrijkste  voordeel van een ORM framewok, is het voorkomen van telkens opnieuw code maken om data uit een database te transleren naar een object-type. De belangrijkste opereraties die met zo’n object moeten gebeuren zijn: aanmaken (Create), opvragen (Read), bijwerken (Update) en verwijderen (Delete), ofwel CRUD. Je zou die functies voor ieder type apart kunnen maken, maar via de standaarden JPA en Java 1.5 is het ook goed mogelijk een generiek CRUD-component te maken in Java. Via deze service zijn alle CRUD-operaties beschikbaar voor persistent Java-objecten. Op die manier kun je heel snel b.v. een GebruikersService, AdresService.
Ik was niet de enige met dat idee, na wat snel zoeken vond ik het volgende artikel van Adam Bien: Generic CRUD Components with Java EE 5.  Na een discussie met een collega kwamen we erop dat Generic CRUD component zeer veel weg heeft van het Active Record Pattern van Martin Fowler.
Het Active Record Pattern is uiteraard uitgewerkt in Ruby on Rails. In Java is er sinds kort ook een implementatie, Active Objects. Active Objects wordt uitgelegd in een artikel van Daniel Spiewak op Javalobby.org.
In zekere zin lijkt ActiveRecord erg op een DAO-pattern. ActiveRecord werkt echter goed in dynamische talen als Ruby en Groovy, DAO is beter geschikt voor niet dynamische, static-type talen als Java. Wat ik dus zoek is niet een Generic Crud Service, maar een Generic Dao, gelukkig al beschreven door IBM.
Een afgeronde implementatie van een Generic DAO kon ik helaas nog niet vinden, maar in combinatie met Spring zou zo’n implementatie toch weinig code bevatten. Een goede omschrijving is ondermeer DRY CRUD DAOs with JPA. Op Google Code vond ik het Crank project, die een implementatie van een uitgebreide Generic Dao levert.

Er is niets nieuws onder de zon, zolang je maar de juiste (en dezelfde) woorden gebruikt en kent!

Whitebooks over SOA en grid-computing

Voor de nieuwsbrief en website van mijn bedrijf heb ik twee artikelen geschreven (samen met andere auteurs)!

Een artikel gaat over Coherence, een product van Oracle voor grid-computing. Specifieker gezegd, Coherence is vorm van een distributed cache. Zie Data-grids met Coherence. Verder heb ik een artikel geschreven over XSLT in combinatie met SOA. Naast een mooi keyword, is SOA zeker relevant voor XSLT: om services met elkaar te koppelen, kan XSLT een geschikte techniek zijn: lees XSLT en SOA als je er meer over wilt weten.

The new stuff (RIA)

Sinds zeer recent ben ik begonnen aan een nieuw project. Het project is nog heel vers, maar aangezien ontwikkelingen snel gaan wil ik toch al over wat technische overwegingen schrijven.
Als frontend hebben we na korte overweging voor Adobe Flex gekozen. Ik was nooit erg enthousiast over de HTML/Javascript combinatie, dus eerste keus is een RIA-framework (over GUI, zoals dat vroeger heette) dat ook echt bedoeld is voor RIA. In tegenstelling tot de 13-dozijn DHTML/Ajax/XHTML frameworks is de keuze dan gelukkig wat overzichtelijker. Gezien voorgaande ervaring hebben we voor Flex gekozen boven JavaFX. W

Heel toevallig, las ik nu een artikel van een oud-collega, over Spring Security in combinatie met Flex. RIA-applicaties zijn wat veiligheid betreft risicovoller: op de client is dikker (qua software en logica) dan bij tradionele HTML-interfaces. Wanneer geen rekening mee gehouden wordt, is er grotere kans dat de server onbeschermd ontbloot is.
In het artikel wordt uitgegaan van de combinatie Flex/Spring/BladeDS als basis voor de architectuur van de applicatie. BladeDS is een remoting-framework, waarmee de Flex-client-applicatie, op de computer van de gebruiker communiceert met de applicatie op de server. Spring-security is een wordt als een filter-class op de server-side toegevoegd. Samen met wat client-side code in flex, zorgt het geheel ervoor dat de gebruiker een nette login-box krijgt, wanneer hij de applicatie wilt gebruiken. Lees de details in: Integrating Flex, BlazeDS, and Spring security op de Adobe Developer Center.

J-Fall

Gisteren heb ik de J-Fall bezocht, en het was een zeer inspirerend en interessant congres!
In dit stukje een kort verslag. Aldus mijn verslag! Ik ben al lang niet meer de eerste, getuige deze weblog-entries op blog.leenarts.net.
Wat eruit sprong, waren onderwerpen op Rich Client Applications, closures en parellel en distributed software!

Pragmatic Java
Na de keynote was de eerste sessie die ik bezocht was ‘Pragmatic Java’. De presentatie werd gegeven voor een groot publiek. De spreker, Allister Smith, een aimabele man van over de 50, demonstreerde hoe Java ook gebruikt kon worden op de manier zoals bij Python en Ruby. Eerst werd een stuk Java-code gedemonstreerd dat veel gebruik van Entity-beans, DAO-classes gebruik maakte om een XML-document te genereren aan de hand van een databasetabel. Vervolgens een stuk Python code waar via veel minder code hetzelfde werk werd gedaan en tot slot demonstreerde de spreker Java-code die op soortgelijke wijze, via dynamische code hetzelfde werk deed. Enkele jaren terug was dit onderwerp misschien nog vernieuwend en ‘op tijd’. Nu bleek uit de onderwerpen hoezeer in Python (en te meer Ruby, hoewel die taal niet gedemonstreerd werd) in veel gevallen eleganter en beter werken.

Rich clients

De keynote werd gegeven door een evangelist van Adobe, Duane Nickull. Hij heeft in meerdere standard-commissies gezeten, bij onder meer W3C. Hij heeft (mede) design patterns vastgesteld voor Web 2.0, en RIA, analoog naar design patterns voor object oriented design zoals de GoF ze ooit heeft opgesteld. Onderwerpen waar iedereen een andere definitie voor heeft, dus een goede zaak dat veel begrippen vast gezet worden.
Veel onderwerpen behandelden Rich Clients-frameworks met name JavaFX en Flex van Adobe.

Verder heb ik nog veel andere zeer interessante onderwerpen gezien, over het Java Memory Model door Peter Veentjer en Closures stonden me vooral erg goed bij. Binnenkort een followup!

GAnt

Build toolsen -frameworks zijn er in vele soorten en qualiteiten. Meest bekende voor Java zijn natuurlijk Ant en Maven. Over de eigenschappen en voor- en nadelen van deze tools had ik zelf eerder al wat geschreven. Nadeel van beide tools is dat de configuratiefiles op XML zijn gebaseerd.
In mijn eigen artikel beschrijf ik hoe Groovy script gebruikt kan worden binnen Ant scripts. Een mooier en nog praktisch gebruik van Groovy is GAnt. De build-scripts kunnen dan volledig in Groovy geschreven worden, in dezelfde structuur en met dezelfde plugins als bij (de traditionalele xml-gebaseerde) Ant. Op DZone staat een erg goed artikel over dit artiekl: Ant or GAnt.

Apachecon, build and -management with Ant, Ivy, Maven security with Triplesec

Here’s an more detailed story on ApacheCon! I write the article in English, as some of my colleagues are be interested. The company being quite international, many of my colleagues don’t speak Dutch.

I’ve seen a lot of interesting lectures (and spoke interesting people). Very interesting were lectures about Ant, Maven and Ivy, all build- and package-management tools.
Everyone in software development with or involving Java most likely knows Ant, and probably uses it too. At Thursday there was a lecture about Extending Ant, with custom tasks.
You can build custom tasks, using scripting-languages available for java, like Jython, JRuby or Groovy, by using the scriptdef task. Then your custom task can be used from within your Ant file. Along with the built-in API of Ant, you can do complex operations as well in your Build-files.
Of course, if you start developing software in Ant, you need to create unit-tests for the code as well. You can do this with the antunit task.

I had created some nice sample code, unfortunately, it was lost because of the way the visual editor of my weblog works. However, on the website of Ant you can find fine tutorials, which make the sample code not necessary anyway.
I also saw an introductionairy lecture on Maven. I know Maven a little, but it’s not used in my project very extensively.
Finally I saw a lecture on Ivy. Similar to Maven, Ivy seems especially useful, if you already have a lot of Ant tasks. Unlike Maven, Ivy is only a package-management tools, but not a build-tool.
In the Q&A sessions after the lectures, the question arose, Maven or Ivy? It depends (how cliche) on the situation. Ivy has as great advantage it works as a plugin for Ant, and provides depency-tracking only. If you already have an extensive build-system with Ant, Ivy can be easier to introduce than Maven.
However, if you’re just starting or only have a few Ant-scripts, Maven seems the best way to go: everything is working out-of-the-box. Maven’s use of plugins, rather then scripts forces your build-environment to be more structured.

Finally, I also went to a lecture on TripleSec. This project was very promising and interesting. Everyone probably has a dozen security related passes (bank, acces, library, etc.) and one or more authentication systems like for online-payment, remote access etc. What the project promised was a uniform and easy way to add dongle- or ‘digipass’ like security to your application.
Once installed, a user can login using his mobile phone. When the user logs in for the first time, a tiny java-application using SMS is installed on the telephone (after confirmation of the user of course). Using the application the user can generate a key to login. When the user logs in for a second time, she can use the same application to generate a new code, without the need to download the application again.
All in all, you can have security that is similar to the system banks use, dongles using a telephone. It’s cheaper to develop, and the user doesn’t need to carry a lot of devices to login.

All in all, very interesting lectures. So, this article was in my draft for a long time. Inspired by an article on RET, I decide to publish it!

ApacheCon

Afgelopen week ben ik naar ApacheCon EU in Amsterdam geweest! Het congres was in hotel Moevenpick, langs een rivier waarvan me de naam even ontschoten is.
Ik was er samen met drie collega’s namens het bedrijf waar ik voor werk. Het waren een interessante en leuke dagen. Ik heb een hoop interessante lezingen kunnen bekijken. Leuk er waren ook de kleurrijke personen die de beurs bezochten, ‘hippies en andere rare mensen’, zoals iemand opmerkte. Er liepen wel wat mensen met een lange baard een bluetooth-headset, gasten in jaren 80 (oost-duitsland)-outfit, en veel shirts. Mensen in pak zag je bijna niet, op de bedienden na. Toch waren de meeste mensen waren wel vrije normale techneuten. Die mensen maakten het congres ook erg interessant, leuke gesprekken gehad met een hoop behoorlijk slimme mensen.
Donderdag werd er bier geserveerd op kosten van Google! Vrijdag was er ijs van een voor de hand liggend werk, welk bedrijf dat sponsorde is me ontgaan.
Naast lezingen over projecten binnen Apache, waren er ook lezingen over subversion, gebruik van xslt en lezingen op het ‘business-track’ over onder andere open source.
Erg interessant vond ik de sessies over package and build-tools, Ant, Ivy and Maven. Een heel mooi en veelbelovend project is Apache Triplesec, waar donderdag een lezing van was.
Vrijdagavond was de laatste middag, ik had een over Cocoon gevolgd. Een interessant Apache-project, hoewel ik niet zo van ben van ontwikkelen met XML/XSLT.
Na een loting van Google, met als hoofdprijs een i-pod, haastte de meeste mensen zich weer snel naar huis. Een enkeling bleef nog na netwerken.