Monday, August 04, 2008

Privacy policy ignored at Domino's Pizza?

Here's what Domino's Pizza says in its privacy policy:

Only employees and agents of Domino's Pizza of Canada Ltd. who need to access your personal information in the course of their duties will have access to it.

And here's the customer-facing monitor (visible from outside, even) that I found when picking up a pizza tonight:



I emailed the privacy manager to find out if this was just a mistake by a lone franchisee, but the message bounced with a "user unknown" error.



Read the full article

Saturday, July 12, 2008

Map of Rogers-branded hotspots for iPhone use

I wasn't going to buy an iPhone, but the last-minute data plan price reduction was just enough to change my mind. (It still feels like a deal with the devil of course...)

The data plan includes free wifi access at any Rogers-branded hotspot, so I decided to map out the locations. The address of each hotspot is provided by this website but requires processing in order to be usable by Google Maps.

Process

- Downloaded the XLS version of the hotspot list
- Converted it to CSV format and imported it into the database
- Ran a modified version of this PHP script from Google that geocodes addresses into latitudes and longitudes
- Wrote a PHP script that exports the database to KML format in a few different configurations

And presto! Here they are, viewed in Google Maps:
- Rogers Wireless hotspots (352 entries, 142 KB)
- Bell hotspots (704 entries, 292 KB)
- Telus Mobility hotspots (127 entries, 54 KB)
- All hotspots (1183 entries, 486 KB)

If you want to load the entries in Google Earth or another mapping tool, you can grab the raw KML files here: http://www.techknight.com/kml

Update

I got someone with an iPhone to try loading the maps on their device. (Mine won't arrive until next week.) It seems that KML support is spotty at best... In Safari the map loaded but wasn't interactive, while the actual Google Maps application could not load an external resource. So for now these are useful only when you're at your PC, about to leave home. :)

Screenshots





Issues

A few problems cropped up while geocoding. Addresses that returned french accents in the XML caused simplexml_load_string() to error out with "Entity: line 1: parser error : Input is not proper UTF-8". A forum post here had a solution using iconv().

Another problem was that some addresses in the original file are out of date. For example, this entry for Emerald Hills Golf Club:

14001 Concession #5, Stouffville, ON

Doing a search for emerald hills golf club ontario, it looks like "Concession #5" was renamed to "Warden Avenue", which causes the lookup to fail.

Also, there are some perfectly valid entries that show up in Google Maps but return a GGeoStatusCode of G_GEO_UNKNOWN_ADDRESS (602) when querying for them using the geocoding API. Examples:

Suite 220, 10610 Airport Drive, Grande Prairie, AB
1 First Canadian Place, Toronto, ON
7585 Market Crossing, Burnaby, BC

I'm guessing that the database used by the geocoding API differs from the database used by Google Maps proper. Other addresses in the original list are simply misspelled. Anyway, I thought at first that I would manually get co-ordinates for such entries, but there are 151 of them so I'm going to pass on that. :) (I did do some manual updates using this tool for the few downtown Toronto locations that didn't work though.)

I'll try to get in touch with whoever is in charge of updates at canadianhotspot.ca... Maybe if I give them a list of the non-working entries they can fix them.



Read the full article

Monday, June 16, 2008

Six-eyed Root Horse (Spore creature)

Oh god, you can keep adding eyes and mouths... I'm really curious to see how the full Spore game will stack up against the Creature Creator portion. Releasing that bit early for ten bucks might be giving too much of the full product away.




Read the full article

Friday, June 06, 2008

ClrTyp 1.0 - Disables ClearType when taking screenshots

At the request of a friend, I made a utility last night that temporarily disables ClearType when a screenshot is made via PrtScr or Alt+PrtScr.

ClrTyp 1.0

Usage:
Extract zip file to any folder and run ClrTyp.exe. An icon will appear in the systray. As long as ClrTyp is running, any screenshots made with your Print Screen key will have ClearType disabled.

Download:
clrtyp_x86.zip 32-bit version
clrtype_x64.zip 64-bit version

Requirements:
- Microsoft .NET Framework 2.0 must be installed.



Read the full article

Monday, June 02, 2008

How to simulate Valve's Steam Cloud with Live Mesh

Valve recently announced that their Steamworks SDK would include a feature called Steam Cloud in a future update. What Steam Cloud does is implement my own most-wanted feature - a way to keep saved games in sync across multiple PCs. (At one point I even thought I would write my own software, registering steamsync.com.)

In any event, it's unlikely that Steam Cloud will be back-ported to many (if any) existing titles on Steam. That means I still need a solution for keeping my Peggle save file in sync between my desktop and laptops. :)

So if you're a Live Mesh user, here's how keep some of your PopCap Games save files in sync on Windows Vista:

GameEffective Mesh Folder
Amazing Adventures: The Lost Tomb%ProgramData%\SteamPopCapv1005
Bookworm Deluxe%ProgramData%\Steam
Bookworm Adventures Deluxe%ProgramData%\Steam
Mystery P.I. - The Lottery Ticket%ProgramData%\SpinTop Games
Mystery P.I. - The Vegas Heist%ProgramData%\SpinTop Games
Peggle Deluxe%ProgramData%\Steam
Peggle Extreme%ProgramData%\Steam


Why "Effective"? Well, you could mesh individual save folders but I prefer to keep things simple. It doesn't hurt if one of the meshed devices doesn't have all of the same games installed as the others.




Read the full article

Tuesday, May 13, 2008

Subway buttons

I got my subway buttons from Spacing the other day:



These are my "home stations" since moving back to Toronto in 1997.



Read the full article

Thursday, May 08, 2008

Digital Comic Viewer part 2

I'd planned to pay for the feature I wanted in SWF To Image, but it turned out to already exist! There's a method called LoadFromBinaryImage that is intended to process FlashMovie objects created by SWF Scout (a commercial SWF generation library), but I can throw my byte array at it like this: (hIssueData is a hashmap, and imageX_lfile is the byte array for the modified lettering file of a specific page)

object objSwf = hIssueData["image" + x.ToString() + "_lfile"];
renderFlash.LoadFromBinaryImage(ref objSwf, "http://www.google.com");


For some reason LoadFromBinaryImage requires a non-empty string as second parameter called BaseURL... I guess it gets used if there are external resources called from the SWF. Anyway, I can then take renderFlash.BinaryImage and pass it through the ImageMagick routines to end up with the final combined image.

The end result is that I've now got a working viewer that writes no assets to disk. However I've still got to do the full-screen mode, keyboard navigation, and a better way of selecting comics before I do a release. Due to Grand Theft Auto IV that could mean at least a week. :)



Read the full article