Monthly Archives: July 2008

30 Days of Nothing but Tech Update

So it has been 30 days since I turned off the cable to the house and started watching nothing but technical content that I could pull from the Internet. A lot of my friends kept waiting for me to move back into my parent’s basement since they felt watching so much Tech would turn me into the ultimate nerd. Luckily that did not happen, but I didn’t completely watch just technical stuff the whole thirty days. I would say that my daughter put up with it for about two weeks and then she demanded that I at least get something she could watch that did not have to do with technology.

 

I will have to say that there are a lot of video web casts and on-demand services available on the Internet that have nothing to do with technology, the good ones are few and far between and many of them I will never understand, but they are out there. So in order to meet my daughter’s demands I ended up with a combination of solutions to get content into our Vista Media Center PC so she could enjoy herself.

First I hooked into the various movie services, Netflix, Vongo, CinemaNow, ShowTime, etc. Many provide VMC plug-ins that you can download directly from within Media Center or a plug-in is available from a third party. The best I’ve found so far is the vmcNetFlix plug-in. It provides you the ability to watch Netflix videos from within Media Center. It provides a great user interface that lets you browse all of the genres and available titles provided by Netflix’s WatchNow Service. You can either watch the title instantly, move it to a queue for later viewing or download it in the background to watch at another time. Like many of the movie services Netflix costs around $10 a month to have access to unlimited viewing but It’s well worth it.

 

The biggest comment I have here is that we are starting to see these type of services spring up all over the place but mostly are for only viewing via a browser. With the cost of video technology dropping like a rock I expect we are going to see more set top boxes that will provide broadband based on demand services within the next two years. I am surprised that someone hasn’t started a company to help the various broadcasting companies bring their content to Windows Media Center. If you look at what HP has done with their new line of HD monitors and televisions they are building Windows Media Center Extender technology directly into the devices so you don’t even need a set top box. I think if this ever takes a strong hold on the market you can say good by to the cable providers, they’ll end up watching their market share dwindle as more and more providers move to Internet broadcasting.

 

Second I looked into downloading the various Internet video web casts for viewing. My God are there a bunch of them! I tried several different plug-ins that allowed you to specify the URL to an RSS feed which would then download the videos in the feed contents. Many of these did not work all that great or were too cumbersome to setup. Here is a tip for all these type of plug-in providers, figure out a way to do all of the downloading and updates in the background. And quit stuffing in advertising in front of other people’s content unless you are hosting it. A good example of what I’m talking abut is TV Tonic, not only do they eat up all of your time updating RSS Feeds when you launch the plug-in they shove their own advertising in between every web cast you pull from someone else’s web site. It kind of reminds me of the days of shareware CDs where people would charge to deliver content that they never created.

 

I found it easier to use a tool like Juice to pull my content down for me. I just enter in the URLs of my favorite web casts and have them download to my video directory and presto everything just shows up in my Video library ready to watch. And when I’m down watching a web cast and no longer need it I can delete it from my hard drive from within Media Center. The great thing about Juice is that it can run in the background and check feeds periodically so you can get new shows within hours after they have been posted. It also works great for audio pod casts.

So I’m going to keep the cable signal turned off and I’m going to continue to explore the world of Internet Broadcasting. The next thing I have to do is find a plug-in that will let me watch streaming Internet broadcasts. There are a lot of services popping up that provide streaming video 24/7 that I’d like to bring into Windows Media Center and watch. Once I get this all worked out I’ll give you an update on how it all works out.

I think over the past 30 days I’ve found out one thing about myself. I originally left cable because I was tired of being bombarded with advertisements every 5 to 10 minutes. They are annoying and I’m tired of being ripped off by corporations that are collecting money from both ends of the system; advertisers and consumers. Originally advertising was a way to pay for the free broadcast of content, but cable and satellite companies have taken that and added on charging large sums of money to consumers for delivery of the content. They have paid for their infrastructure many times over and the fact that broadcasters and cable companies have dissected content in to neat 5 or 10 minute chunks so they can wrap it all up in advertising has turned me off. I found out that I can live with content sponsored by a company if it’s done in a tasteful way that does not distract from the overall content of the program. I’ll gladly listen to it and may even use their products in order to support the content providers. I’ve always been one to support those who provide value to me.

 

I’ve also seen the crest of a new wave that will soon turn into a Tsunami once the right formula is found. The Internet has flattened the field of broadcasting so much that anyone with a video camera, a PC and the right software can become their own content provider. This is going to change the world we live in so much that I can’t even fathom what it will be like in the next 10 years. We are at the door step to information overload not only at work but in our personal lives as well. We need to look into new technologies that will allow us to cut through all of the noise and bring us the content that is important to us in the manner we prefer, whether that be to our TV sets, our computers, our cell phones, or our media players.

 

How to Create a Custom Editor for a Domain Model Element Property

Sometimes when defining a property for a domain model element you may need to use a complex type that has more than one property or can’t easily be displayed using a single text field or drop down in the property editor. A good example might be a class that holds a list of strings for a GUI interface or a Rich Text editor for a custom text field required by your framework.

 

To resolve this you can create a custom editor and hook it into your domain model that will provide a proper user interface to specify information for your property.

 

There are three steps you need to take in order to wire your domain property to display a custom editor:

 

1. Create a class derived from System.Drawing.Design.UITypeEditor that will launch the custom dialog box as below:

 

   1: 
   2: using System;
   3: using System.Collections.Generic;
   4: using System.Text;
   5:
   6: // Need to add a reference to System.Drawing DLL.
   7: using System.Drawing.Design;
   8: using System.Security.Permissions;
   9: using Microsoft.VisualStudio.Modeling;
  10: using Microsoft.VisualStudio.Modeling.Design;
  11:
  12: namespace XXX.UIProcessDesigner.UIEditors
  13: {
  14:
  15:     // FxCop rule: must have same security demands as parent class
  16:     [PermissionSet(SecurityAction.LinkDemand, Name = "FullTrust"),
  17:         PermissionSet(SecurityAction.InheritanceDemand, Name = "FullTrust")]
  18:     public class FormPromptUITypeEditor : System.Drawing.Design.UITypeEditor
  19:     {
  20:
  21:         /// <summary>
  22:         /// Overridden to specify that our editor is a modal form
  23:         /// </summary>
  24:         /// <param name="context"></param>
  25:         /// <returns></returns>
  26:         public override UITypeEditorEditStyle GetEditStyle(System.ComponentModel.ITypeDescriptorContext context)
  27:         {
  28:             return UITypeEditorEditStyle.Modal;
  29:         }
  30:
  31:
  32:         /// <summary>
  33:         /// Called by VS whenever the user clicks on the ellipsis in the 
  34:         /// properties window for a property to which this editor is linked.
  35:         /// </summary>
  36:         /// <param name="context"></param>
  37:         /// <param name="provider"></param>
  38:         /// <param name="value"></param>
  39:         /// <returns></returns>
  40:         public override object EditValue(
  41:             System.ComponentModel.ITypeDescriptorContext context,
  42:             IServiceProvider provider,
  43:             object value)
  44:         {
  45:
  46:             // Get a reference to the underlying property element
  47:             ElementPropertyDescriptor descriptor = context.PropertyDescriptor as ElementPropertyDescriptor;
  48:             ModelElement underlyingModelElent = descriptor.ModelElement;
  49:
  50:             // context.Instance also returns a model element, but this will either
  51:             // be the shape representing the underlying element (if you selected
  52:             // the element via the design surface), or the underlying element 
  53:             // itself (if you selected the element via the model explorer)
  54:             ModelElement element = context.Instance as ModelElement;
  55:
  56:             FormPromptUITypeEditorForm theForm = new FormPromptUITypeEditorForm();
  57:
  58:             theForm.Value = (string)value;
  59:
  60:             if (theForm.ShowDialog() == System.Windows.Forms.DialogResult.OK)
  61:             {
  62:                 value = theForm.Value;
  63:             }
  64:
  65:             return value;
  66:         }
  67:
  68:     }
  69:
  70: }
  71:
  72: 

 

2. Create a Windows Form dialog that will be displayed when the editor is invoked, such as the one below:

 

SampleWindowsForm

 

3. Set the Custom Attributes for the Domain Property to reference the UITypeEditor class you have created.

 

The text is as follows: [System.ComponentModel.Editor(typeof(XXX.UIProcessDesigner.UIEditors.FormActionTypeUITypeEditor),typeof(System.Drawing.Design.UITypeEditor))]

 

The bold faced text is the full namespace of your class that derives from UITypeEditor.

 

SamplePropertiesForm

 

I normally store all code that I add to a DSL Designer in various folders such as; CustomCode, UIEditors, Validators, etc. That way it is easy to find when I am trying to reference it.

 

Also, you can debug the UITypeEditor and Dialog by setting breakpoints in the code before you start debugging.