<?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 on: Hacking someone&#8217;s gem with github and gemcutter</title>
	<atom:link href="http://drnicwilliams.com/2009/11/04/hacking-someones-gem-with-github-and-gemcutter/feed/" rel="self" type="application/rss+xml" />
	<link>http://drnicwilliams.com/2009/11/04/hacking-someones-gem-with-github-and-gemcutter/</link>
	<description>Ruby makes Rails, Javascript makes Ajax, Dr Nic makes Magic</description>
	<lastBuildDate>Thu, 18 Mar 2010 05:52:01 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: Brian Armstrong</title>
		<link>http://drnicwilliams.com/2009/11/04/hacking-someones-gem-with-github-and-gemcutter/comment-page-1/#comment-193788</link>
		<dc:creator>Brian Armstrong</dc:creator>
		<pubDate>Wed, 20 Jan 2010 01:17:36 +0000</pubDate>
		<guid isPermaLink="false">http://drnicwilliams.com/?p=635#comment-193788</guid>
		<description>Thanks this helped!</description>
		<content:encoded><![CDATA[<p>Thanks this helped!</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Ennuyer.net &#187; Blog Archive &#187; Rails Reading - November 15, 2009</title>
		<link>http://drnicwilliams.com/2009/11/04/hacking-someones-gem-with-github-and-gemcutter/comment-page-1/#comment-190769</link>
		<dc:creator>Ennuyer.net &#187; Blog Archive &#187; Rails Reading - November 15, 2009</dc:creator>
		<pubDate>Sun, 15 Nov 2009 14:00:19 +0000</pubDate>
		<guid isPermaLink="false">http://drnicwilliams.com/?p=635#comment-190769</guid>
		<description>[...]  Dr Nic ’s Hacking someone’s gem with github and gemcutter  [...]</description>
		<content:encoded><![CDATA[<p>[...]  Dr Nic ’s Hacking someone’s gem with github and gemcutter  [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: aalex</title>
		<link>http://drnicwilliams.com/2009/11/04/hacking-someones-gem-with-github-and-gemcutter/comment-page-1/#comment-190552</link>
		<dc:creator>aalex</dc:creator>
		<pubDate>Tue, 10 Nov 2009 12:41:29 +0000</pubDate>
		<guid isPermaLink="false">http://drnicwilliams.com/?p=635#comment-190552</guid>
		<description>Hi Dr Nic! this post is great -&gt; fixing someone&#039;s code in less than a minute! Super! I think this is so cool that I produced a demo of this for my RubyPulse screencast series...

-aaalex</description>
		<content:encoded><![CDATA[<p>Hi Dr Nic! this post is great -&gt; fixing someone&#8217;s code in less than a minute! Super! I think this is so cool that I produced a demo of this for my RubyPulse screencast series&#8230;</p>
<p>-aaalex</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Interesting Ruby Tidbits That Don&#8217;t Need Separate Posts #29</title>
		<link>http://drnicwilliams.com/2009/11/04/hacking-someones-gem-with-github-and-gemcutter/comment-page-1/#comment-190542</link>
		<dc:creator>Interesting Ruby Tidbits That Don&#8217;t Need Separate Posts #29</dc:creator>
		<pubDate>Tue, 10 Nov 2009 03:09:19 +0000</pubDate>
		<guid isPermaLink="false">http://drnicwilliams.com/?p=635#comment-190542</guid>
		<description>[...] wanted to quickly bust out the big guns and fix it quickly? Surely, we all have.. so he&#039;s written Hacking someone&#039;s gem with github and gemcutter to show us how to easily fork an existing gem, make our changes, and get it deployed on Gemcutter [...]</description>
		<content:encoded><![CDATA[<p>[...] wanted to quickly bust out the big guns and fix it quickly? Surely, we all have.. so he&#39;s written Hacking someone&#39;s gem with github and gemcutter to show us how to easily fork an existing gem, make our changes, and get it deployed on Gemcutter [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Aaron Patterson</title>
		<link>http://drnicwilliams.com/2009/11/04/hacking-someones-gem-with-github-and-gemcutter/comment-page-1/#comment-190340</link>
		<dc:creator>Aaron Patterson</dc:creator>
		<pubDate>Thu, 05 Nov 2009 19:02:16 +0000</pubDate>
		<guid isPermaLink="false">http://drnicwilliams.com/?p=635#comment-190340</guid>
		<description>@Richie 

WRT #2: Maybe the maintainer hasn&#039;t pulled in &quot;cool new feature x&quot; for some *very important* reason.  Or maybe the maintainer doesn&#039;t know that there is demand.  Is it the canonical author&#039;s responsibility to keep an eye on all of the forks?  Why not talk to the author about &quot;cool new feature x&quot; rather than publish a fork?  If your fork is experimental, why are you littering the canonical gem repository with it?

WRT #3: In that case you need to take over maintenance of the canonical gem or change your gem name from &quot;user-xx&quot; to something else and make it a real replacement with different top-level .rb files.  Then people can use the non-forked version without entering &quot;what gem did I require this from&quot; hell.</description>
		<content:encoded><![CDATA[<p>@Richie </p>
<p>WRT #2: Maybe the maintainer hasn&#8217;t pulled in &#8220;cool new feature x&#8221; for some *very important* reason.  Or maybe the maintainer doesn&#8217;t know that there is demand.  Is it the canonical author&#8217;s responsibility to keep an eye on all of the forks?  Why not talk to the author about &#8220;cool new feature x&#8221; rather than publish a fork?  If your fork is experimental, why are you littering the canonical gem repository with it?</p>
<p>WRT #3: In that case you need to take over maintenance of the canonical gem or change your gem name from &#8220;user-xx&#8221; to something else and make it a real replacement with different top-level .rb files.  Then people can use the non-forked version without entering &#8220;what gem did I require this from&#8221; hell.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Richie Vos</title>
		<link>http://drnicwilliams.com/2009/11/04/hacking-someones-gem-with-github-and-gemcutter/comment-page-1/#comment-190308</link>
		<dc:creator>Richie Vos</dc:creator>
		<pubDate>Thu, 05 Nov 2009 05:55:01 +0000</pubDate>
		<guid isPermaLink="false">http://drnicwilliams.com/?p=635#comment-190308</guid>
		<description>Maybe I should move to the mailing-list, but for now:

@Luis great points. I&#039;m going to have to think about that some more. One thing that comes to mind though is that&#039;s not a problem unique to namespaced gems, the same problem can occur with gem A depending on gem C version 1.0 and gem B depending on gem C version 1.5. I do readily admit that upgrading from gem A 1.0 to gem A 1.5 is probably much more likely to work than from moneypools-A 1.0 to gem A-1.0.

The other thing is a library&#039;s probably requiring a non-default version of a gem for a reason. If they weren&#039;t using a non-default version they&#039;d probably do something like monkey-patching or something else under-the-covers to patch in the functionality they need. I&#039;d much rather be debugging gem dependency issues than trying to debug a chain of patches applied to a gem.

But again, I do think most of the time people are going to go with a gem that is (one of or multiple of):
1. canonical
2. with a special feature they require
3. popular

1 should be the default (and will be with a good maintainer)
2 isn&#039;t avoidable, if you need the feature and it&#039;s not getting pulled in, what&#039;cha gonna do
3&#039;s not a good one to use unless &#039;popular&#039; means maintained and the real one isn&#039;t</description>
		<content:encoded><![CDATA[<p>Maybe I should move to the mailing-list, but for now:</p>
<p>@Luis great points. I&#8217;m going to have to think about that some more. One thing that comes to mind though is that&#8217;s not a problem unique to namespaced gems, the same problem can occur with gem A depending on gem C version 1.0 and gem B depending on gem C version 1.5. I do readily admit that upgrading from gem A 1.0 to gem A 1.5 is probably much more likely to work than from moneypools-A 1.0 to gem A-1.0.</p>
<p>The other thing is a library&#8217;s probably requiring a non-default version of a gem for a reason. If they weren&#8217;t using a non-default version they&#8217;d probably do something like monkey-patching or something else under-the-covers to patch in the functionality they need. I&#8217;d much rather be debugging gem dependency issues than trying to debug a chain of patches applied to a gem.</p>
<p>But again, I do think most of the time people are going to go with a gem that is (one of or multiple of):<br />
1. canonical<br />
2. with a special feature they require<br />
3. popular</p>
<p>1 should be the default (and will be with a good maintainer)<br />
2 isn&#8217;t avoidable, if you need the feature and it&#8217;s not getting pulled in, what&#8217;cha gonna do<br />
3&#8217;s not a good one to use unless &#8216;popular&#8217; means maintained and the real one isn&#8217;t</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Dr Nic</title>
		<link>http://drnicwilliams.com/2009/11/04/hacking-someones-gem-with-github-and-gemcutter/comment-page-1/#comment-190304</link>
		<dc:creator>Dr Nic</dc:creator>
		<pubDate>Thu, 05 Nov 2009 05:00:24 +0000</pubDate>
		<guid isPermaLink="false">http://drnicwilliams.com/?p=635#comment-190304</guid>
		<description>@adevadeh oops, thanks. I&#039;ve added the highline dependency and I&#039;ve released 0.3.10.</description>
		<content:encoded><![CDATA[<p>@adevadeh oops, thanks. I&#8217;ve added the highline dependency and I&#8217;ve released 0.3.10.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: adevadeh</title>
		<link>http://drnicwilliams.com/2009/11/04/hacking-someones-gem-with-github-and-gemcutter/comment-page-1/#comment-190303</link>
		<dc:creator>adevadeh</dc:creator>
		<pubDate>Thu, 05 Nov 2009 04:48:40 +0000</pubDate>
		<guid isPermaLink="false">http://drnicwilliams.com/?p=635#comment-190303</guid>
		<description>seems to be a slight problem in the gemspec:

/usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require&#039;: no such file to load -- highline (LoadError)

need to add highline as a dependency.

Thanks for this nice helper gem, i&#039;m trying it out right now.</description>
		<content:encoded><![CDATA[<p>seems to be a slight problem in the gemspec:</p>
<p>/usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require&#8217;: no such file to load &#8212; highline (LoadError)</p>
<p>need to add highline as a dependency.</p>
<p>Thanks for this nice helper gem, i&#8217;m trying it out right now.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Luis Lavena</title>
		<link>http://drnicwilliams.com/2009/11/04/hacking-someones-gem-with-github-and-gemcutter/comment-page-1/#comment-190299</link>
		<dc:creator>Luis Lavena</dc:creator>
		<pubDate>Thu, 05 Nov 2009 03:44:45 +0000</pubDate>
		<guid isPermaLink="false">http://drnicwilliams.com/?p=635#comment-190299</guid>
		<description>@Richie

While your logic sounds reasonable, and under certain circumstances valid, it just turn into a complicated environment for new comers.

For example, in your case, let&#039;s say your Rails/Merb applications depends on this moneypools-thinking-sphinx.

Because is a cool project, or someone want to put it in their system, they clone it and start dealing with the dependencies.

Either using Rails gem dependencies or Bundler, you would get moneypools-thinking-sphinx, which is cool.

That is because both Bundler and Rails-gem mechanism uses &lt;code&gt;gem &#039;foo-bar&#039;&lt;/code&gt; prior the require of the library.

Now, things turn hairy for people that do not pollute their scripts with gem statements.

As my example in the group, I found issues with some users that had installed relevance-rcov and others spiceycode-rcov, which both offer &quot;rcov.rb&quot; to the require method.

Of course, relevance was loaded first, but could be &quot;abc-rcov&quot;, with lower version number than relevance which could be loaded due this simple require.

So, now you want to help out someone that is doing require &#039;rcov&#039; and you ask &quot;please tell me the version of rcov gem you have installed&quot;

&lt;code&gt;gem list rcov&lt;/code&gt; will throw no results.

Instead, the need to do gem search rcov, which will also bring a lot of noise to the results.

Now try to explain to that user &quot;ok, you got the wrong rcov&quot; and the answer will be &quot;I haven&#039;t installed it, was installed by XYZ, but MN uses this other version&quot;

All the above, is not hypothetical, I&#039;m giving a simple example of something that already happened to me and some users contacting me about RubyInstaller.

So, after you burn with this stuff a couple of times... instead of catching it late, why not fix the root of the issue?

In my company we built our own gem server and published there even gems for our private projects, not just open-source forks, that worked for us, and could work for others.

Apologizes for the long answer and my english, which I believe sometimes is not good enough to explain myself.

Cheers.</description>
		<content:encoded><![CDATA[<p>@Richie</p>
<p>While your logic sounds reasonable, and under certain circumstances valid, it just turn into a complicated environment for new comers.</p>
<p>For example, in your case, let&#8217;s say your Rails/Merb applications depends on this moneypools-thinking-sphinx.</p>
<p>Because is a cool project, or someone want to put it in their system, they clone it and start dealing with the dependencies.</p>
<p>Either using Rails gem dependencies or Bundler, you would get moneypools-thinking-sphinx, which is cool.</p>
<p>That is because both Bundler and Rails-gem mechanism uses <code>gem 'foo-bar'</code> prior the require of the library.</p>
<p>Now, things turn hairy for people that do not pollute their scripts with gem statements.</p>
<p>As my example in the group, I found issues with some users that had installed relevance-rcov and others spiceycode-rcov, which both offer &#8220;rcov.rb&#8221; to the require method.</p>
<p>Of course, relevance was loaded first, but could be &#8220;abc-rcov&#8221;, with lower version number than relevance which could be loaded due this simple require.</p>
<p>So, now you want to help out someone that is doing require &#8216;rcov&#8217; and you ask &#8220;please tell me the version of rcov gem you have installed&#8221;</p>
<p><code>gem list rcov</code> will throw no results.</p>
<p>Instead, the need to do gem search rcov, which will also bring a lot of noise to the results.</p>
<p>Now try to explain to that user &#8220;ok, you got the wrong rcov&#8221; and the answer will be &#8220;I haven&#8217;t installed it, was installed by XYZ, but MN uses this other version&#8221;</p>
<p>All the above, is not hypothetical, I&#8217;m giving a simple example of something that already happened to me and some users contacting me about RubyInstaller.</p>
<p>So, after you burn with this stuff a couple of times&#8230; instead of catching it late, why not fix the root of the issue?</p>
<p>In my company we built our own gem server and published there even gems for our private projects, not just open-source forks, that worked for us, and could work for others.</p>
<p>Apologizes for the long answer and my english, which I believe sometimes is not good enough to explain myself.</p>
<p>Cheers.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Richie Vos</title>
		<link>http://drnicwilliams.com/2009/11/04/hacking-someones-gem-with-github-and-gemcutter/comment-page-1/#comment-190296</link>
		<dc:creator>Richie Vos</dc:creator>
		<pubDate>Thu, 05 Nov 2009 02:26:00 +0000</pubDate>
		<guid isPermaLink="false">http://drnicwilliams.com/?p=635#comment-190296</guid>
		<description>I feel like the argument against what gemcutter&#039;s doing is pretty similar to the argument against git. Why would you want people to be able to easily fork a project, if you let them do that then how is anyone ever going to know where the real true source lives?

Lots of logic to that, but people are smarter than that. 50 blah-rails gems out there on gemcutter? I bet they&#039;re all scratching some itch, and I bet it&#039;d serve the rails guys to take a look and see what&#039;s going on to get an idea of what people are thinking. Also, as a user if I see 50 people forked that, I&#039;m going to know that there&#039;s some value in the whole X-rails gems, since that many people have found it useful enough to customize.

And towards the canonical&#039;ness, if I make a gem and somebody forks it, and then a bunch of other people use the fork, and google ranks theirs higher, and gemcutter shows theirs has more downloads, why is mine better than that one? Let the best gem win.

The reason I&#039;m totally sold on this is I&#039;ve been reaping the benefits of this recently. Example:

1. my team finds a bug in the thinking-sphinx gem
2. we do what nic&#039;s talking about and fork the source on github, fix it, push it, and send the primary maintainer a pull request (which is a big step I think a lot of people skip)
3. we want to use that code now, so using jewler + gemcutter we create a new gem named moneypools-thinking-sphinx out on the interweb with our fix (hadn&#039;t seen nic&#039;s helpers before)
4. on all our boxes (including production) we can just install the new gem using our normal gem tools (gem, rake gems:install, bundler) right away -- no jumping through hoops.

That&#039;s a really awesome experience, and incredibly convenient.

The final follow-up is the maintainer pulls in our changes and pushes a new version of his gem out there. Ours is now outdated. This is the tricky part where I&#039;m not sure what should happen. Deleting it means anyone using it would be SOL, keeping it out there though might not provide much value. Gemcutter takes the &#039;leave it there&#039; approach.

So my overall summary is I think this&#039;s one of those cases where the hypothetical bad-cases are outweighed by the real-world convenience and experiences. 

Sorry for the long-commont/post-hijacking/rant(?)

P.S. I do think the more features github/gemcutter/others add to help ferret out what are the most active/popular versions the better.</description>
		<content:encoded><![CDATA[<p>I feel like the argument against what gemcutter&#8217;s doing is pretty similar to the argument against git. Why would you want people to be able to easily fork a project, if you let them do that then how is anyone ever going to know where the real true source lives?</p>
<p>Lots of logic to that, but people are smarter than that. 50 blah-rails gems out there on gemcutter? I bet they&#8217;re all scratching some itch, and I bet it&#8217;d serve the rails guys to take a look and see what&#8217;s going on to get an idea of what people are thinking. Also, as a user if I see 50 people forked that, I&#8217;m going to know that there&#8217;s some value in the whole X-rails gems, since that many people have found it useful enough to customize.</p>
<p>And towards the canonical&#8217;ness, if I make a gem and somebody forks it, and then a bunch of other people use the fork, and google ranks theirs higher, and gemcutter shows theirs has more downloads, why is mine better than that one? Let the best gem win.</p>
<p>The reason I&#8217;m totally sold on this is I&#8217;ve been reaping the benefits of this recently. Example:</p>
<p>1. my team finds a bug in the thinking-sphinx gem<br />
2. we do what nic&#8217;s talking about and fork the source on github, fix it, push it, and send the primary maintainer a pull request (which is a big step I think a lot of people skip)<br />
3. we want to use that code now, so using jewler + gemcutter we create a new gem named moneypools-thinking-sphinx out on the interweb with our fix (hadn&#8217;t seen nic&#8217;s helpers before)<br />
4. on all our boxes (including production) we can just install the new gem using our normal gem tools (gem, rake gems:install, bundler) right away &#8212; no jumping through hoops.</p>
<p>That&#8217;s a really awesome experience, and incredibly convenient.</p>
<p>The final follow-up is the maintainer pulls in our changes and pushes a new version of his gem out there. Ours is now outdated. This is the tricky part where I&#8217;m not sure what should happen. Deleting it means anyone using it would be SOL, keeping it out there though might not provide much value. Gemcutter takes the &#8216;leave it there&#8217; approach.</p>
<p>So my overall summary is I think this&#8217;s one of those cases where the hypothetical bad-cases are outweighed by the real-world convenience and experiences. </p>
<p>Sorry for the long-commont/post-hijacking/rant(?)</p>
<p>P.S. I do think the more features github/gemcutter/others add to help ferret out what are the most active/popular versions the better.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
