Jack of all trades and labour disputes

I got a couple of calls from CBC Radio (Ottawa) today regarding the on-going labour teacher dispute. The reporters were asking how the work-to-rule was affecting Proms and Fund-raising.

I could go on about the problems with Proms, oneupmanship and living on the border with a less uptight drinking-age routine, but I’ll save most of that for another day. What I was most interested in was the apparent superficial understanding of issues by reporters. I suppose it is only to be expected that when you have to cover a wide range of issue you become a bit of a “jack-of-all trades and master of none”.

The Prom question I could understand. Toronto’s public board recently decided to go ahead with Proms this year. In Toronto the staff supervise the formals. Not so in Ottawa. Proms in Ottawa are expensive affairs booked privately by students (or their parents) through a near-monopoly company that locks up all the best venues a year in advance. This is a consequence of the board’s overly risk-adverse lawyers coming into contact with a situation where 50% of the graduating class if of Quebec drinking age when the prom takes place, with the after-party not surprisingly held over the border.

So the board has wiped its hands of the whole thing and even discourages staff from showing up to see their students off. As an upside, this means that Proms (despite their over-the-top costs in Ottawa) will still go ahead this year, regardless of what happens with the labour dispute or any board motions.

I guess it’s not surprising that I got a call about that issue. The second one surprised me more though. I was called and asked if fund-raising was affected and what this meant for yearbooks. You don’t have to be very involved in the school system to know that fund-raising is generally a school council activity with little staff participation. More confusing though, was the presumed connection between fund-raising and the yearbook. Yes, generally the yearbook has a staff advisor, but this is a role that the administration could easily take on. The tie in ti fund-raising, though, I still haven’t figured out.

Please don’t get the impression that I don’t think the labour dispute is having serious impacts. Sports and Arts have pretty much ground to a halt and the field-trip based experiential learning and anecdotal reporting that are so much a part of the board’s excellent Alternative Program have been dealt a near death-blow. Things are bad and I feel like we have two petulant kids who are too immature to get together and just settle this thing.

But yearbooks as fund-raising?

Providing the Unexpected

I have a WiFi-networked Brother inkjet printer for the house. Not a laser printer by any means, but it had four features I liked:

  1. decent price
  2. good Linux support
  3. WiFi networking, so I can put it anywhere and not have to depend on a computer being up
  4. Easy to refill cartridges

Ink has always been the bane of home printers. Just when you most need to print something, you find out you are out of cyan. You can’t even print in black, since the printer protects itself bu not allowing any printing. Ink cartridges are the disposable razers of the high-tech world — give the printer away and laugh your way to the bank on the ink.

So I didn’t mind paying a bit more for a printer with the expectation of less expensive ink. I have bought those re-fill it kits in the past and managed to stain my hands and desk as I carefully tried to inject the ink into a cartridge with my shaky hands. I’m older now and that, and oil changes on the car, is something I don’t consider it worth doing myself anymore. This is quite something from someone as stingy as I am.

So I was happy when the ink refill stores started popping up. I could get them to do the grunt work of refilling my cartridges and still save a bundle, especially if I bought a ten-pack. The one trade-off was that I would inevitably have to hang around the mall they were in for half an hour or so until they had finished the refill. For some this might not seem like a chore, but like many males, I am not a shopper and when I am a shopper (let’s say mid-December as a wild example) I don’t usually need to refill my ink.

Small price to pay I figured. Of course I was valuing my own time at about $0/hour which may not be the most sensible thing either.

So I walk into the Printwell here in Ottawa to refill a couple of colour ink cartridges, hand them over and ask how long. I’m expecting to hear “30 minutes”. Instead: “Right away. This is a common cartridge, so we now have re-filled ones available.”

It made my day. Someone thinking about how to improve their service. Similar to how you now swap your propane tanks instead of waiting for someone to refill them. But still, exceeding my expectations.

Something we could all strive to do everyday…

School Councils: Parents, Policy and Fundraising

I was part of a panel today on CBC Ottawa’s afternoon drive-slot show “All in a Day“. The show started with an interview with an Education consultant who thinks that school councils are not doing enough to direct policy at their schools.

Shelley Rivier and I were asked for out opinion on parental involvement in policy at school councils. You can hear the interview here, but here are some of my thoughts condensed.

To be involved parents have to pass through several gates:

  • Availability. People lead busy lives
  • Awareness. New Canadians in particular may not be used to being allowed to question educators
  • Incentive. If parents are relatively happy (or don’t think they can make a change) then they are less likely to get involved
  • Authority. Principals are faced with a revolving set of parents who aren’t sure what their role is or what they are allowed to do. If a principal doesn’t encourage parents to challenge, parents may not even know it is an option. For instance, the board asks school councils for a Year End report every year and the principal passes this message on. Many councils therefore assume they have to do it and don’t question why.

Given all those hurdles, a parent then has two options:

  • Get engaged in “policy”. Here they are going up against seasoned paid professionals who jobs are not made easier by inviting dissent and by constantly educating parents. Furthermore, the field is already a 3-way tug-of-war between the province, trustees and senior staff. Fighting for policy change is a tough and seldom rewarding task. Needless to say, parents generally only follow this route when there is a crisis, such as a school closure or a program change.
  • Get engaged in social/fundraising efforts. Here the obstacles are less, the rewards are tangible and the work directly and immediately benefits the school and the students.

While I am torn over fundraising, since it deepens the inequity in education between have and have-not schools, I totally understand why parents are more interested in doing it. It is a logical choice. And it is hard to fault those parents who do this when the vast majority don’t get involved at all.

Dancing Chickens, Pumps and 3G

There was a case of a psychology experiment in which the scientists left some chickens over the weekend with an automatic feeder that periodically dispensed food. When they returned on Monday they found the chickens were performing some very odd dances and moves. It turned out to be a case of partial reinforcement with the chickens repeating any action that had preceded the appearance of food. Eventually more food would appear, reinforcing their repetitive actions.

Where does that leave me.

Well, at a cottage in the Quebec wilderness with a misbehaving pump and a sketch 3G service.

The pump seems to be acting up, shutting off after about 5 seconds of pumping and then coming on again a few minutes later. Sometimes, anyway. And sometimes it just works. But one of the times it just worked was when the cistern was already pretty full. The message: “pump the water frequently when the cistern is full”. So, we kept running it frequently and it started working better. Just like a dancing chicken.

That was last year. This year it acts up even when the cistern is almost full. There goes that theory.

Similarily my 3G service, while better than dial-up, is somewhat strained, often dropping from 3.1 Mbs to 153.6 kbs. And there I am, like a dancing chicken, holding the dongle in just the same way as the last time I got a better signal; or pushing my laptop to the edge to the table where I had got a better signal, or maybe pecking at the floor while flapping one wing in the air.

We’re all just eventually dancing chickens.

Concurrency and the fallacy of self-documenting code

There seems to be a ongoing debate about whether comments are necessary or even good in your code. The self-documenting code camp claims that if your code is well-factored and well-written then there is no need for comments. Any talented programmer will be able to follow the intent of the code and understand it.

It seems to me that there are two problems with this:

  • Mismatch between coding paradigm and problem domain.
  • Concurrency.

Let me give you an example of the second one. I was recently debugging some open source telephony code for a client of mine when I ran across this pseudo-code used to make a call:

this.setCallID(reserveCallId());

provider.createCall(this.getCallID(), address, terminal, dialedDigits);

this.toActive(Event.CAUSE_NEW_CALL);

I was getting a null-pointer exception in the last line, which I traced down to the “call id” being null. But “reserveCallId()” is guaranteed never to return null.

After uncovering the cause, the psudo-code fix was:

this.setCallID(reserveCallId());

provider.createCall(this.getCallID(), address, terminal, dialedDigits);

if(this.getCallID() == null) {  return null;}

this.toActive(Event.CAUSE_NEW_CALL);

At first glance, this new third line makes no sense. Another programmer would not easily understand why we would stop what we are doing if the call id is null at this point. Without comments, it is hard to see how any amount of refactoring or renaming of code would explain this logic.

The underlying reason for this odd code is that, depending on the telephony system, createCall() may not return until the call is connected. If, while being set up, the call is canceled  by another thread issuing a hangup command, then the call state is wiped out and the call id is set to null. Perhaps instead of checking for a null call id to see if this has happened, we can check the call state, but that is still not very clear: why would a newly created call be in an INVALID state?

A few lines of comments — ten seconds worth — is enough to explain it to whoever has to follow in your shoes:

// check if the call has been disconnected during set up,
// such as by an asynchronous hang-up
if(this.getCallID() == null) {  return null;}

Is that so hard?

The Efficiency of Fairness

Well, here in Ottawa the technology sector seems to be rapidly changing. When I starting up my consulting company the dot com bubble was still inflating and almost all of my work was with technology companies in Ottawa or Montreal. I would get calls from people who I had worked with in the past. People who knew me; knew the work I could do; knew the energy and enthusiasm I could bring to a project.

Not so much lately.

While I still do work for private sector companies, more and more I am finding that my clients are in the public sector. And here in Ottawa that generally means the Federal Government. Not that that is bad in any way.

But it is different.

Government procurement is built on fairness. If the sponsorship scandal taught us anything, it is that the public has no appetite for nepotism. And the politicians do listen to the public, at least at election time. But one man’s nepotism is another man’s efficiency. Being hired because someone knows what good work you do is indistinguishable from being hired for who you know. Efficiency looks like favouritism. And so we go to grids and competitions and lowest price contracts.

Even if it risks the project, slows things down or favours mediocre work. No one can accuse the project of favouritism. It isn’t efficient, which is why most businesses don’t act like this, but it is fair. We may say we want our government to be efficient, but what we really want is fairness. We are after all, the shareholders of the government. We expect returns. Not monetary returns that inspire efficiency even if there is a bit of nepotism, but service returns that demand equity and equality.

So it’s a different game now. More of a hassle. We’ll see if my new Secret Security Clearance helps things out.