Michael Wolf
{Binding ME}
Friday February 05, 2010
MIX 2010 Zune HD app
We're starting to get pretty excited over here about MIX and SXSW. We will have a presence at both, but I have to admit I'm kind of partial to mix. So in celebration of MIX 2010 and the great music that is the heart of SXSW I built a zune hd music "mix" application.
This was developed using XNA and Game Studio 3.1 with the zune hd extensions. Using the zune media collection and the built in accelerometer you are able to shake the zune and pick a random song. There is also a "lock" button so once you have a song your ready to rock to, you can still drop it in your pocket with out the concern of shaking to a different song. If you have a zune hd and the development tools installed, ping me (@geekpunk) and I can send you a ccgame to install.
Overall XNA development is a lot of fun, and a great paradigm shift from Silverlight and WPF development. The biggest shift is from an event model like in most business development frameworks (wpf/silverlight) to a polling / query/game loop style model like that of xna. Another paradigm shift is similar to surface development and early silverlight 1.1 development, and that’s getting over the "control" hurdle. There are no "controls" and thus building an app like the zune mix app depends on some more manual methods of "controling" interactions and layout than you would in silverlight or wpf. Luckily there are allot of great resources out in the community to learn from (which I will list below). Also all the same ria style tricks you have learned through the years and design skills still totally apply. Over the next couple weeks we will have more and more things to show off at mix and sxsw, looking forward to seeing people there.
xna resources
- http://creators.xna.com/en-US/education/gettingstarted
- http://www.codeproject.com/KB/game/XNALevel.aspx
- http://www.progware.org/Blog/post/XNA-Game-Development-(First-Steps).aspx
Tuesday January 19, 2010
Silverlight 4 FileSystemWatcher ... no strings attached
In my last post I showed how to implement a bridge service using the new net.tcp binding in order to implement something not native to Silverlight 4, namely a FileSystemWatcher. While this works, as does Justin Angels com+ implementation (http://justinangel.net/#BlogPost=CuttingEdgeSilverlight4ComFeatures), it doesn't translate well to the mac, and eventually the mono , platform. However seeing Justin's com+ implementation inspired me to create a full Silverlight implementation using a background thread to look for changes. Overall this took around an hour.
In my ruff first pass implementation the file system watcher is a dependency object. Thus it can run its own background worker, and dispatch back to the UI thread to publish back events, without slowing down the ui thread looking for changes. It wakes up every 3 seconds to search the path looking for changed/deleted/ or additional files. With this "native Silverlight" implementation it is also restricted to the elevated trust System.IO file sandbox (folders: My Documents, My Pictures, My Videos , My Music and related subfolders see http://msdn.microsoft.com/en-us/library/ee721083(VS.96).aspx#file_system_access). Not as solid as having this functionality built directly into the framework, also does not give you the full os access like com and or a bridge service would. However it does give an option for building cross platform solutions which must monitor an accessible folder.
See the screencast below to see it in action.
Monday January 18, 2010
Silverlight 4 breaking the com sandbox to create a file watcher
Since Silverlight 4's release I have become quire enamored with the elevated privileges out of browser functionality. The com interopability is great, but again your back to com development and interop. Which although very powerful is also kind of painful. Recently some one brought up a question of how you would accomplish something like a file watcher. In a desktop / server experience this would be pretty simple using something like a FileSystemWatcher (http://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher.aspx ) in the full clr. However no such luck with in the Silverlight 4 agclr. Yet with the ability to execute processes from the out of browser applications in Silverlight 4 on windows, I decided to create a bridge service. A bridge service is more or less a full trust soap or tcpip service which runs on the desktop which the Silverlight application can communicate with. This approach is more or less what is used in the flex world via the merapi project (http://www.merapiproject.net/ ). After the bridge is in place, you can add a full .net FileSystemWatcher to the service, and publish back to the
Silverlight application when a file has been added/removed.
Policy/Socket Service
The creation of the bridge service is pretty straight forward. You will need to implement a duplex style pub/sub service, a good example can be found here http://tomasz.janczuk.org/2009/11/pubsub-sample-with-wcf-nettcp-protocol.html . This service could be a http pooling duplex, but in my example I used the new net.tcp binding due to the performance improvement. In addition you will need to set up and have running a policy server. The net.tcp binding enforces the same need for a policy server, and the port restriction as the Silverlight 3 socket support. Luckily now with in visual studio there is a decent policy service project template you can add from the online template gallery. In the example shown, this was the basis for the net.tcp service its self. Below is the code for setting up the net.tcp service in code with out config.
For more info on the new net.tcp binding in silverlight 4 see:
- http://www.silverlightshow.net/items/WCF-NET.TCP-Protocol-in-Silverlight-4.aspx
- http://tomasz.janczuk.org/2009/11/wcf-nettcp-protocol-in-silverlight-4.html
Silverlight to Bridge Communication
After the bridge is in place you communicate with the service like any other duplex style service, by adding connect methods and responding to the service call back delegates. In visual studio you even get full discoverability via the add service reference dialog. The last step is simply to add the com interop to actually start the service exe.
In addition on start up you could pull down the exe if its not currently downloaded (see http://www.cynergysystems.com/blogs/page/michaelwolf?entry=silverlight_4_and_command_line for further examples of this).
Monday December 21, 2009
webcam demo on channel 9
At PDC 09 I was able to spend some time with Pete Brown to talk about our Star Trek Surface Application but also some of the Silverlight 4 demos we have put together. Below is one of those, this is a sample I put together with one of our great user experience designers Ryan Lee. This was originally blogged here, but Pete's video is a much nicer walk through and much more fun. Also includes a cameo by Tim Heuer.
enjoy!
Monday December 14, 2009
star trek surface application on channel 9
At PDC 09 Rick and Myself were lucky enough to meet with Pete Brown to talk about a recent surface application. We also talk about the developer experience between surface, silverlight, windows 7.
http://channel9.msdn.com/posts/Psychlist1972/Pete-at-PDC09-Rick-Barraza-and-Mike-Wolf-Star-Trek-Experience/
jump on out and take a watch!
Wednesday November 25, 2009
Silverlight 4 and command line execution
In my last post on out of browser we showed how easy and powerful it is , all be it a bit of a step back in the development time machine, to execute native windows applications using the new com support in silverlight 4. The next logical question arises, that if you can execute com can you also execute a local process. The answer is yes and no. You can execute a local process, not using System.Diagnostics.Process.Start() like you would in the full CLR, but using the COM inerop and the Windows Script Host . The Windows Script Host is a multi purpose COM object that’s shipped with Windows since Win 98, and generally used for automation tasks, which makes it perfect for use in silverlight com inerop.
For the purposes of the demo I use the Script Host to act as my command line to execute arbitrary processes. In the following screencast I show how to simply execute any command via it from silverlight. Although this is useful for opening native applications, where this could really shine is by downloading applications which were specifically designed for interacting with your silverlight 4 OOB application.
The code to call the Script Host to execute the process is very simple.
Obviously , as that this tool is highly flexible, there are a ton of methods available to you (http://msdn.microsoft.com/en-us/library/2x3w20xf(VS.85).aspx) where we are just showing the absolute easiest implementation. However cool this is, and possibly very powerful as is to say open up a new browser window from your silverlight oob app (http://screencast.com/t/M2E1YmZiNz). I think the most exciting use for this would be in pulling down an additionally complementary executable for your OOB experience. With the addition of file access and web requests with out the client policy sand box in elevated privileges OOB apps this becomes very easy , as seen in the snippet below.
Conclusion after quite a bit of time exploring Silverlight 4 OOB functionality:
All and All with the combination of com inerop + web requests with out a sandbox + local file storage + drag and drop from the desktop == you get closer and "closer" to a first class citizen silverlight desktop app. I say closer because with the less than desirable com developer experience and the windows only platform of com , combined with a lack of a native installer leaves WPF as the development platform of choice for complicated desktop experiences. Where as Silverlight OOB with elevated privileges will now fill the gap that the click once WPF app once filled for most implementations (and then some). In addition the silverlight 4 OOB experience will now better lend its self to the desktop companion and hybrid Web/Desktop experience that really speaks to the 3 screens and a cloud vision.
Tuesday November 24, 2009
Tim Sneath Interview on Silverlight 4 and WPF
I was lucky enough at PDC 09 to run into (dr) Tim Sneath and ask him about WPF and the Silverlight continuum in the time of Silverlight 4. Go out to facebook and watch the interview.
http://www.facebook.com/video/video.php?v=190747957550
Over the next couple months I should be getting more and more quick videos out from others in the Silverlight/WPF community, so join our facebook group to be notified as they are added.
Friday November 20, 2009
Silverlight 4 dials in skype
One of the pains in silverlight 3 out of browser was the strict sandbox that was put in place. Although well meaning, this put a heavy restriction on the type of rich desktop like experiences we could produce. Just as in the api limitations in Adobe Air, there were and are solutions which involve local socket services (as discussed in this blog entry last year: http://www.cynergysystems.com/blogs/page/michaelwolf?entry=breaking_the_sandbox_in_silverlight ). However now in silverlight 4 we will have a much better solution, definitely not perfect but better. Firstly as mentioned in our drag and drop post (http://www.cynergysystems.com/blogs/page/michaelwolf?entry=silverlight_4_drag_from_desktop ) you can drag files directly into the out of browser window, which gets us closer. However the biggest improvement here is the inclusion of elevated privileges, which allows you to get access to the local file systems at a pretty broad level, but more importantly access to locally registered com objects. This means direct access to integrate with things like word or excel, like you will see in most demos, but also the huge community of com objects like skype.
When I first saw this feature, I remembered that back in the bad old silverlight 1.1 days I investigated using Skype to make phone calls via the java script bridge. What I found was that skype makes available a very rich com api known as SKype4Com. So while on the plane back from PDC09 I set out at integrating this into Silverlight 4. The screencast below shows the results of opening, changing focus of, and then dialing the skype test user using the Skype4Com api and the Silverlight 4 elevated privileges support.
In order to utilize the Skype4Com api with in silverlight 4, there are a couple steps you need to follow to begin:
- First you will need to register the dll with windows , good old regrv32 does the trick
- Next you will need to ensure that your project references the Microsoft.Csharp dll which is available in the silverlight SDK, this gives you access to the Dynamic keyword (aka Dim for all you old VB developers).
- Next you will need to go inbto your silverlight project properties and ensure the silverlight app has oob enabled
- Lastly you will need to go into out of browser properties and click the require elevated privileges checkbox. This will allow your code to hit the registered dll, and will also show the user the following install message.
After this is all set your ready to start programming like its 1999. No really… although the com inerop functionality is extremely powerful, the dev model is not the .net world you have come to love. This is one time in the microsoft xaml world where remembering what cdonts is, is a benefit to you now. That’s because com inerop is very similar to the asp classic days where we would create a cdonts object to send mail or createobject() to throw a message into msmq. When working at this level you will not have intellisense we all love, and debugging will become more difficult. However as the saying goes "with great power comes great responsibility". So for example in the following code snippet we will create a dynamic object, and start working directly with the Skype4Com api.
Pretty simple, lines of code wise. The difficulty comes from the lack of discoverability via intellisense or reflector. Which as a developer will put you at the whim of the dll developer. Luckily Skype releases great docs (https://developer.skype.com/Docs/Skype4COM) as does the Microsoft Office team (http://msdn.microsoft.com/en-us/library/bb726434.aspx).
All in all though were very happy with this solution to bridge the sandbox divide. So many of our customers are looking for this type of integration particularly with products like excel or outlook that we had previously had to find less than desirable approaches to resolve. Even with the com development model, this is still 500X easier and more stable than the alternatives, and will open allot of doors and great rich desktop experiences. To learn more about this functionality check out the great session by Joe Stegman at pdc from this week http://microsoftpdc.com/Sessions/CL20
Thursday November 19, 2009
Silverlight 4 Drag from desktop
One of the exciting announcements made at pdc 09 was that silverlight 4 will support drag and drop from the desktop to both the web and out of browser. Whats great too is how similar the process is to WPF, the object properties are exactly the same, the only difference is 1 line in the actual file opening. Thus by sharing a common code, you can leverage this functionality in a full desktop experience as well as a silverlight experience with the exact same code.
The key difference being that in WPF you get as the drop data the filenames as a string[] and then you need to open the file, where as in silverlight what you get is a FileInfo[] ready for you process. The code snippet below shows this in action, and 2 routes to process the drop, one using conditional compilation the other simply looking at the type of data being provided.
Whats exciting about this is how this really helps bridge the web and desktop divide in the browser. In the out of browser scenario it will give our experiences a more true desktop feel that you are currently able to provide in true desktop apps in wpf or adobe air. Looking forward to all the bluing the lines experiences we will be able to create using silverlight 4.
Wednesday November 18, 2009
Silverlight 4 beta and web cam support
I'm here at PDC 09, where I'm very excited about all the possibilities in Silverlight 4. When we jumped into 1.1/1.0/WPFE several years ago, we never thought silverlight would evolve so quickly, but here we are. One of the most exciting features, which allot of users have been asking for since the bad old Silverlight 1.1 days is webcam and mic support like they had known in flex. Now with Silverlight 4 you will have direct access to both mic and webcam. This opens up allot of possibilities for creative and collaborative work, everywhere from Ribbit on silverlight for voip phone calls in the browser, to using silverlight to do fun things like Elf yourself.
The video below shows the webcam support in action (as well as drag and drop to be covered tomorrow). This is a silverlight 4 application utilizing the new VideoCaptureDevice to create a simple stop action animation application.
The code is very simple. The first thing you need to do is request use of the web cam. The webcam use must be user requested, and can be automatic, say on a loaded event.
After which if you would like to take a capture, you need to fire the async capture event.
Later tonight we will be posting the live application , so watch for updates via facebook and twitter. Over the coming weeks I will be posting about other new silverlight 4 features starting tomorrow with the new drag and drop from desktop features. Plus look out for videos Rick and Myself did with Pete Brown at PDC 09.
Monday September 14, 2009
Designer / developer misconceptions podcast
A couple weeks ago I had the pleasure of sitting down with Erik Mork from the Sparkling Client podcast for some tech talk and sushi. We talked about a ton of things from designer developer workflow to how devices like the now stale feeling iPhone and the new hot Zune HD interface have proven that the focus must be ux. Happily Erik has just posted the podcast ( http://www.sparklingclient.com/in-the-trenches-youre-making-applications-backwards/ ) , go forth and subscribe …. Always great information on here. Thanks for doing this Erik!
Wednesday September 02, 2009
sketching on a screen slides
Had a great time talking at the CMAP user group on sketch flow tonight. This was one of my first demo heavy presentations that involved no code. We spent almost an hour doing real time wireframing in Sketch Flow. Worked out great and the folks in the audience had me jumping between view states and navigation much faster than I expected ( my fellow devs can be a tough crowd :) ). I promised I would post my slides so here you go.
The zip contains the PowerPoint slides as well as embedded screen capture videos to try and fill in the blanks of the demo heavy presentation.
Enjoy
Thursday August 27, 2009
sketchflow user group talk
On 9/1/09 I will be speaking at the CMAP user group on sketchflow. I'm really excited to do this talk which will use as little powerpoint as possible, and work with the group to redesign a simple application using sketchflow together.
description:
Sketching on a Screen: Using Blend 3 and Sketch Flow to Gather Requirements and Begin Development of WPF and Silverlight Applications
Sketchflow is a new application released with expression blend for wire framing , sketching , and prototyping applications. This session will be an interactive view at the process of wire framing. The group will work together to develop an application sketch , while learning about sketchflow, blend3, design time data, and designer developer workflow. This session is meant as an interactive deep dive with lots of participation.
come out if your in the area, and I will try to post a video otherwise.
Tuesday July 21, 2009
Silverlight Out of Browser deep dive
Continuing on the Silverlight 3 new feature series, one of the features that has gotten the biggest buzz in the press but the biggest confusion in the development community has been Out of Browser. This entry is to try and clear up the confusion and discuss the option in more detail. Out of Browser is often confused for an "offline" application, however an out of browser application is a Silverlight application which has been enabled to run outside of your browser on windows and mac using its own container regardless of connectivity.
See an update of the notes application from the sample data application, now set up as an out of browser silverlight application. Click on the install button below which is the silverlight application.
Tim Heuer has a great video on silverlight.net showing how its accomplished from a development api experience. I highly recommend those looking for a "how to" look at this video. At its core any Silverlight application which does not have dependencies on the html DOM can be run out of browser. I say with out dependencies on the DOM because as mentioned above, you are not in a browser and thus do not have access to html and java script which was part of your web application. In addition to the lack of the html DOM microsoft has added a new network stack to support out of browser. As that silverlight in browser depends on the browsers networking stack, in out of browser they have added their own w/ some subtle changes to policy files needed etc (more details expected to be provided to the community on this).
Overall think of out of browser Silverlight like as a VERY secure "click once" deployment, that is also cross platform. Of course it is not a "Click Once" but the partial trust environment you must work in developing a click once application is similar , however at the end of the day an out of browser Silverlight application is still sandboxed in the exact same ways as a standard Silverlight or html application is. Which of course is pretty tight.
Out of browser versus offline
Very often developers confuse "Out of Browser" with offline. In reality any Silverlight application can now be fully connection aware. In the pre SL 3 days, if we needed to know if the application was online, we would create a dispatcher timer that would on a schedule "phone home" to a url we know will be up. If the url is hit and responds with an "OK", then we are connected. In SL 3 we now have a feature of the full CLR that lets us catch an event when the connection status changes.
In any Silverlight application you can catch this event to then start saving data to isolated storage, and then when the network is available again post the data to your web services. In addition you might want to set up a dependency property which will be set back and forth on network change to not only save data , but also outright disable certain functionality when not online. This approach goes for in and out of browser experiences.
Installation Experience
One of the more interesting situations with out of browser silverlight is the install experience. First as opposed to Adobe AIR, users do not need to download anything outside of silverlight to run an out of browser experience. In addition the in browser experience is using the same player and runtime as the out of browser experience. That means that the in browser experience can install the out of browser experience. This can either be through development and design choices to prompt a user to install or via the built in context menu.The demo above takes the design/development prompt idea. The button itself is actually the Silverlight application. In our case instead of showing the main notes app with an install button, we decided to just show the install button and disable it after install. What is happening here is there is a grid which has its visibility bound to a dependency property which knows the install and out of browser states.
Then to ensure that the user does not attempt to install the application again, we can bind the IsEnabled state of the button to the InstallState. Overall this method gives you allot of control over the experience of an installer all via silverlight.
The other route is the one taken by the great application Sobees which is now sharing a new Silverlight app w/ offline ability. They are using the out of the box option when "Out of Browser" is enabled in the manifest. Go to their site and right click to install to try it out. Of course there is a hybrid approach, where your on line Silverlight application contains an on line experience with certain features, and an install button for an offline companion app. The offline companion experience might contain other features and experience to complement the on line experience.
Storing data
One of the first things people ask about when they see Silverlight out of browser is "OK, so if I'm on the desktop, can I access a datastore?". The answer is yes and no. First off it should be noted you can still call the same web services you can in your in browser experience, however when running out of browser you likely want to also run offline/somewhat connected. Thus in out of browser Silverlight you get 25 mb of isolated storage. This can be increased using a user interaction, but out of the box you get 25 mb. With that isolated storage you can then serialize your data to xml to store and query off of using linq. In the example above, we simply serialize the model objects, and store them and reload them to and from isolated storage when the application is out of browser.
This functionality can be developed with out of the box functionality and could be built up to become more of an object oriented data structure. However there are some people working on bring a full fledged OO database to Silverlight. The 2 most promising currently seem to be the following.
- http://silverdb.codeplex.com/ : this is a fairly new project but shows promise.
- db4o: this is a more mature project which seems to be getting close to a Silverlight port.
- Perst: looks to be a great option as well, and ready to go today
It should be noted also that you can not access the file system silently in Out of Browser. This means that currently you can not write a file to the file system with out showing a save dialogue. Thus this limits other options of text file based data sources.
How does it compare to Adobe Air
First thing to note, Out of Browser Silverlight != Adobe Air. On principle they are technologies designed to bridge the web to desktop experiences using the same skills and platform, but the 2 products take distinctly different approaches. Adobe AIR applications run in full trust on the desktop machine, thus the only limitations which are placed on the developer as far as OS interaction are based on the lack of AIR api development, not a security restriction. On the other hand Out of Browser silverlight is restricted by a strict sandbox by design, thus many of the differences lie there in. In addition AIR is a separate runtime from the Flash Player, where as Silverlight Out of Browser is utilizing the same runtime, only contained with an OS specific container. The stage being set, below is a list of functionality that either AIR can do that Out of Browser Silverlight can not and vice versa. This is not meant as a complete feature to feature breakdown but a high level look.AIR
- Custom window chrome.
- Toast Notifications
- Write and read silently from the filesystem
- native support for SQL lite
- Drag and Drop OS support
- Deny software updates
Silverlight Out of Browser
- Installation with no other install but the silverlight player
- Installer integrated into running ria, to support deployment and web use from same ui
- Single project file
It should be noted neither technology currently includes full access to the OS. You can however break the sandbox in either AIR or Out of browser using socket services. See my blog post here to see it in action using Silverlight.
Why use it?
This really comes down to are you developing a true desktop application or a companion desktop experience to a web based RIA. If you are building a desktop experience that can exist only on windows, WPF is your best bet. If your reason to shy from WPF is deployment , look at Click Once deployments. More often than not a click once deployment will get you the desktop experience your looking for, with the lack of IT interactions your looking for in a web based RIA. However if you are looking to bridge a cross platform companion desktop experience with little separation from a deployment (extra download) , and development base line perspective Out of Browser is a great option. If you truly need a cross platform solution but with less sandbox restrictions, AIR would be your best bet. It's all about the right tools for the right situations, and Out of Browser has definitely staked its claim in this ecosystem.
Monday July 13, 2009
Silverlight & Blend 3 Sample Data
Well as of July 10 Silverlight 3 is out. Over the next several weeks I will be putting together blog entries on my favorite features of silverlight and blend which will enable us to make experiences faster and more engaging. I’m going to shoot for one a week, lets see how it goes.
Making design time data standard practice
One of the nice features added in Silverlight 3 and Blend 3 is that of sample data. The design ability of enumerated controls like itemcontrols and listboxes in the past using blend 1-2 has not been the greatest. Which was really a pain to deal with as so much of RIA is built out of these enumerated controls (after all a Listbox can be just about anything in WPF and Silverlight). More often than not designers would draw a listbox out as a series of objects in for example a stack panel. Usually because it was just too darn difficult for a designer to design a listbox with out design time data. For example take the following UI (now developed using blend sample data).Ideally a designer would already have a MVVM framework set up for them and design time data ready for them. However often timing wise this would not be possible, so in its absence a designer would create XAML that looked something like this:
Instead of a a listbox with a data template the designer creates each element as copy of the items XAML. Instead of actual data bound to the text the values would be hard coded. This might also involve a Custom control being used in the data template. Either way the designer would be drawing the different enumerated states, then a developer acting in an integrator role would turn this scroll+stackpanel+grids into a proper listbox.
Which in the end could result in the broken egg scenario (see see tooling slides slide 33). As you will notice in the screenshots above the text doesn’t quite match nor do the paper lines. This is because as the developer takes this over as integrator, there was too much that needed to be changed and the design starts to sway from the original. In addition the developer would likely be developing custom code in the view model to display the test data in the designer and Blend.
All and all this together can be a total pain in the designer developer workflow.
How can it be done easier in Blend 3 / Silverlight 3
Enter new sample data in blend 3 and Silverlight 3. This feature is here to help bridge the divide between developers design time data strategies and Designers living in blend. Keeping as much design power as is possible in the hands of the designer themselves. At its core its very simple, the following screencast shows how to get it going:Steps to adding sample data in blend
- Add a new sample data source in the data tab
- This will add a new sample data source to you app.xaml or document
- Edit the sample data to meet your needs
- The sample data will be stored in your application as a xaml file
- Set data context and your binding is ready to go
As you can see in this demo, a designer can easily use blend to create a basic model to bind to. With the data in place and no developer support a designer can then easily design the data template and all the data states of the listbox. In general this is very similar to the same concept in Flash Catalyst, make it easy for Designers to understand how ever very flexibly worked into the full workflow as just standard xaml and c# code.
The good and the bad
Overall I like this feature a lot, however there are some workflow and overall architecture issues to consider. So here’s your pros and Cons. I think overall the good > the not so good at this point.
The good
The not so good
- To support unit tests you may end up having to maintain several levels of test data to support developer (viewmodel unit test), designer (xaml design), server (wcf unit tests).
- As that designers / developers can be binding to sample data it can become easy to bind to a field in sample data that will never be in dev data, adding to the possibility of hard to track down binding bugs. For example designer binds to PageNumber but the field in the real model is PageNumbers, when the data context is switched to live data the binding will fail
- As that designers can easily build up a data model in blend, it may lead down to solutions which simply wont work with real development models.





