Direkt zum Hauptbereich

Posts

Es werden Posts vom November, 2006 angezeigt.

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...