Neues Referenzbuch für Ruby

vom 26. February 2008

Auf RubyInside hab ich grade von dem neuen offiziellen Rubybuch "The Ruby Programming Language" gelesen. Nun gibt es endlich neben dem Pickaxe ein weiteres Referenzbuch.

Natürlich musste ich gleich nachschauen was das Buch kostet. Auf Amazon.com wird das Buch für $26 angeboten, was umgerechnet ca. 18€ entsprechen. Für diesen Preis wollte ich es natürlich gleich bestellen und bin auf Amazon.de. Doch hier kostet das gleiche Buch 40€! Wie kann so ein großer Preisunterschied entstehen?

Ich sehe es ja ein, das der Dollar in den letzten Monaten ziemlich bescheiden dasteht und das man die Preise etwas anpassen muss, aber gleich so drastisch? Wenn jemand eine Möglichkeit kennt das Buch bei Amazon.com ohne Kreditkarte zu kaufen würde ich mich sehr über einen Kommentar freuen.

5 Kommentare, delicious bookmark del.icio.us,


Neue Features

vom 20. February 2008

Ich hab die letzten Tage etwas an meiner Seite rumgespielt und ein Feature eingebaut, das ich schon sehr lange geplant hatte. Mein Ziel war es, meinen Content (sprich Blogeinträge, Artikel, Tutorials usw.) nicht nur wie üblich am Ende des Textes zu kommentieren, sondern auch Anmerkungen an einzelne Paragraphen zu kleben. Das Ganze hat mich ca. 200 Zeilen JavaScript (ohne Prototype wären es sicher doppelt so viel geworden), ein paar neue Methoden im ApplicationController und eine Menge Index-Schupserei gekostet.

Die Funktionsweise ist einfach: Jeder Absatz der eine gewisse Länge hat, erhält links einen grauen Balken, den man anklicken kann. Klickt man auf einen erscheint darunter die schon abgegebenen Anmerkungen (wenn es schon welche gibt) und ein Kommentarfeld. Jeder Absatz der Anmerkungen enthält wird durch ein kleines "Lesezeichen" markiert. Die Zahl steht für die Anzahl der Anmerkungen in diesem Absatz.

Genutzt werden kann dieses Feature für die unterschiedlichsten Dinge: Wenn ich Unsinn schreibe kann man mich direkt verbessern, falls jemand weitere Informationen zu einem Absatz kennt (eine URL, ein Zitat, eine Erweiterung, ...) kann man dies direkt an Ort und Stelle einfügen und natürlich lassen sich so auch Lobpreisung und Tadel im Text verankern.

Markus hat schon bemängelt, das das System keine Notifications für neue Anmerkungen vorsieht. Realisierungsvorschläge hierzu werden gerne angenommen. Mich würde jetzt interessieren, wie ihr diese neue Kommentartechnik findet. Ich habe versucht es so einfach wie möglich zu gestalten, so dass es einfacher ist als einen "normalen" Kommentar zu schreiben.

Ich freue mich auf Feedback.

Kommentar schreiben, delicious bookmark del.icio.us,


F# Tutorial #2

vom 13. February 2008

Andreas hat in seinem Blog ein interaktives F#-Tutorial gestartet, in dem er jedes mal eine kleine Aufgabe am Ende stellt. Da ich mich sowieso sehr gerne mit neuen (und alten) Programmiersprachen und -Konzepten beschäftige, kommt mir dies sehr gelegen (vielen Dank für die Tutorials!). (F# (F Sharp) ist eine funktionale Programmiersprache von Microsoft, die auf dem .NET-Framework aufsetzt. Compiler gibt es für Windows (Visual Studio) und Mono (Linux/OSX.))

Hier nun meine Lösung für die erste Aufgabe (Fakultätsfunktion "!" definieren) vom zweiten Blogeintrag:

#light

let rec ( ! ) (n : int) =
    if (n = 1) then n
    else n * !(n-1)

let endresult = !5
printfn "Die fakultaet von 5 ist %i" endresult

1 Kommentar, delicious bookmark del.icio.us,


Auserwählt?

vom 9. February 2008

Heute hab ich im Briefkasten einen merkwürdigen Brief entdeckt. Darin befand sich nur eine kleine blaue Sanduhr mit einem Zettel auf dem eine URL, und auf der Rückseite "Problems?" stand.

Image Alt Text

Die URL führt zu einer Präsentation mit einigen Rätseln. Nach etwas Recherche hab ich zwei weitere (der 10 Auserwählten) gefunden: Florian und Joerg. Die anderen heißen Alexander, Frank, Gollo, Hardy, Jan, Joachim und Markus. Florian hat die einfacheren Rätsel schon gelöst: Beispielsweise fühen die Koordinaten 48.856667°N 2.340833°E zu einer Brücke in Paris. Die Morsezeichen bei Folie a führen zu einem Wikipedia-Artikel.

Einige Aufgaben sind allerdings (noch) total nichtssagend. Beispielsweise 2D = 45 oder "Navfbfgvpgn abirzqrpvzchapgngn".

Meine Vermutungen: Die Folie 1 auf der eine Tabelle mit Einsen dargestellt ist verbindet die einzelnen Aufgaben anhand der Buchstaben. Eine andere Vermutung ist, das alle Lösungen irgend wie auf Orte bezogen werden kann und dies am Ende (wenn die Punkte in der richtigen Reihenfolge verbunden werden) ein Bild ergibt. (Vielleicht auch die Wohnorte von uns?). Also: Für alle, die auch eine Sanduhr bekommen haben sollten sich schnell melden :)

Von wem die Post stammt ist uns allerdings noch völlig unklar. Vielleicht verrät uns das die Lösung des Spiels. Nur dumm das ich momentan mitten in den Klausuren stecke und ich mich eigentlich mehr auf Verteilte Systeme II konzentrieren sollte.

Nachtrag: Es sieht so aus, als wäre ich geradewegs in ein ARG reingerutscht. Mehr Infos dazu gibts im Wiki und im IRC (irc.chat-solutions.org, #ARGR).

4 Kommentare, delicious bookmark del.icio.us,


Sinnloses Stöckchen, Level 16

vom 7. February 2008

Über eine lange, verworrene Bloggerkette bin ich über Markus auch ein Teil des sinnlosen Stöckchen geworden. Die Aufgabe:

  1. Nimm das nächste Buch in deiner Nähe mit mindestens 123 Seiten.
  2. Schlage Seite 123 auf.
  3. Suche den fünften Satz auf der Seite.
  4. Poste die nächste drei Sätze.

Das "näheste" Buch ist bei mir gerade "Generative Programming" von Czarnecki und Eisenecker:

It also states that important issues should be represented in programs intentionally (i.e., explicitly, declaratively, and with little or no "extra noise") and should be well localized. This facilitates unserstandability, adaptability, reusability, and the many other good qualities of a program because intentionality and localisation allow us to easily verify how a program implements out requirements. Unfortunately, the relevant issues are usually mutually dependent and overlapping because they all concern one common model (i.e., out program being constructed). Thus, if we try to represent all these issues explicitly and locally, we will introduce a lot of redundancies.

An meinem Nachttisch liegt grade "Getting Things Done" vom Großmeister David Allen. Auf Seite 123 steht:

You may find you have a tendency, while processing your inbasket, to pick something up, not know exactly what you want zo do about it, and then let your eyes wander into another item fatther down the stack and get engaged with it. That item may be more attractive to your psyche because you know right away what to do with it - and you don't feel like thinking about what's in you hand. This is dangerous terretory.

Und ganz im Sinne von "Dont Break the chain" reiche ich das Stöcklein weiter an Andreas, Florian, Rubn und kb.

Kommentar schreiben, delicious bookmark del.icio.us,


ETag

vom 4. February 2008

Ich habe mich heute wieder mal etwas mit Web-Caching beschäftigt und bin dabei auf eine sehr interessante Sache gestoßen: den ETag. Dieser ETag ist ein HTTP-Header der mit HTTP/1.1 eingeführt wurde. Mit ihm kann man feststellen ob sich der Content auf dem Server geändert hat, bevor man ihn herunterläd.

Da es dazu noch keinen deutschen Wikipedia-Artikel gab, hab ich schnell einen angelegt, so muss ich das ganze hier nicht noch einmal erklären :)

Das ganze funktioniert folgendermaßen (irb):

http = Net::HTTP.new('aaron-mueller.de', 80)
# <Net::HTTP aaron-mueller.de:80 open=false>

res = http.send_request('GET', '/rss')
# <Net::HTTPOK 200 OK readbody=true>
etag = res.header['etag']
# ""947e30c936""

res = http.send_request('GET', '/rss', nil, {'If-None-Match' => etag})
# <Net::HTTPNotModified 304 Not Modified readbody=true>
res.code
# "304"
res.body
# nil

Eine HTTP-Verbindung wird aufgebaut und eine GET-Anfrage gesendet. Die Antwort (response) enthält den Header ETag, den wir uns zwischenspeichern. Bei der zweiten Anfrage der gleichen Datei senden wir den Header If-None-Match mit dem zuvor gespeicherten ETag mit. Als Antwort erhalten wir einen 304-Statuscode, allerdings diesmal ohne body.

Moderne Webserver unterstützen das automatische Generieren und Anhängen eines ETags an jede Response. In LigHTTPd haben die Option den Prefix etag.* (Siehe Doku). Wenn der Webserver dies nicht unterstützt oder man nur bestimmte Anfragen mit den ETag verstehen will (oder man aber dynamischen Content hat statt statische Seiten) kann man die Header-Manipulation auch eine Stufe darüber (in der Scriptsprache seiner Wahl) erledigen. Hier ein Beispiel in PHP:

// Generate the ETag from the last Entry in the Database
$res = Entry::findAll('Entry', array(
    'order' => 'date DESC, id DESC',
    'limit' => 1
));
$etag = '"' . substr(md5($res[0]->date . $res[0]->title), 0, 10) . '"';
header("ETag: $etag");
        
// Check ETag
if (isset($_SERVER['HTTP_IF_NONE_MATCH']) &&
    $_SERVER['HTTP_IF_NONE_MATCH'] == $etag) {
    header('HTTP/1.0 304 Not Modified');
    die();
}

Wirklich genutzt wird dieses tolle Feature momentan leider nur bei Feed-Readern. Es wird langsam Zeit (HTTP/1.1 ist schon über 10 Jahre alt!) sowas unter den Reload-Button der Webbroser zu legen. Bei einem Klick kann statt einem kompletten Refresh der Seite nur eine Meldung ala "nothing changed" angezeigt werden. Das würde einiges an Traffic sparen.

Kommentar schreiben, delicious bookmark del.icio.us,


Die 15te Folge von Firefly

vom 26. January 2008

Serenity

Wie bitte? Mehr Firefly-Folgen? Nein es gibt keine zweite Staffel oder weitere (verfilmte) verborgene Folgen, doch neulich habe ich mehr durch Zufall das Drehbuch zur nie verfilmten 15ten Folge von Firefly mit dem Titel "Dead or Alive" gefunden. Schade das diese Folge nie verfilmt wurde, meiner Meinung nach ist es eine der besten Folgen.

Leider gibt es sonst nicht viel neues im Firefly Verse. fireflyseason2.com versucht immer noch eine zweite Staffel heraufzubeschwören, TheSignal bringt immer noch tapfer einen Podcast nach dem anderen raus und die Gerüchte über einen zweiten Teil von Serenity gehen auch weiter.

Keep flying.

2 Kommentare, delicious bookmark del.icio.us,


Columbus rollt wieder auf die Startbahn

vom 23. January 2008

Da der erste Start wegen einem defekten Sensor abgebrochen wurde, und dies in den letzten Wochen einiges an Analysen und Tests nach sich zog, war es sehr ruhig um den Start der STS-122 geworden. Der Sensor regelte die Abschaltung der Triebwerke wenn der Traibstofftank leer wird (deshalb heißt er auch EngineCutOff-Sensor). In den Tests musste der große orangene Treibstofftank immer wieder befüllt und anschließend geleert werden, um die Fehlerursache zu finden und den neuen Sensor zu testen. Das Problem wurde mittlerweile gefunden und behoben, der Start wurde auf den 7. Februar (21:45 UTC+1) gelegt.

ESA PR 05-2008. With NASA’s recent confirmation of the launch of Space Shuttle Atlantis on Thursday 7 February, ESA astronauts Hans Schlegel, of Germany, and Leopold Eyharts, of France, are set to deliver ESA’s Columbus laboratory to the International Space Station.

Kommentar schreiben, delicious bookmark del.icio.us,


SYNTAX ERROR Reis

vom 14. January 2008

Syntax error

Und ich dachte jetzt hat die Hochschule endlich mal Geld und kann sich einen neuen Monitor für die Anzeige der Speisekarte vor der Mensa leisten. (Oder läuft das über das Studentenwerk?) Seit ca. zwei Semestern tut der alte Flimmerkasten schon nicht mehr richtig. An manchen Tagen klebt nur ein handgeschriebener Fresszettel (vorsicht doppeldeutig :)) auf dem Monitor und oft muss man die Gerichte zwischen kryptischen Zeichen suchen. Neulich hat wohl der C64, der für die hochkomplexe Ausgabe zuständig ist, einen netten Syntax-Error in die Speisekarte eingeflochten. Da kommen alte Zeiten auf!

5 Kommentare, delicious bookmark del.icio.us,


Sprechende Boardcomputer

vom 6. January 2008

Ist das denn zu viel verlangt? Ich will doch nur Firefly zurück. Ich kann sie nicht mehr sehen, die SciFi-Serien in denen der Boardcomputer reden kann, selbst denkt, sich störrisch und wiederwillig benimmt und anfängt Befehle zu verweigern weil er es nicht für ethisch korrekt hält.

Ich versteh ja, das Schiff ist auch ein Teil der Crew, aber muss es denn gleich per Spracheingabe gesteuert werden? Und mit Spracheingabe meine ich natürlich Befehle wie "Los, mach schon den Lüftungsschacht auf, sonst entferne ich dir deine Neuronaldatenbank!". Das muss man sich mal auf der Zunge vergehen lassen: Der Schiffscomputer weiß genau, welcher Lüftungsschacht gemeint ist (Hellseher?), hat Angst (Gefühl) um sein Wissen und kann das komplette Schiff steuern (absolute Macht). Wenn man es objektiv betrachtet ist das grob fahrlässig. Der Boardcomputer hat die absolute Kontrolle über alles und wenn er nen schlechten Tag hat dreht er eben mal die Sauerstoffzufuhr etwas runter. (Ich sag nur DarkStar ("Hier ist Sargend Pinback, Bombe kannst du mich hören?"), WarGames, Red Planet, 2001: Odyssee im Weltraum, ...)

Neulich hab ich wieder einen Anlauf mit der Serie Starhunter 2300 gestartet, welche eigentlich nicht schlecht klingt wenn man sich ein paar Sachen auf Wikipedia und den Fanpages durchliest. Doch schon in der Pilotfolge fangen die Diskussionen mit dem Boardcomputer an. Danach war mir klar, das war die erste und letzte Folge die ich mir davon angesehen habe.

Ich steh auf Realismus. Klar SciFi ist nicht echt und alles andere als mathematisch Beweisbar, doch fordere ich schon etwas Logik die einen glauben lässt das es evtl. so funktionieren könnte. Deshalb war (und bin) ich ein großer FireFly, Stargate (SG1|Atlantis), StarTrek Enterprise und Babylon5 Fan, da in diesen Serien alles logisch zusammenpasst.

Die absoluten NoNo's sind für mich Serien wie LEXX - The Dark Zone (das abartigste schlechthin) oder StarHunter 2300. Wer also noch eine SciFi-Serie ohne Boardcomputer, coolem Schiff und lustiger Crew kennt, nur raus damit :)

9 Kommentare, delicious bookmark del.icio.us,