Thomas Wölfers Baustatik-Blog

Thomas Wölfers Baustatik Blog

Die Referenzliste von Bauingenieur-Büros


Auf unserer Webseite haben wir (im Menu links unter "Kundenreferenz") einen kurzen Auszug aus unserer Kundenliste stehen: Das soll nur eine kurze Referenz sein, mit der Sie vielleicht auch einen Statiker-Kollegen in der Nähe finden können. (Aus diesem Grund ist auch der Ort mit angegeben.) Bei allen Büros, von denen wir auch eine URL hatten, ist auch die Webadresse angegeben.

Wenn Sie auch auf diese Liste mit den Links möchten: Kein Problem - schicken Sie einfach eine Mail mit den notwendigen Angaben, und wir tragen Sie auch dort ein.

 


Nochmal Consolas


Ich hatte vor ein paar Tagen den "Consolas" Font von Windows Vista gezeigt - und dazu gab es nun ein paar Nachfragen, weil die Font bei anderen nicht so gut aussah, wie auf meinem Screenshot.

Grund: Die neuen Vista-Fonts sind darauf ausgelegt, das man ClearType eingeschaltet hat - das ist bei Vista per Default der Fall, bei XP aber nicht. Wenn man also einen der neuen Vista Fonts unter XP benutzen will, dann sollte man auf jeden Fall ClearType einschalten. Ich empfehle außerdem den ClearType Tuner von Microsoft: Jeder "sieht" nunmal anders - darum ist es sinnvoll, die Einstellungen für sich selbst zu personalisieren.


Das PropertyGrid und Change-Notifications


Das PropertyGrid Control ist ein unheimlich mächtiges Werkzeug - das einen aber manchmal auch zur Verzweiflung treiben kann. Ein Grund dafür sind die scheinbar "fehlenden" Events für viele wichtige Ereignisse: Wo zum Beispiel ist der "ObjectPropertyChanged" Event, der ausgelöst wird, wenn der Anwender mit Hilfe des PropertyGrids eine Eigenschaft eines Objektes verändert hat?

Genau: Gibts nicht.

Gibts aber eben doch: Das PropertyGird hat noch deutlich mehr an Funktionalität zu bieten, als aus der Liste der Methoden und Events herauszulesen ist - denn um da dranzukommen, muss man eine ISite Implementierung haben, und der "Site" Property des Grids zuweisen.

ISite hat eine wirklich interessante Eigenschaft - es ist auch IServiceProvider. Und der wiederum hat die schöne Methode GetService(), mit der das Grid - so es eine Site hat - nach verschiedenen Diensten fragt. (Hat man einen Dienst nicht implementiert, liefert man null - das Grid verwendet dann seine Default-Implementierung.

Will man nun zum Beispiel wissen, wenn eine Eigenschaft des bearbeiteten Objektes verändert wurde, dann muss mann den IComponentChangeServer implementieren. Fragt das Grid nach diesem Service, dann liefert man eine Instanz der eigenen Implementierung. Die wiederum hat die Methode "OnComponentChanged()" - und die ruft das Grid nach jeder Änderung auf.

Man sieht: Es geht - allerdings würde man sich schon ein wenig mehr Dokumentation dazu wünschen.


Schöner und Schneller: Statisches Typing mit Generics vs. Dynamisches Typing


Solch einen Fall habe ich relativ oft: Es gibt eine Liste von Objekten unterschiedlicher Art (in meinem Fall sind das immer Singletons), und ich brauche die Instanz, die einen bestimmten Typ hat. (In meine Fall gehts immer darum die Instanz zu finden, die ein bestimmtes Interface unterstützt.)

Um das zu simulieren verwende ich hier im Beispiel einfach eine große Menge an Objekten von Typ (A) und ein einzelnes von Typ (B). Nach (B) wird dann gesucht. Die Liste sieht also in etwa wie folgt aus und wird für den Test so aufgefüllt:

private List<object> objects = new List<object>;
for (int i = 0; i < 500000; i++)
{
   objects.Add(
new Button());
}
objects.Add(
new NumericUpDown());

(Wie gesagt: Eigentlich müsste es sich um lauter unterschiedliche Typen handeln.) Mit den Möglichkeiten von .Net < 2.0 sieht eine entsprechende Funktion zum suchen einer bestimmten Instanz dann so aus:

private object FindDynamic(Type type)
{
   foreach (object o in dynamic)
   {
     if (type.IsAssignableFrom(o.GetType())) return o;
   }
   return null;
}

Der Aufruf der Funktion wird dann sehr unschön: Der gesuchte Typ kommt dreimal vor, und außerdem braucht man noch  einen Cast:

NumericUpDown result = FindDynamic(typeof(NumericUpDown)) as NumericUpDown;

Laufzeit im Beispiel: etwa 90 ms.

Mit .Net 2.0 und Generics kann man die Funktion zum finden so hinschreiben, das man nur noch RTTI und statisches typing verwendet - es braucht keine Reflections mehr:

private T Find<T>() where T:class
{
   foreach (object o in dynamic)
   {
      T result = o
as T;
      if (result != null) return result;
   }
   return null;
}

Laufzeit im Beispiel : < 70 ms

Die verbesserung der Performance ist aber eigentlich nicht der Hauptvorteil - der liegt vielmehr darin, wie der Aufruf der Funktion nun aussieht: Der ist nämlich deutlich hübscher:

NumericUpDown result = Find<NumericUpDown>();


Die Kosten von Wartungsverträgen


Vom Deutschen Ingenieursblatt gibt es eine Übersicht über die Leistungen und Kosten von Wartungsverträgen, in der wir mit Work&Cash aufgelistet sind. Das ist zwar einerseits nicht ganz richtig - andererseits enthält ein Work&Cash Vertrag ja auch alle Updates, jede Form von Support und den Zugriff auf alle unsere Baustatikprogramme. Neben D.I.E. finden Sie in der Übersicht auch noch die Firmen Dlubal und InfoGraph.

Sie finden die Übersicht hier - die Baustatik-Software Hersteller befinden sich auf Seite 2 des PDFs. Allerdings ist die Übersicht alles andere als vollständig, jede Menge Hersteller fehlen. Eine etwas vollständigere Liste von Anbietern finden Sie bei mir in der Navigation, rechts auf der Seite.

Davon ab: Das Deutsche Ingenieursblatt sammelt noch bis zum 15. Dezember Meinungen und Erfahrungen zu Wartungs- oder Serviceverträgen. Wenn Sie also Ihre Meinung zu Work&Cash loswerden wollen - dann lautet die Adresse wartungsvertraege@baumedien.de

Gesucht werden Erfahrungen zu folgenden Themen: Werden zugesagte Leistungen auch eingehalten? Wie schnell wird auf Supportanfragen reagiert? Welche versprochenen Zusatzleistungen werden tatsächlich erbracht?