home
Blog

What I’d like to see from Lithium #li3

li3This week my framework of choice CakePHP forked. Now there’s CakePHP (the mothership) and Lithium (the project formerly known as Cake3). Let me tell you, oh people of the interwebs, it’s a weird feeling to wake up on a Friday morning to find out the leaders of your “online community” have parted ways and no one is really talking about it. Kind of like in high school when 2 friends break up and you’re not sure who you’re supposed to hang out with. The public breakup actually seemed very mutual and polite and the world appreciates the “less drama” approach. Let’s look at the facts, CakePHP is still the excellent framework that it was on Thursday and development is still going on.

And to keep myself upbeat about the whole situation I like to pretend there was a board room meeting where Larry Masters raised his arms and said “Go forth @gwoo and @nateabele! and continue with us -not as enemies, but as friends- to bring the good news of PHP to the world! We are all lions! There can be many prides!”… and then Mark Story did some kind of run-up-the-wall backflip because he is amazing…

Nate’s Question

Backstory complete, Nate posed the question on Twitter about what people would like to see from Lithium. I knew my answer wouldn’t fit into 140 characters so I thought I’d post it here.

File Uploader Class

My first dream utility would be some kind of built in File Upload mechanism (component, behavior, I don’t really care). I have had a long sordid story with uploading:

  • First it was a custom jobby that got exploited pretty quick.
  • Even when I did patch it, I was always stressed out about it.
  • Then I used one of the upload components from CakeForge.
  • Then about a year ago I switched to MeioUpload which rules, but after a year of use I’m starting to see the imperfections in it.

The general attitude in the CakePHP community seemed to be sort of “we don’t have that” and “figure it out for yourself”. But let’s be honest, we live in the #lazyweb and most real world applications involve some kind of uploading. Usually it’s creating a method for some computer illiterate person to upload a CSV or a PDF. But in the era of audio/video and media rich apps, the need for any framework to possess a standardized uploading class+handler is inherent. A canonized Uploading Class makes perfect sense. I have high hopes for something like this to come to Lithium because it appears that the creator of CakePHP’s Media Plugin, David Persson, has also defected. But so far his Twitter stream has given few clues to anything like this, just cryptic messages about pyramids, sunsets, and bicycles.

Image Editing Class

Another idea would be some kind of Image Manipulation/Editing class. This idea I got from this tweet. Just like uploading the chances that your modern day app is going to run into images and/or image editing is HUGE. I suppose this runs into a “Which javascript framework do we use!?!?” dilemma, but we all know that jQuery is the right answer here.

Other Ideas

Any other ideas would be toward making useful applications, because I’m a more User Experience oriented person. If I were to put myself on an MVC spectrum, I’d be here:

[DATA] Model ------------------------- Controllers ---------|------------- Views [UX]

Just a tip for the Lithium Team, the secret to becoming an awesome framework is to make yourself completely accessible to n00bs. Have little bits that give your framework some “killer feature” eye candy. Extract mundane tasks like comment systems, rating/digg counters, geolocation, event calendars, et cetera into pre-packaged add-ons. I realize the developers of Lithium probably want to keep things lightweight and generic -and they should because it makes the framework more nimble- but some kind of cabinet of “Almost-Core” add-ons would be killer. Sort of like CakeForge Snippets and the Bakery intended to be before they got all super confusing.

Meeting Biggs Darklighter* at Subway

As for my decision whether or not to “Join the Rebellion” who knows. I really like CakePHP and having used it everyday for over the last 3 years I feel like I’m just hitting my stride. I feel like I can do anything with it. And probably more importantly, as long as I have production servers that are PHP4.3.9 (gasp!) and PHP5.2.6 with over 40 live sites I won’t be leaving CakePHP anytime soon.

On the other hand, some of my most memorable help on the IRC has been from Lithium’s Gwoo and Nate (as well as Mark Story who is already an established bad ass). So based on loose *never actually met* e-relationships Lithium seems like a more natural choice.

It will ultimately come down to the new programming cliche “Choose the framework that’s most suitable for the project” (CTFTMSFTP, for short). It’s like Subway**. There’s no rule that you can only order one sandwich for the rest of your life. It’s simple: choose the one you want to devour at the moment, pay the lady, and move on. Sometimes it’s CakePHP, sometimes it’s Lithium, and sometimes (gasp!) it’s Ruby on Rails.

Hopefully that metaphor changed your life like it did mine. Otherwise, I’m excited for Monday when my Ponies Class for Lithium is unveiled to the whole world. And although my hands are tied to lower PHP versions for awhile, I’m excited to see what comes of the whole Lithium project.

* This is a reference to a scene cut from Star Wars IV: A New Hope http://www.starwarsholidayspecial.com/swcs/episode4/Biggs.html

** Full disclosure: I want Subway to sponsor my life. If you can make this happen, email me.

October 24th, 2009 | davatron5000 | 7 Comments

4 Best CakePHP Behaviors

CakePHP is our framework of choice here at Paravel.  I spend a lot of time on CakeForgeThe Bakery, the Cookbook, and the API looking for code and examples either A: because I sometimes don’t know what I’m doing, or B: I want to know THE best convention to for the answer I’m looking for.  

After countless hours of using these mind-altering codes, I -authoritatively- present to the Top 4 Behaviors that everyone should be using in their apps… or else…

#4 Containable

This is hot off the shelf and new to CakePHP 1.2 and it makes a world of difference. When querying items in the database, Cake likes to SELECT records wtih all it’s belongsTo, hasMany, and HABTMs (“habtems”) auto-magically associated. With the Containable Behavior you can stop all that nonsense and speed up your app by having it contain the JOIN to a “short list” of approved “models”…

The Containable Behavior is like the bouncer at a fancy Hollywood club where if you’re not on the list, you get kicked to the curb and have to watch all the other “approved” models go by. Hot, hot models.

More concretely, let’s say you had a Posts table and you wanted to get only the comments in the view, while simultaneously ignoring all the Author, Tags, Categories, etc.

/app/models/post.php

class Post extends AppModel {
  var $name = "Post";
  var $actsAs = array('Containable'); 

// forgive the over-simplification of these.
  var $hasMany = array('Comments');
  var $belongsTo = array('Author');
  var $hasAndBelongsToMany = array('Tags','Category');

}

/app/controllers/posts_controller.php

function view_a_post_with_only_comments($id = null) {
  if(!$id) {
    $this->Session->setFlash('You forgot the ID number.');
    $this->redirect('/');
  }
  $this->Post->contain('Comment');
  $this->set('posts', $this->Post->read(null, $id));
}

It’s that easy! now you’ll only be pulling the Post and the Comments! ka-chow!  This

#3 Tree

I love trees. My wife has a particular affinity towards them. If you like trees then you will be a fan of this behavior. If you do not like trees, I suggest you eat a bowl of hair because you are a du-mmy. Over the course of the last year I’ve made a few category systems in my apps and all of them left me feeling like i did something wrong and/or patched the code together in a terrible way.

Enter Tree Behavior! It’s been around forever and a half, and I don’t know why I didn’t use it, but it makes organizing things like categories, forum posts, comment threads, etc a whiz! All you need is to add another couple of fields to the database and then add one line to your model.

categories.sql

create table categories (
  id integer 11 auto_increment,
  name varchar 50 null,
  parent_id integer 11 null,
  rght integer 11 null,
  lft integer 11 null
); engine=MySAM encode=UTF-8

app/models/category.php

class Category extends Model {
  var $name = 'Category';
  var $actsAs = array('Tree');

// ideally categories should describe something,
// so this is just an example association.

  var $hasMany = array('Post');
  ...
} ?>

Now you’re cooking with grease! It will automatically keep track of your tree structure – who comes before this, who comes after (“left and right”), who is the parent, etcetera. Couldn’t be easier.

Move on to the next page for the Top 2 CakePHP behaviors:

December 8th, 2008 | davatron5000 | No Comments

About

Hello, I'm dave rupert

beforeafter

I've done the unthinkable. The unbelievable. I started a blog in the year 2009. I might as well have started a dinosaur. If it's any consolation, I've been making websites since I was 14 (15 years now! wow!) and I had blog at the now defunct wimpkiller.com that I posted on for over 5 years!

I'm 29. I live in Austin, TX with my beautiful and hilarious wife. I have cat that she named "Moogs", he looks like a cow. I'm training him to be a dog. I'm the Lead Web Developer for Paravel, who sole purpose is to make radical waves on the internet.

I play guitar and a wide array of other instruments.  I speak japanese.  I can't run very far.  I contribute to the Earth scorching music blog Austin Town Hall from time to time and I drive a Scion XB - I know it says a lot about me, but I'll bear every criticism because it's a good square car. I spend most of my days on the computer soaking in the beta radiation, and then my evenings on the couch watching Law & Order with my wife on my Roku.

Yup. That about sums me up.

elsewhere on the internet

about this theme

This blog is built on Wordpress and this is a custom theme I wrote to replicate the functionality of the popular desktop Twitter app by AteBits, Tweetie for Mac. The icons are mostly from Glyphish.

Blog
Blog

Search