<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://dotnet.org.za/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Justin Lovell&amp;#39;s Blog</title><link>http://dotnet.org.za/justin/default.aspx</link><description>The Grumpy Coder</description><dc:language>en</dc:language><generator>CommunityServer 2007 SP2 (Build: 20611.960)</generator><item><title>An Apology to Mark... but also my thoughts</title><link>http://dotnet.org.za/justin/archive/2005/06/29/38641.aspx</link><pubDate>Wed, 29 Jun 2005 07:12:00 GMT</pubDate><guid isPermaLink="false">2d3a9e08-b70c-4031-ba2b-8f5282a2a59a:38641</guid><dc:creator>justin</dc:creator><slash:comments>5</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://dotnet.org.za/justin/rsscomments.aspx?PostID=38641</wfw:commentRss><comments>http://dotnet.org.za/justin/archive/2005/06/29/38641.aspx#comments</comments><description>&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="mso-bidi-font-size: 10.0pt"&gt;(Note: sorry for this being off-topic but the originating thread started on the main feed and I would like to show a human face)&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman'"&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman'"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="mso-bidi-font-size: 10.0pt"&gt;&lt;FONT face=Verdana size=2&gt;In &lt;/FONT&gt;&lt;A href="http://dotnet.org.za/justin/archive/2005/06/27/38549.aspx"&gt;&lt;SPAN style="mso-bidi-font-size: 12.0pt"&gt;&lt;FONT face=Verdana size=2&gt;this blog post,&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;FONT face=Verdana size=2&gt; I think I want to extend a public apology to Mark. The only thing I feel that I owed to him is that I took private correspondence and put it on a public feed. It is a completely disputable if the paraphrases are true but I don&amp;#8217;t want to do that because the low down is that I did not seek Mark&amp;#8217;s permission.&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman'"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="mso-bidi-font-size: 10.0pt"&gt;But before I get responses like &amp;#8220;damn right but&amp;#8230; that is not all you have to apologize for,&amp;#8221; it seems that some of you have missed the point completely on what my objective was. This is not in due regard with the public feedback I received but also the &amp;#8216;private&amp;#8217; feedback so I&amp;#8217;m not targeting any particular group &amp;#8211; I&amp;#8217;m talking out to the world here. I tried to floor out my logical thoughts here but I&amp;#8217;m not guaranteeing that it will sound like that.&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman'"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="mso-bidi-font-size: 10.0pt"&gt;My objective was not to go about and lower Mark. I can dissect my blog post word for word and clearly indicate that I was not disrespectful to him (besides what I&amp;#8217;ve already apologized for). I was warming up the plate to say that &amp;#8220;Mark, I know you are busy till the end of the month but I&amp;#8217;m ready so let&amp;#8217;s get things moving.&amp;#8221;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman'"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="mso-bidi-font-size: 10.0pt"&gt;Granted, I was expecting either of the two of the responses. Either the &amp;#8220;Come on Mark, let&amp;#8217;s do the deed&amp;#8221; or the &amp;#8220;Why not organize it yourself?&amp;#8221; I did not justify the later in the original text because I just forgot to. However I would like to add something to this aspect and the sincere truth is that I don&amp;#8217;t know of anyone personally who can or know of someone who might help me get things rolling. How many Durban SaDeveloper contacts do I personally have? About&amp;#8230; one to be precise, and you guessed it correctly, Mark. Now I&amp;#8217;m stuck with absolutely no starting point.&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman'"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="mso-bidi-font-size: 10.0pt"&gt;Besides, why should I have to go and prepare the presentation and still organize a venue? Do you have any idea how much work it is to prepare either two, especially the later one if there is no real starting off point? Maybe you have; maybe you haven&amp;#8217;t but many hands make the workload light&amp;#8230; and that is what a community should do, right? It shouldn&amp;#8217;t burden one to prepare something and then to organize the venue &amp;#8211; everyone should pitch in so that it is an enjoyable experience.&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman'"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="mso-bidi-font-size: 10.0pt"&gt;But I don&amp;#8217;t think you guys skipped that thought, surely! You guys aren&amp;#8217;t that mean, right? Especially after I pointed out that I had no real starting block with contacts. And you really understood me, no? Hmmm&amp;#8230; tell me that I&amp;#8217;m not too assured by the generosity you kind people have shown me after adding those comments.&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman'"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="mso-bidi-font-size: 10.0pt"&gt;But let&amp;#8217;s assume you were kind sirs (and madams if the anonymous showed any sex) and you weren&amp;#8217;t focused upon the task of trying to rip anything into your advantage. It seems that my light humor was missed completely &amp;#8211; I was using it as a &amp;#8220;helper&amp;#8221; in my intention. It seems that there was no applause or acknowledgement for that in my message. Maybe it was seen out of context humor because there is nothing else that could be possibly wrong with that post that some people will take offense to? It seems like that.&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman'"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="mso-bidi-font-size: 10.0pt"&gt;And this is where I have to draw the line out to you &amp;#8211; I&amp;#8217;m rather confused myself if&amp;nbsp;the humor is&amp;nbsp;in context or whether it is not. How would one define a hard line that it is out of context? The answer doesn&amp;#8217;t matter because I use similar humor in my presentation. I don&amp;#8217;t want to offend people (although none are targeted at any person). I can&amp;#8217;t take that risk. So here&amp;#8217;s my dilemma:&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman'"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL style="MARGIN-TOP: 0cm" type=disc&gt;
&lt;LI class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt"&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="mso-bidi-font-size: 10.0pt"&gt;I can leave the presentation as is. The difference between the blogging world and in person presentation is that I&amp;#8217;m about to annotate my content with a smile, a grin, a shaking head, ect.&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt"&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="mso-bidi-font-size: 10.0pt"&gt;I can take out the humor from my presentation. If you want a stupid boring thing to talk about the next day, encourage me. However if you are &lt;B style="mso-bidi-font-weight: normal"&gt;not&lt;/B&gt; the sensitive kind, please let me know if you require the exciting presentation to stay awake.&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt"&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="mso-bidi-font-size: 10.0pt"&gt;I can just not present at all and dwindle this down to an article, quite easily. I don&amp;#8217;t want to do this. It is only an option because if I&amp;nbsp;do take out the humor (or large chunks), it&amp;nbsp;might&amp;nbsp;look like my presentation has loads of holes. I&amp;#8217;m not putting this as an option out of spite.&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="mso-bidi-font-size: 10.0pt"&gt;&lt;o:p&gt;&lt;FONT face=Verdana size=2&gt;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="mso-bidi-font-size: 10.0pt"&gt;At this moment in time, I&amp;#8217;m not ready as I&amp;#8217;m undecided on what I want to do with the current presentation. I am reviewing my presentation to help me make that decision.&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman'"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="mso-bidi-font-size: 10.0pt"&gt;Besides, as Stuart said, &amp;#8220;I&amp;#8217;m sure this one will rock the planet.&amp;#8221; Now I&amp;#8217;m also having doubts on whether to present at all because I now know someone&amp;#8217;s sarcastic thought &amp;#8211; something they&amp;#8217;ve prejudged before they know anything. Worst case is that this thought is shared amongst others. And that in itself worries me because that can determine if the user group meeting would have a chance to succeed all due a decision made before it had a chance. I&amp;#8217;m not the one to give up but this&amp;#8230; this&amp;#8230; this is more than enough to deter me. The only reason why I think this &amp;#8216;thought&amp;#8217; is shared amongst others is that there&amp;#8217;s no chance that someone will peep out that thought if there was not a crowd entertaining them.&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman'"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="mso-bidi-font-size: 10.0pt"&gt;&lt;FONT face=Verdana size=2&gt;I&amp;#8217;ll let you guys know what I decide soon, if you care.&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://dotnet.org.za/justin/archive/2005/06/29/38641.aspx&amp;amp;;subject=An+Apology+to+Mark...+but+also+my+thoughts" target="_blank" title = "Post http://dotnet.org.za/justin/archive/2005/06/29/38641.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://dotnet.org.za/justin/archive/2005/06/29/38641.aspx&amp;amp;;title=An+Apology+to+Mark...+but+also+my+thoughts" target="_blank" title = "Post http://dotnet.org.za/justin/archive/2005/06/29/38641.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://dotnet.org.za/justin/archive/2005/06/29/38641.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://dotnet.org.za/justin/archive/2005/06/29/38641.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://dotnet.org.za/justin/archive/2005/06/29/38641.aspx&amp;amp;title=An+Apology+to+Mark...+but+also+my+thoughts" target="_blank" title = "Post http://dotnet.org.za/justin/archive/2005/06/29/38641.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://dotnet.org.za/justin/archive/2005/06/29/38641.aspx&amp;amp;;title=An+Apology+to+Mark...+but+also+my+thoughts" target="_blank" title = "Post http://dotnet.org.za/justin/archive/2005/06/29/38641.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://dotnet.org.za/justin/archive/2005/06/29/38641.aspx&amp;amp;;title=An+Apology+to+Mark...+but+also+my+thoughts&amp;amp;;top=1" target="_blank" title = "Post http://dotnet.org.za/justin/archive/2005/06/29/38641.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://dotnet.org.za/aggbug.aspx?PostID=38641" width="1" height="1"&gt;</description></item><item><title>Yet another comment about Interfaces vs. Classes</title><link>http://dotnet.org.za/justin/archive/2005/06/13/23389.aspx</link><pubDate>Mon, 13 Jun 2005 19:07:00 GMT</pubDate><guid isPermaLink="false">2d3a9e08-b70c-4031-ba2b-8f5282a2a59a:23389</guid><dc:creator>justin</dc:creator><slash:comments>7</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://dotnet.org.za/justin/rsscomments.aspx?PostID=23389</wfw:commentRss><comments>http://dotnet.org.za/justin/archive/2005/06/13/23389.aspx#comments</comments><description>&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;FONT face=Verdana size=2&gt;Mike &lt;/FONT&gt;&lt;A href="http://dotnet.org.za/justin/archive/2005/05/01/19285.aspx#21523"&gt;&lt;FONT face=Verdana size=2&gt;left a comment&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Verdana size=2&gt; last week on &lt;/FONT&gt;&lt;A href="http://dotnet.org.za/justin/archive/2005/05/01/19285.aspx"&gt;&lt;FONT face=Verdana size=2&gt;one of my blog entries&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Verdana size=2&gt; about my ravings of interfaces and classes. First off, yes, you are quite right that explicit declaration of interfaces has its advantages in terms of breaking and bending the rules of polymorphism. It is one thing that I&amp;#8217;ve been waiting for someone to mention.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;FONT face=Verdana size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;FONT face=Verdana size=2&gt;In terms of categorizing a class by saying Person class implements the two interfaces of IPersonDetails and IPersonAddress might sound quite brilliant. But I would like to argue that it&amp;#8217;s the learning curve of your own API &amp;#8211; you will pay for it, I promise, on medium to very large projects. Now I must remember that the Person class implements the two interfaces explicitly &amp;#8211; so I have to &amp;#8220;cast&amp;#8221; the Person instance to the interfaces. It might sound like an alright situation at 10 main classes but if you can remember which interfaces your classes implement explicitly (without going to the documentation or the definitions because that takes you out of your IDE) for 50+ main classes, then you have one excellent memory. But the problem is that I don&amp;#8217;t have a memory like that! Neither does the guy sitting next to me have that.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;o:p&gt;&lt;FONT face=Verdana size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;FONT face=Verdana size=2&gt;And besides, when you break down your class structure into interfaces, are you going against the idea of interfaces? Are they ever only going to be implemented by one class? If so, why bother? I hope you catch my drift where I&amp;#8217;m coming from, about showing the correct usage of interfaces in the OOP world. This is where I went on saying in the third part stating that interfaces have the tendency to add development time to any project.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;o:p&gt;&lt;FONT face=Verdana size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;And on as a side note, I see that I&amp;#8217;m getting quite a bit of Google traffic onto those posts. I think I should just clean them up quite a bit at some time in the future because maybe I&amp;#8217;m the next Martin Fowler&amp;#8230; well, at least I&amp;#8217;m allowed to dream big.&lt;SPAN lang=EN-ZA style="mso-ansi-language: EN-ZA"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://dotnet.org.za/justin/archive/2005/06/13/23389.aspx&amp;amp;;subject=Yet+another+comment+about+Interfaces+vs.+Classes" target="_blank" title = "Post http://dotnet.org.za/justin/archive/2005/06/13/23389.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://dotnet.org.za/justin/archive/2005/06/13/23389.aspx&amp;amp;;title=Yet+another+comment+about+Interfaces+vs.+Classes" target="_blank" title = "Post http://dotnet.org.za/justin/archive/2005/06/13/23389.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://dotnet.org.za/justin/archive/2005/06/13/23389.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://dotnet.org.za/justin/archive/2005/06/13/23389.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://dotnet.org.za/justin/archive/2005/06/13/23389.aspx&amp;amp;title=Yet+another+comment+about+Interfaces+vs.+Classes" target="_blank" title = "Post http://dotnet.org.za/justin/archive/2005/06/13/23389.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://dotnet.org.za/justin/archive/2005/06/13/23389.aspx&amp;amp;;title=Yet+another+comment+about+Interfaces+vs.+Classes" target="_blank" title = "Post http://dotnet.org.za/justin/archive/2005/06/13/23389.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://dotnet.org.za/justin/archive/2005/06/13/23389.aspx&amp;amp;;title=Yet+another+comment+about+Interfaces+vs.+Classes&amp;amp;;top=1" target="_blank" title = "Post http://dotnet.org.za/justin/archive/2005/06/13/23389.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://dotnet.org.za/aggbug.aspx?PostID=23389" width="1" height="1"&gt;</description><category domain="http://dotnet.org.za/justin/archive/tags/OOP/default.aspx">OOP</category></item><item><title>Blog Spam: How to fight back?</title><link>http://dotnet.org.za/justin/archive/2005/06/13/23384.aspx</link><pubDate>Mon, 13 Jun 2005 19:06:00 GMT</pubDate><guid isPermaLink="false">2d3a9e08-b70c-4031-ba2b-8f5282a2a59a:23384</guid><dc:creator>justin</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://dotnet.org.za/justin/rsscomments.aspx?PostID=23384</wfw:commentRss><comments>http://dotnet.org.za/justin/archive/2005/06/13/23384.aspx#comments</comments><description>&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;FONT face=Verdana size=2&gt;Alright, it is about time that these spammers get what they ask for? Our time or their time. It is nice how innovative they have got with the one exploit that I silently observed about four or so months ago where these nice RSS features allows for adding of comments.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;FONT face=Verdana size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;FONT face=Verdana size=2&gt;But here is an appeal: why don&amp;#8217;t we leave the crap on our site? I mean: if they have a huge influx of links, they are going to hurt their own name within eight weeks when Google comes around. However, should Google find the links to these sites, and then not find them the next time round, will think that we had news flashes upon our blogs, which will ultimately lead to them hurting themselves.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;o:p&gt;&lt;FONT face=Verdana size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;I know it sounds stupid but think about it. They have us figured out on what actions we will do and know more or less how &lt;SPAN lang=EN-ZA style="mso-ansi-language: EN-ZA"&gt;Google operates. I know that doing this action will make our blogs, our pride, more &amp;#8220;dirty&amp;#8221; but eventually, I&amp;#8217;m sure they will figure out that this technique is not working for their ranks. I would hate to resolve to this behaviour but other than that, how else can we fight back?&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN lang=EN-ZA style="mso-ansi-language: EN-ZA"&gt;&lt;o:p&gt;&lt;FONT face=Verdana size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN lang=EN-ZA style="mso-ansi-language: EN-ZA"&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;One option is to rewrite some of .Text&amp;#8217;s engine ourselves such that any track backs under goes moderation before they are even displayed. And we would receive an email when there is a track back awaiting approval. Should we not approve the content within five or so weeks, the track backs are removed automactically.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN lang=EN-ZA style="mso-ansi-language: EN-ZA"&gt;&lt;o:p&gt;&lt;FONT face=Verdana size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN lang=EN-ZA style="mso-ansi-language: EN-ZA"&gt;&lt;FONT face=Verdana size=2&gt;I think I like the sounds of the later. Is there any other better ways, besides physically flame-throwing the spammers, that you can think of? And, should I volunteer to look at the code-patch, would it be accepted? I personally don&amp;#8217;t know the answer to that but .Text is dead &amp;#8211; no more development will occur on it so are we going to be Telligent&amp;#8217;s label bitch in the near future (Community Server) or are we going to migrate to &lt;/FONT&gt;&lt;A href="http://www.dasblog.net/"&gt;&lt;FONT face=Verdana size=2&gt;dasBlog&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;?&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://dotnet.org.za/justin/archive/2005/06/13/23384.aspx&amp;amp;;subject=Blog+Spam%3a+How+to+fight+back%3f" target="_blank" title = "Post http://dotnet.org.za/justin/archive/2005/06/13/23384.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://dotnet.org.za/justin/archive/2005/06/13/23384.aspx&amp;amp;;title=Blog+Spam%3a+How+to+fight+back%3f" target="_blank" title = "Post http://dotnet.org.za/justin/archive/2005/06/13/23384.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://dotnet.org.za/justin/archive/2005/06/13/23384.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://dotnet.org.za/justin/archive/2005/06/13/23384.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://dotnet.org.za/justin/archive/2005/06/13/23384.aspx&amp;amp;title=Blog+Spam%3a+How+to+fight+back%3f" target="_blank" title = "Post http://dotnet.org.za/justin/archive/2005/06/13/23384.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://dotnet.org.za/justin/archive/2005/06/13/23384.aspx&amp;amp;;title=Blog+Spam%3a+How+to+fight+back%3f" target="_blank" title = "Post http://dotnet.org.za/justin/archive/2005/06/13/23384.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://dotnet.org.za/justin/archive/2005/06/13/23384.aspx&amp;amp;;title=Blog+Spam%3a+How+to+fight+back%3f&amp;amp;;top=1" target="_blank" title = "Post http://dotnet.org.za/justin/archive/2005/06/13/23384.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://dotnet.org.za/aggbug.aspx?PostID=23384" width="1" height="1"&gt;</description><category domain="http://dotnet.org.za/justin/archive/tags/General+announcements/default.aspx">General announcements</category></item><item><title>VS.NET 2005 release dates announced</title><link>http://dotnet.org.za/justin/archive/2005/06/08/21713.aspx</link><pubDate>Wed, 08 Jun 2005 06:20:00 GMT</pubDate><guid isPermaLink="false">2d3a9e08-b70c-4031-ba2b-8f5282a2a59a:21713</guid><dc:creator>justin</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://dotnet.org.za/justin/rsscomments.aspx?PostID=21713</wfw:commentRss><comments>http://dotnet.org.za/justin/archive/2005/06/08/21713.aspx#comments</comments><description>&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;I have just received word from a fellow MVP from the &lt;?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" /&gt;&lt;st1:country-region w:st="on"&gt;&lt;st1:place w:st="on"&gt;USA&lt;/st1:place&gt;&lt;/st1:country-region&gt;, Steven Smith, that the .NET 2.0 product lines has been announced for a release day. This announcement was made by Paul Flessner in his keynote on the second day of TechEd US.&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;So, save the following date into your Outlook and make that big red ring on the desk calendar &amp;#8211; November the 7&lt;SUP&gt;th&lt;/SUP&gt; is the week that things will happen. (And yes, the year is 2005 :-P).&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://dotnet.org.za/justin/archive/2005/06/08/21713.aspx&amp;amp;;subject=VS.NET+2005+release+dates+announced" target="_blank" title = "Post http://dotnet.org.za/justin/archive/2005/06/08/21713.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://dotnet.org.za/justin/archive/2005/06/08/21713.aspx&amp;amp;;title=VS.NET+2005+release+dates+announced" target="_blank" title = "Post http://dotnet.org.za/justin/archive/2005/06/08/21713.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://dotnet.org.za/justin/archive/2005/06/08/21713.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://dotnet.org.za/justin/archive/2005/06/08/21713.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://dotnet.org.za/justin/archive/2005/06/08/21713.aspx&amp;amp;title=VS.NET+2005+release+dates+announced" target="_blank" title = "Post http://dotnet.org.za/justin/archive/2005/06/08/21713.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://dotnet.org.za/justin/archive/2005/06/08/21713.aspx&amp;amp;;title=VS.NET+2005+release+dates+announced" target="_blank" title = "Post http://dotnet.org.za/justin/archive/2005/06/08/21713.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://dotnet.org.za/justin/archive/2005/06/08/21713.aspx&amp;amp;;title=VS.NET+2005+release+dates+announced&amp;amp;;top=1" target="_blank" title = "Post http://dotnet.org.za/justin/archive/2005/06/08/21713.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://dotnet.org.za/aggbug.aspx?PostID=21713" width="1" height="1"&gt;</description><category domain="http://dotnet.org.za/justin/archive/tags/General+announcements/default.aspx">General announcements</category></item><item><title>The DialyWTF – down the tubes it goes</title><link>http://dotnet.org.za/justin/archive/2005/05/22/20699.aspx</link><pubDate>Sun, 22 May 2005 07:27:00 GMT</pubDate><guid isPermaLink="false">2d3a9e08-b70c-4031-ba2b-8f5282a2a59a:20699</guid><dc:creator>justin</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://dotnet.org.za/justin/rsscomments.aspx?PostID=20699</wfw:commentRss><comments>http://dotnet.org.za/justin/archive/2005/05/22/20699.aspx#comments</comments><description>&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Verdana size=2&gt;About 10 or so months, I removed the much proclaimed site called the TheDailyWTF from my daily RSS tour (&lt;/FONT&gt;&lt;A href="http://www.thedailywtf.com/"&gt;&lt;FONT face=Verdana size=2&gt;www.thedailywtf.com&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Verdana size=2&gt;). I&amp;#8217;m just going to spring my opinion straight off but I think that the group that partakes in the approximate 200 replies to a post is&amp;#8230; well&amp;#8230; like a playground.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;FONT face=Verdana size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Verdana size=2&gt;Bear with me &amp;#8211; when the site started, it was a very entertaining, fun one. However, just go and browse to the latest and &amp;#8216;greatest&amp;#8217; WTF and it is like teasing between children. I take for example the conversation between a junior programmer and a senior programmer where the junior was asking how to increment a number by 11. I don&amp;#8217;t know what&amp;#8217;s missing here in the humor&amp;#8230; is it that a junior was asking the question? If it was the other way around, then yes, go ahead and put it as the WTF.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face=Verdana size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Verdana size=2&gt;Whoever is in this crowd thinks too high about themselves. I mean that they are in constant search for a flaw in their chosen victim; it is as though they get obsessed with the hobby and become very big-headed. They also have a tendency of rising to senior positions and shunting the door behind them and never acknowledging anyone &amp;#8220;under&amp;#8221; them. Even though the new guy might be a bright dude, their potential is never realized by the company and by them personally - all due to fate's timing.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face=Verdana size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Verdana size=2&gt;In conclusion, I think these people create a very unpleasant atmosphere, no matter what position you are in relation to them. Do I have any agreements or disagreements? And if the later, please support your argument with good reason.&lt;/FONT&gt;&lt;/P&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://dotnet.org.za/justin/archive/2005/05/22/20699.aspx&amp;amp;;subject=The+DialyWTF+%e2%80%93+down+the+tubes+it+goes" target="_blank" title = "Post http://dotnet.org.za/justin/archive/2005/05/22/20699.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://dotnet.org.za/justin/archive/2005/05/22/20699.aspx&amp;amp;;title=The+DialyWTF+%e2%80%93+down+the+tubes+it+goes" target="_blank" title = "Post http://dotnet.org.za/justin/archive/2005/05/22/20699.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://dotnet.org.za/justin/archive/2005/05/22/20699.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://dotnet.org.za/justin/archive/2005/05/22/20699.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://dotnet.org.za/justin/archive/2005/05/22/20699.aspx&amp;amp;title=The+DialyWTF+%e2%80%93+down+the+tubes+it+goes" target="_blank" title = "Post http://dotnet.org.za/justin/archive/2005/05/22/20699.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://dotnet.org.za/justin/archive/2005/05/22/20699.aspx&amp;amp;;title=The+DialyWTF+%e2%80%93+down+the+tubes+it+goes" target="_blank" title = "Post http://dotnet.org.za/justin/archive/2005/05/22/20699.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://dotnet.org.za/justin/archive/2005/05/22/20699.aspx&amp;amp;;title=The+DialyWTF+%e2%80%93+down+the+tubes+it+goes&amp;amp;;top=1" target="_blank" title = "Post http://dotnet.org.za/justin/archive/2005/05/22/20699.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://dotnet.org.za/aggbug.aspx?PostID=20699" width="1" height="1"&gt;</description></item><item><title>Getting ASP.NET 1.x running on x64 platforms</title><link>http://dotnet.org.za/justin/archive/2005/05/06/19525.aspx</link><pubDate>Fri, 06 May 2005 19:19:00 GMT</pubDate><guid isPermaLink="false">2d3a9e08-b70c-4031-ba2b-8f5282a2a59a:19525</guid><dc:creator>justin</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://dotnet.org.za/justin/rsscomments.aspx?PostID=19525</wfw:commentRss><comments>http://dotnet.org.za/justin/archive/2005/05/06/19525.aspx#comments</comments><description>&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Verdana size=2&gt;In my blog post about me &lt;/FONT&gt;&lt;A href="http://dotnet.org.za/justin/archive/2005/05/01/19291.aspx"&gt;&lt;FONT face=Verdana size=2&gt;moving over to a 64-bit operating system&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Verdana size=2&gt;, one of the things that I almost shot myself in the foot is that I almost lost my ability to develop for ASP.NET 1.x.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;FONT face=Verdana size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Verdana size=2&gt;After a few hours reading the IIS 6 kernel (I know the subject quite well now), I came to a conclusion that ASP.NET (in fact, the whole of IIS) did not work was because of the ISAPI library being in a 32-bit native image. That got me thinking that 64-bit images cannot work against 32-bit images and the same with vice-versa.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face=Verdana size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Verdana size=2&gt;So I thought to myself that if I can launch IIS 6&amp;#8217;s worker process into 32-bit mode, that worker process can call ASP.NET ISAPI filter since both are 32-bit. A quick Google search query on my guess which led to me &lt;/FONT&gt;&lt;A href="http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/405f5bb5-87a3-43d2-8138-54b75db73aa1.mspx"&gt;&lt;FONT face=Verdana size=2&gt;to these steps&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Verdana size=2&gt;.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face=Verdana size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;OL style="MARGIN-TOP: 0in" type=1&gt;
&lt;LI class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-list: l0 level1 lfo1; tab-stops: list .5in"&gt;&lt;FONT face=Verdana size=2&gt;Open up command prompt.&lt;/FONT&gt; 
&lt;LI class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-list: l0 level1 lfo1; tab-stops: list .5in"&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;Change your directory to &lt;/FONT&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'"&gt;%systemdrive%\Inetpub\AdminScripts\&lt;/SPAN&gt;&lt;/FONT&gt; 
&lt;LI class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-list: l0 level1 lfo1; tab-stops: list .5in"&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;Execute the following command:&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; mso-bidi-font-size: 10.0pt"&gt;cscript.exe adsutil.vbs set W3SVC/AppPools/Enable32BitAppOnWin64 "true".&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/LI&gt;&lt;/OL&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Verdana size=2&gt;And behold: you can have worker processes running in both 32-bit and 64-bit mode.&lt;/FONT&gt;&lt;/P&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://dotnet.org.za/justin/archive/2005/05/06/19525.aspx&amp;amp;;subject=Getting+ASP.NET+1.x+running+on+x64+platforms" target="_blank" title = "Post http://dotnet.org.za/justin/archive/2005/05/06/19525.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://dotnet.org.za/justin/archive/2005/05/06/19525.aspx&amp;amp;;title=Getting+ASP.NET+1.x+running+on+x64+platforms" target="_blank" title = "Post http://dotnet.org.za/justin/archive/2005/05/06/19525.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://dotnet.org.za/justin/archive/2005/05/06/19525.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://dotnet.org.za/justin/archive/2005/05/06/19525.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://dotnet.org.za/justin/archive/2005/05/06/19525.aspx&amp;amp;title=Getting+ASP.NET+1.x+running+on+x64+platforms" target="_blank" title = "Post http://dotnet.org.za/justin/archive/2005/05/06/19525.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://dotnet.org.za/justin/archive/2005/05/06/19525.aspx&amp;amp;;title=Getting+ASP.NET+1.x+running+on+x64+platforms" target="_blank" title = "Post http://dotnet.org.za/justin/archive/2005/05/06/19525.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://dotnet.org.za/justin/archive/2005/05/06/19525.aspx&amp;amp;;title=Getting+ASP.NET+1.x+running+on+x64+platforms&amp;amp;;top=1" target="_blank" title = "Post http://dotnet.org.za/justin/archive/2005/05/06/19525.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://dotnet.org.za/aggbug.aspx?PostID=19525" width="1" height="1"&gt;</description><category domain="http://dotnet.org.za/justin/archive/tags/64-bit+Computing/default.aspx">64-bit Computing</category></item><item><title>Urgent: Job position in Durban</title><link>http://dotnet.org.za/justin/archive/2005/05/03/19366.aspx</link><pubDate>Tue, 03 May 2005 19:46:00 GMT</pubDate><guid isPermaLink="false">2d3a9e08-b70c-4031-ba2b-8f5282a2a59a:19366</guid><dc:creator>justin</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://dotnet.org.za/justin/rsscomments.aspx?PostID=19366</wfw:commentRss><comments>http://dotnet.org.za/justin/archive/2005/05/03/19366.aspx#comments</comments><description>&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;I know I posted this quite some time ago but now the situation is desperate. So desperate, I don&amp;#8217;t have the time to blog this during office hours. We have expanded the criteria for our job candidate and if you are looking for work elsewhere in &lt;?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" /&gt;&lt;st1:City w:st="on"&gt;&lt;st1:place w:st="on"&gt;Durban&lt;/st1:place&gt;&lt;/st1:City&gt; or know of someone who might be interested, from a Junior Developer to a Senior Developer. There is hardly any restriction on your previous working experience.&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;If you haven&amp;#8217;t written any .NET code professionally, that is alright if you have toyed a little with .NET during your spare time. As long as you have some sort of running start to combating .NET projects.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Even if you have sent a CV before, please resend your CV to &lt;A href="mailto:cv@burton.co.za"&gt;cv@burton.co.za&lt;/A&gt;. My boss (his name is also Justin), will probably ask for you to &amp;#8220;submit some source code,&amp;#8221; when he really means he expects one class file; not a sample project or anything like the sort. If you want to submit more than one class file, then that is fine. All he is asking for is a sample of something you have not coded in a team collaborative environment &amp;#8211; the bottom line is that it must be code that you have written by yourself.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;You take the decision of what will be to your advantage: if you feel that a small project will sum it up, great! If you feel that you don&amp;#8217;t want to infringe or surrender any intellectual property (including your own &amp;#8216;private&amp;#8217; work) by trying not to submit &amp;#8220;too much,&amp;#8221; we respect that. (When they asked for some source code from me, other than my articles, I gave them a small amount of code from multiple projects). Again, the bottom line is that it must be your code.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://dotnet.org.za/justin/archive/2005/05/03/19366.aspx&amp;amp;;subject=Urgent%3a+Job+position+in+Durban" target="_blank" title = "Post http://dotnet.org.za/justin/archive/2005/05/03/19366.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://dotnet.org.za/justin/archive/2005/05/03/19366.aspx&amp;amp;;title=Urgent%3a+Job+position+in+Durban" target="_blank" title = "Post http://dotnet.org.za/justin/archive/2005/05/03/19366.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://dotnet.org.za/justin/archive/2005/05/03/19366.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://dotnet.org.za/justin/archive/2005/05/03/19366.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://dotnet.org.za/justin/archive/2005/05/03/19366.aspx&amp;amp;title=Urgent%3a+Job+position+in+Durban" target="_blank" title = "Post http://dotnet.org.za/justin/archive/2005/05/03/19366.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://dotnet.org.za/justin/archive/2005/05/03/19366.aspx&amp;amp;;title=Urgent%3a+Job+position+in+Durban" target="_blank" title = "Post http://dotnet.org.za/justin/archive/2005/05/03/19366.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://dotnet.org.za/justin/archive/2005/05/03/19366.aspx&amp;amp;;title=Urgent%3a+Job+position+in+Durban&amp;amp;;top=1" target="_blank" title = "Post http://dotnet.org.za/justin/archive/2005/05/03/19366.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://dotnet.org.za/aggbug.aspx?PostID=19366" width="1" height="1"&gt;</description><category domain="http://dotnet.org.za/justin/archive/tags/General+announcements/default.aspx">General announcements</category></item><item><title>I’m fully 64-bit Enabled – Finally!</title><link>http://dotnet.org.za/justin/archive/2005/05/01/19291.aspx</link><pubDate>Sun, 01 May 2005 19:00:00 GMT</pubDate><guid isPermaLink="false">2d3a9e08-b70c-4031-ba2b-8f5282a2a59a:19291</guid><dc:creator>justin</dc:creator><slash:comments>5</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://dotnet.org.za/justin/rsscomments.aspx?PostID=19291</wfw:commentRss><comments>http://dotnet.org.za/justin/archive/2005/05/01/19291.aspx#comments</comments><description>&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Verdana size=2&gt;For those who do not know, I&amp;#8217;ve had an AMD64 machine since November 2004. At that moment, there was only a release candidate for the x64 initiative and decided not to run on it because&amp;#8230;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;FONT face=Verdana size=2&gt; &lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;OL style="MARGIN-TOP: 0in" type=1&gt;
&lt;LI class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-list: l0 level1 lfo1; tab-stops: list .5in"&gt;&lt;FONT face=Verdana size=2&gt;I&amp;#8217;m not a big fan of beta software.&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-list: l0 level1 lfo1; tab-stops: list .5in"&gt;&lt;FONT face=Verdana size=2&gt;Virtual PC did not work on the 64-bit operating systems.&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-list: l0 level1 lfo1; tab-stops: list .5in"&gt;&lt;FONT face=Verdana size=2&gt;I would run the Whidbey bits on virtual machines and since that did not work&amp;#8230; I could not make ends meet.&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-list: l0 level1 lfo1; tab-stops: list .5in"&gt;&lt;FONT face=Verdana size=2&gt;There was lack of documentation that ASP.NET 1.x would run through IIS.&lt;/FONT&gt;&lt;/LI&gt;&lt;/OL&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Verdana size=2&gt;Well, with the news of service pack one for Windows 2003, which also meant the final release of the x64 platforms. Yesterday, I downloaded the ISO for Windows XP x64 from MSDN, burnt the CD and formatted my PC completely forgetting the reasons why I did not install a 64-bit operating system in the first place.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face=Verdana size=2&gt; &lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Verdana size=2&gt;Well, I thought it was fast on a 32-bit operating system &amp;#8211; you must certainly see the speed difference now, even when running 32-bit processes.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face=Verdana size=2&gt; &lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Verdana size=2&gt;Now that I got a little settled in, I have noticed a few key differences between the other Windows XP platforms &amp;#8211; this is more inline with a Windows 2003 kernel feel. The first difference that I saw is that there are two editions of Internet Explorer &amp;#8211; a 32-bit and a 64-bit version as shown in the screenshot.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face=Verdana size=2&gt; &lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Verdana size=2&gt;&lt;img src="/images/dotnet_org_za/justin/1013/o_iexplorer.jpg"/&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face=Verdana size=2&gt; &lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Verdana size=2&gt;Here is &lt;/FONT&gt;&lt;A href="http://blogs.msdn.com/ie/archive/2005/01/12/351808.aspx"&gt;&lt;FONT face=Verdana size=2&gt;a blog post&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Verdana size=2&gt; from the Internet Explorer team which explains the difference between the two. What I have done to my Internet Explorer is found the Google bar and added it to my 32-bit version so I know which version I&amp;#8217;m sitting under.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face=Verdana size=2&gt; &lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Verdana size=2&gt;Everything is 64-bit. When I say everything&amp;#8230; anything that comes with Windows. Notepad is 64-bit, Windows Explorer is 64-bit, WordPad is 64-bit, and Remote Desktop is 64-bit and so forth but not Windows Media Player. Unfortunately, that is still stuck on 32-bit&amp;#8230; like if that is a &amp;#8220;problem!&amp;#8221; I think these 32-bit processes work faster than on 32-bit operating systems.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face=Verdana size=2&gt; &lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Verdana size=2&gt;To determine if the process is 32-bit or 64-bit, go into the task manager and if any processes have a &amp;#8220;* 32&amp;#8221; next to the image name, is running as 32-bits. Here is a screen shot me running as much 32-bit processes as 64-bit processes.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face=Verdana size=2&gt; &lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Verdana size=2&gt;&lt;img src="/images/dotnet_org_za/justin/1013/o_taskmanager.jpg"/&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face=Verdana size=2&gt; &lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Verdana size=2&gt;As far as device support goes, it is perfect. I only had to install sound drivers. Everything was setup fine, perfect in fact! I found other installations of Windows XP just too daunting as far as drivers for display, sound and SATA are concerned &amp;#8211; even after applying the latest service packs. The only driver that I had to configure and run under 32-bit mode was my sound driver.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face=Verdana size=2&gt; &lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Verdana size=2&gt;Now I&amp;#8217;m busy playing some music through Windows Media Player and realize that there is no ability to have that toolbar on the task tray. Damn! Now that is the second thing I found a bit &amp;#8216;short&amp;#8217; in the 64-bit world. The first thing that I found short was that I forgot that Virtual PC does not work on 64-bit, yet. I only why it can&amp;#8217;t work &amp;#8211; similar to the Internet Explorer problem of running 64-bit with 32-bit and vice versa and since the task tray is 64-bit and Windows Media Player is 32-bit, it cannot run. However, that is a bit contrary since the Office language bar is running there and that is a 32-bit process.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face=Verdana size=2&gt; &lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Verdana size=2&gt;As for the ASP.NET 1.x running on 64-bit windows, I did manage to get it to work eventually. I did tons of reading and I will post a small (I promise!), separate blog post to create documentation on Google that it is possible &amp;#8211; not like what others have claimed it to be. I can&amp;#8217;t believe I did not do any research and completely forgot about this part before jumping on the 64-bit operating system.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face=Verdana size=2&gt; &lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Verdana size=2&gt;The biggest pitch of Windows XP x64 feeling like the Windows 2003 kernel; well&amp;#8230; it is the 2003 kernel! Here is a screenshot which will explain about everything since this picture is worth more than my 1000 words.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face=Verdana size=2&gt; &lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Verdana size=2&gt;&lt;img src="/images/dotnet_org_za/justin/1013/o_IIS6.jpg"/&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face=Verdana size=2&gt; &lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Verdana size=2&gt;Yes ladies and geeks, it is IIS 6 running on Windows XP&amp;#8230; in 64-bit mode. (And yes, I did have some humor naming my machine &amp;#8220;8bitsquared&amp;#8221;). Wow! Now this is a feature and a bit for all ASP.NET developers. Need I say more? Yes (or no, whichever way you feel) &amp;#8211; you can&amp;#8217;t define multiple web sites but I do have a trick up my sleeve on doing otherwise. Another thing I&amp;#8217;ll leave to another time.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face=Verdana size=2&gt; &lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Verdana size=2&gt;And as far as memory management goes&amp;#8230; it is awesome. You can feel that there is substantial difference between the 32-bit and 64-bit model. Back then, I brought this machine at under an $800 price tag &amp;#8211; my first machine so I had to buy everything. I would only imagine that prices have gone down and the only thing that is missing from this machine, I feel, is the hitting of that one gigabyte of RAM. I currently have 512MB and I must say that it is serving me much better in the 64-bit world than what it did in the 32-bit world.&lt;/FONT&gt;&lt;/P&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://dotnet.org.za/justin/archive/2005/05/01/19291.aspx&amp;amp;;subject=I%e2%80%99m+fully+64-bit+Enabled+%e2%80%93+Finally!" target="_blank" title = "Post http://dotnet.org.za/justin/archive/2005/05/01/19291.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://dotnet.org.za/justin/archive/2005/05/01/19291.aspx&amp;amp;;title=I%e2%80%99m+fully+64-bit+Enabled+%e2%80%93+Finally!" target="_blank" title = "Post http://dotnet.org.za/justin/archive/2005/05/01/19291.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://dotnet.org.za/justin/archive/2005/05/01/19291.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://dotnet.org.za/justin/archive/2005/05/01/19291.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://dotnet.org.za/justin/archive/2005/05/01/19291.aspx&amp;amp;title=I%e2%80%99m+fully+64-bit+Enabled+%e2%80%93+Finally!" target="_blank" title = "Post http://dotnet.org.za/justin/archive/2005/05/01/19291.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://dotnet.org.za/justin/archive/2005/05/01/19291.aspx&amp;amp;;title=I%e2%80%99m+fully+64-bit+Enabled+%e2%80%93+Finally!" target="_blank" title = "Post http://dotnet.org.za/justin/archive/2005/05/01/19291.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://dotnet.org.za/justin/archive/2005/05/01/19291.aspx&amp;amp;;title=I%e2%80%99m+fully+64-bit+Enabled+%e2%80%93+Finally!&amp;amp;;top=1" target="_blank" title = "Post http://dotnet.org.za/justin/archive/2005/05/01/19291.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://dotnet.org.za/aggbug.aspx?PostID=19291" width="1" height="1"&gt;</description><category domain="http://dotnet.org.za/justin/archive/tags/64-bit+Computing/default.aspx">64-bit Computing</category></item><item><title>Martin Fowler on about Evolutionary Design</title><link>http://dotnet.org.za/justin/archive/2005/05/01/19289.aspx</link><pubDate>Sun, 01 May 2005 17:23:00 GMT</pubDate><guid isPermaLink="false">2d3a9e08-b70c-4031-ba2b-8f5282a2a59a:19289</guid><dc:creator>justin</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://dotnet.org.za/justin/rsscomments.aspx?PostID=19289</wfw:commentRss><comments>http://dotnet.org.za/justin/archive/2005/05/01/19289.aspx#comments</comments><description>&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;I started googling around to see what links I can put in reference to my &lt;A href="http://dotnet.org.za/justin/archive/2005/05/01/19285.aspx"&gt;previous blog post&lt;/A&gt; about the part of refactoring. And it seems that my perception is somewhat &lt;A href="http://www.martinfowler.com/articles/designDead.html#N101DA"&gt;similar to Martin Fowler&amp;#8217;s&lt;/A&gt;. I quote&amp;#8230;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;I style="mso-bidi-font-style: normal"&gt;&lt;U&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Martin Fowler:&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/U&gt;&lt;/I&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;I style="mso-bidi-font-style: normal"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Part of the justification of YAGNI is that many of these potential needs end up not being needed, or at least not in the way you'd expect. The effort you'll save by not doing any of them is less than the effort required to refactor into the ones you do actually need.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/I&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;And then Martin concludes, in the section I linked to&amp;#8230;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;I style="mso-bidi-font-style: normal"&gt;&lt;U&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Martin Fowler:&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/U&gt;&lt;/I&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;I style="mso-bidi-font-style: normal"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;With any new technique it's natural that its advocates are unsure of its boundary conditions. Most XPers have been told that evolutionary design is impossible for a certain problem, only to discover that it is indeed possible. That conquering of 'impossible' situations leads to a confidence that all such situations can be overcome. Of course you can't make such a generalization, but until the XP community hits the boundaries and fails, we can never be sure where these boundaries lie, and it's right to try and push beyond the potential boundaries that others may see.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/I&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;In fact&amp;#8230; read the entire paper. It is quite interesting.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;And as a side note, this is the first time I&amp;#8217;m referencing Martin&amp;#8217;s work because for the first time, I actually have arrived to a similar methodology to a well known, well respected person, without any input other than my own experience.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://dotnet.org.za/justin/archive/2005/05/01/19289.aspx&amp;amp;;subject=Martin+Fowler+on+about+Evolutionary+Design" target="_blank" title = "Post http://dotnet.org.za/justin/archive/2005/05/01/19289.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://dotnet.org.za/justin/archive/2005/05/01/19289.aspx&amp;amp;;title=Martin+Fowler+on+about+Evolutionary+Design" target="_blank" title = "Post http://dotnet.org.za/justin/archive/2005/05/01/19289.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://dotnet.org.za/justin/archive/2005/05/01/19289.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://dotnet.org.za/justin/archive/2005/05/01/19289.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://dotnet.org.za/justin/archive/2005/05/01/19289.aspx&amp;amp;title=Martin+Fowler+on+about+Evolutionary+Design" target="_blank" title = "Post http://dotnet.org.za/justin/archive/2005/05/01/19289.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://dotnet.org.za/justin/archive/2005/05/01/19289.aspx&amp;amp;;title=Martin+Fowler+on+about+Evolutionary+Design" target="_blank" title = "Post http://dotnet.org.za/justin/archive/2005/05/01/19289.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://dotnet.org.za/justin/archive/2005/05/01/19289.aspx&amp;amp;;title=Martin+Fowler+on+about+Evolutionary+Design&amp;amp;;top=1" target="_blank" title = "Post http://dotnet.org.za/justin/archive/2005/05/01/19289.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://dotnet.org.za/aggbug.aspx?PostID=19289" width="1" height="1"&gt;</description><category domain="http://dotnet.org.za/justin/archive/tags/OOP/default.aspx">OOP</category></item><item><title>Part 3: Interfaces are not worth the classes that they are written on</title><link>http://dotnet.org.za/justin/archive/2005/05/01/19285.aspx</link><pubDate>Sun, 01 May 2005 12:19:00 GMT</pubDate><guid isPermaLink="false">2d3a9e08-b70c-4031-ba2b-8f5282a2a59a:19285</guid><dc:creator>justin</dc:creator><slash:comments>7</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://dotnet.org.za/justin/rsscomments.aspx?PostID=19285</wfw:commentRss><comments>http://dotnet.org.za/justin/archive/2005/05/01/19285.aspx#comments</comments><description>&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;A href="http://dotnet.org.za/scott/"&gt;&lt;FONT face=Verdana size=2&gt;Scott Dukes&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Verdana size=2&gt; has &lt;/FONT&gt;&lt;A href="http://dotnet.org.za/scott/archive/2005/04/29/19205.aspx"&gt;&lt;FONT face=Verdana size=2&gt;blogged a response&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Verdana size=2&gt; to my two (going onto three) blog posts that interfaces are not worth the classes they are written on. In this third one, I will be responding with a practical example (in other words: physical code) and also add a twist to the end of this blog post.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;FONT face=Verdana size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Verdana size=2&gt;I must say that I&amp;#8217;m in agreement with most part of Scott&amp;#8217;s content. Besides some major commentary which I&amp;#8217;ll place in this blog post and the &lt;/FONT&gt;&lt;A href="http://dotnet.org.za/scott/archive/2005/04/29/19205.aspx#19284"&gt;&lt;FONT face=Verdana size=2&gt;minor ones on Scott&amp;#8217;s feedback&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Verdana size=2&gt;, there is only one aspect which I would like enhance the situation a bit &amp;#8211; which will essentially fall upon refactoring technique more than anything.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face=Verdana size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;I style="mso-bidi-font-style: normal"&gt;&lt;U&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;Scott Dukes:&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/U&gt;&lt;/I&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;I style="mso-bidi-font-style: normal"&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;It also pays to look at why we even have interfaces at all; what is the purpose behind them? In a language that supports multiple inheritance (like C++ or Eiffel), interfaces have diminished value. It makes sense to define behavioral contracts using abstract classes which also provide a generic implementation of the behavior. In these languages multiple inheritance allows you to simply plug in functionality to any class that requires it, rather than having to create explicit implementations of an interface&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/I&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face=Verdana size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Verdana size=2&gt;When I first started with OOP, multiple inheritance was like a wet dream. I always dreamt about, fantasized about it but never had it because C# and VB.NET did not allow it. But as my experience grew, I realized that multiple inheritance upon a class because it has the ability to make contracts vague. Let me just bring another quote before progressing on my point&amp;#8230;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face=Verdana size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;I style="mso-bidi-font-style: normal"&gt;&lt;U&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;Scott Dukes:&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/U&gt;&lt;/I&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;I style="mso-bidi-font-style: normal"&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;In languages that only support single inheritance (like C# and Java), or only interface inheritance (like VB6 - yuck!), Interfaces take on a much more important role. Using interfaces together with object composition allows the developer a similar ability to simply plug in functionality, giving some of the flexibility of multiple inheritance, whilst ensuring that the object models are kept (relatively) simple.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/I&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face=Verdana size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Verdana size=2&gt;This &lt;/FONT&gt;&lt;A href="http://dotnet.org.za/scott/archive/2005/04/29/19205.aspx#19241"&gt;&lt;FONT face=Verdana size=2&gt;was commented&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Verdana size=2&gt; upon by &lt;/FONT&gt;&lt;A href="http://dotnet.org.za/peterm"&gt;&lt;FONT face=Verdana size=2&gt;Peter Munnings&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Verdana size=2&gt; of which he stated&amp;#8230;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face=Verdana size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;I style="mso-bidi-font-style: normal"&gt;&lt;U&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;Peter Munnings:&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/U&gt;&lt;/I&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;I style="mso-bidi-font-style: normal"&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;Well explained. I like the nice simple &amp;#8220;is a&amp;#8221; vs. &amp;#8220;behaves as.&amp;#8221; I also like the way you explain that a child class gets everything from the base class whereas an interface normally only describes a part of a class.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/I&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face=Verdana size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Verdana size=2&gt;With VB classic and everything aside, interfaces are the only way for VB classic to define global contracts. So I VB classic is an exception because it is the only mechanism of which VB can go about doing such a thing.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face=Verdana size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Verdana size=2&gt;Some people see the interfaces the same as multiple inheritance. Again, I feel that both of these are bounded by a general rule of mine that interfaces (and the second class it inherits and so forth) should be there to define utility operations or small enhancements over the major contract the class carries. With interfaces and multiple inheritance, the chances of a class carrying two or more major contracts is quite possible.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face=Verdana size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Verdana size=2&gt;At this point, I would have to commend to Scott when he summarized everything by saying that the abstract base class vs. interface approach is OOP technique (and etiquette).&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face=Verdana size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;I style="mso-bidi-font-style: normal"&gt;&lt;U&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;Scott Dukes:&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/U&gt;&lt;/I&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;I style="mso-bidi-font-style: normal"&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;Ultimately it boils down to OOP fundamentals; it's generally a good heuristic (rule of thumb) to keep your class interface as small and cohesive as possible. The biggest risk in using Base Classes comes from the tendency to move unrelated behavior into the base class, as the implementations evolve, resulting in a less cohesive "interface". And what&amp;#8217;s more, it is easy to do. Sure, you run the same risk using interfaces, but it's not nearly as convenient for the developer, so it's much less likely to occur.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/I&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;I style="mso-bidi-font-style: normal"&gt;&lt;o:p&gt;&lt;FONT face=Verdana size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/I&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Verdana size=2&gt;Yes, it is more convenient for the developer as I&amp;#8217;ve also stated in my argument in regards to the evolution of the base class. Maybe, it is too tempting like the serpent selling the apple of knowledge to Eve. However, it comes down to how &amp;#8220;strict&amp;#8221; the developer is on oneself: if the developer just cares about punting code out, he will fall in the above mentioned trap of the base classes. In fact, if he cared so much about just outputting code, he would do the same thing to interfaces. At the end of the day, these people are just cared about how many lines of code they wrote.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face=Verdana size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Verdana size=2&gt;On the other end of scale, you will get well disciplined developers who will not try to shortcut anything and try keeping the design &amp;#8220;right.&amp;#8221; These guys are more concerned how many feature-sets they have outputted and how much of the work they have removed from the road ahead.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face=Verdana size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Verdana size=2&gt;And (the twist starts here&amp;#8230;) in between the two styles of people, you have the general population who always try and design for something much unknown which could happen, even if it has the slightest chance. I will resume this point after my practical example upon Scott&amp;#8217;s example.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face=Verdana size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;I style="mso-bidi-font-style: normal"&gt;&lt;U&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;Scott Dukes:&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/U&gt;&lt;/I&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;I style="mso-bidi-font-style: normal"&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;I said earlier that interfaces provide a common abstraction to handle completely disparate implementations. This enables us to create methods that will handle any implementation, same or different.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/I&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;I style="mso-bidi-font-style: normal"&gt;&lt;o:p&gt;&lt;FONT face=Verdana size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/I&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;I style="mso-bidi-font-style: normal"&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;(Code snipped out)&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/I&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;I style="mso-bidi-font-style: normal"&gt;&lt;o:p&gt;&lt;FONT face=Verdana size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/I&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;I style="mso-bidi-font-style: normal"&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;You could argue that a base class would provide the same flexibility, and you'd be right, for now. The advantage of using an interface comes in the future. Let us suppose that in the previous example we had created a base class called BusinessEntity containing common functionality; we could then have defined the above method as follows.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/I&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;I style="mso-bidi-font-style: normal"&gt;&lt;o:p&gt;&lt;FONT face=Verdana size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/I&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;I style="mso-bidi-font-style: normal"&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;(Code snipped out)&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/I&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;I style="mso-bidi-font-style: normal"&gt;&lt;o:p&gt;&lt;FONT face=Verdana size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/I&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;I style="mso-bidi-font-style: normal"&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;However, what if six months later we have a requirement that Employee needs to support remoting and consequently needs to extend MarshalByRefObject. Now depending on how we've implemented our base class this might be very difficult to do (without affecting the other classes). If we do affect the other classes, by making the change on the base class, there might be repercussions (errors) down the line. Basically it introduces a potentially unknown variable into the equation. By using an interface we can create a completely divergent implementation without affecting any other classes. This is concept is known as the principle of orthogonally.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/I&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face=Verdana size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Verdana size=2&gt;Let&amp;#8217;s enhance the image of example by saying that the system&amp;#8217;s specification dictated that everything was to be &amp;#8220;internal.&amp;#8221; By developing the system, you followed Scott&amp;#8217;s rule of thumb of&amp;#8230;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face=Verdana size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;I style="mso-bidi-font-style: normal"&gt;&lt;U&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;Scott Dukes:&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/U&gt;&lt;/I&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;I style="mso-bidi-font-style: normal"&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;I would say that, as a general rule, if the consumers of your class are internal to your system it is safe to use base classes and refactor to interfaces as your design evolves.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/I&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face=Verdana size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Verdana size=2&gt;Now we have a dead-lock in our arguments. And now we have a contradiction on how the system was designed six months prior and to the rule of thumb.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face=Verdana size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="COLOR: red"&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;[Edit for clarification: It is quite ironic that these two statements contradict each other but I&amp;#8217;m in complete agreement with both of them. It is true one can easily get away with base classes in &amp;#8220;internal systems.&amp;#8221; It is also true that refactoring to interfaces will give the most flexibility; especially, if the future of the software is unknown&amp;#8230; read further about &amp;#8220;volatile future.&amp;#8221;]&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face=Verdana size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Verdana size=2&gt;But I refuse to just void Scott&amp;#8217;s argument because this is &lt;U&gt;precisely&lt;/U&gt; what happens in the real world &lt;SPAN style="COLOR: red"&gt;[Edit: in other words, I do take merit of his argument and I do agree with him. I would like to elaborate why I feel that although these two statements contradict each other at face value, I would like to discuss the evolution process]&lt;/SPAN&gt; &amp;#8211; we may design the system in one context, ship the first version. A little while later, we ship the next minor version&amp;#8230; both of them focused on small implementation guides &amp;#8211; it was a simple &lt;B style="mso-bidi-font-weight: normal"&gt;structural&lt;/B&gt; n-tiered project.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face=Verdana size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Verdana size=2&gt;Here comes along management and they want an application-server because they want a nation-wide system and this will ultimately introduce &lt;B style="mso-bidi-font-weight: normal"&gt;physical&lt;/B&gt; n-tiers. We never catered for this movement in the first place because if we put in the slightest hint of this, we might as well have gone all the way. We would have been fighting the dead-line harder because of more code and more testing. And yet again, management wanted little funding as possible because they weren&amp;#8217;t too sure if the product would take off&amp;#8230; and they weren&amp;#8217;t sure on what features were expected in the next major release because this is a new market. So in essence, they wanted version one to ship out the door as fast as possible for obvious reasons.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face=Verdana size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Verdana size=2&gt;One might have used the hybrid approach that Scott and I spoke about (interfaces and base classes) but that is also heavy maintenance because that is two contracts you have to update if the other changes. So you went abstract base classes all the way. But I protest! Now we have the need to define an interface and since we have reached version one, what are the chances of the contracts changing in future? Going with base classes and then refactoring to a hybrid approach is very possible. Here is the original code, before refactoring.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face=Verdana size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: blue"&gt;Public&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 8pt"&gt; &lt;SPAN style="COLOR: blue"&gt;MustInherit&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;Class&lt;/SPAN&gt; Person&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt"&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;Public&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;MustOverride&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;Property&lt;/SPAN&gt; FirstName() &lt;SPAN style="COLOR: blue"&gt;As&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;String&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt"&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;Public&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;MustOverride&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;Property&lt;/SPAN&gt; LastName() &lt;SPAN style="COLOR: blue"&gt;As&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;String&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: blue"&gt;&lt;o:p&gt;&lt;FONT face=Verdana&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt"&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;Public&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;MustOverride&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;Sub&lt;/SPAN&gt; Animate(&lt;SPAN style="COLOR: blue"&gt;ByVal&lt;/SPAN&gt; animation &lt;SPAN style="COLOR: blue"&gt;As&lt;/SPAN&gt; AnimationType)&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt"&gt;&lt;o:p&gt;&lt;FONT face=Verdana&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt"&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;Protected&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;Sub&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;New&lt;/SPAN&gt;()&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt"&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;MyBase&lt;/SPAN&gt;.New()&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt"&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;End&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;Sub&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: blue"&gt;End&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 8pt"&gt; &lt;SPAN style="COLOR: blue"&gt;Class&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face=Verdana size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Verdana size=2&gt;Now to refactor to the hybrid approach&amp;#8230;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face=Verdana size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: blue"&gt;Public&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 8pt"&gt; &lt;SPAN style="COLOR: blue"&gt;Interface&lt;/SPAN&gt; IPerson&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt"&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;Property&lt;/SPAN&gt; FirstName() &lt;SPAN style="COLOR: blue"&gt;As&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;String&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt"&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;Property&lt;/SPAN&gt; LastName() &lt;SPAN style="COLOR: blue"&gt;As&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;String&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: blue"&gt;&lt;o:p&gt;&lt;FONT face=Verdana&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt"&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;Sub&lt;/SPAN&gt; Animate(&lt;SPAN style="COLOR: blue"&gt;ByVal&lt;/SPAN&gt; animation &lt;SPAN style="COLOR: blue"&gt;As&lt;/SPAN&gt; AnimationType)&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: blue"&gt;End&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 8pt"&gt; &lt;SPAN style="COLOR: blue"&gt;Interface&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: blue"&gt;&lt;o:p&gt;&lt;FONT face=Verdana&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: blue"&gt;Public&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 8pt"&gt; &lt;SPAN style="COLOR: blue"&gt;MustInherit&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;Class&lt;/SPAN&gt; Person&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt"&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;Implements&lt;/SPAN&gt; IPerson&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt"&gt;&lt;o:p&gt;&lt;FONT face=Verdana&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt"&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;Public&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;MustOverride&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;Property&lt;/SPAN&gt; FirstName() &lt;SPAN style="COLOR: blue"&gt;As&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;String&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;Implements&lt;/SPAN&gt; IPerson.FirstName&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt"&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;Public&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;MustOverride&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;Property&lt;/SPAN&gt; LastName() &lt;SPAN style="COLOR: blue"&gt;As&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;String&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;Implements&lt;/SPAN&gt; IPerson.LastName&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt"&gt;&lt;o:p&gt;&lt;FONT face=Verdana&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt"&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;Public&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;MustOverride&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;Sub&lt;/SPAN&gt; Animate(&lt;SPAN style="COLOR: blue"&gt;ByVal&lt;/SPAN&gt; animation &lt;SPAN style="COLOR: blue"&gt;As&lt;/SPAN&gt; AnimationType) &lt;SPAN style="COLOR: blue"&gt;Implements&lt;/SPAN&gt; IPerson.Animate&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt"&gt;&lt;o:p&gt;&lt;FONT face=Verdana&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt"&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;Protected&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;Sub&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;New&lt;/SPAN&gt;()&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt"&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;MyBase&lt;/SPAN&gt;.New()&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt"&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;End&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;Sub&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: blue"&gt;End&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 8pt"&gt; &lt;SPAN style="COLOR: blue"&gt;Class&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face=Verdana size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Verdana size=2&gt;Maybe this is what Scott was trying to say when he said, &amp;#8220;&amp;#8230; refactor to interfaces as your design evolves.&amp;#8221; With the new refactoring, that does not mean you need to go change all other code which references to Person instead of IPerson. &lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face=Verdana size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Verdana size=2&gt;The reason for this is that 90% of the code you have already written to the Person abstract class is in fact, going to be kept internal. For example, a hyper-theoretical command called MakeEmployeeRunCommand (I must admit, a really stupid example&amp;#8230; and name!) is executed from Employee class (which inherits from Person), with the AnimationType enumeration, it can look for the &amp;#8220;Run&amp;#8221; value from the object and call that internal command.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face=Verdana size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Verdana size=2&gt;And in any case of the client code making calls to behavioral classes/structures (command classes for example) from the client side, making the client an &amp;#8220;internal client.&amp;#8221; The chances of this client being deployed at the other side of the physical tier (becoming a &amp;#8220;public client&amp;#8221;) are 50/50; there is still that chance that you might not even have to reference to the interface over the base class. And if you have to reference that interface because of remoting, it does not matter &amp;#8211; you would still have to &amp;#8216;touch&amp;#8217; that code to remote it; making the impact of refactoring to interfaces much softer than it sounds.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face=Verdana size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Verdana size=2&gt;Refactoring is another topic altogether. It is directly related to the subject at hand, but we will save this up for a follow up. However, I mentioned it to make the point that we can have class hierarchy with all of these definitions all we can have one which is the bare minimum yet does the job&amp;#8230; which loops me to the point where I left off about the &amp;#8220;vast majority&amp;#8221; of developers; and the opportunity to add another direction where the discussion may end up to.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face=Verdana size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Verdana size=2&gt;Most of the developers expect anything and everything to be thrown at the system they are designing. Although their system that they are designing is simple and straight-forward, you will find that these guys have the tendency to over complicate something for a very volatile future. Let&amp;#8217;s face it: software has a very volatile future. The software might die&amp;#8230; it might move to new heights&amp;#8230; we never know and the question of &amp;#8220;what if&amp;#8230;&amp;#8221; is always asked.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face=Verdana size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Verdana size=2&gt;In my experience, when a specification is written and given to me, I design the system to best suite that specification and the most logical future that the software will have, if any (I&amp;#8217;ve just finished one project which has been set with: only one version of the application will be released &amp;#8211; a write once, throw away one). &lt;SPAN style="COLOR: red"&gt;[Edit for elaboration: These specifications normally dictate on what functionality is required in the application. I see, where I feel fit, on how to structure on what is &amp;#8220;internal&amp;#8221; and what is &amp;#8220;external&amp;#8221;]. &lt;/SPAN&gt;I do however, practice caution when designing it initially that I don&amp;#8217;t code myself into a &amp;#8220;corner&amp;#8221; too quickly. The &amp;#8220;what if&amp;#8230;&amp;#8221; question(s) exists because the vast majority of the developers feel that they can avoid the corner. The truth of the fact is that you will always code yourself to a corner eventually and the ultimate trick is controlling how fast you travel into that corner. If anyone doesn&amp;#8217;t believe me, allow me to list some examples.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face=Verdana size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;UL style="MARGIN-TOP: 0in" type=disc&gt;
&lt;LI class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-list: l1 level1 lfo1; tab-stops: list .5in"&gt;&lt;FONT face=Verdana size=2&gt;You have coded your application in VB Classic. The tools that you used, you used&amp;#8230; and you have coded yourself into the corner by selecting the programming language five years ago &amp;#8211; if you coded with C++, you could be using .NET tools today.&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-list: l1 level1 lfo1; tab-stops: list .5in"&gt;&lt;FONT face=Verdana size=2&gt;If Microsoft decided today that their Office suite is going to be thin client over the web browser, they cannot do it because the thick client offers more features than the web can offer &amp;#8211; simply due to the fact that the thick client is programmed against Win32 functions.&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-list: l1 level1 lfo1; tab-stops: list .5in"&gt;&lt;FONT face=Verdana size=2&gt;Web services were a big evolution to SOA. Some systems have used it extensively. However, little did they know when they started with web services as their SOA protocol, did they find out Microsoft&amp;#8217;s interest was in Indigo and web services will eventually fall off the face of the Microsoft world. Now they have coded themselves into a corner.&lt;/FONT&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face=Verdana size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Verdana size=2&gt;Read this blog post again. You will then find out that my series&amp;#8217; title of &amp;#8220;&lt;I style="mso-bidi-font-style: normal"&gt;interfaces are not worth the classes they are written on&lt;/I&gt;&amp;#8221; with two different hidden caveats:&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face=Verdana size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;OL style="MARGIN-TOP: 0in" type=1&gt;
&lt;LI class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-list: l0 level1 lfo2; tab-stops: list .5in"&gt;&lt;FONT face=Verdana size=2&gt;Interfaces can easily add overhead to the development time.&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-list: l0 level1 lfo2; tab-stops: list .5in"&gt;&lt;FONT face=Verdana size=2&gt;People, in general, use interfaces and argues that they have not coded themselves into a corner when they don&amp;#8217;t even know the definite future of the software they are writing.&lt;/FONT&gt;&lt;/LI&gt;&lt;/OL&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Verdana size=2&gt;Scott, Peter and anyone who is interested: why not take this to &lt;/FONT&gt;&lt;A href="http://www.theserverside.net/"&gt;&lt;FONT face=Verdana size=2&gt;The Server Side&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Verdana size=2&gt;?&lt;/FONT&gt;&lt;/P&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://dotnet.org.za/justin/archive/2005/05/01/19285.aspx&amp;amp;;subject=Part+3%3a+Interfaces+are+not+worth+the+classes+that+they+are+written+on" target="_blank" title = "Post http://dotnet.org.za/justin/archive/2005/05/01/19285.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://dotnet.org.za/justin/archive/2005/05/01/19285.aspx&amp;amp;;title=Part+3%3a+Interfaces+are+not+worth+the+classes+that+they+are+written+on" target="_blank" title = "Post http://dotnet.org.za/justin/archive/2005/05/01/19285.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://dotnet.org.za/justin/archive/2005/05/01/19285.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://dotnet.org.za/justin/archive/2005/05/01/19285.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://dotnet.org.za/justin/archive/2005/05/01/19285.aspx&amp;amp;title=Part+3%3a+Interfaces+are+not+worth+the+classes+that+they+are+written+on" target="_blank" title = "Post http://dotnet.org.za/justin/archive/2005/05/01/19285.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://dotnet.org.za/justin/archive/2005/05/01/19285.aspx&amp;amp;;title=Part+3%3a+Interfaces+are+not+worth+the+classes+that+they+are+written+on" target="_blank" title = "Post http://dotnet.org.za/justin/archive/2005/05/01/19285.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://dotnet.org.za/justin/archive/2005/05/01/19285.aspx&amp;amp;;title=Part+3%3a+Interfaces+are+not+worth+the+classes+that+they+are+written+on&amp;amp;;top=1" target="_blank" title = "Post http://dotnet.org.za/justin/archive/2005/05/01/19285.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://dotnet.org.za/aggbug.aspx?PostID=19285" width="1" height="1"&gt;</description><category domain="http://dotnet.org.za/justin/archive/tags/OOP/default.aspx">OOP</category></item><item><title>Interfaces not worth the classes they are written on - the application</title><link>http://dotnet.org.za/justin/archive/2005/04/30/19279.aspx</link><pubDate>Sat, 30 Apr 2005 21:22:00 GMT</pubDate><guid isPermaLink="false">2d3a9e08-b70c-4031-ba2b-8f5282a2a59a:19279</guid><dc:creator>justin</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://dotnet.org.za/justin/rsscomments.aspx?PostID=19279</wfw:commentRss><comments>http://dotnet.org.za/justin/archive/2005/04/30/19279.aspx#comments</comments><description>&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Thanks Brian for the comments in my &lt;A href="http://dotnet.org.za/justin/archive/2005/04/25/18872.aspx"&gt;previous post&lt;/A&gt;. I thought of just putting this as yet another comment but thought that maybe it would be more useful to be seen in a more &amp;#8220;public&amp;#8221; RSS feed and also, this is one heck of a long response.&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;I style="mso-bidi-font-style: normal"&gt;&lt;U&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Brian Wilson:&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/U&gt;&lt;/I&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;I style="mso-bidi-font-style: normal"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;You are probably aware of the Sort method for the Array class. It sorts data in a single dimension array. Remember that arrays can be of any type: integers, strings, Animals, BankAccounts, etc. The Sort method does not care about the data type. It accesses the underlying object thru the IComparable interface. Therefore, to make your classes sort-able, you need to implement the IComparable interface. This has nothing to do with inheritance.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/I&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Allow me to crack up the easy parts first. With the example about IComparable, that alone defines an enhancement/utility to the class &amp;#8211; it can compare the current instance to the object that was passed in as the parameter &amp;#8211; even if it is doing quite &amp;#8220;critical stuff&amp;#8221; in the application, like sorting. Agreed?&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;I style="mso-bidi-font-style: normal"&gt;&lt;U&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Brian Wilson:&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/U&gt;&lt;/I&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;I style="mso-bidi-font-style: normal"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;C# does not support multiple inheritance of implementation eg. C++ style multiple inheritance. So you are limited to extending from a single class. Interfaces are much more flexible in that you can implement more than one interface.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/I&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;The thing about multiple inheritances of the base classes &amp;#8211; I actually like the fact that the CLR defines only single inheritance (C#, J#, VB.NET, and so forth) is a single class inheritor because it is a feature, for and in my argument in the previous post, about restricting contracts becoming vague. Interfaces, on the other hand, are allowed to be implemented as multiples upon any given class and if any two or more interfaces contradict each other logically (like IActor and IMusician in my blog post), that is when I declare a class&amp;#8217;s contract &amp;#8220;vague.&amp;#8221; (Follow what I mean?)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;I style="mso-bidi-font-style: normal"&gt;&lt;U&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Brian Wilson:&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/U&gt;&lt;/I&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;I style="mso-bidi-font-style: normal"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Let&amp;#8217;s say you wanted to make a Plug-in architecture to your application where 3rd party developers could develop components for your application to use at runtime. Would you be willing to give them the class or would you rather just tell them about the interface?&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/I&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;About that plug-in architecture&amp;#8230; ha, ha &amp;#8211; you like playing hard ball, do you? Alright, the first thing I&amp;#8217;m going to say that it depends, with a grin to my face.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Seriously, if you are doing a simple user interface plug-in, would your &amp;#8220;featured&amp;#8221; control inherit from a base class (control) and implement the UI part. Alright, that might be a weak example but here is a better one: your plug-in support offers quite a bit of power to the plug-in writer, you then &amp;#8220;propose&amp;#8221; a class that they may extend for the plug-in to declare an installation &amp;#8216;guide.&amp;#8217; (And the default &amp;#8220;installation guide&amp;#8221; does the essential stuff).&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;For example, the plug-in writer may want to add some configuration to the global application or maybe wants to send a license key back to the server&amp;#8230; whatever they want/need during the installation (or &amp;#8216;plugging&amp;#8217;) of the plug-in to the host application. But for these &amp;#8220;feature(s) to be installed,&amp;#8221; why must the plug-in writer inherit from any class, besides what the application host defines? How am I going to restrict their freedom on how they write code in this case? When you answer the questions, especially the later, keep in mind that your code for the mock plug-in will be something like the following:&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: Verdana; mso-no-proof: yes"&gt;Public&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: Verdana; mso-no-proof: yes"&gt; &lt;SPAN style="COLOR: blue"&gt;NotInheritable&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;Class&lt;/SPAN&gt; MyPlugIn&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: Verdana; mso-no-proof: yes"&gt;&lt;SPAN style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;Inherits&lt;/SPAN&gt; PlugInBase&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: Verdana; mso-no-proof: yes"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: Verdana; mso-no-proof: yes"&gt;&lt;SPAN style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;Public&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;Overrides&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;Sub&lt;/SPAN&gt; PreInstallationPrompt(&lt;SPAN style="COLOR: blue"&gt;ByVal&lt;/SPAN&gt; args &lt;SPAN style="COLOR: blue"&gt;As&lt;/SPAN&gt; PreInstallationArgs)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: Verdana; mso-no-proof: yes"&gt;&lt;SPAN style="mso-tab-count: 2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: gray"&gt;' pop up an UI - accessible via MyBase.UserInterface&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: Verdana; mso-no-proof: yes"&gt;&lt;SPAN style="mso-tab-count: 2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: gray"&gt;' for the web site installation and the windows forms type of installation&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: gray; FONT-FAMILY: Verdana; mso-no-proof: yes"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: Verdana; mso-no-proof: yes"&gt;&lt;SPAN style="mso-tab-count: 2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: gray"&gt;' gets the first name, last name, company and license key from the UI&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: gray; FONT-FAMILY: Verdana; mso-no-proof: yes"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: Verdana; mso-no-proof: yes"&gt;&lt;SPAN style="mso-tab-count: 2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: gray"&gt;' sends a request to the remote server to validate details and other things&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: Verdana; mso-no-proof: yes"&gt;&lt;SPAN style="mso-tab-count: 2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: gray"&gt;' such as providing an activation type of license.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: Verdana; mso-no-proof: yes"&gt;&lt;SPAN style="mso-tab-count: 2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: gray"&gt;' often, this is a command type of call to another class - only responsible for the communication process&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: gray; FONT-FAMILY: Verdana; mso-no-proof: yes"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: Verdana; mso-no-proof: yes"&gt;&lt;SPAN style="mso-tab-count: 2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;If&lt;/SPAN&gt; isSuccess &lt;SPAN style="COLOR: blue"&gt;Then&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: Verdana; mso-no-proof: yes"&gt;&lt;SPAN style="mso-tab-count: 3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: gray"&gt;' default behaviour moves the installation "forward"&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: Verdana; mso-no-proof: yes"&gt;&lt;SPAN style="mso-tab-count: 3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;MyBase&lt;/SPAN&gt;.PreInstallationPrompt()&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: Verdana; mso-no-proof: yes"&gt;&lt;SPAN style="mso-tab-count: 2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;Else&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: Verdana; mso-no-proof: yes"&gt;&lt;SPAN style="mso-tab-count: 3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: gray"&gt;' redo some UI to display what went wrong.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: Verdana; mso-no-proof: yes"&gt;&lt;SPAN style="mso-tab-count: 2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;End&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;If&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: Verdana; mso-no-proof: yes"&gt;&lt;SPAN style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;End&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;Sub&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: Verdana; mso-no-proof: yes"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: Verdana; mso-no-proof: yes"&gt;&lt;SPAN style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;Public&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;Sub&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;New&lt;/SPAN&gt;(&lt;SPAN style="COLOR: blue"&gt;ByVal&lt;/SPAN&gt; form &lt;SPAN style="COLOR: blue"&gt;As&lt;/SPAN&gt; InstallationForm)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: Verdana; mso-no-proof: yes"&gt;&lt;SPAN style="mso-tab-count: 2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;MyBase&lt;/SPAN&gt;.New(form)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-