Thomas Wölfers Baustatik-Blog

Thomas Wölfers Baustatik Blog

Wieso man Dialogboxen häufig schließen muss, bevor man weiter arbeiten kann


Bei vielen Statikprogrammen muss man eine Dialogbox immer erst wieder schließen bevor man die nächste öffnen kann. Will man also zum Beispiel einen Punkt definieren und öffnet die dazu passenden Dialogbox, dann kann man nicht 'einfach mal so' eine andere öffnen - zum Beispiel um die Koordinaten eines anderen Punktes abzulesen. Solche Dialoge nennt man 'Modal'. (Das öffnen der Dialogbox versetzt das Programm in einen anderen Betriebsmodus...)

Bei unserem FEM-Plattenprogramm, dem Scheibenprogramm und dem Tragwerksprogramm ist das nicht so. Mit ganz wenigen Ausnahmen kann man da so viele Dialogboxen gleichzeitig öffnen wie man mag - und beim kommenden Faltwerks-Programm wird das ebenfalls so sein. Dialogboxen die nicht erst beendet werden müssen nennt man 'Nicht-Modal' bzw. Modeless.

Dabei ist es ganz eindeutig extrem praktisch, wenn man die Dialogboxen nicht immer erst schließen muß - warum also gibt es Statikprogramme bei denen das so ist?

Ganz einfach: Modale Dialogboxen machen dem Programmierer viel weniger Arbeit. Weil das auf den ersten Blick nicht ganz klar ist, hier ein kurzes Beispiel dafür, welche Fälle eine 'modeless' Dialogbox behandeln muss...

Bei der (rein hypothetischen) Dialogbox handelt es sich um eine zur Bearbeitung der Eigenschaften eines Balkens. Dabei kann man den Start- und Endknoten sowie das Material des Balkens angeben.  Alle drei Eigenschaften verweisen dabei auf Definitionen - es gibt also irgendwo zwei Knotenobjekte und ein Materialobjekt das vom Balken verwendet wird.

Die Dialogbox ist nun also geöffnet und zeigt die Eigenschaften des Balkens an. Nachdem die Dialogbox die Arbeit mit dem Programm nicht blockiert können unter anderem nun folgende Fälle eintreten:

  • Der Balken wird an anderer Stelle im Programm gelöscht. Die Dialgobox muss also verschwinden.
  • Der Startknoten des Balkens wird an anderer Stelle im Programm gelöscht. In der Dialogbox muss also als Startwert sowas in der Art wie 'Nicht vergeben' angezeigt werden.
  • Der Name des zweiten Knotens wird über die Dialogbox zur Bearbeitung der Knoteneigenschaften verändert: Im Balken-Dialog muss also ein neuer Name angezeigt werden.
  • Über eine andere Stelle im Programm wird eine zweite Kopie des Dialoges zur Bearbeitung von Balken geöffnet - und zwar mit dem gleichen Balken. Jetzt muss eine Aenderung die mit der einen Dialogbox durchgeführt wird in der anderen angezeigt werden.
  • Wird die zweite Dialogbox nicht geschlossen, dann müssen die oben aufgeführten Fälle nun von zwei Dialogen behandelt werden - und die dürfen sich dabei gegenseitig natürlich nicht stören.
  • Während die Dialogbox geöffnet wird, wird die Eingabedatei aus der die Daten der Dialogbox stammen im Programm gelöscht: Die Dialogbox muss also ebenfalls verschwinden.
  • .... Und vieles weitere mehr: 'Modeless' Dialoge machen wirklich unglaublich viel Arbeit.

Bei unserem FEM-Programm und dem Tragwerksprogramm (und auch beim kommenden Faltwerksprogramm) ist die Sache noch ein bisschen komplizierter - denn hier kann man mit einer Dialogbox ja nicht nur ein einzelnes Objekte sondern auch mehrere gleichzeitig bearbeiten...


Objekte erzeugen wenn man nur einen Type hat: Beispiel für Reflection


Mit Reflection kann man nette Dinge tun. Angenommen, man hat zur Laufzeit nur einen 'Type' - braucht aber eine Instanz: Genau sowas kann man mit Reflection tun.

Zunächst ermittelt man dazu den Konstruktor zum Type. Das geht mit oder ohne Parameter - im einfachsten Fall ermittelt man eben den Konstruktor ohne Parameter. Den ruft man dann auf - schon hat man ein Objekt.

Mit diesem Basiswissen kann man nun auch eine neue Instanz eines Objektes erzeugen, wenn man nur ein 'object' hat: Denn dessen Typ kann man ja ermitteln. Beides zusammen ergibt dann diese Beispielklasse:

public sealed class Creator
{
  private Creator() {}

  public static object CreateFromType( Type t)
  {
    
ConstructorInfo f = t.GetConstructor( Type.EmptyTypes);
   
return f.Invoke( Type.EmptyTypes);
  }

  public static object CreateFromTemplate( object o)
  {   
   
return CreateFromType( o.GetType());
  }
}

Mit dieser Klasse ausgestattet kann man nun lustigen Code schreiben. Zum Beispiel diesen, bei dem eine Form erzeugt wird ohne das man irgendwo ein 'new' findet....

static void Main(string[] args)
{
   Form f = Creator.CreateFromType(
typeof( Form)) as
Form;
   Button b1 = Creator.CreateFromType(
typeof( Button)) as
Button;
   b1.Text = "Button1";
   f.Controls.Add( b1);
   Button b2 = Creator.CreateFromTemplate( b1)
as
Button;
   b2.Text = "Button2";
   b2.Location =
new
System.Drawing.Point( 100, 10);
   f.Controls.Add( b2);
   f.ShowDialog();
}

Achtung: Reflection ist  l a n g s a m. Es spricht nichts dagegen Reflection zu verwenden - man muss sich nur im klaren sein das Reflection ein Performance-Killer ist. Kommt es nicht auf die Performance an, dann ist es aber ein wunderbares Tool.


TypeConverter.GetStandardValuesExclusive() - Eine Kurzerklärung


Wenn Sie einen eigenen TypeConverter implementieren dann müssen Sie GetStandardValuesExclusive() verstehen.

Laut Dokumentation liefert die Methode 'true', wenn es sich bei der Liste der Standard Values die GetStandardValues() liefert um eine 'exklusive' Liste handelt. Das ist ein bisschen schwer zu verstehen - was passiert ist aber das folgende:

Angenommen die Standard-Values werden in einem Editor im PropertyGrid angezeigt. Wenn GetStandardValuesExclusive() nun true liefert, dann wird der Editor eine Combo-Box sein, bei der es keine Möglichkeit gibt einen freien Text einzutippen. Liefert die Methode false, dann kann getippt werden.

Mit anderen Worten: Man wird fast immer 'true' liefern wollen.


Hilfreich oder verwirrend: Der Copy-Button


Mein Bruder hat hier schon über den Support für die Zwischenablage (Clipboard) in unseren aktuellen Programmen geschrieben, und auch darauf hingewiesen das in dieser Richtung mehr zu erwarten ist. Zu den angesprochenen 'intelligenteren' und 'komfortableren' Möglichkeiten werde ich zu einem späteren Zeitpunkt noch genug schreiben - hier gehts jetzt erstmal einfach nur um das 'normale' Clipboard, und über eine kleine Aergerlichkeit die mir heute im Faltwerksprogramm aufgefallen ist.

Bei den jetzt verfügbaren Programmen ist es so, das Sie zwei 'Kopieren' Buttons haben. Der eine kopiert Text, der andere kopiert eine Graphik in die Zwischenablage. Man kann als danach entweder Text oder aber Graphik woanders einfügen.

Bei den neuen Programmen ist das anders. Zum einen kann man da neben Text und Graphik auch noch andere Formate einfügen (HTML, nach Word, nach Excel, in verschiedene Graphikprogramme...) und natürlich kann man auch einfach Teile der Struktur in die Zwischenablage kopieren.

Das 'einfügen' funktioniert dann im Programm selbst - man bekommt eben eine Kopie der markierten Teile des Bauwerkes - aber auch in anderen Programmen. Was dort eingefügt wird, ist von den 'anderen Programmen' abhängig. In Excel fügen wir eben Zellen ein, in Notepad Text und in Paint eben eine Graphik.

Und da geht der Aerger los: Normalerweise würde man erwarten, das der 'Kopieren' Button in der Werkzeugleiste ausgeschaltet ist, wenn im Tragwerk momentan keine Elemente ausgewählt sind. Denn: Ist nichts ausgewählt, kann auch nichts in die Zwischenablage kopiert werden. Das stimmt aber so nicht mehr - denn Sie können IMMER das momentan angezeigte Bild kopieren. Dazu muss nichts ausgewählt sein. Das muss so sein, denn ansonsten könnte man ja nur Graphiken kopieren in denen immer 'ausgewählte' Strukturelemente vorhanden sind... Das will man ganz sicher nicht.

Das bedeutet, der 'Copy' Button ist immer 'an'. Nun würde man erwarten das der 'Einfügen' Button 'an' geht, nachdem man einmal auf 'Copy' gedrückt hat. Das passiert aber auch nicht immer. Denn wenn nichts im Bauwerk ausgewählt ist, dann wird auch nur eine Graphik in die Zwischenablage kopiert. Die Graphik kann man aber eben nur in einem Malprogramm wieder einfügen - nicht im Faltwerk...

Ergebnis: Wenn man nichts ausgewählt hat ist der 'Kopieren' Button trotzdem aktiviert - aber wenn man dann draufdrückt wird der 'Einfügen' Button trotzdem nicht aktiv.

Sobald man das ein paarmal gemacht hat ist das schon ok - aber ich glaube, ich muss mich da trotzdem erst dran gewöhnen.


Wie funktionieren die D.I.E. Mailing-Listen?


Für den Support unserer Statiksoftware bieten wir zwei Mailing-Listen an: Eine die nur für Hinweise von uns verwendet wird - über diese Liste werden zum Beispiel Informationen über Updates verteilt - und eine die zur Diskussion unter Anwendern der Baustatiksoftware verwendet werden kann.

Wie aber funktionieren solche Mailing-Listen?

Das Konzept ist relativ einfach: Wie der Name schon verrät handelt es sich bei einer Mailing-Liste im wesentlichen um eine Liste in der eMail-Adressen eingetragen sind. Diese Liste wird von einer Software verwaltet (wir benutzen die hier), und im Rahmen der Verwaltung kann man mehrere Dinge tun:

- Man kann sich selbst (bzw. seine eMail-Adresse) beispielsweise in der Liste ein- oder austragen. Das geht bei uns mit diesem Formular auf unserem Webserver. Füllt man das Formular aus schickt es ab, dann wird im wesentlichen eine Mail an die 'Listen-Software' geschickt. Diese Mail enthält einen Befehl (den zum ein- bzw. austragen) und die eMail-Adresse um die es geht. Die Listen-Software trägt die Adresse dann in der Liste ein, bzw. trägt die Adresse aus der Liste aus.

- Außerdem kann man eine eMail an die Listesoftware schicken: Dazu hat diese für jede Liste eine eigene eMail-Adresse. Das Diskussionsforum hat beispielsweise die Adresse 'forum@die.de'. Wird nun eine eMail an diese Adresse geschickt, dann wird diese Mail von der Listen-Software empfangen. Die Listen-Software leitet diese eMail dann an alle auf der Liste stehenden Mail-Adressen weiter. Dadurch kann man ganz einfach mit jedermann auf der Liste kommunizieren: Man muss einfach nur eine eMail an die Liste senden.

Das hat natürlich einen Haken: Wenn einfach jeder eine Mail an die Liste schicken kann und diese Mail wird dann einfach an jeden verteilt - dann wäre das natürlich ein gefundenes Fressen für Spammer: Die brauchten ihre Reklame dann noch nicht einmal selbst zu versenden, sondern könnten das von der Listen-Software von Dritten machen lassen.

Aus diesem Grund gibt es noch einen Zwischenschritt: Bevor die Listensoftware die eMail nämlich verteilt, sendet sie die Mail an den 'Administrator' der Liste. Dabei handelt es sich um einen Menschen - und der kann den Inhalt der eMail dann prüfen. Passt der Inhalt zum Sinn der Liste, dann schickt der Administrator die Mail erneut an die Listen-Software und erst dann wird die eMail an alle verteilt. Mit anderen Worten: Jeder kann Mail an die Liste schicken, aber nur eMail die vom Administrator stammt wird auch verteilt.

Wenn Sie also demnächst mal wieder eine Frage zu unseren Statikprogrammen haben: Einfach eine eMail an die Liste schicken. :-)


Achja... eine letzte Bitte


Weil es immer wieder vorkommt möchte ich an dieser Stelle einfach nochmal drauf hinweisen....

Wenn Sie der Firma DEE Sportswear ( www.dee.de ) oder auch der Firma Dr. Jens Ehrhardt Kapital AG ( www.dje.de ) oder aber auch der Firma Deutsche Luftfahrtservice GmbH ( www.dle.de ) eine eMail schicken wollen:

Die eMail-Adressen aller dieser Firmen sind nicht 'info@die.de'.

Nicht das ich mich nicht immer wieder über Angebote für Hubschrauberzubehör freuen würde...


RootKits: Was ist das


Ich hatte gestern abend ein Gespräch mit einem Ingenieur (Maschbau) der nun als EDV-Berater tätig ist. Der Mann führt Schulungen für allgemeine IT-Geschichten durch: Word, Excel, Windows XP - derlei Dinge. Trotzdem natürlich eigentlich ein IT-Profi und darum hat mich etwas verwundert: Er wusste nicht besonders viel über IT-Sicherheit. Ging davon aus, das seine 12 Schulungsrechner die seit 2 Jahren mit Windows 98 online sind, keinerlei Sicherheitsprobleme haben. Die würden sich nämlich ganz normal verhalten. Mit anderen Worten: Er wusste nicht was Root-Kits sind. Ich gehe also mal davon aus das das kein wirklich weit verbreitetes Wissen ist... daher: Hier eine kurze Erklärung.

Ich stelle immer wieder fest das viele Leute glauben, ihre Antiviren-Software würde schon mit jeglichen Eindringlingen fertig. Das ist aber nicht der Fall. Die Sache geht sogar deutlich weiter: Ist ein Rechner einmal infiziert, dann kann man keinerlei Information die dieser Rechner von sich gibt mehr trauen - dazu verwenden Angreifer sogenannte Root-Kits.

Das Root-Kit verändert dabei die Installation des Betriebssystems derart, das die Informationen die Sie vom Betriebssystem erhalten nicht mehr stimmen. Der Task-Manager zeigt in der Liste der Tasks den vom Angreifer initiierten Prozess schlichtweg nicht an. Der Explorer zeigt das Verzeichnis in dem sich die Dateien des Angreifers befinden nicht an - und auch ein 'dir' Befehl auf der Kommandozeile führt nicht dazu das man irgendwas sieht.

Ebensowenig finden irgendwelche Antiviren-Programme irgend eine verdächtige Spur. Der Rechner läuft einfach ganz normal, eben so, wie man das erwarten würde und es gibt keinerlei Spuren das das System übernommen wurde. 

Trotzdem kann der Angreifer mit dem System machen und tun was er will: Im Normalfall bedeutet das, der Rechner wird als Zwischenlager für Bilder und Filme mit nackten Menschen drauf benutzt, oder aber er soll für den Versand von Spam-Mails verwendet werden.

Das beste: Root-Kits sind kein Science-Fiction Erfindung, sondern extrem einfach im Netz verfügbar. Auch nur mittelmäßig begabte Computeranwender können solche Dinger einsetzen. Bei einem angreifbaren Rechner kann die Übernahme mehr oder minder vollautomatisch erfolgen.  

Es gibt auch Wege Rootkits zu erkennen. Dummerweise braucht man dafür passende Tools - zum Beispiel an nicht befallenes Betriebssystem. Microsoft Research hat hier ein interessantes Paper zu diesem Thema.

Lange Rede kurzer Sinn: Wenn Sie mit Ihrem Rechner online gehen - dann verwenden Sie keine Spielzeuge wie Windows 98 oder ME, sondern besorgen Sie sich eine Kopie von Windows XP und installieren Sie dann das SP2. (Wenn Sie mehrere Rechner updaten wollen, dann gibts das SP2 hier. Wenn Sie nur einen Rechner haben - schalten Sie automatische Updates ein, dann bekommen Sie die Sache ganz von alleine.)