Mike Swanson

August, 2008

  • Mike Swanson's Blog

    Update on My Illustrator Plug-In and Flash to XAML Conversion Tool


    Just over three years ago, in July, 2005, I released the first version of my Adobe Illustrator to Avalon/XAML Export Plug-In. The plug-in started off as a weekend project, and it’s since become quite popular. The plug-in is included in most WPF and Silverlight books, and it’s fun to see it referenced when I’m thumbing through new releases at Borders or Barnes & Noble. I hadn’t been watching the download stats, so I checked tonight and was surprised to see that it’s been downloaded over 75,000 times (actually a bit more, but the stats aren’t complete). Even if I only counted the most recent release, that would make it a top download on CodePlex. That’s pretty cool.

    I receive e-mail about the plug-in almost every other day, and here are the most common questions and their answers:

    • Do you plan to update the plug-in?
      Unfortunately, my role has changed within Developer & Platform Evangelism (DPE) over the years, and I no longer focus on WPF, Silverlight, or XAML. As such, it’s unlikely that I’ll have the time to update the plug-in.
    • Do you plan to release the source code?
      While releasing the source code has been my goal since day one (actually, even prior to its first release), there are many complicated reasons why I can’t. I’m not happy about it either, but it is what it is.
    • Does it run on a Mac?
      No. I have nothing against the Mac, but I’ve never owned one, and I’ve never done any Mac development. Sorry. Update: there is now a Mac version of the plug-in.
    • Why doesn’t it do _____?
      Most of what it can or can’t do is listed in the Features grid on the plug-in page.

    A colleague pointed me to Hanselminutes Show #120. Jump to 17:34 to hear Felix describe his workflow. Here are some of the juicy quotes that help to validate why I created the plug-in in the first place:

    “Every designer knows Photoshop and Illustrator inside out.”

    “That Illustrator plug-in has been available to me and I use it—I say—daily.”

    “It’s unbelievable. It’s such a vital tool.”

    It’s great to hear this from someone who uses the plug-in on a daily basis, and frankly, his feedback has motivated me to think about updating the codebase. No promises, but you never know. :-)

    By the way, if you’re looking for an Illustrator tool that you can extend, check out the XamlXporter for Illustrator project on CodePlex.

    The other XAML-related tool I’ve written is called SWF2XAML, and it was first released in November, 2006. Compared to the Illustrator plug-in, SWF2XAML has a much more complex codebase. SWF2XAML will open a Flash file (SWF), parse structures from the file format, generate a frame of data, convert it to WPF, and display it in a window. The XAML can then be exported for either WPF or Silverlight use. As a convenient side effect, embedded bitmaps are also automatically exported.

    According to the stats, SWF2XAML has been downloaded over 42,000 times, and its most recent version alone would dethrone the Illustrator plug-in (if it was hosted on CodePlex, that is). Again, I’m amazed. It’s been referenced in recent WPF and Silverlight books, but it isn’t as pervasive as the Illustrator plug-in.

    There are three questions I receive frequently for SWF2XAML:

    • I receive the following error message: “Input string was not in a correct format.” What’s up?
      This is a known bug that occurs when the numeric format in Windows is set to a non-United States format (i.e. 123.456.789,00). The workaround—while inconvenient—is to change the Regional Settings in Windows to use English (United States). This seems to do the trick every time.
    • Do you plan to update the tool?
      Same answer as the Illustrator plug-in, I’m afraid. :-(
    • Does it convert animation or sound?
      No. While it could be extended to convert animations and sound, it was built to recover static assets from SWF frames and convert them to XAML. For many, once the assets are converted, they can be used (and even re-animated) in a XAML tool of choice. Many large web sites have used SWF2XAML to convert their Flash assets to XAML for use with Silverlight.

    If you want to know how to read a Flash file (SWF) with C#, check out my Example C# Code for Reading Flash (SWF) Files. For insights into how the Flash shapes are parsed and converted to XAML, check out Converting Flash Shapes to WPF. Last, I encourage you to experiment with another tool that converts Flash files—including both animation and sound—called theConverted – Swf to Xaml Converter (the Samples page has some good demos).

    Thanks to everyone who has used these tools over the years! I’ve really appreciated the suggestions and feedback I’ve received, and I’m very happy to hear that they’ve helped you be more productive.

    Update: Robin Debreuil, creator of theConverted, points out that he has recently added the project to CodePlex. Thanks, Robin!

  • Mike Swanson's Blog

    PDC2008: A Day in the Life #3


    Before I forget, be sure to check out the latest videos on Channel 9 in our weekly Countdown to PDC2008 series (or just look for anything tagged PDC08). The 10-minute-or-so shows are fun to make, and Jennifer and I would love your feedback, questions, and suggestions. Plus, we’ve been introducing a new Hard Hat Challenge on each episode, and winners receive a very limited edition PDC2008 t-shirt. Note that these are not the official event shirt (especially, since the event shirt hasn’t been selected yet)…these are the shirts we give to the internal Microsoft team.

    Okay, let’s get to A Day in the Life #3. I’d been thinking about possible topics for this third installment when the obvious answer popped into my head. How about a literal diary-style account of an actual day at work? It might seem a bit mundane, but it would truly be in the spirit of the series. So, let’s give it a go.

    To start, there’s nothing abnormal or atypical about this past Thursday, August 14, 2008. It was the day I had the idea to write this post, so I jotted down an outline of my day and started filling in some of the details. Unfortunately, there are some details that I can’t share, and I hope you’ll indulge a bit of obscurity.

    Like clockwork, I almost always wake up one minute before my alarm is set to go off at 7:00am. It takes me about 30-40 minutes to make myself presentable, and I drive from my home in Sammamish, WA to the main Microsoft campus in Redmond. On the way, I stop by Peet’s Coffee & Tea and pick up a large, non-fat latte. I usually arrive on campus around 8:15am with coffee in hand and head to my office in building 18.

    Since this was a Thursday, my first order of business was to put together a slide deck for my two-hour PDC2008 Track Team meeting. I have Track Team meetings every Tuesday and Thursday morning for two hours all the way until PDC2008 in October. The team focuses on PDC content, and we have about 30 members from across the company that actively participate (there are many more on supporting virtual teams, but I don’t interact with them as frequently).

    While preparing my slides, Steve Cellini, our General Manager (“GM”), popped-in to my office and asked if I could make a last-minute 10:00am meeting with Technology X (apologies for the obscurity). Unfortunately, without me, there isn’t anyone to run my track meeting, so I asked if he could move the meeting to 1:00pm and cancel the other meeting already occupying half of that time slot. An unfortunate side effect of this reschedule was that I would lose the only “free” 30 minutes of my day. Oh well. I like working on stuff I love!

    For the morning track meeting, I had prepared a Wordle of August PDC2008 content for my slide deck. Fellow friend and evangelist, Thomas Lewis, had pointed me to Wordle awhile back…and it’s addictive! It basically takes words, counts how many times they appear within text, and creates a “word cloud” that represents the relative frequency of each word with its font size. Because Wordle doesn’t perform stemming, and because I wanted our technology and product names to be counted as single units, I wrote a small application to “fix” some of the word duplication and generally clean-up the cloud (i.e. “Visual Studio” instead of “Visual” and “Studio”). Here’s the result of running the current list of titles and abstracts from our PDC2008 sessions (note that we’ve published less than half of the sessions we’ll ultimately have at PDC2008, so this word cloud will change as we get closer to October):


    I was very happy to see that the word cloud didn’t reveal any surprises. Indeed, we use the words Microsoft, application, learn, new, and service very frequently. And as a matter of fact, those words do a pretty good job of summing-up the kind of content we’ll have at PDC2008. As I mentioned, other words will “pop” as we reveal more of the unpublished sessions over time (there’s that obscurity again). :-)

    I also pulled data for the top 10 sessions based on the number of people who have added them to their My Sessions list. Without revealing the whole list, it shouldn’t surprise anyone that The Future of C# by Anders Hejlsberg is tracking at #1. Anders is always a highly rated speaker, and I’m sure that this session will be packed. By the way, if you haven’t added your favorite sessions yet, please do. It’ll help me create a master agenda that allows you to see more of your favorite session in-person. Thanks in advance.

    I didn’t think I’d be able to make a 9:30am meeting with Technology X, and I had marked myself “tentative.” But, I finished my meeting preparations in time and ran to the conference room. Thank God it was in the same building. We had a productive discussion about PDC2008 sessions, and I had to leave a few minutes early to start my 10:00am Track Team meeting.

    Our Track Team meetings generally start at around 10:08am, because it takes that long for many of the attendees to find parking and make it up to the conference room. Most of them come from other building across campus. Topics of the Thursday meeting included:

    • General registration update – I quickly cover how registration is doing overall, and we touch on what percentage of attendees have signed-up for pre-conference sessions.
    • A reminder that internal employees need to sign up soon – we have internal deadlines too. :-)
    • A reminder that our internal Session Suggestion Box would close at end-of-day Friday – this is an internal SharePoint list where anyone inside the company can recommend sessions that we should consider for PDC2008. It’s quite a list.
    • A reminder that the team needs to identify their Lounge Owners - these are the people who are responsible for making sure that the right experts are staffing the Lounge and Hands-on Lab areas at the event.
    • An update on lunch sessions – nothing obscure here…these are the sessions that happen during lunch.
    • A discussion about the Microsoft Pavilion booths and the Lounge layouts - we decided to include an additional monitor in each Lounge for demos
    • The aforementioned top 10 session list

    We had planned to review the status of our Hands-on Labs and talk more about staffing, but around 11:15am, an unscheduled fire alarm very rudely interrupted us, so we all picked up our laptops and filed outside…into the bazillion degree temperatures we had in Redmond on Thursday. We met in small pockets as we waited to return to the wonderful air-conditioned building; some of us talked about our ideas for a PDC2008 poster and others brainstormed about the best way to track staff. I was sweating the whole time. Because we were getting near the end of our meeting time, we decided to call the meeting and follow-up via e-mail.

    A bit before noon—when we were allowed back into the building—I ran into Steve Cellini in the hall, and we quickly debriefed on the 9:30am meeting that I had with Technology X. Henry Hahn, one of our Track Team members, happened to still be around, and he joined us to report his perspectives.

    At noon, and without lunch (my wife doesn’t like it when I don’t eat…and neither do I), I ran to a meeting about MIX09. For those that don’t know, the Evangelism organization at Microsoft is responsible for both our PDC and MIX events. We talked about the questions we want to ask on the registration form you use when you sign-up for the conference. If you can believe it, the fire alarm went off again…yes, again…and I was in the same conference room as before! So, we all went outside and continued the meeting in the shade. To help us better dial-in the content at our events, we try to track the kind of attendees we get, and we never seem to be completely happy with the prior year’s taxonomy. In other words, each year, we try to do better. This meeting was to discuss exactly how we do it. We think we’ll ask about tasks instead of having everyone put themselves into pre-defined buckets (like Developer/Designer/etc.). A lot of people have blended skill sets, so this sounds like a good idea to me.

    I had to leave the MIX09 meeting early to travel to another building on campus for a 1:00pm discussion on Technology X. We talked about how we got to where we are and what we needed to do for our next series of steps. This meeting was all about PDC2008 preparation, and we talked about keynote presence and the amount of content that we could feature given our current session budget.

    We then drove back to building 18, and I had about 20 minutes before a few of us had to leave for a meeting in yet another building. With laptop in hand, I never made it back to my office. Two people stopped me in the hall and pulled me into their offices for questions related to PDC2008.

    So, at 2:30pm, I went with a few people to another building to talk about the long-term strategy and reveal plans for Technology Y (obscurity again, but a different technology this time). We discussed long-term roadmaps, upcoming features, core messaging, overall concerns, how we would address specific business problems, and how we could feature Technology Y at both our PDC and MIX events and within Evangelism overall. It was an inspirational talk with one of our great Vice Presidents.

    By the time we returned to building 18, our weekly PDC2008 Core Team meeting was already underway, and I joined about 15 minutes late (I hate being late). The team was already talking about wireless network coverage in our big keynote room, some quotes we had received, concerns about obscuring views with wireless “towers,” etc. Like a NASA launch, we continued with things like registration status, marketing status, content status, press and analyst status, keynote status, and the status of the many other sub-groups and people who drive various aspects of a big conference like PDC. I gave my typical way-too-long update on content, covering: sessions, publishing plans, keynotes, slide templates, room signage, our Microsoft Pavilion area, the Lounge area, and Hands-on Labs. By the way, I don’t own most of these things, but content ends up touching just about everything at the event. I eventually just decided to shut-up, since I could talk for hours on PDC2008. You can probably tell by the length of this blog post. :-)

    When the meeting ended around 5:00pm, I was asked to stay to talk about a few outstanding issues. Then, on the way back to my office, I stopped in Thomas Lewis’ office to talk about MIX09 keynotes, our evangelism organization, and a lot of other things. Thomas and I think quite a bit alike, and he’s one of the few people that I trust implicitly…and we go to lunch almost daily.

    To top off my Thursday, Joan Hoshino, our PDC2008 Business Owner (who you can meet in this Countdown to PDC2008 video), caught me to ask for my help to re-layout the Microsoft Pavilion booths. So, I wrapped-up with Thomas and helped Joan for about 15 minutes. We try to locate the booths near other related technologies to make navigation of our big room easier and more productive for attendees, so this was a very worthwhile exercise.

    Uncharacteristically, I finally left the office around 6:30pm with no lunch or time for e-mail. I normally try to get out of the office by 5:00pm or so, but meetings that take place later in the afternoon can cause me to stay a little later.

    And that was my Thursday! The day was a little longer than average for me, but the mix of activities and meetings were pretty typical. If you’ve followed this post to the end, I congratulate you!

  • Mike Swanson's Blog

    PDC2008: A Day in the Life #4


    So soon after A Day in the Life #3, you ask? Indeed! There are a few questions that I get over and over from people both internal and external to Microsoft, and I thought I’d address them in a blog post.

    Question #1: “I’m a third-party speaker (or ‘I know a third-party speaker…’) who has spoken at other events that would make a fantastic speaker at PDC. What can I do?”

    I get this one almost every day. Sometimes, they suggest a specific topic, and other times they say that they’re quick learners who can present on any topic, and if we have a session without a speaker, they’d likely be the perfect fit. While I honestly appreciate their enthusiasm and interest, the nature of PDC content makes it extremely difficult for anyone who didn’t actually architect or build the product or technology to authoritatively present.

    As you may recall from A Day in the Life #2, PDC is not an event where we provide training on today’s technologies (except in our pre-conference sessions). PDC content is organized around top-level themes, and the content is selected because it aligns with those themes. Because PDC is where we lay out the future of the Microsoft platform, most of what we talk about is in the future. So, the content frequently falls into one of two categories:

    1. The product or technology won’t be announced until the PDC. We’ve introduced and launched a lot of technologies at prior PDCs, and you can bet we’ll do it again this year. Needless to say, there are usually only a handful of people who know about and understand the details of a new technology, and they’re inevitably members of the product team. It’s a reality of the situation.
    2. The product or technology has previously been announced and possibly covered at other events like Tech·Ed or MIX. In this case—and so we don’t simply repeat content that’s already out there and is possibly more appropriate for those events—we do it “PDC style” by going super deep. A good example from a previous PDC was a session that spent 75 minutes starting from a simple C# “Hello World” application, to how it was JITted to native code, to an exploration of the actual memory layout, to final output on the screen. For PDC2008, a good example would be Deep Dive: Building an Optimized, Graphics-Intensive App in Silverlight where we go under the covers on geeky topics like layout, rendering, and media pipelines. As you can imagine, there are very few people who can deliver this kind of content.

    As a result, it’s rare for third-party speakers to present a breakout session at PDC. Occasionally, presenters will invite third-parties to speak about their experience with a technology, and when we have panels, there are almost always third-parties involved. And third parties help us deliver fantastic pre-conference sessions.

    It’s interesting to note that third-party speakers are absolutely appropriate (if not required) for Tech·Ed and MIX. In those cases, though, it makes perfect sense given the type of content presented at those events.

    Question #2: “When is the ‘call for papers?’”

    Like #1, I get this question a few times each week from both internal and external folks. It’s a great question, and it makes sense given the fact that PDC is the Professional Developers Conference. Most conferences do have a call for papers (or CFP), and it’s not obvious why PDC wouldn’t have the same mechanism to gather content.

    If I again refer back to A Day in the Life #2, the fact that we start with top-level themes and work our way “down” may explain why we usually know what content we’re looking for. It’s a question we ask ourselves as part of the first step in planning a PDC. However, because we’re not perfect by any stretch, we do have an internal Session Suggestion Box which is similar to a CFP in concept. It’s implemented as a SharePoint list, and anyone inside Microsoft can contribute a session idea. We just recently closed the Session Suggestion Box to new submissions. There are some fantastic suggestions on the list, but unfortunately, many of them have little to nothing to do with the future of our platform.

    Question #3: “What are your tracks?”

    Tracks are like mini-conferences that run in parallel. Each track typically covers a unique set of topics, and they can be helpful when building a master agenda for the conference. At PDC05, for example, the six tracks were: Presentation, Data, Communication, Fundamentals, Tools and Languages, and Office System. For PDC2008, we have four internal tracks that we use to organize the groups that assemble the content, and the tracks were selected to ensure that various organizations within Microsoft work together. However, we don’t believe that the internal track names will make any sense at all to attendees (without education), so we’re going to align our topics by technology…very similar to how we’ve tagged the content by technology in our session list. There are other conferences that are very interested to see how this “no tracks experiment” works out. Let’s hope it works well!

    Last, I’ve thought about using one of our sessions for a PDC feedback discussion. While we do surveys before, during, and after the conference to gauge your feedback, there’s nothing like a face-to-face chat. Would anyone actually attend? Does this sound like a good idea? Is it worth “giving up” another session to do this? If you have suggestions, please leave feedback or contact me directly.

    Until next time…

Page 1 of 1 (3 items)