[Rubygems-developers] Contributing to Ruby Projects

James Tucker jftucker at gmail.com
Tue Dec 14 21:20:50 EST 2010

Wow, so, this thread is getting silly. It's just going to take some time for patches to get approved unless they're clearly ready. Anyway, there's some more feedback to come on comments here.

Tying to snip where possible.

On Dec 11, 2010, at 1:07 PM, Trans wrote:
> On Dec 10, 1:55 am, Eric Hodel <drbr... at segment7.net> wrote:
>> To begin with I would like to point out that you have deleted several of your comments forcing me to respond from memory and leaving their contents at the risk of "he-said, she-said".
> I did. I actually attempted to delete the all the commits altogether,
> but it turns out that is not possible. It gets to a point were I would
> rather delete them and forget the whole affair.

You know there's fights that just aren't worth having, but that doesn't mean you should destroy work.

> That request came only after I may a snarky remark about no one
> commenting on the patch. From my perspective it appeared that when I
> did something acceptable, it was being ignored.

If it's not been merged in just a week or so, that's not ignored. A lot of the team are busy.

> When I did something that wasn't it was an opportunity to "attack" (of course that
> perception almost entirely has to do with Ryan).

Something which pertains to one person seems to be off topic for the issues you raised here and on ruby-talk.

>>> https://github.com/rubygems/rubygems/pull/12
> Of course there is always maintenance, but in the scheme of things,
> this one is pretty small. What was it about 20-30 lines of code?

Wrong. Sorry, but when it comes to specs, it's not the code, but the /format/ that requires maintenance. Once there's live dependencies or gems out there in particular formats, we have to support them forever. That really means forever. We still have to deal with old formats from way back when and it's in the way of other "innovation" already. Very careful design choices are the only way we can avoid this. It is this understanding that separates those who are judging your code from your "it's just 20-30 lines" line of thought.

>> I asked if there were any non-ruby tools that used a YAML gemspec.  If such a tool existed it might be a reason to consider this feature.
>> You did not name any non-ruby tools that used a YAML gemspec, but you came up with some hypothetical ruby tools that could use this feature.  You claimed that this feature was important because either RubyGems consumed too many resources or that it would not be available.
> You are asking for something that can't exist b/c there is no such
> thing as a plain YAML gemspec. I was trying to create such a thing so
> such tools could exist.
> I gave you three use cases, two where it could be helpful if loading
> Rubygems were unnecessary (a web search app gathering info about
> projects and a web-app to edit the YAML gemspec), and a case where it
> can't be loaded (Setup.rb is an alternative installer, it does not
> make any sense for it to load rubygems, but it could utilize a pure
> YAML gemspec).

rubygems master loads tons of less code. In fact, loading yaml is probably about the same speed once we disable the plugin lookup.

Of course, what you're saying is that rubygems is too slow for this usage, but I don't see what webservice you're likely to write without rubygems.

We can all imagine cases where people will do lots of different things. Coming up with cases that are provably useful is different.

The issue here is that no one involved can see how your suggestion is provably useful. Furthermore, you could, in such a hypothetical service, just remove or implement the type hint in whatever bald yak environment you need to save a few hundred kb. Seems I'm having trouble with my tone too, I just can't see any sense in this.

If you can't make it make sense then it's argument for the sake of argument.

>> In brief, I responded that if it's a ruby tool it can use RubyGems and that RubyGems resource burden is not too large.  As of Ruby 1.9 RubyGems is always available.  (Adding a feature to RubyGems specifically for Ruby 1.8 requires an overwhelming need.)  I believe this is where I closed the ticket as you could not come up with a satisfactory reason for including plain-YAML gemspecs.
> The thing is that you dismissed those use cases so quickly and so
> summarily, that it seemed to me that you weren't really giving it that
> much thought. I also made it very clear that good bit of the
> motivation for this patch came from the fact that the Bundler folks
> have been pushing people to move to hand-edited gemspecs. I was
> actually surprised to learn that I was mistaken in thinking that was
> also the stance of the Rubygems team.

This has nothing to do with YAML or the use cases you described. If you feel your use cases are dismissed, explain them clearly, explain how it's new and relevant and useful, otherwise it's just a "what-if" and I can "what-if" like you have no idea.

>> You persisted, however and I continued to respond.
>> You argued that it could be made "safer" and I referenced the past history of junk data in gemspecs and Jeremy Hindegardener's talk at RubyConf 2010 as a demonstration that it probably can't be made safer.
> Actually, I argued that it wasn't any less safe then it was already. I
> only made a passing parenthetical comment that if type safety is a
> concern that improvement could be made --but that applied to the
> current design in general, not this particular feature.

Actually, the real issue is that we cannot override parameters during a YAML load as that's down to the YAML library. This would mean adding stages to recomposition in order to remain backward compatible in future versions. In a ruby environment we already have a hook to take control of those things.

Type safety is probably the wrong term.

See the marshal load overrides for more information.

>> You said it would be "more convenient" and I responded that I could not find a gem that used YAML in its .gemspec file in a few minutes of searching.  I pointed out that the community has decided that the de-facto format for gemspec files is Ruby.
>> I thought you would take my lack of discovery of YAML .gemspec files as an opportunity to show me a single project that used YAML in its gemspecs.  This would demonstrate there was even a handful of RubyGems users who would benefit from this feature but you did not (or could not?).
> Again, I did show you and you simply dismissed those cases as people
> "refusing to conform to best practices". Ore was the most obvious
> example --it was so important for that developer that they went out of
> their way to create a whole project devoted to doing it.

That appears to be a single user that is doing this, in the entire ecosystem. Last industry statistics put our user count at supposedly close to 1 million users. That's less than 0.1%.

I don't see any innovation or improvement over other methods. In fact, most of the project yaml files appear to be Gem::Specification yaml files, just with the type header removed.

And you can't tell me that your resource argument is relevant:


https://github.com/ruby-ore/ore-core/blob/master/lib/ore/project.rb this also seems to have missed the point of object serialization entirely.

I could go on, but that's not why we're here.

>> You pointed out ore which uses plain-YAML to create gemspecs and gems and used it as an argument in your favor.
>> I responded that if ore supports this you should use ore as it does what you want already and requires no changes to RubyGems.  Since you did not demonstrate that there was another RubyGems user who desires plain-YAML gemspecs I responded that there is only one person that wants this feature and that was not enough users to include it.  I reiterated that the community has decided they prefer ruby.
>> If you look at the download counts, people overwhelmingly prefer to use ruby to build gems.  Hoe has 690,000 and Jeweler has 56,000.  Ore has 453.
> This is unreasonable argument. I can't provide examples of something
> that CAN'T exist. Both Ore and my own tools took many man-hours to
> make it possible --so that's not something one can reasonably expect
> of the common community. Clearly most people are not going to do that.
> The community is not getting much of an option. Ore is brand new. So
> it's not really a fair indication.

Ore really needs a lot of work, and by work I mean a lot of code deprecation. The same effect can be gathered using far less code. I appreciate people putting time into things they're passionate about, but that doesn't make those passions good ideas for us to support. There are people on crypto mailinglists putting far more time than either of you into new crypto ideas, but you don't expect us to support those signing algorithms.

You say that this can't exist, but you also say that Ore does it. It's easy to make a gem specification from a yaml file, either typed or untyped:

>> YAML.load_file('metadata').class
=> Hash
>> spec = Gem::Specification.new
=> #<Gem::Specification:0x101faea40 @licenses=[], @summary=nil, @post_install_message=nil, @description=nil, @dependencies=[], @bindir="bin", @require_paths=["lib"], @version=nil, @date=Tue Dec 14 00:00:00 -0800 2010, @new_platform="ruby", @loaded=false, @extensions=[], @authors=[], @cert_chain=[], @required_rubygems_version=#<Gem::Requirement:0x101fae8d8 @none=false, @requirements=[[">=", #<Gem::Version "0">]]>, @loaded_from=nil, @has_rdoc=true, @specification_version=3, @original_platform=nil, @extra_rdoc_files=[], @files=[], @signing_key=nil, @default_executable=nil, @email=nil, @test_files=[], @required_ruby_version=#<Gem::Requirement:0x101fae950 @none=false, @requirements=[[">=", #<Gem::Version "0">]]>, @requirements=[], @rdoc_options=[], @rubygems_version="1.3.7", @homepage=nil, @name=nil, @executables=[], @platform="ruby", @autorequire=nil, @rubyforge_project=nil>
>> YAML.load_file('metadata').each { |k,v| spec.send(k + '=', v) }; spec
=> #<Gem::Specification:0x101faea40 @licenses=[], @summary="Web-application framework with template engine, control-flow layer, and ORM.", @post_install_message=nil, @description="Rails is a framework for building web-...

I don't really get what all the fuss (or many man hours) is about?

>> I now have a full page and over 1.5k of summary in this email of our conversation past the point where I closed the issue.  We had a long and thorough discussion of the issue but you could not bring up any reason for inclusion of plain-YAML gemspecs.  I believe that my conduct in our conversation was fair and reasonable and that any unbiased reader would find it so.
> I mostly agree. My only complaint with our conversation is what I
> mentioned above. You seemed very short with me, as if you were annoyed
> to have to discuss this, along with a rush to judgment --actually more
> than that, the judgment seemed predetermined, so your end of
> conversation always seemed stilted --it didn't feel like an earnest
> conversation/debate.

Some things may be obvious to use that aren't so to you. If you feel your case hasn't been understood then try to make it more clear. All I can suggest given your past issues is that instead of getting into an argument, maintain your clarity and state a clear case that something needs to go a particular way. As per my responses in this mail, I can't see any other reasons. Indeed after further explanation from Eric you seem to agree with the decision too. Maybe that means you need to take the feedback under more consideration before "feeling dismissed"?


I'm out of steam and time.

More information about the Rubygems-developers mailing list