Quirks of Google Suggest

Congratulations to google for proving it’s still possible to innovate in simple but powerful ways. Google Suggest brings auto-completion to the world of search. Simple idea, albeit technically challenge to scale, and amazing that none of the Google wannabees can’t come up with something like this first.

Slashdot posters have noticed some interesting trivia:

  • Since the suggestions appear to come from real searches, there are privacy implications.

  • The first suggestion (presumably the most popular search) across all letters and numbers forms The A To Z of Google Suggest and The 1 to 9 of Google Suggest. Among the more notable entries:

    • F is for Firefox
    • J is for Jokes
    • K is for Kazaa
    • P is for Paris Hilton
    • 1 is for 1
    • 9 is for 911
  • There are a ludicrous number of pages containing g{o repeating}gle, as in “gooooooooooooooooooooooooooooooooooogle”! As this guy says. type “g”, then “o” repeatedly.

Podcast: Interfaces As Services

  • Update: Podcast missing *

Enclosed is a podcast on interfaces as services. Agile Business Coach, Chris Matts, blogged a couple of times this week about how interfaces should emerge by looking at the objects that use them. I agree, and wanted to give my own thoughts. Important concept, as it’s driving many trends in architecture: dependency injection, Spring/Pico, mock objects.

Click here to download or listen: InterfacesAsServices.mp3.

BUT (and I’m going to keep saying this), if you haven’t yet got into podcasting, get yourself over to ipodder.org. You don’t need an IPod … a computer or any other mp3 playing device will do. You’ll be able to subscribe to a feed of all updates of this show and any others you’re interested in. All open and free. More info at Podca.st.

Once again, this podcast includes a sample from My Morning Jacket’s “One Big Holiday”.

Feedback always welcome – mail me an MP3 or text.

Dynamic Java Summit: it’s gotta be Groovy Baby

Dynamic Java can’t come fast enough. So it’s good to see a Dynamic Java summit (via The Server Side was held by Sun,. It brought together several dynamic language heavyweights, including leads of Python (Guido), Perl (Wall), and Groovy (Strachan). A moment reminiscent of a certain April Fool’s Day announcement.

Dynamic Java can’t come fast enough. I firmly believe the future is Groovy, because it is designed to be as close to Java as possible. Any dynamic language language is intrinsically different. But why make it any more different than it needs to be? With a hybrid like Jython, you have to use subtly ** different syntax** for everything. Do I “add” to a list or “append” to it? How about when I concatenate strings? Even worse, you have different semantics too. If I add an element to a list, will it go the end or the beginning?

It’s even possible to have a Jython list and Java list in scope at the same time. Total confusion!

(I’m not bagging Jython in particular – it’s served it’s purpose well and just happens to be the most successful of the hybrid-style approaches.)

A Groovy list is basically a Java list. It might add some convenience methods and give you some nice script-like syntax, but you’ll still add with add() and you’ll know all that will come from it. Multiply that effect by thousands of classes, and you start to glimpse the power of a dynamic language building on something you already know. Because it’s developed with Java in mind, Groovy libraries will likely focus on wrapping Java libraries, and will evolve much faster. Tricky corner cases will be rare.

Now you could argue it’s a waste to develop a whole language around another language. You could say Java’s good and Python’s good, so we should just create a little binding between the two, i.e. by writing bytecode from Python. And we could have a Java-Ruby binding and so on. And a Python-Ruby or a Python-C# too if we like. This many-to-many mapping might seem more efficient, because all of the languages can develop independently and you end up with more choices. In contrast, Groovy will only really work with Java, so any Groovy work is wasted when it comes to creating a dynamic language for C# or C++. It’s a one-trick pony.

I don’t buy that argument. Two independent languages cannot easily be combined together, for the reasons described above. They will always have different idioms, different developer populations, different syntax, different semantics. For a language as popular as Java, it makes sense to create a dedicated dynamic language. And I, for one, am looking forward to scripting where it makes sense to do so. Including build management, UIs, and business rules.

Agile Software RiffCast

Agile Software Riffcast

Here’s my first podcast. In my podcasts, I’ll mostly be covering software development topics such as architecture, usability, design patterns.

This is the first of four “Riffcasts” where I’m riffing on the topic of agile software development. The series will contain:

  1. Agile software development overview. Embracing change and the Agile Manifesto. (The podcast enclosure on this entry.)**
  2. Survey of agile methodologies and perspectives. Including Scrum, Pragmatic Programming, Crystal, DSDM, Lean Manufacturing, Extreme Programming.
  3. Extreme Programming. More detailed look at the most famous (or notorious, depending ) Agile Methodology, Extreme Programming.
  4. The Dark Side of Agile. Problems with agile approaches, situations where it does and doesn’t work, open questions.

My plan is to publish these roughly once per week, but the beauty of podcasts (as with blogs) is that I can upload them when I like, and subscribers will have them soon after. Unlike traditional radio, they don’t need to be sitting there at the time I “broadcast” it. So I’m going to see how things pan out.

I’m going to do stuff in parallel with these “Riffcasts”, all on the same “Software As She’s Developed” stream. Such as more “Blogcasts” of a more general nature.

Really, really, keen for your feedback, especially ingratiating syruppy praise! [email protected]

The MP3 File

You can hear the podcast by clicking here. But long term, there’s a much better way …

Subscribing to this Podcast

How can you subscribe to this stream, so you can have this and all my future podcasts automatically downloaded (as well as hundreds of other shows)? Easy – download ipodder (or any other podcasting client) and simply add this feed:

  • http://www.softwareas.com/podcast/rss2/

ipodder and the hundreds of podcast programs are all free, BTW.

Credits and Copyright Bits

This podcast is licensed under the same Creative Commons license you find attached to softwareas.com. Basically, this means you can do whatever you like with it as long as you say how awesome I am. (I think that’s the gist of it, but the full details are here). The lead-in track is a sample of My Morning Jacket’s “One Big Holiday”, who were among the enlightened artists who contributed to the Wired CD. Thanks to the band, Creative Commons, and Wired for making it possible.

They dreamed of a brave new world of sharing and liberty. I superimposed a quality track onto a stream of geeky rambling.

FP – First Podcast! *Finally*

YES! I’ve learned enough about audio engineering to realise I know nothing! I’ve set up a blog so I can host podcasts! I’ve added the necessary enclosure hacks to WordPress (thanks chaps) so I can publish them! And I’ve honed an authentic Aussie accent to stand out from the crowd! So, much too long after it coulda shoulda woulda been, my first podcast is here!

I’m sorry … Did I hear you ask “What’s a Podcast?” Well, even if you didn’t, I’ll be pleased to give my podcast site a cheap plug. It’s a podcast FAQ at podca.st. Short non-technical summary: A podcast is audio content published on the net, typically spoken word but also music. You can just click on the MP3 link in the blog entry and listen to it. But it gets a lot better if you download a client application like ipodder, which will let you subscribe to podcast programs and push them straight into ITunes as they come out. New food for your IPod (or any other MP3 player) all the time – hundreds of programs every day, if you want it.

And if you want to make your own podcast, great idea. I made it sound much harder than it needs to be. Check out How to podcast, for instance.

Stayed tuned for the FP …

Mapping websites

How cool is this? A zipcode map (via Joho) that narrows in on candidate locations with each digit you type. Especially neat in “zoom” mode. If only I had a fair dinkum reason to look up U.S. zipcodes.

This is the sort of thing that excites me about technology, because it’s so far removed from anything that’s possible in the physical world. Map sites have improved, but they are still basically the obvious online equivalent of physical maps. This is the “tree in the paddock” scenario … if you cut down a tree in a paddock, cows still continue to bend their path around where it used to be. In the same way, old ideas continue to be applied to new technologies.

Much better to rethink the medium you’re working with.

Just for fun, here are a few things you could do with mapping websites off the top of my head:

  • Provide images customised to the user’s current needs, e.g. highlight the route between two points; superimpose landmark photos or service station locations.
  • Remember previously searched locations, even offer to highlight them on customised maps.
  • Accept a URL – and provide a relevant map or a list of possible maps. e.g. If I go to a list of hotels, I could drag/cut-and-paste/bookmarklet the map site, and it would parse the page to suggest possibly relevant maps. If you think that’s too complicated for the average user, it’s certainly not too complicated for the average webmaster to create a link to such a page.

Easier to imagine it than to create it, but none of these ideas are especially challenging from a technical perspective. If any sites already do this stuff, I’d like to know about it.

CAPTCHA Alternatives and End-User Attitudes

Captcha stands for: “Completely Automated Public Turing test to Tell Computers and Humans Apart”. It refers to a technology familiar to anyone who’s registered on a popular website – the “what word is shown on this image” challenge. As the “Turing test” alludes to, the purpose is to distinguish between humans and computers. There are problems with the visual check, and not only for blind users. If the images come from a pool, there is only a limited amount of them, and it would be easy to build up a database.

Matt May (via Jon’s Radio Log) discusses seven alternatives. Some interesting ideas. though problems still remain with several techniques.

I’d be curious to know the attitudes and impact on mainstream users. Do most users understand why they are being asked to perform a ridiculously simple test? Can it be explained away with a glib “This is required for security purposes”? The test is so straightforward, and part of a larer registration process, so it possibly won’t turn many users away. But it certainly adds to generic resistance to register with any site in the first place.

Rhythms in Software

John Mitchell discusses how rhythm applies to software development. Reminds me of perhaps the most famous experiment on human biorhythms: McClintock’s “Menstrual Synchrony and Suppression” (1975).

I’ll spare you the (gory) details, but it essentially lends credibility to the old belief to that biorhythms converge when people are in close contact, have similar lifestyles, etc. While this paper points to biological effects, it is interesting to consider how a harmonious development team working according to a standard XP or RUP iteration cycle might actually converge toward synchronous rhythms. Perhaps this would be a good thing to explicitly aim for, and maybe it was what’s going on when we talk about “being on the same page” and “working as a unit”.

Or alternatively, if we could control rhythms, maybe it would be better to keep them out of sync for the sake of diversity. Important to have some wide-eyed vigilantes watching out when everyone else is in siesta mode.

Dear Sun, Please drop Netbeans!

So I just went to download JDK 1.5 and the JDK download page includes a big fat image and download link for NetBeans. Why does Sun continue to develop and promote this? Internal politics gone mad?

In the corporate world, there are several rational choices for IDE and NetBeans doesn’t feature. Those options would include Eclipse and Idea for sane developers, Vim/Emacs for die-hards, BlueJ for students, and JBuilder for the marketing-influenced. NetBeans is free, but Eclipse is too and it is – how to put this delicately – better. I don’t say this with first-hand experience of NetBeans, but I do say it having consulted people who’ve used both … most people who’ve only used one IDE will tell you it’s the best, so I pay attention only to people who can make a valid comparison.

The only rational reason I can think of for a project to require NetBeans is if the project or organisation has previously been using it, and needs an upgrade. That being the case, a big inviting link on the JDK is overkill – separate page would do.

The problem with this heavy promotion of NetBeans is that it’s only going to mislead Java newcomers. They will be downloading a substandard IDE that may well be dropped at some stage in the future. Granted, NetBeans is free. But corporate users would have more to gain from Eclipse, also free. And Java newcomers would have more to learn from BlueJ. So – at the expense of some minor configuration tweaking – link to those and give Java newcomers the smoothest introduction possible.

I’m not going to get into Sun financials, but needless to say, programmers out there aren’t flinging nerfballs at each other anymore and Sun’s share price reflects that. There’s plenty of other places to allocate Java resources than maintaining a weak choice of IDE.