Thomas Wölfers Baustatik-Blog

Thomas Wölfers Baustatik Blog

Keine Macros in C#


Vor ein paar Tagen gab es eine kurze Diskussion über Features, die man in C# gerne sehen würden. Abgesehen von Templates, die es in Form von Generics ja bald geben wird, vermisse ich Macros am meisten. Eric Gunnerson hat hier eine kurze Begründung dafür, warum es keine gibt. (Wow - Eric liest meine Kommentare! :-) )

Anschliessen kann ich mich dem aber nicht: Es gibt immer Möglichkeiten ein Tool zu mißbrauchen, und nur weil es Programmierer gibt die mit Macros verantwortungslos umgehen, bedeutet das meiner Ansicht nach nicht, das man sie aus dem Sprachumfang heraushalten sollte.

Naja - egal: Es gibt halt keine, und dabei wirds wohl auch bleiben.


Unterhaltung fürs Wochenende


Eine sehr beeindruckende TV-Video Suche: blinkx. Irre, hoffentlich gibts sowas auch bald fürs Programm in Deutschland.

Nummer 2: The Infinite Cat. Bilder von Katzen, die Katzen im Monitor betrachten, die Katzen im Monitor betrachten....


Support: 20 Euro für 10 Minuten ?


Gestern ist mir eine interessante Politik eines unserer Konkurrenten im Bereich für Baustatik-Software aufgefallen. Wenn man dort ein Programm kauft ohne irgend welche weiteren Verträge abzuschliessen, und dann ein Problem oder eine Frage hat (im Fall den ich mitbekommen hatte ging es darum, das das Programm einfach nicht starten wollte),  dann kostet ein Anruf bei der Hotline 20 Euro pro 10 Minuten.

Für 12 mal telefonieren dort bekommt man bei uns schon fast einen kompletten Work&Cash Vertrag. Zugegeben: Es ist der kleinste. Doch auch damit kann man schon mit allen unseren Statikprogrammen arbeiten - nicht nur mit einem einzelnen. Der Support per eMail, Telefon und Fax ist außerdem ebenfalls im Preis enthalten. Es gibt sogar eine kostenfreie Telefonnummer, unter der man unsere Hotline erreichen kann.

(Das Hochschulen, Studenten und alle sonstigen Schüler unsere Programme völlig kostenlos und ohne Einschränkung benutzen können, habe ich ja schon öfter erwähnt. Ich reite aber trotzdem nochmals drauf rum... ;-) )


Visual Studio 2003: Search doesn't work - Vote on Bugs


[Der nächste Eintrag ist wieder auf deutsch... :-)  - übersetzung weiter unten ..]

Nothing new here: 'Search' in VS 2003 sucks big time. The ui is horrible etc. etc. - and apart from that, it doesn't even work. if there are files with multiple dots in their names ( eg: my.file.h ), 'search in entire solution' will ignore those files. 

please vote for (well, against...) this bug in ladybug.

-------

Die Suche in VS 2003 hat jede Menge Probleme, und abgesehen davon das sie einfach insgesamt Mist ist, funktioniert sie nicht mal richtig. Wenn man in der 'Entire Solution' sucht, dann werden Dateien mit mehreren Punkten im Namen einfach ignoriert.

Es gibt einen Eintrag dafür in Ladybug: Stimmabgabe hier


Das Rätsel von ClearType


Ich habe an dieser Stelle ja schon häufiger über ClearType geschrieben. Jetzt ist mir anhand der Logfiles des Blogs aufgefallen, das ich offenbar eine kleine Anlaufstelle für ClearType - Fragen geworden bin. Immer wieder gibt es Suchen danach, wie man ClearType in Anwendungen und nicht nur im Betriebssystem verwendet. Dabei ist das ganz einfach.

Als Anwender

Sie müssen gar nichts tun - außer, das Sie ClearType einschalten. Überall wo dann passende Fonts verwendet werden, wird dann auch ClearType verwendet: Ganz automatisch, und ohne weiteres zutun.

Als Entwickler

Sie müssen eigentlich auch nichts tun - außer vielleicht, total veraltete und nicht skalierbare Fonts zu verwenden. Wenn Ihre Anwendung TrueType Fonts verwendet - oder wenn Ihre Anwender einstellen können, welche Fonts verwendet werden können - dann verwendet Ihre Anwendung auch automatisch ClearType.

 


Deutsche BA: Günstige Flüge, aber schlechte Ansagen


Ich fliege ja gern mit der DBA zwischen München und Düsseldorf, nicht zuletzt weil die Flüge doch extrem günstig sind. Für 45 Euro (in einer Richtung) kann man da nicht meckern. Außerdem ist das Webinterface zum Buchen von Flügen wirklich prima, im Gegensatz zu dem der Lufthansa, in dem ich mich regelmäßig verirre - nur um dann hinterher festzustellen das der Spass ohnehin meist das doppelte bis dreifache kosten würde.

Was die Leute von der DBA aber überhaupt nicht auf die Reihe bekommen ist eine vernünftige Ankündigung von Verspätungen. Momentan sitze ich beispielsweise mal wieder auf dem Münchner Flughafen. Es ist 12:15, und die Boarding-Time wäre 11:35 gewesen. Und das ist auch genau das, was bis vor einer Minute noch angezeigt wurde.

Dann hiess es, es gäbe ein neues Gate (da bin ich jetzt) und der Flug würde sich um 25 Minuten verspäten. Wohlgemerkt - die Verspätung beträgt bereits jetzt 40 Minuten - und diese Verspätungsansage war die erste. Am Gate steht aber noch nicht einmal ein Flugzeug. Ich lass mich also mal überrraschen, wann denn der Flug nun wirklich geht.

Es wäre wirklich deutlich besser, wenn die DBA sowas klarer kommunizieren würde: Dann müsste man nicht blöd am Gate rumsitzen und hoffen, sondern könnte vielleicht auch mal was essen gehen...

Ich kann auch mit viel Verständniss dafür, das Verspätungen eben eintreten nicht verstehen, wieso die das nicht wenigsten klar bekannt geben können, statt einen im Umklaren zu lassen.


Indexer in C#, Zugriff in MC++


Manche Problemlösungen sind so einfach, das man sich stundenlang damit beschäftigen kann herauszufinden, wie sie funktionieren: Das nennt man dann wohl Betriebsblindheit.

Indexer in Managed C++ sind gut dokumentiert. Im Wesentlichen läuft es bei einem Indexer darauf hinaus, das man in einer C++ Klasse einen Zugriffsmechanismus implementieren will, der im Managed C# oder VB Code dann zum indizieren verwendet werden kann. Angenommen, man hat eine Klasse (im MC++) die ein Array aus Strings kapselt, und man möchte von C# darauf per Array-Notation (  string temp = obj[i]; ) zugreifen. Dazu definiert man den Indexer in MC++ wie folgt:

[System::Reflection::DefaultMemberAttribute(S"Item")]
public __gc class MyCollection
{
  __property String* get_Item(int index);
};

Fein, das ist einfach. (Wer auch per Array-Notation reinschreiben will, braucht eine passende get_Item Methode.)

Nun hatte ich aber genau den anderen Fall. Im Code gibts eine Polygon-Klasse (XPolygon2d) die in C# definiert ist, und die einen Indexer zur Verfügung stellt. Das Polygon setzt sich aus Punkten vom Typ XPoint2d zusammen, und so ein Punkt wird dann beim Zugriff per Indexer geliefert. Das sieht als etwa so aus:

public XPoint2d this[ int n]
{
 
get
 
{
    
return( m_Points[ n]);
  }
}

Nun gibts eine weitere Klasse im MC++ Code, die so ein Polygon übergeben bekommt und auf die Punkte darin zugreifen muss. Mein Problem: Wie zum Henker muss man das nun hinschreiben? Es hat ganz schön gedauert bis ich drauf gekommen bin, dabei ist die Lösung total einfach - man greift einfach genauso drauf zu, als würde es sich um einen Zugriff auf einen Indexer handeln, der in MC++ definiert wurde. Eigentlich völlig logisch :-)

void AddPolygon( XPolygon2d* polygon)
{
  
int iPoly=0;
   XPoint2d point = polygon->get_Item( iPoly);
}

 


Bauindustrie: Weiterhin schlechte Prognosen


Der Hauptverband der deutschen Bauindustrie sagt keine guten Zahlen für 2005 voraus. Man geht von einem Umsatzrückgang von 3.5% und 32.000 gefährdeten Arbeitsplätzen aus. Im Jahresdurchschnitt würde das Bauhauptgewerbe dann nur noch 735.000 Mitarbeiter beschäftigen. Die Anzahl der Beschäftigten hat sich in den letzten 10 Jahren damit halbiert.

Dabei sieht es nur in der Bundesrepublik so unschön aus - im Ausland boomt das Bauwesen. Das haben auch die großen Baukonzerne erkannt - einige früher, andere - wie Walter Bau - erst später. Vielleicht zu spät. Aktuelle Zahlen über die großen gab es in der aktuellen Zeit.

Zahlen aus der Bauindustrie

Hochtief

Umsatz 2003: 11.5 Mrd Euro
Auslandsanteil: 80 Prozent
Gewinn 2003: 77 Mio Euro
Mitarbeiter: 36.000

Bilfinger Berger

Umsatz 2003: 5.6 Mrd Euro
Auslandsanteil: 75 Prozent
Gewinn 2003: 50 Mio Euro
Mitarbeiter:: 49.000

Strabag Deutschland

Umsatz 2004: 3.4 Mrd Euro (geschätzt)
Auslandsanteil: 40 Prozent
Gewinn 2004: Null (geschätzt)
Mitarbeiter: 10.400

Die momentan stark unter Druck stehende Walter-Bau hat einen Auslandsanteil von 25%. Die Probleme resultieren aber weniger aus dem 'geringen' Auslandsanteil und mehr aus der schlechten Zahlungsmoral der Bauherren. Walter hat 450 Millionen Euro Aussenstände, allein 100 Millionen fordert der Konzern noch von der Deutschen Bahn.


Unterhaltung fürs Wochenende


Dieses mal gibts einen 'Multimedia' Link. (Man muss ein bisschen Geduld damit haben und außerdem eine hohes Maß an Begeisterungsfähigkeit für den Raumflug mitbringen.)

So hören sich die Radar-Echos von Huygens an, wärend die Sonde die letzten paar Kilometer zur Oberfläche des Titan zurücklegt: Radar-Echo als Soundfile (Im mp3 Format, von der ESA)


Das Blog 1.7 - noch ein paar Hinweise


Noch ein paar Tipps zu dasBlog 1.7 - lauter Dinge, die es sich zu wissen lohnt (und dann noch etwas Kleinkram... :-)

MT-Blacklist verwenden

Die MT-Blacklist, die von dasBlog verwendet wird um Spammer zu identifizieren hatte ich schon erwähnt. Nicht erwähnt hatte ich, wie man die updatet. Der ganze Sinn der Sache ist ja der, das neu auftretende Spammer in der Liste landen und dann von dasBlog erkannt werden können. Die Liste wird aber von Jay Allen verwaltet. Wie kommt sie also von dort ins SiteConfig Verzeichnis? Ganz einfach: Das geht von selbst. :-)

Jedesmal wenn dasBlog gestartet wird (und das passiert bei jedem Refresh des AppPools, also meist einmal am Tag) holt sich dasBlog eine frische Kopie der Masterdatei. Man muss also selbst nicht tätig werden. Wenn Sie sich nicht sicher sind ob und wann ihr dasBlog gestartet wird (zum Beispiel, wenn Sie den IIS nicht selbst hosten, sondern bei einem Hosting-Provider untergebracht sind, und darum keinen Zugriff auf den IIS haben) dann werfen Sie einfach mal einen Blick auf die Seite 'Events' in Ihrer Configuration. Da wird mit dem Text 'Application startet' mitprotokolliert, wenn dasBlog gestartet wurde.

Blacklist um eigene Einträge erweitern

Ganz unten im Config-Bereich gibts dazu ein Textfeld. Da kann man URLs von Referrer mit Semikolon getrennt reinschreiben und damit die Blackliste um eigene Einträge erweitern. (Dank an Scott)

Fehler beim ping an blo.gs loswerden

Wenn Sie in das 'Events' Log reingeschaut haben, dann werden Sie feststellen das das anpingen von blo.gs einen Fehler verursacht, der auf ein 'unbekanntes' Kompressionsverfahren zurückgeführt wird. Um das loszuwerden stellen Sie in der 'Web.config' das verwendete Verfahren von 'deflate' auf 'gzip' um. (Dank an pjrider)

Umständliches hochladen von Bildern

In der letzten Version konnte man ein Bild einfach lokal auswählen und hochlanden, es landete dann automatisch im Blogeintrag. Jetzt muss man erst immer durch die Bilder-Galerie, was reichlich umständlich ist - besonders, wenn man schon eine ganze Menge an Bildern hochgeladen hat. Die werden dann nämlich jedesmal für die Anzeige wieder runtergeladen (oder zumindest auf ihre 'Freshness' überprüft). Außerdem klappt es nicht neue Ordner anzulegen um wenigsten neue Bilder in einen anderen Ordner hochzuladen.

Da gibts zwei gute Nachrichten: Omar will die alte Funktion (zusätzlich) wieder einbauen, und es macht den Eindruck als würde das nicht lange dauern. Was die Ordner angeht: Das kann man leicht selbst ändern. Dazu muss man nur den Aufruf der FreeTextBox  (im ftb - Verzeichnis) ändern. Der hat eine reihe an Parametern, und zwei davon sind für anlegen und löschen neuer Ordner zuständig. Beide stehen per Default auf 'false'. Setzt man die auf 'true', gehts wieder.

Hochladen von Attachments

In Version 1.6 gab eine eine Eingabezeile mit der man Attachments (also normale Dateien) hochladen konnte. Die gibts nicht mehr. Statt dessen gibt es nun eine Zeile mit dem Titel 'Enclosure'. Bei Enclosures handelt es sich um RSS2 Element, das im Wesentlichen genau die gleiche Aufgabe hat wie die 'alten' Attachments. Momentan geht nur ein Enclosure pro Eintrag :-( - dafür muss man den nicht mehr separat hochladen. Man trägt die Datei einfach in der Textzeile ein, und beim veröffentlichen hängt die dann automatisch unter dem Eintrag.

Von Haus aus steht das Ding aber an einer Stelle, die meiner Ansicht nach etwas merkwürdig ist, nämlich unter den Trackbacks. Wenn man das Ding direkt unter dem Eintrags-Text haben will, muss man das 'itemTemplate' ändern und das <% enclosure() %> Makro entsprechend verschieben. Dann siehts so aus wie hier.

Leider gibts da einen Bug: Man wird ein einmal hochgeladenes Attachment nicht mehr los. Ist bereits im Tracker eingetragen. Will man das Attachment doch loswerden gibts momentan nur eine Möglichkeit: Den ganzen Blog-Eintrag löschen (vorher besser den Inhalt kopieren...) und dann neu und ohne Enclosure wieder anlegen.

Probleme mit dem MailTo Anchor

Roland Schumacher hat mich auf ein weiteres Problem aufmerksam gemacht: Wenn der Name des Blogs einen Hochhaken enthält (z.b.: Geniali's Blog), dann klappt der Link nicht. Klickt man drauf bekommt man einen JavaScript Fehler. Das kann man auf zwei Arten loswerden:

  1. Man schaltet die Option 'obfuscate email' aus. Dann wird kein JavaScript mehr für den Link verwendet. (Das habe ich nicht ausprobiert, sollte aber gehen.)
  2. Man kümmert sich drum das der Hochhaken (') vernünftige escaped wird. Statt dem ' muss also ein \' beim rendern der Seite ausgeworfen werden. Dazu ändert man die Quellcode-Zeile 371 von Macros.cs wie folgt:
    messageSubject = messageSubject.Replace("'", @"\'");

Ich habe das bereits als Bug eingetragen. Leider habe ich momentan keine Zeit dafür, sonst würde ich das selbst beseitigen.