CakePHP Digest #18 - The CakeFest Edition
CakeFest
Big News
The big news everyone is talking about from CakeFest is Cake3 - a completely overhauled version of CakePHP geared towards PHP5.3. Unfortunately I was stuck watching over little one (by that I mean my co-workers...I kid...you guys are the best) and didn't make it to Berlin. Plus, ustream.tv ate the keynote videos, so I probably have less details then anyone. Of course it didn't take much detective work to find the processed versions of the keynotes that will probably soon be seen on live.cakephp.org. In other news CakePHP2, a PHP5 version, was also announced, but was so overshadowed by Cake3 that it resorted to cutting itself for attention.
The Show
Nate Abele, Garrett Woodworth, and Jeff Loiselle did a podcast recently discussing what went down at CakeFest. Nothing too earth shattering was revealed, but it clocks in at a trim 27 mins, so it's worth a listen. Thankfully they didn't answer any questions from the IRC channel, so I didn't feel so bad that I didn't waste an hour figuring out how to use IRC.
Interviews
Also on live.cakephp.org are three interviews. I haven't had a chance to check any of these out yet, so I'll just throw out the links, with a description of what I think they are talking about based on the preview image:
Nate Abele and Jeff Loiselle discuss various leg crossing positions. Nate prefers the traditional over the top (The Orwellian), while Jeff tends towards the perpendicular tuck.
Gwoo and Jeff Loiselle don't actually talk in this one. They just flex for the camera for 13 mins.
Mariano Iglesias explains the dangers of hat head to Joël Perras
Recaps
Graham Weldon has recaps of each of the talks posted on CakeDC.com.
Cake Toppings has a short post, which includes the bit: "That saterday had a few interesting talks and also some not interesting ones." Unfortunately, no further details where given. DRAMA!
Kevin van Zonneveld has a pretty long post on some of the tips he picked up.
Felix Geisendörfer posted his summary on the newly re-designed debuggable.com.
@alkemann has a post covering some of the out of conference shenanigans, including Fork Master (co-created by gwoo), which is kind of like horseshoes but with less of a chance of breaking a toe and a greater risk of losing an eye.
Slides
A bunch of the slides for the talks are posted. Oddly the files are all exactly the same size (512.0 Byte). Really impressive that all the presenters could coordinate and pull that off.
Mind Map (whatever the heck that is)
Not really sure what the point of these things are...but here is one for CakeFest.
Random Video
I leave no stone unturned. No link unhyperlinked. Here is 49 seconds of dimly lit bowling that @pierremartin claims came from CakeFest, but could easily be a night at rock and bowl from three years ago.
Photos
There were a bunch of random single shots posted on twitter, but I'll stick to the galleries here.
A bunch of iPhone shots from @alkemann.
Graham Weldon also has a picasa gallery, which includes some moderately NSFW shots. Someone should do A/B testing on the NSFW tag. I bet click throughs jump like 100000% with it.
And finally @pierremartin has a picasa gallery as well.
That's It
Sorry if I missed your blog recap, photo set, drunken video, or whatever. Feel free to leave a link in the comments.
CakePHP Digest #17 - Non-CakeFest Edition
News
CakeFest...
...won't be mentioned in this digest. Look for a special CakeFest Edition later in the week once all the posts are in and ustream gets around to processing the keynotes.
CakeFest Conference Pass Winner
Congrats to Paul R. Zwiers on winning the free conference pass to CakeFest. I'm sure he had an awful time and wish he had just sold it on eBay.
In The Wild
Dead Michael Jackson Jokes
I think this site proves what I've been saying all along: If you need to quickly put up a site to capitalize on the death of celebrity, then CakePHP is your framework.
Dos Equis Academy
Part of Dos Equis "Most Interesting" marketing campaign, the academy site is a bunch of mini flash games. The games aren't what you would call "good" or "entertaining" or even "moving at an acceptable framerate." They were probably coded by the same guys who did ustream.tv's video processing program.
JumboTweet
jumbotweet.com allows you to post tweets longer then 140 characters to twitter. Basically you make your tweet through the site and the message will be shortened a link to the full message will be included.
Pixelglo
Pixelglo.com is a monthly photo competition. The theme of the first contest is "Wine". Surprisingly, the rules are fairly open: "Our first contest is about anything wine. Vineyards, bottles, taste or anything else that reminds you of wine." I think we have a winner right here.
unameen
unameen.com is a "community website which helps people to share and organize events." You can read more in the Bakery article.
In The Blogs
exclusive option
lecterror has a post about the exclusive option, which can be applied to hasMany relationships. Doing this can save a bunch of queries when doing a delete. I actually ran into this issue shortly before lecterror's post, so it was a very timely read for me.
Tutorials
Jamie Nay has a a couple roundups on useful CakePHP tutorials (here and here). He's trying to post at least 5 links every week, so check it out.
Code
Another CMS
This one's called Camiro. It's not yet at stable release, but there's some stuff there now if you want to check it out.
RSS Datasource
Another nice piece of code from the Loadsys team.
ClamAV Plugin
Not really a true CakePHP implementation, this code is more of a straight PHP class with a Cake shell. All the actual ClamAV stuff is implemented as a PHP class, rather then as a datasource. Still might be helpful to some people.
Uploader Plugin
Miles Johnson released his uploader component.
Named Routes
Mark Gandolfo released a named router class which makes it easier to create links in views.
//the normal way:
$html->link('Edit User', array('controller' => 'users', 'action' => 'edit', 5))
//with named routes
$html->link('Edit User', url('edit_user_path(5)'));
I'm Out!
And on that note don't forget to subscribe to my feed or follow me on twitter.
As always if you think I missed something leave a comment. Or if you do something interesting and want it included in the next digest, send me an email.
CakePHP Status Dashboard - Everything You Need To Know About Your App On One Page
Beta
First off this thing is still pretty rough. I don't have any unit tests at the moment and I'm likely to make huge, wholesale changes on a whim.
Download
What The Heck Is This Thing?
You build a cool CakePHP app and now you have to maintain it. You go to Google to check your analytics; you SSH to your system to check log files; You log into your web admin to check affiliate clicks... Wouldn't it be cool if you could check all this (and more) from one page? That's what this status plugin does. Check out the screenshot:

Or visit this live (but admittedly boring) example.
What Are The Different Panels Available?
Right now there are four "core" widgets, some of which have multiple options, so they can produce multiple panels.
Google Analytics
Multiple panels for quick info on your visits, referrers and search engine keywords using the Google Analytics API. Adjustable timeframes to get a recent or long range snapshot.
Shells
Add logging to your shells to capture info when they run - great for shells that run from cron. Clicking on the shell link in the panel pops open a window with detailed information. Requires integrating the log task in your shell.
System
Basic information about the system hardware, including disk space and uptime.
Logs
Show Cake's log files. Can be used on any log file in /app/tmp/logs, including custom ones. Just pass the log file name(s).
Extending For Custom Panels
It's pretty easy to write your own custom panels. Check out the click plugin, which tracks outbound clicks and displays the results via panels in the status dashboard. I'll write full post on how to code your own panels in bit.
CakePHP Digest #16
News
Preface
I just wanted to say this is probably the highest quality of links I've ever put together for one of these digests. There have been some really good blog posts and code released over the last 2+ weeks.
Updated IBM Tutorial
I saw this link floating around, but ignored it for awhile since I thought it was just the old version of IBM's Cooking Up Websites Fast brought back to life. Turns out it's completely updated for 1.2 and covers everything from installation to security to caching.
@CakePHP
So what happened to the CakePHP twitter account? Did the devs lose the password? Don't get me wrong, it's great that I'm the last link tweeted, but it's been over a month now. Let's get this thing rolling again.
Tickets and Commits
Validation Rules
I'm sure the Cake team would be perfectly happy to go the rest of their lives without ever seeing this ticket again, but I'll bring it up one last time. It's #5145 - Cake should have a alphanumeric+whitespace validation rule. On the surface the need for this type of rule seems to make sense, but as Joel Perras points out in the Google Group it's a fairly uncommon scenario. Actually, I can't think of when I'd actually use this rule - post a comment if you have.
This also opens up an opportunity for someone in the community to make an awesome behavior (packaged as a plugin, of course) that encapsulates a bunch of random, bonus validation rules. Joel even gets you started by providing a "alnumWhitelist" rule. Whose gonna run with this?
In The Wild
F-E-E-D-Z.com
This one has actually been up for awhile, but I held of until the bakery article stabilized. F-E-E-D-Z is a feed directory.
Dropfood.com
Dropfood is a recipe aggregation site, at least that's what I'm inferring since there isn't a description anywhere. It seems to be moderated, so only select recipes are included. Clicking on one brings you to a framed site with the recipe and diggbar like bar for Dropfood.
Cyclingnews
I'm not 100% sure this one is Cake site, but @frodosghost heard that it is. Good enough for me.
Unlike the two sites mentioned above, Cyclyingnews.com has original content and focuses on...wait for it...cycling news! It's pics like this and this that make me wish I had spent less time trying to jump shit with my bike as a kid and instead just rode for a really long time. Plus, I could finally wear my shirt like this and people at work wouldn't give me funny looks.
In The Blogs
Vanity Routing
Let's say you have a site, we'll call it FaceSpace in this example, where you want to have "www.facespace.com/vanity" route to a particular controller. But you also want to make sure that your actual controller urls still route correctly. lecterror has a quick tip on how to accomplish this.
Two from Debuggable
The first is a cool little shell that can be used to clear cache. If you're going to actually implement this though, I'd use the version that Joel Perras rolled into a plugin. Joel's version is also updated to use the CakePHP clearCache function.
The second post from Debuggable is a quick intro on unit tests in CakePHP and has some good links on getting started.
Sending Email with GMail
Marc Grabanski has a post on using the SwiftMailer component to send email via Gmail. Another way to do this, assuming you have control over your server, is to install msmtp and set your sendmail_path in php.ini to use it. I'll post about it if anyone's interested.
Simplifying Controller with Exceptions
Mark Story has a post of using PHP's try...catch() handling to clean up controllers and components.
Code
AutoLogin Component
I should have mentioned this one in the last digest, but completely wiffed. Miles Johnson released an AutoLogin component which allows you to add a checkbox to your login form, so that returning visitors can bypass the login.
Commentable Behavior
Jose Diaz-Gonzalez released a behavior to allow comments to be tied to any model.
Filter Component
Ever wanted to apply a filter to your paginated list? James Fairhurst makes it easy with his Filter Component. Unfortunately there's no download for this one, so be prepared to ctrl-c and ctrl-v.
CouchDB
If you're into non-relational databases you might want to check out this Couch DB datasource from Chris Hartjes. Or take a look at the improved version from Gwoo.
Interactive Plugin for the DebugKit and Console
This is one of mine. The Interactive Plugin lets you quickly run commands against your Cake app. I saved about 30 minutes of debugging using this to fix an issue today.
I'm Out!
Don't forget to subscribe to my feed or follow me on twitter.
As always if you think I missed something leave a comment. Or if you do something interesting and want it included in the next digest, send me an email.
CakePHP Book and Code Updates
The Book
For anyone who missed it, I released a free CakePHP book a month ago. Since then it's been downloaded over 2500 times. I've also received some great feedback and have made a bunch of corrections to the code and grammar. The biggest change is that the table of contents is now links and will jump you right to the section. That's reason enough alone to grab the updated version. The new permanent home page for the book is here.
Interactive Console and DebugKit Panel
Github Link
http://github.com/mcurry/interactive
Updates
I fixed a couple issues that were pointed out in the comments of the announcement post.
One of the suggestions was to have the up arrow cycle previous commands when using this in the console. It's a great idea and actually works magically on ForTheWindows. I checked it out and I didn't see a way to make it happen for all systems though. So, I did the next best thing. Hitting enter on a blank line re-runs the previous commands. Entering 'h' brings up a list of the last 20 commands and you can run one by just entering the number. Command history is also saved across sessions, so you can exit and go back in and still run old commands.
Custom Find
Github Link
Pagination
I pulled in some of the ideas from Daniel Salazar's post and now the custom find types have built in pagination support. It's kind of scary how easy it is. Here's an example:
$this->paginate = am($this->paginate, $this->Post->find('published', array('paginate' => true)));
$this->set('posts', $this->paginate());
This only works if you are still using one of the default find types to run the actual query, as opposed to Model::query();
Extending Model
I struggled with how to make this plugin easy to install. I didn't want to force people to have to copy and paste a bunch of code into their AppModel. I felt like that would make updates harder and would just make AppModel too messy. So instead I recommend that you have your AppModel extend FindAppModel instead of Model. FindAppModel in turn extends Model. Multiple inheritance would come in handy here.
Ajax Chat
Github Link
Updates
A couple small changes here. The helper now handles cake installs that aren't running in webroot automatically, so you don't have to set it in the JavaScript manually. Also the posted chat message now appears instantly in the chat window. Before you'd have to wait for an update for the message to appear.
Asset
Github Link
http://github.com/mcurry/asset
Updates
The order that scripts and codeblocks is now maintained. The previous version always put codeblocks after scripts, but there are times when the codeblock needs to go before a script. The new version keeps everything in the order that it was entered. This means if you do script1, codeblock, script2 that the two scripts won't be merged because it is assumed that the codeblock is dependent on script1 and script2 is dependent on the codeblock.
JS Validate
Github Link
http://github.com/mcurry/js_validate
Updates
I merged a couple changes from javierm's fork. These include a fix for the numeric check, matching Cake's default error HTML and including the fieldName when calling custom rules, which should make doing Ajax validation much easier. I'll have a post showing some examples of this next week.
