Direkt zum Hauptbereich

Posts

Es werden Posts vom September, 2006 angezeigt.

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