The Silverlight Code – Design Gap

.NET developers tend to love Silverlight because it gives them the ability to write cool applications using programming idioms they are familiar with.  Everything about it screams out cool.  Furthermore, .NET developers do not need to learn Flash to get Flash-like effects.  They can drop into the XAML (good ol’ XML) in Visual Studio and start typing away with Intellisense standing by to help.

Expression Blend is a little trickier.  It is a different idiom and .NET coders have a hard time using it.  All the same, it is not completely alien.  A .NET developer can still drop into the XAML if he wants to, and it is possible to mentally translate between the drag-and-drop designer and the XAML that is produced to the objects one assumes are being generated at runtime.  The bits that are foreign are assumed to be there for designers.

Yet designers have not embraced Expression Blend and finding out why is essential to building an effective Silverlight development story.

Allison Richter recently joined the Silverlight Atlanta User Group.  In her introduction to the group she mentioned that she is a designer who is mastering Silverlight but finding the experience frustrating.  When I asked her about this she did more than simply offer a quick reply.  She wrote an enlightening essay on her website 2foldesign explaining the gap between designers and Silverlight coders.  You can read the entire essay here (the speaker she refers to near the bottom is Roger Peters, a lead Silverlight developer for IQ Interactive):

Reasons why designers may not be seeking a change to Silverlight could be that code is not necessarily their passion. Code is what allows them to place their design into a workable format. Kind of like when I paint, I may need to know how to stretch a canvas onto a frame so I can paint, but I do not love doing so. So code is a necessity, but not a passion. Most developers I know love to code. They love new code, new solutions. They would just as easily go home and work on the computer all night after coding all day for enjoyment. Designers want to pursue what they enjoy: design. Painting, drawing, logos, ID, branding. I know personally I’ll lay out $20 per mag for things like a new Image FX without a second thought to see what other people are doing. Yet I may not go out and research a new code language with as much zeal.

On the question of frustration, there are many many areas so I will name a few.

Blend/Silverlight creates a dependency. True, most applications will need a developer to work in concert with the designer to create a dynamic amazing product. I also recognize that Flash does not have the capabilities that Silverlight has. However first off when using Blend and Silverlight I had to be set up. This is off-putting to many designers. We want something we can do ourselves. Adobe has it’s products packaged up nicely and all we have to do is load. My developer had to help sift through the right files, work with dlls, set up my environment etc. I have all of my Expression software loaded, my Visual Studio hooked up, the toolkit downloaded etc. If I had started out on my own as a designer I would have already been lost. When I create with Flash, it’s one product in which I already know how to create everything I need to create, then drop what is published into my HTML and CSS …

My expectations before I started with Blend and XAML was that Silverlight would be like Flash. The Blend software itself is very unlike Flash in many ways. I would relate it more to ASP.NET than I would to Flash. The toolkit, the way you code in the XAML, the types of containers that you apply. These seem to be very much like ASP.NET …

The toolkit controls are difficult to edit. I will go and watch as many videos as I can before trying to create what I want. For example, I need to create an accordion. Yes, there is a tool for that. Yes, you can learn how to edit it. Most of the videos don’t explain all the parts of the XAML, they assume that you will just use the properties area in Blend. Then they jump to the code behind and start doing things that I would need my developer to do. So then I come to a grinding halt …

[Terminology] is misleading. From a designer standpoint things like border mean a tiny thin line. You learn to put colored borders on all your divs/spans … to see what you are doing in CSS. So now I’m created entire blocks of items within a border? A border has a background? It’s not familiar to a designer. This makes the comparison between what we know already and what the new code is maddening …

There is no one to ask. Most of the places I have worked after college, I am the only designer. Other designers do not want to work with new technologies. The old ones cater to the right side of the brain, so to speak. They know how to use these programs, and time is money. The forums, information, videos seem mostly to be for developers. As the speaker from last night said, there is no elusive Blend designer with a background in Flash – good luck finding one. You guys [coders] can pool your resources together and talk about what to do and how you got there, but there is not a large resource of people for me to ask.

New Job Posting: Teleport Engineer


I’m always surprised at the rapid rate of technological progress.  I often sit and watch my son play through Halo, Call of Duty, or Rock Band and get nostalgic for the simpler days when I played Adventure, Kaboom and Pitfall.

Imagine my amazement, then, when I received the following job posting for a Teleport Engineer in my email:

Requisition #

Job Title
Teleport Engineer

Turner Broadcasting

United States – Georgia – Atlanta

Full Time

Salary Grade_TBS

Referral Bonus Eligible

Referral Bonus Amount _TBS

Posting Job Description

Qualifications: 3 to 5 years of experience working as a maintenance engineer in a
earth station and/or broadcast facility.
3 to 5 years experience working with RF, high voltage, emergency power systems and high power RF amplifiers.
Two to four year technical degree, electronics related (or equivalent education/experience/training). Excellent customer services skills with attention to detail.
Demonstrated organizational skills and ability to prioritize and multi-task in a high-stress environment.
A sense of urgency in solving customer requests to ensure timely resolution.
Strong verbal and written communication skills in order to communicate with customers, peers and vendors.
Demonstrated ability to work in a team based environment to ensure 24x7x365 support of our customers.
Duties: Maintenance – troubleshooting, repair, calibration and preventative maintenance of equipment and systems at the teleports. Maintenance is done to ensure that the TBS customers have uplink and downlink resources available when required and to keep outage time to a minimum. In addition, maintenance is imperative to ensure that the teleport transmission and receive systems are compliant; requirements set forth by the Federal Communications Commission (FCC), the satellite providers and OSHA.
Projects – participation in the planning, installation and integration of new or replacement equipment and systems. May act in lead role on small projects.
Quality Control – ability to ensure outgoing, and incoming signals and content are compliant with standards set forth by the FCC, the satellite providers, TBS and good engineering practices. In addition this responsibility includes quality control of installations equipment and documentation utilized by the teleports.
Customer Service – provides the highest quality of customer service to our primary customers – Teleport operations, Distribution technology, CNN satellites/SNG, TEN and the TBS networks – by responding to requests in a timely manner.
Documentation – thoroughly documents problems and issues in the operations log. Timely and accurate completion on assigned projects including wire
numbers, systems documentation, drawings, time sheets, time tracking and work orders.

Turner Broadcasting System, Inc. and its subsidiaries are Equal Opportunity Employers.

And here I’ve been waiting for a job as a flying car mechanic.

Technological Similes (e.g., Silverlight is like . . .)


A few years ago I posted a list of technological similes on this blog involving the term “Ajax” which I aggregated from a Google Search.  You can read about it here.

It occurred to me that a similar search of similes involving the term “Silverlight” might be equally fruitful, much like throwing a fishing net into a sewer and seeing what comes back.  Voila the results:

Silverlight is like a little baby.”

“Silverlight is like Flash.”

“Silverlight is like Flash … only different.”

“Comparing Flex to Silverlight is like comparing apples and oranges.”

Silverlight is like all choppy and slow which slow down my browser like hell.”

“Silverlight is like ajax and Flex.”

“Silverlight is like a lightweight version of WPF…”

“Silverlight is like a browser add-on that can understand XMAL code.”

"Silverlight is like OS X.”

“At a time like this, finding an article written as recently as Feb 2009, and listing the strengths of Silverlight, is like finding lots and lots of drinking water when thirsty in a desert.”

"Silverlight is like activex all over again – arghhhhh!"

“In the experience world WPF is the Ferrari, Silverlight is like a Lexus, and Ajax is that Nissan Stanza that your sisters boyfriend bought…”

“Microsoft Silverlight is like the proverbial elephant…”

“After playing with the beta for a few weeks, developing a control in Silverlight is like walking through mud.”

“Using Silverturd instead of Silverlight is like using M$ instead of Microsoft and people who do that are looked down upon.”

“Someone memtioned Silverlight is like Java plugin?”

“I read on one blog that programming with Silverlight is like going camping with .NET.”

“Silverlight is like the wild wild west. Everyone code however they want, Every new discovery is like virgin territory…”

“The easy developing tool provided by Silverlight is like candy to lure developers in and cage them…”

“SilverLight is like Flash on Crack.”

Silverlight is like the force. It has a light side and a … uh…… silver side.”

“Silverlight is like an add on. Almost after the fact. I haven’t thought it through…”

Visual Studio 2010 Beta 2 Uninstall

The Visual Studio 2010 Release Candidate was uploaded for MSDN subscribers this morning.  It should be generally available on February 10th.

In order to install the RC, however, you must first uninstall the Beta 2, if you have it.

There are dire warnings about what might happen if you mess up the uninstall.  Here is the order in which I did it on my Windows 7 machine (as it happens, while I was introducing my three children, for the first time, to The Matrix):

1.  I uninstalled all my Silverlight 4 bits.  I’m not sure if this is strictly necessary, but according to Gu’s blog, SL 4 won’t work with the VS 2010 RC anyways until the next SL drop.

2.  If you have Team Explorer installed, as I did, you will need to uninstall the Microsoft Team Foundation 2010 Object Model.

3. Uninstall Microsoft Visual Studio 2010 Beta 2 (whichever version you have – mine was the Ultimate).

4. Now for .NET 4 itself.  I tried to uninstall Microsoft .NET Framework 4 Muti-Targeting Pack, but got a message that this had already been uninstalled and the entry subsequently disappeared from my Programs and Features window.

5. Uninstall Microsoft .NET Framework 4 Extended.  A warning comes up stating that some of your applications may no longer work if you continue in your misguided path.  Ignore the warning and plow forward.  A reboot is required.

6. Uninstall Microsoft .NET 4 Client Profile.  A reboot is required.

At this point I was able, finally, to install my shiny new version of Visual Studio 2010.  For kicks, I built a quick Hello World project using SL 3.  I also ran a previous SL 3 project.  No problems to report, and the RC IDE does seem much more responsive than the Beta 2.  Gu’s blog does mention, however, that there are problems with multi-touch using the .NET Framework 4 RC.

… oh, and the full uninstall of the beta 2 and installation of the RC takes, in case you were wondering, approximately as much time as watching The Matrix from the opening credits up to the point where Mr. Smith is run over by a train.


Addendum (2/12):

I’ve been having a problem with the RC crashing whenever I type too fast.  I have a Wacom Bamboo Pen and Touch which installs a service called “WTouch Service”.  By disabling the service, as well as the Wacom drivers, I was able to make the issue go away, sort of.

Addendum (2/17):

Finally a patch has been released for the Intellisense issues.  Download here.

Revolution, Evolution, Visual Studio 2010 and Borges


In his preface to The Sublime Object of Ideology Slavoj Zizek writes:

“When a discipline is in crisis, attempts are made to change or supplement its theses within the terms of its basic framework – a procedure one might call ‘Ptolemization’ (since when data poured in which clashed with Ptolemy’s earth-centered astronomy, his partisans introduced additional complications to account for the anomalies).  But the true ‘Copernican’ revolution takes place when, instead of just adding complications and changing minor premises, the basic framework itself undergoes a transformation.  So, when we are dealing with a self-professed ‘scientific revolution’, the question to ask is always: is this truly a Copernican revolution, or merely a Ptolemization of the old paradigm?”

In gaming circles, Zizek’s distinction between Ptolemization and Copernican revolution resembles the frequent debates about whether a new shooter or new graphics engine is merely an ‘evolution’ in the gaming industry or an honest-to-goodness ‘revolution’ – which terms are meant to indicate whether it is a small step for man or a giant leap for gamers.  When used as a measure of magnitude, however, the apposite noun is highly dependent on one’s perspective, and with enough perspective one can easily see any video game as merely a Ptolemization of Japanese arcade games from the 80’s.  (For instance, isn’t CliffyB’s Gears of War franchise — with all the underground battles and monsters jumping out at you — merely a refinement of Namco’s Dig Dug?)

When Zizek writes about Ptolemization and revolutions, he does so with Thomas Kuhn’s 1962 book The Structure of Scientific Revolutions as a backdrop.  Contrary to the popular conception of scientific endeavor as a steady progressive movement, Kuhn proposed that major breakthroughs in science are marked by discontinuities – moments when science simply has to reboot itself.  Professor Kuhn identifies three such ‘paradigm shifts’: the Copernican revolution, the displacement of phlogiston theory with the discovery of oxygen, and the discovery of X-rays.  In each case, according to Kuhn, our worldview changed, and those who came along after the change could no longer understand those who came before.

Thoughts of revolution were much on my mind at the recent Visual Studio 2010 Ultimate event in Atlanta, where I had the opportunity to listen to Peter Provost and David Scruggs of Microsoft talk about the new development tool – and even presented on some of the new features myself.  Peter pointed out that this was the largest overhaul of the IDE since the original release of Visual Studio .NET.  Rewriting major portions of the IDE using WPF is certainly a big deal, but clearly evolutionary.  There are several features that I think of as revolutionary, however, inasmuch as they will either change the way we develop software or, in some cases, because they are simply unexpected.

  • Intellitrace (aka the Historical Debugger) stands out as the most remarkable breakthrough in Visual Studio 2010.  It is a flight recorder for a live debug session.  Intellitrace basically logs callstack, variable, event, SQL call (as well as a host of other) information during debugging.  This, in turn, allows the developer to not only work forward from a breakpoint, but even work backwards through the process flow to track down a bug.  A truly outstanding feature is that, on the QA side with a special version of VS, manual tests can be configured to generate an Intellitrace log which can then be uploaded as an attachment to a TFS bug item.  When the developer opens up the new bug item, she will be able to run the Intellitrace log in order to see what was happening on the QA tester’s machine and walk through this recording of the debug session.  For more about Intellitrace, see John Robbins’ blog.
  • As I hinted at above, Microsoft now offers a fourth Visual Studio SKU called the Microsoft Test and Lab Manager (also available as part of Visual Studio 2010 Ultimate).  The key feature in MTLM, for me, is the concept of a Test Case.  A test case is equivalent to a use case, except that there is now tooling built around it (no more writing use cases in Word) and the test case is stored in TFS.  Additionally, there is a special IDE built for running test cases that provides a list of use case steps, each of which can be marked pass/fail as the tester manually works through the test case.  Even better, screenshots of the application can be taken at any time, and a live video recording can be made of the entire manual test along with the Intellitrace log described above.  All of this metadata is attached to the bug item which is entered in TFS along with the specs for the machine the tester is running on and made available to the developer who must eventually track down the bug.  The way this is explained is that testing automation up to this point has only covered 30% of the testing that actually occurs (mostly with automated unit tests).  MTLM covers the remaining 70% by providing tooling around manual testing – which is what most of good testing is about.  For more info, see the MTLM team blog.
  • Just to round out the testing features, there is also a new unit test template in Visual Studio 2010 called the Coded UI Test.  Creating a new unit test from this template will fire up a wizard that allows the developer to start a manual UI test which gets interpreted as coded steps.  These steps are gen’d into the actual unit test either as UI hooks or XY-coordinate mouse events depending on what is being tested.  Additionally, assertions can be inserted into the test involving UI elements (e.g. text) one expects to see in the app after a series of steps are performed.  The Coded UI Test can then be run like any other unit test through the IDE, or even added to the continuous build process.  Finally, successful use cases verified by a tester can also be gen’d into a Coded UI Test.  This may be more gee-wiz than actually practical, but simply walking through a few of these tests is fascinating and even fun.  For more, see this msdn documentation.
  • Extensibility – Visual Studio now has something called an Extension Manager that lets you browse and automatically install add-ins (or more properly, “extensions”).  This only works, of course, it people are creating lots of extensions for VS.  Fortunately, thanks to Peter’s team, a lot of thought has gone into the Visual Studio extensibility and automation model to make it both easier to develop extensions, compared to VS2008, but also much more powerful. Link.


  • Architecture Tools – Code visualization has taken a great step forward in Visual Studio 2010. You can now generate not only class diagrams, but also sequence diagrams, use case diagrams, component diagrams and activity diagrams right from the source code.  Even class diagrams have a number of visualization options that allow you to see how your classes work together, where to find possible bottlenecks, which classes are the most referenced and a host of other perspectives that the sort of people who like staring at class diagrams will love.  The piece I’m really impressed by is the generation of sequence diagrams from source code.  One right clicks on a particular method in order to get the generation started.  As I understand it, the historical debugger is actually used behind the scenes in order to provide flow information that is then analyzed in order to create the diagram.  I like this for two reasons.  First, I hate actually writing sequence diagrams.  It’s just really hard.  Second, it’s a great diagnostic tool for understanding what the code is doing and, in some cases, what it is doing wrong.

There is a story I borrowed long ago from the Library of Babel and forgot to return – I believe it was by Jorge Luis Borges – about a young revolutionary who leads a small band in an attempt to overthrow the current regime.  As they sneak up on the house of the generalissimo, the revolutionary realizes that the generalissimo looks like an older version of himself, sounds like an older version of himself, in fact is an older version of himself.  Through some strange loop in time, he has come upon his future self – his post-revolutionary self – and sees that he will become what he is attempting to overthrow.

This is the problem with revolutions — revolutions sometimes produce no real change.  Rocky Lhotka raised this specter in a talk he gave at the Atlanta Leading Edge User Group a few months ago; he suggested that even though our tools and methodologies have advanced by leaps and bounds over the past decade, it still takes just as long to write an application today as it did in the year 2000. No doubt we are writing better applications, and arguably better looking applications – but why does it still take so long when the great promise of patterns and tooling has always been that we will be able to get applications to market faster?

This is akin to the Scandal of Philosophy discussed in intellectual circles.  Why, after 2,500 years of philosophizing, are we no closer to answering the basic questions such as What is Virtue?  What is the good life?  What happens to us when we die?

[Abrupt Segue] – Visual Studio 2010, of course, won’t be answering any of these questions, and the resolution of whether this is a revolutionary or an evolutionary change I leave to the reader.  It does promise, however, to make developers more productive and make the task of developing software much more interesting.