[comp.sys.next] Why no source for News?

wjs@milton.u.washington.edu (William Jon Shipley) (11/15/90)

Christopher Lane writes:
>@begin(pyrotechnics)
[...]
>Eric's 'stand on my shoulders and reach even farther' comment is right on the
>mark.  Why aren't the archives loaded with well written, useful object classes
>(with source) that others can use to build even more powerful programs?  Why
>is there a 'binaries' directory at all on the NeXT archive?  If 'News' came
>with source, maybe others would have fixed the bugs, returned them to the
>author and we'd have a version that didn't blow up routinely.  The archive
>maintainers shouldn't even accept 'binary only' donations (IMHO).
[...]

Well, I imagine you'll get lots of commentary about the rest of your post,
but I felt, as the author of News, gee, I was in a unique position to respond
to this paragraph.

I guess it hurts a little bit to be flamed for a piece of software I spent
quite a bit of time writing, and then just gave away.  But, beyond that, I
understand your point, and in fact I agree with it.

News doesn't have sources because News 0.75 is not a finished program.  It has
some bugs (crashing is uncool), and it has a couple of really obvious features
which I haven't written yet.

News is my baby.  It's not that I don't trust any other programmer with my
code, it's that I don't trust EVERY other programmer with my code.  When I
implement Save Article, for example, I want News to put the article in your
~/News/comp/sys/next directory, and then every time you enter comp.sys.next
with News that article will appear (as read, of course, so you'll only see
it if you have the "read articles" button checked).

This is the behavior I want for the program that has my name on it.  If other
people implemented this feature, they might do it differently.  There are
two possibilities, then.  One is the programmer would give away his new
News and some people would use it, and I'd add some features to my News and
some people would want them and use it, and there'd be a zillion versions
floating around all of which work differently.

The other possibility is that I could ask everyone to send their changes back
to me, and I'd review them.  However, I really don't want to incorporate
changes that aren't to the specs I've already thought of, so I'd end up telling
people what I want them to write.

Now, how many people out there in netland want to be taking specs from a 21
year old hacker on how to modify some software that you aren't being paid
to work on?  Anyone?

I'm serious.  I've had a couple of offers to help me.  I responded to one
asking the guy what kind of experience he had, since I *DO* want News to be
the kind of code that people can look at and learn from.  He didn't respond.
The strong feeling I get is no one wants to be tested before doing volunteer
work; gift horses themselves resent being looked in the mouth.

If someone like Roger Rosner offered his help with News, I'd accept it in a
second.  Eric Ly looked at my code, for example, but he was too busy to help
out (no slight on him, he REALLY was).

News is *NOT* a hack.  It is a completely new, totally object-oriented piece
of software.  Each Newsgroup is an object, which has a List of Articles which
are also objects.  When you read an article, for example, I mark it as read
by sending [currentGroup markAsSeen:current].  When you write out your .newsrc,
I just send a [newsgroupList sendMessage:@SEL(writeSelf) all:YES] (or whatever
that message is, you get the point).

The only ugly part of the code is the displaying of articles, and that is
because nntp turned out to be too slow to read in all the articles at once,
and so I had to hack it to only read in the headers for the articles that
are displayed.

My point here is that I *AM* trying to write code that's reasonably re-usable
and has some possibility of teaching someone something.  In fact, one of the
new classes I created is a ColumnMatrix, which is like a matrix except 1)
it has only one column, and (more importantly) 2) it allows you to hide some
of the items in the matrix.  (Like, caught-up newsgroups or read articles,
peut-etre?)  Which items will be hidden is decided in a subclassed method,
isItemVisible:(item *)myItem.

I've offered this class to the guy at NeXT who was collecting them, I've had
no word back after sending him the header file.

Wouldn't it be nice if this class were completely cleaned up and documented?
You bet.  Wouldn't it be nice if William graduated and got a job?  Doubly
so.  Man, I'd love to sit around and write these classes all day (I've got
a zillion ideas, write me if you're curious), but I've gotta eat somehow.

If the archive people didn't accept binary versions, there'd be no News out
there right now.  News 0.75 is a demo, to show people what I'm working on
and get some feedback.  I've now got a list of requested features as long
as my arm (YES, I'LL ENABLE PRINTING AND SAVING!), and I'm ready to crank out
the final version.

Finally, if I may throw out some other comments on this debate.. On shareware:
I doubt I'll ever put out a shareware program, because I just don't want people
to feel bad about using my software.  If someone REALLY wanted to send me money
for writing News, he would.  I'd rather let the rest use it without always
feeling bad.  (Yes, I used Stuart, No, I didn't pay, and Yes, I felt bad...
By the way, Scott, nice job.)  Personally, and this may sound really wierd,
what I like about programming is the fame.  Go figure.  I love to get mail
saying, "Hey, I love News!"

And, about EPS: He's been rather brusque at times.  When I first posted ideas
about News on the net (my homegrown format for posting graphics, specifically),
he came down pretty hard on me for not going with a standard.  But, hey,
different people just have different personalities.  He sure knows his stuff,
and sometimes it's funny watching him toast on people who ask the REALLY
obvious questions.  I've met him in person, and he seems like a nice guy.
Like, much nicer than he did on the network.  Anyways, I'd rather have a...
less-than-tactful person who's smart and on my side than a really tactful
person working for the enemy.

-william shipley

mouse@thunder.mcrcim.mcgill.edu (der Mouse) (11/18/90)

In article <11162@milton.u.washington.edu>, wjs@milton.u.washington.edu (William Jon Shipley) writes:
> Christopher Lane writes:
>> @begin(pyrotechnics)
> [...]
>> Eric's 'stand on my shoulders and reach even farther' comment is
>> right on the mark.  Why aren't the archives loaded with well
>> written, useful object classes (with source) that others can use to
>> build even more powerful programs?

Well, I could suggest a few reasons, but let's stick to the point....

>> Why is there a 'binaries' directory at all on the NeXT archive?  If
>> 'News' came with source, maybe others would have fixed the bugs,
>> returned them to the author and we'd have a version that didn't blow
>> up routinely.  The archive maintainers shouldn't even accept 'binary
>> only' donations (IMHO).

> Well, I imagine you'll get lots of commentary about the rest of your
> post, but I felt, as the author of News, gee, I was in a unique
> position to respond to this paragraph.

> I guess it hurts a little bit to be flamed for a piece of software I
> spent quite a bit of time writing, and then just gave away.

I don't feel you were being flamed for the software per se as much as
for your choice to make it binary-only.  It certainly would never have
found its way onto my machine, if I had one capable of running it.  I
have a hard enough time accepting binary-only software from the
hardware vendor; no way am I going to stand for binary-only in a case
like that where I don't have to.

> When I implement [...description of the way Save Article will work...]

> This is the behavior I want for the program that has my name on it.

Well, I suppose it's your program.  But it seems a little odd to *want*
to be known as an author of completely unconfigurable software.  (With
source, at least it can be configured by hacking on the source, even if
there is no run-time configuration.)  *I*'d be almost ashamed to
release such a thing - and in fact I haven't: I have never released a
binary-only program.  (Before a few who know me dump on me about mcsh:
I am restricted to giving out binary copies by our license with AT&T, I
don't consider it distribution software (I don't plug it, for example),
and if someone doesn't want a copy because I can't give out source, I
will entirely understand.  If I could separate out my changes from the
licensed code, I would do so, and distribute the changes.)

> The strong feeling I get is no one wants to be tested before doing
> volunteer work; gift horses themselves resent being looked in the
> mouth.

As is only natural.  (You seem to be a bit of an example of this
yourself....)

> News is *NOT* a hack.  It is a completely new, totally
> object-oriented piece of software.  [...]

If we can't get at the source, it might as well be spaghetti assembly
for all the difference it makes.

					der Mouse

			old: mcgill-vision!mouse
			new: mouse@larry.mcrcim.mcgill.edu

eps@toaster.SFSU.EDU (Eric P. Scott) (11/19/90)

I'm swayed by the argument.  Well, I only have one binary-only
out there now, so if you don't mind a "kids, don't try this at
home" lecture, I'll rectify that.

Some of you have seen narcissus, and wondered why I didn't
release source immediately.  Well, there were two reasons;
one, because I'm being just a tad naughty (heh heh), and,
two, well, never mind, I don't want to talk about vaporware.


A couple of people asked about how to change the NeXT logo on top
of the dock.  This window is really easy to get to, since the
Window Package gives it a name--Beepwindow--so named because it's
used to display the visual indication if you so chose in
Preferences.

Aha, you say, just composite an image onto Beepwindow, right?
Wrong.  It will revert to the NeXT logo the next time you
double-click on it.

So what's really going on here?  Well, those of you who've worked
with the Application Kit's Bitmap class know that Bitmaps are
rendered to off-screen windows.  \Where/ they end up depends on
whether they were created with NX_NOALPHABITMAP, NX_ALPHABITMAP,
NX_UNIQUEBITMAP, or NX_UNIQUEALPHABITMAP, how big they are, and
the order in which they were created.

--- the following description is for 1.0/1.0a systems ---
Windows in the dock are all of the same type (NX_TOKENSTYLE),
and, not too surprisingly, the initial Workspace Manager's tokens
all live right next to each other.  Of course, when the Workspace
Manager starts, all it knows about is the NeXT logo and the black
hole.  Actually, there isn't one black hole--there are seven of
them, and they're all tucked away in a 640x64 window:

+----+----+----+----+----+----+----+----+----+.....
| Ne | BH | BH | BH | BH | BH | BH | BH |    |    .
| XT |empt|full| A1 | A2 | A3 | A4 | A5 |... |    .
+----+----+----+----+----+----+----+----+----+.....
(sorry, usenet isn't multimedia yet :-) )

The tenth slot is all white.  Let me explain how the black hole
works before the rumors start: Normally you see one of two
black holes:  the one with the black center indicates that
.NeXTtrash is empty, the one with the crap in it means that it's
time to click Utilities>Destroy Deleted Files.  The other five
provide the animation for when you drag something into the black
hole.  Does this mean the black hole ISN'T gone forever in 2.0?
Heh heh heh.  (And if someone would be kind enough to send me the
corresponding recycler images, I'd love to stuff them into a
running 1.0 system to play a little practical joke on someone...)

The other two windows need a little more explanation.  The one
with the ... in it is the template for "docked Application"
tokens.  There's no icon in it.  The one with the NeXT does
double duty: it's not just what appears at the top of the dock:
it's also the template for "running Application" tokens.  If
you overwrite it with too big an icon, you'll know soon enough!

...which brings me to "well, now that I know how it works, how do
I find this magic window?"  This is where we get into "kids,
don't try this at home."  Unless, of course, you have a NeXT at
home.  :-)

This is an offscreen bitmap.  There is no symbolic name for it.
DPS doesn't want to make it easy for you to get at, either.  It's
easy to find something that's onscreen--you ask for screenlist
and you get an array of window numbers, but this isn't onscreen,
so it's not in the screen list.  There isn't anything that gives
you this information; sure, dumpwindows will tell you that there
are windows "out there" but it won't give you their handles.
So I brute-force it--create a stopped context and take shots in
the dark until I hit something.  If it's got the right owner and
right size, I've probably found it, but I ensure I've found
exactly one candidate before saying "yeah, I got The Real McCoy."

The rest of this should be pretty straightforward.  You should
recognize the "compositerect with Dover" from the Draw Example
(thanks, Paul!)  It's a safe assumption that my call to
NXImageBitmap will croak on RGB or RGBA files--I've ripped off
Draw here too.  The rest is original code--if it looks
strangely familiar that's because I used it in the latter half
of iwf.

This is up for anonymous FTP on sutro.sfsu.edu, but it's small
enough that I might as well attach it here.

Oh--if you want to see what the token gallery looks like,
make a copy of narcwraps.psw, remove everything through
(and including) the first defineps, the matching endps
and everything beyond, replace the final logowin with =
and run  pft -f /whatever/filename

pft will then display the window number.  If, for example,
it's 20, say
Above 0 20 systemdict /orderwindow get exec

You can't just say orderwindow, since the Window Package
redefines it, and Bitmap windows don't have window
dictionaries, which confuses the redefined orderwindow.

Out 0 20 systemdict /orderwindow get exec
puts things back.

Those of you with 2.0 beta systems, get busy!

					-=EPS=-
-------
begin 644 narcissus-src.tar.Z
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
6X)?\^I.TXG[E+ZU5OOB7B?!?ILMN`5J.
`
end