Aktuelle Aktivitäten

SplendiCon ist online

Consultants, insbesondere die aus der IT, träumen von einem eigenen Produkt. So auch ich. Den Kunden zeigen, was man kann. Zeigen, was gute Softwarearchitektur ist. Frei über eine Lösung sprechen können, ohne den NDA eines Kunden zu verletzen. All das ist der Vorteil eines eigenen Produkts.

SplendiCon ist ein solches Produkt. Ich habe es vorige Woche online geschaltet. Es ist ein System, mit dem Sie Ihre eigene Konferenz organisieren können. Autoren/Sprecher/faszinierende Personen einladen, Beiträge in SplendiCon hochzuladen, mit einer Kurzbeschreibung und einer Datei. Qualifizierte Experten als Reviewer für diese Beiträge gewinnen und deren Ergebnisse einsammeln. Konflikte zwischen diesen Ergebnissen erkennen und in einer Programmkonferenz lösen. Zum Schluss das Konferenzprogramm, das verabschiedet wurde, downloaden.

Es hat Freude gemacht, dieses System in Groovy auf Basis von Grails zu entwickeln. Es läuft auf Tomcat, davor übernimmt Apache 2 die Rolle des Reverse Proxy, managt die SSL-Verbindungen und zeichnet die Webzugriffe im Logbuch auf. MySQL ist die verlässliche Datenbank im Backend. Linux als bewährtes Serversystem werkelt oberhalb der Silizium-Ebene und macht die Kraft der AMD-Prozessoren zugreifbar. SplendiCon spricht mit Paypal, dem Bezahldienst, sobald jemand eine Lizenz für eine Konferenz kauft.

Das Ganze performt sehr schön – ich bin gespannt, wie es weitergeht, sobald die Userzahlen steigen.

SplendiCon wird unterstützt von einem User Forum, in dem die Benutzer Fragen stellen und Antworten bekommen. Auch ein Bugtracker ist online, er nimmt Fehlermeldungen und neue Anforderungen auf.

Ich lade alle, die sich mit der Organisation von Konferenzen befassen, herzlich auf die SplendiCon-Plattform ein. Surfen Sie vorbei: http://www.splendicon.net oder melden Sie sich auf Twitter: @splendicon .

Grails Paypal Plugin V0.4 released

Today, I released the Grails Paypal Plugin again, the new release number: V0.4.

New features:

  • The plugin now supports purchases with multiple items (using whatever shopping cart you like). Thanks to Matt Stine for the code!
  • The plugin now records the information about the buyer that is supplied by Paypal after each transaction. This information includes name, address and email address, for example.

Bugs fixed:

  • In some rare situations when an Apache reverse proxy was running as a front end for the Tomcat engine, the plugin could not redirect back to the original URI in case of an invalid payment. I replaced the URI by an absolute URL, now it works. Users of the plugin: Please change the parameter originalURI to originalURL and supply an absolute URL when you use the Paypal button tag, like this:
<paypal:button
    ...
    originalURL="${createLink(absolute: true, controller: controller, action: action, params: params)}"
/>

For users of Paypal Plugin V0.3: The schema has changed, the database needs to be migrated!

You can find the plugin homepage here.

Grails Paypal plugin 0.3 released

The Grails plugins project has accepted me as a committer. I am working on the Paypal plugin for Grails because I need it for a production site.

Today, I released V0.3 of the Paypal plugin. You can install it as usual with

  • grails install-plugin paypal

A description of the plugin is available at:

The main changes in release 0.3:
Bugfix:

  • The plugin now gives a proper response to Paypal when Paypal sends an IPN. Before, the plugin did not send a response so that Paypal repeated the IPN message several times.

New feature:

  • Analogous to the parameters ‘returnController’ and ’returnAction’, we now have ‘cancelController’ and ‘cancelAction’. You can specify a controller and an action to process the cancellation of a payment.

More changes are on the way. Matt Stine has written code that allows you to purchase an entire shopping cart full of items instead of a single item as the plugin can do today. The new code is still under test.

Cheers,
Matthias

Neuer Vortrag auf den OMG Information Days

Auf den OMG Information Days in Düsseldorf, Darmstadt und München halte ich einen neuen Vortrag, der das innige Verhältnis zwischen Anforderungen, Architektur und Projektvertrag beleuchtet. Wie müssen Anforderungen gemacht sein, um zur Basis “guter” Software-Architektur zu werden? Und wie können gut gemanagte Anforderungen Grundlage von Projektverträgen werden?

Ich freue mich darauf, Sie am 30.6., 1.7 und 2.7. in diesem Vortrag zu sehen und mit Ihnen innovative Ideen zu diskutieren!

Mehr Info dazu finden Sie bei SIGS DATACOM.

Grails mit jQuery ist cool

Webanwendungen mit Grails im Backend ergänzen sich ideal mit jQuery im Frontend. Wirklich cool, was man an clientseitigen Effekten im Browser so erreichen kann, wenn man ein gutes JavaScript-Framework wie jQuery einsetzt. Noch eine Prise CSS-Magie hinzufügen, und man fühlt sich beim Programmieren wie Harry Potter, als er ausgelernt hatte. Webanwendungen machen wieder Spaß. Ich bin begeistert!

Filters in Grails

Nur, damit ich es selbst im Kopf behalte… die Filterkette in Grails ist ja richtig kompliziert! Sie läuft in folgender Reihenfolge ab:

  1. Servlet Filter before chain.doFilter() (Acegi runs here)
  2. GrailsDispatcherServlet.doDispatch() starts
  3. Spring MVC Interceptors preHandle() (OSIVI opens session)
  4. Grails Filters “before” closure
  5. Controller beforeInterceptor
  6. Controller action
  7. Controller afterInterceptor
  8. Grails Filters “after” closure
  9. Spring MVC Interceptors postHandle
  10. View rendering
  11. Grails Filters “afterView” closure
  12. Spring MVC Interceptors afterCompletion() (OSIVI closes session)
  13. Grails DispatcherServlet.doDispatch() ends
  14. Servlet Filter after chain.doFilter() (Sitemesh runs here)

Uff!

I18N-Problem in Grails

Wenn man eine mehrsprachenfähige Webanwendung erstellen will, unterstützt Grails recht gut dabei. Man legt eine messages.properties-Datei (ein Message-Bundle) pro Sprache an und schreibt dort (wie in Java üblich) die Übersetzung von Schlüssel auf Text, so wie es auf der Grails-Website beschrieben ist. Die GSP-Seiten enthalten <g:message>-Tags zur Übersetzung.

Leider gab es bei mir ein Problem: Ich habe eine Grails-Anwendung mit einem deutschen und einem Default-Bundle, das englische Texte enthält und immer dann zum Zuge kommen soll, wenn die Sprache des Browser-Clients eben nicht Deutsch ist. Also:

  • messages_de.properties für Deutsch
  • messages.properties für alle anderen Sprachen

Ich stellte meinen Browser auf Deutsch ein – alles wunderbar, die deutschen Texte kamen einwandfrei. Ich stellte den Browser auf Englisch ein – Enttäuschung: es kamen immer noch deutsche Texte!

Nach einigem Suchen im Quellcode von Grails (ValidationTagLib.groovy) fand ich heraus, dass für die Übersetzung ein Objekt vom Typ ReloadableResourceBundleMessageSource aus dem Spring-Framework verantwortlich ist. Dieses hat eine Property fallbackToSystemLocale, die auf true oder false stehen kann. Sie steht standardmäßig auf true, das heißt, wenn kein Text für das eingestellte Locale gefunden wird, wird nicht etwa der Text aus dem Default-Bundle genommen, sondern noch einmal in demjenigen Message-Bundle gesucht, das dem “system locale” entspricht. Meine Servermaschine läuft auch auf Deutsch, so dass nochmals auf die Texte in message_de.properties zugegriffen wurde.

Abhilfe:

Jetzt war klar, dass diese Property während der Initialisierung auf false gesetzt werden muss. Mit folgenden Zeilen in Boostrap.groovy war der Fehler behoben:

import org.codehaus.groovy.grails.commons.ApplicationAttributes

def init = { servletContext ->
    def ctx = servletContext.getAttribute(ApplicationAttributes.APPLICATION_CONTEXT)
    def messageSource = ctx.getBean("messageSource")
    messageSource.fallbackToSystemLocale = false
}

Wenn jetzt ein Request mit englischem Locale eintrifft, wird auf messages.properties zugegriffen, das ergibt das gewünschte Verhalten.

Upgrade auf Wordpress 2.7

Die Blogsoftware habe ich jetzt auf Wordpress 2.7 aktualisiert. Die Benutzungsoberfläche ist deutlich verbessert worden, ein paar Texte sind zwar nicht deutsch lokalisiert worden, doch das macht nichts.

VHS auf bilinguale DVD

Zur Zeit digitalisiere ich alte VHS-Videokassetten auf DVDs, sofern es sie nicht als fertige DVD-Titel zu kaufen gibt.

Heute hatte ich einen alten Film in Zweikanalton, der nach dem Digitalisieren (mit EyeTV) in Stereo mit zwei Sprachen wiedergegeben wurde (links Englisch, rechts Deutsch). Wenn ich diesen ohne Zögern auf DVD gebrannt hätte, würde die Zweisprachigkeit beim anschließenden Anschauen der DVD etwas gestört haben.

Also habe ich in EyeTV zunächst einmal Bild und Ton getrennt (demuxing im Menü Ablage, Exportieren, Format = MPEG Elementary Streams). Es ergaben sich eine *.mpv (Video) und eine *.mpa (Audio) Datei.

Die *.mpa Datei habe ich dann mit dem Audio-Editor Audacity in zwei Spuren geteilt, dann jeweils eine gelöscht und die andere als Mono-Audio-Datei im WAV-Format exportiert. Dabei den Pegel der englischen Spur noch etwas angehoben, denn er war geringer als der der deutschen Spur.

Die beiden WAV-Dateien habe ich dann mit ffmpegX nach Dolby Digital (*.ac3) konvertiert, mit 228 kBit pro Sekunde, um das Audioformat zu benutzen, das die Mehrzahl der DVD-Player (so sagt man im Netz) abspielen können. Danach konnte ich die Videodatei (*.mpv) wieder mit den beiden Dolby-Audio-Dateien “muxen”, ebenfalls mit ffmpegX. Das Ergebnis war eine neue MPEG-Datei, diesmal jedoch nicht mit einer Stereo-Audio-Spur, sondern mit zwei Dolby-Mono-Spuren.

Schließlich habe ich Windows XP unter Parallels hochgestartet und dort das Programm DVDFlick gestartet. Die MPEG-Datei habe ich importiert und bei jeder Audio-Spur separat angegeben, in welcher Sprache sie aufgenommen ist (Englisch, Deutsch). Jetzt am DVD-Anfang noch ein Menü hinzugeben, das die Auswahl der Sprache erlaubt, danach alles als ISO-Image generieren lassen, fertig ist die bilinguale DVD!

DVDFlick erzeugt am Anfang der DVD ein Menü, das noch wenig schön ist, doch damit kann ich leben. Ich habe sonst keinen freien DVD-Editor gefunden, der es erlaubt, die Sprache der Audiospuren festzulegen. Überhaupt ist DVD-Authoring anscheinend eine durchaus nicht-triviale Aufgabe, wie man an der großen Anzahl von kleinen Tools für diese Aufgabe erkennen kann.

Musik auf dem Mac

Heute bin ich in Urlaub, zu Hause. Zeit für Dinge, die schon lange liegen geblieben sind, wie das Musikmachen zum Beispiel. House of the Rising Sun lässt sich mit ein wenig Experimentieren in einem Tag zusammenstellen. Über die internen Lautsprecher des Mac klingt das Ganze etwas dünn, doch über ein Interface wie das Edirol UA-20 und ein optisches Kabel bringt die Hifi-Anlage ein recht anhörbares Ergebnis:

House of the Rising Sun