<?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 BlueRope</title>
	<atom:link href="http://bluerope.org/?feed=comments-rss2" rel="self" type="application/rss+xml" />
	<link>http://bluerope.org</link>
	<description></description>
	<lastBuildDate>Wed, 31 Mar 2010 08:48:05 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>Comment on CodeIgniter for Webapps by Pete Otaqui</title>
		<link>http://bluerope.org/?p=84&#038;cpage=1#comment-174</link>
		<dc:creator>Pete Otaqui</dc:creator>
		<pubDate>Wed, 31 Mar 2010 08:48:05 +0000</pubDate>
		<guid isPermaLink="false">http://bluerope.org/?p=84#comment-174</guid>
		<description>&lt;p&gt;You might want to check out CakePHP as an alternative to Code Ignitor.  It also borrowed very heavily from Rails.&lt;/p&gt;

&lt;p&gt;It has a lot of the benefits of CI, while missing some of the downsides.  You get a nice set of command-line tools (and the framework to write your own shells and tasks) for interacting with your app, &quot;baking&quot; various things like stub models / controllers / views, and dealing with schemas.&lt;/p&gt;

&lt;p&gt;You also get model relationships which can also be bound and unbound on the fly, your result sets can be &quot;containers&quot; for other things (so you specify exactly what you want back from the relationships).&lt;/p&gt;

&lt;p&gt;It&#039;s also pretty easy to create your own data sources, this ecample from the docs shows you a method for using Twitter data for your model:&lt;/p&gt;

&lt;p&gt;http://book.cakephp.org/view/849/An-Example&lt;/p&gt;

&lt;p&gt;http://cakephp.org/&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>You might want to check out CakePHP as an alternative to Code Ignitor.  It also borrowed very heavily from Rails.</p>

<p>It has a lot of the benefits of CI, while missing some of the downsides.  You get a nice set of command-line tools (and the framework to write your own shells and tasks) for interacting with your app, &#8220;baking&#8221; various things like stub models / controllers / views, and dealing with schemas.</p>

<p>You also get model relationships which can also be bound and unbound on the fly, your result sets can be &#8220;containers&#8221; for other things (so you specify exactly what you want back from the relationships).</p>

<p>It&#8217;s also pretty easy to create your own data sources, this ecample from the docs shows you a method for using Twitter data for your model:</p>

<p><a href="http://book.cakephp.org/view/849/An-Example" rel="nofollow">http://book.cakephp.org/view/849/An-Example</a></p>

<p><a href="http://cakephp.org/" rel="nofollow">http://cakephp.org/</a></p>]]></content:encoded>
	</item>
	<item>
		<title>Comment on CodeIgniter for Webapps by AceF</title>
		<link>http://bluerope.org/?p=84&#038;cpage=1#comment-171</link>
		<dc:creator>AceF</dc:creator>
		<pubDate>Tue, 30 Mar 2010 15:40:26 +0000</pubDate>
		<guid isPermaLink="false">http://bluerope.org/?p=84#comment-171</guid>
		<description>&lt;p&gt;I actually like that it has a weak model. While Symfony and Cake have stricter rules for naming your tables and fields, CI relaxes that restriction which makes it easier to retrofit onto old, pre-framework dbs. It&#039;s more work, but it&#039;s worth it when you have a great degree of control.&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>I actually like that it has a weak model. While Symfony and Cake have stricter rules for naming your tables and fields, CI relaxes that restriction which makes it easier to retrofit onto old, pre-framework dbs. It&#8217;s more work, but it&#8217;s worth it when you have a great degree of control.</p>]]></content:encoded>
	</item>
	<item>
		<title>Comment on CodeIgniter for Webapps by Ricardo</title>
		<link>http://bluerope.org/?p=84&#038;cpage=1#comment-170</link>
		<dc:creator>Ricardo</dc:creator>
		<pubDate>Tue, 30 Mar 2010 12:20:09 +0000</pubDate>
		<guid isPermaLink="false">http://bluerope.org/?p=84#comment-170</guid>
		<description>&lt;p&gt;I use CodeIgiter too, it&#039;s easy to install, easy to use and easy to grasp.
At this link:
http://codeigniter.com/forums/viewreply/655555/
the guy explain how he worked out a way to use the query string and the urls paths together. I hope it can help you.&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>I use CodeIgiter too, it&#8217;s easy to install, easy to use and easy to grasp.
At this link:
<a href="http://codeigniter.com/forums/viewreply/655555/" rel="nofollow">http://codeigniter.com/forums/viewreply/655555/</a>
the guy explain how he worked out a way to use the query string and the urls paths together. I hope it can help you.</p>]]></content:encoded>
	</item>
	<item>
		<title>Comment on Adventures with NSCollectionView by Benedict</title>
		<link>http://bluerope.org/?p=59&#038;cpage=1#comment-90</link>
		<dc:creator>Benedict</dc:creator>
		<pubDate>Wed, 03 Feb 2010 19:02:25 +0000</pubDate>
		<guid isPermaLink="false">http://bluerope.org/?p=59#comment-90</guid>
		<description>&lt;p&gt;A while I ago I had some troubles with NSCollectionView too. I wrote a blog post about it: http://benedictcohen.co.uk/files/5b81e3c40cee2daf88ceffe6eb556a63-3.php&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>A while I ago I had some troubles with NSCollectionView too. I wrote a blog post about it: <a href="http://benedictcohen.co.uk/files/5b81e3c40cee2daf88ceffe6eb556a63-3.php" rel="nofollow">http://benedictcohen.co.uk/files/5b81e3c40cee2daf88ceffe6eb556a63-3.php</a></p>]]></content:encoded>
	</item>
	<item>
		<title>Comment on Enumerations in Objective-C part 2 by Allan Bazinet</title>
		<link>http://bluerope.org/?p=45&#038;cpage=1#comment-85</link>
		<dc:creator>Allan Bazinet</dc:creator>
		<pubDate>Wed, 03 Feb 2010 08:59:56 +0000</pubDate>
		<guid isPermaLink="false">http://bluerope.org/?p=45#comment-85</guid>
		<description>&lt;p&gt;For your consideration, a possible alternate approach to your threadsafe instantiation on demand quest.&lt;/p&gt;

&lt;p&gt;// Optimal method, undeclared in interface.  First thread through the
// method below will swap the implementation of the below method with
// that of this one, so we take the expensive path only once.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;(BRUnits *)centimetersInstance
{
return _BRUnits_centimeters;
}&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;// Clients will always call this method.  During execution by the first
// thread to land here, swap in the implementation of the method above.
// Normally one would handle this instantiation in an initialize method,
// but when a category like this one has an initialize, any initialize
// method present in the categorized class won&#039;t get run, and we also
// have no access to it.  That is, in general, really weird and thus
// to be avoided.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;(BRUnits *)centimeters
{
@synchronized(self)
{
    if (_BRUnits_centimeters == nil)
    {
        _BRUnits_centimeters = [[[BRUnits_centimeters class] alloc] initWithName:@&quot;centimeters&quot;];&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;    OSMemoryBarrier();

    Method m1 = class_getClassMethod([BRUnits class],
                                     @selector(centimeters));
    Method m2 = class_getClassMethod([BRUnits class],
                                     @selector(centimetersInstance));

    method_setImplementation(m1, method_getImplementation(m2));
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;}&lt;/p&gt;

&lt;p&gt;return _BRUnits_centimeters;
}&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
		<content:encoded><![CDATA[<p>For your consideration, a possible alternate approach to your threadsafe instantiation on demand quest.</p>

<p>// Optimal method, undeclared in interface.  First thread through the
// method below will swap the implementation of the below method with
// that of this one, so we take the expensive path only once.</p>

<ul>
<li>(BRUnits *)centimetersInstance
{
return _BRUnits_centimeters;
}</li>
</ul>

<p>// Clients will always call this method.  During execution by the first
// thread to land here, swap in the implementation of the method above.
// Normally one would handle this instantiation in an initialize method,
// but when a category like this one has an initialize, any initialize
// method present in the categorized class won&#8217;t get run, and we also
// have no access to it.  That is, in general, really weird and thus
// to be avoided.</p>

<ul>
<li><p>(BRUnits *)centimeters
{
@synchronized(self)
{
    if (_BRUnits_centimeters == nil)
    {
        _BRUnits_centimeters = [[[BRUnits_centimeters class] alloc] initWithName:@&#8221;centimeters&#8221;];</p>

<pre><code>    OSMemoryBarrier();

    Method m1 = class_getClassMethod([BRUnits class],
                                     @selector(centimeters));
    Method m2 = class_getClassMethod([BRUnits class],
                                     @selector(centimetersInstance));

    method_setImplementation(m1, method_getImplementation(m2));
}
</code></pre>

<p>}</p>

<p>return _BRUnits_centimeters;
}</p></li>
</ul>]]></content:encoded>
	</item>
	<item>
		<title>Comment on Organizing Shared Code by Neil</title>
		<link>http://bluerope.org/?p=55&#038;cpage=1#comment-47</link>
		<dc:creator>Neil</dc:creator>
		<pubDate>Sun, 24 Jan 2010 14:21:41 +0000</pubDate>
		<guid isPermaLink="false">http://bluerope.org/?p=55#comment-47</guid>
		<description>&lt;p&gt;The clutter doesn&#039;t bother me.  It also leaves me with the option of changing code in the submodule (along with the tests) if I want to and either pushing it back or not.  I&#039;m not sure of a solution if the clutter did bother me.&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>The clutter doesn&#8217;t bother me.  It also leaves me with the option of changing code in the submodule (along with the tests) if I want to and either pushing it back or not.  I&#8217;m not sure of a solution if the clutter did bother me.</p>]]></content:encoded>
	</item>
	<item>
		<title>Comment on Organizing Shared Code by Vincent Driessen</title>
		<link>http://bluerope.org/?p=55&#038;cpage=1#comment-44</link>
		<dc:creator>Vincent Driessen</dc:creator>
		<pubDate>Sun, 24 Jan 2010 09:15:23 +0000</pubDate>
		<guid isPermaLink="false">http://bluerope.org/?p=55#comment-44</guid>
		<description>&lt;p&gt;You mentioned you include your class tests inside the submodule repo. This will automatically lead to those test files ending up in a subdirectory of your superproject&#039;s repo. Do you have a way of dealing with that clutter, or don&#039;t you mind?&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>You mentioned you include your class tests inside the submodule repo. This will automatically lead to those test files ending up in a subdirectory of your superproject&#8217;s repo. Do you have a way of dealing with that clutter, or don&#8217;t you mind?</p>]]></content:encoded>
	</item>
	<item>
		<title>Comment on Modules in Objective-C by Neil</title>
		<link>http://bluerope.org/?p=52&#038;cpage=1#comment-21</link>
		<dc:creator>Neil</dc:creator>
		<pubDate>Fri, 15 Jan 2010 17:41:50 +0000</pubDate>
		<guid isPermaLink="false">http://bluerope.org/?p=52#comment-21</guid>
		<description>&lt;p&gt;Thanks, that&#039;s all great information.  I doubt I&#039;d ever attempt to access ivars in anything but the class itself, but I wasn&#039;t aware that properties would have the same issues.  Perhaps my understanding of properties is incorrect, but I always assumed it&#039;s just syntactic sugar covering standard methods, and not potentially direct access to an ivar.&lt;/p&gt;

&lt;p&gt;The point about sending messages to super is important.  Although it makes perfect sense, I doubt I&#039;d have thought about it before blindly sending a message and then being confused by the results.  I guess I&#039;ve never needed to call super from an extension method before.&lt;/p&gt;

&lt;p&gt;In general, I&#039;m using this kind of technique to extend my own classes so I&#039;m probably safe from the ivar issues.  But it&#039;s definitely great to know all the places you might get into trouble.&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>Thanks, that&#8217;s all great information.  I doubt I&#8217;d ever attempt to access ivars in anything but the class itself, but I wasn&#8217;t aware that properties would have the same issues.  Perhaps my understanding of properties is incorrect, but I always assumed it&#8217;s just syntactic sugar covering standard methods, and not potentially direct access to an ivar.</p>

<p>The point about sending messages to super is important.  Although it makes perfect sense, I doubt I&#8217;d have thought about it before blindly sending a message and then being confused by the results.  I guess I&#8217;ve never needed to call super from an extension method before.</p>

<p>In general, I&#8217;m using this kind of technique to extend my own classes so I&#8217;m probably safe from the ivar issues.  But it&#8217;s definitely great to know all the places you might get into trouble.</p>]]></content:encoded>
	</item>
	<item>
		<title>Comment on Modules in Objective-C by Scott</title>
		<link>http://bluerope.org/?p=52&#038;cpage=1#comment-20</link>
		<dc:creator>Scott</dc:creator>
		<pubDate>Fri, 15 Jan 2010 16:40:58 +0000</pubDate>
		<guid isPermaLink="false">http://bluerope.org/?p=52#comment-20</guid>
		<description>&lt;p&gt;whoops -- that &lt;strong&gt;VA_ARGS&lt;/strong&gt; should be
_ &lt;em&gt;VA_ARGS&lt;/em&gt; _  without the spaces (silly mark up doesn&#039;t let double underscore be)&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>whoops &#8212; that <strong>VA_ARGS</strong> should be
_ <em>VA_ARGS</em> _  without the spaces (silly mark up doesn&#8217;t let double underscore be)</p>]]></content:encoded>
	</item>
	<item>
		<title>Comment on Modules in Objective-C by Scott</title>
		<link>http://bluerope.org/?p=52&#038;cpage=1#comment-19</link>
		<dc:creator>Scott</dc:creator>
		<pubDate>Fri, 15 Jan 2010 16:39:27 +0000</pubDate>
		<guid isPermaLink="false">http://bluerope.org/?p=52#comment-19</guid>
		<description>&lt;p&gt;finishing off.&lt;/p&gt;

&lt;p&gt;but -- ivars are the major one and will cause all sorts of head aches if one is not careful.&lt;/p&gt;

&lt;p&gt;For super,  I define a macro&lt;/p&gt;

&lt;p&gt;define SUPER(...)  objc_msgSendSuper(&amp;(struct objc_super){self, class_getSuperclass([self class])},_cmd, ##&lt;strong&gt;VA_ARGS&lt;/strong&gt;)&lt;/p&gt;

&lt;p&gt;that will automatically look up the super of the class at runtime and call the appropriate method&lt;/p&gt;

&lt;p&gt;rather than 
-(void) doThis: (id)param1 andThat:(id)param2{
   //used to be [super doThis: param1 andThat: param2];
  // now
  SUPER(param1,param2);
}&lt;/p&gt;

&lt;p&gt;Only issue with this is on a dealloc -- compiler will complain if you have your dealloc method doesn&#039;t have a [super delloc] -- trick is to do both with a return statement after the SUPER() call.&lt;/p&gt;

&lt;p&gt;-(void)dealloc{
   SUPER();
   return;
   [super dealloc];
}&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>finishing off.</p>

<p>but &#8212; ivars are the major one and will cause all sorts of head aches if one is not careful.</p>

<p>For super,  I define a macro</p>

<p>define SUPER(&#8230;)  objc_msgSendSuper(&amp;(struct objc_super){self, class_getSuperclass([self class])},_cmd, ##<strong>VA_ARGS</strong>)</p>

<p>that will automatically look up the super of the class at runtime and call the appropriate method</p>

<p>rather than 
-(void) doThis: (id)param1 andThat:(id)param2{
   //used to be [super doThis: param1 andThat: param2];
  // now
  SUPER(param1,param2);
}</p>

<p>Only issue with this is on a dealloc &#8212; compiler will complain if you have your dealloc method doesn&#8217;t have a [super delloc] &#8212; trick is to do both with a return statement after the SUPER() call.</p>

<p>-(void)dealloc{
   SUPER();
   return;
   [super dealloc];
}</p>]]></content:encoded>
	</item>
</channel>
</rss>
