I’m not alone in downloading and eagerly using all the Windows 8 betas. Spending nights, perusing the documentation for new features. Using up what little time I have extra to play with APIs. I’m not silent or original in calling out this Metro, tablet-touch app model’s shortfalls. I’m not even particularly keen on much of what Microsoft has deemed Metro design principals (Metro Design v1?). On the other side, with my developer hat on, I see something that others see also. The Metro platform is part of Windows. It’s deeply rooted in it’s subsystems. It’s littered throughout SDK header files. WinRT support is in the .NET CLR and IE. It’s not some-flavor-of-the-month monstrosity. Silverlight was not Windows. Metro is.
Why are you building a Windows 8 app?
I don’t have an immediate, pressing request to make a Windows 8 application. I’m not doing it for a particular business idea. I’m doing it to stay literate with Windows. There will be a time, soon, when I have a hard business requirement to support Windows 8. This isn’t a hypothetical and I’m not going to ignore it. There’s also a second reason. Fun. Developers understand that we can do the same type of thing we do at work for enjoyment. It’s not like “asking a mail man to go for a walk” for us.
What kind of application are you attempting to build?
I’ve spent a lot of my career dealing with multimedia. It seems to only be natural that I attempt to build something around what I know. Putting just a little bit of thought into it, I’ve decided to build a video editing application. I’ve had this itch for a while now, but feel this is the first time Microsoft has given me the toolset to make a mobile video editing app I may be proud of. Windows Phone 7 is a particularly weak developer platform in this context. WPF/Win7 tablet wouldn’t make for a very fun experience for users either. We developers never are in short supply of complaints over the Metro API, but in my humblest opinions, this is the strongest mobile platform the company has ever released.
WinJS or XAML? Please tell me so I can edify my feelings on my favorite platform or berate you on yours!
If you must really know, I plan on using XAML. I chose XAML for a number of reasons, but the most compelling reason was that it fit the requirements for this application. When dealing with video, you want to leverage the GPU as much as possible. From decoding, colorspace conversions to rendering. WinJS has done an incredible job at keeping parity with XAML on being able to add video/audio effects. WinJS can interact with C++ components, which turn can use the GPU. The problem with WinJS, is there is no (sane) way to render D3D to the screen. Beyond just the “video” aspect, D3D and Direct2D are a form of escape hatch, where you wish to move beyond the design or performance limitations of XAML or HTML.
So XAML…C# or C++?
C++ of course. This was an easy pick for me also because, again, it fit my requirements for this application. There is naturally going to be a lot of C++ code in this project as it uses quite a bit of Metro-safe COM/Win32 API. Also there are obvious performance and battery benefits to consider in such a resource intensive mobile application. Surely I could write C++ WinRT components to consume in .NET, but honestly, that sounds like more work. Right now I have five static libraries and wrapping them in an ABI safe component is just another thing I don’t have to worry about. I also chose C++ so ya’ll don’t just decompile it, convert it to Chinese and re-submit it.
So this is going to be closed source?
Even though I’m making this app for fun in what little time I have each week, I am going to be making it as a closed source application. On the other hand, I plan on doing blog posts as I develop it, explaining how I am making it. Even though it’s natural to be guarded against possible “app competitors”, I do think sharing knowledge is important also. This is more pronounced with the fact that I do not expect to become rich off this. Rest assured my next blog post on this subject will be heavy into MediaFoundation and Direct3D.