They say you can hold seven plus or minus two pieces of information in your mind. I can’t remember how to open files in Java.


Something similar happened to me last night. I couldn’t remember how to get command-line user input. Oh sure, came into it somewhere, and, so I thought, all I had to do was wrap a BufferedInputStream around it and all done. Nope.

Obivously it’s because I’ve been doing so much server-side work for so long, and whenever I’ve done client-side apps, they’ve been swing or thinlet-based. The last time I took input from the command line in a Java app was 2001. That’s two years ago; still, like Bruce I’ve done it a bunch of times, but it’s too many steps. – remember that to print text out it’s one small call (System.out.println("this is easy");), but reading text in and echoing it back is a minimum of four lines of code, and not including the three import statements (or one if you’re naughty).

Anyway, for the curious, it’s BufferedReader that gives the magic of readLine(). I wish it was a lot easier to find these things out (I ended up having to do a search for “readLine()” on my API directory).

I hate Sourcesafe. We use it at work. It’s slow, unreliable and non-intuitive. It looks just enough like Windows Explorer to make you expect it to do Windows Explorer-y type things with it, which then don’t work. In a nutshell, it’s frustrating to use, although that’s not even the half of it.

I proposed a few months ago that we move everything to CVS , which everyone said “yeah! let’s do that!” to, but we still don’t have a *nux machine in the office.

For a brief while we tried getting CVSNT to work, but with no luck. The documentation is pretty poor, and we had a problem with users, passwords and permissions. So that didn’t work.

Anyway, the point is that we wanted to move to CVS, but an argument raised against this was that we’d need to move everything stored in VSS to CVS. “Surely”, I thought “someone must have tried to do this before?”, so I searched the web, and I came up with were the VSSExtractor and VSS2CVS, which looked like just the ticket, if a rather lonely tickets.

But we never got a linux machine. And I never got to try it out. And as a result, we’re still using VSS. And it’s terrible.

So if anyone, anyone out there has successfully used either of these tools, successfully, so that I can point at you and go “Look! Look! They escaped! We can too!” please, please get in touch.

Sourcesafe: a commentary

Incidentally, Leigh’s intention for adding other voacabularies to the FAM2 seems pretty much the same as mine did:

I think for the first iteration I’ll simply throw away properties the FOAF-a-Matic doesn’t understand. Then progressively expand the breadth of FOAF data the tool can process. That way there will be enough new code for a second functioning beta.

But that was when I didn’t think it was possible to dynamically generate the Thinlet UI. I’m now not too sure as to how impossible this would actually be. Elements can certainly be generated at run-time, and added to the main UI – selecting the correct widget to use for the options available would be far harder.

Leigh Dodds has posted an update on the FOAF-a-matic mk2, which is really good to see.

The import vCard function I wrote for it was the most basic of the basic, and definitely could do with expanding, and as Leigh mentions, being able to support the vCard-RDF format would be great.

I also agree with him thaat my FOAF file-loading was flawed, but I can forgive myself for two reasons:

  1. I think a FOAF file should have a description
  2. Neither mine nor Leigh’s approach will correctly handle Eric Vitellio’s old FOAF file (his live FOAF file is very different).

Of course, real FOAF files in the wild are never going to have that description field (although, of course, all FOAF files that pass through the FOAF-a-matic should have it added if it doesn’t exist 🙂 ), and will thus better handled by Leigh’s method, but I can excuse myself again by virtue of a third reason: I’m rubbish at using Jena to select the nodes I want from a graph.

In other news, it turns out Leigh lives and works in Bath! Ha! I never would have guessed! Bristol is my home town, and seemingly the centre of global FOAF development (Libby Miller and Dan Brickley are both based in Bristol too). Another big advocate of RDF and the semantic web is Danny Ayers, who lives in Italy, but used to live in Sheffield, which is where I currently live! (the Uni he attended is about a five minute walk from my front door)

I enjoy circles like this, they make me very happy. 🙂

I’ve had some feedback on my small rant saying that, in the interests of accuracy, both Opera and Safari do actually support generated content. I had a quick look at this using the CSS2 test suite, and in particular the quotes section in the most recent versions of both those browsers that I have access to, Opera 7.11 and Safari 0.74.

Safari rendered quotes exactly the same as Mozilla (i.e. incorrectly, although of course this may have been fixed in the latest release), and quite astonishingly Opera renders absolutely correctly.

I think “astonishingly” was an understatement. I completely expected Opera to fail, mainly due to my experience with it in the past, where it caused more problems than anything else – enough for my company to drop “supports Opera” from our web app documentation (not that anyone noticed).

Indeed, when version 7 was released (to much hoopla), I took about five seconds to assess it (huge banner, awful skin, goodbye), and whilst I stand by that (that skin! that banner! just stop it already! who pays for a browser now?!), its list of CSS support is very very impressive.

Textile4J (a java port of the Textile humane web text generator from Textism.) has been getting a reasonable amount of coverage.

JTextile beat the rush by two months, works on JDKs below 1.4, and got rather less coverage.

The importance of trackbacks, and making millions of comments becomes clear. Fortunately for the real world, googling for “java textile” still returns “garments in Bali” higher than any of the programs mentioned above.

From looking at the source, Textile4J seems clearly based on JTextile, which is directly based on PyTextile which in turn is based on the original Textile. All we need now is for Textile4J to introduce some great new tag, Textile to implement it, and the circle will be complete.

In my world there are four levels of expertise: beginner, basic, medium and expert.

When most people have left the “beginner” level, they think they‘re at “medium” level. They‘re not. They‘re at basic level.

There is an ordered progression upwards through these levels generally enabled by experience, not just study.

It’s also been (correctly) pointed out to me that experience is not a scalar quantity, and the time to move between levels is vastly different, increasing at probably something approaching an exponential rate as you go up levels.