<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" version="2.0">
  <channel>
    <title>Paul Mrozowski's Blog - Software</title>
    <link>http://www.rcs-solutions.com/blog/</link>
    <description>A day in the life (of a developer)</description>
    <language>en-us</language>
    <copyright>Paul Mrozowski / RCS Solutions, Inc.</copyright>
    <lastBuildDate>Sat, 12 Jul 2008 14:34:13 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 2.0.7226.0</generator>
    <managingEditor>paulm@rcs-solutions.com</managingEditor>
    <webMaster>paulm@rcs-solutions.com</webMaster>
    <item>
      <trackback:ping>http://www.rcs-solutions.com/blog/Trackback.aspx?guid=f209f8c4-6087-41cb-b876-ff349f42e8e2</trackback:ping>
      <pingback:server>http://www.rcs-solutions.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.rcs-solutions.com/blog/PermaLink,guid,f209f8c4-6087-41cb-b876-ff349f42e8e2.aspx</pingback:target>
      <dc:creator>Paul Mrozowski</dc:creator>
      <wfw:comment>http://www.rcs-solutions.com/blog/CommentView,guid,f209f8c4-6087-41cb-b876-ff349f42e8e2.aspx</wfw:comment>
      <wfw:commentRss>http://www.rcs-solutions.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=f209f8c4-6087-41cb-b876-ff349f42e8e2</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I mentioned Dependency Injection / Inversion of Control (DI/IoC) recently and I really
didn't explain what it is, why you might want to use this particular pattern, and
why on earth you'd need a framework for it. It's a fancy name for a fairly simple
concept. Instead of creating objects inside of your classes, you let the calling code
"inject" the necessary instances into your code. It's probably easiest to see this
in some code. I'm going to show both C# and VFP code, since I don't want you to get
the idea that this is a .NET-only type thing. 
<br />
 
</p>
        <div style="font-size: 10pt; background: white; color: black; font-family: consolas, courier new">
          <p style="margin: 0px">
            <span style="color: #2b91af">   1</span> <span style="color: blue">public</span><span style="color: blue">class</span><span style="color: #2b91af">SampleDependency</span></p>
          <p style="margin: 0px">
            <span style="color: #2b91af">   2</span> {
</p>
          <p style="margin: 0px">
            <span style="color: #2b91af">   3</span>    <span style="color: blue">public</span><span style="color: blue">string</span> SayHello()
</p>
          <p style="margin: 0px">
            <span style="color: #2b91af">   4</span>    {
</p>
          <p style="margin: 0px">
            <span style="color: #2b91af">   5</span>       <span style="color: blue">return</span><span style="background: #e5e5e5">"Hello"</span>;
</p>
          <p style="margin: 0px">
            <span style="color: #2b91af">   6</span>    }
</p>
          <p style="margin: 0px">
            <span style="color: #2b91af">   7</span> }
</p>
          <p style="margin: 0px">
            <span style="color: #2b91af">   8</span> 
</p>
          <p style="margin: 0px">
            <span style="color: #2b91af">   9</span> <span style="color: blue">public</span><span style="color: blue">class</span><span style="color: #2b91af">Sample</span></p>
          <p style="margin: 0px">
            <span style="color: #2b91af">   10</span> {
</p>
          <p style="margin: 0px">
            <span style="color: #2b91af">   11</span>    <span style="color: blue">protected</span><span style="color: #2b91af">SampleDependency</span> m_depend;
</p>
          <p style="margin: 0px">
            <span style="color: #2b91af">   12</span> 
</p>
          <p style="margin: 0px">
            <span style="color: #2b91af">   13</span>    <span style="color: blue">public</span><span style="color: #2b91af">SampleDependency</span> Depend
</p>
          <p style="margin: 0px">
            <span style="color: #2b91af">   14</span>    {
</p>
          <p style="margin: 0px">
            <span style="color: #2b91af">   15</span>       <span style="color: blue">set</span> { <span style="color: blue">this</span>.m_depend
= <span style="color: blue">value</span>; }
</p>
          <p style="margin: 0px">
            <span style="color: #2b91af">   16</span>    }
</p>
          <p style="margin: 0px">
            <span style="color: #2b91af">   17</span> 
</p>
          <p style="margin: 0px">
            <span style="color: #2b91af">   18</span>    <span style="color: blue">public</span> Sample(<span style="color: #2b91af">SampleDependency</span> depend)
</p>
          <p style="margin: 0px">
            <span style="color: #2b91af">   19</span>    {
</p>
          <p style="margin: 0px">
            <span style="color: #2b91af">   20</span>      
m_depend = depend;
</p>
          <p style="margin: 0px">
            <span style="color: #2b91af">   21</span>    }
</p>
          <p style="margin: 0px">
            <span style="color: #2b91af">   22</span> }
</p>
          <p style="margin: 0px">
 
</p>
        </div>
        <div style="font-size: 10pt; background: white; color: black; font-family: consolas, courier new">
          <p style="margin: 0px">
            <span style="color: #2b91af">  </span>    <span style="color: #2b91af">Sample</span> sample
= <span style="color: blue">new</span><span style="color: #2b91af">Sample</span>(<span style="color: blue">new</span><span style="color: #2b91af">SampleDependency</span>());
</p>
          <p style="margin: 0px">
 
</p>
        </div>
        <b>VFP Version</b>
        <pre style="background: #eeeeee">DEFINE CLASS SampleDependency AS Session 
   FUNCTION SayHello() 
      RETURN "Hello" 
   ENDFUNC 
ENDDEFINE 

DEFINE CLASS Sample AS Session 
   oDepend = NULL 
   FUNCTION Init(toDepend) 
      This.oDepend = toDepend 
   ENDFUNC 
ENDDEFINE 

loSample = CREATEOBJECT("Sample", CREATEOBJECT("SampleDependency"))</pre>
        <pre>
        </pre>
        <p>
Notice that in both cases, we are passing in the instance we want the class to use
instead of letting the class create the instance itself. That's all DI/IoC is. Honest,
that's it. This is DI via a constructor (you can also do it via a property setting
instead; notice in the sample C# code I created a write-only property which could
hold the reference). 
</p>
        <p>
So the next obvious question is, why? What's wrong with just creating the object inside
of the class? 
</p>
        <p>
One thing DI gives you is the ability to easily swap in different objects. In the
C# example, we probably would change the parameter from a specific type to an interface.
Now any class which implements that interface can be injected into this class. In
VFP, since it's not strongly typed, you can just pass in whatever instance you'd like
(it's up to you to make sure it doesn't blow up at runtime by accessing some method
or property which isn't on the passed in object). My initial thought after seeing
this was, well, can't I just use an abstract factory pattern instead? In an abstract
factory you delegate object creation to a "object factory" - usually passing in a
name or calling a method which returns the actual instance you'd like to use. This
sounds like almost the same thing. 
</p>
        <p>
An abstract factory does let you do that, but it doesn't let you easily do something
the DI/IoC pattern does: test your objects. Let's suppose you want to write a test
for a class which uses another class to send out an e-mail. You aren't really trying
to test sending an e-mail - that's just one of the things the class you're testing
happens to do during some process. In fact, you really don't want to send out an e-mail;
we don't want to spam our users. If you happen to use the abstract factory pattern,
you would need to modify it to create your <a href="http://weblogs.asp.net/rosherove/archive/2007/09/16/mocks-and-stubs-the-difference-is-in-the-flow-of-information.aspx" target="_blank">dummy/stub/mock</a> object
for sending an e-mail (in VFP that's most likely by editing a record in a table, but
the idea is the same), then test the object in question. If you used the DI/IoC pattern
the only thing you need to do is pass in your dummy/stub/mock object. No other modifications
are necessary. 
</p>
        <p>
OK, so this all looks simple enough. Why would you need a framework for the above?!
One of the biggest reasons - less typing. You'll notice that in order to use any of
these objects you may have to pass in a bunch of other dependency objects (which themselves
may have other dependencies). For a complex set of objects that could really suck.
A DI framework does that for you along with the benefits of an abstract factory, all
rolled up into one. In your code you call the DI framework and tell it to get you
an instance of a class - it figures out what objects need to be passed in for you
so you don't need to do it. In your tests, you can instanciate the objects directly
and pass in your stub/dummy/mock objects instead. 
</p>
        <p>
          <strong>Links:</strong>
        </p>
        <p>
          <a href="http://weblogs.asp.net/rosherove/archive/2007/09/16/mocks-and-stubs-the-difference-is-in-the-flow-of-information.aspx">http://weblogs.asp.net/rosherove/archive/2007/09/16/mocks-and-stubs-the-difference-is-in-the-flow-of-information.aspx</a>
          <br />
          <a title="http://www.hanselman.com/blog/ListOfNETDependencyInjectionContainersIOC.aspx" href="http://www.hanselman.com/blog/ListOfNETDependencyInjectionContainersIOC.aspx">http://www.hanselman.com/blog/ListOfNETDependencyInjectionContainersIOC.aspx</a>
        </p>
        <img width="0" height="0" src="http://www.rcs-solutions.com/blog/aggbug.ashx?id=f209f8c4-6087-41cb-b876-ff349f42e8e2" />
      </body>
      <title>What is Dependency Injection?</title>
      <guid isPermaLink="false">http://www.rcs-solutions.com/blog/PermaLink,guid,f209f8c4-6087-41cb-b876-ff349f42e8e2.aspx</guid>
      <link>http://www.rcs-solutions.com/blog/2008/07/12/WhatIsDependencyInjection.aspx</link>
      <pubDate>Sat, 12 Jul 2008 14:34:13 GMT</pubDate>
      <description>&lt;p&gt;
I mentioned Dependency Injection / Inversion of Control (DI/IoC) recently and I really
didn't explain what it is, why you might want to use this particular pattern, and
why on earth you'd need a framework for it. It's a fancy name for a fairly simple
concept. Instead of creating objects inside of your classes, you let the calling code
"inject" the necessary instances into your code. It's probably easiest to see this
in some code. I'm going to show both C# and VFP code, since I don't want you to get
the idea that this is a .NET-only type thing. 
&lt;br&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;div style="font-size: 10pt; background: white; color: black; font-family: consolas, courier new"&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 1&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af"&gt;SampleDependency&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 2&lt;/span&gt; {
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 3&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;string&lt;/span&gt; SayHello()
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 4&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 5&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;return&lt;/span&gt; &lt;span style="background: #e5e5e5"&gt;"Hello"&lt;/span&gt;;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 6&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 7&lt;/span&gt; }
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 8&lt;/span&gt;&amp;nbsp;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 9&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af"&gt;Sample&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 10&lt;/span&gt; {
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 11&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;protected&lt;/span&gt; &lt;span style="color: #2b91af"&gt;SampleDependency&lt;/span&gt; m_depend;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 12&lt;/span&gt;&amp;nbsp;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 13&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: #2b91af"&gt;SampleDependency&lt;/span&gt; Depend
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 14&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 15&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;set&lt;/span&gt; { &lt;span style="color: blue"&gt;this&lt;/span&gt;.m_depend
= &lt;span style="color: blue"&gt;value&lt;/span&gt;; }
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 16&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 17&lt;/span&gt;&amp;nbsp;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 18&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;public&lt;/span&gt; Sample(&lt;span style="color: #2b91af"&gt;SampleDependency&lt;/span&gt; depend)
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 19&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 20&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
m_depend = depend;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 21&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 22&lt;/span&gt; }
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;/div&gt;
&lt;div style="font-size: 10pt; background: white; color: black; font-family: consolas, courier new"&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp; &lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af"&gt;Sample&lt;/span&gt; sample
= &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;Sample&lt;/span&gt;(&lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;SampleDependency&lt;/span&gt;());
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;/div&gt;
&lt;b&gt;VFP Version&lt;/b&gt;&lt;pre style="background: #eeeeee"&gt;DEFINE CLASS SampleDependency AS Session 
   FUNCTION SayHello() 
      RETURN "Hello" 
   ENDFUNC 
ENDDEFINE 

DEFINE CLASS Sample AS Session 
   oDepend = NULL 
   FUNCTION Init(toDepend) 
      This.oDepend = toDepend 
   ENDFUNC 
ENDDEFINE 

loSample = CREATEOBJECT("Sample", CREATEOBJECT("SampleDependency"))&lt;/pre&gt;
&lt;pre&gt; 
&lt;/pre&gt;
&lt;p&gt;
Notice that in both cases, we are passing in the instance we want the class to use
instead of letting the class create the instance itself. That's all DI/IoC is. Honest,
that's it. This is DI via a constructor (you can also do it via a property setting
instead; notice in the sample C# code I created a write-only property which could
hold the reference). 
&lt;/p&gt;
&lt;p&gt;
So the next obvious question is, why? What's wrong with just creating the object inside
of the class? 
&lt;/p&gt;
&lt;p&gt;
One thing DI gives you is the ability to easily swap in different objects. In the
C# example, we probably would change the parameter from a specific type to an interface.
Now any class which implements that interface can be injected into this class. In
VFP, since it's not strongly typed, you can just pass in whatever instance you'd like
(it's up to you to make sure it doesn't blow up at runtime by accessing some method
or property which isn't on the passed in object). My initial thought after seeing
this was, well, can't I just use an abstract factory pattern instead? In an abstract
factory you delegate object creation to a "object factory" - usually passing in a
name or calling a method which returns the actual instance you'd like to use. This
sounds like almost the same thing. 
&lt;/p&gt;
&lt;p&gt;
An abstract factory does let you do that, but it doesn't let you easily do something
the DI/IoC pattern does: test your objects. Let's suppose you want to write a test
for a class which uses another class to send out an e-mail. You aren't really trying
to test sending an e-mail - that's just one of the things the class you're testing
happens to do during some process. In fact, you really don't want to send out an e-mail;
we don't want to spam our users. If you happen to use the abstract factory pattern,
you would need to modify it to create your &lt;a href="http://weblogs.asp.net/rosherove/archive/2007/09/16/mocks-and-stubs-the-difference-is-in-the-flow-of-information.aspx" target="_blank"&gt;dummy/stub/mock&lt;/a&gt; object
for sending an e-mail (in VFP that's most likely by editing a record in a table, but
the idea is the same), then test the object in question. If you used the DI/IoC pattern
the only thing you need to do is pass in your dummy/stub/mock object. No other modifications
are necessary. 
&lt;/p&gt;
&lt;p&gt;
OK, so this all looks simple enough. Why would you need a framework for the above?!
One of the biggest reasons - less typing. You'll notice that in order to use any of
these objects you may have to pass in a bunch of other dependency objects (which themselves
may have other dependencies). For a complex set of objects that could really suck.
A DI framework does that for you along with the benefits of an abstract factory, all
rolled up into one. In your code you call the DI framework and tell it to get you
an instance of a class - it figures out what objects need to be passed in for you
so you don't need to do it. In your tests, you can instanciate the objects directly
and pass in your stub/dummy/mock objects instead. 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Links:&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://weblogs.asp.net/rosherove/archive/2007/09/16/mocks-and-stubs-the-difference-is-in-the-flow-of-information.aspx"&gt;http://weblogs.asp.net/rosherove/archive/2007/09/16/mocks-and-stubs-the-difference-is-in-the-flow-of-information.aspx&lt;/a&gt;
&lt;br&gt;
&lt;a title="http://www.hanselman.com/blog/ListOfNETDependencyInjectionContainersIOC.aspx" href="http://www.hanselman.com/blog/ListOfNETDependencyInjectionContainersIOC.aspx"&gt;http://www.hanselman.com/blog/ListOfNETDependencyInjectionContainersIOC.aspx&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.rcs-solutions.com/blog/aggbug.ashx?id=f209f8c4-6087-41cb-b876-ff349f42e8e2" /&gt;</description>
      <comments>http://www.rcs-solutions.com/blog/CommentView,guid,f209f8c4-6087-41cb-b876-ff349f42e8e2.aspx</comments>
      <category>.NET</category>
      <category>Software</category>
      <category>VFP</category>
    </item>
    <item>
      <trackback:ping>http://www.rcs-solutions.com/blog/Trackback.aspx?guid=883ddb06-7562-4ebb-bd50-0e96bc72ee4c</trackback:ping>
      <pingback:server>http://www.rcs-solutions.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.rcs-solutions.com/blog/PermaLink,guid,883ddb06-7562-4ebb-bd50-0e96bc72ee4c.aspx</pingback:target>
      <dc:creator>Paul Mrozowski</dc:creator>
      <wfw:comment>http://www.rcs-solutions.com/blog/CommentView,guid,883ddb06-7562-4ebb-bd50-0e96bc72ee4c.aspx</wfw:comment>
      <wfw:commentRss>http://www.rcs-solutions.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=883ddb06-7562-4ebb-bd50-0e96bc72ee4c</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I've finally gotten all set-up in <a href="https://partner.microsoft.com/40011351" target="_blank">Microsoft's
Empowerment</a> program. I wish I could say it went smoothly, but that definitely
wasn't the case. I think I may have signed up at the worst possible time - they were
in the process of revamping their website which caused me a bunch of different problems.
I finally got tired of playing e-mail tag and called Partner support a few weeks ago.
They had been telling me to complete the application process, but every time I tried
to log back into the Empowerment site it just told me my application had been denied
and it wouldn't let me sign back up (or even tell me WHY it had been denied). When
I called they took a look at it then told me they needed to have someone else take
a look at the problem. I received an e-mail a few days later claiming the problem
should be resolved.
</p>
        <p>
I tried logging back in but had the same problem I had been having. I called them
again two weeks ago Monday and while I was on the phone they were finally able to
clear whatever flag was keeping me from being able to resubmit my application - they
definitely added a few more required fields from when I initially signed up. Last
Monday I figured I'd try logging back into the Partner site and see if they had any
way of checking the status. I ended up trying to sign up again but this time I got
to a page which wanted me to agree to some EULA, but the buttons were all disabled.
Was that a good sign or a bad sign?
</p>
        <p>
I found out two days later (on Wednesday) when I received my Empowerment CD's and
DVD's. Unfortunately, they don't include any kind of documentation about how to actually
get your license keys. Since I've worked at a few places which had their Universal
subscription (when it was available), I assumed I might just be able to log into the <a href="http://msdn2.microsoft.com/en-us/default.aspx" target="_blank">MSDN
subscriber download section</a> using my MS Live ID. I clicked on the "Associate your
subscription with your WIndows Live ID" link but it also wanted me to enter my
</p>
        <a href="http://www.rcs-solutions.com/blog/content/binary/WindowsLiveWriter/EmpowermentProgram_B106/MSDN_2.png">
          <img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="356" alt="MSDN" src="http://www.rcs-solutions.com/blog/content/binary/WindowsLiveWriter/EmpowermentProgram_B106/MSDN_thumb.png" width="269" border="0" />
        </a>
        <p>
Benefit Access Number, Subscriber ID, or MSPP Technical Contact ID. Unfortunately
I didn't receive anything labeled that way in the kit they sent me. I tried using
my partner ID and my MCP ID, neither of which worked. I dug through the partner website
and found that I actually had a "Technical ID" associated with my name. To find this
- log into the <a href="https://partners.microsoft.com" target="_blank">partner site</a> and
click on the "Requirements &amp; Assets" menu at the top, then select "Associated
People"
</p>
        <p>
          <a href="http://www.rcs-solutions.com/blog/content/binary/WindowsLiveWriter/EmpowermentProgram_B106/PartnerAssoc_2.png">
            <img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="129" alt="PartnerAssoc" src="http://www.rcs-solutions.com/blog/content/binary/WindowsLiveWriter/EmpowermentProgram_B106/PartnerAssoc_thumb.png" width="342" border="0" />
          </a>
        </p>
        <p>
At the bottom of the screen that opens is a list of all people associated with your
company and their technical ID. I tried entering this and it unfortunately didn't
work. I thought (maybe) the site required a Live ID e-mail address instead of my other
e-mail address, so I entered it instead and saved it. Then I tried signing in again.
At that point the site complained that I had entered the wrong info. in too many times
and to try again in 5 minutes. At that point I gave up.
</p>
        <p>
The next day I dug up the MSDN support number and gave them a call. They had me re-enter
the information I had tried the night before, fiddled with a few things and suddenly
it let me log in! 
</p>
        <p>
I know someone who is planning on signing up as well and I'm curious to see if it
goes smoother for them than it did for me - hopefully it does.
</p>
        <p>
 
</p>
        <p>
          <strong>Links:</strong>
        </p>
        <p>
          <a title="http://www.rcs-solutions.com/blog/2007/10/12/MicrosoftsEmpowerProgramForISVs.aspx" href="http://www.rcs-solutions.com/blog/2007/10/12/MicrosoftsEmpowerProgramForISVs.aspx">http://www.rcs-solutions.com/blog/2007/10/12/MicrosoftsEmpowerProgramForISVs.aspx</a>
          <br />
          <a title="http://www.rcs-solutions.com/blog/2007/11/20/EmpowermentProgramUpdate.aspx" href="http://www.rcs-solutions.com/blog/2007/11/20/EmpowermentProgramUpdate.aspx">http://www.rcs-solutions.com/blog/2007/11/20/EmpowermentProgramUpdate.aspx</a>
          <br />
          <a title="https://partner.microsoft.com/40011351" href="https://partner.microsoft.com/40011351">https://partner.microsoft.com/40011351</a>
          <br />
          <a title="http://msdn2.microsoft.com/en-us/default.aspx" href="http://msdn2.microsoft.com/en-us/default.aspx">http://msdn2.microsoft.com/en-us/default.aspx</a>
        </p>
        <img width="0" height="0" src="http://www.rcs-solutions.com/blog/aggbug.ashx?id=883ddb06-7562-4ebb-bd50-0e96bc72ee4c" />
      </body>
      <title>Empowerment Program</title>
      <guid isPermaLink="false">http://www.rcs-solutions.com/blog/PermaLink,guid,883ddb06-7562-4ebb-bd50-0e96bc72ee4c.aspx</guid>
      <link>http://www.rcs-solutions.com/blog/2008/03/23/EmpowermentProgram.aspx</link>
      <pubDate>Sun, 23 Mar 2008 17:05:40 GMT</pubDate>
      <description>&lt;p&gt;
I've finally gotten all set-up in &lt;a href="https://partner.microsoft.com/40011351" target="_blank"&gt;Microsoft's
Empowerment&lt;/a&gt; program. I wish I could say it went smoothly, but that definitely
wasn't the case. I think I may have signed up at the worst possible time - they were
in the process of revamping their website which caused me a bunch of different problems.
I finally got tired of playing e-mail tag and called Partner support a few weeks ago.
They had been telling me to complete the application process, but every time I tried
to log back into the Empowerment site it just told me my application had been denied
and it wouldn't let me sign back up (or even tell me WHY it had been denied). When
I called they took a look at it then told me they needed to have someone else take
a look at the problem. I received an e-mail a few days later claiming the problem
should be resolved.
&lt;/p&gt;
&lt;p&gt;
I tried logging back in but had the same problem I had been having. I called them
again two weeks ago Monday and while I was on the phone they were finally able to
clear whatever flag was keeping me from being able to resubmit my application - they
definitely added a few more required fields from when I initially signed up. Last
Monday I figured I'd try logging back into the Partner site and see if they had any
way of checking the status. I ended up trying to sign up again but this time I got
to a page which wanted me to agree to some EULA, but the buttons were all disabled.
Was that a good sign or a bad sign?
&lt;/p&gt;
&lt;p&gt;
I found out two days later (on Wednesday) when I received my Empowerment CD's and
DVD's. Unfortunately, they don't include any kind of documentation about how to actually
get your license keys. Since I've worked at a few places which had their Universal
subscription (when it was available), I assumed I might just be able to log into the &lt;a href="http://msdn2.microsoft.com/en-us/default.aspx" target="_blank"&gt;MSDN
subscriber download section&lt;/a&gt; using my MS Live ID. I clicked on the "Associate your
subscription with your WIndows Live ID" link but it also wanted me to enter my
&lt;/p&gt;
&lt;a href="http://www.rcs-solutions.com/blog/content/binary/WindowsLiveWriter/EmpowermentProgram_B106/MSDN_2.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="356" alt="MSDN" src="http://www.rcs-solutions.com/blog/content/binary/WindowsLiveWriter/EmpowermentProgram_B106/MSDN_thumb.png" width="269" border="0"&gt;&lt;/a&gt; 
&lt;p&gt;
Benefit Access Number, Subscriber ID, or MSPP Technical Contact ID. Unfortunately
I didn't receive anything labeled that way in the kit they sent me. I tried using
my partner ID and my MCP ID, neither of which worked. I dug through the partner website
and found that I actually had a "Technical ID" associated with my name. To find this
- log into the &lt;a href="https://partners.microsoft.com" target="_blank"&gt;partner site&lt;/a&gt; and
click on the "Requirements &amp;amp; Assets" menu at the top, then select "Associated
People"
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.rcs-solutions.com/blog/content/binary/WindowsLiveWriter/EmpowermentProgram_B106/PartnerAssoc_2.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="129" alt="PartnerAssoc" src="http://www.rcs-solutions.com/blog/content/binary/WindowsLiveWriter/EmpowermentProgram_B106/PartnerAssoc_thumb.png" width="342" border="0"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
At the bottom of the screen that opens is a list of all people associated with your
company and their technical ID. I tried entering this and it unfortunately didn't
work. I thought (maybe) the site required a Live ID e-mail address instead of my other
e-mail address, so I entered it instead and saved it. Then I tried signing in again.
At that point the site complained that I had entered the wrong info. in too many times
and to try again in 5 minutes. At that point I gave up.
&lt;/p&gt;
&lt;p&gt;
The next day I dug up the MSDN support number and gave them a call. They had me re-enter
the information I had tried the night before, fiddled with a few things and suddenly
it let me log in! 
&lt;/p&gt;
&lt;p&gt;
I know someone who is planning on signing up as well and I'm curious to see if it
goes smoother for them than it did for me - hopefully it does.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Links:&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a title="http://www.rcs-solutions.com/blog/2007/10/12/MicrosoftsEmpowerProgramForISVs.aspx" href="http://www.rcs-solutions.com/blog/2007/10/12/MicrosoftsEmpowerProgramForISVs.aspx"&gt;http://www.rcs-solutions.com/blog/2007/10/12/MicrosoftsEmpowerProgramForISVs.aspx&lt;/a&gt;
&lt;br&gt;
&lt;a title="http://www.rcs-solutions.com/blog/2007/11/20/EmpowermentProgramUpdate.aspx" href="http://www.rcs-solutions.com/blog/2007/11/20/EmpowermentProgramUpdate.aspx"&gt;http://www.rcs-solutions.com/blog/2007/11/20/EmpowermentProgramUpdate.aspx&lt;/a&gt;
&lt;br&gt;
&lt;a title="https://partner.microsoft.com/40011351" href="https://partner.microsoft.com/40011351"&gt;https://partner.microsoft.com/40011351&lt;/a&gt;
&lt;br&gt;
&lt;a title="http://msdn2.microsoft.com/en-us/default.aspx" href="http://msdn2.microsoft.com/en-us/default.aspx"&gt;http://msdn2.microsoft.com/en-us/default.aspx&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.rcs-solutions.com/blog/aggbug.ashx?id=883ddb06-7562-4ebb-bd50-0e96bc72ee4c" /&gt;</description>
      <comments>http://www.rcs-solutions.com/blog/CommentView,guid,883ddb06-7562-4ebb-bd50-0e96bc72ee4c.aspx</comments>
      <category>Software</category>
    </item>
    <item>
      <trackback:ping>http://www.rcs-solutions.com/blog/Trackback.aspx?guid=b8568cd8-b87c-43ad-8d11-5a4994223923</trackback:ping>
      <pingback:server>http://www.rcs-solutions.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.rcs-solutions.com/blog/PermaLink,guid,b8568cd8-b87c-43ad-8d11-5a4994223923.aspx</pingback:target>
      <dc:creator>Paul Mrozowski</dc:creator>
      <wfw:comment>http://www.rcs-solutions.com/blog/CommentView,guid,b8568cd8-b87c-43ad-8d11-5a4994223923.aspx</wfw:comment>
      <wfw:commentRss>http://www.rcs-solutions.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=b8568cd8-b87c-43ad-8d11-5a4994223923</wfw:commentRss>
      <slash:comments>3</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I mentioned in a <a href="http://www.rcs-solutions.com/blog/2007/10/12/MicrosoftsEmpowerProgramForISVs.aspx">previous
post</a> about signing up for the Microsoft Empowerment program. At the time, they
mentioned it may take a while to hear from them. I figured I'd get at least a "hey,
we got your application, thanks" e-mail. So far, not a thing. It's not really clear
on how (if?) I can even check the status on this. 
</p>
        <p>
This was the original signup link: <a title="https://partner.microsoft.com/40011351" href="https://partner.microsoft.com/40011351">https://partner.microsoft.com/40011351</a> (strange,
my original post should have had this link as well - I wonder where it go lost).
</p>
        <p>
I just checked it again and they mention that the site is undergoing maintenance from
11/8 - 11/30. Great - I wonder if my application ended up in a black hole. I was really
hoping to have the licenses taken care of by now, since some of my MS software demos
are about to expire. 
</p>
        <img width="0" height="0" src="http://www.rcs-solutions.com/blog/aggbug.ashx?id=b8568cd8-b87c-43ad-8d11-5a4994223923" />
      </body>
      <title>Empowerment Program Update</title>
      <guid isPermaLink="false">http://www.rcs-solutions.com/blog/PermaLink,guid,b8568cd8-b87c-43ad-8d11-5a4994223923.aspx</guid>
      <link>http://www.rcs-solutions.com/blog/2007/11/20/EmpowermentProgramUpdate.aspx</link>
      <pubDate>Tue, 20 Nov 2007 03:44:30 GMT</pubDate>
      <description>&lt;p&gt;
I mentioned in a &lt;a href="http://www.rcs-solutions.com/blog/2007/10/12/MicrosoftsEmpowerProgramForISVs.aspx"&gt;previous
post&lt;/a&gt; about signing up for the Microsoft Empowerment program. At the time, they
mentioned it may take a while to hear from them. I figured I'd get at least a "hey,
we got your application, thanks" e-mail. So far, not a thing. It's not really clear
on how (if?) I can even check the status on this. 
&lt;/p&gt;
&lt;p&gt;
This was the original signup link: &lt;a title="https://partner.microsoft.com/40011351" href="https://partner.microsoft.com/40011351"&gt;https://partner.microsoft.com/40011351&lt;/a&gt; (strange,
my original post should have had this link as well - I wonder where it go lost).
&lt;/p&gt;
&lt;p&gt;
I just checked it again and they mention that the site is undergoing maintenance from
11/8 - 11/30. Great - I wonder if my application ended up in a black hole. I was really
hoping to have the licenses taken care of by now, since some of my MS software demos
are about to expire. 
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.rcs-solutions.com/blog/aggbug.ashx?id=b8568cd8-b87c-43ad-8d11-5a4994223923" /&gt;</description>
      <comments>http://www.rcs-solutions.com/blog/CommentView,guid,b8568cd8-b87c-43ad-8d11-5a4994223923.aspx</comments>
      <category>Software</category>
    </item>
    <item>
      <trackback:ping>http://www.rcs-solutions.com/blog/Trackback.aspx?guid=ea829a2c-bfb7-46a5-9b30-8b174ee79b87</trackback:ping>
      <pingback:server>http://www.rcs-solutions.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.rcs-solutions.com/blog/PermaLink,guid,ea829a2c-bfb7-46a5-9b30-8b174ee79b87.aspx</pingback:target>
      <dc:creator>Paul Mrozowski</dc:creator>
      <wfw:comment>http://www.rcs-solutions.com/blog/CommentView,guid,ea829a2c-bfb7-46a5-9b30-8b174ee79b87.aspx</wfw:comment>
      <wfw:commentRss>http://www.rcs-solutions.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=ea829a2c-bfb7-46a5-9b30-8b174ee79b87</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
  I was doing some searching the other day for pricing on MSDN Professional vs
MSDN Premium editions, comparing what was included, etc. Pro seemed to be around $1000
vs upwards of $2000 for Premium (depending on the specific version picked). Here's
a <a href="http://msdn2.microsoft.com/en-us/vstudio/aa718657.aspx">comparision</a> of
the differences. For me, I was really hoping to be able to get Vista, Outlook, and
things like Expression. Unfortunately, those are only available with the Premium edition.
$1000 was doable, but there was no way I was going to spend $2K on software (it's
still not a bad deal, all things considered). I could get the Pro version and just
buy what I wanted, but that still pushed the price up to the Premium edition range.
</p>
        <p>
I remember running across some great deals for the MSDN Universal subscription a few
years ago on E-bay, so I thought I'd poke around there to see if there was something
similar for the Premium edition. I ran across an ad for the Premium version for around
$950. "Not bad" I thought, then started looking at the description to make sure it
wasn't the Educational version or anything weird. Part of the way down I read some
of the requirements: I needed to agree to develop a commercial software app., place
a product announcement on my website, make a best effort to pass one of the MS software
tests.
</p>
        <p>
Hey! That suddenly started sounding really familiar. Yep, those end up being the same
requirements for Microsoft's Empower program. That you can get directly from Microsoft.
For $375. 
</p>
        <p>
Yep, these guys are really just signing you up for the Empower program for a mere
$525 more (handling charge, I guess). Un-Effing believable.
</p>
        <img width="0" height="0" src="http://www.rcs-solutions.com/blog/aggbug.ashx?id=ea829a2c-bfb7-46a5-9b30-8b174ee79b87" />
      </body>
      <title>Microsoft's Empower program for ISV's</title>
      <guid isPermaLink="false">http://www.rcs-solutions.com/blog/PermaLink,guid,ea829a2c-bfb7-46a5-9b30-8b174ee79b87.aspx</guid>
      <link>http://www.rcs-solutions.com/blog/2007/10/12/MicrosoftsEmpowerProgramForISVs.aspx</link>
      <pubDate>Fri, 12 Oct 2007 02:15:03 GMT</pubDate>
      <description>&lt;p&gt;
&amp;nbsp; I was doing some searching the other day for pricing on MSDN Professional vs
MSDN Premium editions, comparing what was included, etc. Pro seemed to be around $1000
vs upwards of $2000 for Premium (depending on the specific version picked). Here's
a &lt;a href="http://msdn2.microsoft.com/en-us/vstudio/aa718657.aspx"&gt;comparision&lt;/a&gt; of
the differences. For me, I was really hoping to be able to get Vista, Outlook, and
things like Expression. Unfortunately, those are only available with the Premium edition.
$1000 was doable, but there was no way I was going to spend $2K on software (it's
still not a bad deal, all things considered). I could get the Pro version and just
buy what I wanted, but that still pushed the price up to the Premium edition range.
&lt;/p&gt;
&lt;p&gt;
I remember running across some great deals for the MSDN Universal subscription a few
years ago on E-bay, so I thought I'd poke around there to see if there was something
similar for the Premium edition. I ran across an ad for the Premium version for around
$950. "Not bad" I thought, then started looking at the description to make sure it
wasn't the Educational version or anything weird. Part of the way down I read some
of the requirements: I needed to agree to develop a commercial software app., place
a product announcement on my website, make a best effort to pass one of the MS software
tests.
&lt;/p&gt;
&lt;p&gt;
Hey! That suddenly started sounding really familiar. Yep, those end up being the same
requirements for Microsoft's Empower program. That you can get directly from Microsoft.
For $375. 
&lt;/p&gt;
&lt;p&gt;
Yep, these guys are really just signing you up for the Empower program for a mere
$525 more (handling charge, I guess). Un-Effing believable.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.rcs-solutions.com/blog/aggbug.ashx?id=ea829a2c-bfb7-46a5-9b30-8b174ee79b87" /&gt;</description>
      <comments>http://www.rcs-solutions.com/blog/CommentView,guid,ea829a2c-bfb7-46a5-9b30-8b174ee79b87.aspx</comments>
      <category>Software</category>
    </item>
  </channel>
</rss>