Sun sets a poor example for UNIX culture
Posted 23 Mar 2005 at 23:18 UTC by ksb
Sun's BigAdmin Newsletter is a vehicle to promote Sun products, focus on the benefits of Solaris and UNIX in general, and brand Sun as an OpenSource player. The Techie Toolbox should provide clever examples of problem solving using all these paradigms. I was quite disapointed when I read their example script to run a command on the last Sunday of a month.
Their code is at http://www.sun.com/bigadmin/scripts/submittedScripts/last_sunday.txt, which is about 67 lines of complex code. It does not run anything, ever, it doesn't do leap years correcly,
but it does display an astonishing level of complexity.
If we want to show off UNIX we would use the tools that compute
calendars, not code one in shell.
We might use a text filter or two to show how pipes make script easier.
As a counter example, the last Sunday in a month is shown on cal's default display, and cut (or awk) can help filter out the noise, maybe:
cal | cut -c1,2 | grep '[0-9]' | tail -1
would be clear (if I wrote some prose to explain the thoughts behind it).
So a script like
#!/bin/sh
# Guard the command in argv, only run on the last Sunday of the month.
[ `date +%d` -eq `cal | cut -c1,2 | grep '[0-9]' | tail -1` ] || exit 0
exec "$@"
Might be more to the point, and correct.
My focus here should not be on the example, but the lack of vision
Sun has provided by promoting such a poor example of scripting.
In terms of style (dead assignments like to BASE), utility (the script does nothing), and UNIX culture (as above).
I use a lot of Sun products and gear. I really like Solaris 10's features. I just wish Sun was more of a UNIX company.
which is about 67 lines of complex code. It does not run anything, ever, it doesn't do leap years correcly, but it does display an astonishing level of complexity.
To me it looks like about 30 lines of fairly simple
(not particularly clever) code, which runs $COMMAND on the
last Sunday of every month when used correctly, although yes,
it isn't right for February in a leap year, (its check against
Year = 2004 is not sufficient to prevent an extra spurious
execution sometimes).
ksb: Yes, your approach is much more elegant, compact, and characteristic of certain UNIX ideas than what the author who put
that script on Sun's site came up with. But simplier? far from it.
I think it would probably be much easier to explain Sun's script to a UNIX beginner with some intermediate level of programming knowledge. The bigger script you linked to doesn't use fairly sophisticated tools like grep, cut tail, exec, and pipelines.
There is less that needs explanation because their solution is somewhat less than ingenious, which may be very appropriate for its context
in whatever explanatory purpose they're using it (although they should have at least made it correctly do what it claims to do).
Also, while this may be a less than ideal example they have posted,
it may just be that this particular script's author does not know
what they are doing.
I don't find this example to be a very compelling basis to support
the idea that Sun isn't a UNIX company.
And while I normally do not feed the trolls, this time, I found the hook ensnared and felt an urge to reply. First off, I get paid to answer questions about Sun's market viability, and second, I have been grilled nonstop recently by Microsoft executives about the viability and utility ot all manner of Unix. You might say I had done a lot of research on the subject lately. Read my diary for more.
Shell programming, like perl programming, is highly stylized. In the case of Sun in particular, if you will notice, things like Jumpstart are very complicated. Sun's init scripts and operating system shell components (% file `which which` for the curious) are hideously complicated. For two reasons. First, Solaris is hideously complicated (this isn't a bad thing, because the people who admin it are hopefully hideously smart, trained, competent, whatever). Second, Solaris has grown for, what, twenty years now?
If you are suggesting some other company is more capable of representing UNIX, or representing "the shell", you be sure to let me know. I might buy it if you told me IBM, but things about AIX are Very Wrong.
Please keep your trolling to diary entries.
I happen to have a Solaris account at my school, so I checked out the
"hideously complicated" thing called which. At one point it says
if ( "$arg:h" != "$arg:t" ) then # head != tail, don't search
if ( -e $arg ) then # just do simple lookup
echo $arg
else
echo $arg not found
endif
continue
......
else
......
if ( ! $?found ) then
echo no $arg in $path
endif
The "$arg:h" != "$arg:t" is obviously supposed to test if the
argument to which is an absolute path. And the test is wrong: doing
which foo/foo
triggers the second error message, not the first.
First, there's the "fantasy Microsoft", now there's the "fantasy Sun". If
you want to demonstrate just how great Sun is, you could've picked a better
example.
Reading the original posted URL I had a suspicion based on the "submitted" in the URL and indeed it appears that the script is not authored by Sun, but by a third party contributor, the mysterious Peter Jones. The annotation on the script is:
last_sunday
URL: http://www.sun.com/bigadmin/scripts/submittedScrip...
Description: Run scripts or code on the last Sunday of every month.
Enter the name of the script you wish to run on the last Sunday of the month in the $COMMAND variable and then run the last_sunday script from cron every Sunday.
Contact: peterj1974@yahoo.co.uk
Submitter: N/A
So it seems that Sun's crime, in addition to supposed bad taste, is to host other people's crappy open source software.
Have you consider leaving the technology industry and getting into public relations or politics? This is the lamest attack I've seen in a long time....
Uh, you guys are starting to make the Common Lisp/Scheme fist fighters look like gentlemen. Stop bickering, children.
Is there a point to all this? If the shell is capable of solving simple scripting problems like this then how about showing the solution and not picking at each other's approach/favorite OS/products/technical abilities/lack of personal hygiene? Knock it off.