<?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>Jamie Nay &#187; useful links</title>
	<atom:link href="http://jamienay.com/tag/useful-links/feed/" rel="self" type="application/rss+xml" />
	<link>http://jamienay.com</link>
	<description>A PHP web developer writing about the web.</description>
	<lastBuildDate>Wed, 02 Jun 2010 17:09:28 +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>Useful CakePHP Tutorial Roundup for January 29, 2010</title>
		<link>http://jamienay.com/2010/01/useful-cakephp-tutorial-roundup-for-january-29-2010/</link>
		<comments>http://jamienay.com/2010/01/useful-cakephp-tutorial-roundup-for-january-29-2010/#comments</comments>
		<pubDate>Fri, 29 Jan 2010 22:02:24 +0000</pubDate>
		<dc:creator>Jamie</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[useful links]]></category>

		<guid isPermaLink="false">http://jamienay.com/?p=541</guid>
		<description><![CDATA[Well, I&#8217;ve finally gathered enough good CakePHP links to warrant another tutorial roundup. It&#8217;s not that there haven&#8217;t been any good CakePHP posts out there &#8211; the blogs are full of &#8216;em, especially with 1.3 finally in beta &#8211; it&#8217;s just that I&#8217;ve been (and still am) pretty busy. But as always, I’m constantly coming [...]]]></description>
			<content:encoded><![CDATA[<p>Well, I&#8217;ve finally gathered enough good CakePHP links to warrant another tutorial roundup. It&#8217;s not that there haven&#8217;t been any good CakePHP posts out there &#8211; the blogs are full of &#8216;em, especially with 1.3 finally in beta &#8211; it&#8217;s just that I&#8217;ve been (and still am) pretty busy. But as always, I’m constantly coming across useful CakePHP tips, code, and tutorials that save me a lot of time. So I thought it might be useful to others to gather up some tutorials every once in a while and just get them out there. Some are new; some are old chestnuts.</p>
<p>Three quality community resources to showcase today:</p>
<ul>
<li><a href="http://bakery.cakephp.org/articles/view/multitree-behavior" target="_blank">MultiTree Behavior</a> &#8211; <span>Thom (cyberthom) (Jan 27, 2010)<br />
Thom provides a robust, functional alternative to Cake&#8217;s core tree behavior for those who want multiple trees in one table. I wrote <a href="http://jamienay.com/2010/01/adding-better-scope-limiting-to-cakephp-1-2s-tree-behavior/">a little hack of the Tree behavior</a> to accomplish this same task, but the MultiTree Behavior is a hell of a lot better. Nice job, Thom! The methods have mostly the same function names as the core Tree behavior, so you can basically drop this behavior in and then just change your $actsAs &#8220;Tree&#8221; to $actsAs &#8220;MultiTree&#8221;. I started using it this morning so I haven&#8217;t put it through all of its paces, but it seems pretty solid.<br />
</span></li>
<li><a href="http://blog.joebeeson.com/?p=152" target="_blank">Providing common functionality with AppShell</a> &#8211; Joe Beeson (Oct 26, 2009)<br />
This little tutorial/accompanying script implements an &#8220;AppShell&#8221; that you can use a parent for your Shell classes, in the spirit of AppModel and AppController. I&#8217;ll be honest, I haven&#8217;t actually used Joe&#8217;s code yet, but the idea is great. I&#8217;m a bit surprised that the core doesn&#8217;t already provide this functionality &#8211; instead of YourShell -&gt; AppShell -&gt; Shell (just like YourModel -&gt; AppModel -&gt; Model), the extension chain is just YourShell -&gt; Shell. I guess that AppShell isn&#8217;t in the core simply because the Shell class is woefully underused by most developers. But if you find yourself writing a lot of shell scripts with common functionality, then AppShell looks like a good time saver.</li>
<li><a href="http://debuggable.com/posts/cakephp-authsome-debuggable-s-xmas-gift:4b34b4e6-9ca4-4673-bea6-4776cbdd56cb" target="_blank">Authsome Component</a> &#8211; Felix Geisendörfer, Debuggable (Dec 25, 2009)<br />
This is another &#8220;haven&#8217;t used it yet, but definitely will&#8221; bit of code by Felix Geisendörfer, who&#8217;s released his share of nice code. Authsome is a less intrusive replacement for the core Auth component, and it looks pretty slick and simple. It handles logging in a lot better than the Auth component, and I like the static Authsome::get(&#8216;user_variable&#8217;) functionality.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://jamienay.com/2010/01/useful-cakephp-tutorial-roundup-for-january-29-2010/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>The Code Stylings of Jamie Nay: Now Featuring GitHub!</title>
		<link>http://jamienay.com/2009/11/the-coding-stylings-of-jamie-nay-now-featuring-github/</link>
		<comments>http://jamienay.com/2009/11/the-coding-stylings-of-jamie-nay-now-featuring-github/#comments</comments>
		<pubDate>Sat, 21 Nov 2009 23:05:46 +0000</pubDate>
		<dc:creator>Jamie</dc:creator>
				<category><![CDATA[Personal]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[useful links]]></category>
		<category><![CDATA[web development]]></category>

		<guid isPermaLink="false">http://jamienay.com/?p=445</guid>
		<description><![CDATA[Yup, I&#8217;ve finally joined the party and created a GitHub account for myself. There&#8217;s not much on there &#8211; currently just one bit of code, a CakePHP component. I&#8217;m hopefully going to fill out the repository with a bunch of uself stuff soon.]]></description>
			<content:encoded><![CDATA[<p>Yup, I&#8217;ve finally joined the party and created a <a href="http://github.com/jamienay">GitHub account for myself</a>. There&#8217;s not much on there &#8211; currently just one bit of code, a CakePHP component. I&#8217;m hopefully going to fill out the repository with a bunch of uself stuff soon.</p>
]]></content:encoded>
			<wfw:commentRss>http://jamienay.com/2009/11/the-coding-stylings-of-jamie-nay-now-featuring-github/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Useful CakePHP Tutorial Roundup for November 20, 2009</title>
		<link>http://jamienay.com/2009/11/useful-cakephp-tutorial-roundup-for-november-20-2009/</link>
		<comments>http://jamienay.com/2009/11/useful-cakephp-tutorial-roundup-for-november-20-2009/#comments</comments>
		<pubDate>Fri, 20 Nov 2009 22:35:39 +0000</pubDate>
		<dc:creator>Jamie</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[useful links]]></category>

		<guid isPermaLink="false">http://jamienay.com/?p=432</guid>
		<description><![CDATA[Wow! It&#8217;s been a while since I&#8217;ve written much about CakePHP, PHP, or just anything useful in general. I guess I&#8217;ve been pretty busy. Hectic job, baby on the way, that sort of thing. But I&#8217;m trying to get back into blogging because it&#8217;s a good outlet for my desire to write, plus I love [...]]]></description>
			<content:encoded><![CDATA[<p>Wow! It&#8217;s been a while since I&#8217;ve written much about CakePHP, PHP, or just anything useful in general. I guess I&#8217;ve been pretty busy. Hectic job, baby on the way, that sort of thing. But I&#8217;m trying to get back into blogging because it&#8217;s a good outlet for my desire to write, plus I love to share useful code with others.</p>
<p>I kept up this useful tutorial roundup for a little while and then dropped off the face of the earth&#8230; oops. So, let&#8217;s try this again &#8211; the Friday tutorial roundup. Even though I haven&#8217;t been blogging about it, I’m constantly coming across useful CakePHP tips, code, and tutorials that save me a lot of time. So I thought it might be useful to others to gather up some tutorials every Friday and just get them out there. Some are new; some are old chestnuts.</p>
<p>Here&#8217;s what I&#8217;m finding useful these days:</p>
<ul>
<li><a href="http://github.com/neilcrookes/searchable" target="_blank">Searchable Plugin</a> &#8211; Neil Crookes (Fall 2009)<br />
I came across Neil&#8217;s new site search plugin by chance while planning for my own site search plugin for our in-house CakePHP CMS at work. I was impressed with the clean code, and especially the shell to rebuild the search index. Woefully few CakePHP developers take advantage of shells. Neil has utilized this oft-forgotten feature of Cake very well. The documentation for the plugin is pretty spare (as Neil himself will admit), but there are enough inline comments in the code to figure out how the system works, and the SQL schema is included as well.</li>
<li><a href="http://debuggable.com/posts/unlimited-model-fields-expandable-behavior:48428c2e-9a88-47ec-ae8e-77a64834cda3" target="_blank">Expandable Behavior</a> &#8211; Felix Geisendörfer, Debuggable (June 01, 2008)<br />
Now here&#8217;s one from Felix that I started to use almost immediately after discovering it. While developing my CMS, I needed the ability to define an indefinite and unlimited number of fields for models. I was originally going to go all out and implement the <a href="http://en.wikipedia.org/wiki/Entity-attribute-value_model" target="_blank">EAV database design model</a>, but after a lot of research determined that forcing Cake into that schema might just contort it a little too much. EAV, in other words, isn&#8217;t really a &#8220;Cakey&#8221; way of doing things since it can&#8217;t take advantage of a lot of Cake&#8217;s built-in model functions (at least not without a lot of extra work). So, in comes Felix&#8217;s expandable behavior, which allows you to define new fields at will and save them to a separate table. While the behavior&#8217;s not perfect &#8211; you&#8217;ll have to write your own validation and field limitations (I made it into an online tool in my CMS) &#8211; it&#8217;s a great starting point.</li>
<li><a href="http://blogs.bigfish.tv/adam/2008/02/12/drag-and-drop-using-ext-js-with-the-cakephp-tree-behavior/" target="_blank">Drag and drop using Ext JS with the CakePHP Tree Behavior</a> &#8211; Adam Royle (February 02, 2008)<br />
If you work with Cake&#8217;s Tree behavior and you want a slick interface for representing and reordering your trees, then Adam&#8217;s usage of Ext JS is for you. I write a lot of Javascript at work but it&#8217;s not my strong point, so when it came time to do an AJAX-enabled tree interface, I went out into the great interwebs for some help. I was originally looking for a JQuery solution, but Adam&#8217;s was so hard to resist since he wrote the tutorial specifically for CakePHP. It&#8217;s a great starting point and easy to expand upon.</li>
<li><a href="http://www.pseudocoder.com/archives/2009/02/16/httpsocket-instead-of-curl-in-cakephp-apps/" target="_blank">HttpSocket Instead of cURL in CakePHP Apps </a>- Matt Curry (February 16, 2009)<br />
Matt draws attention to an under-used CakePHP library, HttpSocket, in this little quickie. For those who prefer their code wrapped in classes, HttpSocket is a great alternative to cURL for opening remote connections. And, as Matt says in his example, &#8220;nine cURL lines become for lines of Cake code&#8221;. Think of HttpSocket as a more &#8220;Cakey&#8221; way to open remote URIs.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://jamienay.com/2009/11/useful-cakephp-tutorial-roundup-for-november-20-2009/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Useful CakePHP Tutorial Roundup for July 17, 2009</title>
		<link>http://jamienay.com/2009/07/useful-cakephp-tutorial-roundup-for-july-17-2009/</link>
		<comments>http://jamienay.com/2009/07/useful-cakephp-tutorial-roundup-for-july-17-2009/#comments</comments>
		<pubDate>Fri, 17 Jul 2009 15:10:14 +0000</pubDate>
		<dc:creator>Jamie</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[useful links]]></category>

		<guid isPermaLink="false">http://jamienay.com/?p=298</guid>
		<description><![CDATA[Back on time. I think I&#8217;m going to downgrade from a firm 5 tutorials per week to just as many as I have time to review, because I don&#8217;t want to skim over material or choose sub-par stuff simply to make my quota. So, three this week. But as always, I’m constantly coming across useful [...]]]></description>
			<content:encoded><![CDATA[<p>Back on time. I think I&#8217;m going to downgrade from a firm 5 tutorials per week to just as many as I have time to review, because I don&#8217;t want to skim over material or choose sub-par stuff simply to make my quota. So, three this week. But as always, I’m constantly coming across useful tips, code, and tutorials that save me a lot of time. So I thought it might be useful to others to gather up some tutorials every Friday and just get them out there. Some are new; some are old chestnuts.</p>
<p>Here&#8217;s what I found useful this week:</p>
<ul>
<li><a href="http://bakery.cakephp.org/articles/view/secrets-of-admin-routing" target="_blank">Secrets of Admin Routing</a> &#8211; Nate (July 14, 2009)<br />
I&#8217;ve been struggling with prefix routing &#8211; see my recent post about <a href="http://jamienay.com/2009/07/custom-prefixes-and-named-url-arguments-cakephp-gotcha/">prefix routing and named arguments</a> &#8211; and just when I came up with a decent (but admittedly hackish) solution to deal with the issue, along comes Nate fresh from CakeFest with a far more elegant solution. Although I still like the idea of using Router::connectNamed() to define your custom named arguments, Nate&#8217;s idea to use the AppHelper to persist custom prefixes is also a good one. Plus, you&#8217;re likely to have less custom prefixes than named arguments, so it&#8217;s more convenient just to define your prefixes in AppHelper as they come up, rather than accounting for every named argument in Router::connectNamed().</li>
<li><a href="http://bakery.cakephp.org/articles/view/an-akismet-behavior" target="_blank">An Akismet Behavior</a> &#8211; Tom O&#8217;Reilly (March 09, 2009)<br />
I use Akismet for this blog and it stops dozens of spam comments every day. Tom&#8217;s behavior is a great implementation of the spam-prevention service that&#8217;s easy to install. The only catch is that you need to get an API key, which you can only do by signing up for a wordpress.com account.</li>
<li><a href="http://klauzinski.com/php/cakephp/search-engine-friendly-urls-in-cakephp" target="_blank">Search Engine Friendly URLs in CakePHP</a> &#8211; Philip Klauzinski (February 03, 2009)<br />
The SEO experts these days claim that we should be using hyphens instead of underscores in our URLs. Easy enough on a &#8216;regular&#8217; website or on a platform like WordPress (which hyphenates by defualt), but this is actually a pretty tricky process in CakePHP. While you can use something like Mariano Iglesias&#8217; <a href="http://bakery.cakephp.org/articles/view/sluggable-behavior" target="_blank">Sluggable Behavior</a> to generate hyphenated slugs for your database items, good luck trying to replace the dashes in controller and action names! The only real solution, which, as Philip says in his tutorial, isn&#8217;t a solution at all, is to convert hyphens to underscores in your &lt;em&gt;app/config/bootstrap.php&lt;/em&gt; or &lt;em&gt;app/config/routes.php&lt;/em&gt;. Philip&#8217;s code for that is nice. But, this means you can&#8217;t take advantage of CakePHP&#8217;s reverse routing to generate links via the HtmlHelper and other tools. So you&#8217;re stuck writing your links manually, unless you want to hack or extend the HtmlHelper. So, the best part of this article might be the attention it draws to the issue of Cake&#8217;s support for SEO standards.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://jamienay.com/2009/07/useful-cakephp-tutorial-roundup-for-july-17-2009/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Useful CakePHP Tutorial Roundup for July 13, 2009</title>
		<link>http://jamienay.com/2009/07/useful-cakephp-tutorial-roundup-for-july-13-2009/</link>
		<comments>http://jamienay.com/2009/07/useful-cakephp-tutorial-roundup-for-july-13-2009/#comments</comments>
		<pubDate>Tue, 14 Jul 2009 03:42:42 +0000</pubDate>
		<dc:creator>Jamie</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[useful links]]></category>

		<guid isPermaLink="false">http://jamienay.com/?p=279</guid>
		<description><![CDATA[OK, so maybe I&#8217;m a few days late. Plenty of useful CakePHP resources out there, just not enough time to write about it all! But, better late than never, right? Anyway, I&#8217;m constantly coming across useful tips, code, and tutorials that save me a lot of time. So I thought it might be useful to [...]]]></description>
			<content:encoded><![CDATA[<p>OK, so maybe I&#8217;m a few days late. Plenty of useful CakePHP resources out there, just not enough time to write about it all! But, better late than never, right? Anyway, I&#8217;m constantly coming across useful tips, code, and tutorials that save me a lot of time. So I thought it might be useful to others to gather up some tutorials every Friday (this is Monday &#8211; oops!) and just get them out there. Some are new; some are old chestnuts.</p>
<p>Here&#8217;s what I found useful this week:</p>
<ul>
<li><a href="http://www.milesj.me/resources/script/auto-login-component" target="_blank">Auto Login</a> &#8211; Miles Johnson (June 03, 2009)<br />
A useful little component that handles automatically logging in an Auth session if a user checks a &#8220;remember me&#8221; box during login. Miles just uses a cookie to save the Auth information; it&#8217;s not a horribly complex script, but a useful one. Plus, it&#8217;s the simplest thing in the world to install: just throw it into your $components array and add the form field to the login view, and bob&#8217;s yer uncle.</li>
<li><a href="http://mark-story.com/posts/view/using-bindmodel-to-get-to-deep-relations" target="_blank">Using bindModel to get deep relations</a> &#8211; Mark Story (November 14, 2008)<br />
I really like CakePHP, but I think the overuse of queries when fetching related data between models is a glaring weak point. Rather than using LEFT JOINs to retrieve associated data, Cake just executes secondary, tertiary, etc. queries, which is far from optimal in terms of speed, and also means that you can&#8217;t apply SQL conditions to the deep relations. So, Mark explains how to use bindModel() and unbindModel() to change model associations on the fly, basically adding custom find conditions in order to execute one big query instead of a bunch of small ones. This is something that really does need to go into the CakePHP core, but for now, solutions such as Mark&#8217;s do the job.</li>
<li><a href="http://bakery.cakephp.org/articles/view/sitemap-deluxe" target="_blank">Sitemap Deluxe </a>- Cristian Deluxe (June 15, 2009)<br />
OK, I admit that I haven&#8217;t tried this just yet, but Cristian&#8217;s sitemap generator looks pretty dang impressive. I&#8217;m just getting to the point in my CMS where I need to add a sitemap generator, and in the interests of time I&#8217;ll probably try Cristian&#8217;s solution. It&#8217;s new, so it even includes Bing!</li>
<li><a href="http://www.pseudocoder.com/archives/2009/03/17/8-ways-to-speed-up-cakephp-apps/" target="_blank">8 Ways to Speed Up the Performance of CakePHP Apps</a> &#8211; Matt Curry (March 17, 2009)<br />
CakePHP can be a bit slow if you don&#8217;t know your way around enough to make the fine tunings necessary to give it a kick in the butt. Fortunately, Mat Curry does know his way around and presented a list of speed-up tips a few months ago. This list eventually made it into his book, which I featured a couple of weeks ago, but this topic is important enough to stand on its own. Not surprisingly, the name of the game here is caching: HTML, view, APC, etc. The one shady suggestion in the list is Matt&#8217;s recommendation to use persistant models, which is a buggy feature that tends to break when models have complex associations. Matt does identify this issue in the comments of the post.</li>
<li><a href="http://bakery.cakephp.org/articles/view/csv-helper-php5" target="_blank">CSV Helper</a> &#8211; Adam (ifunk) (September 10, 2007)<br />
Now THIS is an oldie. But it still works, and it works well. Adam &#8211; or, should I say, &#8220;ifunk&#8221; &#8211; gave me a real time saver with this admittedly straightforward helper. I&#8217;m already using it on one of my side projects to generate CSV files from large sets of data, and it works like a charm with no modification or fixes needed. Usage is really simple, but Adam doesn&#8217;t mention that you need to set $this-&gt;layout to null and $this-&gt;autoLayout to false in the controller method that&#8217;ll be doing the exporting. Other than that, it&#8217;s a good tutorial. I might also follow the suggestion of a commenter who recommends swapping out the default MIME type of &#8220;application/vnd.ms-excel&#8221; in favour of the more generic &#8220;application/csv&#8221;.</li>
</ul>
<p>And that&#8217;s it &#8211; see you next Friday.</p>
]]></content:encoded>
			<wfw:commentRss>http://jamienay.com/2009/07/useful-cakephp-tutorial-roundup-for-july-13-2009/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Useful CakePHP Tutorial Roundup for June 26, 2009</title>
		<link>http://jamienay.com/2009/06/useful-cakephp-tutorial-roundup-for-june-26-2009/</link>
		<comments>http://jamienay.com/2009/06/useful-cakephp-tutorial-roundup-for-june-26-2009/#comments</comments>
		<pubDate>Fri, 26 Jun 2009 17:00:45 +0000</pubDate>
		<dc:creator>Jamie</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[useful links]]></category>

		<guid isPermaLink="false">http://jamienay.com/?p=218</guid>
		<description><![CDATA[I read a lot about CakePHP almost every day at work, since I&#8217;m writing a CMS that will become the standard for most of our new sites. I&#8217;m constantly coming across useful tips, code, and tutorials that save me a lot of time. So I thought it might be useful to others to gather up [...]]]></description>
			<content:encoded><![CDATA[<p>I read a lot about CakePHP almost every day at work, since I&#8217;m writing a CMS that will become the standard for most of our new sites. I&#8217;m constantly coming across useful tips, code, and tutorials that save me a lot of time. So I thought it might be useful to others to gather up some tutorials every Friday and just get them out there. Some are new; some are old chestnuts. I&#8217;ll try to post at least 5 each week.</p>
<p>Here&#8217;s what I found useful this week:</p>
<ul>
<li><a href="http://aidanlister.com/2009/04/better-error-handling-with-cakephp/" target="_blank">Better Error Handling with CakePHP</a> &#8211; Aidan Lister (April 6, 2009)<br />
I&#8217;ve been planning a more useful error handling system, and Aidan&#8217;s method is probably the one I&#8217;ll employ now. He tackles the &#8220;all or nothing&#8221; approach to error handling that CakePHP uses by default: every error in development mode, no error in production mode. Aidan creates a de facto &#8217;0.5&#8242; debug mode, allowing errors to be logged (and administrators to be notified) while still displaying user-friendly messages.</li>
<li><a href="http://aidanlister.com/2009/05/creating-a-community-in-five-minutes-with-cakephp/" target="_blank">Creating a community in five minutes with CakePHP</a> &#8211; Aidan Lister (May 1, 2009)<br />
Yup, Aidan again. He&#8217;s good. This article is a good rundown of how to implement a simple, yet robust, user login system. Although I&#8217;ve already written my login system, I was able to take a few tidbits from Aidan&#8217;s article and strengthen my own implementation. I highly recommend this article for anyone who thinks that authenticating users with CakePHP&#8217;s Auth system is a bit intimidating (and it is, since it&#8217;s so poorly documented). Aidan runs through confirming passwords, setting last login dates, and a password retrieval system, among other things.</li>
<li><a href="http://www.studiocanaria.com/articles/cakephp_auth_component_users_groups_permissions_revisited" target="_blank">CakePHP Auth Component &#8211; Users, Groups &amp; Permissions Revisited</a> &#8211; Studio Canaria (June 6, 2008)<br />
An interesting and effective implementation of CakePHP&#8217;s Auth component that stays away from <acronym title="Access Control Lists">ACL</acronym>, which, while powerful, is far too complex for the needs of many (most?) small-to-mid size websites. Peter&#8217;s solution allows for a good degree of flexibility &#8211; you can set permissions for individual actions as well as entire controllers &#8211; without the sharp learning curve that comes with ACL.</li>
<li><a href="http://www.neilcrookes.com/2009/02/09/cakephp-sequence-behavior/" target="_blank">CakePHP Sequence Behavior</a> &#8211; Neil Crookes (February 9, 2009)<br />
Like so many other features, I was researching the best way to handle re-ordering of records via a CMS (e.g. so a user can change the order of photos in a gallery) when I chanced upon Neil&#8217;s handy little model behavior. His implementation is pretty smart in that it only executes database queries when it absolutely needs to, rather than just updating every record in a group when any order is changed. Throw in some JQuery AJAX drag and drop that Neil also provides &#8211; I&#8217;ve been a Prototype/Scriptaculous guy for a long time, but this is easy as pie! &#8211; and you&#8217;ve got a great re-ordering system in no time.</li>
<li><a href="http://www.pseudocoder.com/free-cakephp-book/" target="_blank">Super Awesome Advanced CakePHP Tips</a> &#8211; Matt Curry (May 13, 2009)<br />
A free e-book with pages upon pages of useful CakePHP tidbits. Matt doesn&#8217;t mince words and gets right to the nitty gritty, which, if you&#8217;re a developer on a timeline like I am, is a good thing. The book covers a wide array of subjects and has more than a few &#8220;why didn&#8217;t I think of that?!?&#8221; moments &#8211; merging add and edit functions is a prime example. It looks like he&#8217;s added to the book since I downloaded it, which means that it&#8217;s in continued development, which is also great.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://jamienay.com/2009/06/useful-cakephp-tutorial-roundup-for-june-26-2009/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Web Resource Roundup</title>
		<link>http://jamienay.com/2009/04/web-resource-roundup/</link>
		<comments>http://jamienay.com/2009/04/web-resource-roundup/#comments</comments>
		<pubDate>Fri, 03 Apr 2009 04:09:07 +0000</pubDate>
		<dc:creator>Jamie</dc:creator>
				<category><![CDATA[HTML and CSS]]></category>
		<category><![CDATA[useful links]]></category>

		<guid isPermaLink="false">http://www.jamienay.com/?p=66</guid>
		<description><![CDATA[How do people with jobs find the time to blog? Yeesh. I&#8217;ve got about 5 posts half-done but scraping together a few spare minutes every night &#8211; especially when you live with a two year-old is tough. So with that in mind here are a few interesting web development/design reads I&#8217;ve found in the past [...]]]></description>
			<content:encoded><![CDATA[<p>How do people with jobs find the time to blog? Yeesh. I&#8217;ve got about 5 posts half-done but scraping together a few spare minutes every night &#8211; especially when you <a href="http://www.flickr.com/photos/13453700@N02/3408711972/" target="_blank">live with a two year-old</a> is tough. So with that in mind here are a few interesting web development/design reads I&#8217;ve found in the past few days&#8230;</p>
<ul>
<li><a href="http://blog.themeforest.net/tutorials/the-importance-color-in-web-design/" target="_blank">The Importance of Color in Web Design</a></li>
<li><a href="http://www.seomoz.org/blog/how-to-name-a-webbased-business" target="_blank">How to Name a Web-Based Business</a></li>
<li> <a href="http://nadeausoftware.com/articles/2007/05/stop_spammer_email_harvesters_obfuscating_email_addresses" target="_blank">Stop Spammer Email Harvesters by Obfuscating Email Addresses</a></li>
<li><a href="http://www.randallrothenberg.com/2009/02/heartbeats-and-mouseclicks-manifesto-on.html" target="_blank">&#8220;A Bigger Idea&#8221;: A Manifesto on Interactive Advertising Creativity</a></li>
<li><a href="http://www.webdesignerdepot.com/2009/03/5-simple-ways-to-improve-web-typography/" target="_blank">5 Simple Ways to Improve Web Typography </a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://jamienay.com/2009/04/web-resource-roundup/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
