Archive for May 2006

Noch ein Bild

So das Bild hatte noch gefehlt. Alles in allem ein schöner Ausflug und die ideale Vorbereitung für den Tannenberglauf am Sonntag (war trotz total vermatschter Wege nur 30s langsamer als 2005). Der Versuch heute frisch die Treppe ins Büro hinaufzuspringen misslang mir allerdings. Ich sah mich genötigt, mich leise ächzend am Geländer hochzuziehen.

bs4.jpg

Worschtfett

Worschtfett.jpg

Browntown Impressions – Tag II

So der erste Abend und auch der Tag danach sind gut überstanden. Wir waren zunächst auf der Suche nach einem Frühstück in die Stadt gezogen. Die Spuren des vorabendlichen Kampfes zeichnen die Züge der Helden:

rocknroll.jpg

Dabei kamen auch Freunde des Kalauers nicht zu kurz, wie die untenstehenden Bilder dokumentieren:

sonderangebete.jpg

Tortensorten.jpg

Braunschweig

Wir sind vor zwei Stunden im schönen Braunschweig angekommen. Der traditionelle Besuch beim Bratdealer hat schon stattgefunden.

Das Bild zeigt SEM, die “Locke”, und Jogi in freudiger Erwartung vor der Lokalität.

Locke.jpg

Gulasch

Nachdem andernorts darauf hingewiesen wurde, wie wichtig es sei, sein eigenes Kochbuch zu verfassen, hier mein heutiger Beitrag, ein ordenelicher Eintopf.

Die Zutaten:

  • 600g Rindergulasch
  • 2 Zwiebeln
  • 2 Zehen Knoblauch
  • Ein Glas eingemachte Bohnen (besser frische….)
  • Eine Dose Tomaten
  • Bohnenkraut
  • 7 Kartoffeln mittlerer Art und Größe

Zubereitung:
Man brate das Fleisch in Fett an und gebe dann die Zwiebeln und den Knoblauch dazu. Jetzt ordentlich Pfeffer dran. Dann etwas Gemüsebrühe dazu und 20min köcheln lassen. Kartoffeln schälen und Würfeln. Dann nach den erwähnten 20min in den Topf geben, ebenso die Dosentomaten. Die Sache jetzt salzen, etwas Zucker und Zitrone mögen auch sein, dann 30min Kochen lassen und zum Schluss Bohnen und Bohnenkraut dran. Sieht dann ungefähr wie abgebildet aus.

In der Praxis wird die ganze Sache dadurch spannender, dass die Zwiebeln und das Fleisch in der ersten Kochphase fest am Topfboden anhaften und man schnell alle lose gebliebenen Bestandteile in einen neuen Topf füllt. Das ganze gab drei Portionen und hätte beinahe nur einen Topf verschmutzt.

Gulasch.jpg />

Wettbewerb, Konkurrenz, Freiheit und der Sozialstaat

Nachdem ich mich neulich mal zum Thema dritte Welt und Freihandel
geäußert hatte und für meine
etwas kalte Sicht der Dinge gerügt wurde, heute ein Versuch
das Verhältnis von Wettbewerb und sozialer Sicherheit etwas zu beleuchten.

Aus meiner Sicht hat der Wettbwerb
zwei Aufgaben:
Erstens werden durch den Wettbewerb die Produzenten zu wirtschaftlichem
Handeln angehalten. Damit wird Verschwendung verhindert. Wenn die
ökologischen (externen) Auswirkungen durch eine Abgabe internalisiert werden und
dadurch mit ins unternehmerische Kalkül einbezogen werden müssen,
führt dies letztendlich auch zu einer ökologischen Produktionsweise.
Zweitens verhindert der Wettbewerb Machtkonzentration und hilft damit die Freiheit zu bewaren.

Milton Friedman liefert in “Capitalism and Freedom” (ein exzellentes Buch) einige anschauliche
Beispiele wie der Kapitalismus der Freiheit zuträglich ist.
Eines beschreibt wie Hollywood Studios, durch Konkurrenzkampf
und “Profitgier” dazu “gezwungen” wurden auch kommunistischen
Drehbuchautoren, die eigenlich nicht beschäftigt werden durften,
Aufträge zu erteilen. Diese zweite Funktion scheint mir wesentlich auf
einem funktionierenden Wettbewerb zu beruhen. Große Sorgen macht mir
die zu beobachtende Monopolisierung in vielen Branchen. Die
Zerschlagung von Monopolen (Microsoft) scheint im Moment nicht en vogue zu
sein. Insbesondere Hayek war ja der Ansicht, dass die Weimarer Republik
durch die zunehmende Monopolisierung der deutschen Industrie zugrunde
gegangen ist.

Diese zweite Funktion des Wettbewerbs ist nicht Teil der aktuellen Debatte,
stattdessen wird dem Wettbewerb eine weitere Rolle zugewiesen, nämlich
die eines Motivators für Arbeitslose und Arbeitnehmer. Nun gilt hier von den beiden oben
genannten Argumenten eigentlich nur das erste (man könnte Gewerkschaften
unter das zweite Argument stecken, aber da will ich gerade nicht drauf raus).

Kritisch scheint mir allerdings die Position das der Mensch arbeiten müsse und
im Überlebenskonkurrenzkampf bestehen. Ich glaube nicht, dass diese Form
der Konkurrenz geeignet ist Menschen zu motivieren. Natürlich kann ein
spielerischer Wettbewerb äußerst motivierend sein, aber ein ständiger
Kampf um die Existenz/ das Exitenzrecht ist es wohl kaum und nebenher
mit dem in letzter Zeit wieder arg strapazierten christlichen Menschenbild
wohl kaum vereinbar.

Meiner Meinung nach sollte der Sozialstaat dieser (meiner) Einsicht Rechnung tragen
und statt eine Forderung zu stellen (Du sollst arbeiten) ein
Angebot machen (Du darfst existieren). Dies ist eigentlich keine
Frage der tatsächlichen Zahlungen, sondern eher eine der Einstellung.
Wer mit Hartz IV auskommt und zufrieden ist, darf das auch
(moralisch betrachtet). Andererseits sollte wer arbeitet, auch
wenn er nicht in der Lage ist direkt mehr als diesen minimalen
Lebensunterhalt zu verdienen dadurch einen Vorteil (zurzeit ist das so eine
Sache) haben, der auch signalisiert: Du strengst Dich an. Du machst was.
Das wird anerkannt.

So jetzt habe ich wieder mal alles durcheinandergebracht und schließe den Eintrag ab…

Ob’s wohl vorüber geht?

Nachdem ich mich letzte Woche mit eGroupWare als serverseitige Lösung meiner Informationsmanagementprobleme beschäftigt habe, ging es diese Woche an den Client.

Neben der Weboberfläche bietet eGroupWare verschiedene Integrationsmechanismen. Dabei kann man einerseits offene Standards, z.B. IMAP und LDAP nutzen, andererseits wird auch ein proprietäres XML-RPC Interface angeboten – Plugins für Outlook und Kontakt existieren, meine im Moment favorisierte Lösung ist allerdings Thunderbird.

Kurz ich kam darauf, dass ich meinen eigenen Client bauen müsste. Hybris – ich weiß…
Die Plattform war rasch definiert: Eclipse RCP + db4o + Ristretto + commons, allein mit der Implementierung gibt’s Probleme.

Als Vorarbeit habe ich mich zunächst mit IMAP beschäftigt. Dabei habe ich mit Ristretto, einer Java Mail Library gearbeitet und festgestellt, dass IMAP doch eher starr ist.

Als clientseitige Persistenzlösung habe ich mit db4o gespielt. Das ist ganz großes Kino! Mein Idee ist jetzt auch ein GroupWare-Backend zu schreiben und die Mails mit in der Datenbank zu verwalten. Die Mail-Protokolle also nur als Schnittstelle.

Wahrscheintlich geht das alles vorüber, aber die Idee eines durchgängigen OO-Systems, das ich selber erweitern kann, erscheint bestechend.

Sourcecode jetzt etwas besser!

Nach Installation des GeshiSyntaxColorer und Deaktivierung des erweiterten visuellen Editors scheint es jetzt besser zu funktionieren.

require 'pp'
 
class Hash
	def lookup_or_create(key,&creator)
		if (has_key?(key))
			return self[key]
		end
		element = creator.call
		self[key]=element
		return element
	end
end
 
def group(list, &category)
	map=Hash.new	
	list.each{|element|
		cat=category.call(element)
		grp = map.lookup_or_create(cat){
			Array.new
		}		
		grp< <(element);
	}
	return map
end
 
 
names = ["Felix","Alexey","Frank","Ivan","Irina"]
 
grouped_names = group(names){|element|   
  element[0..0]
}
 
pp grouped_names
 
# Expected Output:
# {"A"=>["Alexey"], "F"=>["Felix", "Frank"], "I"=>["Ivan", "Irina"]}

Я не понимаю ничего

Für alle, die Russisch lernen wollen, gibt es natcast. Auch kann man hier Interessantes über die russische Kultur erfahren.

Generische Programmierung

Heute stellte sich mir zum zweiten Mal innert kurzer Zeit die aufgabe Elemente einer flachen Liste nach bestimmten Kriterien zu gruppieren. Da der Code dafür eher fehleranfällig ist, hatte ich mir vorgenommen die Sache wiederverwendbar zu implementieren. Dazu griff ich zunächst zu Ruby.

Die entstandene Funktion wird so verwendet, um eine Liste von Namen in eine Map zu überführen, die für jeden Anfangsbuchstaben eine Liste von Namen enthält:

require 'pp'

names = ["Felix","Alexey","Frank","Ivan","Irina"]
grouped_names = group(names) { |element|
element[0..0]
</blockquote> <code> } pp grouped_names

Die Ausgabe sieht ganz vernünftig aus:

{"A"=>["Alexey"], "F"=>["Felix", "Frank"], "I"=>["Ivan", "Irina"]}

Und nun zur Implementierung:

def group(list, &category)

map=Hash.new
list.each{|element|

cat=category.call(element)
if (map.has_key?(cat))

grp=map[cat]

else

grp=Array.new
map[cat]=grp;

end
grp< <(element);
}
return map
end

Ich fand's so schön, dass ich beinahe weinen musste, aber nur beinahe.

Ich wurde allerdings gleich wieder wütend, als ich feststellte, dass ich bei WordPress nicht weiß, wie man code snippets einbindet...