<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de-DE"><title type="html">Uwe Baumanns H.T.T.P. (Humorvolle, teilweise technische Posts)</title><subtitle type="html">Die Welt ist ein Server, aber wir haben alle unterschiedliche Zugriffsrechte</subtitle><id>http://blogs.msdn.com/uweinside/atom.xml</id><link rel="alternate" type="text/html" href="http://blogs.msdn.com/uweinside/default.aspx" /><link rel="self" type="application/atom+xml" href="http://blogs.msdn.com/uweinside/atom.xml" /><generator uri="http://communityserver.org" version="2.1.61025.2">Community Server</generator><updated>2004-09-28T09:57:00Z</updated><entry><title>Warum gibt's das erst jetzt? (Folge 324)</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/uweinside/archive/2005/09/23/473342.aspx" /><id>http://blogs.msdn.com/uweinside/archive/2005/09/23/473342.aspx</id><published>2005-09-23T20:20:00Z</published><updated>2005-09-23T20:20:00Z</updated><content type="html">&lt;P&gt;Ein kleiner Menüpunkt, zufällig entdeckt in Visual Web Developer Express Beta 2 ließ mir heute das Herz aufgehen. Für dieselbe Funktionalität hatte ich vor&amp;nbsp;langer Zeit&amp;nbsp;mal ein Makro geschrieben,&amp;nbsp;welches jedoch&amp;nbsp;Visual Studio regelmäßig zum Absturz brachte. Irgendwann gab ich auf. Jetzt hat die Produktgruppe meine Gebete erhört: CLOSE ALL BUT THIS!&lt;/P&gt;&lt;IMG alt="Close All But This" src="http://195.149.74.161/BlogData/CloseAllButThis.jpg"&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=473342" width="1" height="1"&gt;</content><author><name>UweInside</name><uri>http://blogs.msdn.com/members/UweInside.aspx</uri></author></entry><entry><title>Explizite Lyrik</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/uweinside/archive/2005/08/26/456726.aspx" /><id>http://blogs.msdn.com/uweinside/archive/2005/08/26/456726.aspx</id><published>2005-08-26T17:09:00Z</published><updated>2005-08-26T17:09:00Z</updated><content type="html">&lt;P&gt;Wie ich immer mal wieder auf Techie-Parties betone, habe ich Geisteswissenschaften studiert. Das kommt bei den Frauen gut an. Leider sind auf diesen Parties keine Frauen, aber egal, es geht um's Prinzip. Auf was ich eigentlich hinaus will: Durch intensives Studium der englischen Sprache habe ich die Erkenntnis gewonnen, daß die meisten Begriffe wörtlich gemeint sind. Gedichte und Songtexte sind zwar Ausnahmen, aber meistens ist die Primärbedeutung die primäre Bedeutung (Hähä! Linguistenwitz!)&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Beispiel Nr. 1: Das &lt;EM&gt;Programme&lt;/EM&gt;-Verzeichnis&lt;BR&gt;&lt;/STRONG&gt;Ja genau - das ist das zu da, um Programme abzuspeichern. Wäre es dazu da, Einstellungen, Logfiles oder Datenbanken aufzunehmen, dann hieße es ja &lt;EM&gt;Programm-, Einstellungs-, Logfiles- oder Datenbankverzeichnis&lt;/EM&gt;. Das wäre viel zu lang. Kommen wir zu dem Grund, warum in diesem Verzeichnis nur ausführbare Programmdateien stehen dürfen: Für normale Benutzer ist der Schreibzugriff auf dieses Verzeichnis nicht gestattet. Im Normalbetrieb muß nämlich niemand schreibend auf Programmdateien zugreifen. Außer natürlich Viren. Und die greifen dankend zu. Dennoch handeln die meisten Anwendungen nach dem Motto "My directory is my castle"&amp;nbsp; und speichern alle möglichen Logs und Daten in ihrem eigenen Programmverzeichnis – von dem kann man ja schließlich sicher sein, daß es existiert.&amp;nbsp; Als ich neulich eine DSL-Zugangssoftware eines großen Telekommunikations-Konzerns installieren musste, sah ich diese krankhafte Logik wieder einmal live in action: Weil das Programm eine kleine, unwichtige Logdatei partout im Programm-Verzeichnis anlegen wollte, lief die gesamte Software nur unter dem Admin-Acount. Ein wahrhaft brauchbarer Beitrag zum Thema "mehr Sicherheit im Internet". &lt;BR&gt;Ein weiterer Grund, das Programme-Verzeichnis nicht zu mißbrauchen ist nicht sicherheitsrelevant, aber genauso wichtig: Will man den Rechner neu aufsetzen, ohne alle Einstellungen zu verlieren, darf man sich die entsprechenden Files einzeln aus den verschiedenen Applikationsverzeichnissen zusammensammeln – ein praktisch unmögliches Unterfangen. Der arme „Files and Settings Transfer Wizard“, der Einstellungen von einem Rechner zum anderen migrieren kann, ist völlig hilflos.&amp;nbsp; Also: Alles, was keine EXE oder DLL ist, gehört in den &lt;EM&gt;Dokumente und Einstellungen-&lt;/EM&gt;Ordner! Und das meine ich wörtlich...&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Beispiel Nr. 2: Der &lt;EM&gt;Full Trust&lt;/EM&gt;-Modus unter ASP.NET&lt;BR&gt;&lt;/STRONG&gt;Bei einer Sicherheitskonferenz beschwerte sich ein selbsternannter Webhosting-Sicherheitsexperte über die "unsichere Software" von Microsoft. Die Begründung: Im Full Trust-Modus sei es möglich, das User unter bestimmten Umständen "zuviel Rechte" bekommen. Nun frage ich mich: Was ist wohl von einem Modus zu halten, der wörtlich "volles-Vetrauen-Modus" heißt? Genau! Daß wir dem betreffenden User (oder dessen Code) voll vertrauen! Und wenn ein Webhoster seinen Usern voll vertraut, dann hat er den Beruf verfehlt. Für diese Gruppe sollte man den Modus in &lt;EM&gt;Do-not-use-this-really-we-mean-it&lt;/EM&gt;-Modus umbenennen.&lt;/P&gt;
&lt;P&gt;Nächste Woche: Das "&lt;EM&gt;Unsafe"&lt;/EM&gt;-Keyword in C#...&lt;BR&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=456726" width="1" height="1"&gt;</content><author><name>UweInside</name><uri>http://blogs.msdn.com/members/UweInside.aspx</uri></author></entry><entry><title>Die Freiheit der abweichenden Mynung</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/uweinside/archive/2005/07/27/443810.aspx" /><id>http://blogs.msdn.com/uweinside/archive/2005/07/27/443810.aspx</id><published>2005-07-27T16:04:00Z</published><updated>2005-07-27T16:04:00Z</updated><content type="html">&lt;P&gt;&lt;SPAN lang=DE style="mso-ansi-language: DE"&gt;Normalerweise sind meine Argumentationen ja so zwingend, daß sie keinen Widerspruch hervorrufen. (Vielleicht liest aber auch nur keiner mein Blog :-)&lt;/P&gt;
&lt;P&gt;&lt;SPAN lang=DE style="mso-ansi-language: DE"&gt;Dennoch regt sich manchmal Widerstand, zum Beispiel als Reaktion auf den Artikel &lt;/SPAN&gt;&lt;a href="http://blogs.msdn.com/uweinside/archive/2005/04/07/406134.aspx"&gt;&lt;SPAN lang=DE style="mso-ansi-language: DE"&gt;"My, ist das geil"&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN lang=DE style="mso-ansi-language: DE"&gt;:&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Golo Haas, der Besitzer des äußerst lesenswerten,&amp;nbsp;intelligenten und&amp;nbsp;oft überraschenden&amp;nbsp;&lt;/SPAN&gt;&lt;A href="http://www.golohaas-blog.de/"&gt;&lt;SPAN lang=DE style="mso-ansi-language: DE"&gt;Eisbärenblogs&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN lang=DE style="mso-ansi-language: DE"&gt; findet das My-Objekt gar nicht geil. Der Vorwurf lautet: "Jetzt haben wir so ein schönes, einheitliches&amp;nbsp;Framework, und jetzt geht Ihr VB-Schnullis wieder getrennte Wege? Warum nur?". Das ist freilich&amp;nbsp;von mir sehr ungerecht zusammengefasst: Golos wirklich gute und faire Argumentation kann man &lt;/SPAN&gt;&lt;A href="http://golohaas-blog.de/Default.aspx?Guid=b44b8e56-2c80-4f9f-befe-f8d3801a7f70"&gt;&lt;SPAN lang=DE style="mso-ansi-language: DE"&gt;hier&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN lang=DE style="mso-ansi-language: DE"&gt; nachlesen.&lt;/P&gt;
&lt;P&gt;&lt;SPAN lang=DE style="mso-ansi-language: DE"&gt;Unter anderem schreibt er: &lt;EM&gt;"[...] My ist nicht geil. Nicht einmal ansatzweise. Denn My untergräbt die klare Struktur von .NET, die viele Entwickler so lieben, wie es bei PHP auch geschieht. Unter dem Motto "Alles soll einfacher werden" wird ein zusätzlicher Namensraum eingeführt, der Abkürzungen bietet. Diese aber mit eingeschränkter Funktionalität, und nicht mehr nach den klassischen Namensräumen sortiert, es wird also neben der Einführung einer zweiten Schreibweise auch noch die Beschäftigung mit den klassischen Namensräumen vermindert. Letztlich führt das meiner Meinung nach zum gleichen Ziel wie in PHP, nämlich, dass Einsteiger sich auf My stürzen werden, dann aber irgendwann an die Grenzen stoßen oder fremden Code bearbeiten müssen, und sich dann doch mit den klassischen Strukturen auseinander setzen müssen. Letztlich wird so wieder ein Parallelweg eingeführt, der eigentlich überflüssig ist, und am Ende die Produktivität eher senkt als steigert, da redundante Abläufe erlernt werden müssen. &lt;/EM&gt;&lt;/SPAN&gt;&lt;EM&gt;[...]"&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;Dazu habe ich einige Thesen:&lt;/P&gt;
&lt;P&gt;&lt;SPAN lang=DE style="mso-ansi-language: DE"&gt;Wir müssen uns mit der harten Realität abfinden: Es gibt eine große Bandbreite von Programmierern da draußen - von der (oft selbsternannten) Elite bis zum Hobby- oder Gelegenheitsprogrammierer. Nirgends ist zudem die Bandbreite so hoch wie bei der klassischen VB-Gemeinde – hier gibt es wirklich alle Schattierungen. 
&lt;P&gt;
&lt;P&gt;Und mindestens drei davon sind die Zielgruppe des My-Objekts. Wo wir schon bei (Mynungs-)freiheit sind:&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;DIV class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;&lt;SPAN lang=DE style="mso-ansi-language: DE"&gt;Nehmen wir den &lt;B style="mso-bidi-font-weight: normal"&gt;vorkenntnisfreien Anfänger.&lt;/B&gt; Visual Basic 6 war auch deshalb ein Erfolg, weil dieses Framework eine steile Lernkurve hat und ein Einsteiger gleich loslegen konnte. Dieses gute&amp;nbsp;Gefühl ist mit VB.NET weg – das höre ich jeden Tag von Leuten, die VB.NET als zu komplex empfinden. Wer gleich am Anfang eine große Wand vor sich sieht, wird in vielen Fällen erst einmal die Flucht ergreifen. Ein Neueinsteiger braucht schnelle Erfolgserlebnisse. Meine These: Wer irgendwann&amp;nbsp;später&amp;nbsp;an die Grenzen stößt, hat dann (aber erst dann) die Motivation, sich weiter einzuarbeiten und Techniken und Werkzeuge zu benutzen, die mehr Lernaufwand, aber auch mehr Möglichkeiten bieten. Vom Dreirad auf das Fahrrad umsteigen ist etwas stressig - aber nötig.&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;LI&gt;
&lt;DIV class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;&lt;SPAN lang=DE style="mso-ansi-language: DE"&gt;Dann gibt es da den &lt;B style="mso-bidi-font-weight: normal"&gt;theoriefreien Praktiker&lt;/B&gt;. Der&lt;B style="mso-bidi-font-weight: normal"&gt; &lt;/B&gt;ist typischerweise Ingenieur und will eben mal schnell eine Applikation zum Auslesen von Messwerten über den seriellen Port schreiben. Die Schönheit und Konsistenz des Frameworks ist ihm herzlich egal. Er will Ergebnisse, denn morgen muß er die Werkzeugmaschine beim Kunden abliefern und braucht die Messwerte für ein Freigabedokument. Seine Aufgabe ist es &lt;EM&gt;nicht&lt;/EM&gt;, schönen wartbaren Code für die Ewigkeit zu schreiben. Sein Chef würde ihn entlassen, wenn er erstmal zwei Wochen irgendein Framework erlernen muß. Er will nicht irgendwann in anderen Sprachen programmieren und den Code anderer Leute lesen. Der theoriefreie Praktiker wird&amp;nbsp;übrigens immer übersehen und meistens mit dem vorkenntnisfreien Anfänger in einen Topf geworfen.&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;LI&gt;
&lt;DIV class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;&lt;SPAN lang=DE style="mso-ansi-language: DE"&gt;Ich persönlich gehöre zur Gruppe der &lt;B style="mso-bidi-font-weight: normal"&gt;ideologiefreien Pragmatiker. &lt;/B&gt;Gibt es eine Möglichkeit, irgendwas schneller zu erledigen, dann nutze ich diese. Ich habe kein Problem damit, daß es mehrere Möglichkeiten und &lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&gt;gibt, dasselbe Problem zu lösen – und jedes der verwendbaren Werkzeuge spezifische Vor- und Nachteile hat. That’s Life – jeder Handwerker kann das bestätigen! Will ich schnell sein? Gib mir mehr Namespaces von vom Schlage "My"! Will ich genaue Kontrolle über meine Arbeit? Do it yourself with System.IO and friends! Ich habe die Wahl der Waffen. Das ist für mich keine "Redundanz" sondern Flexibilität – bei VB6 hatte ich die nicht, da musste ich nehmen, was die VB-Runtime auftischte und mir notfalls mit C++ behelfen (schauder). Die Wahl zwischen RAD und klassischem Frameworkcode steigert hingegen noch meine Produktivität.&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;&lt;SPAN lang=DE style="mso-ansi-language: DE"&gt;Und wo liegt das Problem?&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;&lt;SPAN lang=DE style="mso-ansi-language: DE"&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;&lt;SPAN lang=DE style="mso-ansi-language: DE"&gt;Die Problemkandidat Nummer eins ist der &lt;STRONG&gt;erkenntnisfreie "Fortgeschrittene"&lt;/STRONG&gt;, der nach 10 Jahren Berufserfahrung als Codeklopfer immer noch glaubt, Datenbankcode gehöre in den Click-Event des OK-Buttons. Der keine Wahl treffen kann zwischen RAD und "reiner Lehre", weil er nur ersteres kennt- und keine Lust hat irgend etwas Neues zu lernen – schließlich könnte da jeder kommen, das war schon immer so, wo kommen wir denn da hin, dBase konnte doch schon alles was man so braucht. Der erkenntnisfreie Fortgeschrittene begründet den schlechten Ruf von RAD-orientierten Features. Aber auch diese Gruppe kauft Compiler. Das ist ein Fakt, den ich mit Zahlen untermauern kann...&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;&lt;SPAN lang=DE style="mso-ansi-language: DE"&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;&lt;SPAN lang=DE style="mso-ansi-language: DE"&gt;Sorry, Golo: My ist geil!&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;&lt;SPAN lang=DE style="mso-ansi-language: DE"&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;&lt;SPAN lang=DE style="mso-ansi-language: DE"&gt;P.S: Myner Mynung nach kann es außerdem niemand geben, der My-Code nicht versteht, auch wenn er gerade vom Planeten Cobol angekommen ist oder den Gott des Semikolons verehrt ;-)&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;&lt;SPAN lang=DE style="mso-ansi-language: DE"&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;&lt;SPAN lang=DE style="mso-ansi-language: DE"&gt;P.P.S: Ich habe gerade gemerkt, daß die Buchstabenkombination "ei" in der deutschen Sprache ygentlich überflüssig ist!&lt;BR&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=443810" width="1" height="1"&gt;</content><author><name>UweInside</name><uri>http://blogs.msdn.com/members/UweInside.aspx</uri></author></entry><entry><title>Liebe Leserin! Lieber Leser!</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/uweinside/archive/2005/07/27/443769.aspx" /><id>http://blogs.msdn.com/uweinside/archive/2005/07/27/443769.aspx</id><published>2005-07-27T11:26:00Z</published><updated>2005-07-27T11:26:00Z</updated><content type="html">&lt;P&gt;Ich verschone Sie ja gänzlich mit persönlichen Details, aber jetzt möchte ich einmal eine Ausnahme machen. Einige Leser haben mir Mails mit nettem Feedback über mein Blog geschrieben: Vielen Dank dafür! Vereinzelt klang auch der Wunsch nach häufigeren Posts an (eine leicht getarnte Version der Frage "Lebst Du eigentlich noch? :-)&lt;/P&gt;
&lt;P&gt;&amp;lt;Rechtfertigung&amp;gt;Ja, ich lebe noch, und war in letzter Zeit zugegebenerweise etwas beschäftigt mit dem Release meiner Tochter Theresa (noch im Alphastadium, sehr viel Maintenance nötig, Soundfunktion aber voll funktionsfähig), diversen Reisen nach &lt;A href="http://www.vaubekien.net"&gt;Vaubekien&lt;/A&gt; und neuerdings mit der &lt;A href="https://www.sicher-im-netz.de/default.aspx"&gt;Aktion "Deutschland sicher im Netz"&lt;/A&gt;&amp;nbsp;- hier plane ich Events für Entwickler zum Thema sichere Programmierung.&amp;lt;/Rechtfertigung&amp;gt;&lt;/P&gt;
&lt;P&gt;Aber ich gelobe Besserung. Wiederbelebungsmaßnahmen für mein Blog sind in vollem Gange, vor allem seit ich mein vergessenes Passwort für die Blogging-Engine auf einem &lt;A href="http://www.out-law.com/page-5790"&gt;PostIt-Zettel unter meiner Tastatur&lt;/A&gt; wiedergefunden habe (kleiner Scherz. Den PostIt-Zettel habe ich natürlich sicher in meiner Geldbörse verwahrt. Schließlich hat man einen Security-Ruf zu verlieren.)&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=443769" width="1" height="1"&gt;</content><author><name>UweInside</name><uri>http://blogs.msdn.com/members/UweInside.aspx</uri></author></entry><entry><title>My, ist das geil!</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/uweinside/archive/2005/04/07/406134.aspx" /><id>http://blogs.msdn.com/uweinside/archive/2005/04/07/406134.aspx</id><published>2005-04-07T05:40:00Z</published><updated>2005-04-07T05:40:00Z</updated><content type="html">&lt;P&gt;Ja &lt;EM&gt;my&lt;/EM&gt;! &lt;EM&gt;My&lt;/EM&gt;stens gibt es ja &lt;A href="http://codebetter.com/blogs/darrell.norton/archive/2003/07/07/382.aspx"&gt;Diskussionen zwischen VB.NETlern und C#-Anhängern&lt;/A&gt;, welches denn jetzt die bessere Programmiersprache ist. Die offizielle&amp;nbsp;Aussage von &lt;EM&gt;My&lt;/EM&gt;crosoft war ja immer: Beide sind gleichgut. &lt;EM&gt;My&lt;/EM&gt;ne &lt;EM&gt;My&lt;/EM&gt;nung zu diesem Thema ist ja hinlänglich bekannt und wird jetzt noch durch das neue, geile &lt;EM&gt;My&lt;/EM&gt;-Template untermauert. Das gibt's nämlich nur für VB.NET!&lt;/P&gt;
&lt;P&gt;Genug gekalauert. Das &lt;EM&gt;My&lt;/EM&gt;-Template bietet eine Abkürzung zu den meisten, täglich anfallenden Aufgaben bei der Programmierung. Beispiel gefällig?&lt;/P&gt;
&lt;P&gt;Aus: &lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#000000 size=2&gt;Dim File As New System.IO.StreamReader("c:\test.txt")&lt;BR&gt;Dim Words As String = File.ReadToEnd()&lt;BR&gt;File.Close()&lt;/FONT&gt; &lt;/P&gt;
&lt;P&gt;Wird: &lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;Dim Words As String = _&lt;BR&gt;&amp;nbsp;My.Computer.FileSystem.ReadAllText("c:\test.txt")&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;Gut, was? Folgendes war schon immer üble Steinzeit:&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;Private Declare Auto Function PlaySound Lib "winmm.dll" _&lt;BR&gt;&amp;nbsp;(ByVal lpszSoundName As String, ByVal hModule As Integer, _&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;ByVal dwFlags As Integer) As Integer&lt;BR&gt;Private Const SND_FILENAME As Integer = &amp;amp;H20000&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;Dim bAns As Boolean, iRet As Integer = 0&lt;BR&gt;Try&lt;BR&gt;&amp;nbsp;iRet = PlaySound("C:\sound.wav", 0, SND_FILENAME)&lt;BR&gt;Catch&lt;BR&gt;End Try&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;Dieser wunderschöne Code wird jetzt aufgeräumt zu:&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;My.Computer.Audio.Play ("C:\sound.wav")&lt;/FONT&gt; &lt;/P&gt;
&lt;P&gt;Im My-Namespace finden sich sieben sogenannte Rootobjekte, die jewils selbstbeschreibend Zugriff auf bestimmte Funktionalitäten und Tools geben:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;EM&gt;My.Application&lt;/EM&gt; liefert Infos über das aktuell laufende Programm: Applikationstitel, -version, -beschreibung, Logfiles uvm.&lt;/LI&gt;
&lt;LI&gt;&lt;EM&gt;My.Computer&lt;/EM&gt; bietet Zugriff auf Ressourcen des Rechners: Registry, Audio, Dateisystem, serielle Schnittstellen, usw.&lt;/LI&gt;
&lt;LI&gt;&lt;EM&gt;My.User&lt;/EM&gt; informiert über den aktuell angemeldeten Besitzer (Name, Domain, Gruppen etc.)&lt;/LI&gt;
&lt;LI&gt;&lt;EM&gt;My.Ressources&lt;/EM&gt; erlaubt den Zugriff auf alle eingebetteten Ressourcen - mit Intellisense anstatt dem RessourceManager aus der Hölle&lt;/LI&gt;
&lt;LI&gt;&lt;EM&gt;My.Settings&lt;/EM&gt; macht das abspeichern von Benutzer- und Applikationseinstellungen zum Kinderspiel&lt;/LI&gt;
&lt;LI&gt;&lt;EM&gt;My.Webservices&lt;/EM&gt; und &lt;EM&gt;My.Forms&lt;/EM&gt; bieten per Intellisense blitzschnellen Zugriff auf alle im Projekt definierten Webservices bzw. Fensterklassen.&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Aber das kann man natürlich &lt;A href="http://www.microsoft.com/germany/msdn/library/net/vbnet/DieMyFunktionInVisualBasic2005.mspx"&gt;woanders nachlesen&lt;/A&gt;. Mein Tip: Das My-Objekt läßt sich auch prima erweitern. Das betrifft sowohl die Erweiterung der Rootobjekte selbst als auch das Hinzufügen neuer Rootobjekte.&lt;/P&gt;
&lt;P&gt;Ein Beispiel: Firma VB-Trans, eine Spedition, muß sehr viele Programme schreiben, die einen an den Computer angeschlossenen Barcodescanner&amp;nbsp;benutzen.&amp;nbsp; Kann man das &lt;EM&gt;My.Computer&lt;/EM&gt;-Objekt, das ja Zugriff auf solche Dinge wie Schnittstellen und Geräte bietet, um Barcodescanner-Funktionen erweitern, die dann über&amp;nbsp; &lt;EM&gt;My.Computer.Barcode&lt;/EM&gt; ansprechbar sind? Ja man kann. Und so geht's:&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;Namespace My&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Public Class BarcodeReader&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Public Function Scan() As String&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Return "Ein toller Barcode"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; End Function&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; End Class&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Partial Class MyComputer&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Private _BarcodeReader As BarcodeReader&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Public ReadOnly Property BarCodeReader() As BarcodeReader&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Get&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; If _BarcodeReader Is Nothing Then&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _BarcodeReader = New BarcodeReader&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; End If&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Return _BarcodeReader&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; End Get&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; End Property&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; End Class&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;End Namespace&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;Hier ist bemerkenswert, daß nicht die Klasse&lt;EM&gt; Computer&lt;/EM&gt; im Namespace &lt;EM&gt;My&lt;/EM&gt; erweitert wird, sondern (aufpassen!) die Klasse &lt;EM&gt;MyComputer&lt;/EM&gt; im Namespace &lt;EM&gt;My&lt;/EM&gt;. Trotzdem wird die Funktion Scan nachher über&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;&lt;EM&gt;My.Computer.BarcodeReader.Scan()&lt;/EM&gt;&lt;/FONT&gt; &lt;/P&gt;
&lt;P&gt;angesprochen? Wie kann das sein? Ganz einfach: Der&amp;nbsp; VB.NET-Compiler übersetzt die Aufrufe entsprechend: In Wirklichkeit ist &lt;EM&gt;Computer &lt;/EM&gt;eine nämlich öffentliche Eigenschaft der &lt;EM&gt;MyComputer&lt;/EM&gt;-Klasse - dies verheimlicht uns VB.NET durch fiese Tricks aber vollständig. Mit &lt;EM&gt;&lt;A href="http://www.devtrain.de/artikel_871.aspx"&gt;ildasm&lt;/A&gt;&lt;/EM&gt; kommt man dem Spuk aber auf die Schliche. &lt;/P&gt;
&lt;P&gt;Das Erweitern der &lt;EM&gt;MyCompute&lt;/EM&gt;r-Klasse ist aber durch die neuen partiellen Klassen sehr einfach: Unsere eigene Barcode-Funktionalität wird beim Kompilieren mit der "eingebauten" &lt;EM&gt;MyComputer&lt;/EM&gt;-Klasse zusammengefügt und in eine einzige kompilierte Klasse gepackt.&lt;/P&gt;
&lt;P&gt;Analog funktioniert das Erstellen eigener Rootobjekte. Als alter Philosoph wünschte ich mir, jeden Tag einen neuen Sinnspruch beim Start meiner Applikation anzeigen zu können - Zeit für ein &lt;EM&gt;My.ThoughtOfTheDay&lt;/EM&gt;-Objekt. Kein Problem. Einfach eine Bibliothek zur Philosophiegenerierung (&lt;EM&gt;PhilosophyLib&lt;/EM&gt;) samt Funktion &lt;EM&gt;GetDeepTought()&lt;/EM&gt; geschrieben und folgendermaßen als Rootobjekt in den &lt;EM&gt;My&lt;/EM&gt;-Namespace integriert:&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;Imports PhilosophyLib&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;Namespace My&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Friend Module My_ThoughtOfTheDay&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Private _ThoughtOfTheDay As ThoughtOfTheDay&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Public ReadOnly Property ThoughtOfTheDay() As ThoughtOfTheDay&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Get&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; If _ThoughtOfTheDay Is Nothing Then _ThoughtOfTheDay = New ThoughtOfTheDay&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Return _ThoughtOfTheDay&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; End Get&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; End Property&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; End Module&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;End Namespace&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;So entsteht ein neues Rootobjekt:&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;My.ThoughtOfTheDay.GetDeepTought()&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;Ich habe zu beiden Vorgehensweisen zwei kleine Beispielprojekte gestrickt, die &lt;A href="http://www.techtalk.ms/Downloads/UweInside/ExtendingMy.zip"&gt;hier&lt;/A&gt; zu finden sind. Da diese Projekte jedoch mit einem Microsoft-internen&amp;nbsp; Build der Beta 2 von VB.NET Express erstellt wurden können &lt;EM&gt;My&lt;/EM&gt;-Fans (bzw. my fans :-) das Ganze erst ausprobieren, wenn&amp;nbsp;demnächst endlich die finale, öffentliche Beta 2 erscheint. Bis dahin kann man die Beispiele natürlich mit einem handelsüblichen Texteditor betrachten und sich in&amp;nbsp;Vorfreude üben - ist ja bekannlich die schönste Freude (meines Erachtens ist dieses Sprichwort Schwachsinn. Ich will alles, und zwar jetzt. Aber das gehört ja nicht zum Thema.)&lt;/P&gt;
&lt;P&gt;Viel Spaß also mit dem My-Template und selbstgebastelten Funktionen wie &lt;EM&gt;My.Computer.Needs.More.Memory&lt;/EM&gt; etc...&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=406134" width="1" height="1"&gt;</content><author><name>UweInside</name><uri>http://blogs.msdn.com/members/UweInside.aspx</uri></author></entry><entry><title>Neues Jahr, neue Entdeckungen!</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/uweinside/archive/2005/01/04/346306.aspx" /><id>http://blogs.msdn.com/uweinside/archive/2005/01/04/346306.aspx</id><published>2005-01-05T01:32:00Z</published><updated>2005-01-05T01:32:00Z</updated><content type="html">&lt;p&gt;So, ich bin wieder beim Bloggen und wünsche natürlich zunächst mal allen Lesern ein glückliches neues Jahr! Machen Sie nichts, was ich nicht auch machen würde!&lt;/p&gt; &lt;p&gt;Falls der Neujahrsvorsatz "mehr Sport" war, hätte ich da einen Tip: Die&amp;nbsp;ASP.NET-Experten und -&lt;a href="http://mvp.support.microsoft.com/default.aspx?scid=fh;DE;mvpfaqs"&gt;MVPs&lt;/a&gt;&amp;nbsp;&lt;a href="http://www.aspheute.com/autoren/christophwille.htm"&gt;Christof Wille&lt;/a&gt; und &lt;a href="http://blogs.dotnetgerman.com/alexonasp.net/"&gt;Alex Zeitler&lt;/a&gt; spielen wieder Golf - und Sie können mitmachen! Allerdings handelt sich es hier um eine ganz spezielle Art von Programmierer-Golf... ich zitiere: &lt;em&gt;"[...] die Idee ist simpel aber bestechend: beim „klassischen“ Golf gewinnt derjenige, der die geringste Anzahl Schläge benötigt um einzulochen. Und diese Idee haben wir auf das Programmieren übertragen: derjenige, der am wenigsten Zeichen zur Lösung einer vorgegebenen Aufgabe benötigt, der gewinnt das Turnier. Geschwindigkeit und Schönheit der Lösung sind keine Kriterien."&lt;/em&gt;&lt;/p&gt; &lt;p&gt;Also nix wie hin zu: &lt;a href="http://www.codefairway.net/de/default.aspx"&gt;http://www.codefairway.net/de/default.aspx&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Nachdem ich zwischen Weihnachten und Neujahr (wer braucht schon Urlaub) die &lt;a href="http://www.techtalk.ms"&gt;Community-Seite für den msdn Techtalk&lt;/a&gt; auf mehr Browserkompatibilität getrimmt habe (ja, der Feuerfuchs darf jetzt auch drauf! ;-), und zwar im harten Kampf "Mann-gegen-tag", war ich reif für etwas Selbstfindung - und damit für&amp;nbsp;den göttlichen&amp;nbsp;&lt;a href="http://www.csszengarden.com/"&gt;CSS Zen Garden&lt;/a&gt;.&amp;nbsp;Diese&amp;nbsp;gar nicht esoterische Seite demonstriert wunderbar, was man mit CSS so machen kann. Unter "CSS ressources" sind einige&amp;nbsp;unverzichtbare Infos für Webdesigner zu finden, z.B. die &lt;a href="http://css.maxdesign.com.au/"&gt;Tutorials von Maxdesign&lt;/a&gt; aus Australien, welche endlich mal das &lt;a href="http://css.maxdesign.com.au/floatutorial/"&gt;Mysterien von "float" und "clear"&lt;/a&gt; klären. Ommmmmm!&lt;/p&gt; &lt;p&gt;Tja, und wer schon Anfang des Jahres genug von allem hat, dem hilft nur noch die hoffentlich mittlerweile bekannte &lt;a href="http://www.kommandozeile.de/"&gt;endgültige Nostalgieseite&lt;/a&gt;!&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=346306" width="1" height="1"&gt;</content><author><name>UweInside</name><uri>http://blogs.msdn.com/members/UweInside.aspx</uri></author></entry><entry><title>Fernseher - von innen!</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/uweinside/archive/2004/11/16/258091.aspx" /><id>http://blogs.msdn.com/uweinside/archive/2004/11/16/258091.aspx</id><published>2004-11-16T17:34:00Z</published><updated>2004-11-16T17:34:00Z</updated><content type="html">&lt;p&gt;Zusammen mit meinem Kollegen&amp;nbsp;&lt;a href="http://blogs.msdn.com/dirkpr/"&gt;Dirk Primbs&lt;/a&gt;&amp;nbsp;war ich neulich&amp;nbsp;bei &lt;a href="http://www.giga.de/"&gt;GIGA TV&lt;/a&gt; zu Besuch - Anlaß&amp;nbsp;war der &lt;a href="http://www.giga.de/aktionen/homepageaward/index.php"&gt;GIGA Homepage Award&lt;/a&gt;. Unser persönlicher Biograph&amp;nbsp;&lt;a href="http://weblogs.mysharepoint.de/frankfi/"&gt;Frank Fischer&lt;/a&gt;, der eigentlich gerne Kameramann bei Steven Spielberg geworden wäre, hat&amp;nbsp;ein Video daraus gebastelt, das &lt;a href="http://www.primbs.de/files/Giga-Web.wmv"&gt;hier&lt;/a&gt; zu bestaunen ist. Der Soundtrack ist übrigens hausgemacht von unserem Eventmanager Roberto Winckler, der schon einmal einen Nummer-eins-Hit in Neuseeland hatte (echt!). Viel Spaß!&lt;img height="1" src="http://blogs.msdn.com/frankpr/aggbug/256344.aspx" width="1" /&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=258091" width="1" height="1"&gt;</content><author><name>UweInside</name><uri>http://blogs.msdn.com/members/UweInside.aspx</uri></author></entry><entry><title>Nukleare Regenbögen: Portalframeworks für Deutschland!</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/uweinside/archive/2004/10/28/248975.aspx" /><id>http://blogs.msdn.com/uweinside/archive/2004/10/28/248975.aspx</id><published>2004-10-28T18:38:00Z</published><updated>2004-10-28T18:38:00Z</updated><content type="html">&lt;p&gt;Portalframeworks sind klasse: Alles, was man für eine Standard-Webseite braucht (Userverwaltung, Content Management, Listenankündigungendowloadbereichefotoalben und der ganze restliche Krams) als offener Sourcecode, erweiterbar durch eigene Module und mit eigenem Webdesign. Eins der beliebtesten Portalframeworks ist &lt;a href="http://www.rainbowportal.net/"&gt;DotNetNuke&lt;/a&gt; (DNN)- leider ein durch und durch amerikanisches Projekt. DNN läßt sich in der aktuellen Version 2.x nämlich nur von Hand durch Eingriff in den Core-Sourcecode (argh!) lokalisieren. Mit Search &amp;amp; Replace wühlt man sich durch zehntausende Zeilen Sourcecode, um eigenhändig Stringliterale zu übersetzen und Datumsformate in die richtige Form zu trimmen. Und kommt die nächste Version raus,&amp;nbsp;war dann&amp;nbsp;alles für die Katz'.&amp;nbsp;Das ist (&lt;em&gt;hier stand&amp;nbsp;ein zensiertes Wort&lt;/em&gt;)! &lt;/p&gt; &lt;p&gt;Aber Hoffnung naht: DotNetNuke 3.0 wird am 1. November released, und laut Aussage von DNN-Teamchef Shaun Walker gegenüber gut informierten Kreisen (mir ;-) kommt das Portal-Framework jetzt mit einer voll lokalisierbaren Engine inklusive bereits fertiger deutscher Lokalisierung! Ob das Ganze brauchbar ist, wird sich herausstellen. &lt;/p&gt; &lt;p&gt;Die Konkurenz vom &lt;a href="http://www.rainbowportal.net/"&gt;Rainbow Portal&lt;/a&gt; ist offenbar schon weiter: Sie biet ihr Framework in 14 Sprachen an und hat auch sonst interessante Features wie z.B. einen 2-stufigen Abnick-Prozeß für Inhalte des Content Management-Systems. Leider kam ich persönlich noch nicht dazu, mir die DNN-Konkurrenz richtig anzusehen, aber vielleicht hat jemand schon Feedback zu diesem Thema? Sobald ich schlauer bin, was das Regenbogenportal betrifft, werde ich an dieser Stelle meine Erkenntnisse veröffentlichen.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=248975" width="1" height="1"&gt;</content><author><name>UweInside</name><uri>http://blogs.msdn.com/members/UweInside.aspx</uri></author></entry><entry><title>Ist diese Kanonisierung von Bach oder Mozart?</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/uweinside/archive/2004/10/12/241296.aspx" /><id>http://blogs.msdn.com/uweinside/archive/2004/10/12/241296.aspx</id><published>2004-10-13T01:02:00Z</published><updated>2004-10-13T01:02:00Z</updated><content type="html">&lt;p&gt;Okay, als jemand, der sich öfters mit Security in ASP.NET befaßt ist es schon bitter zu schlucken, daß auch meine liebstes Web-Frameowork&amp;nbsp;nicht gegen klassische Security-Fehltritte gefeit ist: &lt;a href="http://www.microsoft.com/germany/ms/security/incident/aspnet.mspx"&gt;ASP.NET hat ein Problem mit der Kanonisierung von URLs&lt;/a&gt;. Das hat nichts mit Musik zu tun, sondern beschreibt folgenden Sachverhalt:&lt;/p&gt; &lt;p&gt;Die Schreibweisen &lt;font face="Courier New"&gt;c:\dir\test.dat&lt;/font&gt;, &lt;font face="Courier New"&gt;test.dat&lt;/font&gt;,&amp;nbsp;und&lt;font face="Courier New"&gt; ..\..\test.dat&lt;/font&gt; beziehen sich unter Umständen genau ein einziges File namens &lt;font face="Courier New"&gt;test.dat&lt;/font&gt;&lt;strong&gt;,&lt;/strong&gt; es kommt, wie so oft, nur auf den&amp;nbsp;momentanen Kontext an. Der Prozeß, wie ein Parser diese verschiedenen Schreibweisen einer identischen Angabe in eine einzige, maßgebliche Form umwandelt heißt Kanonisierung. Macht er dabei einen Fehler, hat man ein Sicherheitsproblem. Durch kreative Verwendung der Schreibweisen wird es&amp;nbsp;dann nämlich einem Angreifer möglich, Schutzmechanismen zu umgehen - denn unter Umständen prüft der Parser auf eine Schreibweise und&amp;nbsp;läßt keinen Zugriff auf das entprechende File zu, aber verwendet man eine andere Schreibweise, tja: dann kommt man damit durch. &lt;p&gt;Beispiel: Im Web ist &lt;font face="Courier New"&gt;Hallo Welt&lt;/font&gt; und &lt;font face="Courier New"&gt;Hallo%20Welt&lt;/font&gt; effektiv fast immer der gleiche String, da &lt;font face="Courier New"&gt;%20&lt;/font&gt; eine alternative Kodierung eines Leerzeichens darstellt. Gehen wir jetzt davon aus, jemand darf nicht "Hallo Welt" eingeben. Unsere Strategie,&amp;nbsp;dem Bösewicht auf die Finger zu hauen,&amp;nbsp;sieht so aus: &lt;p&gt;&lt;font face="Courier New"&gt;If Eingabe="Hallo Welt" then Error&lt;/font&gt; &lt;p&gt;Und schon haben wir ein Problem: "Hallo%20Welt" fällt durch unser Raster, wird aber später im Programm vermutlich irgendwo zu "Hallo Welt" umgewandelt - und weiterverarbeitet. Bingo. Hätten wir die Umwandlung aller möglichen Schreibweisen schon &lt;em&gt;vor&lt;/em&gt; der Prüfung durchgeführt (und dabei keine Fehler gemacht) dann wäre unsere Prüfung wasserdicht. Leider ist das Ganze nicht so einfach wie es aussieht. Denn manchmal ist es gar nicht so einfach, zu erkennen wieviele alternative Darstellungsmöglichkeiten es eigentlich gibt, besonders wenn vor- und nachgeschalteter Programmcode, oft gar nicht unter eigener Kontrolle, böse dazwischenfunkt. &lt;p&gt;Also: Wer selber ohne Kanonisierungsprobleme ist, der werfe den ersten Stein. Statt Steinewerfen empfiehlt es sich aber meistens sowieso, sofort &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=DA77B852-DFA0-4631-AAF9-8BCC6C743026&amp;amp;displaylang=en"&gt;Gegenmaßnahmen&lt;/a&gt; einzuleiten. &lt;p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=241296" width="1" height="1"&gt;</content><author><name>UweInside</name><uri>http://blogs.msdn.com/members/UweInside.aspx</uri></author></entry><entry><title>Ironie des Lebens (Teil 1)</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/uweinside/archive/2004/10/04/237473.aspx" /><id>http://blogs.msdn.com/uweinside/archive/2004/10/04/237473.aspx</id><published>2004-10-04T21:21:00Z</published><updated>2004-10-04T21:21:00Z</updated><content type="html">Tja, &lt;A href="http://weblogs.asp.net/ralfw"&gt;Ralf Westphal&lt;/a&gt; hat mir das Buch "&lt;a href="http://www.amazon.de/exec/obidos/ASIN/0142000280/qid=1096892388/ref=sr_8_xs_ap_i1_xgl/302-2717920-2360825"&gt;Getting Things Done&lt;/a&gt;" empfohlen. Ich will dieses Werk jetzt schon seit 2 Tagen bestellen, aber ich komme einfach nicht dazu... &lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=237473" width="1" height="1"&gt;</content><author><name>UweInside</name><uri>http://blogs.msdn.com/members/UweInside.aspx</uri></author></entry><entry><title>Braucht die Welt mein Blog?  (Teil 2)</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/uweinside/archive/2004/10/01/236520.aspx" /><id>http://blogs.msdn.com/uweinside/archive/2004/10/01/236520.aspx</id><published>2004-10-01T16:14:00Z</published><updated>2004-10-01T16:14:00Z</updated><content type="html">&lt;p&gt;Erste Erkennis meines mir und der Welt gegenüber gnadenlosen &lt;A href="http://blogs.msdn.com/uweinside/archive/2004/09/28/235196.aspx"&gt;Selbstversuchs&lt;/a&gt;:&lt;sup&gt;*&lt;/sup&gt; Blogging verleitet zum Predigen.&lt;/p&gt; &lt;p&gt;&lt;sup&gt;*&lt;/sup&gt;Ist das wirklich Grammatik?&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=236520" width="1" height="1"&gt;</content><author><name>UweInside</name><uri>http://blogs.msdn.com/members/UweInside.aspx</uri></author></entry><entry><title>Von Eiern, Kuchen und Open Source</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/uweinside/archive/2004/09/30/236135.aspx" /><id>http://blogs.msdn.com/uweinside/archive/2004/09/30/236135.aspx</id><published>2004-09-30T23:05:00Z</published><updated>2004-09-30T23:05:00Z</updated><content type="html">&lt;p&gt;Ich lese das &lt;a href="http://www.sueddeutsche.de/kultur/artikel/325/39286/"&gt;Interview mit Michael Kofler in der Süddeutschen über Linux und Open Source&lt;/a&gt; und frage mich, wie immer bei solchen Diskussionen: Warum soll ich die Früchte meiner Arbeit herschenken? Warum beschwert sich keiner, daß es für &lt;em&gt;andere &lt;/em&gt;technische Produkte Patente und Lizenzen gibt? Warum ist das bei Software plötzlich ein Problem? Wäre es nicht besser für die Menschheit, wenn KIA einfach einen Porsche kopieren dürfte? Das würde dafür sorgen, daß es&amp;nbsp;&lt;em&gt;weniger&lt;/em&gt; Innovation gibt - weil niemand mehr in aufwendige Entwicklungen investieren wollte, wenn andere die Früchte ernten.&amp;nbsp;Ich kapier's einfach nicht, und das liegt - so hoffe ich - nicht daran, daß ich bei Microsoft arbeite. &lt;/p&gt; &lt;p&gt;Auf Konferenzen erklären viele Leute mir erstmal, daß Sie für Open Source sind, um dann sofort danach zu fragen, wie sie ihren &lt;em&gt;eigenen Code &lt;/em&gt;per Obfuscator besser gegen den Ideenklau anderer absichern können. Da ist plötzlich das Problem, daß .NET-Code "zu offen" ist? &amp;nbsp;"Ich will die Eier und das Mehl gratis, aber den Kuchen möchte ich verkaufen". &lt;/p&gt; &lt;p&gt;Ich vermute: Die erwähnten großen Beiträge von anderen kommerziellen Firmen zu Open Source beruhen darauf, daß diese nicht am Kuchen verdienen, sondern beim Backen helfen - und sich dafür bezahlen lassen. Und&amp;nbsp;deren Werbung erklärt dann, der Kuchen wäre gratis. Clever.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=236135" width="1" height="1"&gt;</content><author><name>UweInside</name><uri>http://blogs.msdn.com/members/UweInside.aspx</uri></author></entry><entry><title>Security kann man nicht kaufen</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/uweinside/archive/2004/09/28/235229.aspx" /><id>http://blogs.msdn.com/uweinside/archive/2004/09/28/235229.aspx</id><published>2004-09-28T18:07:00Z</published><updated>2004-09-28T18:07:00Z</updated><content type="html">&lt;p&gt;Neulich&amp;nbsp; bei einer großen Entwicklungskonferenz: Zwei Programmierer, verantwortlich für Intranet-Webapplikationen in einer großen Firma, stellen eine harmlose Frage am Microsoft-Stand: "Wie kann man eigentlich aus einer ASP.NET Webapplikation eine Prozeß mit bestimmten Benutzerrrechten starten?". Meine Antwort: "Äh, mit&lt;em&gt; CreateProcessAsUser&lt;/em&gt; oder so, glaube ich ... äh, ich denke das war doch &lt;em&gt;LogonUse&lt;/em&gt;r... also jedenfalls gibt's in Windows dafür eine Funktion, die können Sie aufrufen, äh --- warum brauchen Sie diese Funktion?". Die Antwort läßt mir das Blut in den Adern gefrieren: "Ja, wir müssen auf dem Server eine Applikation starten, die unter den Benutzerrechten des jeweiligen eingeloggten Users läuft. Und da dachten wir, der Benutzer kann seine Domänen-Anmeldedaten einfach in unsere Webapplikation eingeben und wir starten dann auf dem Server mit diesem Account die entsprechende Applikation". Vorsichtige Frage von mir: "Verwenden Sie HTTPS?". Antwort: "Nein, wieso?".&lt;/p&gt; &lt;p&gt;Wenn das so online geht, sendet diese Firma völlig unverschlüsselte Domänen-Usernamen mit passendem, ebenfalls&amp;nbsp;unverschlüsselten Paßwörtern quer durch's Intranet. Jeder, der den Netzwerkeverkehr irgendwie mitprotokolliert, hat die Chance auf unlimierterten Zugriff auf geheimste Daten. Ich weise die Zwei darauf hin.&lt;/p&gt; &lt;p&gt;"Ach, das macht nix, ist ja alles nur innerhalb unserer Firma, und deshalb sicher".&lt;/p&gt; &lt;p&gt;Bitte nicht falsch verstehen: Ich möchte die Zwei nicht schlecht machen, oder über irgend jemand herziehen. Aber diese kleine Geschichte ist der Beweis, daß Security kein Thema ist, welches "die von Microsoft" oder "die von Sun" oder "die von IBM" durch "bessere Sicherheitsfeatures" lösen können. Keine IT-Sicherheit ohne Sicherheitsbewußtsein und Kenntnis der Grundlagen der Technologien, mit denen man arbeitet.&lt;/p&gt; &lt;p&gt;Fingerzeigen bringt uns auch nicht weiter: "Microsoft" ist nicht "unsicher", "Sun" ist nicht "unsicher", "IBM" ist nicht "unsicher". Unsicher ist, Ausbildung und Aufklärung zu vernachlässigen, oder sich nicht für Security zu interessieren.&lt;/p&gt; &lt;p&gt;Die Entwickler und Entscheider&amp;nbsp;wiegen sich in falscher Sicherheit: "Wird schon niemand abhören". Falsch: Jemand wird sich finden. Jemand der gerade Streit mit seinem Chef hatte und zufällig in der IT-Abteilung arbeitet.&amp;nbsp;Wenn das passiert, sind&amp;nbsp; Existenzen&amp;nbsp;bedroht - von einzelnen Sündenböcken (wahrscheinlich die Entwickler oder ihr Chef)&amp;nbsp;oder ganzen Firmen.Und wer gibt den Programmierern Zeit, sich mit sichereitsrelevanten Fragen zu befassen? Sind die ökonomischen Zwänge so groß, daß für relevantes Training keine Zeit bleibt?&lt;/p&gt; &lt;p&gt;Da muß sich die Industrie an der eigenen Nase fassen: Wir brauchen viel mehr verständliche Informationen über Sicherheit, wir müssen klarmachen das Security kein Feature ist (wie ein großer Datenbankhersteller unermüdlich behauptet). &lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnnetsec/html/secnetlpmsdn.asp"&gt;Microsofts Security Whitepapers&lt;/a&gt;&amp;nbsp;sind ein erster Schritt, und die Security-Vorträge auf Konferenzen sind in letzter Zeit auch gut besucht. &lt;/p&gt; &lt;p&gt;Ach ja, was ist die Lösung für das Problem der Beiden? Eine zweite Webapplikation, die über &lt;em&gt;Windows Authentication&lt;/em&gt; authentifiziert und den Benutzer impersoniert, dann die Applikation startet. Kein Passwort wird ausgetauscht, und das Ganze ist auch bequemer, weil der Benutzer nichts eingeben muß.&lt;/p&gt; &lt;p&gt;Security: Mach's nie ohne!&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=235229" width="1" height="1"&gt;</content><author><name>UweInside</name><uri>http://blogs.msdn.com/members/UweInside.aspx</uri></author></entry><entry><title>Braucht die Welt mein Blog?</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/uweinside/archive/2004/09/28/235196.aspx" /><id>http://blogs.msdn.com/uweinside/archive/2004/09/28/235196.aspx</id><published>2004-09-28T16:57:00Z</published><updated>2004-09-28T16:57:00Z</updated><content type="html">&lt;p&gt;Hmm... gute Frage. Oft finde ich Blogs ein Instrument zur gnadenlosen Selbstbeweihräucherung (mit Tendenzen zum Exhibitionismus), frei nach dem Motto: "Was ich der Welt schon immer mal sagen wollte."&amp;nbsp;Aber da das Ganze immer mehr zum Phänomen wird und ich nie abgeneigt bin, &lt;a href="http://www.oktoberfest.de/de/index.php"&gt;gefährliche (aber legale)&amp;nbsp;Dinge&lt;/a&gt; im Selbstversuch auszuprobieren werde ich jetzt mutig in die Welt der Blogger eintreten. Ok, jetzt muß ich nur noch den Post-Button finden... ah hier ... also los ...&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=235196" width="1" height="1"&gt;</content><author><name>UweInside</name><uri>http://blogs.msdn.com/members/UweInside.aspx</uri></author></entry></feed>