Monday, December 17, 2007

Zunior.com's Boxing Day Sale

Zunior.com, for whom I work producing the Zunior.com Podcast, is starting what I hope becomes a tradition for them: The Boxing Day Sale. I know Boxing Day may be a new and unfamiliar concept to those of you south of the border, but the Canadian Boxing Day sale is like the American Black Friday.

The long and the short of it is that on December 26th, 2007, you can pick up selected albums on Zunior for only $4.44. That's half price, w00t!

Saturday, November 17, 2007

Score two for big box customer service

I'm sure that enough people write daily in their blogs about the horrible experiences they've had with various customer service organizations. I'm going to tell you about two great experiences I had just today. Two "big box" stores even. Aren't we supposed to be going to smaller, mom & pop shops to receive better service? I don't know if I could have received better service than I got today from Staples and Home Depot.

Part 1: Staples

Recently, I've been purging. Purging junk. Purging junk from my life that I've held onto for whatever reason; probably because I just had space to do it. Currently in my hallway, there are about 8 garbage bags full of crap that I'm throwing away. Don't worry, I gave all the clothes that were fit to give away to Big Brothers/Big Sisters, and I'm recycling all my cardboard boxes, so all you hippies don't give me any grief. During this process, I've come across various personal documents that I felt should be shredded rather than just thrown away. Well, yesterday my shredder decided to give up the ghost. There was an audible pop, the lights dimmed for a split second, and my shredder had ceased to shred. And it would shred no more. I had owned it for almost a year, I thought, but I wasn't positive. I had shredded the receipt to test it when I first got it, so I knew that was out of the question. Luckily, it was a Staples branded appliance, so I thought I would take my chances in seeing if they'd exchange it or replace it.

Today, I carted it back over to the store in Bayers Lake, fully expecting to have to argue about this in order to get it exchanged. I walked over to the customer service desk and explained the situation, my shredder had simply stopped working. The manager of the store happened to be nearby when I was talking to the girl serving me, and I thought he was going to start making things more difficult, but he didn't even ask for my receipt or credit card or anything, he just walked over, grabbed a brand new one, and I was out of the store within 5 minutes of walking in. It was one of the most pleasant customer service experiences I have ever had.


Part 2: Home Depot

One of the other ways I'm trying to improve things is by using CFL (compact fluorescent light) bulbs wherever possible. The light fixture in the middle of my stairwell had 4 out of 5 bulbs burnt out, and finally it was time to replace them, lest I be left literally in the dark. I went to Home Depot and bought 5 of what I thought were the most appropriate CFL bulbs for the job, and came home to install them. I found that although the screw part was the right size for the fixture, the narrow shades affixed to where each light is supposed to go prevented me from fully installing the CFL bulbs. I would have to take them back.

I drove back to Home Depot to pick up the identical incandescent bulbs that had just burnt out...At least I know that they fit. Unfortunately, I had managed to lose my receipt in the nominal amount of time I had actually spent with these bulbs outside the store. I decided to try to take them back anyway. After all, the cashier who sold them to me was probably still working there, and at least she could vouch that I wasn't trying to rip anybody off. But I needn't have worried: The returns desk at Home Depot was able to look up my purchase based on my credit card number and no receipt was necessary. Why don't more stores do that? I walked out with bulbs that I knew would fit my light, and all was well.


Anyway, I hope I have brightened somebody's day with the notion that customer service can actually be had in this day and age, even in big box stores. Oh, and did I mention that I didn't wait in any line ups whatsoever at either customer service desk? Crazy, I know.

Wednesday, September 19, 2007

Halifax Pop Explosion 2007 schedule


Holy kick-ass, Batman. A cursory glance at the Halifax Pop Explosion's schedule lets the casual observer know that this year's HPX is gonna blow the doors off you.

In addition to Polaris Prize nominee bands the Besnard Lakes and Miracle Fortress, Eric's Trip have confirmed to play at the Pop Explosion. The Moncton-based SubPop signees will be headlining the finale show on Saturday night at the Marquee Club. We can also look forward to shows by the Apostle of Hustle, Windom Earle, and two already-sold-out performances by Tegan and Sara. I hope you got your tickets.

With shows at 13 separate venues over 5 days, even the most curmudgeonly show-goer can find something to suit his or her tastes. I know I'll be running between bars like a crazy person trying to catch all my favourites. It's happened every year so far, and there's no reason to assume it won't happen again this time.

See you there!

Arrrr...It be talk like a pirate day!


Avast, ye landlubbers, for it be Talk Like a Pirate Day! Yarrrr, September the 19th every year be designated the one where ye can let out yer inner pirate. Shiver me timbers, blow me down, and hopefully you don't have to walk the plank ;)

Now I must be off because those damn kids be after me buried treasure.

Yarrrrr!

Wednesday, September 12, 2007

How do you use a bag?


I picked up a courier-style bag from a friend, and it had a weird clip on it. I wrote to MEC to figure out how to use it. They have very courteous and friendly customer service.

Me:

I recently picked up the Brenta Courier Bag (used) from a friend of mine. I like the bag, but I think I need an instruction manual for this crazy buckle on the side. I would like to take full advantage of all this bag has to offer, but I am no courier and I can't figure out how it works.

Is there any kind of literature for this bag? Like a PDF that I can download or something? Anything would help.

Thanks,
Steve Dinn


MEC:

Hi Steve,

Thanks for the email.

I have a Brenta bag and a few others that use that crazy buckle. I think by that you mean the large one that adjusts the length of the main carry strap.

I don't have a PDF or other documentation on it but don't find it that hard to use. Usually you simply lift the large plastic tab (sort of like very old school car or airplane seat buckles) and simply slide the strap up or down to make the overall length adjustment. This creates a loop below the buckle (especially when the strap length is fairly short), but is very secure for carrying heavy loads and produces not long trailing end of excess strap that can get caught in things.

There is also of course the cross body strap that needs adjustment. Essentially the smaller strap just triangulates the other strap keeping the bag stable, but can be undone easily so that the bag can be slung down to the side or front of your body to access the contents or just to wear at your side, not on your back. This strap should meet the other strap at your sternum, roughly.

The defacto standard in Courier bags is the Timbuk2 brand, and I have found a link on their site that shows how to wear their bags which are very similar to ours and use the same buckle type.

http://www.timbuk2.com/tb2/cms/popup/howToWear.htm

Please let me know if you have more questions.

Friday, September 7, 2007

An open letter to the Firefox developers


Dear Firefox developers:

I get the feeling I'm probably alone in my criticism on this particular issue, but bear with me :)

In order to maintain a super-human level of productivity, I typically use a combination of right-hand mouse and left-hand keyboard when I browse the web. (Please, no jokes about one-handed typing.) So, if I right-click, I'll usually hit the hotkey for an item rather than moving the mouse down to click on it. Click, key-press is almost always faster than right-click, move mouse, left-click.

My problem, or rather my annoyance, is this: Why are the hotkeys for the right-click menu on a link not the same as the hotkeys for the right-click menu on a bookmark? My most common action when right-clicking is to open the link (or bookmark) in a new tab. For a link, the hotkey for "Open in New Tab" is T. Guess what T is when you right-click on a bookmark. CUT. So instead of opening my bookmark, I've removed it. Wow, that's awesome :)

Now, I understand that T is the time-honoured, traditional hotkey for the cut action, but couldn't we have the same key for both menus? The bookmark menu's "Open in New Tab" hotkey is W. That seems like a nice letter. Honestly, I don't care what keys they are, as long as they're consistent across all the right-click menus.

I hope I haven't bored you.

Thanks for reading this,
Steve.

Tuesday, August 7, 2007

Eric's Trip


Eric's Trip
Originally uploaded by Steve Dinn.

SappyFest: Day 3

The third and final day at SappyFest 2007 was a whirlwind of activity. It started off with a breakfast show put on at Struts Gallery. I had a curry wrap and a grilled cheese sandwich. I stayed for a couple of hours, but the sun was brutal, and as the afternoon wore on, there was less and less shade to cower in. Regrettably, I made my way back to the dorm.

After trying for the third time to get Chris to rip the CDs I had bought (because I didn't remember the CD-ROM for my laptop) so I could get the music on my iPod, I remembered that the last show for the trapeze artist, Poisson D'Avril, was going on at 1400h, and I hadn't yet seen her. I rushed over there and just made it as the show was starting. It was pretty amazing.

Now it was time to relax a little bit. I didn't really feel like going back to the afternoon show because of the sun, and besides the Singing Saws performing at 1700h, there was nothing going on until 1800h. I went back to the dorm, finally got my new music onto my iPod and played around on the internet a bit. Chris and I went to this family restaurant for supper that gave you the choice of "frozen french fries, or homemade ones that we cut fresh here." Well, that's not much of a choice, is it? I took the homemade ones.

Six o'clock rolled around and we headed down to the final show of the festival. It was gonna be a monster 9 hours, and I think just as many bands. I got a great interview with Julie Doiron, and saw some fantastic sets from B.A. Jonston, The Stance, the Memories Attack, the Monoxides, and of course Eric's Trip. It is always amazing to see a band play live when you have an extreme intimate familiarity with the music. Especially when you're right at the front of the stage, and they're basically playing directly in front of you. I had an amazing time, and I'll definitely be on the lookout for SappyFest 2008 :) I would have taken more pictures, but my camera started flashing the battery light at me, so I decided to save the juice for when Eric's Trip played.

Back at the dorm, I got my pictures posted, and I was in bed by 0400h or so. I decided to take the scenic route home (through P.E.I....I had never been across Confederation Bridge before), so if you're interested, you can check out the pics from my whirlwind three-province tour.

Sunday, August 5, 2007

SappyFest: Day 2

Day two of SappyFest had a late start for me. Like I said in the last podcast, I was starving and I went looking for a diner at which I could get some breakfast. I found Mel's Tearoom on Main Street in downtown Sackville and grabbed a booth. The place wasn't even that crowded, but it seemed to take forever for me to get served. On the upside, ham and eggs and coffee only cost me $4.35.

I don't think I described my room very well...it's a typical dorm room: single bed, desk, shelves, small closet, and a mini fridge. The only real problem I had was getting network connectivity. The wireless network here at Mount Allison goes through a gateway where you have to enter a username & password, but the wired network just lets you get online. Unfortunately, the network drop is not under the desk, where you think it'd be, but rather across the room, by the mini-fridge. The cable that I brought wasn't long enough to reach the desk while still being plugged in so I had to basically sit at the fridge in order to be online. I took my chance this morning while nothing was going on to drive up to Moncton (about 35 minutes away) to Futureshop to get an SD card reader and a 25' cat-5 cable. So, the upshot of that was that I was able to get some of my photos online and I'm now sitting at the desk :)

I missed two shows from Poisson D'Avril, the trapeze artist, but luckily she's putting on one more show tomorrow. I have heard nothing but rave reviews from those who have seen her show.

The weather in Moncton was something you just had to see. As I drove into town, there were numerous strikes of lightning in the sky, but no thunder, and no rain. On my way back to Sackville, I drove through some of the worst rain I have ever seen, but it stopped about 10 minutes before I got to the Sackville exit.

At 1700h, there was a show from Sappy's sister festival, Ok, Quoi? going on at the Sackville United Church. There was some wacky shit going down in there. The various classical-style instruments in the 'Motion Ensemble' were dishing out some experimental (and I mean ex-per-i-mental) sounds that I'm not sure were music, but they were certainly interesting. Certainly a break from the norm of even the fare from SappyFest. As I left this show, the rain finally caught up to Sackville.

As there was last night, there was an outdoor show scheduled for 1900h outside of Struts Gallery, and there was supposed to be a barbecue. If it was raining, I wasn't going to go, because as attendees of that Summer Rush concert know, watching music in the rain quickly becomes not much fun. Around 1930h, the rain let up and I ventured out. I'm glad I did, because I got to see the Superfantastics.

After the outdoor show, we migrated to the Vogue Theatre about two blocks away. This was fantastic because being located on a marsh, Sackville has more than its share of flies, and I am apparently fine dining for them. However, karma being what it is, it was hotter than hell's armpit in that theatre. I was sweating like it was going out of style and I ended up leaving after Rick White played, and I missed Ohbijou and Chad van Gaalen, who I really would have liked to see, but I just wasn't prepared to torture myself to see them.

I managed to get a great interview with Paul Henderson, one of the three main people behind SappyFest, but I forgot my microphone in the car, so the audio will have to wait until tomorrow.

Saturday, August 4, 2007

The Maynards


The Maynards
Originally uploaded by Steve Dinn.

SappyFest: Day One

I'm going to try to make some short audio posts for the time I'm at SappyFest, hopefully with some music each time. Here's my first installment.

Check out the song at the end. It's the Maynards with 'Break Out the Make out'.
Download PodcastDownload Podcast

Friday, August 3, 2007

Arrived in Sackville, N.B. for the Sappy Music Festival

I know it's been a long time since I've written anything on here...just about a month, but I figured that now that I'm actually doing something that it might be fun to post about it :) I have just made the slightly more than two hour drive to Sackville, New Brunswick from Halifax, and checked into my room at the Mount Allison University dorm (Windsor Hall, to be precise). It's hotter than an armpit in the sauna in here. But there's a dorm-sized fridge, so I've just plugged it in and left the door open. We'll see how good of an air conditioner it is. I have my doubts.

Anyway, I'm here in order to see various shows associated with the Sappy Records Music Festival. They even have "Sappy Fest" tacked on the bottom of the big sign on the highway that says "Welcome to Sackville". I managed to forget my SD card reader, but I am going to try downloading the drivers for my camera to see if I can get the photos off of it directly. Here's hoping I can pull it off.

Wednesday, May 2, 2007

Twitter is dead

It was going to happen sooner or later, but for me, Twitter is now dead. Facebook can now do everything that Twitter does, and more; not to mention that there are orders of magnitude more people on Facebook.

For those of us in Canada, Facebook just added Canadian cell carriers to their Mobile section. Bell Mobility, Aliant Mobility, Fido, and Rogers (Telus was curiously absent) are now able to be selected. Once you activate Facebook Mobile, you can post status updates to Facebook using your mobile phone, and you can specify which of your friends' status updates you want to receive as text messages. That's pretty much Twitter in a nutshell. The only things lacking are the IM integration, which was flaky at best anyway, and the third party app support, i.e., Twitterific.

Since Twitter couldn't manage to set up a Canadian short code, and I don't really feel like paying for international charges for using the UK number, I don't know how much I'm really going to be using Twitter anymore. You're on Facebook already anyway, right?

Right?

Steve Dinn's Facebook profile

Monday, April 9, 2007

I'm on shakey moral ground here


Last week, I was grocery shopping. When I'm grocery shopping, I often avoid grabbing a cart when I enter the store in order to limit myself to only what I can carry. I find that I'll often buy more groceries than I can really eat before they go bad, given my proclivity for eating out, and not filling up a cart is a great way to stop myself from spending money on food that's just going to spoil.

On the day in question, I started grabbing a little too much stuff to hold in my arms, so I stuffed a bulb of garlic into my pocket, just so I wouldn't have to carry it. When I got to the check-out, I completely forgot about the garlic. I inadvertently shop-lifted produce.

Every day I have that garlic, I feel like somebody's going to squeal to the cops. Gil Grissom and his team are going to serve me with a search warrant and test my garlic's DNA and match it to the garlic that was at the scene of the crime. I'm going down. It's only a matter of time.

On the plus side, stolen garlic is delicious.

Friday, March 16, 2007

My next phone might be a Google Phone



According to some of Google's European executives, there's going to be a Google phone in our future. I currently have the java applications for Gmail and Google Maps installed on my Motorola SLVR, and I thought that was pretty hot. But imagine the sweetly integrated nature of having all your contacts' information immediately synchronized to Gmail, being able to send a email via Gmail as easily as a text message, or chatting using Google Talk, having integration with Google Calendar too! Don't even get me started on Google Docs and being able to remotely edit documents on your phone.



The potential of this device boggles my mind; hopefully it will not turn out to be vapourware. It would be like a Blackberry on steroids. And I think I'm going to really, really want one.

Wednesday, March 7, 2007

North End Pub on fire

Damn. I've had brunch at the North End Diner more times than I can count. It was one of those old-style greasy-spoon diners that there are less and less of these days...perhaps because they keep catching on fire.

I remember about 15 years ago when the restaurant at the other end of that block, The Acropolis, caught on fire and burned to the ground. There's still an empty gravel lot there now. I hope the same isn't true 15 years from now about the whole block.

At least we've still got the Ardmore Tea Room and the Armview.

You can still see the smoke on this webcam as of my writing this.

Tuesday, February 20, 2007

IMDB gets an update

Sometime between the 17th, and the 20th of February 2007, one of my favourite websites, IMDB.com got a fresh new look. The name and title pages (so far) are sporting the new styles, with the rest of the site to follow. I think it looks really good. It's about time IMDB got an update.

Monday, February 19, 2007

ECMA Podcast

Since Jeannine was trapped in an Ottawa airport, I put together an episode of Spine Radio that consists of several songs from artists either nominated for East Coast Music Awards, or playing around town during the ECMAs. Check it out.

Tuesday, February 13, 2007

Air Miles finally pay off

I got my free Griddler! Good thing I was up though...the Sameday courier guy came to the door at 08:10. I had to answer the door in a towel.

I made a peanut butter and strawberry jam panini on an English muffin.

Monday, February 12, 2007

Scotch: Aye, it's good for wha' ails ye

For the past couple of months, I've been trying to break into the world of Scotch. Keep in mind that previous to this couple of months, the only whiskey I'd ever had was accompanied by at least two parts of ginger ale.

Getting into Scotch isn't as easy as getting into wine, mainly because a bottle of the former is several times more expensive than one of the latter. Scotch also has at least as many idiosyncratic adjectives as wine, trading 'plum' and 'cherry' for 'woody' and 'peaty'. It's an odd experience to learn these terms. It's kind of like when you were in pre-school (or earlier) when you were first learning colours -- You can't really understand what exactly 'red' is until somebody shows you a stop sign, so the only way to be able to talk to another Scotch drinker about what you're tasting and experiencing is to try a whole bunch of different Scotches. That in itself can be a bit exciting and more than a bit frustrating.

So far, I've tried GlenFiddich, Oban, Dalwhinnie, and Lagavulin, and I've discovered that I'm partial to the ones that are described as 'peaty', particularly Lagavulin and Oban. Anybody else a Scotch drinker? What are your favourites?

I couldn't leave it in the store.


Whilst shopping for wares in the grocery store, I came upon a bottle of lemonade that I had never seen before. I was taken by the friendly, lemon-shaped head on the bottle. I had to have it.

Pucker up lemonade, not only makes their URL remarkably hard to find on the bottle, but is remarkably good lemonade to boot. At $1.99 / 473 ml, it's not cheap, but people are paying just about that much for the same amount of water these days.

Best line from the bottle: "Made in Canada by a guy in an apron (inc.)".

Saturday, February 10, 2007

Process priority should apply to other resources

I have an application that doesn't take up many CPU cycles, but it does write a large amount of data to my hard drive; the same hard drive on which my virtual memory file is located. As you can probably imagine, my system slowed to the speed of an intoxicated sloth crawling on flypaper. It got me thinking that it would be nice if there were a way to not only give a priority to a process as far as the CPU is concerned, but to other system resources as well. How is it possible that this process that was using less than 10% of CPU cycles was able to bring my computer to a crawl? It really shouldn't be.



Quality of Service kind of does this for the network, process priority does it for CPU cycles. But CPU speeds haven't been the bottleneck in modern personal computers for a number of years -- now it's the hard drive. I can't understand why any OS I've used still doesn't support a way to limit access to the hard drive the same way they've done for CPU cycles for decades.

Friday, February 9, 2007

Form inheritance in Visual Studio 2005

I'm sure many people are familiar with the principles of object-oriented programming such as inheritance, polymorphism, etc. However, not everybody may have considered is the potential for creating a class hierarchy of forms and dialogs. It can be very beneficial to have the ability to extend an existing form class to create a more specific type of form. For example, I constructed a group of C# forms and controls that allow me to design a page as a control and place it in either a wizard or a property sheet. I can just extend my custom page from the base page type and drop on whatever controls I need for that particular page. That's something that I think should have been in the .NET framework, but that's another story.



In any given class hierarchy, it's probable that at least some of those classes will exist purely for the purpose of polymorphism, and they'll be abstract classes. This is no less true with a hierarchy of forms or controls. In my particular example, there's not much use in instantiating an instance of the base page class because it'll have no controls on it, so I marked it as abstract. As I soon found out, the designer in Visual Studio 2005 takes great exception to this.



For some reason, the VS2005 designer tries to actually create instances of these abstract base classes and I'm not quite sure why. If all the abstract methods and properties in the base classes are made virtual and given simple, default bodies, so that the classes can be instantiated, the designer will start working again. It's a real shame; I love using abstract methods in base classes because I find myself often forgetting to implement the derived-class versions of virtual methods like I'm supposed to, and it's nice to have the compiler remind you if you don't. It's just unfortunate that this can't happen if you want the designer to work with your abstract forms or controls.

Monday, February 5, 2007

iMate Jasjar for sale

I am selling my iMate Jasjar. It does a whole lot of stuff; probably more stuff than I need. Because it does so much stuff, it's a little large for a guy who just wants a cell phone most of the time. I ended up buying a Motorola SLVR a few months back, so the Jasjar has been sitting idle. It's still in great condition (a few superficial dings, but working flawlessly).



The auction is on Ebay now, so get bidding if you're interested :)

Sunday, February 4, 2007

Edison Force?

Walking through Blockbuster today, waiting for a table in Cora's, I saw this movie for sale in the 'previously viewed' section: Edison Force. It has an ensemble cast that I thought would have been less possible to get together than Tom Cruise and Brooke Shields: Morgan Freeman, Kevin Spacey, L.L. Cool J, and Justin Timberlake. What in the hell?

Who in their right mind would bring all those people together for a movie? I can't even fathom Justin Timberlake and Morgan Freeman in back to back movies, let alone the same movie. That being said, now I must own it. It was only $7.99. I'll give my review after I actually watch it.

Friday, February 2, 2007

Shouldn't a supermarket know about grocery bags?

I went to the Real Atlantic Superstore today for the first time in a long while.  Typically, I shop at Sobeys, and now I remember one of the reasons why.  No, it's not just for the air miles.

The Superstore's bags must be easier to produce.  They must be, because I cannot conceive of another reason that they would be so retarded.  The handles of Superstore bags are on the ends of the bags instead of the sides.  If you're trying to carry a frozen pizza or something that is much longer than it is wide, the handles are the whole length of the pizza box away from each other.  Obviously, that is very awkward.

Sobeys got it right.  The handles on their bags are where handles ought to be on a sensible bag.  One hand can easily go right through both handles, pizza box and all.

Shouldn't a supermarket, of all places, understand what makes a good bag?  These places do research into customer behaviour and put the staple items in distributed locations so you have to traverse more of the store to get them all.  Just today, I went to get milk, and it was at the complete opposite end of the store from the entrance.  If I were handicapped, I'd probably never buy milk -- you'd have to walk too far.  The Superstore is just dumb, and they have dumb bags.  I do like the President's Choice brand though.

Speaking of Air Miles, while I was writing this blog, and gathering the links for those websites that I linked to, I explored the potential rewards I can get with the number of points that I have.  I haven't yet redeemed any points in the 7 or so years that I've been collecting.  I think I'm going to get myself a Griddler.

Wednesday, January 31, 2007

You are a douche.

Ever wanted to end a conversation quickly and efficiently? Hand the offending party a douche card, and walk away. Lousy service? Don't want to leave a tip? Douche card. Looking for something to replace those little packets of silica gel inside the new shoes at Walmart? Douche card.

The possibilities are endless.

Want some shoes? How about $5 too?

I've recently learned that there is a war brewing over which website will be the top shoe seller online. For years now, it's been Zappos.com, but recently, Amazon started up their own online shoe store, Endless.com.

The first volley was fired by Endless, as it started by offering free overnight shipping. This was something that Amazon does for many of their other web stores, so it was no big deal for them. Zappos soon countered by offering the same. Endless then did the unimaginable: offer free shipping for -$5. That's right. they're going to pay you to get shoes delivered via overnight service. I think it's a little bit retarded, but I'm not going to complain about a discount.

Endless also has the better website, all full of AJAX-y goodness and plenty of 'wow' factor. Making your way through multiple pages of search results does not even reload the current page! Instead, it fades out the old display set and fades in a new one. Very slick. Also pretty cool is a javascript magnifying glass thing that you can drag over the pictures of the shoes to see a close-up of a particular section.

Anyway, if you're in the market for shoes, maybe you want to check out one or both of those online stores. Personally, I can't buy shoes without trying them on.

Tuesday, January 30, 2007

Constructors vs. factory methods

I have come up with some coding conventions that I seem to spend a not-insignificant amount of time explaining to some of the people I work with. Specifically, I have a convention for what actions are performed in a class's constructor vs. a factory method that creates an instance of the same.



Constructors. It's not very easy to figure out what's going on if your constructor manages to throw an exception. Furthermore, if you've derived from a class whose constructor can throw exceptions, it's even more difficult to debug. Constructors should just initialize a class's members, but do no real 'work'.



Take the .NET class System.DirectoryServices.DirectoryEntry. You can construct an instance of this class with a completely bogus LDAP path in the correct format, but the constructor will not throw an exception. It is not until an action is performed using the instance that anything will go wrong.



Factory methods. In my convention, if you want to create a new instance of a physical object like an object in Active Directory, you'd have to use a factory method. If I had written DirectoryEntry, it would have a static Create() method on it, rather than having to add to the children collection, which I find a bit weird.



eg. DirectoryEntry.Create( DirectoryEntry parentContainer, string commonName, string className );



If you have two constructors, one which just encapsulates an existing physical thing, and another which creates a physical thing, that just doesn't feel right to me. Obviously this is comes down to personal style of coding, and there is nothing technically wrong with doing work in contstructors, I find that I have written more intelligible, easily readable code by clearly differentiating between the two.



My inspiration for this convention came from a Magritte painting, "The Treachery of Images". The painting, just as it says, is not a pipe. It is merely an abstract representation of a pipe. Just like the DirectoryEntry class is not actually a directory entry; it is merely an abstract representation of an object on a server that you can manipulate via code. To construct a instance of a DirectoryEntry class, you'll first need an actual existing directory entry. Let your factory method create that entry, and then return an instance of the class wrapping around it.



Am I babbling yet?

Monday, January 29, 2007

I got a letter and a new card from MasterCard

MasterCardCompletely out of the blue, I received this letter from MasterCard today, complete with a new card with a new number:
Dear Customer,

At MasterCard, we are constantly working to protect our cardholders from credit card fraud. In connection with a recent investigation, we have reason to believe that your MasterCard #---- ---- ---- ---- may have been compromised. This means that your card number may have become known to an unauthorized person(s).

Although there is no evidence of fraud on your account, we feel it prudent to replace your existing card to avoid any potential misuse. Attached please find a replacement card with a new number. We sincerely apologize for any inconvenience this matter may cause you and appreciate your understanding.
Hrm...this really makes me wonder what the hell happened to my card number. They have attached an FAQ section to the bottom of the letter stating, "Due to an ongoing investigation, we are not able to specify how, when, or where your card was compromised, however, we can confirm that it was not at MasterCard."

Update: I spoke to a MasterCard representative on the phone to activate my new card (on the activation website, neither my old card number nor my new card number would let me in), and he told me that it was Winners/HomeSense who recently had their customer information stolen. Apparently anyone who used a credit card at Winners or Homesense between April and September of 2006 has had their card number compromised.

Now I have to update all of my automatic bills to use my new credit card number, not to mention PayPal, and countless other websites on which I have an account. Fuck you criminals. Fuck you right in the ear.

My first burlesque show

Miss C. of Pink Velvet BurlesqueSaturday night, I did something I had never done before. It wasn't because I thought it was a bad idea, just that I hadn't gotten around to it. I went to a burlesque show at the Seahorse. I was promised beautiful women and breasts covered by nothing but the smallest of pasties.

I wasn't disappointed.

Several of the girls from the Pink Velvet Burlesque troupe performed and it was everything that I hoped it could be -- in a public place. If, when you were growing up, and your mom always watched figure skating on television, and since there was only one TV in the house, you had no choice but to watch it with her, but you had no interest in figure skating, so all you could do was fantasize about the women in tight outfits with blades on their feet, then burlesque is a natural progression.

I'm not sure what kind of (proverbial) balls it takes to get up on a stage while barely clothed with no expectation that people in the audience are going to throw money at you, but these girls have got 'em. There was really nothing strip-club-skanky about the whole thing...it was just hot.

Thursday, January 25, 2007

Listen for me on the radio

I'm going to be a guest on Mixtapes for Heartbreak this Friday evening from 2130h to 2230h. Check it out on CKDU 88.1 FM in Halifax, or on the interweb at ckdu.ca.

Later on, I'll also be taking part in a CKDU-run podcasting seminar. If you're going to be in Halifax on the 2nd of February, and you're interested in learning about the ins and outs of podcasting, feel free to drop by. It'll be at 1800h, February 2nd, on the 4th floor of the Student Union Building at Dalhousie University (6136 University Avenue).

Tuesday, January 23, 2007

Quest Idol





I really don't know what to say about this...but I think they did a pretty good job. NetPro, eat your heart out ;)

Friday, January 19, 2007

My Eastlink IP is changing!

Somewhere around the 12th of Jnanuary, 2007, Eastlink started messing around with the IP blocks that they're handing out to residential customers. For literally years my IP address was completely static, and in the 24.224.0.0/16 range (I don't want to actually give it out in case it is ever given to me again ;)). Now, it's in the 71.7.0.0/16 range.

What's up Eastlink? Are you reorganizing things?

My grand scheme (new URLs and feeds)

As I've started to do other things, I've started to feel that I no longer really want to have to maintain a website powered by code that I wrote. It's not that it's bad code, I mean, it's served me well. It's just that if there's ever a feature I want, I pretty much have to do it myself. Since a good programmer is a lazy programmer, I have found many other ways online to accomplish what I wanted to do with Spine.cx. As a result, I've decided to start a more professional blog on a domain I should have registered years ago: stevedinn.com, and to move my personal blog over to blog.stevedinn.com.



Don't freak out, spine.cx isn't going anywhere. It's going to stay exactly as it is.



If you would like to find me, however, check out one of those previously mentioned www.stevedinn.com or blog.stevedinn.com.



I also have a grand plan for feeds for all my various things that have feeds. First of all, I'm going to use Feedburner. Everything is going to be available under the umbrella of http://feeds.feedburner.com/stevedinn/. Here's a list of my feeds you can subscribe to:



My new professional blog:
www.SteveDinn.com
http://feeds.feedburner.com/stevedinn
My new personal blog:
blog.SteveDinn.com
http://feeds.feedburner.com/stevedinn/blog
My photos on Flickr.com:
flickr.com/photos/stevedinn
http://feeds.feedburner.com/stevedinn/photos
My links on del.icio.us:
del.icio.us/stevedinn
http://feeds.feedburner.com/stevedinn/links


And of course, there are my other feeds:

My weekly podcast:
SpineRadio.com
http://spineradio.com/rss
My monthly podcast:
zunior.blogspot.com
http://feeds.feedburner.com/zunior

Thursday, January 18, 2007

My grand scheme (new URLs and feeds)

As I've started to do other things, I've started to feel that I no longer really want to have to maintain a website powered by code that I wrote. It's not that it's bad code, I mean, it's served me well. It's just that if there's ever a feature I want, I pretty much have to do it myself. Since a good programmer is a lazy programmer, I have found many other ways online to accomplish what I wanted to do with Spine.cx. As a result, I've decided to start a more professional blog on a domain I should have registered years ago: stevedinn.com, and to move my personal blog over to blog.stevedinn.com.

Don't freak out, spine.cx isn't going anywhere. It's going to stay exactly as it is.

If you would like to find me, however, check out one of those previously mentioned www.stevedinn.com or blog.stevedinn.com.

I also have a grand plan for feeds for all my various things that have feeds. First of all, I'm going to use Feedburner. Everything is going to be available under the umbrella of http://feeds.feedburner.com/stevedinn/. Here's a list of my feeds you can subscribe to:

My new professional blog:
www.SteveDinn.com
http://feeds.feedburner.com/stevedinn
My new personal blog:
blog.SteveDinn.com
http://feeds.feedburner.com/stevedinn/blog
My photos on Flickr.com:
flickr.com/photos/stevedinn
http://feeds.feedburner.com/stevedinn/photos
My links on del.icio.us:
del.icio.us/stevedinn
http://feeds.feedburner.com/stevedinn/links

And of course, there are my other feeds:
My weekly podcast:
SpineRadio.com
http://spineradio.com/rss
My monthly podcast:
zunior.blogspot.com
http://feeds.feedburner.com/zunior

Coding with FxCop

Like my co-worker, Brent, I have recently been in the process of designing an writing components of a prototype for the next version of the project I work on. I haven't been this excited about going to work in quite a while. There's nothing like designing and building something new, rather than testing and fixing bugs, and maintaining legacy code. However, today was the first full day that I had experienced the full onslaught of compiler errors that is FxCop. I felt like I was in university again. For the newbies out there, FxCop is an add-on for your .NET compiler that will check your assemblies for non-conformity and smack them down if they step out of line. It's kind of like the Borg, if the Borg had assimilated an hard-nosed, ruler-smacking elementary school teacher.

I was writing code that I thought was pretty good, but FxCop had other things to say about that. Everything from telling me not to initialize member variables to null (something that was ingrained in me to DO from an early age) for performance reasons, to standards of naming any public members of your classes, to globalization, to security considerations, to suggestions for maintainability, it really has something to say about all aspects of my code. At first, it seemed like it was pointless, like I was never going to get through the nearly-endless stream of errors produced by the tool, but slowly and surely, they dwindled to practically nothing. The only ones that remain (and I've since changed the settings so they only report as warnings) are ones that tell me that nothing is using a certain class or a particular method. Well no shit. We're in the process of building a prototype!

This was one of my favourites...take the following class:

    public class Foo

{

private Byte[] privateBytes;

public Byte[] Bytes{ get{ return privateBytes; } }

}
The compiler with FxCop tells me that I shouldn't return arrays because it could impact performance. Instead, I should return a strongly-typed collection...of bytes.

Whatever.

But I'm bashing a little too hard, perhaps. On the whole, it's right on the money. I think I only suppressed two or three instances of errors in all the projects that I worked on. I want to have FxCop fully turned on (does that sound dirty?) during the entire development process. Nothing makes you feel better than when what you've created conforms to just about the strictest standards out there, not just of functionality, but of aesthetics. And because nothing is worse than going back and fixing errors in reams and reams of non-compliant code.

However, it can be difficult when your compiler is nudging you, nay, forcing you to implement more, and MORE just to stop the errors. FxCop is like a ghetto pusher, "Just one more method, man...come on, you can fix those errors. Just one more method." Everyone else left the office around 5:30 or so, but I stuck around until 7:15 because I couldn't stand seeing errors. And I enjoyed it.

I think FxCop and I are going to have a love / hate relationship.

Wednesday, January 17, 2007

There's a Google Store?



Did you know that there was a Google Store? I'm shocked that I am only just finding out about it today. Incidentally, who knew that a beanbag chair was so expensive? You're probably just paying for the name ;)



I am totally picking up a Blogger t-shirt.

Saturday, January 13, 2007

It's Free Subwoofer Day!

The Futureshop crazy extended warranty has come through for me for a second time. The first time, I ended up bringing back a laptop because the battery wouldn't charge anymore. This time, 6 years (the warranty was good until 2009) after I bought it, I took back a 10" Velodyne subwoofer that had developed a nasty rattle somewhere inside the casing.

The guarantee says that if they take more than 60 days to get it back to you, or if you have to send the same item back more than twice, they'll just replace the item for you with one of equivalent value. 60 days + 1 later, I'm waiting in the customer service line at Futureshop, and it's moving surprisingly fast. The fact that they're going to replace it means to me that I have the opportunity to upgrade. It's like a 6 year layaway plan ;)

I left the store having upgraded to a 15" Velodyne subwoofer (total cost $999). I only paid $310, including a new warranty (I mean why not, it's certainly served me well so far) that covers my new subwoofer until 2016. It is currently sitting in the back of my Honda Element...It's large, heavy, and awkward enough that I haven't quite figured out how I'm going physically move it to the place I want it to be. I'm probably going to have to clean up the downstairs hallway :|

Check back here later...I'll have pictures of the behemoth both in the box and out.

Thursday, January 11, 2007

IDSObjectPicker - Why isn't there one for .NET?

About a year and a half ago, I was writing a piece of software that did a lot of things in Active Directory, with Group Policy Objects specifically, but that's not relevant here.  What is relevant is that I wanted to pop up a dialog to allow the user to select one or more user objects from active directory.  I had used the IDSObjectPicker interface before, however, all the other times I had used it were in unmanaged C++.  This was the first time I would attempt it in managed code.

For the uninitiated, IDSObjectPicker is a goddamn miserable interface.  If I met its author on the street, I would punch balls first and ask questions later.  It looks unassuming with only two exposed methods, but those methods belie a seething underbelly of complex nested structures and obscure enumerations.  You could write a whole page of code just filling out all the required bit masks, creating arrays of other structures to assign to the previous structures, etc.

I honestly thought, given my previous fantastic experiences with C# (especially with COM interop) that this was going to be easier than before.  I would reference the COM DLL in which the interface resided, and everything would be marshaled for me.

I was mistaken.

It turns out that this was my first time using COM interop with a COM interface that didn't stick to automation types (BSTR, VARIANT, etc.) for its parameters -- They would just get marshaled across the interop boundary as Objects.  I spend about two days writing tedious C# code to re-create enumerated types and manually marshal as much of the parameters and return values as I needed until I got to one particular structure that vexed me.  

DSOP_INIT_INFO.apwzAttributeNames

It's not even really a complicated structure.  MSDN describes it as a "Pointer to an array of null-terminated Unicode strings".  As simple as that sounds, I went as far as manually allocated the array's memory using the Marshal.Alloc* methods, and attempting to binary-copy the memory in an attempt to get it to take that value, but it just wouldn't.

Giving up when it comes to something I'm pretty sure is possible is not something I usually do, but I was ready to punch my monitor at this point (and it was the big, heavy, 19" CRT kind).  I eventually threw in the towel and wrote a wrapper COM object in unmanaged C++ for IDSObjectPicker which translated the input parameters from automation-types to pass in, and the return values back to automation-types to pass back.  That was the only way I managed to get the IDSObjectPicker working in .NET.

I recently stumbled upon this guy who had the exact same problem that I did, which is what prompted me to make this post.  We're not alone.

So WHY isn't there an equivalent, .NET-ified version of this godforsaken interface?

Tuesday, January 9, 2007

New Windows Server OSs

In the past few days, I've heard about two new Server OSs that Microsoft is producing. The first, well, we've all known it was coming for some time now: Longhorn. The second, for me at least, popped up almost out of nowhere, but it think it could be a very cool addition to many homes and/or small offices: Windows Home Server.



Windows Home Server

Watch this video. WHS is a server "appliance" that will basically have power, ethernet, and some USB ports. It promises a central repository of drive-letterless, raid-like disk space. Just add a new drive, whether it's PATA, SATA, or USB, and it will be incorporated into the existing internal spaciness of WHS. This in itself is a godsend...no more worries that drive D is running out of space, so you'd better put that movie on drive E, even though all the other movies are on D. It also claims to be able to backup every computer in your house overnight. I don't know how many hard drives I'm going to have to put in this thing so that it can store all my media and back up every computer in my house, but at least it's smart enough to use a single-instance-store; i.e., if two computers are both running XP SP2, they probably have some files in common, so WHS will only store one copy.



The feature that both excites me and worries me is that WHS will automatically organize your files. I typically abhor automated systems of organization (read: iTunes) because they don't often match up with mine ;) But since it will probably have some sort of Windows Desktop Search integrated into the interface, I'm sure I'll still be able to find everything I put on it.



Overall, the concept of a headless box that I can stick in the closet, or somewhere equally discrete is appealing. I mean, it's pretty much what I have at home now, but the ability to just add drives and have it incorporate the new space automatically is a feature that I would be willing to pay for.



Longhorn Server

I recently read this ComputerWorld posting about Longhorn Server and I was intrigued. It seems that Active Directory is going to become a hybrid of a Windows 2000 style multi-master domain controller system and an NT 4.0 style of primary and backup domain controllers. This "new and improved" Active Directory will have the concept of a "Read Only Domain Controller" (or RODC). On the surface, that sounds a whole lot like a BDC with a different acronym, but it's actually more complicated than that.



From the same article:

  • The RODCs will not cache administrator credentials. I'm still not clear on whether it just won't cache the domain or BUILTIN\Administrator credentials, or the credentials of any account with administrative access, which would make more sense.
  • The RODCs can be run without a GUI since they require little to no administration on their own.
  • RODCs can have their own set of "administrators" so that the guy in the branch office where the RODC lives doesn't have to be a domain admin.
Longhorn also promises an updated DFS replication algorithm, which should be good news for anyone who has experienced SysVol replication problems (Why aren't that GPO's settings being applied?). But probably the most significant enhancement is that you can now restart the services responsible for Active Directory without actually restarting the entire machine.



I'm looking forward to both these new server products...Guess I'll have to buy some more hard drives.

Monday, January 8, 2007

Hinterland Ho's Ho?

Through Jeff MacArthur, via Mike Lazazzera, I bring you the funniest video I've seen this year. It's a fantastic spoof of those classic Hinterland Who's Who videos that always used to run on TV when you were a kid.

A few years ago, I wanted to see if my company was monitoring internet usage by downloading "Beaver.mpg". Nobody ever called me on it, but I kept the file around just in case I had to back up my story. I guess they've reorganized the website since the last time I went there...134_1_E_150.mov doesn't seem to have the same censor-inviting ring to it.

24 Season 6

Word on the street is that the first four episodes from 24 Season 6 (not intended to be aired until the 14th of January) have been leaked onto the intarweb. Now, should you choose to seek to obtain said episodes, that is your business, and even if I knew how to do such things, I wouldn't say so here. Harumph.

Rumours also flying around (I heard from somebody who might have watched them tonight) is that starring in at least two episodes is Canada's own Shaun Majumder, and in at least three episodes, Star Trek: Deep Space Nine's Siddig El Fadil a.k.a Alexander Siddig. I don't want to give away any plot elements here, so I won't say what roles they're in.

The proposed story line is (no surprises here) that some middle-eastern-looking gentlemen are looking to blow up something American, possibly using nuclear weapons.

Personally, I'm looking forward to Jack Bauer killing various people of all races and creeds. I can't get enough of this shit.

Bauer / O'Brian '08

Thursday, January 4, 2007

Is the Noodle Nook finally opening?

The Noodle Nook

Hopefully, the Noodle Nook on Blowers Street is finally going to open after a lengthy time when nothing was visible inside the place. When I walked by yesterday, however, I noticed some actual woks inside. Maybe that means something?

Woks-a-plenty Is it really?

Contributors