Thomas Wölfers Baustatik-Blog

Thomas Wölfers Baustatik Blog

Schneelastzonen


Zufällig drüber gestolpert, wird aber bestimmt auch anderen helfen: Das Deutsche Institut für Bautechnik veröffentlicht eine Excel-Tabelle mit den Schneelastzonen, sortiert nach Verwaltungsgrenzen. Zu haben hier: DIBt


SourceGear Vault: Jetzt schneller


Ich hatte vor kurzem darüber berichtet, das wir von SourceSafe auf Vault umgestiegen sind. Mir war aufgefallen, das ein automatisches Checkout innerhalb von VS2005 doch relativ lange dauerte - beim mir etwa 20 Sekunden.

Laut dem SourceGear Support tritt dieses Problem wohl nur in größeren Solutions bzw. Projekten auf, und das trifft auf die Baustatik wohl zu: Die Solution enthält zur Zeit knapp 70 Projekte und etwa 10.000 Dateien.

Seit heute gibts ein Update für den integrierten Client, und der ist in der Tat dramatisch viel schneller: Statt 20 Sekunden dauert es nun weniger als 1 Sekunden. Prima! Das Update umfasst einen Client-Only Installer und kann zusammen mit einem 4.1.x Server eingesetzt werden. Zu haben ist es zur Zeit hier, aber wer lieber auf etwas "offizielleres" warten soll: In der nächsten Woche soll es das offizielle Release geben.

Update:  Es gibt ein neues Download hier. Darin ist nun auch das hinzufügen von Dateien zu einem Projekt dramatisch viel schneller geworden.


Probleme beim installieren der Updates auf Version 1.24


Mir ist noch nicht ganz klar, was eigentlich passiert. Offenbar ist es aber so, das beim installieren des Updates auf Version 1.24 bei verschiedenen Kunden Probleme auftreten: Die Installation endet mit einer Fehlermeldung und scheitert. Das kann man zum Glück aber umgehen: Man muss die aktuell installierte Version einmal manuell über die Systemsteuerung deinstallieren, und erst dann das Update installieren - dann gehts.

Ich untersuche das Problem aber noch: Wenn ich herausgefunden habe woran es liegt, geben ich noch Bescheid.

Update: Ich kann das Problem nun zumindest reproduzieren, habe aber noch nicht die geringste Ahnung, was das verursacht. Der oben beschrieben Work-Around funktioniert aber. Ich nehme nun auf jeden Fall die Downloads erstmal vom Server, bis die Sache geklärt ist.

Update:  Ich vermute, das das Problem mit einer internen Umstellung auf unseren Entwicklungsrechnern zusammenhängt; wirklich erklären kann ich es aber nicht. Es bleibt zur Zeit nichts anderes übrig, als die Vorgängerversionen über die Systemsteuerung manuell zu deinstallieren, und dann erst das Update zu installieren. Bei zukünftigen Updates wird es aber wie gewohnt auch ohne manuelles deinstallieren gehen - das habe ich bereits überprüft.


Hübsche Graphiken in Vista


Manchen ist es ja nicht so wichtig, ob die Dinge, mit denen sie täglich zu tun haben, hübsch anzusehen sind oder nicht. Solche Menschen meckern dann auch gerne rum, das Vista zu viel "Klicki-Bunti" hätte. Mir geht das anders: Ich mags hübsch. Darum gefällt mir auch einiges in Vista deutlich besser als in XP. So sieht zum Beispiel mein Laufwerks-Ordner in der Darstellung "Große Symbole" aus:

Man kann die Bilder für die Laufwerke übrigens stufenlos noch deutlich größer machen - etwa 4 mal so groß, wie hier abgebildet.


Neue Updates verfügbar


Ab sofort gibts im Downloadbereich neue Programme: Es gibt eine neue Version vom Durchlaufträger Xdur  und von der Baustatik. Details dazu gibts wie immer im Blog meines Bruders und im Update-Protokoll im Download-Bereich. Bei der Baustatik hat sich leider nicht ganz so viel getan wie ich gehofft hatte - oder, um es anders auszudrücken: Der Durchstanz-Nachweis ist doch nicht fertig geworden. Ich bin aber zuversichtlich, das das im nächsten Update auf jeden Fall der Fall sein wird.

Es gibt dafür aber ein paar nette neue Kommandos:

  • Eines zum wiederholen des letzten Kommandos (kann per "Bearbeiten" oder das Tastenkürzel F4 gestartet werden.)
  • Zwei zum "korrigieren" von Geometriedaten, was man meist nach einem Import aus einem Drittprogramm tun muss. Beide befinden sich im Menü "Geometrie-Korrektur im "Bearbeiten" Menü.
  • Eines zum löschen von "nicht benutzten" Objekten. (Ebenfalls im "Bearbeiten" Menü.)

Dann kann man nun Daten aus zusätzlichen Quellen importieren: Neben DWG (ging schon länger) kann nun auch ZEIG und ISB-CAD eine Datenquelle sein. Und neben den anderen Änderungen (wie gesagt: Siehe Update-Protokoll) wurde auch die Zeit für die Netzerzeugung bei großen Netzen deutlich verbessert, und zwar wurde sie auf etwa ein Zehntel der ursprünglichen Dauer geschrumpft.


WinRAR und Probleme bei der Installation der Baustatik


Bei WinRAR handelt es sich um ein Kompressionsprogramm, das auch .ZIP-Dateien lesen und dekomprimieren kann. Wer Windows XP oder eine neuere Version von Windows einsetzt, braucht das Programm eigentlich nicht, da diese Windows-Versionen ZIP-Dateien ohne Hilfe einer weiteren Software behandeln können. In einem solchen Fall kann mann in der baustatik_setup.zip einfach auf das "setup.exe" klicken um die Baustatik zu installieren: Die Dateien werden dann "automatisch" im Hintergrund in einen temporären Ordner entpackt, und die Installation erfolgt dann über diesen Ordner. Das geht problemlos, allerdings kann die Installation dann nicht automatisch "repariert" werden, wenn das zu einem späteren Zeitpunkt mal notwendig werden sollte.

Auf Basis eines Gesprächs mit einem Kunden geht das mit WinRAR offenbar nicht so gut: Zumindest im Fall des Kunden war es so, das die Installation zwar gestartet wurde, aber dann letztlich nicht abgeschlossen werden konnte. Statt dessen wurde das fehlen einer Datei mit dem Name rar(...)\data.msi angemeckert. Unser Installationsprogramm enthält keine Datei mit diesem Pfad. Aufgrund des "rar" im Namen vermute ich aber, das es sich um eine von RAR angelegte temporäre Datei handelt - die aber nicht wirklich angelegt wurde. Darum ging die Installation dann schief. Offenbar muss man, wenn man WinRAR zur Behandlung von .ZIP-Dateien verwendet, die Installationsdatei der Baustatik erst in einen separaten Ordner extrahieren und von dort starten, statt sie direkt aus der ZIP-Datei heraus auszuführen.


Action und Converter: Generic Delegates


Sie stammen nicht aus dem "neuen" Visual Studio 2008 Paket, sondern es gibt sie schon seit .Net 2.0 und dem Visual Studio 2005: Die beiden Generic Delegates "Action" und "Converter". Und obwohl sie nun schon einige Jahre auf dem Buckel haben, habe ich es bis zu dieser Woche geschafft, die beiden vollkommen zu übersehen. Nachdem ich annehme das ich da nicht der einzige bin, ist das Grund genug, beide kurz unter die Lupe zu nehmen.

Das Action Generic Delegate

Die Dokumentation sagt dazu lapidar "Encapsulates a method that takes a single parameter and does not return a value.". Das ist schön. Die Frage ist aber: Wozu soll das gut sein?

Ein ganz typischer Fall ist der, das man eine Sammlung von Objekten hat, und für jedes dieser Objekte einen Vorgang durchführen möchte. Gängigerweise tut man dann folgendes:

foreach( TypeOfObject obj in sammlung)
{
   DoSomethingWithObject( obj );
}

Weil man das so oft braucht, hat List<T> ein eigenes ForEach. Hat man beispielsweise eine List<string>, kann man auch folgendes Konstrukt verwenden:

list.ForEach( DoSomethingWithString );  // (DoSomethingWithString ist eine Methode die einen string als Parameter bekommt.

List<T> verwendet als Parameter den Action-Delegate. Das ganze geht dann auch anonym, also ohne explizit eine DoSomethingWithString( string s) Methode zu implementieren:

list.ForEach( delegate( string s)
{
   Console.WriteLine( s );
});

Nun muss man sich ein etwas umfangreicheres Konstrukt vorstellen: Man hat eine Sammlung an Objekten und muss für alle Objekte mehrere Aufgabe durchführen: Die Aufgaben sind im wesentlichen gleich, unterscheiden sich aber durch einen bestimmten Vorgang. Auch hier hilft das Action-Delegate.

void foo1()
{
   Action<Control> showNameDelegate = delegate(Control c) { MessageBox.Show(c.Name); };
   DoWork(showNameDelegate,
this.Controls);
}

void foo2()
{
   Action<Control> showSizeDelegate = delegate(Control c) { MessageBox.Show(c.Size.ToString()); };
   DoWork(showSizeDelegate,
this.Controls);
}

private void DoWork(Action<Control> action, System.Windows.Forms.Control.ControlCollection controls)
{
   foreach (Control control in controls)
   {
      // hier wird "allgemeingltige" arbeit mit dem
      // control durchgefhrt.

      action(control);

      // hier wird "allgemeingltige" arbeit mit dem
     // control durchgefhrt.
  
}
}

Man kann dadurch also die "allgemeingültige" Arbeit mit einer Methode versorgen, die die unterschiedlichen Aspekte übernimmt.

Das Converter Generic Delegate

Hier geht es um folgendes: Das Delegate bekommt ein Objekt von einem Typ und liefert eines von einem anderen Typ. Angenommen man hat eine Methode zum anzeigen einer Form, die, bevor sie die Form anzeigt, viele aufwendige Dinge mit der Form tut. (Im Beispiel ist das nur das Verändern des FormBorderStyle, aber die Sache kann ja auch aufwendiger werden.)

Nun will man aber im einen Fall die Form Modal anzeigen, im anderen nicht. Wird Sie modal angezeigt, muss das DialogResult geliefert werden: Die Form wird also effektiv in ein DialogResult "umgewandelt". Im nicht-modalen Fall passiert das auch, nur ist das DialogResult dann "None".

Mit dem Converter Delegate ist das kein Problem:

        private void button1_Click_1(object sender, EventArgs e)
        {
            Converter<Form, DialogResult> showFormDelegate = delegate(Form f) { return f.ShowDialog(); };

            DoShowForm(showFormDelegate, new Form1());
        }

        private void button2_Click(object sender, EventArgs e)
        {
            Converter<Form, DialogResult> showFormDelegate = delegate(Form f) { f.Show(); return DialogResult.None; };

            DoShowForm(showFormDelegate, new Form1());
        }


        private DialogResult DoShowForm(Converter<Form, DialogResult> showFormDelegate, Form f)
        {
            f.FormBorderStyle = FormBorderStyle.FixedToolWindow;
            // ... sowie andere taetigkeiten

            return showFormDelegate(f);
        }



 


Sourcegear vault: Erste Eindrücke


Ich arbeite nun seit einigen Tagen mit Vault, dem RCS von SourceGear. Soweit lief das alles ganz gut (bis auf ein Installationsproblem bei einem Entwickler) - und ich bin mit der Performance des Programms mehr als zufrieden. Es gibt allerdings eine Stelle die mich stört: Ein automatisches Checkout in der VS 2005 IDE dauert doch recht lange. Allerdings ist der Support von SourceGear sehr flott und kompetent - und hat mir kurzerhand mitgeteilt, das sie dieses Problem bei "großen" Solutions gehen: Nächste Woche gibts dafür ein Update.

Bin gespannt.


2 Kurzinfos zu Visual Studio 2008


Wer sich auch die Frage gestellt hat: Ja - man kann es parallel zu VS 2005 installieren.

Nicht so schön: Wenn man LINQ verwenden will, dann muss man auch das .NET Framework 3.5 verwenden. Das hätte mich nicht weiter gestört (auch wenn das Redistributable dafür ganz schön umfangreich ist) - aber die 3.5 läuft nicht mehr wie die 2.0 auf "älteren" Windows-Versionen: Nur XP, 2003 und spätere werden unterstützt.