<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
    <channel>
        <title>CodeClimber</title>
        <link>http://codeclimber.net.nz/Default.aspx</link>
        <description>Climbing the Cliffs of C#</description>
        <language>en-NZ</language>
        <copyright>Simone Chiaretta</copyright>
        <generator>Subtext Version 2.5.1.0</generator>
        <image><link>http://www.codeclimber.net.nz/</link><url>http://www.codeclimber.net.nz/Skins/CodeClimber/Images/codeclimber_50.gif</url><title>CodeClimber</title></image>
        <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/Codeclimber" /><feedburner:info uri="codeclimber" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><geo:lat>45.49481143093878</geo:lat><geo:long>9.219868183135986</geo:long><creativeCommons:license>http://creativecommons.org/licenses/by/3.0/</creativeCommons:license><item>
            <title>Deploying a MongoDB powered Node.js app on Windows Azure: my slides</title>
            <category>Community Life</category>
            <category>Javascript</category>
            <link>http://feedproxy.google.com/~r/Codeclimber/~3/_Uv9sqIuTyY/Deploying-a-MongoDB-powered-Node-js-app-on-Windows-Azure.aspx</link>
            <description>&lt;p&gt;A few days ago I attended the &lt;a href="http://www.meetup.com/Belgian-node-js-User-Group/events/88799952/"&gt;second event&lt;/a&gt; of the newly born &lt;a href="http://www.meetup.com/Belgian-node-js-User-Group/"&gt;Belgian Node.js User Group&lt;/a&gt;. The event was about deploying and testing node.js applications and has been hosted in Microsoft Belgium offices near Brussels, thanks to Tom Crombez (aka &lt;a href="https://twitter.com/artymoony"&gt;@artymoony&lt;/a&gt;) and Windows Azure.&lt;/p&gt;  &lt;p&gt;There were 3 presentations:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Mine, about deploying a MongoDB powered Node.js app on Windows Azure: a walkthrough of the steps needed to deploy the app.&lt;/li&gt;    &lt;li&gt;Then another talk on how to build your own “cloud-like” environment on Linux, using &lt;strong&gt;systemd&lt;/strong&gt;. Talk by &lt;a href="https://twitter.com/rubenv"&gt;Ruben Vermeersch&lt;/a&gt;.&lt;/li&gt;    &lt;li&gt;Finally &lt;a href="https://twitter.com/#!/jbpros"&gt;Julien Biezemans&lt;/a&gt;, lead developer of &lt;a href="https://github.com/cucumber/cucumber-js"&gt;cucumber.js&lt;/a&gt;, gave an introduction of BDD and cucumber.js&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;It was really a nice event, with good catering and good discussion (and for the first time almost 50/50 French speaking / Dutch speaking).&lt;/p&gt;  &lt;p&gt;For those who are interested, you can see my presentation online: &lt;a title="https://bitly.com/njug_be_azure" href="http://bitly.com/njug_be_azure"&gt;http://bitly.com/njug_be_azure&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;The first step to test azure is of course to create an account. You can do it following that link: &lt;a href="http://aka.ms/azurebenug"&gt;http://aka.ms/azurebenug&lt;/a&gt;&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:53e4228e-b54c-4472-87b6-bf47776a0049" class="wlWriterEditableSmartContent"&gt;Tags: &lt;a href="http://codeclimber.net.nz/tags/node.js/default.aspx" rel="tag"&gt;node.js&lt;/a&gt;, &lt;a href="http://codeclimber.net.nz/tags/njugbe/default.aspx" rel="tag"&gt;njugbe&lt;/a&gt;, &lt;a href="http://codeclimber.net.nz/tags/presentation/default.aspx" rel="tag"&gt;presentation&lt;/a&gt;&lt;/div&gt;&lt;img src="http://codeclimber.net.nz/aggbug/998.aspx" width="1" height="1" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Codeclimber?a=_Uv9sqIuTyY:460tFtA1K2I:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Codeclimber?i=_Uv9sqIuTyY:460tFtA1K2I:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Codeclimber?a=_Uv9sqIuTyY:460tFtA1K2I:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Codeclimber?i=_Uv9sqIuTyY:460tFtA1K2I:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Codeclimber?a=_Uv9sqIuTyY:460tFtA1K2I:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Codeclimber?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Codeclimber?a=_Uv9sqIuTyY:460tFtA1K2I:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Codeclimber?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Codeclimber?a=_Uv9sqIuTyY:460tFtA1K2I:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Codeclimber?i=_Uv9sqIuTyY:460tFtA1K2I:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Codeclimber/~4/_Uv9sqIuTyY" height="1" width="1"/&gt;</description>
            <dc:creator>Simone Chiaretta</dc:creator>
            <guid isPermaLink="false">http://codeclimber.net.nz/archive/2013/01/18/Deploying-a-MongoDB-powered-Node-js-app-on-Windows-Azure.aspx</guid>
            <pubDate>Fri, 18 Jan 2013 14:23:10 GMT</pubDate>
            <comments>http://codeclimber.net.nz/archive/2013/01/18/Deploying-a-MongoDB-powered-Node-js-app-on-Windows-Azure.aspx#feedback</comments>
            <wfw:commentRss>http://codeclimber.net.nz/comments/commentRss/998.aspx</wfw:commentRss>
        <feedburner:origLink>http://codeclimber.net.nz/archive/2013/01/18/Deploying-a-MongoDB-powered-Node-js-app-on-Windows-Azure.aspx</feedburner:origLink></item>
        <item>
            <title>Christmas present for you: Announcing Web.NET Conf 2013 in Paris</title>
            <category>Community Life</category>
            <link>http://feedproxy.google.com/~r/Codeclimber/~3/oPKxaIIgj-s/Christmas-present-for-you-Announcing-Web-NET-Conf-2013-in.aspx</link>
            <description>&lt;p style="text-align: center;"&gt;&lt;br /&gt;
&lt;img src="/images/codeclimber_net_nz/merry-christmas-2012.jpg" width="480" height="250" alt="merry-christmas-2012.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;Together with the traditional Christmas and New Year wishes, I wanted to give all European developer a small Xmas present:&lt;/p&gt;
&lt;p style="text-align: center;"&gt;&lt;a href="http://webnetconf.eu/"&gt;Web.NET Conference&lt;/a&gt; 2013 will be held in Paris, around the end of May&lt;/p&gt;
&lt;p&gt;This year's edition is possible thanks to the help of &lt;a href="http://www.codedistillers.com/"&gt;Rui Carvalho&lt;/a&gt;, which already came to &lt;a href="http://webnetconf.eu/#/Home/SessionDetails/14"&gt;talk at last Web.NET Conference&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;So, let's look forward to an amazing 2013!!&lt;/p&gt;

&lt;div class="posttagsblock"&gt;&lt;a href="http://technorati.com/tag/webnetconf" rel="tag"&gt;webnetconf&lt;/a&gt;, &lt;a href="http://technorati.com/tag/xmas" rel="tag"&gt;xmas&lt;/a&gt;&lt;/div&gt;&lt;img src="http://codeclimber.net.nz/aggbug/997.aspx" width="1" height="1" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Codeclimber?a=oPKxaIIgj-s:rOoQHMrPEHg:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Codeclimber?i=oPKxaIIgj-s:rOoQHMrPEHg:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Codeclimber?a=oPKxaIIgj-s:rOoQHMrPEHg:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Codeclimber?i=oPKxaIIgj-s:rOoQHMrPEHg:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Codeclimber?a=oPKxaIIgj-s:rOoQHMrPEHg:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Codeclimber?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Codeclimber?a=oPKxaIIgj-s:rOoQHMrPEHg:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Codeclimber?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Codeclimber?a=oPKxaIIgj-s:rOoQHMrPEHg:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Codeclimber?i=oPKxaIIgj-s:rOoQHMrPEHg:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Codeclimber/~4/oPKxaIIgj-s" height="1" width="1"/&gt;</description>
            <dc:creator>Simone Chiaretta</dc:creator>
            <guid isPermaLink="false">http://codeclimber.net.nz/archive/2012/12/25/Christmas-present-for-you-Announcing-Web-NET-Conf-2013-in.aspx</guid>
            <pubDate>Tue, 25 Dec 2012 18:52:04 GMT</pubDate>
            <comments>http://codeclimber.net.nz/archive/2012/12/25/Christmas-present-for-you-Announcing-Web-NET-Conf-2013-in.aspx#feedback</comments>
            <wfw:commentRss>http://codeclimber.net.nz/comments/commentRss/997.aspx</wfw:commentRss>
        <feedburner:origLink>http://codeclimber.net.nz/archive/2012/12/25/Christmas-present-for-you-Announcing-Web-NET-Conf-2013-in.aspx</feedburner:origLink></item>
        <item>
            <title>How to return a CSV file with ASP.NET MVC</title>
            <category>ASP.NET MVC</category>
            <category>.NET</category>
            <link>http://feedproxy.google.com/~r/Codeclimber/~3/bD2adE8aS_I/How-to-return-a-CSV-file-with-ASP-NET-MVC.aspx</link>
            <description>&lt;p&gt;Continuing with my series of posts inspired by the work done on the &lt;a href="http://webnetconf.eu" target="_blank"&gt;Web.NET Conference&lt;/a&gt; web site, after telling you &lt;a href="http://codeclimber.net.nz/archive/2012/11/19/Why-you-should-never-use-a-boolean-field-use-an.aspx" target="_blank"&gt;why you should not use Boolean fields when modeling your objects&lt;/a&gt;, today I want to share with you an ActionResult I wrote to get a CSV from a generic list of object.&lt;/p&gt;  &lt;p&gt;I needed to download the list of all attendees in csv format so that I could import them into Excel for doing various free-form analysis: I looked around the net to see if something was available but I found nothing, so I decided to write it myself and do it the most reusable way possible.&lt;/p&gt;  &lt;p&gt;I’m not just going to give you the code, but I’d also try and comment the most important part of the class.&lt;/p&gt;  &lt;h3&gt;Extend ActionResult&lt;/h3&gt;  &lt;p&gt;Obviously, being used as result returned from an action, the class has to extend &lt;a href="http://msdn.microsoft.com/en-us/library/system.web.mvc.actionresult%28v=vs.108%29.aspx" target="_blank"&gt;ActionResult&lt;/a&gt;, and in this case, since what I’m returning is a file, I’m extending &lt;a href="http://msdn.microsoft.com/en-us/library/system.web.mvc.fileresult%28v=vs.108%29.aspx" target="_blank"&gt;FileResult&lt;/a&gt;: this provides all the standard file-related tasks, like setting the content type and setting the filename that will be suggested when saving it.&lt;/p&gt;  &lt;h4&gt;Constructor and declaration&lt;/h4&gt;  &lt;p&gt;The values for these two properties will be set in the ActionResult’s constructor:&lt;/p&gt;  &lt;div class="dropshadow code"&gt;   &lt;div class="innerbox"&gt;     &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; CsvActionResult&amp;lt;T&amp;gt; : FileResult
{
    &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;readonly&lt;/span&gt; IList&amp;lt;T&amp;gt; _list;
    &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;readonly&lt;/span&gt; &lt;span class="kwrd"&gt;char&lt;/span&gt; _separator;

    &lt;span class="kwrd"&gt;public&lt;/span&gt; CsvActionResult(IList&amp;lt;T&amp;gt; list,
        &lt;span class="kwrd"&gt;string&lt;/span&gt; fileDownloadName, 
        &lt;span class="kwrd"&gt;char&lt;/span&gt; separator=&lt;span class="str"&gt;','&lt;/span&gt;)
        : &lt;span class="kwrd"&gt;base&lt;/span&gt;(&lt;span class="str"&gt;"text/csv"&lt;/span&gt;)
    {
        _list = list;
        FileDownloadName = fileDownloadName;
        _separator = separator;
    }
...&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;I’m also passing in an optional separator because in many countries the the separator for fields is not a comma, but a semi-column.&lt;/p&gt;

&lt;h4&gt;Override WriteFile&lt;/h4&gt;

&lt;p&gt;In order to extend FileResult, you also need to override the &lt;a href="http://msdn.microsoft.com/en-us/library/system.web.mvc.fileresult.writefile%28v=vs.108%29.aspx" target="_blank"&gt;WriteFile&lt;/a&gt; method, which is the one responsible of getting the value of the file and sending it to the user. The standard implementation just takes a file from the disk and send it to the browser: in this case I have to write to the OutputStream directly the value of my list of objects.&lt;/p&gt;

&lt;div class="dropshadow code"&gt;
  &lt;div class="innerbox"&gt;
    &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; WriteFile(HttpResponseBase response)
{
    var outputStream = response.OutputStream;
    &lt;span class="kwrd"&gt;using&lt;/span&gt; (var memoryStream = &lt;span class="kwrd"&gt;new&lt;/span&gt; MemoryStream())
    {
        WriteList(memoryStream);
        outputStream.Write(memoryStream.GetBuffer(), 0, (&lt;span class="kwrd"&gt;int&lt;/span&gt;)memoryStream.Length);
    }
}&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;h3&gt;Discovering the property names at runtime&lt;/h3&gt;

&lt;p&gt;The csv file needs to have the list of all the columns’ names so that Excel can give a name to it once imported: since the action results accepts any object I needed to find out the name of the property. This was easily done via reflection and passed to a function that writes it in the OutputStream of the response.&lt;/p&gt;

&lt;div class="dropshadow code"&gt;
  &lt;div class="innerbox"&gt;
    &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;foreach&lt;/span&gt; (MemberInfo member &lt;span class="kwrd"&gt;in&lt;/span&gt; &lt;span class="kwrd"&gt;typeof&lt;/span&gt;(T).GetProperties())
{
    WriteValue(streamWriter, member.Name);
}&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;The write value method is an utility method that formats the value in the proper way and with the correct separator. I’ll show this later in the post.&lt;/p&gt;

&lt;h3&gt;Writing each object of the list&lt;/h3&gt;

&lt;p&gt;After having written the header, always via reflection I get the values of the properties, and write them in the OutputStream.&lt;/p&gt;

&lt;div class="dropshadow code"&gt;
  &lt;div class="innerbox"&gt;
    &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;foreach&lt;/span&gt; (T line &lt;span class="kwrd"&gt;in&lt;/span&gt; _list)
{
    &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (MemberInfo member &lt;span class="kwrd"&gt;in&lt;/span&gt; &lt;span class="kwrd"&gt;typeof&lt;/span&gt;(T).GetProperties())
    {
        WriteValue(streamWriter, GetPropertyValue(line, member.Name));
    }
    streamWriter.WriteLine();
}&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;If a property is of a complex type, and you still want to export it into the csv file, all you need to do is override the ToString method to format it into a string. Here is the GetPropertyValue method that does the actual work of retrieving the value from object.&lt;/p&gt;

&lt;div class="dropshadow code"&gt;
  &lt;div class="innerbox"&gt;
    &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; GetPropertyValue(&lt;span class="kwrd"&gt;object&lt;/span&gt; src, &lt;span class="kwrd"&gt;string&lt;/span&gt; propName)
{
    &lt;span class="kwrd"&gt;return&lt;/span&gt; src.GetType().GetProperty(propName).GetValue(src, &lt;span class="kwrd"&gt;null&lt;/span&gt;).ToString()??&lt;span class="str"&gt;""&lt;/span&gt;;
}&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;h3&gt;Formatting the property value&lt;/h3&gt;

&lt;p&gt;Care must be given when writing the actual string otherwise Excel (or any other csv parser) will not be able to get the data correctly: the value must be enclosed in double quotes, and all double quotes inside the value must be escaped. And furthermore the separator has to be different based on the culture of the user, but to make it simple I take the value supplied during the instantiation of the action result.&lt;/p&gt;

&lt;div class="dropshadow code"&gt;
  &lt;div class="innerbox"&gt;
    &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; WriteValue(StreamWriter writer, String &lt;span class="kwrd"&gt;value&lt;/span&gt;)
{
    writer.Write(&lt;span class="str"&gt;"\""&lt;/span&gt;);
    writer.Write(&lt;span class="kwrd"&gt;value&lt;/span&gt;.Replace(&lt;span class="str"&gt;"\""&lt;/span&gt;, &lt;span class="str"&gt;"\"\""&lt;/span&gt;));
    writer.Write(&lt;span class="str"&gt;"\""&lt;/span&gt; + _separator);
}&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;h3&gt;How to use it&lt;/h3&gt;

&lt;p&gt;Using the action result is pretty easy: you just create a new instance of the class, and pass it a IList of something. And then return the class in you action method.&lt;/p&gt;

&lt;div class="dropshadow code"&gt;
  &lt;div class="innerbox"&gt;
    &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; ActionResult CsvList()
{
    var model = CreateUserListViewModel();
    &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt; CsvActionResult&amp;lt;UserListViewModelItem&amp;gt;(model.Items, &lt;span class="str"&gt;"UserExport.csv"&lt;/span&gt;);
}&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;h3&gt;Get the complete code&lt;/h3&gt;

&lt;p&gt;You can get the &lt;a href="https://gist.github.com/4104490" target="_blank"&gt;complete code of the class on this gist&lt;/a&gt;. I’ll be creating a NuGet package with binaries and some enhancements soon.&lt;/p&gt;

&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:23f32dc4-7c00-41f4-9138-978c9bbaaff3" class="wlWriterEditableSmartContent"&gt;Tags: &lt;a href="http://codeclimber.net.nz/tags/actionresult/default.aspx" rel="tag"&gt;actionresult&lt;/a&gt;

, &lt;a href="http://codeclimber.net.nz/tags/aspnetmvc/default.aspx" rel="tag"&gt;aspnetmvc&lt;/a&gt;

, &lt;a href="http://codeclimber.net.nz/tags/extensibility/default.aspx" rel="tag"&gt;extensibility&lt;/a&gt;

, &lt;a href="http://codeclimber.net.nz/tags/CSV/default.aspx" rel="tag"&gt;CSV&lt;/a&gt;

&lt;/div&gt;&lt;img src="http://codeclimber.net.nz/aggbug/995.aspx" width="1" height="1" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Codeclimber?a=bD2adE8aS_I:UBrICES5b_M:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Codeclimber?i=bD2adE8aS_I:UBrICES5b_M:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Codeclimber?a=bD2adE8aS_I:UBrICES5b_M:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Codeclimber?i=bD2adE8aS_I:UBrICES5b_M:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Codeclimber?a=bD2adE8aS_I:UBrICES5b_M:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Codeclimber?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Codeclimber?a=bD2adE8aS_I:UBrICES5b_M:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Codeclimber?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Codeclimber?a=bD2adE8aS_I:UBrICES5b_M:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Codeclimber?i=bD2adE8aS_I:UBrICES5b_M:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Codeclimber/~4/bD2adE8aS_I" height="1" width="1"/&gt;</description>
            <dc:creator>Simone Chiaretta</dc:creator>
            <guid isPermaLink="false">http://codeclimber.net.nz/archive/2012/11/22/How-to-return-a-CSV-file-with-ASP-NET-MVC.aspx</guid>
            <pubDate>Thu, 22 Nov 2012 10:48:00 GMT</pubDate>
            <comments>http://codeclimber.net.nz/archive/2012/11/22/How-to-return-a-CSV-file-with-ASP-NET-MVC.aspx#feedback</comments>
            <slash:comments>3</slash:comments>
            <wfw:commentRss>http://codeclimber.net.nz/comments/commentRss/995.aspx</wfw:commentRss>
        <feedburner:origLink>http://codeclimber.net.nz/archive/2012/11/22/How-to-return-a-CSV-file-with-ASP-NET-MVC.aspx</feedburner:origLink></item>
        <item>
            <title>Why you should never use a boolean field (use an Enum instead)</title>
            <category>.NET</category>
            <category>C#</category>
            <category>Community Life</category>
            <link>http://feedproxy.google.com/~r/Codeclimber/~3/nns15WwuOE4/Why-you-should-never-use-a-boolean-field-use-an.aspx</link>
            <description>&lt;p&gt;Over the last few months I worked, on my spare time, on a new web development project: the site for the &lt;a href="http://webnetconf.eu" target="_blank"&gt;Web.NET Conference&lt;/a&gt;. It was a refreshing experience, going back working on custom development on ASP.NET MVC 4 and all the latest bits of technology.&lt;/p&gt;  &lt;p&gt;That gave me quite a few ideas for posts, so over the next weeks I'm going to blog about some of the bits and pieces of code that I think are worth sharing with the community, like ActionResults, HtmlHelpers together with my first real-coding experiences with RavenDb.&lt;/p&gt;  &lt;p&gt;As first post I’m not focusing on something about a technology, but I want to tell why you should never model a data field as Boolean, and instead start directly with an Enum.&lt;/p&gt;  &lt;h3&gt;How the problem started&lt;/h3&gt;  &lt;p&gt;I'm going to tell you what happened during the development of the registration and payment parts of the Web.NET Conference.&lt;/p&gt;  &lt;p&gt;I needed to keep track of whether someone has paid or not, so I started modeling that field as a simple boolean value, &lt;font face="Courier New"&gt;HasPaid&lt;/font&gt;. I also wanted to show them a different message depending on whether they paid or not, to remind them they had to pay in order to get the meal they ordered. To achieve that I checked the value of the &lt;font face="Courier New"&gt;HasPaid&lt;/font&gt; field: after a while I realized that also people that didn't order a meal had the &lt;font face="Courier New"&gt;HasPaid&lt;/font&gt; to &lt;strong&gt;false&lt;/strong&gt;, as indeed they didn't pay because they didn't have to.   &lt;br /&gt;So in this confirmation screen I also checked whether the total of what they had to pay was different from 0. And it was still manageable.&lt;/p&gt;  &lt;p&gt;After a while someone asked if they could pay at the registration desk as in their country PayPal was not operating: so I moved them manually to &lt;font face="Courier New"&gt;HasPaid=true&lt;/font&gt; and added in the note field that they will pay at the desk, so that their lunch and were taken into account.&lt;/p&gt;  &lt;p&gt;Then again something else happened: someone that has already paid unregistered and left what he paid as donation for the conference. Now I needed to filter out their meals, their participation at the conference, but still keep their payment in the count of the donations received, unlike the ones that asked for a refund for which I need to filter out also the payment: this was becoming a nightmare to handle with the original &lt;font face="Courier New"&gt;HasPaid&lt;/font&gt; field.&lt;/p&gt;  &lt;h3&gt;On with the refactoring&lt;/h3&gt;  &lt;p&gt;One evening I sat down, and refactored the payment procedure and all reports to go from a simple boolean to an Enum with the following options:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Undefined&lt;/strong&gt; &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;DidntPay&lt;/strong&gt; (the original &lt;font face="Courier New"&gt;HasPaid=&lt;/font&gt;&lt;strong&gt;false&lt;/strong&gt;) &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;NoNeedToPay&lt;/strong&gt; (for those how didn't reserve a meal or gave no donation) &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Paid&lt;/strong&gt; (the original &lt;font face="Courier New"&gt;HasPaid=&lt;/font&gt;&lt;strong&gt;true&lt;/strong&gt;) &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;PaysAtRegistration&lt;/strong&gt; (for the guys who couldn't pay online) &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Refunded&lt;/strong&gt; (if someone cancels, and wants his money back) &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;And after the refactoring and making sure all reports and state transitions were using the new Enum, I also had to build a small script to convert all the data inside the RavenDb repository (and this is something interesting I’d probably write a blog post about).&lt;/p&gt;  &lt;h3&gt;Another example of the same problem&lt;/h3&gt;  &lt;p&gt;The same problem occurred with the registration status: it started with 2 booleans, &lt;font face="Courier New"&gt;IsRegistered&lt;/font&gt; and &lt;font face="Courier New"&gt;IsWaitlist&lt;/font&gt;, then expanded with &lt;font face="Courier New"&gt;HasCancelled&lt;/font&gt; and &lt;font face="Courier New"&gt;WasApprovedFromWaitList&lt;/font&gt; and all crazy combinations of boolean expressions to understand his real status, and then, in that very same refactoring session, it all became a more clear and easier with that Enum:&lt;/p&gt;  &lt;div class="dropshadow code"&gt;   &lt;div class="innerbox"&gt;     &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;enum&lt;/span&gt; RegistrationStatus
{
    Undefined,
    Confirmed,
    WaitingForPayment,
    Waitlist,
    Cancelled,
    Approved,
    ApprovalNotConfirmed
}&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;h3&gt;State Machine/Workflow&lt;/h3&gt;

&lt;p&gt;The benefit of this approach is that both registration and payment became two state machines, and it was much more easy to implement a very simple workflow with the possibility to set allowed and forbidden transition (for example, someone in waitlist couldn’t become “confirmed” without passing from the “approved” status), and action that needs to be done when a given state transition happens. Here is an example of what the transition rules look like: previously with the combination of booleans it was crazy, and very easy to make logical mistakes.&lt;/p&gt;

&lt;div class="dropshadow code"&gt;
  &lt;div class="innerbox"&gt;
    &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; RegistrationFlow
{
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; RegistrationStatusTransition(RegistrationStatus newStatus,
        Registration registration)
    {
        &lt;span class="kwrd"&gt;switch&lt;/span&gt; (newStatus)
        {
        ...
        &lt;span class="kwrd"&gt;case&lt;/span&gt; RegistrationStatus.WaitingForPayement:
            &lt;span class="kwrd"&gt;if&lt;/span&gt;(registration.RegistrationStatus!=RegistrationStatus.Undefined &amp;amp;&amp;amp;
            registration.RegistrationStatus!=RegistrationStatus.Approved)
                &lt;span class="kwrd"&gt;throw&lt;/span&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt; ArgumentOutOfRangeException(&lt;span class="str"&gt;"newStatus"&lt;/span&gt;,
                String.Format(&lt;span class="str"&gt;"{0} -&amp;gt; WaitingForPayement not allowed"&lt;/span&gt;,
                registration.RegistrationStatus));
            &lt;span class="kwrd"&gt;if&lt;/span&gt;(registration.PaymentStatus==PaymentStatus.NoNeedToPay)
                registration.RegistrationStatus = RegistrationStatus.Confirmed;
            &lt;span class="kwrd"&gt;else&lt;/span&gt;
                registration.RegistrationStatus = RegistrationStatus.WaitingForPayement;
            &lt;span class="kwrd"&gt;break&lt;/span&gt;;
        &lt;span class="kwrd"&gt;case&lt;/span&gt; RegistrationStatus.Confirmed:
            &lt;span class="kwrd"&gt;if&lt;/span&gt;(registration.RegistrationStatus!=RegistrationStatus.Undefined &amp;amp;&amp;amp;
            registration.RegistrationStatus!=RegistrationStatus.WaitingForPayement &amp;amp;&amp;amp;
            registration.RegistrationStatus!=RegistrationStatus.Approved)
                &lt;span class="kwrd"&gt;throw&lt;/span&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt; ArgumentOutOfRangeException(&lt;span class="str"&gt;"newStatus"&lt;/span&gt;,
                String.Format(&lt;span class="str"&gt;"{0} -&amp;gt; Confirmed not allowed"&lt;/span&gt;,
                registration.RegistrationStatus));

            registration.RegistrationStatus = RegistrationStatus.Confirmed;
            &lt;span class="kwrd"&gt;break&lt;/span&gt;;
        ...
        }
    }
}&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;h3&gt;Lesson Learned&lt;/h3&gt;

&lt;p&gt;When I tweeted about this while I was refactoring, someone told me: &lt;em&gt;“Using a boolean is an antipattern”&lt;/em&gt;… well… now I experienced it myself.&lt;/p&gt;

&lt;p&gt;From this experience, in the future, I’ll never use a Boolean field again, and always start with an Enum, especially with a Document database where migrating data is a bit more complex than with relational databases. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;UPDATE&lt;/strong&gt;: Given the comments received I’d like to clarify a bit my position. I’m not saying booleans are not to be used at all: booleans have value, just not when the the thing you are trying to model is a state and not just a real/physically boolean value.&lt;/p&gt;

&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:1bce348c-cd51-4828-878e-0738528474a8" class="wlWriterSmartContent"&gt;Tags: &lt;a href="http://codeclimber.net.nz/tags/webnetconf/default.aspx" rel="tag"&gt;webnetconf&lt;/a&gt; , &lt;a href="http://codeclimber.net.nz/tags/boolean/default.aspx" rel="tag"&gt;boolean&lt;/a&gt; , &lt;a href="http://codeclimber.net.nz/tags/enum/default.aspx" rel="tag"&gt;enum&lt;/a&gt; , &lt;a href="http://codeclimber.net.nz/tags/architecture/default.aspx" rel="tag"&gt;architecture&lt;/a&gt; &lt;/div&gt;&lt;img src="http://codeclimber.net.nz/aggbug/994.aspx" width="1" height="1" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Codeclimber?a=nns15WwuOE4:os3Uta_IaJs:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Codeclimber?i=nns15WwuOE4:os3Uta_IaJs:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Codeclimber?a=nns15WwuOE4:os3Uta_IaJs:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Codeclimber?i=nns15WwuOE4:os3Uta_IaJs:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Codeclimber?a=nns15WwuOE4:os3Uta_IaJs:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Codeclimber?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Codeclimber?a=nns15WwuOE4:os3Uta_IaJs:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Codeclimber?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Codeclimber?a=nns15WwuOE4:os3Uta_IaJs:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Codeclimber?i=nns15WwuOE4:os3Uta_IaJs:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Codeclimber/~4/nns15WwuOE4" height="1" width="1"/&gt;</description>
            <dc:creator>Simone Chiaretta</dc:creator>
            <guid isPermaLink="false">http://codeclimber.net.nz/archive/2012/11/19/Why-you-should-never-use-a-boolean-field-use-an.aspx</guid>
            <pubDate>Mon, 19 Nov 2012 09:29:00 GMT</pubDate>
            <comments>http://codeclimber.net.nz/archive/2012/11/19/Why-you-should-never-use-a-boolean-field-use-an.aspx#feedback</comments>
            <slash:comments>21</slash:comments>
            <wfw:commentRss>http://codeclimber.net.nz/comments/commentRss/994.aspx</wfw:commentRss>
        <feedburner:origLink>http://codeclimber.net.nz/archive/2012/11/19/Why-you-should-never-use-a-boolean-field-use-an.aspx</feedburner:origLink></item>
        <item>
            <title>OpenROV at Node.js Conf Italy and Maker Italy</title>
            <category>Me, Myself &amp; I</category>
            <category>Community Life</category>
            <link>http://feedproxy.google.com/~r/Codeclimber/~3/8xY8kivYtnA/OpenROV-at-Node-js-Conf-Italy-and-Maker-Italy.aspx</link>
            <description>&lt;p&gt;On the 11 of November I had the pleasure to present at the &lt;a href="http://www.nodejsconf.it/"&gt;Node.js Conference Italy&lt;/a&gt; the work I’ve been doing with &lt;a href="http://www.codewithpassion.com/" rel="met colleague"&gt;Dominik&lt;/a&gt; and a bunch of other guys in the San Francisco area on the “brain” of the robotic submarine called &lt;a href="http://openrov.com/"&gt;OpenROV&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;On my way back from Brescia I stopped by at the first &lt;a href="http://www.makersitaly.it/"&gt;Italian Maker Faire&lt;/a&gt;, held in the big expo area of Milano Rho, where I wandered among stands full of flying drones, biped robots, 3D printers, FabLabs and electronics shops.&lt;/p&gt;  &lt;p&gt;Together with web development, the makers and open hardware movement is something &lt;a href="http://codeclimber.net.nz/archive/2012/07/24/Open-Hardware-Drones-and-ROVs-artistic-project.aspx"&gt;I’m getting interested in&lt;/a&gt;, and after few months dedicated totally to &lt;a href="http://webnetconf.eu/"&gt;web development&lt;/a&gt;, this was a weekend totally devoted to these two new interests.&lt;/p&gt;  &lt;h3&gt;Slide and resource of my OpenROV presentation at Node.js Conference&lt;/h3&gt;  &lt;p&gt;During the 30 minutes presentation I went over the &lt;a href="https://dl.dropbox.com/u/1554948/OpenROV-nodejsconfit/index.html#/1/1"&gt;physical design&lt;/a&gt; of the OpenROV, the &lt;a href="https://dl.dropbox.com/u/1554948/OpenROV-nodejsconfit/index.html#/1/3"&gt;reasons why it has been build in the first place&lt;/a&gt;, and an overview of the &lt;a href="https://dl.dropbox.com/u/1554948/OpenROV-nodejsconfit/index.html#/2"&gt;architecture of the software&lt;/a&gt; that runs on the small board inside the robot itself.&lt;/p&gt;  &lt;p&gt;I was the only one doing a presentation in JavaScript, using &lt;a href="http://lab.hakim.se/reveal-js/"&gt;Reveal.js&lt;/a&gt;, which was shocking being it a conference on JavaScript: the slides are available both as &lt;a href="https://dl.dropbox.com/u/1554948/OpenROV-nodejsconfit/index.html"&gt;JavaScript presentation&lt;/a&gt; but also published on &lt;a href="http://www.slideshare.net/simonech/openrov-nodejs-takes-a-dive-into-the-ocean"&gt;Slideshare&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;On my other &lt;a href="http://dronesandrovs.wordpress.com/"&gt;blog about all things HW&lt;/a&gt; and makers I also wrote a &lt;a href="http://dronesandrovs.wordpress.com/2012/11/10/how-the-openrov-software-works-my-presentation-at-the-node-js-conference-italy/"&gt;blog post with a bit more of resources and a longer commentary of the event&lt;/a&gt;.&lt;/p&gt;  &lt;h3&gt;The Italian Maker Faire&lt;/h3&gt;  &lt;p&gt;On my way back home, after the Node.js conference hackathon, I spent a few hours wandering among the stands at &lt;a href="http://www.makersitaly.it/"&gt;Makers Italy&lt;/a&gt;: the maker movement is invading Italy too… finally!&lt;/p&gt;  &lt;p&gt;Not only robots and drones, but also a lot of stands on digital fabrication tools (3D printers above everything) and of small makers’ founded companies making various items like custom skateboards, guitars, bags, jewelries and so on.&lt;/p&gt;  &lt;p&gt;Not sure if that movement will bring innovation or it’s just yet another trend, but for the moment it seems like a lot of people are getting interested, building tools for makers, and it won’t be long before digital fabrication tools will land in every house. Already now, 3D printers are less expensive of a low level PC 10 years ago, and I guess they’ll reach the cost of an entry level laptop.&lt;/p&gt;  &lt;p&gt;Again on my &lt;a href="http://dronesandrovs.wordpress.com/"&gt;drones&amp;amp;rovs blog&lt;/a&gt; I wrote &lt;a href="http://dronesandrovs.wordpress.com/2012/11/12/makers-italy-the-italian-makers-faire/"&gt;my impressions and a small review of the stands I found more interesting&lt;/a&gt;. &lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:222a8cd5-f5b8-4b93-94c1-0ff82b1bd8e8" class="wlWriterEditableSmartContent"&gt;Tags: &lt;a href="http://codeclimber.net.nz/tags/makersitaly/default.aspx" rel="tag"&gt;makersitaly&lt;/a&gt;, &lt;a href="http://codeclimber.net.nz/tags/nodejs/default.aspx" rel="tag"&gt;nodejs&lt;/a&gt;, &lt;a href="http://codeclimber.net.nz/tags/openrov/default.aspx" rel="tag"&gt;openrov&lt;/a&gt;, &lt;a href="http://codeclimber.net.nz/tags/conference/default.aspx" rel="tag"&gt;conference&lt;/a&gt;&lt;/div&gt;&lt;img src="http://codeclimber.net.nz/aggbug/993.aspx" width="1" height="1" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Codeclimber?a=8xY8kivYtnA:Xv_JeIrP20Q:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Codeclimber?i=8xY8kivYtnA:Xv_JeIrP20Q:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Codeclimber?a=8xY8kivYtnA:Xv_JeIrP20Q:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Codeclimber?i=8xY8kivYtnA:Xv_JeIrP20Q:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Codeclimber?a=8xY8kivYtnA:Xv_JeIrP20Q:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Codeclimber?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Codeclimber?a=8xY8kivYtnA:Xv_JeIrP20Q:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Codeclimber?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Codeclimber?a=8xY8kivYtnA:Xv_JeIrP20Q:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Codeclimber?i=8xY8kivYtnA:Xv_JeIrP20Q:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Codeclimber/~4/8xY8kivYtnA" height="1" width="1"/&gt;</description>
            <dc:creator>Simone Chiaretta</dc:creator>
            <guid isPermaLink="false">http://codeclimber.net.nz/archive/2012/11/13/OpenROV-at-Node-js-Conf-Italy-and-Maker-Italy.aspx</guid>
            <pubDate>Tue, 13 Nov 2012 11:09:39 GMT</pubDate>
            <comments>http://codeclimber.net.nz/archive/2012/11/13/OpenROV-at-Node-js-Conf-Italy-and-Maker-Italy.aspx#feedback</comments>
            <wfw:commentRss>http://codeclimber.net.nz/comments/commentRss/993.aspx</wfw:commentRss>
        <feedburner:origLink>http://codeclimber.net.nz/archive/2012/11/13/OpenROV-at-Node-js-Conf-Italy-and-Maker-Italy.aspx</feedburner:origLink></item>
        <item>
            <title>Web.NET Conference: find it on social media</title>
            <category>Community Life</category>
            <link>http://feedproxy.google.com/~r/Codeclimber/~3/nGP4dUREQSQ/Web-NET-Conference-find-in-on-social-media.aspx</link>
            <description>&lt;p&gt;Apart from the obvious &lt;a href="https://twitter.com/webnetconf"&gt;twitter&lt;/a&gt; and &lt;a href="https://www.facebook.com/WebnetConf"&gt;facebook&lt;/a&gt;, the Web.NET Conference is using a few specific social networks. We are also on:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="https://geekli.st/WebNETConf"&gt;Geekli.st&lt;/a&gt; – A social network for “geeks”&lt;/li&gt;    &lt;li&gt;&lt;a href="http://oleapark.com/events/4ff30c8f7c93dd14e5000002"&gt;OleaPark&lt;/a&gt; – A conference specific networking app&lt;/li&gt;    &lt;li&gt;&lt;a href="http://lanyrd.com/2012/webnet12/"&gt;Lanyrd&lt;/a&gt; – A conference social directory&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;I’m going to explain a bit more what they are, and for we have decided to use them.&lt;/p&gt;  &lt;h3&gt;Geekli.st&lt;/h3&gt;  &lt;p&gt;Probably I should have added &lt;a href="https://geekli.st/"&gt;geekli.st&lt;/a&gt; in the first line of this post, next to twitter and facebook after the adjective “obvious”. If you are a developer you should at least know &lt;a href="https://geekli.st/about"&gt;what it is&lt;/a&gt;, or already have a profile over there (if you don’t, &lt;a href="https://geekli.st/simonech/invite/1AD4ED198E"&gt;you can join geekli.st&lt;/a&gt;). Basically it’s social network were developers can share their accomplishments, talk about what they are building and doing but always staying on “geek talk”. But it’s also becoming the new way of seeking and offering jobs.&lt;/p&gt;  &lt;p&gt;Geekli.st is also one of the main sponsors of the conference (&lt;a href="https://geekli.st/WebNETConf/we-have-free-t-shirts-for-everyone-sponsored-by-geeklist"&gt;they also offered T-Shirt for everyone&lt;/a&gt;) and it might be that &lt;a href="https://geekli.st/csanz"&gt;Christian Sanz&lt;/a&gt;, the CTO and co-founder of Geekli.st comes and give a presentation at the conference.&lt;/p&gt;  &lt;p&gt;You can find the Web.NET Conference on Geekli.st at: &lt;a title="https://geekli.st/WebNETConf" href="https://geekli.st/WebNETConf"&gt;https://geekli.st/WebNETConf&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;OleaPark&lt;/h3&gt;  &lt;p&gt;This Berlin-based French startup has built a new way for people attending conferences to connect one another: you go to the &lt;a href="http://oleapark.com/events/4ff30c8f7c93dd14e5000002"&gt;event page&lt;/a&gt;, you download the app (&lt;a href="http://itunes.apple.com/us/app/oleapark-app/id444993184?mt=8&amp;amp;ls=1"&gt;iPhone&lt;/a&gt;, &lt;a href="https://market.android.com/details?id=com.branchu1&amp;amp;feature=search_result"&gt;Android&lt;/a&gt; and soon mobile site) and can see who is attending the conference, their profiles and if you see someone that can be a interesting person, you can contact him via the app. And on the day of the event people can checkin at the conference, and you can see how is there and start talking to them. To understand better, there is a &lt;a href="http://oleapark.com/participants"&gt;video that explains everything&lt;/a&gt; on their site.&lt;/p&gt;  &lt;p&gt;You can join the conference on OleaPark at: &lt;a title="http://oleapark.com/events/4ff30c8f7c93dd14e5000002" href="http://oleapark.com/events/4ff30c8f7c93dd14e5000002"&gt;http://oleapark.com/events/4ff30c8f7c93dd14e5000002&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;Lanyrd&lt;/h3&gt;  &lt;p&gt;And finally the Web.NET Conference is also on Lanyrd. That is yet another way to see who is attending the conference, but also to see the history of each speaker and get a feeling of the type of audience that will be at the conference. And if you are someone that easily forget dates and times, you can &lt;a href="http://lanyrd.com/2012/webnet12/save-to-calendar/"&gt;add the conference’s schedule to your calendar&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Lanyrd also provides a nice &lt;a href="http://m.lanyrd.com/2012/webnet12/"&gt;mobile-optimized version of the agenda&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;If you use Lanyrd, you can join the event at: &lt;a href="http://lanyrd.com/2012/webnet12/"&gt;http://lanyrd.com/2012/webnet12/&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;Twitter and Facebook&lt;/h3&gt;  &lt;p&gt;Even if “obvious” the conference is on twitter and facebook, so don’t forget to follow &lt;a href="https://twitter.com/webnetconf"&gt;@webnetconf&lt;/a&gt; to get real-time info and updates on the conference, &lt;a href="https://www.facebook.com/WebnetConf/"&gt;like the conference’s page&lt;/a&gt; on Facebook and &lt;a href="https://www.facebook.com/events/382110041859771/"&gt;join the FB event&lt;/a&gt;.&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:9f25f411-65f4-4d8e-8a33-dbcfd4ba26cb" class="wlWriterEditableSmartContent"&gt;Tags: &lt;a href="http://codeclimber.net.nz/tags/webnet12/default.aspx" rel="tag"&gt;webnet12&lt;/a&gt;, &lt;a href="http://codeclimber.net.nz/tags/conference/default.aspx" rel="tag"&gt;conference&lt;/a&gt;, &lt;a href="http://codeclimber.net.nz/tags/twitter/default.aspx" rel="tag"&gt;twitter&lt;/a&gt;, &lt;a href="http://codeclimber.net.nz/tags/geeklist/default.aspx" rel="tag"&gt;geeklist&lt;/a&gt;, &lt;a href="http://codeclimber.net.nz/tags/social+media/default.aspx" rel="tag"&gt;social media&lt;/a&gt;&lt;/div&gt;&lt;img src="http://codeclimber.net.nz/aggbug/992.aspx" width="1" height="1" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Codeclimber?a=nGP4dUREQSQ:BQPOWVrvgRE:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Codeclimber?i=nGP4dUREQSQ:BQPOWVrvgRE:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Codeclimber?a=nGP4dUREQSQ:BQPOWVrvgRE:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Codeclimber?i=nGP4dUREQSQ:BQPOWVrvgRE:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Codeclimber?a=nGP4dUREQSQ:BQPOWVrvgRE:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Codeclimber?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Codeclimber?a=nGP4dUREQSQ:BQPOWVrvgRE:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Codeclimber?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Codeclimber?a=nGP4dUREQSQ:BQPOWVrvgRE:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Codeclimber?i=nGP4dUREQSQ:BQPOWVrvgRE:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Codeclimber/~4/nGP4dUREQSQ" height="1" width="1"/&gt;</description>
            <dc:creator>Simone Chiaretta</dc:creator>
            <guid isPermaLink="false">http://codeclimber.net.nz/archive/2012/10/04/Web-NET-Conference-find-in-on-social-media.aspx</guid>
            <pubDate>Thu, 04 Oct 2012 16:27:55 GMT</pubDate>
            <comments>http://codeclimber.net.nz/archive/2012/10/04/Web-NET-Conference-find-in-on-social-media.aspx#feedback</comments>
            <wfw:commentRss>http://codeclimber.net.nz/comments/commentRss/992.aspx</wfw:commentRss>
        <feedburner:origLink>http://codeclimber.net.nz/archive/2012/10/04/Web-NET-Conference-find-in-on-social-media.aspx</feedburner:origLink></item>
        <item>
            <title>Web.NET European Conference: sold out in 2hrs and now the agenda is available</title>
            <category>Community Life</category>
            <link>http://feedproxy.google.com/~r/Codeclimber/~3/HTQa5Ed5oFA/Web-NET-European-Conference-agenda-available-and-sold-out-in.aspx</link>
            <description>&lt;p&gt;I have to say that lately all my spare time has been dedicated to the organization of the &lt;a href="http://webnetconf.eu/"&gt;Web.NET Conference&lt;/a&gt;: I firmly believe that the &lt;a href="http://webnetconf.eu/#web-net"&gt;future of web development&lt;/a&gt; will move away from the enterprise features and the needless over-engineering typical of the last decade. That’s why I’m putting so much effort in this conference. And I’m super happy of how it’s rolling out.&lt;/p&gt;  &lt;h3&gt;Registration: Sold out and waitlist is open&lt;/h3&gt;  &lt;p&gt;We opened registration the 18 of September, at midday, and by 2:30PM all the 120 places available have been given out: that means 120 seats in 2:30. The previous record for the other conference I organized was 120 seats in one day, and it was already a big accomplishment.&lt;/p&gt;  &lt;p&gt;At the moment &lt;a href="http://webnetconf.eu/#registration"&gt;only the waitlist is open&lt;/a&gt;, and there are already 40 persons in it: from experience we usually recall 40 people from the waitlist (if people registered are nice and tell us if they planning on not coming anymore), so if you register quickly chances are you might take part in the conference anyway.&lt;/p&gt;  &lt;h3&gt;Agenda&lt;/h3&gt;  &lt;p&gt;I want to thank all the people that &lt;a href="http://codeclimber.net.nz/archive/2012/08/06/Vote-for-the-sessions-you-want-to-attend-at-the.aspx"&gt;voted&lt;/a&gt; during the month of August as they really helped shape the conference: we have received &lt;strong&gt;45&lt;/strong&gt; proposals from &lt;strong&gt;30&lt;/strong&gt; speakers all of which where super interesting, and would have been really difficult for us to choose the 20 sessions for the agenda. Here is the beautiful design of the agenda, designed by the guys of &lt;a href="http://www.greenbubble.it/"&gt;GreenBubble&lt;/a&gt;, an Italian web agency that jumped both feet together with us on this project (click on the image to read the &lt;a href="http://webnetconf.eu/#agenda"&gt;agenda&lt;/a&gt;):&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://webnetconf.eu/#agenda"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="webnetconf-agenda" border="0" alt="webnetconf-agenda" src="http://codeclimber.net.nz/images/codeclimber_net_nz/WindowsLiveWriter/Web.NETEuropeanConference_9190/webnetconf-agenda_3.png" width="404" height="635" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;There will be a lot of international speakers and they’ll talk about WebAPI, REST, OWIN, advanced JavaScript frameworks, and more: all topics strictly related to “simplicity” and lightweight approach in building web applications.&lt;/p&gt;  &lt;p&gt;Now 3 more weeks and the conference will kickoff: it will be a busy period, but really looking forward to meeting in person everyone that made this possible: the speakers, the sponsors and the attendees.&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:84e6c66e-72e0-4433-b0d1-41c5daf789c5" class="wlWriterEditableSmartContent"&gt;Tags: &lt;a href="http://codeclimber.net.nz/tags/webnet12/default.aspx" rel="tag"&gt;webnet12&lt;/a&gt;, &lt;a href="http://codeclimber.net.nz/tags/conference/default.aspx" rel="tag"&gt;conference&lt;/a&gt;, &lt;a href="http://codeclimber.net.nz/tags/future+of+web/default.aspx" rel="tag"&gt;future of web&lt;/a&gt;&lt;/div&gt;&lt;img src="http://codeclimber.net.nz/aggbug/991.aspx" width="1" height="1" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Codeclimber?a=HTQa5Ed5oFA:GSEHPbiM8OA:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Codeclimber?i=HTQa5Ed5oFA:GSEHPbiM8OA:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Codeclimber?a=HTQa5Ed5oFA:GSEHPbiM8OA:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Codeclimber?i=HTQa5Ed5oFA:GSEHPbiM8OA:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Codeclimber?a=HTQa5Ed5oFA:GSEHPbiM8OA:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Codeclimber?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Codeclimber?a=HTQa5Ed5oFA:GSEHPbiM8OA:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Codeclimber?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Codeclimber?a=HTQa5Ed5oFA:GSEHPbiM8OA:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Codeclimber?i=HTQa5Ed5oFA:GSEHPbiM8OA:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Codeclimber/~4/HTQa5Ed5oFA" height="1" width="1"/&gt;</description>
            <dc:creator>Simone Chiaretta</dc:creator>
            <guid isPermaLink="false">http://codeclimber.net.nz/archive/2012/09/27/Web-NET-European-Conference-agenda-available-and-sold-out-in.aspx</guid>
            <pubDate>Thu, 27 Sep 2012 09:31:50 GMT</pubDate>
            <comments>http://codeclimber.net.nz/archive/2012/09/27/Web-NET-European-Conference-agenda-available-and-sold-out-in.aspx#feedback</comments>
            <wfw:commentRss>http://codeclimber.net.nz/comments/commentRss/991.aspx</wfw:commentRss>
        <feedburner:origLink>http://codeclimber.net.nz/archive/2012/09/27/Web-NET-European-Conference-agenda-available-and-sold-out-in.aspx</feedburner:origLink></item>
        <item>
            <title>Vote for the sessions you want to attend at the Web.NET Conference</title>
            <category>Community Life</category>
            <category>ASP.NET</category>
            <category>ASP.NET MVC</category>
            <link>http://feedproxy.google.com/~r/Codeclimber/~3/r5HM0ELRd7Y/Vote-for-the-sessions-you-want-to-attend-at-the.aspx</link>
            <description>&lt;p&gt;Over the month of July, &lt;strong&gt;29&lt;/strong&gt; speaker submitted &lt;strong&gt;44&lt;/strong&gt; presentations' proposals. But we have only 19 slots, so even limiting to one session per speaker we will not be able to accept all the speakers that submitted a proposal.&lt;/p&gt;  &lt;p&gt;Today we are opening the voting phase: till the beginning of September &lt;a href="http://webnetconf.eu/Proposals/Vote"&gt;you’ll be able to vote&lt;/a&gt; for the 5 sessions you’d like to attend to at the Web.NET Conference on the 20 October.&lt;/p&gt;  &lt;p&gt;Speakers are coming from all Europe (and beyond), like &lt;a href="http://nelm.io/pierre"&gt;Pierre Spring&lt;/a&gt; from Switzerland, Niels Hartvig from &lt;a href="http://umbraco.com"&gt;Umbraco&lt;/a&gt;, &lt;a href="http://www.jakobmattsson.se"&gt;Jakob Mattsson&lt;/a&gt; from Sweden, &lt;a href="http://blog.maartenballiauw.be"&gt;Maarten Balliauw&lt;/a&gt;, &lt;a href="http://www.krisvandermast.com"&gt;Kris van der Mast&lt;/a&gt; and &lt;a href="http://jefclaes.be"&gt;Jef Claes&lt;/a&gt; from Belgium, &lt;a href="ayende@ayende.com"&gt;Ayende&lt;/a&gt; from Israel, &lt;a href="http://horsdal.blogspot.com"&gt;Christian Horsdal&lt;/a&gt; from Denmark (first proposal received), &lt;a href="http://code-inside.de"&gt;Robert Mühsig&lt;/a&gt; from Germany. Of course also a lot of Italian, like Roberto Messora, Raffaele Rialdi, Massimiliano Mantione (which is now working on the Chrome’s V8 Javascript compiler) and many more.&lt;/p&gt;  &lt;h3&gt;Which topics have been proposed?&lt;/h3&gt;  &lt;p&gt;Just to give you a taste of what has been proposed, here is a quick list of the topics:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;ASP.NET Web API &lt;/li&gt;    &lt;li&gt;NancyFx, OpenRASTA, FubuMVC &lt;/li&gt;    &lt;li&gt;HTML5, CSS3, Responsive Design &lt;/li&gt;    &lt;li&gt;Owin, SignalR &lt;/li&gt;    &lt;li&gt;Backbone.js and Knockout.js &lt;/li&gt;    &lt;li&gt;Django, Node.js, Sinatra &lt;/li&gt;    &lt;li&gt;Orchard, Umbraco and Sharepoint &lt;/li&gt;    &lt;li&gt;Azure and cloud computing in general &lt;/li&gt;    &lt;li&gt;Javascript performance tips (from someone that builds the V8 compiler for Chrome) &lt;/li&gt;    &lt;li&gt;and much more&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;To get the full list of speaker and topics, just go the &lt;a href="http://webnetconf.eu/"&gt;Web.NET Conference web site&lt;/a&gt;, &lt;a href="http://webnetconf.eu/Auth/Login"&gt;login&lt;/a&gt; with your Twitter or Facebook account, and &lt;a href="http://webnetconf.eu/Proposals/Vote"&gt;vote for the 5 sessions&lt;/a&gt; you would like to attend.&lt;/p&gt;  &lt;p&gt;The voting will stay open till beginning of September. And then we’ll open the registrations to the conference.&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:0e61cfb2-fdaf-4f42-bc25-b0707545b0ab" class="wlWriterEditableSmartContent"&gt;Tags: &lt;a href="http://codeclimber.net.nz/tags/webnet12/default.aspx" rel="tag"&gt;webnet12&lt;/a&gt;, &lt;a href="http://codeclimber.net.nz/tags/conference/default.aspx" rel="tag"&gt;conference&lt;/a&gt;, &lt;a href="http://codeclimber.net.nz/tags/voting/default.aspx" rel="tag"&gt;voting&lt;/a&gt;&lt;/div&gt;&lt;img src="http://codeclimber.net.nz/aggbug/990.aspx" width="1" height="1" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Codeclimber?a=r5HM0ELRd7Y:Ax5uEvVwiek:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Codeclimber?i=r5HM0ELRd7Y:Ax5uEvVwiek:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Codeclimber?a=r5HM0ELRd7Y:Ax5uEvVwiek:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Codeclimber?i=r5HM0ELRd7Y:Ax5uEvVwiek:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Codeclimber?a=r5HM0ELRd7Y:Ax5uEvVwiek:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Codeclimber?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Codeclimber?a=r5HM0ELRd7Y:Ax5uEvVwiek:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Codeclimber?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Codeclimber?a=r5HM0ELRd7Y:Ax5uEvVwiek:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Codeclimber?i=r5HM0ELRd7Y:Ax5uEvVwiek:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Codeclimber/~4/r5HM0ELRd7Y" height="1" width="1"/&gt;</description>
            <dc:creator>Simone Chiaretta</dc:creator>
            <guid isPermaLink="false">http://codeclimber.net.nz/archive/2012/08/06/Vote-for-the-sessions-you-want-to-attend-at-the.aspx</guid>
            <pubDate>Mon, 06 Aug 2012 12:48:13 GMT</pubDate>
            <comments>http://codeclimber.net.nz/archive/2012/08/06/Vote-for-the-sessions-you-want-to-attend-at-the.aspx#feedback</comments>
            <wfw:commentRss>http://codeclimber.net.nz/comments/commentRss/990.aspx</wfw:commentRss>
        <feedburner:origLink>http://codeclimber.net.nz/archive/2012/08/06/Vote-for-the-sessions-you-want-to-attend-at-the.aspx</feedburner:origLink></item>
        <item>
            <title>Node.js Conference: call for papers</title>
            <category>Community Life</category>
            <category>Software Development</category>
            <link>http://feedproxy.google.com/~r/Codeclimber/~3/q0GXkS-kJQM/Node-js-Conference-call-for-papers.aspx</link>
            <description>&lt;p&gt;Not only .NET, but Node.js too.&lt;/p&gt;  &lt;p&gt;There are &lt;a href="http://tostring.it/2012/08/02/web-european-conference-last-4-days/"&gt;just 4 days left for submitting your proposal for the Web.NET Conference&lt;/a&gt;, but in this post I wanted to share a bit of love for the &lt;a href="http://www.nodejsconf.it/"&gt;Node.js conference&lt;/a&gt;, happening in Brescia (if you are not from Italy it’s more or less near Milano), in November.&lt;/p&gt;  &lt;p&gt;They have opened the Call For Papers that will stay open till the 10 of September.&lt;/p&gt;  &lt;p align="center"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="480099_249693205148622_1857283200_n" border="0" alt="480099_249693205148622_1857283200_n" src="http://codeclimber.net.nz/images/codeclimber_net_nz/WindowsLiveWriter/Node.jsConferencecallforpapers_D6D2/480099_249693205148622_1857283200_n_3.jpg" width="550" height="412" /&gt; &lt;/p&gt;  &lt;p /&gt;  &lt;p&gt;If you are doing Node.js, and you want to share some of your knowledge, this is the conference for you: to submit a proposal you have to fork the &lt;a href="https://github.com/WEBdeBS/nodejsconf2012"&gt;GitHub repository of the conference&lt;/a&gt;, edit the &lt;a href="https://github.com/WEBdeBS/nodejsconf2012/blob/master/example/your_name.json"&gt;json file&lt;/a&gt; adding the title of your talk, and your personal details, and then &lt;a href="https://github.com/WEBdeBS/nodejsconf2012/pulls"&gt;send a pull request&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;So, what are you waiting: submit yours!!&lt;/p&gt;  &lt;p&gt;PS: &lt;a href="https://github.com/simonech/nodejsconf2012/blob/2d9b9f691dbd6652059e88def02eae9e2d83f11f/simone_chiaretta-OpenROV_nodejs_underwater/simone_chiaretta.json"&gt;I submitted mine too&lt;/a&gt; (hint, will be about &lt;a href="http://openrov.com/"&gt;OpenROV&lt;/a&gt; and its usage of Node.js to control it).&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:67a08766-e8d4-4d55-b19c-2fb8d16e3f0f" class="wlWriterEditableSmartContent"&gt;Tags: &lt;a href="http://codeclimber.net.nz/tags/node.js/default.aspx" rel="tag"&gt;node.js&lt;/a&gt;, &lt;a href="http://codeclimber.net.nz/tags/nodejsconf/default.aspx" rel="tag"&gt;nodejsconf&lt;/a&gt;, &lt;a href="http://codeclimber.net.nz/tags/WebDeBS/default.aspx" rel="tag"&gt;WebDeBS&lt;/a&gt;&lt;/div&gt;&lt;img src="http://codeclimber.net.nz/aggbug/989.aspx" width="1" height="1" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Codeclimber?a=q0GXkS-kJQM:DboykQqhjIg:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Codeclimber?i=q0GXkS-kJQM:DboykQqhjIg:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Codeclimber?a=q0GXkS-kJQM:DboykQqhjIg:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Codeclimber?i=q0GXkS-kJQM:DboykQqhjIg:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Codeclimber?a=q0GXkS-kJQM:DboykQqhjIg:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Codeclimber?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Codeclimber?a=q0GXkS-kJQM:DboykQqhjIg:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Codeclimber?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Codeclimber?a=q0GXkS-kJQM:DboykQqhjIg:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Codeclimber?i=q0GXkS-kJQM:DboykQqhjIg:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Codeclimber/~4/q0GXkS-kJQM" height="1" width="1"/&gt;</description>
            <dc:creator>Simone Chiaretta</dc:creator>
            <guid isPermaLink="false">http://codeclimber.net.nz/archive/2012/08/02/Node-js-Conference-call-for-papers.aspx</guid>
            <pubDate>Thu, 02 Aug 2012 13:33:55 GMT</pubDate>
            <comments>http://codeclimber.net.nz/archive/2012/08/02/Node-js-Conference-call-for-papers.aspx#feedback</comments>
            <wfw:commentRss>http://codeclimber.net.nz/comments/commentRss/989.aspx</wfw:commentRss>
        <feedburner:origLink>http://codeclimber.net.nz/archive/2012/08/02/Node-js-Conference-call-for-papers.aspx</feedburner:origLink></item>
        <item>
            <title>Open Hardware: Drones and ROVs, artistic project</title>
            <category>Me, Myself &amp; I</category>
            <link>http://feedproxy.google.com/~r/Codeclimber/~3/8KlTm09TKZU/Open-Hardware-Drones-and-ROVs-artistic-project.aspx</link>
            <description>&lt;p&gt;You may have noticed a bit of emptiness in this blog in the last few months: I’m not &lt;a href="http://www.dailyblogtips.com/do-not-apologize-for-the-lack-of-posts/" target="_blank"&gt;apologizing for not posting&lt;/a&gt;, just explaining what I’ve been doing in the past months (and probably doing in the next ones too).&lt;/p&gt;  &lt;h3&gt;Web.NET European Conference&lt;/h3&gt;  &lt;p&gt;Probably already obvious to the most loyal readers, I’m organizing with the help of &lt;a href="http://tostring.it/" target="_blank"&gt;Ugo Lattanzi&lt;/a&gt; the &lt;a href="http://webnetconf.eu/" target="_blank"&gt;First European Web.NET Conference&lt;/a&gt;. It was a busy period and lots of stuff to do, but it was rewarding: we released a brand new website, we’ve got some great sponsors, and we are running the &lt;a href="http://codeclimber.net.nz/archive/2012/07/02/Web-NET-European-Conference-date-announced-and-call-for-presentations.aspx" target="_blank"&gt;call for presentations&lt;/a&gt; (that at the time of writing had 27 proposals, already 6 more than the available slots). And in a few weeks we are also launching the voting for the proposals received, so a bit more of work to do on that side.&lt;/p&gt;  &lt;p&gt;But this was not what I really wanted to talk about. I wanted to introduce you to my other hobbies: playing with Arduino, Open Hardware, Electronics for an artistic project I’m doing with &lt;a href="http://tsoda.eu" rel="spouse" target="_blank"&gt;Daniela&lt;/a&gt; and building RC/autonomous vehicles.&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://paysagespulsionnels.wordpress.com/"&gt;Les Paysages Pulsionnels&lt;/a&gt;&lt;/h3&gt;  &lt;p&gt;This is something I’ve been working on since &lt;a href="http://paysagespulsionnels.wordpress.com/2011/09/05/biometric-signals-with-arduino-heart-rate-and-galvanic-skin-response/" target="_blank"&gt;last summer&lt;/a&gt;: Daniela and I have been working on an artistic project that involved the interaction of persons with a room via the usage of sonars, and other biometric sensors. All is developed with Arduino and Processing.&lt;/p&gt;  &lt;p&gt;In June we also presented our project, actually the first step of the project, involving only sonars and sounds, &lt;a href="http://paysagespulsionnels.wordpress.com/2012/07/01/les-payages-pulsionnels-00-our-first-installation/" target="_blank"&gt;at an art exhibition here in Bruxelles&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;This project was extremely useful, because I started getting a bit more deeper into electronics and facing problems I never faced developing “only” software, like things that works with a 3m cable, but not on 10m one. And I also got more and more experienced with soldering, which was something that always scared me.&lt;/p&gt;  &lt;p&gt;If you are interested in &lt;a href="http://paysagespulsionnels.wordpress.com/" target="_blank"&gt;our artistic project&lt;/a&gt;, &lt;a href="http://paysagespulsionnels.wordpress.com/tag/00/" target="_blank"&gt;how our first exhibit went&lt;/a&gt; and &lt;a href="http://paysagespulsionnels.wordpress.com/tag/sonar/" target="_blank"&gt;all my testing with sonars&lt;/a&gt;, you can go on and have a look at the site we made for our project: &lt;a href="http://paysagespulsionnels.wordpress.com/"&gt;http://paysagespulsionnels.wordpress.com/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;I’ll be updating it when we start working on the following steps of the projects, and I will also &lt;a href="http://paysagespulsionnels.wordpress.com/tech-talk/" target="_blank"&gt;post some tutorials and the code used for the project&lt;/a&gt;.&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://dronesandrovs.wordpress.com/"&gt;Drones and ROVs&lt;/a&gt;&lt;/h3&gt;  &lt;p&gt;But my usage of Arduino is not limited to this artistic project: I’m also following very closely (and &lt;a href="http://www.flickr.com/photos/piyo/sets/72157625366826985/" target="_blank"&gt;already got everything I need&lt;/a&gt; but still have to find the time to build it) the development of &lt;a href="http://code.google.com/p/arducopter/wiki/ArduCopter" target="_blank"&gt;ArduCopter&lt;/a&gt;, a multicopter powered by a custom Arduino board that can either fly controlled by a RC transmitter or can fly autonomously as a drone, doing &lt;a href="http://code.google.com/p/arducopter/wiki/AC2_Mission" target="_blank"&gt;automated missions via waypoints&lt;/a&gt; or flying controlled by a base station or via normal &lt;a href="http://code.google.com/p/arducopter/wiki/Joystick" target="_blank"&gt;joypad&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;On the sky, but also beneath the surface of the water. This time more actively contributing, I’m following the development of &lt;a href="http://openrov.com/" target="_blank"&gt;OpenROV&lt;/a&gt;, an underwater submarine, remotely controlled by a web browser via an embedded web server running Node.js on a BeagleBone.&lt;/p&gt;  &lt;p&gt;I’m also proposing a speech for the &lt;a href="http://nodejsconf.it/" target="_blank"&gt;NodeJsConf&lt;/a&gt; in Brescia this November about the Node.js embedded code that drives the OpenROV.&lt;/p&gt;  &lt;p&gt;This is giving me a lot of experience and knowledge on how RC stuff works, batteries, motors, embedded development and Node.js coding.&lt;/p&gt;  &lt;p&gt;I’ve setup a blog with a &lt;a href="http://dronesandrovs.wordpress.com/"&gt;build log of both the Arducopter and the OpenROV&lt;/a&gt;. If you are interested on how they are proceeding you should &lt;a href="http://dronesandrovs.wordpress.com/"&gt;check it out.&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;These, together with the fact that at work I’m not doing a lot of development but mainly team management, were the reasons why I’m slowing down my production of .NET web development related contents.&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:e9ce29cb-5129-489c-bc27-7729709d0d1c" class="wlWriterSmartContent"&gt;Tags: &lt;a href="http://codeclimber.net.nz/tags/arduino/default.aspx" rel="tag"&gt;arduino&lt;/a&gt; , &lt;a href="http://codeclimber.net.nz/tags/arducopter/default.aspx" rel="tag"&gt;arducopter&lt;/a&gt; , &lt;a href="http://codeclimber.net.nz/tags/OpenROV/default.aspx" rel="tag"&gt;OpenROV&lt;/a&gt; , &lt;a href="http://codeclimber.net.nz/tags/PaysagesPulsionnels/default.aspx" rel="tag"&gt;PaysagesPulsionnels&lt;/a&gt; &lt;/div&gt;&lt;img src="http://codeclimber.net.nz/aggbug/988.aspx" width="1" height="1" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Codeclimber?a=8KlTm09TKZU:alLoG-zPcF8:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Codeclimber?i=8KlTm09TKZU:alLoG-zPcF8:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Codeclimber?a=8KlTm09TKZU:alLoG-zPcF8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Codeclimber?i=8KlTm09TKZU:alLoG-zPcF8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Codeclimber?a=8KlTm09TKZU:alLoG-zPcF8:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Codeclimber?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Codeclimber?a=8KlTm09TKZU:alLoG-zPcF8:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Codeclimber?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Codeclimber?a=8KlTm09TKZU:alLoG-zPcF8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Codeclimber?i=8KlTm09TKZU:alLoG-zPcF8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Codeclimber/~4/8KlTm09TKZU" height="1" width="1"/&gt;</description>
            <dc:creator>Simone Chiaretta</dc:creator>
            <guid isPermaLink="false">http://codeclimber.net.nz/archive/2012/07/24/Open-Hardware-Drones-and-ROVs-artistic-project.aspx</guid>
            <pubDate>Tue, 24 Jul 2012 21:35:09 GMT</pubDate>
            <comments>http://codeclimber.net.nz/archive/2012/07/24/Open-Hardware-Drones-and-ROVs-artistic-project.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://codeclimber.net.nz/comments/commentRss/988.aspx</wfw:commentRss>
        <feedburner:origLink>http://codeclimber.net.nz/archive/2012/07/24/Open-Hardware-Drones-and-ROVs-artistic-project.aspx</feedburner:origLink></item>
    </channel>
</rss>
