Donnerstag, August 31, 2006

Hightech-Strategie für Deutschland

Wußten Sie, dass die deutsche Branche für Informations- und Kommunikationstechnologien (IKT) rund 750.000 Menschen beschäftigt und der Markt für IKT in Deutschland ca. 134 Milliarden Euro beträgt? Wußten Sie, dass mehr als jeder zweite Halbleiter aus Europa "Made in Germany" ist? Über 90% aller Prozessoren arbeiten nicht in einem PC, sondern in einem sogenannten "eingebetteten System" -- interessant, nicht wahr? (Seien Sie sicher, da läuft kaum Java oder C# drauf ;-) Ach, schon gewußt, wie bedeutsam simulierte Realitäten, Grid Computing und das Internet der Dinge sind?

All diese Informationen habe ich aus der gestern (Mittwoch, 30. August 2006) vom Bundesministerium für Bildung und Forschung (BMBF) veröffentlichten "Hightech-Strategie für Deutschland" (wählen Sie die Langfassung, auch hier zu beziehen), siehe S. 54 ff. Ich finde, da lohnt es sich hineinzuschauen.

Dienstag, August 29, 2006

Netze spannen mit Design by Contract

Was verbirgt sich hinter diesem Methodenaufruf?

method float squareRoot(float: number)

Eine Methode namens "squareRoot" (Quadratwurzel), die zu ihrem Aufruf eine Fließkommazahl "number" erwartet und eine Fließkommazahl zurückgibt. Es ist unschwer zu erraten, was die Methode tut. Sie berechnet die Wurzel zu einer Zahl. Sicher?

Die Vermutung, was die Methode macht, begründet sich einzig auf der Namensgebung. Namen sind äußerst wichtig -- nicht nur beim Programmieren. Ein Name löst bei uns Menschen eine Menge aus. Wir verbinden mit Namen Erfahrungswerte, ordnen ihnen Bedeutung (Semantik) zu etc. Allerdings klären Namen nicht unbedingt alles ab. Akzeptiert die Methode auch negative Zahlen als Eingabe? Was passiert dann? Liefert die Methode nur die positive Lösung zu einer Wurzel oder auch die negative Lösung? (Die Wurzel aus 4 ist 2, aber auch -2 ist ein gültiges Ergebnis: -2 mal -2 = 4.)

Es gibt Techniken, Methoden wesentlich präziser zu spezifizieren als rein über die Typen, wie das z.B. bei Java, C# und vielen anderen objektorientierten Sprachen der Fall ist. Mit sogenannten Vor- und Nachbedingungen, pre-conditions und post-conditions läßt sich obiges Beispiel genauer fassen:

method float squareRoot(float: number):
pre: number >= 0
post: result >= 0 and result * result == number

Die Methode wird detailliert über die Vorbedingung, die angibt, was die Methode bei ihrem Aufruf vom Aufrufenden erwartet: "Gibst Du mir eine Fließkommazahl, die positiv ist, dann garantiere ich Dir die Einhaltung der Nachbedingung." Die Variable "result" ist vordefiniert und veweist auf den Rückgabewert der Methode, das Ergebnis. Die Methode garantiert über die Nachbedingung, dass das Ergebnis größer Null ist und mit sich selbst multipliziert gleich "number" ist.

Jetzt ist zweifelsfrei geklärt, unter welchen Bedingungen die Methode arbeitet und was sie zusichert bzw. garantiert. Dabei bleibt völlig offen, wie die Methode programmiert ist und wie sie den Wurzelwert ermittelt.

Diese Art der Spezifikation einer Methode hat einen Namen und ist als Design by Contract (DbC) bekannt; sie geht auf Betrand Meyer zurück und findet Verwendung in der von ihm entwickelten Programmiersprache Eiffel.

Leider wird DbC im Software Engineering noch viel zu wenig verwendet. Dabei ist es eine so wichtige, klarstellende und leistungsfähige Technik. Interfaces werden ähnlich schwach wie die Methode ganz oben definiert. Sie kennen das bestimmt von Java, C# oder einer anderen Programmiersprache. Die reinen Typ-Angaben spannen zwar ein Netz, innerhalb dessen die Software läuft -- und ein Compiler prüft, ob das Netz aus Typangaben auch sauber gespannt ist. Aber die Netzmaschen sind zu groß. Es können noch viele Fehlannahmen und Fehler durch das Netz fallen.

Design by Contract erlaubt es Ihnen, das Netz so engmaschig zu spannen, wie es Ihnen sinnvoll erscheint. Vielleicht hätte es bei der obigen Postcondition genügt, einzig ein positives Ergebnis zuzusichern. Man könnte das Netz aber auch engmaschiger spannen und die Genauigkeit des Ergebnisses spezifizieren (was bei endlicher Fließkomma-Arithmetik notwendig ist).

Freitag, August 25, 2006

Fuzzing

In der aktuellen c't 18/2006 wird das Fuzzing vorgestellt (Christiane Rütten: Datensalat -- Schwachstellensuche mit Fuzzing ). Das Fuzzing hat nichts mit Fuzzy-Logik zu tun. Gemeint ist eine weitgehend automatisierte Suche nach Programmfehlern. Das Fehlverhalten eines Programms versucht das Fuzzing zu provozieren durch die Generierung zufälliger Eingabewerte bis hin zur gezielten Mutation bekannter, gültiger Eingabewerte. Die Grundidee ist zwar nicht neu, aber das Fuzzing scheint erst jetzt zur Blüte zu kommen. Mit dieser Technik sind in jüngster Zeit viele Schwachstellen in allen gängigen Web-Browserns gefunden worden.

Das Fuzzing ist geeignet für Kommunikationsprotokolle jeglicher Art und natürlich auch für Datenformate. Nach dem Lesen des c't-Artikels bekomme ich geradezu Lust, es einmal selber zu probieren. Es gibt so viele Protokolle und Implementierungen, da dürfte ein Erfolgserlebnis nicht lange auf sich warten lassen. Es gibt auch schon fertige Tools, die man dazu nutzen kann.

Donnerstag, August 24, 2006

Defizite im Software Engineering

Dieses Paper "Defizite im Software Engineering" von Siegfried Wendt bringt es brillant auf den Punkt, wenn er von Präsenzwissen und der Anschauungssemantik spricht, Abstraktion von Vergröberung unterscheidet, das Problem der Arbeitsteilung beleuchtet und Ausbildungsdefizite im Software Engineering aufzeigt. So klar hat mir das noch keiner vor Augen geführt.

Der Artikel ist erschienen in Informatik-Spektrum 16/1 (1993): 34 - 38. Heidelberg: Springer, siehe hier. Siegfried Wendt ist emeritierter Professor; er war der Gründungsrektor des Hasso-Plattner-Instituts in Potsdam.

Wie alt ist die Informatik?

Wie alt ist die Informatik? 60 Jahre? 70 Jahre? 80 Jahre? 1941 baute Konrad Zuse die Z3, den wohl ersten funktionstüchtigen Computer. Zuvor entstehen in den 1930er Jahren für die Informatik so grundlegende Arbeiten wie etwa die von Alan Turing und Alonzo Church. Es scheint also hinzukommen mit den 70, 80 Jahren. So alt ist das, was wir heute als Informatik bezeichnen.

Die Prinzipien der Datenspeicherung und der Datenverarbeitung sind allerdings viel älter, sehr viel älter -- 3.5 Milliarden Jahre. Vor so langer Zeit kehrte genug Ruhe auf dem Planeten Erde ein. Das Leben konnte entstehen und gleich zu Beginn schuf die Evolution einen Code, der die Baupläne des Lebens speicherte. Wir nennen das heute den genetischen Code. Die ganzen biochemischen Prozesse, die diesen Code zu lesen verstehen und zur Produktion von Aminosäuren verwenden, sind im Grunde nichts anderes als eine biochemische Datenverarbeitungsanlage, ein Computer.

Der Code steckt ausnahmslos in jeder unserer Zellen. In einer Hautzelle ebenso wie in einer Nervenzelle. Der Mensch dürfte aus etwa 10 Trillionen Zellen bestehen (so zu lesen bei Bill Bryson: Eine kurze Geschichte von fast allem, Goldmann, 2005, S. 382) -- eine unvorstellbar große Zahl. In jeder Zelle speichert die DNA den genetischen Code. Etwas mehr als 3 Milliarden Informationseinheiten werden durch mehrere DNA-Stränge in Form von 46 Chromosomen gespeichert -- in jeder Zelle! Jede Informationseinheit wird durch 2 Bit codiert. Das gesamte menschliche Genom ließe sich also mühelos auf einem modernen 8 GBit-Stick abspeichern. Das wir davon 10 Trillionen mit uns herumtragen ist eigentlich Wahnsinn.

Die Informatik ist in meinen Augen also ziemlich alt -- steinalt. Über den genetischen Code gibt es noch interessantes zu berichten. Dazu einmal später mehr.

[Update: Die 10 Trillionen Zellen, aus denen ein Mensch bestehen soll, haben mir keine Ruhe gelassen -- die Zahl schien mir einfach zu hoch. Eine kurze Recherche hat an den Tag gebracht, dass es 10-100 Billionen sind (siehe z.B. der "Mensch in Zahlen"). Immer noch fürchertlich viele, aber das ist schon plausibler. Die Trillion ist ein typischer Übersetzungsfehler.]

JavaScript Port-Scanning

So kann man sich irren. Bislang hielt ich JavaScript für ziemlich harmlos. Der in einer Webseite eingebundene JavaScript-Code wird im Browser clientseitig ausgeführt und ermöglicht eindrucksvolle Effekte, wie es neuerdings AJAX-Applikationen demonstrieren. JavaScript bleibt dabei gewissermassen im Gefängnis der Ausführungsumgebung des Browsers eingesperrt. Schaden kann JavaScript dabei nicht anrichten. JavaScript hat z.B. keinen Zugriff auf das Dateisystem.

Aber mit JavaScript kann man dennoch durch die Gitterstäbe des Browsergefängnisses spähen! Und das sogar ziemlich weit. Es ist möglich Port-Scans durchzuführen und das Rechnernetz eines ahnungslosen Surfers auszuspähen. Die verwendete Technik dahinter hat etwas bestechendes -- einmal abgesehen davon, was man damit anrichten kann. Ich wurde darauf in einer heise-Meldung aufmerksam.

Die Idee ist so einfach wie genial: Nehmen wir im ersten Schritt die Suche nach ausspähbaren Zielen. Das Image-Objekt in JavaScript kennt ein Attribut "src" (für source, Quelle) , das einfach mit einer IP-Adresse des Ziels versehen wird. Damit wird versucht, ein Bild vom Ziel zu laden. Darüber läßt sich herausfinden, ob das Ziel existiert -- ein ping. Weitere Details finden Sie in dem verlinkten SPI-Paper. Es lohnt sich auch, den Code auf der Beispielseite zu studieren, insbesondere scanner3.js ist dabei von Interesse.

Mittwoch, August 23, 2006

Semacodes lesen

Es gibt Leute, die haben so schön einfache Ideen. Kennen Sie Semacodes? Das ist ein zweidimensionaler Barcode. Die Bahn benutzt z.B. diesen Code für Online-Tickets, auch die Post bedient sich der Semacodes. Ein quadratisches Feld aus lauter schwarzen und weißen Kästchen kodiert binär die Daten.

Was man für Semacodes benötigt, ist ein Lesegerät. Und hier ist irgendwann ein pfiffiger Mensch auf die Idee gekommen, da ja nun fast jeder mit einem Fotohandy herumläuft, die Kamera als Lesegerät zu nutzen. Ein Java-Programm reicht aus, das die Bildverarbeitung erledigt, was nicht ganz einfach, aber auch nicht so schwer ist ... fertig. Wenn Sie wollen, nehmen Sie das gleich zum Einstiegspunkt ins Web. So auch die Idee des Semapedia-Projekts.

Hier noch ein paar ähnliche Ideen dazu.

InformaTiCup 2006

Die GI, die Gesellschaft für Informatik e.V., schreibt dieses Jahr ihren 2. Wettbewerb für Studierende aus, den InformatTiCup. Die Aufgaben finde ich sehr reizvoll und eine schöne Herausforderung für kleine Teams.

Montag, August 21, 2006

Disclaimer -- rechtliche Hinweise

[Anmerkung: Wenn Sie diesen Eintrag z.B. über einen Feed erhalten, so ignorieren Sie ihn bitte. Ich habe mich entschlossen, den Disclaimer als normalen Blog-Eintrag einzustellen, da das Blogging-System von Google zur Zeit keine wirklich praktische Möglichkeit bietet, umfangreiche rechtliche Hinweise geeignet zu positionieren.]

1. Haftungsbeschränkung

Inhalte dieser Website

Der Anbieter übernimmt keine Gewähr für die Richtigkeit, Vollständigkeit und Aktualität der bereitgestellten Inhalte. Die Nutzung der Inhalte der Website erfolgt auf eigene Gefahr des Nutzers.

Externe Links

Diese Website enthält Verknüpfungen zu Websites Dritter ("externe Links"). Diese Websites unterliegen der Haftung der jeweiligen Betreiber. Der Anbieter hat bei der erstmaligen Verknüpfung der externen Links die fremden Inhalte daraufhin überprüft, ob etwaige Rechtsverstöße bestehen. Zu dem Zeitpunkt waren keine Rechtsverstöße ersichtlich. Der Anbieter hat keinerlei Einfluss auf die aktuelle und zukünftige Gestaltung und auf die Inhalte der verknüpften Seiten. Das Setzen von externen Links bedeutet nicht, dass sich der Anbieter die hinter dem Verweis oder Link liegenden Inhalte zu Eigen macht. Eine ständige Kontrolle dieser externen Links ist für den Anbieter ohne konkrete Hinweise auf Rechtsverstöße nicht zumutbar. Bei Kenntnis von Rechtsverstößen werden jedoch derartige externe Links unverzüglich gelöscht.

Kein Vertragsverhältnis

Mit der Nutzung des Blogs des Anbieters kommt keinerlei Vertragsverhältnis zwischen dem Nutzer und dem Anbieter zustande. Insofern ergeben sich auch keinerlei vertragliche oder quasivertragliche Ansprüche gegen den Anbieter.

2. Urheberrecht

Die auf dieser Website veröffentlichten Inhalte unterliegen dem deutschen Urheberrecht. Jede vom deutschen Urheberrecht nicht zugelassene Verwertung bedarf der vorherigen schriftlichen Zustimmung des Anbieters oder jeweiligen Rechteinhabers. Dies gilt insbesondere für Vervielfältigung, Bearbeitung, Übersetzung, Einspeicherung, Verarbeitung bzw. Wiedergabe von Inhalten in Datenbanken oder anderen elektronischen Medien und Systemen. Inhalte und Rechte Dritter sind dabei als solche gekennzeichnet. Die unerlaubte Vervielfältigung oder Weitergabe einzelner Inhalte oder kompletter Seiten ist nicht gestattet und strafbar. Lediglich die Herstellung von Kopien und Downloads für den persönlichen, privaten und nicht kommerziellen Gebrauch ist erlaubt.

Links zur Website des Anbieters sind jederzeit willkommen und bedürfen keiner Zustimmung durch den Anbieter der Website. Die Darstellung dieser Website in fremden Frames ist nur mit Erlaubnis zulässig.

3. Datenschutz

Durch den Besuch der Website des Anbieters können Informationen über den Zugriff (Datum, Uhrzeit, betrachtete Seite) auf dem Server gespeichert werden. Diese Daten gehören nicht zu den personenbezogenen Daten, sondern sind anonymisiert. Sie werden
ausschließlich zu statistischen Zwecken ausgewertet. Eine Weitergabe an Dritte, zu kommerziellen oder nichtkommerziellen Zwecken, findet nicht statt.

Die Verwendung der Kontaktdaten des Impressums zur gewerblichen Werbung ist ausdrücklich nicht erwünscht, es sei denn der Anbieter hatte zuvor seine schriftliche Einwilligung erteilt oder es besteht bereits eine Geschäftsbeziehung. Der Anbieter und alle auf dieser Website genannten Personen widersprechen hiermit jeder kommerziellen Verwendung und Weitergabe ihrer Daten.

4. Anwendbares Recht

Es gilt ausschließlich das maßgebliche Recht der Bundesrepublik Deutschland.

5. Besondere Nutzungsbedingungen

Soweit besondere Bedingungen für einzelne Nutzungen dieser Website von den vorgenannten Nummern 1. bis 4. abweichen, wird an entsprechender Stelle ausdrücklich darauf hingewiesen. In diesem Falle gelten im jeweiligen Einzelfall die besonderen Nutzungsbedingungen.

Quelle: Juraforum.de - Disclaimer, Urteile, Rechtsanwälte, Gesetze & Lexikon