Dies ist die Heimat der Java User Group Nürnberg.


Donnerstag, 2. Dezember 2010

Direct-call Entwurfsmuster

Wie jeder weiss, schliesst die beste Art und Weise Objekte miteinander kollaborieren zu lassen Annotationen (siehe Spring und EJB für Beispiele), einiges an XML (wieder mit einem Blick auf Spring und EJB), noch mehr XML (siehe Oracle ADF) und dazu Drag und Drop in einem obskuren visuellen Editor (z.B. wieder ADF) ein. Das ist Industriestandard und es ist wunderbar, denn Consultants können so viel Geld machen und Consulting Unternehmen können sogar noch mehr Consultants in Projekte bringen.

Wie auch immer, es mag Situationen geben, wo wir etwas anderes benötigen. Daher haben wir David Tanzer und ich das Direct-Call-Pattern entwickelt (in einer Cocktailbar).

Direct-Call pattern [1]
(auch bekannt als Collaborateur-With-No-Intermediator Entwurfsmuster)

Einführung:
2 Objekte wollen miteinander kommunizieren. Einer ist der Aufrufer (Caller), der andere der Aufgerufene (Callee). Für den Aufgerufenen ist das völlig in Ordnung und der Aufrufer macht alles erforderliche vor und nach dem Aufruf gerne selbst.

Anforderungen:
2 Objekte, manchmal 1 Objekt in 2 Rollen (Aufrufer, Aufgerufener)
Sonst nichts

Lösung:
Der Aufrufer ruft den Aufgerufenen direkt auf. Kein Proxy, Interceptior oder sonst ein Vermittlerobjekt sind im Aufruf involviert. Wirklich, bloss ein Aufruf von einem vertrauenswürdigen Freund zum anderen. Vielleicht loggt eine dritte Partei den Aufruf, aber das lässt sich heutzutage schwer vermeiden.

Pros:
Schneller Aufruf
Saubere und kurze Stack Traces
Weniger Verwirrung
WYSIWYG

Contra:
Viele "WTF ist hier die Dependency Injection" und "wie finde ich den Interceptor" Kommentare
Verärgert das nicht benötigte Annotationen- und Aspektorientierungs-Zeug
Andere können den Code verstehen, den man geschrieben hat
Weniger Geld mit Software Support

Nutzen wenn:
Kein Geld für Application Server vorhanden
Keine Zeit um Frameworks zu debuggen
Man sich nicht nach langen Zeiten voller exklusivem Consulting sehnt
Projekt-Laufzeit länger als einige Wochen/Monate (und man soll sich selbst ohne Aufpreis um den Support kümmern)

Freitag, 5. November 2010

JUG-Treffen am Donnerstag, 18.11., 18h auf der DOAG-Konferenz

Hi zusammen,

- Für die Java aktuell – Das iJUG-Magazin werden Artikel gesucht (siehe unter ijug.eu oder Mail an redaktion@ijug.eu)
- Das naechste JUG-Treffen findet statt am Donnerstag, 18.11.2010 ab 18h auf der DOAG-Konferenz statt.

Der Einlass zum JUG-Treffen ist natuerlich kostenfrei. Es gibt darueber hinaus 25% Preisnachlass durch die JUG fuer die Konferenz (größter Event der Oracle-Community in Zentraleuropa, 16.-18.11.2010 in Nürnberg, bei der die JUGs aktiv die Java Tracks mitgestaltet, siehe auch http://www.doag2010.de).

Thema: Ich werde einige der (Keynote-) Speaker schnappen, so dass Euch diese in einer lockeren Diskussion zur Verfuegung stehen und jeder vielleicht einen Blitztalk gibt.

Um formlose Anmeldung unter jug@source-knights.com wird gebeten.

Details siehe auch http://www.source-knights.com

Ort:
CCN CongressCenter Nürnberg Ost
Messezentrum
90471 Nürnberg

Mittwoch, 4. August 2010

JUG-Treffen am 16.09.2010, 18:30

Ein weiteres spannendes JUG-Treffen findet bei der ErgoDirekt (formerly known as KQV) statt.
Um Anmeldung per Mail (jug@source-knights.com) wird gebeten.

Thema: Anwendung von Vorgehensmodellen in MDA und MDG
Speaker: Markus Wagner

Abstract:
Der Zuhörer lernt abstrakt und am Beispiel was man heutzutage für
Enterprise Architekturen generieren kann und wie die Vorgehensmodelle
der Projekte sowie die Fortschrittsmessungen des Programm Managements
darauf abgestimmt werden müssen.

ERGO Direkt Versicherungen
Software-Architektur & Technologie
Karl-Martell-Straße 60
90344 Nürnberg

Dienstag, 20. Juli 2010

Source Talk Tage 2010

Vom 31. August - 2. September 2010 finden die Source Talk Tage in Göttingen statt. Ich darf mit dabei sein und werde einen Workshop über Agile Methoden, einen über Softwareentwicklung für das iPhone/iPad und ein paar Vorträge halten.

Näheres unter: www.source-talk.de

Freue mich Euch dort zu sehen und ins Gespräch zu kommen. Der Source Talk ist eine tolle nicht zu große Konferenz der JUG Deutschland e.V., in Zusammenarbeit mit dem iJUG Interessenverbund der Java User Groups e.v. (ijug.eu) die sehr zu empfehlen ist.

Montag, 14. Juni 2010

Agile Methoden - Einführung

Anbei die Präsentation über Agile Methoden in der Software-Entwicklung von David Tanzer und Oliver Szymanski auf dem letzten JUG-Treffen bei der Nürnberger Versicherung.

Für Rückfragen stehen wir gern zur Verfügung:

David Tanzer: business@davidtanzer.net
Oliver Szymanski: oliver.szymanski@source-knights.com

Donnerstag, 10. Juni 2010

[JUG] Treffen bei der Nürnberger Vers., 10.06.2010, Agile Methoden

Hallo zusammen,

das nächste JUG-Treffen findet statt: Do. 10.06.2010, 18:30-20h

Ort:
NÜRNBERGER Versicherungsgruppe (der Haupteingang am großen Turm :))
Ostendstraße 100, 90334 Nürnberg

Um Anmeldung wird gebeten (Formlose Mail mit Namen an
jug@source-knights.com). Gern könnt Ihr auch Leute mitbringen.

Thema: Agile Methoden
Referenten: David Tanzer und Oliver Szymanski

Welche Probleme lösen Agile Methoden bei der Entwicklung und vor allem
wie? Die agilen Werte, Prinzipien und Praktiken lösen spezielle Probleme
der Softwareentwicklung. Agile Methoden stellen z.B. selbstorganisierte Teams
in den Vordergrund. In diesem Vortrag wird gezeigt, wie sich aus bestimmten
Problemen in Softwareentwicklungsprozessen eine agile Vorgehensweise
ableiten lässt. Das ganze wird praxisnah erläutert und Vor-
und Nachteile geklärt.

Donnerstag, 6. Mai 2010

JUG-Treffen am Mi., 12.05.2010, 18:30-20h

Das nächste JUG-Treffen findet statt: 12.05.2010, 18:30-20h

Um Anmeldung wird gebeten (Formlose Mail mit Namen an jug@source-knights.com).

Thema: JSXP 1.0 RC
Referenten: David Tanzer und Oliver Szymanski

Das Open Source Java Webframework geht in die erste Release Version.
Es ermöglicht rapide Entwicklung von Web-Applikationen, glänzt mit
seinem Default-Verhalten, dass einem trotzdem nicht bremst, wenn man
etwas vom Standard abweichendes implementieren muss. Dazu kommt die
starke Compile-Time Sicherheit und der strikten Trennung von Design
und Code ohne neue Sprachen lernen zu müssen.

Wir geben einen Überblick über das Framework stellen seine Features vor:
Compile-time safety, Separation of code and design, Simple XHTML
design, Component-Orientation, Human readable URLs, Server side state,
View Flows, View alias, Element and View templating,
Internationalization / Resource Management, Scopes, Validation

Details unter http://www.jsxp.org und ein Videotutorial unter
http://sourceknights.blogspot.com/2010/03/jsxp-video-tutorial.html

Ort: Cortal Consors S. A., Zweigniederlassung Deutschland
Bahnhofstraße 55
90402 Nürnberg

Donnerstag, 29. April 2010

Rapid Application Day in Nürnberg erfolgreich beendet

Mit 55 Gästen an diesem speziellen Workshop-Tag der JUG, iJUG und DOAG SIG Java die allesamt zufrieden heimgekehrt sind, war der Tag ein schönes interessantes Erlebnis für alle. Und hoffentlich lehrreich ;)

Montag, 22. März 2010

Cartoonizer iPhone App

http://itunes.apple.com/de/app/nacirons-cartoonizer-live/id363525720?mt=8

English: (deutsch s.u.)

Cartoonizer is an iPhone App, that shows the real world seen via the iPhone camera as a live cartoon/comic style video stream. You can take photos and sent them to Facebook, via email or just save them.

You can add setting profiles to use your different cartoon/comic styles (i.e. black&white, change contrast, brightness, ...)

Look live at the world in a completely new way...

Deutsch:
Mit Cartoonizer kann man sich die Welt durch die iPhone Kamera als live Cartoon-Stream ansehen. Bilder lassen sich knipsen und an Facebook oder via eMail senden oder einfach speichern.

Über Einstellungen kann man unterschiedliche Cartoon/Comic Styles konfigurieren (z.B. Schwarz/Weiss, Kontrast und Lichtanpassungen, ...)

Mit Cartoonizer lässt sich die Welt live auf völlig neue Weise betrachten.

Samstag, 20. März 2010

AuraMeter

http://itunes.apple.com/de/app/aurameter/id364149666?mt=8





English description: 
(App is in english, german, french, spanish, chinese, italian)  
AuraMeter measures the current live camera stream and gives a description of the aura. You will know directly how a room, a picture or anything else will influence a beholder. If you activate the meter, you will get a description for the current point of view and for the average aura. This helps for example to get a overall impression of a room.  


Deutsch: 
AuraMeter misst live das aktuelle Bild, das die Kamera empfängt und beschreibt die vorhandene Aura. Erkennen Sie auf einen Blick, wie ein Zimmer, ein Bild, usw. auf einen Betrachter wirkt. Bei Aktivierung der Messung können sie herumschwenken und bekommen einen live Informationen über die durchschnittlich gemessene Aura sowie die aktuelle. Dies hilft z.B. dabei den Gesamteindruck eines Raumes zu messen.

Donnerstag, 11. März 2010

Rapid Development Day, 29.04.2010, Nürnberg

Am Do., 29.04.2010 wird es den ersten Ganz-Tages-Event der JUG Erlangen/Nürnberg geben. Gemeinsam mit der DOAG SIG Java widmen wir uns einen ganzen Tag dem Thema "Rapid Application Development mit Java".


Die Plätze sind begrenzt, daher nicht zu lange warten, falls Ihr Euch anmelden möchtet.


Ort: Holiday Inn, Engelhardsgasse 12, 90402 Nürnberg
Termin: 29.04.2010, 9h-17:45h 
Preis: 100€ für JUG-ERN Mitglieder

Zur Buchung: Anmeldung
(Die Anmeldung erfolgt über die DOAG, den Mitgliedspreis wählen und bei Mitgliedschaftsstatus JUG-ERN angeben. Wir gleichen das mit unserer Mitgliederliste (Xing, Newsletter) ab.)

Aktuelle Planung
Auf der Suche nach dem heiligen Gral: Rapid Web Application
Development mit Grails und Oracle, Robert Szilinski, esenti
Datengetriebene Applikationen, Hans Niedermeier
ADF Intro und ADF & SOA, Bertold Meyer, Oracle
XDev Intro und Projektbericht, Stiegler, xdev
JavaFX und RAD, Peter Doschkinow, Sun
RAD mit Eclipse und RCP, NN, T&P

Gern könnt Ihr den Tag im Kalender markieren ;)

Montag, 22. Februar 2010

[JUG]: Treffen am Do., 11.03.2010 bei der KQV alias ERGO Direkt


Das JUG-Treffen fand statt am Do., 11.03.2010 um 18:30-20h. Mit über 50 Teilnehmern war der interative Vortrag über agile und lean Praktiken ein voller Erfolg ;)

Ort:
KarstadtQuelle Versicherungen alias ERGO Direkt
Karl-Martell-Straße 60
90431 Nürnberg

Vortrag: "Interaktiver Workshop: Auf Diät – Wie Sie Ihre Entwicklung verschlanken






Setzen Sie Ihre Entwicklung auf Diät! Im Rahmen eines Spiels werden Sie eine
Produktionslinie simulieren. Erleben Sie wie anhand der fünf Schritte der
„Theory of Constraints“ der Durchsatz Ihrer Entwicklung erhöht und
Verschwendung verringert werden kann. Lernen Sie spielerisch agile und lean
Praktiken kennen und gewinnen Sie Anregungen, auch Ihre eigene Entwicklung
zu verschlanken

Pierluigi Pugliese connexxo GmbH & Martin Heider infomar software



Zu der näheren Beschreibung geht es hier und hier.

Die Handouts befinden sich hier.

Montag, 15. Februar 2010

WebSlideShow

WebSlideShow is an iPhone application to show a slide show based on web content.



Simple solution:
With the default configuration you can enter URLs (internet addresses like http://www.source-knights.com)  and the slide show will iterate about the web pages and show them. Thats all to use WebSlideShow. The "refresh"-slider defines the time interval to update the data for the slide show in the background. The "ticker"-slider defines the time interval an item is shown in the slide show.



More complex solution for the experienced users:
But you can do a lot more with WebSlideShow. With small but very powerful configuration possibilities you can enter keywords instead of URLs, use any web site as a service to retrieve information about the keys and define how the resulting information are shown in the slide show (for example you can format them to any HTML).

To configure WebSlideShow Regular Expression are used to define, which information you want from a result. And HTML is used as format to configure what will be shown in the slide show.

Here is an example how to configure WebSlideShow to get stock information from yahoo finance and to show the data and a chart in the slide show. If you have any problems with the configuration just press the "reset to defaults"-button

1. query url

Query url defines how your search string by adding new items will be used. Per default the query url is "%@". This is a placeholder for anything you enter in the search field. The default means your search string is interpreted directly as an url. To configure WebSlideShow to enter quotes instead of url for the Yahoo-Finance-Service you can enter the finance url with the placeholder in it:

http://download.finance.yahoo.com/d/quotes.csv?s=%@&f=nsl1d1t1c1ohgv&e=.csv

This means the search will not use you input directly as url. Instead it will use the yahoo url by replacing the placeholder "%@" with your input. This request to the Yahoo finance service will result in a csv-data-file with the stock quotes and more information. How WebSlideShow will interpret the result is shown later by configuring the content.

If you want to use the search with different keywords you have to enter them in the search UI separated by a space. And you have to configure the query url as "multi request". That means the placeholder will be replace by all of the keywords you enter separated by a space. How they will be separated in the query url you have to define in the form that pop up if you activate "multi request". For the Yahoo finance service it is "+" as url separator and "\n" (that means new line and is the correct configuration for csv-data-files) as result separator.

2. data url

WebSlideShow distinguishes between query url for searches and data url for the real data used by the slide show. Per default the two are the same ("%@").  This is also true for the Yahoo-finance-service. So we enter the following as data url:

http://download.finance.yahoo.com/d/quotes.csv?s=%@&f=nsl1d1t1c1ohgv&e=.csv

You need different urls if you want to use a service to get a result list and a different service to get concrete data for the items of the result list (for example you use google as search query url and the resulting web addresses as data urls).

To use the yahoo finance service efficiently we activate "multi data" and enter the same configuration as in "multi request". "+" as url separator and "\n" (that means new line and is the correct configuration for csv-data-files) as result separator. This helps the application to fetch all data for the result in a single call of the finance api. This saves a lot of time instead of calling the service for each item apart.

3. content configuration

Configuring the content of search query and data results will use regular expressions and HTML with placeholders.

3.1 name and description

First you have to define what WebSlideShow can use as name and description of the data and search query result.

This is done by regular expressions. Per default anything of the result is used as name and description. You can define this by giving empty regular expression and define 0 as regular expression group.


name=""; // empty means use whole input instead of regex
name.group=0;
description="()"; // empty means use whole input instead of regex
description.group=1;

name.query=""; // empty means use whole input instead of regex
name.query.group=0;
description.query="()"; // empty means use whole input instead of regex
description.query.group=1;


For the yahoo finance service we can enter regular expressions that describe the content of the search query and data result and define which regular expression group conform to name and description:


name="\"(.*?)\",\"(.*?)\",(.*?),\"(.*?)\",\"(.*?)\",(.*?),(.*?),(.*?),(.*?),(.*)";
name.group=1;
description="\"(.*?)\",\"(.*?)\",(.*?),\"(.*?)\",\"(.*?)\",(.*?),(.*?),(.*?),(.*?),(.*)"; 
description.group=2;

name.query="\"(.*?)\",\"(.*?)\",(.*?),\"(.*?)\",\"(.*?)\",(.*?),(.*?),(.*?),(.*?),(.*)";
name.query.group=1;
description.query="\"(.*?)\",(.*)";
description.query.group=2;

The above configuration describe the content of the Yahoo-finance-service csv data file.

3.2 slide show content

The last step is to configure what you want to see in the slide show. Per default it is:

content="";  // empty means use whole input instead of regex 
content.group=0;
content.format="%@";

The ".format"-configuration is new. It allows you to format the content by adding anything before and after the placeholder. In the default configuration nothing is added. So the whole web page for the entered address is used in the default configuration. For the Yahoo-finance-service we will give a more complex configuration to define a custom view. The configuration allows to define the result in a hierarchical way. Instead of just setting "content" to a regular expression we will define content as a block of custom values by writing "content = { propertyname = ... }. Here is the full example for a custom view of the Yahoo-finance-service:


content = {
title="\"(.*?)\",\"(.*?)\",(.*?),\"(.*?)\",\"(.*?)\",(.*?),(.*?),(.*?),(.*?),(.*)";
title.group=1;
title.format="<div style='height:70px;'><center style='font: normal xx-large Helvetica; color: #99CCFF;'>%@</center>";

subtitle="\"(.*?)\",\"(.*?)\",(.*?),\"(.*?)\",\"(.*?)\",(.*?),(.*?),(.*?),(.*?),(.*)";
subtitle.group=2;
subtitle.format="<center style='font: italic x-large Helvetica; color: #999999;'><a href='http://finance.yahoo.com/q?s=%@'>%@</center></a></div></br></br>";

lastTrade="\"(.*?)\",\"(.*?)\",(.*?),\"(.*?)\",\"(.*?)\",(.*?),(.*?),(.*?),(.*?),(.*)";
lastTrade.group=3;
lastTrade.format="<center><table><tr><td>Last trade: </td><td>%@</td>";

date="\"(.*?)\",\"(.*?)\",(.*?),\"(.*?)\",\"(.*?)\",(.*?),(.*?),(.*?),(.*?),(.*)";
date.group=4;
date.format="<td>Datum: </td><td>%@</td></tr>";

change="\"(.*?)\",\"(.*?)\",(.*?),\"(.*?)\",\"(.*?)\",(.*?),(.*?),(.*?),(.*?),(.*)";
change.group=6;
change.format="<tr><td>Change: </td><td>%@</td>";

time="\"(.*?)\",\"(.*?)\",(.*?),\"(.*?)\",\"(.*?)\",(.*?),(.*?),(.*?),(.*?),(.*)";
time.group=5;
time.format="<td>Zeit: </td><td>%@</td></tr>";

open="\"(.*?)\",\"(.*?)\",(.*?),\"(.*?)\",\"(.*?)\",(.*?),(.*?),(.*?),(.*?),(.*)";
open.group=7;
open.format="<tr><td>Open: </td><td>%@</td>";

min="\"(.*?)\",\"(.*?)\",(.*?),\"(.*?)\",\"(.*?)\",(.*?),(.*?),(.*?),(.*?),(.*)";
min.group=9;
min.format="<td>Min: </td><td>%@</td></tr>";

volume="\"(.*?)\",\"(.*?)\",(.*?),\"(.*?)\",\"(.*?)\",(.*?),(.*?),(.*?),(.*?),(.*)";
volume.group=10;
volume.format="<tr><td>Volume: </td><td>%@</td>";

max="\"(.*?)\",\"(.*?)\",(.*?),\"(.*?)\",\"(.*?)\",(.*?),(.*?),(.*?),(.*?),(.*)";
max.group=8;
max.format="<td>Max: </td><td>%@</td></tr></table></center>";

image="\"(.*?)\",\"(.*?)\",(.*?),\"(.*?)\",\"(.*?)\",(.*?),(.*?),(.*?),(.*?),(.*)";
image.group=2;
image.format="<br/><center><img src='http://ichart.yahoo.com/t?s=%@'/></center>";
};

content.keys = ( title, subtitle, lastTrade, date, change, time, open, min, volume, max, image );

With "content.keys" we define which properties and in what order add up to the result view. The result view will be HTML content.

The complete example will enable a slide show about stock quotes from the Yahoo finance service. It also integrates charts. You can copy and paste this configuration to the WebSlideShow application.