I recently had the honor of participate in Incubation Week out in Silicon Valley. Leading up to the event we realized that at least two out of our six participants wanted to integrate Virtual Earth and Silverlight. I searched for guidance online but only turned up a few browser interop samples. I didn't find any really good managed wrappers for Virtual Earth until I started digging around internally. Then I found VIEWS.
VIEWS was originally created by Adam Eversole in Microsoft Research and it was an internal-only project when I found it. But with Adams assistance I was able to refine it, polish it and get it ready for public consumption in about 8 days; just in time for Incubation Week.
Today I'm happy to announce that VIEWS is live on CodePlex. You can download the binaries and the source, but to get acquainted quickly simply head on over to Channel 9 for a video introduction.
I finally turned a demo I do frequently for my ISVs into a MSDN Screencast:
http://channel9.msdn.com/posts/jbienz/Silverlight-Image-Search-with-LINQ-to-XML/
Check it out. This was based on Scott Guthrie's Digg sample.
Transitionals has finally been released to the public!
I know it's been some time since I last posted on Transitionals but it turns out it took longer to get approval for the project through legal than I had anticipated. I suppose I should have anticipated it, being that the code came from a Microsoft project that was previously available only in binary form. But that's all behind us now and people can start downloading, testing and even using the bits in their own products.
It seemed to take forever in my mind, but the truth is it only took around two months. And it still amazes me that I joined Microsoft only two and a half years ago and yet I've been able to bring this code to the community. Times are changing, and I'm excited to be here right now.
Without further adieu, let me present to you Transitionals:
http://www.codeplex.com/transitionals
I mentioned in my last post that Nick worked for a while at NASA. Well, last Thursday I had the opportunity to take a special private tour with Nick and Frank Hughes who also worked at NASA for over 20 years.
I'm too young to have my own memories of Apollo 13, but I was awed and inspired by the Hollywood retelling of it. Here's an original picture of Eugene F. Kranz, flight director, at his console in the Gemini era. Kranz was also one of the flight directors for Apollo 13 and was played by Ed Harris in the movie.
And here's me:
Any guess where I'm sitting? No, that isn't a reconstruction or something created after the fact. That's the actual room and the actual equipment used for the Apollo 13 flight!
I stood close enough to a flag that's been to the moon to touch it (I didn't dare) and I walked right up to a massive five story high vacuum chamber that's used to test parachutes in extremely thin atmospheres.
And finally, I got to stand at the front of a new control center. One that's actually in use today for the International Space Station. Here's a shot of it from the viewing room. This is the off shift while all the astronauts are sleeping and I got to be in the room toward the front near the flag.
It was a special afternoon that I won't forget. Thanks Nick and Frank for the memorable opportunity.
At the 2008 product launch I had a chance to meet an interesting individual by the name of Nick Davis. Nick and I chatted at great length about XNA and game development in general. Turns out we share a lot of interests and we even kicked around the idea of starting an game developer users group here in Houston.
Nick has experience building games and doing simulation. In fact he worked at id software for a while and spent several years at NASA too. He's got a wealth of knowledge to share on the trade and the tools, and me? Well, I've got access to the XNA product team and a Microsoft office to host us. :)
We start planning our first session tomorrow, but already many of the pieces are coming together. My MS buddy Chris Koenig helped me figure out how to book the space and put me in touch with the the XNA team. The XNA team has committed some swag and offered to be in touch for questions. Nick has found us a couple of potential sponsors (what's a users group without pizza?) and he's even gained the interest of a few local universities.
So I'd like to present on my blog, the first public posting of our users group site:
Houston Gaming and Media Users Group (http://www.hgmug.org)
Stay tuned for the first meeting invite.
The Transitionals project is up! Or at least it's created. You can try to visit it at CodePlex/Transitionals but the project isn't published yet so I don't know what you'll see. We don't plan to publish it until we get the source code in there. We've got until 3/21 before they automatically deprovision the project. That should be enough time, but it's sure making me antsy waiting for access to the source.
I'm so ready to click that thing -- Transitionals is ready to go!
Since my last post, so many things have happened. Certainly not the least of which is having David Hill from the original Acropolis team do a code reviewing with me over Live Meeting. How cool is that?
From a code perspective, RandomTransitionSelector can now load all the transitions in an assembly and even lets you customize one or two without having to list them all. I finished the Getting Started article and even got a great Sandcastle help file built. I got the binaries and the chm file zipped up and and posted to the workspace as part of the first release. It's all there, I just have to click that button.
The hold up is that I found out yesterday there's one last approval we have to get from MS legal before I can make the project public. Hopefully we'll have that tomorrow, but I'm sure anxious.
Maybe tomorrow I can click the button.
I meant to blog about this Monday night when I wrapped it up, but it was after midnight and I was too tired.
In Transitionals, any control that supports a transition (like TransitionElement or SlideShow) can take accept a single Transition through the Transition property. They can also accept a transition strategy through the TransitionSelector property. This works in much the same way as TemplateSelector works for selecting data templates.
One thing I found very common in the projects I've written is the need to randomly pick from a list of transitions each time a transition occurs. I'd written this code custom from the SlideShow, but I decided to package this up as a TransitionSelector and modify the SlideShow to use it. I think it works quite well.
Here's the current syntax:
<transc:TransitionElement.TransitionSelector>
<trans:RandomTransitionSelector>
<transt:DoorTransition/>
<transt:DotsTransition/>
<transt:RollTransition/>
<transt:RotateTransition/>
</trans:RandomTransitionSelector>
</transc:TransitionElement.TransitionSelector>
This class could be extended (and probably should be extended) to allow it to pull in all the transitions from a specified assembly or set of assemblies. That would allow it to use all transitions without having to explicitly list each one. Of course, selecting transitions in this way would mean that only the default values for each transition could be used.
** UPDATE **
As of 3/16/2008, support was added to allow the load of transitions from assemblies. I even came up with a good solution to requiring default values. This is covered in the Getting Started document which is part of the chm file in the 1.0 release.
Okay, so I can't truly publish yet, but I did run the source code through the internal validation tools and got the (automated) approval to upload source. Since the Transitionals project is still not open to the public, I've gone ahead and uploaded to source control. I even had time to put some of our tasks and features we'd like to see added in the Work Items area.
Have you seen how great the Team System support is with CodePlex? It's pretty amazing. Security is locked down on a few things like creating areas and security groups, but in many ways it feels just like working on a TFS server in your own domain. Very cool.
Now I just wish someone would add a check box for "Remember my user name and password"...
Tonight I got the Ms-PL license included in the solution and used my License Injector app to insert a stub in each .cs and .Xaml file. I also updated the About screen to show the new project information.
Yesterday I had a chance to talk with David Hill about the project and ask him why TransitionElement is a FrameworkElement and not a ContentControl. Unfortunately it turns out that a bunch of code (including TransitionElement) was contributed by someone who is no longer on the team. David couldn’t give me a reason why it was built that way but challenged me to try and make it a ContentControl instead and see if things still work. I guess that will be my project for tomorrow night.
Tonight I also got my blog up and running. Look for another update tomorrow night.
Build succeeded.
Time Elapsed 00:00:01.44
========== Rebuild All: 2 succeeded, 0 failed, 0 skipped ==========
I don't know about you, but it's amazing to me how much joy a couple lines of ASCII can bring. Transitionals compiles!
I've arrived in Florida and even though I didn’t leave Houston until after 9 PM last night, I accomplished so many things on the flight. I got the Transition classes separated from the rest of the Acropolis source and got them compiling on their own. I also changed the namespaces up just a little bit since this Transitionals is now a solution in its own right.
The only changes are as follows:
- Transitions live in Transitionals.Transitions
- The TransitionElement control for presenting transitions lives in Transitionals.Controls
I’d also like to add a few more transition related controls to the project before I go live. For example, in the old Acropolis days I had a cool DataTemplate based slideshow control that I think might be cool to include.
Before the flight was over I even had time to get my Transition Tester project up and running against the new library and the new namespaces. This project is coming along quite nicely.
Things still left to do:
I need to remove the copyright message from the source files that came from Acropolis and replace them with the standard Ms-PL license. I actually wrote a tool that can search for a License region and update or inject it if it’s not found into each C# and XAML file. I’ll use that to get this part done.
I need to decide which controls I want to include. I also need to decide if I want to split the SlideShow control out into a base control without automatic navigation and a derived SlideShow that has the timers. Of course, the timers can always be turned off for manual navigation (and I think that’s already the default).
More on this tomorrow.
Getting access to Microsoft source code is (not surprisingly) a long and arduous process. Actually, the tools for requesting access and tracking your pending approvals isn't bad at all. There's just a bit of red tape that your request has to go through. It's one thing if you're a Redmond employee working in a product group. It's another thing if your a field guy wanting to expose some source to the community. None the less, tonight I've proven it's not impossible.
It seems like almost the minute I managed to get the source downloaded from the repository David also sent it over to me in a zip file. Geez, if I'd just been more patient I could have bypassed all that trouble. Still, I don't want to be bugging David going forward and this was the more official way to get at the bits.
I've got a two hour flight from Houston to Tampa Sunday night. I hope to get the bits extracted and compiling by the end of the flight, but I realize that's probably a lofty goal.
My teammate (and dare I say friend?) John Pelak has teamed up to help me with this project. He's also helping with some other goodness I'll talk more about in the coming months.
Thanks for the help John, and welcome aboard!
So I’m up here in Redmond at TechReady. It’s a super secret event that we get to go to once a year and learn about the cool things the product groups have been up to.
This year I'm learning about Prism, which is a cool lightweight framework for building composite applications in WPF. No, it's not CAB.Next and no it's not Acropolis reborn. Still, developers of these frameworks should find themselves at home. Prism is different and Prism is cool, but I'll leave it up to that team to talk more about their baby when they're ready.
As I've been sitting through talks about Prism, CAB, smart clients and RIA, I can't help but think back to some of the cool things Acropolis did for us. One feature that comes to mind is the Transition framework. It allowed views to be swapped in and out of a shared workspace in an animated fashion, like switching between video rolls in a professional editing application.
When the Acropolis research project was discontinued I was asked by a couple of my ISVs how they might go about implementing their own transition framework. At the time, all I could recommend was that they use Relfector to take a look at what was done. Or look to another solution for transitions (like what's available in the Syndicated Client SDK). I always hoped that the Transition framework would be rolled forward into another product, but as I sat here in Redmond listening to these talks I started to realize that this cool little feature was nowhere to be found. So I decided it's time to take action.
I've had the pleasure of meeting Scott Guthrie in person before, last year at Mix. And just like many of you I follow his blog to learn about cool new things in .Net 3.5, Silverlight, WPF and the like. But this week he presented to us in person and I took the opportunity to go up afterward and say hi.
I first thanked him for all that he does and let him know what a valuable resource his blog has been to me. Then I brought up the Acropolis transitions and immediately proposed an Open Source project on CodePlex. It took less than two seconds for him to reply and to my pleasant surprise, he said he thought it was a great idea! He even offered for me to get back in touch with him if I needed any help making it happen. I was stunned.
Next I reached out to Brad Abrams. Back in October I had a chance to do a webcast with him on WPF and at the time he was also overseeing Acropolis. Again I was shocked with an almost immediate and emphatic response in support of the effort. In fact, Brad's already put me in touch with David Hill to start working on getting access to the source.
Could things really be this easy...? I know, I shouldn't ask that out loud.