<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	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/"
	>

<channel>
	<title>source code bean</title>
	<atom:link href="http://sourcecodebean.com/feed" rel="self" type="application/rss+xml" />
	<link>http://sourcecodebean.com</link>
	<description>thoughts and ideas from a .net developer</description>
	<lastBuildDate>Fri, 27 Jan 2012 20:36:28 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Node.js: Callbacks are polluting your code</title>
		<link>http://sourcecodebean.com/archives/callbacks-are-polluting-your-code/1488</link>
		<comments>http://sourcecodebean.com/archives/callbacks-are-polluting-your-code/1488#comments</comments>
		<pubDate>Wed, 25 Jan 2012 18:27:05 +0000</pubDate>
		<dc:creator>Peter</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Node.js]]></category>

		<guid isPermaLink="false">http://sourcecodebean.com/?p=1488</guid>
		<description><![CDATA[I have been hacking on a project in Node.js/Express.js for some time now. I am really impressed by how fast it is to code and prototype in Node, not much gets in your way. However, there is one thing I am still struggling with, the callback model of Node.js applications. It is not that it [...]]]></description>
			<content:encoded><![CDATA[<p>I have been hacking on a project in Node.js/Express.js for some time now. I am really impressed by how fast it is to code and prototype in Node, not much gets in your way. However, there is one thing I am still struggling with, the callback model of Node.js applications. It is not that it is conceptually hard to understand or use, but i feel that it keeps me from writing clean code. </p>
<p><span id="more-1488"></span>Let&#8217;s imagine that we are writing a small nonsense program. The program receives a post, create some variable x, if some condition is true we call an async method to get some result and assign it to x.result. In the end we want to save x (also async). This would probably be my first attempt in node:<br />
&nbsp;</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">app.<span class="me1">post</span><span class="br0">&#40;</span><span class="st0">&#8216;/someurl&#8217;</span>, <span class="kw2">function</span><span class="br0">&#40;</span>req, res<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">var</span> x = <span class="br0">&#123;</span>..<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">if</span> <span class="br0">&#40;</span>some contidion<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; someOperation<span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span>err, result<span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; x.<span class="me1">result</span> = result</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; x.<span class="me1">save</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span>err, result<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">if</span> <span class="br0">&#40;</span>err<span class="br0">&#41;</span> next<span class="br0">&#40;</span>err<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;res.<span class="me1">redirect</span><span class="br0">&#40;</span>url<span class="br0">&#41;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; x.<span class="me1">save</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span>err, result<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>err<span class="br0">&#41;</span> next<span class="br0">&#40;</span>err<span class="br0">&#41;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; res.<span class="me1">redirect</span><span class="br0">&#40;</span><span class="st0">&#8216;/&#8217;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>&nbsp;</p>
<p>(Edit: To clarify, both someOperation and save is doing some kind of I/O)</p>
<p>So is this clean code? In my opinion it is not. One problem is that we have the save code in two places. Another is that the code is not very easy to read and understand (remember this is a very simple program and so should the code), but it is not. Sure we could move it to a separate function, or refactor it in some other way, that would help some, but if we are still saving in two places, or the code is not crystal clear, we are not really addressing the problem. </p>
<p>Let&#8217;s instead pretend that we are using synchronous methods (which of course would be a very bad thing in Node.js, so don&#8217;t do it)  and save are methods that would block:<br />
&nbsp;</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">app.<span class="me1">post</span><span class="br0">&#40;</span><span class="st0">&#8216;/someurl&#8217;</span>, <span class="kw2">function</span><span class="br0">&#40;</span>req<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">var</span> x = <span class="br0">&#123;</span>..<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">if</span> <span class="br0">&#40;</span>some contidion<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; x.<span class="me1">result</span> = someOperation<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="co1">//synchronous</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">x.<span class="me1">save</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="co1">// synchronous</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">return</span> Redirect<span class="br0">&#40;</span><span class="st0">&#8216;/&#8217;</span><span class="br0">&#41;</span></div>
</li>
</ol>
</div>
<p>&nbsp;<br />
To me this is much cleaner and easier to read, saving is only done in one place and the intent of the code is very clear. But why is it so much easier to read? Being synchronous? I wouldn&#8217;t say so. The reason is because we do not have to deal with verbose callbacks. In my opinion <strong>callbacks are polluting the code.</strong> So now you are probably thinking, how can he be programming in Node if he doesn&#8217;t like using callbacks? I would say that, at least for the small applications i have build on Node so far, the benefits of simplicity and development speed on Node has totally justified using Node. Even with all the horrible callbacks <img src='http://sourcecodebean.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  However, in a larger application I am not so sure, it would be very interesting to try out. </p>
<p>So is there anyway we can get rid of the verbose callback syntax? Yes, if some modifications were made to Javascript. But Javascript as a language is not really evolving that fast, so in the meantime it could probably be implemented in a language that compiles to Javascript, like CoffeScript. What we want to do is to be able to do is asynchronicity, but without callbacks. In C# 5 there is a great solution to this problem, the async/await keywords. By using async/await the application could be implemented something like this (pseudo code warning again):<br />
&nbsp;</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">private async Task&lt;Redirect&gt; Post<span class="br0">&#40;</span>req<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; var x = new &#8230;;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>some contidion<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; x.<span class="me1">result</span> = await someAsyncOperation<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; await x.<span class="me1">save</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">return</span> <span class="kw1">return</span> new Redirect<span class="br0">&#40;</span><span class="st0">&#8216;/&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>&nbsp;<br />
In short, async tells the compiler that the above method is asynchronous and await will suspend execution of the method until someAsyncOperation is done. </p>
<p>So the above example behaves in exactly the same way as the first example, but with the benefits of the second. In the background a lot of magic is used to construct this behavior, but this is something that the compiler will take care of for us and we don&#8217;t have to pollute our code with. </p>
<p>If something like this would be available for Javascript I think it would really make life a lot easier for a lot of Node.js developers. Maybe there is a good solution to this and I am not aware of it (I am far from a Javascript or Node.js expert), if so please enlighten me! </p>
<p>How do you handle flow control in your Node.js applications? How would you have written the example? Any Node.js magic I am missing? </p>
]]></content:encoded>
			<wfw:commentRss>http://sourcecodebean.com/archives/callbacks-are-polluting-your-code/1488/feed</wfw:commentRss>
		<slash:comments>31</slash:comments>
		</item>
		<item>
		<title>MongoDB, C# and Mono</title>
		<link>http://sourcecodebean.com/archives/mongodb-c-and-mono/1408</link>
		<comments>http://sourcecodebean.com/archives/mongodb-c-and-mono/1408#comments</comments>
		<pubDate>Wed, 11 Jan 2012 18:53:48 +0000</pubDate>
		<dc:creator>Peter</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[Mono]]></category>
		<category><![CDATA[NoSQL]]></category>

		<guid isPermaLink="false">http://sourcecodebean.com/?p=1408</guid>
		<description><![CDATA[MongoDB is one of the many free open source NoSQL databases that exist today. I wanted to try out how well the official drivers for C# worked when using Mono. On the MongoDB web site they have pre built binaries of MongoDB for almost every platform, i grabbed the 64 bit binary for OSX. No [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.mongodb.org/">MongoDB</a> is one of the many free open source NoSQL databases that exist today. I wanted to try out how well the official drivers for C# worked when using Mono. </p>
<p>On the MongoDB web site they have pre built binaries of MongoDB for almost every platform, i grabbed the 64 bit binary for OSX. No installation is required, just unzip the file and run the &#8220;mongod&#8221; binary from the directory. There is also a binary called &#8220;mongo&#8221;, this is the <a href="http://www.mongodb.org/display/DOCS/Overview+-+The+MongoDB+Interactive+Shell">mongo interactive shell</a> which is very useful. </p>
<p>The C# drivers are available, both in binary form and as source, from the <a href="http://www.mongodb.org/display/DOCS/CSharp+Language+Center">C# language center</a>. To get started I fired up MonoDevelop 2.8 running on Mono 2.10.8:</p>
<p><a href="http://sourcecodebean.com/wp-content/uploads/2012/01/monodevelop.png"><img src="http://sourcecodebean.com/wp-content/uploads/2012/01/monodevelop-300x187.png" alt="" title="monodevelop" width="300" height="187" class="aligncenter size-medium wp-image-1451" /></a><br />
<a href="http://sourcecodebean.com/wp-content/uploads/2012/01/edit_references.png"><img src="http://sourcecodebean.com/wp-content/uploads/2012/01/edit_references-300x187.png" alt="" title="edit_references" width="300" height="187" class="aligncenter size-medium wp-image-1449" /></a><br />
<a href="http://sourcecodebean.com/wp-content/uploads/2012/01/add_references.png"><img src="http://sourcecodebean.com/wp-content/uploads/2012/01/add_references-300x201.png" alt="" title="add_references" width="300" height="201" class="aligncenter size-medium wp-image-1450" /></a></p>
<p>MonoDevelop has matured a lot since I used it the first time. It is still not as good as Visual Studio, but it is getting there. What takes most time to get used to is the totally different set of shortcuts, and the lack of all ReSharper magic. </p>
<p>Let me break down a simple console application example on how to use MongoDB using the official driver from 10gen: <span id="more-1408"></span></p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">using System;</div>
</li>
<li class="li1">
<div class="de1">using System.<span class="me1">Collections</span>.<span class="me1">Generic</span>;</div>
</li>
<li class="li2">
<div class="de2">using System.<span class="me1">Linq</span>;</div>
</li>
<li class="li1">
<div class="de1">using MongoDB.<span class="me1">Bson</span>;</div>
</li>
<li class="li1">
<div class="de1">using MongoDB.<span class="me1">Driver</span>;</div>
</li>
<li class="li1">
<div class="de1">using MongoDB.<span class="me1">Driver</span>.<span class="me1">Builders</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">namespace MongoDbTest</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; public class Article</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; public MongoDB.<span class="me1">Bson</span>.<span class="me1">ObjectId</span> id <span class="br0">&#123;</span> get; set; <span class="br0">&#125;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; public <span class="kw4">string</span> title <span class="br0">&#123;</span> get; set; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; public <span class="kw4">string</span> status <span class="br0">&#123;</span> get; set; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; public <span class="kw4">string</span><span class="br0">&#91;</span><span class="br0">&#93;</span> tags <span class="br0">&#123;</span> get; set; <span class="br0">&#125;</span>&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; class MainClass</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; public <span class="kw4">static</span> <span class="kw4">void</span> Main <span class="br0">&#40;</span><span class="kw4">string</span><span class="br0">&#91;</span><span class="br0">&#93;</span> args<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; <span class="co1">// Connect to the database and get a colleciton</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; MongoServer server = MongoServer.<span class="me1">Create</span> <span class="br0">&#40;</span><span class="st0">&quot;mongodb://localhost&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; MongoDatabase db = server.<span class="me1">GetDatabase</span> <span class="br0">&#40;</span><span class="st0">&quot;mongodb-tutorial&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="co1">// Get an article collection</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; MongoCollection&lt;BsonDocument&gt; articles = db.<span class="me1">GetCollection</span>&lt;BsonDocument&gt; <span class="br0">&#40;</span><span class="st0">&quot;articles&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="co1">// Empty the collection (so all runs of this program will result in the same output)</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; articles.<span class="me1">RemoveAll</span> <span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="co1">//&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="co1">// Create two articles</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="co1">//</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; articles.<span class="me1">Save</span> <span class="br0">&#40;</span>new BsonDocument</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><span class="st0">&quot;title&quot;</span>, <span class="st0">&quot;A MongoDB article&quot;</span><span class="br0">&#125;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><span class="st0">&quot;status&quot;</span>, <span class="st0">&quot;published&quot;</span><span class="br0">&#125;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><span class="st0">&quot;tags&quot;</span>, new BsonArray <span class="br0">&#123;</span> <span class="st0">&quot;c#&quot;</span>, <span class="st0">&quot;mongodb&quot;</span> <span class="br0">&#125;</span><span class="br0">&#125;</span>&nbsp; &nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; articles.<span class="me1">Save</span> <span class="br0">&#40;</span>new BsonDocument</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><span class="st0">&quot;title&quot;</span>, <span class="st0">&quot;A Mono article&quot;</span><span class="br0">&#125;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><span class="st0">&quot;status&quot;</span>, <span class="st0">&quot;draft&quot;</span><span class="br0">&#125;</span>,</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><span class="st0">&quot;tags&quot;</span>, new BsonArray <span class="br0">&#123;</span> <span class="st0">&quot;c#&quot;</span>, <span class="st0">&quot;mono&quot;</span> <span class="br0">&#125;</span><span class="br0">&#125;</span>&nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span>;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
</ol>
</div>
<blockquote><p>If you type this in the MongoDB shell, you will see that the following articles are stored in the database:</p>
<pre>
> db.articles.find()
        {
          "_id" : ObjectId("4f097f8e74b5b343b97f56a7"),
          "title" : "A MongoDB article",
          "status" : "published",
          "tags" : [ "c#", "mongodb" ]
        }

        {
          "_id" : ObjectId("4f097f8e74b5b343b97f56a8"),
          "title" :
          "A Mono article",
          "status" : "draft",
          "tags" : [ "c#", "mono" ]
       }
</pre>
</blockquote>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;<span class="co1">// Find and print the first article</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; BsonDocument firstArticle = articles.<span class="me1">FindOne</span> <span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; PrintArticle <span class="br0">&#40;</span> <span class="co1">// Access the properties using indexing and then casting using the .As*</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; firstArticle<span class="br0">&#91;</span><span class="st0">&quot;_id&quot;</span><span class="br0">&#93;</span>.<span class="me1">AsObjectId</span>, </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; firstArticle<span class="br0">&#91;</span><span class="st0">&quot;title&quot;</span><span class="br0">&#93;</span>.<span class="me1">AsString</span>, </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; firstArticle<span class="br0">&#91;</span><span class="st0">&quot;status&quot;</span><span class="br0">&#93;</span>.<span class="me1">AsString</span>, </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#40;</span>firstArticle<span class="br0">&#91;</span><span class="st0">&quot;tags&quot;</span><span class="br0">&#93;</span>.<span class="me1">AsBsonArray</span><span class="br0">&#41;</span>.<span class="me1">Select</span> <span class="br0">&#40;</span>x =&gt; x.<span class="me1">AsString</span><span class="br0">&#41;</span><span class="br0">&#41;</span>; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="co1">//</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="co1">// Typed collections&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="co1">//</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="co1">// Using indexing and the .As* operations is not that convenient. A better way</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="co1">// is to use a typed collection. Earlier we defined a Article class, lets use it:</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; MongoCollection&lt;Article&gt; typedArticles = db.<span class="me1">GetCollection</span>&lt;Article&gt; <span class="br0">&#40;</span><span class="st0">&quot;articles&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; Article typedArticle = typedArticles.<span class="me1">FindOneAs</span>&lt;Article&gt; <span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; PrintArticle <span class="br0">&#40;</span>typedArticle.<span class="me1">id</span>, typedArticle.<span class="me1">title</span>, </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; typedArticle.<span class="me1">status</span>, typedArticle.<span class="me1">tags</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="co1">// Save a typed article</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; typedArticles.<span class="me1">Save</span> <span class="br0">&#40;</span>new Article <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; title = <span class="st0">&quot;An article about MonoDevelop&quot;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; status = <span class="st0">&quot;published&quot;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tags = new <span class="br0">&#91;</span><span class="br0">&#93;</span> <span class="br0">&#123;</span><span class="st0">&quot;c#&quot;</span>, <span class="st0">&quot;mono&quot;</span>, <span class="st0">&quot;mono-develop&quot;</span><span class="br0">&#125;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="co1">// </span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="co1">// Querying</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="co1">// </span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="co1">// Find article with status draft</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; Article draftArticle = typedArticles</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; .<span class="me1">FindOneAs</span>&lt;Article&gt; <span class="br0">&#40;</span>Query.<span class="me1">EQ</span> <span class="br0">&#40;</span><span class="st0">&quot;status&quot;</span>, <span class="st0">&quot;draft&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; PrintArticle <span class="br0">&#40;</span>draftArticle.<span class="me1">id</span>, draftArticle.<span class="me1">title</span>, </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; draftArticle.<span class="me1">status</span>, draftArticle.<span class="me1">tags</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="co1">// </span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; <span class="co1">// Updating</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="co1">// </span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="co1">// Lets update the draft article and set status published</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; Console.<span class="me1">WriteLine</span> <span class="br0">&#40;</span><span class="st0">&quot;Nr of published articles before update:&quot;</span> </div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;+ typedArticles.<span class="me1">Find</span> <span class="br0">&#40;</span>Query.<span class="me1">EQ</span> <span class="br0">&#40;</span><span class="st0">&quot;status&quot;</span>, <span class="st0">&quot;published&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>.<span class="me1">Count</span> <span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; typedArticles.<span class="me1">Update</span> <span class="br0">&#40;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; new QueryDocument <span class="br0">&#123;</span> <span class="br0">&#123;</span> <span class="st0">&quot;_id&quot;</span>, draftArticle.<span class="me1">id</span> <span class="br0">&#125;</span> <span class="br0">&#125;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; new UpdateDocument <span class="br0">&#123;</span> <span class="br0">&#123;</span> <span class="st0">&quot;$set&quot;</span>, new BsonDocument <span class="br0">&#40;</span><span class="st0">&quot;status&quot;</span>, <span class="st0">&quot;published&quot;</span><span class="br0">&#41;</span> <span class="br0">&#125;</span> </div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// $set is atomic</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; Console.<span class="me1">WriteLine</span> <span class="br0">&#40;</span><span class="st0">&quot;Nr of pubhlished articles after update:&quot;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;+ typedArticles.<span class="me1">Find</span> <span class="br0">&#40;</span>Query.<span class="me1">EQ</span> <span class="br0">&#40;</span><span class="st0">&quot;status&quot;</span>, <span class="st0">&quot;published&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>.<span class="me1">Count</span> <span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="co1">// </span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="co1">// MapReduce</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="co1">// </span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="co1">// This will count the number of times a tag has been used by using MapReduce</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; var map =</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;function() {&quot;</span> +</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot; &nbsp; &nbsp;this.tags.forEach(function(t) {&quot;</span> + <span class="co1">// Iterate all the tags and </span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot; &nbsp; &nbsp; &nbsp; &nbsp;emit(t, { count : 1 }); &quot;</span> + &nbsp; &nbsp;<span class="co1">// emit the tag name and initial count </span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot; &nbsp; &nbsp;})&quot;</span> +</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;}&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; var reduce =</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;function(key, emits) {&quot;</span> + <span class="co1">// Reduce by tag name and summarize the result</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot; &nbsp; &nbsp;total = 0;&quot;</span> +</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot; &nbsp; &nbsp;for (var i in emits) {&quot;</span> +</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot; &nbsp; &nbsp; &nbsp; &nbsp;total += emits[i].count;&quot;</span> +</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot; &nbsp; &nbsp;}&quot;</span> +</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot; &nbsp; &nbsp;return { count : total };&quot;</span> +</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;}&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; Console.<span class="me1">WriteLine</span> <span class="br0">&#40;</span><span class="st0">&quot;MapReduce result:&quot;</span><span class="br0">&#41;</span>;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; var mr = typedArticles.<span class="me1">MapReduce</span> <span class="br0">&#40;</span>map, reduce<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; foreach <span class="br0">&#40;</span>var document in mr.<span class="me1">GetResults</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; Console.<span class="me1">WriteLine</span> <span class="br0">&#40;</span>document.<span class="me1">ToJson</span> <span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; public <span class="kw4">static</span> <span class="kw4">void</span> PrintArticle <span class="br0">&#40;</span>ObjectId id, <span class="kw4">string</span> title, </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw4">string</span> status, IEnumerable&lt;string&gt; tags<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; Console.<span class="me1">WriteLine</span> <span class="br0">&#40;</span><span class="st0">&quot;id: &quot;</span> + id + <span class="st0">&quot;, title: &quot;</span> + title<span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; Console.<span class="me1">WriteLine</span> <span class="br0">&#40;</span><span class="st0">&quot;- tags: &quot;</span> + <span class="kw4">string</span>.<span class="me1">Join</span> <span class="br0">&#40;</span><span class="st0">&quot;, &quot;</span>, tags<span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
</ol>
</div>
<p>Output from the program:</p>
<blockquote>
<p>id: 4f0989fc74b5b3458ae38105, title: A MongoDB article<br />
- tags: c#, mongodb<br />
id: 4f0989fc74b5b3458ae38105, title: A MongoDB article<br />
- tags: c#, mongodb<br />
id: 4f0989fc74b5b3458ae38106, title: A Mono article<br />
- tags: c#, mono<br />
Nr of pubhlished articles before update:2<br />
Nr of pubhlished articles after update:3<br />
MapReduce result:<br />
{ &#8220;_id&#8221; : &#8220;c#&#8221;, &#8220;value&#8221; : { &#8220;count&#8221; : 3.0 } }<br />
{ &#8220;_id&#8221; : &#8220;mongodb&#8221;, &#8220;value&#8221; : { &#8220;count&#8221; : 1.0 } }<br />
{ &#8220;_id&#8221; : &#8220;mono&#8221;, &#8220;value&#8221; : { &#8220;count&#8221; : 2.0 } }<br />
{ &#8220;_id&#8221; : &#8220;mono-develop&#8221;, &#8220;value&#8221; : { &#8220;count&#8221; : 1.0 } }
</p></blockquote>
<p>Using the C# driver for MongoDB, is as you can see, very straight forward. Usually when I run applications on Mono I make sure to build all libraries using the Mono compiler, to make sure the Microsoft compiler have not used any optimizations that is not supported under Mono (I have run into this issue in the past). However, in this case the .NET binaries on the MongoDB site seems to work just fine under Mono. I also downloaded the MongoDB C# driver source and build them using MonoDevelop without any problems. </p>
<p>One improvement I would like to see is LINQ support in the driver. It would be so much more convenient to be able to use LINQ and strongly typed objects to query the database or create MapReduce-functions.</p>
]]></content:encoded>
			<wfw:commentRss>http://sourcecodebean.com/archives/mongodb-c-and-mono/1408/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Platform as a Service vs Infrastructure as a Service</title>
		<link>http://sourcecodebean.com/archives/platform-as-a-service-vs-infrastructure-as-a-service/1379</link>
		<comments>http://sourcecodebean.com/archives/platform-as-a-service-vs-infrastructure-as-a-service/1379#comments</comments>
		<pubDate>Fri, 06 Jan 2012 11:22:31 +0000</pubDate>
		<dc:creator>Peter</dc:creator>
				<category><![CDATA[Cloud computing]]></category>

		<guid isPermaLink="false">http://sourcecodebean.com/?p=1379</guid>
		<description><![CDATA[This week I attended a tech talk about cloud computing and more in general about Microsoft Azure. It got me thinking a bit regarding PaaS vs IaaS (= virtual servers). Let me give you my thoughts. PaaS &#8211; The good No servers You do not have to deal with servers, virtual or physical. You work [...]]]></description>
			<content:encoded><![CDATA[<p>This week I attended a tech talk about cloud computing and more in general about Microsoft Azure. It got me thinking a bit regarding <a href="http://en.wikipedia.org/wiki/Cloud_computing#Platform">PaaS</a> vs <a href="http://en.wikipedia.org/wiki/Cloud_computing#Infrastructure">IaaS</a> (= virtual servers). Let me give you my thoughts.</p>
<h2>PaaS &#8211; The good</h2>
<p><strong>No servers</strong></p>
<p>You do not have to deal with servers, virtual or physical. You work with resources.</p>
<p><strong>No software upgrades</strong></p>
<p>No OS of software upgrades.</p>
<p><strong>Easy scaling</strong></p>
<p>Scaling your infrastructure is already taken care of for you. You just need to make sure you follow the guide lines for developing scaleable applications on that platform.</p>
<h2></h2>
<h2>PaaS &#8211; The bad</h2>
<p><strong>Limits your software stack</strong></p>
<p>You might not be able to pick the best suited application server/web server/caching solution/database/other great software for your application. You are often limited in some way to what is provided by the PaaS.</p>
<p><strong>Portability and lock in</strong></p>
<p>Several of the PaaS solutions today require you to develop for that platform, for example Microsoft Azure and Google AppEngine. If you want to move your application anywhere else, you are out of luck. There is only one provider &#8211; so then you will have to rewrite your application (or at least parts of it), to be able to run it somewhere else. If you are using services provided by the PaaS that is not available somewhere else, for example Azure SQL Server or Googles Bigtable database, it might get even harder.</p>
<p><strong>Pricing can be confusing</strong></p>
<p>Can be hard to estimate how much running your application will cost. Microsoft Azure is a good example of a confusing price model.</p>
<h2></h2>
<h2>IaaS &#8211; The good</h2>
<p><strong>Flexibility</strong></p>
<p>Full control over your software stack, if you want to switch to a more cutting edge web server or cashing solution, go ahead.</p>
<p><strong>Portability</strong></p>
<p>If you need, it is easy to move to another provider of IaaS, to a private cloud or even to physical servers.</p>
<p><strong>Easier to estimate your cost</strong></p>
<p>Most PaaS you pay per computing hour of each virtual server, per GB of stored and transfered data.</p>
<h2></h2>
<h2>IaaS &#8211; The bad</h2>
<p><strong>Administration</strong></p>
<p>You will need sysadmins to manage your servers, just like normal physical servers</p>
<p><strong>Scaling</strong></p>
<p>You will have to build a scaling infrastructure on your own.</p>
<p>&nbsp;</p>
<div>
<h2>Conclusion</h2>
<p>The PaaS idea is great, but it means giving up too much control and flexibility over your application, and what is worst - it locks you into a provider. I know that Microsoft is working towards enabling private Azure hosting, this would allow you to host your Azure application in your private company Azure cloud, or with Microsoft, or other providers. I hope other providers move in this direction as well. Private PaaS hosting would allow us to develop our application and run it anywhere, but with IaaS we can already do this today!</p>
<p>To conclude things, I might be old school, but I still prefer IaaS to PaaS.</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://sourcecodebean.com/archives/platform-as-a-service-vs-infrastructure-as-a-service/1379/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>String interning in C#</title>
		<link>http://sourcecodebean.com/archives/string-interning-in-c/1367</link>
		<comments>http://sourcecodebean.com/archives/string-interning-in-c/1367#comments</comments>
		<pubDate>Wed, 07 Dec 2011 11:15:33 +0000</pubDate>
		<dc:creator>Peter</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[C#]]></category>

		<guid isPermaLink="false">http://sourcecodebean.com/?p=1367</guid>
		<description><![CDATA[Last week a coworker sent me an interesting piece of code: &#160; const string a = &#34;&#34;; const string b = &#34;&#34;; const string c = &#34;hello&#34;; const string d = &#34;hello&#34;; &#160; Console.WriteLine&#40;ReferenceEquals&#40;string.Empty, string.Empty&#41; &#160; ? &#34;Not so surprising…&#34; &#160; : &#34;Oh, the humanity!&#34;&#41;; &#160; Console.WriteLine&#40;ReferenceEquals&#40;a, string.Empty&#41; &#160; ? &#34;But I thought string was [...]]]></description>
			<content:encoded><![CDATA[<p>Last week a coworker sent me an interesting piece of code:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw4">const</span> <span class="kw4">string</span> a = <span class="st0">&quot;&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw4">const</span> <span class="kw4">string</span> b = <span class="st0">&quot;&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw4">const</span> <span class="kw4">string</span> c = <span class="st0">&quot;hello&quot;</span>;</div>
</li>
<li class="li2">
<div class="de2"><span class="kw4">const</span> <span class="kw4">string</span> d = <span class="st0">&quot;hello&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">Console.<span class="me1">WriteLine</span><span class="br0">&#40;</span>ReferenceEquals<span class="br0">&#40;</span><span class="kw4">string</span>.<span class="me1">Empty</span>, <span class="kw4">string</span>.<span class="me1">Empty</span><span class="br0">&#41;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; ? <span class="st0">&quot;Not so surprising…&quot;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; : <span class="st0">&quot;Oh, the humanity!&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">Console.<span class="me1">WriteLine</span><span class="br0">&#40;</span>ReferenceEquals<span class="br0">&#40;</span>a, <span class="kw4">string</span>.<span class="me1">Empty</span><span class="br0">&#41;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; ? <span class="st0">&quot;But I thought string was a reference type!&quot;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; : <span class="st0">&quot;Seems fair…&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">Console.<span class="me1">WriteLine</span><span class="br0">&#40;</span>ReferenceEquals<span class="br0">&#40;</span>a, b<span class="br0">&#41;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; ? <span class="st0">&quot; But I thought string was a reference type!&quot;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; : <span class="st0">&quot; Seems fair…&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">Console.<span class="me1">WriteLine</span><span class="br0">&#40;</span>ReferenceEquals<span class="br0">&#40;</span>c, d<span class="br0">&#41;</span> </div>
</li>
<li class="li2">
<div class="de2">&nbsp; ? <span class="st0">&quot; But I thought string was a reference type!&quot;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; : <span class="st0">&quot; Seems fair…&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
</ol>
</div>
<p>Running the program will, maybe a bit surprising, produce:</p>
<blockquote><p>Not so surprising…<br />
But I thought string was a reference type!<br />
But I thought string was a reference type!<br />
But I thought string was a reference type!</p></blockquote>
<p>The reason to this is what is called <em>String interning</em>. The CLR basically holds a hashmap of all the strings in the program (edit: string literals), one entry per unique string. So two identical strings will always have the same reference even though they are defined in different places. String interning is mainly used to speed up string comparisons (no need to check char by char if they are identical, if they have the same reference they are equal), but also to reduce the memory footprint of the application. </p>
<p>Read more about string interning:<br />
<a href="http://aspadvice.com/blogs/from_net_geeks_desk/archive/2008/12/25/String-Interning-in-C_2300_.aspx">http://aspadvice.com/blogs/from_net_geeks_desk/archive/2008/12/25/String-Interning-in-C_2300_.aspx</a><br />
<a href="http://en.wikipedia.org/wiki/String_interning">http://en.wikipedia.org/wiki/String_interning</a></p>
]]></content:encoded>
			<wfw:commentRss>http://sourcecodebean.com/archives/string-interning-in-c/1367/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Migrating from WordPress to Orchard CMS</title>
		<link>http://sourcecodebean.com/archives/migrating-from-wordpress-to-orchard-cms/1358</link>
		<comments>http://sourcecodebean.com/archives/migrating-from-wordpress-to-orchard-cms/1358#comments</comments>
		<pubDate>Sun, 27 Nov 2011 15:18:10 +0000</pubDate>
		<dc:creator>Peter</dc:creator>
				<category><![CDATA[ASP.NET]]></category>

		<guid isPermaLink="false">http://sourcecodebean.com/?p=1358</guid>
		<description><![CDATA[I have been working on migrating one of my WordPress sites to a .NET CMS called Orchard. WordPress is great for blogging, but when it comes to extending the functionality, i much rather work with a .NET based CMS then WordPress. Orchard CMS is based on ASP.NET MVC3, Razor, NHibernate and a lot of other [...]]]></description>
			<content:encoded><![CDATA[<p>I have been working on migrating one of my WordPress sites to a .NET CMS called <a href="http://orchardproject.net">Orchard</a>. WordPress is great for blogging, but when it comes to extending the functionality, i much rather work with a .NET based CMS then WordPress. Orchard CMS is based on ASP.NET MVC3, Razor, NHibernate and a lot of other .NET goodies.</p>
<p><span id="more-1358"></span></p>
<p>I was surprised to find that there was no import from WordPress import functionality in Orchard, so I created a module that will read the wordpress export xml and create blog posts in Orchard. The module can be found on GitHub:</p>
<p><a href="https://github.com/moberg/WordpressImport">https://github.com/moberg/WordpressImport</a></p>
<p>To use it, first create an export file from WordPress:<br />
<a href="http://sourcecodebean.com/wp-content/uploads/2011/11/ExportFromWordpress.png"><img class="aligncenter size-full wp-image-1361" title="ExportFromWordpress" src="http://sourcecodebean.com/wp-content/uploads/2011/11/ExportFromWordpress.png" alt="" width="811" height="444" /></a></p>
<p>Then browse WordPress Import in the OrchardAdmin interface, select which blog you want to import the posts to and pick the export xml file:<br />
<a href="http://sourcecodebean.com/wp-content/uploads/2011/11/WordpressImport.png"><img class="aligncenter size-full wp-image-1360" title="WordpressImport" src="http://sourcecodebean.com/wp-content/uploads/2011/11/WordpressImport.png" alt="" width="678" height="390" /></a></p>
<p>The URLs for the posts will be kept. WordPress categories are converted to tags in Orchard.</p>
<p>Let me know if you run into any issues.</p>
]]></content:encoded>
			<wfw:commentRss>http://sourcecodebean.com/archives/migrating-from-wordpress-to-orchard-cms/1358/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>SignalRChat &#8211; Using RxJS to add live notificaitons</title>
		<link>http://sourcecodebean.com/archives/signalrchat-using-rxjs-to-add-live-notificaitons/1321</link>
		<comments>http://sourcecodebean.com/archives/signalrchat-using-rxjs-to-add-live-notificaitons/1321#comments</comments>
		<pubDate>Mon, 24 Oct 2011 17:25:14 +0000</pubDate>
		<dc:creator>Peter</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://sourcecodebean.com/?p=1321</guid>
		<description><![CDATA[I have been playing around a little with Reactive Extensions for javascript and must say that I am really impressed. RxJS a port of the .NET based version which is, as they describe it on their site, &#8220;a library to compose asynchronous and event-based programs using observable collections and LINQ-style query operators.&#8220;. So what does [...]]]></description>
			<content:encoded><![CDATA[<p>I have been playing around a little with Reactive Extensions for javascript and must say that I am really impressed. RxJS a port of the .NET based version which is, as they describe it on <a href="http://msdn.microsoft.com/en-us/data/gg577609">their site</a>, &#8220;<em>a library to compose asynchronous and event-based programs using observable collections and LINQ-style query operators.</em>&#8220;. So what does this mean? Let me give you an example.</p>
<p><span id="more-1321"></span><br />
I wanted to add a live notification function to the chat, as soon as someone is typing, three dots should appear next to the user&#8217;s name. This means that as soon as the user starts we need to send a message to the server, this message is then broadcasted to all the connected clients. To not flood the server and the users, maximum one message per second should be sent.</p>
<p>Keydown &#8211; time since last message >= 1 second, or this is the first keydown in the sequence  => send message<br />
Keydown &#8211; time since last message < 1 second  => do nothing</p>
<p>There is a built in method called Throttle that does almost this, we could use it, but then the first keystroke would get delayed and I did not want this. So being a beginner at RX I struggled for a while trying to get to where I wanted. I came up with a solution that did what it I wanted, but it was not so elegant. Then I found <a href="http://stackoverflow.com/questions/5197032/how-to-take-first-occurrence-and-then-supress-events-for-2-seconds-rxjs">this post</a> on StackOverflow, with a solution by Sergey Aldoukhov that solved the problem in a very elegant way, so I just decided to use it instead. Sergey had created an extension method called OneInTime, this is the code:</p>
<blockquote><div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">Rx.<span class="me1">Observable</span>.<span class="me1">prototype</span>.<span class="me1">OneInTime</span> = <span class="kw2">function</span> <span class="br0">&#40;</span>delay<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">return</span> <span class="kw1">this</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; .<span class="me1">Take</span><span class="br0">&#40;</span><span class="nu0">1</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; .<span class="me1">Merge</span><span class="br0">&#40;</span>Rx.<span class="me1">Observable</span>.<span class="me1">Empty</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">Delay</span><span class="br0">&#40;</span>delay<span class="br0">&#41;</span><span class="br0">&#41;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; .<span class="me1">Repeat</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span>;</div>
</li>
</ol>
</div>
</blockquote>
<p>So what does this mean? Take(1) is the simple part, we take 1 event from the stream. The merge expression is used to merge multiple IObservable streams into single IObservable stream. Each value on the source streams is projected into the result stream until all source streams complete. The Repeat method with no argument will repeatedly sub­scribe to the same observable collection indefinitely. So by taking one, merging with the delayed empty stream and then calling Repeat(), we take one event from the stream, and then skips all the events during the next second. After one second we repeat. Exactly what we wanted to achieve! </p>
<p>And this is how I would use it in the chat (#msg is the text input):</p>
<blockquote><div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">$<span class="br0">&#40;</span><span class="st0">&quot;#msg&quot;</span><span class="br0">&#41;</span>.<span class="me1">toObservable</span><span class="br0">&#40;</span><span class="st0">&quot;keypress&quot;</span><span class="br0">&#41;</span> <span class="co1">// Create an observable from the keypress event</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; .<span class="me1">OneInTime</span><span class="br0">&#40;</span><span class="nu0">1000</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; .<span class="me1">Subscribe</span><span class="br0">&#40;</span><span class="kw2">function</span> <span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> chat.<span class="me1">userTyping</span><span class="br0">&#40;</span><span class="br0">&#41;</span>; <span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
</ol>
</div>
</blockquote>
<p>Pretty neat right?</p>
<p>The code is live at <a href="http://signalrchat.apphb.com/">http://signalrchat.apphb.com/</a> and you can find the source on <a href="https://github.com/moberg/SignalRChat">GitHub</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://sourcecodebean.com/archives/signalrchat-using-rxjs-to-add-live-notificaitons/1321/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Updated version of SignalRChat</title>
		<link>http://sourcecodebean.com/archives/updated-version-of-signalrchat/1315</link>
		<comments>http://sourcecodebean.com/archives/updated-version-of-signalrchat/1315#comments</comments>
		<pubDate>Fri, 07 Oct 2011 08:10:55 +0000</pubDate>
		<dc:creator>Peter</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://sourcecodebean.com/?p=1315</guid>
		<description><![CDATA[Yesterday I uploaded a slightly updated version of the test application I have built using SignalR. Besides from looking much better, it now uses the high level Hubs API (instead of the connection API) that SignalR provides. You find it here: http://signalrchat.apphb.com/ And you can find the source on GitHub: http://github.com/moberg/SignalRChat]]></description>
			<content:encoded><![CDATA[<p>Yesterday I uploaded a slightly updated version of the test application I have built using SignalR. Besides from looking much better, it now uses the high level Hubs API (instead of the connection API) that SignalR provides. </p>
<p>You find it here: <a href="http://signalrchat.apphb.com/">http://signalrchat.apphb.com/</a></p>
<p>And you can find the source on GitHub: <a href="http://github.com/moberg/SignalRChat">http://github.com/moberg/SignalRChat</a></p>
]]></content:encoded>
			<wfw:commentRss>http://sourcecodebean.com/archives/updated-version-of-signalrchat/1315/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SignalR &#8211; Real time web for .NET</title>
		<link>http://sourcecodebean.com/archives/signalr-real-time-web-for-net/1297</link>
		<comments>http://sourcecodebean.com/archives/signalr-real-time-web-for-net/1297#comments</comments>
		<pubDate>Mon, 26 Sep 2011 21:17:28 +0000</pubDate>
		<dc:creator>Peter</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://sourcecodebean.com/?p=1297</guid>
		<description><![CDATA[SignalR is a library for .NET to help build real time web applications, in a way it is quite similar to Socket.IO on Node.js. It consists of three main parts: SignalR.Server &#8211; .NET code running on IIS SignalR.Js &#8211; A SignalR client in javascript SignalR.Client &#8211; A SignalR client in .NET. Useful for communicating with [...]]]></description>
			<content:encoded><![CDATA[<p>SignalR is a library for .NET to help build real time web applications, in a way it is quite similar to Socket.IO on Node.js. It consists of three main parts:</p>
<ul>
<li>SignalR.Server &#8211; .NET code running on IIS</li>
<li>SignalR.Js &#8211; A SignalR client in javascript</li>
<li>SignalR.Client &#8211; A SignalR client in .NET. Useful for communicating with a SignalR server from, for example, a Windows Phone application. </li>
</ul>
<p>SignalR is using long polling as a method to keep its http connections open. In the future support for WebSockets is going to be added as well (a guess would be when .NET 4.5/IIS8 is released, it will have support for WebSockets).</p>
<p>Let me show you how simple it is to create a chat server. First start Visual Studio and create a ASP.NET MVC3 application. When you have created your project you want to add SignalR from NuGet, so open up the NuGet manager and search for SignalR. You need the SignalR.Server and SignalR.Js packages.</p>
<p><span id="more-1297"></span><br />
When SignalR has installed we need to create the actual server, so lets add a new class,  MyConnection. This class will handle the asynchronous communication with the clients:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">using System;</div>
</li>
<li class="li1">
<div class="de1">using System.<span class="me1">Web</span>.<span class="me1">Script</span>.<span class="me1">Serialization</span>;</div>
</li>
<li class="li1">
<div class="de1">using SignalR;</div>
</li>
<li class="li2">
<div class="de2">using System.<span class="me1">Threading</span>.<span class="me1">Tasks</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">namespace SignalRTest</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; public class MyConnection : PersistentConnection</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; protected override Task OnReceivedAsync<span class="br0">&#40;</span><span class="kw4">string</span> clientId, <span class="kw4">string</span> jsonData<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// Deserialize json string</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var data = new JavaScriptSerializer<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .<span class="me1">Deserialize</span><span class="br0">&#40;</span>jsonData, typeof<span class="br0">&#40;</span>EventData<span class="br0">&#41;</span><span class="br0">&#41;</span> as EventData;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// Broadcast data to all clients</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> Connection.<span class="me1">Broadcast</span><span class="br0">&#40;</span><span class="kw4">string</span>.<span class="me1">Format</span><span class="br0">&#40;</span><span class="st0">&quot;{0} {1}: {2}&quot;</span>, </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; DateTime.<span class="me1">Now</span>.<span class="me1">ToShortTimeString</span><span class="br0">&#40;</span><span class="br0">&#41;</span>, data.<span class="me1">ClientName</span>, data.<span class="me1">Message</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; public class EventData</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; public <span class="kw4">string</span> ClientName <span class="br0">&#123;</span> get; set; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; public <span class="kw4">string</span> Message <span class="br0">&#123;</span> get; set; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
</ol>
</div>
<p>To route the traffic to MyConnection we need to modify Global.asax slightly:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">public <span class="kw4">static</span> <span class="kw4">void</span> RegisterRoutes<span class="br0">&#40;</span>RouteCollection routes<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; routes.<span class="me1">IgnoreRoute</span><span class="br0">&#40;</span><span class="st0">&quot;{resource}.axd/{*pathInfo}&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; routes.<span class="me1">MapConnection</span>&lt;MyConnection&gt;<span class="br0">&#40;</span><span class="st0">&quot;echo&quot;</span>, <span class="st0">&quot;echo/{*operation}&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; routes.<span class="me1">MapRoute</span><span class="br0">&#40;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;Default&quot;</span>, <span class="co1">// Route name</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;{controller}/{action}/{id}&quot;</span>, <span class="co1">// URL with parameters</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; new <span class="br0">&#123;</span> controller = <span class="st0">&quot;Home&quot;</span>, action = <span class="st0">&quot;Index&quot;</span>, id = UrlParameter.<span class="me1">Optional</span> <span class="br0">&#125;</span> <span class="co1">// Parameter defaults</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
</ol>
</div>
<p>And the last part, the UI. Put this into your Home/Index.cshtml view:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&lt;h2 id=<span class="st0">&quot;subtitle&quot;</span>&gt;Join the chat&lt;/h2&gt;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &lt;div&gt;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &lt;script type=<span class="st0">&quot;text/javascript&quot;</span>&gt;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span><span class="kw2">function</span> <span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> connection = $.<span class="me1">connection</span><span class="br0">&#40;</span><span class="st0">&#8216;echo&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> clientName = <span class="st0">&#8221;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> send = <span class="kw2">function</span> <span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>$<span class="br0">&#40;</span><span class="st0">&#8216;#msg&#8217;</span><span class="br0">&#41;</span>.<span class="me1">val</span><span class="br0">&#40;</span><span class="br0">&#41;</span> !== <span class="st0">&#8221;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; connection.<span class="me1">send</span><span class="br0">&#40;</span><span class="st0">&quot;{Message: &#8216;&quot;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; + $<span class="br0">&#40;</span><span class="st0">&#8216;#msg&#8217;</span><span class="br0">&#41;</span>.<span class="me1">val</span><span class="br0">&#40;</span><span class="br0">&#41;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; + <span class="st0">&quot;&#8217;, ClientName: &#8216;&quot;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; + clientName + <span class="st0">&quot;&#8217;}&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span><span class="st0">&quot;#msg&quot;</span><span class="br0">&#41;</span>.<span class="me1">val</span><span class="br0">&#40;</span><span class="st0">&#8221;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> startChatting = <span class="kw2">function</span> <span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>$<span class="br0">&#40;</span><span class="st0">&#8216;#name&#8217;</span><span class="br0">&#41;</span>.<span class="me1">val</span><span class="br0">&#40;</span><span class="br0">&#41;</span> !== <span class="st0">&#8221;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; clientName = $<span class="br0">&#40;</span><span class="st0">&#8216;#name&#8217;</span><span class="br0">&#41;</span>.<span class="me1">val</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span><span class="st0">&quot;#info&quot;</span><span class="br0">&#41;</span>.<span class="me1">toggle</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span><span class="st0">&quot;#chat&quot;</span><span class="br0">&#41;</span>.<span class="me1">toggle</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span><span class="st0">&#8216;#msg&#8217;</span><span class="br0">&#41;</span>.<span class="kw3">focus</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span><span class="st0">&#8216;#subtitle&#8217;</span><span class="br0">&#41;</span>.<span class="me1">html</span><span class="br0">&#40;</span><span class="st0">&quot;Now chatting&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span><span class="st0">&quot;#chat&quot;</span><span class="br0">&#41;</span>.<span class="me1">toggle</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span><span class="st0">&#8216;#name&#8217;</span><span class="br0">&#41;</span>.<span class="kw3">focus</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; connection.<span class="me1">received</span><span class="br0">&#40;</span><span class="kw2">function</span> <span class="br0">&#40;</span>data<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span><span class="st0">&#8216;#messages&#8217;</span><span class="br0">&#41;</span>.<span class="me1">append</span><span class="br0">&#40;</span><span class="st0">&#8216;&lt;li&gt;&#8217;</span> + data + <span class="st0">&#8216;&lt;/li&gt;&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span><span class="st0">&quot;#broadcast&quot;</span><span class="br0">&#41;</span>.<span class="me1">click</span><span class="br0">&#40;</span><span class="kw2">function</span> <span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; send<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span><span class="st0">&quot;#start&quot;</span><span class="br0">&#41;</span>.<span class="me1">click</span><span class="br0">&#40;</span><span class="kw2">function</span> <span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; startChatting<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span><span class="st0">&#8216;#chatform&#8217;</span><span class="br0">&#41;</span>.<span class="me1">submit</span><span class="br0">&#40;</span><span class="kw2">function</span> <span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; send<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="kw2">false</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span><span class="st0">&#8216;#startform&#8217;</span><span class="br0">&#41;</span>.<span class="me1">submit</span><span class="br0">&#40;</span><span class="kw2">function</span> <span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; startChatting<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="kw2">false</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; connection.<span class="me1">start</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &lt;/script&gt;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &lt;div id=<span class="st0">&quot;info&quot;</span>&gt;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &lt;form id=<span class="st0">&quot;startform&quot;</span>&gt; &nbsp;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Enter your <span class="kw3">name</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;input type=<span class="st0">&quot;text&quot;</span> id=<span class="st0">&quot;name&quot;</span> &nbsp;/&gt;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;input type=<span class="st0">&quot;button&quot;</span> id=<span class="st0">&quot;start&quot;</span> value=<span class="st0">&quot;Start chatting&quot;</span> /&gt;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &lt;/form&gt;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &lt;/div&gt;</div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &lt;div id=<span class="st0">&quot;chat&quot;</span>&gt;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &lt;form id=<span class="st0">&quot;chatform&quot;</span>&gt; &nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;ul id=<span class="st0">&quot;messages&quot;</span>&gt;&lt;/ul&gt;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;input type=<span class="st0">&quot;text&quot;</span> id=<span class="st0">&quot;msg&quot;</span> &nbsp;/&gt;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;input type=<span class="st0">&quot;button&quot;</span> id=<span class="st0">&quot;broadcast&quot;</span> value=<span class="st0">&quot;Send&quot;</span> /&gt;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &lt;/form&gt;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &lt;/div&gt;</div>
</li>
<li class="li1">
<div class="de1">&lt;/div&gt;</div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
</ol>
</div>
<p>Alright, that should be all. Compile and run it! You can test out my chat live over at AppHarbor:</p>
<p><a href="http://signalrchat.apphb.com/">http://signalrchat.apphb.com/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://sourcecodebean.com/archives/signalr-real-time-web-for-net/1297/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>My first Google Chrome Extension &#8211; E24.se cleanup</title>
		<link>http://sourcecodebean.com/archives/my-first-google-chrome-extension-e24-se-cleanup/1286</link>
		<comments>http://sourcecodebean.com/archives/my-first-google-chrome-extension-e24-se-cleanup/1286#comments</comments>
		<pubDate>Tue, 02 Aug 2011 10:12:49 +0000</pubDate>
		<dc:creator>Peter</dc:creator>
				<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://sourcecodebean.com/?p=1286</guid>
		<description><![CDATA[Occasionally i read the swedish news site e24.se. One thing that really annoys me about the site is the fixed banner they have on top of all the article pages. I decided to do something about it so i created a Google Chrome Extension that removes the banner, and as a bonus it also removes [...]]]></description>
			<content:encoded><![CDATA[<p>Occasionally i read the swedish news site e24.se. One thing that really annoys me about the site is the fixed banner they have on top of all the article pages. I decided to do something about it so i created a Google Chrome Extension that removes the banner, and as a bonus it also removes all the ads on the page. Enjoy:</p>
<p><a href="https://chrome.google.com/webstore/detail/lffoakndkbfaoglgbnaagjglhhlapdnk?hl=sv&#038;hc=search&#038;hcp=main">https://chrome.google.com/webstore/detail/lffoakndkbfaoglgbnaagjglhhlapdnk?hl=sv&#038;hc=search&#038;hcp=main</a></p>
]]></content:encoded>
			<wfw:commentRss>http://sourcecodebean.com/archives/my-first-google-chrome-extension-e24-se-cleanup/1286/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Realtime connections between web servers and web browsers</title>
		<link>http://sourcecodebean.com/archives/realtime-connections-between-web-servers-and-web-browsers/1211</link>
		<comments>http://sourcecodebean.com/archives/realtime-connections-between-web-servers-and-web-browsers/1211#comments</comments>
		<pubDate>Tue, 05 Jul 2011 19:01:41 +0000</pubDate>
		<dc:creator>Peter</dc:creator>
				<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://sourcecodebean.com/?p=1211</guid>
		<description><![CDATA[In the early days of the web, web pages were very static in content, once the page was loaded nothing on the page would change until you reloaded it. Then came Ajax and allowed us to do partial reloads of the page. During the last few years the web has evolved even more. Today you [...]]]></description>
			<content:encoded><![CDATA[<p>In the early days of the web, web pages were very static in content, once the page was loaded nothing on the page would change until you reloaded it. Then came Ajax and allowed us to do partial reloads of the page. During the last few years the web has evolved even more. Today you see a lot of web applications, such as Facebook and Google+, where content is updated as you are watching the page. This has been made possible by using different techniques to keep a connection to the web server open and be able to push content from the web server to the connected clients. The main technique to allow this in web browsers today is what is called Comet. </p>
<p><span id="more-1211"></span></p>
<h3 style=''>Comet &#8211; using browser connections</h3>
<p>Comet is a web application model in which a long-held HTTP request allows a web server to push data to client browsers, without the browser explicitly requesting it. It works the way that the web browser requests an url from the server, and the server deliberately keeps it open, allowing it to work as a stream of data between the server and the client web browser. In this stream the web server can push content to the client. </p>
<p>Keeping connections open for such a long time is not how HTTP requests was intended to be used, so a lot of people have been describing this as a hack. The biggest problem with Comet has been that the HTTP 1.1 specification states that a web browser should not have more than two simultaneous connections to a web server. By using Comet, one of these connections would always be held open for push notifications. Only having one available connection could limit the browser. An example could be that the browser may be blocked from sending a new request while waiting for the results of a previous request while loading a series of images. Most sites solved this by creating a separate sub domain for the real time communication. Also, getting Comet to work properly in all web browsers isn&#8217;t at all trivial. So what other options are there?</p>
<h3 style='padding-top:10px;'>Comet &#8211; using Flash sockets</h3>
<p>Flash sockets is based on the same idea as Comet. On the server side it is very similar to the regular use of Comet, but on the client side the connection to the server is kept open by using a Flash Socket running in a flash application. Since the HTTP connection is opened by Flash it will work the same way in all web browsers, but the downside is of course that it requires Flash, so many mobile browsers will not be able to use it. The Flash socket implementation is considered as more stable and not as much as a hack as the browser Comet implementation. However, it is considered a temporary solution until most web browsers have implemented support for WebSockets. </p>
<h3 style='padding-top:10px;'>WebSockets &#8211; The replacement for Comet</h3>
<p>WebSockets is a technology for providing bi-directional, full-duplex communications channels, over a single TCP socket and is supposed to be able to replace the different Comet solutions that exists today. The API is being standardized by the W3C and is currently implemented in Chrome 4+ and Safari 5+. It is also implemented in Firefox and Opera, but disabled by default. As usual, Internet Explorer is lagging behind and no support for WebSockets exists as of today. Maybe in Internet Explorer 10, who knows&#8230; So it will be a while until WebSockets are so widely accepted that we can only rely on WebSockets.</p>
<h2 style='padding-top:15px;'>On the server side</h2>
<p>To allow for Comet connections the web server needs to support long lived HTTP connections. Most web servers were not built for this, so implementing Comet on a web server such as IIS can be a bit of a challenge, especially when scaling to lots of concurrent users.</p>
<p>Holding lots of concurrent connections open is something that Node.js is very good at (<a href="http://sourcecodebean.com/archives/javascript-on-the-server-side/1161">I blogged about Node.js a few weeks ago</a>), and not supprisingly there are many Comet notification servers built on it. The two most popular implementations seems to be <a href="https://github.com/maccman/juggernaut">Juggernaut</a> and <a href="http://faye.jcoglan.com/">Faye</a>. Lets get into a crash course in how to start using Juggernaut.</p>
<h3 style='padding-top:10px;'>Juggernaut</h3>
<p>Juggernaut is a push notification server for WebSockets with a easy fallback to Flash sockets if the clients web browser does not support it. Getting started with Juggernaut is very easy, I got my server up running in just a few minutes. Let me show you how to do it on OSX.</p>
<p>First, if you don&#8217;t already have <a href="http://mxcl.github.com/homebrew/">Homebrew</a> (a Unix package manager for OSX) installed, go ahead and install it:</p>
<blockquote><p><code>$ curl -LsSf https://github.com/mxcl/homebrew/tarball/master | sudo /usr/bin/tar xvz -C/usr/local --strip 1<br />
</code></p></blockquote>
<p>Now install Node.js, Redis (key/value data strore server, the Juggernaut server and the Juggernaut gem (if you want the Ruby support). Follow the instructions for each package.</p>
<blockquote><p><code>$ brew install node<br />
$ brew install redis<br />
$ npm install juggernaut<br />
$ gem install juggernaut<br />
</code></p></blockquote>
<p>Now start Redis and Juggernaut:</p>
<blockquote><p><code>$ redis-server &#038;<br />
$ node ~/node_modules/juggernau/server.js  &#038;<br />
</code></p></blockquote>
<p>Juggernaut is by default hosted on port 8080 and it should now be possible to browse to <a href="http://localhost:8080/application.js">http://localhost:8080/application.js</a>. This is the javascript that Juggernaut clients should load in order to communicate with the server. </p>
<p>Now lets create an HTML file, jugtest.html, and host it on a local web server:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="sc3"><span class="re1">&lt;script</span> <span class="re0">src</span>=<span class="st0">&quot;http://localhost:8080/application.js&quot;</span> <span class="re0">type</span>=<span class="st0">&quot;text/javascript&quot;</span> <span class="re0">charset</span>=<span class="st0">&quot;utf-8&quot;</span><span class="re2">&gt;</span></span><span class="sc3"><span class="re1">&lt;/script<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="sc3"><span class="re1">&lt;script</span> <span class="re0">type</span>=<span class="st0">&quot;text/javascript&quot;</span> <span class="re0">charset</span>=<span class="st0">&quot;utf-8&quot;</span><span class="re2">&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; var jug = new Juggernaut;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; jug.subscribe(&quot;channel1&quot;, function(data){</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; alert(data)</div>
</li>
<li class="li1">
<div class="de1">&nbsp; });</div>
</li>
<li class="li1">
<div class="de1"><span class="sc3"><span class="re1">&lt;/script<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
</ol>
</div>
<p>Also, let&#8217;s create a simple Ruby script, test.rb, to send notifications:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw3">require</span> <span class="st0">&quot;juggernaut&quot;</span></div>
</li>
<li class="li1">
<div class="de1">Juggernaut.<span class="me1">publish</span><span class="br0">&#40;</span><span class="st0">&quot;channel1&quot;</span>, <span class="st0">&quot;Hello world!&quot;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
</ol>
</div>
<p>Everything should be setup now, let&#8217;s browse jugtest.html, my webserver runs on port 3000, so for me that is <a href="http://localhost:3000/jugtest.html">http://localhost:3000/jugtest.html</a>. Nothing shows up in the web browser, but in the terminal running Juggernaut we should be able to see that one client has connected. Lets run the ruby script:</p>
<blockquote><p><code>$ ruby test.rb<br />
</code></p></blockquote>
<p><a href="http://sourcecodebean.com/wp-content/uploads/2011/07/helloworld.png"><img src="http://sourcecodebean.com/wp-content/uploads/2011/07/helloworld.png" alt="" title="helloworld" width="479" height="201" class="aligncenter size-full wp-image-1224" /></a></p>
<p>The message shows up in the web browser, it works! </p>
<p>As you can see getting started with push notifications using Juggernaut is very easy. If you have any experience with other push notification servers, please leave a comment, it would be interesting to hear your experiences!</p>
]]></content:encoded>
			<wfw:commentRss>http://sourcecodebean.com/archives/realtime-connections-between-web-servers-and-web-browsers/1211/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk: basic
Page Caching using disk: enhanced

Served from: sourcecodebean.com @ 2012-02-06 06:02:51 -->
