=pod

This is a response to a review by one Zoffix Znet which appears on the
CPAN ratings site. 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 statement 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. 

Zoffix Znet sent his first review shortly after I released version
0.01 of this module, containing many insulting remarks, for example
comparing the module to a turd floating in the ocean, and based mostly
on the debugging backtrace code which was still active at that
point. 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 I wasn't using it in practice at that point.

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, even though it was clearly documented as an early
testing version.

Hilariously, Zoffix Znet, in one of the many versions of his review,
also said I should put a warning notice on it, even though it had
exactly such a warning notice on it at the time. Please check backpan
for confirmation. Unfortunately Zoffix Znet rewrote his review yet
again to remove his mistake.

=over

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

=back

I didn't delete comments by "contributors". I deleted only the
comments by Zoffix Znet. Please carefully note that Zoffix Znet is not
a "contributor" to this module. Zoffix Znet has not contributed
anything whatsoever to this module except annoying the author. I
believe from reading his bug reports that Zoffix Znet has no idea of
the issues in programming this module and doesn't understand C or XS
programming at all. This was also a huge annoyance, since because he
has little to no awareness of the issues involved in XS programming,
he refused to listen when I tried to explain why the module needs
extensive testing.

=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? Except for the review of
the apparent joke module L<JSON::Meth> by Zoffix Znet, I wrote all the
reviews before I started development of this. I don't have multiple
accounts on CPAN ratings, in fact Zoffix Znet is the one who appears
to have these multiple accounts, or maybe some shills. I did post some
problematic benchmarks, but the code was the same one which is
mentioned in the review by Perlancar. If Zoffix Znet has better
benchmarks, supply them, instead of complaining. Apart from the
floating point benchmark, I think the benchmarks versus JSON::XS in
the current module are fairly unbiased.

=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

This is a false statement. L<JSON::Parse> is not a prerequisite of
L<JSON::Create>. It's used for testing and for validation of
user-supplied JSON, but it's not necessary to use this. It's not
necessary to combine parsing JSON and creating JSON into one module,
since the two operations don't really share any code.

=over

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

=back

This comment is based on a very early testing version and is wrong. 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, my
module 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

The above statement is demonstrably false. It's a very, very silly to
put bugs in a very early release of a module into a CPAN ratings
review. Use the bug tracker, or alternatively Zoffix Znet might like
to actually look at the documentation of the module that he is
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 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 "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.

=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 because he wrote a misleading
review of my module, and because of that 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
pointing out the documented deficiencies in an early testing version
of the module were not "suggestions for improvement" but just yet more
ways to annoy an author. It's worth noting that Zoffix Znet's own
contributions to the field of JSON on CPAN consist of what seems to be
an utter joke of a module, L<JSON::Meth>.

Another reason I am hostile to him is that his bug reports indicate
that he does not understand C or XS programming to the extent that he
will be able to contribute to this module's development. I've looked
through his CPAN contributions and cannot see any evidence of XS
module development.

Zoffix Znet also reported bugs, then Zoffix Znet 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 also completely
rewrote his review more than 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-24 13:20:50

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
