Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 15 Jul 2015 08:06:30 +0000
From:      "Poul-Henning Kamp" <phk@phk.freebsd.dk>
To:        John-Mark Gurney <jmg@funkthat.com>
Cc:        arch@freebsd.org
Subject:   Re: add inverse option to ministat
Message-ID:  <78059.1436947590@critter.freebsd.dk>
In-Reply-To: <20150715071534.GE8523@funkthat.com>
References:  <20150715002013.GZ8523@funkthat.com> <77609.1436942964@critter.freebsd.dk> <20150715071534.GE8523@funkthat.com>

next in thread | previous in thread | raw e-mail | index | archive | help
--------
In message <20150715071534.GE8523@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@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@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.



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?78059.1436947590>