Ben Poole

“It is a very sad thing that nowadays there is so little useless information.”

Weblog by month (December 2008)

London Developer Co-op activity

London Developer Co-op logo

So, theoretically the Christmas / New Year gap is a quiet time. Hmm, so they say. Not being ones to stand still, those of us who make up the London Developer Co-op have been busy with a few site updates, setting up the ubiquitous twitter account and some other behind-the-scenes shenanigans involving actual code, specifications and proposals, server moves, and all sorts of stuff like that. What larks!

We are also delighted to announce two new members, a certain Mr. Julian Woodward and a gentleman by the name of Kieran Green—welcome chaps! You can read about Julian and Kieran on the members page of the LDC site. We will shortly update our portfolio page for added funkiness, but in the meantime you can still read about some of the things we’ve done there.

Exciting times. Do follow us to keep up [smiley Wink]


I defy you to finish this conversation

[16:33:32] Ben Poole: more squeaking
[16:34:05] Mark Myers: not if the cow is in a rubber suit

Tricky eh? So, Christmas is done for another year, and we fast approach 2009. Hope yours was good. I am off to indulge in more jQuery goodness for the next few days.

(Oh, and more cow squeaking of course).


Merry Christmas

A picture of Holly (sorry, Brit gag)(I don’t do the “Happy Holidays!” thing, sorry ;o) )

Merry Christmas to everyone out there, and thanks for dropping by. Lots of things afoot in the next few weeks, but for now it’s quiet time with family and friends, the way it should be. Good health and happiness to you all.

(P.S. did you know that Santa Gets Things Done with IBM Lotus Notes?)


This is the rule

It is 2008—just participating is no longer acceptable. Everyone needs to add value.

So, any lurkers out there care to comment add value?

John Head: UPTIME - Who’s WRONG about the PSC Blog server?


BlackBerry / Unibody Mac update

Hurrah! As half-expected, the 10.5.6 update fixes sync’ing between the new unibody MacBooks and BlackBerry devices. I’ve only tested with Missing Sync, but I’m sure the 10.5.6 update will sort PocketMac users too (they have less of an issue due to updated drivers anyway). Good news.

Related reading: BlackBerry & new MacBooks: update and on the Apple site, About the Mac OS X 10.5.6 Update.


Bill on Ben

Hear, hear!

I think sometimes IBM forgets it’s the largest hardware+software supplier out there, and has billions of dollars in the bank. And yet at this conference—15th or so year running, and thousands of delegates—there’s IBM relying on Ben—a single man company—to provide essential content.

I seriously think something needs to be done to recognise Ben’s (and the Turtle’s) contribution to the success of this event. Something that actually helps Ben’s business.

Bill is, of course, referring to the continuing excellent contribution by Ben Langhinrichs in creating and maintaining the Lotusphere sessions database (hat tip to Tim Davis for the iPhone tweaks too!)

Read more: Bill on Ben at edbrill.com.


Timesheets? Don’t get me started!

So once you stop laughing at this bit:

In short, I’m turning into one of those crazy bosses that approves things, and then gets upset when you do them. This keeps happening. I must be driving people crazy.

…Joel actually makes a very sobering point about the work-cultural phenomenon known as (urgh) “timesheets”. One of the most pointless inventions of man when placed in the hands of management.

Joel on Software: Amnesia.


Thoughts on handling pesky errors

Whilst writing oodles of Java over the past few months, an old favourite—error handling—has come to the fore yet again: checked and unchecked exceptions, when to throw an error, when to log, when not to log, and so on and so forth. The upshot of such noodlesome navel-gazing is that any reasonable collection of code should have a carefully-thought out strategy for dealing with errors. And thinking about it more, of course Lotusscript is no exception.

(Hah! Do you see what I did there?)

Error Handling 101

Long-time readers will know that I look at errors and their handling quite a lot. I’ve certainly written about it before, even did a proper article once, which covered it a little (alas, for the sadly defunct ePro magazine). But one mistake I’ve found I used to make is to do something like this in every significant Lotusscript code sub / function I wrote:

Sub foo()
    On Error Goto oops

    ' Some code here
    Exit Sub

oops:
    Call Messagebox("ERROR: " & Error$ & " in line " & Erl, 0, "Oops"
    Exit Sub
End Sub

Hmmm. Not actually very useful, and actually oh-so-typical. Why is this example deficient? Well, how much time do you have? Not all errors are equal. Why cast off to an error handler which exits when all you’re hitting is a transient issue (e.g. missing data in a document loop)? Why throw errors indiscriminately at end-users? What do they care? Why throw up every piddling error regardless of its impact on the application? Consider context: this example is OK (if naff) in a Notes client, but what about web apps? It wouldn’t be very useful, and would spoil the line of your (otherwise beautiful) web site. Who looks at log.nsf on a regular basis for MsgBox calls anyway?!

Feh, you get the idea. So, here’s a snippet of drop-in code for your error-handlers which might make developers think about their errors a little more:

oops:
    ' Just hurl the nasty error up that there stack
    Error Err, Error$ & " (" & Getthreadinfo(LSI_THREAD_PROC) & ", line " & Erl & ")"
    Exit Sub

Controversial eh? You read it right: just throw the damn error up the stack. Capture it where it matters, and deal with it appropriately (if at all). If you need to log it, do so in the invoking routine, not at the detailed level. Don’t worry about having a proper trace to the origin of the error, the GetThreadInfo call above helps there (remember to include lsconst.lss).

If an error in a subroutine means the main routine cannot continue, well OK, that serious and you might even want to tell the user as much. But don’t rely on that. Users who hit errors tend to shrug and move on: they will not necessarily tell you something’s wrong, so be proactive. Ensure your code notifies whoever needs to know, or at least monitor your logging system of choice. Most importantly, handle the error, and remember that handling is not the same as reporting.

OK, so this is a tiny look at an important topic: please chip in with your thoughts. Having seen a lot of dysfunctional code (with and without error handling) over the years—some of it not even mine—I’m conscious that this is an area which needs some real thought, exploration, discussion and collaboration, so have at it.


New version of MacFUSE

A new version of MacFUSE was released earlier this week. MacFUSE allows OS X users to manipulate remote / virtual file systems. For example, the current version of VMware Fusion uses MacFUSE under the hood, and permits users to mount and use virtual machines as if they were disks on the system (without having the VM running).

Fab stuff, and it’s free!


Stuff

Interesting times. Life has been full-on for the past 15 months. I resigned a comfortable position from a prestigious firm, and ventured out into the great unknown. A good number of splendid individuals in the community have exhibited their faith in me, and opportunities have presented themselves—I am so grateful for that.

Now we come to somewhat more uncertain times, and any mis-steps are going to be amplified I think. Take this technology lark: I’m currently at the end of a fascinating three day XPages workshop. Notes & Domino 8.5 show so much promise. There are rough edges, but there’s some really good Lotus-y goodness here. I hope IBM don’t fsck this up, it could be seriously good.

On darker days I wonder whether the renewed focus on application developers is too little too late; but on brighter days I contemplate what might be now that we’re starting to get some decent tooling. Yet developers will out: even without class browsers, XPages and the like, we’ll produce stuff. So If IBM could just sort out the Domino server licensing model, and let us get apps out there, some of us could really be having a ball. Hmm.

Anyway, enough drunken rambling: best news of all this week? Why, Wendy and Lisa have a fantastic new album out. You should buy it now!


RIP Oliver Postgate

As a child of the seventies, I can’t tell you how much I loved Bagpuss and Ivor The Engine. Mr. Postgate, your legacy lives on, and thank you so much for your programmes.

BBC news: Bagpuss and Ivor creator dies.


Foundations: one heck of a deal

Crikey, that’s an impressive offer right there. Between now and December 22nd, $3,000 buys:

  • 1 Lotusphere 2009 Conference Registration
  • 1 Lotus Foundations Start Software Appliance
  • 5 Lotus Foundations Start User Licenses
  • 5 Groupware Office Starter Pack Licenses
  • 3 Behrware Document Management and Sales Management Software Licenses

Read more: Woah! Lotus Foundations at Lotusphere 2009 with special extras!


recycle() revisited

You know, this stuff just bears repeating. Again and again and again. If only for my own sanity…

At a client site recently, a few of us were scratching heads with a thorny Domino Java issue a colleague was experiencing. Two separate Java agents, in separate databases (but on the same server) were “clashing” if they both ran at the same time. The issue had never come up in the dev. environment, because of course we only ever had one concurrent agent in the server settings (versus three in production. Oops).

Our old friend Error cleaning up agent threads came back to haunt us, and we couldn’t figure out why for a while. But the long and short of it was our old friend recycle(), specifically, too much of a good thing.

Please remember that FSM kills a kitten every time Domino developers recycle either the AgentContext or Session objects. It’s just not worth it—and uncle Julian can tell you why better than me.


Oh the irony

Irony

Great screen name :o) On a related note, I find it amazing that these forums are the most popular on developerWorks!