Thoughts on Factories

Last week, I had a great discussion with the Product Unit Manager (or PUM) of VSTA. She wanted my perspective on a few things related to Software Factories and I figured I’d share some of them here.

First off, while I appreciate the vision of factories, I’m also focused on the short term gains of automating software construction. Today, most of that automation is in terms of code generation. For example, John asked the other day if I thought Yacc is a software factory. It certainly is a domain specific language! However, I’m not sure I’d go so far as to say it’s a factory. But on the other hand, I’m not sure it matters that much if it’s a factory or not. When the other John on my team blogged his thoughts on SOA, he included one I wrote: “Eventually we’ll stop talking about SOA and go back to talking about Architecture”. I feel sort of the same way about factories. As long as we’re talking about it as if it is something different from what we’re already doing, we’re not there yet. But if we keep taking steps in the right direction, eventually we’ll get to the point where the process of building software doesn’t look the way it does today. Sorta the same way that building software today doesn’t look like it did pre-.NET, pre-VB, pre-Windows or pre-C++ (I could keep going, but I think you get the point). That’s the thing about visions, you never really get there, it just provides a way to keep you going in the right direction.

Secondly, I think that one aspect of Software Factories that at least I haven’t focused on is reusable frameworks. The book is called “Software Factories: Assembling Applications with Patterns, Models, Frameworks, and Tools” but I think the focus has been mostly on models and tools. This is partially because of the whole DSL vs. UML flack (quick side note – how about we have both?) and partially because the DSL toolkit is the first factory-esque thing that we’re shipping. However, DSLs big value, IMO, is to automate the construction of applications built on top of well designed reusable frameworks. For example, the OOPSLA keynote demo was a DSL that would sit on top of a UI process framework such as the p&p UIP block. But if there is not a good framework, there’s little point in having a language. I’ve pointed out in the past that the big gap to cross for organizations to start using DSLs is the leap from building abstractions to building languages that automate that abstractions. However, that’s not really true. The really big gap is the leap from building one-off abstractions to building reusable frameworks of abstractions. Once you have the reusable framework, building the DSL is an easier step IMO.

Even though I didn’t figure out the framework / factory connection until last week, it must have been there in the back of my mind when I was working on the ARC track for TechEd. We’re having a session on “Design Considerations for Enterprise Application Frameworks” with Steve Maine as the speaker.

Another Vector Option – Xamlon Flash

Another option besides ActiveSWF is the recently announced Xamlon Pro Flash Edition. Xamlon is essentially an implementation of XAML the current version of Visual Studio. There’s a version for Windows Forms, for Compact Framework and now for Flash. So basically, you can write your flash app with XAML and C#. Apparently, you can also code directly to the Flash format, bypassing the XAML layer entirely. I like the idea of using a managed component like Xamlon better than a COM based component.

My big issue with using Flash is that it’s a totally seperate programming environment from the browser. Using VML in IE, you can manipulate the vector objects with javascript. In Flash, you may be doing one thing in the browser and something completely different in the flash movie. That’s a pain in the behind.

Inital Thoughts on Zen Micro and Nomad to Go

After using the new 2.1 firmware for my Nomad Zen Micro for a couple of days, I can see why they haven’t upgraded all their players en masse quite yet. It still has a few rough edges. Red Chair Software, makers of the awesome Notmad Explorer that I use to manage my other Nomads, advises that you use the older 1.x firmware “you have a specific reason to switch”. Of course, I have a very good reason to switch. The 2.1 firmware is actually beta – something I think Creative should make a little more obvious on the website (not that I wouldn’t have downloaded it anyway). For the less adventurous, the 2.0 firmware also supports Napster to Go and isn’t in beta.

The place where I notice the rough edge the most during song transition. When I push next or previous song, sometimes it happens right away and sometimes it takes 4-5 seconds. It doesn’t happen when it’s playing back a set of songs – what ever the Nomad is doing (verifying licenses I’m assume) it must do it for the next song before the current song ends, so the lag only occurs when you’re jumping around manually.

That’s really my biggest complaint. Napster to Go works really well. They haven’t upgraded their help files to the new 3.x version of Napster – for example, all of their screenshots have a separate library function within Napster, but on my machine it just uses WMP’s library – but it’s pretty easy to figure out. I’ve configured NTG and WMP 10 to auto sync any Zen Micro with any songs I’ve downloaded from Napster (about 1GB in the first 24 hours I’ve used it!). The only complaint there is that autosync works by playlist. If you download a Napster compilation, autosync will transfer the music but not the playlist.

And that reminds me of a feature I’d like to see on the Nomad (all of them). I want to be able filter the list of album to exclude the ones that only have one or two songs. When you download a compilation, you get around 25 songs from different artists. Great for discovering new music, but it adds a bunch of noise to the list of albums. So why not exclude albums that only have a few songs downloaded?

I Give Up On CSS but Not On Flash

Larry O’Brien clued me into the fact that the new DevHawk theme didn’t render correctly in FireFox. When I redid my theme, I tried to be good and use all div and span tags, but apparently building a three column layout with a dynamically sized middle column that works on IE and FireFox is beyond my CSS skills. So I went back to using tables. Maybe the folks at CSS Zen Garden would freak out, but the table works just fine.

Larry also pointed me to ActiveSWF, a server side COM component for generating dynamic flash movies. You munge up an XML file describing the movie, hand it to ActiveSWF and it does the rest. Sweet. Only thing missing is a .NET version (I realize I can interop to COM, but that’s a pain to deploy).

Thanks Larry!

Vector Graphics in the Browser

I guess there’s no real good story for vector graphics in the browser. I know IE supports VML natively, but no other browser does. SVG is the standard, but you need a plugin to make that work in IE and FireFox. Adobe makes an SVG plugin, but who has that installed? Everyone has Flash installed, but that seems like overkill to render a few vector graphics. Avalon would be perfect, except that it isn’t shipping yet.

Does that mean that if I want to build a wide reach website that creates relatively simple data driven graphics (bsaically filled boxes) that I still have to use images?