Andreas Höhmann’s Weblog

Just another WordPress.com weblog

Der teuerste Film aller Zeiten

Verfasst von Andreas Höhmann am Mittwoch, 1. Juli 2009

und der schlechteste dazu! Was ich mir da gestern Abend in knapp 150 Minuten ansehen durfte war so unlogisch,dumm, sinnlos, einfältig, überflüssig, belanglos, effektüberladen … wie kaum ein anderer Film den ich jemals gesehen habe. Wenn ich mir allerdings die Beschreibung auf kino.de durchlese, frage ich mich welchen Film der Autor gesehen hat?!

Zum Beispiel: “Während Sam Witwicky und die Autobots noch an den Frieden glauben, hat Skorpinox die Überreste von Megatron aus den Händen des US-Militärs gestohlen und ihn wiederbelebt

Was heißt hier gestohlen? Der war doch überhaupt nicht gesichert! Im Film kommt die “geheime” Megatron-Versenk-Stelle im Atlantik durch die einfache (unbemerkte) Übernahme eines Militärsatelliten ans Licht und holter-die-polter tauchen ein paar böse Decepticons hinab und beleben ihren alten Boss mit Hilfe eines Splitters des im ersten Teil zerstörten Würfels (der erste Teil war schon so schlecht, dass ich mich an dessen Handlung NULL erinnern konnte). Unlogisch und konstruiert hoch 10. Irgs.

Oder: “Spektakel in Reinkultur: Die Fortsetzung des Welterfolgs bietet alle Elemente, die Blockbuster-Kino auszeichnen, im XXL-Format: Gigantische Action, gigantische Story, gigantisch viel Fun.” Waaaaaa … Story? Wo war da eine Story?

Oder: “bis hin zu einem atemberaubenden Showdown auf den Pyramiden, die real gefilmt und nicht etwa im Computer simuliert wurden.” Ähmm was wurde da real gefilmt ?!? Etwa wie eine 30 Meter hoher Roboter die Kuppe der Cheops-Pyramide abträgt um darunter eine Maschine freizulegen. Das war alles echt? WOW Krazz!

Oder: “Trotz aller pyrotechnischen Virtuosität schafft es Michael Bay dennoch, seine Charaktere zu akzentuieren, was auch deshalb gelingt, weil sich seine Hauptdarsteller Shia LaBeouf und Megan Fox seither schauspielerisch noch weiter entwickelt haben.” Die Dialoge strotzen nur so von Sinnlosigkeit, Gefühle wo? Etwa bei der parallel verlaufenden “Liebesgeschichte” zwischen Held und Heldin? Schauspielerisch weiterentwickelt … LOL … die langweiligen Zwischensequenzen (Gelaber!) hatten allerdings etwas Gutes … meine Augen/Magen konnten sich von den rasanten Renderszenen erholen.

Einziger Lichtblick war die Rolle von John Turturro, der war wirklich lustig drauf. Aber ansonst … bitte! … ich würde es ja verstehen wenn die Darsteller auch im Computer entstanden wären, aber so … OHje.

Skeptiker mögen diese Wundertüte an filmischen Elementen als Overkill empfinden” … Richtig!!!!

Ich kam mir wie in einem Werbefilm des US-Militärs vor …

Mehr bessere Filme ins Kino! :D

Veröffentlicht in Film | Verschlagwortet mit : | Leave a Comment »

Das war der 12. ICFP

Verfasst von Andreas Höhmann am Dienstag, 30. Juni 2009

Der ICFP ist ein jährlich stattfindender Programmierwettbewerb im Rahmen der International Conference on Functional Programming. Dieses Jahr hatten wir uns entschlossen am ICFP teilzunehmen. Die Aufgaben der letzten Jahre waren immer recht anspruchsvoll, wir waren sehr gespannt wie es dieses Jahr sein würde. Gerüchten zufolge sollte die etwas krumme Startzeit mit der Aufgabe zu tun haben … so war es dann auch :-)

Wir (Steffen, Kleiner und ich) trafen uns bei Steffen und warteten auf die Freigabe der Spezifikation.

Pünktlich um 20:00:16 ging es los bzw. ging es erstmal nicht los, denn der Webserver des Ausrichters war nicht mehr erreichbar … normal wenn knapp 300 Teams versuchen die Aufgabestellungen herunterzuladen. Das Problem war nach ein paar Minuten erledigt.

Nun ging es erstmal ans Lesen des 16 Seiten langen PDFs. Eine Kurzfassung:

  • es galt eine VM zu programmieren, mit Grundbefehlen wie Addition, Subtraktion, Wurzel etc.
  • auf dieser sollten herunterladbare Binardatein ladbar und ausführbar sein, ausführbar bedeutet alles geladenen Operationen nacheinander ausführen und Speicher verändern
  • die VM sollte Art Input/Ouput Schnittstelle haben mit deren Hilfe ein Satellit auf seinem Weg um die Erde gesteuert werden sollte
  • es gab insgesamt 5 Szenarien (erst 3, dann 4 und am Ende kam noch eine 5. Bonusaufgabe dazu), die unterschiedliche, jeweils immer “komplexere” Lösungen zum Thema “wie steuere ich einen Satelliten” erforderten

Die VM war detailiert beschrieben, es gab Daten und Befehle, das Binärformat musste geladen werden, die Befehle mussten ausgeführt werden usw.

Wir haben das Ganze mit Java umgesetzt.

Laut Specifikation muss die VM 32bit Operatoren und 64bit Daten halten, diese sind über einen 14bit Pointer adressiert, was eine maximale Anzahl von 16384 Einträgen ergibt. Es wird zwischen D-Operatoren (2 Paramtern) und S-Operatoren (1 Parameter) unterschieden:

Orbit VM Operation Types

Die Daten im “Orbit Executable Format” sind in 96 bit lange Frames aufgeteilt, bei gerade Frames (0, 2, 4, …) kommen erst die Daten (64 bit, double) und dann der Operationen (32 bit, int), bei ungerade Frames umgedreht:

Orbit Executable Format - Frame

Diese Frames werden durch den MemoryLoader in den Memory geladen. Dieser besteht aus zwei Listen (Operationen und Daten), einem Status-Bit, einem Output/Input Bereich:

VM Memory

Für die unterschiedlichen Operationen erzeugen wir während des Ladens konkrete Objekte die das Interfaces Instruction implementieren und entweder von DoubleInstruction oder SingleInstruction ableiten. Dadurch enthält unser Memory nach dem Laden bereits eine Liste von “ausführbaren” Objekten, die selbständig den Memory verändern können (eine Instruction kann aus dem Memory lesen bzw. in den Memory schreiben).

UML

Instruction Hierarchie

Gegen 1:00 konnten wir die Datei  “bin1.obf” laden und ausführen. Als Ergebnis sahen wir allerdings nur “0.0.0″. Hmm 3 mal 0, das konnte nix sinnvolles sein … das Problem war nach einer weiteren halben Stunde gelöst …

Um 1:26 hatten wir das erste Szenario “Hohmann” am laufen.  Mit 50000 Interationen konnten wir dann auch soviel Ausgabedaten erzeugen um in Openoffice mit einem XY-Diagramm eine KREIS zu sehen. WOW!!! Das war ein sinnvolles Ergebnis. Wir waren hell wach. Das war unser um die Erde kreisender Sputnik. Ziel war es nun via Input Steuerbefehle an den Sputnik zu senden um die einzelnen Szenarien zu erledigen.

icfp_firstimage

icfp_firstimageb

Im ersten, dem Hohmann-Szenario, ging es nun darum einen Satelliten von seiner initialen Umlaufbahn auf eine höhere Umlaufbahn zu steuern. Die Mathematik war beschrieben und musste nur noch programmiert werden, Kleiner und Steffen machten sich an die Arbeit. Ich versuchte in der Zeit eine Visualisierung mit SWT zu programmieren. Pro Szenario gab es noch 4 unterschiedliche Konfigurationen die wir bewältigten mussten. Hier ist der Anfang und das Ende von Konfiguration 1002 zu sehen. Der Sputnik bewegt sicht von der inneren zur äusseren Umlaufbahn:







Die notwendigen Steuerbefehle galt es dann in einem weiteren Binärformat abzuspeichern und auf der ICFP-Homepage einzureichen. Die zu erreichende Punktezahl hing u.a. von der verbrauchten Zeit und dem verbrauchten Sprit des Sputniks ab. 6:15 hatten wir das erste Szenario geschafft!

Nun ging es ans zweit dem “Meet and Greet” Szenario. Dort galt es einen zweiten Satelliten anzufliegen. Die Mathematik war hier schon wesentlich schwieriger. Wir versuchten unser bestes. Aber irgendwie wollte es nicht so recht klappen. Wir waren knapp davor die Aufgabe zu lösen aber irgendwie fehlten immer ein paar huntert Meter zum Zielpunkt. Und da wir nun jeder über 24  Stunden nicht geschlafen hatten, beschlossen wir es erstmal sein zu lassen :D Immerhin hatten wir eine VM programmiert und einen Sputnik auf eine höhere Umlaufbauen gebracht. Zufrieden und müde trennten wir uns. Danke nochmal an Steffen für die Bereitstellung einer angenehmen Programmierumgebung ;-)

Kleiner hat dann Sonntag noch rausgefunden, dass wir wirklich soooo knapp vor einer Lösung waren … leider hat uns die visualisierte Ausgabe getäuscht, dort waren alle Winkel umgedreht. Statt 150 Grad in die eine Richtung mussten wir in Wirklichkeit (360 – 150 = 210) in die andere :D Somit konnten wir dieses Jahr mit 8 gelösten Aufgaben  glänzen was uns den 139. Platz einbrachte.

Das 3. Szenario “Eccentric Meet and Greet” war vergleichbar mit dem zweiten, nur hier befand sich der Ziel-Satellite nicht auf einer Kreisbahn sondern auf einer Eclipse um die Erde. Im 4. Szenaria “Operation Clear Skies” galt es 11 (!) Satelliten auf unterschiedlichen Umlaufbahnen anzufliegen. Der Mond war hier auch mit dabei :D Aber diese Szenarien werden wir wohl ausserhalb des Wettbewerbs hacken.

Vielleicht  sind ja nächstes Jahr  noch ein paar mehr dabei ?! :D

Hier noch ein paar Screenshots der anderen Szenarien:




Veröffentlicht in ICFP, Java | Leave a Comment »

Today starts the 12th ICFP Contest

Verfasst von Andreas Höhmann am Freitag, 26. Juni 2009

http://icfpcontest.org/

Veröffentlicht in Uncategorized | Verschlagwortet mit : | Leave a Comment »

Clear JSF Input Components

Verfasst von Andreas Höhmann am Montag, 22. Juni 2009

Beim Implementieren einer einfachen CRUD Anwendung mit Hilfe von Richfaces Datatable und ModalPanel bin ich über ein “Problem” mit validierten (leeren) Eingabefeldern gestolpert.

Das Problem ist eigentlich kein richtiges Problem, sondern das Standardverhalten von JSF :-) Unschön wird es wenn man einen rich:modalPanel als Edit-Dialog einsetzt und diesen wiederverwendet.

Der grobe Aufbau:

  • eine DataTable zeigt eine Liste von Entities (z.B. mit Hilfe eine DAOs geladen)
  • jedes Entity hat eine eindeutige ID (z.B. PrimaryKey aus JPA)
  • pro Tabellenzeile gibt es einen “Edit”-CommandLink der eine rich:modalPanel für das Editieren eines Entity öffnet
  • vor jedem Edit muss die gewünschte Entity in einen CrudManager (Session-Scoped Bean) gelangen, aus der sich der Edit-Dialog mit Daten versorgen kann und mit dessen Hilfe die eigentliche Edit-Aktion durchgeführt wird

Nun sollen bestimmte Eingabefelder im Edit-Dialog validiert werden (z.B. mit einer @NotEmpty Annotation an den ensprechenden Properties der Entitiy-Klasse). Wenn man nun den Dialog für eine Entity mir der ID ‘1′ öffnet und eine Validierungsfehler auslöst, z.B. durch das Abschicken mit leeren Eingabefeldern, wird dieser Fehler ausgegeben … soweit so gut. Der Dialog kann dann geschlossen werden. Soll nun Entity mit der ID ‘2′ mit dem gleichen Dialog editiert werden, sind die Eingabefelder immer noch leer und nicht wie gewünscht mit den Werten aus Entity-2 gefüllt. Warum?!

Nach einer kurzen Googlesuche landete ich auf der Seite http://wiki.apache.org/myfaces/ClearInputComponents die den Effekt beschreibt. Der Grund für das Verhalten ist die Zwischenspeicherung von “SubmitedValues” in den jeweiligen UIComponents (z.B. h:inputText). Die werden den eigentlichen Modeldaten vorgezogen.

Will man nun einen immer aktuellen Edit-Dialog haben, gibt es verschiedene Möglichkeiten (siehe MyFaces). Ich habe mich für die “radikal einfache” Lösung entschieden … lösche alle Elemente innerhalb des Edit-Dialogs und lasse sie immer neu erzeugen.

Die Entity-Liste besteht aus einer rich:dataTable, pro Zeile ein a4j:commandButton:


<rich:dataTable value="#{tableManager.model}" var="dataItem">

<!-- Edit-Command Column -->
<rich:column sortable="false">
<a4j:commandButton ajaxSingle="true" limitToList="true"
reRender="foobar_editPanel"
oncomplete="Richfaces.showModalPanel('foobar_editPanel')"
 actionListener="#{crudManager.onEdit}">
 <f:attribute name="onEditClearTarget" value="foobar_editPanel"/>
 <f:setPropertyActionListener value="#{dataItem}" target="#{crudManager.currentEntity}" />
</a4j:commandButton>

<!-- more Columns ... -->
</rich:dataTable>

Der tableManager liefert die Entity-Daten, also eine Liste von Entity-Beans, jede Bean hat eine eindeutige ID. Der crudManager enthält stellt die gesamte CRUD Funktionalität zur Verfügung. Für eine Edit muss er mit einer Entity “initialisiert” werden, dies geschieht via f:setPropertyActionListener. Das reRender bewirkt, dass der Edit-Dialog aktuallisiert wird.

Der Edit-Dialog wird mit Hilfe von rich:modalPanel erzeugt (foobar_editPanel) und enthält eine Reihe von h:inputText Elementen. Diese sind wiederum an den crudManager gebunden.

Der Code für das Zurücksetzen der Inputelemente im Edit-Dialog ist ebenfalls im crudManager verborgen und sieht folgendermaßen aus:


public abstract class AbstractCrudManager {

public static final String ONEDIT_ATTRIBUTE_CLEARTARGET = "onEditClearTarget"; //$NON-NLS-1$

/**
 * Event-handler will be triggered on <tt>edit</tt>. This method is used as a
 * {@link ActionListener} and will be called before a <tt>edit-view</tt> is
 * shown. So here we can do some "initializations" for the edit-view, i.e.
 * reset input-fields.
 *
 *
 * This base implementation will call {@link #clearEditTarget(UIComponent)}.
 *
 *
 * @param aEvent
 *          is never <code>null</code>
 */
public void onEdit(final ActionEvent aEvent) {
clearEditTarget(aEvent.getComponent());
 }

/**
 * This method handle a edit-form-clear. Per default the command-button which delegates to the
 * edit-view could have a attribute {@link #ONEDIT_ATTRIBUTE_CLEARTARGET}.
 *
 * @param theSourceComponent
 *          is never <code>null</code>
 */
 protected void clearEditTarget(final UIComponent theSourceComponent) {
 final String onEditTarget = (String) theSourceComponent.getAttributes().get(ONEDIT_ATTRIBUTE_CLEARTARGET);
 if (onEditTarget == null) {
 return;
 }
 final UIComponent editTarget = FacesContext.getCurrentInstance().getViewRoot().findComponent(onEditTarget);
 if (editTarget == null) {
 return;
 }
 editTarget.getChildren().clear();
 }

...

}

Damit ist auch klar was das <f:attribute name=”onEditClearTarget” value=”#{id}_editPanel”/> bewirkt … es definiert die UI-Komponente die vor dem Öffnen des Dialogs zurückgesetzt werden soll.

Damit wird bei jedem Klick auf “Edit” ein Ajax-Request zum Server geschickt, dort wird die aktuelle Entity in den crudManager hinterlegt, es wird onEdit aufgerufen und damit der Inhalt des Edit-Dialogs gelöscht. JSF sorgt dann beim RenderResponse wieder dafür, dass alle UI Componenten korrekt erzeugt werden. Da dann alle Eingabeelement noch vollkommen “neu” sind, zeigen diese auch die Werte aus dem Modell an.

Veröffentlicht in JSF, Richfaces | Verschlagwortet mit : , , , , | Leave a Comment »

Nexus Pro verwaltet Eclipse-Repositories

Verfasst von Andreas Höhmann am Montag, 8. Juni 2009

Mit Hilfe von Nexus-Pro (Version 1.3.2) ist es möglich Eclipse-Plugin-Repositories zu verwalten.

Damit wird es möglich für ein Entwicklungsteam eine Liste von Plugin-Repositories zentral zu verwalten. Alle Entwickler stellen in ihrem Eclipse Update Manager nur noch dieses eine Repository (Nexus) ein und fertig :)

Vorteile:
- externer Netzwerktraffic wird reduziert
- Thema Sicherheit, Entwickler müssen nicht unbedingt ins Internet (Proxy etc.)
- man sieht zentral welche Plugins, in welchen Versionen verwendet werden

Kurzes Video hier: http://vimeo.com/4102464

Veröffentlicht in Eclipse, Nexus | Verschlagwortet mit : , , , | Leave a Comment »

Hibernate sql logging with values

Verfasst von Andreas Höhmann am Mittwoch, 3. Juni 2009

As you might know already, Hibernate supports logging for sql-statements. Your Spring-configuration (e.g. spring-database.xml) must contain this:


<bean id="entityManagerFactory"
 class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="persistenceUnitName" value="logging-test" />
<property name="jpaVendorAdapter">
 <bean>
<property name="showSql" value="true" />
<property name="generateDdl" value="true" />
<property name="databasePlatform" value="${jpa.hibernate.dialect}" />
 </bean>
 </property>
<property name="jpaProperties" value="hibernate.dialect=${jpa.hibernate.dialect}" />
 </bean>

With showSql=true hibernate will show you logmessages like this:

Hibernate:
   delete
   from
      SoftwareCategory_SoftwareCategory
   where
      SoftwareCategory_id=?
Hibernate:
   update
      SoftwareCategory
   set
      concurrentVersion=?,
      CATEGORY_NAME=?,
      PARENT_ID=?
   where
      id=?
      and concurrentVersion=?
Hibernate:
   insert
   into
      SoftwareCategory_SoftwareCategory
      (SoftwareCategory_id, POSITION, children_id)
   values
      (?, ?, ?)

To see the values and not the placeholders (?) you must define the loglevel trace for hibernate-types in the log4j.xml:


<category name="org.hibernate.type">
<priority value="trace" />
 </category>

Then you will see logmessages like this:

Hibernate:
   insert
   into
      SoftwareCategory_SoftwareCategory
      (SoftwareCategory_id, POSITION, children_id)
   values
      (?, ?, ?)
NullableType:151 - binding '68' to parameter: 1
NullableType:151 - binding '0' to parameter: 2
NullableType:151 - binding '69' to parameter: 3

Not bad but there is a better way for this :-)

Yesterday i found the project JDBCLogger.  They have implemented a “JDBC-Proxy” with logging support. Its Maven-ready and comes with a easy Spring-integration. So how can we use this cool stuff … it is so easy:

1. Define the JDBCLogger dependencies in the pom.xml:


<dependencies>
<dependency>
 <groupId>net.sourceforge.jdbclogger</groupId>
 <artifactId>jdbclogger-core</artifactId>
 <version>0.7-SNAPSHOT</version>
 </dependency>
 <dependency>
 <groupId>net.sourceforge.jdbclogger</groupId>
 <artifactId>jdbclogger-spring</artifactId>
 <version>0.7-SNAPSHOT</version>
 </dependency>
 </dependencies>

The informations from the installation-guide on the project-site is a little too old, so the maven-repository http://jdbclogger.sourceforge.net/m2-repo/ doesn’t exists. No problem we can build jdbclogger-core and jdbclogger-spring by ourself (read more). The simplest way to build the two artifacts is:

  • checkout from  svn
  • edit master-pom, comment out all modules, leave only core and spring active
  • run mvn clean install from root-dir

2. Change your Spring-configuration, switch showSql off and add the following bean:


<bean id="jdbcLoggerConfig"
 class="net.sourceforge.jdbclogger.spring.JdbcLoggerBeanPostProcessor">
<property name="enabled" value="true" />
<property name="dataSourceConfigurations">
	<list>
 <bean class="net.sourceforge.jdbclogger.spring.JdbcLoggerDataSourceConfiguration">
<property name="dataSourceBeanName" value="dataSource" />
<property name="driverClassNamePropertyName" value="driverClassName" />
 </bean>
 </list>
 </property>
<property name="targetDriverClassNames">
	<list>
 <value>${jpa.driver}</value>
 </list>
 </property>
 </bean>

3.  Activate logging in the log4j.xml:


<category name="net.sourceforge.jdbclogger">
<priority value="debug" />
 </category>
<category name="net.sourceforge.jdbclogger.spring">
<priority value="error" />
 </category>

Thats it :-) Now you will see logmessages like this:

JdbcLoggerDriver:65 – Wrapper ‘net.sourceforge.jdbclogger.JdbcLoggerDriver’ successfully registed for driver ‘com.mysql.jdbc.Driver’
PreparedStatementWrapper:156 – Prepared Statement : select softwareca0_.id as id0_, softwareca0_.concurrentVersion as concurre2_0_, softwareca0_.CATEGORY_NAME as CATEGORY3_0_, softwareca0_.PARENT_ID as PARENT4_0_ from SoftwareCategory softwareca0_ where softwareca0_.PARENT_ID is null
StatementWrapper:45 – Statement : delete from softwarecategory_softwareobject
PreparedStatementWrapper:156 – Prepared Statement : insert into SoftwareCategory_SoftwareCategory (SoftwareCategory_id, POSITION, children_id) values (’92′, ‘3′, ‘96′)

Veröffentlicht in Hibernate, Log4J, Maven, Spring | Verschlagwortet mit : , , , , , | Leave a Comment »

Speedup Release for Multiprojects with Maven

Verfasst von Andreas Höhmann am Dienstag, 5. Mai 2009

In huge multi-module-projects the maven-release-process might have a long running time because there is a lot of site-content to generate and to deployed (Of course this depends on the used report-plugins, i.e. javadoc, findbugs,pmd, dashboard etc.)

I noticed that the upload of the generated javadoc etc. uses a big amount of the deployment time. So how we can speedup this part of the deployment?

We can deploy the generated site in a local directory and after the successful release we can upload the whole directory to the server, i.e. zip the content and unpack on the server, or use a smb-shared-directory … then the site-upload is much faster than with site:deploy and webdav.


<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

<modelVersion>4.0.0</modelVersion>

<distributionManagement>
 <site>
 <id>site</id>
 <url>${site.distribution.url}/</url>
 </site>
<distributionManagement>
<profiles>
<profile>
 <id>release</id>
<properties>
 <site.distribution.url>file://D:/SITE-RELEASE/</site.distribution.url>
 <site.url>http://site-server/releases/</site.url>
 </properties>
 </profile>
</profiles>
<properties>
 <site.url>http://site-server/snapshots/</site.url>
 <site.distribution.url>dav:${site.url}</site.distribution.url>
</properties>

</project>

Try it :)

Veröffentlicht in Maven, Maven-Release-Plugin, Site-Plugin | Leave a Comment »

Realworld JSF Application Story

Verfasst von Andreas Höhmann am Montag, 27. April 2009

Vielleicht hatte ich es in einem früheren Posting schonmal erwähnt, ich arbeite momentan für Siemens an einem Web 2.0 Projekt und das ist jetzt fertig :D .

Los ging es November 2007 und nun konnten wir planmässig im April 2009 live gehen. Wir konnten dabei all die wunderbaren “neuen” Technologien einsetzen und ausprobieren, u.a. JSF und damit eine funktionsfähige (also den Anforderungen des Kunden voll entsprechende) und zugleich performante “Web 2.0″ Applikation bauen. Die Applikation nimmt sich dem Thema “Sicherheitstechnik” (für die Auskenner: ISO 13849-1 und IEC 62061) an.

Mal kurz zu den verwendeten “Technologien/Frameworks/Tools/Ideen”:

  • Daten ziehen wir aus einer SAP Knowledgebase (selbst gestrickt) und aus einer Datenbank via OpenJPA
  • Services/Manager sind “normale” Javaklassen (Stichwort Design-Pattern),
    als Kleber verwenden wir Spring (Stichwort Dependency Injection)
  • UI mit JBoss Richfaces (Stichwort Ajax), JSF + Facelets (Stichwort Xhtml-Template), jQuery, CSS, etc.
  • Buildsystem, Projektseiten mit Maven2
  • Continues Integration via TeamCity und Maven2
  • Tests hauptsächlich mit TestNG aber teilweise auch mit JUnit
  • Laden/Speichern von Benutzerdaten via XStream (FileupLoad via Tomahawk), das alles noch Versionskompatibel, d.h. selbsgestrickte XML-Transformationskette für DomainModell-Updates
  • PDF Reportgenerierung mit iText
  • Anbindung an Siemens “Single Sign On” System via Spring Security, Webservices

Im Rückblick kann ich sagen, dass eigentlich alles ohne größere Probleme miteinander funktioniert hat
… so soll es sein :D

https://www.automation.siemens.com/cd/safety/html_00/produkte/si_normen/tool.htm

(Für die Applikation muss man sich registrieren)

Veröffentlicht in Ajax, JSF, Maven, Richfaces, Spring, TestNG | Verschlagwortet mit : , , , , , , | Leave a Comment »

Dreister Fahrradklau in Leipzig Connewitz

Verfasst von Andreas Höhmann am Sonntag, 26. April 2009

Auweia nun hat es mich auch erwischt. In der gestrigen Nacht wurde mir von üblen Strolchen mein geliebtes Kona Mounain Bike geklaut. Ich war mir bisher eigentlich sicher, dass unser Hinterhof relativ sicher ist … Pustekuchen, verschlossene Haustür und extra starkes Fahrradschloss haben es nicht verhindern können. Der Kollege wird sich aber sicher noch die Zähne an der Spezialbefestigung der Räder ausbeisen *gg*. Na ich bin ja mal gespannt ob es nochmal irgendwo auftaucht … soviele Konas hab ich bisher noch nicht gesehen.

Ein Foto aus besseren Tagen *seufz*

Mein Bike

Sachdienliche Hinweise sind herzlich willkommen :D

Veröffentlicht in Uncategorized | Verschlagwortet mit : , , , , , | Leave a Comment »

Show Richfaces Version

Verfasst von Andreas Höhmann am Mittwoch, 4. März 2009

Richfaces provide his version in the el-variable a4j.

So put a #{a4j} in a facelets-template and you will see a version-string like this

Jboss Richfaces by richfaces.org, version v.3.3.0.GA SVN $Revision: 12244 $ $Date: 2009-01-13 05:40:53 +0200 $

Veröffentlicht in JSF, Richfaces | Verschlagwortet mit : | Leave a Comment »