Brüder im Geiste (29. Dezember 2004)

Das könnte ein schöner Tag werden. Den Wortspreizern zeigt http://www.deppenleerzeichen.de/, wo der Bindestrich hängt. http://www.einzelhandelspoesie.de/ und http://www.dooden.de/ sind ebenfalls Empfehlungen aus der aktuellen Ausgabe der c't und damit nicht besonders originell, jedenfalls nicht, wenn ich sie hier aufführe. Aber solches Bestreben gilt es zu fördern, also liste ich die Verweise auf diese Projekte, bis deren Google-Ranking durch die Decke geht.


Ich brauche KurzURLaub! (29. Dezember 2004)

Wer schon ein bißchen meine TWiki-Seiten durchstöbert hat, hat sicher bemerkt, daß TWiki-URLs ihre Eigenheiten haben. Statt eines Verweises auf eine statische HTML-Seite bezeichnet eine TWiki-URL den Aufruf von CGI-Scripts mit Parametern:

   http://www.clausbrod.de/Atari                    # typisch "statisch"
   http://www.clausbrod.de/cgi-bin/view.pl/Atari/   # TWikifizierte URL

Ohne Zweifel tippt und merkt sich die erste Form viel leichter. TWiki basiert aber nun einmal auf von CGI-Scripts dynamisch erzeugten HTML-Seiten. Das ist natürlich noch lange kein Grund, mit diesen Interna hausieren zu gehen, indem man solche URLs nach außen gibt, denn so etwas ist definitiv uncool. Aber es zu beheben, ist leider gar nicht so einfach.

Nach einigem Kopfkratzen und Geschraube funktioniert die obige erste URL-Form sogar. Naja, so ein bißchen jedenfalls. Eine kleine Sammlung von RedirectMatch-Anweisungen (Apache-Modul mod_alias) in der passenden .htaccess-Datei macht es möglich, die einfache URL-Form zu verwenden. Die wird dann von RedirectMatch in die Langform verwandelt, und die richtige Seite erscheint. Soweit nicht schlecht, nur: In der URL-Eingabezeile des Browsers erscheint nun wieder die Langform der URL.

Lange URLs

Das liegt, so denke ich, daran, daß RedirectMatch die URL zuerst umformt und dann an den aufrufenden Browser zurückschickt mit dem Vermerk, daß sich die URL geändert hat - worauf der Browser es mit der neuen URL einfach nochmal versucht. (Wer mich bei einer dumpfbackigen Fehlinterpretation erwischt, grätsche hier bitte beherzt dazwischen.) Und das macht die "neue", also lange URL eben wieder sichtbar.

Der nahe Verwandte von RedirectMatch namens ScriptAliasMatch scheint ohne Rekurs zum Client zu funktionieren - aber sobald ich entweder ScriptAlias oder ScriptAliasMatch verwende, schlagen alle Zugriffe auf meine Website mit einem Serverfehler fehl. Das liegt wohl daran, daß ScriptAlias und ScriptAliasMatch nur in der Konfigurationsdatei httpd.conf, aber nicht in .htaccess erlaubt sind. Auf httpd.conf habe ich aber bei meinem Provider (Strato) keinerlei Zugriff, muß mich also mit .htaccess begnügen.

Die einschlägigen TWiki-Tricks zu diesem Thema verweisen meist auf das Apache-Modul mod_rewrite. Zwar setzt Strato auf dem kleinen Stück Server, das ich dort gemietet habe, tatsächlich Apache ein, jedoch ist mod_rewrite dort nicht installiert. Offenbar kann man es auch nicht nachinstallieren, sondern braucht dazu einen eigenen Root-Server - was ich mir vorläufig nicht antun will.

Fürs Erste begnüge ich mich also mit dem bisher Erreichten. Links, die in TWiki-Seiten auftauchen, verweisen ebenfalls auf kurze URLs und werden dann ebenfalls dynamisch umgeleitet; das habe ich mit einer kleinen Änderung in DefaultPlugin erreicht. Und wer weiß, vielleicht inspirieren mich ja die folgenden einschlägigen TWiki-Artikel:

PS: Inzwischen habe ich die Artikel gelesen. Leider keine Lösung darin zu finden.


.NET tut net... (13. Dezember 2004)

Auf meine alten Tage befasse ich mich doch tatsächlich auch noch mit solchen Dingen wie Microsoft .NET. Wenn man mir das während meines Studiums und meiner hyperaktiven Atari-Zeit prophezeit hätte...

Nun denn. Kommt mir neulich so ein häßlicher kleiner Käfer entgegen. Und das kam so: Wenn man Werte vom Typ bool aus "managed code" in "unmanaged code" per Marshaling überträgt, geht das in so richtig großen Stil schief.

Der "managed code" (in C++) stellt einen einfachen Aufruf zur Verfügung mit einem Rückgabewert vom Typ bool. Vereinfachter Beispielcode:

  public __gc __interface IBool {
    bool Foo(void);
  };

  public __gc class Booltest : public IBool 
  {
  public:
    Booltest() {}
    bool Foo(void) { return false; }
  };

Diesen Code übersetzt man in ein Assembly, und daraus produziert man mittels regasm eine Typenbibliothek (tlb-Datei). Gleichzeitig registriert regasm das Assembly; und hinterher werfen wir das Assembly in den Schlund des GAC. Auszug aus der erzeugten Typenbibliothek:

    interface IBool : IDispatch {
        [id(0x60020000)]
        HRESULT Foo([out, retval] unsigned char* pRetVal);
    };

Man beachte, daß der Typ des Rückgabewerts vom bool nach unsigned char abgeändert wurde. Soweit keine Überraschung, denn Nathan erwähnt in seiner COM-Interop-Bibel, daß der Marshaling-Typ für Werte vom Typ bool eben UnmanagedType::U1 ist - also unsigned char.

So richtig übel wird es aber, wenn ich nun Foo() aus einem COM-Client zu rufen versuche. Der COM-Client erzeugt sich einen "smart pointer" vom Typ IBoolPtr und ruft dann Foo():

  bool ret = pBool->Foo();

Nach diesem Aufruf ist allerdings der Stack beschädigt. Läft man im Einzelschritt durch den Code, merkt man, daß der COM-Client denkt, der Rückgabewert sei ein Byte gross; daher legt er auch nur ein Byte auf dem Stack für die Ergebnisvariable ret an. Der Marshaling-Code allerdings schreibt munter vier Bytes!

Das gleiche passiert, wenn man im "managed code" das Attribut [MarshalAs(UnmanagedType::U1)] ausdrücklich anwendet. Microsoft beschreibt im Knowledge-Base-Artikel 823071 einen möglicherweise verwandten Fehler beim Marshaling von bool-Werten, allerdings hilft der vorgeschlagene Hotfix in meinem Fall nicht. Ändere ich den Marshaling-Typ auf U2, wird's noch lustiger: Dann überschreibt der Marshaler zwar keinen Speicher mehr, räumt dafür aber den Stackpointer nach dem Aufruf nicht mehr auf!

Hat jemand Ideen?

(Siehe auch http://groups.google.de/groups?hl=de&lr=&threadm=10gd95ifu6uoe9a%40corp.supernews.com.)

PS: Einige Zeit später hat uns Microsoft bestätigt, daß das in der Tat ein Fehler in .NET 1.1 war. .NET 2.0 macht's nun richtig.


Quamvis sint sub aqua... (12. November 2004)

... sub aqua maledicere temptant. Onomatopoesie nennt man das vornehm. Von Ovid ist das, und es sind in Frösche verwandelte Bauern, die er hier verspottet. Aber mit meiner von Wikipedia ergänzten Allgemeinbildung protze ich nur, um den Spannungsbogen zu eröffnen für einen der erfreulichsten Links, auf die ich in letzter Zeit gestossen bin:

http://www.google.com/intl/la/

Mein Chef meinte dazu nur: "Vivat, crescat, floreat!" Und hat mich damit schwer beeindruckt.


Moral values (3. November 2004)

Noch immer warten wir auf das endgültige Ergebnis der Wahlen in den USA. Aber es gibt immerhin schon Resultate von Wählerbefragungen, beispielsweise bei CNN - siehe http://www.cnn.com/ELECTION/2004/pages/results/states/US/P/00/epolls.0.html.

Und da gerät man doch ins Staunen. Beispielsweise sind für 22% der Wähler die "moral values" das bestimmende Wahlthema. Damit ist es überhaupt die wichtigste "Sachfrage", also noch vor Wirtschaft und Arbeit (20%), Terrorismus (19%) und Irak (15%).

Eigenartig. War es der Mangel an moralischen Werten, der die Twin Towers hat einstürzen lassen? Haben die liederlichen "liberals" im Lande für das gigantische Haushaltsdefizit gesorgt? Sind die Bestrebungen, homosexuellen Paaren eine bessere rechtliche Absicherung zu erlauben, schuld daran, dass Hunderttausende von Jobs verlorengingen? Hat Marilyn Manson zigtausende von jungen Amerikanern in den Irak geschickt, wo sie nun einer nach dem anderen von Sprengsätzen zerrissen werden?

Offenbar kann und muss ich noch viel über die USA lernen.


George W. Bush und das Internet (30. Oktober 2004)

"Tschortsch Dabbelju" nennen sie ihn jenseits des großen Teichs, und womöglich werden wir noch weitere vier Jahre mit ihm unsere Freude haben. "Dabbelju" also fuer das W. des zweiten Vornamens ("Walker").

Die Amerikaner haben's auch sonst schwer. Wenn unsereins eine URL buchstabiert, ist das umstehende Publikum zwar ob der "Slashes" gelegentlich ein wenig ratlos, doch dafür haben wir das erste URL-Segment ganz fix hinter uns: "wewewe", und was war's.

Unsere angelsächsischen Freunde dabbeln sich hingegen einen ab: "dabbeljudabbeljudabbelju". Dass das gerade in den USA blitzeschnelle als Zeitverschwendung erkannt wird, war klar: Dort hört man nun oft stattdessen "dabbdabbdabb" (sechs Silben weniger, immerhin). Was mich immer zum Schmunzeln bringt, weil es mich ein bißchen an den Spitznamen eines Mathematiklehrers an meinem Gymnasium erinnert - aber auch weil man sich nun vorstellen könnte, dass der dreiundvierzigste Präsident der USA demnaechst in den NBC-Nachrichten mal eben als "George Dabb Bush" angesagt wird.

Dass man sich recht unbeholfen benehmende Zeitgenossen bei uns daheim in Franken gerne "dabbich" nennt, will schon fast zu gut dazu passen.


Add a new blog entry
to top


You are here: Blog > BlogEntries2004

r1.3 - 28 Jan 2007 - 22:11 - ClausBrod to top

Blog
This site
RSS

  2017: 12 - 11 - 10
  2016: 10 - 7 - 3
  2015: 11 - 10 - 9 - 4 - 1
  2014: 5
  2013: 9 - 8 - 7 - 6 - 5
  2012: 2 - 10
  2011: 1 - 8 - 9 - 10 - 12
  2010: 11 - 10 - 9 - 4
  2009: 11 - 9 - 8 - 7 -
     6 - 5 - 4 - 3
  2008: 5 - 4 - 3 - 1
  2007: 12 - 8 - 7 - 6 -
     5 - 4 - 3 - 1
  2006: 4 - 3 - 2 - 1
  2005: 12 - 6 - 5 - 4
  2004: 12 - 11 - 10
  C++
  CoCreate Modeling
  COM & .NET
  Java
  Mac
  Lisp
  OpenSource
  Scripting
  Windows
  Stuff
Changes
Index
Search
Maintenance
Impressum
Datenschutzerklärung
Home



Jump:

Copyright © 1999-2024 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback