#wjax 2010

Nachdem ich 2009 aus privaten Gründen weder auf der JAX noch auf der W-JAX war, zog es mich in diesem Herbst nach München, zur W-JAX.

Neu für mich im Vergleich zu den letzten Jahren war, dass ich mir mal ein Zimmer im Tagungshotel genommen habe und bereits am Ende des ersten Tages war mir ziemlich klar, dass es eine gute Entscheidung war. Ich bin einfach motivierter, wenn ich morgens früh nicht erst lange vom Hotel zum Tagungsort und abends wieder zurückkommen muss. Ergo hatte ich auch diesmal mehr von den Abendveranstaltungen.

Als kleine Zusammenfassung mal für mich als auch für die werten Kollegen, hier mal eine Übersicht der Sessions, die ich besucht habe:

Dienstag

Einführung von Sebastian Meyen @smeyen

Die Einführung gab Sebastian Meyen vom Java Magazin. Als Einführung ist es natürlich keine Session zu einer konkreten Technologie. Sebastian betonte den Wandel in Javas Geschichte von 2005 bis 2010: Nach einer Zeit der Stagnation, einem “Aufschrei” bei der Übernahme von Sun durch Oracle, einer Zeit der Stille kommuniziert Oracle jetzt seine konkrete Pläne. Sebastian schätzt Oracle als Firma mit dem Willen zum Erfolg ein und wertet die aktuellen Vorgänge positiv.

Interessant fand ich die Aussagen zur Android Plattform und der Zukunft von J2ME.

Softwareentwicklung im Zeitalter der Globalisierung von Nicolai Josuttis

Abgesehen davon, dass Nicolais Slides ein kleines, kosmetisches Makeover benötigt hätten (Slides in Comic Sans MS, echt jetzt?), gefiel mir der Vortrag sehr gut, was unter anderem daran lag, dass Nicolai weitestgehend frei gesprochen hat und seine Ausführungen nur mit den Folien gestützt hat und nicht umgekehrt, halt so wie es sein soll.

Stichworte und Gedanken dieses Vortrags waren unter anderem, dass die IT ebenfalls globalisiert wird (nichts Neues) und die Teams immer verteilter werden, die Aufwendungen, dieser Verteilung mit immer mehr Technik her zu werden, immer größer.

Wo ich Nicolai absolut beipflichte, ist die Aussage, dass IT und Entwicklung nicht in der Hand von Experten liegt sondern mehr und mehr beim Marketing. Der Kampf, das zu ändern, ist verloren. In einer Zeit, in der immer höhere Margen immer wichtiger werden, wird lieber der billigere Programmierer eingestellt als der fähige.

Wirklich gut fand ich, dass Nicolai aussprach, was oft Realität ist: Module und Programme müssen released werden, es muss schnell gehen und oftmals kann ein Projekt nicht im Sinne des best practice, der reinen Lehre entwickelt werden. Dies ist ein Fakt, mit dem umgegangen werden muss: Die Releases werden von den Experten asynchron aufgeräumt. Er sprach dabei von der agilen Putzkolone der IT.

Aus Erfahrung weiß ich, dass es genauso ist. Copy & Paste ist in vielerlei Hinsicht beliebtes Werkzeug und man die saubere Lösung oft nur in einem Code-Review und nachgelagertem Refactoring erreicht.

Java EE für Einsteiger, Aufsteiger und Umsteiger von Lars Röwekamp

Der Vortrag über die Neuerungen in J2EE 5 und 6 ist mir nicht in guter Erinnerung geblieben. Viel zu lange wurde damit verbracht, darzustellen, was in der alten Spezifikation alles nicht funktioniert hat bzw. zu den bekannten XML Konfigurationsorgien führte.

Viel zu spät erst stellte Lars in meinen Augen die Neuerungen vor. Daher ändern auch die schön gestalteten Slides nichts daran, dass ich aus diesem Vortrag nur wenig mitnehmen konnte.

NoSQL oder das Ende der “One Size Fits All”-Ära von Monika Moser @momo13

Auf diesen Vortrag freute ich mich wirklich, zumal theoretische Grundlagen im Vorfeld versprochen wurden.

Monika tat mir ein bisschen leid, der Vortrag war sehr gut besucht und uns wurde angeboten, den Raum zu wechseln und prompt kam es dort zu einigen Problemen mit dem Beamer. Schade ist, dass keiner auf die Frage “Kennt sich jemand mit dem Projektionsmodus von Macs” reagiert, obwohl tatsächlich Macbooks in allen Varianten diese Veranstaltung dominieren.

Leider war Monika zu sehr auf ihre Folien angewiesen und konnte kaum frei sprechen. Leider kann in meinen Augen so ein Vortrag nur noch schwer interessant werden.

Was ich zu hören bekam war ein Namedropping bekannter Datenbankkonzepte, die NoSQL in der einen oder anderen Form implementieren.

Wenigstens wurde kurz darauf eingegangen, was der Unterschied zwischen einem Key-Value Store und einem Document Store ist.

Zwischendurch wurden Begriffe wie “vector clocks” eingeworfen, die wohl was mit Konsistenz zu tun habe, aber nie erklärt. Weitere Ungereimtheiten waren Folien mit Bildern aus der Wikipedia zum Thema consistent hashing, die eigentlich gar nicht in das aktuelle Thema passten.

Fragen zu Abfragemöglichkeiten, die sich fundamental zur SQL Theorie unterscheiden, konnten nicht bzw. nur mit “je nach System muss man dann ein get mit der ID des Datensatzes machen” beantwortet werden. Schade, Potential verschenkt. Unter theoretischen Grundlagen habe ich mir mehr vorgestellt und auch trotz der widrigen Umstände mehr erwartet.

Build and deploy RIAs and mobile Applications using Flex von Anne Katherine Petterøe @yojibee

Ich verstehe ja, dass einem der Gold Sponsors auch eine Keynote ermöglicht wird, aber diese Keynote war ein totaler Reinfall. Natürlich ist es schwierig, Java Entwicklern die Vorteile von Flex nahe zu bringen, aber ich bezweifle, dass es mit Sesamstraßen Videos gelingt.

Eigentlich hätte man aus dem Vortrag was machen können, zumindest ist die Idee, mit dem Flashökosystem eine universale Plattform auf vielen mobilen Devices zu haben, ja nicht grundsätzlich schlecht.

Wenn dann allerdings auf einem Vortrag alles schief geht, angefangen von den Beamern, den Demos und einigem mehr, dann kann es nicht mehr interessant werden.

Aber wo sind meine ganzen J2EE Patterns hin? von Adam Bien @AdamBien

Vor etlichen Jahren habe ich Adam Bien mal bei einem Workshop / 1-Day Schulung gesehen. Damals war unser Ziel, eine In-House Anwendung im J2EE Umfeld zu entwickeln. Mein damaliger Eindruck: Das ist alles Irrsinn. Irgendein Generator spuckt eine Batzillion XML Dateien aus und man darf sich an’s Konfigurieren machen. Und weil das gerade so schön ist und trotzdem nicht funktioniert, braucht man noch jede Menge “Enterprise” Pattern, damit das ganze fliegt.

Zum Glück brachten Frameworks wie Ruby on Rails und Grails auch einen frischen Wind in die Java Szene und es ist schön zu sehen, wie “Enterprise” Pattern obsolet werden.

Adam Bien hat einen ganz eigenen, agilen Vortragsstil. Seine Slides bestehen meist nur aus wenigen Schlagworten und er springt zwischen diesen Stichworten und Live-Coding hin- und her.

Mir hat sein Vortrag sehr gut gefallen. Sehr witzig fand ich, wie er seine damaligen Patterns vorführte und die modernen Alternativen darstellte.

Bereits in diesem Vortrag dachte ich, dass es Zeit wird, JPA und JSFs auch einmal für private Projekte einzusetzen.

Alles in allem sehr kurzweilig und informativ.

Canoo RIA Suite von Dierk König @mittie

Dierk habe ich vor Jahren auf einer iX Veranstaltung zum Thema Grails gesehen. Diese Schulung gefiel mir damals überhaupt nicht. Vielleicht war ich schlecht drauf, er oder das Thema passte einfach nicht.

Sicherlich war sein Vortrag eine Werbeveranstaltung für die Canoo RIA Suite, aber eine sehr interessante.

Ich fand es gut, wie souverän Dierk mit den Widrigkeiten des Konferenz WLANs, dem iPhone Thetering und schlussendlich der leeren Laptopbatterie umging.

Das Canoo Framework interessiert mich, weil wir in einem Projekttteil, dessen Aufgabe die Ablösung einer großen Oracle Forms 6 Anwendung ist, einen ähnlichen Ansatz verfolgen. Allerdings ist die explizite Programmierung der GUI in unserem Ansatz optional, es werden ausgehend von den Definitionen im Data Dictionary von Oracle Swing Views generiert, die auch komplexe Master/Detail Masken und Lookups abdecken.

Mich hat es gefreut zu sehen, dass auch andere Firmen nach wie vor auf J2SE Swing setzen und damit attraktive Oberflächen bauen.

Für mich einmal eine angenehme “Werbeveranstaltung”.

Android Programmiermodel von Michael Johann @malagant

Michael Johann sollte eine Selbsthilfegruppe für technikverrückte Entwickler gründen. Ich kenne das Problem: Mich interessiert, wie eine Technik, ein Gerät funktioniert und kaufe irgendwann so ein Gerät, nur um es zu programmieren.

Sein Einstieg bestand folgerichtig in der Aufzählung der mobilen Devices, die er benutzt und programmiert.

Während des Vortrags erstellte er eine funktionierende Twitter Suche für Android 2.2. Was mich begeistert ist die Tatsache, dass man nicht wie zum Beispiel bei Apple gezwungen ist, sich eine kostenpflichte Developer Mitgliedschaft zuzulegen, um die eigene Anwendung auf dem eigenen Device zu testen.

Ebenfalls gefällt mir der Ansatz von Android, da Java immer noch für mich die Sprache ist, in der ich mich am heimischsten fühle.

Interessant waren die Gedanken zur Zukunft der Entwicklung von mobilen Devices. Es wurde die Hypothese geäußert, dass in einigen Jahren HTML 5 zusammen mit Frameworks wie SproutCore und Sencha den Standard setzen werden und nur noch sehr spezielle Applikationen nativ auf den Geräten laufen werden. Mein erstern Gedanken dazu war: War das nicht das Model, dass Apple 2007/2008 mit dem ersten iPhone vorgeschlagen hatte?

Ein sehr gelungener Abschluss des Tages.

Mittwoch

The power of JSF 2.0 von Andy Bosch @andybosch

Wahrscheinlich ungewollt, aber dieser Vortrag hat mich nicht nur auf neue Funktionen in JSF 2.0 aufmerksam gemacht, sondern auch noch einmal motiviert, Netbeans eine Chance zu geben. Andy hielt einen entspannten Vortrag mit gut geplantem und funktionierendem Lifecoding im großen Saal ab.

Es gibt einige Sachen, die ich nicht verstehe: JSF 2.0 löst per default nach wie vor Aktionen nur per POST aus? URLs sehen immer noch wie im letzten Jahrtausend aus und sind nur eingeschränkt bookmarkable? Kann eigentlich nicht sein, ist aber so. Ansonsten begeisterte mich allerdings die Toolunterstützung von Netbeans bei der Entwicklung, sowohl für Javaklassen als auch für JSF XHTML Dateien.

Ein guter Vortrag, um den Tag zu beginnen.

Semantisch expressive Webentwicklungssprachen von Dr. Thomas Biskup

In meinen Augen klang der Titel spannend, auf abstrakterer Ebene über die Probleme aktueller Sprachen zu sprechen. Was allerdings vorgestellt wurde, war das Opensaga Framework in dem genau das umgesetzt wird, was anderswo kritisiert wird. Opensaga ist noch jung und die Firma hat auch damit Erfolg, aber ich konnte den Vorteil zwischen Inhouse Lösungen und diesem Framework auf Frameworks beim besten Willen nicht erkenne,

Ich kann die Wünsche von Thomas verstehen, es besser machen zu wollen, aber zum einen war mir der Vortrag zu unstrukturiert und zum anderen zu sehr Werbung für etwas, das alles besser machen will, aber wahrscheinlich so noch nicht kann.

Nebenläufigkeit 1: Konzepte und Paradigmen unter Java von Johannes Link

Von diesem Vortrag habe ich nicht viel mitgenommen, was wahrscheinlich auf meine wachsende Müdigkeit und dem schlechten Sitzplatz im Raum zurück zu führen ist. Es wurden einige neue Denkansätze wie Transactional Memory und ähnliches vorgestellt, aber bei mir ist es leider nicht angekommen. Ich war zu sehr damit beschäftigt, im vollbesetzten Raum unter dem Klimaschacht zu frieren.

Rewriting JSF URLs with PrettyFaces von Dan Allen @mojavelinux

Dan Allen von Red Hat hielt die einzigen beiden englischsprachigen Talks, die ich anhörte.

Prettyfaces geht das Problem der unbrauchbaren URLs von JSF Anwendungen an. Der Vortrag war sehr gut strukturiert und aufgebaut und die Codebeispiele sinnvoll.

Prettyfaces sieht nach einem sehr interessanten Action Framework für JSF aus, dass JSF auch im alltäglichen Webumfeld und nicht nur für Webapplikationen brauchbar macht.

Seam Faces 3 and RichFaces 4 von Dan Allen @mojavelinux

Eh ja. Beides sicherlich interessante Dinge, wenn man bereits Erfahrung mit JSF 2 hat, die ich nicht habe.

Donnerstag

Optimierung von JPA-Anwendungen von Dirk Weil @dirkweil

Ein sehr spannender, sehr gut gehaltener Vortrag über die Möglichkeiten, JPA 2 basierte Anwendungen zu optimieren. Dirk stellte zuerst die Möglichkeiten des JPA Standards vor und ging dann auf spezielle Parameter der Platzhirsche Hibernate und EclipseLink ein.

Einige Dinge, die er nannte, kannte ich bereits. Uns hatte zum Beispiel bereits das Lazy Loading für Attribute geholfen, die Zugriffszeit in einem sehr speziellen Fall von Minuten zu Sekunden zu drücken. Viele andere Sachen waren aber neu und ich freu mich auf den Download der Slides, so dass wir diese Informationen bei Zeiten griffbereit haben werden.

Java 7 – Überblick über die Erweiterungen im jüngsten Release von Java von Angelika Langer und Klaus Kreft

Als letzten Vortrag hörte ich mir die Zusammenfassungen bzw. die Entscheidungen für das JDK 7 an. Einige neue Sachen klingen interessant, einige nur nett, viele der wirklichen Neuerungen sind ins JDK 8 verschoben wurden.

Mittlerweile hat Oracle sich offiziell zum Fahrplan für das JDK commited. Eine Entscheidung, die ich sehr gut finde, genau wie die Ankündigung, dass Oracle zusammen mit Apple am OpenJDK für Mac OS X arbeiten wird.

15 Vorträge, die in der Summe einen guten Eindruck hinterlassen und meines Erachtens auch den einen oder anderen Impuls für unsere Zwecke gebracht haben. Java wird mittlerweile gerne tot oder schlecht geschrieben, aber ich denke, dass es noch weit davon entfernt ist. Es war sicherlich nicht immer alles gut, aber es ist gut zu sehen, dass Impulse von außen aufgenommen und umgesetzt werden.

Ich blättere jetzt mal das JSF 2 Buch auf, das der Postbote gerade gebracht hat…

| Comments (1) »

16-Nov-10


Optimizing the Oracle Query Optimizer

The Oracle Query Optimizer does a great job in rewriting Queries. For example the nested subquery in

SELECT C.cust_last_name, C.country_id 
FROM    customers C 
WHERE EXISTS (SELECT 1 
                          FROM sales S 
                          WHERE S.quantity_sold > 1000 AND 
                                        S.cust_id = C.cust_id);

will be rewritten into the following query, using a semi-join:

SELECT C.cust_last_name, C.country_id 
FROM customers C, sales S 
WHERE S.quantity_sold > 1000 AND 
C.cust_id S= S.cust_id;

(Example from Optimizer Transformations: Subquery Unnesting part 1)

In the first form, the subquery will be invoked for each entry in customers, replacing the value of the correlated column C.cust_id. Thus the query cannot be parallelized among other implications. Most of the time, if the columns are correctly indexed, the semijoin will be much faster.

This form of rewriting is called “unnesting”.

Consider the following query:

SELECT C.cust_last_name, C.country_id 
FROM    customers C, (SELECT f_compute_some_complicated_value(s.quantity_sold), S.cust_id
                          FROM sales S                          
                          WHERE S.quantity_sold > 1000) S
WHERE  S.cust_id = C.cust_id

The subquery in the from clause its called a derived table. It will be rewritten as:

SELECT C.cust_last_name, C.country_id, f_compute_some_complicated_value(s.quantity_sold), S.cust_id
FROM    customers C, Sales S
WHERE  S.cust_id = C.cust_id 
AND S.quantity_sold > 1000)

This technique is called query merging. Here the join should also be faster in most cases.

Both techniques are good and will improve many queries.

But consider a scenario where the subqueries query remote tables (via database link for example) or call PL/SQL or even Java stored procedures and the main table (customes in the examples) contains many more rows than the joined table or the where clause is less selective then the where clause of the subquery: The subquery will be executed as many times as there are rows in the main table. This can lead to very poor performance.

Luckily, the optimizer can be given hints:

To stop unnesting, use the NO_UNNEST hint:

SELECT C.cust_last_name, C.country_id 
FROM    customers C 
WHERE EXISTS (SELECT /*+ NO_UNNEST */ 1 
                          FROM sales S 
                          WHERE S.quantity_sold > 1000 AND 
                                        S.cust_id = C.cust_id);

Furthermore, i’d rewrite the query like so:

SELECT C.cust_last_name, C.country_id 
FROM    customers C 
WHERE C.cust_id =ANY (SELECT /*+ NO_UNNEST */ S.cust_id 
                                       FROM sales S 
                                       WHERE S.quantity_sold > 1000);

Where the EXISTS clause triggers the subquery for each item in customes, the =ANY clause will trigger the subquery only once. Both queries are semantically identical.

To stop the merging of derived tables, use the NO_MERGE hint in the surrounding select clause:

SELECT /*+ NO_MERGE(S) */ C.cust_last_name, C.country_id 
FROM    customers C, (SELECT f_compute_some_complicated_value(s.quantity_sold), S.cust_id
                          FROM sales S                          
                          WHERE S.quantity_sold > 1000) S
WHERE  S.cust_id = C.cust_id

The NO_MERGE hint takes the alias of the derived table as a parameter.

Combining both techniques brought a complex query down from 40s to just about 1s. We are using an Oracle 10g Database, but the hints also apply to 11g.

| Comments (1) »

20-Oct-10


Unicode substrings in Ruby 1.8.x

Here is how to get correct unicode substrings in Ruby 1.8.x

require 'jcode'
$KCODE = 'u'
 
"öäüÖÄÜß".split(//)[4,2].join
# ÄÜ

Don’t know, if this performes well… In case you have better ideas, please drop me a comment.

| Comments (0) »

15-Oct-10


Create reusable MySQL schema dumps

In case you need a MySQL schema transferred from one host to another and the schema names differ, you can ran into problems with a standard MySQL dump.

Use the following statement to create a schema dump that contains all table and view definitions as well as all stored procedures without a reference to the original schema:

 mysqldump -uroot -p name_of_the_original_schema --no-data --opt --routines | sed 's/`name_of_the_original_schema`.//g' > dump.sql

The dump will only contain the schema definition and no data. Calls to routines will not be prefixed with a schema name.

| Comments (0) »

16-Sep-10


iTunes terminal tipps 2010

4 years ago i had a first iTunes terminal tipp, here is a round up (all terminal tipps require Mac OS X):

Invert the iTunes Store links in the list

The littler arrows can either point to the iTunes store or to the same artist or album in your library. Invert their behavior to let them point to your files instead of the store:

defaults write com.apple.iTunes invertStoreLinks -bool YES

Undo this with

defaults write com.apple.iTunes invertStoreLinks -bool NO

Disable them with

defaults write com.apple.iTunes show-store-arrow-links -boolean FALSE

Enable them with

defaults write com.apple.iTunes show-store-arrow-links -boolean TRUE

Restore the horizontal stoplight

Again, Apple messes with it’s own UI guidelines. To restore sanity, use

defaults write com.apple.iTunes full-window -boolean TRUE

Reenable the vertical layout introduced with iTunes 10 through

defaults write com.apple.iTunes full-window -boolean FALSE

Enable half-star ratings

The following will let you rate your songs with half-star ratings (i.e 3.5 stars):

defaults write com.apple.iTunes allow-half-stars -bool TRUE

If you don’t like the fact, that the half-star ratings will round on any i* device, turn it off again:

defaults write com.apple.iTunes allow-half-stars -bool FALSE

| Comments (0) »

13-Sep-10