<?xml version="1.0" encoding="UTF-8"?>
<rss version='2.0' xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Afif Mohammed</title>
    <description>Relishing the challenge of humbling myself by convincing others to avoid the mistakes I have made.</description>
    <link>https://afifmohammed.silvrback.com/feed</link>
    <atom:link href="https://afifmohammed.silvrback.com/feed" rel="self" type="application/rss+xml"/>
    <category domain="afifmohammed.silvrback.com">Content Management/Blog</category>
    <language>en-us</language>
      <pubDate>Wed, 14 May 2014 02:08:52 -0400</pubDate>
    <managingEditor>askafif@y7mail.com (Afif Mohammed)</managingEditor>
      <item>
        <guid>http://afifmohammed.com/the-ravendb-3-0-promise#3943</guid>
          <pubDate>Wed, 14 May 2014 02:08:52 -0400</pubDate>
        <link>http://afifmohammed.com/the-ravendb-3-0-promise</link>
        <title>The RavenDB 3.0 promise</title>
        <description>Appreciate the wizadry behind the tricks</description>
        <content:encoded><![CDATA[<p><img alt="RavenDB 3.0" class="sb_float" src="https://silvrback.s3.amazonaws.com/uploads/1a22e43d-23ba-4fda-950d-d04c8b4ac767/ravendb_medium.jpg" /></p>

<p>RavenDB 3.0 just <a href="http://ayende.com/blog/166597/ravendb-conf-videos-ravendb-3-0" title="Oren&#39;s blog"><strong>announced itself</strong></a>, and its come with a lot of goodies. Its the biggest step forward in the journey since its inception. My 3 year journey with RavenDB so far can be compared to that of a child learning to communicate in a new language. Upto a certain point your main concern is to communicate your basic needs, and I have found RavenDB providing me refreshingly easy options to do so.</p>

<p>But after a certain point if you don&#39;t actively learn new vocabulary, new ideas don&#39;t come to you. This new vocabulary is what I seek to learn with RavenDB 3.0 given so many new features. Except that this time around now that I feel more invested with the product, I want to show more patience and respect to problems I might face out in the wild when using all these new shiny features.</p>

<p>I believe this goal can be most easily achieved if I familiarize myself with the <a href="https://github.com/ayende/ravendb/tree/New3">RavenDB 3.0 codebase</a>. Not so much to debug it, but to know how it&#39;s structured, how to navigate it, know where to look if you get curious about a certain feature etc. And more importantly when I look at the code, I want to know the high level abstractions, opinions and different concerns that are at play, <strong>in short given its such a complex beast, I don&#39;t want to miss the forest for the trees.</strong></p>

<p>So here are a few questions that will help me vastly cover ground towards that end.</p>

<ol>
<li><p>I am curious about how much Lucene concepts does one need to be aware of to grasp the RavenDB code base? For e.g. will not knowing Lucene concept X limit you from understanding module Y, or is the concept X interviewed in such a manner that you simply won&#39;t get why the code is doing what its doing in dribs and drabs over many places.</p></li>
<li><p>Oren has often referred to RavenDB as an ACID store on top of which is an eventually consistent indexing store built. Is this a mere conceptual separation or is it clearly manifested in code? If so, how tight is the coupling, can you understand and learn one without caring much about the other?</p></li>
<li><p>Often operational concerns add a lot of complexity (think disaster recovery, optimizations for low end machines). When looking at feature code, will I know constructs a,b,c are intermingled here to satisfy operational feature y, so I can easily separate the wheat from the chaff.</p></li>
<li><p>Is there a consistent approach to handle side effects, for e.g when x is saved, update y. Pub/sub, task queue, something else? I am hoping if I am made aware of these patterns I will more easily be able to discover/decipher such interactions.</p></li>
<li><p>Should I expect to see a lot of threading/synchronization code for fulfilling multi core processing concerns, or true to .NET&#39;s more recent promises, are these concerns mostly addressed by good usage of Tasks, async await, reactive extensions etc.</p></li>
</ol>

<p>Oren speaks highly of code that is easy to read, change and improve. Well.. so does everyone else, but I have found <strong>he makes some refreshing choices towards that end that often question conventional wisdom. These are the choices that I am out to discover</strong> when I look at the code, ahead of familiarizing myself with exactly how feature x is implemented or how to extend feature y.</p>
]]></content:encoded>
      </item>
      <item>
        <guid>http://afifmohammed.com/demystifying-event-driven-architecture#3701</guid>
          <pubDate>Fri, 09 May 2014 09:31:42 -0400</pubDate>
        <link>http://afifmohammed.com/demystifying-event-driven-architecture</link>
        <title>Demystifying Event driven architecture</title>
        <description>Separating the wheat from the chaff	</description>
        <content:encoded><![CDATA[<p>These days distributed architecture is getting a lot of press, which is a good thing. If you didn&#39;t notice, its hiding under the guise of   &#39;Micro Services&#39;. So people are getting on board the idea that a system can be deployed across multiple endpoints, where every endpoint has different handlers deployed to it. Handlers communicate amongst one another by sending messages. </p>

<p>How would such a handler look, lets cut some naive code to paint a picture to the concept. Since handlers are all about messages, lets define our message first. A simple poco will do.</p>
<div class="highlight"><pre><span></span><span class="k">public</span> <span class="k">class</span> <span class="nc">RegisterCustomer</span> 
<span class="p">{</span>
    <span class="k">public</span> <span class="kt">string</span> <span class="n">Name</span> <span class="p">{</span><span class="k">get</span><span class="p">;</span><span class="k">set</span><span class="p">;}</span>
    <span class="k">public</span> <span class="kt">string</span> <span class="n">Email</span> <span class="p">{</span><span class="k">get</span><span class="p">;</span><span class="k">set</span><span class="p">;}</span>
    <span class="k">public</span> <span class="kt">string</span> <span class="n">Phone</span> <span class="p">{</span><span class="k">get</span><span class="p">;</span><span class="k">set</span><span class="p">;}</span>
<span class="p">}</span>
</pre></div>
<p>Since we are handling messages, lets define a simple interface that reflects that responsibility</p>
<div class="highlight"><pre><span></span><span class="k">public</span> <span class="k">interface</span> <span class="n">IHandleMessages</span><span class="p">&lt;</span><span class="n">TMessage</span><span class="p">&gt;</span>
<span class="p">{</span>
    <span class="k">void</span> <span class="nf">Handle</span><span class="p">(</span><span class="n">TMessage</span> <span class="n">message</span><span class="p">);</span>
<span class="p">}</span>
</pre></div>
<p>Now take a simple use case, register a customer, and send a welcome email. We will obviously have two handlers where one will need to call the other. So lets define a simple interface that abstracts away the responsibility of sending messages between handlers. </p>
<div class="highlight"><pre><span></span><span class="k">public</span> <span class="k">interface</span> <span class="n">IBus</span>
<span class="p">{</span>
    <span class="k">void</span> <span class="n">Send</span><span class="p">&lt;</span><span class="n">TMessage</span><span class="p">&gt;(</span><span class="n">TMessage</span> <span class="n">message</span><span class="p">);</span>
<span class="p">}</span>
</pre></div>
<p>With that in place lets write our handlers</p>
<div class="highlight"><pre><span></span><span class="k">public</span> <span class="k">class</span> <span class="nc">RegisterCustomerHandler</span> <span class="p">:</span> 
       <span class="n">IHandleMessages</span><span class="p">&lt;</span><span class="n">RegisterCustomer</span><span class="p">&gt;</span> 
<span class="p">{</span>

    <span class="n">IBus</span> <span class="n">Bus</span> <span class="p">{</span><span class="k">get</span><span class="p">;</span><span class="k">set</span><span class="p">;}</span>

    <span class="k">public</span> <span class="k">void</span> <span class="nf">Handle</span><span class="p">(</span><span class="n">RegisterCustomer</span> <span class="n">msg</span><span class="p">)</span> 
    <span class="p">{</span>
        <span class="c1">// todo: register a customer</span>
        <span class="n">Bus</span><span class="p">.</span><span class="n">Send</span><span class="p">(</span><span class="k">new</span> <span class="n">WelcomeEmail</span>
        <span class="p">{</span>
            <span class="c1">// not populating messages for brevity</span>
        <span class="p">});</span>
    <span class="p">}</span>
<span class="p">}</span>

<span class="k">public</span> <span class="k">class</span> <span class="nc">WelcomeEmailHandler</span><span class="p">:</span><span class="n">IHandleMessages</span><span class="p">&lt;</span><span class="n">WelcomeEmail</span><span class="p">&gt;</span>
<span class="p">{</span>
    <span class="k">public</span> <span class="k">void</span> <span class="nf">Handle</span><span class="p">(</span><span class="n">WelcomeEmail</span> <span class="n">msg</span><span class="p">)</span>
    <span class="p">{</span>
        <span class="c1">// send the email</span>
    <span class="p">}</span>
<span class="p">}</span>
</pre></div>
<p>Technically the Send welcome email handler is under no obligation to not send an email when it receives a message for a customer that is not registered. That&#39;s easy to fix.</p>
<div class="highlight"><pre><span></span><span class="k">public</span> <span class="k">class</span> <span class="nc">SendWelcomeEmail</span><span class="p">:</span> <span class="n">IHandleMessages</span><span class="p">&lt;</span><span class="n">WelcomeEmail</span><span class="p">&gt;</span>
<span class="p">{</span>
    <span class="k">public</span> <span class="k">void</span> <span class="nf">Handle</span><span class="p">(</span><span class="n">WelcomeEmail</span> <span class="n">msg</span><span class="p">)</span>
    <span class="p">{</span>
        <span class="k">if</span><span class="p">(</span><span class="n">Query</span><span class="p">(</span><span class="k">new</span> <span class="n">CustomerByEmail</span><span class="p">{})</span> <span class="k">is</span> <span class="n">CustomerNotFound</span><span class="p">)</span> <span class="k">return</span><span class="p">;</span>
        <span class="k">if</span><span class="p">(</span><span class="n">Query</span><span class="p">(</span><span class="k">new</span> <span class="n">RegistrationEmailByCustomer</span> <span class="p">{})</span> <span class="k">is</span> <span class="n">EmailNotFound</span><span class="p">)</span>
            <span class="c1">// send email and save email record</span>
    <span class="p">}</span>
<span class="p">}</span>
</pre></div>
<p>Organically this approach will suffice for now. But we will see later as we introduce events how this solution evolves. Now lets consider a slightly more complex business scenario. Place an Order. Then send a order placed email, and reserve stock.</p>
<div class="highlight"><pre><span></span><span class="k">public</span> <span class="k">class</span> <span class="nc">PlaceOrderHandler</span><span class="p">:</span> <span class="n">IHandleMessages</span><span class="p">&lt;</span><span class="n">CustomerOrder</span><span class="p">&gt;</span>
<span class="p">{</span>
    <span class="n">IBus</span> <span class="n">Bus</span> <span class="p">{</span><span class="k">get</span><span class="p">;</span><span class="k">set</span><span class="p">;}</span>

    <span class="k">public</span> <span class="k">void</span> <span class="nf">Handle</span><span class="p">(</span><span class="n">CustomerOrder</span> <span class="n">msg</span><span class="p">)</span>
    <span class="p">{</span>
        <span class="c1">// todo: place the order</span>
        <span class="n">Bus</span><span class="p">.</span><span class="n">Send</span><span class="p">(</span><span class="k">new</span> <span class="n">OrderPlacedEmail</span> <span class="p">{});</span>
        <span class="n">Bus</span><span class="p">.</span><span class="n">Send</span><span class="p">(</span><span class="k">new</span> <span class="n">ReserveStockRequest</span> <span class="p">{});</span>   
    <span class="p">}</span>
<span class="p">}</span>

<span class="k">public</span> <span class="k">class</span> <span class="nc">SendOrderPlacedEmail</span><span class="p">:</span> <span class="n">IHandleMessages</span><span class="p">&lt;</span><span class="n">OrderPlacedEmail</span><span class="p">&gt;</span>
<span class="p">{</span>
    <span class="k">public</span> <span class="k">void</span> <span class="nf">Handle</span><span class="p">(</span><span class="n">OrderPlacedEmail</span> <span class="n">msg</span><span class="p">)</span>
    <span class="p">{</span>
        <span class="k">if</span><span class="p">(!</span><span class="n">Query</span><span class="p">(</span><span class="k">new</span> <span class="n">OrderPlaced</span><span class="p">{})</span> <span class="k">return</span><span class="p">;</span>
        <span class="c1">// todo: send the email</span>
    <span class="p">}</span>
<span class="p">}</span>

<span class="k">public</span> <span class="k">class</span> <span class="nc">ReserveStockHandler</span><span class="p">:</span> <span class="n">IHandleMessages</span><span class="p">&lt;</span><span class="n">ReserveStockRequest</span><span class="p">&gt;</span>
<span class="p">{</span>
    <span class="k">public</span> <span class="k">void</span> <span class="nf">Handle</span><span class="p">(</span><span class="n">ReserveStockRequest</span> <span class="n">msg</span><span class="p">)</span>
    <span class="p">{</span>
        <span class="k">if</span><span class="p">(!</span><span class="n">Query</span><span class="p">(</span><span class="k">new</span> <span class="n">OrderPlaced</span><span class="p">{})</span> <span class="k">return</span><span class="p">;</span>
        <span class="c1">// todo: reserve stock</span>
    <span class="p">}</span>
<span class="p">}</span>
</pre></div>
<p>We followed the same pattern as we did with Register customer and Send welcome email. But now notice both the handlers above have to ensure the same thing, an Order is placed before they go about their business. Note also the Place Order handler knows a bit too much of what needs to happen after an Order is placed. For e.g if  the business later decides when a customer places an Order we give them some frequent flyer points, then you have to go to the placed order handler, and insert the  Bus.Send statement for adding frequent flyer points. Okay so this probably violates the Open Closed principle, and the Single Responsibility principle as the Place Order handler has too many responsibilities. </p>

<p>Lets introduce events into the mix. What about we publish an event after we place an Order. For that we have to extend our IBus interface to reflect this new responsibility.</p>
<div class="highlight"><pre><span></span><span class="k">public</span> <span class="k">interface</span> <span class="n">IBus</span>
<span class="p">{</span>
    <span class="k">void</span> <span class="n">Send</span><span class="p">&lt;</span><span class="n">TCommand</span><span class="p">&gt;(</span><span class="n">TCommand</span> <span class="n">cmd</span><span class="p">);</span>
    <span class="k">void</span> <span class="n">Publish</span><span class="p">&lt;</span><span class="n">TEvent</span><span class="p">&gt;(</span><span class="n">TEvent</span> <span class="n">@event</span><span class="p">);</span>
<span class="p">}</span>
</pre></div>
<p>Now our Place Order handler will slightly change.</p>
<div class="highlight"><pre><span></span><span class="k">public</span> <span class="k">class</span> <span class="nc">PlaceOrderHandler</span><span class="p">:</span> <span class="n">IHandleMessages</span><span class="p">&lt;</span><span class="n">CustomerOrder</span><span class="p">&gt;</span>
<span class="p">{</span>
    <span class="n">IBus</span> <span class="n">Bus</span> <span class="p">{</span><span class="k">get</span><span class="p">;</span><span class="k">set</span><span class="p">;}</span>

    <span class="k">public</span> <span class="k">void</span> <span class="nf">Handle</span><span class="p">(</span><span class="n">CustomerOrder</span> <span class="n">command</span><span class="p">)</span>
    <span class="p">{</span>
        <span class="c1">// todo: place the order</span>
        <span class="n">Bus</span><span class="p">.</span><span class="n">Publish</span><span class="p">(</span><span class="k">new</span> <span class="n">OrderPlaced</span><span class="p">{});</span> 
    <span class="p">}</span>
<span class="p">}</span>
</pre></div>
<p>This also means our OrderPlacedEmail and ReserveStockRequest commands disappear. Those handlers are now simply listening to OrderPlaced.</p>
<div class="highlight"><pre><span></span><span class="k">public</span> <span class="k">class</span> <span class="nc">SendOrderPlacedEmail</span><span class="p">:</span> <span class="n">IHandleMessages</span><span class="p">&lt;</span><span class="n">OrderPlaced</span><span class="p">&gt;</span>
<span class="p">{</span>
    <span class="k">public</span> <span class="k">void</span> <span class="nf">Handle</span><span class="p">(</span><span class="n">OrderPlaced</span> <span class="n">@event</span><span class="p">)</span>
    <span class="p">{</span>
        <span class="c1">// todo: send the email</span>
    <span class="p">}</span>
<span class="p">}</span>

<span class="k">public</span> <span class="k">class</span> <span class="nc">ReserveStockHandler</span><span class="p">:</span> <span class="n">IHandleMessages</span><span class="p">&lt;</span><span class="n">OrderPlaced</span><span class="p">&gt;</span>
<span class="p">{</span>
    <span class="k">public</span> <span class="k">void</span> <span class="nf">Handle</span><span class="p">(</span><span class="n">OrderPlaced</span> <span class="n">@event</span><span class="p">)</span>
    <span class="p">{</span>
        <span class="c1">// todo: reserve stock</span>
    <span class="p">}</span>
<span class="p">}</span>
</pre></div>
<p>Now if the business were to provide the rule to add frequent flyer points when an Order is placed, you simply write another handler that handles OrderPlaced and you are done.</p>

<p>Hopefully that explains the power of events, and when should you send commands vs publish events. Whenever I get into this fix, I always ask myself a simple question, should this handler be invoked only when another handler successfully complets, if true, then the former should publish an event, and the latter should subscribe to it, rather than the latter just handling a command.</p>

<p>Allow me to take this a step further, the refunds use case. You can only refund when a paid product is returned. Thinking events, we can identify there are two event that need to have happened here, and order must be paid, and the product is returned. For a refund to be initiated both must have happened. </p>
<div class="highlight"><pre><span></span><span class="k">public</span> <span class="k">class</span> <span class="nc">RefundsHandler</span> <span class="p">:</span> 
    <span class="n">IHandleMessages</span><span class="p">&lt;</span><span class="n">OrderPaid</span><span class="p">&gt;,</span>
    <span class="n">IHandleMessages</span><span class="p">&lt;</span><span class="n">ProductReturned</span><span class="p">&gt;</span>
<span class="p">{</span>
    <span class="k">public</span> <span class="k">void</span> <span class="nf">Handle</span><span class="p">(</span><span class="n">OrderPaid</span> <span class="n">@event</span><span class="p">)</span>
    <span class="p">{</span>
        <span class="c1">// only when product returned ?? </span>
        <span class="c1">// todo: refund</span>
    <span class="p">}</span>

    <span class="k">public</span> <span class="k">void</span> <span class="nf">Handle</span><span class="p">(</span><span class="n">ProductReturned</span> <span class="n">@event</span><span class="p">)</span>
    <span class="p">{</span>
        <span class="c1">// only when order paid ??</span>
        <span class="c1">// todo: refund</span>
    <span class="p">}</span>
<span class="p">}</span>
</pre></div>
<p>How do we ensure the invariants are met? We almost need some local state to record we have received the event. The business meanwhile adds another curveball that refunds can only be handed out inside 30 days from payment. This is now a process of its own. A long running one that can span 30 days. A long running process is often coined as a Saga. So lets represent refunds as a Saga. And since we can only refund inside 30 days, we need to some how terminate this saga in 30 days. How about we trigger a timeout of some sorts when the Order is paid, that will in 30 days ensure the saga completes. A lot of complex code, but lets write some psuedo code first to represent these concepts.</p>
<div class="highlight"><pre><span></span><span class="k">public</span> <span class="k">class</span> <span class="nc">Saga</span><span class="p">&lt;</span><span class="n">TSaga</span><span class="p">&gt;</span>
<span class="p">{</span>
    <span class="k">public</span> <span class="n">TSaga</span> <span class="n">Data</span> <span class="p">{</span><span class="k">get</span><span class="p">;</span><span class="k">set</span><span class="p">;}</span>
    <span class="k">public</span> <span class="n">IBus</span> <span class="n">Bus</span> <span class="p">{</span><span class="k">get</span><span class="p">;</span><span class="k">set</span><span class="p">;}</span>

    <span class="c1">// todo: implement methods</span>
    <span class="n">RequestTimeOut</span><span class="p">&lt;</span><span class="n">TTimeout</span><span class="p">&gt;(</span><span class="n">Timespan</span> <span class="n">within</span><span class="p">)</span> <span class="p">{}</span>
    <span class="n">MarkAsComplete</span><span class="p">()</span> <span class="p">{}</span>
<span class="p">}</span> 

<span class="k">public</span> <span class="k">class</span> <span class="nc">Refund</span>
<span class="p">{</span>
    <span class="k">public</span> <span class="kt">bool</span> <span class="n">OrderPaid</span> <span class="p">{</span><span class="k">get</span><span class="p">;</span><span class="k">set</span><span class="p">;}</span>
    <span class="k">public</span> <span class="kt">bool</span> <span class="n">ProductReturned</span> <span class="p">{</span><span class="k">get</span><span class="p">;</span><span class="k">set</span><span class="p">;}</span>  
<span class="p">}</span>

<span class="k">public</span> <span class="k">class</span> <span class="nc">CoolingOffPeriodOver</span>
<span class="p">{}</span>

<span class="k">public</span> <span class="k">class</span> <span class="nc">RefundsSaga</span> <span class="p">:</span> <span class="n">Saga</span><span class="p">&lt;</span><span class="n">Refund</span><span class="p">&gt;,</span>
    <span class="n">IHandleMessages</span><span class="p">&lt;</span><span class="n">OrderPaid</span><span class="p">&gt;,</span>
    <span class="n">IHandleMessages</span><span class="p">&lt;</span><span class="n">ProductReturned</span><span class="p">&gt;,</span>
    <span class="n">IHandleTimeouts</span><span class="p">&lt;</span><span class="n">CoolingOffPeriodOver</span><span class="p">&gt;</span>
<span class="p">{</span>
    <span class="k">public</span> <span class="k">void</span> <span class="nf">Handle</span><span class="p">(</span><span class="n">OrderPaid</span> <span class="n">@event</span><span class="p">)</span>
    <span class="p">{</span>
        <span class="n">Data</span><span class="p">.</span><span class="n">OrderPaid</span> <span class="p">=</span> <span class="k">true</span><span class="p">;</span>
        <span class="k">if</span><span class="p">(</span><span class="n">Data</span><span class="p">.</span><span class="n">ProductReturned</span><span class="p">)</span>
        <span class="p">{</span>
            <span class="c1">// todo: refund</span>
            <span class="k">return</span><span class="p">;</span>
        <span class="p">}</span>

        <span class="n">RequestTimeout</span><span class="p">&lt;</span><span class="n">CoolingOffPeriodOver</span><span class="p">&gt;(</span><span class="n">within</span><span class="p">:</span> <span class="m">30.D</span><span class="n">ays</span><span class="p">());</span>            
    <span class="p">}</span>

    <span class="k">public</span> <span class="k">void</span> <span class="nf">Handle</span><span class="p">(</span><span class="n">ProductReturned</span> <span class="n">@event</span><span class="p">)</span>
    <span class="p">{</span>
        <span class="n">Data</span><span class="p">.</span><span class="n">ProductReturned</span> <span class="p">=</span> <span class="k">true</span><span class="p">;</span>
        <span class="k">if</span><span class="p">(</span><span class="n">Data</span><span class="p">.</span><span class="n">OrderPaid</span><span class="p">)</span>
            <span class="c1">// todo: refund</span>
    <span class="p">}</span>

    <span class="k">public</span> <span class="k">void</span> <span class="nf">Handle</span><span class="p">(</span><span class="n">CoolingOffPeriodOver</span> <span class="n">timeout</span><span class="p">)</span>
    <span class="p">{</span>
        <span class="n">MarkAsComplete</span><span class="p">();</span>
    <span class="p">}</span>   
<span class="p">}</span>
</pre></div>
<p>Now what does this Handler/Saga look like? Its got state of its own, its responding to events, its got a core responsibility to fulfill, i.e. refund. Looks like a domain object to me. It is created, goes through a set number of states, and comes to a final resting point.  This for me has been the turning point with Event driven development. To understand how domain driven design ties into event driven development. </p>

<p>You might be thinking at this stage, all said and done, with all this pseudo code, there&#39;s tons and tons of infrastructure code to write to have such constructs that capture non trivial requirements with very little code, and have no infrastructure noise.</p>

<p>There is none to write, nada. I have had the joy of writing production apps with exactly the code I showed above for some seriously complex requirements. What framework do I use? NServiceBus.  </p>

<p>So hopefully with this long post I have explained to you what event driven architecture looks like, what concepts are at play, how DDD ties into it, and NServiceBus helps bring all that together in a way that it delivers fantastic value yet stays completely out of your way.</p>
]]></content:encoded>
      </item>
  </channel>
</rss>