<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>Tips und Tricks</title>
        <link>http://blog.codemurai.de/category/Tips und Tricks.aspx</link>
        <description>Tips und Tricks</description>
        <language>de-DE</language>
        <copyright>André Krämer</copyright>
        <generator>Subtext Version 2.6.0.1</generator>
        <item>
            <title>SQL Server 2008 Express und Windows Server 2008 64 Bit</title>
            <link>http://blog.codemurai.de/archive/2010/01/22/sql-server-2008-express-und-windows-server-2008-64-bit.aspx</link>
            <description>&lt;p&gt;Ende November mietete ich mir einen Windows 2008 64 Bit VServer, auf dem ich einige Websites hosten wollte.&lt;/p&gt;  &lt;p&gt;Einer der ersten Schritte nach der Freischaltung war die Installation des SQL Server 2008 Express inkl. Management Studio Express.&lt;/p&gt;  &lt;p&gt;Nun ja, zumindest versuchte ich dies. Denn leider war weder eine manuelle Installation der SQL Server Express 64 Bit Variante erfolgreich, noch half der Weg über den Web Plattform Installer.&lt;/p&gt;  &lt;p&gt;Statt dessen bekam ich folgende Fehlermeldung:&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Der Befehlszeilenwert INSTANCESHAREDWOWDIR ist ungültig. Stellen Sie sicher, dass der angegebene Pfad gültig und nicht identisch mit dem Pfad für INSTANCESHAREDDIR ist.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Eine kurze Recherche im Netz ergab, dass dieses Problem auf IA64 Systemen auftritt, wenn man den SQL Server nicht im Standardpfad installiert. Als Abhilfe solle man das INSTALLSHAREDWOWDIR als Befehlszeilenparameter setzen.&lt;/p&gt;  &lt;p&gt;Interessant, aber ich habe ein X64 System und wollte im Standardpfad installieren. Also scheint die Ursache doch eine andere zu sein.&lt;/p&gt;  &lt;p&gt;Was anschließend folgte, waren endlose Nächte in denen ich versuchte den SQL Server zu installieren. Der Trick mit dem Befehlzeilenparameter brachte mich zwar über die Fehlermeldung, dafür konnte ich dann aber weder das SP1 noch das Management Studio Express installieren. Deinstallieren ging auch nicht mehr, denn auch dann kam die Meldung:&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Der Befehlszeilenwert INSTANCESHAREDWOWDIR ist ungültig. Stellen Sie sicher, dass der angegebene Pfad gültig und nicht identisch mit dem Pfad für INSTANCESHAREDDIR ist.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Also hieß es nach jeder erfolglosen Installation erst mal: Windows 2008 Server neu installieren (lassen).&lt;/p&gt;  &lt;p&gt;Mittlerweile war ich schon kurz davor aufzugeben. Glücklicherweise fand ich folgende Seite:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.cannontrodder.net/2009/07/24/sql-server-2008-x64-on-windows-server-2008-x64-is-utterly-broken/"&gt;http://www.cannontrodder.net/2009/07/24/sql-server-2008-x64-on-windows-server-2008-x64-is-utterly-broken/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Hier hatte jemand das exakt gleiche Problem. Im Gegensatz zu mir hatte er jedoch eine Lösung gefunden, die die Installation des SP1 und des Managent Studios erlaubten.&lt;/p&gt;  &lt;p&gt;Alles in allem sah meine Vorgehensweise zur Installation des SQL Servers auf einem nackten Windows 2008 System (außer vorinstalliertem PLESK und der VC++ 2005 Runtime war sonst nix drauf) wie folgt aus:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;.NET Framework 3.51 herunterladen und installieren&lt;/li&gt;    &lt;li&gt;Powershell als Feature im Server Management aktivieren&lt;/li&gt;    &lt;li&gt;SQL Server 2008 Express With Tool 64 Bit herunter laden (SQLEXPRWT_x64_DEU.exe)&lt;/li&gt;    &lt;li&gt;Starten des Setups, Verzeichnis in das das Setup entpackt wird notieren &lt;/li&gt;    &lt;li&gt;Setup Bildschirm geöffnet lassen, jedoch nichts klicken&lt;/li&gt;    &lt;li&gt;&amp;#214;ffnen eines Command-Prompts&lt;/li&gt;    &lt;li&gt;Navigation in das zuvor notierte Verzeichnis&lt;/li&gt;    &lt;li&gt;Eingeben der folgenden Befehlszeile: &lt;strong&gt;setup /action=install /INSTALLSHAREDDIR=&amp;quot;C:\Program Files\Microsoft SQL Server\\&amp;quot; /INSTALLSHAREDWOWDIR=&amp;quot;C:\Program Files\Microsoft SQL Server Shared\\&amp;quot;&lt;/strong&gt;&lt;/li&gt;    &lt;li&gt;Wizzard durchklicken &lt;/li&gt;    &lt;li&gt;Download des Sql Server 2008 SP 1 64 Bit (SQLServer2008SP1-KB968369-x64-DEU)&lt;/li&gt;    &lt;li&gt;Starten des SP 1 Setups (lief ohne Probleme)&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Ich hoffe, dass ich anderen, die mit dem selben Problem kämpfen mit diesem Eintrag helfen kann!&lt;/p&gt;  &lt;p&gt;An dieser Stelle auch noch mal vielen Dank an die Entwickler und Testabteilung des SQL Server 2008 Setups. Ohne euch hätte ich gar nicht gewusst, was ich an den vielen Abenden machen soll ...&lt;/p&gt;&lt;img src="http://blog.codemurai.de/aggbug/147.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Andre</dc:creator>
            <guid>http://blog.codemurai.de/archive/2010/01/22/sql-server-2008-express-und-windows-server-2008-64-bit.aspx</guid>
            <pubDate>Fri, 22 Jan 2010 16:56:13 GMT</pubDate>
            <comments>http://blog.codemurai.de/archive/2010/01/22/sql-server-2008-express-und-windows-server-2008-64-bit.aspx#feedback</comments>
            <wfw:commentRss>http://blog.codemurai.de/comments/commentRss/147.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Client Scripte mit ASP.NET 3.51 zusammenfassen</title>
            <link>http://blog.codemurai.de/archive/2010/01/14/client-scripte-mit-asp-net-3-51-zusammenfassen.aspx</link>
            <description>&lt;p&gt;Jeder der in einer ASP.NET Webforms Anwendung ein oder mehrere &amp;quot;Ajax-Enabled&amp;quot; Controls eines Komponentenherstellers nutzt kennt das Problem: Die Anzahl der zum Client übertragenen Scripte steigt explosionsartig an.&lt;/p&gt;  &lt;p&gt;Dies liegt daran, dass die meisten Komponentenhersteller &lt;strong&gt;je Control ein eigenes Script&lt;/strong&gt; zum Client senden. Generell ist das auch durchaus sinnvoll, denn nur so kann gewährleistet werden, dass der Browser nur die minimal benötigte Anzahl an Scriptcode vom Server herunterladen muss.&lt;/p&gt;  &lt;p&gt;Wie der folgende Screenshot zeigt, wird dieser Segen jedoch auch schnell zum Fluch. Die Abbildung zeigt einen Mitschnitt des Netzwerktraffics beim Besuch einer Seite eines aktuellen Projekts. Inhalt der Seite sind ein Scriptmanager, zwei &lt;a title="Link zur Infragistics NetAdvantage for ASP.Net Produktseite" href="http://www.infragistics.com/dotnet/netadvantage/aspnet.aspx" target="_blank"&gt;Infragistics Controls&lt;/a&gt;, einige &lt;a title="Link auf die Esri Web ADF Vorstellung" href="http://resources.esri.com/arcgisserver/adf/dotnet/" target="_blank"&gt;ESRI WebADF Controls&lt;/a&gt; sowie ein paar eigene Servercontrols, die auch eigene Scripts rendern.&lt;/p&gt;  &lt;h1&gt;&lt;a href="http://blog.codemurai.de/images/ClientScriptemitASP.NETzusammenfassen_80D2/1_Vorher.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="184" alt="1_Vorher" src="/images/localhost/1_Vorher_thumb.png" width="244" border="0" /&gt;&lt;/a&gt; &lt;/h1&gt;  &lt;p&gt;Die Anzahl zu übertragenden Scripts beträgt laut Screenshot also 37 Stück.&lt;/p&gt;  &lt;h3&gt;Interessant, aber wo liegt nun das Problem?&lt;/h3&gt;  &lt;p&gt;Wir wissen zwar nun, dass wir 37 Scripte zum Client übertragen müssen, aber was ist daran so schlimm und warum sollte es uns überhaupt interessieren?&lt;/p&gt;  &lt;p&gt;Um das Problem an der Situation zu erkennen, sollten wir uns kurz vor Auge führen, dass die Scripte nicht gemeinsam innerhalb des selben HTTP Requests wie die eigentliche Website übertragen werden. Stattdessen wird je Script (und auch Bild, CSS Stylesheet, etc.) eine eigene Anfrage an den Webserver gestellt.&lt;/p&gt;  &lt;p&gt;Jede dieser Anfragen hat eine gewisse &amp;quot;Rüstzeit&amp;quot; oder auch Latenz. Damit ist die Zeitspanne gemeint, die zwischen dem Absetzen des Befehls, eine Anfrage zu starten und dem tatsächlichen Start der Anfrage vergeht. Je nach Entfernung zwischen Client und Server sowie der Qualität der Internetanbindung der beiden variiert der tatsächliche Wert dieser Reaktionszeit.&lt;/p&gt;  &lt;h3&gt;Und was bedeutet dies nun konkret?&lt;/h3&gt;  &lt;p&gt;Schauen wir uns zur Verdeutlichung ein kleines Beispiel an. Gehen wir von jemandem mit einer extrem schlechten Anbindung und einer Latenz von 500 ms aus (&lt;em&gt;zugegeben, der Wert ist recht hoch, lässt sich aber schön einfach rechnen&lt;/em&gt; ;-))&lt;/p&gt;  &lt;p&gt;Um unsere 37 Scriptdateien herunterzuladen, hätten wir nun also&lt;/p&gt;  &lt;p&gt;37 Anfragen * 500 ms Latenz + 37 Antworten * 500 ms Latenz = 37 Sekunden.&lt;/p&gt;  &lt;p&gt;Diese 37 Sekunden sind reine Wartezeit und kommen zur eigentlichen &amp;#220;bertragungszeit der Scripte hinzu. Nun ist es natürlich nicht so, dass sämtliche Anfragen sequentiell abgearbeitet werden. Allerdings sieht die Standardkonfiguration vieler Browser eine Beschränkung von zwei gleichzeitigen Verbindungen zu einem Hostnamen vor. Diese Anzahl resultiert aus einer Empfehlung der HTTP 1.1 Spezifikation. Heisst, wir müssen unsere 37 Sekunden noch durch zwei Teilen, da zwei gleichzeitige Verbindungen möglich sind. Bleiben immer noch 18,5 Sekunden übrig.&lt;/p&gt;  &lt;h3&gt;Was können wir dagegen tun?&lt;/h3&gt;  &lt;p&gt;Um dieses Problem, was tückischerweise während der Entwicklung nur selten auffällt, da die Latenz zwischen lokalem Webserver und lokalem Webbrowser nicht sonderlich hoch sein dürfte ;-), in den Griff zu bekommen, bietet ASP.NET ab der Version 3.51 das Element &lt;em&gt;&lt;a title="Link zur MSDN Dokumentation des CompositeScript Elements" href="http://msdn.microsoft.com/de-de/library/cc488552.aspx" target="_blank"&gt;CompositeScript&lt;/a&gt;&lt;/em&gt; als Kindelement des &lt;em&gt;Scriptmanagers&lt;/em&gt; an.&lt;/p&gt;  &lt;p&gt;Dieses Element erlaubt es, einzelne Scripts anzugeben, welche anschließend automatisch zu einem Script zusammengefasst werden.&lt;/p&gt;  &lt;p&gt;Das Ganze sieht ungefähr so aus:&lt;/p&gt;  &lt;p&gt;&amp;lt;asp:ScriptManager runat=&amp;quot;server&amp;quot; ID=&amp;quot;sm1&amp;quot;&amp;gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;CompositeScript&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Scripts&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;asp:ScriptReference Name=&amp;quot;/Scripts/MeinScript1.js&amp;quot; /&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;asp:ScriptReference Name=&amp;quot;/Scripts/MeinScript2.js&amp;quot; /&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;asp:ScriptReference Name=&amp;quot;/Scrips/MeinScript3.js&amp;quot; /&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/Scripts&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/CompositeScript&amp;gt;     &lt;br /&gt;&amp;lt;/asp:ScriptManager&amp;gt;&lt;/p&gt;  &lt;p&gt;Problematisch ist nur, dass man die URL der notwendigen Scripts nur für Dateibasierte Scripts kennt. Sobald ein Script aber als eingebettete Ressource über die &lt;em&gt;Webresource.axd&lt;/em&gt; nach aussen gerendert wird, ist die URL unbekannt.&lt;/p&gt;  &lt;p&gt;Um dieses Problem zu lösen, kann das auf Codeplex erhältliche Control &lt;a href="http://www.codeplex.com/aspnet/Release/ProjectReleases.aspx?ReleaseId=13356"&gt;ScriptReferenceProfiler&lt;/a&gt; genutzt werden. Wird es auf einer Seite eingesetzt, rendert es eine Liste aller genutzten Scripte heraus. Diese Liste kann 1:1 kopiert und in das &lt;em&gt;Scripts&lt;/em&gt; Element des &lt;em&gt;CompositeScript&lt;/em&gt; Elements eingefügt werden.&lt;/p&gt;  &lt;h1&gt;&lt;a href="http://blog.codemurai.de/images/ClientScriptemitASP.NETzusammenfassen_80D2/4_ScriptProfilerOutput.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="181" alt="4_ScriptProfilerOutput" src="/images/localhost/4_ScriptProfilerOutput_thumb.png" width="244" border="0" /&gt;&lt;/a&gt; &lt;/h1&gt;  &lt;p&gt;Die eingefügten Scripts werden anschließend serverseitig zu einem großen Script hinzugefügt und innerhalb einer einzigen Anfrage herunter geladen.&lt;/p&gt;  &lt;h3&gt;&lt;/h3&gt;  &lt;h3&gt;Nicht so schnell!&lt;/h3&gt;  &lt;p&gt;Der Versuch, alle 37 Scripte der zuvor genannten Seite in einem &lt;em&gt;CompositeScript&lt;/em&gt; Element zusammen zu führen resultiert in folgendem Fehler:&lt;/p&gt;  &lt;h1&gt;&lt;a href="http://blog.codemurai.de/images/ClientScriptemitASP.NETzusammenfassen_80D2/5_ASP_Error.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="209" alt="5_ASP_Error" src="/images/localhost/5_ASP_Error_thumb.png" width="244" border="0" /&gt;&lt;/a&gt; &lt;/h1&gt;  &lt;p&gt;Die Ursache für diesen Fehler ist, dass der Scriptmanager jedes benötigte Script mit einem kryptischen Bezeichner an die URL anhängt. Dies sprengt schnell die maximale Begrenzung einer URL auf 1024 Zeichen.&lt;/p&gt;  &lt;h3&gt;Die Lösung&lt;/h3&gt;  &lt;p&gt;Um dieses Problem zu umgehen platziert man einfach mehrere &lt;em&gt;CompositeScript&lt;/em&gt; Elemente auf der Seite und verteilt die Scripte auf diese. Da jedes &lt;em&gt;CompositeScript&lt;/em&gt; Element einen eigenen Scriptmanager benötigt, nutzt man ab dem zweiten CompositeScript Element statt zusätzlichen Scriptmanagern, von denen es immer nur einen pro Seite geben darf einfach ScriptmanagerProxy Controls.&lt;/p&gt;  &lt;p&gt;Die optimale Verteilung der Scripte auf die einzelnen &lt;em&gt;CompositeScript&lt;/em&gt; Elemente ist schnell im Trial-and-Error-Verfahren gefunden. In meinem Beispiel sah sie übrigens wie folgt aus:&lt;/p&gt;  &lt;p&gt;&amp;lt;asp:ScriptManagerProxy ID=&amp;quot;ScriptManagerProxyAjax&amp;quot; runat=&amp;quot;server&amp;quot;&amp;gt;   &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;CompositeScript&amp;gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Scripts&amp;gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;asp:ScriptReference Name=&amp;quot;MicrosoftAjax.js&amp;quot; /&amp;gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;asp:ScriptReference Name=&amp;quot;MicrosoftAjaxWebForms.js&amp;quot; /&amp;gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;asp:ScriptReference Name=&amp;quot;AjaxControlToolkit.Common.Common.js&amp;quot; Assembly=&amp;quot;AjaxControlToolkit, Version=3.0.30512.20315, Culture=neutral, PublicKeyToken=28f01b0e84b6d53e&amp;quot; /&amp;gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;asp:ScriptReference Name=&amp;quot;AjaxControlToolkit.Compat.Timer.Timer.js&amp;quot; Assembly=&amp;quot;AjaxControlToolkit, Version=3.0.30512.20315, Culture=neutral, PublicKeyToken=28f01b0e84b6d53e&amp;quot; /&amp;gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;asp:ScriptReference Name=&amp;quot;AjaxControlToolkit.Compat.DragDrop.DragDropScripts.js&amp;quot;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Assembly=&amp;quot;AjaxControlToolkit, Version=3.0.30512.20315, Culture=neutral, PublicKeyToken=28f01b0e84b6d53e&amp;quot; /&amp;gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;asp:ScriptReference Name=&amp;quot;AjaxControlToolkit.Animation.Animations.js&amp;quot; Assembly=&amp;quot;AjaxControlToolkit, Version=3.0.30512.20315, Culture=neutral, PublicKeyToken=28f01b0e84b6d53e&amp;quot; /&amp;gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/Scripts&amp;gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/CompositeScript&amp;gt;    &lt;br /&gt;&amp;lt;/asp:ScriptManagerProxy&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;asp:ScriptManagerProxy ID=&amp;quot;ScriptManagerProxyInfragisticsCommon&amp;quot; runat=&amp;quot;server&amp;quot;&amp;gt;   &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;CompositeScript&amp;gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Scripts&amp;gt;&lt;/p&gt;  &lt;p&gt;...   &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/Scripts&amp;gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/CompositeScript&amp;gt;    &lt;br /&gt;&amp;lt;/asp:ScriptManagerProxy&amp;gt;&lt;/p&gt;  &lt;p&gt;...&lt;/p&gt;  &lt;p&gt;Gerade wenn man sich mit einem Element nahe an der 1024 Zeichen Grenze befindet, sollte man jedoch im Hinterkopf halten, dass die tatsächliche Url der Seite später meist nicht mehr &lt;a href="http://localhost"&gt;http://localhost&lt;/a&gt; ist, sondern eher &lt;a href="http://meinesubdomain.meinedomain.de"&gt;http://meinesubdomain.meinedomain.de&lt;/a&gt;. Durch die &amp;#196;nderung des Hostnamens während der Produktivsetzung ändert sich also eventuell noch einmal die Länge der URL. Daher im Zweifelsfall lieber ein Script weniger als in der Entwicklungsumgebung möglich in die &lt;em&gt;CompositeScript&lt;/em&gt; Tags einfügen.&lt;/p&gt;  &lt;p&gt;Es müssen übrigens nicht alle Scripts in &lt;em&gt;CompositeScript&lt;/em&gt; Tags gepackt werden. Solche, die nicht verpackt wurden, werden wie gehabt ganz normal weiter als einzelner Script Tag zum Browser herausgerendert.&lt;/p&gt;  &lt;h3&gt;Und was bringts nun?&lt;/h3&gt;  &lt;p&gt;Tja, was bringt der ganze Aufwand nun? Da Bilder bekanntlich mehr als Worte sagen, hier ein paar Vorher/Nachher Screenshots der zuvor vorgestellten Seite:&lt;/p&gt;  &lt;p&gt;Initial hat die Seite 37 Scripts heruntergeladen.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;a href="http://blog.codemurai.de/images/ClientScriptemitASP.NETzusammenfassen_80D2/1_Vorher_3.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="184" alt="1_Vorher" src="/images/localhost/1_Vorher_thumb_3.png" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Yahoo's YSlow gab der Seite eine Gesamtnote von E.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;a href="http://blog.codemurai.de/images/ClientScriptemitASP.NETzusammenfassen_80D2/2_Vorher_YSlowGrade.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="92" alt="2_Vorher_YSlowGrade" src="/images/localhost/2_Vorher_YSlowGrade_thumb.png" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Die Ladezeit betrug knapp 15 s, die Gesamtgröße 734 kb.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;a href="http://blog.codemurai.de/images/ClientScriptemitASP.NETzusammenfassen_80D2/3_Vorher_YSlowSize.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="28" alt="3_Vorher_YSlowSize" src="/images/localhost/3_Vorher_YSlowSize_thumb.png" width="145" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Nach den &amp;#196;nderungen wurden nur noch 9 Scripte referenziert.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;a href="http://blog.codemurai.de/images/ClientScriptemitASP.NETzusammenfassen_80D2/6_Firebug_Nachher.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="68" alt="6_Firebug_Nachher" src="/images/localhost/6_Firebug_Nachher_thumb.png" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Die YSlow Benotung stieg immerhin von E auf D.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;a href="http://blog.codemurai.de/images/ClientScriptemitASP.NETzusammenfassen_80D2/7_Nachher_YSlowGrade.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="99" alt="7_Nachher_YSlowGrade" src="/images/localhost/7_Nachher_YSlowGrade_thumb.png" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Die Ladezeit reduzierte sich auf knapp 5 s, die Gesamtgröße auf 655 kb.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blog.codemurai.de/images/ClientScriptemitASP.NETzusammenfassen_80D2/8_Nachher_YSlowSize.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="29" alt="8_Nachher_YSlowSize" src="/images/localhost/8_Nachher_YSlowSize_thumb.png" width="140" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blog.codemurai.de/aggbug/149.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Andre</dc:creator>
            <guid>http://blog.codemurai.de/archive/2010/01/14/client-scripte-mit-asp-net-3-51-zusammenfassen.aspx</guid>
            <pubDate>Thu, 14 Jan 2010 11:16:22 GMT</pubDate>
            <comments>http://blog.codemurai.de/archive/2010/01/14/client-scripte-mit-asp-net-3-51-zusammenfassen.aspx#feedback</comments>
            <wfw:commentRss>http://blog.codemurai.de/comments/commentRss/149.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Prüfen, ob sich ein Webpart im Design Modus befindet</title>
            <link>http://blog.codemurai.de/archive/2009/09/17/prufen-ob-sich-ein-webpart-im-design-modus-befindet.aspx</link>
            <description>Während der Webpart Entwicklung kann es nützlich sein, zu wissen ob man sich gerade im Webpart Design Modus befindet. Folgender Codeausschnitt zeigt, wie man an diese Information kommt:&lt;br&gt;&lt;pre&gt;&lt;span style="color: Black; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;        &lt;span style="color: Blue; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;protected&lt;/span&gt; &lt;span style="color: Blue; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;bool&lt;/span&gt; IsDesignMode()
        {
            &lt;span style="color: Blue; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;bool&lt;/span&gt; designMode &lt;span style="color: Red; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;=&lt;/span&gt; &lt;span style="color: Blue; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;true&lt;/span&gt;;
            &lt;span style="color: Blue; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;if&lt;/span&gt; (&lt;span style="color: Blue; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;this&lt;/span&gt;.Page !&lt;span style="color: Red; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;=&lt;/span&gt; &lt;span style="color: Blue; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;null&lt;/span&gt;)
            {
                WebPartManager wp &lt;span style="color: Red; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;=&lt;/span&gt; WebPartManager.GetCurrentWebPartManager(&lt;span style="color: Blue; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;this&lt;/span&gt;.Page);
                &lt;span style="color: Blue; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;if&lt;/span&gt; (wp !&lt;span style="color: Red; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;=&lt;/span&gt; &lt;span style="color: Blue; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;null&lt;/span&gt;)
                {
                    designMode &lt;span style="color: Red; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;=&lt;/span&gt; (wp.DisplayMode !&lt;span style="color: Red; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;=&lt;/span&gt; WebPartManager.BrowseDisplayMode);
                }
            }
            &lt;span style="color: Blue; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;return&lt;/span&gt; designMode;
        }&lt;/span&gt;&lt;/pre&gt;Hilfreich ist dies zum Beispiel, um Validatoren während des Design Modus abzuschalten.&lt;br&gt;&lt;p&gt;&lt;/p&gt;&lt;img src="http://blog.codemurai.de/aggbug/153.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Andre</dc:creator>
            <guid>http://blog.codemurai.de/archive/2009/09/17/prufen-ob-sich-ein-webpart-im-design-modus-befindet.aspx</guid>
            <pubDate>Thu, 17 Sep 2009 10:29:23 GMT</pubDate>
            <comments>http://blog.codemurai.de/archive/2009/09/17/prufen-ob-sich-ein-webpart-im-design-modus-befindet.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://blog.codemurai.de/comments/commentRss/153.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Meine drei Top Entwicklertools</title>
            <link>http://blog.codemurai.de/archive/2009/06/04/meine-drei-top-entwicklertools.aspx</link>
            <description>&lt;p&gt;Ich weiß, ich bin spät, aber zum Glück noch nicht zu spät. &lt;a href="http://blogs.msdn.com/softwarehersteller/archive/2009/05/06/msdn-blog-parade-was-sind-ihre-lieblings-entwickler-tools-mitmachen-und-gewinnen.aspx" target="_blank"&gt;MSDN Deutschland&lt;/a&gt; hat zur Blog-Parade aufgerufen und fragt nach den drei Lieblings-Entwickler-Tools.&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/softwarehersteller/archive/2009/05/06/msdn-blog-parade-was-sind-ihre-lieblings-entwickler-tools-mitmachen-und-gewinnen.aspx" target="_blank"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="32" alt="150x32_BlogParade_anim_thumb" src="/images/localhost/150x32_BlogParade_anim_thumb.gif" width="150" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt; Nachdem &lt;a href="http://coding.roecher.de/2009/05/26/meine-top-3-entwicklertools/" target="_blank"&gt;Mario&lt;/a&gt;, &lt;a href="http://www.vb-magazin.de/forums/blogs/alexbierhaus/archive/2009/05/15/top-3-entwicklertools.aspx" target="_blank"&gt;Alex&lt;/a&gt;, &lt;a href="http://blog.jan-welker.de/2009/05/16/MeineTop3EntwicklerTools.aspx" target="_blank"&gt;Jan&lt;/a&gt; und viele andere auch schon mit gemacht haben, möchte ich meinen Senf selbstverständlich auch zum Besten geben.&lt;/p&gt; &lt;p&gt;Das Visual Studio zur Grundausstattung eines Entwicklers gehört setze ich mal voraus und lasse es daher außen vor. Nun aber zu meinen Top 3.&lt;/p&gt; &lt;ol&gt; &lt;li&gt; &lt;h1&gt;&lt;a href="http://microsoft.com/whdc/devtools/debugging/" target="_blank"&gt;Microsoft WinDbg&lt;/a&gt;&lt;/h1&gt;&lt;a href="http://blog.codemurai.de/images/MeinedreiTopEntwicklertools_EEAD/windbg.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="157" alt="windbg" src="/images/localhost/windbg_thumb.png" width="244" border="0"&gt;&lt;/a&gt; &lt;br&gt;&lt;br&gt;Ich kann gar nicht aufzählen, wie oft mir dieses Tool schon in unangenehmen Situationen geholfen hat. &lt;br&gt;Wer kennt die Situation nicht: &lt;br&gt; &lt;ul&gt; &lt;li&gt;Man entwickelt eine Applikation  &lt;li&gt;Auf dem Entwicklungs- und Testsystemen läuft Sie großartig  &lt;li&gt;Beim Kunden stürzt sie ab  &lt;li&gt;Man hat weder eine vernünftige Fehlermeldung, noch einen aussagekräftigen Eintrag in der Log-Datei  &lt;li&gt;Der Fehler ist bei uns nicht nachvollziehbar  &lt;li&gt;Wir dürfen mit unserem PC nicht ins Kundennetz und Visual Studio oder CoreDbg dürfen wir dort auch nicht installieren  &lt;li&gt;„Pech gehabt, lieber Kunde“ oder wirres Code-Ändern ist keine valide Option ;-) &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Wenn es so weit ist, hilft nur noch ein ganz tiefer Griff in die Werkzeugkiste, nämlich der zu &lt;a href="http://microsoft.com/whdc/devtools/debugging/" target="_blank"&gt;WinDbg&lt;/a&gt;. Für diejenigen, die ihn nicht kennen: WinDbg ist ein unmanaged (native) Debugger mit grafischer Benutzeroberfläche. Dank der SOS Erweiterung kann man ihn jedoch wunderbar dazu verwenden, auch managed Code zu debuggen. Zugegeben, der Komfort liegt etwas hinter dem des in Visual Studio integrierten Debuggers, aber in der Not nimmt man schließlich, was man bekommen kann. Das tolle an diesem Debugger ist nämlich, dass er nicht installiert werden muss, sondern direkt vom Stick gestartet werden kann. Außerdem "sieht" er etwas mehr als der in VS integrierte Debugger, denn schließlich ist er ja eigentlich ein unmanaged Debugger. Bei Interesse könnte ich mich übrigens dazu verleiten lassen, mal ein WinDbg Einsteiger Tutorial zu schreiben, oder zumindest mein "Cheat-Sheet" hier aufs Blog zu packen. Also einfach die &lt;strong&gt;Kommentarfunktion&lt;/strong&gt; dieses Eintrags nutzen!&lt;/p&gt; &lt;li&gt; &lt;h1&gt;&lt;a href="http://www.infragistics.com" target="_blank"&gt;Infragistics NetAdvantage&lt;/a&gt;&lt;/h1&gt;&lt;a href="http://blog.codemurai.de/images/MeinedreiTopEntwicklertools_EEAD/infragistics.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="149" alt="infragistics" src="/images/localhost/infragistics_thumb.png" width="244" border="0"&gt;&lt;/a&gt;&amp;nbsp;&lt;br&gt;&lt;br&gt;»Für den ersten Eindruck gibt es keine zweite Chance« lautet ein geflügeltes Wort. Dass Menschen einander innerhalb weniger Augenblicke beurteilen, ist allgemein bekannt. Da diese Beurteilung vor allem anhand optischer Gesichtspunkte statt findet, achten viele Menschen heutzutage in besonderem Maße auf ihr Äußeres. Nur so lassen sich wichtige erste Begegnungen, wie zum Beispiel ein Vorstellungsgespräch, erfolgreich meistern.  &lt;p&gt;Ähnlich wie das menschliche Äußere bei einem Vorstellungsgespräch, kann auch das Äußere einer Softwareapplikation – also die Benutzeroberfläche – im Zweifelsfall über Sieg oder Niederlage (kaufen oder nicht kaufen!) entscheiden. Der Grund dafür ist, dass viele Benutzer, vor allem solche, die technisch nicht sonderlich versiert sind, &lt;strong&gt;vom Eindruck der Benutzeroberfläche auf die Gesamtqualität der Software schließen&lt;/strong&gt;. Komplexe, überladene Bildschirmmasken, deren Design an ein typisches Look and Feel von vor zehn Jahren erinnern, mindern potentiell also den kommerziellen Erfolg einer Anwendung. Dies gilt besonders dann, wenn die Konkurrenz ihre Hausaufgaben gemacht hat!  &lt;p&gt;Reichte es vor 15 Jahren noch vollkommen aus, einfach nur die Bedienung der Applikation mit der Maus zu unterstützen, erwarten Anwender heute doch einiges mehr. Angeregt von innovativen Oberflächenelementen in Applikationen großer Hersteller, wie zum Beispiel Apples Coverflow, das Ribbon in Microsoft Office 2007 oder interaktiv gruppierbarer Tabellen wie in Microsoft Outlook, erwarten Endanwender solche Features auch in anderen, also &lt;strong&gt;unseren&lt;/strong&gt; Applikationen.  &lt;p&gt;Leider kommt man mit den Bordmitteln, die Microsoft Visual Studio bis zur Version 2008 an dieser Stelle liefert nicht immer ans Ziel. So sind zum Beispiel weder Ribbons, noch interaktiv gruppierbare Tabellen oder Excel ähnliche Diagramme „out-of-the-box“ möglich.  &lt;p&gt;Möchte man die Anforderungen an eine konkurrenzfähige Oberfläche also erfüllen, kommt man (wirtschaftlich gesehen) kaum um den Einsatz einer 3rd Party UI Komponentensuite herum.  &lt;p&gt;Die Suite meiner Wahl ist &lt;a href="http://www.infragistics.com" target="_blank"&gt;Infragistics NetAdvantage&lt;/a&gt;. Die Komponenten sehen nicht nur top aus, sondern bieten auch alle Features, die das Entwicklerherz begehrt. &lt;/p&gt; &lt;li&gt; &lt;h1&gt;&lt;a href="http://code.msdn.microsoft.com/sourceanalysis" target="_blank"&gt;StyleCop&lt;/a&gt;&lt;/h1&gt;Konsistente Quellcode Formatierungen in einem Projekt mit mehreren Entwicklern. müssen dank &lt;a href="http://code.msdn.microsoft.com/sourceanalysis" target="_blank"&gt;StyleCop&lt;/a&gt; kein Wunschtraum mehr bleiben. Jedem, der im Team entwickelt kann ich dieses Tool nur wärmstens ans Herz legen!&lt;br&gt;&lt;/li&gt;&lt;/ol&gt;&lt;img src="http://blog.codemurai.de/aggbug/159.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Andre</dc:creator>
            <guid>http://blog.codemurai.de/archive/2009/06/04/meine-drei-top-entwicklertools.aspx</guid>
            <pubDate>Thu, 04 Jun 2009 22:59:41 GMT</pubDate>
            <comments>http://blog.codemurai.de/archive/2009/06/04/meine-drei-top-entwicklertools.aspx#feedback</comments>
            <slash:comments>7</slash:comments>
            <wfw:commentRss>http://blog.codemurai.de/comments/commentRss/159.aspx</wfw:commentRss>
        </item>
        <item>
            <title>HTTP Error 500 nach Restore eines Sharepoint Backups</title>
            <link>http://blog.codemurai.de/archive/2009/05/18/http-error-500-nach-restore-eines-sharepoint-backups.aspx</link>
            <description>&lt;p&gt;Kürzlich versuchte ich via &lt;em&gt;stsadm -o restore&lt;/em&gt; das Sharepoint Backup eines Kundens auf meinem Entwicklungsrechner einzuspielen. Obwohl die Wiederherstellung problemlos lief, kam beim anschließenden Aufrufen der Seite stets nur die statische Meldung: HTTP 500, interner Serverfehler. Sowohl das Eventlog, als auch die Sharepoint-Log Dateien gaben keinen Aufschluss zur Ursache des Fehlers. Auch Google und Co waren wenig hilfreich.&lt;/p&gt; &lt;p&gt;Nach stundenlangem Probieren konnte ich die Ursache glücklicherweise doch finden: Sowohl der Kunde, als auch ich hatten einen englischen MOSS auf einem englischen Windows 2003 Server installiert. Im Gegensatz zu mir hatte der Kunde jedoch zusätzlich die deutschen Sprachpakete für MOSS &lt;strong&gt;und&lt;/strong&gt; WSS 3.0 inkl. aktuellem Servicepack installiert.&lt;/p&gt; &lt;p&gt;Mein Fazit der Geschichte:&lt;/p&gt; &lt;p&gt;In Zukunft werde ich beim Aufsetzen einer Sharepoint Entwicklungsmaschine sofort die Language Packs installieren.&lt;/p&gt;&lt;img src="http://blog.codemurai.de/aggbug/160.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Andre</dc:creator>
            <guid>http://blog.codemurai.de/archive/2009/05/18/http-error-500-nach-restore-eines-sharepoint-backups.aspx</guid>
            <pubDate>Mon, 18 May 2009 23:44:53 GMT</pubDate>
            <comments>http://blog.codemurai.de/archive/2009/05/18/http-error-500-nach-restore-eines-sharepoint-backups.aspx#feedback</comments>
            <wfw:commentRss>http://blog.codemurai.de/comments/commentRss/160.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Dotnet-kicks.de Link in Feedburner RSS Footer einbinden</title>
            <link>http://blog.codemurai.de/archive/2009/05/18/dotnet-kicks-de-link-in-feedburner-rss-footer-einbinden.aspx</link>
            <description>&lt;p&gt;Wer den RSS Feed seines Blogs via Feedburner publiziert, kann mit Hilfe eines &lt;a href="http://www.google.com/support/feedburner/bin/answer.py?hl=en&amp;amp;answer=78966" target="_blank"&gt;FeedFlares&lt;/a&gt; sehr einfach einen dynamischen Dotnet-kicks.de Link unter jeden Eintrag setzen.&lt;/p&gt; &lt;p&gt;Dazu ist wie folgt vorzugehen:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;Einloggen bei &lt;a href="http://feedburner.google.com" target="_blank"&gt;feedburner&lt;/a&gt;&lt;/li&gt; &lt;li&gt;Feed zur Verwaltung auswählen&lt;/li&gt; &lt;li&gt;&lt;a href="http://blog.codemurai.de/images/Dot.deLinkinFeedburnerRSSFootereinbinden_1397A/image.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="141" alt="image" src="/images/localhost/image_thumb.png" width="244" border="0"&gt;&lt;/a&gt; &lt;/li&gt; &lt;li&gt;Registrierkarte Optimize anklicken.&lt;/li&gt; &lt;li&gt;Links im Menü den Punkt FeedFlare wählen&lt;br&gt;&lt;a href="http://blog.codemurai.de/images/Dot.deLinkinFeedburnerRSSFootereinbinden_1397A/image_3.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="244" alt="image" src="/images/localhost/image_thumb_3.png" width="147" border="0"&gt;&lt;/a&gt; &lt;/li&gt; &lt;li&gt;Neuen Flare hinzufügen&lt;br&gt;&lt;a href="http://blog.codemurai.de/images/Dot.deLinkinFeedburnerRSSFootereinbinden_1397A/image_4.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="182" alt="image" src="/images/localhost/image_thumb_4.png" width="244" border="0"&gt;&lt;/a&gt; &lt;br&gt;Eine passende Flare Datei, die von jedem Benutzt werden darf, befindet sich auf meiner Homepage unter &lt;a title="http://www.codemurai.de/downloads/kick_it-deflare.xml" href="http://www.codemurai.de/downloads/kick_it-deflare.xml"&gt;http://www.codemurai.de/downloads/kick_it-deflare.xml&lt;/a&gt;&lt;/li&gt; &lt;li&gt;Speichern und Aktivieren&lt;br&gt;&lt;a href="http://blog.codemurai.de/images/Dot.deLinkinFeedburnerRSSFootereinbinden_1397A/image_5.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="150" alt="image" src="/images/localhost/image_thumb_5.png" width="244" border="0"&gt;&lt;/a&gt; &lt;/li&gt; &lt;li&gt;Das Ergebnis genießen ;-)&lt;br&gt;&lt;a href="http://blog.codemurai.de/images/Dot.deLinkinFeedburnerRSSFootereinbinden_1397A/image_6.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="66" alt="image" src="/images/localhost/image_thumb_6.png" width="244" border="0"&gt;&lt;/a&gt; &lt;/li&gt;&lt;/ol&gt;&lt;img src="http://blog.codemurai.de/aggbug/161.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Andre</dc:creator>
            <guid>http://blog.codemurai.de/archive/2009/05/18/dotnet-kicks-de-link-in-feedburner-rss-footer-einbinden.aspx</guid>
            <pubDate>Mon, 18 May 2009 23:27:06 GMT</pubDate>
            <comments>http://blog.codemurai.de/archive/2009/05/18/dotnet-kicks-de-link-in-feedburner-rss-footer-einbinden.aspx#feedback</comments>
            <wfw:commentRss>http://blog.codemurai.de/comments/commentRss/161.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Office 2007 Bedienung für 2003 Profis</title>
            <link>http://blog.codemurai.de/archive/2009/04/30/office-2007-bedienung-fur-2003-profis.aspx</link>
            <description>&lt;p&gt;Da immer mehr und mehr meiner Freunde, Kunden und Kollegen auf Office 2007 umsteigen werde ich in letzter Zeit häufiger gefragt, wo sich ein unter 2003 bekannter Menüpunkt innerhalb des Office 2007 Ribbons versteckt.&lt;/p&gt; &lt;p&gt;Die Frage lässt sich relativ leicht durch die folgenden drei interaktiven "Handbücher" beantworten:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;a href="http://office.microsoft.com/de-de/excel/HA101491511031.aspx" target="_blank"&gt;Interaktives Referenzhandbuch: Befehle in Excel 2003 und Excel 2007 im Vergleich&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://office.microsoft.com/de-de/word/HA100744321031.aspx" target="_blank"&gt;Interaktives Referenzhandbuch: Befehle in Word 2003 und Word 2007 im Vergleich&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://office.microsoft.com/de-de/powerpoint/HA101490761031.aspx" target="_blank"&gt;Interaktives Referenzhandbuch: Befehle in PowerPoint 2003 und PowerPoint 2007 im Vergleich&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Wer es noch nicht kennt:&lt;/p&gt; &lt;p&gt;Dem Anwender wir die gewohnte Office 2003 Oberfläche präsentiert. Nach Auswahl eines Menüpunktes wird per Animation der neuer Ort angezeigt. Schick, oder?&lt;/p&gt;&lt;img src="http://blog.codemurai.de/aggbug/162.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Andre</dc:creator>
            <guid>http://blog.codemurai.de/archive/2009/04/30/office-2007-bedienung-fur-2003-profis.aspx</guid>
            <pubDate>Thu, 30 Apr 2009 10:47:16 GMT</pubDate>
            <comments>http://blog.codemurai.de/archive/2009/04/30/office-2007-bedienung-fur-2003-profis.aspx#feedback</comments>
            <wfw:commentRss>http://blog.codemurai.de/comments/commentRss/162.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Visual Studio 2008 stürzt beim Kompilieren eines Outlook 2007 Add-Ins ab.</title>
            <link>http://blog.codemurai.de/archive/2009/01/29/visual-studio-2008-sturzt-beim-kompilieren-eines-outlook-2007-add.aspx</link>
            <description>&lt;p&gt;Heute versuchte ich mein erstes Outlook 2007 Add-In unter Visual Studio 2008 zu entwickeln. Nachdem ich bereits einiges an Code geschrieben hatte, wagte ich den ersten Kompiliervorgang.&lt;/p&gt; &lt;p&gt;Das Ergebnis war allerdings wenig erfreulich, denn anstatt mir ein das Ergebnis meines Kompiliervorgangs anzuzeigen, ging Visual Studio einfach kommentarlos zu.&lt;/p&gt; &lt;p&gt;Um auszuschließen, dass es an meinem Code lag, stellte ich dasselbe zusätzlich noch mit einem leeren Outlook 2007 Add-In nach. (Glücklicherweise) war das Resultat gleich :-)&lt;/p&gt; &lt;p&gt;Nach ein wenig googeln wurde ich darauf aufmerksam, dass die Visual Studio PowerCommands die Ursache sein sollten. Diese habe ich jedoch gar nicht installiert. Also ging die Suche weiter.&lt;/p&gt; &lt;p&gt;Die Lösung fand ich schließlich in folgendem Eintrag:&lt;/p&gt; &lt;p&gt;&lt;a href="http://social.msdn.microsoft.com/Forums/en-US/vsto/thread/99e124d0-c5d7-49c0-b1dd-71328f9a6571/" target="_blank"&gt;MSDN Forum - VS 2008 closes at build, Outlook 2007 Add-In&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Kurz zusammengefasst: Es ist ein Fehler innerhalb der CLR, der auftritt, wenn Assemblies in einer bestimmten Reihenfolge geladen werden. &lt;/p&gt; &lt;p&gt;Als Workarround kann man das VSTO Native Image (nicht VSTO selbst ;-)) löschen. Dazu tippt man in einem Visual Studio Command Promt einfach folgende Zeile ein:&lt;/p&gt; &lt;p&gt;ngen /delete Microsoft.VisualStudio.Tools.Office.Runtime.v9.0.dll&lt;/p&gt; &lt;p&gt;Viel Erfolg ;-)&lt;/p&gt;&lt;img src="http://blog.codemurai.de/aggbug/167.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Andre</dc:creator>
            <guid>http://blog.codemurai.de/archive/2009/01/29/visual-studio-2008-sturzt-beim-kompilieren-eines-outlook-2007-add.aspx</guid>
            <pubDate>Thu, 29 Jan 2009 23:04:57 GMT</pubDate>
            <comments>http://blog.codemurai.de/archive/2009/01/29/visual-studio-2008-sturzt-beim-kompilieren-eines-outlook-2007-add.aspx#feedback</comments>
            <wfw:commentRss>http://blog.codemurai.de/comments/commentRss/167.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Was ist fast so sch&amp;ouml;n wie leuchtende Kinderaugen?</title>
            <link>http://blog.codemurai.de/archive/2008/08/25/was-ist-fast-so-schoumln-wie-leuchtende-kinderaugen.aspx</link>
            <description>&lt;p&gt;Genau: leuchtende Kundenaugen :-)&lt;/p&gt;  &lt;p&gt;Diese durfte ich kürzlich wieder sehen. Einer meiner Kunden behalf sich nämlich Jahre lang mit &amp;quot;schmutzigen&amp;quot; Workarrounds um das Feuern von Update-Triggern bei Massenupdates zu vermeiden.&lt;/p&gt;  &lt;p&gt;Glücklicherweise ist es jedoch unter dem SQL Server möglich, Trigger bedarfsweise zu deaktiveren / aktivieren.&lt;/p&gt;  &lt;p&gt;Für alle, die mit dem selben Problem kämpfen hier zur Referenz:&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;div style="font-size: 10pt; background: white; color: black; font-family: courier new"&gt;   &lt;p style="margin: 0px"&gt;&lt;span style="color: green"&gt;-- Trigger für Tabelle deaktiveren&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;ALTER TABLE &lt;/span&gt;[MeineTabelle] DISABLE &lt;span style="color: blue"&gt;TRIGGER ALL&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&amp;#160;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: green"&gt;-- Massenupdate durchführen, z. B.&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: green"&gt;-- update MeineTabelle set Preis = Preis * 1.5&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&amp;#160;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: green"&gt;-- Trigger wieder aktivieren&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;ALTER TABLE &lt;/span&gt;[MeineTabelle] ENABLE &lt;span style="color: blue"&gt;TRIGGER ALL&lt;/span&gt;&lt;/p&gt; &lt;/div&gt;&lt;img src="http://blog.codemurai.de/aggbug/177.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Andre</dc:creator>
            <guid>http://blog.codemurai.de/archive/2008/08/25/was-ist-fast-so-schoumln-wie-leuchtende-kinderaugen.aspx</guid>
            <pubDate>Mon, 25 Aug 2008 23:40:52 GMT</pubDate>
            <comments>http://blog.codemurai.de/archive/2008/08/25/was-ist-fast-so-schoumln-wie-leuchtende-kinderaugen.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://blog.codemurai.de/comments/commentRss/177.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Vorkommnisse eines Zeichens unter T-SQL z&amp;auml;hlen</title>
            <link>http://blog.codemurai.de/archive/2008/08/25/vorkommnisse-eines-zeichens-unter-t-sql-zaumlhlen.aspx</link>
            <description>&lt;p&gt;T-SQL bietet keine Möglichkeit die Vorkommnisse eines Zeichens innerhalb einer Zeichenkette zu zählen.&lt;/p&gt;  &lt;p&gt;Richtig! Nun ja, zumindest fast. Zwar gibt es keine eingebaute Funktion, mit folgendem Konstrukt lässt sich die Anforderung jedoch trotzdem erfüllen:&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;div style="font-size: 10pt; background: white; color: black; font-family: courier new"&gt;   &lt;p style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;#160;&amp;#160;&amp;#160; 1&lt;/span&gt;&amp;#160;&lt;span style="color: green"&gt;-- Anzahl der vorkommenden 't' zählen&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;#160;&amp;#160;&amp;#160; 2&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;Select &lt;/span&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;#160;&amp;#160;&amp;#160; 3&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; CompanyName, &lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;#160;&amp;#160;&amp;#160; 4&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;len&lt;/span&gt;(CompanyName) - &lt;span style="color: blue"&gt;len&lt;/span&gt;(&lt;span style="color: blue"&gt;replace&lt;/span&gt;(CompanyName, &lt;span style="color: #a31515"&gt;'t'&lt;/span&gt;, &lt;span style="color: #a31515"&gt;''&lt;/span&gt;)) &lt;span style="color: blue"&gt;as &lt;/span&gt;Anzahl&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;#160;&amp;#160;&amp;#160; 5&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;from &lt;/span&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;#160;&amp;#160;&amp;#160; 6&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Customers&lt;/p&gt; &lt;/div&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Im gewählten Beispiel, welches übrigens auf der Northwind Datenbank ausprobiert werden kann, werden die Anzahl der 't' innerhalb des Felds CompanyName gezählt.&lt;/p&gt;  &lt;p&gt;Die Funktionsweise ist recht einfach:&lt;/p&gt;  &lt;p&gt;Zuerst wird in Zeile 4 die Länge des Namens ermittelt. Im Beispiel von 'Alfreds Futterkiste' wäre dies 19. Anschließend werden alle 't' innerhalb von 'Alfreds Futterkiste' durch einen leeren Character ersetzt und die Länge von 16 Zeichen ermittelt. Als letztes wird der zweite Wert vom ersten subtrahiert, so dass wir auf unser Ergebnis von 3 kommen.&lt;/p&gt;  &lt;p&gt;Eigentlich ganz einfach, oder :-)&lt;/p&gt;&lt;img src="http://blog.codemurai.de/aggbug/178.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Andre</dc:creator>
            <guid>http://blog.codemurai.de/archive/2008/08/25/vorkommnisse-eines-zeichens-unter-t-sql-zaumlhlen.aspx</guid>
            <pubDate>Mon, 25 Aug 2008 23:39:23 GMT</pubDate>
            <comments>http://blog.codemurai.de/archive/2008/08/25/vorkommnisse-eines-zeichens-unter-t-sql-zaumlhlen.aspx#feedback</comments>
            <slash:comments>3</slash:comments>
            <wfw:commentRss>http://blog.codemurai.de/comments/commentRss/178.aspx</wfw:commentRss>
        </item>
    </channel>
</rss>
