The Importance of Tooltip Wording

I was in a non-technical lecture last week (on entrepreneurial idea generation) and the lecturer wanted to show us a video to kick off our session. (It was actually an amazing Steven Johnson video, Where Good Ideas Come From.)

What interested me, probably on par with the video, was the way the lecturer tried to get the volume fixed to play the video.

She was setting up the laptop, got to the Youtube video, and said, before starting, “the trickiest thing about playing videos in lectures is getting the sound to work usually.” So we can deduce that this is a problem she has usually.

She made sure the laptop’s volume was turned up – she was fine with that. Then it came to the volume on the Youtube video. When you hover over the volume button this is what you see:

The volume control rolls out (as it should, to hide unnecessary parts of the UI to make it less complex), and the tooltip you see says “Mute”. The lecturer made sure the volume slider was knocked all the way up to 100%.

And here’s where she got confused. She clicked on the volume button.

Everyone in the lecture theatre (largely just 20 year old students, all bought up with the Youtube interface) blinked at her, a little confused. Someone said “You need to click the volume button again, to unmute it.” And she said “but then the tooltip says that it’s muted…”

What had happened was that she saw the tooltip and read it as the current state: “Mute”. So clicking it again would change the state to unmuted, in her mind. It completely make sense, if you think about it. The tooltip here, being both a verb and an adjective, makes its action ambiguous.

All of the YouTube interface uses verbs as the tooltip, so you’d think that would have made it obvious that the ‘mute’ text was also a verb. But it looks like that isn’t enough to be completely obvious.

Maybe tooltips should be more descriptive.

 

#4: Better YouTube Conversation

One of the most popular pages on my blog is the YouTube comments suck one, so obviously people are bothered by it and since my independent, ranty blog is still getting traction from moaning, no one is doing anything about it.

Essentially, it’ll be cool to make a new website based around the community rather than the videos. Using the YouTube API, and maybe the Disqus API, I think it’d be pretty easy to make a better place. It wouldn’t be a rip of YouTube — that’s against the API terms — but so long as there’s a definite focus on the conversation about videos, I think it’d be okay.

Also, I’d like to pull comments from reddit and other places that have an API for comments on articles onto the page for the video. Maybe news articles if the video has any related stories. A general mashup of information about the video you’re watching.

Why I’m Currently Not Liking The Agile Method

This is a rant I felt I needed to have after coming out of an Agile Systems class.

When Agile methods and Scrum was first explained to me in this module I was told it was a fast paced way of working the delivering what the customer wants at the heart of its philosophy. Unfortunately though, after watching the lecture I just have (Agile Methods and Scrum) I’ve noticed that the uplifting manifesto is actually littered with small print and contradictions all over the place.

Our highest priority is to satisfy the customer through early and continuous delivery of valuable software.

This is unhelpfully ambiguous. But, not to simply pick on semantics, I’ll discuss both interpretations and explain why I think they’re both ridiculous.

The first way to read it is to release the software early, or rather to release it before it’s finished. This sounds odd, and so I quickly decided that’s not what that sentence meant. However, looking at the general ethos of releasing features incrementally this actually looks like a reasonable thing for the makers of Scrum to have decided.

What are you expecting the customer to do with unfinished software? They can’t phase it into their business, or worse directly switch to it, just to find they can no longer merge records where they want to or something. They can’t even run this software in parallel with their current software if there’s gaping holes in it.

Even here though, at your first step, Scrum has contradicted itself in that another of its principles is not to release work until it’s been tested. That must mean finished. That makes this interpretation either wrong or contradictory.

For that reason the second is more likely; finished early in respect to the deadline you estimated. I’d argue that this is bad too. The few times I have handed over a completed project before my deadline (simple because I’m new to this freelance lark, and so bad at estimating how long it could take me) only once was the customer actually happy with that. On one occasion a customer was incredibly unhappy that I’d completed early, and so messed up his project plan timetable. (I thought he was incredibly out-of-order though, and probably unusual.) Another time a customer remarked that it was just unprofessional to have over estimated how long it would take me. Every other time the customer didn’t notice and probably didn’t recognise it as either an achievement nor disbenefit.

I’ve realised that customers are happy to get the work when you said you would give it them — after all you were both set on that deadline. Anything less is apparently unprofessional.

Welcome changing requirements, even late in development. Agile processes harness change for the customer’s competitive advantage.

The fine print here is that the customer can only talk to you once every thirty days. This makes no sense. What else is the project manager (uhh, sorry, Scrum Master) doing with their time? They’re not coding, so they should be talking with the customers whenever the customer wants to talk to them. After any of those discussions take place, and the manger has decided on any extension of deadline or cost because of the changes, the programmers should be made aware immediately.

It’s the project managers job to decide what features need to be worked on now, and which can wait till later. His backlog should be incredibly flexible to any concerns the customer has to make.

Not only would that benefit the customer, but the programmers don’t have to wait 30 days before realising that that function they’re working on which is ridiculously complex actually isn’t even needed anymore. For a system that promotes its agility in an industry that works at lightning pace, a thirty-day buffer it insulting.

The sponsors, developers, and users should be able to maintain a constant pace indefinitely.

This is completely ignorant to how people work. You should work like a machine, with a constant typing pace of 60 words a minute. There are times where you run into problems that the solution to is incredibly elusive. Problems you’re not even expecting. A customer of mine needed to have an interactive map, with pointers to variable places (according to where the user enters). That seemed pretty easy since I know of the Google API. Oddly though, there’s no “zoom to a view in such a way that I can see all the markers” method in the API, so I  had to spend probably an hour looking for one, before resigning and writing it myself. That was essentially a large chunk of paid time in which I was doing virtually nothing.

Sometimes people are unmotivated and need a few hours, or even a day, to get back into the swing of things.

This fairly communist view of developers is somewhat contradictory to the rest of Scrum though, which makes developers sound fairly demanding and lazy.

Simplicity — the art of maximizing the amount of work not done — is essential.

Simplicity and being lazy certainly aren’t interchangeable words. Procedural programming is maximising the amount of work not done (read: lazy), but it certainly isn’t the most simple or elegant. This just screams absurdly lazy.

The laziness of agile programmers is also shown in their language of choice. From the short time I’ve spent with it so far, Ruby is the most vile language I’ve yet come across. No brackets around arguments, no curly bracket encapsulation around methods and classes, (seriously, are you guys boycotting the shift key?). I natively write PHP, and even I’m annoyed with duck typing. Just throwing in white space wherever you want, with no real standards described for it.

Whilst embracing team work, you seem to be hell-bent on the idea of being completely left alone, despite one of the agile ideas being that you should work with the “business people”. The term “business people” is used almost as a derogatory term. None of them must be allowed to speak to any of the developers but through the ambassador Master, else we’ll become horribly infected with their illogical ways.

Slide 28 talks about accept no help at all unless it’s asked for. No developer will unbiasedly judge his own work, and his team mates probably won’t critique them either. An external person must be in the ring to offer that service. Refusing help is just rude, and incredibly unhelpful.

Whilst I do have other points, this is becoming somewhat depressing, so I’ll go and get on with something more uplifting.

Status report

I can’t remember the last time I’ve just been sat around, being bored. (Though, that’s probably accountable to my awful memory.) I’ve either been working, or doing university work, or just general being around friends. And I’m not annoyed or bored of any one of them; I think I’ve found a really good balance.

I don’t feel stressed at all either. Knowing that there’s a safety net of a few hundred pounds overdraft available if I need it is really calming. I have spent a little more than I wanted to so far this month, but it’s nothing that I can’t afford thanks to the work I’m doing. Also, living with girls has definitely made me start eating more. Especially since Laura continually offers to make food, so I typically eat at least one good meal a day, which is an improvement on snacking when I’m hungry.

All in all, I have a pretty good life at the moment.

First hour with Rails

I didn’t realise that this was a two hour lab, and was about to pack up before checking my timetable again. Since I do have another hour in here, I may as well do this personal blog that we need to be doing for this module (and most modules, actually). Usually these are private between student and lecturer, but since I’m all about being open, why not share it here too? (Plus, this is a much nicer editor.)

This class is Agile Software Development, so it naturally uses Ruby on Rails, which is known for it’s fast pace, don’t-repeat-yourself development cycle. Pretty perfect fit then. I’ve never used it though, but it’s getting more and more popular. All the hot projects on Github are ruby ones, so it looks like the in language at the moment. I remember when Twitter changed from Rails to some other language though, because Rails just wasn’t scalable enough for them.

In the labs we’re using Instant Rails, but I think I’ll likely just install Ruby and Rails myself on my laptop manually, since I already have MySQL and Apache running. Hopefully that won’t be too hard.

We’ve mostly been playing around with the IRB today.

Coming from PHP, it’s pretty obvious how variables are treated differently. Doing something like

$foo = "blah";
var_dump ($foo * 10);

Would output 0; $foo is assumed as an integer, since * is an operator that works with numbers, and it’s assumed 0. 0 * 10 is 0.

But on Rails

foo = "blah"
foo * 10

Here the * is treated as more of a method, than an operand, in that it takes notice of it’s context and has been overloaded, sort of. Because it’s a string in context, it has a different functionality. That code would return “blahblahblahblahblahblahblahblahblahblah” (“blah” repeated ten times).

It feels like values are treated more as objects can just … values, really. Literal values can have methods too (inherited from their value type, I guess).

Expensive regrets

My new desktop got delivered today! I’m pretty damn excited by it. It’s like a new toy.

CoolerMaster SILEO 500 Mid-tower Case
Gigabyte GA-G31M-ES2L Motherboard
Intel Core2 Duo E8400 3GHz Processor
2GB DDR2 800MHz Memory
Western Digital 500GB SATA Drive
DVD-RW Drive
PNY GeForce 9 9500GT 1GB Graphics Card

That’s the best machine I’ve ever owned… I mostly wanted it for gaming, because I really want to be able to play WoW and MMOs in general again, really. Also, awesome games are coming out this and next year, so I figured I could do with getting a machine that can actually run them.

That’s kind of backfired on me a little though; The internet here has so many ports blocked it’s unreal. They apparently really don’t like people playing games and slowing the network down (it’s a shared line for all the few hundred people in the flat, which is a bit dumb), so they’ve banned commonly used ports and just about every other port. Only letting a few obvious ports through.

That means that this expensive machine is essentially useless to me now. All I can do on it is exactly the same as anything I can do on my laptop. I’m going to have to find a way to proxy all these connections, or get a better internet connection.

Virgin Media are apparently doing a few checks for us now to see if they can install a line into the building, and what speeds we’ll get if they can. Even then though, the installation of a whole new cable might take months, and could probably cost me and my flatmates… We don’t really have much money, we’re only students!

Mobile internet is far too slow and way too expensive, so that’s not really possible.

The only other way then is using a proxy. I’m not even sure if that’s possible. If we ignore the technological setting up of a proxy, I’ll still have to suffer the ping times being pretty much doubled. I really don’t know what to do.

Unless I get this fixed, this is a massive waste of money. I’m really regretting it now.

Social labels are to be avoided

I’m taking a break before starting work (yeah, that’s going well) because something in an AskReddit article made me think about something, and I thought I’d come share my revelation.

The “Objectivist Christian” labelled himself as pro-life, in that a foetus has a right to life and shouldn’t be aborted, however the government has no right to make it illegal. That spurred an argument that someone who calls themselves pro-life can’t also hold the opinion that it shouldn’t be regulated upon. A pro-life person must also want abortions to be illegal.

The guy insisted that they were two different arguments, and I agreed with him at first. The moral discussion of aborting is a completely different one to the legality of abortions. Just because you believe abortion is a woman’s prerogative, doesn’t mean you can’t also believe it should be illegal (or any other combination — though, the combination I just gave would be odd).

The countering person didn’t argue against that, and probably agreed with it. However, what they were getting upset about was that the label “pro-life” is socially accepted as “a life must be protected under the law”, a single idea. You can’t take a socially accepted term and  use it as you want, even if the literal sense of the word allows your definition.

Another example I was thinking of was the guy that was kicked out of university for calling himself  “African American”, although he was white but an African living in America. People were outraged that he’d call himself that, which is a name for a black person living in America, some people even thought it was racist.

So it’s clear that social labels need to be avoided whenever you’re talking about anything. Maybe they’re okay for the media to use, or in flippant conversation, but when you’re discussing your views you shouldn’t use terms like “pro-life” or “African American”. You need to say exactly what you mean.

NB: You’ll notice that I’ve not given my views on abortion, or anything really. I don’t intend to do that in this post, nor to discuss it here.

Sweatiest. Day. Ever.

I went to Laura’s this weekend, having not seen each other for weeks — since we finish university actually. Happiness definitely ensued. Chris came too, and Bryan lives right next to Laura so the gang was almost complete! ‘cept for Luke who just didn’t put any effort in.

High points included:

  • More pizza than was really necessary
  • Discovering they do Southern Comfort in a can
  • Rediscovering lemon slices
  • Making that egg in bread thing in frying pans that were clearly too small
  • Being enraged by Dr Robotnic!
  • Getting zeros for the first few sets of bowling, and then half strike it all the way home (and still losing)
  • Being able to tick off Clockwork Orange from my list of films to see — fucked. up.
  • Chris kicking a hedgehog so hard even the RSPCA would be impressed
  • Finding out Dagny Taggart likes it rough
  • Deciding to want to become a professional laser tag player, and becoming very hot whilst deciding.
  • Meeting Charlie!
  • Battling with Laura to keep her clothes on
  • Being yelled at in a forest, and fleeing for our lives

Good times. :D

Freudian slip

(23:29:39) Luke ~ Mr. Funk: my mates leant me a 40K book and basically gone “give it a chance”
(23:29:54) Shane: Whaaaaaaat?
(23:30:04) Shane: As if I’m being blown off due to war hammer
(23:30:24) Luke ~ Mr. Funk: no – your being blown off becuase i want to clamber into my pit and begin to read a book
(23:30:33) Luke ~ Mr. Funk: so that if the first chapter is shit he can have it back 2morrow
(23:30:42) Luke ~ Mr. Funk: and id blow you off for bits of plastic anyday
(23:30:45) Luke ~ Mr. Funk: wait.
(23:30:46) Luke ~ Mr. Funk: no.
(23:30:47) Luke ~ Mr. Funk: DOH!
(23:30:52) Shane: :D
(23:30:59) ***Shane finds some plastic
(23:31:02) Luke ~ Mr. Funk: ¬¬¬”