<?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>The Life of RubenV (Ruben Vermeersch) &#187; php</title>
	<atom:link href="http://weblog.savanne.be/tags/php/feed" rel="self" type="application/rss+xml" />
	<link>http://weblog.savanne.be</link>
	<description></description>
	<lastBuildDate>Mon, 30 Jan 2012 14:14:23 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Zend Framework 1.8 Web Application Development</title>
		<link>http://weblog.savanne.be/184-zend-framework-1-8-web-application-development</link>
		<comments>http://weblog.savanne.be/184-zend-framework-1-8-web-application-development#comments</comments>
		<pubDate>Wed, 02 Dec 2009 09:26:14 +0000</pubDate>
		<dc:creator>Ruben</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[zendframework]]></category>

		<guid isPermaLink="false">http://weblog.savanne.be/184-zend-framework-1-8-web-application-development</guid>
		<description><![CDATA[<p>I recently read the book <strong>Zend Framework 1.8 Web Application Development by  Keith Pope</strong>. Having done quite a lot of PHP work and having used Zend Framework, this book caught my attention. In general, I don&#8217;t really like IT books that cover a technology, most of them tend to be a refactored version of the reference manual.</p>
<div align="center"><img src="/zf-book.jpg" alt="Zend Framework 1.8"></div>
<p>Not this book. It&#8217;s actually nice and complementary to the reference manual provided by Zend: whereas the reference manual describes each component in great detail, this book takes a more high-level view of things, showing how the pieces of the puzzle fit together.</p>
<p>It does this by building a full application, from the ground up, step-by-step. Where needed, a detour past theory is not shied. So it&#8217;s not all application: the author takes quite a lot of time to cover e.g. the ideas behind MVC.</p>
<p>I also liked the broad range of topics covered, including testing, something which is quite often overlooked for web applications.</p>
<p><strong>In all, this is a good read.</strong> No earth-shattering must-have literature, but certainly useful. If you plan on building a lot of Zend Framework applications, this book will certainly help a lot. The only minor point is the somewhat confusing Model description. Other than that: good one.</p>
<p><em>Disclaimer: Packt Publishing was so kind to send me a review copy of this book. This would not stop me from declaring that it&#8217;s utter shit, it just so happens to be that I liked the book. You can buy my time, not my opinion.</em></p>
]]></description>
			<content:encoded><![CDATA[<p>I recently read the book <strong>Zend Framework 1.8 Web Application Development by  Keith Pope</strong>. Having done quite a lot of PHP work and having used Zend Framework, this book caught my attention. In general, I don&#8217;t really like IT books that cover a technology, most of them tend to be a refactored version of the reference manual.</p>
<div align="center"><img src="/zf-book.jpg" alt="Zend Framework 1.8"></div>
<p>Not this book. It&#8217;s actually nice and complementary to the reference manual provided by Zend: whereas the reference manual describes each component in great detail, this book takes a more high-level view of things, showing how the pieces of the puzzle fit together.</p>
<p>It does this by building a full application, from the ground up, step-by-step. Where needed, a detour past theory is not shied. So it&#8217;s not all application: the author takes quite a lot of time to cover e.g. the ideas behind MVC.</p>
<p>I also liked the broad range of topics covered, including testing, something which is quite often overlooked for web applications.</p>
<p><strong>In all, this is a good read.</strong> No earth-shattering must-have literature, but certainly useful. If you plan on building a lot of Zend Framework applications, this book will certainly help a lot. The only minor point is the somewhat confusing Model description. Other than that: good one.</p>
<p><em>Disclaimer: Packt Publishing was so kind to send me a review copy of this book. This would not stop me from declaring that it&#8217;s utter shit, it just so happens to be that I liked the book. You can buy my time, not my opinion.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://weblog.savanne.be/184-zend-framework-1-8-web-application-development/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Zend_Service_Mollom 1.2.0</title>
		<link>http://weblog.savanne.be/151-zend-service-mollom-1-2-0</link>
		<comments>http://weblog.savanne.be/151-zend-service-mollom-1-2-0#comments</comments>
		<pubDate>Sun, 21 Dec 2008 16:21:28 +0000</pubDate>
		<dc:creator>Ruben</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[zendframework]]></category>

		<guid isPermaLink="false">http://weblog.savanne.be/151-zend-service-mollom-1-2-0</guid>
		<description><![CDATA[<p>I&#8217;ve just released <a href="http://ruben.savanne.be/articles/zend-service-mollom-documentation">Zend_Service_Mollom</a> 1.2.0, the <a href="http://framework.zend.com">Zend Framework</a> component that integrates <a href="http://mollom.com">Mollom</a>, the comment-spam checker.</p>
<p>New in this release is optional support for caching, making calls to Mollom faster.</p>
<p>I will propose this version for Zend Framework 1.8.</p>
<p>Download: <a href="http://files.savanne.be/linux/Zend_Service_Mollom/Zend_Service_Mollom-1.2.0.zip">Zend_Service_Mollom-1.2.0.zip</a><br />
Git: <a href="http://git.savanne.be/?p=zend.service.mollom.git;a=summary">git://git.savanne.be/git/zend.service.mollom.git</a><br />
Documentation: <a href="http://ruben.savanne.be/articles/zend-service-mollom-documentation">here</a></p>
<div align="center"><img src="/zfmollom.png" alt="Zend_Service_Mollom"></div>
]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve just released <a href="http://ruben.savanne.be/articles/zend-service-mollom-documentation">Zend_Service_Mollom</a> 1.2.0, the <a href="http://framework.zend.com">Zend Framework</a> component that integrates <a href="http://mollom.com">Mollom</a>, the comment-spam checker.</p>
<p>New in this release is optional support for caching, making calls to Mollom faster.</p>
<p>I will propose this version for Zend Framework 1.8.</p>
<p>Download: <a href="http://files.savanne.be/linux/Zend_Service_Mollom/Zend_Service_Mollom-1.2.0.zip">Zend_Service_Mollom-1.2.0.zip</a><br />
Git: <a href="http://git.savanne.be/?p=zend.service.mollom.git;a=summary">git://git.savanne.be/git/zend.service.mollom.git</a><br />
Documentation: <a href="http://ruben.savanne.be/articles/zend-service-mollom-documentation">here</a></p>
<div align="center"><img src="/zfmollom.png" alt="Zend_Service_Mollom"></div>
]]></content:encoded>
			<wfw:commentRss>http://weblog.savanne.be/151-zend-service-mollom-1-2-0/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Zend_Service_Mollom 1.0.0 &amp; 1.1.0</title>
		<link>http://weblog.savanne.be/149-zend-service-mollom-1-0-0-1-1-0</link>
		<comments>http://weblog.savanne.be/149-zend-service-mollom-1-0-0-1-1-0#comments</comments>
		<pubDate>Sun, 07 Dec 2008 11:25:05 +0000</pubDate>
		<dc:creator>Ruben</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[zendframework]]></category>

		<guid isPermaLink="false">http://weblog.savanne.be/149-zend-service-mollom-1-0-0-1-1-0</guid>
		<description><![CDATA[<p>I have just released Zend_Service_Mollom 1.0.0 and 1.1.0.</p>
<p>If you run a blog that accepts comments, you&#8217;re probably familiar with comment spam. You could manually verify all comments, but that gets cumbersome after some time. A better solution is using an automatic scanner to verify comments. Like <a href="http://mollom.com/">Mollom</a>. Mollom checks your comments and provides CAPTCHAs if it&#8217;s not 100% sure (about 2% of all comments). This takes the hard work of removing spam out of your hands, with the reassurance that no good content will be blocked. More on the <a href="http://mollom.com/how-mollom-works">How Mollom works</a> page.</p>
<p>Zend_Service_Mollom is a <a href="http://framework.zend.com/">Zend Framework</a> component that makes using Mollom dead simple. Offcourse, even if you don&#8217;t use the full Zend Framework for your website, it can also be used as a standalone component.</p>
<p>Yesterday marked the release of 1.0.0, which was immediately followed today by 1.1.0, after feedback from the Mollom team.</p>
<p>Download instructions and documentation can be found here: <a href="http://ruben.savanne.be/articles/zend-service-mollom-documentation">Zend_Service_Mollom</a>.</p>
<p>Enjoy!</p>
<div class="wp-caption aligncenter" style="width: 380px"><img src="/zfmollom.png" alt="Zend_Service_Mollom" width="370" height="82" /><p class="wp-caption-text">Zend_Service_Mollom</p></div>
]]></description>
			<content:encoded><![CDATA[<p>I have just released Zend_Service_Mollom 1.0.0 and 1.1.0.</p>
<p>If you run a blog that accepts comments, you&#8217;re probably familiar with comment spam. You could manually verify all comments, but that gets cumbersome after some time. A better solution is using an automatic scanner to verify comments. Like <a href="http://mollom.com/">Mollom</a>. Mollom checks your comments and provides CAPTCHAs if it&#8217;s not 100% sure (about 2% of all comments). This takes the hard work of removing spam out of your hands, with the reassurance that no good content will be blocked. More on the <a href="http://mollom.com/how-mollom-works">How Mollom works</a> page.</p>
<p>Zend_Service_Mollom is a <a href="http://framework.zend.com/">Zend Framework</a> component that makes using Mollom dead simple. Offcourse, even if you don&#8217;t use the full Zend Framework for your website, it can also be used as a standalone component.</p>
<p>Yesterday marked the release of 1.0.0, which was immediately followed today by 1.1.0, after feedback from the Mollom team.</p>
<p>Download instructions and documentation can be found here: <a href="http://ruben.savanne.be/articles/zend-service-mollom-documentation">Zend_Service_Mollom</a>.</p>
<p>Enjoy!</p>
<div class="wp-caption aligncenter" style="width: 380px"><img src="/zfmollom.png" alt="Zend_Service_Mollom" width="370" height="82" /><p class="wp-caption-text">Zend_Service_Mollom</p></div>
]]></content:encoded>
			<wfw:commentRss>http://weblog.savanne.be/149-zend-service-mollom-1-0-0-1-1-0/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ZF &amp; Doctrine Article Update</title>
		<link>http://weblog.savanne.be/147-zf-doctrine-article-update</link>
		<comments>http://weblog.savanne.be/147-zf-doctrine-article-update#comments</comments>
		<pubDate>Sun, 30 Nov 2008 12:39:31 +0000</pubDate>
		<dc:creator>Ruben</dc:creator>
				<category><![CDATA[doctrine]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[zendframework]]></category>

		<guid isPermaLink="false">http://weblog.savanne.be/147-zf-doctrine-article-update</guid>
		<description><![CDATA[<p>Long overdue, I&#8217;ve put up an updated version of the <a href="http://ruben.savanne.be/articles/integrating-zend-framework-and-doctrine">Integrating Zend Framework and Doctrine</a> article. Now also featuring a git repository to make it easier to get your hands on the code.</p>
<div align="center"><img src="/zfdoctrine.png" alt="Zend Framework loves Doctrine"></div>
]]></description>
			<content:encoded><![CDATA[<p>Long overdue, I&#8217;ve put up an updated version of the <a href="http://ruben.savanne.be/articles/integrating-zend-framework-and-doctrine">Integrating Zend Framework and Doctrine</a> article. Now also featuring a git repository to make it easier to get your hands on the code.</p>
<div align="center"><img src="/zfdoctrine.png" alt="Zend Framework loves Doctrine"></div>
]]></content:encoded>
			<wfw:commentRss>http://weblog.savanne.be/147-zf-doctrine-article-update/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>GSoC, ZF &amp; Doctrine</title>
		<link>http://weblog.savanne.be/130-gsoc-zf-doctrine</link>
		<comments>http://weblog.savanne.be/130-gsoc-zf-doctrine#comments</comments>
		<pubDate>Sat, 29 Mar 2008 20:35:20 +0000</pubDate>
		<dc:creator>Ruben</dc:creator>
				<category><![CDATA[doctrine]]></category>
		<category><![CDATA[gnome]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[summerofcode]]></category>
		<category><![CDATA[zendframework]]></category>

		<guid isPermaLink="false">http://weblog.savanne.be/130-gsoc-zf-doctrine</guid>
		<description><![CDATA[<p>Some updates from the past week:</p>
<p><strong>Summer of Code</strong><br />
I have submitted my Google Summer of Code proposal for a <a href="http://banshee-project.org/Main_Page">Banshee</a> project to the Mono Project. I might submit another one to GNOME (just in case), but only if I can work it out in greater detail. I don&#8217;t want to waste reviewers time by sending in half a proposal.</p>
<p><strong>Zend Framework &#038; Doctrine</strong><br />
After trying out the <a href="http://framework.zend.com/">Zend Framework</a> (a PHP Application Development Framework) and <a href="http://www.phpdoctrine.org/">Doctrine</a> (a Object Relational Mapper for PHP) for quite some time, I wrote up an article on <a href="http://ruben.savanne.be/articles/integrating-zend-framework-and-doctrine">Integrating Zend Framework and Doctrine</a>. If you want to play with some of the nicest PHP technologies currently around, check it out!</p>
<p>Oh and this is probably my first message to appear on <a href="http://planet.grep.be/">planet.grep.be</a>. Hi all!</p>
]]></description>
			<content:encoded><![CDATA[<p>Some updates from the past week:</p>
<p><strong>Summer of Code</strong><br />
I have submitted my Google Summer of Code proposal for a <a href="http://banshee-project.org/Main_Page">Banshee</a> project to the Mono Project. I might submit another one to GNOME (just in case), but only if I can work it out in greater detail. I don&#8217;t want to waste reviewers time by sending in half a proposal.</p>
<p><strong>Zend Framework &#038; Doctrine</strong><br />
After trying out the <a href="http://framework.zend.com/">Zend Framework</a> (a PHP Application Development Framework) and <a href="http://www.phpdoctrine.org/">Doctrine</a> (a Object Relational Mapper for PHP) for quite some time, I wrote up an article on <a href="http://ruben.savanne.be/articles/integrating-zend-framework-and-doctrine">Integrating Zend Framework and Doctrine</a>. If you want to play with some of the nicest PHP technologies currently around, check it out!</p>
<p>Oh and this is probably my first message to appear on <a href="http://planet.grep.be/">planet.grep.be</a>. Hi all!</p>
]]></content:encoded>
			<wfw:commentRss>http://weblog.savanne.be/130-gsoc-zf-doctrine/feed</wfw:commentRss>
		<slash:comments>38</slash:comments>
		</item>
		<item>
		<title>Incrementally serving RSS feeds</title>
		<link>http://weblog.savanne.be/117-incrementally-serving-rss-feeds</link>
		<comments>http://weblog.savanne.be/117-incrementally-serving-rss-feeds#comments</comments>
		<pubDate>Sat, 02 Jun 2007 20:23:21 +0000</pubDate>
		<dc:creator>Ruben</dc:creator>
				<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://weblog.savanne.be/117-incrementally-serving-rss-feeds</guid>
		<description><![CDATA[<p>We&#8217;re living in a Web 2.0 world where content is increasingly more being served using RSS feeds. When more and more people are tracking your site through RSS, these RSS feeds will start to amount for a rather big portion of your monthly bandwidth (especially if you consider that most readers refresh each feed once an hour).</p>
<p>Fortunately, there&#8217;s something we can do about this! You can use a service like rsscache.com or feedburner, but both aren&#8217;t half as smart as they could be (rsscache.com comes close, but they keep track of your IP address, which just doesn&#8217;t work in a world of laptops). Here&#8217;s the smart way:</p>
<p><strong>The browser cache: say hello to an old friend.</strong><br />
If your website serves RSS feeds through a static file, your webserver will take care of most of this. However, most RSS feeds are generated on-the-fly. This has advantages: it&#8217;s easy to do and your feed is always brand new. There&#8217;s a disadvantage though: unless you explicitly add it, you lose all the advantages of the browser cache. Why?</p>
<p>To explain that, we have to make a short (I promise) trip into the world of HTTP.</p>
<p>When you try to view a webpage, your browser wil send a request to the webserver. The webserver will then send back the webpage you requested, but it will also send back some headers, invisible to the user. These headers control a lot of things, like the filetype of the served file and the way this file should be cached (starting to see where we&#8217;re going?). One of these headers is the ETag header. It&#8217;s basically a label for the file you just received. Every time the file changes on the server, it gets a new ETag. Now if your browser requests that file again, it will also send the ETag of the cached copy back to the webserver. The webserver will check that ETag, if it&#8217;s still valid, it&#8217;ll simply respond back to the browser: 304 Not Modified. And that&#8217;s it. No file transferred, zero bandwidth used. Your browser will use it&#8217;s cached copy, which is way faster than receiving it again. Everybody happy!</p>
<p>Unless you&#8217;re serving from a PHP script&#8230; You see, PHP scripts are dynamic, they get regenerated every time, so the webserver can&#8217;t calculate an ETag. Which means we have to do it ourselves. Thankfully, this isn&#8217;t very hard.</p>
<p><strong>Now do it in pieces</strong><br />
But wait, don&#8217;t start cheering yet, we can do it even better! RSS has a nice property: the feed reader (which works just like a web browser, it also uses the ETag headers) will store all RSS items they&#8217;ve received. This means we only have to send it the new blog posts. And that&#8217;s a lot better than sending out everything you wrote in a month every time someone asks for it.</p>
<p>So how can we do this? *crickets* You guessed it! ETag! If we get a request with an ETag, we know exactly which version the client has. So we can easily find out which posts we have to send. Now isn&#8217;t that even better? Instead of sending out the entire feed again when you&#8217;ve posted a new part of your adventures, only the new content will be downloaded. And most of the time, that save you about 90% in bandwidth.</p>
<p><strong>Give it to me!</strong><br />
Now here&#8217;s the best part: even though it all sounds quite complicated, it&#8217;s actually dead simple to add this. I&#8217;ve written a simple PHP class to easily add this to your website. For those interested, the code is over <a href="http://files.lambda1.be/linux/feedcacher.tar.bz2">here</a>. It&#8217;s a bit of a hack (I use a slightly different version to serve my own website), but it works. Usage instructions are inside the script. Let me know if you run into any problems. But: no money back when it scares your cat. Enjoy!</p>
]]></description>
			<content:encoded><![CDATA[<p>We&#8217;re living in a Web 2.0 world where content is increasingly more being served using RSS feeds. When more and more people are tracking your site through RSS, these RSS feeds will start to amount for a rather big portion of your monthly bandwidth (especially if you consider that most readers refresh each feed once an hour).</p>
<p>Fortunately, there&#8217;s something we can do about this! You can use a service like rsscache.com or feedburner, but both aren&#8217;t half as smart as they could be (rsscache.com comes close, but they keep track of your IP address, which just doesn&#8217;t work in a world of laptops). Here&#8217;s the smart way:</p>
<p><strong>The browser cache: say hello to an old friend.</strong><br />
If your website serves RSS feeds through a static file, your webserver will take care of most of this. However, most RSS feeds are generated on-the-fly. This has advantages: it&#8217;s easy to do and your feed is always brand new. There&#8217;s a disadvantage though: unless you explicitly add it, you lose all the advantages of the browser cache. Why?</p>
<p>To explain that, we have to make a short (I promise) trip into the world of HTTP.</p>
<p>When you try to view a webpage, your browser wil send a request to the webserver. The webserver will then send back the webpage you requested, but it will also send back some headers, invisible to the user. These headers control a lot of things, like the filetype of the served file and the way this file should be cached (starting to see where we&#8217;re going?). One of these headers is the ETag header. It&#8217;s basically a label for the file you just received. Every time the file changes on the server, it gets a new ETag. Now if your browser requests that file again, it will also send the ETag of the cached copy back to the webserver. The webserver will check that ETag, if it&#8217;s still valid, it&#8217;ll simply respond back to the browser: 304 Not Modified. And that&#8217;s it. No file transferred, zero bandwidth used. Your browser will use it&#8217;s cached copy, which is way faster than receiving it again. Everybody happy!</p>
<p>Unless you&#8217;re serving from a PHP script&#8230; You see, PHP scripts are dynamic, they get regenerated every time, so the webserver can&#8217;t calculate an ETag. Which means we have to do it ourselves. Thankfully, this isn&#8217;t very hard.</p>
<p><strong>Now do it in pieces</strong><br />
But wait, don&#8217;t start cheering yet, we can do it even better! RSS has a nice property: the feed reader (which works just like a web browser, it also uses the ETag headers) will store all RSS items they&#8217;ve received. This means we only have to send it the new blog posts. And that&#8217;s a lot better than sending out everything you wrote in a month every time someone asks for it.</p>
<p>So how can we do this? *crickets* You guessed it! ETag! If we get a request with an ETag, we know exactly which version the client has. So we can easily find out which posts we have to send. Now isn&#8217;t that even better? Instead of sending out the entire feed again when you&#8217;ve posted a new part of your adventures, only the new content will be downloaded. And most of the time, that save you about 90% in bandwidth.</p>
<p><strong>Give it to me!</strong><br />
Now here&#8217;s the best part: even though it all sounds quite complicated, it&#8217;s actually dead simple to add this. I&#8217;ve written a simple PHP class to easily add this to your website. For those interested, the code is over <a href="http://files.lambda1.be/linux/feedcacher.tar.bz2">here</a>. It&#8217;s a bit of a hack (I use a slightly different version to serve my own website), but it works. Usage instructions are inside the script. Let me know if you run into any problems. But: no money back when it scares your cat. Enjoy!</p>
]]></content:encoded>
			<wfw:commentRss>http://weblog.savanne.be/117-incrementally-serving-rss-feeds/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

