<?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>//kouder</title>
	
	<link>http://kouder.net</link>
	<description>Building Software</description>
	<lastBuildDate>Wed, 21 Dec 2011 11:13:49 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/kouder" /><feedburner:info uri="kouder" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId>kouder</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><item>
		<title>Programmiersprache – Egal</title>
		<link>http://feedproxy.google.com/~r/kouder/~3/xs7N7_rqiwM/</link>
		<comments>http://kouder.net/2011/12/20/programmiersprache-egal/#comments</comments>
		<pubDate>Tue, 20 Dec 2011 10:01:59 +0000</pubDate>
		<dc:creator>Dariusz</dc:creator>
				<category><![CDATA[Coding]]></category>

		<guid isPermaLink="false">http://kouder.net/?p=143</guid>
		<description><![CDATA[Programmiersprachen gibt es wie Sand am Meer. Zu Viele um sich einen wirklich vollständigen Überblick zu verschaffen und genug um spezifische Aufgaben in einer bestimmten Sprache besonders elegant lösen zu können. Ich selbst habe unterschiedliche Sprachen benutzt oder benutze diese noch. Ob C#, C++, Ruby oder JavaScript, jede Sprache hat Vor- und Nachteile. Doch was [...]]]></description>
			<content:encoded><![CDATA[<p>Programmiersprachen gibt es wie Sand am Meer. Zu Viele um sich einen wirklich vollständigen Überblick zu verschaffen und genug um spezifische Aufgaben in einer bestimmten Sprache besonders elegant lösen zu können.</p>
<p>Ich selbst habe unterschiedliche Sprachen benutzt oder benutze diese noch. Ob C#, C++, Ruby oder JavaScript, jede Sprache hat Vor- und Nachteile. Doch was mir in den letzten Jahren immer mehr auffällt ist das es nicht auf die Sprache ankommt. Auch auf Frameworks und Tooling möchte ich nicht all zu sehr eingehen, da hat jede Sprache eine breite Basis und auch gute Unterstützung und je nach Einsatzszenario auch dedizierte Frameworks wie z.B. ASP.NET MVC oder Ruby on Rails.</p>
<p>Vielmehr möchte ich auf einen Paradigmenwechsel anhand meiner eigenen Erfahrung eingehen, welcher den Umgang mit API&#8217;s drastisch ändern wird.</p>
<h2>Do you speak Asynchron?</h2>
<p>Unabhängig von der Wahl einer Programmiersprache werden sich viele Teile verschiedener Technologien in Richtung Asynchrone Programmierung ändern. Teilweise hat man solche Dinge heute schon in einzelnen Frameworks drinnen um z.B. Berechnungen in seperaten Tasks zu verpacken und die Aufgaben so auf mehrere Prozessorkerne zu verteilen. </p>
<pre><code>var task = Task.Factory.StartNew( () =&gt;
{
    CallSomeFreakingAlgorithm();
}

// work goes on, we can watch task
</code></pre>
<p>Hier wird Asynchronität (C# Code) genutzt um Performance zu steigern indem man die Maschinenressourcen ausnutzt und dem Framework das Verteilen der Aufgabe auf Rechnerkerne bzw. Threads überlässt. Doch asynchrone Programmierung wird auch genutzt um ein performantes oder sagen wir lieber reaktionsfreudiges UI zu erstellen. Das wird primär im Web Umfeld sehr stark genutzt, immmer dann wenn man mit JavaScript per AJAX Aufrufe dynamische Seiteninhalte aktualisiert oder Funktionen aufruft.</p>
<pre><code>$.getJSON( 'http://xyz.de', function( data ) {
    $.each( data, function( key, value ) {
      // do something with the result
    });
});

// do something else
</code></pre>
<p>Dieser AJAX Aufruf (per jQuery) wird abgefeuert und weiterer Code kann abgearbeitet werden. </p>
<h2>APIs werden Asynchron</h2>
<p>Die Muster asynchroner Programmierung finden sich in immer mehr Bibliotheken und APIs wieder. Schreibt man heutzutage eine Anwendung für das Windows Phone in Silverlight so hat man mit asynchronen Aufrufen zu tun. Synchrone Aufrufe gehören der Vergangenheit an wenn es um ein schnelles, bedienbares UI geht. Da liegt es nahe das Funktionalität eines Devices über ein Betriebssystem zur Verfügung gestellt wird, eben auch asynchron angeboten wird.</p>
<p>Der Dateizugriff den man bisher vermutlich meist synchron benutzt hat, ist plötzlich nur noch asynchron anzusprechen.</p>
<p>Doch asynchrone Muster haben auch einen wichtigen Unterschied. Wo man bisher z.B. auf ein Dateisystem synchron zugegriffen hat</p>
<pre><code>// Pseudo Code
var file = fs.Open();
var content = file.ReadToEndAsString();
console.log( content );
</code></pre>
<p>und sicher sein konnte das der Inhalt zu dem Zeitpunkt des Zugriffs vorhanden ist, so muss man bei einer asynchronen API entsprechend mit Callbacks arbeiten</p>
<pre><code>// Node.js Code
var fs = require( 'fs' );

fs.readFile( "somefile.txt", function( data ) {
    // callback for input data
});
</code></pre>
<p>Das sieht bei diesem einfachen Zugriff auf den Inhalt noch sehr einfach und übersichtlich aus, wird aber durchaus komplexer bei mehreren ineinander verschachtelten Aufrufen.</p>
<pre><code>// Node.js multipart/form-data, taken from Felix Geisendörfer
function upload_file(req, res) {
  req.setBodyEncoding('binary');

  var stream = new multipart.Stream(req);
  stream.addListener('part', function(part) {
    part.addListener('body', function(chunk) {
      var progress = (stream.bytesReceived / stream.bytesTotal * 100).toFixed(2);
      var mb = (stream.bytesTotal / 1024 / 1024).toFixed(1);

      sys.print("Uploading "+mb+"mb ("+progress+"%)\015");

      // chunk could be appended to a file if the uploaded file needs to be saved
    });
  });
  stream.addListener('complete', function() {
    res.sendHeader(200, {'Content-Type': 'text/plain'});
    res.sendBody('Thanks for playing!');
    res.finish();
    sys.puts("\n=&gt; Done");
  });
}
</code></pre>
<h2>Asynchronität &#8211; Nicht Egal!</h2>
<p>Ganz gleich mit welcher Programmiersprache man letztlich Anwendungen entwickelt, mit asynchronen Aufrufen umzugehen ist essentiell. Es stellt sich also nicht die Frage ob man zum Beispiel für Windows 8 mit C# / XAML oder JavaScript / HTML5 entwickelt, sondern es ist wichtig mit beiden Sprachen asynchron entwickeln zu können und damit ist nicht die Sprachmöglichkeit gemeint sondern der Umgang als Entwickler mit dieser Sprache.</p>
<img src="http://feeds.feedburner.com/~r/kouder/~4/xs7N7_rqiwM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://kouder.net/2011/12/20/programmiersprache-egal/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://kouder.net/2011/12/20/programmiersprache-egal/</feedburner:origLink></item>
		<item>
		<title>Star Wars: The Old Republic – Mobil aufbereiten</title>
		<link>http://feedproxy.google.com/~r/kouder/~3/B155JP2MY_o/</link>
		<comments>http://kouder.net/2011/12/19/star-wars-the-old-republic-mobil-aufbereiten/#comments</comments>
		<pubDate>Mon, 19 Dec 2011 14:39:31 +0000</pubDate>
		<dc:creator>Dariusz</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jQuery Mobile]]></category>

		<guid isPermaLink="false">http://kouder.net/?p=135</guid>
		<description><![CDATA[Am 20. Dezember ist es soweit. Star Wars: The Old Republic erscheint offiziell und Scharen von MMO Junkies werden sich in das nächste Abenteuer stürzen &#8211; Inklusive mir. Das Wochenlange anteasern neuer Videos habe ich mit Interesse verfolgt, leider nicht von meinen mobilen Endgeräten. Die Videos wurden allesamt per Flash zur Verfügung gestellt und die [...]]]></description>
			<content:encoded><![CDATA[<p>Am 20. Dezember ist es soweit. <a title="Star Wars: The Old Republic" href="http://www.swtor.com/de">Star Wars: The Old Republic</a> erscheint offiziell und Scharen von MMO Junkies werden sich in das nächste Abenteuer stürzen &#8211; Inklusive mir. Das Wochenlange anteasern neuer Videos habe ich mit Interesse verfolgt, leider nicht von meinen mobilen Endgeräten. Die Videos wurden allesamt per Flash zur Verfügung gestellt und die Sternenkarte benutzt gar Java (oder war es Unity?). Sprich: Privat benutze ich keine Android Geräte. Da ich mich sehr viel mit Web beschäftige und einen Screencast zu jQuery Mobile aufnehmen wollte, habe ich das gleich kombiniert. Eine kleine, überschaubare Star Wars: The Old Republic Demo Anwendung mit jQuery Mobile.</p>
<p>Die Anwendung ist auf Windows Azure gehostet und hier ist der Link: <a title="SWTOR Demo App" href="http://dpnodecast.cloudapp.net">Star Wars: The Old Republic Mobiler Klassenbrowser</a>.</p>
<p>In der Demo nutze ich jQuery Mobile nur Rudimentär. Ich verwende lediglich CSS Klassen und jQuery Mobile Custom Attribute um das Look &amp; Feel zu bekommen. Die Demo ist als ASP.NET MVC3 Anwendung erstellt, in der nächsten Version von MVC ist jQuery Mobile dann auch gleich Bestandteil des Standardprojekttemplates.</p>
<p>Wer anschauen möchte wie die Demo Anwendung von einer Stillosen weißen Webseite in eine Mobil-freundliche Variante angepasst wird kann sich dieses Video reinziehen.</p>
<p><iframe width="560" height="315" src="http://www.youtube.com/embed/9qz524H8UGU?hd=1" frameborder="0" allowfullscreen></iframe></p>
<p>Im übrigen, ich spiele auf Sith Triumvirate einen Söldner und ja, ich finde 2:30h in der Warteschlange auch ziemlich Blöde!</p>
<img src="http://feeds.feedburner.com/~r/kouder/~4/B155JP2MY_o" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://kouder.net/2011/12/19/star-wars-the-old-republic-mobil-aufbereiten/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://kouder.net/2011/12/19/star-wars-the-old-republic-mobil-aufbereiten/</feedburner:origLink></item>
		<item>
		<title>Socket.io, Node.js und Windows Azure</title>
		<link>http://feedproxy.google.com/~r/kouder/~3/F9NQzAycKL0/</link>
		<comments>http://kouder.net/2011/12/16/socket-io-node-js-und-windows-azure/#comments</comments>
		<pubDate>Fri, 16 Dec 2011 08:07:03 +0000</pubDate>
		<dc:creator>Dariusz</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Node.js]]></category>
		<category><![CDATA[Windows Azure]]></category>

		<guid isPermaLink="false">http://kouder.net/?p=100</guid>
		<description><![CDATA[Seit einigen Tagen ist das Windows Azure SDK für Node.js erschienen und erleichtert somit das Publizieren von Node.js Anwendungen auf Windows Azure. In meinem bisherigen Post über Node.js auf Windows Azure habe ich noch die manuelle Installation von Node.js samt Anpassung einer Worker Role beschrieben. Dies ist jetzt komplett hinfällig. Mit dem SDK werden eine [...]]]></description>
			<content:encoded><![CDATA[<p>Seit einigen Tagen ist das <a title="Windows Azure SDK for Node.js" href="https://www.windowsazure.com/en-us/develop/nodejs/">Windows Azure SDK für Node.js</a> erschienen und erleichtert somit das Publizieren von Node.js Anwendungen auf Windows Azure. In meinem bisherigen Post über <a title="Node.js auf Windows Azure" href="http://kouder.net/2011/10/24/node-js-auf-windows-azure-hosten/">Node.js auf Windows Azure</a> habe ich noch die manuelle Installation von Node.js samt Anpassung einer Worker Role beschrieben. Dies ist jetzt komplett hinfällig. Mit dem SDK werden eine Reihe von Powershell Commandlets installiert die eine Anwendung komplett von der Kommandozeile erstellen, testen und publizieren lassen.</p>
<h2>Sanity Check</h2>
<p>Nach dem herunterladen vom SDK habe ich mir die Beispiele angeschaut. Es wird Schritt für Schritt erklärt wie man den Azure Service anlegt, eine Rolle hinzufügt, den Code anpasst und das ganze zuerst im Emulator und dann auch in der Cloud ausführt.</p>
<p>Die <a href="https://www.windowsazure.com/en-us/develop/nodejs/tutorials/getting-started/" title="Windows Azure Node.js Tutorial">Beispiele</a> zeigen wie man mit den Azure Diensten Storage, Tables und Queues arbeiten kann. Lediglich die Möglichkeit einen Diagnose Output zu machen habe ich in den Tutorials vermisst. Ich weiß auch nicht ob im Azure Node Package Module die Implementierung vorhanden ist. Der übliche Weg über <em>console.out</em> funktioniert im Emulator nicht und natürlich auch nicht in der Cloud. Das gilt es noch zu prüfen, ansonsten muss man sich wohl mit dem Azure Table Storage behelfen und selbst wegschreiben.</p>
<h2>Socket.IO</h2>
<p>Getestet habe ich nun mit Socket.IO, einer Bibliothek die bidirektionale TCP Kommunikation ermöglicht. Hier zu werden, je nach Browser Unterstützung, WebSockets, Long-Polling, Server Side Events oder auch Flash verwendet und der Entwickler hat eine transparente API. Zum installieren der verschiedenen Pakete unter Node.js benutzt man <em>npm</em>. Die aktuelle Node Version unterstützt npm auch auf Windows.</p>
<pre class="prettyprint ">npm install socket.io</pre>
<p>Nach der Installation kann man das <a title="Simple Socket.IO Sample" href="http://socket.io/#how-to-use">Beispiel </a>von der Socket.IO Webseite nehmen. Ich habe lediglich zwei Änderungen gemacht. In der <em>server.js</em> - welche einfach nur die <em>app.js</em> umbenannt ist - habe ich den Port angepasst. Da man die Anwendung sowohl im Emulator wie auch in der Cloud ohne Änderungen lauffähig haben will, überlässt man die Portwahl der Windows Azure Infrastruktur.</p>
<pre class="prettyprint ">app.listen( process.env.port );</pre>
<p>Die <em>index.html</em> enthält eine kleine Modifikation um die Ausgabe  direkt im Browser zu haben anstatt in der Debugging Console des Browsers.</p>
<pre class="prettyprint ">
&lt;html&gt;
&lt;head&gt;
  &lt;script src='/socket.io/socket.io.js'&gt;&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;h1&gt;socket.io demo&lt;/h1&gt;
&lt;div id=&quot;output&quot;&gt;&lt;/div&gt;
&lt;/body&gt;
  &lt;script&gt;
    var output = document.getElementById( &quot;output&quot; );
    var socket = io.connect( 'http://localhost:81' );
    socket.on( 'news', function( data ) {
      output.innerHTML = JSON.stringify( data );
      socket.emit( 'my other event', { my: 'data' });
    });
  &lt;/script&gt;
&lt;/html&gt;
</pre>
<h2>Node.js support &#8211; checked</h2>
<p>Der direkte Node.js Support auf Windows Azure ist ein Riesenvorteil im Vergleich zu einem selbstgestrickten Deployment wie ich es oben schon erwähnt hatte. Das Windows Azure SDK für Node.js erlaubt es einfach Node.js Anwendungen in die Windows Azure Cloud zu deployen, die Commandlets lassen sich in beliebige Buildskripte integrieren und gegen Automatisierungen im Build Prozess hat wohl keiner was. Vor allem die Möglichkeit lokal wie gewohnt zu entwickeln, per npm neue Module zu installieren und im Azure Emulator gleich zu testen, vereinfacht die Entwicklung von Cloud-basierten Diensten ungemein. Ich habe Socket.IO hier getestet, ein weiteres Beispiel wäre <a href="http://www.interoperabilitybridges.com/Azure/Getting_Started_Guide_Node_with_MongoDB.asp" title="Tutorial Node.js and MongoDB on Windows Azure">Node.js im Zusammenspiel mit MongoDB auf Windows Azure</a>.</p>
<img src="http://feeds.feedburner.com/~r/kouder/~4/F9NQzAycKL0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://kouder.net/2011/12/16/socket-io-node-js-und-windows-azure/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://kouder.net/2011/12/16/socket-io-node-js-und-windows-azure/</feedburner:origLink></item>
		<item>
		<title>November Fundstücke</title>
		<link>http://feedproxy.google.com/~r/kouder/~3/m2x7S49dExI/</link>
		<comments>http://kouder.net/2011/11/11/november-fundstucke/#comments</comments>
		<pubDate>Fri, 11 Nov 2011 13:21:49 +0000</pubDate>
		<dc:creator>Dariusz</dc:creator>
				<category><![CDATA[On the Web]]></category>

		<guid isPermaLink="false">http://h1979515.stratoserver.net/2011/11/11/november-fundstucke/</guid>
		<description><![CDATA[Von Zeit zu Zeit speichere ich Webreferenzen in OneNote die ich mir zu einem sp&#228;teren Zeitpunkt anschaue. Vielleicht sind die Dinge auch f&#252;r andere Interessant, here we go. Markdown Mode f&#252;r Visual Studio Github hat mich als erstes mit Markdown konfrontiert. Seit dem liebe ich es und schreibe auch meinen Blog in diesem Format. Obwohl [...]]]></description>
			<content:encoded><![CDATA[<p>Von Zeit zu Zeit speichere ich Webreferenzen in OneNote die ich mir zu einem sp&auml;teren Zeitpunkt anschaue. Vielleicht sind die Dinge auch f&uuml;r andere Interessant, here we go.</p>
<h2>Markdown Mode f&uuml;r Visual Studio</h2>
<p>Github hat mich als erstes mit <a title="Markdown" href="http://daringfireball.net/projects/markdown/">Markdown</a> konfrontiert. Seit dem liebe ich es und schreibe auch meinen Blog in diesem Format. Obwohl die Extension schon l&auml;nger existiert bin ich erst jetzt auf diese Aufmerksam geworden.&nbsp;</p>
<p style="padding-left: 30px;"><em>This extension provides support for editing files that use the <a href="http://daringfireball.net/projects/markdown/">Markdown</a> syntax. In the current version, it supports the following features:</em></p>
<ul>
<li><em>Syntax highlighting (for      Markdown and HTML)</em></li>
<li><span><em>A live preview window of the      file you are editing</em></span></li>
<li><em>A rudimentary margin with      buttons for showing the preview window and copying the HTMLized version      of the file you are editing to the clipboard.</em></li>
</ul>
<p>Link: <a title="Markdown Mode Visual Studio Extension" href="http://visualstudiogallery.msdn.microsoft.com/0855e23e-4c4c-4c82-8b39-24ab5c5a7f79/description">Markdown Mode Extension f&uuml;r Visual Studio</a></p>
<h2>Freckle Time Tracking</h2>
<p>Zeiterfassung ist ein wichtiges Thema f&uuml;r viele Entwickler. Vor allem wenn die Zeiterfassung so einfach von der Hand geht wie mit Freckle. Das sch&ouml;ne an Freckle, es l&auml;sst sich noch mit Github kombinieren und erstellt bei Bedarf seit kurzem auch Rechnungen, wobei letzteres noch in Beta ist. Freckle kostest Stand heute 12$ im Monat, ob es sich lohnt kann man in 30 Tagen Test herausfinden.</p>
<p style="padding-left: 30px;"><em><span class="full-image-block ssNonEditable"><span><img src="http://letsfreckle.com/stylesheets/assets/title-test2.png" alt="Time tracking, _not_ hair pulling" /></span></span></em></p>
<p><em> </em></p>
<p class="tall" style="padding-left: 30px;"><em><strong>Tracking your time</strong>&mdash;for your clients, for yourself&mdash;doesn&#8217;t have to be a dreaded task. Dispense with the preparation, avoidance, and gnashing of teeth.&nbsp;<strong>Freckle&nbsp;</strong>eliminates all the nonsense between you and your work.</em></p>
<p class="tall">Link: <a href="http://letsfreckle.com">Let&#8217;s freckle</a></p>
<h2>Helicon Zoo</h2>
<p>Helicon Zoo erlaubt es unterschiedliche Web Frameworks auf dem IIS in einer Shared Hosting Umgebung zu installieren.&nbsp;</p>
<p style="padding-left: 30px;"><em>Helicon Zoo is a simple and powerful solution for setting up development and production environment with various web frameworks on Windows systems with IIS. It includes such popular frameworks as Ruby on Rails, Django, Node.js and more. Zoo can be used as a platform for Windows shared technology hosting, as well as a development platform for Windows based workstations. It supports IIS 7, IIS 7.5 and IIS Express and uses Web Platform Installer to provide you a simple tool to deploy applications and entire environments.</em></p>
<p style="padding-left: 30px;"><em>Inside: Python 2.7 + pip, Django 1.3, Ruby 1.9.2, Rails 3.0, Perl Strawberry 5.12 and Mojolicious 1.34</em><em>&nbsp;</em></p>
<p>Link: <a href="http://www.helicontech.com/zoo/">Helicon Zoo</a></p>
<h2>Yahoo! Cocktails</h2>
<p>Klingt s&uuml;ffig, verspricht viel. Ein Framework um Anwendungen nahtlos auf dem Desktop und im Web laufen zu lassen. Zusammenspiel von HTML5, Node.js, CSS3 und JavaScript.</p>
<p style="padding-left: 30px;"><em><span>Developers, time to geek out. Yahoo! has been working behind the scenes for the past several months on an exciting new technology that we think will deeply impact the web developer community. We call it &ldquo;Cocktails&rdquo; and it&rsquo;s the technology powering Livestand, which we launched today at&nbsp;</span><a href="http://ycorpblog.com/2011/11/01/product-runway2011/">Product Runway</a><span>.</span></em></p>
<p style="padding-left: 30px;"><em>&ldquo;Cocktails&rdquo; is a mix of HTML5, Node.JS, CSS3, JavaScript and a lot of ingenious, creative mind-bending tricks from Yahoo!&rsquo;s engineers. Today, we are announcing two Cocktails: Yahoo!&rsquo;s Mojito, an environment-agnostic JavaScript web application framework, and Yahoo! Manhattan, a hosted platform for Mojito-based applications.</em></p>
<p>Link: <a href="http://developer.yahoo.com/blogs/ydn/posts/2011/11/yahoo-announces-cocktails-%E2%80%93-shaken-not-stirred/">Weiterf&uuml;hrende Infos zu Manhatten, Cocktails und Mojito</a></p>
<h2>JavaScript ASCII Raytracer</h2>
<p>Dieser hat es mir besonders angetan. Ein Raytracer der ASCII ausgibt. Zwar total Sinnlos, aber irgendwie Saucool!</p>
<p>Link: <a href="https://github.com/trevlovett/AsciiTracer">JavaScript ASCII Raytracer auf Github</a></p>
<h2>Notifier.js</h2>
<p>Eine JavaScript Bibliothek um Notifications im Browser anzuzeigen. Die Notifications werden gestackt und entsprechend ausgeblendet. Die <a href="http://opensource.srirangan.net/notifier.js/">Demo Seite</a> zeigt die unterschiedlichen M&ouml;glichkeiten.</p>
<p>Link: <a href="https://github.com/Srirangan/notifer.js/">Notifier.js auf Github</a></p>
<h2>Nodeup &#8211; A Node.js Podcast</h2>
<p>Node.js ist in aller Munde. Die meisten brauchen es eigentlich gar nicht, trotzdem frickeln viele damit rum. Ja, ich auch, bin halt irgendwie doch Geek. Jetzt gibt es eine Podcast Serie die sich <a href="http://nodejs.org">Node.js</a> verschrieben hat: Nodeup. Sechs folgend sind bisher raus.</p>
<p>Link: <a href="http://nodeup.com/">Nodeup</a></p>
<h2>C++ Reference</h2>
<p>Neben JavaScript ist auch &nbsp;C++ wieder ein wichtiger Bestandteil meiner Arbeit. Da habe ich im Netz gleich eine nette Referenz gefunden die auch C++11 abdeckt.</p>
<p>Feature Auszug der Seite&nbsp;</p>
<div>
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td>
<p style="padding-left: 30px;"><a href="http://en.cppreference.com/w/cpp/container/forward_list"><span lang="en-US">forward_list</span></a><span lang="en-US"> </span><span lang="en-US">(C++11 feature)</span></p>
</td>
</tr>
<tr>
<td>
<p style="padding-left: 30px;"><a href="http://en.cppreference.com/w/cpp/container/set"><span lang="en-US">set</span></a></p>
</td>
</tr>
<tr>
<td>
<p style="padding-left: 30px;"><a href="http://en.cppreference.com/w/cpp/container/multiset"><span lang="en-US">multiset</span></a></p>
</td>
</tr>
<tr>
<td>
<p style="padding-left: 30px;"><a href="http://en.cppreference.com/w/cpp/container/map"><span lang="en-US">map</span></a></p>
</td>
</tr>
<tr>
<td>
<p style="padding-left: 30px;"><a href="http://en.cppreference.com/w/cpp/container/multimap"><span lang="en-US">multimap</span></a></p>
</td>
</tr>
<tr>
<td>
<p style="padding-left: 30px;"><a href="http://en.cppreference.com/w/cpp/container/unordered_set"><span lang="en-US">unordered_set</span></a><span lang="en-US"> </span><span lang="en-US">(C++11 feature)</span></p>
</td>
</tr>
<tr>
<td>
<p style="padding-left: 30px;"><a href="http://en.cppreference.com/w/cpp/container/unordered_multiset"><span lang="en-US">unordered_multiset</span></a><span lang="en-US"> </span><span lang="en-US">(C++11 feature)</span></p>
</td>
</tr>
<tr>
<td>
<p style="padding-left: 30px;"><a href="http://en.cppreference.com/w/cpp/container/unordered_map"><span lang="en-US">unordered_map</span></a><span lang="en-US"> </span><span lang="en-US">(C++11 feature)</span></p>
</td>
</tr>
<tr>
<td>
<p style="padding-left: 30px;"><a href="http://en.cppreference.com/w/cpp/container/unordered_multimap"><span lang="en-US">unordered_multimap</span></a><span lang="en-US"> </span><span lang="en-US">(C++11 feature)</span></p>
</td>
</tr>
</tbody>
</table>
</div>
<p>Link: <a href="http://en.cppreference.com/w/cpp">C++ Reference</a></p>
<img src="http://feeds.feedburner.com/~r/kouder/~4/m2x7S49dExI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://kouder.net/2011/11/11/november-fundstucke/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://kouder.net/2011/11/11/november-fundstucke/</feedburner:origLink></item>
		<item>
		<title>Lower Case JSON Serialization in ASP.NET MVC</title>
		<link>http://feedproxy.google.com/~r/kouder/~3/hyxTQYNsQLA/</link>
		<comments>http://kouder.net/2011/11/02/lower-case-json-serialization-in-asp-net-mvc/#comments</comments>
		<pubDate>Wed, 02 Nov 2011 14:38:32 +0000</pubDate>
		<dc:creator>Dariusz</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[ASP.NET MVC]]></category>

		<guid isPermaLink="false">http://h1979515.stratoserver.net/2011/11/02/lower-case-json-serialization-in-asp-net-mvc/</guid>
		<description><![CDATA[In ASP.NET MVC kann man .NET Objektstrukturen mit Hilfe der Json Funktion der abstrakten Controller Klasse in JSON serialisieren. Eine Klasse mit der folgenden Definition public class EntryData { public string Project { get; set; } public string User { get; set; } public DateTime Date { get; set; } } wird zum Beispiel über [...]]]></description>
			<content:encoded><![CDATA[<p>In ASP.NET MVC kann man .NET Objektstrukturen mit Hilfe der <em>Json</em> Funktion der abstrakten Controller Klasse in JSON serialisieren. Eine Klasse mit der folgenden Definition</p>
<pre class="prettyprint ">public class EntryData
{
  public string Project { get; set; }
  public string User { get; set; }
  public DateTime Date { get; set; }
}</pre>
<p>wird zum Beispiel über diese Controller Action</p>
<pre class="prettyprint ">[HttpPost]
public ActionResult Echo( EntryData newEntry )
{
  return Json( newEntry );
}</pre>
<p>in die entsprechende JavaScript Notation umgewandelt</p>
<pre class="prettyprint ">{
  &quot;Project&quot;: &quot;hi&quot;,
  &quot;User&quot;: &quot;kuck&quot;,
  &quot;Date&quot;: &quot;/Date(1320015600000)/&quot;
}</pre>
<p>Das sieht soweit ganz gut aus. Allerdings möchte ich in JavaScript mit der entsprechenden lowerCamelCase Notation arbeiten, des weiteren soll das Datum auch entsprechend in ISO UTC serialisiert werden, das lässt sich mit der <em>Json</em> Funktion standardmässig nicht realisieren.</p>
<p>Nach einiger Recherche habe ich auf Codeplex das Projekt <a title="JSON.NET" href="http://json.codeplex.com">JSON.NET</a> gefunden. In JSON.NET kann die Serialisierung in vielen Bereichen parametrisiert werden. So kann man CamelCase sowie Datumsformattierungen anpassen. JSON.NET ist als Nuget Package verfügbar und lässt sich schnell mittels <em>Install-Package Newtonsoft.Json</em> installieren.</p>
<p>Für die Serialisierung habe ich auf Jason&#8217;s Blog (welch Wortspiel) eine eigene ActionResult Implementierung names <a title="JsonNetresult custom ActionResult implementation" href="http://james.newtonking.com/archive/2008/10/16/asp-net-mvc-and-json-net.aspx">JsonNetResult</a> gefunden die man einfach in seine Controller Methoden einbinden kann.</p>
<p>Damit sieht die Methode im Controller folgendermaßen aus</p>
<pre class="prettyprint ">
[HttpPost]
public ActionResult Echo( EntryData newEntry )
{
  return new JsonNetResult
  {
    Data = newEntry,
    Formatting = Formatting.Indented,
    SerializerSettings = new JsonSerializerSettings
    {
      ContractResolver = new CamelCasePropertyNamesContractResolver(),
      Converters = { new IsoDateTimeConverter() }
    }
  };
}</pre>
<p>und das Ergebnis ist mein gewünschtes JSON Format:</p>
<pre class="prettyprint ">
{
  &quot;project&quot;: &quot;hi&quot;,
  &quot;user&quot;: &quot;kuck&quot;,
  &quot;date&quot;: &quot;2011-10-31T00:00:00&quot;
}</pre>
<img src="http://feeds.feedburner.com/~r/kouder/~4/hyxTQYNsQLA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://kouder.net/2011/11/02/lower-case-json-serialization-in-asp-net-mvc/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://kouder.net/2011/11/02/lower-case-json-serialization-in-asp-net-mvc/</feedburner:origLink></item>
		<item>
		<title>Node.js auf Windows Azure hosten</title>
		<link>http://feedproxy.google.com/~r/kouder/~3/Sy8YwZah_q0/</link>
		<comments>http://kouder.net/2011/10/24/node-js-auf-windows-azure-hosten/#comments</comments>
		<pubDate>Mon, 24 Oct 2011 10:00:05 +0000</pubDate>
		<dc:creator>Dariusz</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Node.js]]></category>
		<category><![CDATA[Windows Azure]]></category>

		<guid isPermaLink="false">http://h1979515.stratoserver.net/2011/10/24/node-js-auf-windows-azure-hosten/</guid>
		<description><![CDATA[Nachdem Node.js für Windows zur Verfügung steht, kann man Node.js auch auf der Windows Azure Plattform betreiben. Dazu muss man allerdings erst ein Rahmenwerk schaffen, denn Node.js ist ein eigener Prozess welcher in der Regel über die Kommandozeile gestartet wird. Eine Anmerkung vorweg: es gibt mittlerweile ein IIS Module das sich iisnode nennt. Mit diesem [...]]]></description>
			<content:encoded><![CDATA[<p>Nachdem <a href="http://kouder.net/blog/2011/7/27/willkommen-auf-windows-nodejs.html" title="Willkommen auf Windows - Node.js">Node.js für Windows</a> zur Verfügung steht, kann man Node.js auch auf der <a href="http://www.azure.com" title="Windows Azure">Windows Azure</a> Plattform betreiben. Dazu muss man allerdings erst ein Rahmenwerk schaffen, denn Node.js ist ein eigener Prozess welcher in der Regel über die Kommandozeile gestartet wird. Eine Anmerkung vorweg: es gibt mittlerweile ein IIS Module das sich <a href="http://tomasz.janczuk.org/2011/08/hosting-nodejs-applications-in-iis-on.html" title="Hosting Node.js in IIS on Windows"><em>iisnode</em></a> nennt. Mit diesem Modul kann man Node.js direkt in den IIS integrieren. Ich beschreibe in diesem Blogpost allerdings den Weg ohne den IIS.</p>
<p>Um einen Prozess in Windows Azure zu hosten nimmt man am besten die Worker Role her. Dort wird die Basis gelegt um die Node.js Umgebung samt Anwendung zu starten und einen Port nach außen durchzureichen. </p>
<h2>Die Node.js Anwendung</h2>
<p>Zuerst zur Demo App für Node.js. Die Anwendung reagiert auf folgende Routen</p>
<ul>
<li>/ (Redirect auf /info )</li>
<li>/json (Rückgabe als JSON)</li>
<li>/info (Info-Text als HTML Rückgabe)</li>
<li>/form (Eine einfache Eingabemaske)</li>
<li>/data (Die Ausgabe der /form via POST)</li>
</ul>
<p>und verwendet hierfür zwei Module. Zum einen <a href="https://github.com/creationix/node-router" title="node-router">node-router</a> um die URL Routen mit Funktionalität zu verknüpfen, zum anderen <a href="https://github.com/felixge/node-formidable" title="node-formidable">node-formidable</a> um Postback Daten einer HTML Form einfach auszuwerten.</p>
<p>Normalerweise installiert man Node Module per npm. Allerdings ist das node-router Modul nicht in der npm Registry. Somit habe ich es einfach mittels</p>
<pre><code>git clone git@github.com:creationx/node-router.git node-router
</code></pre>
<p>in das Verzeichnis <em>node</em>modules_ hineinkopiert. Formidable dagegen ist in der npm Registry und kann mittels </p>
<pre><code>npm install formidable
</code></pre>
<p>installiert werden. Damit habe ich folgende Verzeichnisstruktur in meiner Node Anwendung:</p>
<pre><code>- index.js
- node_modules
- formidable
- node-router
</code></pre>
<p>In index.js werden zuerst die Module referenziert</p>
<pre><code>var server     = require( "node-router" ).getServer(),
util       = require( "util" ),
formidable = require( "formidable" );
</code></pre>
<p><em>util</em> enthält ein paar praktische Helfer unter anderem um Objekt-Dumps in der Console anzuzeigen</p>
<pre><code>console.log( util.inspect( fields ) );
</code></pre>
<p>Das Modul <em>node-router</em> erlaubt es einfach Routen mit den entsprechenden HTTP Verb an Funktionen zu binden. Zum Beispiel</p>
<pre><code>server.get( "/", function( req, res ) {
res.redirect( "/info" );
} );
</code></pre>
<p>wird mit der Route &#8220;/&#8221; und dem HTTP Verb die Funktion verknüfpt in welcher dann ein Redirect auf &#8220;/info&#8221; erfolgt.</p>
<p>Mit dem Modul <em>formidable</em> kann man einfach Form Daten auswerten und bekommt einen Callback für jedes Formfeld zurück. </p>
<pre><code>var form = new formidable.IncomingForm();
form.on( "field", function( field, value ) {
console.log( field, value );
} );
</code></pre>
<p>Das Gesamtlisting von index.js sieht dann folgendermaßen aus:</p>
<pre><code>var server = require( "node-router" ).getServer(),
util = require( "util" ),
formidable = require( "formidable" );
server.get("/", function (req, res, match) {
res.redirect( "/info" );
} );
server.get( "/info", function ( req, res, match ){
res.writeHead( 200, { "Content-Type": "text/html" });
res.write( "&lt;h1&gt;Node.js on Windows Azure&lt;/h1&gt;" );
res.write( "&lt;div&gt;A simple demo app using node-router and node-formidable.&lt;/div&gt;" );
res.end();
} );
server.get( "/json", function( req, res ) {
res.simpleJson( 200, { name: "Dariusz", email:          "dparys@microsoft.com" });
} );
server.get( "/form", function( req, res ) {
res.writeHead( 200, { "Content-Type": "text/html" });
res.write( "&lt;form method='post' action='/data'&gt;");
res.write( "&lt;label for='eingabe'&gt;Nachricht&lt;/label&gt;&lt;br/&gt;");
res.write( "&lt;input type='text' name='eingabe' /&gt;");
res.write( "&lt;input type='submit' name='Senden' value='Senden'/&gt;");
res.write( "&lt;/form&gt;" );
res.end();
} );
server.post( "/data", function( req, res ) {
var form = new formidable.IncomingForm();
// Writing a 200 header cause I'm
// optimistic. Don't do this in production code!
res.writeHead( 200, { "content-type": "text/html" } );
res.write( "&lt;h1&gt;Data from Post&lt;/h1&gt;");
form
.on( "field", function( field, value ) {
res.write( "&lt;h3&gt;" + field + "&lt;/h3&gt;" );
res.write( "&lt;div&gt;" + value + "&lt;/div&gt;"   );
} )
.on( "end", function() {
res.end();
} );
form.parse( req );
} );
server.listen( 80 );
</code></pre>
<h2>Die Worker Role für Windows Azure</h2>
<p>In einem neuen Windows Azure Projekt legt man eine Worker role an. In diese kopiert man nun folgende Dateien</p>
<pre><code>- node.exe
- index.js
- node_modules
- node-router
- package.json
- lib
- node-router.js
- formidable
- package.json
- lib
- file.js
- incoming_form.js
- index.js
- multipart_parser.js
- querystring_parser.js
- util.js
</code></pre>
<p>und stellt bei der Eigenschaft <em>Copy If Newer</em> ein. Damit wird die Node Anwendung ins Output Verzeichnis kopiert. Man kann natürlich auch ein Post Build Event einbauen das einfach die Dateien rüberkopiert, so kann man von xcopy profitieren ohne für jede einzelne Datei die Einstellungen zu tätigen.</p>
<p>Um die <em>node.exe</em> in der Windows Azure Umgebung zu starten benutzt man den Hook <em>OnStart()</em> in der <em>WorkerRole</em> Klasse. Mittels <em>Process()</em> wird ein neuer Prozess gestartet und die entsprechenden Umgebungsparameter gesetzt.</p>
<pre><code>public override bool OnStart()
{
process = new Process()
{
StartInfo = new ProcessStartInfo(
Environment.ExpandEnvironmentVariables(
@"%RoleRoot%\approot\node.exe"),
"index.js" )
{
UseShellExecute = false,
CreateNoWindow = true,
WorkingDirectory =
Environment.ExpandEnvironmentVariables(
@"%RoleRoot%\approot\" )
}
};
process.Start();
return base.OnStart();
}
</code></pre>
<p>Zum Schluß muss man noch in der Konfiguration der Worker Role einen <em>TCP</em> Port nach außen einrichten. Der <a href="http://ntotten.com/2011/08/nodejs-on-windows-azure/" title="Node.js on Windows Azure">Code</a> hierfür kommt von Nathan Totten.</p>
<p><img src="/images/nodejs/port-settings.png" alt="TCP Port in Visual Studio einrichten"/></p>
<h2>Deployment nach Windows Azure</h2>
<p>Der Rest ist reine Formsache. Packages erstellen und nach Windows Azure hochladen,</p>
<p><img src="/images/nodejs/deploy-dialog.png" alt="Windows Azure Upload Dialog"/></p>
<p>warten bis der Upgrade durch ist</p>
<p><img src="/images/nodejs/running-deploy.png" alt="Windows Azure running an upgrade"/></p>
<p>und final noch den Browser öffnen und schauen ob die Anwendung läuft.</p>
<p><img src="/images/nodejs/browser.png" alt="Running Node.js on Windows Azure"/></p>
<h2>Grundlage gelegt</h2>
<p>Damit ist die Grundlage gelegt um Node.js Anwendung auf Windows Azure zu betreiben. Vieles muss man noch von Hand machen. Einen komfortableren Weg kann man mit der Vorgefertigten Windows Azure Rolle <a href="http://smarxrole.codeplex.com/" title="Smarxrole auf Codeplex">SmarxRole</a> nehmen. Steve Marx hat hier neben Node.js zusätzlich Ruby und Python eingebunden und verknüpft das mit einer komfortablen Anwendungsinstallation die direkt aus GitHub oder dem Azure Storage erfolgen kann.</p>
<p>Unter den <a href="https://github.com/joyent/node/wiki/modules" title="Node.js modules on Github">zahlreichen Modulen</a> die es für Node.js gibt findet man auch <a href="https://github.com/jpgarcia/waz-storage-js" title="Windows Azure Storage Node.js Module">eines</a> das den Zugriff auf die Windows Azure Blob Storage und Queue API kapselt. Natürlich sind die großen Service APIs wie Dropbox, Twitter, Facebook, usw. auch vertreten. Einfach mal <a href="https://github.com/jpgarcia/waz-storage-js" title="Windows Azure Storage Node.js Module">reinschauen</a>.</p>
<img src="http://feeds.feedburner.com/~r/kouder/~4/Sy8YwZah_q0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://kouder.net/2011/10/24/node-js-auf-windows-azure-hosten/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://kouder.net/2011/10/24/node-js-auf-windows-azure-hosten/</feedburner:origLink></item>
		<item>
		<title>How to safeguard your site with HTML5 sandbox</title>
		<link>http://feedproxy.google.com/~r/kouder/~3/n_TmmwhEsRo/</link>
		<comments>http://kouder.net/2011/10/07/how-to-safeguard-your-site-with-html5-sandbox/#comments</comments>
		<pubDate>Fri, 07 Oct 2011 06:50:37 +0000</pubDate>
		<dc:creator>Dariusz</dc:creator>
				<category><![CDATA[HTML]]></category>
		<category><![CDATA[HTML5]]></category>

		<guid isPermaLink="false">http://h1979515.stratoserver.net/2011/10/07/how-to-safeguard-your-site-with-html5-sandbox/</guid>
		<description><![CDATA[Todays web applications are often integrating various resources to mesh up a new experience. This can be Twitter widgets to show up the latest tweets about a product, this can be Facebook comments to discuss a specific article or just plain integrated web pages through an IFRAME element. Latter is a concern and there is a new [...]]]></description>
			<content:encoded><![CDATA[<p>Todays web applications are often integrating various resources to mesh up a new experience. This can be Twitter widgets to show up the latest tweets about a product, this can be Facebook comments to discuss a specific article or just plain integrated web pages through an <em>IFRAME</em> element. Latter is a concern and there is a new kid on the block to help you out here: The HTML5 Sandbox.</p>
<p>The <em>IFRAME</em> element is useful to integrate complete HTML web pages into your own web page. Using the<em>IFRAME</em> element is straightforward. You specify the tag and link to the source of content you want to embed into your webpage.</p>
<pre><code>&lt;iframe src="somecontent.html"&gt;&lt;/iframe&gt; </code></pre>
<p>A lot of today’s websites are using the <em>IFRAME</em> tag to integrate content. This can be as simple as hosting advertisement as a seperate entity and as complex as providing an email service showing user generated HTML mails.</p>
<p>Whatever your scenario is to use the IFRAME element tag, you should know that there are some valid security concerns to host content this way.</p>
<h2>A black box</h2>
<p>Embedding content with an <em>IFRAME</em> is like hosting an party announced publicly on Facebook. You think you know who you have shared your annoucement, but you have no idea who reshared and who will come. The same is true for framing content. You know what you are referencing but you have no idea how the site will evolve in the future. This is true for the content of the page you include as well as for the functionality of the page.</p>
<h2>Security concerns using iframe</h2>
<p>The source of content is a regular HTML page with all options you have in HTML. The browser handles the page like any other regular web page. Forms can be used to retrieve user input, scripts can be executed, the page can navigate within the browser window, browser plugins can be executed – you have no control what the hosted content will do. At least there is one mechanism in place by default which prevents some kind of attacks. The cross-domain policy.</p>
<h3>Rehosting content from another domain</h3>
<p>If the hosted content is coming from another domain, cross-domain policy comes into play and is prohibiting the foreign content to access the parents document object model.</p>
<p><img src="/images/sandbox/iframe-foreign-domain-explained.png" alt="" width="600" /></p>
<p>The embedded page is not able to read for instance cookies or the browser’s local storage for the hosted domain. But there are still risks left. Such hosted content can still renavigate on the top level and display the same website like the user would expect, trying to phish some confidential information from the user. Or try to retrieve more information from the user through an form which is styled as it would belong to the same page. It is still a big risk.</p>
<h3>Rehosting content from the same domain</h3>
<p>The case for rehosting content from the same domain is even worse. No security restrictions are applied as the content is coming from the same domain. Embedded content is able to access the complete loaded browser DOM and manipulate everything. Also content on the same domain should be safe, but there is still the risk of user generated content if such will be rehosted in the <em>IFRAME</em></p>
<p><img src="/images/sandbox/iframe-same-origin-explained.png" alt="" width="600" /></p>
<h2>A sandboxed approach</h2>
<p>All those valid concerns haven’t been addressed for a long time by standards body. Therefore Microsoft provided an <a title="IE8 IFrame Security Attribute" href="http://blogs.msdn.com/b/ie/archive/2008/01/18/using-frames-more-securely.aspx">proprietary implementation</a> of <em>IFRAME</em> security in Internet Explorer 8. This implementation was due the fact of a missing W3C standard and showed the necessity of securing the host from framed content. Others picked up Internet Exporers implementation and <a title="Bugzilla IE Support for IFrame Security" href="https://bugzilla.mozilla.org/show_bug.cgi?id=341604">discussed</a> it as baseline for their browsers as well. Today’s Internet Explorer implementation is based on the <a title="W3C IFrame Sandbox Attribute" href="http://dev.w3.org/html5/spec-author-view/the-iframe-element.html#attr-iframe-sandbox">W3C IFrame Sandbox Attribute</a>.</p>
<p>The sandbox attribute was introduced with HTML5. Its purpose is to secure the content host of the embedded resource. To apply it just add it as empty attribute to the <em>IFRAME</em> element.</p>
<pre><code>&lt;iframe sandbox src="http://somewebsite.com/default.html"&gt;&lt;/iframe&gt; </code></pre>
<p>That’s it. The <em>IFRAME</em> sandboxed content is rehosted in the browser with the following restrictions:</p>
<ul>
<li>Plugins are disabled. Any kind of ActiveX, Flash or Silverlight Plugin will not be executed.</li>
<li>Forms are disabled. The hosted content is not allowed to make form post back to any target.</li>
<li>Scripts are disabled. JavaScript is disabled and will not execute.</li>
<li>Links to other browsing contexts are disabled. An anchor tag targeting different browser levels will not execute.</li>
<li>Unique origin treatment. All content is treated under an unique origin. The content is not able to traverse the DOM or read Cookie information.</li>
</ul>
<p>This means that even content coming from the same domain is treated with the cross-domain policy, as each <em>IFRAME</em> content will be viewed as an unique origin.</p>
<p><img src="/images/sandbox/iframe-sandbox-unique-origin-explained.png" alt="" width="600" /></p>
<p>Embedded content is just able to display information. No further actions can be done inside the iframe which could compromise the hosting website.</p>
<h2>Checking for the sandbox attribute</h2>
<p>We know that an <em>IFRAME</em> is an open gate. We know that the sandbox attribute is locking down security of hosted content. The decision is clear: Use <em>IFRAME</em> elements just with the sandbox attribute! You can check if the browser supports the IFRAME sandbox attribute with a simple check in JavaScript:</p>
<pre><code>if( "sandbox" in document.createElement( "IFRAME" ) ) { // render the iframe element... } else { // embed content through other ways, // as the browser does not support the sandbox } </code></pre>
<p>If it is the case just use it. If not try to embed the content through other ways or just display the user a message that he should upgrade to a <a title="The beauty of the web" href="http://www.thebeautyoftheweb.com/">modern browser</a>.</p>
<h2>Customizing the Sandbox</h2>
<p>There are cases where we need some level of customization on the restrictions. This is possible with the sandbox attribute. Several attribute values relax the standard sandbox policy.</p>
<h3>allow-forms</h3>
<p>If you want to enable forms post back within the <em>IFRAME</em> element you just specify the <em>allow-forms</em> value for the sandbox attribute.</p>
<pre><code>&lt;iframe sandbox="allow-forms" src="xyz.html"&gt;&lt;/iframe&gt; </code></pre>
<p>If this value is present the embedded page is allowed to post back using a form submit within the frame.</p>
<h3>allow-scripts</h3>
<p>JavaScript is a powerful language and is often used to have dynamic interactions on the client side without resending information to the server. But that power brings also risks when rehosting foreign web pages. Therefore, think if you really want to enable JavaScript in <em>IFRAME</em> scenarios. Especially when the content is from an unknown source.</p>
<p>Enabling JavaScript is done through the allow-scripts value.</p>
<pre><code>&lt;iframe sandbox="allow-scripts" src="xyz.html"&gt;&lt;/iframe&gt; </code></pre>
<h3>allow-same-origin</h3>
<p>Per default an <em>IFRAME</em> page from the same domain has the possibility to access the parent’s document object model. With the sandbox attribute in place the page will be treated not under the same origin. This page has <em>no</em> access to the resources even when coming from the same domain.</p>
<p>To reenable same origin treatment in an sandboxed scenario you have to specify the <em>allow-same-orign</em>attribute.</p>
<pre><code>&lt;iframe sandbox="allow-same-origin" src="xyz.html"&gt;&lt;/iframe&gt; </code></pre>
<p>The value itself is not very helpful as you need some script capabilities to make use of it. Here is an example. If you want to access the local storage of the current domain like in this code snippet</p>
<pre><code>function loadFromStorage( key ) { if( localStorage ) { return localStorage.getItem( key ); } }); </code></pre>
<p>you also need the allow-scripts value.</p>
<pre><code>&lt;iframe sandbox="allow-scripts allow-same-origin" src="xyz.html"&gt;&lt;/iframe&gt; </code></pre>
<p>Now access works. But be warned:</p>
<blockquote><p>Allowing scripts and same origin in the same sandbox enables the hosted content to manipulate the attributes of the sandbox and remove further restrictions.</p></blockquote>
<h3>allow-top-navigation</h3>
<p>Per default anchor targeting other browsing contexts are ignored and not executed. This protects the website hosting the <em>IFRAME</em> content from being replaced by the hosted content. The following anchor link will not be executed in the default sandbox</p>
<pre><code>&lt;a href="xyz.html" target="_top"&gt;Click me&lt;/a&gt; </code></pre>
<p>as the target would replace the complete web page.</p>
<p>Therefore relaxing this policy is also just recommended if you trust the content you host.</p>
<pre><code>&lt;iframe sandbox="allow-top-navigation" src="xyz.html"&gt;&lt;/iframe&gt; </code></pre>
<h3>ms-allow-popups</h3>
<p>Sometimes it is useful to allow embedded content opening up new popup windows. A perfect example is using mapping services like Bing Maps. When embedding bing map some more functionality like directions or information about the place shown can be looked up in popup windows. Due to the fact that the sandbox is prohibiting this, there is a setting in Internet Explorer 10 which enables popups without compromising the sandbox. The following code shows how to setup <em>ms-allow-popups</em>.</p>
<pre><code>&lt;iframe sandbox="ms-allow-popups" src="xyz.html"&gt;&lt;/iframe&gt; </code></pre>
<p>When setting this value embedded sites are able to display information in a new window</p>
<pre><code>&lt;a href="xyz.html" target="_new"&gt;Show Info&lt;/a&gt; </code></pre>
<h2>Putting it all together</h2>
<p>You can combine several attribute values on one sandbox, for instance, you want to enable forms postback, top-level navigation and JavaScript, just specify</p>
<pre><code>&lt;iframe sandbox="allow-forms allow-top-navigation allow-scripts" src="xyz.html"&gt;&lt;/iframe&gt; </code></pre>
<p>It is also good to know that the sandbox behaves correctly when used in hierachical situations – several nested iframes with different sandbox attribute values. The top level sandbox always dominates down the hierachy. For instance if the top <em>IFRAME</em> sandbox is just allowing forms you can’t extend the sandbox in an <em>IFRAME</em> below to allow scripts.</p>
<p>You can play around with the HTML sandbox in <a title="HTML5 Sandbox Demo" href="http://kouder.net/storage/demos/sandbox/index.html">this demo</a>.</p>
<p><img src="/images/sandbox/sandbox-demo.png" alt="" width="600" /></p>
<p>You can also download a <a title="HTML5 Sandbox Demo on GitHub" href="https://github.com/writeline/HTML5-Sandbox-Demo">copy</a> of this demo from Github to play around with it. To enable the form postback demo just open the project folder in WebMatrix and start the project from there.</p>
<h2>Conclusion</h2>
<p>The sandbox attribute is the key to use the <em>IFRAME</em> element in a secure way on your website. You should check if the browser is supporting the HTML sandbox and display the content just in that case. Start today, download a modern browser like <a title="Download IE10 PP2" href="http://ie.microsoft.com/testdrive/Default.html">Internet Explorer 10 Platform Preview 2</a> and get familiar with the sandbox by reading the <a title="IE10 Developer Guide" href="http://msdn.microsoft.com/de-de/ie/gg192966.aspx">IE developer guide</a>. This is a step towards a more secure web and modern browsers are ready to sandbox embedded content.</p>
<img src="http://feeds.feedburner.com/~r/kouder/~4/n_TmmwhEsRo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://kouder.net/2011/10/07/how-to-safeguard-your-site-with-html5-sandbox/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://kouder.net/2011/10/07/how-to-safeguard-your-site-with-html5-sandbox/</feedburner:origLink></item>
		<item>
		<title>Experimente mit CSS Styling</title>
		<link>http://feedproxy.google.com/~r/kouder/~3/MGKyiya-vpg/</link>
		<comments>http://kouder.net/2011/08/05/experimente-mit-css-styling/#comments</comments>
		<pubDate>Fri, 05 Aug 2011 11:04:26 +0000</pubDate>
		<dc:creator>Dariusz</dc:creator>
				<category><![CDATA[HTML]]></category>
		<category><![CDATA[CSS 3]]></category>
		<category><![CDATA[Metro Design]]></category>

		<guid isPermaLink="false">http://h1979515.stratoserver.net/2011/08/05/experimente-mit-css-styling/</guid>
		<description><![CDATA[Inspiriert von dem Windows 8 Video auf YouTube habe ich mal angefangen einige CSS Styles zu entwickeln die dem Look &#38; Feel der dort gezeigten Shell entsprechen. Auf der Shell sind verschiedene Kacheln die unterschiedliche Inhalte darstellen. Eine dieser Kacheln zeigt ein Foto mit einer Bildunterschrift (die eingerahmte Kachel). Bilder kann man mittels des img [...]]]></description>
			<content:encoded><![CDATA[<p>Inspiriert von dem <a href="http://www.youtube.com/watch?v=p92QfWOw88I" title="Building Windows 8 Video #1">Windows 8 Video</a> auf YouTube habe ich mal angefangen einige CSS Styles zu entwickeln die dem Look &amp; Feel der dort gezeigten Shell entsprechen. Auf der Shell sind verschiedene Kacheln die unterschiedliche Inhalte darstellen. Eine dieser Kacheln zeigt ein Foto mit einer Bildunterschrift (die eingerahmte Kachel).</p>
<p><img src="/images/metro/windows8video.png" width="500"/></p>
<p>Bilder kann man mittels des <em>img</em> Elements platzieren und mit einer entsprechenden Textpassage beschreiben. Das könnte z.B. so aussehen:</p>
<pre><code>&lt;img src="barca-vs-real.jpg"/&gt;
&lt;p&gt;El Classico deklassierend, der FC Barcelona gegen Real Madrid - Endstand 5:0&lt;/p&gt;
</code></pre>
<p><img src="/images/metro/barca-vs-real.jpg"/></p>
<p>El Classico deklassierend, der FC Barcelona gegen Real Madrid &#8211; Endstand 5:0</p>
<h2>Figure und Figcaption</h2>
<p>Es gibt allerdings eine bessere Möglichkeit. Mittels <em>Figure</em> und <em>Figcaption</em> kann man Inhalte semantisch zusammenfassen. Grafik und Untertitel bilden so eine Einheit.</p>
<pre><code>&lt;figure&gt;
&lt;img src="barca-vs-real.jpg"/&gt;
&lt;figcaption&gt;
El Classico deklassierend, der FC Barcelona gegen Real Madrid - Endstand 5:0
&lt;/figcaption&gt;
&lt;/figure&gt;
</code></pre>
<p>Das Ergebnis würde allerdings in der Ausgabe identisch sein wie oben, mit dem Unterschied das man es jetzt einfacher Stylen kann. Denn <em>figure</em> und <em>figcaption</em> können nun als Stylingcontainer genutzt werden.</p>
<h2>Die Kachel bauen</h2>
<p>Um nun das gleiche Look &amp; Feel zu bekommen benötige ich noch mehr Dinge. Zum einen hat die Kachel neben dem eigentlichen Bild-Inhalt auch noch ein Icon, zum anderen neben dem Beschreibenden Text auch noch einen Hinweis auf die Nummer des Fotos.</p>
<p>Für das Bild das ich verwende möchte ich ein Foto Icon verwenden und das Datum der Publizierung. Daraus ergibt sich nun folgendes HTML:</p>
<pre><code>&lt;figure&gt;
&lt;img src="barca-vs-real.jpg"/&gt;
&lt;figcaption&gt;
&lt;img src="images/camera.png"/&gt;
&lt;div&gt;El Classico deklassierend, der FC Barcelona gegen Real Madrid - Endstand 5:0&lt;/div&gt;
&lt;time pubdate="2011-08-05"&gt;5. August 2011&lt;/time&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
</code></pre>
<p>
<figure>
<img src="/images/metro/barca-vs-real.jpg"/></p>
<figcaption>
<img src="/images/metro/camera.png"/></p>
<div>El Classico deklassierend, der FC Barcelona gegen Real Madrid &#8211; Endstand 5:0</div>
<p><time pubdate="2011-08-05">5. August 2011</time><br />
</figcaption>
</figure>
<p>Das Ergebnis ist nach wie vor weit von der eigentlichen Kachel weg, die Grundlage für das Styling ist jetzt aber gelegt. Anmerkung: Das Kamera Icon ist weiß und deshalb momentan noch nicht zu sehen.</p>
<h2>CSS Anwenden</h2>
<p>Ich schätze Designer benutzen grafische Tools um Layouts für Webseiten zu erstellen. Entwickler tendieren meist dazu direkt Code zu schreiben, ich für meinen Fall habe das CSS von Hand erstellt. Wer jedoch mehr Code-basiert CSS schreiben möchte, dem würde <a href="http://sass-lang.com" title="SASS">SASS</a> empfehlen, eine Meta-Sprache um CSS zu beschreiben und zu erstellen. </p>
<pre><code>body
{
font-family: "Segoe WP";
font-size: 1em;
}
figure
{
margin: 0;
float: left;
position: relative;
}
figure &gt; img
{
width: 100%;
}
figcaption
{
margin: 0;
position: absolute;
bottom: 0px;
left: 0px;
width: 100%;
vertical-align: text-bottom;
background-color: DarkRed;
color: White;
max-height: 20%;
}
figcaption div
{
font-size: 1.2em;
}
figcaption img
{
float: left;
padding: 1%;
}
figcaption time
{
float: right;
padding-right: 1%;
font-size: 0.8em;
}
</code></pre>
<p>Das Resultat sieht jetzt fast aus wie eine Kachel aus dem Windows 8 Video:</p>
<p><iframe src="/storage/demos/barca-vs-real.html" scrolling="no" frameborder="0" width="502" height="384" marginwidth="0" marginheight="0"></iframe></p>
<p>Eine Referenz als Grafik, falls die Schriftart nicht auf Eurem Rechner ist.</p>
<p><img src="/images/metro/elclassico.png"/></p>
<h2>Ich bin Entwickler</h2>
<p>Yep, Entwickler und kein Designer. Dementsprechend hat das obige CSS auch noch seine Tücken. Ist zum Beispiel der beschreibende Text kürzer so wird das Erscheinungsdatum nicht unten rechts sondern rechts mittig angezeigt. Auch das Verändern des Browserfensters hat Einfluß auf den eigentlichen Inhalt, sowie die Tatsache das ich die Windows Phone 7 Schrift verwende welche auf den meisten PC&#8217;s nicht vorhanden sein dürfte. </p>
<p>Trotzdem ist es recht einfach die Shell Elemente nachzubauen, ich habe auf Github Spaßeshalber ein <a href="https://github.com/writeline/Metro-Style-Experiments" title="Metro Style Experiments">Projekt</a> angelegt welches ich ab und zu aktualisieren werde.</p>
<img src="http://feeds.feedburner.com/~r/kouder/~4/MGKyiya-vpg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://kouder.net/2011/08/05/experimente-mit-css-styling/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://kouder.net/2011/08/05/experimente-mit-css-styling/</feedburner:origLink></item>
		<item>
		<title>Willkommen auf Windows – Node.js</title>
		<link>http://feedproxy.google.com/~r/kouder/~3/aNUTLP53RkE/</link>
		<comments>http://kouder.net/2011/07/27/willkommen-auf-windows-node-js/#comments</comments>
		<pubDate>Wed, 27 Jul 2011 10:34:50 +0000</pubDate>
		<dc:creator>Dariusz</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Node.js]]></category>

		<guid isPermaLink="false">http://h1979515.stratoserver.net/2011/07/27/willkommen-auf-windows-node-js/</guid>
		<description><![CDATA[Anwendungen auf Windows lassen sich in verschiedensten Sprachen und mit verschiedensten Frameworks entwickeln. Ob mit C / C++, C#, Visual Basic, Python, Java, Ruby oder Frameworks wie .NET, J2EE, etc&#8230; Anwendungsentwickler haben viel Auswahl. Seit kurzem gibt es nun weiteren Zuwachs: Node.js. Node.js is an event-driven I/O server-side JavaScript environment based on V8. It is [...]]]></description>
			<content:encoded><![CDATA[<p>Anwendungen auf Windows lassen sich in verschiedensten Sprachen und mit verschiedensten Frameworks entwickeln. Ob mit C / C++, C#, Visual Basic, Python, Java, Ruby oder Frameworks wie .NET,  J2EE, etc&#8230; Anwendungsentwickler haben viel Auswahl. Seit kurzem gibt es nun weiteren Zuwachs: <a href="http://nodejs.org" title="Node.js">Node.js</a>. </p>
<blockquote>
<p>Node.js is an event-driven I/O server-side JavaScript environment based on V8. It is intended for writing scalable network programs such as web servers. It was created by Ryan Dahl in 2009</p>
</blockquote>
<h2>Serverseitiges JavaScript</h2>
<p>Node.js programmiert man mit JavaScript. Die API ist sehr low-level, sprich, viel Infrastruktur die man von anderen Webstacks gewöhnt ist, wie z.B. vom IIS muss man hier erst selbst schreiben. Doch es gibt schon eine recht rege Community die kontinuierlich neue Packages erstellt und pflegt.</p>
<h2>Ein einfacher Webserver</h2>
<p>Nach dem herunterladen von Node kopiert man die Node.exe in ein beliebiges Verzeichnis und startet dann aus diesem seine Projekte. Ein paar Grundlegende APIs kommen schon mit Node.js mit, sodass man einen HTTP request mit wenigen Zeilen Code bedienen kann.</p>
<pre><code>var http = require( "http" );
function onRequest( request, response ) {
response.writeHead( 200, { "Content-Type" : "text/plain" } );
response.end( "Hello aus Node.js" );
}
http.createServer( onRequest ).listen( 4567 );
console.log( "listening on http://localhost:4567" );
</code></pre>
<p>Die Datei speichert man unter einem beliebigen Namen (bei mir <em>first-node-app.js</em>) im gleichen Verzeichnis wie die <em>node.exe</em> und gibt einfach folgenes ein:</p>
<pre><code>node first-node-app.js
</code></pre>
<p>Mit dem Browser auf http://localhost:4567 navigieren und der Text erscheint.</p>
<h2>Eigene Module</h2>
<p>Um Funktionalität wiederzuverwenden kann man sich Module erstellen. Diese werden in eigenen JavaScript Dateien abgelegt und können über <em>require</em> eingebunden werden. Ein Modul könnte z.B. so aussehen:</p>
<pre><code>exports.message = function() {
return
"&lt;!doctype html&gt;" +
"&lt;html&gt;" +
"   &lt;head&gt;" +
"       &lt;title&gt;Served by node.js&lt;/title&gt;" +
"   &lt;/head&gt;" +
"   &lt;body&gt;" +
"       &lt;h1&gt;Hello, world.&lt;/h1&gt;" +
"       &lt;h2&gt;brought to you by node.js&lt;/h2&gt;" +
"   &lt;/body&gt;" +
"&lt;/html&gt;";
};
</code></pre>
<p>Dieses Modul unter <em>welcome.js</em> gespeichert kann nun direkt aus dem <em>first-app.node.js</em> im Code referenziert und verwendet werden:</p>
<pre><code>var http = require( "http" ),
welcome = require( "welcome" );
function onRequest( request, response ) {
response.writeHead( 200, { "Content-Type" : "text/html" } );
response.write( welcome.message() );
response.end();
}
http.createServer( onRequest ).listen( 4567 );
console.log( "listening on http://localhost:4567" );
</code></pre>
<h2>Andere Pakete installieren</h2>
<p><em>npm</em> ist der Node Package Manager welcher für Windows noch nicht zur Verfügung steht. Trotzdem kann man diese Pakete verwenden. Die Schritte sind einfach</p>
<ol>
<li>Zip-Paket herunterladen</li>
<li>Im Anwendungsverzeichnis auspacken und so umbenennen das es genauso heisst wie das referenzierte JavaScript Modul.</li>
<li>Im Code referenzieren und benutzen</li>
</ol>
<p>Somit lässt sich z.B. das <a href="https://github.com/creationix/node-router" title="Node-Router">node-router</a> Paket von GitHub herunterladen und benutzen.</p>
<pre><code>var router = require( "node-router" ),
welcome = require( "welcome" );
var server = router.getServer();
server.get( "/", function( request, response ) {
response.simpleHtml( 200, welcome.message() );
});
server.listen( 4567, "localhost" );
</code></pre>
<p>Die <em>console.log</em> Ausgabe kann man sich sparen, da der Router entsprechend Ausgaben erzeugt.</p>
<h2>Weitere Informationen</h2>
<p>Für Tutorials und Node.js spezifische Blogs gibt es <a href="https://github.com/joyent/node/wiki/Community" title="Node Community">hier</a> einen guten <a href="https://github.com/joyent/node/wiki/Community" title="Node Community">Einstieg</a>. Herzlich Willkommen Node.js!</p>
<img src="http://feeds.feedburner.com/~r/kouder/~4/aNUTLP53RkE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://kouder.net/2011/07/27/willkommen-auf-windows-node-js/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://kouder.net/2011/07/27/willkommen-auf-windows-node-js/</feedburner:origLink></item>
		<item>
		<title>(function(){})() – 10 T-Shirts zu verschenken</title>
		<link>http://feedproxy.google.com/~r/kouder/~3/BknUVqPzV-g/</link>
		<comments>http://kouder.net/2011/07/27/function-10-t-shirts-zu-verschenken/#comments</comments>
		<pubDate>Wed, 27 Jul 2011 07:41:07 +0000</pubDate>
		<dc:creator>Dariusz</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://h1979515.stratoserver.net/2011/07/27/function-10-t-shirts-zu-verschenken/</guid>
		<description><![CDATA[Wer JavaScript liebt der mag vielleicht eines dieser T-Shirts haben? Ich verschenke diese, man muss allerdings eine Kleinigkeit tun. Einfach in den Comments einen Link zu einem JavaScript relevanten Post den man selbst verfasst hat oder einen Link auf sein eigenes JavaScript relevantes Projekt auf GitHub / Codeplex hinterlassen. Ich werde dann über die Comments [...]]]></description>
			<content:encoded><![CDATA[<p>Wer JavaScript liebt der mag vielleicht eines dieser T-Shirts haben?</p>
<p><span class="full-image-block ssNonEditable"><span><img src="/images/shirts.jpg" alt=""/></span></span></p>
<p>Ich verschenke diese, man muss allerdings eine Kleinigkeit tun. Einfach in den Comments einen Link zu einem JavaScript relevanten Post den man selbst verfasst hat oder einen Link auf sein eigenes JavaScript relevantes Projekt auf GitHub / Codeplex hinterlassen. Ich werde dann über die Comments gehen und Euch direkt anschreiben. Falls der Referenzlink keine Kontaktdaten enthält, einfach zusätzlich mir eine Email über das Kontaktformular schreiben.</p>
<p>Erwähnen sollte ich noch das auf der Rückseite des Shirts ein Microsoft Logo am Nacken platziert ist.</p>
<p>Am 11. August verschicke ich die Shirts dann.</p>
<img src="http://feeds.feedburner.com/~r/kouder/~4/BknUVqPzV-g" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://kouder.net/2011/07/27/function-10-t-shirts-zu-verschenken/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		<feedburner:origLink>http://kouder.net/2011/07/27/function-10-t-shirts-zu-verschenken/</feedburner:origLink></item>
	</channel>
</rss>

