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.

 

 

30 Days of Nothing but Tech

I’ve decided that there is so many new technologies coming out that I am going to spend the next 30 days watching and listening to nothing but technical podcasts and webcasts. I’m turning off the cable signal and hooking the PC to the 42 inch plasma screen in the living room and start making more productive use of my time. Instead of watching mindless reality TV shows filled with commercials every five minutes I’ll get up to speed on the latest coming out of Microsoft, Oracle and Sun. And instead of listening to commercial laden radio during my 45 minute commute to work or while tooling around the metroplex, I’ll hook up my Zune to an FM Transmitter and catch up on all of the podcasts that I never seem to get around to.

 

So stay tuned and I’ll let you know the gems that I uncover and keep you up to date on the Network TV withdrawal symptoms that might come up.

 

Technorati Tags: ,,

Monthly Dallas VSTS User Group Meeting

I just got back from attending my first Dallas VSTS User Group Meeting. Vince Blasberg gave a presentation titled “Reporting in Visual Studio Team System.” He gave a great deep dive into the database architecture around TFS, the Data Warehouse and the OLAP Services. Vince also had some great tips on how custom work item field attributes can affect reporting as well as learning resources around building TFS Reports.

 

I’m hoping we do a deep dive around mining the Data Warehouse for dashboard data reporting. It was great first experience with the group.

 

Turns out that Vince and I worked together at CLR/FAST-TAX back in the mid 90s. We spent some time after the meeting chatting about old friends and the old days of working 18 hours days getting ready for tax season.

 

You can learn more about the Dallas VSTS User Group at http://www.dallasvsts.com

I Finally Joined the Twittering Public

So this weekend I was catching up on some web casts and caught Mark Pesce’s Keynote from ReMix08 Australia. It was basically about how the current Internet culture is hyper-connected because of social networking sites like Twitter. So, I decided to check it out and joined up. It’s pretty simple, just send random posts through out the day to indicate what you are doing or what is on your mind. Besides posting your thoughts and what you are doing, you can follow others and monitor what they are posting. There are even some innovative sights that are monitoring the thousands of posts and using them to come up with some really unique presentations of what the Twitter society is currently thinking.

 

You can find me at http://www.twitter.com/jimlavin,  maybe we’ll bump into each other, who knows.

Adventures in Extending the Service Factory – Part 2

Here’s a handy tip when you are trying to learn how the components of the Service Factory works. I’ve found it very useful over the last couple of weeks.

 

Since the Service Factory now gets registered under the Visual Studio Experimental Hive you can configure the solution so you can debug it. If you are familiar with debugging DSLs, this should be nothing new. Just follow the steps below:

  1. 1. Set the Service Factory Guidance Package as the Start-Up Project by right-clicking on the project and selecting “Set as Start-Up Project”.
  2. 2. Change the Service Factory Guidance Package Project’s debug settings to launch Visual Studio under the Experimental Hive:
      1. a. Right click on the Service Factory Guidance Package Project and select “Properties”.
    1. b. Select the Debug Tab
    2. c. Configure the Start Action to Start External Program and C:\Program Files\Microsoft Visual Studio 8\Common7\IDE\devenv.exe or where ever you have installed Visual Studio for the program.
    3. d. Set the Start Options, Command Line Arguments to /rootsuffix Exp

 

Now you can set breakpoints in the Service Factory code and press F5 to walk through the code in the debugger.

 

 

Adventures in Extending the Service Factory

I’ve been trying to add a couple of additional projects and item templates to the Service Factory for workflows and workflow activities. I thought I’d try to use the same techniques that the Service Factory was using to dynamically bind the menu options using the ProjectIsInRoleReference helper in the Binding.xml recipe.

 

So I did the following:

  1. 1. Added new roles WorkflowRole and ActivitiesRole to the file WSSF\Modeling.CodeGeneration\Source\Enums\ServiceFactoryRoleType.cs. I did this so that the Project Mapping helpers would incorporate the new roles into the ProjectMappingTable and get picked up by the ProjectIsInRoleReference helper.
  2. 2. Added the project templates to Templates\Projects.
  3. 3. Added the projects to the WCF and ASMX.vstemplate files.
  4. 4. Added new item templates to Templates\Items to use when the user selects the menu option to create a workflow or activity.
  5. 5. Added unbound recipes to unfold the templates. I used the CreateTranslator recipe as an example.
  6. 6. Added actions to the Binding.xml using the RefCreator and the ProjectIsInRoleReference just like the action for the CreateTranslator recipe.

 

When I created a new ASMX or WCF Implementation project, the new projects templates got unfolded without issue. But when I right clicked on either the workflow or activities project I did not see the menu options to launch the recipes on the context menu.

 

At first I thought maybe the ProjectIsInRoleReference helper was not working, but I added debug output to indicate whether it found a match or not and everything was showing up correctly.

 

So I was at a loss as to why the menu options didn’t show up. I even tried to bind the recipes to the projects but still no luck. I dug out the older Extensibility Walkthroughs from the Service Factory CTP and there was an example for adding a new recipe through the binding.xml file. It seems that because we are testing in the Experimental Hive you need to run the following command to reset the context menus:

devenv /rootsuffix Exp /Setup

 

Once I ran the command and then restarted Visual Studio under the experimental hive the menu options showed up.  This behavior is not really apparent and I couldn’t find anything in the GAX/GAT documentation. I think that has a lot to do with the fact that running under the experimental hive is rather new for GAX/GAT and until the Service Factory you had to use the Clarius SFT to run under the experimental hive.

 

Guidance Development Tools

Guidance includes so many different types of documents; Help, How-Tos, FAQs, Checklists, Code Examples, Design Patterns, and Guidelines to name just a few that coming up with a standard way to develop the needed guidance is a hard task to do from scratch. Luckily Microsoft’s patterns & practices group has a tool that can simplify a lot of this for you.

 

The Microsoft patterns & practice’s Guidance Explorer provides a one stop shop for discovering, developing and publishing high quality development guidance. The project web site is located at http://www.codeplex.com/guidanceExplorer. There you can find the latest release of the tool as well as links to existing guidance examples developed by the team.

 

The tool includes an editor which provides standardized templates for many of the types of guidance you may want to include in your factory. The editor also includes the ability to add custom data to each guidance item for filtering by Technology, Category, Topic and Rule Type.

 

How I see this tool being used is pretty simple. As part of the factory development process the guidance developer creates the various guidance items using Guidance Explorer and then exports them to HTML for inclusion into the factory contents. The factory developer then includes links to the files as part of the recipes using the <DocumentationLinks> tag. Now when ever a consumer of the factory invokes a recipe the Guidance Navigator can navigate to the document relating to the action just taken. This could be anything; a checklist of what steps need to be taken in the process; a how-to article on the use of a model just created or even code examples of how to use the library just added to the project.

 

Another way to apply this tool to factory development is by incorporating the web edition of the tool. It provides a read-only version of the Guidance Explorer that can utilize an on-line store allowing all of your guidance to be in one place. The web edition could be launched in a separate pane within Visual Studio to provide the full guidance library to the factory consumer as they use the factory. They can perform searches for specific topics, filter on a particular category or use the Guidance Navigation pane to browse all of the sections at their leisure.

In my opinion this is a must have tool in any factory developers toolkit, check it out.