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.
CakePHP is our framework of choice here at Paravel. I spend a lot of time on CakeForge, The 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:
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




