Archive for December, 2008

Omaha World Herald Redesign

It’s been awhile since I’ve visited the North but Thanksgiving brought me up to Omaha, Nebraska and every morning I got to see the new(ish) Omaha World-Herald.  Generally pleased by what I saw, I thought I’d continue my newspaper re-design reviews “column” and give a quick review.

The Omaha World-Herald has been around since 1885, just about one hundred and twenty years longer than my company.  If that doesn’t give you perspective on it’s role in the community, the World-Herald is locally owned and is the largest employee-owned daily newspaper in the United States.  It also has the 4th best market home Sunday circulation penetration rate in the country (via owh) and ranks #52 nationally in circulation (via infoplease) - 2 spots ahead of the Statesman, I might add.  Pretty good for a city of only ~390,007 people.

Likes

  • Uniform Sub-section Headers - Probably THE most noticeable feature of the newspaper and most definitely THE biggest UX improvement.
  • The Sports Section is “branded” to match the University of Nebraska.  This is a really good bit of contextualization because as any sports fan knows the whole state of Nebraska is a fan of the Huskers, and if you’re not, you probably don’t belong in the state.
  • Like above, the Money Section is green.  Green = money. No brainer.
  • The header of the page gives valuable ad/feature space that doesn’t take away focus from the headlines. 
  • Good balance of GOOD photography and print.

Dislikes

I have to confess that I didn’t spend enough time with the paper to bring up a list of dislikes. But I have always found the OWH to be pretty fair and genuinely written, not glazed with a sleazy bias. But that’s less about design and more about political ethics.

I will say though, on researching information for this article I went to the Omaha World Herald website and was appalled by it. I tried to come up with reasons for it.  Maybe it’s a surrender to the big machines like CNN.com and MSNBC.com who have the online news market cornered.  Maybe it’s too costly to modernize.  Maybe a web redesign is in the works - if there isn’t one yet, please call me.  Paravel would love to help. But despite my pining for an answer, I was left looking at a site that doesn’t reflect the vibrance of the paper version.

I think it’s a shame that “smaller” newspapers don’t have awesome websites.  I guess there’s a budget issue to consider, but to me smaller newspapers should have a rapidly advancing web presence due to the fact that the volume of information is way less than say the Los Angeles Times.

And a continually updating web presence is important in this day and age.  As kids turn to the internet for answers on a daily basis, in 20 years, your paper subscriptions will be obsolete.  So you should get people hooked on your RSS feeds now (the Herald’s RSS feed isn’t true RSS, btw).[/rant]

In Conclusion

Good paper. Nice headers.  Terrible website.  That compress my feelings quite nicely.

↑↑ Please forgive my iPhone photography, it was all I had on hand.

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:

@cakebakers: upgrade your phoogle

I don’t know how many people were affected by this but when at Paravel we have a Band Tourdate Software called Tourdatr that uses the Phoogle Helper to show maps to the venues.  As recently as August we launched a Tourdatr site and then as I was revisiting the product to make improvements I noticed that all the Google Maps on the live sites weren’t loading.  We caught it rather quickly I think since we didn’t hear anything from site visitors. But somewhere between October and early November the Google Maps API must have changed (Geo-coding in Reverse?) and the maps stopped working.

Maybe I shouldn’t publicize this shame (hehe), but to avoid the same embarrassment, I fixed it by upgrading to the latest snippet on CakeForge: 
http://cakeforge.org/snippet/detail.php?type=snippet&id=134

baa baa baaaaa!

Things That Twitter is NOT

My presence in the Twitterverse has recently blossomed.   Family and friends from all over are beginning to adopt it.  As a result, it’s my new go-to for connection.  140 characters is all the communication I can handle.  It’s ideal.  But as people adopt Twitter in various facets, I have come up with a short list of guidelines about THINGS THAT TWITTER IS NOT.

Twitter is not RSS

A growing trend among mainstream blogs and users with blogs is to start serving links to your posted content via tweets.   An automated plugin that posts to Twitter every time you post a blog post.  This is not what Twitter is for.  This is called “RSS”.  It was all “the craze” 3 years ago.

Follow my logic.  If I was into your website, I would have subscribed to your RSS feed already.  I follow you on Twitter so that I can get insight into your life or company.  I do not follow you to subscribe to content that I ultimately have to read in my web RSS-enabled browser anyways.

If you still feel that your content MUST be served over Twitter, how about you write a custom post that highlights your best recent content?  How about de-automating it?  Giving it a personal touch?  This is actually a good idea.  Your blog should be doing this.

Twitter is not Facebook

This is just a personal pet peeve I suppose. Not internet law.  I know it’s hard to maintain 2 narcissistic things at once: a Twitter account & a Facebook status.  And not all your friends have Twitter, so you gotta use the fall on Ocham’s razor and go with the thing that makes the most sense.  So you set up a Facebook app to synchronize.  Unfortunately the answer to Twitter’s question: “What are you doing?” is NOT

is upset about yesterday’s football game.

Ergo, Twitter is not Facebook, purely based on a grammatical basis. Are they totally different?  No.  Should Facebook buy Twitter? Yes.  Should you stop automated apps?  Yes.

As a last argument against this: For those of us who use handy apps like EventBox, you subject us to both your facebook status AND your duplicate Twitter status.

Twitter is not iChat

Sometimes @replies go on and on forcing innocent bystanders to sit through 2 people having what is ultimately a private chat.  Etiquette suggests that this conversation can be moved privately simply by typing “d username some private message”, or it can be done via email.

Thankfully my friends have a lot of sensibility, but occasionally it leads to awkwardness.  

Twitter is not a Polling Device

This is my final one.  Especially around the election time, there were various Twitter polls going around for voting on the best candidate.  10 times out of 10 I can confidently say that Barack Obama won in a landslide 70%+ victory.  I can sum in one sentence why Twitter is not a reliable polling device:  My dad doesn’t use Twitter.

Only a small, elite (”leet”) subset of our great country uses Twitter and chances are they are younger, more liberal, more tech savvy, and adventurous than their elderly conservative counterparts.

The actual election was 52%-48%.