<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Code-Inside Blog</title>
	
	<link>http://code-inside.de/blog</link>
	<description>Webdevelopment with ASP.NET MVC, jQuery &amp; the Microsoft Stack</description>
	<lastBuildDate>Thu, 02 Feb 2012 22:38:51 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.2</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/Code-insideBlog" /><feedburner:info uri="code-insideblog" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Carriage Return / Neue Zeile in Textareas</title>
		<link>http://feedproxy.google.com/~r/Code-insideBlog/~3/HrT1ZdyV7QQ/</link>
		<comments>http://code-inside.de/blog/2012/02/02/carriage-return-neue-zeile-in-textareas/#comments</comments>
		<pubDate>Thu, 02 Feb 2012 22:38:51 +0000</pubDate>
		<dc:creator>Robert Mühsig</dc:creator>
				<category><![CDATA[HowTo]]></category>
		<category><![CDATA[ASP.NET MVC]]></category>
		<category><![CDATA[Multiline]]></category>

		<guid isPermaLink="false">http://code-inside.de/blog/2012/02/02/carriage-return-neue-zeile-in-textareas/</guid>
		<description><![CDATA[Eine kleine Aufgabe: Jede neue Textzeile (Carriage Return/Wenn man Enter drückt ) in einer Textarea soll ein Element in einer Auflistung sein – wie mach ich das jetzt am einfachsten? Eigentlich ein grundlegendes Element im Web und der Nutzer macht bewusst Absätze – daher wäre es nur gerecht, wenn man das auch entsprechend würdigt. Kleine ...]]></description>
			<content:encoded><![CDATA[<p>Eine kleine Aufgabe: Jede neue Textzeile (Carriage Return/Wenn man Enter drückt <img src='http://code-inside.de/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  ) in einer Textarea soll ein Element in einer Auflistung sein – wie mach ich das jetzt am einfachsten?</p>
<p>Eigentlich ein grundlegendes Element im Web und der Nutzer macht bewusst Absätze – daher wäre es nur gerecht, wenn man das auch entsprechend würdigt.</p>
<p>Kleine MVC Demo App:</p>
<p><a href="http://code-inside.de/blog/wp-content/uploads/image1456.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://code-inside.de/blog/wp-content/uploads/image_thumb630.png" width="244" height="171"></a></p>
<p>Wir wollen die Eingaben in diesem Textfeld etwas näher analysieren. In meiner Variante geschieht das “splitten” auf der Server-Seite, allerdings wäre es über Javascript natürlich genauso möglich.</p>
<p><strong>Nach dem OK Klick:</strong></p>
<p>Der Controller nimmt den Eingabetext entgegen. Wenn der Nutzer [Enter] in der Textarea drückt, kommt als “Steuerzeichen” entweder ein \n oder \r\n mit (ich glaub das hängt mit den Betriebssystemen zusammen… lange Geschichte <img src='http://code-inside.de/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> )</p>
<p><a href="http://code-inside.de/blog/wp-content/uploads/image1457.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://code-inside.de/blog/wp-content/uploads/image_thumb631.png" width="371" height="84"></a></p>
<p>Damit müssen wir den String nur noch bei diesen Zeichen splitten und schon können wir die einzelnen Absätze besonders behandeln:</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:ed834bf0-5f17-484b-b301-a20cb570dd54" class="wlWriterEditableSmartContent">
<pre name="code" class="c#">        public ActionResult Multiline(string input)
        {
            ViewBag.MultilineRaw = input;

            List&lt;string&gt; eachLine = input.Split(new string[] { "\n", "\r\n" }, StringSplitOptions.RemoveEmptyEntries).ToList();
            ViewBag.MultilineSplitted = eachLine;

            return View("Index");
        }</pre>
</div>
<p>&nbsp;</p>
<p>View:</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:f85ec20b-214b-45da-af31-675d28759025" class="wlWriterEditableSmartContent">
<pre name="code" class="c#">@using(Html.BeginForm("Multiline", "Home"))
{
    @Html.TextArea("input")
    &lt;button&gt;OK&lt;/button&gt;
}
@if(string.IsNullOrWhiteSpace(ViewBag.MultilineRaw) == false)
{
&lt;h2&gt;Input&lt;/h2&gt;
&lt;p&gt;Raw: @ViewBag.MultilineRaw&lt;/p&gt;
&lt;h3&gt;Each Line&lt;/h3&gt;
    &lt;ul&gt;
        @foreach(var line in @ViewBag.MultilineSplitted)
        {
        &lt;li&gt;@line&lt;/li&gt;
        }
    &lt;/ul&gt;
}</pre>
</div>
<p>&nbsp;</p>
<p>Endergebnis:</p>
<p><a href="http://code-inside.de/blog/wp-content/uploads/image1458.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://code-inside.de/blog/wp-content/uploads/image_thumb632.png" width="310" height="273"></a></p>
<p>Keine große Sache – aber vielleicht hilft es den einen oder anderen weiter.</p>
<p><a href="http://code.google.com/p/code-inside/source/browse/#git%2F2011%2Fmvcmultiline">[ Download auf Google Code ]</a></p>
<img src="http://feeds.feedburner.com/~r/Code-insideBlog/~4/HrT1ZdyV7QQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://code-inside.de/blog/2012/02/02/carriage-return-neue-zeile-in-textareas/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://code-inside.de/blog/2012/02/02/carriage-return-neue-zeile-in-textareas/</feedburner:origLink></item>
		<item>
		<title>Doom, Quake, Wolfenstein &amp; co. Source Code auf GitHub</title>
		<link>http://feedproxy.google.com/~r/Code-insideBlog/~3/rdmY07Sphd0/</link>
		<comments>http://code-inside.de/blog/2012/02/02/doom-quakte-wolfenstein-co-source-code-auf-github/#comments</comments>
		<pubDate>Wed, 01 Feb 2012 23:24:17 +0000</pubDate>
		<dc:creator>Robert Mühsig</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[GitHub]]></category>
		<category><![CDATA[Open Source]]></category>

		<guid isPermaLink="false">http://code-inside.de/blog/?p=4052</guid>
		<description><![CDATA[<div><img width="150" height="150" src="http://code-inside.de/blog/wp-content/uploads/image1455-150x150.png" class="attachment-thumbnail wp-post-image" alt="image.png" title="image.png" style="margin-bottom: 15px;" /></div>id Software, die Macher von Doom, Quake, Wolfenstein &#38; co., stellen regelmäßig ihre älteren Spieltitle als Open Source zur Verfügung. Das Ganze runterzuladen fand ich bisher immer recht mühselig, allerdings gibt es seit kurzer Zeit die Sourcen auch auf GitHub. Darunter Spiele wie Doom 3, Quake 3, Wolfenstein für iOS. Wer also schon immer mal ...]]></description>
			<content:encoded><![CDATA[<div><img width="150" height="150" src="http://code-inside.de/blog/wp-content/uploads/image1455-150x150.png" class="attachment-thumbnail wp-post-image" alt="image.png" title="image.png" style="margin-bottom: 15px;" /></div><p><a href="http://www.idsoftware.com/">id Software</a>, die Macher von Doom, Quake, Wolfenstein &amp; co., stellen regelmäßig ihre älteren Spieltitle als Open Source zur Verfügung. Das Ganze runterzuladen fand ich bisher immer recht mühselig, allerdings gibt es seit kurzer Zeit die Sourcen auch auf <a href="https://github.com/id-Software">GitHub</a>.</p>
<p>Darunter Spiele wie <a href="https://github.com/id-Software/DOOM-3">Doom 3</a>, <a href="https://github.com/id-Software/Quake-III-Arena">Quake 3</a>, <a href="https://github.com/id-Software/Wolf3D-iOS">Wolfenstein für iOS</a>. Wer also schon immer mal Interesse hatte in die Spielentwicklung reinzuschauen sollte mal <a href="https://github.com/id-Software">ein Blick rein werfen</a>.</p>
<img src="http://feeds.feedburner.com/~r/Code-insideBlog/~4/rdmY07Sphd0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://code-inside.de/blog/2012/02/02/doom-quakte-wolfenstein-co-source-code-auf-github/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://code-inside.de/blog/2012/02/02/doom-quakte-wolfenstein-co-source-code-auf-github/</feedburner:origLink></item>
		<item>
		<title>Twitter Bootstrap 2.0 released &amp; “Release Präsentation”</title>
		<link>http://feedproxy.google.com/~r/Code-insideBlog/~3/5flBtg1tmb8/</link>
		<comments>http://code-inside.de/blog/2012/02/02/twitter-bootstrap-2-0-released-release-prsentation/#comments</comments>
		<pubDate>Wed, 01 Feb 2012 23:10:37 +0000</pubDate>
		<dc:creator>Robert Mühsig</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Bootstrap]]></category>
		<category><![CDATA[Twitter]]></category>

		<guid isPermaLink="false">http://code-inside.de/blog/?p=4048</guid>
		<description><![CDATA[<div><img width="150" height="150" src="http://code-inside.de/blog/wp-content/uploads/image1454-150x150.png" class="attachment-thumbnail wp-post-image" alt="image.png" title="image.png" style="margin-bottom: 15px;" /></div>Wie bereits vom Twitter Bootstrap Team angekündigt wurde offiziel die Version 2.0 des UI Toolskits “Twitter Bootstrap” veröffentlich. Zudem wurden die Slides, welche bei der Release Party gezeigt wurden auch veröffentlicht: Downloads finden sich auf der Twitter Bootstrap Seite auf GitHub.]]></description>
			<content:encoded><![CDATA[<div><img width="150" height="150" src="http://code-inside.de/blog/wp-content/uploads/image1454-150x150.png" class="attachment-thumbnail wp-post-image" alt="image.png" title="image.png" style="margin-bottom: 15px;" /></div><p>Wie bereits vom Twitter Bootstrap Team <a href="http://code-inside.de/blog/2012/01/24/twitter-bootstrap-2-0beta/">angekündigt</a> wurde offiziel die Version 2.0 des UI Toolskits “<a href="http://twitter.github.com/bootstrap/">Twitter Bootstrap</a>” veröffentlich. </p>
<p>Zudem wurden die Slides, welche bei der Release Party gezeigt wurden auch veröffentlicht:</p>
<p><script src="http://speakerdeck.com/embed/4f298b85c7d1bf001f016eec.js"></script></p>
<p>Downloads finden sich auf der <a href="http://twitter.github.com/bootstrap/">Twitter Bootstrap Seite auf GitHub</a>.</p>
<img src="http://feeds.feedburner.com/~r/Code-insideBlog/~4/5flBtg1tmb8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://code-inside.de/blog/2012/02/02/twitter-bootstrap-2-0-released-release-prsentation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://code-inside.de/blog/2012/02/02/twitter-bootstrap-2-0-released-release-prsentation/</feedburner:origLink></item>
		<item>
		<title>Javascript zu Dart Translator</title>
		<link>http://feedproxy.google.com/~r/Code-insideBlog/~3/x5Xyik6TdoY/</link>
		<comments>http://code-inside.de/blog/2012/01/31/javascript-zu-dart-translator/#comments</comments>
		<pubDate>Mon, 30 Jan 2012 23:06:49 +0000</pubDate>
		<dc:creator>Robert Mühsig</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Dart]]></category>
		<category><![CDATA[Dash]]></category>
		<category><![CDATA[Google]]></category>

		<guid isPermaLink="false">http://code-inside.de/blog/?p=4044</guid>
		<description><![CDATA[<div><img width="150" height="147" src="http://code-inside.de/blog/wp-content/uploads/image1452-150x147.png" class="attachment-thumbnail wp-post-image" alt="image.png" title="image.png" style="margin-bottom: 15px;" /></div>Dart, Google Javascript Alternative, wurde vor ein paar Monaten vorgestellt und die Webentwickler Szene ist noch etwas gespalten, ob Dart nun überflüssig ist oder einfach nur cool und längst überfällig ist. Um die Sprache näher zu erläutern hat Google die grundlegenden Javascript Basics nach Dart übersetzt. Das Ergebnis ist der “Translator”. Der Name mag momentan ...]]></description>
			<content:encoded><![CDATA[<div><img width="150" height="147" src="http://code-inside.de/blog/wp-content/uploads/image1452-150x147.png" class="attachment-thumbnail wp-post-image" alt="image.png" title="image.png" style="margin-bottom: 15px;" /></div><p><a href="http://www.dartlang.org/">Dart</a>, Google Javascript Alternative, wurde vor ein <a href="http://code-inside.de/blog/2011/09/12/google-dashdart-go-eine-cloud-ide-brightly-und-die-zukunft-von-javascript/">paar Monaten vorgestellt</a> und die Webentwickler Szene ist noch etwas gespalten, ob Dart nun überflüssig ist oder einfach nur cool und längst überfällig ist. Um die Sprache näher zu erläutern hat Google die grundlegenden Javascript Basics nach Dart übersetzt. Das Ergebnis ist der “<a href="http://googlecode.blogspot.com/2012/01/translating-javascript-to-dart.html">Translator</a>”. </p>
<p><a href="http://synonym.dartlang.org/"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://code-inside.de/blog/wp-content/uploads/image1453.png" width="579" height="430"></a></p>
<p>Der Name mag momentan noch nicht ganz passend sein, da es hier nur um eine statische Gegenüberstellung handelt und man kein Javascript Code momentan “konvertieren” kann. Ich vermute es geht irgendwann in diese Richtung <img src='http://code-inside.de/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Für die Dart interessierten unter euch: <a href="http://synonym.dartlang.org/">Klick</a>.</p>
<img src="http://feeds.feedburner.com/~r/Code-insideBlog/~4/x5Xyik6TdoY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://code-inside.de/blog/2012/01/31/javascript-zu-dart-translator/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://code-inside.de/blog/2012/01/31/javascript-zu-dart-translator/</feedburner:origLink></item>
		<item>
		<title>Twitter Bootstrap 2.0–“Beta”</title>
		<link>http://feedproxy.google.com/~r/Code-insideBlog/~3/4NqNdsbXeMI/</link>
		<comments>http://code-inside.de/blog/2012/01/24/twitter-bootstrap-2-0beta/#comments</comments>
		<pubDate>Tue, 24 Jan 2012 22:01:42 +0000</pubDate>
		<dc:creator>Robert Mühsig</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Bootstrap]]></category>
		<category><![CDATA[Twitter]]></category>

		<guid isPermaLink="false">http://code-inside.de/blog/2012/01/24/twitter-bootstrap-2-0beta/</guid>
		<description><![CDATA[Twitter Bootstrap, ein UI-Toolkit für Web-Applikationen von Twitter, erscheint (wie bereits berichtet) demnächst in der Version 2.0. Der offizielle Release ist am 31. Januar, allerdings beginnt jetzt laut Mark Otto (einer der Hauptentwickler von Twitter Bootstrap) die intensive Test-Phase. Das heisst, das es nun offiziel auch die 2.0 Dokumentation online gibt. Im Vergleich zur aktuellen ...]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.knowyourstack.com/what-is/twitter-bootstrap">Twitter Bootstrap</a>, ein <a href="http://code-inside.de/blog/2011/10/07/twitter-bootstrap-als-ui-baukasten/">UI-Toolkit</a> für Web-Applikationen von Twitter, erscheint (wie bereits <a href="http://code-inside.de/blog/2012/01/10/bootstrap-fr-facebook-apps-vorschau-auf-twitter-bootstrap-2-0-themes/">berichtet</a>) demnächst in der <strong>Version 2.0</strong>.</p>
<p>Der offizielle Release ist am <a href="http://twitterbootstrap2.eventbrite.com/">31. Januar</a>, allerdings beginnt jetzt laut <a href="http://www.markdotto.com/">Mark Otto</a> (einer der Hauptentwickler von Twitter Bootstrap) die intensive Test-Phase. Das heisst, das es nun offiziel auch die <a href="http://markdotto.com/bs2/docs/index.html">2.0 Dokumentation</a> online gibt.</p>
<p>Im Vergleich zur aktuellen Version 1.4 gibt es einige neue Controls, Javascripts und das Template wurde auch für Mobile Geräte und Tablets angepasst (Stichwort “Responsive Design”). </p>
<p>Wer mehr erfahren will – Mark Ottos Post “<a href="http://www.markdotto.com/2012/01/24/bootstrap-2-ready-for-testing-and-feedback/">Bootstrap 2 ready for testing and feedback</a>”</p>
<img src="http://feeds.feedburner.com/~r/Code-insideBlog/~4/4NqNdsbXeMI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://code-inside.de/blog/2012/01/24/twitter-bootstrap-2-0beta/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://code-inside.de/blog/2012/01/24/twitter-bootstrap-2-0beta/</feedburner:origLink></item>
		<item>
		<title>Was sind RavenDB Indexes und wie kann ich diese Unit-testen?</title>
		<link>http://feedproxy.google.com/~r/Code-insideBlog/~3/LOB4PjK-3Hs/</link>
		<comments>http://code-inside.de/blog/2012/01/18/was-sind-ravendb-indexes-und-wie-kann-ich-diese-unit-testen/#comments</comments>
		<pubDate>Wed, 18 Jan 2012 21:18:32 +0000</pubDate>
		<dc:creator>Robert Mühsig</dc:creator>
				<category><![CDATA[HowTo]]></category>
		<category><![CDATA[Index]]></category>
		<category><![CDATA[NoSQL]]></category>
		<category><![CDATA[RavenDB]]></category>
		<category><![CDATA[Unit Test]]></category>

		<guid isPermaLink="false">http://code-inside.de/blog/?p=4031</guid>
		<description><![CDATA[<div><img width="150" height="150" src="http://code-inside.de/blog/wp-content/uploads/image1451-150x150.png" class="attachment-thumbnail wp-post-image" alt="image.png" title="image.png" style="margin-bottom: 15px;" /></div>Wer mit RavenDB arbeitet kommt automatisch zu einem sehr mächtigen Mittel: Den Indexen. Der Hauptfokus des Posts liegt hierbei auf dem Unit-Testen von RavenDB. Unit-Testing in Datenbank-Projekten ist mehr als anstrengend und zeitfressend. RavenDB lässt sich allerdings recht einfach in einen “Test” Modus versetzen, sodass die Funktionalität erhalten bleibt. Achtung: Streng genommen darf ein Unit-Test ...]]></description>
			<content:encoded><![CDATA[<div><img width="150" height="150" src="http://code-inside.de/blog/wp-content/uploads/image1451-150x150.png" class="attachment-thumbnail wp-post-image" alt="image.png" title="image.png" style="margin-bottom: 15px;" /></div><p>Wer mit <a href="http://www.knowyourstack.com/what-is/ravendb">RavenDB</a> arbeitet kommt automatisch zu einem sehr mächtigen Mittel: Den Indexen. Der Hauptfokus des Posts liegt hierbei auf dem Unit-Testen von RavenDB. Unit-Testing in Datenbank-Projekten ist mehr als anstrengend und zeitfressend. RavenDB lässt sich allerdings recht einfach in einen “Test” Modus versetzen, sodass die Funktionalität erhalten bleibt. </p>
<p><em>Achtung: Streng genommen darf ein Unit-Test auch keine Datenbank berühren, da man damit mehr als die eigentliche Test-Einheit testet. Richtiger wäre Integrationstests, allerdings redet die halbe Softwarewelt generell von Unit-Tests. Daher belassen wir es mal bei der unschärfe.</em></p>
<p>Der Code selbst ist unter Mithilfe von <a href="http://daniellang.net/">Daniel Lang</a> entwickelt, als er mir bei einem RavenDB Index <a href="http://code-inside.de/blog/2012/01/16/gitpull-request-mergen-fr-anfnger/">geholfen</a> hat.</p>
<p><strong>Was ist ein RavenDB Index?</strong></p>
<p>Ein <a href="http://ravendb.net/documentation/how-indexes-work">RavenDB Index</a> kann man sich als gespeicherte Abfrage vorstellen, welche von RavenDB im Hintergrund ausgeführt wird und das entsprechende Result zwischenspeichert. Über RavenDB Indexe können Abfragen über mehrere Dokumente gemacht werden und über Map/Reduce die Ergebnismenge angepasst werden. </p>
<p><strong>Bsp: </strong></p>
<p>Ein ganz simpler Index sieht so aus:</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:8a2a1586-9e7f-41da-9a0c-c8185a0151de" class="wlWriterEditableSmartContent">
<pre name="code" class="c#">    public class SearchIndex : AbstractIndexCreationTask&lt;Term&gt;
    {
        public SearchIndex()
        {
            Map = terms =&gt; from term in terms
                            select new { term.Title };

            Index(x =&gt; x.Title, FieldIndexing.Analyzed);
        }
    }</pre>
</div>
<p>&nbsp;</p>
<p>Was das ganze überhaupt macht, ist <a href="http://daniellang.net/searching-on-string-properties-in-ravendb/">hier gut erklärt</a>. Wenn ich den Code anwenden möchte:</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:d3ce19f0-938f-4b6b-9bbb-fc4991c007c4" class="wlWriterEditableSmartContent">
<pre name="code" class="c#">Session.Query&lt;Term, SearchIndex&gt;().Where(x =&gt; x.Title.StartsWith(searchTerm)).ToList();</pre>
</div>
<p>&nbsp;</p>
<p><strong>Unit-Test dazu (gemacht mit xUnit)</strong></p>
<p>&nbsp;</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:2ea25287-ed20-47c2-93ca-bb2ce35be1f8" class="wlWriterEditableSmartContent">
<pre name="code" class="c#">public abstract class RavenTest
    {
        protected IDocumentStore GetDatabase()
        {
            var documentStore = new EmbeddableDocumentStore
                                    {
                                        RunInMemory = true
                                    };
            documentStore.Initialize();

            return documentStore;
        }
    } 

public class SearchIndexTest : RavenTest
    {
        [Fact]
        public void TitleContainsSearch()
        {
            using (var documentStore = GetDatabase())
            {
                IndexCreation.CreateIndexes(typeof(UserActivityFeedIndex).Assembly, documentStore);

                using (var documentSession = documentStore.OpenSession())
                {
                    documentSession.Store(new Term
                                              {
                                                  Title = "RavenDB",
                                              });
                    documentSession.Store(new Term
                                              {
                                                  Title = "ASP.NET MVC",
                                              });

                    documentSession.Store(new Term
                                            {
                                                Title = "Twitter Bootstrap",
                                            });

                    documentSession.SaveChanges();

                    var result = documentSession.Query&lt;Term, SearchIndex&gt;().Where(x =&gt; x.Title.StartsWith("Boot"))
                                                                           .Customize(x =&gt; x.WaitForNonStaleResults())
                                                                           .ToList();

                    Assert.Equal(1, result.Count);

                    Assert.Equal("Twitter Bootstrap", result[0].Title);
                }
            }
        }
    }</pre>
</div>
<p>&nbsp;</p>
<p>Die RavenTest Klasse erstellt die Connection zur RavenDB “embedded” Datenbank. Über “<strong>RunInMemory</strong>” wird dies auch nur im Arbeitsspeicher gehalten. Vorteil: Sehr schnell und kein Cleanup nach dem Test. </p>
<p>In der Testmethode wird erst der Index angelegt (über Reflection wird die Assembly durchsucht) und dann werden Testdaten in diese DB abgespeichert. Am Ende erfolgt die Abfrage und das Ergebnis wird überprüft. Bei der Abfrage wird noch ein <strong>WaitForNonStaleResults</strong> dazugehangen um auch die gerade eben gespeicherten Daten mit abzufragen (RavenDB speichert die Index-Ergebnisse zwischen, sodass es zu einer kurzen Verzögerung kommen kann. Ist im Unit-Testing allerdings ungünstig.)</p>
<p>Sehr einfach und wesentlich eleganter als bei einer klassischen DB.</p>
<img src="http://feeds.feedburner.com/~r/Code-insideBlog/~4/LOB4PjK-3Hs" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://code-inside.de/blog/2012/01/18/was-sind-ravendb-indexes-und-wie-kann-ich-diese-unit-testen/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://code-inside.de/blog/2012/01/18/was-sind-ravendb-indexes-und-wie-kann-ich-diese-unit-testen/</feedburner:origLink></item>
		<item>
		<title>Git–Pull Request mergen für Anfänger</title>
		<link>http://feedproxy.google.com/~r/Code-insideBlog/~3/bGo6G63wuvY/</link>
		<comments>http://code-inside.de/blog/2012/01/16/gitpull-request-mergen-fr-anfnger/#comments</comments>
		<pubDate>Mon, 16 Jan 2012 00:41:26 +0000</pubDate>
		<dc:creator>Robert Mühsig</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[GIT]]></category>
		<category><![CDATA[GitHub]]></category>

		<guid isPermaLink="false">http://code-inside.de/blog/?p=4025</guid>
		<description><![CDATA[<div><img width="150" height="150" src="http://code-inside.de/blog/wp-content/uploads/image1450-150x150.png" class="attachment-thumbnail wp-post-image" alt="image.png" title="image.png" style="margin-bottom: 15px;" /></div>Mein Projekt “KnowYourStack.com” (Arbeitstitel war mal BizzBingo – ein detailierter Blogpost dazu folgt noch) liegt auf GitHub und ich hatte ein Problem bei dem mir Daniel Lang sehr geholfen hat. Am Ende hat er ein Fork von meinem Projekt gemacht und mir ein Pull Request eingestellt: Nun ist natürlich die Frage: Wie bekomm ich denn ...]]></description>
			<content:encoded><![CDATA[<div><img width="150" height="150" src="http://code-inside.de/blog/wp-content/uploads/image1450-150x150.png" class="attachment-thumbnail wp-post-image" alt="image.png" title="image.png" style="margin-bottom: 15px;" /></div><p>Mein Projekt “<a href="http://knowyourstack.com/">KnowYourStack.com</a>” (Arbeitstitel war mal BizzBingo – ein detailierter Blogpost dazu folgt noch) liegt auf <a href="https://github.com/robertmuehsig/BizzBingo">GitHub</a> und ich hatte ein Problem bei dem mir <a href="http://daniellang.net/">Daniel Lang</a> sehr geholfen hat. Am Ende hat er ein Fork von meinem Projekt gemacht und mir ein Pull Request eingestellt:</p>
<p><a href="http://code-inside.de/blog/wp-content/uploads/image1450.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://code-inside.de/blog/wp-content/uploads/image_thumb625.png" width="583" height="192"></a></p>
<p><strong>Nun ist natürlich die Frage: Wie bekomm ich denn die Änderungen zu mir?</strong> </p>
<p>Da ich ein völliger Anfänger in Sachen <a href="http://www.knowyourstack.com/what-is/git">Git</a> / <a href="http://www.knowyourstack.com/what-is/github">GitHub</a> bin schreibe ich mal Schritt für Schritt mit. Die <a href="http://help.github.com/send-pull-requests/">Hilfe von GitHub</a> war ein guter Anfang, allerdings muss ich bei dieser Aktion noch diverse Files mergen, was das ganze nicht einfacher macht.</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:4f86e7bf-9598-4441-b48b-89cc32a0709d" class="wlWriterEditableSmartContent">
<pre name="code" class="c#">git checkout master
...
git pull https://github.com/dlang/BizzBingo master
... (VIELE DATEIEN werden gezogen)...</pre>
</div>
<p>Ergebnis:</p>
<p>“Automatic merge failed; fix conflicts and then commit the result.”</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:a5b21b99-06eb-48b1-a8aa-c356edbad1c7" class="wlWriterEditableSmartContent">
<pre name="code" class="c#">$ git mergetool</pre>
</div>
<p>&nbsp;</p>
<p><strong>Achtung:</strong> Man sollte allerdings vorher ein Mergetool eingestellt haben. Das ganze ist eigentlich auch recht einfach und ist <a href="http://gitguru.com/2009/02/22/integrating-git-with-a-visual-merge-tool/">hier detailiert beschrieben</a>. Im Grunde muss man nur ein Merge Programm sich aussuchen (ich hab z.B. <a href="http://kdiff3.sourceforge.net/">KDiff3</a> gewählt. Sieht aber hässlich aus.) und sagt git, welches Tool er beim Mergen zu nehmen hat. Am Ende sieht z.B. die .gitconfig so aus:</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:89bc0955-6f15-48a1-9757-62ac899e9e57" class="wlWriterEditableSmartContent">
<pre name="code" class="c#">[diff]

	tool = kdiff3

[merge]

	tool = kdiff3

[mergetool "kdiff3"]

	path = C:/Program Files (x86)/KDiff3/kdiff3.exe

    keepBackup = false

    trustExitCode = false

[difftool "kdiff3"]

    path = C:/Program Files (x86)/KDiff3/kdiff3.exe

    keepBackup = false

    trustExitCode = false</pre>
</div>
<p>&nbsp;</p>
<p>Nach dem mergen die Files am Ende mit “commit” und “push” zu GitHub. Fertig <img src='http://code-inside.de/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:cd498f43-56f7-4cb1-b257-8fdfa4f2f133" class="wlWriterEditableSmartContent">
<pre name="code" class="c#">git commit -m " KOMMENTAR "
git push origin master</pre>
</div>
<p>Müsste so klappen – Danke nochmal an Daniel! <img src='http://code-inside.de/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<img src="http://feeds.feedburner.com/~r/Code-insideBlog/~4/bGo6G63wuvY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://code-inside.de/blog/2012/01/16/gitpull-request-mergen-fr-anfnger/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://code-inside.de/blog/2012/01/16/gitpull-request-mergen-fr-anfnger/</feedburner:origLink></item>
		<item>
		<title>WebDev Spielwiesen: dabblet.com für HTML/CSS, jsfiddler.com für JS &amp; Hurl.it für REST</title>
		<link>http://feedproxy.google.com/~r/Code-insideBlog/~3/L0M8_7JLSHg/</link>
		<comments>http://code-inside.de/blog/2012/01/11/webdev-spielwiesen-dabblet-com-fr-htmlcss-jsfiddler-com-fr-js-hurl-it-fr-rest/#comments</comments>
		<pubDate>Wed, 11 Jan 2012 22:48:52 +0000</pubDate>
		<dc:creator>Robert Mühsig</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[REST]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://code-inside.de/blog/2012/01/11/webdev-spielwiesen-dabblet-com-fr-htmlcss-jsfiddler-com-fr-js-hurl-it-fr-rest/</guid>
		<description><![CDATA[Was früher mächtigen Desktop Apps vorbehalten war rückt immer mehr ins Web. Ich stelle hier mal drei Tools vor, welche recht praktisch für einen Webentwickler sind. Auf alle Fälle sind alle Dienste in ihrer Funktionsweise sehr cool. Spielwiese für HTML/CSS Wer mal “schnell” eine Spielwiese für CSS und HTML benötigt der sollte mal ein Blick ...]]></description>
			<content:encoded><![CDATA[<p>Was früher mächtigen Desktop Apps vorbehalten war rückt immer mehr ins Web. Ich stelle hier mal drei Tools vor, welche recht praktisch für einen Webentwickler sind. Auf alle Fälle sind alle Dienste in ihrer Funktionsweise sehr cool.</p>
<p><strong>Spielwiese für HTML/CSS</strong></p>
<p>Wer mal “schnell” eine Spielwiese für CSS und HTML benötigt der sollte mal ein Blick auf <a href="http://dabblet.com/">Dabblet.com</a> werfen:</p>
<p><a href="http://dabblet.com/"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://code-inside.de/blog/wp-content/uploads/image1447.png" width="594" height="238"></a></p>
<p>Grundprinzip ist schnell erklärt: Man kann CSS samt HTML Code in die Weboverfläche einhacken und sieht sofort das Ergebnis in der Preview.</p>
<p>Das ganze lässt sich auch per Link an andere Teilen oder direkt speichern. Mehr Informationen gibt es auch auf dem <a href="http://blog.dabblet.com/">Blog</a> oder ihr probiert es <a href="http://dabblet.com/">selber mal aus</a>.</p>
<p><strong>Spielwiese für Javascript (und HTML und CSS)</strong></p>
<p>Wer eine Spielwiese für Javascript sucht und dazu auch noch diverse Frameworks “per Click” dazuhaben möchte, kann sich <a href="http://jsfiddle.net">jsfiddler.com</a> mal anschauen:</p>
<p><a href="http://jsfiddle.net"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://code-inside.de/blog/wp-content/uploads/image1448.png" width="617" height="328"></a></p>
<p>In der Sidebar kann man auch einige Beispiele anschauen, so z.B. ein <a href="http://jsfiddle.net/pborreli/pJgyu/">einfacher Twitter Reader</a>.</p>
<p>Auch da kann man CSS / HTML hinterlegen, allerdings sieht es von der Aufmachung her nicht ganz so schick aus wie bei dabblet.com. </p>
<p><strong>hurl.it – curl online</strong></p>
<p>Letzter Dienst in der Reihe: <a href="http://hurl.it/">hurl.it</a>, welcher angelehnt an curl ist. </p>
<p><a href="http://hurl.it/"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://code-inside.de/blog/wp-content/uploads/image1449.png" width="612" height="519"></a></p>
<p>Beispiele gibt es direkt auf der Startseite, so z.B. eine <a href="http://hurl.it/hurls/8e0ac4075fa20091ad136326201b98ccecdb6220/e49d01e6beca4dd7561e0865387af315538e3407">Anfrage an die GitHub API</a>. Allerdings ist der Dienst recht instabil (jedenfalls ging er in den vergangen Tagen nicht) und scheint ab und an Probleme mit einigen Antworten zu haben (die Stackoverflow API geht z.B. nicht mit dem Tool). Trotzdem praktisch, wenn man mal schnell mit einem REST Service spielen möchte.</p>
<img src="http://feeds.feedburner.com/~r/Code-insideBlog/~4/L0M8_7JLSHg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://code-inside.de/blog/2012/01/11/webdev-spielwiesen-dabblet-com-fr-htmlcss-jsfiddler-com-fr-js-hurl-it-fr-rest/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://code-inside.de/blog/2012/01/11/webdev-spielwiesen-dabblet-com-fr-htmlcss-jsfiddler-com-fr-js-hurl-it-fr-rest/</feedburner:origLink></item>
		<item>
		<title>Bootstrap für Facebook Apps, Vorschau auf Twitter Bootstrap 2.0 &amp; Themes</title>
		<link>http://feedproxy.google.com/~r/Code-insideBlog/~3/Cc5UoZuOABs/</link>
		<comments>http://code-inside.de/blog/2012/01/10/bootstrap-fr-facebook-apps-vorschau-auf-twitter-bootstrap-2-0-themes/#comments</comments>
		<pubDate>Tue, 10 Jan 2012 22:50:27 +0000</pubDate>
		<dc:creator>Robert Mühsig</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Bootstrap]]></category>
		<category><![CDATA[Twitter]]></category>

		<guid isPermaLink="false">http://code-inside.de/blog/?p=4016</guid>
		<description><![CDATA[<div><img width="150" height="150" src="http://code-inside.de/blog/wp-content/uploads/image1442-150x150.png" class="attachment-thumbnail wp-post-image" alt="image.png" title="image.png" style="margin-bottom: 15px;" /></div>Twitter Bootstrap ist ein UI Toolkit um schnell und einfach Web-Oberflächen zusammen zu bauen. Es gibt eine ganze Reihe an Komponenten und sogar einige Javascripts, um das Interface aufzuwerten (ähnlich jQuery UI). Die Einbindung von Twitter Bootstrap habe ich bereits hier erläutert. FBootstrap für Facebook Apps Twitter Bootstrap sieht jedoch sehr aus wie Twitter und ...]]></description>
			<content:encoded><![CDATA[<div><img width="150" height="150" src="http://code-inside.de/blog/wp-content/uploads/image1442-150x150.png" class="attachment-thumbnail wp-post-image" alt="image.png" title="image.png" style="margin-bottom: 15px;" /></div><p><a href="http://www.knowyourstack.com/what-is/twitter-bootstrap">Twitter Bootstrap</a> ist ein UI Toolkit um schnell und einfach Web-Oberflächen zusammen zu bauen. Es gibt eine ganze Reihe an Komponenten und sogar einige Javascripts, um das Interface aufzuwerten (ähnlich jQuery UI). Die Einbindung von <a href="http://code-inside.de/blog/2011/10/07/twitter-bootstrap-als-ui-baukasten/">Twitter Bootstrap habe ich bereits hier erläutert</a>. </p>
<p><strong>FBootstrap für Facebook Apps</strong></p>
<p>Twitter Bootstrap sieht jedoch sehr aus wie Twitter und wenn jemand Facebook Web Apps entwickeln möchte ist dies nicht ganz so “passend”, daher hat <a href="https://twitter.com/#!/clmnsk">@clmnsk</a> ein Fork der aktuellen Twitter Bootstrap Version für Facebook namens <a href="http://ckrack.github.com/fbootstrapp/">FBootstrap</a> gemacht:</p>
<p><a href="http://code-inside.de/blog/wp-content/uploads/image1443.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://code-inside.de/blog/wp-content/uploads/image_thumb621.png" width="580" height="459"></a></p>
<p>Wer “Facebook Look-a-like” Web Applikationen entwickelt kann sich das Projekt näher anschauen. Ansonsten gibt es am Ende des Posts vielleicht noch eine andere Variante.</p>
<p><strong>Vorschau auf Twitter Bootstrap 2.0</strong></p>
<p>Auf <a href="http://bootstrap.io/Demo/">Bootstrap.io/Demo</a> gibt es eine aktuelle Demo der Twitter Bootstrap 2.0 Version zu sehen, welche “in wenigen Wochen” released werden soll:</p>
<p><a href="http://code-inside.de/blog/wp-content/uploads/image1444.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://code-inside.de/blog/wp-content/uploads/image_thumb622.png" width="342" height="217"></a><a href="http://code-inside.de/blog/wp-content/uploads/image1445.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://code-inside.de/blog/wp-content/uploads/image_thumb623.png" width="233" height="215"></a></p>
<p>Neu im Gegensatz zur aktuellen Version:</p>
<p>- Responsive Layout (auch bei einem kleineren Display fällt die Seite nicht auseinander <img src='http://code-inside.de/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> )</p>
<p>- Ein paar neue “Controls” (Bildunterschriften bei Media-Einbindungen/Carousel)</p>
<p>- Icons!</p>
<p>- Viele Detailverbesserungen bei bestehenden Elementen (Forms/Buttons)</p>
<p><strong>Themes für Twitter Bootstrap?</strong></p>
<p><a href="https://twitter.com/#!/SachaGreif">@SachaGreif</a> arbeitet gerade an Themes für Twitter Bootstrap. Wäre natürlich eine sehr schöne Sache um sich trotz Twitter Bootstrap abzuheben. Schauen wir mal was da rauskommt.</p>
<p><a href="http://code-inside.de/blog/wp-content/uploads/image1446.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://code-inside.de/blog/wp-content/uploads/image_thumb624.png" width="519" height="403"></a></p>
<p>Interessierte sollten hier <a href="http://sachagreif.com/bootstrap/">klicken</a>. Damit wären evtl. auch Facebook Themes möglich <img src='http://code-inside.de/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<img src="http://feeds.feedburner.com/~r/Code-insideBlog/~4/Cc5UoZuOABs" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://code-inside.de/blog/2012/01/10/bootstrap-fr-facebook-apps-vorschau-auf-twitter-bootstrap-2-0-themes/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://code-inside.de/blog/2012/01/10/bootstrap-fr-facebook-apps-vorschau-auf-twitter-bootstrap-2-0-themes/</feedburner:origLink></item>
		<item>
		<title>Fix: The value ‘x’ is not valid for Foo in ASP.NET MVC</title>
		<link>http://feedproxy.google.com/~r/Code-insideBlog/~3/YQPbv-hQ8Uc/</link>
		<comments>http://code-inside.de/blog/2012/01/09/fix-the-value-x-is-not-valid-for-foo-in-asp-net-mvc/#comments</comments>
		<pubDate>Mon, 09 Jan 2012 21:32:38 +0000</pubDate>
		<dc:creator>Robert Mühsig</dc:creator>
				<category><![CDATA[Fix]]></category>
		<category><![CDATA[ASP.NET MVC]]></category>
		<category><![CDATA[Validation]]></category>

		<guid isPermaLink="false">http://code-inside.de/blog/?p=4004</guid>
		<description><![CDATA[<div><img width="150" height="99" src="http://code-inside.de/blog/wp-content/uploads/image1441-150x99.png" class="attachment-thumbnail wp-post-image" alt="image.png" title="image.png" style="margin-bottom: 15px;" /></div>Um Daten in einen MVC Controller zu bekommen ist das Modelbinding von MVCeigentlich recht clever. Allerdings ist es etwas kompliziert, die Fehlermeldung zu setzen, wenn das Binding nicht geklappt hat. Bsp: public class RegisterModel { ... [Required] [DataType(DataType.EmailAddress)] [Display(Name = "Email address")] public string Email { get; set; } [Required] [Display(Name = "Age")] public int ...]]></description>
			<content:encoded><![CDATA[<div><img width="150" height="99" src="http://code-inside.de/blog/wp-content/uploads/image1441-150x99.png" class="attachment-thumbnail wp-post-image" alt="image.png" title="image.png" style="margin-bottom: 15px;" /></div><p>Um Daten in einen MVC Controller zu bekommen ist das <a href="http://code-inside.de/blog/2009/04/02/howto-daten-vom-view-zum-controller-bermitteln-bindings-in-aspnet-mvc/">Modelbinding</a> von MVCeigentlich recht clever. Allerdings ist es etwas kompliziert, die Fehlermeldung zu setzen, wenn das Binding <strong>nicht</strong> geklappt hat. </p>
<p><strong>Bsp:</strong></p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:8c3f8e40-1f0f-4acb-8e08-0d9f95fb40ee" class="wlWriterEditableSmartContent">
<pre name="code" class="c#">    public class RegisterModel
    {
		...

        [Required]
        [DataType(DataType.EmailAddress)]
        [Display(Name = "Email address")]
        public string Email { get; set; }

        [Required]
        [Display(Name = "Age")]
        public int Age { get; set; }

		...
    }</pre>
</div>
<p>&nbsp;</p>
<p>Dies ist das Standardmodell für die Registrierung in der ASP.NET MVC Projektvorlage. Ich habe ein Property “Age” vom Typ “int” hinzugefügt. Auch im View muss die mit angegeben werden:</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:12d2651b-d593-4348-89a8-6d7d2c33a6ea" class="wlWriterEditableSmartContent">
<pre name="code" class="c#">            ...
			&lt;div class="editor-label"&gt;
                @Html.LabelFor(m =&gt; m.Age)
            &lt;/div&gt;
            &lt;div class="editor-field"&gt;
                @Html.TextBoxFor(m =&gt; m.Age)
                @Html.ValidationMessageFor(m =&gt; m.Age)
            &lt;/div&gt;
			...</pre>
</div>
<p>&nbsp;</p>
<p><strong>Problem: Was passiert, wenn nun der Nutzer anstatt einer Zahl Buchstaben eingibt? </strong></p>
<p>Solange die <strong>ClientValidation</strong> <strong><u>an</u></strong> ist, ist auch alles gut:</p>
<p><a href="http://code-inside.de/blog/wp-content/uploads/image1437.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://code-inside.de/blog/wp-content/uploads/image_thumb615.png" width="413" height="154"></a></p>
<p>Wenn sie allerdings aus ist kommt im Standardfall diese Fehlermeldung:</p>
<p><a href="http://code-inside.de/blog/wp-content/uploads/image1438.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://code-inside.de/blog/wp-content/uploads/image_thumb616.png" width="405" height="96"></a></p>
<p>Die Fehlermeldung “The value ‘Test’ is not valid for Age.” wird direkt in den ModelState geschrieben:</p>
<p><a href="http://code-inside.de/blog/wp-content/uploads/image1439.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://code-inside.de/blog/wp-content/uploads/image_thumb617.png" width="412" height="276"></a></p>
<p>Leider lässt sich diese <a href="http://forums.asp.net/t/1512140.aspx/1/10">Meldung nur recht kompliziert ändern</a> – dabei werden auch jegliche Sprachen ignoriert. Das sieht natürlich auf einer deutschen Seite nicht so schön aus.</p>
<p><strong>Fix: Ressourcen Datei erstellen</strong></p>
<p>Unter App_GlobalResources muss man eine Resource-Datei erstellen und ein Eintrag “<strong>PropertyValueInvalid</strong>” einfügen und dann dahinter den dazugehörigen Text:</p>
<p><a href="http://code-inside.de/blog/wp-content/uploads/image1440.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://code-inside.de/blog/wp-content/uploads/image_thumb618.png" width="503" height="162"></a></p>
<p>In der Global.asax die Resource-Datei verlinken:</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:4e461cc9-c77b-4ae6-ad23-3a600aab1180" class="wlWriterEditableSmartContent">
<pre name="code" class="c#">		protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();

            DefaultModelBinder.ResourceClassKey = "Errors"; &lt;-- lookup in Errors.resx

            RegisterGlobalFilters(GlobalFilters.Filters);
            RegisterRoutes(RouteTable.Routes);
        }</pre>
</div>
<p>&nbsp;</p>
<p><strong>Ergebnis:</strong></p>
<p><a href="http://code-inside.de/blog/wp-content/uploads/image1441.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://code-inside.de/blog/wp-content/uploads/image_thumb619.png" width="376" height="109"></a></p>
<p><strong>Hintergrund:</strong></p>
<p>Jegliche Validierunglogik kann nicht ausgeführt werden, da das Framework das Property nicht binden kann. Interessanterweise ist das Verhalten des Frameworks etwas anders wenn man eine zu große Zahl dem Int zuweisen möchte. In diesem Fall kommt im ModelState eine Exception an, welche man abfangen kann. Auch die Validierung kann da greifen. Das Problem trat bei mir auch nur im Zusammenhang von String-Eingaben auf.</p>
<img src="http://feeds.feedburner.com/~r/Code-insideBlog/~4/YQPbv-hQ8Uc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://code-inside.de/blog/2012/01/09/fix-the-value-x-is-not-valid-for-foo-in-asp-net-mvc/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://code-inside.de/blog/2012/01/09/fix-the-value-x-is-not-valid-for-foo-in-asp-net-mvc/</feedburner:origLink></item>
		<item>
		<title>Speech Input API–über ein Attribut Spracheingabe im Web?</title>
		<link>http://feedproxy.google.com/~r/Code-insideBlog/~3/l077F7S8x8Q/</link>
		<comments>http://code-inside.de/blog/2012/01/06/speech-input-apiber-ein-attribut-spracheingabe-im-web/#comments</comments>
		<pubDate>Fri, 06 Jan 2012 22:22:47 +0000</pubDate>
		<dc:creator>Robert Mühsig</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Chrome]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[Speech]]></category>

		<guid isPermaLink="false">http://code-inside.de/blog/?p=3990</guid>
		<description><![CDATA[<div><img width="150" height="150" src="http://code-inside.de/blog/wp-content/uploads/image1434-150x150.png" class="attachment-thumbnail wp-post-image" alt="image.png" title="image.png" style="margin-bottom: 15px;" /></div>Durch Zufall bin ich heute auf die Seite von code.nasa.org gelandet. Ein kleines Mikrofon Icon hat meine Aufmerksamkeit geweckt: Seit Chrome 11 gibt es “Unterstützung” für die Speech Input API. Gelesen hatte ich davon, allerdings hatte ich mir die Integration komplex vorgestellt. Sehr zur Überraschung ist die Implementierung allerdings sehr einfach – über das Attribut ...]]></description>
			<content:encoded><![CDATA[<div><img width="150" height="150" src="http://code-inside.de/blog/wp-content/uploads/image1434-150x150.png" class="attachment-thumbnail wp-post-image" alt="image.png" title="image.png" style="margin-bottom: 15px;" /></div><p>Durch Zufall bin ich heute auf die Seite von <a href="http://code.nasa.gov/">code.nasa.org</a> gelandet. Ein kleines Mikrofon Icon hat meine Aufmerksamkeit geweckt:</p>
<p><a href="http://code-inside.de/blog/wp-content/uploads/image1435.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://code-inside.de/blog/wp-content/uploads/image_thumb613.png" width="535" height="109"></a></p>
<p><a href="http://www.thechromesource.com/how-to-demo-chrome-11s-speech-recognition-feature/">Seit Chrome 11</a> gibt es “Unterstützung” für die <a href="http://lists.w3.org/Archives/Public/public-xg-htmlspeech/2011Feb/att-0020/api-draft.html">Speech Input API</a>. Gelesen hatte ich davon, allerdings hatte ich mir die Integration komplex vorgestellt. Sehr zur Überraschung ist die Implementierung allerdings sehr einfach – über das Attribut “<strong>x-webkit-speech</strong>” (später soll es einfach nur “speech” sein). Das ganze soll für Input und Textarea Elemente funktionieren:</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:e9f3395b-697b-468e-b7a0-9cedbf101fd8" class="wlWriterEditableSmartContent">
<pre name="code" class="xml">//Supported elements

&lt;input type="text" x-webkit-speech /&gt;
&lt;textarea x-webkit-speech /&gt;</pre>
</div>
<p><strong>Eine Flasche Wermut</strong></p>
<p>Es funktioniert nur im Chrome und man sollte sehr klar und deutlich sprechen. Deutsch versteht er kaum bis garnicht und englisch. Naja &#8211; ist noch weit von Siri entfernt. Die Speech Input API selbst ist momentan in einem sehr frühen Stadium und so richtige Fortschritte gab es seit Release Chrome 11 und heute kaum. </p>
<p><strong>Ausprobieren</strong></p>
<p>Ausprobieren kann man es z.B. <a href="http://slides.html5rocks.com/#speech-input">hier</a>. Das Video zeigt es allerdings auch gut (für die Leute, welche keinen Chrome nutzen <img src='http://code-inside.de/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> )</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:e6012883-765f-4897-8a29-4597cdd03de0" class="wlWriterEditableSmartContent">
<div><object width="448" height="252"><param name="movie" value="http://www.youtube.com/v/i225WaqV8tM?hl=en&amp;hd=1"></param><embed src="http://www.youtube.com/v/i225WaqV8tM?hl=en&amp;hd=1" type="application/x-shockwave-flash" width="448" height="252"></embed></object></div>
</div>
<img src="http://feeds.feedburner.com/~r/Code-insideBlog/~4/l077F7S8x8Q" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://code-inside.de/blog/2012/01/06/speech-input-apiber-ein-attribut-spracheingabe-im-web/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://code-inside.de/blog/2012/01/06/speech-input-apiber-ein-attribut-spracheingabe-im-web/</feedburner:origLink></item>
		<item>
		<title>JSONP mit jQuery am Beispiel der Stackoverflow API</title>
		<link>http://feedproxy.google.com/~r/Code-insideBlog/~3/JjMiTYjMOpk/</link>
		<comments>http://code-inside.de/blog/2011/12/26/jsonp-mit-jquery-am-beispiel-der-stackoverflow-api/#comments</comments>
		<pubDate>Mon, 26 Dec 2011 11:03:27 +0000</pubDate>
		<dc:creator>Robert Mühsig</dc:creator>
				<category><![CDATA[HowTo]]></category>
		<category><![CDATA[jsonp]]></category>
		<category><![CDATA[Stackoverflow]]></category>

		<guid isPermaLink="false">http://code-inside.de/blog/?p=3984</guid>
		<description><![CDATA[<div><img width="150" height="78" src="http://code-inside.de/blog/wp-content/uploads/image1433-150x78.png" class="attachment-thumbnail wp-post-image" alt="image.png" title="image.png" style="margin-bottom: 15px;" /></div>Stackoverflow.com – der Segen für alle Programmierer und die, die es werden wollen. Die Seite enthält nicht nur Fragen und Antworten, sondern hat über die Tagging Funktion auch eine Art “Mini”-Wiki für Technologien entwickelt. Stackoverflow bietet natürlich auch eine API an und für einfache lesende Zugriffe gibt es auch eine Variante, welche die eigenen Serverkapazitäten ...]]></description>
			<content:encoded><![CDATA[<div><img width="150" height="78" src="http://code-inside.de/blog/wp-content/uploads/image1433-150x78.png" class="attachment-thumbnail wp-post-image" alt="image.png" title="image.png" style="margin-bottom: 15px;" /></div><p><a href="http://stackoverflow.com/">Stackoverflow.com</a> – der Segen für alle Programmierer und die, die es werden wollen. Die Seite enthält nicht nur Fragen und Antworten, sondern hat über die Tagging Funktion auch eine Art “Mini”-Wiki für Technologien entwickelt. <a href="http://api.stackoverflow.com">Stackoverflow bietet natürlich auch eine API</a> an und für einfache lesende Zugriffe gibt es auch eine Variante, welche die eigenen Serverkapazitäten schont und ziemlich clever ist: Die Rede ist von <a href="http://en.wikipedia.org/wiki/JSON#JSONP">JSONP</a>.</p>
<p><strong>Was ist JSONP?</strong></p>
<p>Durch das <a href="http://en.wikipedia.org/wiki/Same_origin_policy">Sicherheitsmodell</a> im Browser ist es heutzutage nicht wirklich einfach möglich AJAX Requests an Seiten zu schicken, welche eine andere Domain haben. Allerdings kann man einen kleinen Workaround benutzen: Es ist erlaubt, fremde Ressourcen von anderen Domains über GET einzubinden. Dazu zählt natürlich auch Javascript.</p>
<p>JSONP bedient sich diesem Trick: Der Browser erlaubt es, dass man fremden Javascript Content via Http GET auf die eigene Seite einbindet. Der fremde Javascript Code kann alles mögliche sein, u.a. auch JSON. Damit ist die Idee der JSONP API geboren.</p>
<p><strong>jQuery und JSONP – sieht aus wie AJAX. Ist auch fast dasselbe.</strong></p>
<p>Ein <u>normaler</u> jQuery AJAX Aufruf, um ein</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:20b50d4e-902e-4144-86fd-380badbc13f2" class="wlWriterEditableSmartContent">
<pre name="code" class="c">$.ajax({
  url: "test.html",
  cache: false,
  success: function(html){
    $("#results").append(html);
  }
});</pre>
</div>
<p>&nbsp;</p>
<p>Der <u>JSONP jQuery Aufruf</u> ist leicht modifiziert und enthält ein “dataType jsonp” Property.</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:56b3ddf7-fdfc-410d-a355-a2ae0e0fad6a" class="wlWriterEditableSmartContent">
<pre name="code" class="c#">
$.ajax({
  url: "otherDomain...",
  cache: false,
  dataType: 'jsonp',
  success: function(html){
    $("#results").append(html);
  }
});</pre>
</div>
<p><strong>Beispiel Stackoverflow API:</strong></p>
<p>Ich möchte die Wiki Information über das Tag “<a href="http://stackoverflow.com/tags/ravendb/info">RavenDB</a>” mir über JSONP holen.</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:c7a6d6af-5eb9-4b6e-9c92-5405fb7103a8" class="wlWriterEditableSmartContent">
<pre name="code" class="c#">
                $.ajax({
                    type: 'GET',
                    url: 'http://api.stackoverflow.com/1.1/tags/ravendb/wikis',
                    dataType: 'jsonp',
                    success: function (data) {
                        if (data.tag_wikis.length &gt; 0) {
                            alert(data.tag_wikis[0].wiki_excerpt);
                     	}
                    },
                    jsonp: 'jsonp'
                });</pre>
</div>
<p>Als Ergebnis kommen die Daten über den Browser geladen direkt von Stackoverflow.</p>
<p><strong>Was bringt das?</strong></p>
<p>Durch jsonp erspart man sich den Proxy, welcher zwischen dem Browser und dem eigentlichen Service vermitteln müsste. Allerdings sind die Anwendungsfälle recht beschränkt und ein praktischer Einsatz ist mir nur bei lesenden Sachen bekannt. Evtl. geht hier aber später mehr mit Websockets &amp; co. </p>
<img src="http://feeds.feedburner.com/~r/Code-insideBlog/~4/JjMiTYjMOpk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://code-inside.de/blog/2011/12/26/jsonp-mit-jquery-am-beispiel-der-stackoverflow-api/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://code-inside.de/blog/2011/12/26/jsonp-mit-jquery-am-beispiel-der-stackoverflow-api/</feedburner:origLink></item>
		<item>
		<title>MacBook Pro für .NET Entwickler–geeignet oder einfach nur schick, aber unpraktisch?</title>
		<link>http://feedproxy.google.com/~r/Code-insideBlog/~3/x4b6zT6Agc4/</link>
		<comments>http://code-inside.de/blog/2011/12/13/macbook-pro-fr-net-entwicklergeeignet-oder-einfach-nur-schick-aber-unpraktisch/#comments</comments>
		<pubDate>Mon, 12 Dec 2011 23:04:06 +0000</pubDate>
		<dc:creator>Robert Mühsig</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[MacBookPro]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://code-inside.de/blog/?p=3980</guid>
		<description><![CDATA[<div><img width="150" height="150" src="http://code-inside.de/blog/wp-content/uploads/image1426-150x150.png" class="attachment-thumbnail wp-post-image" alt="image.png" title="image.png" style="margin-bottom: 15px;" /></div>Ich besitz seit gut einem Jahr ein MacBook Pro (= aus dem Jahre 2010) und weil mich damals die Frage so beschäftigt hat, blogge ich mal meine Erfahrungen dazu. Meine Notebook Konfiguration MacBook Pro April 2010 - 2,66 Intel Core i7- 8GB RAM- 15” Glossy Display- Intel X-25M 168GB SSD Die Hardware: Ein Traum – ...]]></description>
			<content:encoded><![CDATA[<div><img width="150" height="150" src="http://code-inside.de/blog/wp-content/uploads/image1426-150x150.png" class="attachment-thumbnail wp-post-image" alt="image.png" title="image.png" style="margin-bottom: 15px;" /></div><p>Ich besitz seit gut einem Jahr ein MacBook Pro (= aus dem Jahre 2010) und weil mich damals die Frage so beschäftigt hat, blogge ich mal meine Erfahrungen dazu.</p>
<p><strong>Meine Notebook Konfiguration MacBook Pro April 2010</strong></p>
<p>- 2,66 Intel Core i7<br />- 8GB RAM<br />- 15” Glossy Display<br />- Intel X-25M 168GB SSD</p>
<p><strong>Die Hardware: Ein Traum – leider mit kleinen Einschränkungen</strong></p>
<p>Was will man groß über Apple Hardware schreiben: Die Qualität ist sagenhaft. Im Vergleich zu dutzenden Plastiknotebooks liegen Welten. Auch das Touchpad und der sinnvolle Einsatz von Multitouch in der Desktop-Welt ist Apple mehr als geglückt. Das Display ist brillant und die Farben kräftig. Das “Glossy” hab ich selber nicht als störend empfunden, mag aber auch daran liegen, dass ich damit auch nicht in der Sonne arbeite. Aber he… dafür sind wir Entwickler <img src='http://code-inside.de/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Als Entwickler ist die Tastatur natürlich besonders wichtig und hier kommen wir zu einem <strong>kleinen Problem</strong>: </p>
<p>a) es ist eine Notebook-Tastatur, wo ohnehin bereits einige Tasten wegrationalisiert wurden und</p>
<p>b) es ist eine Tastatur von Apple, wo noch viel mehr Tasten weg sind bzw. anders belegt oder nicht beschriftet</p>
<p><a href="http://code-inside.de/blog/wp-content/uploads/image1427.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://code-inside.de/blog/wp-content/uploads/image_thumb605.png" width="589" height="406"></a></p>
<p>Im Vergleich dazu mal eine PC Tastatur (nicht sehr schön, aber so sehen sie aus) :</p>
<p><a href="http://code-inside.de/blog/wp-content/uploads/image1428.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://code-inside.de/blog/wp-content/uploads/image_thumb606.png" width="600" height="287"></a></p>
<p>Entweder war mein Tastaturschema total verstellt, oder ich war zu blöd. Die Tasten “<strong>~</strong>” und “<strong>\</strong>”, welche man als Entwickler doch ab und an braucht waren wie weg. Auch “<strong>[</strong>“ “<strong>]</strong>”, “<strong>{</strong>“ “<strong>}</strong>” hatte ich immer mal wieder gesucht (auch wenn ich eigentlich die Tasten auf einer normalen Tastatur blind finde) und warum das “<strong>@</strong>” Zeichen auf einer gänzlich anderen Taste liegt ist mir ohnehin schleierhaft.&nbsp; </p>
<p>Sobald man die vielen Goodis von Resharper nutzen möchte, benötigt man ohnehin noch ein paar Spezialtasten (POS1/ENDE…), welche nicht auf der MacBook Tastatur auffindbar sind.</p>
<p>Toll hingegen ist, dass die Tastatur im dunkeln leuchtet und das man auch sonst recht gut auf ihr schreiben kann. Programmieren ist allerdings etwas Finger-Mikado, aber man kann sich auch daran gewöhnen (bis vor kurzem hatte ich keine extra Tastatur <img src='http://code-inside.de/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  )</p>
<p><u>Zusammenfassend zur Hardware:</u></p>
<p>Ohne externe Tastatur und Maus kann man zwar arbeiten, allerdings ist man wesentlich effektiver mit einer gescheiten Tastatur. Momentan schreib ich an dieser <a href="http://www.amazon.de/gp/product/B001ECJNKQ/ref=as_li_ss_tl?ie=UTF8&amp;tag=meinkleinerbl-21&amp;linkCode=as2&amp;camp=1638&amp;creative=19454&amp;creativeASIN=B001ECJNKQ">hier</a>. Ansonsten gibt es von der Hardware Seite nichts negatives.</p>
<p><strong>Zur Software: Mac OSX oder Windows? Wie wäre es mit beidem?</strong></p>
<p>Ich bin eigentlich recht unbefangen, ob nun Mac OSX oder Windows 7. Beides hat seine Stärken und Schwächen. Allerdings bin ich natürlich auf Windows angewiesen, wenn ich Visual Studio und co. nutzen möchte.</p>
<p><a href="http://code-inside.de/blog/wp-content/uploads/image1429.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px 5px 0px 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" align="left" src="http://code-inside.de/blog/wp-content/uploads/image_thumb607.png" width="96" height="108"></a><u>Wofür ich Mac OSX nutze:</u> Zum Großen Teil einfach nur zum Browsen im Web. Durch das grandiose Touchpad und den Gesten für meine Begriffe angenehmer als mit Maus oder einem Touchpad von einem Windows Notebook. Auch die Mail-App und iCal ist für den normalen Nutzer völlig in Ordnung. Die Mail-App funktioniert natürlich auch mit Exchange und ich hatte bislang keine Probleme bei der Synchronisation.</p>
<p><a href="http://www.applesheet.com/download-mac-os-x-10-7-1-lion-update-direct-link/34039/">(Bildquelle)</a></p>
<p>Zusammenfassend:</p>
<p>- Webbrowsing zum Spaß</p>
<p>- Mail </p>
<p><a href="http://code-inside.de/blog/wp-content/uploads/image1430.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px 5px 0px 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" align="left" src="http://code-inside.de/blog/wp-content/uploads/image_thumb608.png" width="101" height="82"></a><u>Wofür ich Windows 7 nutze:</u> Zum Entwickeln mit Visual Studio und wenn es doch mal ernsthaftere Bürosachen gibt. Office for Mac &amp; co. hatte ich ehrlich gesagt nicht wirklich gemocht bzw. auch nicht das Bedürfnis danach: Office 2010 passt. Auch wenn es hin und wieder Macken hat, aber nichts ist perfekt <img src='http://code-inside.de/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> . Zocken ist natürlich eigentlich nur ernsthaft auf der Windows Plattform überhaupt möglich.</p>
<p>Zusammenfassend:</p>
<p>- Entwickeln mit .NET / Visual Studio 2010</p>
<p>- Office</p>
<p>- Gaming</p>
<p><strong>Mit Bootcamp &amp; VMWare Fusion die beiden Welten verbinden – ohne Nachteile.</strong></p>
<p>MacBooks sind seit der Umstellung auf Intel-Prozessoren “auch nur” PCs. Natürlich kann man auch Windows 7 nativ installieren – das ganze nennt Apple Bootcamp und Apple liefert die “passenden” Treiber dazu. Unter Bootcamp läuft Windows nativ wie auf jedem anderen PC und kann die ganze Leistung nutzen. Allerdings kann man unter Windows das Touchpad z.B. bei weitem nicht so nutzen wie unter Mac OSX.</p>
<p>Bootcamp “teilt” die Platte einfach in OSX und Windows Partition auf – allerdings muss dieser Schritt bei einer 160GB Festplatte wohl überlegt sein – viel Platz ist es ja nicht, wenn man ansonsten in Terabyte Größen denkt.</p>
<p><a href="http://code-inside.de/blog/wp-content/uploads/image1431.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px 5px 0px 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" align="left" src="http://code-inside.de/blog/wp-content/uploads/image_thumb609.png" width="65" height="68"></a><a href="http://store.vmware.com/store?Action=DisplayPage&amp;Locale=de_DE&amp;SiteID=vmwde&amp;id=ProductDetailsPage&amp;productID=166450700&amp;src=PaidSearch_Google_PersonalDesktop_Fusion_EMEA_DE_EN_Brand">VMWare Fusion</a> hat ein echt praktisches Feature: Man kann auch die Bootcamp Partition in einer VM booten. Das hat den charmanten Vorteil, dass man MacOSX und Windows parallel nutzen kann. Das geht natürlich zulasten auf die Performance, aber einfache Strategiespiele, Office oder Visual Studio gehen damit locker.</p>
<p>Im Gespann mit VMWare Fusion kann man beide Welten schön miteinander verbinden und wenn man mal Power braucht, nutzt man Bootcamp. Einzig Windows mag es nicht, dass sich die Hardwaresettings so oft ändern und verlangt ab und an nach einer Reaktivierung des Lizenzschlüssels.</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:8a136feb-b446-40a6-bbb7-6483cc2683b4" class="wlWriterEditableSmartContent">
<div><object width="448" height="252"><param name="movie" value="http://www.youtube.com/v/uFAWg6XZ0ic?hl=en&amp;hd=1"></param><embed src="http://www.youtube.com/v/uFAWg6XZ0ic?hl=en&amp;hd=1" type="application/x-shockwave-flash" width="448" height="252"></embed></object></div>
</div>
<p>&nbsp;</p>
<p>Unter Bootcamp sieht der Windows Leistungsindex so aus (da das MacBook von 2010 ist, dürfte die neuste Generation natürlich noch besser sein)</p>
<p><a href="http://code-inside.de/blog/wp-content/uploads/image1432.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://code-inside.de/blog/wp-content/uploads/image_thumb610.png" width="537" height="181"></a></p>
<p>&nbsp;</p>
<p><strong>Mal über den Tellerrand schauen (und für iOS Devs erst recht) !</strong></p>
<p>Über den Tellerrand mal zu schauen und Mac OSX auszuprobieren kann natürlich auch ein Kaufgrund sein (war bei mir auch so). Wer nativ für iOS Geräte entwickeln möchte, kommt ohnehin schwer an ein MacBook Pro vorbei. </p>
<p>Wer es mag, kann auch Mono ausprobieren, aber ehrlich gesagt hatte ich das nie ernsthaft in Betracht gezogen – wenn .NET auf Windows super läuft und ich WebApps baue, warum mir dann diesen Schmerz antuen? </p>
<p>Aber die Optionen stehen auf alle Fälle offen und auch das reizt natürlich. </p>
<p>Ich bereue den Kauf auch nicht, allerdings benötige ich nun noch eine Kampfmaschine für Battlefield (aber da wäre wahrscheinlich auch fast jedes Windows Notebook am Ende gewesen <img src='http://code-inside.de/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  ).</p>
<p><strong>tl;dr Fazit: <strong>Taugt ein MacBook Pro nun als Gerät für .NET Entwickler?</strong></strong></p>
<p>Wer auf hochwertige Notebooks scharf ist, Performance braucht und trotzdem Mobil sein möchte: Ja, kann ich empfehlen. Allerdings würde ich mir für ein längeres ernsthaftes Arbeiten/Programmieren eine normale Windows Tastatur mit anstecken. </p>
<p>Wer nur ab und an Mobil ist, sollte allerdings trotzdem vielleicht eher einen Standrechner und für unterwegs ein <a href="http://blog.thomasbandt.de/39/2371/de/blog/macbook-air-late-2010-kurzes-review.html">MacBook Air</a> in Betracht ziehen. Die Kombination kommt mir heute eigentlich&nbsp; noch etwas cleverer vor. <br />Wer keine Kompromisse machen möchte, der kann das MacBook Pro nehmen – ein Fehlkauf wird es bestimmt nicht. Oder er wartet ab, was die Ultrabooks alles mal können sollen.</p>
<p><strong>Letzte Frage &#8211; Gaming?</strong></p>
<p>Ab und an, will man ja auch eine nette Abwechslung haben: Auf dem 2010ner Macbook (was ich hab) läuft Battlefield 3 in “minimalen” Settings für ca. 3 Stunden. Danach wird das Gerät zu warm und geht in den Ruhemodus <img src='http://code-inside.de/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Für ein Arbeitsgerät ganz nett, aber da muss was größeres her <img src='http://code-inside.de/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  Aber da Battlefield gerade ein äußerst anspruchsvolles Spiel ist, sollte das nicht abschrecken: Etwas ältere Spiele laufen ohne Probleme.</p>
<p><strong>Wer jetzt überzeugt ist und kaufen möchte:</strong> Bei <a href="http://www.amazon.de/mn/search?_encoding=UTF8&amp;site-redirect=de&amp;x=0&amp;tag=meinkleinerbl-21&amp;ie=UTF8&amp;linkCode=ur2&amp;y=0&amp;camp=1638&amp;creative=19454&amp;field-keywords=macbook%20air&amp;url=search-alias%3Daps#%2Fref%3Dnb_sb_noss">Amazon</a> oder Apple findet sich bestimmt was <img src='http://code-inside.de/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<img src="http://feeds.feedburner.com/~r/Code-insideBlog/~4/x4b6zT6Agc4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://code-inside.de/blog/2011/12/13/macbook-pro-fr-net-entwicklergeeignet-oder-einfach-nur-schick-aber-unpraktisch/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://code-inside.de/blog/2011/12/13/macbook-pro-fr-net-entwicklergeeignet-oder-einfach-nur-schick-aber-unpraktisch/</feedburner:origLink></item>
		<item>
		<title>Windows Azure SDK für node.js &amp; co. – und das auf GitHub!</title>
		<link>http://feedproxy.google.com/~r/Code-insideBlog/~3/nBrkNn55mfA/</link>
		<comments>http://code-inside.de/blog/2011/12/12/windows-azure-sdk-fr-node-js-co-und-das-auf-github/#comments</comments>
		<pubDate>Mon, 12 Dec 2011 00:41:55 +0000</pubDate>
		<dc:creator>Robert Mühsig</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[node.js]]></category>

		<guid isPermaLink="false">http://code-inside.de/blog/2011/12/12/windows-azure-sdk-fr-node-js-co-und-das-auf-github/</guid>
		<description><![CDATA[<div><img width="150" height="111" src="http://code-inside.de/blog/wp-content/uploads/image1424-150x111.png" class="attachment-thumbnail wp-post-image" alt="image.png" title="image.png" style="margin-bottom: 15px;" /></div>Wie bereits vor einiger Zeit abzusehen war, unternimmt Microsoft alles um Windows Azure als “die” Cloud-Plattform für alle möglichen Sprachen &#38; Frameworks zu positionieren. Microsoft, früher dafür bekannt seine eigenen Plattformen und Sprachen in den Markt zu pushen, ändert scheinbar seine Strategie und pusht nun u.a. auch node.js und stellt die SDKs auch auf GitHub ...]]></description>
			<content:encoded><![CDATA[<div><img width="150" height="111" src="http://code-inside.de/blog/wp-content/uploads/image1424-150x111.png" class="attachment-thumbnail wp-post-image" alt="image.png" title="image.png" style="margin-bottom: 15px;" /></div><p>Wie <a href="http://code-inside.de/blog/2011/06/23/mircosoft-volle-kraft-auf-die-cloud-mit-datenupload-node-js/">bereits vor einiger Zeit</a> abzusehen war, unternimmt Microsoft alles um Windows Azure als “die” Cloud-Plattform für alle möglichen Sprachen &amp; Frameworks zu positionieren. Microsoft, früher dafür bekannt seine eigenen Plattformen und Sprachen in den Markt zu pushen, ändert scheinbar seine Strategie und pusht nun u.a. auch <a href="http://nodejs.org">node.js</a> und stellt die <a href="https://github.com/WindowsAzure">SDKs auch auf GitHub bereit</a>. </p>
<p><strong>Node.js auf Windows Azure</strong></p>
<p>Windows Azure <a href="http://www.windowsazure.com/en-us/develop/nodejs/">unterstützt node.js</a>! Im SDK enthalten sind <a href="http://msdn.microsoft.com/en-us/library/hh689725(VS.103).aspx">Powershell-Cmdlets</a> für das erstellen, testen und deployen von node.js Applikationen sowie Samples. </p>
<p><strong>Noch nie was mit node.js was gemacht? Samples von Microsoft</strong></p>
<p>Bislang konnte ich selbst <a href="http://nodejs.org">node.js</a> nur oberflächig anschauen, allerdings scheinen die Beispiele von Microsoft etwas größer zu sein als die dutzenden “Hello World” Artikel ohne aber gleich zu komplex zu werden. Das ersten <a href="http://www.windowsazure.com/en-us/develop/nodejs/tutorials/web-app-with-express/">Tutorial</a> beinhaltet:</p>
<p>- IISNode für node.js auf IIS Basis</p>
<p>- Umgang mit dem Node-Package Manager “npm”</p>
<p>- Wie das ganze mit den Azure Diensten funktioniert.</p>
<p>- Samt MVC Framework “Express”</p>
<p>Für einen totalen node.js unerfahrenen Entwickler wie mich sieht es auf den ersten Blick ganz gut aus und auch recht verständlich. <a href="http://www.windowsazure.com/en-us/develop/nodejs/tutorials/web-app-with-express/">Anschauen</a> schadet auf alle Fälle nicht.</p>
<p>Es gibt zudem noch ein zweites Tutorial, welches noch etwas komplexer ist: <a href="http://www.windowsazure.com/en-us/develop/nodejs/tutorials/getting-started/">Node.js Web Application with Table Storage</a></p>
<p><strong>Einstiegsvideo in 5 Minuten mit node.js &amp; Azure:</strong></p>
<p><iframe style="width: 512px; height: 288px" src="http://channel9.msdn.com/Blogs/Windows-Azure-Developer-Experience-Videos/Nodejs-Windows-Azure-Introduction/player?w=512&amp;h=288" frameborder="0" scrolling="no"></iframe></p>
<p><strong></strong></p>
<p><strong>node.js – ein seltsamer Hype?</strong></p>
<p>Ich glaube mit ein paar eleganten Frameworks könnte node.js wirklich Spaß machen. Mit C# selbst komm ich auch nicht weit, erst Frameworks wie ASP.NET MVC machen die Sache interessant, daher bin ich gespannt auf die Entwicklung und man sollte mal abwarten was passiert.</p>
<p>Auf alle Fälle ist der von Microsoft eingeschlagene Weg auch der Richtige.</p>
<p><a href="http://code-inside.de/blog/wp-content/uploads/image1425.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" align="left" src="http://code-inside.de/blog/wp-content/uploads/image_thumb603.png" width="145" height="140"></a><strong>Alle Samples von Microsoft gibts auch auf <a href="https://github.com/WindowsAzure">GitHub</a>.</strong></p>
<img src="http://feeds.feedburner.com/~r/Code-insideBlog/~4/nBrkNn55mfA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://code-inside.de/blog/2011/12/12/windows-azure-sdk-fr-node-js-co-und-das-auf-github/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://code-inside.de/blog/2011/12/12/windows-azure-sdk-fr-node-js-co-und-das-auf-github/</feedburner:origLink></item>
		<item>
		<title>Fix: “There is a duplicate ‘uri’ section defined” bei DotNetOpenAuth</title>
		<link>http://feedproxy.google.com/~r/Code-insideBlog/~3/eKzwIcS1t8M/</link>
		<comments>http://code-inside.de/blog/2011/12/09/fix-there-is-a-duplicate-uri-section-defined-bei-dotnetopenauth/#comments</comments>
		<pubDate>Fri, 09 Dec 2011 01:08:31 +0000</pubDate>
		<dc:creator>Robert Mühsig</dc:creator>
				<category><![CDATA[Fix]]></category>
		<category><![CDATA[Cassini]]></category>
		<category><![CDATA[DotNetOpenAuth]]></category>
		<category><![CDATA[IIS]]></category>

		<guid isPermaLink="false">http://code-inside.de/blog/2011/12/09/fix-there-is-a-duplicate-uri-section-defined-bei-dotnetopenauth/</guid>
		<description><![CDATA[Kleiner Hinweis, was zutun ist, wenn man diesen Fehler bekommt. Folgendes Setup bei mir: - ASP.NET MVC Projekt samt .NET Framework 4.0 - DotNetOpenAuth via NuGet installiert - Das Webprojekt hat noch “Cassini” genutzt Beim Deployen auf einen richtigen IIS bekam ich diese Fehlermeldung: “There is a duplicate &#8216;uri&#8217; section defined” Oder zu deutsch: “Der ...]]></description>
			<content:encoded><![CDATA[<p>Kleiner Hinweis, was zutun ist, wenn man diesen Fehler bekommt.</p>
<p><strong>Folgendes Setup bei mir:</strong></p>
<p>- ASP.NET MVC Projekt samt .NET Framework 4.0</p>
<p>- <a href="http://www.dotnetopenauth.net/">DotNetOpenAuth</a> via <a href="http://nuget.org/">NuGet</a> installiert</p>
<p>- Das Webprojekt hat noch “Cassini” genutzt</p>
<p><strong>Beim Deployen auf einen richtigen IIS bekam ich diese Fehlermeldung:</strong></p>
<p><em>“There is a duplicate &#8216;uri&#8217; section defined” </em></p>
<p>Oder zu deutsch:</p>
<p><em>“Der &#8220;uri&#8221;-Abschnitt wurde doppelt definiert.”</em></p>
<p>Rot markiert war diese Zeile:</p>
<p><em>&lt;section name=&#8221;uri&#8221; type=&#8221;System.Configuration.UriSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089&#8243; /&gt;<br /></em></p>
<p>&nbsp;</p>
<p><a href="http://code-inside.de/blog/wp-content/uploads/image1423.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://code-inside.de/blog/wp-content/uploads/image_thumb601.png" width="553" height="263"></a></p>
<p><strong>Fehlerbeseitigung:</strong></p>
<p>(recht einfach <img src='http://code-inside.de/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  ) Die Zeile aus der eigenen Web.config entfernen:</p>
<p><em>&lt;section name=&#8221;uri&#8221; type=&#8221;System.Configuration.UriSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089&#8243; /&gt;</em></p>
<p><strong>Grund:</strong> Dieser Eintrag ist bereits in der machine.config bei .NET 4.0 Applikationen mit dabei, daher wäre er doppelt.</p>
<p>Das Problem tritt allerdings nur im IIS und IIS Express auf. “Cassini” stört sich (leider) nicht daran. </p>
<p>Tipp (wie fast immer) von <a href="http://stackoverflow.com/questions/2475329/steps-to-investigate-cause-of-web-config-duplicate-section">Stackoverflow</a> (auch wenn dort die beste Antwort mir etwas kompliziert erscheint, daher auch der Blogpost <img src='http://code-inside.de/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  )</p>
<img src="http://feeds.feedburner.com/~r/Code-insideBlog/~4/eKzwIcS1t8M" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://code-inside.de/blog/2011/12/09/fix-there-is-a-duplicate-uri-section-defined-bei-dotnetopenauth/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://code-inside.de/blog/2011/12/09/fix-there-is-a-duplicate-uri-section-defined-bei-dotnetopenauth/</feedburner:origLink></item>
		<item>
		<title>Dateien, welche nicht in die Source Control gehören für GIT–.gitignore für bin/obj &amp; co.</title>
		<link>http://feedproxy.google.com/~r/Code-insideBlog/~3/MPetoIn45f8/</link>
		<comments>http://code-inside.de/blog/2011/12/06/dateien-welche-nicht-in-die-source-control-gehren-fr-git-gitignore-fr-binobj-co/#comments</comments>
		<pubDate>Tue, 06 Dec 2011 01:27:41 +0000</pubDate>
		<dc:creator>Robert Mühsig</dc:creator>
				<category><![CDATA[HowTo]]></category>
		<category><![CDATA[GIT]]></category>
		<category><![CDATA[gitignore]]></category>
		<category><![CDATA[Source Control Systeme]]></category>

		<guid isPermaLink="false">http://code-inside.de/blog/?p=3955</guid>
		<description><![CDATA[<div><img width="150" height="150" src="http://code-inside.de/blog/wp-content/uploads/image1421-150x150.png" class="attachment-thumbnail wp-post-image" alt="image.png" title="image.png" style="margin-bottom: 15px;" /></div>Visual Studio produziert einige Dateien, welche man nicht in sein Source Control System haben sollte: Zum einen sind es Dateien, welche vom Betriebssystem automatisch erstellt werden (Thumbs.db), von diversen Tools (Resharper ahoi!) oder auch den lokalen Build-Output. Da ich gerade etwas mit Git experimentiere, hier mal meine Erkenntnisse (bei Denkfehlern meinerseits bitte einfach einen Kommentar ...]]></description>
			<content:encoded><![CDATA[<div><img width="150" height="150" src="http://code-inside.de/blog/wp-content/uploads/image1421-150x150.png" class="attachment-thumbnail wp-post-image" alt="image.png" title="image.png" style="margin-bottom: 15px;" /></div><p>Visual Studio produziert einige Dateien, welche man nicht in sein Source Control System haben sollte: Zum einen sind es Dateien, welche vom Betriebssystem automatisch erstellt werden (Thumbs.db), von diversen Tools (Resharper ahoi!) oder auch den lokalen Build-Output.</p>
<p>Da ich gerade etwas mit <a href="http://code-inside.de/blog/2011/08/05/einstieg-in-git-fr-net-entwickler/">Git experimentiere</a>, hier mal meine Erkenntnisse (bei Denkfehlern meinerseits bitte einfach einen Kommentar hinterlassen <img src='http://code-inside.de/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  )</p>
<p><strong>Die .gitignore Datei</strong></p>
<p>Über dieses Datei kann man steuern, welche Dateien git tracken soll und welche nicht. Der Aufbau ist eigentlich simpel, aber irgendwie auch <a href="http://stackoverflow.com/questions/1470572/gitignore-ignore-any-bin-directory">etwas konfus</a> (IMHO <img src='http://code-inside.de/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  ).</p>
<p>Meine .gitignore Datei (für meine Demosourcen auf Google Code) :</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:5414a39c-9da4-453a-b56c-98c41a7b44d2" class="wlWriterEditableSmartContent">
<pre name="code" class="c#"># Visual Studio Files and security files
######################
*.suo
*.user
*.cache
*.Publish.xml
_ReSharper.*

# Build Outputs
######################
bin/
obj/

# OS generated files #
######################
Thumbs.db</pre>
</div>
<p>&nbsp;</p>
<p>Der erste Block sind alles User-bezogene Dateien, welche Visual Studio oder Resharper erstellt. Die Build Outputs entferne ich im zweiten Teil und die Thumbs.db fliegt auch weg.</p>
<p><strong>Anlegen der .gitignore Datei in Windows</strong></p>
<p>Windows hat sich beim Anlegen einer “Namenlosen” .gitignore Datei etwas zickig, aber über Notepad++ auch kein Hürde.</p>
<p>Sobald man das File im Stammverzeichnis des Projekts hat, werden überflüssige Dateien nicht mehr eingecheckt.</p>
<p><strong>Wie kann man bereits eingecheckte und getrackte Dateien wieder löschen?</strong></p>
<p>Auf <a href="http://stackoverflow.com/questions/1139762/gitignore-file-not-ignoring">Stackoverflow</a> hab ich mehrere Varianten gefunden, diese hat für mich funktioniert:</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:127c17f4-3582-4af5-b738-986994bf46f0" class="wlWriterEditableSmartContent">
<pre name="code" class="c#">git add .gitignore
git commit -m "New .gitignore file"
git rm -r --cached .
git add .
git commit -m "Clean checkin"</pre>
</div>
<p>&nbsp;</p>
<p>In diesem Sinne:</p>
<p><a href="http://code-inside.de/blog/wp-content/uploads/image1422.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://code-inside.de/blog/wp-content/uploads/image_thumb600.png" width="383" height="295"></a></p>
<img src="http://feeds.feedburner.com/~r/Code-insideBlog/~4/MPetoIn45f8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://code-inside.de/blog/2011/12/06/dateien-welche-nicht-in-die-source-control-gehren-fr-git-gitignore-fr-binobj-co/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://code-inside.de/blog/2011/12/06/dateien-welche-nicht-in-die-source-control-gehren-fr-git-gitignore-fr-binobj-co/</feedburner:origLink></item>
		<item>
		<title>Webserver Performance Test</title>
		<link>http://feedproxy.google.com/~r/Code-insideBlog/~3/O0RltENdUDI/</link>
		<comments>http://code-inside.de/blog/2011/11/30/webserver-performance-test/#comments</comments>
		<pubDate>Tue, 29 Nov 2011 23:58:17 +0000</pubDate>
		<dc:creator>Robert Mühsig</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[IIS]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Webserver]]></category>

		<guid isPermaLink="false">http://code-inside.de/blog/?p=3949</guid>
		<description><![CDATA[<div><img width="150" height="150" src="http://code-inside.de/blog/wp-content/uploads/image1418-150x150.png" class="attachment-thumbnail wp-post-image" alt="image.png" title="image.png" style="margin-bottom: 15px;" /></div>Was ist der schnellste Webserver? Und kann man das überhaupt so einfach messen? Die Antwort: Naja. Man kann einiges Messen, aber ob das an realistische Zahlen rankommt ist immer noch eine andere Geschichte. Allerdings hat diese Seite einen Test gemacht und der IIS hat “gewonnen”. Allerdings gibt es ja auch ein leuchtendes Beispiel. Hintergrund Getestet ...]]></description>
			<content:encoded><![CDATA[<div><img width="150" height="150" src="http://code-inside.de/blog/wp-content/uploads/image1418-150x150.png" class="attachment-thumbnail wp-post-image" alt="image.png" title="image.png" style="margin-bottom: 15px;" /></div><p>Was ist der schnellste Webserver? Und kann man das überhaupt so einfach messen? Die Antwort: Naja. Man kann einiges Messen, aber ob das an realistische Zahlen rankommt ist immer noch eine andere Geschichte.</p>
<p>Allerdings hat <a href="http://www.webperformance.com/load-testing/blog/2011/11/what-is-the-fastest-webserver/">diese Seite</a> einen Test gemacht und der IIS hat “gewonnen”. Allerdings gibt es ja auch ein leuchtendes <a href="http://highscalability.com/blog/2011/3/3/stack-overflow-architecture-update-now-at-95-million-page-vi.html">Beispiel</a>.</p>
<p><strong>Hintergrund</strong></p>
<p>Getestet wurden die wohl größten Vertreter:</p>
<p>Apache, Nginx, Lighttpd, G-WAN und der IIS. Getestet wurde auf einer Quad-Core Workstation, wobei CentOS 6.0 bei allen nicht IIS Webservern eingesetzt wurde. Beim IIS kam ein Windows Server 2008 SP2 zum Einsatz.</p>
<p><strong>Server-Konfiguration</strong></p>
<p>Die Einstellungen der Webserver wurden nicht großartig verändert bzw. die normalen Handgriffe wurden gemacht, sodass z.B. der Webserver alle Kerne des Systems nutzt. Soweit beschrieben wurden auch sonst keine großen Veränderungen gemacht.</p>
<p><strong>Was wurde getestet &amp; das Problem daran.</strong></p>
<p>Getestet wurden “nur”, wie schnell und unter welcher Last der Webserver statische Dateien senden kann. Das ist natürlich auch zugleich der größte Kritikpunkt: Statische Seiten sind vermutlich einfach zu verarbeiten und ein Großteil der IIS Infrastruktur langweilt sich vermutlich.</p>
<p>Trotzdem kann man sich <a href="http://www.webperformance.com/load-testing/blog/2011/11/what-is-the-fastest-webserver/"><strong>die verschiedenen Werte</strong></a> (mit bunten Grafiken! <img src='http://code-inside.de/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  ) anschauen und als ASP.NET / Webentwickler auf der Microsoft Plattform etwas mehr Selbstvertrauen bekommen.</p>
<p><strong>Stackoverflow. 95Mio Page Views/Month &amp; ein dutzend Server</strong></p>
<p><a href="http://code-inside.de/blog/wp-content/uploads/image1419.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px 5px 5px 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" align="left" src="http://code-inside.de/blog/wp-content/uploads/image_thumb597.png" width="240" height="66"></a></p>
<p>Vermutlich das beste Beispiel in der .NET Welt, dass man auch auf der Microsoft Plattform eine gefragte Seite unterhalten kann (ohne das es von Microsoft selbst kommt). </p>
<p>Vor einiger Zeit wurden die <a href="http://highscalability.com/blog/2011/3/3/stack-overflow-architecture-update-now-at-95-million-page-vi.html">Besucherzahlen und die Hardware von StackExchange (samt StackOverflow)</a> näher bekannt gegeben. </p>
<p><strong>TL;DR &amp; Fazit zur IIS Performance</strong></p>
<p><a href="http://code-inside.de/blog/wp-content/uploads/image1420.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://code-inside.de/blog/wp-content/uploads/image_thumb598.png" width="240" height="240"></a></p>
<p>Warum? <a href="http://www.webperformance.com/load-testing/blog/2011/11/what-is-the-fastest-webserver/">Hier</a> und <a href="http://highscalability.com/blog/2011/3/3/stack-overflow-architecture-update-now-at-95-million-page-vi.html">hier</a>. </p>
<img src="http://feeds.feedburner.com/~r/Code-insideBlog/~4/O0RltENdUDI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://code-inside.de/blog/2011/11/30/webserver-performance-test/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://code-inside.de/blog/2011/11/30/webserver-performance-test/</feedburner:origLink></item>
		<item>
		<title>Wie funktionieren Pingbacks und wie kann man Pingbacks über .NET versenden?</title>
		<link>http://feedproxy.google.com/~r/Code-insideBlog/~3/1E72o_eloY8/</link>
		<comments>http://code-inside.de/blog/2011/11/28/wie-funktionieren-pingbacks-und-wie-kann-man-pingbacks-ber-net-versenden/#comments</comments>
		<pubDate>Mon, 28 Nov 2011 21:48:14 +0000</pubDate>
		<dc:creator>Robert Mühsig</dc:creator>
				<category><![CDATA[HowTo]]></category>
		<category><![CDATA[Pingback]]></category>
		<category><![CDATA[XMLRPC]]></category>

		<guid isPermaLink="false">http://code-inside.de/blog/?p=3941</guid>
		<description><![CDATA[<div><img width="150" height="150" src="http://code-inside.de/blog/wp-content/uploads/image1413-150x150.png" class="attachment-thumbnail wp-post-image" alt="image.png" title="image.png" style="margin-bottom: 15px;" /></div>Ganz technisch gesprochen: Pingbacks dienen der Benachrichtigung einer Seite, wenn diese auf einer anderen Seite verlinkt wird. Größtes (und einzigstes?) Einsatzgebiet ist in der Blogwelt zu finden. Ziel davon ist es, dass ein Autor benachrichtigt wird, wenn jemand über einen Artikel etwas schreibt. Meistens landet der Pingback mit in den Kommentaren. Eine ältere Form davon ...]]></description>
			<content:encoded><![CDATA[<div><img width="150" height="150" src="http://code-inside.de/blog/wp-content/uploads/image1413-150x150.png" class="attachment-thumbnail wp-post-image" alt="image.png" title="image.png" style="margin-bottom: 15px;" /></div><p>Ganz technisch gesprochen: Pingbacks dienen der Benachrichtigung einer Seite, wenn diese auf einer anderen Seite verlinkt wird. Größtes (und einzigstes?) Einsatzgebiet ist in der Blogwelt zu finden. Ziel davon ist es, dass ein Autor benachrichtigt wird, wenn jemand über einen Artikel etwas schreibt. Meistens landet der <a href="http://de.wikipedia.org/wiki/Pingback">Pingback</a> mit in den Kommentaren.</p>
<p>Eine ältere Form davon sind die “<a href="http://de.wikipedia.org/wiki/Trackback">Trackbacks</a>”, allerdings sind diese scheinbar etwas aus der Mode gekommen. <a href="http://blog.akismet.com/2010/04/22/state-of-web-spam/">Hier</a> ein Beispiel aus der Praxis (auf die Spam Thematik gehen wir dann noch ein)</p>
<p><a href="http://code-inside.de/blog/wp-content/uploads/image1414.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://code-inside.de/blog/wp-content/uploads/image_thumb592.png" width="495" height="514"></a></p>
<p><strong>Die Spezifikation &amp; Konzept der Pingbacks</strong></p>
<p>Auf <a href="http://www.hixie.ch/specs/pingback/pingback">dieser Seite</a> gibt es die Spezifikation der Pingbacks zum Nachlesen. Pingbacks müssen vom “Pingback Empfänger” auch unterstützt werden. </p>
<p>Um die Sache einfacher zu Erklären hier ein Beispiel: Ich hab einen Artikel auf code-inside.de verfasst und jemand anderes schreibt über diesen Artikel und verlinkt diesen. Im Hintergrund der Blogengine (oder des “Quell-Systems”) läuft dann ungefähr folgendes Schema ab:</p>
<p>Zuerst wird geprüft ob die Zielseite Pingbacks unterstützt:</p>
<p><a href="http://code-inside.de/blog/wp-content/uploads/image1415.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://code-inside.de/blog/wp-content/uploads/image_thumb593.png" width="506" height="114"></a></p>
<p>Hierbei wird einfach nur ein GET-Webrequest zum Ziel gemacht ohne besondere Parameter.</p>
<p><a href="http://code-inside.de/blog/wp-content/uploads/image1416.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://code-inside.de/blog/wp-content/uploads/image_thumb594.png" width="504" height="113"></a></p>
<p>Als Antwort muss im Header <strong>X-Pingback</strong> angegeben sein – wenn nicht, dann unterstützt das Ziel keinen Pingback-Mechanismus.</p>
<p>&nbsp;</p>
<p><a href="http://code-inside.de/blog/wp-content/uploads/image1417.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://code-inside.de/blog/wp-content/uploads/image_thumb595.png" width="504" height="430"></a></p>
<p>Nun wird der eigentliche Pingback zur XMLRPC Schnittstelle geschickt. Dabei wird die URL aus dem Header genommen und ein XMLRPC Aufruf gemacht, welches so ein XML beinhaltet:</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:0ae8f69e-e271-43d1-8e6e-cf031aeaa1e1" class="wlWriterEditableSmartContent">
<pre name="code" class="c#">&lt;?xml version="1.0" encoding="utf-16" standalone="yes"?&gt;
&lt;methodCall&gt;
	&lt;methodName&gt;pingback.ping&lt;/methodName&gt;
	&lt;params&gt;
		&lt;param&gt;
			&lt;value&gt;&lt;string&gt;http://www.bizzbingo.com/what-is/ravendb&lt;/string&gt;&lt;/value&gt;
		&lt;/param&gt;
		&lt;param&gt;
			&lt;value&gt;&lt;string&gt;http://code-inside.de/blog-in/2011/11/05/use-ravendb-as-embedded-filebase/&lt;/string&gt;&lt;/value&gt;
		&lt;/param&gt;
	&lt;/params&gt;
&lt;/methodCall&gt;</pre>
</div>
<p>&nbsp;</p>
<p><strong>Überprüfung auf der Zielseite</strong></p>
<p>Das Ziel (in meinem Beispiel also mein Blog), überprüft nun die Herkunft und ob diese Seite auch wirklich diesen Artikel verlinkt (ansonsten gibt es eine Fehlermeldung). Die Zielseite sucht sich dann (scheinbar) selbstständig ein Auszug von dem Aufrufer. </p>
<p><strong>Pingbacks in .NET</strong></p>
<p>Der Code stammt zu fast 100% aus dem <a href="http://blogengine.codeplex.com/releases/view/69117">Blogengine.NET Projekt</a>, da ich selber erst nicht durch die Spezifikation durchgesehen hatte <img src='http://code-inside.de/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:9a2a4647-e9e6-4152-a435-58f095cce734" class="wlWriterEditableSmartContent">
<pre name="code" class="c">namespace pingback.webapp.Controllers
{
    using System;
    using System.IO;
    using System.Net;
    using System.Text;
    using System.Xml;

    /// &lt;summary&gt;
    /// Sends pingbacks to website that the blog links to.
    /// &lt;/summary&gt;
    public static class Pingback
    {
        #region Events

        /// &lt;summary&gt;
        ///     Occurs just before a pingback is sent.
        /// &lt;/summary&gt;
        public static event EventHandler&lt;EventArgs&gt; Sending;

        /// &lt;summary&gt;
        ///     Occurs when a pingback has been sent
        /// &lt;/summary&gt;
        public static event EventHandler&lt;EventArgs&gt; Sent;

        #endregion

        #region Public Methods

        /// &lt;summary&gt;
        /// Sends pingbacks to the targetUrl.
        /// &lt;/summary&gt;
        /// &lt;param name="sourceUrl"&gt;
        /// The source Url.
        /// &lt;/param&gt;
        /// &lt;param name="targetUrl"&gt;
        /// The target Url.
        /// &lt;/param&gt;
        public static void Send(Uri sourceUrl, Uri targetUrl)
        {
            if (sourceUrl == null || targetUrl == null)
            {
                return;
            }

            try
            {
                var request = (HttpWebRequest)WebRequest.Create(targetUrl);
                request.Credentials = CredentialCache.DefaultNetworkCredentials;
                var response = (HttpWebResponse)request.GetResponse();
                string pingUrl = null;

                var pingUrlKeyIndex = Array.FindIndex(
                    response.Headers.AllKeys,
                    delegate(string k)
                        {
                            return k.Equals("x-pingback", StringComparison.OrdinalIgnoreCase) ||
                                   k.Equals("pingback", StringComparison.OrdinalIgnoreCase);
                        });

                if (pingUrlKeyIndex != -1)
                {
                    pingUrl = response.Headers[pingUrlKeyIndex];
                }

                Uri url;
                if (!string.IsNullOrEmpty(pingUrl) &amp;&amp; Uri.TryCreate(pingUrl, UriKind.Absolute, out url))
                {
                    OnSending(url);
                    request = (HttpWebRequest)WebRequest.Create(url);
                    request.Method = "POST";

                    // request.Timeout = 10000;
                    request.ContentType = "text/xml";
                    request.ProtocolVersion = HttpVersion.Version11;
                    request.Headers["Accept-Language"] = "en-us";
                    AddXmlToRequest(sourceUrl, targetUrl, request);
                    var response2 = (HttpWebResponse)request.GetResponse();

                    string answer;
                    using (var sr = new StreamReader(response2.GetResponseStream()))
                    {
                        answer = sr.ReadToEnd();
                    }

                    response2.Close();

                    OnSent(url);
                }
            }
            catch (Exception ex)
            {
                ex = new Exception();

                // Stops unhandled exceptions that can cause the app pool to recycle
            }
        }

        #endregion

        #region Methods

        /// &lt;summary&gt;
        /// Adds the XML to web request. The XML is the standard
        ///     XML used by RPC-XML requests.
        /// &lt;/summary&gt;
        /// &lt;param name="sourceUrl"&gt;
        /// The source Url.
        /// &lt;/param&gt;
        /// &lt;param name="targetUrl"&gt;
        /// The target Url.
        /// &lt;/param&gt;
        /// &lt;param name="webreqPing"&gt;
        /// The webreq Ping.
        /// &lt;/param&gt;
        private static void AddXmlToRequest(Uri sourceUrl, Uri targetUrl, HttpWebRequest webreqPing)
        {
            var stream = webreqPing.GetRequestStream();
            using (var writer = new XmlTextWriter(stream, Encoding.ASCII))
            {
                writer.WriteStartDocument(true);
                writer.WriteStartElement("methodCall");
                writer.WriteElementString("methodName", "pingback.ping");
                writer.WriteStartElement("params");

                writer.WriteStartElement("param");
                writer.WriteStartElement("value");
                writer.WriteElementString("string", sourceUrl.ToString());
                writer.WriteEndElement();
                writer.WriteEndElement();

                writer.WriteStartElement("param");
                writer.WriteStartElement("value");
                writer.WriteElementString("string", targetUrl.ToString());
                writer.WriteEndElement();
                writer.WriteEndElement();

                writer.WriteEndElement();
                writer.WriteEndElement();
            }
        }

        /// &lt;summary&gt;
        /// Called when [sending].
        /// &lt;/summary&gt;
        /// &lt;param name="url"&gt;The URL Uri.&lt;/param&gt;
        private static void OnSending(Uri url)
        {
            if (Sending != null)
            {
                Sending(url, new EventArgs());
            }
        }

        /// &lt;summary&gt;
        /// Called when [sent].
        /// &lt;/summary&gt;
        /// &lt;param name="url"&gt;The URL Uri.&lt;/param&gt;
        private static void OnSent(Uri url)
        {
            if (Sent != null)
            {
                Sent(url, new EventArgs());
            }
        }

        #endregion
    }
}</pre>
</div>
<p>&nbsp;</p>
<p>Die Anwendung ist auch recht einfach:</p>
<p>&nbsp;</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:792eb02d-d6f6-413b-a473-2a758df7247f" class="wlWriterEditableSmartContent">
<pre name="code" class="c#">            // source must be available from the target url (e.g. localhost doesn´t work)
            string source = "http://www.bizzbingo.com/what-is/ravendb";

            // source must contain the target link... otherwise: Error.
            string target = "http://code-inside.de/blog-in/2011/11/05/use-ravendb-as-embedded-filebase/";
            Pingback.Send(new Uri(source), new Uri(target));</pre>
</div>
<p>&nbsp;</p>
<p><strong>Die Response:</strong></p>
<p>Je nachdem ob alles gut gegangen ist oder nicht, gibt die aufgerufenen Seite auch eine Antwort. Die kann z.B. im Fehlerfall so aussehen:</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:a7911f6d-c347-484d-bca1-cadb7fb494e7" class="wlWriterEditableSmartContent">
<pre name="code" class="c#">&lt;?xml version="1.0"?&gt;
&lt;methodResponse&gt;
  &lt;fault&gt;
    &lt;value&gt;
      &lt;struct&gt;
        &lt;member&gt;
          &lt;name&gt;faultCode&lt;/name&gt;
          &lt;value&gt;&lt;int&gt;17&lt;/int&gt;&lt;/value&gt;
        &lt;/member&gt;
        &lt;member&gt;
          &lt;name&gt;faultString&lt;/name&gt;
          &lt;value&gt;&lt;string&gt;The source URL does not contain a link to the target URL, and so cannot be used as a source.&lt;/string&gt;&lt;/value&gt;
        &lt;/member&gt;
      &lt;/struct&gt;
    &lt;/value&gt;
  &lt;/fault&gt;
&lt;/methodResponse&gt;
</pre>
</div>
<p><strong></strong>&nbsp;</p>
<p>Oder im besten Fall so:</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:d6dc63a9-fe42-4da9-a1ab-e19e3a9e4d1a" class="wlWriterEditableSmartContent">
<pre name="code" class="c#">&lt;?xml version="1.0"?&gt;
&lt;methodResponse&gt;
  &lt;params&gt;
    &lt;param&gt;
      &lt;value&gt;
      &lt;string&gt;Pingback from http://www.bizzbingo.com/what-is/ravendb to http://code-inside.de/blog-in/2011/11/05/use-ravendb-as-embedded-filebase/ registered. Keep the web talking! <img src='http://code-inside.de/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> &lt;/string&gt;
      &lt;/value&gt;
    &lt;/param&gt;
  &lt;/params&gt;
&lt;/methodResponse&gt;
</pre>
</div>
<p>&nbsp;</p>
<p>Die Fehlercodes finden sich auch in der <a href="http://www.hixie.ch/specs/pingback/pingback">Spezifikation</a> wieder.</p>
<p><strong> P</strong><strong>roblematisch: Spam</strong></p>
<p>Pingbacks sind vom Prinzip her eine gute Sache, können allerdings leicht ausgenutzt werden, daher werden Sie entweder durch Blogspam-Filter (wie <a href="http://akismet.com/">Akismet</a>) herausgefiltert oder gar nicht mehr angezeigt. Spammer nutzen gerne diese Schnittstelle um Links auf allen möglichen Seiten abzulegen. Mein Blogtemplate z.B. zeigt keine Pingbacks an. Vermutlich muss die Quelle erst einen gewissen Grad an Reputation haben um nicht mehr als Spam für <a href="http://blog.akismet.com/2010/04/22/state-of-web-spam/">Akismet &amp; co.</a> zu gelten. </p>
<p><a href="http://code.google.com/p/code-inside/source/browse/#git%2F2011%2Fpingback"><strong>[ Code @ Google Code ]</strong></a></p>
<img src="http://feeds.feedburner.com/~r/Code-insideBlog/~4/1E72o_eloY8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://code-inside.de/blog/2011/11/28/wie-funktionieren-pingbacks-und-wie-kann-man-pingbacks-ber-net-versenden/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://code-inside.de/blog/2011/11/28/wie-funktionieren-pingbacks-und-wie-kann-man-pingbacks-ber-net-versenden/</feedburner:origLink></item>
		<item>
		<title>Pragmatische Softwareentwicklung</title>
		<link>http://feedproxy.google.com/~r/Code-insideBlog/~3/KB5TTqJzWBs/</link>
		<comments>http://code-inside.de/blog/2011/11/27/pragmatische-softwareentwicklung/#comments</comments>
		<pubDate>Sun, 27 Nov 2011 22:38:46 +0000</pubDate>
		<dc:creator>Robert Mühsig</dc:creator>
				<category><![CDATA[Allgemein]]></category>

		<guid isPermaLink="false">http://code-inside.de/blog/?p=3927</guid>
		<description><![CDATA[<div><img width="150" height="150" src="http://code-inside.de/blog/wp-content/uploads/image1410-150x150.png" class="attachment-thumbnail wp-post-image" alt="image.png" title="image.png" style="margin-bottom: 15px;" /></div>Stellt einem Softwareentwickler mal die Frage, ob der Code den er vor ein oder zwei Jahren geschrieben hat immer noch gut findet. Meistens ist die Antwort: Würde ich heute anders machen. Diesen Prozess habe ich sowohl in dienstlichen Projekten als auch in Privatprojekten mehr als einmal festgestellt. In die Liste der größeren Privatprojekte gehören ShoppingMap ...]]></description>
			<content:encoded><![CDATA[<div><img width="150" height="150" src="http://code-inside.de/blog/wp-content/uploads/image1410-150x150.png" class="attachment-thumbnail wp-post-image" alt="image.png" title="image.png" style="margin-bottom: 15px;" /></div><p>Stellt einem Softwareentwickler mal die Frage, ob der Code den er vor ein oder zwei Jahren geschrieben hat immer noch gut findet. Meistens ist die Antwort: Würde ich heute anders machen. </p>
<p>Diesen Prozess habe ich sowohl in dienstlichen Projekten als auch in Privatprojekten mehr als einmal festgestellt. In die Liste der größeren Privatprojekte gehören <a href="http://code-inside.de/blog/2007/09/30/microsoft-ajax-amazon-windows-live-bildersuche-style-shoppingmap/">ShoppingMap von 2007</a>, <a href="http://code-inside.de/blog/2008/06/03/howtocode-youread-community-getriebene-professionelle-applikationsentwicklung/">ReadYou von 2008</a>, <a href="http://code-inside.de/blog/2009/09/06/diesachsende/">DieSachsen.de von 2009</a> und <a href="http://code-inside.de/blog/2011/01/06/bullshit-bingo-online-mit-bizzbingo-rtw/">BizzBingo.com von 2011</a>. </p>
<p><strong>Bei jedem Projektstart geht einem daher immer wieder dasselbe durch den Kopf:</strong></p>
<p><a href="http://code-inside.de/blog/wp-content/uploads/image1411.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://code-inside.de/blog/wp-content/uploads/image_thumb589.png" width="514" height="403"></a></p>
<p><em>(</em><a href="http://www.bonkersworld.net/building-software/"><em>Bildquelle</em></a> – schaut euch auch mal die anderen Comics an, sind einige Gute dabei<em>)</em></p>
<p><strong>Der Weg ist nicht immer das Ziel</strong></p>
<p>Man lernt recht schnell, dass es nicht <strong>den</strong> <u>richtigen </u>Weg gibt um Software zu entwickeln. Es gibt dutzende Programmiersprachen, Frameworks und Konzepte. D.h. es gibt zwangläufig auch mehrere Wege das Ziel zu erreichen. Man muss sich im klaren werden: </p>
<p><strong>Was ist das Ziel?</strong> </p>
<p>Möchte man einfach nur in eine Technologie reinschauen, dann kann man bauen was man möchte. Hat man jedoch ein konkretes Ziel im Auge, sollte man sich überlegen: <strong>Was bringt mich meinem Ziel näher?</strong> Brauch ich eine <a href="http://code-inside.de/blog/2008/08/13/howtocode-readyou-evolution-der-architektur/">5 Schichten Architektur, mit Response/Request Gedöns</a> und muss ich streng gläubig nach TDD vorgehen? Muss ich mein Loginsystem jetzt mit der Windows-Identity Foundation ausstatten? Oder möchte ich einfach nur ein paar ganz triviale Daten so einfach wie möglich abspeichern?</p>
<p><strong>Und wie verhindert man das Chaos?</strong></p>
<p>Meist kommt das Chaos zustande, weil man zu viele Sachen gleichzeitig haben will. Man hat dutzende Ideen oder dutzende Feature Requests vom Kunden und natürlich muss alles bereits von Version 1, aber mindestens ab Version 2 dabei sein. Das heißt natürlich, man muss sich für alle Eventualitäten sichern. </p>
<p>Meistens endet sowas in einer völlig aufgeblasenen Architektur: Kanonen auf Spatzen oder die Kanone zielt wo ganz anders hin. </p>
<p><u>Die Software in kleinen Schritten entwickeln und immer wieder prüfen ob das Gebilde immer noch </u><a href="http://en.wikipedia.org/wiki/SOLID_(object-oriented_design)"><u>“in Takt”</u></a><u> ist hilft dem Chaos Herr zu werden.</u></p>
<p><a href="http://code-inside.de/blog/wp-content/uploads/image1412.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://code-inside.de/blog/wp-content/uploads/image_thumb590.png" width="436" height="359"></a></p>
<p>(<a href="http://lostechies.com/derickbailey/2009/02/11/solid-development-principles-in-motivational-pictures/">Quelle</a>)</p>
<p><strong>Meine Empfehlung:</strong></p>
<p>Wenn man ein Projekt entwickelt, was irgendwann einmal etwas sinnvolles tun möchte (!= Lernprojekte zum Rumspielen), dann geht in winzigen Schritten voran. <a href="http://code-inside.de/blog/2010/12/15/howtocode-development-at-the-speed-and-scale-of-google-continuous-deliveryx/">Continuous Delivery</a> kann ein Weg sein um schnell Antworten zu bekommen. Viele der Anforderung an die Software werden sich im Projektverlauf ohnehin noch ändern. Bei anderen Sachen gilt: <a href="http://code-inside.de/blog/2011/11/04/keep-it-simple-yagni/">YAGNI</a>. </p>
<p><strong>Konzentration aufs Wesentliche:</strong> </p>
<p>Welchen Zweck soll die Software erfüllen und wie kann man dies am einfachsten erreichen – ganz ohne Mondraketen-Architektur. Software baut man nicht “weil man es kann”, sondern weil man ein Bedürfnis/Zweck erfüllen möchte. Den richtigen Weg das zu tun gibt es nicht und solange der Zweck erfüllt ist, ist doch alles andere auch egal.</p>
<img src="http://feeds.feedburner.com/~r/Code-insideBlog/~4/KB5TTqJzWBs" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://code-inside.de/blog/2011/11/27/pragmatische-softwareentwicklung/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://code-inside.de/blog/2011/11/27/pragmatische-softwareentwicklung/</feedburner:origLink></item>
		<item>
		<title>Built with Bootstrap–Beispiele von Twitter Bootstrap</title>
		<link>http://feedproxy.google.com/~r/Code-insideBlog/~3/uP8tAXQUFJ4/</link>
		<comments>http://code-inside.de/blog/2011/11/25/built-with-bootstrapbeispiele-von-twitter-bootstrap/#comments</comments>
		<pubDate>Fri, 25 Nov 2011 22:01:58 +0000</pubDate>
		<dc:creator>Robert Mühsig</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Bootstrap]]></category>
		<category><![CDATA[Twitter]]></category>
		<category><![CDATA[UI]]></category>

		<guid isPermaLink="false">http://code-inside.de/blog/?p=3917</guid>
		<description><![CDATA[<div><img width="150" height="150" src="http://code-inside.de/blog/wp-content/uploads/image1404-150x150.png" class="attachment-thumbnail wp-post-image" alt="image.png" title="image.png" style="margin-bottom: 15px;" /></div>Vor einiger Zeit bin ich auf den “UI-Baukasten” von Twitter namens Bootstrap aufmerksam geworden und verfolge die Diskussionen und das Projekt auf GitHub. Nun bin ich auf eine ganz interessante Seite gestoßen, welche Webseiten listet, welche mit Bootstrap umgesetzt worden sind: Built with Bootstrap Warum ich die Idee ganz cool finde &#38; Bootstrap awesome ist ...]]></description>
			<content:encoded><![CDATA[<div><img width="150" height="150" src="http://code-inside.de/blog/wp-content/uploads/image1404-150x150.png" class="attachment-thumbnail wp-post-image" alt="image.png" title="image.png" style="margin-bottom: 15px;" /></div><p>Vor einiger Zeit bin ich auf den <a href="http://code-inside.de/blog/2011/10/07/twitter-bootstrap-als-ui-baukasten/">“UI-Baukasten” von Twitter namens Bootstrap</a> aufmerksam geworden und verfolge die <a href="http://groups.google.com/group/twitter-bootstrap">Diskussionen</a> und das Projekt auf <a href="https://github.com/twitter/bootstrap">GitHub</a>. Nun bin ich auf eine ganz interessante Seite gestoßen, welche Webseiten listet, welche mit Bootstrap umgesetzt worden sind:</p>
<p><a href="http://builtwithbootstrap.tumblr.com/"><strong>Built with Bootstrap</strong></a></p>
<p><a href="http://builtwithbootstrap.tumblr.com/"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://code-inside.de/blog/wp-content/uploads/image1409.png" width="426" height="457"></a></p>
<p><strong>Warum ich die Idee ganz cool finde &amp; Bootstrap awesome ist</strong></p>
<p>Ich (als Entwickler und “Nicht-Designer”) begrüßte das Bootstrap Projekt sehr – es bietet bereits ein großes Spektrum an Grundfunktionalität und sieht ohne großes dazutun schick aus.</p>
<p>Über die Seite <a href="http://builtwithbootstrap.tumblr.com/">Build With Bootstrap</a> sieht man eine große Bandbreite von Seiten und kann sehen wie Bootstrap in echt verwendet werden kann.</p>
<p><strong>Beispiele:</strong></p>
<p>Es gibt einige Seite, welche sehr “Twitter-look-a-like” sind:</p>
<p><a href="https://www.opschannel.com/">OpsChannel.com</a></p>
<p><a href="https://www.opschannel.com/"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://code-inside.de/blog/wp-content/uploads/image1406.png" width="427" height="260"></a></p>
<p>Hingegen gibt es auch Seiten, an dem man erst im zweiten Moment die Standard Bootstrap Elemente erkennt:</p>
<p><a href="https://nicemetrics.com/">nicemetrics.com</a></p>
<p><a href="https://nicemetrics.com/"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://code-inside.de/blog/wp-content/uploads/image1407.png" width="426" height="359"></a></p>
<p>… oder <a href="http://www.goncalorodrigues.com/">www.goncalorodrigues.com</a></p>
<p><a href="http://www.goncalorodrigues.com/"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://code-inside.de/blog/wp-content/uploads/image1408.png" width="432" height="391"></a></p>
<p><strong>Weitere Beispiele auf <a href="http://builtwithbootstrap.tumblr.com/">Built With Bootstrap</a></strong></p>
<p>Die Beispiele auf der Seite geben IMHO ein recht guten Einblick, wie man z.B. auch Bootstrap verwenden kann und was optisch machbar ist. </p>
<img src="http://feeds.feedburner.com/~r/Code-insideBlog/~4/uP8tAXQUFJ4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://code-inside.de/blog/2011/11/25/built-with-bootstrapbeispiele-von-twitter-bootstrap/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://code-inside.de/blog/2011/11/25/built-with-bootstrapbeispiele-von-twitter-bootstrap/</feedburner:origLink></item>
		<item>
		<title>Kostenlose Icons im Metro Look–Monochrom/Minimalist Icons</title>
		<link>http://feedproxy.google.com/~r/Code-insideBlog/~3/akXaKUahdDY/</link>
		<comments>http://code-inside.de/blog/2011/11/25/kostenlose-icons-im-metro-lookmonochromminimalist-icons/#comments</comments>
		<pubDate>Fri, 25 Nov 2011 00:35:54 +0000</pubDate>
		<dc:creator>Robert Mühsig</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Icon]]></category>
		<category><![CDATA[Icons]]></category>
		<category><![CDATA[Metro]]></category>
		<category><![CDATA[Mono]]></category>

		<guid isPermaLink="false">http://code-inside.de/blog/?p=3907</guid>
		<description><![CDATA[<div><img width="150" height="150" src="http://code-inside.de/blog/wp-content/uploads/image1397-150x150.png" class="attachment-thumbnail wp-post-image" alt="image.png" title="image.png" style="margin-bottom: 15px;" /></div>Momentan liegt es voll im Trend ein Design mit schlichter eleganz zu entwerfen. Insbesondere das Metro Design, welche Microsoft auf breiter Front in immer mehr Produkten einsetzt, zeigt dies recht deutlich. Natürlich müssen auch passende Icons gefunden werden, daher hier mal einige kostenlose Empfehlungen, welche auch für kommerzielle Projekte genutzt werden können: Bei den nachfolgenden ...]]></description>
			<content:encoded><![CDATA[<div><img width="150" height="150" src="http://code-inside.de/blog/wp-content/uploads/image1397-150x150.png" class="attachment-thumbnail wp-post-image" alt="image.png" title="image.png" style="margin-bottom: 15px;" /></div><p>Momentan liegt es voll im Trend ein Design mit schlichter eleganz zu entwerfen. Insbesondere das Metro Design, welche Microsoft auf breiter Front in immer mehr Produkten einsetzt, zeigt dies recht deutlich. Natürlich müssen auch passende Icons gefunden werden, daher hier mal einige <strong>kostenlose</strong> Empfehlungen, welche auch für kommerzielle Projekte genutzt werden können:</p>
<p><em><em>Bei den nachfolgenden Icons hatte ich nichts “negatives” feststellen können.</em>Bitte prüft trotzdem vorher die Lizenzbestimmungen der jeweiligen Icon Designer! Die Lizenzbestimmung kann sich jederzeit ändern. Zudem muss darauf geachtet werden, ob der Designer mit erwähnt werden muss oder nicht.</em></p>
<p><em>&nbsp;</em><strong><a href="http://thenounproject.com/">The Noun Project</a></strong></p>
<p><a href="http://code-inside.de/blog/wp-content/uploads/image1398.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://code-inside.de/blog/wp-content/uploads/image_thumb580.png" width="488" height="446"></a></p>
<p><strong><a href="http://icons8.com/download-huge-windows8-set/">Icons8</a></strong></p>
<p>Angelehnt an Windows 8 + man kann Vorschläge für neue Icons machen! Es kommen <strong>täglich</strong> neue dazu!</p>
<p><a href="http://code-inside.de/blog/wp-content/uploads/image1399.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://code-inside.de/blog/wp-content/uploads/image_thumb581.png" width="391" height="471"></a></p>
<p><strong><a href="http://somerandomdude.com/work/iconic/">somerandomdude</a></strong></p>
<p>Hier gibt es auch mehrere Iconsets – auch für “spezial-Fälle” wie z.B. Multitouch Anwendungen</p>
<p><a href="http://code-inside.de/blog/wp-content/uploads/image1400.png"><strong><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://code-inside.de/blog/wp-content/uploads/image_thumb582.png" width="482" height="486"></strong></a></p>
<p><a href="http://pc.de/icons/"><strong>PC.de</strong></a></p>
<p>Auf dieser Seite gibt es diverse Abwandlungen dieser Icons:</p>
<p><a href="http://code-inside.de/blog/wp-content/uploads/image1401.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://code-inside.de/blog/wp-content/uploads/image_thumb583.png" width="358" height="261"></a></p>
<p><strong><a href="http://www.tutorial9.net/downloads/108-mono-icons-huge-set-of-minimal-icons/">108 MONO Icons</a></strong></p>
<p><a href="http://code-inside.de/blog/wp-content/uploads/image1402.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://code-inside.de/blog/wp-content/uploads/image_thumb584.png" width="346" height="253"></a></p>
<p><a href="http://www.smashingmagazine.com/2010/07/14/gcons-free-all-purpose-icons-for-designers-and-developers-100-icons-psd/"><strong>gCon @ smashingMagazin</strong></a></p>
<p><a href="http://code-inside.de/blog/wp-content/uploads/image1403.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://code-inside.de/blog/wp-content/uploads/image_thumb585.png" width="342" height="339"></a></p>
<p><strong>Weitere Icons</strong></p>
<p>Der Suchbegriff “<a href="http://www.google.com/search?gcx=w&amp;sourceid=chrome&amp;ie=UTF-8&amp;q=monochrom+icons">monochrom Icons</a>” bringt recht viel Ergebnisse, so z.B. auch diverse andere <a href="http://spyrestudios.com/minimalist-icon-symbol-pictogram-sets/">Iconsammlungen</a>. Auch hier gilt natürlich: Die Lizenz muss beachtet werden, insbesondere bei deviantart sind viele Sachen nur für den Privatgebrauch bestimmt!</p>
<p><strong>Ein Blick in die Vergangenheit</strong></p>
<p>Vor 3 Jahren hatte ich ein <a href="http://code-inside.de/blog/2008/04/15/icons-icons-icons-kostenlos/">ähnlichen Blogpost</a> geschrieben, allerdings waren damals die Icons wesentlich bunter und im 3D Look. Ich bin gespannt was in 3 Jahren dann sein wird.</p>
<img src="http://feeds.feedburner.com/~r/Code-insideBlog/~4/akXaKUahdDY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://code-inside.de/blog/2011/11/25/kostenlose-icons-im-metro-lookmonochromminimalist-icons/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://code-inside.de/blog/2011/11/25/kostenlose-icons-im-metro-lookmonochromminimalist-icons/</feedburner:origLink></item>
		<item>
		<title>“Duplicate Content” mit IIS7 vermeiden–Domain mit www oder ohne</title>
		<link>http://feedproxy.google.com/~r/Code-insideBlog/~3/Tf0JgTajDK4/</link>
		<comments>http://code-inside.de/blog/2011/11/25/duplicate-content-mit-iis7-vermeidendomain-mit-www-oder-ohne/#comments</comments>
		<pubDate>Thu, 24 Nov 2011 23:31:29 +0000</pubDate>
		<dc:creator>Robert Mühsig</dc:creator>
				<category><![CDATA[HowTo]]></category>
		<category><![CDATA[IIS]]></category>
		<category><![CDATA[SEO]]></category>

		<guid isPermaLink="false">http://code-inside.de/blog/2011/11/25/duplicate-content-mit-iis7-vermeidendomain-mit-www-oder-ohne/</guid>
		<description><![CDATA[Wer eine Domain wie z.B. “foobar.de” besitzt steht vor der Wahl: Mit oder ohne www? www oder ohne www? Was genau besser ist, kann man nicht genau sagen. Ich persönlich finde die www. Variante mittlerweile besser. Der Grund lieg hier, dass man für die “www” Subdomain einen C-Name setzen kann. Der C-Name ist z.B. entscheidend, ...]]></description>
			<content:encoded><![CDATA[<p>Wer eine Domain wie z.B. “foobar.de” besitzt steht vor der Wahl: Mit oder ohne www? </p>
<p><strong>www oder ohne www?</strong></p>
<p>Was genau besser ist, kann man nicht genau sagen. Ich persönlich finde die www. Variante mittlerweile besser. Der Grund lieg hier, dass man für die “www” Subdomain einen C-Name setzen kann. Der <a href="http://code-inside.de/blog/2010/12/16/howto-eigene-domains-auf-windows-azure-applikationen-mappen-cloudapp-net/">C-Name ist z.B. entscheidend</a>, wenn man die eigene Webanwendung über seine eigene Domain auf Windows Azure betreiben will. </p>
<p>Spontan habe ich dazu <a href="http://www.sitepoint.com/www-or-no-www/">noch</a> <a href="http://www.codinghorror.com/blog/2008/04/the-great-dub-dub-dub-debate.html">zwei</a> Artikel gefunden, welche allerdings schon etwas älter sind.</p>
<p><strong>Wichtig: Man muss sich entscheiden</strong></p>
<p>Wenn die Website sowohl mit www als auch ohne www aufrufbar ist, dann Werte Google den <a href="http://www.google.com/support/webmasters/bin/answer.py?answer=66359">Content als “doppelt”</a> – dies wirkt sich negativ auf die <strike>Suchmaschienen</strike>Google-Optimierung aus.</p>
<p><strong>Wie kann man dies am einfachsten im IIS erreichen</strong></p>
<p><a href="http://code-inside.de/blog/wp-content/uploads/image1394.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px 5px 0px 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" align="left" src="http://code-inside.de/blog/wp-content/uploads/image_thumb576.png" width="158" height="240"></a></p>
<p>Mein Blog z.B. soll nur über die non-www Variante aufrufbar sein, dafür habe ich die Site “Code Inside” angelegt. Diese Seite hört auch nur auf <strong>code-inside.de</strong>.</p>
<p>Die andere Seite “www.code-inside.de” hört hingegen nur auf die www-Variante.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><strong>Redirect in IIS</strong></p>
<p>Nun gibt es im IIS eine recht einfache Möglichkeit ein Redirect einzustellen:</p>
<p><a href="http://code-inside.de/blog/wp-content/uploads/image1395.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://code-inside.de/blog/wp-content/uploads/image_thumb577.png" width="430" height="376"></a></p>
<p>Dort die entsprechende Zieladresse eingeben und den Status auf “Permanent (301)” setzen.</p>
<p><a href="http://code-inside.de/blog/wp-content/uploads/image1396.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://code-inside.de/blog/wp-content/uploads/image_thumb578.png" width="244" height="197"></a></p>
<p>Diese Variante funktioniert, kann aber dazu führen, dass man recht viele “Dummy” Seiten im IIS hat, welche nur für ein Redirect zuständig sind. Diese Variante würde ich aber als recht einfach sehen und welche auch schnell zu machen ist – funktioniert jedenfalls bei mir <img src='http://code-inside.de/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p><strong>Andere Variante: Über web.config </strong></p>
<p>Natürlich gibt es noch mehrere andere Methoden, so kann man im IIS über <a href="http://learn.iis.net/page.aspx/460/using-the-url-rewrite-module/">Rewrite Rules</a> einiges machen. Allerdings bin ich ganz ehrlich: Direkt beschäftigt hab ich mich damit noch nicht. Vielleicht hat jemand den passenden Snippet für die Umleitung von www zu non-www und umgekehrt parat <img src='http://code-inside.de/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<img src="http://feeds.feedburner.com/~r/Code-insideBlog/~4/Tf0JgTajDK4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://code-inside.de/blog/2011/11/25/duplicate-content-mit-iis7-vermeidendomain-mit-www-oder-ohne/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://code-inside.de/blog/2011/11/25/duplicate-content-mit-iis7-vermeidendomain-mit-www-oder-ohne/</feedburner:origLink></item>
		<item>
		<title>oEmbed–3rd Party Content (Video/Bilder/…) auf die eigene Seite einbetten</title>
		<link>http://feedproxy.google.com/~r/Code-insideBlog/~3/nawok-RwNB8/</link>
		<comments>http://code-inside.de/blog/2011/11/22/oembed3rd-party-content-videobilder-auf-die-eigene-seite-einbetten/#comments</comments>
		<pubDate>Tue, 22 Nov 2011 01:40:38 +0000</pubDate>
		<dc:creator>Robert Mühsig</dc:creator>
				<category><![CDATA[HowTo]]></category>
		<category><![CDATA[oEmbed]]></category>

		<guid isPermaLink="false">http://code-inside.de/blog/?p=3883</guid>
		<description><![CDATA[<div><img width="150" height="150" src="http://code-inside.de/blog/wp-content/uploads/image1392-150x150.png" class="attachment-thumbnail wp-post-image" alt="image.png" title="image.png" style="margin-bottom: 15px;" /></div>Content von anderen Seiten, z.B. YouTube, Flickr, Slideshare auf die eigene Seite einzubetten ist auf den ersten Blick immer nur schwer möglich. Insbesondere wenn man dies “automatisiert” anhand der URL machen möchte. Wie die Einbettung erfolgt hängt stark vom Content ab – bei YouTube und co. muss ein Videoplayer zum Einsatz kommen, Slideshare und co. ...]]></description>
			<content:encoded><![CDATA[<div><img width="150" height="150" src="http://code-inside.de/blog/wp-content/uploads/image1392-150x150.png" class="attachment-thumbnail wp-post-image" alt="image.png" title="image.png" style="margin-bottom: 15px;" /></div><p>Content von anderen Seiten, z.B. YouTube, Flickr, Slideshare auf die eigene Seite einzubetten ist auf den ersten Blick immer nur schwer möglich. Insbesondere wenn man dies “automatisiert” anhand der URL machen möchte. Wie die Einbettung erfolgt hängt stark vom Content ab – bei YouTube und co. muss ein Videoplayer zum Einsatz kommen, Slideshare und co. nehmen Flash/JS für die Präsentationen. Allerdings gibt es einen Standard, welche genau diesen Fall abdecken möchte: <a href="http://oembed.com/">oEmbed</a>.</p>
<p><strong>Ziel von oEmbed</strong></p>
<p>oEmbed soll eine einheitliche Schnittstelle sein, über den der eigene Content von anderen Seiten eingebettet werden kann. Es gibt einige große Namen, welche oEmbed unterstützen, darunter YouTube und Flickr:</p>
<p><strong>Beispiel Flickr:</strong></p>
<p>Der Client ruft diese URL auf:</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:c0f0885e-4603-4d8a-af93-59984ad912ca" class="wlWriterEditableSmartContent">
<pre name="code" class="c#">http://www.flickr.com/services/oembed/?url=http%3A//www.flickr.com/photos/bees/2341623661/</pre>
</div>
<p>&nbsp;</p>
<p>Und bekommt als Antwort:</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:107f45b2-dba6-42a7-88de-8e209262b0ad" class="wlWriterEditableSmartContent">
<pre name="code" class="c#">{
	"version": "1.0",
	"type": "photo",
	"width": 240,
	"height": 160,
	"title": "ZB8T0193",
	"url": "http://farm4.static.flickr.com/3123/2341623661_7c99f48bbf_m.jpg",
	"author_name": "Bees",
	"author_url": "http://www.flickr.com/photos/bees/",
	"provider_name": "Flickr",
	"provider_url": "http://www.flickr.com/"
}</pre>
</div>
<p><strong>Beispiel YouTube:</strong></p>
<p>Aufruf:</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:01e64ad9-55cb-4467-893e-ea4332ea0355" class="wlWriterEditableSmartContent">
<pre name="code" class="c#">http://www.youtube.com/oembed?url=http%3A//youtube.com/watch%3Fv%3DM3r2XDceM6A&amp;format=json</pre>
</div>
<p>Antwort:</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:04b1503b-8fae-4912-bd8f-de81964cb6c7" class="wlWriterEditableSmartContent">
<pre name="code" class="c#">{
	"version": "1.0",
	"type": "video",
	"provider_name": "YouTube",
	"provider_url": "http://youtube.com/",
	"width": 425,
	"height": 344,
	"title": "Amazing Nintendo Facts",
	"author_name": "ZackScott",
	"author_url": "http://www.youtube.com/user/ZackScott",
	"html":
		"&lt;object width=\"425\" height=\"344\"&gt;
			&lt;param name=\"movie\" value=\"http://www.youtube.com/v/M3r2XDceM6A&amp;fs=1\"&gt;&lt;/param&gt;
			&lt;param name=\"allowFullScreen\" value=\"true\"&gt;&lt;/param&gt;
			&lt;param name=\"allowscriptaccess\" value=\"always\"&gt;&lt;/param&gt;
			&lt;embed src=\"http://www.youtube.com/v/M3r2XDceM6A&amp;fs=1\"
				type=\"application/x-shockwave-flash\" width=\"425\" height=\"344\"
				allowscriptaccess=\"always\" allowfullscreen=\"true\"&gt;&lt;/embed&gt;
		&lt;/object&gt;",
}</pre>
</div>
<p>&nbsp;</p>
<p>Insbesondere bei dem YouTube Beispiel kommt die Idee zum Tragen: Im HTML Property steht der komplette Code zum Einbinden des YouTube Players.</p>
<p><strong>oEmbed Rückgaben</strong></p>
<p>Laut Standard kann als Ergebnis entweder XML oder JSON zurückkommen, allerdings ist heute JSON eher gebräuchlich. YouTube unterstützt aber z.B. beides.</p>
<p><strong>jQuery oEmbed Bibliothek</strong></p>
<p>Es gibt auch eine <a href="http://code.google.com/p/jquery-oembed/">jQuery Bibliothek</a> um diese Services abzufragen. Dabei wird auf <a href="http://code-inside.de/blog/2009/12/11/howto-cross-domain-ajax-mit-jsonp-und-asp-net/">JSONP</a> zurückgegriffen.</p>
<p><strong>embed.ly – oEmbed Hub</strong></p>
<p><a href="http://code-inside.de/blog/wp-content/uploads/image1393.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px 5px 0px 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" align="left" src="http://code-inside.de/blog/wp-content/uploads/image_thumb575.png" width="186" height="72"></a></p>
<p>Durch oEmbed ist das Format vorgegeben, jedoch muss man trotzdem dutzende Provider einzeln anfragen und die entsprechenden URLs wissen. Mit dem Dienst embed.ly kann man auch auf eine Art “Hub” zurückgreifen. <strong>Embed.ly</strong> stellt einen oEmbed Endpunkt bereit und man kann <a href="http://embed.ly/providers">“fast” jede Adresse</a> an embed.ly senden und man bekommt meist eine passende Antwort.</p>
<p>embed.ly selbst kann einfach über das jQuery Plugin angesprochen werden. </p>
<p><strong>embed.ly – Kostenpunkt</strong></p>
<p>embed.ly hat allerdings auch einen Haken: Es ist nicht kostenlos. Es gibt allerdings <a href="http://embed.ly/pricing">einen kostenfreien Account-Typ (nach unten scrollen!).</a> Über diesen Account kann man monatlich 10.000 Aufrufe machen. Danach sind die <a href="http://embed.ly/pricing">Preise</a> gestaffelt.</p>
<p><strong>Für wen ist embed.ly und oEmbed interessant?</strong></p>
<p>Allen voran ist die offensichtlichste Nutzung bei “Link-Sharing” Seiten wie Digg.com etc. Allerdings bekommt man auch über die pure URL ein paar Meta-Informationen raus, sodass man sich u.a. auch die Anbindung an eine komplexe API sparen kann.</p>
<p><strong>Selbst ausprobieren auf embed.ly</strong></p>
<p>embed.ly stellt ein “<a href="http://embed.ly/docs/explore/oembed?url=http%3A%2F%2Fvimeo.com%2F18150336">Test-Client</a>” bereit über den man ein Gefühl dafür bekommt, welche Ergebnisse man erwarten kann. </p>
<img src="http://feeds.feedburner.com/~r/Code-insideBlog/~4/nawok-RwNB8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://code-inside.de/blog/2011/11/22/oembed3rd-party-content-videobilder-auf-die-eigene-seite-einbetten/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://code-inside.de/blog/2011/11/22/oembed3rd-party-content-videobilder-auf-die-eigene-seite-einbetten/</feedburner:origLink></item>
		<item>
		<title>IIS7 “Method not allowed”–REST + WebDAV Modul</title>
		<link>http://feedproxy.google.com/~r/Code-insideBlog/~3/iDgUUCM5ahk/</link>
		<comments>http://code-inside.de/blog/2011/11/20/iis7-method-not-allowedrest-webdav-modul/#comments</comments>
		<pubDate>Sun, 20 Nov 2011 17:44:31 +0000</pubDate>
		<dc:creator>Robert Mühsig</dc:creator>
				<category><![CDATA[HowTo]]></category>
		<category><![CDATA[IIS7]]></category>
		<category><![CDATA[REST]]></category>

		<guid isPermaLink="false">http://code-inside.de/blog/2011/11/20/iis7-method-not-allowedrest-webdav-modul/</guid>
		<description><![CDATA[Wer mit “REST” Services im IIS arbeitet, wird den Fehler kennen: “Method not allowed”. In diesem Blogpost hatte ich beschrieben, wie man die richtige Konfiguration per Web.config setzen kann. Allerdings hatte ich nun den Fall, dass das RavenDB Studio nicht so wollte und ich wollte die web.config auch nicht groß editieren. Häufige Fehlerquelle: Das WebDAV ...]]></description>
			<content:encoded><![CDATA[<p>Wer mit “REST” Services im IIS arbeitet, wird den Fehler kennen: <strong>“Method not allowed”</strong>. In <a href="http://code-inside.de/blog/2011/10/11/http-putdelete-via-web-config-im-iis7-fr-asp-net-mvc-erlauben/">diesem Blogpost</a> hatte ich beschrieben, wie man die richtige Konfiguration per Web.config setzen kann. Allerdings hatte ich nun den Fall, dass das RavenDB Studio nicht so wollte und ich wollte die web.config auch nicht groß editieren.</p>
<p><strong>Häufige Fehlerquelle: Das WebDAV Modul</strong></p>
<p>Wenn im IIS noch WebDAV aktiviert ist, dann kommt dies Fehlermeldung meistens, weil es Überschneidungen mit dem WebDAV Modul gibt. Daher sollte man sicher gehen, dass man es entweder via web.config deaktiviert hat:</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:3651b7ab-87db-4cd1-be7f-aa92b14b0580" class="wlWriterEditableSmartContent">
<pre name="code" class="c#">	&lt;system.webServer&gt;
		...
        &lt;modules&gt;
            &lt;remove name="WebDAVModule" /&gt;
        &lt;/modules&gt;
	&lt;/system.webServer&gt;</pre>
</div>
<p>… und wenn dies nicht hilft, dann nochmal kontrollieren ob die Einstellung auch greift. Zur Not kann man das Modul auch über den IIS Manager entfernen:</p>
<p><a href="http://code-inside.de/blog/wp-content/uploads/image1390.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://code-inside.de/blog/wp-content/uploads/image_thumb572.png" width="412" height="324"></a></p>
<p><strong>Wichtig: Es kann viele Fehlerquellen geben. </strong></p>
<p>Im IIS kann man jedem Modul die entsprechenden Verben zuordnen:</p>
<p><a href="http://code-inside.de/blog/wp-content/uploads/image1391.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://code-inside.de/blog/wp-content/uploads/image_thumb573.png" width="498" height="504"></a></p>
<p>Allerdings ist das recht kompliziert und im Regelfall sollte man nicht alles verstellen <img src='http://code-inside.de/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<img src="http://feeds.feedburner.com/~r/Code-insideBlog/~4/iDgUUCM5ahk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://code-inside.de/blog/2011/11/20/iis7-method-not-allowedrest-webdav-modul/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://code-inside.de/blog/2011/11/20/iis7-method-not-allowedrest-webdav-modul/</feedburner:origLink></item>
		<item>
		<title>YouTube API – Video Meta Daten über .NET abrufen</title>
		<link>http://feedproxy.google.com/~r/Code-insideBlog/~3/wSyxbvF0H0Q/</link>
		<comments>http://code-inside.de/blog/2011/11/15/youtube-api-video-meta-daten-ber-net-abrufen/#comments</comments>
		<pubDate>Tue, 15 Nov 2011 00:22:43 +0000</pubDate>
		<dc:creator>Robert Mühsig</dc:creator>
				<category><![CDATA[HowTo]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[GData]]></category>
		<category><![CDATA[YouTube]]></category>

		<guid isPermaLink="false">http://code-inside.de/blog/2011/11/15/youtube-api-video-meta-daten-ber-net-abrufen/</guid>
		<description><![CDATA[<div><img width="150" height="150" src="http://code-inside.de/blog/wp-content/uploads/image1387.png" class="attachment-thumbnail wp-post-image" alt="image.png" title="image.png" style="margin-bottom: 15px;" /></div>Vor sehr, sehr langer Zeit hatte ich drüber gebloggt, wie man mit den Google Data APIs auf YouTube zugreift. Da einige Zeit vergangen ist, gibt es natürlich auch neue Wege wie man nun die Daten abrufen kann. Google stellt für YouTube eine “einfachere” Schnittstelle zur Verfügung. Wer low-Level HTTP calls machen möchte, der kann dies ...]]></description>
			<content:encoded><![CDATA[<div><img width="150" height="150" src="http://code-inside.de/blog/wp-content/uploads/image1387.png" class="attachment-thumbnail wp-post-image" alt="image.png" title="image.png" style="margin-bottom: 15px;" /></div><p>Vor <a href="http://code-inside.de/blog/2008/01/09/howto-youtube-mit-c-durchsuchen-einstieg-in-die-youtube-api-google-data-api/">sehr, sehr langer Zeit hatte ich drüber gebloggt</a>, wie man mit den <a href="http://code.google.com/apis/youtube/getting_started.html#data_api">Google Data APIs</a> auf YouTube zugreift. Da einige Zeit vergangen ist, gibt es natürlich auch neue Wege wie man nun die Daten abrufen kann. Google stellt für YouTube eine “einfachere” Schnittstelle zur Verfügung. Wer low-Level HTTP calls machen möchte, der kann <a href="http://code.google.com/apis/youtube/2.0/developers_guide_protocol_audience.html">dies natürlich auch machen</a>.</p>
<p>Ziel: Ich möchte die Daten zu diesem YouTube Video – dabei habe ich die genaue URL bereits:</p>
<p><a href="http://www.youtube.com/watch?v=ItqQ2EZziB8">http://www.youtube.com/watch?v=ItqQ2EZziB8</a> (anders als mein alter Blogpost, wo ich <a href="http://code-inside.de/blog/2008/01/09/howto-youtube-mit-c-durchsuchen-einstieg-in-die-youtube-api-google-data-api/">Dinge</a> gesucht habe)</p>
<p><strong>Per NuGet die Bibliotheken runterladen</strong></p>
<p>Für das komfortable Zugreifen eignet sich die Google Data APIs. Diese findet man auch auf NuGet.</p>
<p>Benötigt werden das <strong>Google.GData.Client</strong> und das <strong>Google.GData.YouTube</strong> Package:</p>
<p><a href="http://code-inside.de/blog/wp-content/uploads/image1388.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://code-inside.de/blog/wp-content/uploads/image_thumb570.png" width="537" height="168"></a></p>
<p><strong>Code</strong></p>
<p>(da mein Testclient eine Konsolenanwendung ist und ich Funktionalität aus der System.Web Assembly benötige, habe ich es auf das volle .NET 4.0 Framework umgestellt.)</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:740280be-52ed-4877-ac6d-220822b7abdf" class="wlWriterEditableSmartContent">
<pre name="code" class="c#">			Uri youTubeLink = new Uri("http://www.youtube.com/watch?v=ItqQ2EZziB8");
            var parameters = System.Web.HttpUtility.ParseQueryString(youTubeLink.Query);
            var videoId = parameters["v"];

            Uri youTubeApi = new Uri(string.Format("http://gdata.youtube.com/feeds/api/videos/{0}", videoId));
            YouTubeRequestSettings settings = new YouTubeRequestSettings(null, null);

            YouTubeRequest request = new YouTubeRequest(settings);
            var result = request.Retrieve&lt;Video&gt;(youTubeApi);

            Console.WriteLine(result.Title);
            Console.WriteLine(result.Description);
            Console.WriteLine(result.ViewCount);

            Console.ReadLine();</pre>
</div>
<p>&nbsp;</p>
<p><strong>Erklärung</strong></p>
<p>In Zeile 3 hole ich mir den “v”-Parameter für das Video. In Zeile 5 lege ich leere YouTubeRequestSettings an – damit kann ich alle öffentlichen Daten abrufen, allerdings keine Kommentare verfassen oder Videos hochladen (was eigentlich klar ist).</p>
<p>Danach wird über request.Retrieve das Video abgeholt. Danach stehen mir allerhand Meta Informationen zum Video zur Verfügung.</p>
<p><strong>Keine “Retrieve”-Methode zu sehen? </strong></p>
<p>Ich hatte beim Entwickeln ein seltsames Problem – unter dem Request-Objekt hatte ich keine Retrieve oder Get Methode. Ich bin mir nicht sicher woran es lag. Jedenfalls stammt die YouTubeRequest Klasse aus dem Google.YouTube Namespace – evtl. hatte ich eine andere Klasse erwischt.</p>
<p>Weitere Infos gibts es auf der<strong> </strong><a href="http://code.google.com/apis/youtube/2.0/developers_guide_protocol.html"><strong>YouTube API .NET Seite</strong></a><strong>.</strong></p>
<p><strong>Ergebnis meines Codes</strong></p>
<p><a href="http://code-inside.de/blog/wp-content/uploads/image1389.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://code-inside.de/blog/wp-content/uploads/image_thumb571.png" width="555" height="222"></a></p>
<p><strong><a href="http://code.google.com/p/code-inside/source/browse/#git%2F2011%2Fyoutubeapi%253Fstate%253Dclosed">[ Code on Google Code ]</a></strong></p>
<img src="http://feeds.feedburner.com/~r/Code-insideBlog/~4/wSyxbvF0H0Q" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://code-inside.de/blog/2011/11/15/youtube-api-video-meta-daten-ber-net-abrufen/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://code-inside.de/blog/2011/11/15/youtube-api-video-meta-daten-ber-net-abrufen/</feedburner:origLink></item>
		<item>
		<title>RavenDB Studio für Embedded RavenDB nutzen</title>
		<link>http://feedproxy.google.com/~r/Code-insideBlog/~3/Drc0_q9mkyI/</link>
		<comments>http://code-inside.de/blog/2011/11/08/ravendb-studio-fr-embedded-ravendb-nutzen/#comments</comments>
		<pubDate>Tue, 08 Nov 2011 22:37:36 +0000</pubDate>
		<dc:creator>Robert Mühsig</dc:creator>
				<category><![CDATA[HowTo]]></category>
		<category><![CDATA[Embedded]]></category>
		<category><![CDATA[NoSQL]]></category>
		<category><![CDATA[RavenDB]]></category>

		<guid isPermaLink="false">http://code-inside.de/blog/?p=3864</guid>
		<description><![CDATA[<div><img width="150" height="150" src="http://code-inside.de/blog/wp-content/uploads/image1386-150x150.png" class="attachment-thumbnail wp-post-image" alt="image.png" title="image.png" style="margin-bottom: 15px;" /></div>Bereits im ersten Blogpost um RavenDB hatte ich auch das Management-Tool RavenDB Studio erwähnt. Wenn man RavenDB richtig als Server-Anwendung (z.B. innerhalb des IIS) ausführt, steht dort das Studio mit zur Verfügung. Wer allerdings RavenDB innerhalb der Applikation laufen lässt, muss zwei kleine Handgriffe machen um auch da die Management Oberfläche zu benutzen. EmbeddedHttpServer mit ...]]></description>
			<content:encoded><![CDATA[<div><img width="150" height="150" src="http://code-inside.de/blog/wp-content/uploads/image1386-150x150.png" class="attachment-thumbnail wp-post-image" alt="image.png" title="image.png" style="margin-bottom: 15px;" /></div><p>Bereits im ersten <a href="http://code-inside.de/blog/2011/07/05/nosql-mit-ravendb-und-asp-net-mvc/">Blogpost um RavenDB</a> hatte ich auch das Management-Tool RavenDB Studio erwähnt. Wenn man RavenDB richtig als Server-Anwendung (z.B. <a href="http://ravendb.net/documentation/docs-deployment-iis">innerhalb des IIS</a>) ausführt, steht dort das Studio mit zur Verfügung. Wer allerdings <a href="http://code-inside.de/blog/2011/08/15/ravendb-als-embedded-datenbank-nutzen/">RavenDB innerhalb der Applikation</a> laufen lässt, muss zwei kleine Handgriffe machen um auch da die Management Oberfläche zu benutzen.</p>
<p><strong>EmbeddedHttpServer mit starten</strong></p>
<p>Das Studio muss innerhalb eines “Web-Servers” laufen – d.h. z.B. im IIS. Allerdings kann RavenDB auch einen “EmbeddedHttpServer” benutzen:</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:14a1e35c-4cc1-43f9-8792-66c759ed95eb" class="wlWriterEditableSmartContent">
<pre name="code" class="c#">        private static IDocumentStore CreateDocumentStore()
        {
            var documentStore = new EmbeddableDocumentStore
            {
                ConnectionStringName = "RavenDB",
                UseEmbeddedHttpServer = true
            }.Initialize();

            return documentStore;
        }</pre>
</div>
<p>&nbsp;</p>
<p>Wichtig hier: UseEmbeddedHttpServer = true.Damit startet RavenDB auf Port 8080 einen Webserver.</p>
<p><strong>Fehlermeldung “Missing file”</strong></p>
<p>Wenn man nun auf Port 8080 über den Browser zugreift, kann einem diese Fehlermeldung begegnen:</p>
<p><em>Could not find file Raven.Server.xap, which contains the RavenDB Studio functionality. Please copy the Raven.Server.xap file to the base directory of RavenDB and try again.</em></p>
<p>Hier muss man die XAP vom RavenDB Studio besorgen – dies kann man z.B. <a href="http://builds.hibernatingrhinos.com/builds/ravendb">hier</a> runterladen. Die “Raven.Studio.XAP” befindet sich u.A. in dem Server Verzeichnis. <u>Dieses File muss in das Root-Directory der Anwendung (Parallel z.B. zu eurer Global.ascx) kopiert werden.</u></p>
<p>Jetzt sollte das Studio aufgehen und man kann loslegen.</p>
<img src="http://feeds.feedburner.com/~r/Code-insideBlog/~4/Drc0_q9mkyI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://code-inside.de/blog/2011/11/08/ravendb-studio-fr-embedded-ravendb-nutzen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://code-inside.de/blog/2011/11/08/ravendb-studio-fr-embedded-ravendb-nutzen/</feedburner:origLink></item>
		<item>
		<title>TFS im Einsatz? Meine Kollegen stellen vor…</title>
		<link>http://feedproxy.google.com/~r/Code-insideBlog/~3/akuw8uSPXWY/</link>
		<comments>http://code-inside.de/blog/2011/11/04/tfs-im-einsatz-meine-kollegen-stellen-vor/#comments</comments>
		<pubDate>Fri, 04 Nov 2011 21:17:37 +0000</pubDate>
		<dc:creator>Robert Mühsig</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[TFS]]></category>

		<guid isPermaLink="false">http://code-inside.de/blog/?p=3859</guid>
		<description><![CDATA[<div><img width="150" height="150" src="http://code-inside.de/blog/wp-content/uploads/image1384-150x150.png" class="attachment-thumbnail wp-post-image" alt="image.png" title="image.png" style="margin-bottom: 15px;" /></div>Meine Kollegen von der T-Systems Multimedia Solutions GmbH Sebastian Wagner und Daniel Kubis stellen auf den Visual Studio ALM Days (ehemals “TeamConf”) vor, wie wir bei uns den TFS einsetzen. Dabei sind sie mit drei Vorträgen dabei: - Praxisstudie zum erfolgreichen Einsatz des TFS 2010 bei der T-Systems Multimedia Solutions GmbH - Was ist TFS ...]]></description>
			<content:encoded><![CDATA[<div><img width="150" height="150" src="http://code-inside.de/blog/wp-content/uploads/image1384-150x150.png" class="attachment-thumbnail wp-post-image" alt="image.png" title="image.png" style="margin-bottom: 15px;" /></div><p>Meine Kollegen von der <a href="http://www.t-systems-mms.com/unternehmen/events_termine/messen/alm-days">T-Systems Multimedia Solutions GmbH</a> Sebastian Wagner und <a href="http://peroxide20.wordpress.com/">Daniel Kubis</a> stellen auf den <a href="http://www.teamconf.de/">Visual Studio ALM Days (ehemals “TeamConf”)</a> vor, wie wir bei uns den TFS einsetzen. </p>
<p><u>Dabei sind sie mit drei Vorträgen dabei:</u></p>
<p>- <a href="http://www.teamconf.de/vortraege/management-day/articles/praxisstudie-zum-erfolgreichen-einsatz-des-tfs-2010-bei-der-t-systems-multimedia-solutions-gmbh.html">Praxisstudie zum erfolgreichen Einsatz des TFS 2010 bei der T-Systems Multimedia Solutions GmbH</a></p>
<p>- <a href="http://www.teamconf.de/vortraege/technical-day/articles/was-ist-tfs-teambuild-was-kann-ich-damit-machen-und-wie-passe-ich-den-prozess-an-meine-beduerfnisse-an.html">Was ist TFS Teambuild? Was kann ich damit machen und wie passe ich den Prozess an meine Bedürfnisse an</a></p>
<p>- <a href="http://www.teamconf.de/vortraege/technical-day/articles/einblick-in-die-sharepoint-entwicklung-mit-dem-team-foundation-server-2010-bei-der-t-systems-multimedia-solutions-gmbh.html">Einblick in die SharePoint Entwicklung mit dem Team Foundation Server 2010 bei der T-Systems Multimedia Solutions GmbH</a></p>
<p>Wer Fragen zum TFS hat, kann vom <strong>23.-25.11</strong> sich auch vertrauensvoll an meine Kollegen in München wenden. Generell ist die <a href="http://www.teamconf.de/agenda.html">Agenda für mit bekannten Namen</a> aus der Szene besetzt.</p>
<p><strong><a href="http://code-inside.de/blog/wp-content/uploads/image1385.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px 10px 0px 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" align="left" src="http://code-inside.de/blog/wp-content/uploads/image_thumb567.png" width="144" height="123"></a>Neugierig? Wir suchen!</strong></p>
<p>Wer neugierig ist und sehen möchte, was wir sonst noch machen kann sich auf der <a href="http://www.t-systems-mms.com/">Website umschauen</a>. <strong><u>Natürlich suchen wir auch</u></strong> immer nach neuen Kollegen in den <a href="http://www.t-systems-mms.com/karriere/stellenangebote/alle_job-angebote"><strong>unterschiedlichsten Bereichen</strong></a>.</p>
<img src="http://feeds.feedburner.com/~r/Code-insideBlog/~4/akuw8uSPXWY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://code-inside.de/blog/2011/11/04/tfs-im-einsatz-meine-kollegen-stellen-vor/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://code-inside.de/blog/2011/11/04/tfs-im-einsatz-meine-kollegen-stellen-vor/</feedburner:origLink></item>
		<item>
		<title>Keep it simple! YAGNI!</title>
		<link>http://feedproxy.google.com/~r/Code-insideBlog/~3/dBjlATu3sJw/</link>
		<comments>http://code-inside.de/blog/2011/11/04/keep-it-simple-yagni/#comments</comments>
		<pubDate>Fri, 04 Nov 2011 20:54:50 +0000</pubDate>
		<dc:creator>Robert Mühsig</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[CQRS]]></category>
		<category><![CDATA[KISS]]></category>

		<guid isPermaLink="false">http://code-inside.de/blog/?p=3852</guid>
		<description><![CDATA[<div><img width="150" height="150" src="http://code-inside.de/blog/wp-content/uploads/image1383-150x150.png" class="attachment-thumbnail wp-post-image" alt="image.png" title="image.png" style="margin-bottom: 15px;" /></div>Dauerbrenner auf dem Blog ist der Artikel HowTo: 3-Tier / 3-Schichten Architektur. Allerdings hatte ich schon einige Zeit Zweifel (Ist eine 3 Schichten Architektur mit eigener DAL immer empfehlenswert?)daran, dass dieses Standardvorgehen immer der richtige Weg ist. Vor ein paar Tagen hatte ich dann einen interessanten Blogpost gelesen, welcher in die gleiche Richtung geht: Keep ...]]></description>
			<content:encoded><![CDATA[<div><img width="150" height="150" src="http://code-inside.de/blog/wp-content/uploads/image1383-150x150.png" class="attachment-thumbnail wp-post-image" alt="image.png" title="image.png" style="margin-bottom: 15px;" /></div><p>Dauerbrenner auf dem Blog ist der Artikel <a href="http://code-inside.de/blog/2008/07/09/howto-3-tier-3-schichten-architektur/">HowTo: 3-Tier / 3-Schichten Architektur</a>. Allerdings hatte ich schon einige Zeit Zweifel (<a href="http://code-inside.de/blog/2010/08/03/ist-eine-3-schichten-architektur-mit-eigner-dal-immer-empfehlenswert/">Ist eine 3 Schichten Architektur mit eigener DAL immer empfehlenswert?</a>)daran, dass dieses Standardvorgehen immer der richtige Weg ist. Vor ein paar Tagen hatte ich dann einen interessanten Blogpost gelesen, welcher in die gleiche Richtung geht: <strong><a href="http://daniellang.net/keep-your-code-simple/">Keep your code simple!</a></strong></p>
<p><strong>Von Spaghetti-Code zum Lasagne-Code</strong></p>
<p>Jeder Entwickler hat verstanden, dass es nicht gesund ist 1000 Zeilen Code zu produzieren, welche nur für eine Funktion gut sind. Die Trennung in Schichten kann allerdings auch in das andere Extrem schlagen: <a href="http://c2.com/cgi/wiki?LasagnaCode">Lasagne Code</a>. Dutzende Schichten Code, ohne das sie wirklich was machen. Einfach nur, damit die Objekte von Schicht zu Schicht wandern. </p>
<p><strong>KISS &amp; YAGNI</strong></p>
<p>Bevor man grundlos eine 3-Schichten Architektur wählt, sollte man sich die Frage stellen: <u>Wozu brauch ich dies eigentlich? <br /></u>Wozu Repository-, Business und Presentation-Layer? Wenn man wirklich zwei Frontends (WebApp und Fat-Client), dann mag das clever sein – aber meisten braucht man es nicht (<strong>YAGNI</strong>). Je mehr Schichten, desto langsamer wird die Entwicklung. Da eine Schnittstelle definieren und dort noch ein Property hinzufügen und dieses dann implementieren und das nur, weil man plötzlich auf der Website ein Feld mehr anzeigen will. </p>
<p><strong>Mh… und wie könnte eine Lösung aussehen?</strong></p>
<p>Ich bin mittlerweile recht pragmatisch geworden und hab auch keine so große Schmerzen mehr die Datenabfrage direkt im Controller (im ASP.NET MVC Sinne) zu machen. <br />Erst wenn ich die Abfrage doch noch woanders brauche, mach ich mir intensivere Gedanken ob man dies nicht in eine Art “Query”-Klasse auslagern kann. </p>
<p>Schreibende Vorgänge würde ich anfangs ebenso behandeln – erst wenn man es an mehreren Stellen braucht, würde ich dies in “Command”-Klassen auslagern. </p>
<p>Ziel davon: Copy/Paste sollte natürlich nach wie vor vermieden werden – die Businesslogik doppelt zu halten ist der falsche Weg.</p>
<p><strong>Und wie steht es mit Unit-Tests?</strong></p>
<p>Der einzige Knackpunkt an der Sache ist, dass man ohne Interfaces etc. natürlich schlechter mocken kann. Allerdings bin ich mir mittlerweile auch unsicher, welchen Wert diese Unit-Tests haben. Dutzende Tests, welche gegen Mocks gehen und 5 Zeilen Code testen. </p>
<p>Integrationstests, welche die gesamte Applikation testen, sind am Ende “aussagekräftiger” – dies kann z.B. über eine SQLLiteDb erfolgen oder man geht gegen die richtige (aber langsame Datenbank) etc. Bei einem kleinen Projekt, welches keine großen Abhängigkeiten hat, sollte dies im Bereich des machbaren liegen. Je größer die Backendsysteme, desto eher muss man sich einen Kopf darum machen, wie man das am Ende testen möchte.</p>
<p><strong>“Poor-Mans CQRS”</strong></p>
<p><a href="http://www.cqrsinfo.com/">CQRS</a> ist ein nettes Konzept, welches die Trennung von Queries (Abfragen) und Commands (Schreibende Aktionen) vorsieht (und noch weit mehr).&nbsp; </p>
<p>Daniel Lang (Autor vom Blogpost “<a href="http://daniellang.net/keep-your-code-simple/">Keep your code simple!</a>”) hatte für seinen Ansatz den Begriff “Poor-Mans CQRS” gewählt – gefällt mir <img src='http://code-inside.de/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><strong>Was am Ende zählt…</strong></p>
<p>Am Ende des Tages muss immer eine funktionstüchtige Software rauskommen. Die Software sollte ihren Zweck erfüllen und es nützt nichts wenn man immer “streng nach Vorschrift” entwickelt – “es kommt halt drauf an…”.</p>
<p><strong>TL;DR</strong></p>
<p>Bevor man anfängt sich dutzende Schichten zurecht zu bauen, um auch alles mit Mocks und Unit-Tests ausstatten zu können sollte man sich die Frage stellen: Brauch ich das überhaupt? Was ist das Ziel? Vermeidet trotzdem Copy/Paste und lagert Sachen nach dem Prinzip “CQRS” aus – Queries für lesende Sachen und Commands für Aktionen. </p>
<img src="http://feeds.feedburner.com/~r/Code-insideBlog/~4/dBjlATu3sJw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://code-inside.de/blog/2011/11/04/keep-it-simple-yagni/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://code-inside.de/blog/2011/11/04/keep-it-simple-yagni/</feedburner:origLink></item>
		<item>
		<title>Einstieg in mongoDB</title>
		<link>http://feedproxy.google.com/~r/Code-insideBlog/~3/__Rq-_ISGig/</link>
		<comments>http://code-inside.de/blog/2011/10/17/einstieg-in-mongodb/#comments</comments>
		<pubDate>Mon, 17 Oct 2011 20:00:17 +0000</pubDate>
		<dc:creator>Oliver Guhr</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[HowTo]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[LINQ to SQL]]></category>
		<category><![CDATA[mongodb]]></category>
		<category><![CDATA[NoSQL]]></category>
		<category><![CDATA[Web 2.0]]></category>

		<guid isPermaLink="false">http://code-inside.de/blog/?p=3824</guid>
		<description><![CDATA[<div><img width="150" height="122" src="http://code-inside.de/blog/wp-content/uploads/imgmon-150x122.jpg" class="attachment-thumbnail wp-post-image" alt="imgmon" title="imgmon" style="margin-bottom: 15px;" /></div>Wer sich mit dem Trend? Thema NoSql beschäftigt wird früher oder später auch auf mongoDB stoßen. Was mongoDB für mich spannend macht, ist zu einem die versprochene Performance (auch wenn ich mit normalen Datenbank da noch nie an die Grenzen gestoßen bin) und zum anderen, das versprechen sich von diesem ganzen O/R Mapper Quatsch verabschieden ...]]></description>
			<content:encoded><![CDATA[<div><img width="150" height="122" src="http://code-inside.de/blog/wp-content/uploads/imgmon-150x122.jpg" class="attachment-thumbnail wp-post-image" alt="imgmon" title="imgmon" style="margin-bottom: 15px;" /></div><p>Wer sich mit dem <a href="http://code-inside.de/blog/2011/10/13/nosql-bei-windows-server-azure-sql-server-mit-apache-hadoop/">Trend? Thema</a> NoSql beschäftigt wird früher oder später auch auf <a href="http://www.mongodb.org/">mongoDB</a> stoßen. Was <a href="http://www.mongodb.org/">mongoDB</a> für mich spannend macht, ist zu einem die versprochene Performance (auch wenn ich mit normalen Datenbank da noch nie an die Grenzen gestoßen bin) und zum anderen, das versprechen sich von diesem ganzen O/R Mapper Quatsch verabschieden zu können(und da stoße ich ständig an irgendwelche Grenzen).
<p>Robert hatte sich schon <a href="http://code-inside.de/blog/2011/07/05/nosql-mit-ravendb-und-asp-net-mvc/">hier</a> und <a href="http://code-inside.de/blog/2011/08/15/ravendb-als-embedded-datenbank-nutzen/">hier</a> mit <a href="http://ravendb.net/">RavenDB</a> beschäftigt und <a href="http://code-inside.de/blog/2011/07/26/umdenken-bei-nosql-datenkonsistenz-in-ravendb/">hier erste Ideen zum Design</a> von NoSql Strukturen gesammelt.&nbsp;
<p>Wer sich jetzt Fragt: <strong>Was ist bitte der Unterschied zwischen mongoDB und RavenDB?</strong> (abgesehen vom cooleren Namen)
<p>Naja eigentlich ist das ein Thema für einen eigenen Blogeintrag. Um es ganz kurz zu machen: monogoDB scheint schneller zu sein, unterstützt mehr Sprachen und hat deshalb die größere Community wohingen RavenDB die (viel) bessere Integration in die .net Landschaft bietet. Für mich persönlich ist mongoDB interessanter weil ich es auch für kommerzielle Projekte kostenlos nutzen kann.
<p>So, toll… wo ist der Code?<br />
<h1>Installieren</h1>
<ol>
<li>Hier lädt man sich mongoDB für Win, OSX, Solaris oder Linux runter: <a href="http://www.mongodb.org/downloads">http://www.mongodb.org/downloads</a>
<li>Das Einzige was man selber machen muss ist dieses Verzeichnis anlegen “C:\data\db”<br />Den Pfad kann man aber auch konfigurieren, nur wird mongoDB ihn nicht selber anlegen<br /> 
<li>Unter Windows reicht ein auspacken der Zip Datei und der Doppelklick auf die mongod.exe<br />Wenn man will kann man mongoDB auch als Windows Service starten.<br /> 
<li>Das war einfach <img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-winkingsmile" alt="Zwinkerndes Smiley" src="http://code-inside.de/blog/wp-content/uploads/wlEmoticon-winkingsmile11.png"></li>
</ol>
<p>&nbsp;</p>
<p><a href="http://code-inside.de/blog/wp-content/uploads/image1378.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://code-inside.de/blog/wp-content/uploads/image_thumb560.png" width="439" height="232"></a></p>
<h1>Code</h1>
<p>1. Was wir noch brauchen ist der <u>mongoDB .Net Treiber</u> und den gibt’s hier:<br /><a href="http://www.mongodb.org/display/DOCS/CSharp+Language+Center">http://www.mongodb.org/display/DOCS/CSharp+Language+Center</a></p>
<p>2. Jetzt muss man diese beiden <u>Referenzen einbinden:</u></p>
<p><a href="http://code-inside.de/blog/wp-content/uploads/image1379.png"><img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://code-inside.de/blog/wp-content/uploads/image_thumb561.png" width="244" height="201"></a></p>
<p>3. So jetzt können wir die <u>Verbindung herstellen:</u></p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:f6b6209d-774b-40cc-a56f-fbcdb150cd93" class="wlWriterEditableSmartContent">
<pre name="code" class="c#">MongoServer server = MongoServer.Create(); // connect to localhost                        

MongoDatabase demo = server.GetDatabase("demo");  // connect to database       

MongoCollection&lt;User&gt; users = demo.GetCollection&lt;User&gt;("users");</pre>
</div>
<p>&nbsp;</p>
<p>Mit Zeile 1 bauen wir die Verbindung auf, wenn nichts angegeben ist zu localhost und ohne Nutzername/Passwort. Zeile 3 gibt uns eine Datenbank zurück und Zeile 5 eine “Tabelle”. Mongo verhält sich hier wie eine normale Datenbank. </p>
<p>4. <u>Daten einfügen</u></p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:e88a7462-3800-4e48-9885-7e1faa44945e" class="wlWriterEditableSmartContent">
<pre name="code" class="c">//insert
for (int i = 0; i &lt; 10; i++)
{
  var result = users.Insert&lt;User&gt;(new User { Name = "Karl", Age = 20 });
}</pre>
</div>
<p>5. <u>Daten lesen</u> </p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:e82673c8-90ee-4fd0-a1ed-f45820884670" class="wlWriterEditableSmartContent">
<pre name="code" class="c#">var userResult = users.FindAll();
foreach (var item in userResult)
{
 Console.WriteLine(string.Format("{0} - {1}",item.Name,item.Age));
}</pre>
</div>
<p>6. <u>Datenmodell</u></p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:cfcd158a-49cf-4861-ab1a-16edf25cf634" class="wlWriterEditableSmartContent">
<pre name="code" class="c#">class User
{
    public ObjectId _id { get; set; }
    public string Name { get; set; }
    public int Age { get; set; }
    public List&lt;ObjectId&gt; Tags { get; set; }
}</pre>
</div>
<p>Ich habe als Typ für die ID ObjectId (kommt mit dem mongo Treiber) und nicht Guid benutzt. Der Treiber kann zwar auch mit Guid umgehen, allerdings wird die dann BASE64 Codiert als Binärfeld in die DB geschrieben und ich vermute einfach mal, dass dann die hauseigene ObjectId schneller ist.</p>
<p><u>7. n:m-Beziehungen …</u></p>
<p>… sind auch möglich, einfach in dem man das über die ID’s verknüpft. Ob man seine Daten Normalisieren will/ muss ist eine andere Frage, möglich ist es auf jeden Fall.</p>
<p>&nbsp;</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:76ac3418-e1eb-48f1-b3d2-05a53374da43" class="wlWriterEditableSmartContent">
<pre name="code" class="c#">//setup second collection
MongoCollection&lt;User&gt; tags = demo.GetCollection&lt;User&gt;("tags"); // add &amp; get a new collecton
tags.Drop();
List&lt;Tag&gt; initialTags = new List&lt;Tag&gt;() { new Tag("Cool"), new Tag("Fast"), new Tag("Jedi"), new Tag("Ninja") };
tags.InsertBatch(initialTags);

//add tags to a user (many to many)
foreach (var item in userResult)
{
    var randomTags = initialTags.Take(new Random().Next(0, 4)).Select(x=&gt;x._id).ToList(); // add some random tags
    item.Tags = new List&lt;ObjectId&gt;(randomTags);
    users.Save(item); // saves changes to mongo
}</pre>
</div>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:aab518c1-96a8-4f8a-8ed9-9d516974af75" class="wlWriterEditableSmartContent">
<pre name="code" class="c#">class Tag
{
    public Tag(string name)
    {
        Name = name;
    }
    public ObjectId _id { get; set; }
    public string Name { get; set; }
}</pre>
</div>
<p>&nbsp;</p>
<p>Jetzt haben wir zwei “Tabellen” eine mit Nutzern und eine mit Tags die den Nutzern zugeordnet werden können. Diese Bespiel zeigt auch wie man bei NoSql DB’s eigentlich nicht vorgeht. (ist mir erst hinter aufgefallen) Normalerweise würde ich dem Nutzer einfach Tags als Text zuweisen und mir eine Map/Reduce Abfrage bauen, wenn ich z.B. die Tags zählen möchte und das kann so aussehen: <a href="http://cookbook.mongodb.org/patterns/count_tags/">http://cookbook.mongodb.org/patterns/count_tags/</a></p>
<p><u>Wie schnell bist du?</u></p>
<p>Performace Tests sind immer so eine Sache, weil sie von vielen Faktoren abhängig sind. Allerdings war ich irgendwie neugierig und wollte mal sehen was passiert, wenn ich viele Elemente anlege und wieder lese.<br />Also hab ich mal auf verschiede Arten 10000 User angelegt, gelesen und wieder gelöscht:</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:5af7acf4-73c7-4a38-b313-747f72d57272" class="wlWriterEditableSmartContent">
<pre name="code" class="ruby">int UsersToAdd = 10000;
//setup some users
Func&lt;List&lt;User&gt;&gt; getTestUsers = () =&gt;
{
    var tmp = new List&lt;User&gt;();
    for (int i = 0; i &lt; UsersToAdd; i++)
    {
        tmp.Add(new User { Name = "Karl" + i, Age = 20 });
    }
    return tmp;
};

//insert
Stopwatch insertTimer = new Stopwatch();
insertTimer.Start();
foreach (var item in getTestUsers())
{
    users.Insert&lt;User&gt;(item);
}
insertTimer.Stop();
Console.WriteLine(UsersToAdd + " users added in: " + insertTimer.ElapsedMilliseconds + "ms");

//bulk insert
insertTimer.Start();
users.InsertBatch&lt;User&gt;(getTestUsers());
insertTimer.Stop();
Console.WriteLine(UsersToAdd + " users added in an Batch: " + insertTimer.ElapsedMilliseconds + "ms");

//parallel insert
insertTimer.Start();
System.Threading.Tasks.Parallel.ForEach&lt;User&gt;(getTestUsers(), x =&gt; users.Insert&lt;User&gt;(x));
insertTimer.Stop();
Console.WriteLine(UsersToAdd + " users added parallel in: " + insertTimer.ElapsedMilliseconds + "ms");

//load all
insertTimer.Start();
var all = users.FindAll();
insertTimer.Stop();
Console.WriteLine("all users loaded in: " + insertTimer.ElapsedMilliseconds + "ms");

//drop all
insertTimer.Start();
users.Drop();
insertTimer.Stop();
Console.WriteLine("all users droped in: " + insertTimer.ElapsedMilliseconds + "ms");</pre>
</div>
<p>&nbsp;</p>
<p>Und hier sind meine Ergebnisse (4GB RAM QuadCore, HDD RAID5, keine SSD) </p>
<p><a href="http://code-inside.de/blog/wp-content/uploads/image1380.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://code-inside.de/blog/wp-content/uploads/image_thumb562.png" width="497" height="263"></a></p>
<p>&nbsp;</p>
<h1>Verwaltung</h1>
<p><a href="http://code-inside.de/blog/wp-content/uploads/image1381.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" align="left" src="http://code-inside.de/blog/wp-content/uploads/image_thumb563.png" width="226" height="113"></a>Zum verwalten von mongoDB gibt es <a href="http://www.mongodb.org/display/DOCS/Admin+UIs">eine Reihe von Tools</a>. Ich hab fürs erste den MongoExplorer genommen. Das schicke Silverlight Tool kann man bequem direkt von der Webseite aus installieren.</p>
<p><a href="http://mongoexplorer.com/">http://mongoexplorer.com/</a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><a href="http://code-inside.de/blog/wp-content/uploads/image1382.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://code-inside.de/blog/wp-content/uploads/image_thumb564.png" width="591" height="470"></a></p>
<p>&nbsp;</p>
<h1>Abfragen</h1>
<p>Zum Thema Abfragen und Map/Reduce lohnt es sich einen eigenen Artikel zu schreiben. Nur so viel: steuern kann man mongoDB komplett mit Javascript. Mir persönlich hat diese ziemlich gute Präsentation viele Fragen beantwortet:</p>
<div style="width: 425px" id="__ss_4111399"><strong style="margin: 12px 0px 4px; display: block"><a title="Why MongoDB is awesome" href="http://www.slideshare.net/jnunemaker/why-mongodb-is-awesome" target="_blank">Why MongoDB is awesome</a></strong> <iframe height="355" marginheight="0" src="http://www.slideshare.net/slideshow/embed_code/4111399" frameborder="0" width="425" marginwidth="0" scrolling="no"></iframe></p>
<div style="padding-bottom: 12px; padding-left: 0px; padding-right: 0px; padding-top: 5px">View more <a href="http://www.slideshare.net/" target="_blank">presentations</a> from <a href="http://www.slideshare.net/jnunemaker" target="_blank">John Nunemaker</a> </div>
</div>
<img src="http://feeds.feedburner.com/~r/Code-insideBlog/~4/__Rq-_ISGig" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://code-inside.de/blog/2011/10/17/einstieg-in-mongodb/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		<feedburner:origLink>http://code-inside.de/blog/2011/10/17/einstieg-in-mongodb/</feedburner:origLink></item>
		<item>
		<title>NoSQL bei Windows Server, Azure &amp; SQL Server mit Apache Hadoop</title>
		<link>http://feedproxy.google.com/~r/Code-insideBlog/~3/0fzw4V2XgCY/</link>
		<comments>http://code-inside.de/blog/2011/10/13/nosql-bei-windows-server-azure-sql-server-mit-apache-hadoop/#comments</comments>
		<pubDate>Thu, 13 Oct 2011 00:03:36 +0000</pubDate>
		<dc:creator>Robert Mühsig</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Azure]]></category>
		<category><![CDATA[Hadoop]]></category>
		<category><![CDATA[NoSQL]]></category>
		<category><![CDATA[Windows Azure]]></category>

		<guid isPermaLink="false">http://code-inside.de/blog/?p=3810</guid>
		<description><![CDATA[<div><img width="150" height="150" src="http://code-inside.de/blog/wp-content/uploads/image1377-150x150.png" class="attachment-thumbnail wp-post-image" alt="image.png" title="image.png" style="margin-bottom: 15px;" /></div>Microsoft hat auf der gerade stattfindenden SQLPass die Roadmap für die Thematik “Big Data” vorgestellt. Das Apache Projekt Hadoop wird dabei ein zentralen Punkt einnehmen. Hadoop? Mhh… ? Hadoop ist ein Framework oder ein System, welches verschiedene Komponenten umfasst. Ziel ist es immer, riesige (auch “ungeordnete”) Datenmengen zu verwalten und/oder zu analysieren: The project includes ...]]></description>
			<content:encoded><![CDATA[<div><img width="150" height="150" src="http://code-inside.de/blog/wp-content/uploads/image1377-150x150.png" class="attachment-thumbnail wp-post-image" alt="image.png" title="image.png" style="margin-bottom: 15px;" /></div><p>Microsoft hat auf der gerade stattfindenden <a href="http://www.sqlpass.org/">SQLPass</a> die Roadmap für die Thematik “<a href="http://www.microsoft.com/bigdata">Big Data</a>” vorgestellt. Das <a href="http://hadoop.apache.org/">Apache Projekt Hadoop</a> wird dabei ein zentralen Punkt einnehmen. </p>
<p><strong>Hadoop? Mhh… ?</strong></p>
<p>Hadoop ist ein Framework oder ein System, welches verschiedene Komponenten umfasst. Ziel ist es immer, riesige (auch “ungeordnete”) Datenmengen zu verwalten und/oder zu analysieren:</p>
<blockquote><p>The project includes these subprojects:
<ul>
<li><a href="http://hadoop.apache.org/common/"><strong>Hadoop Common</strong></a>: The common utilities that support the other Hadoop subprojects.
<li><a href="http://hadoop.apache.org/hdfs/"><strong>Hadoop Distributed File System (HDFS™)</strong></a>: A distributed file system that provides high-throughput access to application data.
<li><a href="http://hadoop.apache.org/mapreduce/"><strong>Hadoop MapReduce</strong></a>: A software framework for distributed processing of large data sets on compute clusters.</li>
</ul>
<p>Other Hadoop-related projects at Apache include:
<ul>
<li><a href="http://avro.apache.org/"><strong>Avro™</strong></a>: A data serialization system.
<li><a href="http://cassandra.apache.org/"><strong>Cassandra™</strong></a>: A scalable multi-master database with no single points of failure.
<li><a href="http://incubator.apache.org/chukwa/"><strong>Chukwa™</strong></a>: A data collection system for managing large distributed systems.
<li><a href="http://hbase.apache.org/"><strong>HBase™</strong></a>: A scalable, distributed database that supports structured data storage for large tables.
<li><a href="http://hive.apache.org/"><strong>Hive™</strong></a>: A data warehouse infrastructure that provides data summarization and ad hoc querying.
<li><a href="http://mahout.apache.org/"><strong>Mahout™</strong></a>: A Scalable machine learning and data mining library.
<li><a href="http://pig.apache.org/"><strong>Pig™</strong></a>: A high-level data-flow language and execution framework for parallel computation.
<li><a href="http://zookeeper.apache.org/"><strong>ZooKeeper™</strong></a>: A high-performance coordination service for distributed applications.</li>
</ul>
</blockquote>
<p>&nbsp;</p>
<p>Hadoop selbst ist mit Java entwickelt und ist eher auf der Linux-Welt beheimatet, daher war die Ankündigung auch recht überraschend.</p>
<p><strong>Hadoop &amp; Windows Azure/Server</strong></p>
<p>Laut Ankündigung soll Hadoop auch vollständig auf Windows Server laufen und es wird als Dienst in Windows Azure integriert. Die erste Beta soll bereits <a href="http://blogs.msdn.com/b/windowsazure/archive/2011/10/12/cross-post-microsoft-announces-big-data-roadmap-adopts-apache-hadoop-on-windows-azure.aspx">Ende des Jahres</a> kommen. Danach im nächsten Jahr die Live-Schaltung.</p>
<p><strong>Was heisst große Daten? Wer nutzt das?</strong></p>
<p>Facebook hat vermutlich den größten Hadoop Cluster – in <a href="http://www.dbms2.com/2009/05/11/facebook-hadoop-and-hive/">diesem Blogpost</a> sind ein paar Zahlen und Fakten genannt. Beeindruckend auf alle Fälle.</p>
<p><strong>Javascript ist überall!</strong></p>
<p>Eine kleine Sache, welche mich als Entwickler zum Schmunzeln gebracht hat (und die wahrscheinlich viele DBAs in den Wahnsinn treiben wird):</p>
<blockquote><p>For developers, we will enable integration with Microsoft developer tools as well as invest in making Javascript a first class language for Big Data. We will do this by making it possible to write high performance Map/Reduce jobs using Javascript. Yes, Javascript Map/Reduce, you read it right.</p>
</blockquote>
<p>Ha!</p>
<p><strong>Toolunterstützung</strong></p>
<p>Für den SQL Server soll es Konnektoren geben, welche die Kommunikation zwischen der NoSQL Welt und der SQL Welt bewerkstelligen. Auch Excel und co. sollen entsprechend die neuen Möglichkeiten nutzen können.Weitere technische Details erfahrt ihr in <a href="http://blogs.technet.com/b/port25/archive/2011/10/12/microsoft-hadoop-and-big-data.aspx">diesem Blogpost</a>. </p>
<p>Auch wenn ich selbst jetzt direkt nicht von dieser Neuigkeit betroffen bin, find ich es jedoch clever von Microsoft nicht sein eigenes Süppchen zu kochen sondern mal über den eigenen Tellerrand zu schauen. Ein paar mal hätte es jedenfalls in der Vergangenheit nicht schaden können.</p>
<img src="http://feeds.feedburner.com/~r/Code-insideBlog/~4/0fzw4V2XgCY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://code-inside.de/blog/2011/10/13/nosql-bei-windows-server-azure-sql-server-mit-apache-hadoop/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://code-inside.de/blog/2011/10/13/nosql-bei-windows-server-azure-sql-server-mit-apache-hadoop/</feedburner:origLink></item>
	</channel>
</rss>

