=pod

=head1 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":

=over

> 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.

=back

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.

=over

> 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.

=back

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".

=over

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

=back

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.

=over

> 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. 

=back

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 L<JSON::XS> and L<Cpanel::JSON::XS> in the
current module are fairly unbiased. If Zoffix Znet has better
benchmarks, supply them, instead of complaining.

=over

> 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. 

=back

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. L<JSON::Parse> is not a prerequisite of
L<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.)

=over

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

=back

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

=over

> *) 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"]).

=back

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

=over

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

=back

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.

=over

> *) 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 

=back

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.

=over

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

=back

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.

=over

> *) 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. 

=back

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.

=over

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

=back

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.

=over

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

=back

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:

=over

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

=back

=cut
