Nouns and Verbs Meet Menus 30Sep08 | 0

So everyone in usability/User-interface-land knows what WIMP is & it’s PARC history. And lately, there’s been a huge fuss over Windows’ move away from teeny-tiny-impossible-to-navigate menus to more plump ‘ribbons‘. Even in coder-land, Object oriented programming was a huge revolution, and now REST (effectively an OO-web!) is following suit.

I’m not going to get too deep into the details of all that; instead let me back up to the traditional menu. Yes, yes, that thing with “File, Edit,View, Insert, Format, Help” and the like. Question for you: how many nouns and how many verbs are on that list? And then compare each of their contents:

    File

  • New (Create)
  • Open
  • Save
  • Close
    Edit

  • Cut
  • Copy
  • Paste
  • Select
    View

  • Page
    Insert

  • Break
  • Picture
    Format

  • Page
  • Paragraph
    Help

  • Contents
  • About

This menu system is entirely schizo. Noun::Verb & Verb::Noun back & forth all day long. No wonder users can never find what they want to do: there’s no consistent pattern of thought.

When you’re out working the lawn, washing your car, which do you think about first: the action or the object? Tough call really. Likely it’s “I want to perform an action, I need these objects, now I act with them.” What thought pattern is presented in these Menus? For one, too many options: you likely don’t have your laptop when you’re using a push-mower. You likely don’t have the oven running when you’re washing your car.

Back to my point: while I’ve been on about this Noun::Verb thing for a few months, I just noticed it in gmail’s settings interface. It’s a “what are we talking about? ok, what are we doing?” kind of thought pattern. It’s behind all good analytic stuff. Keeping the noun-first,verb-second saved some code of mine this week from getting mangled, would have saved a mis-managed project, and honestly, the deaf community has been doing it for years. Object first, actions second.

Aside: This noun-first/object centric user interface design was revived a bit by the “right-click” menu. But even then, sometimes it’s properties, other times it’s actions to perform. It was the beginning of the end for double-representation where I can’t play with the object like I can with my hands. No, any playing is mediated not JUST by the mouse/computer, but by the Almighty Menu (*cough* KDE’s task program k-arm *cough*). Why do I have to go to the menu to add, remove or edit a task? Why can’t I just grab it & move it? or click a plus-sign when I mouse-over it? Why? Cuz it’s too hard for programmers who tell us to be happy with what we’ve got instead of making them work harder/more. Amazing. (Stay tuned for the code-release of said task-list from me!)

I don’t doubt the original PARC guys’ braininess. They set out on something good.Their ‘document editor” likely didn’t have “document properties & statistics” (nouns!) or movie clips, email accounts, database connections (more nouns!) to connect & attach and insert & sort. But over the years, as software took on feature-creep, these nouns & verbs crept into hidden nooks & crannies of the menus, overloading ‘em, instead of rethinking and applying major modifications which scare users away.

That’s why gmail’s mail interface works: you know WHERE you are, and there’s a simple set of verbs that you can do while you’re there. It’s an entirely rethought mail system that people love for it’s simple Noun::Verb order.

Final note: sometimes it’s perfectly ok to have the verbs in the menu (edit, insert, format) when the workspace (noun) is clearly defined: “this is a document, you compose elements here” or in gmail “this is your latest mail, read it, value it or get rid of it.”

Wordpress: Author List by Category 01Jul08 | 0

I just keep functioning out WP! (What can I say, it’s my job!)

This is a rework of WP’s own list_authors() function, but with some extra SQL:


<?php

function my_list_authors_by_category($args = '', $cat_id=0) {
global $wpdb;

$defaults = array(
'optioncount' => false, 'exclude_admin' => true,
'show_fullname' => false, 'hide_empty' => true,
'feed' => '', 'feed_image' => '', 'feed_type' => '', 'echo' => true
);

$r = wp_parse_args( $args, $defaults );
extract($r, EXTR_SKIP);

$return = '';

/** @todo Move select to get_authors(). */
//    $authors = $wpdb->get_results("SELECT ID, user_nicename from $wpdb->users " . ($exclude_admin ? "WHERE user_login <> 'admin' " : '') . "ORDER BY display_name");
//replace with the 'author by category' SQL
$authors = $wpdb->get_results("SELECT distinct post_author as `ID`, user_nicename FROM `default_posts` as `dp`, `default_terms` as `dt`, `default_term_relationships` as `dtr`,`default_users` as `du` where `dp`.`post_author`=`du`.`ID` and `dp`.`ID`=`dtr`.`object_id` and `dtr`.`term_taxonomy_id`=".$cat_id.";");

$author_count = array();
foreach ((array) $wpdb->get_results("SELECT DISTINCT post_author, COUNT(ID) AS count FROM $wpdb->posts WHERE post_type = 'post' AND " . get_private_posts_cap_sql( 'post' ) . " GROUP BY post_author") as $row) {
$author_count[$row->post_author] = $row->count;
}

foreach ( (array) $authors as $author ) {
$author = get_userdata( $author->ID );
$posts = (isset($author_count[$author->ID])) ? $author_count[$author->ID] : 0;
$name = $author->display_name;

if ( $show_fullname && ($author->first_name != ” && $author->last_name != ”) )
$name = "$author->first_name $author->last_name";

if ( !($posts == 0 && $hide_empty) )
$return .= ‘<li>’;
if ( $posts == 0 ) {
if ( !$hide_empty )
$link = $name;
} else {
$link = ‘<a href="’ . get_author_posts_url($author->ID, $author->user_nicename) . ‘" title="’ . sprintf(__("Posts by %s"), attribute_escape($author->display_name)) . ‘">’ . $name . ‘</a>’;

if ( (! empty($feed_image)) || (! empty($feed)) ) {
$link .= ‘ ‘;
if (empty($feed_image))
$link .= ‘(’;
$link .= ‘<a href="’ . get_author_rss_link(0, $author->ID, $author->user_nicename) . ‘"’;

if ( !empty($feed) ) {
$title = ‘ title="’ . $feed . ‘"’;
$alt = ‘ alt="’ . $feed . ‘"’;
$name = $feed;
$link .= $title;
}

$link .= ‘>’;

if ( !empty($feed_image) )
$link .= "<img src=\"$feed_image\" style=\"border: none;\"$alt$title" . ‘ />’;
else
$link .= $name;

$link .= ‘</a>’;

if ( empty($feed_image) )
$link .= ‘)’;
}

if ( $optioncount )
$link .= ‘ (’. $posts . ‘)’;

}

if ( !($posts == 0 && $hide_empty) )
$return .= $link . ‘</li>’;
}
if ( !$echo )
return $return;
echo $return;
}
?>

And then to call, just define the category you want:


<?php

$cat=0;
if (have_posts()){    //get the present category, if there is one
if (is_category()) {
$cat = get_query_var('cat');
}
}
if($cat!=0){
?>
<h2>Authors:</h2>
<ul>
<? my_list_authors_by_category('exclude_admin=1',$cat); ?>
</ul>
<? } ?>

KDE4 & me 11Jan08 | 2

The quick list:

Loves:

  1. The overall look. It’s hot. Gnome is too home-y.
  2. The lack of an INSANELY long & overstuffed KDE Menu
  3. KDE Menu that listened to Fitt’s Law!
  4. Desktop Icons with mouse-over actions
  5. Widgets on the NorthEast Display Corner Mouseover

Not lovin’:

  1. No Keyboard Shortcuts: KDE4 had none that Gnome AUTOMAGICALLY got:
    1. Volume up/down/mute (F3-5)
    2. Display Brightness up/down (F1-2)
    3. CD Eject (F13)
  2. While I’m at it, where do I even mute the sound AT ALL?!?
  3. Reverting to the old KDE3 panel style for settings. Back to old-school ick!
  4. Desktop CLUTTERED with ridiculously large Icons. (And how do I change their size?)

I’m in need of help on fixing these should-be-minor issues, otherwise it’s back to Gnome for me. Any takers out there?

—–

Update: It seems Thom Holwerda agrees with me:

The panel. Ah, the panel. How you mock me by being totally unusable and inflexible. You cannot change its size (at least not in a logical place), entries in the taskbar are too large and look plain weird (esp. the text part), it has visual remnants (a one pixel fully opaque line from the background sits between the glassy rim and the taskbar itself), there is not one setting you can alter about it, and most of all: it has the world’s worst application menu ever (based on OpenSUSE’s Kickoff). I hate it so badly, it made me curl up in fetal position and cry in the corner of my living room (and I had guests, so you can imagine the confusion). I mean, I thought Vista’s start menu was unusable, but trust me, that one is usability bliss compared to this abomination.