<?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>Tim Bowler &#187; Website performance optimization</title>
	<atom:link href="http://timothybowler.com/category/programming/php/symfony/optimization/feed/" rel="self" type="application/rss+xml" />
	<link>http://timothybowler.com</link>
	<description>Certified Scrum Master &#124; Certified Scrum Practitioner &#124; Agile Coach &#124; Agile Practitioner</description>
	<lastBuildDate>Sat, 19 Dec 2009 16:14:31 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Symfony 1.3 Web Application Development</title>
		<link>http://timothybowler.com/2009/10/23/symfony-13-web-application-development/</link>
		<comments>http://timothybowler.com/2009/10/23/symfony-13-web-application-development/#comments</comments>
		<pubDate>Fri, 23 Oct 2009 01:09:53 +0000</pubDate>
		<dc:creator>Tim Bowler</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Symfony]]></category>
		<category><![CDATA[Website performance optimization]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[orm]]></category>
		<category><![CDATA[propel]]></category>

		<guid isPermaLink="false">http://timothybowler.com/?p=121</guid>
		<description><![CDATA[Finally after nearly one year I have managed to publish my first book.  And I am proud to say, its all about the PHP Symfony Framework.

The Symfony framework allows you to build modern web applications and web services easily and rapidly. The MVC components separate the logic from the user interface and therefore make developing, changing, and testing your applications much faster. Using Symfony you can minimize repetitive coding tasks, optimize performance, and easily integrate with other libraries and frameworks.]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.packtpub.com/symfony-1-3-web-application-development/book/mid/071009dt079h"><img class="size-full wp-image-122 alignright" title="symfony-13-web-application-development" src="http://timothybowler.com/wp-content/uploads/2009/10/symfony-13-web-application-development.png" alt="Symfony 1.3 Web application development" width="100" height="123" /></a></p>
<p>Although this framework contains many powerful features, most developers do not exploit Symfony to its full potential.</p>
<p><span id="more-121"></span></p>
<p>This book makes it easy to get started and produce a powerful and professional-looking web site utilizing the many features of Symfony. Taking you through a real-life application, it covers all major Symfony framework features without pushing you into too much theoretical detail, as well as throwing some light on the best practices for rapid application development.</p>
<p>This book is written for PHP developers who want to get started with Symfony 1.3 or for those that are currently using Symfony 1.0/1.1/1.2.</p>
<p>By reading the book and following the example web application you will learn about:</p>
<ul>
<li>Using the form framework</li>
<li>Using the new send email features</li>
<li>Creating Symfony command line tasks</li>
<li>Using the admin generator to create an entire backend</li>
<li>Securing the backend of your application</li>
<li>Internationalization</li>
<li>Installing, using and creating your own plugins</li>
<li>Learning about caching by using both Symfony&#8217;s caching framework and <a title="memcached" href="http://www.danga.com/memcached/" target="_blank">memcached</a></li>
<li>Working with the <a title="Propel" href="http://propel.phpdb.org/trac/" target="_blank">Propel</a> ORM</li>
<li>Using <a title="JQuery" href="http://jquery.com/" target="_blank">JQuery</a> and form widgets</li>
<li>Bridging other library&#8217;s like <a title="Ezcomponents" href="http://ez.no/ezcomponents" target="_blank">Ezcomponents</a> and the <a title="Zend Framework" href="http://www.zend.com/en/community/framework" target="_blank">Zend Framework</a></li>
<li>Deploying you application</li>
</ul>
<table border="0">
<tbody>
<tr>
<td><a href="http://timothybowler.com/wp-content/uploads/2009/10/4565-symfony-1-3-web-application-development-sample-chapter-4-user-interaction-and-email-automation.pdf" target="_blank"><img class="size-full wp-image-139 alignleft" title="Chapter 4: User Interaction and Email Automation" src="http://timothybowler.com/wp-content/uploads/2009/10/page_white_acrobat-11.png" alt="Symfony 1.3 Web Application Development. Chapter 4: User Interaction and Email Automation" width="24" height="16" /></a></td>
<td>Just to show you that the book is worth buying please download and view <a title="Chapter 4 download" href="http://timothybowler.com/wp-content/uploads/2009/10/4565-symfony-1-3-web-application-development-sample-chapter-4-user-interaction-and-email-automation.pdf" target="_blank">Chapter 4: User Interaction and Email Automation</a></td>
</tr>
</tbody>
</table>
<p>To purchase your copy please vist <a href="http://www.packtpub.com/symfony-1-3-web-application-development/book/mid/071009dt079h" target="_blank">Packt</a>&#8216;s site.</p>
<p>Review:</p>
<p><a title="Symfony 1.3 by Tim Bowler" href="http://blog.fedecarg.com/2009/10/13/symfony-1-3-web-application-development/" target="_blank">Federico Cargnelutti</a></p>
<p><a title="Symfony 1.3 by Tim Bowler" href="http://blog.hma-info.de/2009/10/10/review-symfony-1-3-web-application-development-book/" target="_blank">Fabian</a></p>
<script type="text/javascript">
  addthis_url    = 'http%3A%2F%2Ftimothybowler.com%2F2009%2F10%2F23%2Fsymfony-13-web-application-development%2F';
  addthis_title  = 'Symfony+1.3+Web+Application+Development';
  addthis_pub    = '';
</script><script type="text/javascript" src="http://s7.addthis.com/js/addthis_widget.php?v=12" ></script>
]]></content:encoded>
			<wfw:commentRss>http://timothybowler.com/2009/10/23/symfony-13-web-application-development/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Use a join</title>
		<link>http://timothybowler.com/2008/04/30/use-a-join/</link>
		<comments>http://timothybowler.com/2008/04/30/use-a-join/#comments</comments>
		<pubDate>Wed, 30 Apr 2008 15:34:43 +0000</pubDate>
		<dc:creator>Tim Bowler</dc:creator>
				<category><![CDATA[Symfony]]></category>
		<category><![CDATA[Website performance optimization]]></category>
		<category><![CDATA[left join]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[symfony left join]]></category>

		<guid isPermaLink="false">http://timothybowler.com/2008/04/30/use-a-join/</guid>
		<description><![CDATA[I was refactoring a few developers code today, and one thing I see time and time again is two queries in favour of a left join, . The problem is symfony makes result set retrieval so easy (thanks to propel of course).
Example:
To see if an author has a comment


$author = AuthorPeer::retrieveByPK($id);
$authorComments = CommentPeer::getAuthorComments($author-&#38;gt;getAuthorId());

//In the model
public [...]]]></description>
			<content:encoded><![CDATA[<p>I was refactoring a few developers code today, and one thing I see time and time again is two queries in favour of a left join, . The problem is symfony makes result set retrieval so easy (thanks to propel of course).</p>
<p>Example:<br />
To see if an author has a comment<br />
<span id="more-33"></span></p>
<p><pre><pre>
$author = AuthorPeer::retrieveByPK($id);
$authorComments = CommentPeer::getAuthorComments($author-&amp;gt;getAuthorId());

//In the model
public static function getAuthorComments($id)
{

&nbsp;&nbsp;&nbsp;&nbsp;$c = new Criteria();
&nbsp;&nbsp;&nbsp;&nbsp;$c-&amp;gt;add(self::AUTHOR_ID, $id);

&nbsp;&nbsp;&nbsp;&nbsp;return self::doSelect($c);

}</pre></pre><br />
The reason why people would want to use this is so they can see if a comment is available. Which is a fair point if your sql is rusty <img src='http://timothybowler.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /><br />
<pre><pre>
$author = AuthorPeer::getAuthorComments($id);
$author = array_pop($author);

...
...

//In the model
public static function getAuthorComments($id)
{
$c = new Criteria();
$c-&amp;gt;add(self::AUTHOR_ID, $id);

$c-&amp;gt;addJoin(self::AUTHOR_ID, CommentPeer::AUTHOR_ID, Criteria::LEFT_JOIN);
$c-&amp;gt;setLimit(1);
return self::doSelect($c);
}</pre></pre><br />
As you can see the latter users a left join, which means only one database query.</p>
<script type="text/javascript">
  addthis_url    = 'http%3A%2F%2Ftimothybowler.com%2F2008%2F04%2F30%2Fuse-a-join%2F';
  addthis_title  = 'Use+a+join';
  addthis_pub    = '';
</script><script type="text/javascript" src="http://s7.addthis.com/js/addthis_widget.php?v=12" ></script>
]]></content:encoded>
			<wfw:commentRss>http://timothybowler.com/2008/04/30/use-a-join/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
