I've finally got my Deep Zoom player and image serving thing all figured out. The more I use Silverlight, the more impressed I am by it, but I'm also astounded at how incomplete the Deep Zoom system is (specifically, the MultiScaleImage control, which is the heart of the technology). Maybe incomplete isn't the right word, but they didn't do a very good job at fleshing out the most normal of usage situations.
Regardless, it's really cool to see a big panorama that Walt stitched together and be able to look around at it at its full, native resolution. These things can be as much as 8,000 pixels wide, which is like taking eight monitors and putting them side to side.
What this has led to is a need for me to finally think in bigger terms, and rewrite a lot of this image code to work in a more decoupled and generic sense. For example, I want to split out the tagging system. Think about how you can tag anything... photos, video, notes, etc... on Facebook. Yet these tags ultimately all come back to a single record, in this case, people.
Now think of it in terms of photos. I have the good old fashioned "classic" photo albums, but now I'll have Deep Zoom images as well. I need to take a step back and build all these things using interfaces so they can work together. Instead of getting Photos, I'll get IPhotos (no relation to Apple).
It's funny, but despite all that I had read about interfaces when I first started to learn object oriented programming and design patterns, I haven't used them very often. They were used in some of the more complex projects I had at ICOM, but not really in my own stuff. I have used a fair number of abstract classes, which are essentially interfaces with some implementation, but even those are infrequent.
There are two things that I find exciting about this, both very nerdy. The first is the realization that I know this stuff, and the second is that my own projects are growing enough that I get to use the knowledge. Having a bigger toolbox in my head certainly frees me to think about more interesting possibilities. CoasterBuzz v4 was probably the first of my own projects that finally leveraged all that I know, and the result is obvious with the speed and efficiency of the underlying code. Again, I really credit that to the 2.5 years of working at ICOM with smarter people.
Going forward, I realize that it's important to continue to subject myself to brilliant people, even if it is a self-study situation.