Sunday, April 20, 2008

The mystery of the double emails

Since the last upgrade, the OpenSkills membership management system (MMS) has been sending out double email messages to some people in some cases.

Here's why:

The objects that make the MMS tick are Actions. There are actions for checking email addresses, confirming OpenPGP keys, checking account status ... in short everything that needs doing in the background is done by an Action object. Each action, when completed, can be followed by one or more other actions and these are held by each Action in a Set called responseActions.

The start of the trouble was that for older version of the MMS I needed an implementation of the messages "=" and "hash" for Actions to help with using a relational database as the primary persistence mechanism when reading responseActions back in.

Now that the MMS runs in the GemStone OODB, the "=" and "hash" are no longer needed (because the database understands object identity) ... but the methods were still there. To add a little spice note that the "=" and "hash" methods were based on the external ID of the action and the identity of the class of the action (there are many many kinds of, and thus classes of, Action).

Now we move forward to the last MMS upgrade which involved a schema migration within GemStone. At the point in time that the upgrade was in progress there were two Action classes in existence, the old one and the new one.

... and through a mix up with a time machine, class versions, hash and = and a schema migration some actions ended up with duplicate actions in their responseActions.

To use one concrete example to explain what happens next: Each account review action adds itself as a responseAction (since reviews automatically happen). In the broken case each account review had two instances of itself in the responseActions Set (oh, yes). This meant that for those cases the same account review messages were sent out twice. Every time.

The fix was to make responseActions an IdentitySet, remove the "=" and the "hash" methods from Action and run a quick fix script to have every action rebuild it's response actions. All fixed now.

And sorry to those people who have suffered from the mysterious double emails.

Thursday, April 17, 2008

Smalltalk PostgreSQL drivers

The latest version (1.4 102) of my Smalltalk PostgrSQL driver library has just been submitted for the next release of VisualWorks Smalltalk. This is mainly just a bug fix version, but I do use some new non-blocking socket code hence bumping from 1.3 to 1.4.

This new version should work in any Smalltalk dialect for which there is an implementation of the Sport portability layer.

VisualWorks users can just wait for VisualWorks 7.7 to come out, or if you want to try the new driver version now you can pick up the parcels from SourceForge.

Tuesday, April 15, 2008

Oyster & Tfl: No action

A couple of weeks ago I posted the response I received from TfL about the assault and detention of my wife at the Bank tube station by a member of TfL staff. I've discussed this response with people and thought about it. I'm sure TfL don't mind me taking a few weeks to respond to them, after all it took over a year for them to respond to us.

The problem with the TfLresponse is that it includes no action at all. It's all just words again. All kinds of claims are made, but there is no follow through. My sense is that because senior TfL management could not pin this on a minion, they are wishing the matter away.

This highlights the greater problem. There are systemic problems with TfL management, the main one being a complete inability to take responsibility and take action. Look at the wording of their response - it's empty of substance.

Here are some actions TfL can take today:
  • Put up posters that explain to everyone how to respond in the event of an assault by anyone, upon anyone. The current signs are all about protecting TfL staff with no help at all for the public.
  • Put the same information on the TfL, Oyster and LU websites.
  • Have the directors and managers responsible for an area take personal responsibility for problems in their area and take action to resolve those problems.
Real harm was done on that evening last March. It took TfL over one year to produce a coherent, if feeble, response. Very poor. Very poor indeed.

Lastly I feel I must comment on the barb directed our way at the end of the TfL letter. We have not sought financial compensation beyond what the broken Oyster system took when it should not have done. The childish gall in suggesting that we are gold diggers is astonishing, and just plain rude. If TfL feel the need to give to salve their conscience, let them give to a charity.

Friday, April 11, 2008

In Europe copyright infringement is naughty but not a crime

Despite the headline, this BBC article has nothing to do with ships:

BBC NEWS | Technology | Europe rejects anti-piracy plans

Rather, we see that Europe has wisely refrained from criminalising copyright infringement. Infringing copyright in Europe is still unlawful of course, but it's not something the police will arrest you for. It's a civil matter.

For real news about piracy, see here.

Wednesday, April 02, 2008

MOOXML: sad day for ISO & world

So, Microsoft have succeeded in undermining the ISO standards process to the degree that their half baked non-specification, the Microsoft Office Open XML (MOO-XML) format (which remains unimplemented by anyone anywhere, including Microsoft) has been dubbed a "standard" by the previously trusted standards body ISO:

Official: OOXML approved as international standard | The Register

Groklaw - And now the appeals and reactions while OOXML sits on hold

To paraphrase one of today's quotes: This outcome is a clear loss for the customers, technology providers and governments that want to choose the format that best meets their needs and have a voice in the evolution of truly open standards.

I hope that ISO has sufficient integrity and courage to undo this mess. If not, Microsoft have won a huge victory against their mortal enemy: open standards and an open market.