<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comments for Tom Dalling</title>
	<atom:link href="http://www.tomdalling.com/blog/comments/feed" rel="self" type="application/rss+xml" />
	<link>http://www.tomdalling.com/blog</link>
	<description>Thoughts of a software developer</description>
	<lastBuildDate>Tue, 08 May 2012 09:24:00 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
	<item>
		<title>Comment on SOLID Class Design: The Liskov Substitution Principle by Tom Dalling</title>
		<link>http://www.tomdalling.com/blog/software-design/solid-class-design-the-liskov-substitution-principle/comment-page-1#comment-1437</link>
		<dc:creator>Tom Dalling</dc:creator>
		<pubDate>Tue, 08 May 2012 09:24:00 +0000</pubDate>
		<guid isPermaLink="false">http://www.tomdalling.com/?p=267#comment-1437</guid>
		<description>I guess it doesn&#039;t technically violate LSP. However, because there is no difference between flying and non-flying birds in your code, you can remove INotFlyingBird and IFlyingBird. Just inherit straight from IBird. Although, if you&#039;re only subclassing to provide a new value for IBird::MovingDistance, you might as well have a single class called &quot;Bird&quot; with a setMovingDistance method on it.</description>
		<content:encoded><![CDATA[<p>I guess it doesn&#8217;t technically violate LSP. However, because there is no difference between flying and non-flying birds in your code, you can remove INotFlyingBird and IFlyingBird. Just inherit straight from IBird. Although, if you&#8217;re only subclassing to provide a new value for IBird::MovingDistance, you might as well have a single class called &#8220;Bird&#8221; with a setMovingDistance method on it.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Model View Controller Explained by Dane Calderon</title>
		<link>http://www.tomdalling.com/blog/software-design/model-view-controller-explained/comment-page-1#comment-1433</link>
		<dc:creator>Dane Calderon</dc:creator>
		<pubDate>Wed, 02 May 2012 11:54:00 +0000</pubDate>
		<guid isPermaLink="false">http://www.tomdalling.com/?p=3#comment-1433</guid>
		<description>Great article, Tom!  Thanks for dumbing this down for &#039;the rest of us&#039; and understanding that not all of us have a masters in computer science!

I&#039;ve just made the jump into MVC with CI, and wow!  It seems so crazy 
complicated until you wrap your head around it, and then it is crazy 
simple.  I&#039;m loving this framework.  What you really have to do to get 
this is to really look at the classes in the model and controller 
folders (YouTube has some great tutorials as well for those of us who 
are too lazy to read, and oh by the way, if you didn&#039;t &#039;get&#039; OOP before, learning the MVC basics will completely clarify that for you!).  Between this framework and the javascript libraries, I&#039;m looking like a pro!  This is probably the most dramatic improvement I&#039;ve experienced in my programming in the span of 2 or 3 days.</description>
		<content:encoded><![CDATA[<p>Great article, Tom!  Thanks for dumbing this down for &#8216;the rest of us&#8217; and understanding that not all of us have a masters in computer science!</p>
<p>I&#8217;ve just made the jump into MVC with CI, and wow!  It seems so crazy<br />
complicated until you wrap your head around it, and then it is crazy<br />
simple.  I&#8217;m loving this framework.  What you really have to do to get<br />
this is to really look at the classes in the model and controller<br />
folders (YouTube has some great tutorials as well for those of us who<br />
are too lazy to read, and oh by the way, if you didn&#8217;t &#8216;get&#8217; OOP before, learning the MVC basics will completely clarify that for you!).  Between this framework and the javascript libraries, I&#8217;m looking like a pro!  This is probably the most dramatic improvement I&#8217;ve experienced in my programming in the span of 2 or 3 days.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on SOLID Class Design: The Liskov Substitution Principle by Efim Zabarsky</title>
		<link>http://www.tomdalling.com/blog/software-design/solid-class-design-the-liskov-substitution-principle/comment-page-1#comment-1431</link>
		<dc:creator>Efim Zabarsky</dc:creator>
		<pubDate>Tue, 01 May 2012 08:52:00 +0000</pubDate>
		<guid isPermaLink="false">http://www.tomdalling.com/?p=267#comment-1431</guid>
		<description>Great article, thanks!

My question, can i do next inheritance, that, in my opinion, not violates LSP?

public interface IBird    
{        
int MovingDistance();    
}    

public abstract class IFlyingBird : IBird    
{       
public abstract int FlyingDistance();        
public int MovingDistance()       
{
            return FlyingDistance();
}    
}    

public abstract class INotFlyingBird : IBird    
{        
public abstract int SteppingDistance();  
public int MovingDistance()        
{            
return SteppingDistance();     
}    
}    

public class KingFisher : IFlyingBird    
{        
public override int FlyingDistance()        
{            
return 600;        
}    
}    

public class Ostrich : INotFlyingBird    
{        
public override int SteppingDistance()        
{            
return 123;        
}    
}

using:
static void Main(string[] args)        
{           
 IBird[] birds = new IBird[2];            
birds[0] = new KingFisher();            
birds[1] = new Ostrich();            
DoFlyBirds(birds);        
}        

private static void DoFlyBirds(IBird[] birds)        
{            
foreach (IBird b in birds)            
{                
Console.WriteLine(&quot;Bird {0} can overcome {1} kilometers&quot;, b.GetType().Name,  b.MovingDistance());            
}        
}

Thanks</description>
		<content:encoded><![CDATA[<p>Great article, thanks!</p>
<p>My question, can i do next inheritance, that, in my opinion, not violates LSP?</p>
<p>public interface IBird   <br />
{       <br />
int MovingDistance();   <br />
}    </p>
<p>public abstract class IFlyingBird : IBird   <br />
{       <br />
public abstract int FlyingDistance();       <br />
public int MovingDistance()       <br />
{<br />
            return FlyingDistance();<br />
}   <br />
}    </p>
<p>public abstract class INotFlyingBird : IBird   <br />
{       <br />
public abstract int SteppingDistance(); <br />
public int MovingDistance()       <br />
{           <br />
return SteppingDistance();     <br />
}   <br />
}    </p>
<p>public class KingFisher : IFlyingBird   <br />
{       <br />
public override int FlyingDistance()       <br />
{           <br />
return 600;       <br />
}   <br />
}    </p>
<p>public class Ostrich : INotFlyingBird   <br />
{       <br />
public override int SteppingDistance()       <br />
{           <br />
return 123;       <br />
}   <br />
}</p>
<p>using:<br />
static void Main(string[] args)       <br />
{           <br />
 IBird[] birds = new IBird[2];           <br />
birds[0] = new KingFisher();           <br />
birds[1] = new Ostrich();           <br />
DoFlyBirds(birds);       <br />
}        </p>
<p>private static void DoFlyBirds(IBird[] birds)       <br />
{           <br />
foreach (IBird b in birds)           <br />
{               <br />
Console.WriteLine(&#8220;Bird {0} can overcome {1} kilometers&#8221;, b.GetType().Name,  b.MovingDistance());           <br />
}       <br />
}</p>
<p>Thanks</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on How Cocoa Bindings Work (via KVC and KVO) by Purnachandra Obulasetty</title>
		<link>http://www.tomdalling.com/blog/cocoa/how-cocoa-bindings-work-via-kvc-and-kvo/comment-page-1#comment-1412</link>
		<dc:creator>Purnachandra Obulasetty</dc:creator>
		<pubDate>Mon, 16 Apr 2012 14:00:00 +0000</pubDate>
		<guid isPermaLink="false">http://www.tomdalling.com/blog/?p=490#comment-1412</guid>
		<description>Got some basic understanding about KVO and KVC. Really helpful.</description>
		<content:encoded><![CDATA[<p>Got some basic understanding about KVO and KVC. Really helpful.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on How To Set Up A Secure Git Server At Home (OSX) by Tom Dalling</title>
		<link>http://www.tomdalling.com/blog/software-processes/how-to-set-up-a-secure-git-server-at-home-osx/comment-page-1#comment-1399</link>
		<dc:creator>Tom Dalling</dc:creator>
		<pubDate>Sun, 08 Apr 2012 05:08:00 +0000</pubDate>
		<guid isPermaLink="false">http://www.tomdalling.com/blog/?p=525#comment-1399</guid>
		<description>Yes, it just has to be in a different directory, and the remote url is different when you clone it. For example, if you wanted a working clone in &quot;/Users/mindwalker/projects/my_repo&quot; you&#039;d do:

cd /Users/mindwalker/projects
git clone /Users/git/my_repo.gitOr maybe, if the mindwalker user is set up like the other client machines:git clone ssh://git@localhost/Users/git/my_repo.git</description>
		<content:encoded><![CDATA[<p>Yes, it just has to be in a different directory, and the remote url is different when you clone it. For example, if you wanted a working clone in &#8220;/Users/mindwalker/projects/my_repo&#8221; you&#8217;d do:</p>
<p>cd /Users/mindwalker/projects<br />
git clone /Users/git/my_repo.gitOr maybe, if the mindwalker user is set up like the other client machines:git clone ssh://git@localhost/Users/git/my_repo.git</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on How To Set Up A Secure Git Server At Home (OSX) by Mindwalker</title>
		<link>http://www.tomdalling.com/blog/software-processes/how-to-set-up-a-secure-git-server-at-home-osx/comment-page-1#comment-1398</link>
		<dc:creator>Mindwalker</dc:creator>
		<pubDate>Sun, 08 Apr 2012 02:11:00 +0000</pubDate>
		<guid isPermaLink="false">http://www.tomdalling.com/blog/?p=525#comment-1398</guid>
		<description>Assuming one has set this up using the steps described, how would one go about working with a repository on the actual server itself? Is there a way on the server to pull down a copy from that as if using a remote client, such that the master branch would never be checked out on the server?</description>
		<content:encoded><![CDATA[<p>Assuming one has set this up using the steps described, how would one go about working with a repository on the actual server itself? Is there a way on the server to pull down a copy from that as if using a remote client, such that the master branch would never be checked out on the server?</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Model View Controller Explained by CodeMonkey</title>
		<link>http://www.tomdalling.com/blog/software-design/model-view-controller-explained/comment-page-1#comment-1395</link>
		<dc:creator>CodeMonkey</dc:creator>
		<pubDate>Thu, 05 Apr 2012 13:28:00 +0000</pubDate>
		<guid isPermaLink="false">http://www.tomdalling.com/?p=3#comment-1395</guid>
		<description>Not to be nit picky but in example 4 couldn&#039;t you pass in the type and have a single line per var with an overloaded function for the new gui? </description>
		<content:encoded><![CDATA[<p>Not to be nit picky but in example 4 couldn&#8217;t you pass in the type and have a single line per var with an overloaded function for the new gui?</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on When A Café Is Not A Café – A Short Lesson In Unicode Featuring NSString by Eva</title>
		<link>http://www.tomdalling.com/blog/coding-tips/when-a-cafe-is-not-a-cafe-a-short-lesson-in-unicode-featuring-nsstring/comment-page-1#comment-1392</link>
		<dc:creator>Eva</dc:creator>
		<pubDate>Mon, 02 Apr 2012 12:29:00 +0000</pubDate>
		<guid isPermaLink="false">http://www.tomdalling.com/blog/?p=576#comment-1392</guid>
		<description>Thank you! Very instructive :)</description>
		<content:encoded><![CDATA[<p>Thank you! Very instructive <img src='http://www.tomdalling.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Coding Tip: Have A Single Exit Point by The Three Underscores Idiom &#124; Yonat Sharon</title>
		<link>http://www.tomdalling.com/blog/coding-tips/coding-tip-have-a-single-exit-point/comment-page-1#comment-1360</link>
		<dc:creator>The Three Underscores Idiom &#124; Yonat Sharon</dc:creator>
		<pubDate>Sat, 17 Mar 2012 07:29:49 +0000</pubDate>
		<guid isPermaLink="false">http://www.tomdalling.com/?p=75#comment-1360</guid>
		<description>[...] some of you are wondering why bother with foundMatch; you need to go read Tom Dalling&#8217;s Coding Tip explaining the problems with multiple exit points. Others shudder to see a return statement in the middle of the function; you should remember that [...]</description>
		<content:encoded><![CDATA[<p>[...] some of you are wondering why bother with foundMatch; you need to go read Tom Dalling&#8217;s Coding Tip explaining the problems with multiple exit points. Others shudder to see a return statement in the middle of the function; you should remember that [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Gotchas With Grand Central Dispatch (libdispatch) And Blocks by Jkh</title>
		<link>http://www.tomdalling.com/blog/cocoa/gotchas-with-grand-central-dispatch-libdispatch-and-blocks/comment-page-1#comment-1347</link>
		<dc:creator>Jkh</dc:creator>
		<pubDate>Wed, 14 Mar 2012 02:38:00 +0000</pubDate>
		<guid isPermaLink="false">http://www.tomdalling.com/blog/?p=563#comment-1347</guid>
		<description>Another point I think you should have made was that doing anything synchronously kind of defeats the spirit and the design of GCD.  Why dispatch_sync() to the main queue when, 9 times out of 10 (and I&#039;ve yet to see the 10th) you can do it async?  Why use barrier blocks at all when there are other design patterns which avoid these sorts of deadlocks, such as group completion callbacks and/or completion callbacks with careful association of queues to resources?  As the GCD docs point out, creating queues is cheap, and if you factor your code appropriately you need never run into any of the issues you point out.</description>
		<content:encoded><![CDATA[<p>Another point I think you should have made was that doing anything synchronously kind of defeats the spirit and the design of GCD.  Why dispatch_sync() to the main queue when, 9 times out of 10 (and I&#8217;ve yet to see the 10th) you can do it async?  Why use barrier blocks at all when there are other design patterns which avoid these sorts of deadlocks, such as group completion callbacks and/or completion callbacks with careful association of queues to resources?  As the GCD docs point out, creating queues is cheap, and if you factor your code appropriately you need never run into any of the issues you point out.</p>
]]></content:encoded>
	</item>
</channel>
</rss>

