Mar 27

Bad Usability: New Tennis Challenge System

Tech 1 Comment »

At the NASDAQ tennis competition that is running at the moment, we see a new feature in Tennis. The players have the ability to challenge a call that is made in a game (They get 2 calls per set + more for tie-breaks etc).

This sounds reasonable right? Just like american football and the like.

The problem is that this is exactly the wrong way to do this. Is the reason for this rule change to get calls right? or to stir up the crowd/players?

If the reason is to make the calls right, why wouldn’t you have the following process:

  • The scoring system is aware of who was awarded a point
  • The scoring system can talk to the hawk-eye video system that can tell it whether the ball was in/out
  • If there is a mismatch (point was awarded to player one, even though the ball hit by player two did in fact go in and the ball never was hit back) then the system itself can warn the chair umpire who can give the point to the correct person.

If we want to use computers to help us out here, let’s do it all the way, and not rely on the poor players to decide when to call or not!

Mar 25

Ruby is not ready for production. Definitive proof.

Java, Ruby, Tech 10 Comments »

A lot of people who snipe at Rails claim that it does not, and can not scale or be used in “production”. The funny thing about this is that I haven’t heard this from people who have tried and just failed miserably (although this will happen, because you can create something that can’t scale very easily. Trust me, I have done it :)

But, we finally have proof. Hani has been biling away at TheServerSide Symposium and said:

I was tremendously pleased by the audience’s responses. It turns out that the majority of TSS attendees:

Do not/will not deploy Ruby On Rails in a production environment (except 2 guys)

This was a shocker. For those that do not know, TSS Symposium is not just a Java show, but an Enterprise Java show. Not only is it Enterprise Java, but its life started out as a portal for all things EJB.

And these attendees aren’t all hacking on Rails?

That shocked me as much as the show of hands for catholic bishops who do not want women to join them on high.

I think that is is great to be skeptical, and I do not believe that “Java is dead” like many on the kool aid elsewhere feel.

There is room for everything. However, saying that Rails isn’t a good solution for anything is wrong. Does it have room to grow wrt helping people with deployment? I think it does. Do I believe in keeping everything in the database and not scaling out caches? No. memcached works great for /., livejournal, and others.

Another interesting tid-bit from the conference was that a panel was asked about “what is cool about Java in 2006″ and “POJOs” and “Ajax” were responses.

Does anyone else think it is ironic that we had to create an acronym for using Objects and keeping things simple? And Ajax is of course not limited to Java.

This too isn’t a bad thing. I wrote before about the boredom of YAFramework. Now we can start getting work done, and sharing real experiences on solving real problems.

Dislaimer: This is not a James Governor posting. There is no need to wonder if I am serious with the title. I am british. I like sarcasm. Don’t make me put “just kidding” at the end of any sarcasm. Oh, and I know it is the lowest form of wit

Mar 24

EVDO and the MacBook Pro

Tech 2 Comments »

Jason Hunter loves his EVDO.

This is one of the drawbacks of the MacBook Pro. We get the future, but not the PCMCIA slot.

So, are we screwed? I have heard a few people say that they can get things working via USB solutions, but haven’t heard first hand. A lot of “a mate has got it working”.

What do I *really* want? I want my mobile to have true 3G like I have in europe, and I want to just connect via bluetooth. Is that really SO much to ask for?

Mar 24

Yet Another Mac OS X Application List

Tech 4 Comments »

I have had a lot of people ask me about various apps that I use on my MacBook (especially for switchers).

Ben and I keep a list up on tada that we use to inform eachother when we find something else. It isn’t exhaustive, but it has the meat of what we run. There is no real order here, and the apps that we live for (QuickSilver) are mixed with goofy things (Solitaire).

The current snap shot is below, but it is always changing. Are we missing anything major?

Mar 24

A new example of the evil of global variables, and state assumptions

Tech 1 Comment »

I added a simple voting mechanism to a few months ago.

Since Ajaxian runs on Wordpress the pattern for this work was:

  • Search for voting plugins
  • Weed through the million plugins
  • Find the best one for our needs
  • Go through the plugin code and optimize it

This time was no different. We based our work on the Votio plugin, and tweaked things so the plugin wasn’t doing unnecessary calculations all the time.

The biggest sinner was the functions that take no variables.

As the pages are generated, they go through The Loop, where you get all of the blog entries given to you. We need to generate the ajax ratings form for each item, and to do that we just needed to add:


That function would access a global (gotta love PHP and “global $foo” :/) to get the current post object. Sounds fine right? We are in a loop of posts. We want to get the post.

It works at first, but what about if things change. For example, we want to do caching, and it is nice to dump out HTML that we can read in, instead of calculating these forms all of the time. In this case, the cache loader does NOT know about the loop of posts, as it is dealing with just HTML that it reads from cache.

I changed the API to be: votio_ballot_box($postId), and in The Loop I spit that out, so now when the cache is loaded it loads “votio_ballot_box(23)” and all is well.

A simple change. A stateless function. Now it is a lot more flexible.

Mar 21

NetNewsWire 2.1 beta

Tech No Comments »

NetNewsWire 2.1b16 has been released.

I backed up my feed info and have been running this beta version for awhile.

It is a lot faster (due to not having to go through Rosetta, and other perf issues that have been addressed).

NetNewsWire is the best RSS reader that I have used. I get to nest away my folders yet read all of the subdirs from the top level. I wish I could do this from email.

Also, they have got the beginnings of the feature that I really want. You can sort subscriptions by “Attention”. This means that feeds I care about swim to the top. This can become a self fulfilling prophecy though :)

I would like to manually rank my subscriptions too, and have it feed into this algorythm. This would allow me to scale, which is currently tough without using a full process manually, and not helped by the tools.

Mar 20

The bug that kills TiVo

Tech 1 Comment »

What is one of the worst things a recording device can do? Not record something? How about recording everything but the last 8 minutes or so?

That is what TiVo is doing at the moment for some people, including myself.

There is nothing quite so irrating as sitting down for your favourite show (not LOST which is crap ;) and seeing “Partial: 54 minutes”

This is the kind of bug that can kill TiVO if they do not fix it.

Mar 20

Classpath: *.jar. Finally. Almost

Tech 2 Comments »

Ted is talking about annoying nits in Java.

Being able to finally put a wildcard in our Java classpaths is a “thank god. finally” moment.

Then you read on and see that you need to quote the asterisk to prevent the shell from doing its thing:

java -classpath $LIB/’*’

Ugly, but still it works.

Then you find out that it isn’t recursive, and there is no option to make that happen yet via ‘**’ or something.

It just shows how behind we are. What do the users really need. Give it to them.

Every little change seems so painful. Especially when I can: require dynamically_work_out_file elsewhere.

Mar 20

Code-to-learn ratio: Getting work done with Ruby

Ruby, Tech 3 Comments »

I have been working on a fun new project, where I get to work in Ruby.

After spending some time submerged in Ruby land, I am having some interesting thoughts.

The biggest point is that the code-to-learn is very high in Ruby.

You go from thinking “Hmm, I need to send an email in my code….” having never touched an email module, to writing the simple Net::SMTP code in minutes.

This happens with more complicated parts and pieces too, and I find myself spending way less time on websites and Google trying to work out a bizarre issues, and more time writing code to get my work done.

It isn’t all perfect though. I still wish that:

  • I had a JVM (JRuby)
  • Ruby could look ahead and not have to read my def before I use it
  • I admit it. I like { } as delimiters. A lot more than “end end end end”
  • IntelliR :(

That being said, these are all MINOR nitpicks (apart from IntelliR). I am having a great time solving problems at a nice, high, functional level of abstraction.

Oh, and I haven’t had a RuntimeException due to passing in the wrong type yet.

Mar 15

Static Typing: For tools, or for compilers?

Tech 5 Comments »

Reginald Braithwaite took the time to put together a nice posting, in which he gives a A “fair and balanced” look at the static vs. dynamic typing schism.

The article discusses the two axes: “the likelihood of disaster and the magnitude of the consequences.”

I think it is spot on wrt compilers. However, I don’t think that a lot of people give type information for the compilers anymore. They do it for their tools.

For them the tradeoff is: “I have to ‘type’ more information in on types, but I get to use tools that are worth that time, as they give it back to me and more-so”.

There is no simple “winning” argument. You can believe in both sides.

The real winner though? Nice language AND nice tool. And, it’s coming.