Banana Walnut Muffins

Montag, 18. August 2014 02:08 von Christoph

Versprochen ist versprochen und wird auch nicht gebrochen :). Hier nun bewegte Bilder der Spiegelreflex. Aber nicht irgendwelche mit der Videofunktion! Natürlich mit Impulsgeber, eingestellt auf 3 Sekunden und zusammengefügt zu einem Zeitraffer mit ffmpeg.

Es geht um Bananen-Walnuss-Muffins nach einem Rezept von Cynthia Barcomi (natürlich!). In der Zutatenübersicht im Video fehlen Nelken, aber ich wollte es nicht nochmal komplett neu timen und rendern, nachdem es bereits fertig war. Einfach dazudenken.

Blaubeeren aus Brandenburg

Sonntag, 20. Juli 2014 02:07 von Christoph

Ich hatte es ja schon ganz trendy getwittert: die Blaubeeren stehen seit einigen schlechten Jahren mal wieder ganz gut in 2014. Zumindest wenn man weiß wo :). Die Familie weiß das. Kurz vor dem Spreewald. Also nix wie hin und losgepflückt! Am Ende waren es dann 1,5 kg. Klar, da treibt der Aufwand den Preis pro Kilo etwa auf 15€ aber hey, auf den Spaß kommt es an. Selbstgepflückt schmeckt es eh viel besser und mit den gezüchteten Beeren aus dem Supermarkt sind naturbelassene Wildbeeren nicht zu vergleichen. Außer vielleicht, wenn man auf Wasserballons steht.

Hier ein paar Eindrücke in Spiegelreflex:

Ich habe mir übrigens einen Impulsauslöser für meine neue Canon gekauft. Hoffentlich kann ich damit demnächst mal was sehenwertes anstellen und hier etwas Bewegung reinbringen.

Nachtrag 04.08.2014 (letztes Foto): Habe nach dem Rezept von Cynthia Barcomi amerikanische Pancakes ausprobiert - mit dem Geheimtipp, die Eier zu trennen und das Weiß steifgeschlagen unterzuheben. Gott, war das ein Volumen. Viel zu viel für mich. Habe mich dem überragenden Geschmack mit Blaubeermarmelade geschlagen geben müssen.

MusicDb v1.0 veröffentlicht

Sonntag, 23. März 2014 12:00 von Christoph

Man hat ja über die Jahre so eine Musiksammlung auf dem PC angelegt und zwischenzeitlich auch mal vergessen, was man in grauer Vorzeit alles mochte. Vor bereits etwa 12 Jahren habe ich dazu das Konsolenprogramm "listmp3" geschrieben, das die Dateien in einem Verzeichnis in eine schicke HTML-Übersicht formatiert. Über das Auslesen der ID3-Tags (eingebettete Meta-Daten wie Interpret und Album) hatte ich einen Artikel im PC Magazin verfasst.

Nun, nach so langer Zeit, habe ich MusicDb v1.0 als Quasi-Nachfolger veröffentlicht. Natürlich ist alles viel besser!1!! Aber im Ernst - da ich mich weiterentwickelt habe, ist in MusicDb nur noch wenig vom alten Programm übergeblieben. Eigentlich nur noch die Idee von der HTML-Übersicht. MusicDb ist eine Windows-Anwendung und indiziert Verzeichnisse in eine Sqlite Datenbank. Die Meta-Daten dafür extrahiert die Taglib und für das Vorhören per Doppelklick ist die BASS-Bibliothek zuständig.

Für mehr Interaktion ist nun ein Webserver integriert, nämlich Civetweb. Im Browser wird es dann richtig interessant. Ein HTML5-Frontend erlaubt die rasend schnelle Suche nach Datennamen oder Bestandteilen der Meta-Daten (das Backend ist C++ via Civetweb). Dank HTML5-Audio lassen sich Suchergebnisse in Playlisten einordnen und da es sich um einen Webserver handelt auch auf anderen PCs im Netzwerk anhören. Fast schon ein richtiger Mediaserver!

MusicDb ist ein Experiment, wie sich die Programmierung bei mir in 12 Jahren verändert hat. Die Sprache ist immernoch die Gleiche: C++, sonst ist aber alles anders. Open-Source wird viel stärker eingesetzt, in MusicDb allein 7 Bibliotheken. Eine sinnvolle Architektur zur Integration ist viel wichtiger geworden als die Ersterfindung des Rades. Diese Form von Komplexitätsbewältigung erlaubt die Konzentration auf das, was wirklich wichtig ist: coole Features.

Doch genug philosophiert. MusicDb gibt es hier zu Download: https://christoph.stoepel.net/ViewSoftware.aspx?id=0126

Pizza deluxe vom Pizzastein

Dienstag, 25. Februar 2014 11:38 von Christoph

Hier ein paar Tipps und Erfahrungen für's Pizzabacken. Ein guter Teig ist einfach und nur etwas langwierig in der Zubereitung. Ich mache immer den von Chefkoch.de, nehme allerdings nur die Hälfte der Zutaten und lasse ihn nur eine Nacht liegen. Bei mir reicht das für 4 mittelgroße oder 8 Minipizzen. Die Verwendung von Pizzamehl (zum Beispiel von Gustini) kann ich empfehlen. Der Teig ist damit viel leichter zu formen ohne zu reißen. Es heißt, man solle zur Liebe der Luftbläschen kein Nudelholz benutzen. Das italienische Ziehen und Schleudern habe ich dann aber noch nicht hingekriegt - plattgerollt ergibt einfach die schönere Form.

Für den Belag gilt: weniger verschiedene Zutaten sind besser und angebratene Zutaten sind schmackhafter. Neben den obligatorischen Tomaten und geriebenem Mozarella (anderer Käse hat auf einer Pizza nichts zu suchen!) habe ich diesmal Pilze mit Zwiebeln und wahlweise Thunfisch, französischen Schinken und ungarische Salami vorbereitet. Schinken und Salami kommen nach dem Backen auf die Pizza - vertrocknet oder verkohlt steigern sie den Geschmack nicht ins Positive.

Gebacken wird auf einem Pizzastein. Den Humpen bekommt man zum Beispiel bei Amazon.de recht günstig. Der passt in jeden Ofen, volle Pulle (bei mir 250°) für 30 min vorheizen und dann die Pizzen 8 Minuten drauf. Sehr lecker und kein Vergleich mit Tiefkühlprodukten!

Kochen, Knippsen, Essen

Montag, 27. Januar 2014 23:09 von Christoph

Letztens schrieb ich noch, dass es Zeit für eine Spiegelreflexkamera wird. Gesagt, getan! Und was gibt es besseres, als das neue Männerspielzeug mit gutem Essen auszuprobieren? Lasagne. Hmmm.

Benötigt wird zum Bespiel:

Die Bilder habe ich mit Automatikprogramm von einem Stativ aufgenommen, ich habe nämlich auch Belichtungsreihen erstellt. Es zeigte sich aber, dass die Farben ohne HDR viel brillanter waren. Man beachte auch die Tiefenunschärfe, die so nur mit Spiegelreflex geht. Einfach herrlich! Demnächst das ganze in Bewegung mit Schwebestativ. Devin Graham, zieh dich warm an!

Wiener Winter

Sonntag, 15. Dezember 2013 18:53 von Christoph

Oha! Schon zwei Jahre nichts mehr geschrieben. Hier mal ein paar Fotos vom Ausflug nach Wien am 11.12.2013. Natürlich in High Dynamic Range :). Wobei ich merke, dass meine alte Canon Powershot G9 qualitätsmäßig so langsam an ihre Grenzen stößt. Es wird demnächst wohl kein Weg an einer Spiegelreflexkamera (DSLR) vorbeiführen.

WebGraph.NET Open-Source

Freitag, 2. Dezember 2011 11:02 von Christoph

Schon etwas älter ist das Programm WebGraph, ein Dataminer der skriptgesteuert Links aus verschiedenen Webseiten extrahiert und daraus einen Verknüpfungsgraphen generiert. Das Originalprogramm basiert auf OpenGL und benutzt Googles v8-Javascript Engine.

Da man ja mit der Zeit geht und sich auf fortbilden will, habe ich die Applikation mal auf .NET in der Version 4.0 und WPF portiert. Das war erstaunlich einfach. Der Code ist im wesentlichen um ein Drittel kürzer geworden. Die grobe Architektur konnte beibehalten werden. Anstelle der v8-Engine ist Jint getreten. Sqlite wird immernoch für das Caching verwendet, allerdings in einer .NET Version. Schließlich konnte die CURL-Bibliothek für den Webzugriff komplett entsorgt werden, da das .NET Framework Standardklassen hierfür bereits mitbringt.

Klassendiagramm

Der Quelltext von WebGraph.NET ist im Github unter https://github.com/Chrisso/WebGraph.NET einzusehen. Am besten einfach mal lossurfen und durch die Source klicken.

Besonders interessant ist an dieser Stelle vielleicht, wie das Grabbing funktioniert. Der Nutzer gibt in der WPF-GUI ein Schlagwort ein. Diese fragt im Cache nach, ob diese Abfrage (evtl. auch als Sub-Abfrage) schonmal ausgeführt wurde. Gibt der Cache einen Fehler zurück (Cache-Miss) wird beim Skript ein Download-URL angefordert. Der Webloader kümnert sich dann um das herunterladen, die GUI gibt das Resultat erneut an das Skript, das dort Schlagwörter (Links, Kindknoten im Graphen) extrahiert. Das Ergebnis landet im Cache und je nach eingestellter Rekursionstiefe beginnt der Prozess mit jedem neuen Schlagwort von vorn.

Oder als Sequenzdiagramm ausgedrückt:

Sequenzdiagramm

Nach einem Port auf C# habe ich übrigens noch einen in JavaScript erstellt. Zur Anzeige des folgenden Beispiels benötigen sie einen HTML5-kompatiblen Browser, der das Canvas-Element unterstützt. Moderne Software wie Mozilla Firefox und Google Chrome können das von Haus, im Internet Explorer wird das Canvas mittels VML emuliert.

HTML5-Canvas nicht unterstützt!

Neue Farben, neuer Stil

Samstag, 12. November 2011 15:21 von Christoph

Ich habe den Stil von christoph.stoepel.net etwas aktualisiert. Der alte war sooo 2008 und basierte auf den auswechselbaren Themen von jQuery UI. Das ist teilweise immernoch so, aber nur für wenige Inline-Elemente. Der neue Stil fußt auf einem Farbschema von Adobe Kuler. Das ist eine schon etwas angestaubte Flash-Applikation, in der die Community allerdings sehr schöne Themen eingestellt hat

Das von mir genutzte Thema nennt sich "Ground Control to Major Tom" und besteht aus gedeckten Blautönen, die in Grau wandern. Sehr modern und sehr seriös. Dazu noch einige Spielereien mit HTML5: abgerundete Kanten, Box-Shadows und eine Schriftart aus dem Google Webfont Repository (Istok Web).

Die jQuery Version habe ich auf v1.6.4 aktualisiert und die Startseite ist nun eine flotte Ajax-Anwendung. Da ich ein sehr visueller Typ bin, lasse ich hier Bilder sprechen - Worte gibt es erst auf einen Klick. Keine Ablenkung vom wesentlichen, mehr Übersicht von Anfang an.

Apropos Übersicht: die CSS-Dateien werden nun von einem Compiler erstellt. DotLess generiert aus einer programmiersprachlichen Darstellung mit Konstanten, Variablen, Formeln und Funktionen gültiges CSS. Insbesondere Konstanten sind praktisch, um das o.g. Farbschema zentral überall im Stylesheet synchron zu halten. Okay, das ist recht theoretisch. So sieht es vor der Kompilierung aus:

@corpfont: "Istok Web", Tahoma, Arial, Sans-Serif;  // Schriftart
@corpcolor: #313F54;    // Farbe

.rounded_corners(@radius: 8px) 	// parametrisiert
{
	-moz-border-radius: @radius;
	-webkit-border-radius: @radius;
	border-radius: @radius;
}

.sitenavi
{
	.rounded_corners(2px);
	background-color: @corpcolor;
	li
	{
		position: relative; 
		list-style: none;
		text-align: center;
		a
		{
			color: @corpcontrast;
			text-decoration: none;
			&:hover, 
			&.active
			{
				color: #FFFFFF;
			}
		}
	}
}