2009-07-09

Eclipse: Find the Breakpoint!

Today's user experience callout is Eclipse JDT. Let's play find the breakpoint:
Find the breakpoints

Here's a hint:
Find the breakpoints

Maybe it's more obvious if you compare with a search hit that doesn't have a breakpoint on the same line:
Find the breakpoints
(The breakpoint is on the top result)

Solutions

The ideal solution would still draw both icons in the same amount of space. After playing around a bit with transparency on the search arrow (verdict: looked terrible), I've come up with two possibilities:
  1. Draw everything as above, but when the mouse hovers near the search result arrow, fade it out to 20% opacity. Fade it back in to full opacity when the mouse leaves the area. (Lots of work.)
  2. A much simpler option would be to move the search arrow about 5px to the left, and chop off its leftmost 3-4 pixels, as in this mockup, to allow seeing both a search result and a breakpoint:
    Breakpoints (mockup)
    Neat, right? What do you think?

2009-07-08

flickr uploadr

Ah yes, on the subject of usability:

flickr-uploader

Does anyone else think the options should be "Stay here" and "Go to Flickr & Exit" ? I always end up hitting one of the two buttons, then ⌘+Q to quit uploadr.

Drive me crazy, will you?

I'm a dock-on-the-left guy.
I might adore using OSX, but for some crazy reason, whenever I launch gvim, this happens:
gvim-placement
I have no idea why this is the only app on my system that doesn't respect the dock's position when placing its window on startup. If anyone knows how to fix it... please post!

And yes, I know this is a small thing to complain about. I have Windows XP at work, and OSX with a copy of gvim that randomly bounces around the screen every 60 seconds would still be more pleasant to use.

2009-07-04

Overheard in Ottawa

"No, we were waiting for you at the *other* 'Pho Bo Ga La with a blue sign on Somerset'..."

2009-05-02

This Week in Food

Ice Cream at The Piggy Market

A few coworkers recommended I check out Pascale Berthiaume's (who provides the ice cream for the Wellington Gastropub) ice cream, now being sold in Westboro at The Piggy Market. They're located in the rear half of the old, now defunct, Westboro Market.

The Piggy Market

I gave them a first visit this week to check them out, and so far I've a very positive impression of the place. I stopped in on my way home from work on Thursday, around 20:45. They had been closed for an hour and forty-five minutes, but they still let me in to buy ice cream as long as I paid cash (the charge machines and register were closed for the day); they get 6 out of 5 stars for service. Again, on a coworker's recommendation, I picked the Peanut Butter Salted Caramel flavour.

Terrific Ice Cream

Outstanding! And check out the ingredients: yolks, cream, sugar, peanut butter, caramel, salt, vanilla. That's it! Goes for 10$ a tub.

Ron Eade on Butter Prices

Omnivore's Ottawa weekly supermarket specials roundup includes these few words from Mr. Eade:

Anyway, my gold star of the week goes to three chain stores, Price Chopper, Food Basics and Superstore Loblaw for selling various brands of butter, salted or unsalted and sometimes both, at $2.97 to $2.99 a pound. Really, I can't understand how stores get away with charging $4 or more for a pound of churned animal fat. (I'll bet it has something to do with the government-sanctioned cartel marketing board that controls milk prices. Reach for the sky, buddy, this is a stick-up.)

Now a complaint like this about the price isn't too punchy in a vacuum - we need to put it in context to see if there's really anything to gripe about when it comes to butter prices! How does this compare to the rest of your grocery basket?

Agriculture and Agri-Food Canada provides a bit of historical data for retail prices of various dairy products.

They also provide an overview of the butter sector, but this report is quite misleading; it significantly understates (by 50%!) the price of butter as they got the units wrong, claiming an average price of 3.84$/Kg in 2005. In Table 2, they present the AC Neilsen retail price survey data in $/Kg, adjusted to what I assume are 2006 dollars, but the Neilsen price survey measures the price per pound of butter (454g). I wonder how many people noticed the error.

It's best to ignore the above report then, and go back to the original data, in nominal dollars per pound of butter. As we can see from the series representing the price of a pound of butter, retail has crept up towards the 4$ mark for the last few years, but the nominal price, from 2006-2008, has hardly increased.

I've plotted this data against milk prices and the Core Consumer Price Index (which includes dairy products, btw), using 2004 as a baseline:

So it seems that although the price of butter has shot up a bit faster than core CPI around 2004-2005, it's been relatively flat even in nominal dollars over the last three years, meaning it's actually gotten cheaper in real terms.

Hardly cause for panic! Happy cooking.

2009-04-15

Caprica Pilot: They had Linux, DocBook and Windows on Caprica! (The Cylons probably rebelled after trying DocBook)

So now that BSG is gone, we can turn to the new Caprica series for our murderous Cylon fix.

I saw the first episode tonight and although the first fifteen minutes scared me a little (Oh no! It's The OC in space!) it got a little better after that and I think it's promising; the musical score by Bear McCreary was top notch as always. I love how they finally flipped the bird at Star Trek TNG 15 years after it ended: Screw you Gene Roddenberry - if we had holodecks, sex, drugs and indulging murderous fantasies are EXACTLY what we'd use them for. Recreating Sherlock Holmes stories or a spa with mud baths staffed with creepy clowns? Not so much.

Oh and I noticed this (large version linked): they apparently had DocBook, Linux and some old version of Windows on Caprica:
They had Linux, Windows and DocBook on Caprica!

2009-04-13

CampfireJ: a Java API for posting to 37signals' Campfire

My team at work has been considering trialing the Campfire app for intra-team communication. I've played with it a bit and so far I like it (a lot), but as with anything, adoption by the team is going to be the make-or-break factor.

I found myself wishing, though, that I had a way to post messages and notifications to Campfire chatrooms from the command-line or from Ant build scripts, used by our continuous integration system. There's a Ruby Campfire API already, but that doesn't really help me. So I wrote a simple Java API this weekend that posts messages over HTTP, with the self-imposed requirement it should have ZERO external dependencies outside the JRE. It's up here on Github and called CampfireJ; license is WTFPL.

Programmatic usage should be pretty easy to figure out, and the javadocs will be generated by the build, but what I want to call attention to here are the command-line interface and the Ant task.

Command-Line

Once you have campfirej.jar, you can use it directly as a command-line app like this:

$ java -jar campfirej.jar -u user -s subdomain -p password -r "Room 1" -m "Hello world" [--paste]

This will send the message "Hello world" to the room "Room 1" on your Campfire subdomain. I'm using this from a script for Out-of-Office notifications, you can easily find other uses. I think a useful addition to the program would be to allow omitting the -m argument and reading stdin for messages, that shouldn't be too hard to add.

Ant script

The real reason for hacking this together was so I could send Campfire notifications from a CruiseControl build/CI system, so I had to support sending from Ant.

Here's a sample invocation from a build script:



<project name="campfirej-ant-test">
<taskdef
name="campfirej"
classname="ca.softwareengineering.campfirej.ant.CampfireJEcho"
classpath="_dist/campfirej.jar"/>
<target name="test">
<campfirej
user="ant@example.com"
password="mypassword"
subdomain="campfirej"
room="Room 1"
failonerror="false"
paste="false"
message="Hello from ant" />
</target>
</project>

Cheers, and contact me with desired improvements, the library is just a few hours old so obviously it's not fully-featured yet.

2009-03-25

Booking a table

This impressed me a lot, it's very slick:


GMail managed to look into this restaurant confirmation email and see that it referenced an event at a specific time, so it created a link to add to my Google Calendar!

Following the link to their website reveals, however, that reservations are done through some third-party widget that's not OpenTable.

It's a shame that restaurants in Ottawa are fracturing their reservation systems across several providers like this, just like online classifieds for the city are fractured across Kijiji, Craigslist and UsedOttawa, reducing their utility for everyone. Restaurant reservations are the sort of service where these third-party hosted reservation service providers can hugely benefit from network effects. Once one service reaches a tipping point (like it seems OpenTable is achieving in some US cities), it will enable the creation of location-aware mobile apps and a whole bunch of other useful services for finding restaurants around you.

It seems to me that as a restaurateur, you'd have see huge benefits from going with a large provider that's essentially advertising your restaurant for you by publicly listing availability of tables. You'd want to go for the dominant service that could offer this, which hasn't (yet?) happened with OpenTable in Ottawa...

2009-03-11

That didn't take long

Manchego

Wow, the Kanata Costco sells Manchego cheese now. In three years it went from unobtainable to completely mainstream.

Three years ago, you could buy some 6-month and 12-month manchego at La Bottega. If, you know, you got lucky. Very lucky. And wanted to pay about 60 bucks a kilo.

Now it's at Costco for 35$ a kilo.

2009-03-10

Resource Acquisition over Broadcast Channels (Geek Factor: 9/10)

I've converted most of my workplace to my RABC protocol when requesting favours / equipment. Here it is:


A PROTOCOL FOR RESOURCE ACQUISITION OVER BROADCAST CHANNELS
v0.3

ABSTRACT

This document provides a message-exchange pattern (MEP) for
requesting and attributing resources over a shared broadcast
channel (RABC), such as an electronic mailing list (see
RFC822, RFC2919).

STATUS

This section describes the status of this document at the time
of its publication.

This document is the second public Working Draft of this spec-
ification.

CONVENTIONS

The following nomenclature is defined:
Alice Requester
Bob Responder to Alice's request
Charlie Responder to Alice's request
Dave Responder to Alice's request
L Broadcast destination [email list or message board]
R Resource being requested

Note that R need not be a physical resource, it may also be a
service. Examples of common resource requests include a ride
to a place of business, a piece of networking equipment, a
driver to pick up a food order, etc.


ANTI-PATTERNS

A common anti-pattern this protocol addresses is the lack of
notification provided to non-selected responders informing
them of which offer was selected:

(1) Alice -> L Request(R)
(2) Bob -> Alice Offer(R)
(3) Charlie -> Alice Offer(R)
(4) Dave -> Alice Offer(R)
(5) Alice -> L "Thanks!"

In the above example, before MESSAGE 5, Alice may or may not
have sent the private message:

(6) Alice -> Bob "Thanks, I'm using yours"

Charlie and Dave are now left wondering if the thanks was di-
rected to them, and if not, which offer was accepted. From
their point of view, MESSAGE 5 was ambiguous.

IMPLEMENTATION OF RABC

The only change required to the above pathological scenario is
for MESSAGE 5 to include an extra identifier. Requesters using
RABC to request a resource MUST include the identifier of the
party whose offer was accepted in their broadcast thanks mes-
sage. Any thanks expressed in this message is implicitly di-
rected at ALL offering responders, even if they are not named.

Sample exchange:

(1) Alice -> L Request(R)
(2) Bob -> Alice Offer(R)
(3) Charlie -> Alice Offer(R)
(4) Dave -> Alice Offer(R)
(5) Alice -> L "Thanks BOB, received R"

ANONYMOUS THANKS

In some situations, a responder may wish to offer a resource,
but not have that fact rebroadcast in the thanks message. A
typical case for this would be if the responder is concerned
that him offering a resource he's holding, albeit temporarily
(such as a piece of equipment), might publicly imply he didn't
really need that resource in the first place.

This is solved by including a unique anonymous key in the Of-
fer message. There are no format restrictions on this key, it
can be any string the responder reasonably believes will be
unique given the size of L:

(1) Alice -> L Request(R)
(2) Bob -> Alice Offer(R, ANON_12345)
(3) Charlie -> Alice Offer(R)
(4) Dave -> Alice Offer(R)
(5) Alice -> L "Thanks ANON_12345, received R"


RETRANSMISSION

It is allowable for a requester with an outstanding request to
repeat this request after a personally-defined timeout. When
repeating an unsatisfied request, a requester MUST reply to
his original request keeping intact its subject field. This
allows members of the broadcast channel L to use message
threading features in their mail clients to easily collapse
request retransmissions into the original request's thread.

The retransmitted request thus replaces the original. Members
of L consider MESSAGE 1, MESSAGE 2 and MESSAGE 3 a single re-
quest.

(1) Alice -> L Request(R)
(2) Alice -> L RE: Request(R)
(3) Alice -> L RE: Request(R)
(4) Dave -> Alice Offer(R)
(5) Alice -> L "Thanks DAVE, received R"

VERSION HISTORY

v0.1 jpdaigle 2008-05-20
Initial revision

v0.2 jpdaigle 2008-06-05
Added STATUS section, implicit thanks to IMPLEMENTATION

v0.3 jpdaigle 2009-03-10
Added anonymous thanks


Can I get some quiet?

It was too loud in my cube so I moved to the lunchroom to finish some doc reviews (no coding today). Of course, since the universe tends toward maximum irony, a bunch of coworkers decided the lunchroom would be the perfect place to start chatting away. Nice, thanks a lot.

2009-03-09

Spotlight Effectiveness

What happens when you hit ⌘+space, then type "digi"?
Spotlight Effectiveness by you.

And how effective is this "Top Hit"?


You'd think there would be some sort of frequency counter kicking in after the first hundred times I manually arrowed-down to the right result, to train whatever rule determines the Top Hit.

2008-12-23

An icon can offend my aesthetic sensibilites

Using Mac OS X is, generally speaking, a visually pleasing experience. People (including, on several occasions, me) can go on and quibble about inconsistent use of brushed metal, or unpredictable applicability of click-through, but by and large the visuals (even for 3rd-party apps) are nice, consistent, unsurprising.

I've just realized how little it takes for the whole feeling of polish and friendliness to come crashing down.

Something is amiss

There's something jarring in the above image. Can you spot it? Here, let me zoom in:

Visually Offensive Icon

Oh my. 

They just had to put an ® symbol RIGHT IN THE GODDAMN ICON? Think of how heartbroken the designer who drew the short straw had to be feeling after being forced to do this. So much work, so many iterations of the design, only to have it ruined at the last second when a lawyer reminded him that it wasn't enough to point out that the Adobe Reader logo was a registered trademark in the About screens and the documentation, you should remind people whenever they look at the icon too! Outstanding.

2008-12-07

Caught one!

As an apartment dweller on the top floor of a triplex, I have no upstairs neighbours, only an unfinished attic above me. Since outdoor temperatures started dropping with the arrival of Winter, I've had a few uninvited houseguests making a ruckus up there.

After a few (unsuccessful) attempts to look around with flashlights to see what was up there, my landlord and I eventually set a trap with some almonds and peanut butter.

Today we caught ourselves our first attic-dwelling squirrel! I know what I'm eating for dinner*!
Got the little bugger!


*: Actually the squirrel is being driven away from the house and gently released into a park.

2008-11-20

Chapters

has earned the unfortunate honour of being nothing more than a physical, browsable storefront for amazon.ca.

I was in recently to wander amongst the stacks, when I picked this up:
Book from Chapters

Looks tasty, but 55$? Out comes the iPhone...
Amazon.ca mobile

You can order straight from the iPhone-optimized website; my stuff should be delivered to the office by Friday. The sad thing for Chapters is that I really don't see how they can effectively compete here. Amazon, with no physical locations (that Chapters location at the corner of Rideau and Sussex has got to be pricy) and massive economies of scale, will always have lower overhead and be able to compete on price, so only shipping costs and delays can hurt them here, and I'm willing to wait 5 days for cookbooks.

I suppose the sensible thing for the brick-and-mortar player in this race is to attempt to provide a better experience, but if you're selling books, I don't really see how you could do that... Ideas?