add inverse option to ministat

Poul-Henning Kamp phk at phk.freebsd.dk
Wed Jul 15 08:17:48 UTC 2015


--------
In message <20150715071534.GE8523 at funkthat.com>, John-Mark Gurney writes:
>Poul-Henning Kamp wrote this message on Wed, Jul 15, 2015 at 06:49 +0000:
>> --------
>> In message <20150715002013.GZ8523 at funkthat.com>, John-Mark Gurney writes:
>> 
>> >Instead of having to massage the data, or know that below a certain
>> >percentage you can just flip the sign, provide this, and you'll now
>> >convert to x per second, giving you an easier comparision for talking.
>> 
>> Why isn't this fundamentally against the UNIX and Software Tools Philosphy
>> and the first step on a long road to turn ministat into R ?
>
>Didn't that get violated when options -C and -d were added in r161692?

Those have pretty solid precedents in cut(1), sort(1) etc.

I protest primarily because I called it *mini*stat for a reason,
and secondarily because I think it is a slippery slope doing it
operator by operator the way this patch invites to, next thing you
know we will have -a(dd) -s(ubtract) -m(ultiply) and -d(ivide).

*Iff* we want to allow transformations of input values, we should be
general about it, and allow people to enter a full expression:

	ministat -e '(x - 645134) / 1203.5 + 7.5'

But that means adding another full expression evaluator to the tree
because none of the many we already have offer a library interface,
and once you've implemented +,-,/,* people will ask for log(), exp()
and...

The shortcut to just hack it so ministat does a popen(awk) to do
the math, doesn't offer anything over running awk by hand in my
view.

There are of course ways we could do this "right":

If we had an official "little-language" in the base-system (Tcl,
Lua, Intercal - pick your poison) we could use that, but apart from
the religions fundamentalism, little languages always suffer from
latent chronic obesity.

A more feasible way might be to adopt plan9's pipe-trick, where
fopen(3) does popen(3) if the first char is '|':

	ministat "|awk '{print 1/$1}' file1" "|awk '{print 1/$1}' file2"

(I never understood why that got shouted down in 199x, and I still
think it would be a damn nice feature to have...)

But for ministat specificall, I'd rather stop before we even get
started, point at the 'mini' and tell people to run awk(1) or learn
R if they need non-mini functionality.

PS: I also agree with Michael that claiming copyright for adding a
single division operation comes across as a bit expansionist.

-- 
Poul-Henning Kamp       | UNIX since Zilog Zeus 3.20
phk at FreeBSD.ORG         | TCP/IP since RFC 956
FreeBSD committer       | BSD since 4.3-tahoe    
Never attribute to malice what can adequately be explained by incompetence.


More information about the freebsd-arch mailing list