<?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>ORTHOcoders &#187; Management</title>
	<atom:link href="http://orthocoders.com/category/management/feed/" rel="self" type="application/rss+xml" />
	<link>http://orthocoders.com</link>
	<description>U can code it, we can help</description>
	<lastBuildDate>Fri, 13 Jan 2012 07:16:10 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Nuget for local teams</title>
		<link>http://orthocoders.com/2011/03/26/nuget-for-local-teams/</link>
		<comments>http://orthocoders.com/2011/03/26/nuget-for-local-teams/#comments</comments>
		<pubDate>Sun, 27 Mar 2011 01:09:39 +0000</pubDate>
		<dc:creator>Amir Barylko</dc:creator>
				<category><![CDATA[Build Tools]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Management]]></category>
		<category><![CDATA[Rake]]></category>
		<category><![CDATA[Nuget]]></category>
		<category><![CDATA[Process]]></category>

		<guid isPermaLink="false">http://orthocoders.com/?p=349</guid>
		<description><![CDATA[Two weeks ago I started migrating all my .NET projects to Nuget, you can read more about it in my previous post. After I was done with my OSS projects, I decided to share the goodness with some of my clients and then came to realize a few issues with my &#8220;stop storing dependencies in [...]]]></description>
			<content:encoded><![CDATA[<p>Two weeks ago I started migrating all my .NET projects to <a title="Nuget package management" href="http://nuget.org" target="_blank">Nuget</a>, you can read more about it in my <a title="Nuget Gotcha" href="http://orthocoders.com/2011/03/13/nuget-gotcha-avoid-storing-packages-in-the-repository/" target="_blank">previous post</a>.</p>
<p>After I was done with my <a title="MT Projects @ github" href="https://github.com/amirci" target="_blank">OSS projects</a>, I decided to share the goodness with some of my clients and then came to realize a few issues with my &#8220;<em>stop storing dependencies in the repository</em>&#8221; crusade.</p>
<p>First, many of the dependencies can&#8217;t be published to the public nuget.org server. That means that we need to find a way to store them locally.</p>
<p><strong>Solution</strong>: Install local nuget feed.</p>
<h3>Why a local Nuget feed is a good idea</h3>
<p>Having a local feed allows your company leverage all the benefits of package management internally.</p>
<p>Plus you can use it to cache common used packages in case you have issues downloading them.</p>
<p>How to do this you ask? Well, is not as straightforward as I hoped. Luckily I had the help of <a title="David Alpert" href="http://twitter.com/davidalpert" target="_blank">@davidalpert</a> to fight IIS configuration and <a title="Rob Reynolds on Twitter" href="http://twitter.com/ferventcoder" target="_blank">@ferventcoder</a> and <a title="David Fowler" href="http://twitter.com/davidfowl" target="_blank">@davidfawl</a> to answer all our questions.</p>
<p>After approximately 3 weeks of tinkering with the server, David managed to make it work. (Kudos, yay!)</p>
<p>Here are a few links to follow in order to install the server locally:</p>
<ul>
<li><a title="Hosting local and remote feeds" href="http://haacked.com/archive/2010/10/21/hosting-your-own-local-and-remote-nupack-feeds.aspx" target="_blank">Hosting your own local and remote feed by Phil Haack</a></li>
<li><a title="404 on remote server" href="http://nuget.codeplex.com/discussions/246387" target="_blank">404 on remote server discussion on nuget site</a></li>
</ul>
<p>Key points:</p>
<ul>
<li>URL should be <em>http://yourserver:port/dataservices/packages.svc</em></li>
<li>Add the .nupkg as mime type with application/zip</li>
<li>Remember that the new server is not an MVC application</li>
<li>Be patient, very patient&#8230;</li>
</ul>
<h3>I got the server running, now what?</h3>
<p>Well now we have to tackle a different problem. I found that some of the projects are using libraries that are not yet published to the public feed.</p>
<p>Though I could package and publish them (I have done so with <a title="StructureMap automocking package" href="http://nuget.org/List/Packages/structuremap.automocking" target="_blank">Structuremap.Automocking</a> and others), some of them are a bit out of date and others are the result of downloading the source, modifying it and compiling it locally.</p>
<p>Either case, I thought that I&#8217;d like an easy way of packaging and publishing these packages to the local feed in order to keep using them.</p>
<p>Doing so is also a great solution if you don&#8217;t have the time to review if an upgrade would work, or is to risky to do it.</p>
<p>If you read my previous post you already know that I&#8217;m using <a title="Albacore on Github" href="https://github.com/derickbailey/Albacore" target="_blank">Albacore</a> to generate the nuspec file, build the package, etc.</p>
<p>My first thought was to use those tasks for each of the packages in need to create. And I started to do so.</p>
<h3>Rake again and again</h3>
<p>After creating a rakefile, copying the libs, etc for the third time,  my <em>laziness sense</em> (similar to spider sense without the <em>awesome</em> and the <em>great responsibility</em> thing) started to tingle indicating that should be a way of avoiding this repetitive task.</p>
<ul>
<li>Copy the assemblies to a lib folder</li>
<li>Generate the nuspec with the name of the library and the version</li>
<li>Compile the nuspec and create the package</li>
<li>Copy the package to the destination to be served by the local feed</li>
</ul>
<p>Instead of writing one rakefile per package, why not just add parameters to the rakefile so I can call it from command line specifying:</p>
<ul>
<li>Name of the package</li>
<li>Version of the package</li>
<li>Folder where to get all the assemblies</li>
</ul>
<p>And voila! <a title="Gist with rakefile to generate nuget packages" href="https://gist.github.com/888798" target="_blank">Here</a> is the result, I hope you find it useful.</p>
<p>To use it, you will have to type something like this:</p>
<blockquote><p>rake deploy:publish[AvalonDock, 1.0, "c:\project\lib\avalondock"]</p></blockquote>
<p>Are you doing anything else cool with nuget? Please share!</p>
]]></content:encoded>
			<wfw:commentRss>http://orthocoders.com/2011/03/26/nuget-for-local-teams/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nuget gotcha: Avoid storing packages in the repository</title>
		<link>http://orthocoders.com/2011/03/13/nuget-gotcha-avoid-storing-packages-in-the-repository/</link>
		<comments>http://orthocoders.com/2011/03/13/nuget-gotcha-avoid-storing-packages-in-the-repository/#comments</comments>
		<pubDate>Sun, 13 Mar 2011 18:26:10 +0000</pubDate>
		<dc:creator>Amir Barylko</dc:creator>
				<category><![CDATA[Build Tools]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Management]]></category>
		<category><![CDATA[Rake]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Albacore]]></category>
		<category><![CDATA[Automation]]></category>
		<category><![CDATA[Dependencies]]></category>
		<category><![CDATA[Deployment]]></category>
		<category><![CDATA[MSbuild]]></category>
		<category><![CDATA[Nuget]]></category>

		<guid isPermaLink="false">http://orthocoders.com/?p=322</guid>
		<description><![CDATA[Usually when working a .NET project we store the dependencies (assemblies) in a folder that gets added to the version control system of choice (TFS, SVN, Git, HG, etc).
This practice brings quite a few headaches: version updates, repository size, sharing, etc....
For the Ruby world using gems and bundler show how to solve this issue. I've been using rake + gems + bundler for my .NET project waiting for Nuget project to provide more functionality for command line usage, now the wait is over..... ]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s been a while since <a title="Nuget project to manage packages" href="http://nuget.org/" target="_blank">Nuget</a> project was released. Since the project birth I&#8217;ve been watching closely to see when would be a good opportunity to start using it for my projects and recommend using it for my clients.</p>
<p>Basically, the Nuget project solves dependency management for all your .NET projects. That means that you don&#8217;t need to search any more for libraries that you need to use like NHibernate or nUnit and just install them from a centralized server.</p>
<h2>The path to Nuget</h2>
<p>So far I&#8217;ve been using <a title="Rake - ruby make" href="http://rake.rubyforge.org/" target="_blank">Rake</a> for all my builds and I&#8217;m super happy with it. Using a DSL specifically designed for building projects is a great advantage, Ruby gives you lots of flexibility and the <a title="Albacore gem for building .net projects" href="https://github.com/derickbailey/Albacore" target="_blank">Albacore</a> gem is the cherry on top.</p>
<p>One of the many things that I like about the <a title="Ruby installer for windows" href="http://rubyinstaller.org/" target="_blank">Ruby</a> world is <a title="Rubygems project" href="http://rubygems.org/" target="_blank">gem</a> + <a title="Bundler dependency management" href="http://gembundler.com/" target="_blank">bundler</a> combination. For .NET projects I&#8217;ve been using also <a title="Noodle uses bundler to pull dependencies" href="https://github.com/spraints/noodle" target="_blank">noodle</a> to copy the dependencies to my local folder (usually called <em>lib</em>).</p>
<p>However not everything is ponies and rainbows:</p>
<ul>
<li>Ruby based solutions are not always well received in .NET project (no matter how good they are)</li>
<li>Not many developers publish their libraries / frameworks</li>
<li>Creating gems with .NET assemblies is discouraged since Nuget was born</li>
</ul>
<p>All this reasons plus the fact that the .NET community was embracing the idea of package management using Nuget make me consider it as a great option.</p>
<p>However one thing was keeping me from doing the change, and that is the <strong>ability of reading a configuration file and use it to download all dependencies</strong> (very similar to what <a title="Manage dependencies" href="http://gembundler.com/" target="_blank">Bundler</a> does).</p>
<p>And that was it&#8230;. Until a couple of days ago&#8230;.</p>
<h2><strong>Nuget Adoption</strong></h2>
<p>Last week I say a tweet by <a title="David Ebbo Twitter" href="http://twitter.com/davidebbo/status/46031701809430529" target="_blank">@davidebbo</a> saying that Nuget supports now reading from a config file!</p>
<p>Why is that so important? Because I don&#8217;t want to store my dependencies in the repository any more!</p>
<p>The assemblies that we use in a project usually don&#8217;t change until we update a newer version. What&#8217;s the point of storing them with our code if we can use just a reference to them and download them at our leisure?</p>
<p>It takes way less space to store our repositories and updating the packages quite easier because you just change the references and the configuration file, and that&#8217;s it, everyone gets them.</p>
<p>Also imagine sharing in your company all the internal assemblies by publishing them to a local Nuget server instead of having a share drive or similar.  Update the version whenever you want! No more versioning dependencies nightmares! And everything is treated the same way, they are all packages!</p>
<p>So I installed latest version of Nuget (following the <a title="Using Nuget with configuration files" href="http://bit.ly/g2ploU" target="_blank">link</a> above) and started the conversion:</p>
<h3>Step 1: Changing the References</h3>
<p>Open your .sln file, remove all your references and add them again by doing <em>right click + Add Package Reference</em>. That would accomplish the following:</p>
<ul>
<li>Find the reference in the package server</li>
<li>Install it to a local package folder (usually called Packages)</li>
<li>Write a config file with the dependency installed (in the same folder as the project)</li>
</ul>
<h3>Step 2: Modify the Rakefile</h3>
<p>I need dependencies in order to build, so I need to make sure that before building all my dependencies are satisfied, to do so I modified the task <em>setup:dep</em> to do the following:</p>
<pre class="brush: ruby; title: ; notranslate">
namespace :setup do
	desc &quot;Setup dependencies for nuget packages&quot;
	task :dep do
		FileList[&quot;**/packages.config&quot;].each do |file|
			sh &quot;nuget install #{file} /OutputDirectory Packages&quot;
		end
	end
end
</pre>
<p>And I need to make sure this happens every time before building, so I need a dependency in the build task (remember that I&#8217;m using <a title="Albacore gem for .NET projects" href="http://albacorebuild.net/" target="_blank">Albacore</a> for the msbuild tasks).</p>
<pre class="brush: ruby; title: ; notranslate">
	desc &quot;Build the project&quot;
	msbuild :all, [:config] =&gt; [:setup] do |msb, args|
		msb.properties :configuration =&gt; args[:config] || : Debug
		msb.targets :Build
		msb.solution = solution_file
	end
</pre>
<h3>Step 3: Enjoy!</h3>
<p>That&#8217;s it! Super easy! If you want to check the code please go to <a title="Source for MT Testing" href="https://github.com/amirci/mt_testing" target="_blank">github</a> and download it.</p>
]]></content:encoded>
			<wfw:commentRss>http://orthocoders.com/2011/03/13/nuget-gotcha-avoid-storing-packages-in-the-repository/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>The road to be an Architect</title>
		<link>http://orthocoders.com/2009/03/03/the-road-to-be-an-architect/</link>
		<comments>http://orthocoders.com/2009/03/03/the-road-to-be-an-architect/#comments</comments>
		<pubDate>Tue, 03 Mar 2009 14:07:53 +0000</pubDate>
		<dc:creator>Amir Barylko</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Management]]></category>
		<category><![CDATA[Architecture]]></category>

		<guid isPermaLink="false">http://orthocoders.com/?p=21</guid>
		<description><![CDATA[After the TDD presentation someone asked me about what should he do in order to become a Software Architect. Here is what I think. First of all, I would say that you have to be sure that you would like to be an architect, and for that we have to agree on an architect definition. [...]]]></description>
			<content:encoded><![CDATA[<p>After the TDD presentation someone asked me about what should he do in order to become a Software Architect. Here is what I think.</p>
<p>First of all, I would say that you have to be sure that you would like to be an architect, and for that we have to agree on an architect definition.</p>
<p>An architecture in software development can be considered a collection of different components, each one with a particular role, and the interaction between them through interfaces.</p>
<p style="text-align: justify;">Therefore, an architect is responsible for defining the best architecture in order to solve the problem at hand. In order to do that the architect should have technical roots and technical acuity to grasp technical issues and collaborate with the team to solve them. The architect will have the global view of the system and would be responsible of identifying the major issues that have to be addressed to avoid failure.</p>
<p style="text-align: justify;">An architect has to be close the developers and able to answer questions and provide guidance to the rest of the team. He has to be fond of writing code and familiar with the technology the team is using. A good architect will be a combination of being a excellent technologist, strategist and politician.</p>
<p style="text-align: justify;">The difference between the team leader (or lead developer) and the architect is the scope and the responsibility. The architect has a broader scope that includes interaction between different components, security, response time, etc.</p>
<p style="text-align: justify;">Many times the architect role is considered a &#8220;promotion&#8221; or the next step in the hierarchy for a lead developer. But that may be a mistake because unfortunately not all the great developers or leads have the broad talents required to be an architect.</p>
<p>So, what should we do to achieve such a worthy goal?</p>
<p>Here is a (mixed) list of subjects to learn and practice (not exclusive, just a starting point):</p>
<ul>
<li>Different architectures: Which well known architectures are available?</li>
<li>Security: How to secure applications and systems, which options are available, benefits, etc.</li>
<li>Concurrency: How to run process in parallel? Implementation, Benefits, drawbacks&#8230;.</li>
<li>Communication and Services: Why be service oriented? What kind of services are available?</li>
<li>Testing: TDD, functional testing, how to write scripts to test web or desktop apps.</li>
<li>Storage: Which databases or alternative methods of storage are available?</li>
<li>Development methodologies: Which ones are available? Why should I use one instead of the other?</li>
<li>Agile planning and management: How does it work? What is the difference with classic management?</li>
<li>Source Control Management: SVN, CVS, GIT&#8230;</li>
<li>Continuous Integration: What? Why? When</li>
<li>Development platforms: Rails? J2EE? .NET? GWT?</li>
<li>Politics: How to be politically correct and identify managers and customer needs.</li>
<li>Communication: How to communicate with your team, managers and customers effectively.</li>
<li>Requirements: What should they look like? When is enough?</li>
</ul>
<p style="text-align: justify;">Sometimes, architects specialize in one technology or framework (i.e: Web Services Architect, .NET Architect, Testing Architect). I think is natural to have more experience in a particular technology than other but that doesn&#8217;t mean that you should ignore the rest. Not always the job you are working on will help you to develop or to grow towards being and architect. That, I&#8217;m afraid to say is up to each of us.</p>
<p style="text-align: justify;">As any software professional you have to research, read books, blogs and try to meet others with the same goals. Keep your information up to date, find tendencies, success stories, antipatterns (patterns to identify failure) and guidelines.</p>
<p>Here are some books I like (see the link for the full information) and think can be helpful:</p>
<ul>
<li> <a title="Patterns Enterprise Architecture" href="http://www.amazon.com/exec/obidos/ASIN/0321127420" target="_blank"><span id="btAsinTitle">Patterns of Enterprise Application Architecture</span></a></li>
<li><a title="Design Patterns" href="http://www.amazon.com/Design-Patterns-Object-Oriented-Addison-Wesley-Professional/dp/0201633612/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1236037168&amp;sr=1-1" target="_blank">Design Patterns</a></li>
<li><a title="Manage It!" href="http://www.amazon.com/Manage-Modern-Pragmatic-Project-Management/dp/0978739248/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1236037205&amp;sr=1-1" target="_blank">Manage It!</a></li>
<li><a title="Enterprise Integration Patterns" href="http://www.amazon.com/exec/obidos/ASIN/0321200683" target="_blank">Enterprise Integration Patterns</a></li>
<li><a title="Refactoring to patterns" href="http://www.amazon.com/exec/obidos/ASIN/0321213351" target="_blank">Refactoring to Patterns</a></li>
<li> <a title="Java concurrence in practice" href="http://www.amazon.com/Java-Concurrency-Practice-Brian-Goetz/dp/0321349601/ref=sr_1_2?ie=UTF8&amp;s=books&amp;qid=1236037567&amp;sr=1-2" target="_blank"><span id="btAsinTitle">Java Concurrency in Practice</span></a></li>
<li> <a title="Enterprise Integration with Ruby and Rails" href="http://www.amazon.com/Enterprise-Recipes-Ruby-Rails-Schmidt/dp/1934356239/ref=sr_1_3?ie=UTF8&amp;s=books&amp;qid=1236037683&amp;sr=1-3" target="_blank"><span id="btAsinTitle">Enterprise Recipes with Ruby and Rails </span></a></li>
<li><a title="Software Architecture In Practice" href="http://www.amazon.com/Software-Architecture-Practice-Len-Bass/dp/0201199300" target="_blank">Software Architecture in Practice</a></li>
<li><a title="Documenting Software Architecture" href="http://www.amazon.com/Documenting-Software-Architectures-Beyond-Engineering/dp/0201703726/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1239671754&amp;sr=1-1" target="_blank">Documenting Software Architecture, Views and Beyond</a></li>
</ul>
<p>And here some blogs that I like:</p>
<ul>
<li><a title="ScottGu's Blog" href="http://weblogs.asp.net/Scottgu/" target="_blank">ScottGu&#8217;s </a></li>
<li><a title="Haacked" href="http://haacked.com/" target="_blank">Haacked</a></li>
<li><a title="James Gosling" href="http://blogs.sun.com/jag/" target="_blank">James Gosling: on the Java Road</a></li>
<li><a title="Oren Eini" href="http://ayende.com/" target="_blank">Ayende @ Rahien</a></li>
<li><a title="The Planetarium" href="http://blogs.sun.com/theplanetarium/" target="_blank">The Planetarium</a></li>
<li><a title="Stack Overflow" href="http://stackoverflow.com/" target="_blank">StackOverflow</a></li>
</ul>
<p style="text-align: justify;">There is no certified recipe, you will find all kind of architects with many strengths and weaknesses. As with any other role, try to find architects that inspire you, people that you respect that will help you to keep your spark alive. Follow them in their blogs, books and conferences. They would lead you to other great professionals for sure.</p>
<p style="text-align: justify;">Here are some of mine:</p>
<ul>
<li><a title="Martin Fowler" href="http://martinfowler.com/" target="_blank">Martin Fowler</a></li>
<li><a title="Bertrand Meyer" href="http://se.ethz.ch/~meyer/" target="_blank">Bertrand Meyer</a></li>
<li><a title="James Gosling" href="http://blogs.sun.com/jag/" target="_blank">James Gosling</a></li>
<li><a title="Scott Meyers" href="http://www.aristeia.com/" target="_self">Scott Meyers</a></li>
<li><a title="Kent Beck" href="http://www.threeriversinstitute.org/" target="_blank">Kent Beck</a></li>
<li><a title="Scott Gu's blog" href="http://weblogs.asp.net/scottgu/" target="_blank">Scott Guthrie</a></li>
</ul>
<p>As a closing remark, keep in mind that is very important to work supporting your team and whatever you do don&#8217;t become a &#8220;<a title="Seagull Architect" href="http://orthocoders.com/?p=14" target="_blank">Seagull architect</a>&#8220;.</p>
]]></content:encoded>
			<wfw:commentRss>http://orthocoders.com/2009/03/03/the-road-to-be-an-architect/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Beware of PowerPoint Architects</title>
		<link>http://orthocoders.com/2009/02/11/beware-of-powerpoint-architect/</link>
		<comments>http://orthocoders.com/2009/02/11/beware-of-powerpoint-architect/#comments</comments>
		<pubDate>Wed, 11 Feb 2009 16:48:29 +0000</pubDate>
		<dc:creator>Amir Barylko</dc:creator>
				<category><![CDATA[Management]]></category>
		<category><![CDATA[Architect]]></category>

		<guid isPermaLink="false">http://orthocoders.com/?p=14</guid>
		<description><![CDATA[I&#8217;m reading the book Manage It! and found this excerpt that talks about seagull architects. I hope you like it. I&#8217;ve worked on several projects where the architect was like a seagull. He swooped in, dumped a lot of poop in the form of PowerPoint pictures of the architecture, and left as soon as possible. [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m reading the book <a title="Manage It!: Your guide to project management" href="http://www.amazon.com/Manage-Modern-Pragmatic-Project-Management/dp/0978739248" target="_blank">Manage It!</a> and found this excerpt that talks about <em><strong>seagull</strong> </em>architects. I hope you like it.</p>
<blockquote><p><em>I&#8217;ve worked on several projects where the architect was like a seagull. He swooped in, dumped a lot of poop in the form of PowerPoint pictures of the architecture, and left as soon as possible. He didn&#8217;t stick around for the hard part of the project: making the product work in this architecture or evolving the architecture so that the product could work by the time of release.2</em></p>
<p><em>But if your architect is overly fond of drawing programs and not fond of writing code and can&#8217;t really answer the developers&#8217; questions about how to make the parts fit into a coherent structure, you don&#8217;t have a real architect. Eliminate that person from your project, and build time into the project for assessing the architecture as you proceed. Add the lack of architecture as an explicit risk to your project so you can manage it.</em></p>
<p><em>Not every project requires an architect. If you have no architect, your sponsors should recognize that your team needs time to assess the architecture and see what patterns are emerging.</em></p>
<p><em>It&#8217;s possible to have an architect who acts as a consultant to the project. It is harder when you have a consultant-architect—Murphy&#8217;s Law implies that the architect will be busy on another higher-priority project when you need him or her most.</em></p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://orthocoders.com/2009/02/11/beware-of-powerpoint-architect/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

