A friend of ours said he saw us on TV on Friday. We watched ourselves on the program today. About 3 hours of taping was turned into just 3 minutes of air time. Just as well, as neither my wife or I were particularly proud of our “performances.” Our younger son had a great laugh about it after hearing our description of the taping and seeing what actually aired.

I bought a toilet flapper today as the old one doesn’t seal anymore. The main floor toilet has a newer type of float valve which only operates when the level goes down unlike the ball float variety. Because of the leak the toilet would spontaneously fill every so often. Anyway, while I was at Rona I picked up some LED Christmas lights for both inside and out. Though they are more expensive, I want to avoid the several hours I might spend this year tracing the burnt out bulb(s) on 300 light strings. I also bought a rubber mat, the kind you put under small rugs on hardwood floors to keep them from sliding. I’ve put this in the new car to keep the bottle of wind shield washer fluid from sliding back and forth in the hatch area.
A tenor from our choir and I practiced our duet, “Suscepit Israel” from The Magnificat by G. B. Pergolesi this afternoon. We’ll be rehearsing it with orchestra tomorrow evening and we’ll be in concert next Saturday and a week later the following Sunday.

I pretended I was a music teacher these past two days and registered for the Ontario Music Educator’s Conference. Through present and former choir members and my wife, I know a few music teachers (including my wife). The conference took place at the “Double Tree” hotel o.k.a the Skyline, across the street from Toronto Congress. We took a room for Friday night so we wouldn’t have to get up so early to hear Saturday’s keynote speaker(s): the Canadian Brass at 8:30 a.m. Well worth the price of admission, IMHO!
I attended some workshops, one of which I’ll certainly remember as the teacher presented the uses of technology and software to help his students learn their music. How about, for example, learning a duet by sending sound attachments to each other and re-mixing their own parts and sending it back for review? The other workshop I remember was on Latin rhythms. One bit of trivia I learned is that despite Hollywood’s depictions, maracas are not Mexican—they are an instument from Venezualan and Columbian music culture. Oh, and our choir was part of a workshop on choral techniques by way of an open rehearsal.
There was also a vendors' mall: no Encylopedia Britannica though. I told my wife I would buy her the two-congas-with-stand set for Christmas as long as she would share them. And, yes, I agreed she didn’t have to wait until Christmas to open them.
You may recall (or perhaps I neglected to discuss it here) that I was having
a problem with the Perl script I used to synchronize our employee email
addresses from the LDAP directory to the SQL server database serving our Intranet web
site. One early morning it deleted half the names — probably something to
do with the domain controller server upgrade to Windows 2003. For some
reason the query wasn’t returning all the users in the directory
anymore. Part of the problem is that this list of names is also used to
establish the Intranet website content managers' permissions. It took me a
while to surf through the Google chaff to finally find an
article
on how to retrieve the information available in the Global Address List of
Exchange / Outlook. I culled the vbs script lines and added some of my
own changes:
' GEt the domain.
Dim rootDSE, domainObject
Set rootDSE=GetObject("LDAP://RootDSE")
domainContainer = rootDSE.Get("defaultNamingContext")
Set domainObject = GetObject("LDAP://" & domainContainer)
' Create a file for results.
Set fs = CreateObject ("Scripting.FileSystemObject")
Set userFile = fs.CreateTextFile (".\users.csv")
' Call the sub to do the work.
ExportUsers(domainObject)
Set oDomain = Nothing
MsgBox "Finished"
WScript.Quit
Sub ExportUsers(oObject)
Dim oUser
For Each oUser in oObject
Select Case oUser.Class
Case "user"
If oUser.mail <> "" then
userFile.Write oUser.displayName _
& "," & oUser.sAMAccountName _
& "," & oUser.userprincipalname _
& "," & oUser.sn _
& "," & oUser.department _
& "," & oUser.physicalDeliveryOfficeName _
& "," & oUser.telephoneNumber _
& "," & oUser.initials _
& "," & oUser.givenName _
& "," & oUser.mail
' for each email in oUser.proxyAddresses
' userFile.Write email & ","
' next
userFile.WriteLine ""
End if
Case "organizationalUnit" , "container"
If UsersinOU (oUser) Then
' If users in container call myself again.
ExportUsers(oUser)
End if
End select
Next
End Sub
Function UsersinOU (oObject)
' Are there users in the container?
Dim oUser
UsersinOU = False
for Each oUser in oObject
Select Case oUser.Class
Case "organizationalUnit" , "container"
UsersinOU = UsersinOU(oUser)
Case "user"
UsersinOU = True
End select
Next
End Function
Then I converted the vbs to a Perl script using the Win32::OLE module:
use Win32::OLE 'in' ;
sub last_error () {
my $last_error = Win32::OLE->LastError() ;
die $last_error if $last_error ;
}
sub has_users ($) ;
sub has_users ($) {
my $object = shift ;
my $result = 0 ;
foreach my $user (in $object) {
if ($user->{Class} =~ /^(organizationalUnit|container)$/) {
$result = has_users($user) ;
} elsif ($user->{Class} eq "user") {
$result = 1 ;
}
}
$result ;
}
sub export_users ($) ;
sub export_users ($) {
my $object = shift ;
foreach my $user (in $object) {
if ($user->{Class} eq "user") {
if ($user->{mail} ne '') {
print join(', ', map { "$_: $user->{$_}" } qw[mail displayName]),
"\n" ;
}
} elsif ($user->{Class} =~ /^(organizationalUnit|container)$/) {
export_users($user) if has_users($user) ;
}
}
}
my $rootDSE = Win32::OLE->GetObject("LDAP://RootDSE") ;
my $domain_container = $rootDSE->Get("defaultNamingContext") ;
my $domain_object = Win32::OLE->GetObject("LDAP://$domain_container") ;
_ddump [$domain_object], [qw[$domain_object]] ;
last_error ;
export_users($domain_object) ;
exit 0 ;
As I’m off to the OMEA conference tomorrow, though I’m not a music teacher, I’ll have to wait until Monday to change my script and restore those missing names.
I have a server which accepts downloads from devices in the field and mails the results to me in an attachment. Outlook doesn’t provide a way to automatically detach and save them. Sometimes you look for stuff using Google and you find a heck a lot of chaff. Finally I discovered how to do this with a short VBA “script.” Outlook XP has a “run a script” action available for its rules but, again, it took a bit of searching to find out how to use it.
Attribute VB_Name = "SaveAttachments"
Option Explicit
' The "run script" check box in the Outlook Rules Wizard looks for subs with
' the Item As Outlook.MailItem argument.
Sub SaveAttachmentMessageRule(Item As Outlook.MailItem)
' save_dir must exist.
Const Save_dir = "c:\attachments\"
Const process_attachments_program = "C:\Perl\bin\perl.exe C:\bin\got-data.pl"
Const Ext = "txt"
Dim Filename As String
Dim Attach As Attachment
Dim i As Integer
i = 0
If Item.UnRead = True Then
For Each Attach In Item.Attachments
' Verify the attachment has the correct extension and is unread.
If Right(Attach.Filename, 3) = Ext Then
Filename = Save_dir & Attach.Filename
Attach.SaveAsFile Filename
i = i + 1
End If
Next Attach
' Mark as read.
Item.UnRead = False
End If
Set Attach = Nothing
If i > 0 Then
' Now process the saved attachment(s).
Shell process_attachments_program
End Sub
Though you can run an application from an Outlook rule it starts before the
run a script; hence, I use the Shell command to process the
attachment file. Note that you’ll have to change the “Security” settings to
enable macros. However, if you know how to use VBA then I would surmise you
know how to do this, too.
In my /etc/hourly.local file I created to update awstats hourly, I added a Perl one-liner to look for comment spam attempts:
perl -ne 'print if /\b(POST|GET)\b/ && /mt-comments\.cgi/ && ! /(mysite|mysisterssite\ )\.com/' /home/myhomedir/logs/blog-access.log
On Nov. 20 there were 212 entries. Not all were comment spam attempts as some 'bots “cruise” the blog looking for open comments. All the rest were stopped with my suggested rewrite rules. It used to be that all those attempts would be clogging the MT activity log with MT-Blacklist comment denial or worse, sending me email about a bogus comment.
About a month ago a choir member was cleaning out her trunk and gave me a box of some new music. This box had been given to her by our director: I figure at some point last May as he was a pedestrian most of that time. As music sorting is rather tedious work I stashed the box in the basement with the other piles of music until such time as a sorting mood strikes (not too often
).
Today was rainy and too wet to rake leaves. I even felt like sorting music. In that box were invoices to our choir and another entity, from whom we borrow music from time to time, for over $600 and due last May 30. This explains a message on my work phone regarding an invoice from a certain music publisher. I was too busy on Friday to call back. Good thing: I would have had no idea what they were talking about. I scanned the invoices and emailed to people who know more about them I do. Now somebody was to sweet talk that music publisher and try to avoid the stated 1.5%/month overdue charges.
BTW, pretty well all that music is sorted, envelopped and put away. There’s now about 240 separate works in 14 large plastic bins. That 14th bin is now full, too.
“Give a woman an inch and she thinks she’s a ruler.”
Anonymous
“It takes a big man to cry, but it takes an even bigger man to laugh at that man.”
Jack Handey

We (older son, gf, wife and me) sat in the studio audience for Monday report last Friday. Now I know why Rick Mercer’s monologues sometimes don’t get the laughs they deserve: he’s a perfectionist, if he flubs a word or two he’ll repeat the whole thing. The plastic stacking chairs weren’t particularly comfortable and we watched the tape segments on TV monitors just like we would at home. So the fun was visiting with my son and gf. After the taping we ate at the Planet Hollywood restaurant next to the Skydome. This P.H. isn’t nearly as impressive as the Niagara Falls location.
My younger son turned 20 yesterday. We are no longer the parents of teenagers.
Though it is only a five minute walk, we have a new car! We’ve traded in the big, rusty, peeling-paint, 363,000+ km 1992 Dodge Caravan for a 2004 Aveo: a second “family” car for my son for to use for his daily school commute once he gets the hang of stick shifting. I’ll use it for my evening errands just because it’s fun to be driving manual again.
Of course history repeated itself: I was having trouble backing out of the driveway what with the “pulling up the ring” to reverse, clutching, etc but mostly because I forgot to release the parking brake. Yes, I remember doing the same thing at my driver’s test when I was 16.
I found out from an article in the Mississauga News why my wife had to wait for the opera to start. Apparently the musicians had said “no pay, no play” for the final performance and Maestro Bennett finally arrived with their pay a half an hour after the program was supposed to start. Of course the 'News couldn’t contact him to get a statement. Typical! Once again I’m glad the Oakville Choral Society said ‘no’ the second time they were asked to “join” with the Opera Mississauga. (The latter’s web site redirects to Royal Opera Canada, perhaps because Opera Mississauga and the Living Arts Centre can’t agree on lease terms. I wonder why.
)
“That would be allegro with an Italian soft drink” — comment from our music director this morning.
Usually there’s dozens of blacklisted spam entries but at lunchtime today I added some mod_rewrite rules per the advice on some other blogs. Everything has been quiet since noon — only my sister and I logging in to our respective blogs. Here’s what I added to the httpd.conf file (change the site and domains to suit):
# Redirect clients who try to post comments directly.
RewriteEngine On
RewriteCond %{REQUEST_METHOD} POST
RewriteCond %{REQUEST_URI} .mt-comments\.cgi*
# If the browser did not come from either of ours sites or
RewriteCond %{HTTP_REFERER} !.*(mysite|mysistersite)\.domain.* [OR]
# there's no agent.
RewriteCond %{HTTP_USER_AGENT} ^-$
# Redirect to an error message page.
RewriteRule (.*) /no-comment.html [R,L]
My wife cringes when kids do foolish things or their parents don’t watch them carefully and there are “near misses.” I guess I do too. However, what gives me frissons are people who don’t work safely. Examples I’ve seen include someone sawing grooves in concrete curbs with a gas-powered diamond saw and not wearing safety glasses or hearing protection. Yesterday’s action was a guy on a metre-wide scaffold about 6 or 7 metres off the ground. There was no railing and the guy wasn’t wearing any safety harness or fall-arresting apparatus. He was removing bricks over a window with a drill-like machine and, again, he didn’t appear to be wearing safety (or any) glasses or goggles. It kind of saddens me when I see this.

We had the pleasure of hearing our good friend and excellent organist play a recital at Melville United Church in Fergus this past Saturday evening. He played music of the great organist-composers from the 17th to 20th centuries including Bach’s Toccata and Fugue in D-, a Choral Partita and a Choral Prelude by Buxtehude, one of Bach’s teachers, a Prelude and Fugue in G+ by Mendelsohn, Choral Preludes by Vaughan-Williams, Willan and Franck. On a dare from one of the congregants, who said he’d come only if he could work in a Beatles' tune, Matthias improvised on Yesterday and The Yellow Submarine. Good stuff!

The former little garden on the garage side of the walk is starting to fill with leaves giving me an idea. I had a long pile of shredded leaves and pine needles left over in the back behind the deck so I put a layer of this stuff along the edges of the walk from front to back. When I had excavated for the walk, I had piled the topsoil just behind the shrub. This pile provided just enough topsold to spread over the shredded material along the walkway edges. Therefore I used most of the mulch, removed the pile of topsoil and “finished” the sides of the walkway all at the same time. I also saved myself a few bucks by not having to order a cubic yard or two of triple mix for that purpose.
I fiddled around with the colours and fonts on the site. There appears to be some colour “bleeding” with IE. Maybe I’ll fix it when I find an edit css tool like I got for Firefox.
I changed the little thumbnail file: favicon.ico for the hubbo site.
Looking at the pictures I didn’t realize how ugly the old walk looked. I guess we got used to it after the fifteen or sixteen years of looking at it.
I have a host computer recently installed between between the two firewalls at work in the so-called DMZ. I use ssh to maintain it. It was getting tiresome to type in the password each time I rsync'd some files. It had been awhile since I set up authentication between hosts so a review of the man pages for ssh was called for. I used ssh-keygen -d dsa to generate a public and private key on the client Intranet host. I then appended the contents of ~/.ssh/id_dsa.pub to the file ~/.ssh/authorized_keys2 on the DMZ computer.
Rather than forwarding and bulking up people’s inboxes I can just forward the URL (especially since, as of this writing, their web site seems to be down). Another cavaet: this certainly isn’t my html markup.
Welcome to another edition of the Bell’Arte Singers' newsletter. We hope you find it enjoyable and informative. If for some reason this email does not display correctly, please click on this link: Copyright © 2002-2006 James (Jim) R. R. Service (@gmail.com - jservice)