<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>ThinkRobot</title>
	
	<link>http://think-robot.com</link>
	<description>Design &amp; Development Blog</description>
	<pubDate>Sun, 05 Sep 2010 23:09:50 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/Think-robot" /><feedburner:info uri="think-robot" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Using TextMate for easier CSS3</title>
		<link>http://feedproxy.google.com/~r/Think-robot/~3/UeThwqqv5gU/</link>
		<comments>http://think-robot.com/2010/09/using-textmate-for-easier-css3/#comments</comments>
		<pubDate>Sun, 05 Sep 2010 19:54:15 +0000</pubDate>
		<dc:creator>Andrew</dc:creator>
		
		<category><![CDATA[Code]]></category>

		<category><![CDATA[HTML/CSS]]></category>

		<category><![CDATA[Tutorials]]></category>

		<category><![CDATA[css]]></category>

		<category><![CDATA[filter]]></category>

		<category><![CDATA[os x]]></category>

		<category><![CDATA[textmate]]></category>

		<category><![CDATA[transform]]></category>

		<guid isPermaLink="false">http://think-robot.com/?p=236</guid>
		<description><![CDATA[Over the past couple of years Webkit has popularised many fancy new CSS tricks. Amongst these the ability to rotate an element is certainly one of the most useful. Fortunately it&#8217;s also widely supported in other browsers, even in lowly old IE right back to version 5.5. The &#8216;modern&#8217; browsers support this with a reasonably [...]]]></description>
			<content:encoded><![CDATA[<p>Over the past couple of years Webkit has popularised many fancy new CSS tricks. Amongst these the ability to rotate an element is certainly one of the most useful. Fortunately it&#8217;s also widely supported in other browsers, even in lowly old IE right back to version 5.5. The &#8216;modern&#8217; browsers support this with a reasonably simple syntax</p>
<p><span id="more-236"></span></p>
<pre><code><code>[-vendor-prefix-]transform: rotate([angle]deg);</code></code></pre>
<p>so to use this to rotate an element by 15 degrees in Webkit (e.g. Safari, Chrome), Mozilla and Opera you&#8217;d use</p>
<pre><code><code>-moz-transform: rotate(15deg);
-o-transform: rotate(15deg);
-webkit-transform: rotate(15deg);
transform: rotate(15deg); </code></code></pre>
<p>We include the rule without a vendor prefix so that once browsers start to implement this without requiring the use of it our CSS will be ready.</p>
<p>Sadly the syntax for Internet Explorer is a little more cumbersome. It uses the	DXImageTransform.Microsoft.Matrix filter which is a little cryptic, but fortunately quite well documented on <a href="http://msdn.microsoft.com/en-us/library/ms533014(VS.85).aspx">MSDN</a>. We also need 2 variations of this filter, one for IE &lt; 8 and another for IE ≥ 8.</p>
<p>To use the filter the first thing we need to do is convert our angle into radians (angle in radians = angle in degrees * π / 180) then we work with the sine and cosine of this angle:</p>
<pre><code><code>DXImageTransform.Microsoft.Matrix(sizingMethod='auto expand',M11=[cos(angle)],M12=[-sin(angle)],M21=[sin(angle)],M22=[cos(angle)]);</code></code></pre>
<p>So if we take our rotate by 15 degrees example from above we&#8217;d end up with the following to cover all IE versions:</p>
<pre><code><code>filter:progid:DXImageTransform.Microsoft.Matrix(sizingMethod='auto expand',M11=0.965925826289068,M12=-0.258819045102521,M21=0.258819045102521,M22=0.965925826289068);
-ms-filter:"progid:DXImageTransform.Microsoft.Matrix(SizingMethod='auto expand',M11=0.965925826289068,M12=-0.258819045102521,M21=0.258819045102521,M22=0.965925826289068)";</code></code></pre>
<p>Obviously we don&#8217;t really want to have to whip out a calculator and type 6 lines of CSS every time we want to rotate an element. To save myself a little time I created a <a href="http://www.macromates.com">TextMate</a> bundle that simplifies the process a bit. This bundle allows me to type the standard syntax.</p>
<pre><code><code>transform:rotate(-10deg)</code></code></pre>
<p>Then hit a keyboard shortcut to have TextMate fill in the rest.</p>
<p>To add this bundle go to Bundles &gt; Bundle Editor &gt; Show Bundle Editor</p>
<p>Select CSS from the list on the left and side of the editor and select Add new command from the buttons at the bottom. Paste the following into the Command(s) field</p>
<pre><code><code>#!/usr/bin/env ruby
line = $stdin.read
if line =~ /(\s*)transform\s*:\s*rotate\s*\(\s*(-?[0-9]+)\s*deg\s*\)/i
	rad = $2.to_i * Math::PI / 180
	cos = Math.cos(rad)
	sin = Math.sin(rad)

	print $`
	print $1 + "-moz-transform:rotate(" + $2 + "deg);\n"
	print $1 + "-o-transform:rotate(" + $2 + "deg);\n"
	print $1 + "-webkit-transform:rotate(" + $2 + "deg);\n"
	print $1 + "transform:rotate(" + $2 + "deg);\n"
	print $1 + "filter:progid:DXImageTransform.Microsoft.Matrix(sizingMethod='auto expand',M11=" + 	cos.to_s + ",M12=" + (sin * -1).to_s + ",M21=" + sin.to_s + ",M22=" + cos.to_s + ");\n"
	print $1 + "-ms-filter:\"progid:DXImageTransform.Microsoft.Matrix(SizingMethod='auto expand',M11=" + cos.to_s + ",M12=" + (sin * -1).to_s + ",M21=" + sin.to_s + ",M22=" + cos.to_s + ")\";\n"
	print $'
else
	print line
end</code></code></pre>
<p>Then select Save: Nothing, Input: Selected text or Line and Output: Replace Selected Text. Now you need to setup how you&#8217;ll trigger this. Select Activation: Key Equivalent and then enter the keyboard shortcut you&#8217;d like - I&#8217;m using <kbd>Shift + Cmd + R</kbd></p>
<p><img class="alignleft size-medium wp-image-237" style="margin-right: 1em; margin-bottom: 1em;" title="bundle-editor" src="http://think-robot.com/wp-content/uploads/2010/09/bundle-editor-300x180.png" alt="bundle-editor" width="300" height="180" /></p>
<p>Finally close the bundle editor and select Bundle &gt; Bundle Editor &gt; Reload Bundles and you should be good to go.</p>
<p>Of course there are many other CSS3 properties that up until now have been implemented using vendor prefixes in some browsers. We can simplify creating these with some more TextMate snippets. I&#8217;ll include a couple of examples here, firstly box-shadow. Webkit and Mozilla support this using a vendor prefix, Opera and Internet Explorer 9 use the standard property. The syntax is:</p>
<pre><code><code>[-vendor-prefix-]box-shadow: [x offset] [y offset] [blur radius] [color];</code></code></pre>
<p>So to create a drak grey shadow just offset slightly below an element we might use something like this:</p>
<pre><code><code>-moz-box-shadow: 0 2px 5px #333;
-webkit-box-shadow: 0 2px 5px #333;
box-shadow: 0 2px 5px #333;</code></code></pre>
<p>For the TextMate snippet we&#8217;ll use tab triggers and placeholders - this let you type a keyword and hit the tab key to insert the text of the snippet with placeholder values inserted with the first placeholder selected so you can fill in a value, tabbing again moves onto the next placeholder and so on. Open up the bundle editor from Bundles &gt; Bundle Editor &gt; Show Bundle Editor and select to add a new snippet under the CSS section. Paste the following into the snippet window:</p>
<pre><code><code>-moz-box-shadow: ${1:x offset} ${2:y offset} ${3:blur radius} ${4:color};
-webkit-box-shadow: ${1:x offset} ${2:y offset} ${3:blur radius} ${4:color};
box-shadow: ${1:x offset} ${2:y offset} ${3:blur radius} ${4:color};</code></code></pre>
<p>Select Activation: Tab Trigger and type in the word box as the trigger. Name this snippet box-shadow and exit the bundle editor. Relaod bundles to give it a try. In a CSS file now type box and hit the tab key. The following should be inserted:</p>
<pre><code><code>-moz-box-shadow: x offset y offset spread color;
-webkit-box-shadow: x offset y offset spread color;
box-shadow: x offset y offset spread color;</code></code></pre>
<p>with the x offset text highlighted. Starting to type will overwrite all the x offset placeholders, hitting tab again will move onto the y offset. Easy. You could add another snippet that provided box shadows using the inset modifier.</p>
<pre><code><code>[-vendor-prefix-]box-shadow: inset [x offset] [y offset] [blur radius] [color];</code></code></pre>
<p>border-radius might also be a good candidate for a time-saving snippet. Probably the most common use of this is where we want to specify equally rounded corners on all round our box. We could use the same style of tab triggered snippet as with the box-shadow example. The snippet would be very simple with just a single placeholder - something like this:</p>
<pre><code><code>-moz-border-radius: ${1:1em};
-webkit-border-radius: ${1:1em};
border-radius: ${1:1em};</code></code></pre>
<p>TextMate is a wonderful editor and snippets really do make this stuff a breeze.</p>
<div id="crp_related"><h2>Related Articles:</h2><ul><li><a href="http://think-robot.com/2008/10/display-meetings-from-entourage-using-geektool/" rel="bookmark">Display Meetings From Entourage Using GeekTool</a></li><li><a href="http://think-robot.com/2008/11/wordpress-nextgen-gallery-tweak/" rel="bookmark">Wordpress NextGen gallery tweak</a></li><li><a href="http://think-robot.com/2008/08/opensuse-11-on-lenovo-thinkpad-x61-tablet-pc/" rel="bookmark">openSUSE 11 on Lenovo Thinkpad X61 (tablet pc)</a></li><li><a href="http://think-robot.com/2009/02/improving-design-by-using-a-grid-system/" rel="bookmark">Improving Design by Using a Grid System</a></li><li><a href="http://think-robot.com/2009/04/zend_db_select-multiple-table-joins-explained/" rel="bookmark">Zend_Db_Select multiple table joins explained</a></li></ul></div><img src="http://feeds.feedburner.com/~r/Think-robot/~4/UeThwqqv5gU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://think-robot.com/2010/09/using-textmate-for-easier-css3/feed/</wfw:commentRss>
		<feedburner:origLink>http://think-robot.com/2010/09/using-textmate-for-easier-css3/</feedburner:origLink></item>
		<item>
		<title>Mantis theme mock-up</title>
		<link>http://feedproxy.google.com/~r/Think-robot/~3/VQJ3HZu9ERA/</link>
		<comments>http://think-robot.com/2010/08/mantis-theme-mock-up/#comments</comments>
		<pubDate>Thu, 12 Aug 2010 12:57:38 +0000</pubDate>
		<dc:creator>Joanna</dc:creator>
		
		<category><![CDATA[Design]]></category>

		<category><![CDATA[MantisBT]]></category>

		<category><![CDATA[mock]]></category>

		<guid isPermaLink="false">http://think-robot.com/?p=226</guid>
		<description><![CDATA[At my new job we use MantisBT for our bug tracking and project management. Unfortunately despite good functionality the visual side is desperately lacking some love and attention. Tired of looking at the barely styled web app I decided to spruce it up a little bit. A teaser of the new design can be seen [...]]]></description>
			<content:encoded><![CDATA[<p><div id="attachment_225" class="wp-caption alignleft" style="width: 311px"><a href="http://think-robot.com/wp-content/uploads/2010/08/mantis-teaser.png"><img class="size-full wp-image-225" title="Mantis Design Teaser" src="http://think-robot.com/wp-content/uploads/2010/08/mantis-teaser.png" alt="Mantis Design Teaser" width="301" height="192" /></a><p class="wp-caption-text">Mantis Design Teaser</p></div></p>
<p style="clear:left;">At my new job we use MantisBT for our bug tracking and project management. Unfortunately despite good functionality the visual side is desperately lacking some love and attention. Tired of looking at the barely styled web app I decided to spruce it up a little bit. A teaser of the new design can be seen above.</p>
<div id="crp_related"><h2>Related Articles:</h2><ul><li><a href="http://think-robot.com/2009/02/improving-design-by-using-a-grid-system/" rel="bookmark">Improving Design by Using a Grid System</a></li><li><a href="http://think-robot.com/2008/06/atmedia-london-2008/" rel="bookmark">@media - London, 2008</a></li><li><a href="http://think-robot.com/2009/04/blog-revamp-complete/" rel="bookmark">Blog Revamp Complete</a></li><li><a href="http://think-robot.com/2010/09/using-textmate-for-easier-css3/" rel="bookmark">Using TextMate for easier CSS3</a></li><li><a href="http://think-robot.com/2009/02/firefox-ignores-tabs-but-not-spaces-in-a-pre-tag/" rel="bookmark">Firefox ignores tabs but not spaces in a pre tag</a></li></ul></div><img src="http://feeds.feedburner.com/~r/Think-robot/~4/VQJ3HZu9ERA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://think-robot.com/2010/08/mantis-theme-mock-up/feed/</wfw:commentRss>
		<feedburner:origLink>http://think-robot.com/2010/08/mantis-theme-mock-up/</feedburner:origLink></item>
		<item>
		<title>Multiple changes and a delete on same object in doctrine</title>
		<link>http://feedproxy.google.com/~r/Think-robot/~3/4lT7hZcdD1A/</link>
		<comments>http://think-robot.com/2010/03/multiple-changes-and-a-delete-on-same-object-in-doctrine/#comments</comments>
		<pubDate>Sat, 06 Mar 2010 20:58:13 +0000</pubDate>
		<dc:creator>Joanna</dc:creator>
		
		<category><![CDATA[Code]]></category>

		<category><![CDATA[doctrine]]></category>

		<category><![CDATA[php]]></category>

		<category><![CDATA[solution]]></category>

		<category><![CDATA[tip]]></category>

		<guid isPermaLink="false">http://think-robot.com/?p=219</guid>
		<description><![CDATA[If you want to make several different changes to a doctrine record object you might find yourself slightly puzzled when it comes to deleting related objects.
$user['Address']->delete();
$user['Address']->state(Doctrine_Record::STATE_LOCKED);
(...)
$user->save();
It seems that unless you set the state the save later on still sees an initialized (though empty!) relation.
Related Articles:Hitch. Object-oriented event handlers with jQueryDoctrine Many To Many With Extra [...]]]></description>
			<content:encoded><![CDATA[<p>If you want to make several different changes to a doctrine record object you might find yourself slightly puzzled when it comes to deleting related objects.</p>
<pre><code><code>$user['Address']->delete();
$user['Address']->state(Doctrine_Record::STATE_LOCKED);
(...)
$user->save();</code></code></pre>
<p>It seems that unless you set the state the save later on still sees an initialized (though empty!) relation.</p>
<div id="crp_related"><h2>Related Articles:</h2><ul><li><a href="http://think-robot.com/2009/06/hitch-object-oriented-event-handlers-with-jquery/" rel="bookmark">Hitch. Object-oriented event handlers with jQuery</a></li><li><a href="http://think-robot.com/2009/05/doctrine-many-to-many-with-extra-fields/" rel="bookmark">Doctrine Many To Many With Extra Fields</a></li><li><a href="http://think-robot.com/2008/08/server-error-500-htaccess-require-valid-user/" rel="bookmark">Server Error 500 - htaccess require valid-user</a></li><li><a href="http://think-robot.com/2008/06/atmedia-london-2008/" rel="bookmark">@media - London, 2008</a></li><li><a href="http://think-robot.com/2008/08/opensuse-11-on-lenovo-thinkpad-x61-tablet-pc/" rel="bookmark">openSUSE 11 on Lenovo Thinkpad X61 (tablet pc)</a></li></ul></div><img src="http://feeds.feedburner.com/~r/Think-robot/~4/4lT7hZcdD1A" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://think-robot.com/2010/03/multiple-changes-and-a-delete-on-same-object-in-doctrine/feed/</wfw:commentRss>
		<feedburner:origLink>http://think-robot.com/2010/03/multiple-changes-and-a-delete-on-same-object-in-doctrine/</feedburner:origLink></item>
		<item>
		<title>Zend_Date time part and GMT</title>
		<link>http://feedproxy.google.com/~r/Think-robot/~3/sLQLx_v-Ac0/</link>
		<comments>http://think-robot.com/2009/12/zend_date-time-part-and-gmt/#comments</comments>
		<pubDate>Wed, 16 Dec 2009 21:06:04 +0000</pubDate>
		<dc:creator>Joanna</dc:creator>
		
		<category><![CDATA[Articles]]></category>

		<category><![CDATA[Code]]></category>

		<category><![CDATA[GMT]]></category>

		<category><![CDATA[php]]></category>

		<category><![CDATA[tip]]></category>

		<category><![CDATA[UK]]></category>

		<category><![CDATA[Zend Framework]]></category>

		<category><![CDATA[Zend_Date]]></category>

		<category><![CDATA[ZF]]></category>

		<guid isPermaLink="false">http://think-robot.com/?p=215</guid>
		<description><![CDATA[If you live in the UK you might have a surprise waiting in store for you if you use Zend_Date for the time part only. For a while I even thought this was a bug, however digging deeper has shown that actually it&#8217;s Zend_Date that is right, in a way at least.
When setting a time [...]]]></description>
			<content:encoded><![CDATA[<p>If you live in the UK you might have a surprise waiting in store for you if you use Zend_Date for the time part only. For a while I even thought this was a bug, however digging deeper has shown that actually it&#8217;s Zend_Date that is right, in a way at least.</p>
<p>When setting a time before 1972 - this is 1970 and 1971 the time part will not be shifted in the UK locale as DST was only introduced in 1972!</p>
<p>This means if you are only calculating times and need the appropriate time adjustment you will need to set a date as no date part in Zend_Date means 1st Jan 1970.</p>
<div id="crp_related"><h2>Related Articles:</h2><ul><li><a href="http://think-robot.com/2008/10/display-meetings-from-entourage-using-geektool/" rel="bookmark">Display Meetings From Entourage Using GeekTool</a></li><li><a href="http://think-robot.com/2009/04/week-of-the-month-in-mysql/" rel="bookmark">Week of the Month in Mysql</a></li><li><a href="http://think-robot.com/2008/08/opensuse-11-on-lenovo-thinkpad-x61-tablet-pc/" rel="bookmark">openSUSE 11 on Lenovo Thinkpad X61 (tablet pc)</a></li><li><a href="http://think-robot.com/2009/04/regex-for-autolinking-urls/" rel="bookmark">Regex for Autolinking URLs</a></li><li><a href="http://think-robot.com/2008/12/strong-ownership-list-approach/" rel="bookmark">Strong ownership list approach</a></li></ul></div><img src="http://feeds.feedburner.com/~r/Think-robot/~4/sLQLx_v-Ac0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://think-robot.com/2009/12/zend_date-time-part-and-gmt/feed/</wfw:commentRss>
		<feedburner:origLink>http://think-robot.com/2009/12/zend_date-time-part-and-gmt/</feedburner:origLink></item>
		<item>
		<title>PHPUnit &amp; Selenium - screenshot path problem</title>
		<link>http://feedproxy.google.com/~r/Think-robot/~3/y2M7Zks8v2w/</link>
		<comments>http://think-robot.com/2009/12/phpunit-selenium-screenshot-path-problem/#comments</comments>
		<pubDate>Tue, 15 Dec 2009 23:04:46 +0000</pubDate>
		<dc:creator>Joanna</dc:creator>
		
		<category><![CDATA[Code]]></category>

		<category><![CDATA[error]]></category>

		<category><![CDATA[path]]></category>

		<category><![CDATA[phpunit]]></category>

		<category><![CDATA[screenshot]]></category>

		<category><![CDATA[selenium]]></category>

		<category><![CDATA[selenium rc]]></category>

		<category><![CDATA[testing]]></category>

		<guid isPermaLink="false">http://think-robot.com/?p=207</guid>
		<description><![CDATA[PHPUnit_Framework_Exception: Response from Selenium RC server for testComplete().
ERROR: Command execution failure. Please search the forum at http://clearspace.openqa.org for error details from the log window.
The error message is: Component returned failure code: 0x80520001 (NS_ERROR_FILE_UNRECOGNIZED_PATH) [nsILocalFile.initWithPath]

Setting up Selenium RC server together with PHPUnit has proven surprisingly easy&#8230; Well most of it. Every now and then as a [...]]]></description>
			<content:encoded><![CDATA[<pre><code><code>PHPUnit_Framework_Exception: Response from Selenium RC server for testComplete().
ERROR: Command execution failure. Please search the forum at http://clearspace.openqa.org for error details from the log window.
The error message is: Component returned failure code: 0x80520001 (NS_ERROR_FILE_UNRECOGNIZED_PATH) [nsILocalFile.initWithPath]
</code></code></pre>
<p>Setting up Selenium RC server together with PHPUnit has proven surprisingly easy&#8230; Well most of it. Every now and then as a beginner you might run into monster errors like the one above. No fear, what Selenium is trying to tell you is just that your path is wrong.</p>
<p>For me it happened when trying to setup the  error screenshot variables:</p>
<pre><code><code>protected $captureScreenshotOnFailure = TRUE;
<strong>protected $screenshotPath = '/var/www/localhost/htdocs/screenshots';</strong>
protected $screenshotUrl = 'http://localhost/screenshots';
</code></code></pre>
<p>In case you wonder the path relates to the <strong>browser&#8217;s host</strong> not the Selenium RC host (if they are different), In my case the browsers are run on a windows box, with the Selenium RC setup on a Linux machine. Thus the error about the inapropriate <strong>$screenshotPath</strong>.</p>
<div id="crp_related"><h2>Related Articles:</h2><ul><li><a href="http://think-robot.com/2008/08/server-error-500-htaccess-require-valid-user/" rel="bookmark">Server Error 500 - htaccess require valid-user</a></li><li><a href="http://think-robot.com/2009/07/autloading-modular-forms-models-in-zend-framework-18/" rel="bookmark">Autloading modular forms & models in Zend Framework 1.8</a></li><li><a href="http://think-robot.com/2009/04/zend_db_select-multiple-table-joins-explained/" rel="bookmark">Zend_Db_Select multiple table joins explained</a></li><li><a href="http://think-robot.com/2008/10/how-to-convert-pdt-projects-into-phpeclipse-projects/" rel="bookmark">How to convert PDT projects into PHPEclipse projects</a></li><li><a href="http://think-robot.com/2008/11/wordpress-nextgen-gallery-tweak/" rel="bookmark">Wordpress NextGen gallery tweak</a></li></ul></div><img src="http://feeds.feedburner.com/~r/Think-robot/~4/y2M7Zks8v2w" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://think-robot.com/2009/12/phpunit-selenium-screenshot-path-problem/feed/</wfw:commentRss>
		<feedburner:origLink>http://think-robot.com/2009/12/phpunit-selenium-screenshot-path-problem/</feedburner:origLink></item>
		<item>
		<title>Autloading modular forms &amp; models in Zend Framework 1.8</title>
		<link>http://feedproxy.google.com/~r/Think-robot/~3/cdZn49q--dk/</link>
		<comments>http://think-robot.com/2009/07/autloading-modular-forms-models-in-zend-framework-18/#comments</comments>
		<pubDate>Thu, 30 Jul 2009 21:55:00 +0000</pubDate>
		<dc:creator>Joanna</dc:creator>
		
		<category><![CDATA[Code]]></category>

		<category><![CDATA[autload]]></category>

		<category><![CDATA[examples]]></category>

		<category><![CDATA[php]]></category>

		<category><![CDATA[Zend Framework]]></category>

		<guid isPermaLink="false">http://think-robot.com/?p=200</guid>
		<description><![CDATA[It&#8217;s not really obvious with the error messages you get, but using a thing like Form_Login does not work out of the box with a modular structure. Which is slightly surprising considering that it&#8217;s inside the default module.
I have found examples like the second one below, but no one mentions that you actually declare the [...]]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s not really obvious with the error messages you get, but using a thing like Form_Login does not work out of the box with a modular structure. Which is slightly surprising considering that it&#8217;s inside the default module.</p>
<p>I have found <a href="http://forums.zend.com/viewtopic.php?f=69&#038;t=1288&#038;start=0" class="external">examples like the second one below</a>, but no one mentions that you actually declare the default namespace too for everything to work.</p>
<pre><code><code>$autoloader = new Zend_Application_Module_Autoloader(array(
	'namespace' => '',
	'basePath'  => APPLICATION_PATH .'/modules/default',
	'resourceTypes' => array (
		'form' => array(
		'path' => 'forms',
		'namespace' => 'Form',
    ),
	'model' => array(
		'path' => 'models',
		'namespace' => 'Model',
    	),
    )
));

$autoloader = new Zend_Application_Module_Autoloader(array(
	'namespace' => 'Admin_',
	'basePath'  => APPLICATION_PATH .'/modules/admin',
	'resourceTypes' => array (
		'form' => array(
		'path' => 'forms',
		'namespace' => 'Form',
    ),
	'model' => array(
		'path' => 'models',
		'namespace' => 'Model',
    	),
    )
));</code></code></pre>
<div id="crp_related"><h2>Related Articles:</h2><ul><li><a href="http://think-robot.com/2009/02/zend-framework-decorators-labels-and-checkboxes/" rel="bookmark">Zend Framework Decorators - Labels and Checkboxes</a></li><li><a href="http://think-robot.com/2009/05/doctrine-many-to-many-with-extra-fields/" rel="bookmark">Doctrine Many To Many With Extra Fields</a></li><li><a href="http://think-robot.com/2008/11/wordpress-nextgen-gallery-tweak/" rel="bookmark">Wordpress NextGen gallery tweak</a></li><li><a href="http://think-robot.com/2009/04/zend_db_select-multiple-table-joins-explained/" rel="bookmark">Zend_Db_Select multiple table joins explained</a></li><li><a href="http://think-robot.com/2009/12/phpunit-selenium-screenshot-path-problem/" rel="bookmark">PHPUnit & Selenium - screenshot path problem</a></li></ul></div><img src="http://feeds.feedburner.com/~r/Think-robot/~4/cdZn49q--dk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://think-robot.com/2009/07/autloading-modular-forms-models-in-zend-framework-18/feed/</wfw:commentRss>
		<feedburner:origLink>http://think-robot.com/2009/07/autloading-modular-forms-models-in-zend-framework-18/</feedburner:origLink></item>
		<item>
		<title>Redirect in controller plugin - Zend Framework 1.8</title>
		<link>http://feedproxy.google.com/~r/Think-robot/~3/yljRJRlHuoQ/</link>
		<comments>http://think-robot.com/2009/07/redirect-in-controller-plugin-zend-framework-18/#comments</comments>
		<pubDate>Wed, 29 Jul 2009 21:53:02 +0000</pubDate>
		<dc:creator>Joanna</dc:creator>
		
		<category><![CDATA[Code]]></category>

		<category><![CDATA[plugin]]></category>

		<category><![CDATA[redirect]]></category>

		<category><![CDATA[Zend Framework]]></category>

		<guid isPermaLink="false">http://think-robot.com/?p=195</guid>
		<description><![CDATA[If you need to redirect while inside a controller plugin, for example in preDispatch() here is a quick way to do it:
$redirector = Zend_Controller_Action_HelperBroker::getStaticHelper('redirector');
$redirector->gotoUrl('/login/');

Related Articles:Hitch. Object-oriented event handlers with jQueryUsing Zend_Mail and Google SMTP to send emailsAutloading modular forms &#038; models in Zend Framework 1.8Zend_Db_Select multiple table joins explainedWordpress NextGen gallery tweak]]></description>
			<content:encoded><![CDATA[<p>If you need to redirect while inside a controller plugin, for example in preDispatch() here is a quick way to do it:</p>
<pre><code><code>$redirector = Zend_Controller_Action_HelperBroker::getStaticHelper('redirector');
$redirector->gotoUrl('/login/');
</code></code></pre>
<div id="crp_related"><h2>Related Articles:</h2><ul><li><a href="http://think-robot.com/2009/06/hitch-object-oriented-event-handlers-with-jquery/" rel="bookmark">Hitch. Object-oriented event handlers with jQuery</a></li><li><a href="http://think-robot.com/2008/12/using-zend_mail-and-google-smtp-to-send-emails/" rel="bookmark">Using Zend_Mail and Google SMTP to send emails</a></li><li><a href="http://think-robot.com/2009/07/autloading-modular-forms-models-in-zend-framework-18/" rel="bookmark">Autloading modular forms & models in Zend Framework 1.8</a></li><li><a href="http://think-robot.com/2009/04/zend_db_select-multiple-table-joins-explained/" rel="bookmark">Zend_Db_Select multiple table joins explained</a></li><li><a href="http://think-robot.com/2008/11/wordpress-nextgen-gallery-tweak/" rel="bookmark">Wordpress NextGen gallery tweak</a></li></ul></div><img src="http://feeds.feedburner.com/~r/Think-robot/~4/yljRJRlHuoQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://think-robot.com/2009/07/redirect-in-controller-plugin-zend-framework-18/feed/</wfw:commentRss>
		<feedburner:origLink>http://think-robot.com/2009/07/redirect-in-controller-plugin-zend-framework-18/</feedburner:origLink></item>
		<item>
		<title>Hitch. Object-oriented event handlers with jQuery</title>
		<link>http://feedproxy.google.com/~r/Think-robot/~3/DkRVEeLE9Us/</link>
		<comments>http://think-robot.com/2009/06/hitch-object-oriented-event-handlers-with-jquery/#comments</comments>
		<pubDate>Sun, 14 Jun 2009 20:21:51 +0000</pubDate>
		<dc:creator>Andrew</dc:creator>
		
		<category><![CDATA[Code]]></category>

		<category><![CDATA[Tutorials]]></category>

		<category><![CDATA[bind]]></category>

		<category><![CDATA[event handling]]></category>

		<category><![CDATA[hitch]]></category>

		<category><![CDATA[JavaScript]]></category>

		<category><![CDATA[jQuery]]></category>

		<category><![CDATA[object oriented]]></category>

		<guid isPermaLink="false">http://think-robot.com/?p=187</guid>
		<description><![CDATA[Moving to jQuery from YUI has been a 99% positive experience. Probably the only thing I&#8217;ve really missed was the ability provided by YUI Event to control the object scope that an event handler was executed in.

When you attach an event to an element in jQuery within the event handler function the this keyword always [...]]]></description>
			<content:encoded><![CDATA[<p>Moving to jQuery from YUI has been a 99% positive experience. Probably the only thing I&#8217;ve really missed was the ability provided by <a href="http://developer.yahoo.com/yui/event/" target="_blank">YUI Event</a> to control the object scope that an event handler was executed in.</p>
<p><span id="more-187"></span></p>
<p>When you attach an event to an element in jQuery within the event handler function the this keyword always refers to the element that triggered the event.</p>
<pre><code><code>$('a').bind('click', function() {
    alert(this);
});</code></code></pre>
<p>Here this will be the a element that triggered the event. For the majority of the time this behaviour is absolutely ideal. However, if you&#8217;re using object oriented javascript and are trying to handle an event using a method of one of your classes, the chances are you&#8217;d want this to refer to the instance of your class instead of the DOM element.</p>
<pre><code><code>var Klass = function() {
    this.message = 'hello';
};
Klass.prototype.handleClick = function(e) {
    alert(this.message);
};
var obj = new Klass();

$('a').bind('click', obj.handleClick);</code></code></pre>
<p>The above fails because when Klass.prototype.handleClick is triggered from the click event this still refers to the a element that was clicked on. Hence this.message is undefined.</p>
<p>To solve this problem I made a small jQuery plugin called hitch that allows you to control the object scope. The above example would be rewritten as</p>
<pre><code><code>var Klass = function() {
    this.message = 'hello';
};
Klass.prototype.handleClick = function(e) {
    alert(this.message);
};
var obj = new Klass();

$('a').hitch('click', obj.handleClick, obj);</code></code></pre>
<p>If the handleClick method needs to access the DOM element that triggered the event, that can still be accessed through e.target. If the object scope argument is omitted then hitch should work in the same way as the standard bind method.</p>
<p>The plugin itself is just a few lines</p>
<pre><code><code>(function($) {
    $.fn.hitch = function(ev, fn, scope) {
        return this.bind(ev, function() {
            return fn.apply(scope || this, Array.prototype.slice.call(arguments));
        });
    };
})(jQuery);</code></code></pre>
<p>I believe similar functionality is scheduled to be included in an upcoming jQuery release, but for the time being I&#8217;m finding this plugin to be exceptionally useful.</p>
<div id="crp_related"><h2>Related Articles:</h2><ul><li><a href="http://think-robot.com/2008/11/nested-sortable-using-jtree-clickable-links/" rel="bookmark">Nested sortable using jTree - clickable links</a></li><li><a href="http://think-robot.com/2008/10/display-meetings-from-entourage-using-geektool/" rel="bookmark">Display Meetings From Entourage Using GeekTool</a></li><li><a href="http://think-robot.com/2009/04/zend_db_select-multiple-table-joins-explained/" rel="bookmark">Zend_Db_Select multiple table joins explained</a></li><li><a href="http://think-robot.com/2010/03/multiple-changes-and-a-delete-on-same-object-in-doctrine/" rel="bookmark">Multiple changes and a delete on same object in doctrine</a></li><li><a href="http://think-robot.com/2008/11/wordpress-nextgen-gallery-tweak/" rel="bookmark">Wordpress NextGen gallery tweak</a></li></ul></div><img src="http://feeds.feedburner.com/~r/Think-robot/~4/DkRVEeLE9Us" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://think-robot.com/2009/06/hitch-object-oriented-event-handlers-with-jquery/feed/</wfw:commentRss>
		<feedburner:origLink>http://think-robot.com/2009/06/hitch-object-oriented-event-handlers-with-jquery/</feedburner:origLink></item>
		<item>
		<title>Doctrine Many To Many With Extra Fields</title>
		<link>http://feedproxy.google.com/~r/Think-robot/~3/0iMG5giPnzk/</link>
		<comments>http://think-robot.com/2009/05/doctrine-many-to-many-with-extra-fields/#comments</comments>
		<pubDate>Sat, 09 May 2009 10:25:13 +0000</pubDate>
		<dc:creator>Joanna</dc:creator>
		
		<category><![CDATA[Code]]></category>

		<category><![CDATA[database]]></category>

		<category><![CDATA[doctrine]]></category>

		<category><![CDATA[many to many]]></category>

		<category><![CDATA[php]]></category>

		<category><![CDATA[YAML]]></category>

		<guid isPermaLink="false">http://think-robot.com/?p=180</guid>
		<description><![CDATA[Recently I have started using Doctrine with Zend Framework. Most of the time it is great, but sometimes I get stuck on this or that issue. Most of my problems so far have been connected with the Many to Many relationship. Here are a few tips I learned the hard way.
Automatic relationship detection
When setting up [...]]]></description>
			<content:encoded><![CDATA[<p>Recently I have started using Doctrine with Zend Framework. Most of the time it is great, but sometimes I get stuck on this or that issue. Most of my problems so far have been connected with the Many to Many relationship. Here are a few tips I learned the hard way.<span id="more-180"></span></p>
<h2>Automatic relationship detection</h2>
<p>When setting up a YAML file with your database schema you can start it with the handy declaration:</p>
<pre><code><code>---
detect_relations: true</code></code></pre>
<p>It does the One to Many relationship for you nicely, however the Many to Many ones did not work out of the box and required manual BaseModel tweaking. Take for example my <strong>Tag</strong>, <strong>Website</strong>, and <strong>WebsiteTag</strong> classes.</p>
<h3>BaseTag:</h3>
<pre><code><code>abstract class BaseTag extends Doctrine_Record {

  public function setTableDefinition() {
    $this-&gt;setTableName('ts_tags');
    $this-&gt;hasColumn('name', 'string', 128, array('type' =&gt; 'string', 'length' =&gt; '128'));
    $this-&gt;hasColumn('is_category as isCategory', 'integer', 1, array('type' =&gt; 'integer', 'length' =&gt; '1'));
    $this-&gt;hasColumn('page_id', 'integer', 8, array('type' =&gt; 'integer', 'length' =&gt; 8));
    $this-&gt;hasColumn('ordering', 'integer', 5, array('type' =&gt; 'integer', 'length' =&gt; '5'));
  }

  public function setUp() {
    $this-&gt;hasOne('Page', array('local' =&gt; 'page_id',
                                              'foreign' =&gt; 'id'));
<strong>
    $this-&gt;hasMany('Website as Websites', array('local' =&gt; 'tag_id',
                                                                     'foreign' =&gt; 'website_id',
                                                                     'refClass' =&gt; 'WebsiteTag'));</strong>

    $i18n0 = new Doctrine_Template_I18n(array('fields' =&gt; array(0 =&gt; 'name')));
    $this-&gt;actAs($i18n0);
  }
}</code></code></pre>
<h3>BaseWebsite:</h3>
<pre><code><code>abstract class BaseWebsite extends Doctrine_Record{
  public function setTableDefinition() {
    $this-&gt;setTableName('ts_websites');
    $this-&gt;hasColumn('page_id', 'integer', 8, array('type' =&gt; 'integer', 'length' =&gt; 8));
    $this-&gt;hasColumn('title', 'string', 128, array('type' =&gt; 'string', 'length' =&gt; '128'));
    $this-&gt;hasColumn('client', 'string', 128, array('type' =&gt; 'string', 'length' =&gt; '128'));
    $this-&gt;hasColumn('link', 'string', 255, array('type' =&gt; 'string', 'length' =&gt; '255'));
    $this-&gt;hasColumn('intro', 'string', null, array('type' =&gt; 'string'));
    $this-&gt;hasColumn('content', 'string', null, array('type' =&gt; 'string'));
    $this-&gt;hasColumn('published', 'timestamp', null, array('type' =&gt; 'timestamp'));
    $this-&gt;hasColumn('is_home as isHome', 'integer', 1, array('type' =&gt; 'integer', 'length' =&gt; '1'));
  }

  public function setUp() {
    $this-&gt;hasOne('Page', array('local' =&gt; 'page_id',
                                              'foreign' =&gt; 'id'));

    <strong>$this-&gt;hasMany('Tag as Tags', array('local' =&gt; 'website_id',
                                                          'foreign' =&gt; 'tag_id',
                                                          'refClass' =&gt; 'WebsiteTag'));</strong>

    $this-&gt;hasMany('Media', array('local' =&gt; 'website_id',
                                                 'foreign' =&gt; 'media_id',
                                                 'refClass' =&gt; 'WebsiteMedia'));

    $i18n0 = new Doctrine_Template_I18n(array('fields' =&gt; array(0 =&gt; 'intro', 1 =&gt; 'content', 2 =&gt; 'title')));
    $this-&gt;actAs($i18n0);
  }
}
</code></code></pre>
<h3>BaseWebsiteTag:</h3>
<pre><code><code>abstract class BaseWebsiteTag extends Doctrine_Record {

  public function setTableDefinition() {
    $this-&gt;setTableName('ts_website_has_tags');
    $this-&gt;hasColumn('tag_id', 'integer', 8, array('type' =&gt; 'integer', 'length' =&gt; 8, <strong>'primary' =&gt; true )</strong>);
    $this-&gt;hasColumn('website_id', 'integer', 8, array('type' =&gt; 'integer', 'length' =&gt; 8,<strong> 'primary' =&gt; true</strong>));
  }

  public function setUp() {
  }
}
</code></code></pre>
<p>The highlighted portions of code needed to be added. You can actually define these manually in the YAML file, the catch is that I was expecting it to happen magically with the auto relationship setting.</p>
<h2>Many to Many with extra fields</h2>
<p>Another little issue that Doctrine has is when you try to retrieve records. It in a way skips the joining table and retrieves a collection of the final items. In most cases this is exactly what you might need. However for my Media I decided to keep the ordering in the joining table - WebsiteMedia.</p>
<pre><code><code>$q = Doctrine_Query::create()
  -&gt;from('Website w')
  -&gt;joinLeft('w.Media');</code></code></pre>
<p>If you simply proceed with the above you only get Media objects without the ordering.</p>
<h3>BaseWebsiteMedia:</h3>
<pre><code><code>abstract class BaseWebsiteMedia extends Doctrine_Record {

    public function setTableDefinition() {
        $this-&gt;setTableName('ts_website_has_media');
        $this-&gt;hasColumn('website_id', 'integer', 8, array('type' =&gt; 'integer', 'length' =&gt; 8, 'primary' =&gt; true));
        $this-&gt;hasColumn('media_id', 'integer', 8, array('type' =&gt; 'integer', 'length' =&gt; 8, 'primary' =&gt; true));
        $this-&gt;hasColumn('caption', 'string', 255, array('type' =&gt; 'string', 'length' =&gt; '255'));
        $this-&gt;hasColumn('is_main as isMain', 'integer', 1, array('type' =&gt; 'integer', 'length' =&gt; '1'));
        $this-&gt;hasColumn('ordering', 'integer', 4, array('type' =&gt; 'integer', 'length' =&gt; '4'));
    }

    public function setUp() {
        <strong>$this-&gt;hasOne('Website', array('local' =&gt; 'website_id',
                                       'foreign' =&gt; 'id'));

        $this-&gt;hasOne('Media', array('local' =&gt; 'media_id',
                                     'foreign' =&gt; 'id'));</strong>

        $i18n0 = new Doctrine_Template_I18n(array('fields' =&gt; array(0 =&gt; 'caption')));
        $this-&gt;actAs($i18n0);
    }
}</code></code></pre>
<p>If you do not have the additional One to Many relations declared already you should add them now. With the modified model now you can get the records like so:</p>
<pre><code><code>$q = Doctrine_Query::create()
  ->from('Website w')
  ->leftJoin('w.WebsiteMedia wm')
    ->leftJoin('wm.Media m');
</code></code></pre>
<p>This gives you a collection of WebsiteMedia records each containing the actual Media item.</p>
<div id="crp_related"><h2>Related Articles:</h2><ul><li><a href="http://think-robot.com/2009/04/zend_db_select-multiple-table-joins-explained/" rel="bookmark">Zend_Db_Select multiple table joins explained</a></li><li><a href="http://think-robot.com/2009/02/zend-framework-decorators-labels-and-checkboxes/" rel="bookmark">Zend Framework Decorators - Labels and Checkboxes</a></li><li><a href="http://think-robot.com/2009/07/autloading-modular-forms-models-in-zend-framework-18/" rel="bookmark">Autloading modular forms & models in Zend Framework 1.8</a></li><li><a href="http://think-robot.com/2008/12/using-zend_mail-and-google-smtp-to-send-emails/" rel="bookmark">Using Zend_Mail and Google SMTP to send emails</a></li><li><a href="http://think-robot.com/2008/11/nested-sortable-using-jtree-clickable-links/" rel="bookmark">Nested sortable using jTree - clickable links</a></li></ul></div><img src="http://feeds.feedburner.com/~r/Think-robot/~4/0iMG5giPnzk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://think-robot.com/2009/05/doctrine-many-to-many-with-extra-fields/feed/</wfw:commentRss>
		<feedburner:origLink>http://think-robot.com/2009/05/doctrine-many-to-many-with-extra-fields/</feedburner:origLink></item>
		<item>
		<title>Week of the Month in Mysql</title>
		<link>http://feedproxy.google.com/~r/Think-robot/~3/P6fpavgeNXA/</link>
		<comments>http://think-robot.com/2009/04/week-of-the-month-in-mysql/#comments</comments>
		<pubDate>Sun, 26 Apr 2009 15:37:16 +0000</pubDate>
		<dc:creator>Joanna</dc:creator>
		
		<category><![CDATA[Code]]></category>

		<category><![CDATA[Tutorials]]></category>

		<category><![CDATA[function]]></category>

		<category><![CDATA[Mysql]]></category>

		<category><![CDATA[SQL]]></category>

		<category><![CDATA[stackoverflow]]></category>

		<category><![CDATA[week]]></category>

		<guid isPermaLink="false">http://think-robot.com/?p=173</guid>
		<description><![CDATA[SELECT WEEK(my_date_field,5) -
WEEK(DATE_SUB(my_date_field, INTERVAL DAYOFMONTH(my_date_field)-1 DAY),5)+1


Recently I needed to get the number of the week in a certain month. There is the handy WEEK() function, however it only gives you the week of the year.
Obviously before we can go through the code above, a definition of the nth week of the month is needed (as [...]]]></description>
			<content:encoded><![CDATA[<pre><code><code>SELECT WEEK(my_date_field,5) -
WEEK(DATE_SUB(my_date_field, INTERVAL DAYOFMONTH(my_date_field)-1 DAY),5)+1
</code></code></pre>
<p><span id="more-173"></span><br />
Recently I needed to get the number of the week in a certain month. There is the handy <strong>WEEK()</strong> function, however it only gives you the week of the year.</p>
<p>Obviously before we can go through the code above, a definition of the <strong>n<sup>th</sup></strong> week of the month is needed (as I realized after <a href="http://stackoverflow.com/questions/785206/function-for-week-of-the-month-in-mysql">asking the question on stackoverflow</a>&#8230;):</p>
<p>For me the week starts on a Monday, and the first week of the month does not have to be a full week - if a month starts on a Friday, the Friday to Sunday days count as the first week.</p>
<p>With this out of the way here is a quick explanation of what goes on above.</p>
<pre><code><code>WEEK(my_date_field,<strong>5</strong>)</code></code></pre>
<p>First we get the actual week number of the year for the specified date. The second parameter is there to define Monday as the first day of the week (<a href="http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_week">more details in Mysql manual</a>).</p>
<pre><code><code>DAYOFMONTH(my_date_field)</code></code></pre>
<p>Next we get the day of the month for the specified date.</p>
<pre><code><code>DATE_SUB(my_date_field, <strong>DAYOFMONTH(my_date_field)</strong>-1 DAY)</code></code></pre>
<p>We can use that number with <strong>DATE_SUB</strong> to get the date for the 1<sup>st</sup> day of the month. This in turn can be used to get the week number for the 1<sup>st</sup> week of the month.</p>
<pre><code><code>SELECT WEEK(my_date_field,5) -
WEEK(<strong>DATE_SUB(my_date_field, INTERVAL DAYOFMONTH(my_date_field)-1 DAY)</strong>,5)+1
</code></code></pre>
<p>Finally we subtract the first day&#8217;s week from the actual week number which should give us the month&#8217;s week number starting from 0. Thus the final <strong>+1</strong> if you want the count to start from 1.</p>
<div class="zemanta-pixie"><img class="zemanta-pixie-img" src="http://img.zemanta.com/pixy.gif?x-id=55c87db5-a5a4-45e9-92f1-43c731c03ece" /><span class="zem-script more-related pretty-attribution"><script type="text/javascript" src="http://static.zemanta.com/readside/loader.js" defer="defer"></script></span></div>
<div id="crp_related"><h2>Related Articles:</h2><ul><li><a href="http://think-robot.com/2008/06/atmedia-london-2008/" rel="bookmark">@media - London, 2008</a></li><li><a href="http://think-robot.com/2009/02/firefox-ignores-tabs-but-not-spaces-in-a-pre-tag/" rel="bookmark">Firefox ignores tabs but not spaces in a pre tag</a></li><li><a href="http://think-robot.com/2009/02/how-to-use-the-strong-ownership-list/" rel="bookmark">How To Use the Strong Ownership List</a></li><li><a href="http://think-robot.com/2009/04/zend_db_select-multiple-table-joins-explained/" rel="bookmark">Zend_Db_Select multiple table joins explained</a></li><li><a href="http://think-robot.com/2009/05/doctrine-many-to-many-with-extra-fields/" rel="bookmark">Doctrine Many To Many With Extra Fields</a></li></ul></div><img src="http://feeds.feedburner.com/~r/Think-robot/~4/P6fpavgeNXA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://think-robot.com/2009/04/week-of-the-month-in-mysql/feed/</wfw:commentRss>
		<feedburner:origLink>http://think-robot.com/2009/04/week-of-the-month-in-mysql/</feedburner:origLink></item>
	</channel>
</rss>
