<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="wordpress/2.3.3" -->
<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/"
	>

<channel>
	<title>Guyvdb.info</title>
	<link>http://www.guyvdb.info</link>
	<description>A Journal of Guy van den Berg</description>
	<pubDate>Sat, 12 Apr 2008 07:45:16 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.3.3</generator>
	<language>en</language>
			<item>
		<title>Serialization and Materialization</title>
		<link>http://www.guyvdb.info/ruby/serialization-and-materialization/</link>
		<comments>http://www.guyvdb.info/ruby/serialization-and-materialization/#comments</comments>
		<pubDate>Fri, 11 Apr 2008 14:31:38 +0000</pubDate>
		<dc:creator>guyvdb</dc:creator>
		
		<category><![CDATA[Ruby]]></category>

		<category><![CDATA[JSON]]></category>

		<category><![CDATA[Serialization]]></category>

		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://www.guyvdb.info/ruby/serialization-and-materialization/</guid>
		<description><![CDATA[I want to take a serious look at serialization and materialization in the coming days. I have some ideas on using contexts for this, similar to what has been done in validations and lazy loading.



&#160;


&#160; class Invoice


&#160; &#160; include DataMapper::Resource


&#160; &#160; include DataMapper::Serialization


&#160; &#160; property :no, String, :serialize =&#62; &#91;:invoice_detail,:invoice_summary&#93;


&#160; &#160; property :customer, String, :serialize [...]]]></description>
			<content:encoded><![CDATA[<p>I want to take a serious look at serialization and materialization in the coming days. I have some ideas on using contexts for this, similar to what has been done in validations and lazy loading.</p>
<div class="dean_ch" style="white-space: nowrap;">
<ol>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">class</span> Invoice</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">include</span> <span class="re2">DataMapper::Resource</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">include</span> <span class="re2">DataMapper::Serialization</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; property <span class="re3">:no</span>, <span class="kw3">String</span>, <span class="re3">:serialize</span> =&gt; <span class="br0">&#91;</span><span class="re3">:invoice_detail</span>,:invoice_summary<span class="br0">&#93;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; property <span class="re3">:customer</span>, <span class="kw3">String</span>, <span class="re3">:serialize</span> =&gt; <span class="br0">&#91;</span><span class="re3">:invoice_detail</span>,:invoice_summary<span class="br0">&#93;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; has <span class="re3">:line_items</span>, <span class="nu0">0</span>..<span class="me1">n</span>, <span class="re3">:serialize</span> =&gt; <span class="br0">&#91;</span><span class="re3">:invoice_detail</span><span class="br0">&#93;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">end</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">class</span> LineItem</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; ..</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; ..</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="me1">property</span> <span class="re3">:description</span>, <span class="kw3">String</span>, <span class="re3">:serialize</span> =&gt; <span class="br0">&#91;</span><span class="re3">:line_item_detail</span>, <span class="re3">:invoice_detail</span><span class="br0">&#93;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; <span class="kw1">end</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;..</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;..</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="me1">Invoice</span>.<span class="me1">all</span><span class="br0">&#40;</span>Invoice.<span class="me1">customer</span>.<span class="me1">name</span> =&gt; <span class="st0">&quot;Joe&#8217;s Food&quot;</span><span class="br0">&#41;</span>.<span class="me1">to_xml</span><span class="br0">&#40;</span><span class="re3">:invoice_summary</span><span class="br0">&#41;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp;Invoice<span class="br0">&#91;</span><span class="nu0">23</span><span class="br0">&#93;</span>.<span class="me1">to_json</span><span class="br0">&#40;</span><span class="re3">:invoice_detail</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
</ol>
</div>
<p><a href="http://www.yehudakatz.com/">Wycats</a> had interesting ideas on how to deal with type information about the model. He had a dislike to something such as this:</p>
<div class="dean_ch" style="white-space: nowrap;">
<ol>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="sc3"><span class="re1">&lt;zoo<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;name</span> <span class="re0">type</span>=<span class="st0">&quot;string&quot;</span><span class="re2">&gt;</span></span>Lake Side Zoo<span class="sc3"><span class="re1">&lt;/name<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="sc3"><span class="re1">&lt;/zoo<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
</ol>
</div>
<p>After listening to his proposal, I agree. He suggests that we have the model generate a W3C XML Schema to represent its type information. We can also generate a <a href="http://www.json.com/json-schema-proposal/">json</a> version of this.</p>
<p>Another idea is that of pluggable serializers. We could have something like:</p>
<div class="dean_ch" style="white-space: nowrap;">
<ol>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; to_xml_serializer = <span class="re2">DataMapper::Serializers::StandardXMLSerializer</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
</ol>
</div>
<p>Wycats is working on a Lazlo Rest server. Check it out at <a href="http://wiki.openlaszlo.org/Laszlo_on_REST">http://wiki.openlaszlo.org/Laszlo_on_REST</a></p>
<p>Expect to hear more about this in the next few days.</p>
<p>– until next time –</p>
]]></content:encoded>
			<wfw:commentRss>http://www.guyvdb.info/ruby/serialization-and-materialization/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Builing an ACL Plugin for DataMapper - Part II</title>
		<link>http://www.guyvdb.info/ruby/datamapper-ruby/builing-an-acl-plugin-for-datamapper-part-ii/</link>
		<comments>http://www.guyvdb.info/ruby/datamapper-ruby/builing-an-acl-plugin-for-datamapper-part-ii/#comments</comments>
		<pubDate>Wed, 02 Apr 2008 10:10:26 +0000</pubDate>
		<dc:creator>guyvdb</dc:creator>
		
		<category><![CDATA[DataMapper]]></category>

		<category><![CDATA[ACL]]></category>

		<category><![CDATA[Authorization]]></category>

		<category><![CDATA[Security]]></category>

		<guid isPermaLink="false">http://www.guyvdb.info/ruby/datamapper-ruby/builing-an-acl-plugin-for-datamapper-part-ii/</guid>
		<description><![CDATA[Last time I wrote about the internals of a proposed ACL plugin. Today I want to focus on the model. How would you define the ACL on the model? What additional methods will be made available on the model? 
We should consider the following items:

How to set up a default of which resource (self or [...]]]></description>
			<content:encoded><![CDATA[<p>Last time I <a href="http://www.guyvdb.info/ruby/datamapper-ruby/builing-an-access-control-list-plugin-for-datamapper-part-i">wrote</a> about the internals of a proposed ACL plugin. Today I want to focus on the model. How would you define the ACL on the model? What additional methods will be made available on the model? </p>
<p>We should consider the following items:</p>
<ul>
<li>How to set up a default of which resource (self or container) the ACL token is attached to.</li>
<li>How to override this default on a per ACL token instance basis. I.e. All on self except READ on container.</li>
<li>How to specify the default policy when no ACL is applied to CRUD methods. I.e. GRANT ALL or DENY ALL</li>
<li>How will CRUD method ACL tokens be specified</li>
<li>How will additional ACL tokens be specified.</li>
<li>How will we deal with the CREATE ACL token. It will have to live on the class. There is also the case where resources are &#8220;owned&#8221;. CREATE would then live on the owner instance.</li>
<li>How will we integrate into the finders, and other CRUD methods.</li>
<li>What custom methods will we add to the model.</li>
<li>Would we want multiple ACL tokens per action? For example reading a resource is allowed if you have MANAGER_READ or EMPLOYEE_READ tokens. (Kind of a silly example, but you get what i mean.) If so, would we want to configure OR&#8217;ing or AND&#8217;ing the tokens to get a result.
</ul>
<p>Enough talk! Lets give it a bash. </p>
<div class="dean_ch" style="white-space: nowrap;">
<ol>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">class</span> Organisation</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">include</span> <span class="re2">DataMapper::Resource</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">include</span> <span class="re2">SuperDuper::ACL</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; property <span class="re3">:id</span>, <span class="kw4">Fixnum</span>, <span class="re3">:serial</span> =&gt; <span class="kw2">true</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; property <span class="re3">:name</span>, <span class="kw3">String</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="co1"># Start the SuperDuper::ACL configuration</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; acl_grant_on <span class="re3">:organisation</span> &nbsp; <span class="co1"># When granting store token on self</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; acl_deny_all &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># If not explicidly defined, DENY</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="co1"># Define the tokens we will grant/revoke and protect with</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; acl_create &nbsp; <span class="re3">:create</span>, <span class="re3">:grant_on</span> =&gt; <span class="re3">:class</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; acl_read &nbsp; &nbsp; <span class="re3">:read</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; acl_update &nbsp; <span class="re3">:update</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; acl_delete &nbsp; <span class="re3">:delete</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="co1"># Define a couple of custom tokens</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; acl_custom &nbsp; <span class="re3">:liquidate_assets</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; acl_custom &nbsp; <span class="re3">:throw_party</span> &nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">end</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
</ol>
</div>
<p>Lets look at the code above, starting from line 10, <em>acl_grant_on</em> would define where we store the tokens. In this case tokens are stored on the instance. This is one area I want more clarity on. If we had a contact that was contained by an organisation and we were storing the token on the container, what would the syntax look like?</p>
<div class="dean_ch" style="white-space: nowrap;">
<ol>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">class</span> Contact</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">include</span> <span class="re2">DataMapper::Resource</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">include</span> <span class="re2">SuperDuper::ACL</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; property <span class="re3">:id</span>, <span class="kw4">Fixnum</span>, <span class="re3">:serial</span> =&gt; <span class="kw2">true</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; property <span class="re3">:name</span>, <span class="kw3">String</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; property <span class="re3">:organisation_id</span>, <span class="kw4">Fixnum</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li2">
<div class="de2">&nbsp; belongs_to <span class="re3">:organisation</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="co1"># Start the SuperDuper::ACL config</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; acl_grant_on <span class="st0">&#8216;contact.organisation&#8217;</span> &nbsp; <span class="co1"># looking for a good way to do this.</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">end</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
</ol>
</div>
<p>On a side note, it is likley that the location of ACL token storage would have to be the instance or an association in the instances association chain. I don&#8217;t see being able to store it on some arbitrary object instance.</p>
<p>Moving to line 11 of the Organisation code, <em>acl_deny_all</em> simply says if a CRUD methods ACL token is not explicitly defined, DENY it. The opposite to this would be <em>acl_allow_all</em> which would ALLOW a CRUD method without an ACL token defined. It might be smart to default the resource to <em>acl_deny_all</em> so that you would only need to specify <em>acl_allow_all</em> if you where not happy with the default.</p>
<p>Lines 14-17 set a permission token for each of the CRUD methods. Line 14 shows the overriding of <em>acl_grant_on</em> for a individual ACL instance. In all likelihood acl_create would default to :class and you would not have the include the :grant_on option. An interesting idea on create might be to allow either :class or a named parameter of the constructor to be used. For example:</p>
<div class="dean_ch" style="white-space: nowrap;">
<ol>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">class</span> Organisation</div>
</li>
<li class="li1">
<div class="de1">&nbsp; ..</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="me1">acl_create</span> &nbsp; <span class="re3">:create</span>, <span class="re3">:grant_on</span> =&gt; <span class="re3">:owner</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; ..</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">def</span> initialize<span class="br0">&#40;</span>user,owner,opts=<span class="br0">&#123;</span><span class="br0">&#125;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; ..</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">end</span> &nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">end</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
</ol>
</div>
<p>At this stage I have no idea if/how to intergrate with the constructor. I will ask around! This also needs more thought. Does the above mean when I grant the ACL token to some user on an instance, the token is stored on the instance&#8217;s owner (yes), when in fact what I was trying to convey is that before you can create an org with instance as owner, you must have CREATE token on instance (if that makes scene).</p>
<p>Finally, at line 20-21 on the organisation code (top), <em>acl_custom</em> adds a couple of custom ACL tokens to the resource. These are obviously used to determine if the user can sell all the organisations assets and throw a big party with the proceeds.</p>
<p>Well this has turning into a rather long post. I haven&#8217;t gotten into the finder &amp; other CRUD methods. They will have to have to wait for a part III.</p>
<p>– until next time –</p>
]]></content:encoded>
			<wfw:commentRss>http://www.guyvdb.info/ruby/datamapper-ruby/builing-an-acl-plugin-for-datamapper-part-ii/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Builing an Access Control List Plugin for DataMapper - Part I</title>
		<link>http://www.guyvdb.info/ruby/datamapper-ruby/builing-an-access-control-list-plugin-for-datamapper-part-i/</link>
		<comments>http://www.guyvdb.info/ruby/datamapper-ruby/builing-an-access-control-list-plugin-for-datamapper-part-i/#comments</comments>
		<pubDate>Tue, 01 Apr 2008 19:50:48 +0000</pubDate>
		<dc:creator>guyvdb</dc:creator>
		
		<category><![CDATA[DataMapper]]></category>

		<guid isPermaLink="false">http://www.guyvdb.info/ruby/datamapper-ruby/builing-an-access-control-list-plugin-for-datamapper-part-i/</guid>
		<description><![CDATA[What about the idea of transparently integrating an access control list into the model via a plugin. Having domain model instance based security is a requirement for some of the projects I work on. The basic idea is to have a GrantedAuthority resource something like:



&#160;


&#160; class GrantedAuthority


&#160; &#160; include DataMapper:Resource


&#160; &#160; property :id, Fixnum, :serial [...]]]></description>
			<content:encoded><![CDATA[<p>What about the idea of transparently integrating an access control list into the model via a plugin. Having domain model instance based security is a requirement for some of the projects I work on. The basic idea is to have a GrantedAuthority resource something like:</p>
<div class="dean_ch" style="white-space: nowrap;">
<ol>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">class</span> GrantedAuthority</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">include</span> DataMapper:Resource</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; property <span class="re3">:id</span>, <span class="kw4">Fixnum</span>, <span class="re3">:serial</span> =&gt; <span class="kw2">true</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; property <span class="re3">:user_id</span>, <span class="kw4">Fixnum</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; property <span class="re3">:resource_id</span>, <span class="kw4">Fixnum</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; property <span class="re3">:resource_type</span>, <span class="kw3">String</span> &nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; property <span class="re3">:token</span>, <span class="kw3">String</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">end</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
</ol>
</div>
<p>Then you would modify/shadow some of the class &amp; instance methods on the resource that you are protecting, including:</p>
<ul>
<li> Resource class methods
<ul>
<li>Resource#first / Resource#secure_first / Resource#first! / etc</li>
<li>Resource#all</li>
<li>Resource#get</li>
<li>Resource#[]</li>
<li>Resource#create</li>
</ul>
</li>
<li> Resource instance methods
<ul>
<li>resource#save</li>
<li>resource#destroy</li>
</ul>
</li>
</ul>
<p>This would allow something along the lines of </p>
<div class="dean_ch" style="white-space: nowrap;">
<ol>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="re1">@contacts</span> = Contact.<span class="me1">all</span>!<span class="br0">&#40;</span>user,<span class="st0">&#8216;READ&#8217;</span>, <span class="re3">:first_name</span>.<span class="me1">like</span> =&gt; <span class="st0">&#8216;J%&#8217;</span>, &#8230; <span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="co1"># perhaps the READ token is defined on the Resource</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; <span class="co1"># and you don&#8217;t need to specify it here</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="re1">@contacts</span> = Contact.<span class="me1">all</span>!<span class="br0">&#40;</span>user, <span class="re3">:first_name</span>.<span class="me1">like</span> =&gt; <span class="st0">&#8216;J%&#8217;</span>, &#8230; <span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
</ol>
</div>
<p>The model should &#8220;know&#8221; how to create the necessary joins to apply the ACL</p>
<div class="dean_ch" style="white-space: nowrap;">
<ol>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="co1">&#8211; #all SQL</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">SELECT</span> * <span class="kw1">FROM</span> contacts</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; <span class="co1">&#8211; becomes</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">SELECT</span> * <span class="kw1">FROM</span> contacts <span class="kw1">WHERE</span> <span class="br0">&#40;</span>id <span class="kw1">IN</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#40;</span><span class="kw1">SELECT</span> resource_id </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">FROM</span> granted_authorities </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">WHERE</span> user_id = ? <span class="kw1">AND</span> token = ? <span class="kw1">AND</span> resource_type = ?</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
</ol>
</div>
<p>This has been fairly simple so far. Lets allow for a more complex case of the resource being queried not being the resource that has the entry in the granted_authorities table. For example, an OrganisationalUnit that contains a number of Contact(s) and the right to &#8216;READ_CONTACT&#8217; is granted on the OrganisationalUnit. We would need to produce something like this:</p>
<div class="dean_ch" style="white-space: nowrap;">
<ol>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">SELECT</span> contacts.*, organisational_units.id <span class="kw1">FROM</span> contacts</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">LEFT</span> <span class="kw1">OUTER</span> <span class="kw1">JOIN</span> organisational_units <span class="kw1">ON</span> organisational_units.id = contacts.id</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">WHERE</span> <span class="br0">&#40;</span>organisational_units.id <span class="kw1">IN</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; <span class="br0">&#40;</span><span class="kw1">SELECT</span> resource_id </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">FROM</span> granted_authorities </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">WHERE</span> user_id = ? <span class="kw1">AND</span> token = ? <span class="kw1">AND</span> resource_type = ?</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#41;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
</ol>
</div>
<p>What does dm-core need to provided for us to build the plugin? We need to support joins to join in the container objects. Dan Kubb is working on that and should have it pretty soon. We must be able to do sub-selects. This feature was push to after the 1.0 release. Fortunately, it was not so hard to implement. I just pushed the required changes to github. You can now do something like:</p>
<div class="dean_ch" style="white-space: nowrap;">
<ol>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; acl = <span class="re2">DataMapper::Query</span>.<span class="me1">new</span><span class="br0">&#40;</span>Permission, <span class="re3">:user_id</span> =&gt; <span class="nu0">1</span>, <span class="re3">:resource_type</span> =&gt; <span class="st0">&#8216;SailBoat&#8217;</span>, <span class="re3">:token</span> =&gt; <span class="st0">&#8216;READ&#8217;</span>, <span class="re3">:fields</span> =&gt; <span class="br0">&#91;</span><span class="re3">:resource_id</span><span class="br0">&#93;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; query = <span class="re2">DataMapper::Query</span>.<span class="me1">new</span><span class="br0">&#40;</span>SailBoat, <span class="re3">:port</span> =&gt; <span class="st0">&#8216;Cape Town&#8217;</span>,:id =&gt; acl,:captain.<span class="me1">like</span> =&gt; <span class="st0">&#8216;J%&#8217;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; boats = <span class="re1">@adapter</span>.<span class="me1">read_set</span><span class="br0">&#40;</span>repository<span class="br0">&#40;</span><span class="re3">:sqlite3</span><span class="br0">&#41;</span>,query<span class="br0">&#41;</span> &nbsp; &nbsp;</div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
</ol>
</div>
<p>Once I wrap this concept up into a plugin you would do something like:</p>
<div class="dean_ch" style="white-space: nowrap;">
<ol>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; user = get_current_user</div>
</li>
<li class="li1">
<div class="de1">&nbsp; contacts = Contact.<span class="me1">all</span>!<span class="br0">&#40;</span>user,<span class="st0">&#8216;READ&#8217;</span>,:first_name =&gt; <span class="st0">&#8216;john&#8217;</span>,:city.<span class="me1">like</span> =&gt; <span class="st0">&#8216;Jo%&#8217;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; <span class="co1"># or if the token was specified on the Resource</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; contacts = Contact.<span class="me1">all</span>!<span class="br0">&#40;</span>user,:first_name =&gt; <span class="st0">&#8216;john&#8217;</span>,:city.<span class="me1">like</span> =&gt; <span class="st0">&#8216;Jo%&#8217;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
</ol>
</div>
<p>I will write about how you would configure ACL&#8217;s on you model/resource in a part II.</p>
<p>– until next time –</p>
]]></content:encoded>
			<wfw:commentRss>http://www.guyvdb.info/ruby/datamapper-ruby/builing-an-access-control-list-plugin-for-datamapper-part-i/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Lazy Loading Properties in DataMapper</title>
		<link>http://www.guyvdb.info/ruby/lazy-loading-properties-in-datamapper/</link>
		<comments>http://www.guyvdb.info/ruby/lazy-loading-properties-in-datamapper/#comments</comments>
		<pubDate>Thu, 27 Mar 2008 20:42:43 +0000</pubDate>
		<dc:creator>guyvdb</dc:creator>
		
		<category><![CDATA[DataMapper]]></category>

		<category><![CDATA[Ruby]]></category>

		<category><![CDATA[Lazy Loading]]></category>

		<guid isPermaLink="false">http://www.guyvdb.info/ruby/lazy-loading-properties-in-datamapper/</guid>
		<description><![CDATA[When your web application accesses data in the model, it normally does it in couple of different contexts. You are either listing all available resources in a &#8220;summary&#8221; context, or you are listing the details of a single resource in a &#8220;detailed&#8221; context. I&#8217;m sure you&#8217;ll find cases where this is not true, but for [...]]]></description>
			<content:encoded><![CDATA[<p>When your web application accesses data in the model, it normally does it in couple of different contexts. You are either listing all available resources in a &#8220;summary&#8221; context, or you are listing the details of a single resource in a &#8220;detailed&#8221; context. I&#8217;m sure you&#8217;ll find cases where this is not true, but for the most part it holds true.</p>
<p>Lets take a Contact resource as an example:</p>
<div class="dean_ch" style="white-space: nowrap;">
<ol>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">class</span> Contact</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">include</span> <span class="re2">DataMapper::Resource</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; property <span class="re3">:id</span>, <span class="kw4">Fixnum</span>, <span class="re3">:serial</span> =&gt; <span class="kw2">true</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; property <span class="re3">:display_name</span>, <span class="kw3">String</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; property <span class="re3">:first_name</span>, <span class="kw3">String</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; property <span class="re3">:last_name</span>, <span class="kw3">String</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; property <span class="re3">:work_phone</span>, <span class="kw3">String</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; property <span class="re3">:home_phone</span>, <span class="kw3">String</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; property <span class="re3">:email</span>, <span class="kw3">String</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="co1"># ..</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="co1"># more properites</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="co1"># ..</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; property <span class="re3">:notes_updated</span>, <span class="kw4">DateTime</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; property <span class="re3">:notes_updated_by_id</span>, <span class="kw4">Fixnum</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; property <span class="re3">:notes</span>, <span class="kw3">String</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">end</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
</ol>
</div>
<p>You build a RESTful interface to show your new contact resource. Lets say our interface includes:</p>
<ul>
<li> /contacts</li>
<li>/contacts/1</li>
<li>/contacts/1/notes</li>
</ul>
<p>This gives you 3 contexts for data access (&#8221;summary&#8221;, &#8220;detailed&#8221; and &#8220;notes&#8221;). Every time someone goes to the /contacts URL your ORM retrieves all the data in the contacts table, maps it into Contact instances and returns an array of these instances. Then you do something like this:</p>
<div class="dean_ch" style="white-space: nowrap;">
<ol>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="co1"># In your controller</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="re1">@contacts</span> = Contact.<span class="me1">all</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li2">
<div class="de2">&nbsp; <span class="co1"># And in your view something like</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &lt;% <span class="re1">@contacts</span>.<span class="me1">each</span> <span class="kw1">do</span> |contact| %&gt;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &lt;tr&gt;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &lt;td&gt;&lt;%= contact.<span class="me1">display_name</span> %&gt;&lt;/td&gt;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &lt;/tr&gt;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &lt;% <span class="kw1">end</span> %&gt;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
</ol>
</div>
<p>What a waste! Your ORM loaded  10+ fields from the database. Mapped them to variables in memory and then you only used contact.display_name (maybe contact.id). No problem, your ORM is smart, it can lazy load. So you do something like:</p>
<div class="dean_ch" style="white-space: nowrap;">
<ol>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">class</span> Contact</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">include</span> <span class="re2">DataMapper::Resource</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; property <span class="re3">:id</span>, <span class="kw4">Fixnum</span>, <span class="re3">:serial</span> =&gt; <span class="kw2">true</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; property <span class="re3">:display_name</span>, <span class="kw3">String</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; property <span class="re3">:first_name</span>, <span class="kw3">String</span>, <span class="re3">:lazy</span> =&gt; <span class="kw2">true</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; property <span class="re3">:last_name</span>, <span class="kw3">String</span>, <span class="re3">:lazy</span> =&gt; <span class="kw2">true</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; property <span class="re3">:work_phone</span>, <span class="kw3">String</span>, <span class="re3">:lazy</span> =&gt; <span class="kw2">true</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; property <span class="re3">:home_phone</span>, <span class="kw3">String</span>, <span class="re3">:lazy</span> =&gt; <span class="kw2">true</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; property <span class="re3">:email</span>, <span class="kw3">String</span>, <span class="re3">:lazy</span> =&gt; <span class="kw2">true</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="co1"># ..</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="co1"># more properites</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="co1"># ..</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; property <span class="re3">:notes_updated</span>, <span class="kw4">DateTime</span>, <span class="re3">:lazy</span> =&gt; <span class="kw2">true</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; property <span class="re3">:notes_updated_by_id</span>, <span class="kw4">Fixnum</span>, <span class="re3">:lazy</span> =&gt; <span class="kw2">true</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; property <span class="re3">:notes</span>, <span class="kw3">String</span>, <span class="re3">:lazy</span> =&gt; <span class="kw2">true</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">end</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
</ol>
</div>
<p>That works great. When a user list all your contacts, the ORM only pulls out the id and display_name field. Now a user hits /contacts/1 URL. </p>
<p>The problem is your detailed view is a bit more verbose and outputs many more properties. All the lazy properties are loaded on first access. This means one query per lazy property read. Not great. Whats worse is if another part of your code does a Contact.all() and then iterate over the array accessing lazy properties. </p>
<p>The solution. In the soon to be release 0.9.0 of DataMapper lazy loaded properties are going to have contexts. When you read the first lazy property in a context, all the properties in that context for all the instances are loaded in one query. You can do something like this:</p>
<div class="dean_ch" style="white-space: nowrap;">
<ol>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">class</span> Contact</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">include</span> <span class="re2">DataMapper::Resource</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; property <span class="re3">:id</span>, <span class="kw4">Fixnum</span>, <span class="re3">:serial</span> =&gt; <span class="kw2">true</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; property <span class="re3">:display_name</span>, <span class="kw3">String</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; property <span class="re3">:first_name</span>, <span class="kw3">String</span>, <span class="re3">:lazy</span> =&gt; <span class="br0">&#91;</span><span class="re3">:detailed</span>,:notes<span class="br0">&#93;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; property <span class="re3">:last_name</span>, <span class="kw3">String</span>, <span class="re3">:lazy</span> =&gt; <span class="br0">&#91;</span><span class="re3">:detailed</span>,:notes<span class="br0">&#93;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; property <span class="re3">:work_phone</span>, <span class="kw3">String</span>, <span class="re3">:lazy</span> =&gt; <span class="br0">&#91;</span><span class="re3">:detailed</span><span class="br0">&#93;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; property <span class="re3">:home_phone</span>, <span class="kw3">String</span>, <span class="re3">:lazy</span> =&gt; <span class="br0">&#91;</span><span class="re3">:detailed</span><span class="br0">&#93;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; property <span class="re3">:email</span>, <span class="kw3">String</span>, <span class="re3">:lazy</span> =&gt; <span class="br0">&#91;</span><span class="re3">:detailed</span><span class="br0">&#93;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="co1"># ..</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="co1"># more properites</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="co1"># ..</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; property <span class="re3">:notes_updated</span>, <span class="kw4">DateTime</span>, <span class="re3">:lazy</span> =&gt; <span class="br0">&#91;</span><span class="re3">:notes</span><span class="br0">&#93;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; property <span class="re3">:notes_updated_by_id</span>, <span class="kw4">Fixnum</span>, <span class="re3">:lazy</span> =&gt; <span class="br0">&#91;</span><span class="re3">:notes</span><span class="br0">&#93;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; property <span class="re3">:notes</span>, <span class="kw3">String</span>, <span class="re3">:lazy</span> =&gt; <span class="br0">&#91;</span><span class="re3">:notes</span><span class="br0">&#93;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">end</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
</ol>
</div>
<p>– until next time –</p>
]]></content:encoded>
			<wfw:commentRss>http://www.guyvdb.info/ruby/lazy-loading-properties-in-datamapper/feed/</wfw:commentRss>
		</item>
		<item>
		<title>15 Things To Write About</title>
		<link>http://www.guyvdb.info/ruby/15-things-to-write-about/</link>
		<comments>http://www.guyvdb.info/ruby/15-things-to-write-about/#comments</comments>
		<pubDate>Wed, 26 Mar 2008 05:52:52 +0000</pubDate>
		<dc:creator>guyvdb</dc:creator>
		
		<category><![CDATA[Ruby]]></category>

		<category><![CDATA[DataMapper]]></category>

		<category><![CDATA[English Gem]]></category>

		<category><![CDATA[GEdit]]></category>

		<category><![CDATA[Polymorphic Association]]></category>

		<guid isPermaLink="false">http://www.guyvdb.info/ruby/15-things-to-write-about/</guid>
		<description><![CDATA[Starting a blog is all about having something to say. Something that others may find interesting. Wanting to be successful at blogging, I regularly need something interesting to say. Some homework, come up with 15 10 on-topic ideas that I can write a few paragraphs on.  In no particular order, here they are:

DataMapper 0.9.0 [...]]]></description>
			<content:encoded><![CDATA[<p>Starting a blog is all about having something to say. Something that others may find interesting. Wanting to be successful at blogging, I regularly need something interesting to say. Some homework, come up with <strike>15</strike> 10 on-topic ideas that I can write a few paragraphs on.  In no particular order, here they are:</p>
<ol>
<li>DataMapper 0.9.0 Validations</li>
<li>Context Based Recursive Serialization for DataMapper Resources</li>
<li>Access Control List Plugin for Merb/DataMapper</li>
<li>Using the <a href="http://english.rubyforge.org/" title="English Gem">English</a> Gem</li>
<li>DataMapper/Merb Class Diagram Creator - ala <a href="http://railroad.rubyforge.org/" title="RailRoad" target="_blank">RailRoad</a></li>
<li>Object/Relational Mismatch - Strategies for Inheritance</li>
<li>GEdit - A Powerful Ruby Development Environment</li>
<li>Role Player - Using Polymorphic Association to put Everything into a Role</li>
<li>DataMapper LazyLoading with Contexts</li>
<li>? (Still thinking)</li>
</ol>
<p>Over the next ~10 days, you know what I am going to write about.</p>
<p>– until next time –</p>
]]></content:encoded>
			<wfw:commentRss>http://www.guyvdb.info/ruby/15-things-to-write-about/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Welcome</title>
		<link>http://www.guyvdb.info/uncategorized/welcome/</link>
		<comments>http://www.guyvdb.info/uncategorized/welcome/#comments</comments>
		<pubDate>Tue, 25 Mar 2008 18:55:12 +0000</pubDate>
		<dc:creator>guyvdb</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[About Me]]></category>

		<category><![CDATA[Getting Started]]></category>

		<guid isPermaLink="false">http://www.guyvdb.info/uncategorized/welcome/</guid>
		<description><![CDATA[About Me
I live in Johannesburg,  South Africa. I work in the IT sector. For the last few years, most of my time has been devoted to a project for a  physical security equipment manufacture. The project is made up of an embedded micro-processor (ARM7), a home grown embedded OS and a web application. [...]]]></description>
			<content:encoded><![CDATA[<h2>About Me</h2>
<p>I live in Johannesburg,  South Africa. I work in the IT sector. For the last few years, most of my time has been devoted to a project for a  physical security equipment manufacture. The project is made up of an embedded micro-processor (ARM7), a home grown embedded OS and a web application.  It governs security at multi-dwelling residential complexes. <a href="http://www.mircell.com" title="Mircell" target="_blank"></a></p>
<h2>Current Work</h2>
<p>The current version of the product was written in C (on the embedded hardware) and  Java (for the web application). The next release, which I am busy with, is a complete re-write. We are moving to a preemptive multi-tasking kernel on the embedded hardware (still in C of course), a RESTful API (written in my newly found favorite language Ruby) on the server side and for the browser, a RIA client (written in ActionScript/Flash).</p>
<h2>Starting a Blog</h2>
<p>So that&#8217;s a little bit about me. Now for the what and why of this blog. This is not my first attempt at starting a blog. I have begun half heartedly before. Slowly petering out. This time, I have invested in a domain name and setup the blog on my own server. I hope this will build some momentum which will spur me onward.</p>
<p>Reading about &#8220;how to start a successful blog&#8221; on the plethora of blogs that dish out that kind of advice, I have noted that I should:</p>
<ul>
<li>take care of all the technical stuff</li>
<li>decide what to blog about</li>
<li>get a first post out the door</li>
<li>get into the habit of blogging</li>
<li>promote your blog</li>
<li>practice, practice, practice</li>
<li>ignore the lack of readers <img src='http://www.guyvdb.info/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </li>
</ul>
<p>I have taken care of all the technical stuff. I have a domain name, the server is set up, everything is ready to go. Next, to pick a subject. What am I going to blog about. Ruby to start. Maybe a touch of embedded development and C. Right now I am getting the first post out the door.</p>
<p>Only time will tell - do I get into the habit of blogging? I already have the subject for my next entry. Pick 10 subjects related to Ruby that I want to blog about.</p>
<p>&#8211; until next time &#8211;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.guyvdb.info/uncategorized/welcome/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
