<?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>Zero Bug Build</title>
	<atom:link href="http://www.zerobugbuild.com/?feed=rss2&#038;p=259" rel="self" type="application/rss+xml" />
	<link>http://www.zerobugbuild.com</link>
	<description>James World&#039;s blog for www.dotnetinsight.com</description>
	<lastBuildDate>Sat, 20 Oct 2018 15:03:26 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.4.2</generator>
		<item>
		<title>Quickly get a .gitignore file</title>
		<link>http://www.zerobugbuild.com/?p=443&#038;utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=quickly-get-a-gitignore-file</link>
		<comments>http://www.zerobugbuild.com/?p=443#comments</comments>
		<pubDate>Sat, 20 Oct 2018 15:03:26 +0000</pubDate>
		<dc:creator>James World</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.zerobugbuild.com/?p=443</guid>
		<description><![CDATA[I posted a while back that like many people, I often use https://gitignore.io to create gitignore files. Previously I showed how to use Invoke-WebRequest to do this quickly. Quick as that was, I like it quicker! So I added the &#8230; <a href="http://www.zerobugbuild.com/?p=443">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I posted a while back that like many people, I often use <a href="https://gitignore.io" title="https://gitignore.io">https://gitignore.io</a> to create gitignore files. Previously I showed how to use <code>Invoke-WebRequest</code> to do this quickly. Quick as that was, I like it quicker! So I added the following powershell command to my profile which makes things even easier, and takes care of a few niggles such as correct UTF8 encoding without a BOM marker.</p>
<p>Now I can just do something like: <code>Get-GitIgnore VisualStudioCode</code></p>
<p><script src="https://gist.github.com/james-world/95e45539fc9e04d74817cff2fb742eb9.js"></script></p>
]]></content:encoded>
			<wfw:commentRss>http://www.zerobugbuild.com/?feed=rss2&#038;p=443</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Working As A Team</title>
		<link>http://www.zerobugbuild.com/?p=430&#038;utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=working-as-a-team</link>
		<comments>http://www.zerobugbuild.com/?p=430#comments</comments>
		<pubDate>Sat, 18 Aug 2018 15:35:00 +0000</pubDate>
		<dc:creator>James World</dc:creator>
				<category><![CDATA[Soft Skills]]></category>

		<guid isPermaLink="false">http://www.zerobugbuild.com/?p=430</guid>
		<description><![CDATA[I read a post today entitled &#8220;Don&#8217;t Be The Smartest Guy In the Room&#8221;. The gist of the post was that the author had been in a team where a highly intelligent developer continually had the best ideas and was &#8230; <a href="http://www.zerobugbuild.com/?p=430">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I read a post today entitled <a href="https://www.linkedin.com/feed/update/urn:li:activity:6436241690461376512" title="Don't Be The Smartest Guy In The Room" target="_blank">&#8220;Don&#8217;t Be The Smartest Guy In the Room&#8221;</a>. The gist of the post was that the author had been in a team where a highly intelligent developer continually had the best ideas and was making everyone else on the team feel incapable and eroding their confidence.</p>
<p>He suggested that such smart people shouldn&#8217;t have the last word and should sometimes sit on their ideas and select inferior solutions from less capable developers so that they aren&#8217;t intimidated and made to feel worthless.</p>
<p>The author suggested listening to the opinions of others and speaking less. This part I agree with &#8211; smart people showing off and beating up others with their ideas is destructive behaviour. But to suggest good ideas should be withheld to make people feel better about themselves is just wrong. There are better ways to deal with this.</p>
<p>Most development teams comprise people with a mixture of skills and experience. I rarely find I am choosing between one solution or another as though they are discrete alternatives, but rather taking the best of a range of ideas.</p>
<p>I would certainly not want to sit on a great idea and select an inferior approach to appease someone. That would waste the value of the idea and also waste a learning opportunity. I would be doing a disservice to my team and client.</p>
<p>Instead, I try to present a problem and then solicit opinions through discussion and debate. Like any problem solver, often I&#8217;ll have a rough solution in mind, but rather than offer this outright, through a team conversation I can give less experienced members of the team the chance to put forward their own ideas and draw their own conclusions.</p>
<p>Sometimes, to kickstart a discussion, I&#8217;ll start with an overly simplified approach and ask people to find the problems.</p>
<p>By asking questions such as &#8220;Have you thought about X?&#8221; or &#8220;How could we handle Y?&#8221; you can guide an inclusive conversation where everyone has a chance to contribute.</p>
<p>I&#8217;m always careful to ask quieter team members open questions to see what they think about various aspects &#8211; especially aspects with which I know they are familiar &#8211; and I&#8217;ll always close by reminding people that they can always find me or email the team if they have any further thoughts.</p>
<p>Inevitably, what happens is that we reach a better solution through collaboration &#8211; one that sometimes looks very different from the idea we started with, and one that everyone feels a part of and motivated to deliver. Not only that, everyone gets to practice thinking through and articulating ideas, and that is a critical development skill.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.zerobugbuild.com/?feed=rss2&#038;p=430</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Confused about what is LOCAL and REMOTE in a git rebase?</title>
		<link>http://www.zerobugbuild.com/?p=420&#038;utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=confused-about-local-and-remote-in-rebases</link>
		<comments>http://www.zerobugbuild.com/?p=420#comments</comments>
		<pubDate>Fri, 11 Nov 2016 19:12:20 +0000</pubDate>
		<dc:creator>James World</dc:creator>
				<category><![CDATA[Git]]></category>

		<guid isPermaLink="false">http://www.zerobugbuild.com/?p=420</guid>
		<description><![CDATA[People often find the LOCAL and REMOTE sides in rebases and merges confusing. I put together a repository and README to explain what&#8217;s going on, and why the sides flip for a rebase. Find out more here: https://github.com/james-world/merge-view/blob/master/README.md]]></description>
			<content:encoded><![CDATA[<p>People often find the LOCAL and REMOTE sides in rebases and merges confusing. I put together a repository and README to explain what&#8217;s going on, and why the sides flip for a rebase. Find out more here: <a href="https://github.com/james-world/merge-view/blob/master/README.md" title="Link to tutorial">https://github.com/james-world/merge-view/blob/master/README.md</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.zerobugbuild.com/?feed=rss2&#038;p=420</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fix for Entity Framework 7 Migration Problem in Shawn Wildermuth&#8217;s ASP.NET 5 Pluralsight Sourse</title>
		<link>http://www.zerobugbuild.com/?p=403&#038;utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=fix-for-entity-framework-7-migration-problem-in-shawn-wildermuths-asp-net-5-pluralsight-sourse</link>
		<comments>http://www.zerobugbuild.com/?p=403#comments</comments>
		<pubDate>Mon, 21 Dec 2015 12:57:10 +0000</pubDate>
		<dc:creator>James World</dc:creator>
				<category><![CDATA[Web Development]]></category>
		<category><![CDATA[aspnet]]></category>
		<category><![CDATA[ef]]></category>

		<guid isPermaLink="false">http://www.zerobugbuild.com/?p=403</guid>
		<description><![CDATA[Shawn Wildermuth posted a great ASP.NET 5 course up at Pluralsight here. This post is a quick fix to a problem I ran into updating the database in the ASP.NET Identity Section. Note &#8211; I have been using the RC1-Final &#8230; <a href="http://www.zerobugbuild.com/?p=403">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Shawn Wildermuth posted a great ASP.NET 5 course up at Pluralsight <a href="https://app.pluralsight.com/library/courses/aspdotnet-5-ef7-bootstrap-angular-web-app/table-of-contents" title="ASP.NET 5 Course Link">here</a>.</p>
<p>This post is a quick fix to a problem I ran into updating the database in the ASP.NET Identity Section. Note &#8211; I have been using the RC1-Final version of ASP.NET 5.</p>
<p>When you try to run the project so that it migrates the identity schema into the database, migration fails. The reason is that originally the database was created in the `Startup.cs` class with a call to:</p>
<p><code>db.Database.EnsureCreated()</code></p>
<p>This will prevent migrations from working because it doesn&#8217;t (by design) create the necessary system generated <code>__EFMigrationsHistory</code> table in the DB. If you change this line of code to:</p>
<p><code>db.Database.Migrate();</code></p>
<p>then everything works (at least for me) because with this code, when the database is first created the migrations table will be added. Note you will need to have created the database via this method in the first place &#8211; you can&#8217;t add/change this line of code after the DB is already created as the migrations table can&#8217;t be added retrospectively. If this is where you are, you have no easy option but to drop and recreate the DB. Also, you will need to manually add samhastings as the username in the two existing Trips in the DB, since the migration code doesn&#8217;t account for this.</p>
<p>Julie Lerman posted on this in a lot more detail <a href="http://thedatafarm.com/data-access/ef7-ensurecreated-vs-migrate-methods/" title="Julie Lerman's post on this probem">here</a>. Hope this helps!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.zerobugbuild.com/?feed=rss2&#038;p=403</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Process this!</title>
		<link>http://www.zerobugbuild.com/?p=395&#038;utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=process-this</link>
		<comments>http://www.zerobugbuild.com/?p=395#comments</comments>
		<pubDate>Mon, 23 Mar 2015 09:29:49 +0000</pubDate>
		<dc:creator>James World</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.zerobugbuild.com/?p=395</guid>
		<description><![CDATA[During a code review the other day, I came up against an old friend &#8211; in this case a method called &#8220;ProcessImage&#8221;. Set inside, of course a class called &#8220;ImageProcessor&#8221;. Method names should be *intention* revealing, not *implementation* revealing. If &#8230; <a href="http://www.zerobugbuild.com/?p=395">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>During a code review the other day, I came up against an old friend &#8211; in this case a method called &#8220;ProcessImage&#8221;. Set inside, of course a class called &#8220;ImageProcessor&#8221;. Method names should be *intention* revealing, not *implementation* revealing. If you think of a program as being like a sausage machine &#8211; meat in, sausages out &#8211; then don&#8217;t call the operative method &#8220;ProcessMeat&#8221; &#8211; call it &#8220;MakeSausages&#8221;. This reveals the purpose clearly and uses the language of the business.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.zerobugbuild.com/?feed=rss2&#038;p=395</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hosting an OWIN WebApi in IIS, Console and Integration Tests</title>
		<link>http://www.zerobugbuild.com/?p=389&#038;utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=hosting-an-owin-webapi-in-iis-console-and-integration-tests</link>
		<comments>http://www.zerobugbuild.com/?p=389#comments</comments>
		<pubDate>Fri, 14 Nov 2014 12:21:06 +0000</pubDate>
		<dc:creator>James World</dc:creator>
				<category><![CDATA[Git]]></category>
		<category><![CDATA[VIsual Studio]]></category>
		<category><![CDATA[visualstudio owin git]]></category>

		<guid isPermaLink="false">http://www.zerobugbuild.com/?p=389</guid>
		<description><![CDATA[One class library defining an OWIN based WebAPI, re-used by IIS, SelfHost and in-memory integration test projects. https://github.com/james-world/owinmultihosting]]></description>
			<content:encoded><![CDATA[<p>One class library defining an OWIN based WebAPI, re-used by IIS, SelfHost and in-memory integration test projects. <a href="https://github.com/james-world/owinmultihosting" title="On github here!" target="_blank">https://github.com/james-world/owinmultihosting</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.zerobugbuild.com/?feed=rss2&#038;p=389</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Uploading an existing local git repo to a new github/bitbucket repo.</title>
		<link>http://www.zerobugbuild.com/?p=380&#038;utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=uploading-an-existing-local-git-repo-to-a-new-githubbitbucket-repo</link>
		<comments>http://www.zerobugbuild.com/?p=380#comments</comments>
		<pubDate>Mon, 06 Oct 2014 11:17:20 +0000</pubDate>
		<dc:creator>James World</dc:creator>
				<category><![CDATA[Git]]></category>

		<guid isPermaLink="false">http://www.zerobugbuild.com/?p=380</guid>
		<description><![CDATA[Note to self: Bitbucket and Github&#8217;s instructions for uploading an existing local repo have this instruction: git remote add origin &#60;address&#62; But something in my set-up (posh-git?) adds a default origin entry causing this to fail with: fatal: remote origin &#8230; <a href="http://www.zerobugbuild.com/?p=380">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Note to self: Bitbucket and Github&#8217;s instructions for uploading an existing local repo have this instruction:</p>
<pre>git remote add origin &lt;address&gt;</pre>
<p>But something in my set-up (posh-git?) adds a default origin entry causing this to fail with:</p>
<pre>fatal: remote origin already exists</pre>
<p>To fix this use:</p>
<pre>git remote set-url origin &lt;address&gt;</pre>
<p>And then upload as normal with:</p>
<pre>git push -u origin</pre>
<p>Maybe this post will prevent me having to look this up every time I run into it! <img src='http://www.zerobugbuild.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.zerobugbuild.com/?feed=rss2&#038;p=380</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Get a .gitignore file for Visual Studio fast with gitignore.io and Powershell</title>
		<link>http://www.zerobugbuild.com/?p=370&#038;utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=get-a-gitignore-file-for-visual-studio-fast-with-gitignore-io-and-powershelll</link>
		<comments>http://www.zerobugbuild.com/?p=370#comments</comments>
		<pubDate>Sun, 21 Sep 2014 13:18:57 +0000</pubDate>
		<dc:creator>James World</dc:creator>
				<category><![CDATA[Powershell]]></category>
		<category><![CDATA[VIsual Studio]]></category>

		<guid isPermaLink="false">http://www.zerobugbuild.com/?p=370</guid>
		<description><![CDATA[I often use the wonderful service at https://www.gitignore.io to grab a .gitignore file suitable for Visual Studio use. Unfortunately, the file has unix line endings &#8211; so I&#8217;ve boiled the operation down to a single line of Powershell that sorts &#8230; <a href="http://www.zerobugbuild.com/?p=370">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I often use the wonderful service at https://www.gitignore.io to grab a .gitignore file suitable for Visual Studio use. Unfortunately, the file has unix line endings &#8211; so I&#8217;ve boiled the operation down to a single line of Powershell that sorts that out in one go:<br />
<code><br />
(curl https://www.gitignore.io/api/visualstudio).Content<br />
&nbsp;&nbsp;-split "`n" -join "`r`n" | set-content .gitignore<br />
</code></p>
]]></content:encoded>
			<wfw:commentRss>http://www.zerobugbuild.com/?feed=rss2&#038;p=370</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Use Powershell 4 to check file signatures/hashes</title>
		<link>http://www.zerobugbuild.com/?p=361&#038;utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=use-powershell-4-to-check-file-signatureshashes</link>
		<comments>http://www.zerobugbuild.com/?p=361#comments</comments>
		<pubDate>Fri, 05 Sep 2014 09:02:18 +0000</pubDate>
		<dc:creator>James World</dc:creator>
				<category><![CDATA[Powershell]]></category>
		<category><![CDATA[powershell hash md5 sha1]]></category>

		<guid isPermaLink="false">http://www.zerobugbuild.com/?p=361</guid>
		<description><![CDATA[I wasted a couple of DVDs this morning trying to burn a corrupted download of SQL Server from MSDN. Finally the light dawned and I decided to check the file hash. MSDN subscriber downloads have the SHA1 hash on the &#8230; <a href="http://www.zerobugbuild.com/?p=361">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I wasted a couple of DVDs this morning trying to burn a corrupted download of SQL Server from MSDN. Finally the light dawned and I decided to check the file hash. MSDN subscriber downloads have the SHA1 hash on the download page. I didn&#8217;t have my usual checker installed yet on my new laptop, and in googling I discovered that Powershell 4 can now do this natively!</p>
<p>The command you need is <strong>Get-FileHash</strong> &#8211; MSDN uses SHA1 rather than the default SHA256 of this command so the following will do it:</p>
<p><code>Get-FileHash &lt;filepath&gt; -Algorithm SHA1</code></p>
]]></content:encoded>
			<wfw:commentRss>http://www.zerobugbuild.com/?feed=rss2&#038;p=361</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Rx Hammer-Nail Syndrome</title>
		<link>http://www.zerobugbuild.com/?p=337&#038;utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=rx-isnt-always-the-simplest-way</link>
		<comments>http://www.zerobugbuild.com/?p=337#comments</comments>
		<pubDate>Mon, 10 Feb 2014 14:08:36 +0000</pubDate>
		<dc:creator>James World</dc:creator>
				<category><![CDATA[Reactive Extensions]]></category>

		<guid isPermaLink="false">http://www.zerobugbuild.com/?p=337</guid>
		<description><![CDATA[This post is inspired by a recent post by Mike Taulty. I think you&#8217;ll agree it&#8217;s a great introductory post on how to use Rx. I&#8217;m a big fan of Rx &#8211; it&#8217;s an awesome technology. But sometimes I am &#8230; <a href="http://www.zerobugbuild.com/?p=337">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>This post is inspired by a <a href="http://mtaulty.com/CommunityServer/blogs/mike_taultys_blog/archive/2014/02/05/rx-and-getting-paged-data-from-the-moviedb-api.aspx" title="Rx and Getting Paged Data from the MovieDb API" target="_blank">recent post</a> by Mike Taulty. I think you&#8217;ll agree it&#8217;s a great introductory post on how to use Rx.</p>
<p>I&#8217;m a big fan of Rx &#8211; it&#8217;s an awesome technology. But sometimes I am guilty of over-using it &#8211; the old adage that given a shiny Rx hammer every problem looks like a nail definitely applies!</p>
<p>If you haven&#8217;t already, please take a look <a href="http://mtaulty.com/CommunityServer/blogs/mike_taultys_blog/archive/2014/02/05/rx-and-getting-paged-data-from-the-moviedb-api.aspx" title="Mike's Post" target="_blank">at Mike&#8217;s post here</a> to compare with what follows.</p>
<p>While the post was clearly intended as an instructive and motivational example, it did remind me of my own tendency to reach for Rx in similar production-code situations. I often need to remind myself that a non-Rx version can sometimes be more straight-forward. I think this applies here if you look at code re-written to leverage the async/await syntax of C# 5:</p>
<p>Firstly, here is the non-Rx version of MakeObservableMovieDbRequest:</p>
<pre class="prettyprint ">
static async Task&lt;T&gt; MakeMovieRequestAsync&lt;T&gt;(
    string url,
    params KeyValuePair&lt;string, string&gt;[] additionalParameters)
{
    var client = new RestClient(BaseUrl) { Proxy = new WebProxy() };

    var parameterisedUrl = new StringBuilder(MakeUrl(url));

    foreach (var keyValuePair in additionalParameters)
    {
        parameterisedUrl.AppendFormat(@&quot;&amp;{0}={1}&quot;,
            keyValuePair.Key, keyValuePair.Value);
    }

    var request = new RestRequest(parameterisedUrl.ToString());

    var result = await client.ExecuteGetTaskAsync&lt;T&gt;(request);

    return result.Data;
}
</pre>
<p>Since a Task can be easily translated to an IObservable&lt;T&gt; with a call to ToObservable(), I think it&#8217;s just easier and more flexible to leave this function returning a Task. With the use of async/await we remove some braces and make the code more readable.</p>
<p>The same is true when using this method to page through the action movies:</p>
<pre class="prettyprint ">
static async Task GetActionMovies()
{
    var genreCollection =
        await MakeMovieRequestAsync&lt;GenreCollection&gt;(@&quot;genre/list&quot;);

    var actionGenreId = (from genre in genreCollection.Genres
                            where genre.Name == &quot;Action&quot;
                            select genre.Id).First();

    var actionMoviesUrl = string.Format(
        @&quot;genre/{0}/movies&quot;, actionGenreId);

    var actionMovieCollection =
        await MakeMovieRequestAsync&lt;MovieCollection&gt;(actionMoviesUrl);

    var totalPages = actionMovieCollection.TotalPages;

    for (int i = 1; i &lt;= totalPages; i++)
    {
        var parameter = new KeyValuePair&lt;string, string&gt;(
            &quot;page&quot;, i.ToString(CultureInfo.InvariantCulture));
        var movies = await MakeMovieRequestAsync&lt;MovieCollection&gt;(
            actionMoviesUrl, parameter);

        foreach (var movie in movies.Results)
        {
            Console.WriteLine(&quot;Movie {0}&quot;, movie.Title);
        }
    }            
}
</pre>
<p>The use of async/await means this code tells a clear story here &#8211; there are no obscure uses of Rx features like Concat to constrain concurrency; the for loop makes it clear how the results are being pulled together.</p>
<p>There are plenty of examples where Rx makes sense &#8211; often when coordinating complex streams.</p>
<p>The Rx solution is actually quite involved with some concepts that are not particularly intention revealing. In my opinion, in this case it makes the solution harder to maintain compared with the async/await approach.</p>
<p>As I said at the beginning, I&#8217;m often guilty of this &#8211; its very easy to forget how baffling Rx can be to the uninitiated. It should be used only when it brings real advantages to the table.</p>
<p>You often don&#8217;t have to look too far for this &#8211; even an idea as simple as adding a Timeout and decent error handling can be surprising hard to express with the TPL and yet quite simple with Rx. Pre .NET 4.5 and async/await, having to chain tasks together the old way was also a real chore.</p>
<p>That said, I won&#8217;t be stopping my love affair with Rx anytime soon &#8211; there&#8217;s plenty more nails that need hammering in with it!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.zerobugbuild.com/?feed=rss2&#038;p=337</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
