Ray Tracing

Im Rahmen der Vorlesung Computer Graphics, die ich in diesem Semester besuche, muß ich einen Ray Tracer bauen. Eigentlich sollte ich "müssen" durch "dürfen" ersetzen, da ich schon immer mal etwas programmieren wollte, das mit Grafik zu tun hat. Zwar dürfte das ähnlich aufwendig werden, wie seiner Zeit der Compiler. Aber mit ein wenig mehr Disziplin wird das vielleicht nicht ganz sooo stressig werden. Der Vorteil diesmal ist, daß man den Ray Tracer mit den Übungen nach und nach aufbaut. Außerdem muß der bis Weihnachten fertig sein, so komme ich auch nicht in Konflikt mit Klausuren. Ein netter Anreiz bei der ganzen Geschichte ist die sogenannte Rendering Competition. Neben dem Ray Tracer muß man auch ein gerendertes Bild abgeben, daß die ganze Effekte zeigt, die man eingebaut hat. Alle Bilder werden dann neben technischen Aspekten auch nach dem "künstlerischen Anspruch" bewertet. Da muß ich mir was anständiges einfallen lassen!

Building war

Es gab mal diesen Witz mit dem netten Compiler-Tool make, der mittlerweile nicht mehr so schön funktioniert. Etwas recht ähnliches ist mir neulich bei ant aufgefallen, dem Java-Pendant zu make, im Zusammenhang mit Tomcats Web Archive Format. [war] Building war: /workspace/ll/livinglibrary.war Ist zwar nicht mal halb so lustig, aber ein schöner Gegensatz zu make love und leider wohl auch zeitgemäßer...

Archiv ade

Heute mußte ich lernen, daß es auch für Programmierer eine Art Berufsrisiko gibt. Nämlich wenn man jahrelang an einer Applikation gearbeitet hat und man dann erfahren muß, daß diese nicht mehr gebraucht und erst recht nicht veröffentlicht wird. Von November 2004 bis April 2006 habe ich am sogenannten Archiv für "dropping knowledge" gearbeitet und einen Prototypen entwickelt. Für diverse Präsentationen dieses Prototypen habe ich mir immer wieder mal Nächte und ganze Wochenenden um die Ohren geschlagen, damit neue Features in letzter Minute eingebaut waren. Doch dieses Archiv wird nicht mehr gebraucht, man nutzt die Funktionalität der Living Library, um es zu emulieren. Und irgendwie stimmt mich das doch ein wenig mulmig. Nicht nur wegen der ganzen Arbeit, die praktisch umsonst war. Man hat ja auch einiges an Überlegung darein gesteckt, wie man die ganzen Features möglichst elegant einbaut, welche Packages noch einen Tick mehr Performance bringen, etc. Naja, jetzt werde ich morgen mal die Software vom Server nehmen und dann wandert das Archiv ins Archiv.

a ↑ b

Das ist der Pfeil-Operator der Informatiker-Legende Donald Knuth. Die Idee dahinter ist, daß arithmetische Operationen wie Multiplikation und Potenzierung verkürzte Schreibweisen sind, also a*3 = a+a+a und a3 = a*a*a usw. Der Pfeil-Operator macht im Prinzip nichts anderes als das. a ↑↑ 3 = aaa. Aber das wäre viel zu einfach! Daher gibt es noch die Möglichkeit, da ein wenig Rekursion reinzubringen. Man kann nämlich mehrere Pfeil hintereinanderschreiben, also etwa a ↑↑↑ 3 = a ↑↑ a ↑↑ a = ... Und dieses Zeugs darf ich jetzt in meinen Compiler einbauen :-D

Changeset 30

Mein erstes switch-Statement hat gerade fehlerfrei compiliert! Oh Mann, das ist soo cool, wie aus einem kleinen sinnlosen Programm richtiger Assembler-Code entsteht. Zwar ist es für die meisten nicht gerade erhellend, aber ich muß das einfach posten :-)

# CS 561 : Compiler Construction # Summer 2006 # SPIM S20 MIPS simulator. # MIPS code for test/switch.c .globl main main: addu $s7, $0, $ra addi $tt0, $0, 3 addi $s0, $0, 4 la $s2, jt_0 # handle switch value not in interval slt $s2, $tt0, $zero bne $s2, $0, .switch_escape_2 slt $s2, $tt0, $s0 beq $s2, $0, .switch_escape_2 # switch performed by using jump table add $s0, $tt0, $tt0 add $s0, $s0, $s0 add $s0, $s0, $s2 lw $s2, 0($s0) jr $s2 L0: addi $tt0, $0, 0 j .switch_escape_2 L1: addi $tt0, $0, 2 j .switch_escape_2 L2: addi $tt0, $0, 1 j .switch_escape_2 L3: addi $tt0, $0, 0 j .switch_escape_2 .switch_escape_2: addu $ra, $0, $s7 jr $ra add $0, $0, $0 .data jt_0: .word L0, L1, L2, L3

Und obwohl es immer noch ziemlich kompliziert ist, macht es im Moment sogar Spaß.

Lernerei

Langsam geht mir diese Lernerei für die Compiler Construction-Klausur ziemlich auf den Keks. Eigentlich ist ja die Klausur nicht das Entscheidende, sondern daß es danach munter weitergeht mit Uni-Streß. Am Dienstag ist nicht nur Klausur, sondern auch Abgabe für das Differential Equations-Übungsblatt, am Donnertag ist dann das Übungsblatt für Compiler Construction dran und am Sonntag muß die Code Generation für den Compiler stehen. In solchen Zeiten fallen einem gleich tausend Dinge ein, die man lieber täte, auch wenn sie teilweise völlig überflüssig sind. Unter so "sinnvolle" Sachen wie mehr Zeit mit Liza oder Freunden zu verbringen, ins Kino zu gehen oder einfach nochmal ein Buch zu lesen, mischt sich dann so Zeugs wie AJAX und JavaScript lernen oder das Blog umbauen. JavaScript ist eine Programmiersprache, die eigentlich immer verabscheut habe und jetzt wäre ich sogar bereit sie zu LERNEN. Was Klausuren so alles mit einem anstellen können...

Cocoa

Während die Skripte für mein Machine Translation Seminar laufen (was SEHR lange dauern wird), will ich die Zeit nutzen und mir Cocoa ein wenig näher ansehen. Cocoa heißt die API in der man Programme für Mac OS X schreibt. Das ganze ist wohl in Objective-C implementiert, das soweit ich weiß eine Art Zwischending zwischen C und C++ ist. Allerdings gibt es auch eine Java-Variante von Cocoa, aber wenn man sich schon was neues beibringt, dann auch richtig ;-) Auf jeden Fall werde ich mir noch ein paar Seiten auf O'Reillys MacDevCenter ansehen. Bin ja mal gespannt, was mich da erwartet.