Archiv f¨r 2006

Nov
03

Gestern, 02. November 2006, 20:30:00 Hennigsdorfer Ortszeit:

Der erste Schnee fällt.

Gut, dass ich demnächst schon einen festen Termin fürs Auto-Winterfest-Machen habe :-)

UPDATE: Helmut ist das Phänomen übrigens auch aufgefallen ;-)

Nov
02

Im Folgenden eine Sammlung von Links zu lesenswerten Artikel bezüglich der Erstellung performanter Webanwendungen mit ASP.NET

http://msdn.microsoft.com/msdnmag/issues/05/01/ASPNETPerformance/default.aspx (Basic Do’s & Dont’s, schön zusammengefasst und erklärt)

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnpag/html/scalenetchapt06.asp (Kapitel 6 aus J.D. Meier, Srinath Vasireddy, Ashish Babbar, and Alex Mackman: Improving .NET Application Performance and Scalability, Microsoft Corporation, 2004)

http://www.codeproject.com/useritems/ASPNET_Best_Practices.asp (Nochmal 15 Best Practises kurz erläutert, inklusive Tipps wie “Use of stored procedures and indexes” oder “Precompiling pages and disabling AutoEventWireup“)

http://aspalliance.com/818_Improving_Application_Performance_in_Net (viele kleine Sourcecode-Schnipsel)

http://weblogs.asp.net/scottgu (Das Blog des Godfather of ASP.NET ;-) – jede Menge höchst interessanter Artikel )

http://aspnet.4guysfromrolla.com/articles/031506-1.aspx (Performance-Steigerung beim Einsatz von ASPX mit SQL-Server ® 2005 durch eigene Paging-Modelle)

http://www.eggheadcafe.com/articles/20060918.asp (Asynchrones Page Processing)

Nov
01

Da ich gerade gezwungen bin, ein Word-Makro (inkl. GUI) mit VBA zu schreiben muss ich jetzt mal was los werden:

ICH HASSE Visual Basic (6) BZW. VBA!!!

Vielleicht wird der Hass ja noch so groß, dass ich mir die .NET-Office-Integration näher anschaue. Ich werde mich gespannt selbst beobachten…

Okt
31

Upgrade
Original uploaded to flickr by waterlilysage

Nachdem Subversion 1.4 nun bereits vor längerer Zeit releast wurde – und TortoiseSVN auch kurze Zeit später nachzog, wollte ich mit dem Upgrade unserer Entwicklungs-Infrastruktur noch auf eine aktuelle Version von AnkhSVN warten. Diese gab es nun am 28.10.06 – zwar keine Final, aber immerhin eine 1.0 RC4.

Deshalb erfolgte heute das Upgrade des Systems – völlig problemlos. Also keine Angst, falls ihr auch darüber nachdenken solltet ;-)

Okt
30

Wer sich sicher ist sollte auch anderen vertrauen können.

“Wer wird Millionär”-Teaser bei RTL

Wem außer mir ist noch aufgefallen, wie dumm dieser Spruch eigentlich ist!?

Okt
30

C# ist ja bekanntlich reich an Syntax-Candy (so der Referent damals auf dem Visual Studio 2005: First Contact-Techtalk. Zu diesen mehr- oder weniger nützlichen Features gehört auch der bedingte Operator ?:, den C# vermutlich vom guten, alten C++ geerbt hat.

Dessen Funktion ist schnell erklärt: Es handelt sich um eine verkürzte Schreibweise für eine if-else-Bedingung:

condition ? first_expression : second_expression;

Bzw.

x == y ? method1() : method2()

Eigentlich vermeide ich es tunlichst, dieses Konstrukt einzusetzen, weil es den Code – im Gegensatz zu einer schön strukturierten if-else-Bedingung unleserlich und schwerer debugbar (sagt man das so?) macht. Allerdings ist mir nun bereits zum wiederholten Male eine Situation untergekommen, in welcher der ?:-Operator durchaus Sinn macht:

Nehmen wir an, ich will eine (rekursive) Funktion debuggen und dazu mittels Debug.WriteLine ein paar Statusmeldungen ausgeben. In meinem Fall das OuterXml eines XPathNavigators. Dieses kann jedoch relativ lang sein – was die Debug-Ausgabe wiederum unlesbar macht. Also ist es an sich eine gute Idee, die Länge der Ausgabe zu beschränken, z.B. auf maximal 80 Zeichen:

Debug.WriteLine(navi.OuterXml.Substring(0, 80));

Soweit – so gut – ist das OuterXml nun aber kürzer als 80 Zeichen bekomme ich eine schöne Exception. Die Lösung des Problems ist es, zu überprüfen, ob das OuterXml kürzer als 80 Zeichen ist – wenn ja wird es komplett ausgegeben, sonst gekürzt. Benutze ich dafür nun eine ganz normale if-else-Bedingung sähe der Debug-Hilfscode in etwa so aus:

if (navi.OuterXml.Length < 80)
  Debug.WriteLine(navi.OuterXml);
else
  Debug.WriteLine(navi.OuterXml.Substring(0, 80);

Oder Dank ?:-Operator mit einer Zeile wesentlich kürzer:

Debug.WriteLine((navi.OuterXml.Length < 80) ? navi.OuterXml : navi.OuterXml.Substring(0, 80));

Okt
25

Über meinen Ausflug auf den geschichtsträchtigen Flugplatz Werneuchen mit meinem Cousin & Militärhistorik-Experten Markus hatte ich ja bereits berichtet. Allerdings war dieses Ereignis auch der Grund für ein Bastelprojekt:

Da uns für weitere Streifzüge eine aktuelle Karte des Flugplatzes fehlt habe ich diese mit Hilfe von Google Maps (bzw. Google Earth) nachgebaut. Dafür wurden zunächst 56 Luftbilder des Geländes ausgedruckt:

Google Maps - Bastelprojekt: Schritt 1

Anschließend wurden die einzelnen Teile entsprechen zugeschnitten und überlappend zusammen geklebt, so dass das Gesamtkunstwerk auf die stattliche Größe von etwa 1,40m x 1,00m kommt.

Google Maps - Bastelprojekt: Schritt 2

Okt
24

Wer sich viel mit datenzentrischen XML-Dokumenten auseinander setzt wird sich sicherlich schon einmal die Frage gestellt haben: Soll ich werte nun lieber als inneren Text eines Elements ablegen – oder lieber als Attribut? Was ist schlauer?

Zu dieser Frage habe ich nun eine durchaus lesenswerte Diskussion gefunden. Deren Kernaussage: Attribute haben die Nase vorn. Und zwar aus mehreren Gründen:

  • Attribute sind spezifischer, sie beschreiben Daten genauer. Das ist besonders dann eine große Hilfe, wenn man ein XML-Dokument programmtechnisch auswertet.
    Beispiel: Ich habe eine Liste von Personennamen, jeweils mit Vor- und Nachname. Ich kann die Daten in der List nun entweder so ablegen:

    <person>John Doe</person>

    oder so

    <person firstName="John" lastName="Doe" />

    Die erste Variante hat natürlich ein kürzeres XML zur Folge – allerdings auch einen hohen Spaßfaktor beim Versuch, die Liste möglichst simpel nach Nachnamen zu ordnen.

  • Der Einsatz von Attributen verringert die Anzahl von Knoten, die bei der Auswertung der Daten besucht werden müssen. Die Namensliste könnte ich nämlich auch so anlegen:

    <person>
      <firstName>John</firstName>
      <lastName>Doe</lastName>
    </person>

    Noch einmal das Gegenbeispiel mit Attributen:

    <person firstName="John" lastName="Doe" />

    Um nun Vor- und Nachnamen der Person zu ermitteln müssen beim ersten Beispiel fünf Knoten besucht werden (der innere Text eines XML-Elements ist nichts weiter als ein Knoten vom Typ Text), beim zweiten dagegen nur drei. Weniger Knoten = weniger Zeit.

  • Besitzt ein Element sowohl inneren Text als auch Kind-Elemente wird es eine Tortur, tatsächlich nur den gewünschten Text zu extrahieren. Den inneren Text eines Elements sollte man also nur dann zum Speichern von Daten benutzen, wenn das Element tatsächlich keine Kind-Elemente hat.

Zusammenfassung: Wer bei der XML-Modellierung auf Attribute baut, der hat die Nase vorn, sowohl performance-technisch als auch stilistisch ;-)

Okt
24

… ist übrigens gar nicht so schlimm. Wenn Mann also seiner Freundin/Frau einen Gefallen tun will, sollte Mann sich ruhig dazu durchringen, den Film an zu schauen. Ich muss gestehen, dass ich stellenweise sogar lachen musste ;-)

Der Teufel trägt Prada

Achso: Und ihr Frauen solltet den euch auch angucken – da könnt ihr mal lernen, wie man sich richtig anzieht :mrgreen:

Okt
21

Auf dem Flugplatz Werneuchen

Am letzten Sonntag habe ich mit dem Markus, meinem Cousin und bewandertem Militaria-Experten, einige interessante Stunden auf dem Flugplatz Werneuchen zugebracht – und nun auch die dabei entstandenen Fotos bei flickr online gestellt. Dieser Ausflug legte den Grundstein für die Planung weiterer Erkundungsstreifzüge, denn der Flugplatz hat eine interessante Geschichte:

Nachdem festgestellt wurde, dass Werneuchen durch hervorragende Aufwindverhältnisse sehr gute Voraussetzungen für den Flugbetrieb besitzt, wurde der Ort in der militärischen Standortplanung des Dritten Reiches berücksichtigt. Im Jahre 1935 kaufte die Wehrmacht unter anderem von den ortsansässigen Bauern große Flächen Land auf. 1936-37 wurde Werneuchen zur Garnisonsstadt ausgebaut. Als sehr gut ausgestattetes Vorzeigeobjekt wurde die Jagdfliegerschule “01″ des Deutschen Reiches errichtet.

Der Ausbau der Stadt brachte umfangreiche Straßen- und Gleisbaumaßnahmen, die Errichtung der militärischen Anlagen und einer Flugzeugwerft der Lufthansa (in welcher übrigens meine Großmutter arbeitete) sowie die Entstehung dreier Wohnsiedlungen, eines neuen Wasserwerks und eines Kinos mit sich.

Die Wohnsiedlungen unterteilten sich in eine Siedlung für die Offiziere, in der Beiersdorfer Straße unmittelbar in der Nähe des Bahnhofes, eine Unteroffizierssiedlung im Ortsteil Rudolfshöhe zwischen Wegendorfer- und Wesendahler Straße sowie die Siedlung für das technische Personal entlang der Sachsen- und Pommernstraße gleich am Flugplatzgelände.
Das an der Wesendahler Straße entstandene moderne Wasserwerk war für 15.000 Einwohner ausgelegt. Filmvorführungen in Werneuchen erhielten durch die Eröffnung der ALA-Filmbühne in der Berliner Straße ein festes Haus.

Am 27. November 1937 wurde die Werneuchener Garnision als eine der letzten im Deutschen Reich errichteten offiziell eingeweiht. Bis 1941 stieg die Einwohnerzahl Werneuchens auf 4.902 an. Oberstleutnant Osterkamp, der erste Kommandeur der Jagdpfliegerschulen “01″, wurde später zum General und Chef aller Jagdfliegerschulen der Wehrmacht berufen. Die Jagdfliegerschule Werneuchen bildete deutsche und ausländische Jagdflieger (u.a. aus Bulgarien und Rumänien) in 15 Schulstaffeln zu je 10 – 12 Flugschülern aus.

Was den Werneuchener Flugplatz besonder interessant macht, ist die Tatsache, dass während des Krieges neben der Flugplatzkommandantur und der Jagdfliegerschule noch eine Außenstelle des Reichsluftfahrtministerums zur Erprobung von Radarsystemen für die Nachtjagd eingerichtet und die Nachtjagdgruppe 10 zwecks Tests dieser Radarsysteme im Flug- und Kampfeinsatz stationiert wurde. Im Rahmen dieses Programms entstand auch der Weesower “Radarturm”, welcher in der örtlichen Bevölkerung fälschlicher Weise oft als “Flak-Turm” betrachtet wurde.

Die Zerstörung Werneuchens durch alliierten Bomber verhinderten Scheinflugplätze, Tarnung und Glück. Harry Maruffke, ein mutiger Werneuchener, verhinderte in letzter Minute die Sprengung des Flugplatzes durch ein Sprengkommando der Wehrmacht.

Nach dem Krieg wurden sowjetische Luftstreitkräfte in Werneuchen stationiert. Diese glaubten zunächst, das Gelände des Flugplatzes sei vermient und errichteten deshalb direkt an der Wegendorfer Straße einen Behelfsflugplatz. In der folgenden Zeit der sowjetischen Besatzung wurde der Flugplatz weiter ausgebaut. 1952 wurde die Start- und Landebahn durch die Bau Union Potsdam auf 2.500 m verlängert. Nun konnte jeder Flugzeugtyp in Werneuchen landen und starten.

Werneuchen wurde der Standort des Selbständigen Garde-Aufklärungs-Lufregiment, einer Eliteeinheit der sowjetischen Luftstreitkräfte, welche 1942 in Moskau – Wnukowo aufgestellt wurde. In den 1980er Jahren standen unter anderem 36 der modernsten Aufklärungsjagdbomber auf dem Gelände des nach dem Krieg deutlich vergrößerten Flugplatzareals. Die letzte Staffel MiG-Abfangjäger verließ Werneuchen im Mai 1991. Anschließend wurde hier noch ein ein sowjetisches Hubschrauberregiment stationiert. Im September 1993 endete die militärische Nutzung des Flugplatzes mit dem Abzug der letzten russischen Militärangehörigen.

[Quelle u.a. Hans-Joachim Spiegel, Historiker und Geschichtslehrer aus Werneuchen]

Update: Siehe auch Spurensuche II über unseren Besuch auf dem Flugplatz Oranienburg (ehem. Werksflugplatz der Heinkel-Werke).

Okt
18

Neuigkeiten aus dem RENEMT_DE – Fanshop: Bei allen Oberteilen könnt ihr nun die Farbe frei wählen. Außerdem ist noch ein zweckmäßiges Shirt dazu gekommen:

Funckin' Admin

Man kennt das ja: Als Entwickler ist man immer auch gleich erste Wahl, wenn mal ‘was nicht funktioniert und der Admin irgendwo Däumchen dreht. Diese Zeiten sind mit dem Shirt ein für alle mal vorbei ;-)

Dieser Beitrag enthält möglicher Weise satirischen und/oder sarkastischen Inhalt.

Okt
17

Gerade eben gelernt:

Stellt eine API/Bibliothek von Drittanbietern im Fehlerfall Informationen wie interner Fehlercode und Fehlermeldung im Klartext zur Verfügung, so sollte man sich durchaus auch die Mühe machen, diese auszuwerten.

Das spart einem nämlich unter Umständen beim Debuggen stundenlange Rate-Arbeit, um einen ganz trivialen Fehler aufzuspüren – und im simpelsten Fall ist dafür nur eine Zeile Code notwendig:

Debug.Fail("Lib returned -1 on call to 'some_function': " + Environment.NewLine + "Error number " + theLib.get_errnum() + ", error message: " + theLib.get_errmsg());

Okt
13

Man lernt ja bekanntlich nie aus. So entdeckte ich letztens, dass es zum Anlegen von leeren Strings in C# eine Alternative zu "" gibt – nämlich String.Empty. Die Frage, die sich bei solchen Entdeckungen immer stellt, ist natürlich:

Bringt das Anlegen von leeren Strings mit String.Empty irgendwelche Performance-Vorteile gegenüber den monopolartig verbreiteten Doppel-Gänsefüßchen?

Dafür basteln wir uns einfach wieder eine simple Test-Konsolenanwendung:


static void Main(string[] args)
{
  const int NUM_LOOPS = 500000000;
  
  bool cancel = false;
  while (!cancel)
  {
    Console.Clear();
    
    Console.WriteLine("Version1: string str = \"\"");
    DateTime version1Start = DateTime.Now;
    for (int i = 0; i < NUM_LOOPS; i++)
    {
      string str = "";
    }
    
    TimeSpan version1Duration = DateTime.Now - version1Start;
    Console.WriteLine("Version 1 duration: " + version1Duration);
    
    Console.WriteLine();
    
    Console.WriteLine("Version2: string str = string.Empty;");
    DateTime version2Start = DateTime.Now;
    for (int j = 0; j < NUM_LOOPS; j++)
    {
      string str = string.Empty;
    }
    
    TimeSpan version2Duration = DateTime.Now - version2Start;
    Console.WriteLine("Version 2 duration: " + version2Duration);
    
    Console.WriteLine();
    
    TimeSpan difference = version2Duration - version1Duration;
    Console.WriteLine("Difference (Version 2 - Version 1): " +
      difference.TotalMilliseconds + "msec");
    
    Console.WriteLine();
    Console.Write("Press 'R' to retry, any other key to quit: ");
    if (Console.ReadKey().Key != ConsoleKey.R)
      cancel = true;
  }
  
  Console.WriteLine();
}

Führt man diese nun mehrmals aus kommt man zu folgendem Ergebnis:

String.Empty

Es gibt keinen eindeutigen Gewinner.

Mal ist string str = ""; schneller, mal string str = string.Empty;. Auch auf Multiprozessor- (oder Hyperthreading-)Systemen ergibt sich dabei kein Unterschied. Performancetechnisch ist es also egal, wie man einen Leerstring anlegt. Auch andere gravierende Gründe für den Einsatz von String.Empty scheinen nicht zu existieren (zumal "" quasi plattformunabhängig ist).

Fazit: Wie man seinen persönlichen Lieblings-Leerstring anlegt bleibt Geschmackssache.

Okt
12

Der Grund dafür, dass es hier momentan etwas ruhiger zugeht, ist schlicht und ergreifend Zeitmangel :-) In der Firma ist viel zu tun, daher komme ich erst spät nach Hause – wo aber aktuell auch noch genügend nebenberufliche und private Arbeit auf mich wartet.

Gestern zum Beispiel wollte ich noch schnell unser neu erworbenes Bett aufbauen. Ein nicht ganz billiges und ziemlich schick aussehendes Metallbett in silber mit Ahorn und mit einem hochwertigen Lattenrost. Der Lattenrost ist auch OK – trotzdem jedoch das Bett nicht von IKEA stammt erfüllte es dennoch sämtliche diesbezüglichen Klischees:

90% der Löcher, durch die irgendwelche Schrauben geführt werden müssen, waren teilweise einen Millimeter versetzt. Klingt nicht viel – aber das hilft einem auch nicht weiter, wenn die Schraube sich dadurch partout nicht ins vorgesehene Gewinde drehen lässt. Also musste ich zunächst mittels Bohrmaschine die Löcher so auffräsen, dass die Schrauben in ihr Gewinde finden (nach 20:00 wohlgemerkt, in einem Mehrfamilienhaus). Nachdem diese Hürde genommen war und ich mich auf die erste Nacht im Neuerwerb freute machte mir dann ein einzelnes Loch (welches zur Befestigung der Mittelstrebe, auf welcher der Lattenrost aufliegen soll, vorgesehen ist) die ganze Freude zu nichte. Nämlich eins mit Gewinde, dass aber für die ansonsten überall passenden, mitgelieferten Schrauben eine Nummer zu klein war. Auch aufbohren half nichts und ein Gewindeschneide-Set habe ich leider nicht im Haus – deshalb musste ich dann gestern abend WEGEN EINER EINZIGEN SCHRAUBE abbrechen und heute wegen eben dieser einen Baumarkt aufsuchen. Meine Begeisterung könnt ihr euch vorstellen :-(

Aber in den nächsten Tagen wird es hoffentlich wieder etwas entspannter und ich komme auch wieder mehr zum Bloggen.

Okt
08

… dann haben sie entweder etwas ins Auge bekommen (z.B. beim Schrauben an motorisierten Zweirädern) – oder Deutschland – Ein Sommermärchen gesehen.

Deuschland - Ein Sommermärchen
Quelle: Kinowelt – Deutschland – Ein Sommermärchen

Was für ein grandioser Film! Was wurden da für Erinnerungen wach! Was habe ich gefiebert, gelitten und mich gefreut! Wer diesen Film verpasst – der war auch bei der WM nicht wirklich dabei. Also: Strikter Anguck-Befehl!!!

Okt
05

Abend in Berlin
Abendliche Heimfahrt durch Berlin an der Kreuzung Scharnweberstraße/Kurt-Schuhmacher-Damm

Okt
04

Selbständig heißt selbst und ständig

meinte einmal jemand zum Thema berufliche Selbständigkeit zu mir. Recht hat er! Auch, wenn ich das ganze momentan nur nebenberuflich betreibe, so sitze ich doch abends oft mehrere Stunden und schreibe Rechnungen, erledige Geschäftskorrespondenz, bereitete Unterlagen für die Buchhaltung vor und so weiter. Das ist zwar teilweise erbaulich (Rechnungen schreiben) – aber oft auch stressig.

Aber wie heißt es so schön: Von nichts kommt nichts ;-)

Okt
02

Da wir ja für den Sommer nächsten Jahres unsere Hochzeit planen sind nun die ersten handfesten Vorbereitungen ins Rollen gekommen. Nachdem wir uns schon vor geraumer Zeit den Termin für die kirchliche Trauung gesichert hatten wurde gestern aus der unverbindlichen Reservierung unserer Wunsch-Location bei einem umfassenden Besichtigungstermin eine verbindliche. Sowohl vom Ambiente als auch vom unglaublichen Preis-Leistungsverhältnis und der Freundlichkeit und Kompetenz der Chefin waren wir schlichtweg begeistert. Weiterhin ist das ausgesuchte Etablissement hochzeitstechnisch anscheinend ziemlich gefragt (etwa alle zwei Wochen eine Feierlichkeit) – was auch auf eine gewisse Erfahrung des verantwortlichen Teams schließen lässt. Die Beschaffung der notwendigen Unterlagen für die standesamtliche Eheschließung wurde ebenfalls eingeleitet – welche sich nach anfänglichem Schreck aufgrund der Information eines gerade frisch verheirateten, befreundeten Pärchens (“Was? Abstammungsurkunde!? Und die muss man persönlich im Geburtsort abholen? Da muss ich ja Urlaub nehmen!”) durch eine recht bürgerfreundlichen, serviceorientieren Behörde als doch eher unkompliziert erwies (“Ach – ein formloses Schreiben verbunden mit einer Einzugsermächtigung für die Ausstellungsgebühr reicht aus – und ich erhalte die Urkunde dann per Post? Sehr schön!”).

Es scheint also, als ob sich der “schönste Tag des Lebens” tatsächlich realisieren lassen würde :-)

Sep
29

Bauersfrauen sind alt, dick, hässlich und riechen nach Kuhmist? Stimmt nicht – wie der neue Kalender der Bayerischen Jungbauernschaft für 2007 beweißt:

Jungbauersfrau 2006
Quelle: jungbauernkalender.de

So schön kann das Landleben sein ;-)

Sep
28

… ob die Feeds nach dem Umzug noch funktionieren.

vBulletin statistics