"enhance the Ruby language and/or provide additional software constructs" 
sounds like a really, really bad idea. 

Every Ruby dev trying to re-invent the wheel is exactly why Ruby has the (poor) 
reputation that it has in some circles. 



> On Dec 26, 2014, at 8:47 PM, Matt Jones <[email protected]> wrote:
> 
> 
> 
> On Friday, 26 December 2014 17:56:39 UTC-5, Matt Jones wrote:
> 
> 
> On Sunday, 21 December 2014 15:55:26 UTC-5, Star Light wrote:
> https://github.com/LouHenryAlvarez/jackbox 
> <https://github.com/LouHenryAlvarez/jackbox>
> 
> If it's true. It sounds like some pretty wild stuff.  Anyone care to comment 
> about this?
> 
> Followup to my original comment: the Github page only has specs. Rubygems has 
> a gem, but it's got binary components without source and obfuscated source 
> (RubyEncoder). I certainly wouldn't load this code anyplace that wasn't 
> heavily sandboxed. I have no evidence that it's malicious, but have the same 
> amount that it *isn't*.
> 
> There's some interesting ideas in there, but nothing interesting enough that 
> I'd want to bring un-debuggable, un-updatable mystery code in that also locks 
> me to MRI.
> 
> The barrage of "announcement" posts across rails-talk, ruby, ruby-dev, and 
> ruby-core certainly haven't helped make a positive impression.
> 
> 
> A final addon: the thing doesn't even WORK. Brand-new Ruby install on a 
> brand-new Vagrant VM:
> 
> vagrant@precise32:~$ irb
> irb(main):001:0> require 'jackbox'
> TypeError: can't create instance of singleton class
>       from 
> /home/vagrant/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/jackbox-0.9.3.1/lib/jackbox.rb:188:in
>  `new'
>       from 
> /home/vagrant/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/jackbox-0.9.3.1/lib/jackbox.rb:188:in
>  `block (2 levels) in decorate'
>       from 
> /home/vagrant/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/jackbox-0.9.3.1/lib/jackbox.rb:51:in
>  `suppress_warnings'
>       from 
> /home/vagrant/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/jackbox-0.9.3.1/lib/jackbox.rb:179:in
>  `block in decorate'
>       from 
> /home/vagrant/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/jackbox-0.9.3.1/lib/jackbox.rb:208:in
>  `[]'
>       from 
> /home/vagrant/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/jackbox-0.9.3.1/lib/jackbox.rb:208:in
>  `decorate'
>       from 
> /home/vagrant/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/jackbox-0.9.3.1/lib/jackbox/examples/dir.rb:18:in
>  `block in <class:Dir>'
>       from 
> /home/vagrant/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/jackbox-0.9.3.1/lib/jackbox/examples/dir.rb:17:in
>  `class_eval'
>       from 
> /home/vagrant/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/jackbox-0.9.3.1/lib/jackbox/examples/dir.rb:17:in
>  `<class:Dir>'
>       from 
> /home/vagrant/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/jackbox-0.9.3.1/lib/jackbox/examples/dir.rb:15:in
>  `<top (required)>'
>       from 
> /home/vagrant/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/jackbox-0.9.3.1/lib/jackbox.rb:404:in
>  `require_relative'
>       from 
> /home/vagrant/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/jackbox-0.9.3.1/lib/jackbox.rb:404:in
>  `<encoded>'
>       from 
> /home/vagrant/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/jackbox-0.9.3.1/lib/jackbox.rb:2:in
>  `RGLoader_load'
>       from 
> /home/vagrant/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/jackbox-0.9.3.1/lib/jackbox.rb:2:in
>  `<top (required)>'
>       from 
> /home/vagrant/.rbenv/versions/2.1.5/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:135:in
>  `require'
>       from 
> /home/vagrant/.rbenv/versions/2.1.5/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:135:in
>  `rescue in require'
>       from 
> /home/vagrant/.rbenv/versions/2.1.5/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:144:in
>  `require'
>       from (irb):1
>       from /home/vagrant/.rbenv/versions/2.1.5/bin/irb:11:in `<main>'
> ---------------------------------------
> System info:
> 
> vagrant@precise32:~$ ruby -v
> ruby 2.1.5p273 (2014-11-13 revision 48405) [i686-linux]
> 
> vagrant@precise32:~$ lsb_release -a
> No LSB modules are available.
> Distributor ID:       Ubuntu
> Description:  Ubuntu 12.04 LTS
> Release:      12.04
> Codename:     precise
> -------------------------------------
> 
> I'd add that EVEN IF THIS WORKED, it would be terrible - it's loading the 
> file from lib/jackbox/examples/dir.rb, which redefines - ahem, "decorates" - 
> methods of the stdlib Dir class to have entirely different semantics. For 
> instance, `Dir.new(some_path)` now writes to the filesystem...
> 
> Some of the rest, on further examination, feels like over-abstraction / 
> sugaring. For instance, here's how `lets` is implemented:
> 
> def lets(sym = nil, &block)
>   if sym.class == Symbol
>     define_method(sym, &block)
>   else
>     sym ? sym : block
>   end
> rescue StandardError
>   raise LetsError
> end
> 
> (BTW: RubyEncoder just makes this harder, not impossible. Not even 
> particularly difficult, once you get used to reading YARV bytecode. 
> RubyVM::InstructionSequence.disasm FTW!)
> 
> Digging into this, the first example for `lets` is USELESS. `lets bar 
> =->(arg){ arg * arg }` is actually parsed as `lets(bar = ->(arg){ arg * arg 
> })`. This works, but `lets` does exactly fuckall since the actual 
> local-variable-setting part is a side-effect of its argument.
> 
> Other fun things, in no particular order:
> 
> * attempting an install on Ruby 1.9.3 fails, since the gem was built 
> expecting `byebug` to be available but that gem requires Ruby 2.0.0. The 
> gemspec appears to be *attempting* to deal with this by including a 
> conditional on RUBY_VERSION, but that code runs at gem-build time, not 
> gem-load time. :(
> 
> * `with` appears to work by decorating `method_missing`, using 
> `instance_exec` on the target, and then undecorating. Bonus points if you 
> wondered what happens if the block exits the scope abnormally (via `raise` or 
> `throw`).
> 
> * the directory example reimplements Dir.exists? to do exactly the same thing 
> as the Ruby version, only in Ruby instead of C. This is unlikely to be a 
> performance issue, but it makes one wonder why it was included at all.
> 
> * disassembly of the included libraries shows additional oddities - there are 
> two Mach-O format libs (ext/jackbox/jackbox.so and 
> ext/jackbox/jackbox.bundle) and a DLL, but no corresponding library for 
> Linux. The OS X libraries also don't appear to DO anything - just FFI stubs 
> and utility functions.
> 
> * I'll leave the detailed object-oriented theory criticisms to somebody who's 
> passionate about it, but some of the examples seem like classic is-a / has-a 
> reversals to my eye. A Spaceship isn't a fuel line, or a capsule - it HAS 
> those things. Mixins seem like the exactly wrong choice for that case.
> 
> * there's a namespace whose purpose I'm still unclear on under 
> Jackbox::Meta::Abstract and Jackbox::Meta::DSL. Neither of the latter have 
> (at first inspection) any methods of interest.
> 
> * needless to say, thanks to the RubyEncoder non-security garbage, the gem 
> doesn't even WORK on 2.2.0.
> 
> LHA, if you're reading this, you've got some interesting ideas. You need to 
> work on packaging and presentation, though - shipping useless binary 
> extensions and obfuscated source isn't going to endear you to many people. It 
> would be a great deal easier to discuss these ideas without having to trawl 
> through YARV disassembly.
> 
> --Matt Jones
> 
> -- 
> You received this message because you are subscribed to the Google Groups 
> "Ruby on Rails: Talk" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to [email protected] 
> <mailto:[email protected]>.
> To post to this group, send email to [email protected] 
> <mailto:[email protected]>.
> To view this discussion on the web visit 
> https://groups.google.com/d/msgid/rubyonrails-talk/f9156a84-6a9a-4d96-8d68-3e2628ea6373%40googlegroups.com
>  
> <https://groups.google.com/d/msgid/rubyonrails-talk/f9156a84-6a9a-4d96-8d68-3e2628ea6373%40googlegroups.com?utm_medium=email&utm_source=footer>.
> For more options, visit https://groups.google.com/d/optout 
> <https://groups.google.com/d/optout>.

----

Jason Fleetwood-Boldt
[email protected]
http://www.jasonfleetwoodboldt.com/writing

All material © Jason Fleetwood-Boldt 2014. Public conversations may be turned 
into blog posts (original poster information will be made anonymous). Email 
[email protected] with questions/concerns about this.

-- 
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/rubyonrails-talk/98C65DFE-E645-427D-93D2-7C85E3DCC301%40datatravels.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to