[comp.sys.mac] Init Manager, please

John_M@spectrix.UUCP (John Macdonald) (12/14/87)

The following request may be for something that is already being done
at Apple.  I hope it is.

I would like to see an Init Manager.  It should be able to run a
dialogue that I will call the Init Chooser.  The Init Chooser would
present a list of available inits on the screen.  There would be a
check box beside each init to indicate whether the init is currently
selected.  Clicking the box would reverse the state.  The position
in the list would specify the order that the inits will be run.
Dragging an init would allow you to change the order.  You could
open inits from places other than the system folder.  This interface
would be useful in two places (at least).

There would be a cdev using the Init Chooser that would allow you to
choose and order the set of INIT's that are normally run when you
start up.  Current usage is to run every init in the system folder
in alphabetical order, which requires renaming and hiding in folders
to control their usage.

In addition, a Init Chooser could be used as a single method of
dynamically modifying the default init list.  The current usage is
to have some combination of (shift, caps lock, option, and command)
alter inits.  Some inits ignore all such combinations.  Some inits
put up a yes/no dialogue box if their special keyset is pressed.
Some inits cancel themselves if their special keyset is pressed.
There is no co-ordination of which ones use shift, which use
command-shift, which use caps lock, etc.  You have to look up in the
manual for each init you have and hope that there aren't too many
that overlap too much.  Some inits do not affect the screen at all
when they run - you can't tell when one finishes and the next starts.
If two inits both disable themselves if the shift key is pressed,
but you only want to disable one of them, you have to be good at
guessing when to hold the shift key down.

What I would like is for one key combination to cause the Init
Chooser to be run before ANY init is run.  It would be used to
specify the entire set of inits (and their order) for this startup.
No guessing, no conflict between which inits you want to disable.
Simple inits (10 lines of code) could be written without worrying
about techniques for disabling, etc. that would be far more work
to write than the actual init itself.  (I would expect that this
is a fairly straight-forward addition - after all, currently there
is a piece of code that finds all inits, sorts them into alphabetical
order, and then runs each one in turn.  This same code could instead
check for the shift key and then either use the default set or invoke
the Init Chooser to be the temporary set.)

In addition (and now we are getting to an area where I am not so clear
on what is needed), there should be an analysis done on why some inits
must be run before other inits.  Whenever a specific cause is found,
there could be some control flags added to inits to show how it uses
objects that are causes of potential conflicts.  (I SAID I was vague
on what is needed.)  I would guess that in most cases, one init needs
something that is provided, or modified, by another init.

It might be useful to have a control fields in an init that could
specify reuirements of the form:
    this init must be run before init FOOBAR
    this init must be run after init FOOBAR
    this init should not be run unless init FOOBAR is also run
    this init generates system resource FOOBAR
    this init modifies the appearance of system resource FOOBAR
    this init uses system resource FOOBAR

While inits could check for some of these things themselves, they
can't check for inits that run later that modify resources underneath
them.  (e.g. an init that checked what type of screen controller was
present to determine how much memory to allocate for graphics operations
would have problems if a later init turned on the 32-bit-plane
4096 x 4096 x 4096 3-D I-Want-It display that was sitting uninitialized
in Nubus slot 7 :-)

It is useful to provide this information.  The Init Chooser could
do things like check all required predecessors when you check an init.
It could maintain required ordering as you move inits.  (e.g. you move
an init to the head of the list, and the inits which must be run before
it are then moved ahead of it.)
-- 
---------  .signature eater food ---------
John Macdonald   UUCP:    {mnetor,utzoo} !spectrix!jmm
                 internet:Sorry. We're in range, but we're in no domain.
Disc-claimer: (noun) any hack's source directory

hallett@lear.steinmetz (Jeff A. Hallett) (12/15/87)

In article <338@spectrix.UUCP> jmm@spectrix.UUCP (John Macdonald) writes:
>The following request may be for something that is already being done
>at Apple.  I hope it is.
>
>I would like to see an Init Manager.  It should be able to run a
>dialogue that I will call the Init Chooser.
[...Various comments about such a Manager...]

Raise Shields!  Lock Phasers!  FIRE!

This is exactly what we DO NOT want.  It is this "let's install this,
and that..." garbage that has made DA's and Fonts such a complete pain
and what makes Suitcase so wonderful.

INIT's are great in that to activate them, you put them in the System
Folder.  To deactivate them, you take them out.  It is that simple.
To do anything else would be a level of abstration and complication
where none is needed.  This is the way DA's and Fonts should've been
in the first place, but Suitcase fixes it.

To change the order, change the name; they are executed
alphabetically.

To paraphrase a quote:  "Ineet Managers??  We don't need no steenking
Ineet Managers."

Cease Fire!  Evasive Maneuvers!

I apologize if this seems unnecessarily harsh, but it is something
that I (and probably quite a few others) feel strongly about.

Jeff

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
"The needs of the few outweigh the needs of the many"

                                 -- Kirk  (STIII)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

oster@dewey.soe.berkeley.edu (David Phillip Oster) (12/15/87)

In article <338@spectrix.UUCP> jmm@spectrix.UUCP (John Macdonald) writes:
>I would like to see an Init Manager.  It should be able to run a
>dialogue that I will call the Init Chooser.
> [ much deleted, read it, it is interesting.]

I certainly hope Apple does _not_ waste any time writing this. What a horrible
idea!

1.) You don't need it to mark an INIT as not to be run.

If you don't want an INIT to run the next time you boot, drag it out of the
system folder!

2.) You not only don't need it to sequence INITs, but that isn't the
right way to solve the problem. The right solution is: Get that buggy
software fixed, and you already have a workaround that works while you
are waiting.

If one INIT must be run before the other, one of the two is buggy. Write a 
nasty note to the tech support people at each company, and until they fix
it, rename one of them (INITs are run in alphabetical order.)

3.) The proposed design doesn't help when you are booting from a disk
with a collection of incompatible INITs.

You may have trouble booting your machine because of an INIT conflict.
An INIT Manager that runs after the system is up won't help here.
Most INITs have the feature that if you hold down some combination of
the chift, control and option keys while the machine is booting, the
INIT will just return without doing anything. These shift-sequences
are clearly documented in the manuals.

(If you do not have access to the manual, ask yourself "why?". Some
people get software from friends and forget that they didn't pay for
it. The lack of a manual on your bookshelf when you need it is a good
reminder. (Other people have site licenses and site administrators who
aren't doing the whole job.))

Now I have shown that an INIT manager is unnecessary because it does
nothing that you can't already do. But it is not just unnecessary, it
is a positively bad idea.

It is a bad idea because it increases the complexity of the user
interface. The more things like Font/DA Movers we have, the less that
a niave user can just do in the Finder, the more confusing and hard to
use the Macintosh becomes. If there already is a good simple way of
doing something, it just confuses people to give them another way. The
Macintosh achieved its current popularity in large part because of its
ease of use.  I want the Macintosh to continue to be a success. Let's
keep it easy. If the user can do something just be moving around a few
files, then let's let him. That way he is using techniques he
already knows well, and doesn't have to remember how to use a program he uses
rarely (and face it, an INIT Chooser would not get used very often.)

--- David Phillip Oster            --A Sun 3/60 makes a poor Macintosh II.
Arpa: oster@dewey.soe.berkeley.edu --A Macintosh II makes a poor Sun 3/60.
Uucp: {uwvax,decvax,ihnp4}!ucbvax!oster%dewey.soe.berkeley.edu

chow@batcomputer.tn.cornell.edu (Christopher Chow) (12/15/87)

In article <22163@ucbvax.BERKELEY.EDU> oster@dewey.soe.berkeley.edu.UUCP (David Phillip Oster) writes:
>In article <338@spectrix.UUCP> jmm@spectrix.UUCP (John Macdonald) writes:
::I would like to see an Init Manager.  It should be able to run a
::dialogue that I will call the Init Chooser.
:: [ much deleted, read it, it is interesting.]
:
:I certainly hope Apple does _not_ waste any time writing this. What a horrible
:idea!
:
:1.) You don't need it to mark an INIT as not to be run.
:
:If you don't want an INIT to run the next time you boot, drag it out of the
:system folder!

If you happen to be trying to figure what combinations of inits are crashing
your system then dragging things in and out of the system folder is a slow
way of doing things.  Plus, suppose you're hard disk has a init which causes
you Mac to crash on boot.  If you had an INIT manager type package then you
can simply tell the offending INIT not to load.  Currently, you're stuck
unless you can boot off another device.

:
:2.) You not only don't need it to sequence INITs, but that isn't the
:right way to solve the problem. The right solution is: Get that buggy
:software fixed, and you already have a workaround that works while you
:are waiting.

Agreed.  But in real-life that could be a problem.

:3.) The proposed design doesn't help when you are booting from a disk
:with a collection of incompatible INITs.
:
:You may have trouble booting your machine because of an INIT conflict.
:An INIT Manager that runs after the system is up won't help here.
:Most INITs have the feature that if you hold down some combination of
:the chift, control and option keys while the machine is booting, the
:INIT will just return without doing anything. These shift-sequences
:are clearly documented in the manuals.

Yeah, but what happens when you have a series of inits which won't load
if the shift key is down and you're only trying to prevent one of them
from loading.  Do you think you can predict correctly when to hold and
release the shift key :-)?


:It is a bad idea because it increases the complexity of the user
:interface. The more things like Font/DA Movers we have, the less that
:a niave user can just do in the Finder, the more confusing and hard to
:use the Macintosh becomes. If there already is a good simple way of
:doing something, it just confuses people to give them another way. The
:Macintosh achieved its current popularity in large part because of its
:ease of use.  I want the Macintosh to continue to be a success. Let's
:keep it easy. If the user can do something just be moving around a few
:files, then let's let him. That way he is using techniques he
:already knows well, and doesn't have to remember how to use a program he uses

Yeah, but short cuts are useful to people who need them.  The Mac interface
is already populated with various short cuts.  People can be free to ignore
any short cut they don't want to use.  Its this type of minimialistic
thinking which lead Apple not to even identify in its docs of the Mac II the
"programmer's switch".

Of course, I'm biased in this issue, since I suggested something similar
about two months ago entitled "Init 31 should be rewritten" :-)


Christopher Chow
/---------------------------------------------------------------------------\
| Internet:  chow@tcgould.tn.cornell.edu (128.84.248.35 or 128.84.253.35)   |
| Usenet:    ...{uw-beaver|ihnp4|decvax|vax135}!cornell!batcomputer!chow    |
| Bitnet:    chow@crnlthry.bitnet                                           |
| Phone:     1-607-253-6699,  USPS: 7122 N. Campus 7, Ithaca, NY 14853      |
| Delphi:    chow2            PAN:  chow                                    |
\---------------------------------------------------------------------------/

chow@batcomputer.tn.cornell.edu (Christopher Chow) (12/15/87)

In article <8203@steinmetz.steinmetz.UUCP> lear!hallett@steinmetz.UUCP (Jeffrey A. Hallett) writes:
:In article <338@spectrix.UUCP: jmm@spectrix.UUCP (John Macdonald) writes:
::I would like to see an Init Manager.  It should be able to run a
::dialogue that I will call the Init Chooser.
:[...Various comments about such a Manager...]
:
:This is exactly what we DO NOT want.  It is this "let's install this,
:and that..." garbage that has made DA's and Fonts such a complete pain
:and what makes Suitcase so wonderful.
:
:INIT's are great in that to activate them, you put them in the System
:Folder.  To deactivate them, you take them out.  It is that simple.
:To do anything else would be a level of abstration and complication
:where none is needed.  This is the way DA's and Fonts should've been
:in the first place, but Suitcase fixes it.
:
Well, you've missed a *big* point.  The wonderful thing about Suitecase is
that you can:

1.  Place resources (fonts, da's, snd's) in different files, i.e., not the
	system file.

2.  You get control over your system, in that you can activate and deactiate
	fonts, da's, and sounds as you wish by opening and closing files.

With inits since the advent of INIT31 you've got (1), but only if you put
it in the System Folder, and you don't have (2).  Currently, the only way
to get control over property (2) is to reboot. Rebooting takes a long time
and is nowhere elegant.

Or is it that you don't care at all about property (2)?

Christopher Chow
/---------------------------------------------------------------------------\
| Internet:  chow@tcgould.tn.cornell.edu (128.84.248.35 or 128.84.253.35)   |
| Usenet:    ...{uw-beaver|ihnp4|decvax|vax135}!cornell!batcomputer!chow    |
| Bitnet:    chow@crnlthry.bitnet                                           |
| Phone:     1-607-253-6699,  USPS: 7122 N. Campus 7, Ithaca, NY 14853      |
| Delphi:    chow2            PAN:  chow                                    |
\---------------------------------------------------------------------------/

simon@alberta.UUCP (Simon Tortike) (12/15/87)

I have heard there is a beast that will do part of the proposed Init Manager's
work: something called ASK- another INIT?  INITs seem to cause weird things to
happen to Falcon running on a Mac// with the colour monitor and 8-bit
video card, even when in the monochrome mode.  The fellow in our local
software shop said they had this program called ASK which would ask one
whether the listed INITs should be installed.
  -------------------  
W. Simon Tortike
Dept Min, Met &    UUCP:   {ubc-vision,ihnp4,mnetor}!alberta!simon
  Petroleum Engg   BITNET: stortike@ualtavm
Univ. of Alberta   AGT:    (403) 432-3338
Edmonton, AB
Canada T6G 2G6

hallett@lear.steinmetz (Jeff A. Hallett) (12/15/87)

In article <3185@batcomputer.tn.cornell.edu> chow@tcgould.tn.cornell.edu (Christopher Chow) writes:

>: [My Own Message]

>Well, you've missed a *big* point.  The wonderful thing about Suitecase is
>that you can:
>
>1.  Place resources (fonts, da's, snd's) in different files, i.e., not the
>	system file.
>
>2.  You get control over your system, in that you can activate and deactiate
>	fonts, da's, and sounds as you wish by opening and closing files.
>
>With inits since the advent of INIT31 you've got (1), but only if you put
>it in the System Folder, and you don't have (2).  Currently, the only way
>to get control over property (2) is to reboot. Rebooting takes a long time
>and is nowhere elegant.
>
>Or is it that you don't care at all about property (2)?

I don't believe I have missed anything.  (2) is basically N/A with
respect to INIT's.  Define INIT:  A routine or property that the user
wishes loaded AT BOOT TIME for the duration of his/her session.  INITs
that are not meant to be active throughout the whole session should be
provided with a toggle key stroke.  The fact that they do not is no
indication that Apple needs to write another inane manager; it is a
cue to INIT writers that they need to go the extra yard.

If anything, I feel that YOU have  missed the point.   The whole point
of having Suitcase is not  to activate or  deactivate anything.  It is
to increase the flexibility of your system by allowing the user to set
up "configurations"  that can be swapped  easily depending on the task
to be accomplished.  There is no point in "deactivating" a font -
there is a point in being able to swap one set of fonts for another.
The same holds for DA's.  INIT's are not this application specific (or
at least, none of the ones I've seen are - SmartQuotes is an
exception, but that is run-time toggle-able).

Jeffrey A. Hallett               (ARPANET:  hallett@ge-crd.arpa   
Software Technology Program       UUCP:     desdemona!hallett@steinmetz.uucp)
General Electric Corporate Research and Development

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
"The needs of the few outweigh the needs of the many"

                                 -- Kirk  (STIII)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Disclaimer: I  do not guarantee the validity  of the content, meaning,
or nature of anything in  this  message as my  own  sanity may  be  in
doubt.   My employer doesn't  either and   probably  won't admit  they
employ me if called.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

moriarty@tc.fluke.COM (Jeff Meyer) (12/16/87)

Well, guess what?  Such a bugger exists (to a point).  I downloaded a little
INIT off of a local BBS the other night called " Aask.INIT" -- note the
space and Aa at the beginning, so that it will be executed first at boot-up.
It works in the following manner -- if you boot up with the space bar held
down, a screen showing all the INIT files in your System Folder appears.
You then can (literarly) cross them off, either temporarily (this boot-up
only) or permanently (Aask.INIT changes the INIT's file type from "INIT" to
"xNIT"), and those INITs will not be loaded.  And, of course, you can switch
particular INITs back on at this point, too.

It's from those wonderful people over at CE software, and I'll post it to
comp.mac.binaries first chance I get.

                       "Oh dear... well, if you
                        don't get her to a very
                        powerful Shaman right
                        away -- she'll die."
                                                "We got an Elder God in the
                                                 van.  Will he do?"

                                        Moriarty, aka Jeff Meyer
INTERNET:     moriarty@tc.fluke.COM
Manual UUCP:  {uw-beaver, sun, allegra, hplsla, lbl-csam}!fluke!moriarty
CREDO:        You gotta be Cruel to be Kind...
<*> DISCLAIMER: Do what you want with me, but leave my employers alone! <*>

rmh@apple.UUCP (Rick Holzgrafe) (12/17/87)

Writing proper INITs seems to be one of the blacker of the variously-colored
magics needed to program a Mac.  (I'm writing my first INIT myself at
the moment - it's coming along, but slowly.)

I agree with Mr. Oster (et al) that an Init Manager is unnecessary.  (See
disclaimer below - I don't get to make these decisions for Apple, I'm
just giving you my opinion.)  The only real difficulty in using the Finder
as your "Init Manager" is when something bombs so bad you can't boot.

So here's some simple advice from one whose own INIT does this to him
regularly: keep a bootable floppy handy.  Put NOTHING on it or in it that
didn't come on the released system disk, and NEVER change its contents.
All it has to do for you is boot, launch the Finder, and let you access
the volume with the bad INITs.

Here at Apple, I have three hard disks and uncountable floppies lying around
my desk in various states of organization.  The first time my development
system wouldn't boot, it took me quite a while to locate a floppy that
would.  Now that floppy is sacred, and I keep several copies!

==========================================================================
Rick Holzgrafe			 | {sun,voder,nsc,mtxinu,dual}!apple!rmh
Communications Software Engineer | AppleLink HOLZGRAFE1 (I don't look often)
Apple Computer, Inc.		 | "All opinions expressed are mine, and do
20525 Mariani Ave. MS: 27-Y	 | not necessarily represent those of my
Cupertino, CA 95014		 | employer, Apple Computer Inc."

raylau@dasys1.UUCP (Raymond Lau) (12/17/87)

Maybe we don't need an INIT manager, but one thing that'll help out is some
routine which will put up a box at loading time if a certain key combo is held
down and allow the user to reequest that a certain INIT not be loaded.

This would be great for finding buggy INITs...saves the trouble of breaking
out floppies bec. the INIT crashes when booting from the HD, etc.

Someone mentioned that an INIT manager would be impossible/useless bec. it
would be loaded after INITs... recall that INITs are loaded by Apple's
INIT 31.  We as users can assume that Apple's 31 is relatively bug free.

It has also been mentioned that many INITs incl. shift sequences to abort
loading.  That's nice, but not all do!  And you can't decide which you don't
want loaded as many use the same sequence (shift).

--
Raymond Lau                       GEnie: RayLau
100-04 70 Ave.                    CIS: 76174,2617
Forest Hills, NY 11375-5133       Delphi: RaymondLau
United States of America          MacNET: RayLau
uucp: raylau@dasys1.UUCP (..{phri,cucard,bc-cis,mstan}!dasys1!raylau})
 

John_M@spectrix.UUCP (John Macdonald) (12/19/87)

In <338@spectrix.UUCP>, I made a long posting asking for a way of
controlling inits, both the order that they were run, and which
ones would be run at all; with these alternatives being specified
either for permanent effect, or for a single boot only.  Judging
from the number and intensity of the responses, this is an important
matter.

A number of responses refer to Aask, an Init which provides much
of this capability, being developed by CE Software, with an early
version already available on various bulletin boards.  I will
certainly look into this, but I think that this is something that
is important enough for Apple to do - putting it into the System
itself (a new variant of INIT 31).  I will return to this point
later.

It has been pointed out that you can disable INITs by moving them
out of the System folder, and that you can control their order by
renaming them.  This is considered to be so simple that providing
any other mechanism makes it difficult for naive users to understand
what is happening.  I agree with this only partially.  It is very
easy for a naive user to add a new INIT to their system file to
try it out and to remove if he doesn't like it.  This simplicity
should not be interfered with.  It is not easy for a naive user
to install the latest system/finder/multifinder from Apple, have
it crash on startup, and then figure out which INIT is not compatible
with the new system.  It is not easy for a naive user to determine
which INIT is causing a conflict with a new INIT that he is trying
to install.  (It is not even very easy for a naive user to determine
what other INITs he has that might be conflicting.  He can easily not
notice an init sitting in the middle of a bunch of device drivers.
He can forget that something is an init)  It is not easy for some
naive users to rename a file that they didn't create. (They are
justified too, some programs stop working if you rename them.)

There was also some mention of the confusion that might result if
it were possible to have inits that were not in the system folder.
Considering the large number and variety of different files that
MUST be in the system folder, I don't fully agree.  This is one
of the things that I especially like about Suitcase - it adds files
to the system usage class that can be collected in a folder under
the system folder.  (I would like to see blessed sub folders, so
that you can have device drivers in one, inits in another, DA's
and their control files in another, etc.)  (Suitcase also brings
back the day where a "usable" system file could be copied to a
floppy.  If you haven't got Suitcase, look into it.  disclaimer:
I just a happy customer.)

If trying to determine what init causes a crash means that you
must reboot from floppy, move various inits in/out of your system
folder and retry and see if it crashes again, then it will take
a very long time (especially if you have many INITs).

Forexample, if I know that one of ten INITs causes a problem, I
would toss them all into a sub-folder, pull them back out two
or three at a time and reboot.  If it crashes, I reboot from
floppy and toss two of them back.  If it succeeds, I pull two
or three more.  If the proposed init manager existed, I would
simply reboot once, check all the INITs for loading, and check
the single-step box.  The manager would run the inits, one at a
time, telling me which one it was about to run as it went.
When it crashed, I would know which one (probably) caused the
trouble - next time I would uncheck that candidate and try to
load it all.  Thus, in two passes, I would find and eliminate
a single INIT that crashed with that system.  (Of course, it
would take longer to determine one that crashed after it started
or a combination that crashed together, but this type of problem
would still be easier to resolve with an init manager control.)
Note that a naive user would probably be able to use the second
method as efficiently as an expert user, it is simple.  However,
with the current setup, he would likely run add them one at a time
and require more reboots, or even worse, remove them one at a time,
and have more crash and reboot from floppy sequences, taking much
longer.  A naive user is also less likely than an expert developer
type user to be able to guess which init is the most likely to
have caused the problem, or which had definitely started running
before the crash.

To not reduce the current simplicity, I had expected (but not
stated in my posting) that new inits could still be added by
putting them into the system folder - I hadn't determined any
specific rule about how they would fit into the ordering.

I don't trust that all of the current and future init writers
will provide a mechanism that will allow boot-time choice of
inits - they already don't.  (If I depress shift-whatever and boot,
I get some inits that don't install themselves, some that put
up a box asking if I want them or not, and some that install
themselves regardless.  I might also get finder instead of multi-
finder, and some other Apple internal devices might change their
behaviour.)  An Apple-provided machanism would ensure that init
writers don't have to do the 'right' thing - a 'righter' mechanism
than they could possibly provide would already be there.

A number of followups made the assuption (or outright statement)
that inits that must be run in a specific order are "buggy".  I
think that this assumption may be already wrong, and is certainly
likely to be wrong in the future.  The Macintosh has already shown
that it is dangerous for a program to make assumptions about the
environment it is running in.  What is a fixed piece of hardware
on todays Mac may turn out to be one of the possible pieces of
hardware available on next years Mac, and may be dynamically
simulated to any of them (without rebooting after a switch) on
some other Mac.  (The specific example I am thinking of here is
screen size - we now have large, small and simulated (Stepping
Out) screens (I don't know whether Stepping Out allows the screen
size to change dynamically, but certainly the monitor cdev on a
Mac II allows the "screen" to change shape without rebooting.))
One of the means available for simulated hardware changes is inits.
(There is a shareware or public domain init called Big Screen which
simulates a large screen.  I don't know if Stepping Out is also
an init.)  This same principle of not making assumptions about
the underlying universe lead to the addition of the SysEnvirons
trap.  Anything that might change in the future should be determined
through software, even if it is fixed on all current hardware.

If an init provides a new or dramatically changed appearance to
the "machine" it might affect the way other inits should operate.
Imagine an init which creates a "spooling" process which watches
all serial ports for some sort of request (perhaps the Mac is
being used to provide LaserWriter access to a number of lesser
machines).  It would determine from the system how many serial
ports there were on the system, so that it doesn't just blindly
assume that will always be limited to two.  Now imagine a second
init, which interacts with the Ethernet board.  It sets up a process
to handle requests to act as if it were a serial port.  It even tells
the system that it is acting like a serial port and the system adds
it to its list.  Unless it runs first, the "spooler" init will
not notice it, and not be able to watch this "serial port".  I
don't think that there is anything that either init writer could
do to make them work together if the inits are run out of sequence
(at least not if the init writers did not know of each others work
while they were writing their init).  While this specific example is
flawed (I expect that these things would be better off as device
drivers instead of inits, although they still may have problems
getting amicably started up), I think that the principle holds.
I am sure that there could be inits that could benefit from each
other if run in the proper order, and be perfectly useful on their
own, but which could only work together sensibly if run in a certain
order.  This is what I hoped would be addressed with the extensions
- some way hohaving init that will work into the future with other
inits that change the basis of the machine out from under them.  Given
some method of specifying what system resources an init asked about and
used, and what resources it modified the appearance of, the computer
could do a lot of the work of ordering inits automatically.  That would
certainly be the least taxing demand on the naive user of all!

One final comment. One response said:
::Most INITs have the feature that if you hold down some combination of
::the chift, control and option keys while the machine is booting, the
::INIT will just return without doing anything. These shift-sequences
::are clearly documented in the manuals.

The "shift key disables 5 inits I want as well as the one I don't"
and the "the bad init doesn't allow for disabling" problems I mentioned
above make the manual-documented sequence not particularily useful.

In addition, I have started to regard looking something up in the manual
as a subtle hint that the user-interface may be lacking.  Having to look
something up in the manual of every init you have is a strong signal that
the user-interface is lacking.  (The fact that looking it up doesn't help
even more so.)

I have been lead more and more toward this opinion by the Macintosh.
(Before the Mac, I memorized manuals without complaint; I was not an
easy convert to this contrary view.  I strongly believed that any
serious program obviously would require a manual, and would require
studying the manual before one could become proficient at using such
a program.)

As an example, I tell most of our users that they should not use Microsoft
Word, but should use MacWrite.  The learning required for Word is too great,
most of our users do not do enough word processing to EVER become proficient
with Word, and its non-standard interface is too much of a barrier for casual
use.  We do have some Word experts, anyone who has a need for the advanced
capabilities of Word can still get them - by going to an expert.  With
MacWrite (soon to be WriteNow, I expect), they are already expert enough
to do most common word processing tasks without assistance.

I apologize for the length of this posting.  I hope I am explaining more
than I am burying with the length.
-- 
John Macdonald   UUCP:    {mnetor,utzoo}             !spectrix!jmm
                 UUCP:    {utecfb,ontmoh,spectrix}   !bml!jmm
(formerly of Spectrix, still using their computer for news)
Now working for Brown Manufacturing, Ltd. (soon to have their own feed)

John_M@spectrix.UUCP (John Macdonald) (12/19/87)

In <338@spectrix.UUCP>, I made a long posting asking for a way of
controlling inits, both the order that they were run, and which
ones would be run at all; with these alternatives being specified
either for permanent effect, or for a single boot only.  Judging
from the number and intensity of the responses, this is an important
matter.

A number of responses refer to Aask, an Init which provides much
of this capability, being developed by CE Software, with an early
version already available on various bulletin boards.  I will
certainly look into this, but I think that this is something that
is important enough for Apple to do - putting it into the System
itself (a new variant of INIT 31).  I will return to this point
later.

It has been pointed out that you can disable INITs by moving them
out of the System folder, and that you can control their order by
renaming them.  This is considered to be so simple that providing
any other mechanism makes it difficult for naive users to understand
what is happening.  I agree with this only partially.  It is very
easy for a naive user to add a new INIT to their system file to
try it out and to remove if he doesn't like it.  This simplicity
should not be interfered with.  It is not easy for a naive user
to install the latest system/finder/multifinder from Apple, have
it crash on startup, and then figure out which INIT is not compatible
with the new system.  It is not easy for a naive user to determine
which INIT is causing a conflict with a new INIT that he is trying
to install.  (It is not even very easy for a naive user to determine
what other INITs he has that might be conflicting.  He can easily not
notice an init sitting in the middle of a bunch of device drivers.
He can forget that something is an init)  It is not easy for some
naive users to rename a file that they didn't create. (They are
justified too, some programs stop working if you rename them.)

There was also some mention of the confusion that might result if
it were possible to have inits that were not in the system folder.
Considering the large number and variety of different files that
MUST be in the system folder, I don't fully agree.  This is one
of the things that I especially like about Suitcase - it adds files
to the system usage class that can be collected in a folder under
the system folder.  (I would like to see blessed sub folders, so
that you can have device drivers in one, inits in another, DA's
and their control files in another, etc.)  (Suitcase also brings
back the day where a "usable" system file could be copied to a
floppy.  If you haven't got Suitcase, look into it.  disclaimer:
I just a happy customer.)

If trying to determine what init causes a crash means that you
must reboot from floppy, move various inits in/out of your system
folder and retry and see if it crashes again, then it will take
a very long time (especially if you have many INITs).

Forexample, if I know that one of ten INITs causes a problem, I
would toss them all into a sub-folder, pull them back out two
or three at a time and reboot.  If it crashes, I reboot from
floppy and toss two of them back.  If it succeeds, I pull two
or three more.  If the proposed init manager existed, I would
simply reboot once, check all the INITs for loading, and check
the single-step box.  The manager would run the inits, one at a
time, telling me which one it was about to run as it went.
When it crashed, I would know which one (probably) caused the
trouble - next time I would uncheck that candidate and try to
load it all.  Thus, in two passes, I would find and eliminate
a single INIT that crashed with that system.  (Of course, it
would take longer to determine one that crashed after it started
or a combination that crashed together, but this type of problem
would still be easier to resolve with an init manager control.)
Note that a naive user would probably be able to use the second
method as efficiently as an expert user, it is simple.  However,
with the current setup, he would likely run add them one at a time
and require more reboots, or even worse, remove them one at a time,
and have more crash and reboot from floppy sequences, taking much
longer.  A naive user is also less likely than an expert developer
type user to be able to guess which init is the most likely to
have caused the problem, or which had definitely started running
before the crash.

To not reduce the current simplicity, I had expected (but not
stated in my posting) that new inits could still be added by
putting them into the system folder - I hadn't determined any
specific rule about how they would fit into the ordering.

I don't trust that all of the current and future init writers
will provide a mechanism that will allow boot-time choice of
inits - they already don't.  (If I depress shift-whatever and boot,
I get some inits that don't install themselves, some that put
up a box asking if I want them or not, and some that install
themselves regardless.  I might also get finder instead of multi-
finder, and some other Apple internal devices might change their
behaviour.)  An Apple-provided machanism would ensure that init
writers don't have to do the 'right' thing - a 'righter' mechanism
than they could possibly provide would already be there.

A number of followups made the assuption (or outright statement)
that inits that must be run in a specific order are "buggy".  I
think that this assumption may be already wrong, and is certainly
likely to be wrong in the future.  The Macintosh has already shown
that it is dangerous for a program to make assumptions about the
environment it is running in.  What is a fixed piece of hardware
on todays Mac may turn out to be one of the possible pieces of
hardware available on next years Mac, and may be dynamically
simulated to any of them (without rebooting after a switch) on
some other Mac.  (The specific example I am thinking of here is
screen size - we now have large, small and simulated (Stepping
Out) screens (I don't know whether Stepping Out allows the screen
size to change dynamically, but certainly the monitor cdev on a
Mac II allows the "screen" to change shape without rebooting.))
One of the means available for simulated hardware changes is inits.
(There is a shareware or public domain init called Big Screen which
simulates a large screen.  I don't know if Stepping Out is also
an init.)  This same principle of not making assumptions about
the underlying universe lead to the addition of the SysEnvirons
trap.  Anything that might change in the future should be determined
through software, even if it is fixed on all current hardware.

If an init provides a new or dramatically changed appearance to
the "machine" it might affect the way other inits should operate.
Imagine an init which creates a "spooling" process which watches
all serial ports for some sort of request (perhaps the Mac is
being used to provide LaserWriter access to a number of lesser
machines).  It would determine from the system how many serial
ports there were on the system, so that it doesn't just blindly
assume that will always be limited to two.  Now imagine a second
init, which interacts with the Ethernet board.  It sets up a process
to handle requests to act as if it were a serial port.  It even tells
the system that it is acting like a serial port and the system adds
it to its list.  Unless it runs first, the "spooler" init will
not notice it, and not be able to watch this "serial port".  I
don't think that there is anything that either init writer could
do to make them work together if the inits are run out of sequence
(at least not if the init writers did not know of each others work
while they were writing their init).  While this specific example is
flawed (I expect that these things would be better off as device
drivers instead of inits, although they still may have problems
getting amicably started up), I think that the principle holds.
I am sure that there could be inits that could benefit from each
other if run in the proper order, and be perfectly useful on their
own, but which could only work together sensibly if run in a certain
order.  This is what I hoped would be addressed with the extensions
- some way of having init that will work into the future with other
inits that change the basis of the machine out from under them.  Given
some method of specifying what system resources an init asked about and
used, and what resources it modified the appearance of, the computer
could do a lot of the work of ordering inits automatically.  That would
certainly be the least taxing demand on the naive user of all!

One final comment. One response said:
::Most INITs have the feature that if you hold down some combination of
::the chift, control and option keys while the machine is booting, the
::INIT will just return without doing anything. These shift-sequences
::are clearly documented in the manuals.

The "shift key disables 5 inits I want as well as the one I don't"
and the "the bad init doesn't allow for disabling" problems I mentioned
above make the manual-documented sequence not particularily useful.

In addition, I have started to regard looking something up in the manual
as a subtle hint that the user-interface may be lacking.  Having to look
something up in the manual of every init you have is a strong signal that
the user-interface is lacking.  (The fact that looking it up doesn't help
even more so.)

I have been lead more and more toward this opinion by the Macintosh.
(Before the Mac, I memorized manuals without complaint; I was not an
easy convert to this contrary view.  I strongly believed that any
serious program obviously would require a manual, and would require
studying the manual before one could become proficient at using such
a program.)

As an example, I tell most of our users that they should not use Microsoft
Word, but should use MacWrite.  The learning required for Word is too great,
most of our users do not do enough word processing to EVER become proficient
with Word, and its non-standard interface is too much of a barrier for casual
use.  We do have some Word experts, anyone who has a need for the advanced
capabilities of Word can still get them - by going to an expert.  With
MacWrite (soon to be WriteNow, I expect), they are already expert enough
to do most common word processing tasks without assistance.

I apologize for the length of this posting.  I hope I am explaining more
than I am burying with the length.
-- 
John Macdonald   UUCP:    {mnetor,utzoo}             !spectrix!jmm
                 UUCP:    {utecfb,ontmoh,spectrix}   !bml!jmm
(formerly of Spectrix, still using their computer for news)
Now working for Brown Manufacturing, Ltd. (soon to have their own feed)