I’ve had an actual data plan on my Rogers account for use with my Nokia N95 (as opposed to the prohibitively-expensive pay-as-you-go data use I had previously). The plan allows for 500MB of usage per month, and, truth be told, I had no idea whether this was enough or not.
I don’t do anything strange with the photo and data: I check email, update Twitter, use Google Maps, check in to Foursquare, etc. Here’s what the last month’s data usage looks like on the Rogers bill I received today:
So I’m only using about 10% of my 500MB monthly allowance, which surprised me. I’m ditching the N95 in favour of a Google Nexus One next week, so I’ll get a chance to see whether my usage habits on that new device cause me to use more or less data.
Now that Confederation Landing Park is again available to we in the neighbourhood after almost a month of being closed, Oliver and I were able last night to resume our nightly walk along the Charlottetown waterfront.
As it was a dreary, rainy day, we had the park pretty well to ourselves. As we walked around the park’s oval track, surveying the damage wrought the events of the past month, we came across a pile of assorted waste from the week’s filming of the Live with Regis and Kelly television program in the park:
The white stand made from pipe with the red arrow attached was used for the trivia game that starts every episode of the show: it had a large beach ball with the available prizes attached to it that was spun around by a volunteer from the audience.
In the blue barrel beside the pile we found the (now-deflated) beach balls that were thrown into the audience, and underneath them (yes, we were archaeological in our approach) we found a collection of cue cards from the show. Feeling a responsibility to Island historical documentation, we grabbed them all out of the trash, lined them up in the rain, and shot a photo of each one:
Boiled down to its most vapid like this, it’s a stark reminder of how, despite its entertaining qualities and the unquestionable benefits that accrued to Prince Edward Island tourism from the show’s location shoot, Regis and Kelly is essentially free of content of any sort.
I’ve been testing a Bluetooth discovery process in Casa Mia Café since Sunday as part of the build-out of my Customer + Bluetooth + Last.fm system, and I’ve learned some things:
- Over 3 days of scanning, 17 devices were detected in the café. As we’re not completely sure of the Bluetooth range in the Mac Mini doing the scanning, I don’t know whether this represents close to all of the discoverable devices or just those that were near that back of the café.
- Of those 17 devices, there were 5 Nokias, 4 Blackberrys, 4 Samsungs, 1 LG, 1 Sony Ericsson, 1 laptop, and 1 Google Nexus One (which I was beside when it was scanner, and which we purposefully put into “discovery” mode).
- It seems like iPhones and iPod Touches are never discoverable, which is why none of them show up, and the Nexus One (and maybe all Android devices?) are only discoverable for a limited period of time after you leave the settings screen.
- I physically saw half a dozen laptops in the café over the 3 days, only one of which was picked up by the scanner; I suspect that most laptops either don’t have Bluetooth, or have it turned off.
If Apple is leading the way [sic] by purposefully hobbling Bluetooth, and if other vendors follow suit, this doesn’t bode well for a system built on the ability to discover Bluetooth devices.
Today I’m thinking about the possibility of adding to toolkit by looking at grabbing logs from the wireless access point in the café to detect MAC addresses of devices, Plazes-style. This would allow me to increase the variety of devices that could be detected, including laptops.
One step further and I could use something like NoCatAuth to allow customers connecting to the café wireless to register their devices if they wanted.
Otherwise I’ve been dealing with issues of the Mac Mini losing contact with the Internet; originally I thought this was because it was going to sleep, but it now seems that maybe it’s a combination of a Python script that’s not tolerant of being offline and a wireless access point that’s flaky at times.
Update: it turned out that the Mac Mini was just fine, but it was being pummeled by Bluetooth pairing requests from the Pansonic 6441 cordless phone right beside it, which was causing things to fall apart. I had no idea that cordless phones were Bluetooth-capable. I solved the problem by making the Mac Mini non-discoverable.
Another Update: It turns out that I also needed to uncheck “Prompt for all incoming audio requests” on the Mac Mini’s Bluetooth preferences. If I don’t do this then after about 12 hours the computer completely locks up with hundreds of BlueoothUIServer processes.
Another Update: Even when I uncheck the “Prompt for all incoming audio requests” box, the Panasonic 6441 phone still keeps trying to pair. How do I prevent this?
Another Update: I’ve discovered, by trying to track down the source of the Bluetooth Device Address of the offending device, that it’s not the Panasonic cordless phone, but rather the Ingenico pay-at-table card processor that’s trying to pair with the Mac Mini. Hmmm.
Another Update: I spent some time with several different agents at Moneris, the provider of the pay-at-table card processor, the final conclusion being that there’s no way to prevent their Moneris 8200 terminal from attempting to pair with surrounding Bluetooth devices. Their only suggestions were to (a) turn off Bluetooth on the Mac Mini or (b) move the Mac Mini out of range of the payment terminal; neither of these will work in our situation, so I’m going to have to see if I can control this on the Mac Mini end.
Another Update: Okay, I think I’ve been able to work around this problem by sticking the following in the Bluetooth scanning script that’s run every minute:
killall BluetoothUIServer
This kills any Bluetooth pairing request dialogs that have popped up, rendering the issue moot. I think.
The Charlottetown Guardian released a new design for its website today. Here’s what it looked like before:
And here’s the new version:
Two new businesses have sprouted in Charlottetown this spring that might have escaped your notice.
Of course everyone already knows about Zen Sushi on Queen Street, in the former Just Juicin’ space. What you might not know is that, as of yesterday, they have a Zen Sushi Express cousin on Kent Street, between Piazza Joe’s and City Cab.
Zen Sushi Express is open daily from 10:00 a.m. to 6:00 p.m. and you can sit inside, take out, or call for delivery (892-4523). Here’s their menu:
And here’s my lunch:
Oliver, Catherine and I ate lunch their yesterday: Catherine and I each had the Sushi Combo A and Oliver had the Sushi Combo B. All of these were well-prepared and tasty, and the service was fine. As there’s only two intersections between our house and the new place, we’re considering beta-testing an “Oliver goes to pick up sushi for supper” program this summer.
The other business you might not have noticed, mostly because it’s outside of the normal traffic patterns of your everyday Charlottetowner, is Cottage Industry, on Grafton Street across from The Pilot House where Island Furriers used to be.
Cottage Industry sells furniture and related decor the likes of which (save for a brief shining moment when the Tim Banks-controlled Home Hardware first opened) Charlottetown has never seen before.
Which is to say, things like this:
In other words, more than just the usual La-Z-Boy and frumpy-gingham colonial-style furniture you find elsewhere. It’s not cheap, but it’s all solidly built and very comfortable. Think “IKEA sensibility, but built to last forever.” And somewhat less “1,000 year-old tree trunk crafted into a chaise lounge” than the (still wonderful nonetheless) furniture at The Dunes.
Both are welcome additions to the downtown community.
Back in the mists of time when Oliver was wee, we had an excellent run of babysitters. One of these was Emily Hanlin, an American expat who’d fallen for Prince Edward Island. Oliver met her for the first time at Kinder Music, and sometime thereafter we managed to become one of her babysitting clients.
Emily is the only babysitter to have arrived at the door with a full range of child enrichment materials, all wrapped up in a very Mary Poppins-like bag to boot, if memory serves. Oliver loved her, and she loved Oliver, and it was a very sad day when we learned that she was up and moving on (to Chicago, where I think she met Arthur Miller).
In the intervening years Emily’s moved about some more, and last summer she was married and settled down, as Emily describes it, in “Westford, Massachusetts on a 250 year-old farm with her husband, Eric, their dog, three cats and a flock of hens.”
This summer Emily’s returning to Prince Edward Island, to host a one week theatre camp for kids in Charlottetown. Here’s how she describes it:
I am so pleased to announce a project I have wanted to commit to since leaving PEI in 2004 is finally coming to fruition! I am excited to announce a partnership with Beaconsfield Historic House, one of my favorite spots on the Island. With BHH, I am presenting a summer theatre camp for kids, Monday-Friday, July 19-23, in Beaconsfield’s Carriage House. The camp is an afternoon camp from 1pm until 5pm and is for ages 8-12. The fee is $150 CDN with sibling discounts available.
For our first summer, I decided it would be fun to connect the theatre camp to the history of the house. I am currently working on an original comedy, Princess Louise Comes to Call, which draws upon the real-life visit of Princess Louise, Queen Victoria’s daughter, to the historic PEI home. The play includes a bit of time travel for two young volunteers at the museum. Not only do they get to meet Princess Louise, but also a host of other Island historic figures who join her as guests to a “fine” dinner party. Young thespians will learn about proper table manners and the etiquette of the 19th century – as well as learn about comedic timing and diction.
You can register for the camp online (there are still spaces available). I can’t imagine a better way to spend a week for a theatrical kid.
A few months ago Gordie and Janet phoned me up and invited me out to lunch: they were planning an extended trip to Europe with their two daughters, and wanted to poke me for advice on travel with kids. We had a nice chat, talking about everything from school work to SIM cards, and the more they talked, the more jealous I became. We’ve traveled, but never for such a long and indefinite period as they were planning.
And now they’re there. And, what’s more, all four of them are writing posts on a family travel blog. Not only can you learn lots of interesting things about Europe and families and travel in their blog, but you often get two or three perspectives on the same event from different members of the family.
So here’s Robin on their new Paris apartment:
The bed that Sarah and I got given is not a bed at all. It is a couch, a very small couch. It is supposed to pull out but this one; you just unfold the cushions and sleep on those. It is too small for two girls so I pulled the blanket off of Sarah and put it on the floor with a pillow.
Sarah did not wake up at all when I took her blanket so I got away with sleeping on a nice soft blanket. The blanket pattern is a tiger. It has orange and black stripes. The bed inside my parents’ room is, in fact, a bed—a reasonably hard bed, but a bed.
And here’s Gordie:
Here we sit in our Paris apartment. The apartment is quite small. There are three rooms: a bathroom, a bedroom, and (for lack of a better description) a multi-purpose room. The multi-purposes for the room include entrance, kitchen, dining room, and spare bedroom. The room is about 50 square feet. The bedroom is about the same size and the bathroom is about 12 square feet. Including the hallway, the apartment might be 150 square feet.
Gordie’s got the important stats, but, I gotta say, Robin does a better job at capturing the essence of the place.
I look forward to more tales of their adventures.
Those of you who have been reading since the Working for Free days will recall that presentation was anchored in this project for Casa Mia Café, an altruistically selfish attempt to ensure the success of the place that fed me coffee every morning.
Well, two years on and Casa Mia is still my coffee supplier, and I continue to use it as a playground for digital experiments.
My latest experiment started out with a strong aversion to Jesse Cook, an artist whose music, it seemed for awhile, was the only music Casa Mia ever played. I’m as much a lover of rhapsodic Canadian guitar as the next guy, but after 1,600 plays (there’s now evidence of this) I was ready to scream.
Which got me thinking: how could we make the café react automatically to the customers inside it at any point in time, and adjust the music playlist accordingly.
This week I’ve been working on an answer to this question. Here’s the working theory:
- Customer enters the café with a Bluetooth device in their pocket.
- The café’s music server, which is running a Bluetooth scanner, detects the presence of the device.
- If it’s a new device, never seen in the café before, a message is sent to it (at least for devices that have message-receiving capabilities) inviting the customer to register and associate their Last.fm account with their device’s address.
- If it’s a previously-seen device of someone who has registered, then the server finds their Last.fm address, and adds their musical tastes to the café’s playlist until they leave.
There are some technical bits that make this challenging.
The Bluetooth Bits
There’s not really such a thing as a “Bluetooth scanner,” at least not a friendly off-the-shelf application that you just install on a Mac. To the rescue comes LightBlue, a Python Bluetooth toolkit that lets me do neat stuff like:
# /usr/bin/python -Wignore Python 2.6.1 (r261:67515, Feb 11 2010, 00:51:29) [GCC 4.2.1 (Apple Inc. build 5646)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> import lightblue >>> lightblue.finddevices() [('00:1F:5D:39:75:16', u'ruk', 5898764)]
Which tells me “somewhere near this computer is a Bluetooth device with a device address of 00:1F:5D:39:75:16 that calls itself ruk. This happens to be my Nokia N95 mobile phone, which is sitting beside me as I type.
It’s not hard to imagine, with LightBlue in hand, how the “detects the presence of the device” part of this system works, then: just set up a Python script to run in the background and to report new Bluetooth devices as they appear.
The other Bluetooth challenge is in the sending of a message of invitation to newly-detected devices. There are lots of devices that support this, but also lots that don’t. For example, there’s no way, as near as I can tell, to push a Bluetooth message to an Apple iPhone or iPod Touch. Of course for any device there’s the issue of Bluetooth being set off, or set to non-discoverable; can’t work around that, other than by letting customers who want to play know what they need to do.
The Music Bits
The music part of the system is a little more challenging: Last.fm isn’t really built for this sort of thing. Indeed once you start scratching into the Last.fm API, you realize that at every corner there’s another roadblock, part of Last.fm’s “we can’t actually let people listen to the exact track they want to listen to” licensing model.
For example, you might think a simple call to user.GetTopTracks for someone who’s just walked into the door would be a good place to start: just grab their favourite songs and add them to the café’s playlist using playlist.addTrack and then remove the tracks once they leave the café. Except that, alas, there’s no playlist.removeTrack method to allow the removal to happen. And the radio.tune method doesn’t actually support streaming playlists at all, only artists, users, and tags.
So, what to do? Well, my working model at this point is to variously dip into each present-user’s music by simply directly the Last.fm scrobbler to play Last.fm-style URLs like lastfm://user/reinvented/library (which, if you’re a Last.fm subscriber and have the scrobbler installed, should play my library for you if you click on it).
So, from a PHP script, I fade down the music server’s volume (it happens to be a Mac Mini, so I can do this using AppleScript):
function volumeFadeDown() { for ($volume = 7 ; $volume >= 0 ; $volume = $volume - 0.5) { system("osascript -e 'set volume $volume'"); } }
Then I “tune in” a given customer’s playlist:
system("osascript -e \"open location \\\"lastfm://user/$username/library/\\\"\"");
Now that music is streaming, I wait some amount of time, likely sensitive to the number of playlists I’m juggling, and then segue to the next playlist.
Because it’s a stream, not tracks that I’m playing, the downside of this approach is that I’ll cut track off in mid-stream; I might be able to mitigate this somewhat by making calls to track.getInfo to get duration information for each currently-playing track, and then do the volume fade only once the end of the track was nearing.
None of this is particularly elegant, and it would be nice to have a more flexible track streaming service available, at cost, to allow to to either stream specific tracks or at least to add to and subtract from aggregate playlists.
I welcome any guidance on other approaches to this with Last.fm (or with alternatives to Last.fm).
Where I’m At
I’ve made good progress over the last few days with putting the pieces of this system together.
Casa Mia now has a Last.fm account, back-filled with 30,000 tracks worth of play data from iTunes. And because the Windows machine that’s playing music in the café is scrobbling everything it plays, we can now publish this information using the Last.fm API. So if you visit casamiacafe.ca, you’ll see the playlist in the right sidebar, and if you visit music.casamiacafe.ca, you’ll get a mobile-optimized version of the same.
There’s a headless Mac Mini sitting in Casa Mia running a modified version of haraldscan (a Pyhton script that’s built on LightBlue); it’s logging every Bluetooth device it sees, and we’ll let it run for a few days to get a sense of what sort of devices are walking into the café and what their capabilities are.
On the music side, I’ve cobbled together the PHP script outlined above, and have been running it here in the office with some dummy presence data fed into it to rotate through various playlists. The only dealbreaker I’ve encountered so far is the tendency of the Last.fm Mac scrobbler to stop working from time to time, reporting in a dialog box that it can’t stream; that’s difficult to deal with on a headless Mac where the dialog can’t be seen. So I’m looking at alternatives like lastfm-cli, a command-line client for Last.fm, that might allow me to stop using the GUI client altogether.
More than music…
There’s more to this than music, of course. I’ve already got the Bluetooth scanner set up to automatically check me in to Foursquare every time I stop by the café; there’s no reason why I couldn’t extend this to anyone who wanted to supply their Foursquare credentials.
Further on down the line, there’s all sorts of “automatically bring me a macchiato whenever I walk in the door” magic brewing around my head too.
As always, thoughts welcome.
Students of Canadian history will recall two men named John Hamilton Gray being Fathers of Confederation, one from Prince Edward Island and the other from New Brunswick.
So, a simple style question: when referring to both in a sentence, would you write “Johns Hamilton Gray” or “John Hamilton Grays”? Like:
On Monday night we had the Sir John A. Macdonald and the Johns Hamilton Gray over for supper.
Please advise.
Once again this year I’ve taken the official Eastern School District School Calendar and created a set of public calendar files. This is a little early to be doing “back to school” things, I admit, but I figure it’s better to get them out of the way now. Here you go: