<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>A Path Less Taken</title>
	<atom:link href="http://www.legendrefamily.org/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.legendrefamily.org/blog</link>
	<description>Breaking with convention in a very conventional fashion.</description>
	<lastBuildDate>Sun, 07 Mar 2010 14:04:21 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Taco Soup</title>
		<link>http://www.legendrefamily.org/blog/2010/03/taco-soup/</link>
		<comments>http://www.legendrefamily.org/blog/2010/03/taco-soup/#comments</comments>
		<pubDate>Fri, 05 Mar 2010 17:02:10 +0000</pubDate>
		<dc:creator>JJ</dc:creator>
				<category><![CDATA[Recipes]]></category>
		<category><![CDATA[recipe]]></category>

		<guid isPermaLink="false">http://www.legendrefamily.org/blog/?p=989</guid>
		<description><![CDATA[I am not sure where this comes from as I only have it on a piece of paper, but the comment about points leads me to believe this is a Weight Watchers recipe.  None the less it is super easy to make and one of my personal favorites so I thought I would share [...]]]></description>
			<content:encoded><![CDATA[<p>I am not sure where this comes from as I only have it on a piece of paper, but the comment about points leads me to believe this is a <a href="http://www.weightwatchers.com/" title="Weight Watchers">Weight Watchers</a> recipe.  None the less it is super easy to make and one of my personal favorites so I thought I would share it with others.</p>
<ul>
<li>1 lb Lean Ground Beef</li>
<li>2 cans Pinto Beans, Undrained</li>
<li>1 can Whole Kernel Corn, Undrained</li>
<li>2 cans Stewed Tomatoes, Undrained</li>
<li>1 pkg. Taco Seasoning</li>
<li>1 pkt. Hidden Valley Ranch Dressing</li>
<li>1 and 1/2 cups Water</li>
</ul>
<p>All you do is brown the ground meat in a large soup pot and drain.  Then you add everything else and simmer until heated through.  It says it makes approximately 11 cups, but I like to eat it in bigger bowls.</p>
<p>That&#8217;s all there is to it.  I hope that you enjoy it.  I tried to find one like this on <a href="http://www.recipezaar.com/" title="Recipezaar">Recipezaar</a> and there were a lot of similar ones, but none that were an exact match.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.legendrefamily.org/blog/2010/03/taco-soup/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ORM Relationship Types</title>
		<link>http://www.legendrefamily.org/blog/2010/03/orm-relationship-types/</link>
		<comments>http://www.legendrefamily.org/blog/2010/03/orm-relationship-types/#comments</comments>
		<pubDate>Tue, 02 Mar 2010 02:28:49 +0000</pubDate>
		<dc:creator>JJ</dc:creator>
				<category><![CDATA[PHP Development]]></category>
		<category><![CDATA[orm]]></category>

		<guid isPermaLink="false">http://www.legendrefamily.org/blog/?p=977</guid>
		<description><![CDATA[Object Relational Mapping (ORM) tools allow developers to interact with databases through objects.  The basic object in the typical solution is the model.  The model is essentially an object representation of a single table in the database.  In fact, implementations that subscribe to the activerecord design pattern will often view the model [...]]]></description>
			<content:encoded><![CDATA[<p>Object Relational Mapping (ORM) tools allow developers to interact with databases through objects.  The basic object in the typical solution is the model.  The model is essentially an object representation of a single table in the database.  In fact, implementations that subscribe to the activerecord design pattern will often view the model as an object representation of a single row of a specific table.  Since the target data store in most cases is an RDBMS (excluding the recent surge in distributed Document based DB&#8217;s) the typical ORM needs some way to represent foreign key relationships in an object oriented way.  To facilitate this the field has evolved a set of conventions or names for foreign key (FK) relationships in the DB based on the object&#8217;s (table&#8217;s) role in the given index.  Here is a brief but hopefully useful explanation of four relationship types.</p>
<p><span id="more-977"></span></p>
<ul>
<li>Belongs-To &#8211; This is the most basic form of a FK representation in an ORM.  A field in a model is designated as type Belongs To when that field has is a FK that references the primary key (PK) in another model (table).  I say model since the Belongs To is used to describe the behavior of one model that contains a FK index in relation to another model that is the target of that FK index.  The typical default behavior would be for the field to be named by using the target model&#8217;s name joined to the target model&#8217;s PK field name by an underscore such as author_id.  The assumption in this example being that the author table would have a PK field named id.</li>
<li>Has-One &#8211; This is the other side of the Belongs-To convention.  This tells the model that another model is using this models PK as the target for its FK.  The model can use this relationship to manage cascading deletes, joined selections, etc.  The implication is that the model expects there to be one and only one FK in the remote model (table) attached to each record in this model (table).</li>
<li>Has-Many &#8211; This is the same as Has-One except now the model expects there to be one or more FK&#8217;s in the remote model (table) attached to each record in this model (table).</li>
<li>Many-To-Many &#8211; Although you might assume this is similar to Has-Many, it is actually more akin to Belongs-To.  This convention represents a FK relationship from this model (as with Belongs To) to an intersection table that in turn joins it to another model.  The typical implementation contains a Through property that defines the name of the intersection table.  By default this table will typically be named by joining the name of each model (table) connected to it with an underscore character.</li>
</ul>
<p>That is all there is to it.  Although this is a simple explanation of these four relationship types, I think you can begin to see how the ORM will rely on each to execute desirable behaviors as you interact with your database through model objects.  If you have any comments or corrections to the above please let me know.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.legendrefamily.org/blog/2010/03/orm-relationship-types/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Password Ideas</title>
		<link>http://www.legendrefamily.org/blog/2010/02/password-ideas/</link>
		<comments>http://www.legendrefamily.org/blog/2010/02/password-ideas/#comments</comments>
		<pubDate>Fri, 26 Feb 2010 14:55:21 +0000</pubDate>
		<dc:creator>JJ</dc:creator>
				<category><![CDATA[Web Design]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[security]]></category>

		<guid isPermaLink="false">http://www.legendrefamily.org/blog/?p=967</guid>
		<description><![CDATA[In a recent article on the web magazine A List Apart author Lyle Mullican published an interesting discussion of password form fields on the web.  The article entitled The Problem with Passwords discusses how passwords might evolve on the web to provide better usability while maintaining user confidence in the system.  If you [...]]]></description>
			<content:encoded><![CDATA[<p>In a recent article on the web magazine <a href="http://www.alistapart.com/" title="A List Apart Web Magazine">A List Apart</a> author Lyle Mullican published an interesting discussion of password form fields on the web.  The article entitled <a href="http://www.alistapart.com/articles/the-problem-with-passwords/" title="The Problem with Passwords">The Problem with Passwords</a> discusses how passwords might evolve on the web to provide better usability while maintaining user confidence in the system.  If you are interested in the evolution of token based computer security then this article is worth a read.  It&#8217;s focus is on the user experience, but the questions it considers give you a peek into the mind set required to meld strong security with usability.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.legendrefamily.org/blog/2010/02/password-ideas/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Jelly ORM</title>
		<link>http://www.legendrefamily.org/blog/2010/02/jelly-orm/</link>
		<comments>http://www.legendrefamily.org/blog/2010/02/jelly-orm/#comments</comments>
		<pubDate>Thu, 18 Feb 2010 03:28:37 +0000</pubDate>
		<dc:creator>JJ</dc:creator>
				<category><![CDATA[PHP Development]]></category>
		<category><![CDATA[orm]]></category>

		<guid isPermaLink="false">http://www.legendrefamily.org/blog/?p=946</guid>
		<description><![CDATA[jonathangeiger of the Kohana PHP Framework community has been working hard lately on a new ORM that shows promise.  The github repository can be found here if you would like to check the code out.  I decided to point my PHP Code Explorer at it to figure out the Jelly object model.  [...]]]></description>
			<content:encoded><![CDATA[<p>jonathangeiger of the Kohana PHP Framework community has been working hard lately on a new ORM that shows promise.  The github repository can be found <a href="http://github.com/jonathangeiger/kohana-jelly" title="Jelly ORM">here</a> if you would like to check the code out.  I decided to point my PHP Code Explorer at it to figure out the Jelly object model.  Below is a screen capture of what I found.  You can click the image to see a larger view.</p>
<p><a href="http://www.legendrefamily.org/blog/wp-content/uploads/2010/02/Jelly_Objects-1024x730.png" title="Jelly ORM Object Model"><img src="http://www.legendrefamily.org/blog/wp-content/uploads/2010/02/Jelly_Objects-300x214.png"/></a></p>
<p>I hope this view is helpful to you.  I know it helped me to get a better perspective of Jelly and how it was designed.</p>
<p><b>Update: </b>The official Jelly web site can be found at <a href="http://jelly.jonathan-geiger.com/" title="Jelly ORM">http://jelly.jonathan-geiger.com/</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.legendrefamily.org/blog/2010/02/jelly-orm/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Choosing An ORM Solution</title>
		<link>http://www.legendrefamily.org/blog/2010/02/choosing-an-orm-solution/</link>
		<comments>http://www.legendrefamily.org/blog/2010/02/choosing-an-orm-solution/#comments</comments>
		<pubDate>Wed, 10 Feb 2010 04:42:06 +0000</pubDate>
		<dc:creator>JJ</dc:creator>
				<category><![CDATA[PHP Development]]></category>
		<category><![CDATA[orm]]></category>

		<guid isPermaLink="false">http://www.legendrefamily.org/blog/?p=936</guid>
		<description><![CDATA[Object Relational Mapping (ORM) tools are software products designed to allow developers to work with relational database management systems (RDBMS) in an object oriented and database agnostic way.  Their primary goal is to make the developer’s work easier and free them to focus on higher value aspects of their solutions.  As a hobbyist [...]]]></description>
			<content:encoded><![CDATA[<p>Object Relational Mapping (ORM) tools are software products designed to allow developers to work with relational database management systems (RDBMS) in an object oriented and database agnostic way.  Their primary goal is to make the developer’s work easier and free them to focus on higher value aspects of their solutions.  As a hobbyist programmer I have a limited amount of time to give to my projects.  In the last year this realization has pushed me to look at development tools that can increase my productivity in the limited time available.  <span class="pullquote">Leveraging an ORM solution seemed like a natural step</span> in that progression.</p>
<p><span id="more-936"></span></p>
<p>As a PHP developer my list of options is currently limited to ORM tools built for PHP.  So far I have tried two of these.  Although there were a number of things that I liked about each solution, there was at least one aspect of each that I did not like.  I decided to cast my net wider and look at other PHP ORM solutions.  As I did more research I began to realize there are notable differences among the key products in the space as well as a number of “upstart” competitors that are rising up to fill any perceived gaps.  With a number of high profile and niche products to consider I quickly realized that choosing between them would be difficult.</p>
<p>This led to the post you are now reading.  I decided that rather than simply compare features of the existing products I should put together a list of what is important to me in an ORM solution.  If I can define which features I want (from most to least important) and which features I don’t want then I can use the list to compare against each solution.  The one that best matches my list is the one I’ll pursue next.  So without further preamble, here is my list.  Note that it is my list “today” and it will likely change or evolve as I learn more about ORM solutions.</p>
<h3>Things I Want (Must Haves)</h3>
<ul>
<li>Open Source – I’m not opposed to a commercial solution, but for now I want open source.</li>
<li>Strong Community – There is strength in numbers.</li>
<li>Good Documentation – Quick Start Guide, User Guide, Reference Manual, User Contributed Cookbooks, etc.</li>
<li>Easy to Install – You would be surprised at how many people just assume you can figure it out yourself.</li>
<li>Easy to Use – I don’t want to struggle with an ORM.  The classes and methods should be intuitive.</li>
<li>Fast – Performance that is within 20% to 25% of hand coded PDO based solution.</li>
<li>Good Query Builder – The underlying query builder should be easy to use directly and the methods should behave in an obvious and straight forward way.</li>
<li>Native SQL – The ability to easily use SQL to populate result sets for so called “edge cases.”  <i>Pet peeve: Most of the notable work developers do is edge cases.  If it were easy, anybody could build it.</i></li>
<li>Data Form Marshaling – Why should I have to catch data from a form when the form should be built on an ORM model?</li>
<li>Built In / Custom Validation – Should have a simple to configure and use validation strategy.</li>
</ul>
<h3>Things I Would Like (Nice to Have)</h3>
<ul>
<li>Strong Typing – Makes life easier when working with databases.</li>
<li>Form Decorators – Model awareness of web form decorator class or classes and ability to return a default decorator from a method.</li>
<li>Integrated Security – Stop XSS, SQL Injection, etc.</li>
<li>Flexible Architecture – Ability to have inherited model objects or contained model objects.</li>
<li>Automatic Model Validation at Design Time – It would be helpful if there was a global option to turn on or off model validation.  This way a model would check to make sure the underlying table was appropriate at design time, but would not waste cycles doing this check in production.</li>
</ul>
<h3>Things I Don’t Want (Bad ORM)</h3>
<ul>
<li>Automatic Model Generator – Not sure why, but code generators just strike me as a bad idea.  My main issue here would be changes can’t be replicated to the generated files without overwriting manual changes that you might have made.</li>
<li>Gimmicks – I don’t want features for the sake of features.  I want a well thought out solution that is not bloated with every possible feature anyone could ever want.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.legendrefamily.org/blog/2010/02/choosing-an-orm-solution/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
