Mittwoch, 14. April 2010

Der Fluch der Abstraktion

Ich gebe zu, ich bin ein Fan von Techniken zur Komplexitätsbeherrschung. Das liegt wohl auch daran, dass ich sehr viel mit sehr komplexen Systemen zu tun habe und ständig auf der Suche bin, wie diese zu steuern sind. Allerdings fällt mir auch immer wieder auf, dass diese Techniken so ins Extreme verzerrt werden, dass sie genau das Gegenteil bewirken: einen starken Anstieg der Komplexität in jeder Beziehung.


Im Informatikstudium bekommt man Abstraktion beigebracht. Man lernt, große Dinge in seine Bestandteile aufzulösen und dann einzeln anzugehen. Das beginnt mit Trivialem wie Quicksort und endet bei der Model Driven Architecture. Und das ist auch gut so. Die Abstraktion ist ganz klar eines der wichtigsten Werkzeuge der modernen Informatik und der modernen Systementwicklung. Was einem allerdings nicht beigebracht wird, ist Maß damit zu halten.


Im Seminarraum meiner damaligen Arbeitsgruppe hing ein handgeschriebenes und ausgeblichenes Schild. Auf dem Stand “Fünf Stunden Perl programmieren ersetzt eine Stunde Nachdenken”. Was zunächst wie die scherzhafte Kritik an einer Programmiersprache aussieht ist bei genauerem Hinsehen viel mehr: es ist die Kritik an einer Verselbstständigung der Abstraktion. Und genau da liegt eine große Schwäche bei vielen Leuten, die eine systematische Ausbildung der Informatik hinter sich haben: die Technologie verkommt zum Selbstzweck. Wer hat nicht schon einmal Quellcode gesehen, der sich in endlosen Klassenhierarchien vererbt oder Datenmodelle, die jedes ach so kleine Datenpäckchen noch externalisieren und ein an sich einfache fachliche Probleme zu Datenmodellen mit dutzenden Entitäten aufblähen?


Fragt man dann nach, warum die Modelle denn so sind wie sie sind, bekommt man meistens “Erweiterbarkeit” an den Kopf geworfen. Oder “Änderbarkeit”. Oder “Vereinfachung”. Spätestens hier wird dann aber auch schon durch das reine Nachfragen selbst dem abstraktesten Architekten klar, dass etwas schief läuft. Diese “Verkomplizierung im Namen der Vereinfachung” oder auch “spekulative Verallgemeinerung” ist eine sehr verbreitete Krankheit in vielen vielen Softwaresystemen. Sie führt zu sehr schwer zu wartenden Quellcodes und deutlichen Mehrkosten bei jeder Art von Veränderung und Erweiterung. Damit erreicht sie dann genau das Gegenteil von dem, was eigentlich beabsichtigt war – und das ist das Tragische daran.


Allerdings befällt dieses Problem nicht nur Software an sich, sondern auch IT-Standards oder auch Entwicklungsprozesse. Dieses “Overengineering” kann man beispielsweise sehr gut bei den WS-*-Standards wie SOAP, WSDL oder auch BPEL beobachten. WSDL ist da ein sehr gutes Beispiel: prinzipiell lässt sich damit jede Art von Schnittstelle auf Basis jeder Art von Technologie beschreiben. Aber wird das auch eingesetzt? Mir ist es nicht gelungen auch nur einen einzigen Fall zu finden, in dem WSDL nicht zur Beschreibung von SOAP-Web-Services auf Basis von HTTP oder SMTP zum Einsatz kam. Die beim Design von WSDL berücksichtigte Unabhängigkeit von jeder Art von Dritttechnologie wird überhaupt nicht genutzt! Allerdings hat sie WSDL sehr viel komplexer gemacht und damit schwerer einzusetzen und damit im Endeffekt teuerer. Dass man bei einer so innovativen Technologie wie Web-Services damit quasi das gesamte Konzept auf die Kippe stellt nur weil man die “ultimativ allgemeine” Lösung finden möchte ist ein Nebeneffekt. Und dass dieser tatsächlich zuschlagen und einen gesamten Standard ins Abseits katapultieren kann, ist am Besipiel von UDDI sehr schön zu beobachten.


Aus meiner Sicht ist ein guter Entwickler und ein guter Architekt nicht nur jemand, der Abstrahieren kann, sondern auch jemand, der die Grenzen der Abstraktion erkennt. Er muss in der Lage sein, fachliche Bedürfnisse gegenüber technischen Möglichkeiten abzuwägen und die “richtige” Lösung zu finden – nicht die technisch perfekteste, sondern die technisch und fachlich eleganteste. Einfach die Lösung, die KISS ist.

Dienstag, 5. Januar 2010

Qualitätssicherung in Mission-Critical-Systemen?

Einige Geldautomaten oder deren Backendsysteme haben einen Jahr-2010-Bug. Das Problem scheint so schwerwiegend zu sein, dass es eine größere Medienwelle ausgelöst hat.


Dabei verwundert mich ein wenig, dass ein Problem dieses Kalibers scheinbar in keinem vorherigen QS-Verfahren aufgefallen ist was mich wiederum stark an an den QS-Prozessen der Bankenwirtschaft zweifeln lässt. Bei derlei Mission-Critical-Systemen erwarte ich eine lückenlose QS, die wirksam verhindert, dass in Systemen dieses Kalibers solche schweren Fehler auftreten. Zumindest nicht im Produktivbetrieb.


Noch seltsamer ist allerdings, dass “das Problem” am 1.1. aufgetreten und bereits am 4.1. als “gelöst” bezeichnet wurde. Das bedeutet für mich, dass die “Lösung”, die laut Spiegel in einem “Update der Software der Automaten und Händlerterminals” bestand, wohl kaum durch eine vernünftige QS gelaufen sein kann. Denn abseits jeder Automatisierung und Professionalisierung der QS-Prozesse: eine korrekte QS benötigt Zeit und ich mutmaße, dass es sich hier um kein kleines System handelt, das in wenigen Stunden komplett auf Seiteneffekte abgeklopft werden kann – zumal sich ja bereits gezeigt hat, dass die QS-Prozesse sowieso sichtbare Probleme haben.


Im Schluss bedeutet dass, dass vermutlich eine nicht korrekt getestete Software durch eine neuere Version nicht korrekt getesteter Software ausgetauscht wurde und wir uns alle auf das nächste Problem freuen können.

Mittwoch, 23. Dezember 2009

1000 echte Fans

Einen sehr schönen Artikel über Marketing im realen 21. Jahrhundert abseits von IP-Trollen und Copyright-Nazis hat Kevin Kelly da geschrieben. Auch wenn fundable.com wegen Differenzen zwischen den Gründern mittlerweile geschlossen ist, zeigt der Text doch Wege auf, wie Künstler (und sicherlich auch andere Berufsgruppen) mit dem Netz leben, agieren und profitieren können. Sehr nett finde ich es dabei, dass es zentral um die Frage geht, von was ein Künstler denn nun leben soll. Und darum geht es ja der Content-Industrie ja angeblich auch ganz prinzipiell. Allerdings gibt Kelly auch eine Antwort darauf, die nicht aus Konfrontation sondern aus Kooperation schöpft.

Freitag, 9. Oktober 2009

Dingoo A320

Neues von der Gadget-Front: ein chinesischer Game/Video/MP3-Player. Der Dingoo A320 emuliert alle gängigen Classic-Konsolen, kann MP3s abspielen und Videos darstellen. Und alles noch auf dem TV-Out ausgeben. Nett.





Mal abwarten ob noch ein paar bessere Emulatoren dafür erscheinen.
Fireproof buy
A Kiss Before Dying movie download Looking for Comedy in the Muslim World movie

Mittwoch, 26. August 2009

WS-Security and BinarySecurityToken

Just to get you up and running: if your Java based SOAP request fails with something like "certificate missing", first inspect your generated SOAP code. If it contains something like this:

<ds:KeyInfo Id="KeyId-F26B331D23680CE7A712512821313252">
<wsse:SecurityTokenReference xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="STRId-F26B331D23680CE7A712512821313343">
<ds:X509Data>
...

than you have to request a "direct reference" to your certificate, which will result in a binarySecurityToken element in the SOAP header containing your encoded certificate:

<wsse:Security 
xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" 
soap:mustUnderstand="1">
<wsse:BinarySecurityToken 
xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" ... 

You can enable the direct reference by adding a parameter to the WSS4J interceptor:

outProps.put(WSHandlerConstants.ACTION, WSHandlerConstants.TIMESTAMP + " " + WSHandlerConstants.SIGNATURE); 
outProps.put(WSHandlerConstants.USER, "my_amazon_cert"); 
outProps.put(WSHandlerConstants.PW_CALLBACK_CLASS, ClientCallbackHandler.class.getName()); 
outProps.put(WSHandlerConstants.SIG_PROP_FILE, "amazonsecurity.properties");
outProps.put(WSHandlerConstants.SIG_KEY_ID, "DirectReference");

The reason for all of this is that some services can't work with referenced certificates. Amazon Product Advertising API for example. This has caused some hours of research to find out. Reasoning from my Google research, it seems that only a few are actually using WS-Security this way. My personal opinion: most security APIs are completely over engineered and utter bullshit. Someone should tell those security guys how to design proper APIs whithout cluttering it with hundreds of configuration options, preferences, diverse and esoteric configuration files and the like. This really annoys me. And it is not a problem of the Java security APIs, but a language crossing problem.
I mean: I, as an application designer, just don't want to configure every tiny bit of security part when using the security layer. There should be some "best practice" - simple and secure - way to use security. It should be transparent and unintrusive to my business code.
Instead of this, todays security APIs are complicated, please-configure-every-tiny-bit beasts in the notion of "if you want security, then go and study encryption algorithms and encoding formats first, you bastard". It feels like the WS-* standards before WS-I came. Or EJB before EJB3.
And, I think this is a large security issue. As the application designers are forced to integrate complicated security APIs without the time (or notion) to fully understand them, there is a lot of possible pitfalls that can potentially ruin your security. So you are also forced to be a security expert understanding all the different things going on in the security layer. I don't want this. I want to focus on business code. Abstraction and clear responsibility is the base of any large system and needed to conquer complexity. But instead, looking at current Security APIs is like looking at the stone age of software engineering.

Sonntag, 16. August 2009

Dahergelaufene Würstchen

So manchmal frage ich mich wirklich, was manche Leute so denken. Diese ganzen dahergelaufenen Würstchen, die in ihrer eigenen Welt leben und glauben, dass sie den Laden regieren. Telepolis berichtet über so einen armseligen Resozialisierungsfall: Ulrich Hoeneß fordert im Interview mit der Wirtschaftswoche eine GEZ-Extragebühr für die notleidenden Fußballvereine. Peter Mühlbauer dazu:
Und Aktiengesellschaften, die mit schöner Regelmäßigkeit ein- oder zweimal die Woche so viele Gewalttäter zu rituellen Schlägereien und Sachbeschädigungsorgien anlocken, dass sich die Polizei an solchen Tagen kaum mehr um etwas anderes kümmern kann, werden nicht einmal zur Finanzierung der Wochenendzuschläge herangezogen, geschweige denn für die auf den Steuerzahler abgewälzten Kosten, welche ihr Geschäftsmodell tatsächlich verursacht. Dazu zählen auch zahlreiche von angeblich klammen Kommunen gebaute oder geförderte Sportstätten und U-Bahnen, welche Rotten von Krawallmachern bequem zu ihren Tatorten kutschieren.

Es war wohl wieder mal Zeit für die tägliche Portion Wahnsinn. бесплатно видео знаменитости порно