mike watkins dot ca : February 2009 Archives

February 2009 Archives

6 entries filed this month:

February 27 2009

December 2008: Canada deeper in debt

Speaking of secrecy, our government officials and the elected mouthpieces who notionally run these departments often hide or keep secret important truths simply by talking about something else.

If one reads the latest news release from the Department of Finance one might conclude that Canada and Jimmy Flaherty are doing a good job.

Yet the secret truth, available with just a little digging, is that Canada dipped deeper in debt in December 2008, to the tune of an additional 3.8 billion on top of somewhere between 15 and 50 billion dollars of new debt incurred so far this fiscal year.

The chart illustrates a total new debt line (dark blue) and a dotted "best case" line. There are two primary factors which drive the difference between the two lines:

  1. Year over year there was an announced change in how certain crown corporations obtain their borrowing; where previously said crown corporations (Canada Mortgage and Housing Corporation (CMHC), the Business Development Bank of Canada and Farm Credit Canada) obtained their own borrowing, this fiscal year the federal government proper arranged this financing to lever the stronger borrowing power of the national government and thus save some interest charges.
  2. After the election - you might recall it was the election where Harper and Flaherty tried hard to pretend that all was well, that Canada would never go into deficit - Flaherty did an about face and called the situation facing the world and Canada a "crisis" and decided to help out the Canadian banks to the tune of buying $25 billion in CMHC-insured mortgages off the banks so they could clean up their balance sheets. Its something of a shell game.

Points 1 and 2 are related. CMHC is one of the crown corporations the government is obtaining financing for. Ultimately we taxpayers are all on the hook for what happens to these mortgages, because if as in the U.S. there is a surplus of defaulted mortgages over the insurance funds protecting them, guess who will be paying for the mess? You and me.

Even if we give Flaherty the benefit of doubt, writ large, and take off 10B + 25B = $35 billion dollars from the gross new accumulated federal debt, we are still left with over $15 billion dollars in new debt incurred by Stephen Harper's government.

Flaherty can play word games and claim that the government is still capable of operating without a deficit but the reality is that we are in fact 3.8B deeper in the hole in December, or $15.2B of new debt on a cumulative basis so far this fiscal year.

Ottawa "Cult of secrecy"

Via Paul Wells at Macleans, an intriguing blog post by Sun News reporter Elizabeth Thompson in Mystery Meetings:

There are public meetings on Parliament Hill. There are in camera meetings. However, Parliament's Citizenship and Immigration committee have come up with a new one - "informal meetings."

No, that doesn't mean that MPs show up in jeans and running shoes. It means that they don't tell anyone that they are going to meet, let alone that they were going to spend four hours this week grilling top immigration department officials on some of the biggest hot button issues facing that ministry.

We should note these are all party meetings, which means these off-the-record sessions are being tacitly endorsed by the right, centre, and left of Canadian politics.


This tidbit serves to underscore the larger problem of inappropriate government secrecy identified this week as the federal Information Commissioner Robert Marleau tabled to Parliament (Chronicle-Herald) a hard-hitting report (PDF | HTML) which gives failing grades to many major federal departments for their handling of information and access to information requests.

Canadians expect and deserve far greater efficiency and accountability from their government. Robert Marleau, federal Information Commissioner

I've never seen a candidate stand up and say "If elected I shall do my utmost to hide the truth from you" yet that is exactly what we are increasingly getting from some of our elected representatives and the ministries they are entrusted to lead.

February 25 2009

Former Socred Cabinet Minister Voting NDP

Given Rafe Mair led three different Ministries in the Socred party from which the current B.C. Liberal Party originated, it is tempting to say "wow", but really this is no surprise to me (and I do not mean that in a pejorative sense):

Ex-Socred cabinet minister Rafe Mair declares that he will vote NDP (Charlie Smith, Georgia Straight, Feb 25, 2009)

When I was in government (1975-80) I was Minister, first, for Consumer and Corporate Affairs. During that time I passed more consumer legislation than anyone before or since including licensing Car dealers (with six of them in caucus setting their collective hair on fire) forced the Banks to acknowledge and obey BC laws for the first time, forced serious reporting changes to the Vancouver Stock Exchanges for which they have never forgiven me, licensed Travel Agents and made them create a fund to bring home passengers stranded by bankrupt charter companies and so on.

As Environment Minister I stopped the government killing of wolves, stopped exploration for and mining of uranium and went to Seattle and negotiated the saving of the Skagit River from a raising of the Ross Dam which Seattle was permitted to do under a 1941 deal with the BC government.

As Minister of Health I brought in the Homecare program and Palliative Care.

I tell you all these things because there is no way in the world I could have ever done these things for the public of BC had Gordon Campbell been Premier.

The political ground has shifted dramatically and the present day version of the old Socreds is, I think, the party Carole James leads. I know that there are supporters of Ms James that are hard line lefties just as when I was with Bill Bennett there were supporters and indeed members of Caucus who were near fascists. That sort of thing will always happen in a two party system. Rafe Mair

Ticking away far away from the headlines of economic doom is an important issue which Rafe has taken up as his cause: assuring B.C. forever has independent control over its energy and water policy. Making Hydro, its future, and our access to environmentally responsible, inexpensive, energy an election issue sounds like a fine idea to me.

Maybe Mr. Mair's long-held views against the coastal salmon farming industry will surface in this election too.

February 19 2009

Profiling QP applications

Earlier this month Chris McDonough posted profile summaries of four Python web frameworks: repoze.bfg, Django, Pylons, and Grok.

The framework I use, QP, supports WSGI but doesn't depend on it, which is neither good nor bad but perhaps as a result I'm a little less aware of the WSGI ecosystem than I should be so I am trying to find time to look at various middleware and application components.

Following up on Chris's post I took the profiling middleware from repoze.profile for a spin to satisfy the latent WSGI curiosity percolating here under the covers. Using paste.httpserver failed for reasons I cannot at this time recall, yet driving the middleware and QP via the basic WSGI reference server was successful. I suppose I'll track that down when I have a real need.

Compared to the list of results in "What's Your Web Framework Doing (2)", QP fits in with the Django results, returning 57 lines of profiler output for a simple GET request from a hello, world application.

I should point out that you can profile any QP application from the included interactive console which provides access to the profiler, as well as to the Durus Python object database containing your application's objects:

$ qp -i hello
Profile, publisher, site
>>> p = Profile('/')
>>> p.stats.strip_dirs()
<pstats.Stats instance at 0x875e7ac>
>>> p.sort('time')
>>> p.format()
Wed Feb 18 18:08:33 2009    /tmp/tmpQJy4QF.profile

         105 function calls in 0.007 CPU seconds

   Ordered by: internal time

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
        1    0.004    0.004    0.006    0.006 <string>:1(<module>)
        1    0.000    0.000    0.001    0.001 response.py:375(write)
        1    0.000    0.000    0.000    0.000 :0(now)
        5    0.000    0.000    0.001    0.000 response.py:320(generate_headers)
       12    0.000    0.000    0.000    0.000 utils.py:44(as_bytes)
        1    0.000    0.000    0.007    0.007 profile:0(hit, page = process())
       17    0.000    0.000    0.000    0.000 :0(isinstance)
        7    0.000    0.000    0.000    0.000 :0(write)
        1    0.000    0.000    0.000    0.000 response.py:123(__init__)
        7    0.000    0.000    0.000    0.000 :0(get)
        1    0.000    0.000    0.003    0.003 profiler.py:50(process)
        1    0.000    0.000    0.000    0.000 hit.py:32(init_response)
        1    0.000    0.000    0.000    0.000 request.py:202(get_header)
        1    0.000    0.000    0.000    0.000 request.py:105(__init__)
        1    0.000    0.000    0.000    0.000 request.py:330(_parse_pref_header)
        1    0.000    0.000    0.001    0.001 publish.py:94(process)
        1    0.000    0.000    0.000    0.000 common.py:61(site_now)
        1    0.000    0.000    0.000    0.000 :0(setprofile)
        1    0.000    0.000    0.001    0.001 hit.py:25(__init__)
        1    0.000    0.000    0.000    0.000 response.py:239(set_body)
        1    0.000    0.000    0.000    0.000 request.py:306(get_encoding)
        2    0.000    0.000    0.000    0.000 spec.py:737(get_specified_attribute)
        1    0.000    0.000    0.000    0.000 rfc822.py:952(formatdate)
        1    0.000    0.000    0.000    0.000 slash.py:19(process_hit)
        1    0.000    0.000    0.000    0.000 request.py:373(parse_cookies)
        2    0.000    0.000    0.000    0.000 response.py:361(generate_body_chunks)
        1    0.000    0.000    0.000    0.000 response.py:156(set_status)
        1    0.000    0.000    0.000    0.000 response.py:293(get_content_length)
        1    0.000    0.000    0.000    0.000 common.py:23(get_publisher)
        2    0.000    0.000    0.000    0.000 :0(items)
        1    0.000    0.000    0.000    0.000 response.py:300(_gen_cookie_headers)
        1    0.000    0.000    0.000    0.000 response.py:203(_compress_body)
        2    0.000    0.000    0.000    0.000 :0(getattr)
        2    0.000    0.000    0.000    0.000 response.py:144(set_compress)
        2    0.000    0.000    0.000    0.000 tz.py:60(dst)
        1    0.000    0.000    0.000    0.000 tz.py:40(now)
        1    0.000    0.000    0.000    0.000 response.py:228(_encode_chunk)
        1    0.000    0.000    0.000    0.000 :0(sub)
        1    0.000    0.000    0.000    0.000 :0(time)
        1    0.000    0.000    0.000    0.000 :0(finditer)
        1    0.000    0.000    0.000    0.000 :0(replace)
        1    0.000    0.000    0.000    0.000 :0(split)
        1    0.000    0.000    0.000    0.000 :0(gmtime)
        1    0.000    0.000    0.000    0.000 :0(match)
        1    0.000    0.000    0.000    0.000 response.py:197(set_expires)
        1    0.000    0.000    0.000    0.000 tz.py:54(utcoffset)
        1    0.000    0.000    0.000    0.000 :0(upper)
        1    0.000    0.000    0.000    0.000 :0(getvalue)
        1    0.000    0.000    0.000    0.000 response.py:133(set_content_type)
        1    0.000    0.000    0.000    0.000 response.py:153(get_buffered)
        1    0.000    0.000    0.000    0.000 publish.py:484(get_time_zone)
        1    0.000    0.000    0.000    0.000 response.py:150(set_buffered)
        1    0.000    0.000    0.000    0.000 :0(len)
        1    0.000    0.000    0.000    0.000 :0(lower)
        1    0.000    0.000    0.000    0.000 :0(get_ident)
        1    0.000    0.000    0.000    0.000 response.py:147(get_compress)
        0    0.000             0.000          profile:0(profiler)

Nothing too surprising here nor is there much fluff. as_bytes (from the Durus package) gets called a number of times as from the same code base QP strives very hard to be a good Unicode citizen in both Python 2.x and 3.0+.

Baby pylint alternative for py3k

David Binger noted on the QP list today discussion on the python-dev list revolving around pylint being broken in Python 3 and suggests qpcheck.py as a baby pylint alternative.

Running qpcheck.py | grep undefined against the Python 3 standard library returned almost 400 lines, at least some of which are actual errors.

February 04 2009

Bill Casey

Expelled in 2007 from the Conservative caucus for daring to vote his conscience on the Atlantic Accord, the MP for Cumberland Colchester Musquodoboit Valley, former Progressive Conservative Bill Casey yesterday stood in the House of Commons asking the Speaker to investigate the Conservative Party's role in attempts to discredit him during the last election. The Chronicle Herald contains a detailed account of the story.

Voters in Casey's riding easily re-elected Casey as an independent, apparently holding him in high regard.

Back in the days of the Progressive Conservative Party of Canada, I recall Bill once led a fund-raiser for prairie cattle farmers who had been suffering greatly due to drought conditions that year. He arranged for feed to be bought and sent by train to the region. To me this concern for our fellow citizens seemed iconic of the best of the Canadian spirit - here was an Atlantic Canadian spearheading a fund-raiser for Albertan farmers.