The Dawn of Interconnectivity!

I was cleaning out my RSS reader and came across an interesting post from KELLABYTE. She wants a seamlessly integrated world. I have seen commercials for Verizon FIOS that may be deliver that. The challenge comes in delivering that across the spectrum of applications. Pairing you life with the cloud is a must in this situation. Let’s take a look at the different challenges that would limit this achievement.

Montana 047

For reference I have copied the data stream that kellabyte would like to consume:

  • Email
  • News (RSS)
  • Social (Twitter, etc)
  • Calendar
  • Media (music, video)
  • Documents
  • Web
  • Instant Messaging

The first hurdle is the Cloud. All this data would have to live behind some service (the Cloud) in order to be consumed seamlessly by different devices. Outside of techies there are very few people who feel comfortable storing all their personal data on the cloud (you can’t tell that by what people post on face book). When it comes to non social website data it can become an issue of privacy. The mental hurdle is a little less for an average person compared to large corporations. Losing control of where their proprietary data resides does not sit well for most CIOs.

Next all applications would have to be delivered as Software as a Service (SaaS) or Software plus Services. In this space you have Google Docs and Microsoft Office Live have made strides in the documents, email and calendar. But other providers need to be on board with developing SaaS. Should there be some overarching framework to ensure interoperability? Most would say that is what Service Oriented Architectures are trying to do but most organization struggle with developing pure SOA.

Moving to the cloud requires bandwidth both in the mobile space and in the ISP space. All these bits moving back and forth are going to eat up the current bandwidth that a common users has. A lot of AT&T customers currently complain about lagging networks think what would happen if everyone started moving to the cloud. The technology is catching up with services like FIOS and 4G mobile networks. Is it hard to imagine T1 lines to everyone’s home? This plays into the user experience. Usability will help drive adoption but it will also deter users as well. That is why there needs to be a strong infrastructure.

What would be the next hurdle that would need to be jumped, cost? Infrastructure changes require millions and millions of dollars. Application development requires funding. Hardware to support such a reality cost money. So what is the cost benefit analysis for companies that would under takes such an endeavor, the service providers, software makers, and application developers alike? Will there be a large enough user base to support such a capital undertaking? What kind of psychological barriers to adoption that need to be overcome.

Another technological challenge is security. I alluded to it before in that large corporations are reluctant to move to the cloud. Most of the infrastructure in existence was not developed with security in mind. Just think about what built in security mechanisms we have in TCP. A lot of the security we have has been bolted on as an afterthought. Moving to the cloud introduce a whole new round of privacy concerns. Unfortunately there are bad people in the world that are looking for opportunities to steal your data. I believe that until there is some strong belief of security is there gaining wide spread adoption will be a challenge.

The final challenge I want to address is the social aspects of this interconnectivity. Yes we interact socially through services like Twitter and Facebook but we lose out on the human interaction. We become tied to our devices so that we never unwind. This could lead to burn out if you don’t have a nontechnical outlet. You need something that requires you to become disconnected. Here is a personal experience. A group of coworker came around to my desk and asked who is up to going to lunch. I was game so off we went. As soon as we left the building out came the devices to check work emails. Really we weren’t gone 5 minutes. They couldn’t put down their devices for 30 minutes to enjoy lunch. Which goes to show that if they lost connectivity they would have major withdrawals. Is that a good thing?

There are the challenges so what are the benefits? For one, the prospect of the technology excites me. This opens a whole new line of thinking about how interact with the world around us. I believe that there are productivity gains to be had by being interconnected. I am also excited to see how we would interact with these technologies. The possibilities are endless and we are in an age of technological advances that will allow us to push the envelope.

I really enjoyed reading kellabyte’s post and really got me thinking as to what it would take to make interconnectivity a reality. I look forward to more debate on the topic.

Posted in Uncategorized | Leave a comment

What Does it Mean to be “Lookless”?

One of the powerful features of Silverlight is the ability to have fine grain control over how your application looks. This power is given to use through “Lookless” controls or more commonly known as Templated Controls.  What this means is that the functionality of the control is contained in a class file and the look and feel is implemented in XAML.  All of the out of the box controls are created this way.  You can test this out in Expression Blend by adding a button to your canvas. Right click on the button select ‘Edit Template’ and see what is generated for you.

In this article I will work through how to create your own templated control.  Even if you never create a real control of your own, it is a good exercise to understand how templating works in Silverlight.  I will be creating a simple control that contains a text box and a button:

image

There is nothing fancy with the control I have created and I probably would not create a control like this.  I did something simple to demonstrate the power of templated controls.

The first thing you need to do is create the control. You can create this control in the current project or in a class library project.  Visual Studio helps in create templated controls by providing a template.  Go to File –> Add and select ‘New Item’.  From the ‘Add New Item’ dialog select ‘Silverlight Templated Control’. I am creating a control called TextWithButton (I know real original).

 

image

This is going to create a class file, a directory called ‘Themes’ (a hold over from WPF) and a XAML file called Generic.  The class file is for your implementation code. The Generic.xaml file is for your default template. Now we have to wire up the template to the implementation.  When you added the control the implementation class inherits from Control.  Control has a property called DefaultStyleKey that we can set in the constructor of our control.

this.DefaultStyleKey = typeof(TextWithButton);

Your control is going to go out to the Generic.xmal and find a style with this key.

Templated controls assume that there are parts (Framework Elements that make up your interface). Inside the Generic.xaml file you create the parts of your control ensuring to set the x:name property.  This will be used to get a reference to the parts from the class file.   You will also want to implement any Visual States that you will be working with.  Here are the visual states for my control:

<VisualStateManager.VisualStateGroups>
                            <VisualStateGroup x:Name="GroupCommon">
                                <VisualState x:Name="Unfocused"/>                                
                                <VisualState x:Name="Focused">
                                	<Storyboard>
                                		<ColorAnimationUsingKeyFrames BeginTime="00:00:00" 
                                                                      Duration="00:00:00.0010000" 
                                                                      Storyboard.TargetName="InputText" 
                                                                      Storyboard.TargetProperty="(Control.Background).(SolidColorBrush.Color)">
                                			<EasingColorKeyFrame KeyTime="00:00:00" Value="#FFFAFAFA"/>
                                		</ColorAnimationUsingKeyFrames>
                                		<ColorAnimationUsingKeyFrames BeginTime="00:00:00"
                                                                      Duration="00:00:00.0010000" 
                                                                      Storyboard.TargetName="border" 
                                                                      Storyboard.TargetProperty="(Border.Background).(SolidColorBrush.Color)">
                                			<EasingColorKeyFrame KeyTime="00:00:00" Value="#FFCE4646"/>
                                		</ColorAnimationUsingKeyFrames>
                                	</Storyboard>                                
                                </VisualState>                    
                            </VisualStateGroup>
                        </VisualStateManager.VisualStateGroups>

Now you want to override the OnApplyTemplate method. Here is my override:

        public override void OnApplyTemplate()
        {
            base.OnApplyTemplate();

            _inputTxt = GetTemplateChild(ElementTextBox) as TextBox;
            if (_inputTxt != null)
            {
                LoadText();
            }

            _inputButton = GetTemplateChild(ElementButton) as Button;
            if (_inputButton != null)
            {
                ConfigureButton();
            }
        }

Here I am using GetTemplateChild method, passing in the name of the part, and setting an internal variable casting the results as parts type. It also gives you a chance to call some methods to do some initialization work for you. When working with templated controls it is important to code defensively in order to ensure that a user hasn’t delete a control part you were expecting.

Now we have to tell our implementation which parts to expect.  We do that by setting the TemplatePart attribute on the class:

    [TemplatePart(Name = TextWithButton.ElementTextBox, Type = typeof(TextBox))]
    [TemplatePart(Name = TextWithButton.ElementButton, Type = typeof(Button))]

Here you tell the attribute what is the name of the part and the type.  You also need to specify and VisualStates you are expecting again by setting an attribute on the class:

    [TemplateVisualState(Name = VisualStates.StateFocused, GroupName = VisualStates.GroupFocus)]
    [TemplateVisualState(Name = VisualStates.StateUnfocused, GroupName = VisualStates.GroupFocus)]

I am doing something simple to implement state changes. In the constructor I am subscribing to focus events:

      this.GotFocus += new RoutedEventHandler(TextWithButton_GotFocus);
      this.LostFocus += new RoutedEventHandler(TextWithButton_LostFocus);

Here are the handlers for those events:

        void TextWithButton_LostFocus(object sender, RoutedEventArgs e)
        {
            VisualStateManager.GoToState(this, VisualStates.StateUnfocused, true);
        }

        void TextWithButton_GotFocus(object sender, RoutedEventArgs e)
        {
            VisualStateManager.GoToState(this, VisualStates.StateFocused, true);
        }

At this point you have a templated control that you can add to a page and it will render.  What we haven’t done yet is create any functionality. We are going to want to have the ability to bind to the text property of the text box part and to the command property of the button part.  There are other things that you can do like expose events but I am not going to cover those in this article.  In order to be able to bind to properties on your control you have to create Dependency Properties. 

Here is the property that I created to handled the text:

        public string ControlText
        {
            get { return (string)GetValue(ControlTextProperty); }
            set { SetValue(ControlTextProperty, value); }
        }

        // Using a DependencyProperty as the backing store for ControlText. 
        //This enables animation, styling, binding, etc...
        public static readonly DependencyProperty ControlTextProperty =
            DependencyProperty.Register("ControlText",
            typeof(string), typeof(TextWithButton),
            new PropertyMetadata(ControlTextChanged));

Dependency properties allow you to handle when the value is changed. Here is the implementation of the change event handler:

        private static void ControlTextChanged(DependencyObject d,
            DependencyPropertyChangedEventArgs args)
        {
            TextWithButton view = d as TextWithButton;

            if (view != null)
            {
                view.LoadText();
            }
        }

Here I cast the DependencyObject as the control type and call a method on it.  Notice that is the same method I am calling when the template is applied. I can now create a two way binding that will handle text from a view model through to the inner textbox.  Here is the LoadText implementation:

        private void LoadText()
        {
            if (!string.IsNullOrWhiteSpace(ControlText) && _inputTxt != null)
            {
                Binding binding = new Binding();
                binding.Source = this;
                binding.Path = new PropertyPath("ControlText");
                binding.Mode = BindingMode.TwoWay;
                _inputTxt.SetBinding(TextBox.TextProperty, binding);
            }
        }

Note the defensive coding. I do something similar for the button command (see code for implementation). 

I now bind to my ControlText property in my view from my view model:

            <cc:TextWithButton ControlText="{Binding SomeText, Mode=TwoWay}"
                               ButtonCommand="{Binding ButtonClickCMD}"
                               Margin="10"
                               Width="500" />

So let’s recap what we have done we have created a control with encapsulated functionality that can be templated by users without breaking that functionality.  We could have two different instances of this control on the same page that have two different styles:

            <cc:TextWithButton ControlText="{Binding SomeText, Mode=TwoWay}"
                               Margin="10"
                               Width="500" />
            <cc:TextWithButton ControlText="{Binding SomeText, Mode=TwoWay}"
                               ButtonCommand="{Binding ButtonClickCMD}"
                               Margin="10"
                               Width="500"
                               Style="{StaticResource TextWithButtonStyle1}" />

In the static recourse I change the layout and back ground of one of the controls so it looks something like this

image

 

These two controls share the same functionality but as you can see I get the ability to change how they look.

You may not need to create a templated control unless you are building your own control library.  By creating my I own, I now feel more confident when it comes to altering the templates of the native Silverlight controls.  Another good exercise is to look at the source control of the Silverlight Toolkit. Here you will see a similar approach done by the Silverlight Team.

Source Code

Posted in Uncategorized | Leave a comment

I can write my application in classic ASP but do I really want to?

I can write my application in classic ASP and satisfy all my requirements but do I really want to. There has been a lot of hype around Silverlight vs. HTML5. I started into the conversations with “The Future of Silverlight”  from the Silverlight Team Blog and continued on to “Is Silverlight becoming a niche technology?”.  There are some great arguments that for each technology but the piece of the argument that is missing is choosing the correct technology for the situation.  It all boils down to the business requirements, technical infrastructure restrictions, the audience, and the comfort level of the development team.

The Business Requirements

If my requirements call for an application that needs a web component, a desktop component, a mobile component and offline capabilities. I am going to want to minimize the code that I write. In this situation I would probably go with Silverlight. If all I need is a web component then I can HTML (HTML, JS, CSS) and be done with it. You should approach each situation with the mindset that I am going to choose the best tool for the job.

Technical Infrastructure Restrictions

First and foremost if an organization won’t allow the Silverlight plug in to be installed the obviously you can’t use Silverlight.  The niche article points out that there are great JavaScript frameworks that make developing HTML (HTMl5) applications easier.  The problem with that is most of them are open source.  I worked for an organization that did not allow the use of any open source (business reasons not technical) in their product.  Who wants to re-implement JQuery, with all of the different browser nuances,  in their spare time. 

The article from the Silverlight Team brings up a good point around HTML5. When is the standard going to be finalized and published? How long will it take browser manufacturers to implement the standard and how standard will it actually be across the different browsers (here is a hint how standard is it now)?  Finally how long will it take to get users to download the new browser (my Mom would still be on IE6 if it wasn’t for my last visit a year ago)?

Developer Comfort Level

My final point centers on the comfort level of the development team.  If your team is not use to writing JavaScript and you can use those nice frameworks that abstract out the complexity (see above for reason) why would you want to extend your project timeline learning JavaScript or even worse using the cut and paste Google snippit editor.  On the flip side if you are a PHP developer you are not going to drop everything to run to Silverlight.  There was a commenter on in the niche article that stated:

“Silverlight share the same problem as any of .net technology…it is not reusable…if you put your time and energy, to learn some .net technology, for example asp.net, you can hardly reuse when learning some other web technology, for example php”

Really?  When I use .NET technologies I separate my concerns, try not to repeat myself and all the other buzz words used to describe a great developer.  My point is that if you follow good coding practices switching to another language/framework mean learning the syntax and capabilities of those frameworks.  One of the main jobs of a developer learning the capabilities of frameworks and applying those capabilities to the problem at hand.  Anyone can write code, it takes practice and skill to write an application!

Conclusion

It is great that these debates are ongoing.  They help bring facts to the surface that we might not have otherwise known but we can’t loose site of the fact that the situation should dictate the technology.

Posted in .NET, C#, Computer Science, HTML5, Silverlight, Software Architecture | Leave a comment

Silverlight Child Window With MEF and MVVM Light

UPDATED: I created another post that updates my approach for working with Silverlight Child Windows.

So it has been a long time since I did a pure technical post.  In fact I  have completely blown my goals for the year.  I am going to keep working towards them.  My life has been hectic since the beginning of the year and I am about to embark on a second Master’s degree.  This does not bode to well for reaching the goals I have set.  I jump on  any opportunity to play.  This is one such time.

Windows Phone 7 is due out later this year.  Microsoft was smart and decided to leverage the technical abilities of all the Silverlight developers.  So to effectively fulfill Ray Ozzie’s vision of three screens and a cloud developers are going to have to reuse as much code as possible.  One of the ways they can do that is by separating out the ViewModel into a separate project.  I have written post that demonstrated this.  One of the challenges is how to launch a child window from the view model.

In this post I will demonstrate how I have addressed the problem using MEF and MVVM Light.  I will even pass values back and forth.  I am not say that this solution will work for anyone.  In fact it may offend the MVVM purist.  I launch the child window from the parent view.  Say it ain’t so!!!  Scandalous!!!!  Before you jump all over me it works without over complicating things and I am ok with the fact that this little bit of code won’t be covered by unit tests.

The Main Page

Here is the meat of the solution:

 public partial class MainPage : UserControl   
 {       
      [Import("MainPageViewModel")]       
      public object ViewModel       
      {           
            set {DataContext = value;}
      }

              public MainPage()       
             {
                           InitializeComponent();

                           if (!ViewModelBase.IsInDesignModeStatic)           
                          {   
                                        // Use MEF To load the View Model               
                                       CompositionInitializer.SatisfyImports(this);           
                           }

                          Messenger.Default.Register<string>(this, “FromMain”,              
                                      a => { LaunchWindow(a);  });
            }

             private void LaunchWindow(string a)       
             { 
                     MyChildWindow window = new MyChildWindow(a);           
                     window.Show();       
              }   
}

As you can see I am using MEF to set my DataContext and I am using MVVM Light to listen for an event that will cause the childe window to launch. In my sample application I am passing a message from the main screen to the child window.  I will show in a bit where this little bit of magic originates.  I pass the message to the constructor of the child window.

The Child Window

Here is the code behind of the child window:

    public partial class MyChildWindow : ChildWindow   
    {       
          [Import("MyChildWindowViewModel")]       
          public object ViewModel       
          {           
                set { DataContext = value; }       
          }

                        public MyChildWindow(string message)       
                       {           
                                    InitializeComponent();

                                    if (!ViewModelBase.IsInDesignModeStatic)           
                                     {               
                                                         // Use MEF To load the View Model               
                                                         CompositionInitializer.SatisfyImports(this);          
                                      }

                                      Messenger.Default.Send<string>(message, “ChildLoad”);           
                                      Messenger.Default.Register<string>(this, “DialogResult”,              
                                                       a => { HandleDialogResults(a); });       
                          }

                          private void HandleDialogResults(string a)      
                         {            this.DialogResult = true;        }

                          private void CancelButton_Click(object sender,   
                                       RoutedEventArgs e)       
                          {            this.DialogResult = false;        }    }

Here  I am taking the text from the main page and sending it out as a message where the child window’s view model will pick it up.  I was thinking I could have exposed the text in the ViewModel with MEF.  I am not offended either way.  You can also see that we are subscribing to an event that closes the dialog.

The Child Window ViewModel

Here is the Child Window ViewModel:

    [Export("MyChildWindowViewModel")]   
    public class MyChildWindowViewModel : ViewModelBase   
    {       
          private string _childMessage;
          public string ChildMessage       
          {
               get { return _childMessage; }           
               set { _childMessage = value; }       
          }

          private RelayCommand<string> _okClicked;       
          public RelayCommand<string> OkClicked       
          {           
                get { return _okClicked; }       
          }

          public MyChildWindowViewModel()       
          {           
                _okClicked = new RelayCommand<string>(               
                         a => Messenger.Default.Send<string>                   
                         (a, "DialogResult"));

                Messenger.Default.Register<string>(this,                
                                        "ChildLoad",              
                                        a =>{ HandleMessage(a); });       
      }

       private void HandleMessage(string a)       
       {           
              ChildMessage = a;       
       }           
}

The first thing to note is the message coming through MVVM Light and getting assigned to the ChildMessage property.  You have now seen a message that was typed in a TextBox on the main page make it all the way to the child window. Now it is time to pass a message back to the main page.  So the next thing to notice is the RelayCommand.

MVVM Light provides a RelayCommand that can be bound to a button. 

<Button Content="OK"                 Width="75"                 Height="23"                 HorizontalAlignment="Right"                Margin="0,12,79,0"                Grid.Row="1" >            <i:Interaction.Triggers>                <i:EventTrigger EventName="Click">                    <ml:EventToCommand Command="{Binding OkClicked}"                                       		     CommandParameter="{Binding Text, ElementName=_dialogText}"/>                </i:EventTrigger>            </i:Interaction.Triggers> </Button>

In the initiation of the command I am creating a new message that will pass the value typed into the child window to any one how is interested.   You have already seen on subscriber to this even (think dialog close).  The beauty of the MVVM Light Messenger is that it can have multiple subscribers across multiple dlls.

The Main Page View Model

We have now come full circle.  Here is the main page’s view model:

[Export("MainPageViewModel")]   
public class MainPageViewModel: ViewModelBase   
{       
         private string _message;       
         public string Message       
         {           
                 get { return _message; }           
                 set            
                 {               
                        _message = value;               
                        RaisePropertyChanged("Message");           
                 }       
         }

        private RelayCommand<string> _launchWindow;       
        public RelayCommand<string> LaunchWindow       
        {
               get { return _launchWindow; }       
        }

        public MainPageViewModel()       
        {
             _launchWindow = new RelayCommand<string>(               
                      a=> Messenger.Default.Send<string>(a, "FromMain"));           
             Messenger.Default.Register<string>(this, "DialogResult",               
                              a => { LoadDialogResults(a); });       
        }

        private void LoadDialogResults(string a)       
        { Message = a; }   
}

Here we can see that we are getting the message from the child window (spanning dlls). So why are there two subscribers to the “DialogResult” message?  If the ChildWindowView did not handle this message then the dialog would not close. In the main page view model I am creating a RelayCommand that responds to the Launch button being clicked.  Again I am creating a message that the view handles.

My Thoughts

The circle is now complete.  We have launched a child dialog window, passing an argument.  We work in the child window and then pass information back to the main page.  There are many improvements that can be done, get rid of the magic strings, for one. I have used this and it has worked for me.  If you have other ideas I would be happy to try them.

Get the code here

P.S.  I am really digging the HTML Clipboard in the Productivity Power Tools

Posted in .NET, 2010 Goals, C#, MEF, MVVM, MVVMLight, Silverlight | 8 Comments

Day 1 of New England Give Camp Done!

So today (or yesterday as it is past midnight) was the first day of New England Give Camp.  We met all the charities and the developers that are making their projects a reality. 

My team is building an application to deliver messages to the children at the hospital.  These messages will appear as balloons that float up on the screen.   The powers that be decided that we should use Silverlight.  Since I am the project lead I decided it was a good opportunity to use some of the following technologies:

  • Silverlight 4
  • MVVM
  • MEF
  • MVVMLight
  • WCF RIA Services
  • Entity Framework

Most of the people on my team have very little Silverlight experience but that should not be a problem.   The project is not that complex and is an excellent one to learn on.

Tonight we got the project structure organized and worked on getting the pieces in order.  We have gotten our project up on CodePlex (will be making it public later) and the developers have all the code.  We went through some initial brainstorming.  Our designer is working on the screen shots.  In the morning we should be ready to get rolling.

It should be fun!

Posted in .NET, Give Camp, MEF, MVVM, MVVMLight, Silverlight, WCF RIA Services | 1 Comment

Giving Back

So I haven’t done a good job blogging lately, in face I have pretty much blown my goals out of the water.  I am hoping that will change in the near future (more on that in a later post). This weekend is the New England Give Camp and I decided to blog about my experience.  It is a weekend long event where developers can use their skill to benefit local non-profit organizations by working on small projects.

This event is being hosted in the Microsoft NERD center in Cambridge.  I am the team lead of a team that will be developing Messaging Social Networking application for The Children’s Hospital at Dartmouth.  This application will allow messages for the kids to be displayed on a screen as balloons floating in the sky (sort of a moral booster).

I am hoping to write a post each day with what happened and with pictures.  I think that it is a good opportunity to give back to the community.  I am looking forward to it.

Stay tuned!

Posted in .NET, Give Camp, MVVM, Silverlight | 1 Comment

Predicting The Future!

So it has been a while since I have posted and I am not doing so hot on my goals for the year.  Work has kept me pretty busy an I have not had time to play but when I heard about Windows Phone 7 Series from Microsoft I had to make time to talk about a bunch of small observations that add up to something that is potentially big.

I am going to make a prediction about what is going to be announced at Mix 10: “The Window Phone 7 Series SDK is Silverlight!”   There it is my prediction and I am not just talking about browser support.  It is pretty obvious that Microsoft is going to include Silverlight in the phone’s browser, if they don’t then it is a big fail.  What I am saying is that applications developed for the phone will use Silverlight (think out of browser apps) as the platform.  Here are some of my observations:

1) Ray Ozzie got up at PDC 2009 and stated that the vision of Microsoft is “Three Screens and a Cloud”.  During his address he kept going back to this premise. During that address I could have sworn I saw a slide that had the Silverlight Icon on all three screens (I will have to go back and take a look).  It makes sense to have a common development platform for all devices.

2)  During Scott Guthrie’s keynote at PDC a Silverlight Client for Facebook was demo’ed and subsequently released to the public.  If you take a look at the UI it looks very similar to the functionality seen in the Phone Demos.  Was this a Proof of concept for the Phone?

3) My next observation is the install base of the Silverlight Plug-in is continually increasing.  This is due in part to events like the Olympics on NBC and other high profile applications using Silverlight to deliver content.  This helps push developer to develop Silverlight content.  If the 7 Series uses Silverlight as it’s SDK then there is already a developer community that can start creating applications that work both on the PC as well as the Phone and it is not a big stretch to move that app to the Big Screen (Think Three Screens and a Cloud).  That is one of the reasons Apple made the iPad use the iPhone operations system; over 100,000 applications ready to use once the iPad is released.

4) At PDC 2009 Silverlight 4 was introduced to the world and as such there were many sessions centered around Silverlight 4.  The one thing I noticed was that there were not too many session on WPF.  The out of browser functionality of SL4 moves it closer to replacing WPF as a platform for Windows based systems.  Plus SL4 works nicely with the Cloud (Here again that Three Screens and a Cloud is popping up).

5) The last point flows nicely in to my next point the Silverlight 4 Feature Set.  If you look at the features that are coming they play nicely with a phone:

  • Hardware Access (camera, microphone, etc.)
  • Out of Browser (The base OS is a form of Windows)
  • COM Interop (Integrate with Outlook on the Phone?)
  • Rich Text (foreign character recognition, think text apps)
  • Multi Touch Support (hardware requirement)
  • Sensor Awareness (could this be coming)?

6) My final point is the lack of Silverlight 4 support in Visual Studio 2010 RC.  It has been noted that the next public release of SL4 will work with the RC.  My guess is that release will happen at Mix 2010.  What better way to announce that SL4 will be the SDK than at Mix 2010.  Microsoft has already said that they will be making announcements at MIX around the SDK.  Is there anything new in the SL4 release that can be tied to the Phone (see sensor awareness prediction above)?  Is that why there was not a public release at the same time as the RC release?

I may be way off as I have no affiliation with Microsoft. I am not privy to any ongoing development there or at any of their partners.  My prediction is based upon my observations that I noted here.  But if I am right, then I think that exciting things are in store for the future.  Makes me wish I was going to Mix!

Posted in .NET, Mix 2010, PDC09, Silverlight, Windows Phone Series 7 | Leave a comment