Two Playlists: Summer Tunes

The girls are six and nine now, and they are starting to hear pop music at camp and at their friends houses. When we were in Saskatchewan they asked me to make mix CDs for them, and they both requested a few songs. I padded their choices with a few tunes of my own, and here's what they ended up with:

Delphine's 2012 Summer Mix CD
"Call Me Maybe", Carly Rae Jepsen
"Black Horse & Cherry Tree", K.T. Tunstall
"Mama Said", The Shirelles
Marmoset!
"Drinking Games", Library Voices
CBC Saskatchewan is really great about playing local music on their morning show, and we heard this while we were hanging out in my mum's room having our morning tea.
"Pumped Up Kicks" by Foster the People
I asked Twitter what terrible pop songs the kids were listening to these days, and the lovely @LadySnarksalot sent me her playlist. This is one of her tunes.
"Nothing On You" by B.o.B. featuring Bruno Mars
"Firework" by Katy Perry
Delphine has this song memorized and can sing it while performing a dance of her own creation.
"Brokenhearted" by Karmin
"Born This Way" by Lady Gaga
"Waka Waka (This Time for Africa)" by Shakira
"On The Floor" by Jennifer Lopez
"What Makes You Beautiful" by One Direction
"1 2 3 4" by Feist
"Glad You Came" by The Wanted
"I'm Yours" by Jason Mraz
This is one of my regular karaoke numbers.
"Overworld Day" by Scott Lloyd Shelly
This is from Terraria.
Cordelia's 2012 Summer Mix CD
"Don't Worry, Be Happy" by Bobby McFerrin
"Wavin' Flag" by K'naan
"Born This Way" by Lady Gaga
"Pumped Up Kicks" by Foster the People
"Firework" by Katy Perry
"Domino" by Jessie J
"Just a Girl" by No Doubt
"Waka Waka (This Time for Africa)" by Shakira
"For Your Entertainment" by Adam Lambert
"Where Is The Love" by Black Eyed Peas
"If I Had A Million Dollars" by Barenaked Ladies
The classics!
"Call Me Maybe" by Carly Rae Jepsen
"Mushaboom" by Feist

Pushing code to a remote server the volo way.

The side-project I’m working on is coming along nicely, and so I figured it was time to let other people see it. Now, I could just have everyone huddle around my screen, but since many of the people who would be interested aren’t in the same city (or even same timezone) as I am, that wouldn’t work out so well. We tried screen- sharing, but a lot of what’s being worked on is animation, and the frame-rates of the screen-sharing application we were using weren’t up to the task. To get around that, I could have recorded a video, but since a lot of the value of a prototype like this is being able to play around with it, that’s also not a great solution. So, obviously, the best thing to do would be to put it on a publicly available server, and let people run it in their own web browser, whenever they wanted!

Now, I’m running a server or two that I could put it up on, but since the project is related to Mozilla, and since Mozilla offers some personal webspace on one of their servers, I figured I might as well put it up there. :)

So, to make it easy for me to remember to build and upload the code (and to prevent me from trying to figure out all the correct options to rsync every time I wanted to upload the code), I took a couple of minutes to add a command to my volofile, which lets me merely type volo deploy, and have it optimize the code, and copy only the changed files to the remote server.

X-Tag: or how to cut your html in half by adding 28 lines of Javascript…

As a side-project, I’ve been working on a prototype which is heavily based on a demo page from Stephen Horlander. Now, that page is pretty amazing, but if you look at the source (using command-u or control-u in Firefox, and command-alt-u or control-alt-u in Chrome), you’ll see a lot of code that looks like this:

<div class="menuPanelButton subscribeButton">
  <div class="button"></div>
  <div class="label">Subscribe</div>
</div>

and:

<div class="customizeToolbarItem">
  <div class="customizeToolbarItemIcon share"></div>
  <div class="customizeToolbarItemLabel">Share</div>
</div>

Now, one or two of those would be fine, but when we get into more than that, the repetition really starts to bug me, and I think “Wouldn’t it be better if I could just write stuff like:

<panel-button type="subscribe">Subscribe</panel-button>
…
<toolbar-item type="share">Share</toolbar-item>

instead?” And it turns out I can, using a new library called x-tag! The first thing I need to do is register the new tags I’ll be using. That’s done with code like this:

// These first two lines are here because I’m using require.js, which I’ll
// talk about in a future blog post…
define(function (require) {
  require(["jquery", "x-tag"], function($, xtag) {

    // And this is the meat of the functionality.
    // First, we’ll register the new "panel-button" tag.
    xtag.register("panel-button", {
      onCreate: function(){
        var self = $(this);
        // When the tag is first seen, make the innerHTML be this stuff below.
        self.html("<div class='menuPanelButton " + self.attr("type") + "'>" +
                    "<img src='images/button-" + self.attr("type") + ".png'" +
                    "     class='button'>" +
                    "<div class='label'>" + self.text() + "</div>" + 
                  "</div>");
      },
    });

    // And then, we’ll register the new "toolbar-item" tag.
    xtag.register("toolbar-item", {
      onCreate: function(){
        var self = $(this);
        // We could also replace this element with the html below, but I
        // haven’t done that here because I haven’t needed to yet.
        self.html("<div class='customizeToolbarItem'>" +
                    "<div class='customizeToolbarItemIcon " + (self.attr("type") || "") + "'></div>" +
                    "<div class='customizeToolbarItemLabel'>" + self.text() + "</div>" +
                  "</div>");
      },
    });

  });
});

The second step is to replace all the old html with the new tags. (I did that, too, of course.) And there we go. That’s it. In the file I was modifying, the combination of that and moving the javascript out into a separate file took the html from 275 lines down to 146 lines, and let me more easily change the buttons around, and add new ones. I call that a win, and from now on, whenever I see large blocks of repeated html, I’m going to be seriously tempted to switch them to an x-tag!

One caveat I will mention is that in my first attempt, I tried to use both the content property, and the onCreate method, and that totally didn’t work, since the content would be replaced by the value of the content property long before I had a chance to muck around with it in the onCreate. So in the future, I think I’ll just jump straight into using the onCreate method, since it’s not that much harder.

Requiring jQuery UI.

Yesterday afternoon, I watched a video from James Long about Mortar, which is a template for making HTML 5 Open Web Apps. Now, coincidentally, I’m starting a new project (in my spare time, obviously, since it’s a Sunday), and while it’s not an Open Web App, I saw no reason not to use the same tools they were using.

Of course, since nothing’s easy, I ran into a problem pretty quickly. My problem was that every time I tried to require("jquery-ui");, I got an error of “ReferenceError: jQuery is not defined”. There wasn’t a lot of information about how to fix it, so after most of an afternoon mucking around, I finally came up with something that seems to work, and thought I would post it.

  1. Go into your www/js/lib directory.
  2. curl -O https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.18/jquery-ui.js
  3. Edit the jquery-ui.js file. At the top add the line define(["jquery"], function (jQuery) {, and at the bottom, add the line });.
  4. That’s it. From there you should be good to go!

Now, I suspect there’s a better way to do this, and hopefully James or Bryan will jump in the comments and tell me what it is, but for now, at least this works.

Many Things To Do: A Plan

I was recently offered the opportunity to work on a very cool project. At the moment I'm finishing up AOSA and working on another book, plus I am taking a six week online course, but this new project didn't start until late summer, so I agreed.

Or so I thought. There was some confusion on my part, and as it turns out, the new project starts right away. There's no way I want to pass up this opportunity, though, so I'm going to have to squeeze some more hours out of my day. Somehow.

My first intention is to spend the first part of the work day on billable work. It sounds dumb, but I have so many other things to do — answering email, administration, networking, blog posts, AOSA, volunteer work for the girls' school, the course, and household jobs like signing the girls up for things — that some days I don't do any billable work at all. As a result my projects drag on and I feel like a dud.

My second intention is to wake up at 6:00 every day. Mondays, Wednesdays and Fridays I will go straight to the gym so I can work out before breakfast; Tuesdays and Thursdays I will do housework and household admin tasks, so they don't eat into my working day. That means I have to head to bed at 10:15 to be asleep by 10:45. (Seven hours and fifteen minutes seems to be enough sleep.) I hope I will settle in to that sleep cycle so that I wake up early on the weekends, too; that time I will use to read!

My third intention is to finish the AOSA project in one fell swoop. I'm waiting on a volunteer to create the epub (thank you!) and once that's done I will set aside a day or two to finish all the little admin and website jobs which I could otherwise safely (but guiltily) ignore forever.

And finally I have a bad habit of half-watching TV, half-working in the evenings. I hope I will be more effective with this new schedule and won't need to work in the evenings. If there's something on I actually want to watch, I intend to set aside other things and watch it (!); if I'm just keeping Blake company while he watches something I'm not so interested in, I will work on personal or family stuff.

I spend a lot of time trying to figure out how to fit all the things I want to do into my day (and cursing my excessive need for sleep.) I'm optimistic about this plan; it seems both doable and effective.

(Check it out: no sooner did I post this than I came across this book about what successful people do before breakfast.)

The Victoria Day Long Weekend, 2012

The Victoria Day long weekend took me by surprise this year — I didn't realize it was a long weekend until last Thursday. However, I had planned to do the thing that every other Canadian with a yard does this weekend: garden.

Saturday morning Delphine and I had decided to go yard saleing. Our original plan was to take our bikes, but then I realized that Blake goes spinning on Saturday morning, so we would have to take Cordelia with us. She still hasn't learned how to ride a bike (and seems to be in no hurry to) so that meant we had to walk.

Noramlly that would have been fine because there are usually plenty of yard sales within walking distance, but of course it's the long weekend. We only found one sale, and it didn't open until 9:00 (even though everyone knows that the universal standard yard sale starting time is 8:00). So we walked over to Bayview instead, where nothing was open except bakeries and cafes. However, on the way home someone had curbed a small collection of tiny wooden painted cats — exactly the kind of thing the girls were looking for. So they got what they wanted, and we got to keep all our money.

Delphine had her piano lesson at 10:00, and then we all went to the newly-opened Mount Pleasant outpost of Hazel's Diner. We have been diner-less since Diner 55 on Bayview closed, so we were ridiculously excited to go to Hazel's. There weren't many people there, what with it being the long weekend, but we saw two other Cody families — I think this location will do well. The food was good (not like it's hard to screw up a diner breakfast, unless you try and make it vegan or something) and I like the look of their lunch selection, too.

After Hazel's we headed home to do our homeowner penance: gardening. The girls and I had shopped for soil and plants after school on Friday (on Baba's advice, to beat the crowds and get the best selection). So while Delphine planted her planter in the front — some alliums (I think, or something similar), English daisies and sweet alyssum — Blake trimmed the hedge and I edged the "lawn". Cordelia did odd jobs like picking up twigs and fetching stuff. Then Blake mowed and Delphine weeded the strip where the creeping jenny is supposed to grow.

Then we all moved to the back where Cordelia and I planted our planters. I bought three fabric planters for our deck. I much prefer to plant planters than try and grow things in the garden, which I find anarchic and upsetting. Cordelia was assigned one fabric planter, Blake was assigned two, and I got the two wooden planters that match the deck.

Cordelia planted a geranium (red), two miniature roses (red and pink) and a gerbera daisy (yellow). I added a red geranium and a white callibrachoa to a planter which is playing host to a sage plant I put in three years ago which refuses to die and in fact grows bigger and stronger every year. In the other planter I have two geraniums (fuchsia and red), a yellow callibrachoa, a firewitch Dianthus ("Feuerhexe", because everything sounds cooler in German) and some other things which weren't labelled — I think they're also pinks. I don't believe in colour-coordinated planting.

Blake gets to plant the other two fabric planters — he wants to grow tomatoes and basil — but he hasn't bought the stuff yet.

That was the easy part. By that time the kids were sick of gardening (okay, so was I) so they went to Ursa's place to play in the sprinkler while I tackled the rest of the garden — the anarchic bit — and Blake made pizza dough.

When we moved in to this house the garden was a standard garden with recognizable beds and a bit of lawn. Since then the lawn and the beds have kind of melded together, with lots of weeds to add colour and texture. My gardening consists of weed whacking twice a year to keep the weeds and overgrown lawn below knee height.

This time I thought, since it was so early in the year, I would be able to mow it with the push mower. But we've had such a ridiculously early and warm spring that the lawn was a foot tall, and just folded over and laughed. I much prefer violets and creeping charlie to lawn: they only grow a few inches high no matter how long you leave them, and when you do mow them they send up lovely purple and green confetti.

So I fought with the grass, cussing and sweating, until I had tackled most of the yard. It looks at least 78% less hill-billy-ish now. By then Blake, my very bestest husband ever, had brought me a Frappuccino, so I got to sit on the deck and enjoy my non-embarrassing back yard.

After a delicious dinner of pizza, made by Blake and Delphine, the kids took a bath and were off to bed at a reasonable hour.

Sunday morning the girls have swimming lessons at a local high school. The lessons are an hour, so I get to sit up in the gallery and chill out, or this week, work on the AOSA website.

After swimming we hit Subway for lunch (having spent almost all our family fun money at Hazel's) and then went to Boardsports to get Delphine a helmet to go with her new skateboard. She wanted a pink helmet, but they only had extra-small in pink so she chose a gorgeous matte grass-green one instead. Then we walked home; Cordelia was exhausted halfway home — normally she has energy to spare, but she was sick last week and it's still slowing her down.

So in the afternoon we chilled out on the couch and watched a Mythbusters — the one with the explosions and shooting. And then Baba and Zaida's for barbequed steaks and playing in Auntie Morgan's wading pool.

On Monday we went for a hike. I like to take Delphine out in nature sometimes, because it recharges her (and me, too). Toronto is great for that because there are little bits of nature all over the place, so you can have, if not the best of both urban and country life, at least a taste of nature in the city.

We've done the walk down to the Brickworks, and we've walked from Yonge and Lawrence to Bayview at Sunnybrook Hospital. I wanted to do something new this time. I thought about Leslie Spit, but that takes too long to get to — I wanted this to be a morning hike so the girls could play with Ursa in the afternoon. I thought about Crother's Woods, but it's a bit of a pain to get to. There are two bus routes which access it, but neither of them are near our place. So finally we decided to walk from Sunnybrook Hospital to the Ontario Science Centre.

Sunnybrook is a short bus ride from our house, so we were there before ten. It was a nice hike, but too much walking on paved paths through parks for me. I like hikes through the woods. There were some trails through the woods which ran parallel to the park paths, though, so we got some quality nature hiking in. I think we went too fast; there are so many interesting things to look at in the woods if you slow down and pay attention. But as it was we saw a woodpecker, a nuthatch, baby geese, and a toad, and lots of cool fungus. Also far too much garlic mustard.

Our destination was the Ontario Science Centre, and I can't think of a better place to end a hike. We had lunch (fish and chips for the girls, chicken satay on a pita for me and jerk pork for Blake, then ice creams all 'round) and checked out the circus exhibit before catching the bus home.

Then we sent the girls off to Ursa's and now Blake's doing I-don't-know-what while I sit on the deck writing this. Tonight we are going to a local street party for hot dogs and fireworks. Not bad for a long weekend I didn't even know was coming.

Adventures In Giftedness: Chapter 1 of ???

Back in November I got a call from one of the special education teachers at the school — Delphine's teacher this year and her grade two teacher had both flagged her to be assessed for the gifted program.

There's no gifted program at the girls' school — the program for gifted kids is hosted at another school, so attending would require a daily bus ride. The special ed teacher said that Delphine was eligible for the gifted assessment, but that if we wouldn't consider sending her to the gifted program we shouldn't have her assessed, since the assessment is "resource-intensive".

We really like our neighbourhood school, Delphine loves her friends, and she gets carsick, so I declined the assessment.

I had heard from a friend who works for the school board that if your child is assessed as gifted you can get an IEP (individual education plan), which seemed to be the best solution. An IEP provides specific guidance to the classroom teacher, so Delphine could stay at her school while still getting the extra enrichment she needs to thrive.

I've been talking with Delphine's teacher about this all year, and a few weeks ago she finally arranged a team meeting to discuss Delphine's case. The team meeting was supposed to involve us, Delphine's teacher, the principal and vice-principal, the special ed teacher, and a psychologist from the school board. That seemed like a bit of overkill to me, and apparently everyone else agreed because only the vice principal, a special ed teacher and Delphine's classroom teacher ended up attending.

I wasn't sure what would come of this meeting; I wanted to get the lay of the land, see what our options were, and talk about an IEP.

The IEP idea was shot down immediately. Apparently gifted students used to be eligible for IEPs, but no longer. That leaves the bus-in gifted program, or, as the special ed teacher said, we can "cross our fingers" and "hope" that next year Delphine gets a teacher who understands the needs of gifted children.

I don't know how parents of other kids with special needs would feel if their team meeting included the words "cross our fingers" and "hope", but I'm not particularly happy about it. It's as irresponsible to neglect gifted kids as it is to neglect kids with other special needs.

I'm not sure what our next move is. I'm reading up on gifted children because I'm woefully uneducated in this matter, so hopefully next time I meet with the "team" I'll be able to advocate more intelligently for my girl. We might consider the bus-in program, since Delphine's very best friend is thinking about going to another school for Extended French, which releases one of her ties to the neighbourhood school. (At least we can visit the gifted program so Delphine has an idea of the possibilities.) We're contemplating other specialised programs, like the TDSB Vocal Academy; that would be valuable and enriching in some ways but still wouldn't directly address Delphine's needs as a gifted learner.

This isn't one of those satisfying blog posts with a useful conclusion. I have no idea where we're going from here, I just know I'm not satisfied with the path we're on.

Some Shoes I Want

I need some grown-up shoes. I have sneakers and Docs and Blundstones but I don't have anything medium-nice to wear with skirts or to dress up a pair of pants.

The Walking on a Cloud catalogue came today; these are the shoes I cut out to pin up in my locker:






I might even buy a pair.

A Night at the Opera: A Florentine Tragedy and Gianni Schicchi

Last night Delphine and I went to the opera. This March Break Delphine attended Opera Camp at the COC, and one of the perks was a pair of tickets to the dress rehearsal of the opera she studied at camp, Puccini's Gianni Schicchi. It's an opera in one act, and the other half of the bill was Alexander Zemlinsky's A Florentine Tragedy.

The Zemlinsky was first, which put a bit of a spanner into our plan to leave at intermission in case of extreme boredom or fatigue. Fortunately there was neither, despite A Florentine Tragedy being a bit, um, challenging.

Delphine and I read the synopses over before the show and decided A Florentine Tragedy sounded more like a comedy. A merchant walks in on his wife and her lover. (Delphine says "boyfriend".) The merchant decides the wife isn't really having an affair, so he tries to sell the other man some merchandise. The boyfriend says sure, he'll buy it and then offers the merchant even more money. The merchant says the boyfriend can have the whole house! The boyfriend says he wants the wife! The man says his wife is only good for housework, and then tells her to sew something! (Actually spin, but Delphine thought sew.) The men drink wine and then fight, and the man kills the boyfriend. The wife says, "I didn't realize you were so strong!", and the man says, "I didn't realize you were so beautiful!" Their love is renewed!

(It makes much more sense now that I know it's based on a play by Oscar Wilde.)

After we had a giggle at the synopsis we watched the real thing. Delphine is very attentive at musical performances, and she was rapt through the whole show — except at the end with the fighting, when she "shut up", as she calls it: closed her eyes and blocked her ears.

As I said, it was pretty challenging: discordant and free of any melody to speak of, grim and dark. But we've been going to Music and Truffles for a few years, and they're not shy about throwing all kinds of crazy music at kids; Delphine doesn't seem to mind it. The direction and staging was interesting — the acting was stylized and melodramatic, with many poses being struck. At several points the performers created dramatic shadows and silhouettes.

After the show ("That was creepy.") we met up with Tanya and Ursa and explored the Four Seasons Centre. We asked the girls if they wanted to stay for the second show, and there was jumping and glee.

Gianni Schicchi was entirely opposite to A Florentine Tragedy: Italian, not German; sunny, not dark; comic, not tragic; a cast of many compared with a cast of three; natural rather than melodramatic acting. It was a perfect double-bill for the circumstances: if the girls never go to another opera they will have a pretty good idea of what opera is about.

The direction for Schicchi was great — broad without being ridiculous. Special credit goes to the supernumary playing Buoso Donati, who had to die in the first few minutes of the opera and then be manipulated for the rest of the show, ultimately being wrapped up and folded into a sofa bed.

Also in the opera were Simone Osborne playing Lauretta, who was adorable (and sung beautifully) and Peter McGillivray as Marco. He's performed with my choir a couple of times and is also great. I also enjoyed the performance of Marco's wife, La Ciesca, by Rihab Chaieb. And everyone else was really good, too. (Not that I'm a connoisseur — I'm pretty happy as long as no-one goes flat or falls off the stage.)

The show ended around 10:00 and we were home by 11:00, which is the latest Delphine has ever been up, ever. She was hungry (if you stay up late enough you get hungry all over again!) so we had a piece of toast and went off to bed, full of the satisfaction of an adventure successfully completed.

Adventures in Mail Servers (or, how I wasted my Sunday afternoon)

I think what I want is pretty simple, or at least, reasonably common. I’m just looking for a couple of programs.

An SMTP server which will accept mail for the accounts at latte.ca, and deliver it to a Maildir of my choosing, and let me send mail through it if, and only if, I’ve logged in with the password to that account. (Being able to define a few aliases would also be nice.)

And an IMAP server which will expose the previously-mentioned Maildir, after I’ve logged in with the password to that account.

And yet, every time I try to set that up, something completely falls over for no particularly understandable reason, and I end up wasting an afternoon (or more) of my life. I had hoped this time would be different, since I decided not to install and configure everything myself, but instead bought a copy of OS X Lion Server which was supposed to do all the hard work for me. I’m not going to enumerate all the problems I ran into, but I will say that I still haven’t managed to get there. I’m just done for tonight.

Anyways, if anyone reading this has a working setup that meets the requirements (and the added requirement of needing to use Dovecot and Postfix, since those are what’s installed), I would love to get a copy of their config files. And in the meantime, I might seriously look into getting a refund for Lion Server, given how badly it’s failed me. :P