We released the latest version of Photo Story yesterday, and it is now available for download for Windows XP users. If you're like me, you probably have a hard drive full of digital photos that you'd like to make into an easy-to-download (or e-mail) slide show. Well, this free tool makes that process extremely simple. Here are some of its features:
Channel 9 has an interesting 24 minute demonstration by Vladimir Rovinsky and a second 28 minute interview with members of the product team. Also, Paul Thurrott's SuperSite for Windows has a good review of Photo Story 3 that is worth reading.
I'm currently spending time on a user interface framework for the 2005 version ("Whidbey") of Windows Forms. Yesterday, I tried to implement a version of Martin Fowler's Presentation Model and incorporate it into my existing architecture. Part of my interest is based on the desire to remove as much user interface behavior from the view as possible. Since the Visual Studio visual designers encourage the blending of both view and controller behavior into the same class, introducing an abstraction like Presentation Model tends to "fight" what the IDE incents a developer to do.Another goal of disconnecting the presentation from the behavior is to make it easier to write unit tests. I've been asked before about unit testing the user interface, and although I maintain that it's a worthwhile goal (since code is code is code), it proves to be difficult to automate without special tools. Introducing a pattern like Presentation Model should alleviate some of that pain. However, the challenge I'm facing is that implementation of a Presentation Model ends up requiring a lot of extra grunt work. Even Fowler admits that it is often repetitive code best suited for frameworks.In my design, the business object manages its own state and defends itself from corruption by tracking rule violations (like "Name: Cannot be blank"). Without a Presentation Model in the picture, the view maintains a direct reference to the business object and subscribes to a Changed event to know when to update itself (à la typical Model-View-Controller semantics). Rule violations are indicated by displaying a textual summary and color-coding appropriate controls on the user interface.While implementing the Presentation Model, it seemed like I was nearly re-implementing the entire state of the model and then some (to account for widget behavior in the UI). But, since I need the business object to defend itself against invalid data, it still needs to be involved in the process. In other words, updating just the state of the Presentation Model isn't good enough...I also need to update the actual business object so that it can validate its state and track rule violations.Since I'd like to include "Apply" semantics in my framework, I don't want the controller/view to update the original business object, because that makes a Cancel operation more difficult to implement. I had hoped that a Presentation Model would hold modified values and only save them to the underlying business object when an Apply command is issued. To get around this problem, I can certainly Clone the business object and provide it as the model that gets modified. Then, when the user applies the changes, the original model would simply be replaced. Although this will work, care must be taken in case other areas of the system are maintaining active references to the older model (probably better to apply the state of the modified business object to the original to avoid this issue altogether). If the Presentation Model held the object state, Apply would simply copy the captured values to the underlying business object. And, of course, Cancel would do nothing at all.In the end, I decided that although the Presentation Model pattern would make unit testing easier and it would make it nearly trivial to expose another user interface or view (as long as the view was relatively similar), for my purposes, it ends up being a little too academic and impractical. It would require too much maintenance, and I'm all for simplifying the architecture if at all possible. That doesn't mean that the pattern is bad; it just means that it isn't appropriate for my user interface framework.Has anyone else tried to implement a Presentation Model?
As an avid magazine reader, I picked up a copy of Maximum PC's 3D Gaming Tech Guide Special Issue: Fall 2004. If you're interested in 3D gaming, this is an issue that's worth purchasing. In addition to hardware and software reviews, there's an excellent section called 3D Game Engines Exposed. They compare the engines for Unreal 3, Doom 3, Half-Life 2, Far Cry, Gamebryo, S.T.A.L.K.E.R., and Titan 2.0. Expect many in-game screenshots and modeling/editor discussions. The issue includes a DVD that contains a full 14-day demo of Star Wars Galaxies: An Empire Divided, America's Army, six game demos, three movies, and a handful of other useful tools.
Among the videos is a short demonstration of Unreal Engine 3. I was surprised that I hadn't heard anything about the next version of Epic Games' impressive engine, and Maximum PC provides a good introduction. If you're interested, you can find some impressive screenshots and an overview of their next-generation engine at the Unreal Technology site.
While I'm on the topic of 3D games, I feel compelled to point out PC Gamer's review of Half-Life 2 in their December, 2004 issue. As far as I know, they're the first to publish a full review of the entire game, and they have some great things to say. From the beginning of the article:
While some games have eye-dropping visuals, or amazing gameplay, or maybe a cinematic story with good voice-acting, not one has ever delivered the complete package. Half-Life 2 nails it, surpassing the original in every way. There aren't words to properly describe just how well Half-Life 2 does what it does—and yet my challenge is to find some anyway.
And in the final verdict, they give the game a 98%, the highest score bestowed by the magazine in over six years. They summarize the bottom line with the following geek tease: "Surpasses Half-Life in every way. Arguably the best game ever made."
My new computer can't show up fast enough!
According to this Vivendi Universal Games press release, Valve Software's Half-Life 2 has gone gold and should be in stores on November 16th. For those wondering when Steam users will be able to play all of their downloaded content, Shacknews reports that they'll have to wait until November 16th too. Bummer.
If you haven't watched any of the video for this game, take a few moments to peruse the Half-Life 2 media at Gamespot. In particular, the 23-minute Movie 10 shows some pretty impressive graphics and physics models. Personally, I think Valve's Source engine looks more capable than id's Doom 3 engine. Of course, it may be because you can actually see the graphics in Valve's game without using a flashlight. :-)
For those who have been following my blog, you'll know that I've put off ordering a new computer until the release of this game. The NVIDIA video card that I selected is supposed to be available this Wednesday, the 20th. Otherwise, GamePC reports that they're already burning-in my system (with another video card, I'm sure), and when the new card arrives, I should have my machine shortly after that...hopefully before November 16th. I can hardly wait.
This is one of those things that I knew customers would be excited about, but I had to keep quiet. Sometimes that's tough to do with a feature that you know so many people are waiting for. Well, we announced today that C# now includes the same edit-and-continue support that's found in VB.NET. This feature was driven by feedback provided through the MSDN Product Feedback Center. It's the #2 request. I'm glad that we're prioritizing our changes based on direct customer feedback. The best news is that you'll be able to test-drive this feature in the next Community Technology Preview which is scheduled to become available sometime next week.
Update: 3 Leaf Solutions has published a MSDN article titled Using the Edit and Continue Feature in C# 2.0.