Direkt zum Hauptbereich

Posts

Es werden Posts vom 2007 angezeigt.

Das 2 Millionen-Studium

2 Millionen Minuten -- so lange dauert ein vierjähriges Studium. Das rechnet uns der Filmemacher Robert A. Compton in seinem Film " Two Million Minutes " vor. Die Flash-Animation zur Filmwebseite baut eine bedrohliche Kulisse auf: Indische und chinesische Studierende nutzen die zwei Millionen Minuten ihres Studiums deutlich mehr und umfassender als amerikanische Studierende. Es scheint nur eine Frage der Zeit zu sein, bis dieses Potential an Bildung der amerikanischen Vorherrschaft in den Naturwissenschaften, in den Ingenieurswissenschaften und in der Informatik die Ränge abläuft. Anbei: Wir Europäer kommen in dem Film gar nicht vor. Wenn Sie mögen, hier der Trailer: Ist es wirklich so schlimm? Heute hat die Bertelsmann-Stiftung die Ergebnisse einer Repräsentativbefragung vorgestellt : "Wer regiert die Welt?". Befragt wurden 8.999 Bürger aus Brasilien, China, Deutschland, Frankreich, Großbritannien, Indien, Japan, Russland und den USA. Wie sie die internationale Ro

Googles Chart-API und seine Nachhaltigkeit

Am Nikolaustag hat Google das Web um ein weiteres API ( Application Programming Interface ) bereichert: das Chart-API . Der Gebrauch des APIs ist einfach und das Resultat schön anzusehen. Kein Wunder also, dass sich die Ankündigung des Chart-APIs wie ein Lauffeuer in der Bloggosphäre verbreitet. Mit einem einfachen HTTP-Request wie diesem als src-Attribut in einem img-Tag http://chart.apis.google.com/chart?cht=p3&chd=s:Uf9a&chs=200x100&chl=A|B|C|D"> ergibt sich der folgende visuelle Effekt: Das API scheint wirklich nützlich zu sein, wenngleich das Interface für Menschen wenig intuitiv ist. Insofern darf man gespannt sein auf die ersten Webseiten, die einem mit einer graphischen Oberfläche beim Erstellen solcher Charts helfen und ein einfaches Experimentieren mit den Parametervarianten ermöglichen. Das sollte mit ein wenig HTML-Code und JavaScript zu machen sein. Solche APIs gehen in die richtige Richtung: Sie machen Web-Seiten rein beschreibend (deklarativ), die Ke

Körpersprache für Informatiker?

Dem Informatiker, besser: dem Hacker (dem "guten" wie dem "bösen"), hängt ein Vorurteil an: Wir sind Menschen, die bis tief in die Nacht vor unseren Maschinen hängen -- und tagsüber Räume notfalls abdunkeln. Wir beschallen uns via Kopfhörer mit Musik, um uns akustisch von der Welt zu isolieren. Wir tauchen für Stunden ab, sind nicht ansprechbar. Die totale Versenkung. Wir sind eins mit der Maschine, mit dem Programm, mit dem ByteCode. Das Programm bin ich, ich bin das Programm. Und zum Glück kann man zum Mittagessen um 2 Uhr morgens noch Pizza beim Pizza-Service bestellen. Stimmt alles! ;-) Nur sind wir deswegen noch lange keine sozialen Krüppel, die solche Videos benötigen, um das Verhalten unserer Mitmenschen zu disassemblieren und zu interpretieren. Amüsiert frage ich mich, welche Berufsgruppe oder Menschengruppe solche Videos wirklich braucht -- die schon fast wieder gut sind, so schlecht wie sie sind. [Video entdeckt im "Mixing Memory"-Blog: " Wh

Ein neuer Markt: Von Wissenschaftsblogs und Kunstgalerien

Liebe Wissenschaftsblogger, das Web 2.0, dieses Mitmach-Web, ist ein Medium, das findige Unternehmen nach Marktpotenzialen ausloten. Wir Wissenschaftler bzw. Wissenschaftsjournalisten sind offenbar eine interessante Zielgruppe. Wir produzieren Content, der gefragt ist. Und dagegen ist überhaupt nichts zu sagen! Aber ach, was red ich. Wollte ich Ihnen nicht eine Geschichte erzählen von einem Freund im Geiste, einem Künstler? Da war ein Künstler, dessen Bilder einem Großgaleristen gefielen. So sagte der Galerist zu dem Künstler: "Ich will eine Künstler-Community aufbauen! Ich biete Dir meine Galerie zur Ausstellung Deiner Bilder an. Nicht allein, Deine Bilder zeige ich zusammen mit Werken anderer Künstler. Du wirst Deinen Wirkungskreis erhöhen und Du wirst weitere Künstler kennenlernen. Bist Du dabei? Übrigens, das Ganze kostet Dich nichts; ich leg' Dir noch ein paar Euro im Monat drauf." Der Künstler freute sich. Dass zwischen den Bildern Werbeplakate hängen sollten, nahm

"Dienst oder Dienstmerkmal nicht möglich."

Letzte Woche war ich auf der USAB 2007 (Usability & HCI for Medicine and Health Care; HCI steht für Human Computer Interaction ) und begeisterte mich an der Keynote von Harold Thimbleby , der an der Swansea University (UK) lehrt. Thema: "User-Centered Methods are Insufficient for Safety Critical Systems". Irgendetwas hat er in mir losgetreten, und seitdem laufe ich etwas aufgeweckter durch die Gegend, was die Gestaltung von Mensch/Computer-Schnittstellen betrifft. Zwei Beispiele aus den letzten Tagen: Flughafen Frankfurt am Main. Ich bin eben gelandet, bin zum Ausgang raus und steure die Automaten an, um mein Parkticket für das Auto zu bezahlen. Ich schiebe die Parkkarte in den Automaten, das Geld hinterher, bekomme die Parkkarte zurück und realisiere erst in dem Moment, dass ich eine Quittung über die Parkgebühr benötige. Schnell noch die Quittungstaste gedrückt -- die mir den Dienst verweigert. Ihr fehle eine Parkkarte! Also schiebe ich die Parkkarte wieder in den Aut

User, Domain and Realization Models

In my previous post on " Modeling Illusions " I distinguished between the illusion, manifested by a domain model , and the model that does the trick, the realization model . The interesting question is: How do these two models relate to each other? If I managed to explain things well, you should have understood that both models implement the same interface and that they behave exactly the same for an external observer. Otherwise, it would be useless to talk about an "illusion". From the outside, there is no way to tell which model is actually operating "behind the wall". From this viewpoint, both models are interchangeable. Note that this statement highlights a very crucial point. If you cannot say what's behind the wall, you experience and develop a consistent mental model of the interface and it's behavior from the outside. We call this mental model the user model of the interface. So we are having three models: From an external viewpoint, we ha

Modeling Illusions

A very important tool in software engineering (SE) is modeling illusions. In SE, engineers most often focus solely on realizations not illusions. However, illusions are the magic to create self-contained worlds (or domains), to separate design spaces and thereby simplify design. Modeling illusions is an art which is rarely understood and applied. What do I mean by illusions? Let me give you some examples: Look at your desktop on your computer screen -- it's an illusion. There is no desktop in your computer. See the little small icon you call a dustbin or trash can? It's an illusion. Take a screwdriver and open your computer; you won't find a dustbin in there. Your files on your hard disk are organized in directories which are nested in a hierarchy. It's an illusion. Your hard disk actually has multiple platters and read/write heads, and each platter is organized in tracks and sectors (see also " How Hard Disks Work "). You work with databases, handle tables, k

E8 und die "Theory of Everything"

Das lässt Sie sicher auch stutzig werden, wenn Sie hören, jemand habe die " Theory of Everything " gefunden -- auch wenn es dabei "nur" um Physik geht. In der Tat suchen die theoretischen Physiker nach so einer Theorie, die alle physikalischen Phänomene unter einen Hut bringt. Klingt hart und ziemlich schwer. Nun will ein Surfer (nein, so ein Wasser-Surfer, der in Hawaii surft) genau diese Theorie gefunden haben, so berichtet der Telegraph in " Surfer dude stuns physicists with theory of everything " (Roger Highfield, 6:01pm GMT 14/11/2007). Klar, so mal eben beim Surfen drauf gekommen! Unsinn. Doch wenn Sie den Artikel weiter lesen, dann wird die Sache schon ernster. Da ist ein Fachmann am Werk. Das mit dem Surfer verkauft sich halt ein bissel besser. Unser "Dude" Garrett Lisi scheint's drauf zu haben. Quellensuche. Lisis Artikel hat den schlichten, anspruchsvollen Titel " An Exceptionally Simple Theory of Everything ", Sie können

Mini-Laptops

Seit über zwei Monaten sind Zimtsterne, Marzinpankugeln und all die vielen Weihnachtsleckereien in den Supermärkten zu haben. Mir ist es unergründlich, warum die Marktstrategen glauben, uns auf einer monatelangen "Freßspur" zum Fest führen zu müssen. Allmählich erinnern auch die PC-Hersteller an das große Fest. Heute schon gewünscht? Ich bin vor zwei, drei Tagen auf den Eee PC von Asus gestoßen. Irgendwie macht mich das Ding an. Klein, portabel, WLAN, alle wichtigsten Anwendungen dabei, USB- und Beamer-Anschluss. Kleine Tastaturen stören mich nicht. Der Preis macht Appetit! Damit können sich auch viele Studierenden einen kleinen aber feinen Rechenzwerg leisten. (Zur Software-Entwicklung ist der Laptop sicher weniger geeignet und man muss sich vermutlich auf sehr einfache Werkzeuge beschränken.) Das Gerät wäre mir ein schöner Reisebegleiter. Die ersten Testberichte klingen auch gut, siehe z.B. bei heise mobil . Lieber noch hätte ich einen XO Laptop , der mir brillant konzipie

Hey Django!

Wie lässt sich zügig eine webbasierte Anwendung entwickeln, die auf einer relationalen Datenbank aufsetzt? Da ich gerade ein Projekt betreue, bei dem es genau auf diese beiden Punkte ankommt (webbasiert und datenbankgetrieben), gab ich mir selber einen Tag, um mir eine "moderne" Entwicklungsumgebung und ein "modernes" Framework anzuschauen. Der erste Kandidat: Zoho Creator; der zweite: Django. Zoho ist eine Firma, die sich -- wie einige andere auch -- dem Nachbau von Desktop-Software auf rein webbasierter Basis widmet, meist ergänzt um Features zur Kollaboration. Darunter finden sich Nachbauten von Word und Excel, eine Projektmanagement-Software, ein Wiki. Meine Aufmerksamkeit erregte jedoch bereits vor einiger Zeit ZOHO Creator , eine vollständig browserbasierte Entwicklungsumgebung zum Bau von Datenbank-Anwendungen. Zoho wirbt mit einer kinderleichten Programmierung, die selbst Amateuren Erfolge bescheren soll. Dieses Versprechen kann Zoho Creator nicht einhalten

Billigflug: Gun Fighter

Erinnern Sie sich noch an Tetris ? An die herabfallenden Klötzchen? Es ist eine kleine Ewigkeit her, gell?! Mit Tetris verbindet mich die faszinierende Erfahrung, dass man nach acht oder zehn Stunden ununterbrochenem Tetris-Spiel davon träumt und die ganze Nacht über weiter Klötzchen dreht, sie nach links oder rechts bewegt, Space-Taste drückt und sie herabfallen lässt. Eine ziemlich gute Simulation, die das Hirn da vollbringt; der sogenannte Tetris-Effekt . Das hat mich seinerzeit wirklich beeindruckt. Am frühen Morgen, wieder vorm Computer sitzend (wach, aber eigentlich macht es keinen großen Unterschied ;-), ist der Highscore vom Vorabend mühelos gebrochen. Das Hirn hat im Schlaf gelernt, Tetris noch besser zu spielen. (Dazu gibt es übrigens auch einen netten Artikel auf ScientificAmerican.com von Kristin Leutwyler: Tetris Dreams , October 16, 2000.) Denk ich an Tetris, denk ich an Space Invaders, Phoenix, Pac Man, Ping Pong und ähnliche Spielchen -- die Computerspiele meiner Jugend

Sloppy Abstractions

There is a very powerful engineering technique, computer scientists make also use of: abstraction. But did you know that abstractions can be leaky? I had heard about "The Law of Leaky Abstractions" some time ago; now, it again caught my attention, because Philip Wadler mentioned it on his blog . Reason enough to read Joel Spolsky's post (written November 2002) more carefully. Spolsky's " Law of Leaky Abstractions " says All non-trivial abstractions, to some degree, are leaky. He explains his "law" mainly on the example of the TCP protocol (his actor analogy is brilliant and funny) and concludes: I said that TCP guarantees that your message will arrive. It doesn't, actually. If your pet snake has chewed through the network cable leading to your computer, and no IP packets can get through, then TCP can't do anything about it and your message doesn't arrive. [...] This is what I call a leaky abstraction . TCP attempts to provide a complete

Merk Dir mal ein Bit!

Haben Sie schon einmal daran gedacht, sich einfrieren und später, irgendwann in der Zukunft, wieder auftauen zu lassen? Das würde etwa die Wartezeit bei einem Flug zum Mars erheblich verkürzen. Was auch immer Ihr persönlicher Grund für eine solche Aktion sein möge, lassen Sie die Finger davon. Mal abgesehen davon, dass das Einfrieren und Auftauen von Zellen eine äußerst heikle Angelegenheit ist -- es kostet Sie nur Geld und lässt Sie strohdumm werden! Ganz richtig: Es macht Sie dumm! Warum? Lassen Sie mich mit einem kleinen Exkurs beginnen: Wie wird Information gespeichert? Es gibt zwei Arten der Speicherung von Information. Ich möchte Ihnen das anschaulich an zwei Beispielen erläutern: Nehmen Sie ein kleines Behältnis, eine Schatulle etwa, die ein Steinchen aufnehmen kann. Ist die Schatulle leer, hat die Schatulle den Wert Null gespeichert. Ist das Steinchen in der Schatulle, wollen wir das als den Wert Eins verstehen. Das ist das wohl am weitesten verbreitete Verständnis eines Inform

Get Lively

Yesterday (Friday, Oct 5, 2007), Dan Ingalls announced the Sun Labs Lively Kernel on the squeak-dev mailing list. Squeak is an implementation of the Smalltalk programming language and Dan Ingalls is one of the lead developers of Squeak. So, you might guess what Lively is?! Something that is very close in spirit and conception to Smalltalk. You've never heard of Smalltalk? Never mind, have a look at Lively, it's fascinating and quite cool -- and completely implemented in JavaScript using SVG capabilities of a web browser. The main goal of the Lively Kernel is to bring the same kind of simplicity, generality and flexibility to web programming that we have known in desktop programming for thirty years, but without the installation and upgrade hassles than conventional desktop applications have. [...] The Lively Kernel places a special emphasis on treating web applications as real applications, as opposed to the document-oriented nature of most web applications today. In gener

Ur-Taschenrechner

Mögen Sie einen Blick in die Urzeit des Computerbaus werfen? Bei Spiegel-Online gibt es einen netten Beitrag dazu: " Der erste Taschenrechner wog 1,5 Kilo " (Konrad Lischka, 27. Sep. 2007). Schauen Sie sich mal die Bilder zu den alten Taschenrechnern an! Schaurig schön.

Vom Zählen und vom Sehen

Mein ältester Sohn, bald sechs Jahre alt, hat die vergangenen Tage die "großen Zahlen" für sich entdeckt. Genauer gesagt, er entdeckt das Regelsystem, nach dem Folgen von Zahlen ausgesprochen werden: 3-2-0, dreihundertzwanzig; 1-4-0, einhundertvierzig. Es ist beachtlich, wie hart ein kleines Menschenkind daran üben muss -- einem Computer wäre das in Kürze beigebracht. Ein kurzes Programm würde für immer und ewig "große Zahlen" richtig in Wortfolgen übersetzen. Meinem Sohn müssen wir die Regeln wieder und wieder erklären. Es bewahrt ihn nicht vor Fehlern. Ein mühsamer Prozess, der spielerisch umgesetzt zwar Spaß macht, aber eines schön verdeutlicht: unsere Hirne sind nicht gerade für solche Regeln gemacht. Auf der anderen Seite habe ich noch keinem meiner Kinder erklären müssen, wie die Regeln fürs Sehen funktionieren. Noch besser, ich kenne sie selber nicht. Innerhalb kürzester Zeit weisen Kinder Fähigkeiten in der Verarbeitung von Bildern auf, die wir bislang weder

Computer-basierte Beratung in der Medizin

Die computer-basierte, medizinische Beratung von Patienten wird zunehmend auch in Deutschland als ein hilfreicher Baustein in der Vorsorge und Therapie entdeckt. Auf dem Bild sehen Sie ein solches Beratungssystem im Einsatz. Der Patient interagiert mit dem drucksensitiven Bildschirm des TabletPCs über einen speziellen Stift. Zum Einsatz kommt dieses System gerade in einer Studie, die in Praxen von Hausärzten durchgeführt wird. Dieses Beratungssystem ist entwickelt worden im Rahmen einer Forschungskooperation der Hochschule Heilbronn und der Philipps-Universität Marburg. Dafür hat sich ein interdisziplinäres Team zusammengefunden aus Medizinern, Psychologen und Software Engineers. Sie dürfen raten, an welchem Teil ich beteiligt bin :-) Die erste Fassung der Beratungssoftware ist übrigens im vergangenen Sommersemester 2007 an der Hochschule Heilbronn im Rahmen einer Veranstaltung entstanden, dem "Labor für Software Projekte". Mittlerweile ist die Software neu geschrieben und we

Blogpause

Liebe Blogleser(innen), ich werde mir eine Blogpause gönnen bis Mitte September. Eine Denkpause wird es nicht sein, es gibt interessante Projekte, die ich in dieser Zeit vorantreiben möchte. In dem einen Projekt wird es gehen um formale Grundlagen zur Aspekt-Orientierung -- ein Thema, was mich schon länger beschäftigt. Neu dagegen ist eine Entdeckung, Verhältnisse in Raum und Zeit mit Hilfe einer Prozessalgebra zu beschreiben. Damit kann man z.B. User Interfaces und Maskenwechsel prototypen und formal verifizieren. Im Augenblick kommt eine pragmatische Version davon in einem medizinischen Beratungssystem zum Einsatz. Dann liegt noch einiges andere an: ein Queue-Konzept, bei dem sich Consumer und Producer gegenseitig über die Queue synchronisieren können. Ein Anfang zu einem Tutorial zu Alloy soll entstehen. Und und und. Natürlich werde ich bis zum Beginn der Vorlesungen im Wintersemester nicht mit allem durchkommen. Aber sicher werde ich von dem einen oder anderen Ergebnis nach der Blo

Editing and Persistence

In this post, I want to present a generalization of the ideas, which are behind HTML, CSS and JavaScript. We will end up with a broad understanding of what is meant by editing und persistence in the context of an object model. Most of you know HTML, the HyperText Markup Language, which is at the heart of web technology. For those who don't know it: The content of a web page is described with HTML. HTML structures the content of a web page hierarchically. Furthermore, the content is annotated by so-called tags. A tag indicates the logical purpose of a piece of content. Is some content supposed to be a header, a paragraph, a highlighted word etc.? For further info see e.g. Wikipedia on HTML or any other of the hundreds of resource about HTML. HTML is flanked by two other guys. One guy is called CSS, the other JavaScript. When you look at a HTML page in a browser, the graphics engine (the rendering engine) takes the HTML stuff and calculates a visual presentation out of it. There a

Kann man Programmieren lernen?

Kann man das Programmieren erlernen? Sicher! Aber kann es jeder erlernen? Ich bin über einen Blog auf einen interessanten Artikel gestossen (" The camel has two humps (working title) " von Saeed Dehnadi und Richard Bornat). Darin berichten die Autoren von den vielen vergeblichen Versuchen, die es gegeben hat, das Programmieren erfolgreich zu unterrichten. Denn zwischen 30 und 60 Prozent der Studierenden an Universitäten und Hochschulen scheitern regelmäßig am ersten Programmierkurs. Bei allen Bemühungen: Die hohen Durchfallquoten scheinen unabänderlich zu sein. Die Autoren behaupten, die Programmierbegabung mit einem Test ermitteln und damit vorhersagen zu können, ob ein Kandidat bzw. eine Kandidatin das Programmieren erfolgreich erlernen wird. Ich halte die durchgeführte Studie für methodisch kritisch, darum sind die Aussagen und Spekulationen mit großer Vorsicht zu genießen. Dennoch lassen Sie uns einmal anschauen, was Dehnadi und Bornat da untersucht haben. Die beiden geh

Suchen mit Strategie

In den vergangenen Wochen habe ich mich viel mit XML befasst. Für die Verarbeitung eines XML-Dokuments habe ich mir ein Python-Programm geschrieben, das die XML-Darstellung direkt in einen Objektbaum abbildet -- alle weiteren Bearbeitungsschritte führe ich dann in dem Objektmodell aus. Jedes Objekt in diesem Baum hat einen Vorgänger ( parent ) und keinen oder mehr Nachfolger ( childs ). Das ist sehr ähnlich zu DOM. Bei der Verarbeitung einer solchen Baustruktur tritt ein Problem immer wieder auf: Sie suchen Knoten (= Objekte) in dem Baum, die einem oder mehreren Kriterien genügen. Für diese Aufgabe kann man eine sehr flexible query-Funktion programmieren: def query(criteria): assert callable(criteria) result = [] for element in allElements(): try: if criteria(element) == True: result.append(element) except: pass return result Dieser query-Funktion übergibt man ein Kriterium in Form eines Lambda-Ausdrucks (das ist eine anonyme,

Maschinelles 3D-Sehen

Bislang hat es viele Versuche gegeben, Computern (bzw. Robotern) das Sehen beizubringen -- mit mäßigem Erfolg. Basis für eine erfolgreiche Orientierung im Raum ist die Fähigkeit, die Welt dreidimensional wahrzunehmen. Wir Menschen bekommen das mit unseren zwei Augen hervorragend hin. Und deshalb hat man versucht, das Erfolgsmodell aus der Natur, das "Stereosehen", zu imitieren. Allerdings ist man damit nicht weit gekommen. Es ist schon bei einem Bild extrem aufwendig und schwierig, aus den zahllosen Bildpunkten abzuleiten, wo Objektgrenzen entlang verlaufen. Bei zwei Bildern wird es nicht weniger einfach, zumal die zwei Bilder in Bezug gesetzt werden müssen und daraus mehr oder weniger präzise eine Information über die Raumtiefe gewonnen werden muss. Das ist so schwierig, dass man es bis heute nicht wagt, autonome Fahrersysteme am "normalen" Straßenverkehr teilnehmen zu lassen. Es gibt auch keine kleinen staubsaugenden oder rasenmähenden Roboter zu kaufen, die sich

Zahlenspielerei

In meinem Blogeintrag " Hochstapelei " habe ich Ihnen gezeigt, wie sich rein mit den Mitteln der Objekt-Orientierung ein Stack realisieren lässt. Zur Konstruktion eines solchen Datentyps reicht es vollkommen aus, mit Konstruktoren, Methoden, Attributen und der Möglichkeit des Vergleichs von Objekten zu arbeiten. Keine sonstigen eingebauten Operationen, kein weiterer Datentyp (außer Bool) ist nötig. Auf die gleiche Weise lassen sich auch die natürlichen Zahlen inklusive Null als Typ einführen. Das Geheimnis liegt wieder in der Nutzung des Konstruktors verborgen; das Beispiel ist in Python umgesetzt. Wir machen uns eine Zahlendarstellung zu nutze, die ihren Ursprung in der Mathematik hat: Ausgehend von der Zahl Null ist jede andere Zahl ein Nachfolger von Null. Eine Rangordnung wird hergestellt durch eine Nachfolgekette. Wir nennen den direkten Nachfolger von Null "Eins", den Nachfolger von Eins "Zwei" usw. Ein Nachfolger einer Zahl wird durch die Methode

Hochstapelei

Wissen Sie, was ein Stack ist? In der Informatik ist damit eine Datenstruktur gemeint. Auf einem Stack, zu deutsch "Stapel", können Sie Datenelemente ablegen und wieder entfernen. Ein Stack organisiert die Datenablage in einer Form, die man mit "last in, first out" bezeichnet: Das letzte auf einem Stapel abgelegte Element ist auch das erste, das Sie wieder vom Stapel nehmen können. Für einen Stapel ist eine Handvoll Methoden definiert. Der Konstruktor, der einen Stack erzeugt; eine push-Methode, mit der Sie ein Element auf dem Stack ablegen können; eine top-Methode, die Ihnen verrät, was "oben" auf dem Stack liegt (das Element verbleibt auf dem Stack); eine pop-Methode, die Ihnen das oberste Element vom Stack entfernt; und eine is_empty-Methode, mit der sich feststellen lässt, ob ein Stack leer ist oder nicht. Wenn Sie einen Stack in einer OO-Sprache umsetzen wollen, dann ist eine typische Vorgehensweise die Folgende: Sie suchen eine Datenstruktur, die Ih

Breakpoint mit Farbrausch

Haben Sie auch schon von "Breakpoint 2007" gehört? Vorgestern machte mich Herr Arz auf die Meldung bei golem aufmerksam (" Breakpoint 2007 - Gewinner der Demo-Party stehen fest ", 11. April 2007). Das Team " Farbrausch " hat im Bereich "PC-Demo" den Titel geholt. Aus einer gerade mal 180 KByte großen ausführbaren Datei entzaubert "Farbrausch" einen 7minütigen Film -- mir verschlägt sowas den Atem. Ich habe mir das Video auf YouTube angeschaut. Es wirkt fast wie Hexerei! Machen wir einmal sehr ungünstige Annahmen, was die Bildqualität betrifft: 320 x 200 Bildpunkten mit 8 Bit für die Farbkodierung und 15 Frames pro Sekunde (fps). Das macht für einen etwa 7minütigen Beitrag (7 x 60 Sekunden = 420 Sekunden) eine Datenmenge von 3.225.600.000 Bits aus, sprich 403.200.000 Bytes, also ungefähr 400 MB. Das File kommt jedoch nur mit ca. 180 KB daher! Dem entspricht eine Kompressionsrate um den Faktor 2000 (400/0,18). Ein Kompressionsstandard wie

Design by Contract in Practice

Design by Contract (DbC) is a very valuable specification technique -- I already posted about it in German ( Netze spannen mit Design by Contract ). However, you should be aware that DbC also tends to complicate matters if state is involved. In this case, we need a complementing approach. To give you a simple example, have a look at a thing called "Account". The "Account" is purely specified via pre- and post-conditions ( require and ensure ); "context" enables you to capture a context required for a subsequent post-condition. The code is written in a syntax close to Python. A contract precedes the method signature. class Account(object): ensure: self.balance == 0 def __init__(self) require: 0 < amount <= self.balance context: balance = self.balance ensure: self.balance == balance - amount def withdraw(self,amount) require: amount > 0 context: balance = self.balance ensure: self.balance == balance + amount

Von Beruf Software Engineer

Na, was glauben Sie, wie Ihr Beruf als Software Engineer in 10, 20 Jahren aussehen wird? Zu Beginn des Wintersemesters 2006 habe ich meine Studierenden im Hauptstudium befragt, wie sie die Zukunft des Software Engineering in 10 Jahren sehen. Folgende Liste kam dabei heraus: mehr Konzeption von Software: Anforderungen, Modellierung Software aus Komponenten “zusammenstecken”, Code-Generierung mehr Planung und Organisation von Software-Projekten viel Planung und Kommunikation mit Kunden Hohe Qualitätssicherung bei Outsourcing der Programmierung Teamarbeit: internationale, verteilte Arbeit und Kommunikation Pflege, Weiterentwicklung, Optimierung von Altsystemen sicherer Arbeitsplatz: es entsteht immer mehr Software => Wartung neue Technologien, da HW immer leistungsfähiger wird Entwicklung mit leistungsfähigen CASE-Werkzeugen und IDEs Fortschritte in HMI, Webtechnologie, KI, Virtual Reality, … Notwendigkeit ständiger Weiterbildung es wird eine neue Programmiersprache geben => weniger

Was ist Software-Architektur?

Was ist Software-Architektur? Wenn Sie nach einer Definition im Internet recherchieren, werden Sie auf eine Unmenge von Vorschlägen stoßen. Wenngleich kein vollkommener Konsens besteht, so findet die Definition von Bass et al. (Software Architecture in Practice, 2nd Ed., Addison-Wesley, 2003) offenbar den meisten Anklag. In der deutschsprachigen Literatur zum Thema wird sie auch gerne herangezogen. The software architecture of a program or computing system is the structure or structures of the system, which comprises software elements, the externally visible properties of those elements, and the relationships among them. Ich halte diese Definition für zu kurz gegriffen -- Sie stimmt nicht mit meinen Erfahrungen aus der Praxis überein. Architektur hat nach meinem Verständnis sehr viel mit Ökonomie zu tun. Die Architektur ist die ökonomischste Form der Beschreibung "innerer" Anforderungen, die nicht mit der Implementierung des Systems identisch ist. Unter den "inneren"

"Open, reusable object models" in Python

It's roughly three or four weeks ago that I read an interview with Alan Kay (" Alan Kay: The PC Must Be Revamped—Now ", CIO Insight, Feb 14, 2007). I found it quite inspiring, began surfing the Internet for more material and finally stumbled across Ian Piumarta's paper " Open, reusable object models " (2007/2/7) (see here also). I was fascinated by all the claims stated in the paper and started to have a closer look. Finally, in order to really understand what he did, I started coding his concept world in Python (my favourite programming language). The code is shown below. It's very close to the pseudo code used in the paper on page 5. Before you have a look at the Python code, some remarks. After the third rework of my code, I started renaming concepts. For my taste, e.g. "vtable" is not so intuitive. You will see that I introduce a "Object" class, a "ObjectBehavior" class and a "BehaviorBehavior" class in the c

Factor: In der Kürze liegt die Würze

Es gibt eine Sprache, die mich immer wieder und zunehmend irritiert: Factor von Slava Pestov. Factor steht in der Tradition von Forth und ist eine rein stack-basierte Sprache. Die angepriesenen Features auf der Factor-Webseite klingen erstaunlich genug, um einen genaueren Blick auf die Sprache zu werfen: Factor is a general purpose, dynamically typed, stack-based programming language. Factor has an optimizing native compiler, automatic memory management with a generational garbage collector, a powerful collections library, and various advanced language features such as higher-order programming, continuations, and extensible syntax. Factor development is done in an interactive environment with a graphical user interface. There is a single-stepping debugger which can travel backwards in time, and extensive documentation. An easy to use C library interface allows one to call C libraries without writing any glue code in C. Bindings for OpenGL, FreeType, X11, Cocoa, and Windows APIs are pr