Goodbye to Sensis search

I was not at all surprised to read that Sensis is finally giving up on trying to be useful. I guess the web search is OK but White Pages and Yellow Pages searching is hopeless and the Whereis maps are crap.

Perhaps the Google tentacles are reaching too far. But when its products are so much better than the local competition, the locals don’t stand much of a chance.

REST is the assembly language of the web

Some recent REST-related traffic in the blogosphere (both pro- and anti-) has discussed the ‘challenge’ of there being only a handful of REST verbs. The discussions revolve around how to map those verbs and the resources they act upon to a wide range of application functions. So we have Stefan (Tilkov?) writing: “I force my application semantics to adhere to the common HTTP semantics …”

Ugh! This smells like assembly-language programming. Application code isn’t written with CPU instructions and registers in mind; compilers and runtimes were long ago designed to take care of that.

We are at a primitive point in the development of applications to run on this networked computer. We need automatic compilation of high-level languages into ‘REST Assembly Language’ so we can write distributed applications much nearer to their problem domains.

Talk about RISC! This distributed computer has a tiny instruction set but limitless locations into which limitless pieces of information are organised.

Writing good compilers will be very challenging, but if the REST vision is to be fulfilled, very worthwhile.

Hot stuff!

My MacBook Pro has recently started shutting down unexpectedly. I did some web searches and found that a number of people had been having the same problem.

I suspected power supply and battery problems but last night found out the real culprit – the poor thing’s been cooking! Fan monitors showed zero RPM for the CPU fan(s).

Oh dear. The Apple Hardware Test reported hardware failure 4SNS/1/40000000: 'TC0P', so it’ll have to go to the Mac doctor soon.

In the interim, I have nursed the MacBook Pro a bit by putting it on an upturned baking tray as a heatsink and having the ceiling fan in the office on full blast.

Multi-tasking on the phone

Today I took a call on my N95 and was able to create an appointment in its calendar while still on the call.

The process was simple. I just put the phone on loudspeaker and kept talking while making the appointment in the calendar application.

That’s exactly the way you want a device like this to work.

From the phone

One of the ideas with the N95 is to be able to blog from it, which is what I’m doing now. I’m using the Wordpress web interface via the Opera Mini browser. There is a snag: Opera Mini removes the section of the edit page with the category chooser, so I am stuck with the default category (Miscellany). What I really want is a mobile blogging client.

I looked for a native (Symbian) app and all roads led to PicoBlogger so I grabbed it and installed it. But you have to register the software via the picostation website before you can do anything and the website has been for more than a week.

Then further searching revealed a Java app called BlogPlanet, which I installed (free nagware version). I configured it to talk with this blog but it can’t successfully connect.

Even the web browser built in to the N95 won’t work: log-ins to the admin interface keep failing (using correct credentials, of course). At least Opera Mini can do that.

(Actually, most of this post was written on my Mac in Firefox. Sigh.)

Got the Net in my pocket!

A week ago I took delivery of a new Nokia N95 smartphone. It is to become my new organiser (replacing a Palm T|X) as well as a 3(.5)G phone that gives me the Net in my pocket.

I bought it outright and have it on $20 per month with Virgin Mobile (no contract), along with $10 extra for 300MB of data. This is the best value for me because I don’t use the phone much but want the Net access. Virgin Mobile uses the Optus network so it has the second-best coverage in Australia.

I’m loving it so far and will blog about various aspects of it as I use it more.

Once in a blood moon

This is my ‘me too’ blog post with a photo of tonight’s total lunar eclipse.

Lunar eclipse

Not fair

I have just been to the funeral of a 33-year-old friend who died from cancer. I didn’t know her well but her partner of 10 years works with me. At the funeral I learnt much more about her; it was clear she was a wonderful person with tremendous energy and love who gave a huge amount to her family, her partner and her work.

Thirty-three years old. A fantastic person with everything to live for. Is that fair? No way.

Should life (and death) be fair? Some people’s world views seem to say that it should. According to them, when things are manifestly unfair there is actually some greater good at work that we mere humans cannot fathom (the intentions of a loving god).

Sorry, I can’t buy that. I have come to the conclusion that fairness is a human construct – it is not an intrinsic part of the natural world.

Why do we have this concept of fairness that we hope for so strongly? Could it have something to do with instinctive behaviours that have evolved to help maintain cohesive societies?

REST with JSP

I was interested to read Bill de hÓra’s question about whether servlets and JSP can be used to create a RESTful application without resorting to RPC-style URIs like:

http://www.innoq.com/blog/entry.jsp?id=java_web_frameworks

Absolutely yes! A beauty for me of the web side of Java EE is that the URI can take any format you like. So, to use a URI like:

http://www.innoq.com/blog/st/2007/08/15/java_web_frameworks.html

we could work as follows.

  1. The externally facing URI is probably mapped by a reverse proxy or content switch (or the like) to the blogging application on a Java EE application server. The internal URI might be something like:

    http://s012.innoq.com/javablog/blog/st/2007/08/15/java_web_frameworks.html

  2. The application server might interpret the URI like this:

    /javablog: Root web context of the Java blogging application.

    /blog: Part of the URI that maps to a servlet for serving all blog pages. In web.xml it may be mapped with:

    <servlet>
       <servlet-name>BloggingServlet</servlet-name>
       <servlet-class>com.innoq.blogging.web.BloggingServlet</servlet-class>
       ...
    </servlet>
    <servlet-mapping>
       <servlet-name>BloggingServlet</servlet-name>
       <url-pattern>/blog*</url-pattern>
       ...
    </servlet-mapping>
    

    Further work continues in the servlet’s doGet method.

    /st/2007/08/15/java_web_frameworks.html: This string is available to the servlet using request.getPathInfo().

  3. The servlet tokenises the string and works with the information. For example st is used to brand the blog as belonging to Stefan Tilkov, 2007, 08 and 15 are date identifiers and java_web_frameworks is the post slug, with .html to indicate that the content type of the response is text/html.
  4. The servlet uses that information to retrieve the post from the persistence store and assembles request-scope objects that will be used by the JSP.
  5. The servlet forwards to the JSP, which templates the HTML response. For example:

    request.getRequestDispatcher("/WEB-INF/jsp/blog_post.jsp").
    forward(request, response);

    The JSP is never called via a URI that maps to its directory structure. It can (as in this example) reside under the WEB-INF directory, which cannot be mapped to a URI path.

Caching? That can be done by the servlet or by the application server or somewhere in front of that. Or publishing a post may result in the creation of an HTML file on disk in a directory structure that maps directly to the URI.

It’s Tour time again

It’s July and I am enjoying Le Tour de France again, on TV and via cyclingnews.com.

It’s disappointing that three Aussies left the Tour in the same stage but I’m hopeful that Cadel Evans will do well and maybe win.

I have updated my cyclingnews.com Greasemonkey script to include all the teams riding in the Tour.

Next Page »