You should need a license...

Blake said I should post something to the weblog, so I direct your attention to this Government of Canada site about car seats, specifically the answer to question number nine, "Are there other concerns in the use of a infant car seat outside a vehicle?"
Two incidents have been reported where infants in infant car seats were left unattended on hot stoves, resulting in one death and one infant suffering serious burns.
Argh.

Conversations With Delphine, Part VII: Beer

One the way home from daycare I stopped off at the LCBO to buy beer because it was just that hot.

"Erik likes this," said Delphine as we walked through the store. "Erik likes these", she said, as we walked into the beer section.

"Mummy likes these too, and Auntie Morgan," I said.

"No! Just Erik. What is this called?"

"It's called beer."

"Oh. I don't drink beer. I'm too little."

"That's right."

"When I am older I will drink beer. But not now. I am still young."

It's good to have something to look forward to.

Conversations with Delphine, Part 6

She doesn't say such curious things any more, because her language skills are better, but she's still pretty amusing.

Today I went to pick her up from daycare, and asked if she wanted to wear her sweater home. She said "I would rather not wear my sweater." We don't talk down to her or modulate our vocabulary or grammar, so she comes out with these very grown-up-sounding words and constructs. Maybe they're only funny if you can hear them coming out of a three-year-old.

On the way home we walked past another mother with a baby, and Delphine said, loudly and in a scandalized tone, "The baby has no shoes on!" Fortunately the other mother just laughed.

After supper Blake arrived home, having biked. It's warm today so he was pretty sweaty. Delphine said "You're wet like water, Daddy! We could swim in you!"

Birth Story

The birth story of Rosalind Yates Reed is great. It was a natural birth, and for a while there it sounds like it was a real pain in the ass, dragging on and on. But the point is that they got through it by trying a whole lot of different things, and they didn't go for any of the standard hospital interventions.

I'm having trouble expressing why this story made such an impression on me. I guess it's because the labour was long and hard, but they stuck to their principles and kept trying lots of different things to move the labour along. So often I get the message that you can only have a natural birth if your labour is easy and progresses well.

More Sleeping

You may be wondering how Cordelia's sleeping situation is working out. Probably not, but I want to write this down because it's one of those things that parents forget, like the pain of labour.

If you recall, last I posted Cordelia's crib was in our bedroom, and she wasn't sleeping very well at night. We had it like that for a while because we were going to go on vacation and didn't see the point in trying to fix anything until we got back.

When we were on vacation, Cordelia slept in another room and Delphine slept in our room. Cordelia took good naps, two a day, and slept in her own bed from around six in the evening until three in the morning. When she woke up at three, I brought her into our bed because I didn't want her crying to bother my parents. Needless to say we weren't well-rested on our holiday.

When we got back, we recreated the situation with Delphine in our room and Cordelia in another room -- Delphine's room, actually -- because that worked very well. Delphine sleeps like a log so we don't wake her up when we come to bed, whereas Cordelia is a delicate flower when it comes to sleep.

So far that has been working perfectly. I put Cordelia down at around 5:45 -- the routine is diaper, pyjamas, brush teeth, nurse (usually to sleep but sometimes she doesn't fall asleep), soother, bed -- I close the door and either she sleeps or she cries and then sleeps. She doesn't usually cry for more than five minutes, but you can tell we're second-time parents because we don't even time it any more.

She doesn't seem to wake up overnight, or if she does it's for one or two cries, then back to sleep again. She wakes up at around 5:45 or 6:00 in the morning.

She has two naps, at around 9:00 am and 1:00 pm. The routine for them is diaper, nurse, soother, bed, and again sometimes I put her down still awake. Sometimes she cries, sometimes she doesn't, and she usually sleeps for between forty-five minutes (bad) and two hours (good).

So chalk up another victory for Weissbluth. The only remaining challenge is figuring out how to get both girls sleeping in the same room, so we can have our bedroom back.

Seven and A Half Months

Cordelia is seven and a half months, and she is...

  • Sleeping in her own bed all night.
  • Eating vegetables, fruit, cereals, milk products, and some meat.
  • Chewing! So I can give her little pieces of toast and stuff and she doesn't gag. Hooray! Table food!
  • Pulling herself up to standing (and then falling over)...
  • ...but not crawling properly.
  • Although she does get around pretty well doing the worm.
  • Still really charming and smiley, but...
  • ...showing some separation anxiety. Whenever a stranger stops to talk to her she gets this slightly worried (but friendly) expression and looks at me to make sure everything is okay.
  • 19 pounds -- still large for her age, but well-proportioned.
  • Muscular and strong.

People Food

Since I started Cordelia on "solid" food at six months, (instead of four as I did with Delphine) it seems like she's graduated from starter mush to real, chewable food really quickly.

Some time in the last couple of weeks she has learned to chew, and today for supper she had pasta, peas and canned salmon -- the same thing Delphine and I had for lunch yesterday. People food - cool!

Starting Scheme.

(Posted to the LispMe@YahooGroups.com list) Hello.

Let me start with a brief introduction. My name is Blake Winton, and I’ve owned a PalmPilot since back when they were called PalmPilots and made by USRobotics. I’ve been programming for them for years, mostly in C and C++, with brief excursions into Lua, Python, and Forth. My day job consists mainly of Java (J2EE), with some Python when I get the chance, and some JavaScript when I shouldn’t be using Python. On my off hours, I read a lot about other languages (recently Objective C, OCaml, and Ruby). Now I want to learn Scheme, and thought that LispMe would be a good way to do it. I’m finding some things are tripping me up, mainly due to my attempts to transfer my knowledge from other areas into LispMe. (One piece I miss in particular are something like Python’s List Comprehensions, which I believe they sole from Haskell.)

So, I’m going through SICP, but while I’m doing that, I thought I would try to do a "Real World" (tm) task, and write a program that drew the Serpinsky Triangle, using an iterative, random, approach, (Details available upon request,) and I’ve run into some small questions about best practices, or basically how to do some simple things. In return for this help, I’ll create a sort of Tutorial document for LispMe that will be able to help other people get up to speed. (If such a document already exists, please, someone, point me to it!)

So, here’s what I’ve got so far. It doesn’t work at all, but it’s starting to take shape.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
; Triangle
(define points
  #((80,10) (10,150) (150,150)))

(define (next-point p) (
  (vector-ref points
    (random (vector-length points)))
  ))

(define current-point '(80 80) )
(define (halfway a b) (/ (+ a b) 2))

And we’re done. Any comments on it, from spacing to indentation to whether I should use a vector or a list for the points themselves, would be greatly appreciated. If it matters, I plan on extending the point to include red, green, and blue data as well, possibly with accessors, looking something like this:

1
2
3
4
5
6
(define current-point '(80 80 255 0 0))
(define (x pt) (car pt))
(define (y pt) (cadr pt))
(define (r pt) (caddr pt))
(define (g pt) (cadddr pt))
(define (b pt) (caddddr pt))

Oh, and I suspect I’ll be blogging my progress at http://weblog.latte.ca/blake/tech/scheme/ (Nothing exists there at the moment, though. Give it time.)

Thanks,
Blake.

Installing DrProject.

Just because that would be too easy by itself, I'm going to follow the instructions for Cygwin, and we'll see what happens.

Okay, it's going fairly well so far...
And then I get to step 3:

Download, compile, and install sqlite from sources. Use version 3.3.5.
To compile it, I use "./configure", "make", "make install", but that gives me the following error:
$ make install
tclsh ./tclinstaller.tcl 3.3
can't read "env(DESTDIR)": no such variable
    while executing
"set LIBDIR $env(DESTDIR)[lindex $auto_path 0]"
    (file "./tclinstaller.tcl" line 10)
make: *** [tcl_install] Error 1

This page tells me to remove each occurance of "$(DESTDIR)" from Makefile, so I did, and it still didn't work, so I tried commenting out "HAVE_TCL = 1" and then it all seemed to work just fine.

Until I got to the line:

chmod +x /lib/python2.4/site-packages/pysqlite-2.2.2-py2.4-cygwin-1.5.19-i686.egg/pysqlite2/_pysqlite.dll
which failed, but it was easy enough to change it to:
chmod +x /lib/python2.4/site-packages/pysqlite-2.2.2-py2.4-cygwin-1.5.19-i686.egg/pysqlite2/_sqlite.dll
which worked.

Running

drproject-server --debug --port 8080 --auto-reload --create=/tmp/drproject
gave me the error:
drproject-server: error: --create option does not take a value
So I tried
drproject-server --debug --port 8080 --auto-reload --create
which said:
drproject-server: error: incorrect number of arguments
So I finally tried
drproject-server --debug --port 8080 --auto-reload --create /tmp/drproject
and it seemed good.

Finally, I ran

drproject-server --debug --port 8080 --auto-reload /tmp/drproject
And it was good...

So I created a script called "drproject-server-profile", to profile it, containing the following lines


#!/usr/bin/python
# EASY-INSTALL-ENTRY-SCRIPT: 'DrProject==1.0dev-r2084','console_scripts','drproject-server'
__requires__ = 'DrProject==1.0dev-r2084'
import sys
from pkg_resources import load_entry_point

import profile
profile.run("sys.exit(load_entry_point('DrProject==1.0dev-r2084', 'console_scripts', 'drproject-server')())", 'profile.tmp')
and here is the data!

DemoCamp 5!

I took a few notes at DemoCamp 5 last night, and thought I'ld throw them up on the web, in case anyone found them useful.

First, some notes on giving a good demo.
In no particular order:

  • Set your screensaver's timeout to something long, so that you aren't continually hitting the spacebar/moving the mouse.
  • Repeat the questions, so that people in the back can hear what was being asked.
  • Log on before connecting the video. I forget why, other than it looked a little more professional, perhaps. Maybe someone forgot their password, or mistyped their username.
  • Have someone type for you, so that you can concentrate on what you're saying, instead of trying to come up with fake data.
  • When the demo's run out of time, don't try to fit in just one more thing... Unless you have someone who can continue typing while you're answering questions. ;)

The next thing that struck me as sort of odd was that all the presentations were web-based. Isn't anyone working on a regular desktop program anymore?

Finally, I also had some specific comments for BlogMatrix, which I posted as a comment on David Janes' blog. (I've chatted with David over email a while ago, so I was paying particular attention to his demo.)

In other DemoCamp news, I got a shout-out from Greg Wilson, which was very gratifying, but I'm afraid I might have given him slightly the wrong impression. I suppose I do think that educators have a responsiblity to prepare students for the real world, but I don't think that it's the University-level educators who have that responsibility. I think that programming (by which I really mean logical thinking, but programming is one of the best ways I know of to teach it, since the results are very clearly right or wrong) should be one of the mandatory courses in high school. By the time you get to University, you should be learning stuff like Lisp/Scheme, or ML, or concurrency, or finite state machines. Stuff that won't help you get a job, but will hopefully help you do your job better, if only by expanding your mind, and giving you new approaches to solving problems, or new insights into what might be causing the problems in the first place. I think that Institutions of Higher Learning should be about Higher Learning, and leave the more vocational stuff to vocational schools. This is somewhat ironic, since I went to Waterloo for the co-op experience, one of the most vocational schools and programs out there.

It could be that I'm looking at this all wrong, and that universities are there to prepare you for a job, and then, once you're out in the Real World, you go to places like PyGTA, or DemoCamp, or even just watch some videos and join a mailing list about Scheme to do your real learning. Or maybe I just didn't follow the academic path far enough. When I left, I was really glad to get the hell out of there, but now that I've been in the workforce for a few years... Wait, 7 years? How did that happen? Anyways, now that I've been in the workforce, I'm thinking that I would like to go back and try to get my Masters, or even my PhD in Computer Science. At U of T, this time, since I far prefer living in Toronto to living in Waterloo.