<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>Macto</title>
        <link>http://ayende.com/Blog/category/556.aspx</link>
        <description>Macto</description>
        <language>en-US</language>
        <copyright>Ayende Rahien</copyright>
        <managingEditor>Ayende@ayende.com</managingEditor>
        <generator>Subtext Version 2.0.0.0</generator>
        <item>
            <title>Macto, Authorization decisions</title>
            <link>http://ayende.com/Blog/archive/2009/07/31/macto-authorization-decisions.aspx</link>
            <description>&lt;p&gt;&lt;a href="http://ayende.com/Blog/images/ayende_com/Blog/WindowsLiveWriter/MactoAuthorizationdecisions_10E82/image_4.png"&gt;&lt;img title="image" style="border-right: 0px; border-top: 0px; display: inline; margin-left: 0px; border-left: 0px; margin-right: 0px; border-bottom: 0px" height="193" alt="image" src="http://ayende.com/Blog/images/ayende_com/Blog/WindowsLiveWriter/MactoAuthorizationdecisions_10E82/image_thumb_1.png" width="210" align="right" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p /&gt;  &lt;p&gt;Authorization is one of the few ubiquitous requirements, you are going to have to handle them in pretty much every system that you are going to build.&lt;/p&gt;  &lt;p&gt;The users are the staff, and the securables are the inmates. The problem is that we have fairly different authorization requirements for different parts of the system.&lt;/p&gt;  &lt;p&gt;For example, any authenticated user can lookup pretty much any inmate’s data (except for medical records, of course), but changing release date is something that only Legal can do. Only the staff on the enclosure that the inmate is located in can Sign Out the inmate. Actually releasing an inmate requires Legal &lt;em&gt;and&lt;/em&gt; On Duty Officer approval, etc.&lt;/p&gt;  &lt;p&gt;However, during weekends, the on duty staff assume responsibility for the entire prison. That is, an officer from enclosure C can Sign Out an inmate from enclosure A if that officer is the on duty officer. &lt;/p&gt;  &lt;p&gt;There are a few more complications, but we will ignore them for now. One thing that is fairly clear, we have fairly complex authorization requirements, and they are &lt;em&gt;different &lt;/em&gt;for each part of the system. For that matter, the way we make security decisions itself is different.&lt;/p&gt;  &lt;p&gt;And since authorization decisions are synchronous (you can make them async, sort of, but at very high cost), performance is a critical concern. This is especially true because there is a strong tendency to call authorization decisions many times.&lt;/p&gt;  &lt;p&gt;Given that, and given the complexity inherit to authorization, I think that we can skip the entire problem entirely by changing the rules of the game.&lt;/p&gt;  &lt;p&gt;Most authentication systems would have you do something like:&lt;/p&gt;  &lt;blockquote&gt;   &lt;pre&gt;auth.IsAllowed(CurrentUser, "&lt;span style="color: #8b0000"&gt;/Inmate/Move&lt;/span&gt;", inmate);&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;p&gt;And rely on the system to do its magic this way. The problem in this manner is that we provide the authorization system with very little information with which it can work. That means that in order to make authorization decisions, the system has to have a way to access other data (such as in what enclosures the current user is in charge of, where the inmate is, what is its status, etc).&lt;/p&gt;

&lt;p&gt;The problem then become more an issue of data retrieval complexity rather than the authorization rules complexity. I think that we can avoid this by designing the system with more flexibility by providing the required data to the authorization system explicitly.&lt;/p&gt;

&lt;p&gt;What do I mean? Well, just take a look:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre&gt;auth.IsAllowed(
	&lt;span style="color: #0000ff"&gt;new&lt;/span&gt; SignOutAuthorization
	{
		OfficerRank = CurrentUser.Rank,
		OfficerRoles = CurrenUser.GetAllCurrentRoles(),
		OfficerEnclosures = CurrentUser.GetEnclosuresUserIsResponibleFor(),
		InmateEnclosure = inmate.Enclosure,
		InmateStatus = inmate.Status,
	}
);&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;p&gt;In other words, we are explicitly providing the authorization system with all the data that it needs for a particular task. That means, in turn, that we can now execute the authorization decision completely locally, without having to go somewhere to fetch the data. It also open the option of using a DSL to build the authorization rules, which will make things more dynamic and easier to work with. &lt;/p&gt;&lt;img src="http://ayende.com/Blog/aggbug/11004.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Ayende Rahien</dc:creator>
            <guid>http://ayende.com/Blog/archive/2009/07/31/macto-authorization-decisions.aspx</guid>
            <pubDate>Fri, 31 Jul 2009 09:15:00 GMT</pubDate>
            <comments>http://ayende.com/Blog/archive/2009/07/31/macto-authorization-decisions.aspx#feedback</comments>
            <slash:comments>34</slash:comments>
            <wfw:commentRss>http://ayende.com/Blog/comments/commentRss/11004.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Macto, defining Centralized Service, Distributed Service and Localized Component</title>
            <link>http://ayende.com/Blog/archive/2009/07/30/macto-defining-centralized-service-distributed-service-and-localized-component.aspx</link>
            <description>&lt;p&gt;I lately come into the conclusion that I need a few new terms to describe a few common ways to talk about the way that I structure different components in my applications.&lt;/p&gt;  &lt;p&gt;Those are Centralized Service, Distributed Service and Localized Component. Mostly, I use them as a way to express the distribution semantics of the item in question.&lt;/p&gt;  &lt;p&gt;As you can probably guess, I am using the term service to refer to something that we make remote calls to, while I am using the term component to refer to something that is running locally.&lt;/p&gt;  &lt;p&gt;Centralized Service is probably the classic example of a web service. It is a server that is running somewhere to which we make remote calls to. As far as the system is built, there is only one such server. It may be implemented with clustering or load balancing, but logically (and quite often, physically), it is a single server that is processing requests. This is probably the easiest model to work with, since it more or less remove the entire question of concurrency conflicts from the system. Internally, the Centralized Service is using transactions or locks to ensure coherency in the face of concurrency.&lt;/p&gt;  &lt;p&gt;Distributed Service is a built upfront to run on a set of server, and the need to handle concurrency conflicts is built into the design of the system. That may be done using sharding, Paxos or other methods. Usually, we build Distributed Service for very high scalability / reliability cases, since it tend to be the more complex solution. An example of a Distributed Service would be DNS, where we explicitly design the system to be resilient to failure, but accept the more complex concurrency issues (slow updates).&lt;/p&gt;  &lt;p&gt;Localized Component is a solution to the chatty interface problem. There are quite a few scenarios where we need to make calls to a separated subsystem, but the cost of network traffic completely outweigh the cost of actually performing the operation on the other side. In this case, we may switch from a Centralized Service to a Localized Component. What this means is that instead of executing the operation on the other side, we perform it locally.&lt;/p&gt;  &lt;p&gt;In practice, this means that we need to design our system in a way that any data that we would like to have is structured in such a way that it can be brought locally or retrieved very cheaply. An example of such a system appears &lt;a href="http://ayende.com/Blog/archive/2009/02/09/the-cost-of-messaging.aspx"&gt;in this post&lt;/a&gt;, although that is a fairly complex one. A more common situation is a component that deals with a set of rule, and we simply need to get the rule from the rule repository and execute it locally.&lt;/p&gt;  &lt;p&gt;Another alternative for Localized Components is to structure it in such a way that retrieving and persisting the data is cheap, and processing it is done on locally. That way, the sharing of the data and the actual processing of the data are two distinct issues, which can be resolved separately. A common issue that needs to be resolved with Localized Components is consistency, if the component allow writes, how do other instances of the component, running on different machine get notified about it.&lt;/p&gt;  &lt;p&gt;I tend to avoid Distributed Services in favor of Centralized Services and Localized Components, which tend to be easier to work with. It is also easier to lean on existing infrastructure then write an implementation from scratch. For example, I am using Rhino DHT (which I consider to be a Distributed Service) to handle a lot of the complexity inherit to one of those.&lt;/p&gt;&lt;img src="http://ayende.com/Blog/aggbug/11003.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Ayende Rahien</dc:creator>
            <guid>http://ayende.com/Blog/archive/2009/07/30/macto-defining-centralized-service-distributed-service-and-localized-component.aspx</guid>
            <pubDate>Thu, 30 Jul 2009 14:00:00 GMT</pubDate>
            <comments>http://ayende.com/Blog/archive/2009/07/30/macto-defining-centralized-service-distributed-service-and-localized-component.aspx#feedback</comments>
            <slash:comments>3</slash:comments>
            <wfw:commentRss>http://ayende.com/Blog/comments/commentRss/11003.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Macto, a module features spec sheet for authentication</title>
            <link>http://ayende.com/Blog/archive/2009/07/29/macto-a-module-features-spec-sheet-for-authentication.aspx</link>
            <description>&lt;p&gt;&lt;a href="http://ayende.com/Blog/images/ayende_com/Blog/WindowsLiveWriter/Mactoamodulefeaturesspecsheetforauthenti_EB57/image_2.png"&gt;&lt;img title="image" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; margin-left: 0px; margin-right: 0px; border-right-width: 0px" height="318" alt="image" src="http://ayende.com/Blog/images/ayende_com/Blog/WindowsLiveWriter/Mactoamodulefeaturesspecsheetforauthenti_EB57/image_thumb.png" width="256" align="right" border="0" /&gt;&lt;/a&gt;I am going to talk about a few ways of trying to organize a project, mostly as a way to lay out the high level requirements for a feature or a module. &lt;/p&gt;  &lt;p&gt;I consider filling in one of those to be the act of actually sitting down and thinking about the concrete design of the system. It is not final design, and it is not set in stone, but in general it forces me to think about things in a structured way.&lt;/p&gt;  &lt;p&gt;It is not a very hard to do, so let us try to do this for the authentication part of the application. Authentication itself is a fairly simple task. In real corporate environment, I’ll probably need integration with Active Directory, but I think that we can do with simple username &amp;amp; pass in the sample.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Module:&lt;/strong&gt; Authentication&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Tasks: &lt;/strong&gt;Authenticate users using name/pass combination&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Integration: &lt;/strong&gt;Publish notifications for changes to users&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Scaling constraints: &lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Up to 100,000 users, with several million authentication calls per day.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Physical layout:&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Since the system need to handle small amount of users, we have to separate deployment options, Centralized Service* and Localized Component*. Both options are going to be developed, to show both options.&lt;/p&gt;  &lt;table cellspacing="0" cellpadding="2" border="0"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top"&gt;         &lt;p align="center"&gt;&lt;b&gt;Feature&lt;/b&gt;&lt;b /&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top"&gt;         &lt;p align="center"&gt;&lt;b&gt;Description&lt;/b&gt;&lt;b /&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top"&gt;         &lt;p align="center"&gt;&lt;b&gt;SLA &lt;/b&gt;&lt;b /&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top"&gt;         &lt;p&gt;&lt;b&gt;authenticate user&lt;/b&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top"&gt;         &lt;p&gt;Based on name &amp;amp; password            &lt;br /&gt;Lock a user if after 5 failed logins&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top"&gt;         &lt;p&gt;less than 50 ms per authentication request 99.9% of the time, for 100 requests per second per server&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top"&gt;         &lt;p&gt;&lt;b&gt;create new user&lt;/b&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top"&gt;         &lt;p&gt;User name, password, email&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top"&gt;         &lt;p&gt;less than 250 ms per change password request 99.9% of the time, for 10 requests per second globally&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top"&gt;         &lt;p&gt;&lt;b&gt;change password&lt;/b&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top"&gt; &lt;/td&gt;        &lt;td valign="top"&gt;         &lt;p&gt;less than 250 ms per change password request 99.9% of the time, for 10 requests per second globally&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top"&gt;         &lt;p&gt;&lt;b&gt;reset password&lt;/b&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top"&gt; &lt;/td&gt;        &lt;td valign="top"&gt;         &lt;p&gt;less than 250 ms per change password request 99.9% of the time, for 10 requests per second globally&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top"&gt;         &lt;p&gt;&lt;b&gt;enable / disable user&lt;/b&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top"&gt;         &lt;p&gt;disable / enable the option to login to the system&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top"&gt;         &lt;p&gt;less than 250 ms per change password request 99.9% of the time, for 10 requests per second globally&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;You should note that while I don’t expect to have that many users in the system, or have to handle that load, for the purpose of the sample, I think it would be interesting to see how to deal with such requirements.&lt;/p&gt;  &lt;p&gt;The implications of this spec sheet is that the system can handle about 8.5 million authentication requests per day, and about a 3/4 of a million user modifications requests.&lt;/p&gt;  &lt;p&gt;There are a few important things to observe about the spec sheet. It is extremely high level, it provide no actual implementation semantics but it does provide a few key data items. First, we know what the expected data size and load are. Second, we know what the &lt;em&gt;SLAs&lt;/em&gt; for those are.&lt;/p&gt;  &lt;p&gt;* Centralized Service &amp;amp; Localized Component are two topics that I’ll talk about in the future.&lt;/p&gt;&lt;img src="http://ayende.com/Blog/aggbug/11002.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Ayende Rahien</dc:creator>
            <guid>http://ayende.com/Blog/archive/2009/07/29/macto-a-module-features-spec-sheet-for-authentication.aspx</guid>
            <pubDate>Wed, 29 Jul 2009 14:00:00 GMT</pubDate>
            <comments>http://ayende.com/Blog/archive/2009/07/29/macto-a-module-features-spec-sheet-for-authentication.aspx#feedback</comments>
            <slash:comments>13</slash:comments>
            <wfw:commentRss>http://ayende.com/Blog/comments/commentRss/11002.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Macto, or How To Build a Prison</title>
            <link>http://ayende.com/Blog/archive/2009/07/27/macto-or-how-to-build-a-prison.aspx</link>
            <description>&lt;p&gt;&lt;a href="http://ayende.com/Blog/images/ayende_com/Blog/WindowsLiveWriter/MactoorHowToBuildaPrison_147A4/image_2.png"&gt;&lt;img title="image" style="border-right: 0px; border-top: 0px; display: inline; margin-left: 0px; border-left: 0px; margin-right: 0px; border-bottom: 0px" height="400" alt="image" src="http://ayende.com/Blog/images/ayende_com/Blog/WindowsLiveWriter/MactoorHowToBuildaPrison_147A4/image_thumb.png" width="373" align="right" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;The sample application that I am going to build is going to be a prison management application. I am going to take this post as a chance to talk about it a bit, discuss the domain and then I’ll talk about the overall architecture in more details.&lt;/p&gt;  &lt;p&gt;The domain of a prison is actually fairly simple, you have an inmate, and the sole requirement is that you would keep him (it tend to be overwhelmingly him, rather than her) in lawful custody.&lt;/p&gt;  &lt;p&gt;The term lawful custody has a lot of implications, which are, in more or less their order of importance:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;The inmate is &lt;em&gt;in&lt;/em&gt; custody, that is, he didn’t manage to run away.&lt;/li&gt;    &lt;li&gt;Custody is &lt;em&gt;lawful&lt;/em&gt;, that is, you have legal authorization to keep him in jail. Usually that means an order by a judge, or for the first 24 hours, by a police officer.&lt;/li&gt;    &lt;li&gt;Lawful custody itself means that you:&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;keep the inmate fed&lt;/li&gt;      &lt;li&gt;in reasonable conditions (sleeping quarters, sanitation, space)&lt;/li&gt;      &lt;li&gt;access to medical facilities. Indeed, in most prisons the inmates get &lt;em&gt;better&lt;/em&gt; health care, especially for emergencies, than the people living in most big cities.&lt;/li&gt;      &lt;li&gt;ability to communicate with lawyers and family&lt;/li&gt;   &lt;/ul&gt; &lt;/ul&gt;  &lt;p&gt;The devil, however, is in the details. I am pretty sure that I could sit down and write about 250 pages of high level spec for things that are absolutely required for a system that run a prison and &lt;em&gt;still&lt;/em&gt; not get everything right.&lt;/p&gt;  &lt;p&gt;In practice, at least in the prisons I served at, we did stuff using paper, some VB6 apps &amp;amp; Access, and in one memorable occasion, an entire set of small prisons where running on what amounted to a full blown application written using Excel macros.&lt;/p&gt;  &lt;p&gt;Anyway, what I think that I’ll do is start with a few modules in the system, not try to build a full blown system.&lt;/p&gt;  &lt;p&gt;The modules that I‘ll start with would be:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Staff – Managing the prison’s staff. This is mostly for authentication &amp;amp; authorization for now.&lt;/li&gt;    &lt;li&gt;Roster – Managing the roster of the prisoners, recording Countings, etc.&lt;/li&gt;    &lt;li&gt;Legal – Managing the legal side of the prisoners, ensuring that there are authorizations for all the inmates, court dates, notifications, etc.&lt;/li&gt;    &lt;li&gt;Escort – Responsible for actually taking the inmates out for court, medical evacs, releasing inmates, etc.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;That is enough for now, for that matter, it is a huge workload already, but that is about the only way in which I can actually have a chance to show a big enough system and the interactions between all the parts.&lt;/p&gt;&lt;img src="http://ayende.com/Blog/aggbug/11000.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Ayende Rahien</dc:creator>
            <guid>http://ayende.com/Blog/archive/2009/07/27/macto-or-how-to-build-a-prison.aspx</guid>
            <pubDate>Mon, 27 Jul 2009 19:36:00 GMT</pubDate>
            <comments>http://ayende.com/Blog/archive/2009/07/27/macto-or-how-to-build-a-prison.aspx#feedback</comments>
            <slash:comments>12</slash:comments>
            <wfw:commentRss>http://ayende.com/Blog/comments/commentRss/11000.aspx</wfw:commentRss>
        </item>
        <item>
            <title>More on Macto</title>
            <link>http://ayende.com/Blog/archive/2009/07/26/more-on-macto.aspx</link>
            <description>&lt;p&gt;Looking at the &lt;a href="http://nhprof.uservoice.com/pages/24298-the-macto-sample"&gt;responses&lt;/a&gt; that I got, I think that there is some basic misunderstanding about the goal of the sample. Some people seems to want this to be a usable product, some even went ahead and specified some… interesting requirements. &lt;/p&gt;  &lt;p&gt;Unlike Storefront, I don’t intend to create something that would be a useful component to take and use, for the simple reason that I don’t think that it would allow to show anything really interesting. Any generic component or system has to either make too much assumptions (constrained) or not enough (open ended). I don’t care to have to hand wave things too much.&lt;/p&gt;  &lt;p&gt;Given that I am a domain expert on exactly two things, and that I am not going to create Yet Another Bug Tracking Application, I think that it is fairly obvious what I have to build.&lt;/p&gt;  &lt;p&gt;Macto is going to be a prison management system. &lt;/p&gt;  &lt;p&gt;I am going to use it to demonstrate several topics that I have been dealing with lately, among them the concepts &amp;amp; features architecture and how to build scalable systems.&lt;/p&gt;  &lt;p&gt;I’ll let you stew on that and will post more details about Macto tomorrow.&lt;/p&gt;&lt;img src="http://ayende.com/Blog/aggbug/10999.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Ayende Rahien</dc:creator>
            <guid>http://ayende.com/Blog/archive/2009/07/26/more-on-macto.aspx</guid>
            <pubDate>Sun, 26 Jul 2009 19:36:05 GMT</pubDate>
            <comments>http://ayende.com/Blog/archive/2009/07/26/more-on-macto.aspx#feedback</comments>
            <slash:comments>12</slash:comments>
            <wfw:commentRss>http://ayende.com/Blog/comments/commentRss/10999.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Macto: An end to end sample</title>
            <link>http://ayende.com/Blog/archive/2009/07/25/macto-an-end-to-end-sample.aspx</link>
            <description>&lt;p&gt;It looks like what people would really like to see is an &lt;a href="http://nhprof.uservoice.com/pages/24233-new-posts-suggestions/suggestions/267655-full-end-to-end-sample"&gt;end to end sample&lt;/a&gt; of all the things that I have been talking about lately.&lt;/p&gt;  &lt;p&gt;The problem with doing that is the scope that we are talking about here, it is pretty big, and there are some interconnected parts that would be hard to look at in isolation. To make things a little bit more interesting, building a “best practice” application is dependent on far too many variables. &lt;/p&gt;  &lt;p&gt;Given all of that, I decided that I might as well copy a good idea and try to emulate &lt;a href="http://blog.wekeroad.com/"&gt;Rob Conery&lt;/a&gt;’s Storefront series of webcasts. What I absolutely &lt;em&gt;refuse&lt;/em&gt; to do, however, is to create Yet Another Online Shop.&lt;/p&gt;  &lt;p&gt;Hence, I have another forum, dedicated to &lt;a href="http://nhprof.uservoice.com/pages/24298-the-macto-sample"&gt;this specific task&lt;/a&gt;, where you can discuss what you want to see.  We need to decide what is the application, what are the requirements, etc.&lt;/p&gt;  &lt;p&gt;Please have the conversation &lt;a href="http://nhprof.uservoice.com/pages/24298-the-macto-sample"&gt;in the forum&lt;/a&gt;, which would make it easier to track things.&lt;/p&gt;  &lt;p&gt;I think that I can promise at least two or three webcasts to come out of it, including the full source code.&lt;/p&gt;&lt;img src="http://ayende.com/Blog/aggbug/10997.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Ayende Rahien</dc:creator>
            <guid>http://ayende.com/Blog/archive/2009/07/25/macto-an-end-to-end-sample.aspx</guid>
            <pubDate>Sat, 25 Jul 2009 16:42:22 GMT</pubDate>
            <comments>http://ayende.com/Blog/archive/2009/07/25/macto-an-end-to-end-sample.aspx#feedback</comments>
            <slash:comments>6</slash:comments>
            <wfw:commentRss>http://ayende.com/Blog/comments/commentRss/10997.aspx</wfw:commentRss>
        </item>
    </channel>
</rss>