Finally all the immediate work FY2004-5 deadlines have been met:
All is not bliss, though, as there’s still income taxes to file, an internal quality audit to conduct and a bundle of transfer of technology information to be assembled for another client.
My wife is back at work today after her March break. Thus I’m working at home so I can take the puppy out from his crate every so often. I just sent off a report I worked on yesterday and this morning to my boss. Though I’d love to run outside in the milder weather I think I only have an hour or so before the puppy needs to go out to do his “business.”
Today’s Firefox extension is a spell checker for textareas Spellbound. I can right click as I’m writing here and check the spelling.
In tagging along with my wife’s low carb. diet I’ve lost a couple of kilos. Now my BMI is 23.4 kg. One calculator told me something kind of scary: I’m in the 19th percentile for my weight based on my height, age and gender. This means, of course, that 81% of men (U.S., North America?) weigh more than I do.
I dialed in the new weight on the treadmill. It says I expend about 6 calories less over the half hour now that I have shed that 2 kg.
I figure I now weigh about what I was when I was 17 — Before I was of legal drinking age and before I drank beer.
My wife’s family got together on Good Friday to celebrate one of our quarterly gatherings at Easter-time. This year’s location was chez nous and Friday was the most convenient day for everyone.
“By mistake” I left a bit later on Thursday night because I was off for a four-day Easter weekend and I needed to collect a few things and water my office vegetation. At 5 p.m. I got a call to do some Quality Inspection (QI) work. Well, they were “desperate” and it was time-and-a-half billable work. So my first QI work started at the very bottom: inspecting some spare parts for overhauling sump pumps at a nuclear station. Instead of helping my wife prepare vegetables for Good Friday’s family supper, I worked.
All day Friday was spent getting ready for my wife’s family and one friend: a total of 22 people and one puppy. Then, at the end of the evening I had to sort music into numbered stacks to hand out at choir practice on Saturday morning. I’m exhausted. To relax I include an image of our sleeping puppy.
The hygienist at my dental appointment this morning asked if I wanted the topical flouride treatment. Why? I recall stating in my “particulars” form that flouride seems to give me a migraine headache. This happened both times I had tried it in two different forms. Besides, our dental plan doesn’t cover it if you are over 18. I said, “No thanks.”
I haven’t been away; however, generally I’m either out (less likely) or looking after the puppy (more likely) most evenings.
Yesterday’s break in the office work routine was provided by a colleague who bumped into a concrete support column in our office area. The forehead cut required two stitches to close but otherwise he’s fine. I remember almost bumping into that post on occasion when I first started working in this area.
I opened (yet another) gmail account in order to archive emails relating to my upcoming choir manager position that I (foolishly?) accepted (before puppy). I have a password generator/saver utility but the new gmail user form didn’t seem to accepted the password(s) I pasted into the field. After several fruitless attempts I tried typing the password by hand and finally got accepted. I’m wondering what Javascript technology is behind that. Perhaps I can adapt it to try to reduce blog comment spam.
BTW, if there’s anyone left on the planet who doesn’t have and wants a gmail account there’s plenty of extra invitations to give out now.
Finnegan, our SCWT puppy, has to be quarantined to our back yard until he’s had his next set of shots in about 3 weeks. Thus, my wife and I have spent lots of time in our backyard. That maple tree will probably have to come down. There are more splits in the trunk bark and it is “crying.” I thought the dog had peed on the deck but pee isn’t brown and sticky. I guess the sap is running and leaking out of an overhanging branch. I’m considering a star magnolia or serviceberry as a replacement.
And that living room bay window is deteriorating badly. I guess I’ll have to call for some estimates and the kitchen window…and a two instead of four section sliding glass door to the deck would also be nice. Anyone have any windfall profits or lottery winnings to share?
Good news, too, that most of Finnegan’s deposits are now being made in the backyard. We are all learning the appropriate signs I guess.
We bought ourselves a digital camera, NiMH battery charger and 512 Mbyte CF disk. Expect more images…
A puppy is a lot of work. Feeding, playing, napping, inside, outside, inside, outside, clean up occasional messes, … I think a wireless network and a laptop would allow me to read a few emails perhaps in between during the commas.
Today’s new thing I tried out was calculating differences between “adjacent” rows in a database. That is, given a monotonic increase in reading values over time I want another column of differences between this row’s reading and the last. I think I figured out how to do it by attaching two sequence columns to a table self-join. Now I need to make it more efficient.
Perhaps the people who say this haven’t raised children.
My son took these pictures of Finnegan our 8-week-old Soft Coated Wheaton Terrier puppy yesterday with his new digital camera:
Finnegan slept for about 5 hours last night and only cried for about five minutes in his crate next to our bed—he was a tired puppy. So far today both #2’s have been outside and about half of the #1’s. We went out and bought infant gates to, hopefully, keep the “accidents” on the kitchen floor.
We picked up Finnegan, an eight week old Soft Coated Wheaton Terrier puppy, this morning. He whimpered all the way home and neither ate nor drank all afternoon. After a couple of long naps he has started to adapt to chez nous this evening. He drank some water and licked me immediately after and he ate some kibble from our hands. Toilet training started…
Sorry, no pictures yet. There is film to be developed and it appears my son took the memory chip from the digital camera before he left to visit his cousin this evening.

No I wasn’t directly affected—no money to travel at the moment anyway. However one of the cars on last night’s commuter train was a huge mobile Jetsgo ad. I hope GO transit and the ad agency that installed the mobile billboard asked for payment up front. I wonder if the contract covers prompt removal on the demise of said advertised company.
I create log files with a custom Perl module and I decided to investigate creating an emacs “mode” in which to view them so that it would emphasize the warnings, for example. I found a tutorial on how to create a custom mode. At the very bottom of the article was a much easier way: deriving from an existing mode. Here’s my “quickie” mode for viewing my log files:
;;;;;;;;;;;;;;;;;;;;;;;;;;; -*- Mode: Emacs-Lisp -*- ;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;; jrrs-event-log-mode.el
;;
;; A mode to highlight parts of the log files I create with JRRS::eventlog.pm
;;
;; Author : James R.R. Service
;; Created On : Wed Mar 09 2005
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defconst elog-font-lock-keywords1
(list
'("\\<\\(info\\|debug\\)\\>" . font-lock-comment-face)
;; bring out embedded \n
'("\\\\n" . font-lock-constant-face)
;; Bring out today's date by using ` and , operators to eval before adding
;; to list.
`(, (concat "\\<" (format-time-string "%Y-%m-%d")
" [0-9][0-9]:[0-9][0-9]:[0-9][0-9]\\>")
. font-lock-function-name-face)
;; Emphasize WARN and DIE messages.
'("\\<\\(WARN\\|DIE\\)" . font-lock-keyword-face)))
(defvar elog-font-lock-keywords elog-font-lock-keywords1
"Highlight regexps for ELOG mode."
)
;; (setq elog-font-lock-keywords elog-font-lock-keywords1)
(define-derived-mode elog-mode fundamental-mode "ELOG"
"Major mode for view log files created by JRRS::eventlog.pm"
(set (make-local-variable 'font-lock-defaults) '(elog-font-lock-keywords))
)
(add-to-list 'auto-mode-alist '("\\.log\\'" . elog-mode))
(provide 'jrrs-event-log-mode)
Bad temperature readings appear as 4’s or 31.5’s. But if the rdg_valid flag is already false or the reading is an 'a' or 'b' code I want to accept the row. I only want to reject the row if it is a 'T' reading outside of the range 4.5 to 31.
ALTER TABLE my_table
ADD CONSTRAINT temperature_in_range
CHECK (NOT rdg_valid
OR reading_type_code = 'a'
OR reading_type_code = 'b'
OR reading_type_code = 'T'
AND reading >= 4.5 AND reading <= 31);

Since last Sunday, I have been spending rehearsal and my own evenings' time learning the music for last night’s concert. I was hired to augment the bass section since several of their bass section members were to be absent. I was kind of discouraged on the choir’s behalf at Tuesday’s rehearsal as they didn’t seem ready for the concert. However, Friday’s dress rehearsal went better. They added an extra rehearsal on Saturday morning (which I didn’t attend) and this seemed to do the trick. They sung well and did a good job last night.
I had to concentrate at that concert because a) I was still sight reading and learning the music and b) there were a couple of pieces that both choirs (Vox Finlandiae and Jubilate Singers) seemed to be less familiar with so that I felt I had “lead” the section and bring out the bass line.
That pint of Steamwhistle tasted great at the pub after the performance. Unlike most choirs I have sung with, a greater number of them get together to relax after the show. It was a homecoming of sorts as I had sung with the Jubilate for a season about 5 years ago.
Was it fun? Somewhat: it was a lot of work to learn to sing in a new language and passably sing new repertoire “at speed.” This morning John Stainer’s Crucifiction was the featured work on Choral Concert reminding me that singing the role of Christ was one of my first (paying) soloist jobs some 15 years ago.
I’m tired so I’ll just gripe a bit:
Today I replaced a bunch of Postgres database views like this:
CREATE OR REPLACE VIEW readings_last30d_daily_0 AS
SELECT rdg_date
, to_char(sum(reading_diff)/1000.,'FM999990.999') as kwh_per_day
FROM readings
WHERE channel = 0 and rdg_valid
AND reading_stamp between
(select max(reading_stamp) from readings
where channel = 0 and rdg_valid)
- interval '31 days'
AND (select max(reading_stamp) from readings
where channel = 0 and rdg_valid)
GROUP BY rdg_date ORDER BY rdg_date ;
with a function:
CREATE OR REPLACE FUNCTION readings_daily(text, int4)
RETURNS SETOF date_rdg AS
$BODY$ SELECT readings.rdg_date
, to_char(sum(readings.reading_diff)::numeric / 1000::numeric
, 'FM999990.999'::text) AS kwh_per_day
FROM readings
WHERE readings.channel = $2 AND readings.rdg_valid
AND readings.reading_stamp >=
(((SELECT max(readings.reading_stamp) AS max
FROM readings
WHERE readings.channel = $2
AND readings.rdg_valid)) - $1::interval)
AND readings.reading_stamp <=
(( SELECT max(readings.reading_stamp) AS max
FROM readings
WHERE readings.channel = $2 AND readings.rdg_valid))
GROUP BY readings.rdg_date
ORDER BY readings.rdg_date;$BODY$
LANGUAGE 'sql' VOLATILE;
Where SELECT * from readings_daily('31 days',0) gives me the same
rows of data. Some 15 views per table are replaced by one function. I now just
cross-reference those view names with SQL function calls in another table.
Copyright © 2002-2006 James (Jim) R. R. Service (@gmail.com - jservice)