Live data from Hacker News

How TaxCloud Stole My Code and How I'm Doing Something About It

hovercar.in

11–20 of 50 posts

Re: How TaxCloud Stole My Code and How I'm Doing Something About It

#11
Looking at the examples it's really hard to know if this stuff was copied. How else would you write this sort of stuff? This seems like really simple, straightforward code.

A lot of it seems to be about creating a hash based on a well-defined data type. Is there some other way of doing this that makes sense in Ruby?

Similarly, he points out similar variable names. If you have a variable containing an API key what do you call this besides "api_key"?

Maybe these are just poorly chosen examples, but if these are the best evidence the author has I don't think there's grounds for flipping out quite yet.

Re: How TaxCloud Stole My Code and How I'm Doing Something About It

#13
post #6

Drew's gem doesn't specify a license. It may be open source, but it's not clear what the license is. That doesn't help in this kind of a situation.

Actually, it does. If you don't have an OSS license, it defaults to standard copyright, which means TaxCloud has even less legal right to copy the code.

Drew could have used a license that legally granted commercial use without attribution, and in that case he'd have a bigger problem.

Re: How TaxCloud Stole My Code and How I'm Doing Something About It

#14
post #6

Drew's gem doesn't specify a license. It may be open source, but it's not clear what the license is. That doesn't help in this kind of a situation.

Correct. No license implies copyright.

I'd explicitly state the license to be blunt, obvious, and avoid any confusion.

Re: How TaxCloud Stole My Code and How I'm Doing Something About It

#15
post #11

Looking at the examples it's really hard to know if this stuff was copied. How else would you write this sort of stuff? This seems like really simple, straightforward code. A lot of it seems to be about creating a hash based on a well-defined data type. Is there some other way of doing this that makes sense in Ruby? Similarly, he points out similar variable names. If you have a variable containing an API key what do…

IMHO, the unnecessary require statement is a fairly solid evidence.

And programming is like English writing, no one will actually produce the same code. You can try by yourself

Re: How TaxCloud Stole My Code and How I'm Doing Something About It

#16
That require is a smoking gun for sure, but I'm not too sure about the copyright claim. It's their copyright on the API in the first place, and there are a limited number of ways to wrap an API in Ruby.

It's sleazy to cut and paste code without attribution, but this post comes off as way too confrontational considering the company hasn't had a chance to respond yet. (Which response is perfectly likely to be "Ah shit, brain fart, sorry.")

Re: How TaxCloud Stole My Code and How I'm Doing Something About It

#19
The author writes about his love of contributing to open source, but since his code has no license this may not even be open source code at all. The author should put some kind of license with his code so that it is used the way he wishes. If he wants credit, there are attribution licenses out there. GPL may help to get contributions back to your code. Different licenses will have different results.

Also, hypothetically, if the official API was GPL and he used that as a starting point - in fact he could be the one in violation of the GPL for not including copyright info in his code.

Re: How TaxCloud Stole My Code and How I'm Doing Something About It

#20
post #11

Looking at the examples it's really hard to know if this stuff was copied. How else would you write this sort of stuff? This seems like really simple, straightforward code. A lot of it seems to be about creating a hash based on a well-defined data type. Is there some other way of doing this that makes sense in Ruby? Similarly, he points out similar variable names. If you have a variable containing an API key what do…

A few things stand out as distinctive in terms of Ruby style. For example, for self.send "#{sym}=", val, I'd much prefer to see send :"#{sym}=", val. And "sym" is a poor choice of variable name semantically when it's really referring to an attribute name.

If I were writing this, I'd probably have a single hash that defines the SOAP names and internal names then dynamically create those accessors and dynamically create the hash in to_hash rather than have repetition. DRY and all that. So there are other ways to go about it.

There's not a great deal to go on, of course, but the chance of two independent Rubyists stumbling across an identical solution syntax-wise is far from high (though is not minuscule, either.)

Post reply on HN