Direkt zum Hauptbereich

Posts

Es werden Posts vom 2006 angezeigt.

Karl-Steinbuch-Stipendium

Wenn Sie sich in Ihrer Freizeit mit interessanten Informatik-Projekten und -Ideen befassen, haben Sie (als Student bzw. Studentin in Baden-Württemberg) schon einmal darüber nachgedacht, sich Ihr Engagement fördern zu lassen? Denken Sie doch einmal darüber nach, ob es Sinn für Sie macht, sich um ein Stipendium zu bewerben. Aktuell (und immer wieder aktuell) ist die Ausschreibung des Karl-Steinbuch-Stipendiums .

Constraint Programming

In der letzten Zeit habe ich mich ein wenig mit einer möglichen Umsetzung des UML-Reasoner beschäftigt. Um ein Gefühl für den "Artenreichtum" eines Klassendiagramms auf der Objektebene (der Instanzebene) zu bekommen, spielte ich ein wenig rum. Zwei Klassen und eine eingerichtete Assoziation bildeten meine Ausgangsbasis. Maximal fünf Instanzen zu jeder Klasse sollte es geben. Ich schrieb mir einfache Routinen, die mir aus zwei Mengen ({a1, a2, a3, ...} und {b1, b2, b3, ...}) mit je fünf Elementen alle möglichen Relationen von der einen zur anderen Menge erzeugten -- unter jeweils unterschiedlichen Annahmen. Beispielsweise kann man das Paar (a1,b1) als gleichwertig mit (a2,b2) betrachten. Schließlich geht es ja nur um den Link von einer Instanz aus der ersten Menge zu einer Instanz aus der zweiten Menge. Man kann jedoch auch anders argumentieren, wenn man Instanz-Relationen über die Zeit betrachtet. Dann kann (a1,b1) die Folge einer anderen Konstellation sein als (a2,b2) und a

Inversion of Control

Did you every try to implement an interpreter for the Scheme programming language yourself? I enjoyed it a lot -- and still enjoy it, since I haven't finished my little Scheme project yet. It is a lot of fun to implement Scheme in Scheme, but I use Python in order to make sure I understand each and every bit of the Scheme language. While a basic Scheme implementation is easy to realize, a more advanced implementation supporting so-called continuations is a nice challenge. First you have to understand the concept of continuations, which is quite a challenge in its own. Second, you need to have an idea how to make them happen in your host language. Just to give you a rough idea: In Scheme, you get a sort of read and restore access to the current state of the computational process. There is a special procedure in Scheme, which you can use anywhere in a Scheme program; the procedure is called "call with current continuation" ("call/cc" for short) -- but that'

Haskell-Kurs

Haskell ist eine moderne, funktionale Programmiersprache mit vielen interessanten Features wie z.B. Pattern Matching, Currying und Lazy Evaluation. Mark C. Chu-Carroll hat auf seinem Blog "Good Math, Bad Math" einen Haskell-Kurs begonnen, den ich jedem nur empfehlen kann, der sich für Programmiersprachen jenseits von Java, C#, PHP, Python, Ruby, Perl und anderen (also all jenen, die als imperative Sprachen bezeichnet werden) interessiert. Ich bin schon sehr gespannt darauf, wenn Mark uns Monaden erklären wird und was für ihn die "Leim"-Qualität von Haskell ausmacht.

Ajax und Usability

AJAX (Asynchronous JavaScript + XML) ist im Grunde nichts anderes als eine Agenten-Technologie: Sie delegieren einige Aufgaben an ihn, den Agenten (ein JavaScript-Programm) -- und dabei kommen erstaunliche Dinge heraus, wie die vielen neuen Webseiten belegen, die das ausmachen, was man heute das "Web 2.0" nennt. Früher, in der guten alten Zeit, da war das Web noch das, wofür es einmal geplant war: ein Netz von aufeinander verweisenden Textseiten, ein sogenannter Hypertext. Diese Grundidee bestimmt in Form des HyperText Transfer Protocols ( HTTP ) bis heute die Architektur des World Wide Webs. Auf die Auswahl eines solchen Verweises (Klick) sendet Ihr Browser eine HTTP-Anfrage ( request ) an einen Server, der irgendwo in den Weiten des Webs seinen Dienst tut. Der Server beantwortet die Anfrage mit einer HTTP-Antwort ( reply ), die den neuen "Text" enthält. Seit einigen Jahren sind die Browser mit einer neuen Fähigkeit ausgestattet: man kann sie Programme, genauer: J

A Lesson to Learn from Compiler Construction

Some few days ago, I was struck by an insight. This insight concerned a certain way of structuring a software problem in order to reduce complexity. I realized that I used this pattern subconsciously for quite some time. However, I wasn't really aware of it until I had a discussion with one of my diploma students end of 2005. We had a discussion about the component framework he was supposed to built. I was bubbling over with ideas -- and the diploma student became more and more frightened about all these features, I was so enthusiastic about. Neither did he comprehend what I was after, nor did he see the slightest chance to get all this implemented. Suddenly, it occurred to me that there was a way out of this complexity: "Gosh, why do I torture this poor guy with all my ideas. What I'm really after is something much more simpler. If I break things down, I just need some core functions implemented, which make up the basic component framework and let it run. The rest, my fan

Der Mensch als Subroutine

Computerprogramme "borgen" sich die Intelligenz eines Menschen für "Unteraufgaben", die Menschen (noch) weitaus besser lösen können als der Computer. Darüber las ich in dem Post " Hijacking intelligence ". Faszinierender Ansatz, nicht wahr? Dabei ist das schon Realität geworden. In dem weiterführenden Link las ich zum ersten Mal etwas über Amazon's Mechanical Turk .

The Meta-Model of the UML

Modeling languages, like the Unified Modeling Language (UML), are designed according to a schema called meta-level architecture (aka meta-data architecture). While the term may sound mystik, meta-level architectures are actually not that difficult to understand. Let us have a closer look at the architecture of meta-levels on an informal level. We will start at the top left, see the figure. To make the discussion concrete, we refer to conceptions as you know them from modeling with classes and objects. The abbreviation CD stands for Class Diagram. A class diagram consists of classes, associations, inheritance and so on. These conceptions, the conceptions you are allowed to use for a CD are defined by CM, the Class Model, as we call it. The CM is a specification of conceptions, of which a concrete CD is an instance of. That's why there is an arrow labeled with "instanceOf" between CD and CM. The Class Meta-Model (CMM) specifies the language constructs available for use on

Der UML-Reasoner

Die Unified Modeling Language (UML) hat in etwa den Stellenwert als Ausdrucksmittel in der Softwareentwicklung, wie es das Englische in der Geschäftswelt hat: Die UML ist weit verbreitet, jeder "spricht" sie und jeder versteht sie. Es ist die Sprache, in der sich Software-Entwickler mitteilen und in der sie ihre Entwürfe und Entwurfsentscheidungen dokumentieren. Die Fähigkeit, UML-Diagramme zumindest lesen zu können, ist eine Basisfähigkeit für jeden, der in der Entwicklung objekt-orientierter Softwaresysteme involviert ist, und betrifft Programmierer und Entwicklungsleiter gleichermaßen. Das Lesen, kritische Hinterfragen und selbstständige Erstellen von UML-Diagrammen ist keine einfache Fähigkeit. Bereits das Lesen von Klassendiagrammen erfordert sehr viel Übung. Es ist nicht trivial, selbst aus einfachen Kombinationen von Klassen und Assoziationen zwischen den Klassen die Auswirkungen auf der Ebene der Objekte abzuleiten, geschweige denn Fehler bzw. Mängel zu entdecken. Dam

Die Welt als Computer: relativ einfach, oder?

Zug fahren ist doch was schönes! Ich sitze da, schemenhaft rast die Landschaft in der Dunkelheit an mir vorüber, und dröge vor mich hin. Es ist nach 21 Uhr, ich bin müde. Es grübelt in mir. Genauer, das Radio in meinem Kopf düddelt vor sich hin. Der Sprecher in meinem Kopf labert mal dieses, mal jenes. Der redet immer so nett zusammenhangslos daher, wenn ich müde bin. Wahrscheinlich sind wir beide müde. Mal angenommen, vermeldet mein Radiosprecher im Kopf auf einmal etwas deutlicher und gähnt, mal angenommen, die Welt, das ganze Universum würde durch einen gigantischen Riesencomputer berechnet werden. Ein Supercomputer ließe all das hier ablaufen. Was dann? Müsste dann nicht -- denk nach, Junge -- ja müsste dann nicht; ja klar, dann ist die Rechenzeit begrenzt, endliche Ressourcen und so, und dann, dann müsste doch; ja ich glaube, dann ist die Relativitätstheorie doch eine notwendige Konsequenz daraus. Oder? Unglaublich! Wie bitte? Wer hat da was gesagt? Mein Hirn kommt auf Touren. M

Referenzen im Blick

Letzte Woche blieb mein Blick an einem Stückchen Programmcode hängen. Der Code war zwar nicht falsch -- er würde zweifellos die geforderte Arbeit tun --, aber es verbarg sich dahinter ein übler Denkfehler. In einem anderen Zusammenhang würde das Programm unerwünschte Seiteneffekte erzeugen. Ob der Programmautor sich dessen bewusst war? Es ging darum Zahlen zu summieren. Nach Eingabe einer Zahl n soll die Funktion die Summe aus 1 + 2 + 3 + ... + n errechnen. Beispiel: Eingabe 5 => 1 + 2 + 3 + 4 + 5 = 15. Eine entsprechende Funktion ist einfach programmiert, hier am Beispiel mit Python . Python markiert Blöcke über Einrückungen statt über geschweifte Klammern oder ähnliches. (Da ich Schwierigkeiten mit dem Online-Editor habe, sind die führenden Leerezeichen durch Punkte markiert). def sum1toN_V1(n): ....assert n >= 1 ....res = 0 ....for i in range(1,n+1): res += i ....return res Um den Code zu verstehen, muss man einzig wissen, was range(1,n+1) macht: es liefert eine Liste von Za

Vorprojekt-Phase: Das Kunden-Orakel und die Hellseherei

"Guten Tag, mein Name ist Kluge, Martina Kluge, ich bin Geschäftsführerin der Firma BrainTeaser, man hat sie mir empfohlen." Da steht sie, die liebe Frau Kluge. Ihre Präsenz erfüllt das ganze Büro, obwohl sie noch gar nicht eingetreten ist. Große, intelligente Augen blicken Sie neugierig an. Ihr Freund Heinrich, von ihm ist die Empfehlung, hat den Besuch schon vorgewarnt. Sie sei ein Wirbelwind, sagte er Ihnen am Telefon -- und er klang dabei amüsiert. Nun denn ... "Bleiben Sie sitzen", sagt Frau Kluge freundlich, lächelt hinreißend und löst sich aus der Tür. Ihre Augen haben offenbar einen neuen Fixpunkt gefunden, auf den Sie regelrecht zustürzt. Sie strebt auf das voll beschriebene Whiteboard mit den Projektplanungen der nächsten sechs Monate zu. Das Ergebnis zweier Nächte Planungsarbeit mit Ihrem Kollegen Gerd. Das Zeug ist wichtig. "Darf ich?" Eigentlich nicht, eigentlich wollten Sie gerade "Nein" sagen -- aber es ist zu spät. Es kommt Ihnen

Bucheinblicke

Manche Ideen taugen als Produktidee und lassen sich mit viel Glück erfolgreich auf den Markt bringen. Das "Web 2.0" ist voll mit solchen Versuchen. Andere Ideen schrammen an einer Grenze, die rechtlich vermutlich nicht ganz unbedenklich ist -- was aber auch konstruktiv als Kunstform umgemünzt werden kann. Ein Beispiel: Amazon bietet eine "Search Inside"-Funktion bei ausgewählten Büchern in ihrem Verkaufsportal an. Sie geben einen Suchbegriff ein, und Ihnen wird eine Liste geliefert mit allen Seiten, die diesen Begriff enthalten. Klicken Sie nun eine Seite an, wird Ihnen die Buchseite als Bild vollständig angezeigt. Es bedarf keiner großen Mühe, um sich mittels geschickter Suchabfragen den Einblick in ein ganzes Buch zu verschaffen. Hatten Sie die Idee auch schon? Die Idee liegt derart provokant nahe, auch der nächste Schritt, diesen Vorgang mit einem Programm zu automatisieren, dass sich eine Frage aufdrängt: Wie verträgt sich eine solche, eigentlich sehr kundenorie

Prozessor mit 10 Fingern

Computer rechnen mit Einsen und Nullen, nicht wahr?! Meistens, aber nicht immer. Ich kann mich dunkel erinnern, mal von einem Rechner gelesen zu haben, einem Rechner aus grauer Vorzeit, der mit einem höherwertigen Zahlensystem rechnete. Im 6er-, 10er- oder 12er-System, ich weiß es nicht mehr. Doch jetzt kann ich das Kramen in den grauen Zellen sein lassen. Es wird ihn wieder geben, den Computer mit "10 Fingern". (Für den Hinweis vielen Dank an AnA.) IBM hat erste Details verraten über den kommenden Power6-Prozessor. 5GHz und eine dezimale Fließkommaeinheit (Floating Point Unit, FPU) sollen den Prozessor auszeichnen, so vermeldet bei golem . Die Verwendung des 10er-Systems lasse den Prozessor schneller rechnen, so heißt es in der Meldung. Aber warum? Details sind in der Meldung nicht zu finden, auch nicht auf den verlinkten Seiten. Meine Vermutung ist, dass die FPU auf Schaltungsebene mit mehrwertigen Logiken arbeitet, auf der die Zahlen durch verschiedene Spannungslevel ab

RFID

Eigentlich sind die kleinen Funk-Chips kalter Kaffee -- eine fast schon uralte Idee, die jedem Nachrichten-Techniker wie selbstverständlich vorkommen mag. Im Gespräch sind diese Chips schon seit vielen, vielen Jahren. Doch allmählich scheint ein Markt für ihren Einsatz zu entstehen. Es sieht so aus, als würde RFID (Radio Frequency Identification) Wirklichkeit werden. Die Marktprognosen sehen bestens aus ( heise-Meldung ). Vor kurzem bin ich durch eine andere heise-Meldung auf eine Informationsbroschüre zu RFID gestoßen. Herausgegeben hat sie das Forum InformatikerInnen für Frieden und gesellschaftliche Verantwortung e.V. ( FIfF ). Die Broschüre ist angenehm zu lesen. Sie beschäftigt sich unter anderem mit der Technik, Anwendungen von RFID, Risiken & Ängsten und kryptographischen Methoden. Eine ausführliche Liste mit Links bietet interessierten Lesern Einstiegspunkte. (Übrigens finden Sie auf der Webseite von FIfF auch eine ähnlich aufgebaute Broschüre zur elektronischen Gesundhei

Idee zum WebCaching

Immer wieder treibt mich das Thema "HTTP-Caching" um -- ich nenne es auch gerne WebCaching, auch wenn der Begriff es nicht ganz trifft. Caching ist ein wichtiges Thema in vielen Bereichen, in denen es um Performanz geht. Prozessorarchitekturen, Datenbanken und webbasierte Systeme etc. nutzen Caching sozusagen als Turbolader. Vermeintlich langsame Systeme können durch geschickte Caching-Strategien rasend schnell werden, indem sie die von ihnen erwarteten Reaktionen vorhalten. Kurz etwas Hintergrund zu HTTP und HTTP-basiertem Caching, bevor ich zu meiner Caching-Idee komme. HTTP ist ein Anfrage/Antwort-Protokoll. Der Client, z.B. Sie über Ihren Webbrowser, schickt eine HTTP-Anfrage ( request ) an einen Webserver, und der Server beantwortet die Anfrage mit einer HTTP-Rückmeldung, einem HTTP- Reply . Es ist immer dasselbe. Ausschließlich der Client schickt Requests an den Server; und der Server reagiert nur auf diese Anfragen mit einem Reply. Das Prinzip ist sehr einfach. Wenn S

Semantics, Behavior and Structure

Two persons talking about a "car" must have the same (or at least a very similar) understanding of what the term means. The meaning of the term is determined by its use in an operational context. A persons assumptions and expectations of the effects of this use express his or her understanding. The key point here is that semantics have to do with hypotheses about things in action. A hypothesis reflects the capability of a person to predict the effects of an operation on things. As a prerequisite, we have to demand that operations on things are causal, i.e. there is a dimension of time resulting in a timely relation of cause and effect: the cause is before the effect. To formalize things, let's say that we have entities and operations, which provide an operational context for the entities. For the purpose of experimenting with the ideas presented, we use numbers as entities and functions as operations. A function (as you know it e.g. from Scheme or Python) relates input to

Damals ...

Wenn Sie, wie ich, mit den ersten Rechnern groß wurden, die den rührseligen Namen "Heimcomputer" trugen, die klein und erschwinglich waren und in Ausmaß und Gewicht mühelos mit heutigen Laptops konkurrieren konnten, dann fühlen Sie sich vielleicht in diesem Beitrag auch erinnert an damals. An die Zeit, in der 1 MHz Ferrari-Gefühle aufkommen ließ und einige Kilobytes Speicher Reichtum bedeuteten. Das "Rechenzentrum" unseres Gymnasiums befand sich in der Sternwarte -- der kühlste Raum der ganzen Schule, immer ein wenig zugig. Dort tat ein Commodore seinen Dienst. Natürlich bekam nicht jeder Zugang zu diesem Wunder an Rechenkraft. Irgendwann kam ich auch in den Genuß dieses Privilegs. Ich kann mich noch dunkel daran erinnern, wie ich einmal aus einer Zeitung -- ich glaube es war die CHIP -- ein Maschinenprogramm im Binärcode abtippte, nur um am Bildschirm Zeuge einer Diffusionssimulation zu werden. Das war ganz wunderbar, da der grüne Monitor noch so schön nachleutete

Strongtalk

Der Computational Theologist von Sun Java, Gilad Bracha , hat am 11. September die Freigabe der Smalltalk-Implementierung " Strongtalk " als Open Source Software in seinem Blog bekannt gegeben . Smalltalk, wer es nicht weiß, gehört mit zu den ältesten Programmiersprachen, ist objekt-orientiert und hat viele andere Sprachen beeinflusst; Infos dazu z.B. unter Wikipedia. Smalltalk war seiner Zeit deutlich voraus und ist es in gewisser Hinsicht bis heute, weshalb sich immer noch eine Fangemeinde für diese Sprache findet. Beachtlich finde ich, womit sich Leute wie Bracha beschäftigen, abseits von Java. Mir scheint sich dahinter ein Trend auszudrücken, den ich auch an anderen Stellen glaube zu beobachten (siehe z.B. IronPython ). Dynamisch typisierte Programmiersprachen scheinen zunehmend ernst genommen zu werden. Man sieht ihre Vorzüge und bemüht sich um die schmerzfreie Koexistenz von statischer und dynamischer Typisierung. Das beste aus beiden Welten soll miteinander verschmol

Abstraktion und Vergröberung

Bei der Modellierung von Systemen kommen zwei Techniken zum Einsatz: das eine ist die Abstraktion, das andere die Vergröberung. Was unterscheidet eigentlich das eine vom anderen? Meint beides nicht dasselbe? Der Vorgang des Abstrahierens bzw. der Abstraktion lässt sich formal leicht fassen. Ein praktisches Beispiel soll beim Verständnis helfen. Nehmen wir die Spezifikation einer Methode method float squareRoot1(float: number) Die Methode "squareRoot1" beschreibt das Ergebnis auf eine eingegebene Fließkommazahl. Es wird eine Fließkommazahl zurück gegeben. Die folgende Methode schränkt die Eingaben per Vorbedingung ( pre-condition ) auf positive Werte ein und sichert eine positive Fließkommazahl als Ergebnis per Nachbedingung ( post-condition ) zu. method float squareRoot2(float: number) pre: number > 0 post: result > 0 Methode "squareRoot2" verfeinert die Eigenschaften der ersten Methode; es werden Details zur Konkretisierung der Eigenschaften hinzugefügt.

Nachgeschoben: Defizite im Software Engineering

Huch, wo ist er denn? Ich habe einige Posts schon fertig geschrieben, sie aber noch nicht veröffentlicht. Vorhin habe ich einen dieser Posts frei gegeben -- und er erschien nicht. Bis ich bemerkte, dass er unter dem Datum seiner Entstehung eingelistet wurde. Tricky! Also, wer es noch nicht gesehen hat: Die " Defizite im Software Engineering " sind "nachträglich" im August erschienen.

Hart: IronPython

Leute, die -- wie ich -- Liebhaber der Programmiersprache Python sind, dürfen sich über die just erschienene Python-Version für .NET freuen: IronPython , Release 1.0. Der Heise-Verlag hat das heute auch in einer News gemeldet, siehe hier . [Update 2006-09-15: Im Video-Interview (auf's Bild klicken) zeigt Jim Hugunin, der Entwickler von IronPython, am Bildschirm, wie elegant sich IronPython in die .NET-Welt einfügt.]

Reverse Ajax

Seit einer Weile schon beschäftige ich mich immer wieder mit AJAX und mache mir Gedanken über die Architektur eines neuen WebFrameworks, das die durch AJAX gegebenen Möglichkeiten so weit wie möglich ausreizt. Bei der Webtechnologie gibt es eine Beschränkung, die am zugrunde liegenden Protokoll HTTP liegt. HTTP definiert ein striktes Anfrage/Antwort-Prozedere, das ausschließlich vom Client, dem Webbrowser, ausgehen kann. Der Client stellt eine Anfrage ( request ) an den Server, der Server antwortet mit einem Reply . Der Server kann den Client nicht eigenmächtig über neue Ereignisse informieren. Man muss sich etwas originelles einfallen lassen, wie ein Server einen Browser z.B. über neue News auf einem Nachrichtenportal informieren kann. Eine Idee, auf die man rasch kommt, ist die regelmäßige Nachfrage. Der Client fragt im Hintergrund für den Surfer unbemerkt z.B. jede Minute beim Server nach: "Willst Du mir Infos übermitteln?" Falls ja, werden die Infos an den Client übermi

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.

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 übe

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 nut

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 ein

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 &q

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.