07 mei 2009

Java-seminar - Ford Carrera (of Porsche Fiesta)

Vorige week een seminarie gegeven aan studenten informatica. Onderwerp van het seminarie was Enterprise Java en hoe wij dit binnen ons IT-bedrijf toepassen.
Voor mij was dit een "vuurdoop": de eerste keer dat ik voor studenten een presentatie gaf en ook de eerste keer dat ik over dit onderwerp sprak. Het gebeurt wel vaker dat ik binnen het bedrijf - voor een beperktere groep - een presentatie geef over iets uit de werksfeer (laatst b.v. nog over UML modeling). Maar uiteindelijk gaat het altijd over een beperkt publiek (max. 20 personen), die vaak zelf hebben gekozen om die presentatie bij te wonen (studenten "moeten" dit soort van voordrachten eerder volgen) en meestal is het voor mij dan ook een gekend publiek.

Deze keer ging het over iets meer dan 60 studenten, 2de en 3de-jaars informatieca, die mij voor de eerste keer zagen (en vice versa). Zij hadden al een zekere JEE voorkennis, maar bij hen licht de nadruk eerder op web development. JEE gaat nog net iets verder dan enkel web applicaties (al dan niet opgesmukt met AJAX-features): Java Messaging Service, web services, Java Connector Architecture, om er maar enkele te noemen. En dat was dan ook mijn boodschap naar die studenten: wat doen wij allemaal dat onder de noemer Enterprise Java valt en hoe wapenen wij ons voor de toekomst?

De presentatie zelf is vlot verlopen. Tijdens de presentatie zag ik hier en daar wel af en toe een kopje knikkebollen, maar nooit voor lang. Ook bleef het rustig (niet dat ze spontaan begonnen te babbelen) en heb ik tijdens de presentatie niemand achter zijn laptop zien wegduiken om "interessantere dingen" te doen... Volgens de docent was deze presentatie interessant en op het niveau van de studenten. Ik had mijn vuurdoop dus goed doorstaan...

Bij een stukje over AJAX had ik het op een gegeven moment over het Ford Carrera syndroom, een term die eigenlijk komt van één van onze architecten. Blijkbaar konden ze hier niet zo goed volgen... Stel je het volgende voor: je hebt een scherm waar je merk en type van een auto kan kiezen. Een klein beetje AJAX stelt je in staat het type auto te kiezen dat overeen komt met het merk van de auto. Combinaties zoals Ford Carrera zijn in dat geval uitgesloten. 'k Zal het in de toekomst moeten illustreren met een voorbeeldje, denk ik...

Omdat dit de eerste keer is, had ik vooraf geen idee hoelang de presentatie zelf ging duren. Achteraf gezien ben ik nogal door de presentatie gerushed, misschien ging het soms wat snel of mocht ik bij bepaalde onderwerpen wat langer blijven stilstaan. Maar de tijd was al bij al beperkt (de presentatie van mijn HR-manager én mijn presentatie mochten maximaal anderhalf uur duren). Nu weet ik hoe snel ik door de stapel slides kan gaan. Voor de toekomst zal deze presentatie wellicht worden uitgebreid met een aantal addenda. De basispresentatie blijft zoals ze is (met hier en daar een minimale aanpassing). Ik kan misschien wat traaaaaaager spreken, of wat langer blijven stilstaan beij sommige onderwerpen. Als er dan nog tijd over blijft, kan het publiek zelf kiezen uit een aantal topics die dan verder in detail kunnen worden uitgediept. Voor elk van deze topics wordt dan een aparte detailpresentatie voorzien, met meer focus of design. Afhankelijk van de beschikbare tijd en de interesses van het publiek kan ik dus alle kanten uit met mijn presentatie.

15:27 Gepost door There's more to life than what you see through windows in Java design & development | Permalink | Commentaren (0) | Tags: studenten, presentatie, jee |  Facebook |

02 oktober 2008

Onderscheid tussen return waarde en exception

Vorige week had ik een meningsverschil met een collega over de werking een bepaalde mainframe functie. Da's eens wat anders dan Java, natuurlijk, maar de analogie met Java is heel groot! Deze mainframe functie moet nagaan of een electronische handtekening correct is. Ja, bij ons doen we dat - om historische redenen - nog altijd op mainframe: de HSM en de crypto processoren bevinden zich op mainframe. De interface van deze functie is heel simpel:

  1. Je geeft het publieke certificaat en de handtekening door
  2. Je krijgt als returnwaarde "true" of "false" terug (boolean, vertaald naar 0 voor "false" of 1 voor "true")

Als je handtekening dus niet geldig is, dan krijg je dat via de returnwaarde door. Elke mainframe functie heeft echter ook steeds een header, waarin een uitvoeringscode is opgenomen en een zone voor een eventuele foutcode. Deze uitvoeringscode is 00 bij correcte uitvoering, 04 bij warning en 08 bij error, typische mainframe codes, die nog afstammen van exit codes in JCL's (daar bestaat ook nog 12 voor "severe"). Ja, ik heb ook nog een - beperkt - verleden als mainframe ontwikkelaar.

Alle uitvoeringen van transacties worden gelogd, met hun technische header (uitvoeringscode enz.) input en output. Die logging kan je bovendien ondervragen via een applicatie (zelfs een web applicatie!). Volgens mijn collega was het echter niet logisch dat je naar de detail van de uitvoering (output) moest gaan kijken om te zien of de handtekeningcontrole correct was uitgevoerd. En hierin vergist hij zich. Want de correcte uitvoering kan je nagaan a.h.v. de technische header. Het resultaat van de controle echter (of de handtekening al dan niet correct is) is te zien in de output van de functie. Op die manier maak je een onderscheid tussen een foutieve handtekening en een probleem bij het uitvoeren van de controle (b.v. omdat de crypto processor een fout gaf).

Voor mij is de bedoeling van die functie duidelijk: je vraagt of een handtekening correct is, dus verwacht je als antwoord "Ja" of "Nee". Dat antwoord wil je niet van een uitvoeringscode willen afleiden. Vergelijk het met Java: je kan een method hebben die als return waarde true of false teruggeeft. Maar als er zich bij de uitvoering ergens een fout voordoet, krijg je een exception of - indien het een "onvoorziene" fout is - een runtime exception, zoals ArrayIndexOutOfBoundsException.

10:59 Gepost door There's more to life than what you see through windows in Java design & development | Permalink | Commentaren (0) | Tags: exception, runtime exception, arrayindexoutofboundsexception |  Facebook |