3D Visualisierung mit Gnuplot

Für Morgen Nachmittag im Modul Complex Processes müssen wir eine kleine Simulation (lineare Pólya-Prozess) visualisieren. Geschrieben hab ich das ganze recht schnell in Ruby, aber wie visualisiere ich das?

Gnuplot to the rescue!

Gnuplot kann natürlich auch 2 dimensionale Plots darstellen, und mit dem splot Befehl kann man das ganze auch noch drehen und wenden wie man will.

3dgnuplot

Gnuplot erwartet die Daten in einem sehr einfach Format, pro Zeile einfach die 3 Koordinatenpunkte:
2 0.0 0.0
2 0.01 0.227654469106179
2 0.02 0.642171565686863
2 0.03 0.936712657468506
2 0.04 0.900219956008798
...

Danach in der Gnuplot-Shell splot "data" und fertig, so einfach ist es.

Für die, die es bunt mögen, gibt es natürlich auch eine Möglichkeit.

3 comments »

Directory Listing in Subdirectory mit mod_python

Ausgangslage: Ein Server, bei dem / unter der Herrschaft von mod_python steht, z.B. weil primär Trac drauf läuft.

Problem: Ein Unterverzeichnis /releases soll ein Directory Listing anzeigen.

Lösung:
<Location /releases/>
   SetHandler None
</Location>

Und daran denken, dass None case-sensitive ist (dazu kommt natürlich noch, dass Indexes auch erlaubt sind, etc.).

No comment »

Gelesen: Aus der unmittelbaren Unwirklichkeit

Ein unglaubliches Buch, und wenn ich daran zurückdenke bin ich immer noch ganz verstört. Geschrieben vom 27 jährigen tuberkulosekranken M. Blecher, der 2 Jahre darauf verstarb. Ich weiss nicht, ob ich genug Worte finde, um das Buch angemessen zu beschreiben. Zum einen gibt es keine Handlung im gesamten Buch. Auch praktisch keine Dialoge, das ganze ist ein teilweise zusammenhangsloser innerer Monolog einer unbekannten Person, ein Junge, welche in irgendeiner Stadt wohnt, wenig Freunde hat und den ganzen Tag rumsträunt und sich in seinen Gedanken verliert.

Der Junge ist keine normale Person, kann man wohl sagen. Er sieht in den banalsten Dingen des Alltags unglaubliches und verliert sich darin, in fast allem sieht er Elend. Einmal taucht er in eine Pfütze von Schlamm:

Die Menschen und Dinge waren aus eben diesem Mist und Urin hervorgeschossen, in denen ich meine sehr konkreten Schuhe versenkte. Vergebens hatten die Menschen sich in ihre weisse samtige Haut eingewickelt und sich mit Stoffkleidern umhüllt. Vergebens…vergebens…In ihnen lag unerbittlich, zwingend und elementar der Schlamm, der warme, fette und faulige Schlamm. Die Langeweile und der Stumpfsinn, mit denen sie ihr Leben anfüllten, zeigten dies zur Genüge.

Phu, die Erinnerung genügt, und es schaudert mich erneut. Ein unglaubliches Buch. Es ist schwer zu beschreiben was daran so gut ist, ich denke, man muss es einfach lesen.

Meine Bewunderung gilt auch dem Uebersetzer, der das Buch ins Deutsche geholt hat (das Original ist Rumänisch, soviel ich weiss).

Hier noch ein paar Rezensionen.

Von meinen Kollegen kommt mir eigentlich nur einer in den Sinn, welcher dieses Buch lesen sollte. Roland, falls du das liest, du bist gemeint! Ich schenk dir das Buch, wenn wir danach mal zu einer Flasche Wein zusammensitzen und darüber diskutieren. Melde dich. In der Zwischenzeit werde ich mal Blechers spätere Bücher lesen.

5 comments »

Tipps fürs Abstract

Ich kämpfe momentan gerade etwas mit dem Abstract zu meinem Seminarpaper, und dachte, ich könnte doch ein paar Tipps aus Bugs in Writing weitergeben.

Das Abstract soll

  • kurz, klar und “directly to the point” sein.
  • nicht im Passiv geschrieben sein.
  • annehmen, dass der Leser müde, gelangweilt und unter Zeitdruck ist.
  • nur die Highlights hervorheben, keine Details.

So, und nun viel Spass beim weiterschreiben.

2 comments »

Gelesen: Diverses!

Da sich einige Leute schon sorgen machen um mich, da ich schon lange nichts mehr gelesen hätte, hier ein kleines Update:

  • Worlds: Controlling the Scope of Side Effects, ein Paper unter anderem von Alan Kay (ja der ist immer noch aktiv) über sogenannte Worlds, so was ähnliches wie eine Transaktion, aber für Programmzustand. Ziemlich interessant, kompakt und einfach geschrieben.
  • Verifiable Functional Purity in Java, ein Technik um zu beweisen, ob eine Methode in Java functionally pure ist, das heisst, die Methode darf nichts am Objekt selbst, nichts an den Parametern, gar nichts sonst irgendwo im System und muss für eine (gleiche) Menge Parameter immer dasseble Resultat liefern, darf also auch nicht von der Systemzeit oder so abhängig sein. Sobald man dies beweisen kann, lassen sich interessante Dinge damit anstellen, um beispielsweise zu zeigen, dass etwas reproduzierbar ist oder wenn es sich um Code aus unsicheren Quellen handelt.

Wer sich für solche Dinge interessiert sollte unbedingt den Feed von Lambda the Ultimate abonnieren. Alles was dort kommt ist (für mich zumindest) entweder interessant, oder aber viel zu hoch. :-)

No comment »

Heute Abend: Giacobbo und Müller

Heute Abend startet die Herbststaffel von Giacobbo / Müller, um 21:50, wie immer auf SF1. Nicht verpassen!

No comment »

Schöne Graphen zeichnen

Mit Latex kann man nicht nur sehr schöne Dokumente erstellen, auch die zugehörigen Illustrationen sehen genial aus. Kürzlich habe ich das Vaucanson-G-Paket entdeckt, welches auf PSTricks aufsetzt, aber die Dinge noch ein weniger einfacher macht. Ein NFA mit 3 Zuständen beispielsweise, entsteht mit nur diesen Zeilen Code:

\begin{VCPicture}{(0,0)(1,1)}
\FinalState[q_{1}]{(2,1)}{q1}
\State[q_{2}]{(0,-1)}{q2}
\State[q_{3}]{(4,-1)}{q3}
\Initial{q1}
\ArcR{q1}{q2}{b}
\ArcR{q2}{q3}{a,b}
\ArcL{q1}{q3}{\varepsilon}
\ArcL{q3}{q1}{a}
\LoopW{q2}{a}
\end{VCPicture}

Und sieht folgendermassen aus:

Natürlich muss man sich bei der Platzierung bereits im Vorfeld ein paar Gedanken machen, automatisch gelayoutet wird nämlich nicht. Allerdings lassen sich dazu Hilfslinien und ein Raster einblenden, was das ganze wiederum ziemlich vereinfacht.

Auch aufwändigere Dinge gehen ziemlich gut, so beispielsweise dieser Program Dependence Graph, den ich für meine Seminararbeit gezeichnet habe:

5 comments »

Gelesen: Flatland: A Romance of Many Dimensions

Ein absolut geniales und total liebenswertes Buch, und so beginnt es:

I CALL our world Flatland, not because we call it so, but to make its nature clearer to you, my happy readers, who are privileged to live in Space.

Genau davon handelt es: Der Protagonist, A. Square, ist—wie der Name schon sagt— ein Quadrat und lebt in einer 2-dimensionalen Welt. In einer sehr lebhaften Erzählung führt einen A in die Kultur und die gesellschaftlichen Probleme von Flatland ein, bis man sich lebhaft vorstellen kann, wie Quadrate, Dreiecke, andere Polygone und Kreise miteinander leben. Bis dann irgendwann plötzlich, eine Kugel aus der dritten Dimension Kontakt mit A aufnimmt (bzw. sich so mit seiner 2D-Welt schneidet, dass A ihn sieht), und ihn sogar mit auf eine Reise in den Raum nimmt. Zurück in Flatland glaub ihm jedoch keiner, dass es noch eine dritte Dimension geben soll, nicht mal sein Enkel, ein Hexagon, kann seine Erklärungen glauben:

“I take this Square,” and, at the word, I grasped a moveable Square, which was lying at hand—”and I move it, you see, not Northward but—yes, I move it Upward—that is to say, not Northward, but I move it somewhere—not exactly like this, but somehow—”

Tja, und was passiert? Er wird vor Gericht gestellt und natürlich eingesperrt. Zwischendurch stattet A dem König von Lineland noch einen Besuch ab, welcher aber nicht sonderlich erfreut ist:

But thou, whence intrudest thou into my realm of Lineland?

Flatland ist ein unglaublich faszinierendes Buch, auch wenn man vielleicht mit der Sprache etwas Mühe haben kann—es wurde immerhin vor über 120 Jahren geschrieben! Das schöne ist, man muss es nicht mal kaufen, der ganze Text ist auf WikiSource vorhanden.

1 comment »

SMS senden leicht gemacht (Orange)

Gibt es was mühsameres, als die unsäglichen Browser-SMS-Versende-Dienste unserer Mobilfunkanbieter? Naja, wahrscheinlich gibt es schlimmeres, aber verbessern kann man es ja trotzdem. Das Ziel ist, möglichst einfach SMS zu versenden, also schreiben wir doch ein Script, welches als Parameter Nummer und Text entgegennimmt und versendet.

Ist eigentlich ganz einfach, Mechanize mimt einen Browser und macht genau das, was auch ein Mensch tun würde, also anmelden, Formularfelder ausfüllen und abschicken:

#!/usr/bin/ruby
require 'mechanize'

username = 'mirkostocker'
password = 'XXXXXXXXXXXX'
number   = ARGV.shift
message  = ARGV * " "

if message.length > 144 || message.length < 1
  $stderr.puts "Nachricht zu lang oder zu kurz.."
  exit 1
end

def find_form_with_field(page, fieldname)
  page.forms.each do |form|
    if form.fields.find{|f| f.name == fieldname}
      yield form
    end
  end
end

WWW::Mechanize.new do |agent|

  agent.get('https://www.orange.ch/footer/login') do |page|

    find_form_with_field(page, 'username') do |f|
      f.username = username
      f.password = password
      f.submit
    end
  end

  agent.get('https://www.orange.ch/myorange/sms') do |page|

    find_form_with_field(page, 'messageInput') do |f|
      f.destinationNumberInput = number
      f.messageInput = message
      f.wui_target_id = 'sendButton'
      f.wui_event_id = 'onclick'
      f.submit
    end
  end
end


find_form_with_field musste ich schreiben, da die Formulare keine Namen besitzen, und fragt mich nicht, weshalb ich wui_target_id und wui_event_id setzen muss, im echten Browser wird das per Javascript gemacht und ist anscheinend wichtig. Hat auch gleich die Projektdauer um 50% verlängert, auf rund 1.5 Stunden.

So, und wer kümmert sich um die Swisscom und Sunrise?

Guido: Wie du siehst habe ich einen netten Weg gefunden, bunten Code zu bloggen, der beste Editor der Welt hat nämlich eine TOhtml Funktion.

6 comments »

TV Tipp zum Wochenende Sonntagabend: Tatort

Und auch nicht von TV Total, sondern von mir (und leider auch ohne Ingrid und Klaus).

Und zwar läuft heute die Erstausstrahlung einer neuen Folge meines Lieblings-Kommissars Frank Thiel und seinem Rechtsmediziner Prof. Karl-Friedrich Boerne (Jan Josef Liefers) im ARD, um 20:15. Also, an alle die glauben, der Tatort sei nur was für Senioren, schaut mal rein, es lohnt sich bestimmt.

2 comments »