<?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>NicoPaez</title>
	<atom:link href="http://blogs.southworks.net/nicopaez/feed/" rel="self" type="application/rss+xml" />
	<link>http://blogs.southworks.net/nicopaez</link>
	<description>sharing knowledge</description>
	<lastBuildDate>Sat, 30 Jun 2012 00:28:19 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Event: Going Deep with Windows Azure</title>
		<link>http://blogs.southworks.net/nicopaez/2012/06/29/event-going-deep-with-windows-azure/</link>
		<comments>http://blogs.southworks.net/nicopaez/2012/06/29/event-going-deep-with-windows-azure/#comments</comments>
		<pubDate>Sat, 30 Jun 2012 00:28:19 +0000</pubDate>
		<dc:creator>Nicolas Paez</dc:creator>
				<category><![CDATA[news]]></category>
		<category><![CDATA[azure]]></category>

		<guid isPermaLink="false">http://blogs.southworks.net/nicopaez/?p=243</guid>
		<description><![CDATA[... <a href="http://blogs.southworks.net/nicopaez/2012/06/29/event-going-deep-with-windows-azure/" class="more-link">read more<img src="http://blogs.southworks.net/nicopaez/wp-content/themes/southworks/assets/img/arrow-blue.png" width="12" height="12" alt="" /></a>]]></description>
			<content:encoded><![CDATA[<p>This past Tuesday and Wednesday Microsoft Argentina hosted the Going Deep with Windows Azure training event. We took care of second day sessions:</p>
<ol>
<li>Azure Service Bus</li>
<li>Hadoop on Azure</li>
<li>Node.js and Java on Windows Azure</li>
<li>Azure Websites</li>
<li>Azure Virtual Machines</li>
</ol>
<p>I was in charge of the third session. I started talking about the different technologies supported by Azure and then I focused on just 2 of them: Node.js and Java. In both cases I did a brief explanation and then I run a demo.</p>
<p>For Node.js I deployed to azure the <a href="https://github.com/davefrassoni/Pictionary" target="_blank">Pictionary sample</a> developed by my colleague <a href="http://www.linkedin.com/in/frassonidavid" target="_blank">David Frassoni</a> (alias Harry). I did it from a machine running Ubuntu and using the new Git Publishing feature offered by Azure.</p>
<p>In the case of Java, I create a Java Web application using Tomcat 7, Eclipse for JEE Developers and the <a href="http://sourceforge.net/projects/waplugin4ej/" target="_blank">Eclipse Plug-in for Windows Azure</a>. I run the application i the local emulator and then showed how to deploy it to Azure.</p>
<p>Here is <a href="https://www.box.com/s/066851a4d8e7c893cba1" target="_blank">the slide deck</a> I used in the session.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Team City organizational setup alternatives</title>
		<link>http://blogs.southworks.net/nicopaez/2012/06/25/team-city-organizational-setup-alternatives/</link>
		<comments>http://blogs.southworks.net/nicopaez/2012/06/25/team-city-organizational-setup-alternatives/#comments</comments>
		<pubDate>Mon, 25 Jun 2012 13:17:40 +0000</pubDate>
		<dc:creator>Nicolas Paez</dc:creator>
				<category><![CDATA[tools]]></category>

		<guid isPermaLink="false">http://blogs.southworks.net/nicopaez/?p=235</guid>
		<description><![CDATA[... <a href="http://blogs.southworks.net/nicopaez/2012/06/25/team-city-organizational-setup-alternatives/" class="more-link">read more<img src="http://blogs.southworks.net/nicopaez/wp-content/themes/southworks/assets/img/arrow-blue.png" width="12" height="12" alt="" /></a>]]></description>
			<content:encoded><![CDATA[<p>The way we decided to manage the continuous integration process is to have one build server per project, that is an exclusive virtual machine with a Team City install running on it. These strategy gives each team full control over the server without having to worry about other projects.</p>
<p>Other alternative, that I think is more frequently used, is to have only one build server for the whole organization and several build agents. When using this strategy the build server concentrate the all build configurations, checkouts the code and delegate to an agent the execution of the build steps. If you have two projects with incompatible software requirements (i.e. one project running on Windows and other on Linux), then you could setup one Windows agent and Linux agent.</p>
<p>Last week I setup an environment following this second alternative. I took 2 machines, in the first one I installed a full TeamCity environment: server and agent, and in the second one I installed just an agent. It was very straight forward. One additional benefit of this setup is that it allows run builds in parallel.</p>
<p><a href="http://blogs.southworks.net/nicopaez/files/2012/06/image.png"><img class="aligncenter size-full wp-image-237" src="http://blogs.southworks.net/nicopaez/files/2012/06/image.png" alt="" width="601" height="245" /></a></p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Backlog management Tips</title>
		<link>http://blogs.southworks.net/nicopaez/2012/06/21/backlog-management-tips/</link>
		<comments>http://blogs.southworks.net/nicopaez/2012/06/21/backlog-management-tips/#comments</comments>
		<pubDate>Thu, 21 Jun 2012 17:21:41 +0000</pubDate>
		<dc:creator>Nicolas Paez</dc:creator>
				<category><![CDATA[concepts]]></category>
		<category><![CDATA[agile]]></category>

		<guid isPermaLink="false">http://blogs.southworks.net/nicopaez/?p=228</guid>
		<description><![CDATA[... <a href="http://blogs.southworks.net/nicopaez/2012/06/21/backlog-management-tips/" class="more-link">read more<img src="http://blogs.southworks.net/nicopaez/wp-content/themes/southworks/assets/img/arrow-blue.png" width="12" height="12" alt="" /></a>]]></description>
			<content:encoded><![CDATA[<p>In this post I want to share some tips about this topic.</p>
<h2>Backlog basics (or preliminary definitions)</h2>
<p>Some people tend to think that a backlog is just a simple list of items. I don’t think that is true; I try to use the word <strong>backlog</strong> to refer to a list of items that are <strong>prioritized and estimated</strong>. Of course, the prioritization is done by the customer while the estimation is done by the technical team.</p>
<p>What are the items in the backlog? <strong>Depending on the context, the items can by user stories, use cases or simply tasks</strong>. When working on a development project I try to avoid having tasks in my backlog because in many cases tasks do not add value to the customer who prefers user stories. In most cases, what really adds value to the customer is working software and that is represented by a group of user stories.</p>
<p>The <strong>backlog is commonly used to organize work</strong> but is also used to provide <strong>visibility of the project’s status </strong>.</p>
<h2>Backlog recommendations</h2>
<p><strong>Make the status EXPLICIT</strong></p>
<p>A very common strategy to show the status in a consumable way is to use a semaphore pattern (green-yellow-red): <span style="color: #339966">Done</span>, <span style="color: #ffff00">In progress</span>, <span style="color: #ff0000">Blocked</span>, Pending. Using this convention is very easy to detect <em>smells</em>. For example, if there are many yellow stories it could mean that there is too much work in progress, and you are not focused on completing specific stories.</p>
<p><em><strong>Note</strong>: if you are using a dashboard, then the status is given by the position of the item in the dashboard. </em></p>
<p><em><br />
</em></p>
<p><strong>Limit the work in progress</strong></p>
<p><strong> </strong>Completed items are the only real measure of progress, so you should focus on completing items instead of accumulating stories in progress. This leads us to the following question: How many stories can be in progress at the same time? There is no single answer; it depends on the length of time, but each person should work on ONE item at a time. In a particular situation it could be that two items are closely related, so you could decide to work on them both at the same time. But if you have 3 team members and 10 items in progress, you should look at the situation.</p>
<p><strong>INVEST in SMART</strong></p>
<p>When working with user stories, it is good practice to keep the INVEST acronym in mind:</p>
<ul>
<li><strong>I</strong>ndependent</li>
<li><strong>N</strong>egotiable</li>
<li><strong>V</strong>aluable</li>
<li><strong>E</strong>stimable</li>
<li><strong>S</strong>mall</li>
<li><strong>T</strong>estable Testable</li>
</ul>
<p>Beyond user stories, I think these considerations are very useful when creating a backlog, no matter what your items are.</p>
<p>Other famous acronym related to planning and very used when defining goals is SMART:</p>
<ul>
<li><strong>S</strong>pecific</li>
<li><strong>M</strong>easurable</li>
<li><strong>A</strong>chievable</li>
<li><strong>R</strong>elevant</li>
<li><strong>T</strong>ime-boxed</li>
</ul>
<p>More information about these acronyms can <a href="http://xp123.com/articles/invest-in-good-stories-and-smart-tasks/" target="_blank">be found here</a>.</p>
<p><strong>My backlog</strong></p>
<p>The following picture is a screenshot of the backlog of my current project. I have highlighted some important properties:</p>
<p><a href="http://blogs.southworks.net/nicopaez/files/2012/06/backlog.png"><img class="size-full wp-image-231 alignleft" src="http://blogs.southworks.net/nicopaez/files/2012/06/backlog.png" alt="" width="1057" height="422" /></a></p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Build Servers Initiative</title>
		<link>http://blogs.southworks.net/nicopaez/2012/05/29/build-servers-initiavite/</link>
		<comments>http://blogs.southworks.net/nicopaez/2012/05/29/build-servers-initiavite/#comments</comments>
		<pubDate>Tue, 29 May 2012 19:19:14 +0000</pubDate>
		<dc:creator>Nicolas Paez</dc:creator>
				<category><![CDATA[tools]]></category>
		<category><![CDATA[continuous integration]]></category>

		<guid isPermaLink="false">http://blogs.southworks.net/nicopaez/?p=224</guid>
		<description><![CDATA[... <a href="http://blogs.southworks.net/nicopaez/2012/05/29/build-servers-initiavite/" class="more-link">read more<img src="http://blogs.southworks.net/nicopaez/wp-content/themes/southworks/assets/img/arrow-blue.png" width="12" height="12" alt="" /></a>]]></description>
			<content:encoded><![CDATA[<div>A couple of weeks ago I started helping some teams to set up their continuous integration servers. There are several tools and strategies you can use to accomplish this task. In our case, we decided to use MSBuild as the automation tool and <a href="http://www.jetbrains.com/teamcity/" target="_blank">TeamCity</a> as the continuous integration server. Team City provides several features to automate the build process, but we preferred to minimize the dependencies with Team City for 2 main reasons:</div>
<div>
<ul>
<li>We want to be able to run the automated build process in the devs machines.</li>
<li>We want to be able to use another build server.</li>
</ul>
</div>
<div>For us, the standard build process includes:</div>
<div>
<ul>
<li>Running source analysis (StyleCop)</li>
<li>Running code analysis (FxCop)</li>
<li>Compiling (CS compiler)</li>
<li>Running tests (MSTest)</li>
<li>Running coverage (VS build-it coverage feature)</li>
</ul>
</div>
<div>MSBuild only provides built-in support to compile, so for the rest of these tasks we had to do some research. A couple of weeks ago <a href="http://blogs.southworks.net/giglesias/2012/04/27/configuring-teamcity-7-to-build-your-vs2010-net-project-using-git-repository/" target="_blank">Gabi Iglesias posted about some of the spikes we did</a>.</div>
<div>After research and spiking, this is the approach we finally took:</div>
<div>
<ul>
<li>To run StyleCop and FxCop we are using MSBuild Extension Pack, an open source project published at CodePlex</li>
<li>To run MSTest and coverage we are using <a href="http://code.google.com/p/sdctasks/" target="_blank">home made MSBuild tasks</a> developed by our Engineering Excellence team (these tasks were developed back in 2008, so for our new initiative we had to update them)</li>
</ul>
</div>
<div>In upcoming posts we will provide more details on this topic.</div>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sinatra Modular Applications with Ruby 1.9</title>
		<link>http://blogs.southworks.net/nicopaez/2011/12/16/sinatra-modular-applications-with-ruby-1-9/</link>
		<comments>http://blogs.southworks.net/nicopaez/2011/12/16/sinatra-modular-applications-with-ruby-1-9/#comments</comments>
		<pubDate>Fri, 16 Dec 2011 19:36:54 +0000</pubDate>
		<dc:creator>Nicolas Paez</dc:creator>
				<category><![CDATA[opinion]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[sinatra]]></category>

		<guid isPermaLink="false">http://blogs.southworks.net/nicopaez/?p=205</guid>
		<description><![CDATA[... <a href="http://blogs.southworks.net/nicopaez/2011/12/16/sinatra-modular-applications-with-ruby-1-9/" class="more-link">read more<img src="http://blogs.southworks.net/nicopaez/wp-content/themes/southworks/assets/img/arrow-blue.png" width="12" height="12" alt="" /></a>]]></description>
			<content:encoded><![CDATA[<p><em>Disclaimer: what I write here is something that is working for me, but I am not an expert, so I cannot declare this to be the best solution.</em></p>
<p>I am working on a small application that I know it will grow, so the traditional Sinatra application could be a mess when I have more than 10 routes.</p>
<p>So the strategy I have chosen is to create a base class called BaseController inheriting from Sinatra::Application, this base clase will handle global application settings.</p>
<pre class="brush: plain; title: ; notranslate">

#./base_controller.rb
require 'sinatra/base'

class BaseController &lt; Sinatra::Base
  get '/' do
    'Home (base controller)'
  end
end
</pre>
<p>Then, I create one controller class for each application module, each of this controllers should inherit from my BaseController.</p>
<pre class="brush: plain; title: ; notranslate">
#/controllers/module1_controller.rb
require File.join(File.dirname(__FILE__),'..', 'base_controller.rb')

class Module1Controller &lt; BaseController
  get '/' do
    'Module 1'
  end
end
</pre>
<p>Finally, in the config.ru file I define the base routes for each controller.</p>
<pre class="brush: plain; title: ; notranslate">
# config.ru
require './base_controller.rb'
require './controllers/module1_controller.rb'

map '/' do
  run BaseController
end

map '/module1' do
  run Module1Controller
end
</pre>
<p><em><strong>Note: the code snippets above assume that the base_controller.rb and config.ru files are located in the root directory while every all controller files are located under &#8220;/controllers&#8221; directory.</strong></em></p>
<p><em><strong><strong>You can download the source code <a href="http://www.box.com/s/xt1dyzpdhrvqgn25xtau" target="_blank">from here</a>.</strong></strong></em></p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Jekyll Quickstart</title>
		<link>http://blogs.southworks.net/nicopaez/2011/11/23/jekyll-quickstart/</link>
		<comments>http://blogs.southworks.net/nicopaez/2011/11/23/jekyll-quickstart/#comments</comments>
		<pubDate>Wed, 23 Nov 2011 16:29:19 +0000</pubDate>
		<dc:creator>Nicolas Paez</dc:creator>
				<category><![CDATA[tools]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://blogs.southworks.net/nicopaez/?p=185</guid>
		<description><![CDATA[... <a href="http://blogs.southworks.net/nicopaez/2011/11/23/jekyll-quickstart/" class="more-link">read more<img src="http://blogs.southworks.net/nicopaez/wp-content/themes/southworks/assets/img/arrow-blue.png" width="12" height="12" alt="" /></a>]]></description>
			<content:encoded><![CDATA[<p>Some days ago <a href="http://johnny.io/2011/11/18/Jekyll-is-rocking-my-new-blog/" target="_blank">Johnny posted about Jekyll</a> and that motivated us (Martin and me) to perform some spikes with it. So in this post I will share what I have been doing. I assume that you have already set up your Ruby environment.</p>
<p>Let&#8217;s start by installing jekyll:</p>
<pre class="brush: plain; title: ; notranslate">

$&gt; sudo gem install jekyll
</pre>
<p>Very easy and straightforward.</p>
<p>Now create a directory for your site and create the following files/folders in it (this structure is basically what <a href="https://github.com/mojombo/jekyll/wiki/usage" target="_blank">Jekyll&#8217;s documentation</a> suggests):</p>
<ul>
<li>_config.yml, this file stores the configuration data that is used by Jekyll. Most of this information can assume default values or the values can be specified as command line arguments when invoking Jekyll. I suggest specifying the <em>destination</em> argument, which specifies where output files will be placed.</li>
<li>index.html, this will be the landing page of your site, but in order  for this file to be processed by jekyll we need to add the following line at the top of the file. This will indicate to jekyll which layout to use in order to render the page as well as its title.</li>
</ul>
<p><span style="font-family: Consolas, Monaco, 'Courier New', Courier, monospace;line-height: 18px"> </span></p>
<pre class="brush: plain; title: ; notranslate">
---
layout: default
title: jekyll-spike
---
</pre>
<ul>
<li>_layout, as you may imagine this folder will contain the files that define the layout of your pages (in .net we would say the &#8220;master pages&#8221;)</li>
<li>_post, this folder is where you will place the markdown files with your posts</li>
</ul>
<p>That is pretty much all; now you can add the classic folders for static resources like images, css, etc.</p>
<p>Now to generate your website, just open a terminal in the root directory of your application and call jekyll</p>
<pre class="brush: plain; title: ; notranslate">
$&gt; jekyll
</pre>
<p>This will create a whole static site under the folder you specified as the destination in the _config.yml file. Now, every time you want to add a new post/page, just create a markdown file under the _posts folder and then execute jekyll to regenerate the site.ust ese</p>
<p>There is also an option in jekyll to generate the site and start a webserver to host the site all at once, just execute</p>
<pre class="brush: plain; title: ; notranslate">
$&gt; jekyll --server
</pre>
<p>Well this is all for now. If you want, you can download a zip file with this basic structure <a href="http://www.box.com/s/9rxn9bj9qkbbeiervm3m" target="_blank">from here</a>.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Smalltalks 2011, we were there</title>
		<link>http://blogs.southworks.net/nicopaez/2011/11/14/smalltalks-2011-we-were-there/</link>
		<comments>http://blogs.southworks.net/nicopaez/2011/11/14/smalltalks-2011-we-were-there/#comments</comments>
		<pubDate>Mon, 14 Nov 2011 20:21:50 +0000</pubDate>
		<dc:creator>Nicolas Paez</dc:creator>
				<category><![CDATA[news]]></category>
		<category><![CDATA[smalltalk]]></category>

		<guid isPermaLink="false">http://blogs.southworks.net/nicopaez/?p=173</guid>
		<description><![CDATA[... <a href="http://blogs.southworks.net/nicopaez/2011/11/14/smalltalks-2011-we-were-there/" class="more-link">read more<img src="http://blogs.southworks.net/nicopaez/wp-content/themes/southworks/assets/img/arrow-blue.png" width="12" height="12" alt="" /></a>]]></description>
			<content:encoded><![CDATA[<p>The 5 th international conference on Smalltalk technologies, Smalltalks 2011 organized by <a href="http://www.fast.org.ar/" target="_blank">FAST</a>, was held during the first week of November. Among the keynote speakers were Ian Piumarta and Kim Rose (from <a href="http://www.vpri.org/" target="_blank">Viewpoints Research Institute</a>), Markus Denker (from Inria and founder of <a href="http://www.pharo-project.org/" target="_blank">Pharo project</a>) and a couple of guys from <a href="http://www.gemstone.com/" target="_blank">Gemstone</a> (Dale Henricks and James Foster among others).</p>
<p>Out of the sessions I attended, I would have to say that the most interesting were those given by Marcus, Mariano Peck, Hernan Wilkinson and Dale Henrichs.</p>
<p>We held two sessions, <a href="http://blogs.southworks.net/ajlopez/" target="_blank">Angel</a> gave one on <em>Smalltalk, C# and Javascript</em> and I gave the other on <em>Pharo Customization</em>.</p>
<p><a href="http://blogs.southworks.net/nicopaez/files/2011/11/smalltalks2.png"><img class="aligncenter size-full wp-image-180" src="http://blogs.southworks.net/nicopaez/files/2011/11/smalltalks2.png" alt="" width="500" height="375" /></a></p>
<p><a href="http://blogs.southworks.net/nicopaez/files/2011/11/smalltalks.png"><img class="aligncenter size-full wp-image-177" src="http://blogs.southworks.net/nicopaez/files/2011/11/smalltalks.png" alt="" width="680" height="502" /></a></p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Getting started with Ruby on Windows</title>
		<link>http://blogs.southworks.net/nicopaez/2011/10/17/getting-started-with-ruby/</link>
		<comments>http://blogs.southworks.net/nicopaez/2011/10/17/getting-started-with-ruby/#comments</comments>
		<pubDate>Mon, 17 Oct 2011 19:41:30 +0000</pubDate>
		<dc:creator>Nicolas Paez</dc:creator>
				<category><![CDATA[tools]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://blogs.southworks.net/nicopaez/?p=134</guid>
		<description><![CDATA[... <a href="http://blogs.southworks.net/nicopaez/2011/10/17/getting-started-with-ruby/" class="more-link">read more<img src="http://blogs.southworks.net/nicopaez/wp-content/themes/southworks/assets/img/arrow-blue.png" width="12" height="12" alt="" /></a>]]></description>
			<content:encoded><![CDATA[<p>The life takes us through different and mysterious ways. In this occasion that way has lead me to Ruby world.</p>
<p>So, here are the steps I perform to get my Ruby development environment up and running on Windows 7.</p>
<p>I started by downloading Ruby from <a href="http://rubyinstaller.org/">http://rubyinstaller.org/</a>. In my case and because of the context of my project I choose Ruby 1.8.7.</p>
<p><a href="http://blogs.southworks.net/nicopaez/files/2011/10/image3.png"><img style="border: 0px" src="http://blogs.southworks.net/nicopaez/files/2011/10/image_thumb3.png" border="0" alt="image" width="420" height="307" /></a></p>
<p>The installation was very straightforward: accept the license, ensure to check the “Add Ruby executables to your PATH” option and press install.</p>
<p><a href="http://blogs.southworks.net/nicopaez/files/2011/10/image4.png"><img style="border: 0px" src="http://blogs.southworks.net/nicopaez/files/2011/10/image_thumb4.png" border="0" alt="image" width="399" height="306" /></a></p>
<p>After a couple a seconds the following screen displayed telling that the installation was completed.</p>
<p><a href="http://blogs.southworks.net/nicopaez/files/2011/10/image5.png"><img style="border: 0px" src="http://blogs.southworks.net/nicopaez/files/2011/10/image_thumb5.png" border="0" alt="image" width="401" height="306" /></a></p>
<p>The next component to install was the DevKit, a set of tools to allow the usage of C-native features in Ruby. The installation of this component was not so straighforward, I had to follow the instructions detailed here: <a href="https://github.com/oneclick/rubyinstaller/wiki/Development-Kit">https://github.com/oneclick/rubyinstaller/wiki/Development-Kit</a>.</p>
<p>With this, we can say that the base infrastructure is ready, but it is not enough to develop applications. We will need to install gems (this is name given to Ruby packages). To install gems we can use RubyGems package manager that comes with Ruby installation. To use it, just open a Commmand Prompt and type the command to execute. In my case case I installed some tools that I already new I wanted to use:</p>
<ul>
<li><a href="http://www.sinatrarb.com/" target="_blank">Sinatra</a>: a DSL tools to create web applications</li>
<li><a href="http://datamapper.org/" target="_blank">Data Mapper</a>: a persistence framework</li>
<li><a href="http://gembundler.com/" target="_blank">Bundler</a>: a tool to manage application dependencies</li>
<li><a href="http://www.heroku.com/" target="_blank">Heroku gem</a>: a package to interact with Heroku platform</li>
</ul>
<p>To install all this gems, just execute the following script:</p>
<pre class="brush: plain; title: ; notranslate">
gem install sinatra
gem install data-mapper
gem install bundler
gem install heroku
</pre>
<p>If while installing any of these gems you get an error telling “invalid date format in specification”, you will have to go to follow these steps:</p>
<ol>
<li>Go to &lt;ruby folder&gt;\lib\ruby\gems\1.8\specifications.</li>
<li>Find the file mentioned in the error and open it.</li>
<li>Look for a line assigning a date, something like <em>s.date = %q{2011-08-17 00:00:00.000000000Z}</em></li>
<li>Modify that line and remove the time <em>s.date = %q{2011-08-17}</em></li>
<li>Save the file and you are ready.</li>
</ol>
<p>Well folks, that’s all, you are almost ready to start working. I say almost because you may want to install an IDE. But that will be the topic of another post.</p>
<p>To be continue….</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MMP Video Editor (RCE): adding configuration parameters</title>
		<link>http://blogs.southworks.net/nicopaez/2011/10/06/rce-configuration/</link>
		<comments>http://blogs.southworks.net/nicopaez/2011/10/06/rce-configuration/#comments</comments>
		<pubDate>Thu, 06 Oct 2011 18:19:00 +0000</pubDate>
		<dc:creator>Nicolas Paez</dc:creator>
				<category><![CDATA[tools]]></category>
		<category><![CDATA[RCE]]></category>
		<category><![CDATA[silverligth]]></category>

		<guid isPermaLink="false">http://blogs.southworks.net/nicopaez/2011/10/06/configuration-management-in-mmp-video-editor-rce/</guid>
		<description><![CDATA[... <a href="http://blogs.southworks.net/nicopaez/2011/10/06/rce-configuration/" class="more-link">read more<img src="http://blogs.southworks.net/nicopaez/wp-content/themes/southworks/assets/img/arrow-blue.png" width="12" height="12" alt="" /></a>]]></description>
			<content:encoded><![CDATA[<p>If you want to extend RCE by adding a new module, it is possible taht you need to add some configuration parameters for the module’s logic. Depending of the nature of your module, you will set the configuration parameter when deploying the application in your server or using another approach you could allow the user to modify this configuration parameters in the application UI.</p>
<p>To analyze these two situations let’s suppose we need to implement an alerts module to check for alerts provided by a remote service. This new module depends on a integer parameter that sets the interval the alert service will be checked. This parameter cannot be modified by the user. What the user can decide is to enable or disable the alerts module while running the application.</p>
<p>So, we will create a new module following RCE architecture (that is based on Prism) and we will add our new module to the ModuleCatalag in the shell project.</p>
<p>To manage the interval parameter, we will add a new entry in the <em>Settings.xml</em> file in the RCE.Web project.</p>
<pre class="brush: xml; title: ; notranslate">&lt;Parameter Name=&quot;AlertsInterval&quot; Value=&quot;10000&quot;/&gt;</pre>
<p>Then, to access this parameter, we can use the <em>IConfigurationService</em> provided by the <em>RCE.Infrastructure</em> assembly. We just have to declare this interface to be injected by the container into our instance.</p>
<pre class="brush: csharp; title: ; notranslate">
public AlertsPresenter(IEventAggregator eventAggregator, IAlertsView view, IAlertService alertService, IConfigurationService configurationService)
{
   int interval = configurationService.GetParameterValueAsInt(&quot;AlertsInterval&quot;).GetValueOrDefault(1000);
   // perform additional initialization logic here
}
</pre>
<p>Note that <em>GetParameterValueAsInt</em> is an extension method and to be able to use it, you have to add a using statement for <em>RCE.Infrastructure</em>.</p>
<p>To manage the other parameter that can be modified by the user to enable/disable the module, we should use the settings module, just to be consistent with the application. As it is provided, the settings module was not designed in a extensible way, I mean, if we need to manage a new parameter in the settings view, we have to modify the settings module each time we want to add something new. We could modify the settings module to handle our specific parameters, but instead of that we will modify the settings module to make it more flexible and avoid future modifications.</p>
<p>We will start by adding a new Region inside the Settings view, to allow each new module to add its own settings view. To do this, we have to include the following declaration at the beginning of the file SettingsView.xaml file.</p>
<pre class="brush: xml; title: ; notranslate">&lt;UserControl xmlns:input=&quot;clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Input.Toolkit&quot;&amp;nbsp; x:Class=&quot;RCE.Modules.Settings.SettingsView&quot; xmlns=&lt;a href=&quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&quot;&gt;http://schemas.microsoft.com/winfx/2006/xaml/presentation&lt;/a&gt; xmlns:x=&quot;http://schemas.microsoft.com/winfx/2006/xaml&quot;&amp;nbsp; xmlns:d=&quot;http://schemas.microsoft.com/expression/blend/2008&quot;&amp;nbsp; xmlns:mc=&lt;a href=&quot;http://schemas.openxmlformats.org/markup-compatibility/2006&quot;&gt;http://schemas.openxmlformats.org/markup-compatibility/2006&lt;/a&gt;&amp;nbsp; xmlns:Regions=&quot;clr-namespace:Microsoft.Practices.Composite.Presentation.Regions;assembly=Microsoft.Practices.Composite.Presentation&quot; mc:Ignorable=&quot;d&quot; xmlns:Commands=&quot;clr-namespace:Microsoft.Practices.Composite.Presentation.Commands;assembly=Microsoft.Practices.Composite.Presentation&quot; xmlns:Interactivity=&quot;clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity&quot; &lt;br&gt;xmlns:Behaviors=&quot;clr-namespace:RCE.Modules.Settings.Behaviors&quot; BorderThickness=&quot;0&quot; d:DesignHeight=&quot;926&quot;&gt;</pre>
<p>Then, we need to add a new row to the container Grid</p>
<pre class="brush: xml; title: ; notranslate">&lt;RowDefinition Height=&quot;80&quot;/&gt;</pre>
<p>Finally, we add the new region in the new row at the end of the file.</p>
<pre class="brush: xml; title: ; notranslate"> &lt;Border Grid.Column=&quot;0&quot; Grid.Row=&quot;14&quot; Background=&quot;{StaticResource ComboBrush}&quot; CornerRadius=&quot;8,8,8,8&quot; Grid.ColumnSpan=&quot;2&quot; HorizontalAlignment=&quot;Center&quot; Width=&quot;350&quot; VerticalAlignment=&quot;Center&quot; Height=&quot;85&quot; Style=&quot;{StaticResource SharedBorderStyle}&quot;&gt;
  &lt;ItemsControl Regions:RegionManager.RegionName=&quot;ExtendedSettingsRegion&quot; /&gt;&lt;/Border&gt;</pre>
<p>Now, we need to add the <em>ExtendedSettingsRegion</em><strong> </strong>region to the <em>RegionNames</em> class in the RCE.Infrastructure project.</p>
<pre class="brush: csharp; title: ; notranslate">public const string ExtendedSettingsRegion = &quot;ExtendedSettingsRegion&quot;;</pre>
<p>At this point, if we run the application, we will see the following Settings view.</p>
<p> <a href="http://blogs.southworks.net/nicopaez/files/2011/10/image.png"><img style="border: 0px" src="http://blogs.southworks.net/nicopaez/files/2011/10/image_thumb.png" border="0" alt="image" width="470" height="207" /></a></p>
<p>Now, each new module should define a view to be loaded in the ExtendedSettingsRegion (of course it is not mandatory, it is just in case the module requires to manage settings). In the case of our AlertsModule we have just 3 visual controls, a textblock, a check box and a button.</p>
<pre class="brush: plain; title: ; notranslate">&lt;UserControl x:Class=&quot;RCE.Modules.SWUAlerts.Views.AlertsSettingsView&quot; xmlns=&lt;a href=&quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&quot;&gt;http://schemas.microsoft.com/winfx/2006/xaml/presentation&lt;/a&gt; xmlns:x=&lt;a href=&quot;http://schemas.microsoft.com/winfx/2006/xaml&quot;&gt;http://schemas.microsoft.com/winfx/2006/xaml&lt;/a&gt; xmlns:d=&quot;http://schemas.microsoft.com/expression/blend/2008&quot;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; xmlns:mc=&quot;http://schemas.openxmlformats.org/markup-compatibility/2006&quot;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; xmlns:Commands=&quot;clr-namespace:Microsoft.Practices.Composite.Presentation.Commands;assembly=Microsoft.Practices.Composite.Presentation&quot;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mc:Ignorable=&quot;d&quot;&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Grid&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Grid.ColumnDefinitions&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;ColumnDefinition Width=&quot;0.5*&quot;/&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;ColumnDefinition Width=&quot;0.5*&quot;/&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Grid.ColumnDefinitions&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Grid.RowDefinitions&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;RowDefinition Height=&quot;0.5*&quot;/&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;RowDefinition Height=&quot;0.5*&quot;/&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Grid.RowDefinitions&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;TextBlock Grid.Column=&quot;0&quot; Grid.Row=&quot;0&quot; Text=&quot;Alerts enabled&quot; FontWeight=&quot;Bold&quot; FontSize=&quot;11&quot; Foreground=&quot;{StaticResource ForegroundBrush}&quot; VerticalAlignment=&quot;Center&quot; HorizontalAlignment=&quot;Right&quot; Margin=&quot;0,0,5,0&quot;/&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;CheckBox x:Name=&quot;AlertsEnabled&quot; Grid.Column=&quot;1&quot; Grid.Row=&quot;0&quot; IsChecked=&quot;{Binding Path=AlertsEnabled, Mode=TwoWay, ValidatesOnExceptions=True, NotifyOnValidationError=True}&quot; VerticalAlignment=&quot;Center&quot; /&gt;
&lt;Button Grid.Column=&quot;1&quot;&amp;nbsp; Grid.Row=&quot;1&quot; Content=&quot;Apply&quot; Commands:Click.Command=&quot;{Binding ApplyAlertsSettignsCommand}&quot; VerticalAlignment=&quot;Center&quot; Width=&quot;110&quot; Margin=&quot;0,0,10,0&quot; Cursor=&quot;Hand&quot; HorizontalAlignment=&quot;Left&quot; Foreground=&quot;{StaticResource ForegroundBrushAlternative}&quot; Background=&quot;{StaticResource ToolBarBrush}&quot; Template=&quot;{StaticResource SetttingsButtonTemplate}&quot;/&gt;&lt;/Grid&gt;
&lt;/UserControl&gt;;
</pre>
<p><a href="http://blogs.southworks.net/nicopaez/files/2011/10/image1.png"><img style="border: 0px" src="http://blogs.southworks.net/nicopaez/files/2011/10/image_thumb1.png" border="0" alt="image" width="460" height="150" /></a></p>
<p>The other extension point to consider is the persistence of the parameter. The settings module manages the persistence using the configuration service, so we can use it and it will be almost the same we did for the static parameter. We just have to declare the dependency to be injected in the constructor and adding a new entry in the settings file.</p>
<p>public AlertsSettingsPresenter(IAlertsSettingsView view, IConfigurationService configurationService){..}</p>
<p> </p>
<pre class="brush: plain; title: ; notranslate">&lt;Parameter Name=&quot;AlertsEnabled&quot; Value=&quot;True&quot;/&gt;</pre>
<p>And use it when handling the apply event.</p>
<p>public void ApplySettings(object parameter)<br />
{<br />
  var valuesToUpdate = new Dictionary&lt;string, string&gt;();<br />
  valuesToUpdate.Add(&quot;AlertsEnabled&quot;, this.AlertsEnabled.ToString<br />
  this.configurationService.UpdateParameters(valuesToUpdate);<br />
}</p>
<p>If our module needs to updated itself when a configuration value changes, we could subscribe to the <em>ConfigurationChanged</em> event of the configurationService.</p>
<p>That’s all folks! Let’s do a recap:</p>
<ul>
<li>We modified the settings Module to include a new Region (<em>ExtendedSettingsRegion</em>)</li>
<li>We created a Settings view in our module (<em>AlertsSettingsView</em>)</li>
<li>We added the the corresponding presenter (<em>AlertsSettingPresenter</em>) to able the update of the parameters</li>
</ul>
<p>Below is a screenshot of the final project of my module.</p>
<p><a href="http://blogs.southworks.net/nicopaez/files/2011/10/image2.png"><img style="border: 0px" src="http://blogs.southworks.net/nicopaez/files/2011/10/image_thumb2.png" border="0" alt="image" width="262" height="292" /></a> </p>
<p>TODOs:</p>
<p>The way this solution is implemented requires each module to handle the persistence, I mean, each module has to provide a “save” button and call the configuration service. I think that applying a refactoring this logic could be handled by the settings module, but that is part of another post.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Game development, episode #2: some more concepts</title>
		<link>http://blogs.southworks.net/nicopaez/2011/02/10/game-development-episode-2-some-more-concepts/</link>
		<comments>http://blogs.southworks.net/nicopaez/2011/02/10/game-development-episode-2-some-more-concepts/#comments</comments>
		<pubDate>Fri, 11 Feb 2011 02:25:42 +0000</pubDate>
		<dc:creator>Nicolas Paez</dc:creator>
				<category><![CDATA[concepts]]></category>
		<category><![CDATA[gameDevelopment]]></category>

		<guid isPermaLink="false">http://blogs.southworks.net/nicopaez/?p=111</guid>
		<description><![CDATA[... <a href="http://blogs.southworks.net/nicopaez/2011/02/10/game-development-episode-2-some-more-concepts/" class="more-link">read more<img src="http://blogs.southworks.net/nicopaez/wp-content/themes/southworks/assets/img/arrow-blue.png" width="12" height="12" alt="" /></a>]]></description>
			<content:encoded><![CDATA[<p><span style="font-weight: normal">Before drilling down into technological stuff I want to share some basic concepts. </span></p>
<p><strong><span style="font-size: 13px">Collision detection</span><span style="font-size: 13px;font-weight: normal"> is a very common concern in games. It consists on determining whether two objects have come into contact with one another. In games, this is necessary in order to make decisions, for example, in games like Mario Bros., it is important to know whether a Mario has collide with a tortoise or a coin. </span><span style="font-size: 13px"><span style="font-size: 13px;font-weight: normal">In order to detect collisions, each object  has a </span><span style="font-size: 13px;font-weight: normal">bounding box</span><span style="font-size: 13px;font-weight: normal">, that is an</span><span style="font-weight: normal"> approximation of  the object&#8217;s surface. </span></span></strong></p>
<p><strong><span style="font-size: 13px"><span style="font-weight: normal">A <strong>sprite</strong> is a a small bitmap image (or set of images) used to visually represent . Another kind of bitmap is a </span><strong>tile</strong><span style="font-weight: normal">, which is usually used for background maps.</span></span></strong></p>
<p>During the drawing process all the sprites and tiles are drawn incrementally into a buffer and then this buffer is dump at once into the low level buffer that will impact on the screen. This technique es called <strong>double buffering</strong>.</p>
<p>To be continue&#8230;</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
