Es gibt … Nudeln mit Tomatensauce!

Warum? Das Ergebnis ist überaus delikat und die Zubereitung dauert genau so lange, wie das Kochen der Nudeln, plus 3 – 5 Minuten für die Vorarbeiten. So geht’s:

Pro Person 100g Nudeln, 1 Liter Wasser und – GANZ WICHTIG – zwei Teelöffel Salz.

Nudeln mit Tomatensauce

Parmesan (so etwa 50-100g), ein bis zwei Handvoll Tomate, bisschen Ölivenöl.

Nudeln mit Tomatensauce

Tomaten kleinschneiden und Parmesan reiben.

Nudeln mit Tomatensauce

Wasser mit Salz kochen, Nudeln hinein.

Nudeln mit Tomatensauce

Zeit mit der Sauce zu beginnen.

Nudeln mit Tomatensauce

Olivenöl in einer GROSSEN Pfanne erhitzen.

Nudeln mit Tomatensauce

Parmesan zugeben und kurz anbraten.

Nudeln mit Tomatensauce

Es bilden sich interessante Käsecluster.

Nudeln mit Tomatensauce

Mit einer Kelle Nudelwasser ablöschen, weiter rühren, bis sich die Käsecluster wieder aufgelöst haben.

Nudeln mit Tomatensauce

Tomaten hinzufügen…

Nudeln mit Tomatensauce

…und mitdünsten.

Nudeln mit Tomatensauce

Noch ein bis zwei Kellen …

Nudeln mit Tomatensauce

… Nudelwasser hinzugeben.

Nudeln mit Tomatensauce

Das Ganze kommt einem jetzt etwas suppig vor, das macht aber nix.

Nudeln mit Tomatensauce

Nudeln abgießen…

Nudeln mit Tomatensauce

… ab in die Pfanne …

Nudeln mit Tomatensauce

…und mit der Sauce mischen.

Nudeln mit Tomatensauce

Sie saugen sich voll.

Nudeln mit Tomatensauce

Fertig!

Nudeln mit Tomatensauce

Noch mehr Parmesan sowie frischer Pfeffer tun ein Übriges.

Nudeln mit Tomatensauce

Das Rezept erlaubt etliche Variationen. Z.B. kann statt der ersten Kelle Nudelwasser Weißwein den Käse ablöschen. Die Tomate können durch frischen Chili ergänzt werden, in welchem Fall zum Schluss auch frische Petersilie prima passt. Oder die Tomaten werden gänzlich durch Zucchini ersetzt, die dann wiederum von Thymian und Zitronensaft verfeinert werden, oder … Hauptsache die Nudeln sind nicht zu weich.

Guten Appetit 😉

Lucía

Lucía

Lucía asked for pictures for her job application. In germany it is common to send a photo attached to your cv, so we tried something serious.

Camera Model: Nikon D90
Lens: Nikon AF-S DX Nikkor 18-105mm 1:3.5-5.6G ED VR
Focal Length: 30.00 mm
Focal Length (35mm Equiv): 45 mm
Exposure Time: 1/160 sec
F-Number: f/11
Shooting mode: Manual
Exposure bias: 0 EV
Flash: Yes
ISO: 100
Image at flickr, large version

How to enable Server Name Indication (SNI) on Debian Lenny

Server Name Indication (SNI) on Debian Lenny is easy to implement. OpenSSL is already SNI-capable, only the Apache Webserver is a bit outdated. So lets backport Apache >= 2.2.12 to Lenny. Here is my little step-by-step howto:

Install a compiler an the debian dpkg-Development Environment:

To build apache, you will nee libcap2-dev and autoconf too:

…and the build dependencies for apache2:

Download the Apache 2.2.14 sources for the current testing release from http://packages.debian.org/source/squeeze/apache2:

Extract the source packages:

Compile the package:

(-us and -uc supresses the digital signature, fakeroot allows to set the ownership of the archived files to root, even if you are not root currently)

Install the desired apache packets:

Finally, remove the packages you installed to build the apache2-packages.

Jetzt noch sicherer

20091109_https

Dieses Blog ist jetzt auch über https erreichbar und damit noch sicherer 😉 Der geneigte Leser mag bitte auf den Link klicken und ggf. in den Kommentaren Feedback hinterlassen, ob beim Aufruf der Seite ein Zertifikatsfehler angezeigt wird. Vermutlich trifft das User mit dem Internet Explorer unter Windows XP (*). Vielen Dank!

(*) Ja, SSL für Arme mit SNI, aber dafür mit „richtigem“ Kostenloszertifikat von StartCOM.

Surfterminal mit Linux

Wenn man einen Rechner im öffentlichen Raum als Browserterminal bereitstellen will, gibt es hauptsächlich die Anforderung, dass die User keine privaten Daten hinterlassen und am System so wenig wie möglich verstellen.

Es gibt verschiedenste Lösungen für diesen Zweck, fertige Linux-Distributionen oder spezielle Internet-Café Software, die Windows-Rechner so abschottet, das man noch nicht mal einen Explorer aufbekommt.

Für die beiden vom Freifunk betriebenen Surfterminals habe ich eine extrem simple Lösung gewählt. Die Rechner verrichten seit etlichen Monaten ohne Probleme ihren Dienst, obwohl es in den Kneipen schon etwas rauher zugeht.

Zunächst wird auf den Rechner die Linux-Distribution der Wahl installiert. Ich verwende Ubuntu, aber darauf kommt es nicht an. Es werden zwei Benutzer eingerichtet: ein administrativer („tresen“) und ein unpreviligierter („gast“). Achtung, bei Ubuntu ist der erste, bei der Installation eingerichtete User ein previligierter User (mit sudo-Rechten). Also erst „tresen“ und dann „gast“ einrichten und hinterher nochmal die /etc/sudoers überprüfen.

Man loggt sich zunächst als „gast“ ein und richtet den Browser so ein, wie man es gerne für die Gäste hätte: Adblocker, keine Cookies und Passwörter speichern, Startseite ect. Die Startseite für den Browser zeigt in unser Wiki, die Kneipengäste können dort dann eigene Links ablegen und so die Startseite etwas nach ihren Bedürfnissen anpassen. Der Webbrowser wird als Autostart-Applikation eingerichtet (System -> Preferences -> Sessions -> Startup Programs). Dann loggt man sich als „tresen“ ein und richtet den Anmeldungsmanager so ein, dass „gast“ beim Rechnerstart automatisch eingeloggt wird.

Jetzt kommt der interessante Teil: das Script pack_guest.sh verpackt das Home-Verzeichnis vom Gastuser in eine .tar-Datei:

Dieses Script ruft man einmalig auf und findet dann in /home/tresen/Surfstation die Datei gast_home.tar.gz. Dieses Template kann nun immer ausgepackt werden, wenn der Rechner startet. Das erledigt das Script unpack_guest.sh:

Jetzt muss man nur noch dafür sorgen, dass dieses Script bei jedem Bootvorgang ausgeführt wird. Eine Zeile in /etc/rc.local genügt:

[Update] (12.11.09): Mir ist gerade aufgefallen, dass es mit Upstart zu einer Race-Condition kommt. Es ist einfach nicht definiert, wann das Script unpack_guest.sh ausgeführt wird und das führt zu sehr merkwürdigen Effekten.

Wenn man also eine Distribution mit Upstart verwendet (z.B. Ubuntu 9.10 „Karmic Koala“ oder später), muss man den Aufruf des unpack_guest.sh Scriptes im Upstart-System vor den gdm legen. Entweder man definiert einen eigenen Dienst oder man fügt das Script als pre-start Script in /etc/init/gdm.conf ein:

[/Update]

Mir gefällt an diese Lösung, dass wir damit absolut keine Arbeit haben. Die einzigen Probleme sind Hardwareschäden, also wenn wiedermal Bier über die Tastatur gekippt wurde. Das System an sich läuft aber nahezu wartungsfrei. Man muss sich halt alle paar Monate (idealerweise remote) einloggen und die fälligen Updates einspielen.

Schnelle Übersetzung im Safari

Ich lese viel englische Texte und bin dank „Finer Things in Mac“ auf ein Feature gestoßen, das mir beim Lesen sehr weiterhilft: der Shortcut CTRL + CMD ⌘ + D.

Dictionary.appDamit kann man in jeder Cocoa-Applikation (z.B. Safari) das Wort unter dem Mauscursor im Mac OS X eingebauten Wörterbuch nachschlagen. Als Standard wird das New Oxford American Dictionary mitgeliefert, das nur von Englisch nach Englisch „übersetzt“. Zum Glück gibt es Abhilfe: das BeoLingus Dictionary-Plugin Deutsch/Englisch ermöglicht die Übersetzung von Englisch nach Deutsch und umgekehrt.

Nach der Installation des Plugins und dem Neustart der Dictionary-Anwendung muss jetzt nur das Deutsch/Englisch Wörterbuch als erstes Wörterbuch festgelegt werdem. Dieses wird bei CTRL + CMD ⌘ + D verwendet, die anderen Wörterbucher sind Fallback, wenn das Wort nicht gefunden wird. Die bevorzugte Reihenfolge der Wörterbücher kann man in den Einstellungen von Dictionary.ap festlegen. Einfach das „German-English“ Wörterbuch vom Ende der Liste an den Anfang der Liste ziehen…

Dictionary Settings

…und schon muss man nie wieder die Anwendung wechseln, nur um ein Wort nachzuschlagen:

Dictionary

Hello World!

Hello World

Now we’ve got two sons. Our youngest is ten days old now.

Camera Model: Nikon D90
Lens: Nikon AF-S DX Nikkor 18-105mm 1:3.5-5.6G ED VR
Focal Length: 105.00 mm
Focal Length (35mm Equiv): 157 mm
Exposure Time: 1/60 sec
F-Number: f/5,6
Shooting mode: Aperture priority
Exposure bias: 0 EV
Flash: Yes
ISO: 200
Image at flickr, large version

Learning to fly

Learning to fly

From a portrait session with our neighbours. We did some "traditional" portrait stuff and later we had the idea of throwing her into the air… So, don’t try this at home! Throwing the kids is not the difficult part, ykwim? 😉

Camera Model: Nikon D90
Lens: Tokina 12-24mm 1:4 DX
Focal Length: 12.00 mm
Focal Length (35mm Equiv): 18 mm
Exposure Time: 1/320 sec
F-Number: f/8,0
Shooting mode: Shutter priority
Exposure bias: 0 EV
Flash: Yes
ISO: 200
Image at flickr, large version

Besserer Maschinencode mit clang

LLVM ist das nächste große Ding. Nach all den Jahren, wo man es hingenommen hat, dass der gcc so ist, wie er ist und man heimlich denkt, dass der Microsoft Visual C++ Compiler doch irgendwie besser war, taucht plötzlich LLVM mit clang im Gespann auf und schickt sich an die Welt zu erobern.

Wer von LLVM noch nie etwas gehört hat, dem kann ich einen ganz wunderbaren Podcast empfehlen. Kurz gesagt: die Low Level Virtual Machine ist eine Compiler Infrastruktur, ein Compiler-Baukasten. Es gibt verschiedene Frontends, die aus unterschiedlichen Eingabesprachen (z.B. C, Objective C, Fortran, in Ansätzen auch C++ ) einen Bytecode generieren. Dieser Bytecode wird optimiert und im letzten Schritt mittels eines Backends in nativen Maschinencode für eine konkrete Architektur übersetzt.

Diese Verarbeitung ist nicht etwa tief im Compiler verborgen, sondern kann ganz praktisch mittels Pipes zusammengebaut werden:

Neben dem Satz an Standard-Optimierungen kann man sich noch mehrere Dutzend Spezial-Optimierungen die heraussuchen, wenn man denkt, dass das eigene Programm die nötig hat. Optimierungen kosten natürlich Zeit und so ist man eher geneigt während der Entwicklung wenige Optimierungen zugunsten schneller Compilerzeiten zu wählen, während man im Release-Stadium mehr Optimierungen wählt um die Performance zu optimieren.

Natürlich möchte man nicht in all seine Makefiles jetzt auf solche Pipe-Orgien umstellen. Es gibt zum Glück ein „drop in replacement“ für den gcc: clang. Man muss nur noch an einer Stelle im Makefile die gcc-Definition durch clang ersetzen – fertig. Alle Parameter werden verstanden, Compiler-Parameter übernommen – so unkompliziert, dass man nur noch staunen kann:

Seit dem Podcast zu LLVM nagt in meinem Kopf die Idee, das ganze im aktuellen Projekt zu testen. In den beiden letzten Mobile Macs Sendungen war clang ebenfalls Thema, was dazu führte, dass heute das LLVM-Virus bei mir ausgebrochen ist 😉

Ich habe also das aktuelle Projekt (365.000-Zeilen C-Code) genommen und genau eine Zeile im Makefile geändert. Und es lief ohne Probleme. Ok, ich habe noch einen Fehler in unserem Makefile gefunden, aber dafür kann ja clang nichts. Die absolut problemlose Umstellung hat mich schon überrascht.

Aber warum sollte man dem gcc untreu werden, was bringt einem clang konkret? Da wären zunächst aussagekräftige Warnungen. Ich liebe Warnungen und predige bei jeder Gelegenheit wie wichtig es ist, auf die Warnungen vom Compiler zu hören. Das ist immer der Moment, in dem die Kollegen plötzlich etwas wichtigeres zu tun haben … 😉 clang spuckt Warnungen aus, mit denen man wirklich etwas anfangen kann:

Dagegen die Meldung vom gcc:

Dann wäre noch das Thema Performance. Es gibt Aussagen wie „OpenSSL wird 10% schneller“ (letzte MM-Sendung). Das macht schon neugierig und ich werde in der nächsten Woche auf jeden Fall ein paar Benchmarks durchführen um dem auf den Grund zu gehen. Jede Anwendung ist anders und bei unserem Projekt muss man erstmal sehen, was es wirklich bringt.

Wenn man aber „einfach so“ mehr Performance erhält, ist das ein hoch interessantes Thema. Ein Kunde von uns lastet mit unserer Anwendung eine 8-Core Maschine voll aus. Aufgrund gesteigerter Datenmengen wird diese Maschine bald zu klein sein. Wenn wir ihm sagen können „behalte Deinen Hobel, wir haben noch ordentlich etwas rausgeholt“ ist das für den Kunden natürlich ein Gewinn. Er kann die Hardware länger nutzen und spart Mirgrationskosten. Für uns ist das eher schlecht, weil wir am Lizenzupgrade nichts verdienen … aber ich bin Techniker und kein Verkäufer 😉

Maulbronn Abbey (3)

Maulbronn abbey

This is my favorite of the series.

Camera Model: Nikon D90
Lens: Tokina 12-24mm 1:4 DX
Focal Length: 12.00 mm
Focal Length (35mm Equiv): 18 mm
Exposure Time: 1/60 sec, 1/20 sec, 5 sec
F-Number: f/4,0
Shooting mode: Manual
Exposure bias: 0 EV
Flash: No
ISO: 100
Image at flickr, large version

Maulbronn Abbey (2)

Maulbronn abbey

The same spot, but another view.

Camera Model: Nikon D90
Lens: Tokina 12-24mm 1:4 DX
Focal Length: 12.00 mm
Focal Length (35mm Equiv): 18 mm
Exposure Time: 1/13 sec, 1/2 sec, 2 sec
F-Number: f/4,0
Shooting mode: Manual
Exposure bias: 0 EV
Flash: No
ISO: 100
Image at flickr, large version

Maulbronn Abbey

Maulbronn Abbey

The sun-rays are faked 🙂

Maulbronn Abbey is the best preserved medieval Cistercian monastery complex in Europe. (more)

Das Kloster Maulbronn gilt als die am besten erhaltene mittelalterliche Klosteranlage nördlich der Alpen. Hier sind alle Stilrichtungen und Entwicklungsstufen von der Romanik bis zur Spätgotik vertreten. (mehr)

Camera Model: Nikon D90
Lens: Tokina 12-24mm 1:4 DX
Focal Length: 12.00 mm
Focal Length (35mm Equiv): 18 mm
Exposure Time: 1/1600 sec, 1/400 sec, 1/100 sec, 1/25 sec, 1/6 sec, 0,8 sec
F-Number: f/5,0
Shooting mode: Manual
Exposure bias: 0 EV
Flash: No
ISO: 100
Image at flickr, large version

Eternal Twins

Eternal Twins

The title is inspired by this song 😉

Camera Model: NIKON D90
Lens: Nikon AF-S VR 70-200mm/2.8G IF-ED
Focal Length: 200 mm
Focal Length (35mm Equiv): 300 mm
Exposure Time: 1/500
F-Number: f/5,6
Shooting mode: Aperture priority
Exposure bias: -1/3 EV
Flash: No
ISO: 400
Image at flickr, large version

Pages: <<< 1 2 3 ... 6 7 8 9 10 ... 96 97 98 >>>