March 2003 - Posts
Habe heute bei Christoph Sprenger (Microsoft SE) einen netten kleinen Trick gesehen, wie man sehr einfach insb. Internetverzeichnisse wie Google oder dict.leo.org im Browser ansprechen kann. Statt auf ihre Suchseite zu gehen und dort ein Suchwort in ein Formularfeld einzugeben, kann man direkt in der IE Adressenzeile die Suche formulieren. In Google kann man dann z.B. mit
g .net framework
suchen. Oder die Übersetzung für ein englisches Wort mit
l database
in dict.leo.org.
Google-Toolbar und Favoriteneinträge und umständliche URL-Eingaben spart man sich damit. Cool.
Und so funktioniert´s: In der Registry müssen einfach nur Einträge bei den IE SearchUrls gemacht werden, die einem Platzhalter (s.o. "g" oder "l") eine URL zuweisen, in die dann der Text, der hinter dem Platzhalter steht, mit "%s" eingesetzt werden kann. Hier der Inhalt eines .reg-Files, das genau das tut:
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\SearchUrl\g]
@="http://www.google.com/keyword/%s"
[HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\SearchUrl\l]
@="http://dict.leo.org?search=%s"
Ausschneiden, als .reg-Datei speichern, aufrufen, fertig.
In einer WinForms-Anwendung den Mauspfeil in eine Sanduhr zu verwandeln, ist eigentlich einfach:
Dim curCurrent As Cursor = Cursor.Current
Cursor.Current = Cursors.WaitCursor
...
Cursor.Current = curCurrent
Aber Achtung! Der veränderte Mauszeiger bleibt nur solange sichtbar, bis in der Windows Message Queue wieder eine Nachricht steht und Gelegenheit war, sie zu verarbeiten. Gelegenheit zur Verarbeitung bekommt Windows explizit durch den Aufruf von Application.DoEvents() oder implizit z.B. durch Aufruf einer MsgBox. Das ist ja auch verständlich.
Weniger offensichtlich ist, das ja die Windows Message Queue weiter verarbeitet wird, wenn der Mauszeiger in einem Hintergrund-Thread verändert wird, z.B.
Private
Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
threading.ThreadPool.QueueUserWorkItem(new Threading.WaitCallback(AddressOf DoSomething),nothing)
End Sub
private
sub DoSomething(state as Object)
cursor.Current = cursors.WaitCursor
threading.Thread.Sleep(2000)
cursor.Current = cursors.Default
End Sub
Das kann z.B. der Fall sein, wenn im GUI auf eine Useraktion nicht sofort reagiert werden soll. Wenn die Anzeige von Details zu Einträgen in einer Liste z.B. lange dauert, dann sollen Details nicht unbedingt sofort geladen werden, wenn ein neuer Eintrag in der Liste angeklickt wurde, sondern erst nach einer Verzögerung. Damit wird das Blättern durch eine solche Liste flüssiger. Zum Einsatz käme da z.B. ein Timer, der die Anzeigeroutine verzögert aufruft.
Habe heute noch ein Rezensionsexemplar eines Wrox-Buches bekommen: Professional .NET Network Programming. Das war ein komisches Gefühl, denn Wrox hat vorgestern Insolvenz angemeldet. Das Buch ist damit wie eine Nachricht von einem Verstorbenen, etwas Hinterlassenes, ein letztes Zeichen. Tja... so kann es gehen. Schade um Wrox. Gute Bücher (auch wenn am Ende mehr Masse denn Klasse stand) und innovative Ideen (z.b. www.asptoday.com und www.csharptoday.com oder die Handbook-Serie).
Das Network Programming Buch macht aber einen guten Eindruck. Im Grunde wird der ganze OSI Protokollstack vorgestellt: Sockets (auch Multicast), TCP/UDP, HTTP/SMTP/POP3; dazu dann noch Streams und Cryptographie. Sieht zusammen mit den Beispielprogrammen wie eine runde Sache auch.
Tja, so kann es kommen: Neulich noch habe ich mich förmlich geweigert, der neuen Mode WebLogs zu folgen, heute fange ich selbst eines an. Mal schauen, wie lange und mit welcher Intensität ich es durchhalte. Vielleicht muss ich aber auch nur meine Sichtweise ändern: Wenn ich weniger darin eine "Pflicht" zur Selfpromotion und Information anderer sehe, sondern eher eine Form der Archivierung meiner eigenen Gedanken, dann ist das Blog vielleicht weniger eine "notwendige Last", als vielmehr eine "Hilfe", um noch produktiver zu sein. So wie Autoren private Zettelkästen führen, um Material für ihre Bücher zu sammeln (ich habe das nie wirklich getan), so kann das Blog vielleicht auch ein Zettelkasten für Artikel, Bücher, Projekte usw. sein. Und seine Öffentlichkeit ist dann ein Nebeneffekt.
Das Blog als schriftliches Leben im Container? Big Brother für den modernen Softwareentwickler? :-) Naja, großartige Freizügigkeiten wird es dann doch wohl nicht zu sehen geben, hoffentlich aber Freizügigkeiten im Denken. Insofern kann das Blog vielleicht wirklich Tagebuch oder materialisierter Stream of Consciousness sein.
Aber Schluss mit der Theorie. Einfach mal anfangen. Die Ich-Form der Einträge ist der Subjektivität des Mediums geschuldet und stört am Ende hoffentlich nicht, auch wenn andere das Blog lesen.
Den Titel "Sudelbücher" wähle ich mal als "Hommage" an einen meiner Lieblingsphilosophen: Georg Christoph Lichtenberg. In seinen Aphorismen zu blättern ist immer wieder eine Wohltat.
Und jetzt: los geht's!
More Posts