A response to a dishonest CPAN ratings "review"

This document, included in the distribution of JSON::Create, is a response to a dishonest and misleading "review" by one Zoffix Znet which appears on the CPAN ratings site. I was hoping that this harassment would be deleted from that site, but it doesn't seem to have been, so I'm responding here. The following quotes are from the "review":

    > We already have a million JSON modules, and I can appreciate someone's alternative take on the problem, but JSON::Create poorly solves only half of it, at the price of a full module, without any added benefit or originality.

This "review" was based on a very early testing version of the module. The one star rating and the spurious bug reports indicate that Zoffix Znet cannot, in fact, appreciate someone's alternative take on the problem.

    > The author is passive-aggressive about the critique they received on this module and advises to "calm down" when bugs in the module are reported on the official bug tracker.

This is incorrect and dishonest. I advised Zoffix Znet to "calm down" because the module was in an early testing stage when he started writing his ever-changing reviews. Writing a "review" on CPAN ratings pointing out that parts of the code were not yet complete was premature and silly, especially since the module's documentation stated that parts of it were not complete.

Here is the history of this ridiculous and rotten "review". Zoffix Znet published the first version of his "review" shortly after I released version 0.01 of this module. The first version contained many insulting remarks. For example it compared the module to a turd floating in the ocean. It also, absurdly, denigrated the module on the basis of the debugging backtrace code which was still active (and necessary) at that point. This was partly my fault, as I'd just got the module to go through CPAN testers successfully and was pleased enough with it to give it a non-testing version number, even though it wasn't fully complete at that point. However, the module was marked as testing version in its documentation. Despite that, for some reason, Zoffix Znet started complaining about the module as if I had presented it with some kind of golden halo or as a perfect and complete solution.

Hilariously, after I pointed out to him that it was an early testing version, Zoffix Znet also said I should put a warning notice on it, even though it had exactly such a warning notice on it at the time, as the first line of the documentation. Please check backpan for confirmation. Zoffix Znet had not even bothered to read the first line of the module's documentation before writing his "review".

    > After a discussion on GitHub, the author actually deleted and edited all the comments by contributors and then closed the Issues.

Again, this is misleading. I didn't delete comments by "contributors". I deleted only the comments by one person, Zoffix Znet. Zoffix Znet is lying when he says he is a "contributor" to this module. Zoffix Znet has not contributed a single line of code or documentation to this module. I will say more. I believe from reading his bug reports that Zoffix Znet is not competent to contribute to this module. This module is written in C and the Perl extension language XS, but from the bug reports I felt that Zoffix Znet didn't understand C or XS programming. He refused to listen when I tried to explain why the module needs extensive testing, and he didn't understand how various programming features would or would not affect performance.

    > They also post deliberately skewed benchmarks, appear to be down-voting all the negative reviews using multiple accounts, and post snarky reviews of other JSON modules.

It's true that I don't like the other JSON modules on CPAN, otherwise why would I have bothered to write this one? I wrote the reviews before I started development of this. I don't have multiple accounts on CPAN ratings. I did post some problematic benchmarks, but the code I used used the same method which is used in Perlancar's benchmark, mentioned in another review. Since then I have updated it, and apart from the documented issues with the floating point benchmark, I think the benchmarks versus JSON::XS and Cpanel::JSON::XS in the current module are fairly unbiased. If Zoffix Znet has better benchmarks, supply them, instead of complaining.

    > Considering the module has author's own JSON::Parse in prereqs, I don't see why the author could not simply add the 'create_json' subroutine to JSON::Parse.

Zoffix Znet knew that this was false when he wrote this version of his review, since he discussed the above with me on the github issue tracker before he changed his review. It's a shame that I deleted his comments I suppose, since if I hadn't I could demonstrate that he's lying. JSON::Parse is not a prerequisite of JSON::Create. However, it's used for testing, and it is loaded on demand if the user chooses validation of user-supplied JSON. (It may also become a dependence for people using older versions of ExtUtils::MakeMaker.)

    > *) The module offers just a single subroutine, yet you have to explicitly request its export.

Wrong. This comment is based on a very early testing version. The module offers either an object-oriented interface or an exportable function.

    > *) Unlike many other JSON modules on CPAN, JSON::Create does not handle objects that implement ->TO_JSON method and instead the base datatype is used (e.g. bless [qw/foo bar baz/], "foo" ends up encoded as ["foo", "bar", "baz"]).

This is correct. This behaviour is by design. In this respect, JSON::Create is fairly different from JSON::PP and JSON::XS.

    > BUT, that conversion happens inconsistently: e.g. the module dies if you try to encode Mojo::URL, despite that object's overloading stringification.

Demonstrably false. It's very, very silly and destructive behaviour to put bugs in a very early release of a module into a CPAN ratings review. Use the bug tracker, or alternatively actually look at the documentation of the module that you are supposedly reviewing, where it clearly stated that the code wasn't yet written at that time.

    > *) Speaking of objects, JSON::Create dies if you feed it JSON::XS::Boolean or similar objects that special-handle conversion between Perl and JSON booleans

No, it doesn't. The code for handling objects wasn't even written when the above "review" was submitted to CPAN ratings. Furthermore, the fact that the code wasn't written was clearly documented in the module.

    > *) Be sure to sanitize your data for any subrefs. JSON::Create dies if it encounters them.

No, it doesn't. The code for handling the above case wasn't even written when the above "review" was submitted to CPAN ratings. Furthermore, the fact that the code wasn't written was clearly documented in the module.

    > *) There's no handling for globs either and instead of doing something sensible (e.g. "null"), the module encodes them as "*Symbol::GEN0" or similar.

Wrong again. The code for handling the above case wasn't even written when the above "review" was submitted to CPAN ratings. Furthermore, the fact that the code wasn't written was clearly documented in the module. This confirms my view that this "review" is nothing more than harassment.

    > In summation, this module does not offer any original solution and seems to be a partial reimplementation of the things already available on CPAN.

Zoffix Znet cannot seem to make up his mind here what the module is, and what his complaint is. Here he states that it's not an original solution, even though he points out that it actually is different from the other modules elsewhere in his review.

    > The author is hostile and does not welcome suggestions for improvement. Avoid this module at all costs.

Yes, I'm very hostile to Zoffix Znet. Why? Because he wrote a deliberately misleading review of my module. I'm fairly sure he's harassing me rather than evaluating my module. Why this person is harassing me, I do not know. Because I think he is harassing me, I deleted the fake and silly bug reports he'd posted to github. I welcome suggestions for improvement, but Zoffix Znet's silly and nasty bug reports and "review" of an early testing version of the module were not "suggestions for improvement".

His bug reports also indicate that he does not understand C or XS programming. I've looked through his CPAN contributions and cannot see any evidence of XS module development.

Further to the above, Zoffix Znet also reported bugs, then wrote silly comments on his ever-changing review about the bug reports only a few minutes later, before I even had time to respond. Zoffix Znet completely rewrote his review at least three times by the time of version 0.03. The first version of the review did have the benefit of at least being somewhat entertaining to read, although very insulting, but now it just consists of inaccurate drivel and petulant whining.

If Zoffix Znet wants to write fake reviews, he should go to fiverr.com and offer to write fake Amazon reviews for $5 instead of annoying CPAN module authors with his nonsense.

Ben Bullock

2015-12-26 15:18:12

The following is the entire text of Zoffix Znet's review, which I'm quoting here since he's liable to change it yet again:

    JSON-Createexternal link (0.03) * We already have a million JSON modules, and I can appreciate someone's alternative take on the problem, but JSON::Create poorly solves only half of it, at the price of a full module, without any added benefit or originality. You can only encode Perl data structures to JSONsomething pretty much all other JSON modules can already do. If you want to decode, you need another module.

    Considering the module has author's own JSON::Parse in prereqs, I don't see why the author could not simply add the 'create_json' subroutine to JSON::Parse.

    Even the author's own comments suggest there's no reasonable rationalle for this module's existence. From the HISTORY section of the documentation: "I started making this module so that, with this and JSON::Parse, I wouldn't have to ever use any of the existing JSON modules on CPAN ever again." A bizarre and baseless desire.

    The author is passive-aggressive about the critique they received on this module and advises to "calm down" when bugs in the module are reported on the official bug tracker. After a discussion on GitHub, the author actually deleted and edited all the comments by contributors and then closed the Issues. They also post deliberately skewed benchmarks, appear to be down-voting all the negative reviews using multiple accounts, and post snarky reviews of other JSON modules.

    Looking further at technical aspects: *) The module offers just a single subroutine, yet you have to explicitly request its export. *) Unlike many other JSON modules on CPAN, JSON::Create does not handle objects that implement ->TO_JSON method and instead the base datatype is used (e.g. bless [qw/foo bar baz/], "foo" ends up encoded as ["foo", "bar", "baz"]). BUT, that conversion happens inconsistently: e.g. the module dies if you try to encode Mojo::URL, despite that object's overloading stringification. *) Speaking of objects, JSON::Create dies if you feed it JSON::XS::Boolean or similar objects that special-handle conversion between Perl and JSON booleans *) Be sure to sanitize your data for any subrefs. JSON::Create dies if it encounters them. *) There's no handling for globs either and instead of doing something sensible (e.g. "null"), the module encodes them as "*Symbol::GEN0" or similar.

    In summation, this module does not offer any original solution and seems to be a partial reimplementation of the things already available on CPAN. The author is hostile and does not welcome suggestions for improvement. Avoid this module at all costs. Zoffix Znet - 2015-10-21T08:09:25 (permalink) 3 out of 5 found this review helpful. Was this review helpful to you? Yes No