Gnome Do with Docky theme

February 8th, 2009

So I installed Gnome Do (0.7.99.1-0) last night and it’s pretty awesome. One of the themes enables a full-fledged dock interface when not in search mode.

Gnome Do on its own is an equivalent to QuickSilver which is an OSX search and command program. By hitting the super key and the space bar on your keyboard Do will pop up a box to type a command or search term into. It’s got an interesting plugin system that enables it to perform tasks such as:

  • Initiating chat with Pidgin contacts
  • Quickly searching for a GMail contact’s details
  • Searching files and folders on your PC
  • Playing a particular song in Rhythmbox
  • Searching your Google Calendar
  • Searching for programs to call by via command-line

An example of initiating a conversation would be:

  • Hit super key and space bar together
  • Type ‘chat’
  • Hit tab
  • Type ‘Chr’
  • Hit up and down arrows to move through Pidgin contacts containing the text ‘Chr’: Chris B, Chris N, Chris O
  • Hit enter and Pidgin gains focus with the Pidgin contact conversation open

To install Gnome Do with the Docky theme available you’ll need to add Gnome Do PPA Repository to your sources:

deb http://ppa.launchpad.net/do-core/ppa/ubuntu intrepid main
deb-src http://ppa.launchpad.net/do-core/ppa/ubuntu intrepid main

Simple sudo edit

/etc/apt/sources.list

And append the deb lines to the end. Then open Synaptic and reload the manager. Then search for ‘Do’ and install Gnome Do.

Full example screenshot:

The only thing I dislike about the Docky theme is that it loses the listing of possible actions that Gnome Do normally provides as it autocompletes your typing. Try out the regular Do themes and then try Docky’s and you’ll see what I mean.

Otherwise it’s a pretty awesome app and much better than Cairo or Sim dock which I have tried previously.

Kudos to the Do team!

EDIT:

As David points out in the comments, Gnome Do can also (and apparently is optimised for) start its search process by object and then interact with it via its possible actions. In other words, I can type the name of a friend on my pidgin contact list, hit tab and then select to begin chatting with them. Or I could select to copy their email contact information.

Hence, any of the actions that are possible with that friend would be listed. Very cool stuff. Thanks for pointing this out David.

Personally I prefer the original approach as it relates more to English and feels like a more natural language processing flow for the user but that’s just me. I’m sure users in countries where the verb follows the object will be appreciative of the Do team’s efforts!

WordPress: Query Posts

February 6th, 2009

When you are interacting with WordPress’s Query Posts function the codex page gives great examples.

However, the one glaring omission is documentation on how to handle variables with spaces. For example you might want to query for posts with the tag “Converse”, this is easily achievable with:


# the query terms are not case sensitive, so converse==ConVERsE==Converse

query_posts('showposts=1&tag=converse');

But what if you wanted to query for a tag that contained spaces in it, like “Onitsuka Tiger”? Unfortunately none of the examples on the WordPress page currently provide an answer and giving the query_posts function spaces doesn’t result in anything. And while you might assume urlencode or rawurlencode might be the answer – they’re not.

The answer is that the spaces must be replaced with hyphens:


$manufacturer_tag=str_replace(' ', '-', $manufacturer_name);

query_posts('showposts=1&tag=' . $manufacturer_tag);

Apart from that omission the WordPress codex is still undeniably one of the greatest examples of an OSource API.

If You’re Not Testing Something Then Don’t Make It Default

January 29th, 2009

After debugging an Ajax Internet Explorer issue for about 3 hours today at work wherein what should’ve been some simple JSON data being returned by a jQuery $.post call the server instead returned the website’s main splash page.

I eventually discovered the problem was also clearing the user’s checkout basket. Upon realising that I discovered the user’s session was dematerialising on the server-side as well.

A few google’s later I found this post on the Magento forum (finally their forum is useful):

http://www.magentocommerce.com/boards/viewthread/27475/

So basically there are options in Magento’s admin backend that cause disruptions in IE for sessions and result in user’s losing their entire session.

In my case it was disrupting Ajax calls all the time. Why have the Magento developers made a buggy set of options the default for the admin panel when the bug affects the most common browser in existence?

Those options do sound great in terms of security but until they’re stable and tested they shouldn’t be made the default.

Indenting WordPress Code

January 22nd, 2009

I use the following plugin for the highlighted code on this blog:

http://wordpress.org/extend/plugins/syntaxhighlighter/

However, I found code was never indented properly. After rummaging around and reading a few other blogs it seems the answer is to wrap your Syntax Highlighting tags with the HTML ‘pre’ tags.

In my case that is like so:

<pre>[/sourcecode]</pre>

jQuery list insertion sort plugin

January 22nd, 2009

Here’s a basic jQuery sorting plugin for generic parent child relationships I wrote.

Wherein ‘element’ is the html you wish to insert and ‘value’ is what the associated weight of the element I’m inserting. For now it compares the weight value to the DOM text within the other children.

$.fn.insertSort = function(element, value) {
  selector = this;
  if ($(selector).length > 0) {
    $(selector).attr("inserted", "false");
    $(selector).children().each(function() {
      if (parseInt($(this).text()) > parseInt(value)) {
        $(this).before(element);
        $(selector).attr("inserted", "true");
        return false;
      }
    });
    if ($(selector).attr("inserted") == "false") {
      $(selector).append(element);
    }
  } else {
    $(selector).append(element);
  }
  $(selector).removeAttr("inserted");
};

It should be noted that this is an insertion sort. It’d be good to extend the plugin to be able to sort an existing piece of html for any parent/child relationship. Possibly with the ability to specify a particular level of depth?