comp.databases.pick FAQ

Please note that if you really want to research the Pick or Pick-like databases, you can't beat the archives of the comp.databases.pick newsgroup conveniently stored forever at google.com

  1. What is Pick?
  2. What options are available for running Pick on a Unix machine?
  3. What newsgroups discuss the Pick and the Pick-Like Platforms?
  4. Where can I find books on Pick and the Pick-like platforms?
  5. Is the most Frequently Asked Question in comp.databases.pick "Where can I find a Programmer?!?!?"
  6. Are there any magazines or other periodicals that focus on the Pick(-like) "community"?
  7. What front-end/terminal emulation products are available for me to take "Pick(-like)" data from my legacy host down to my PC or Mac?
  8. Are there any Pick(-like) User Groups with Web Pages?
  9. Is "Native" Pick(-like) easier than "Open (Pick-like)"?
  10. Is there one particular question that appears to hold the record for the most frequently answered?
  11. Are there sites containing statistics and information related to comp.databases.pick?
  12. Charter for comp.databases.pick
  13. Previous version of comp.databases.pick FAQ, by John Lombardo
  14. In uniVerse, how to you spool from the &hold& file to a printer connected to a PC?
  15. When I sselect a particular file I get this message forward link zeo;" What causes this error?
  16. Is "Native" Pick going away?
  17. Are there any List Servers related to this newsgroup available?
  18. Do any of the vendors mentioned here have their own FAQ's?
  19. Are there any archives of every post ever made to comp.databases.pick?
  20. How can I send faxes from my Pick system?
  21. How do I test my newsreader's ability to post to comp.databases.pick?
  22. Can somebody explain to me the concept of "atomic updates" and how this prevents GFEs?
What is Pick?
========
Newsgroups: comp.databases.pick
Subject: Newbie: looking for advice
From: magneto@mail.microserve.net (Anthony Alteri)
Date: 26 Mar 1996 06:49:46 GMT

Greetings.

I hold in my hand the rather cryptic manual for the Pick Systems R83 Pick 
Operating System for the PC's.  Problem is: I know nothing at all about 
Pick or the OS.  I do however have this nicely bound 6-inch thick manual,
and too much compuer OS experience to turn dow nthe chance to learn this.
so my questions are these:
1) Why would I want to learn pick (what is it still used for, is there 
   still a true market for it)

2) how should I go about learning this with the OS installed and the manual
   on hand.

I have worked extensively with Dos, and ten versions of Unix, so any analogies
will be understood, if not correctly spelled on my part.

Thank you for any help you can offer.  Please e~mail unless someone else
posts otherwise.  We duna need to waste bandwidth on this.

--Anthony Altieri
.


========
Newsgroups: comp.databases.pick
Subject: Re: Newbie: looking for advice
From: heggers@netcom.com (Henry Eggers)
Date: Fri, 29 Mar 1996 19:28:56 GMT

Anthony Alteri (magneto@mail.microserve.net) wrote:
: Greetings.

: I hold in my hand the rather cryptic manual for the Pick Systems R83 Pick 
: Operating System for the PC's.  Problem is: I know nothing at all about 
: Pick or the OS.  I do however have this nicely bound 6-inch thick manual,
: and too much compuer OS experience to turn down the chance to learn this.
: so my questions are these:

: 1) Why would I want to learn pick (what is it still used for, is there 
:    still a true market for it)

Prolog:  Heh.  What is pick, part 37.  If we keep doing it, we may yet
figure it out.

Pick is used by people with small to middle-sized businesses, initially
because it allowed them to define the application and run the business
for a lot less computing money than with any other solution.  The reason
for that, that the data representation is isomorphic to the actual
data of the business, by a very simple morphism.  The morphism is
so simple that it is sometimes said that the data of the business is
the _same_ as the data in the computer.  That is, there is very little
'transformation' which needs to be applied to the data in order to 
turn it into the meat for an application.  Specifically, unlike RDB
data.

Typically, the people who understood the business sat down, with the
book, and wrote the application, a matter which is beginning to be
a bit bothersome, 20 years later, as individual files commonly
exceed a GB.

There around 500k machines running it world-wide.  It runs on just about
everything which moves, and can typically be bought from more than one
manufacturer for any particular 'substrate case'.  Applications almost
transport across the full range.  Carefully written applications do,
at the source level.  So, it turns out to be the 'real open system.'  :-)

As to the matter of OS's.  It was, and in the R83 version, tends still
to be, represented as an OS.  Nah, it's not.  What it does do is
demonstrate that a bunch of people can use the same machine, concurrently,
without benefit of the clergification of an OS.  OS's are (almost)
government make-work projects for programmers, and a tax on customers.

: 2) how should I go about learning this with the OS installed and the manual
:    in hand.


Which is what I did.  The manual has, unfortunately, gotten thicker.  To
no good use.  

First, you need to LOGON, being aware that the machine predates the
invention of lower-case letters.  :-)  Readapting to the uppercase
takes a few moments.  Leaving is done by LOGOFF, not logout.

Presuming that this is an unused system, you will logon to SYSPROG
(named, in the far distant past for SYStem PROGrammer, we suppose).
When you get there, you will find yourself in the MD (for Master Dictionary)
of SYSPROG.  This contains all the _verbs_, _procs_, _connectives_
and _file references_ which you can "see/use" from there.  For the moment
SYSPROG will do.  Later, you will want to CREATE-ACCOUNT and follow
the prompts.  You want SYS2, by the way.

A pick machine is made up of a collection of 'files' of identical 
topology.  In files, there are 'items'.  By analogy, pick 'items'
are like Unix/DOS files, or like records, depending on how you look
at them.  Each item is directly addressable by its name, called the
'item-id', with some variations on capitalization and punctuation.

Every item in the machine (world) is addressable by the dupple,
file-name, item-name.  There may be as many items in a file as you
want, can think of, or have disk space for.  These have an order-of-1
access speed.  The files accessable from an account are simply that
list.  Files are not hierarchical.

There is a system file, which contains items, each of which defines an
account, or more precisely, the MD file which instantiates that account.

All the items in the system have the same metaformat:  a sparse, three-
dimensional array of ascii strings, delimited by a set of three, hierarchical
metacharacters.  The delimiters separate the while item into 'attributes',
a fairly pure Spinozian reference to a 'field', being a kind of data.
Each of these fields may contain multiple instances of values of the field,
separated by 'value marks'.  This constitutes multivalued data, a topic
which stands on its own.

The procedural language, called 'basic' because that was the only
recognizable language name without an ansii standard in 1974.  It's
actually more like a structured Fortran, without real numbers or
the Format statement.  It includes data language intrinsics to operate
on these data things (to avoid the word 'object' at any cost).  It
is strongly untyped at compile time, and completely dynamically typed
at run time.

This data representation and manipulation language make it very easy to
articulate what one wants to say about one's data.

To this is added a 'report language', called a number of things, probably
'access' in the manual to which you refer.  I will call it English for
historical reasons, and for amusement.  This language includes the
verbs LIST, SORT and SELECT.  These allow you to display the contents
of a file by any order, and with any selection, and specifying which
'attributes' you want to see.  So, now, LIST MD.  Presumably something
happened.  Then LIST ONLY MD, and SORT MD...;  then SORT MD BY 2.
Then LIST MD WITH 1 = "P]".  That was all the verbs, and procs (the
ones which started 'PQ').  Procs are stored proceedure things, shell
scripts, blah, blah.  Little jobstreaming routines.

At this point you want to CREATE-FILE BP 1 3
(Ignore the 1 and 3 behind the curtain.  They involve a suggestion to
the machine what the future population of the BP (Basic Program, of
course) file will be.  It also suggests that there are two of
'them'.  Well, there are.  The dict and the data sections. )

Then you can say ED BP HELLO.

This is where you get unhappy, because all there is, is an early '70's
not-even-line editor.

I    to start inserting
     at the left margin to stop.
F    to 'flip the buffers'  (think of it as a trip to the museum)
R/string1/string2/ to replace strings
FI   to file the item

PRINT "HELLO"

Then BASIC BP HELLO to compile, and RUN BP HELLO to run.  It's not
an interpreter.

There are a few other subtlties, but that pretty well covers it.
Holler, er, contribute to the communal knowledge if I missed anythingh.

: I have worked extensively with Dos, and ten versions of Unix, so any
: analogies  will be understood, if not correctly spelled on my part.

Oops.  Could make it harder.  :-)  Pick was always best understood by
people who couldn't spell computer, much less were one.  :-)  On the
_other_ hand, it could be an interesting research project in 
conceptualization.


Regards, hve.
What newsgroups discuss the Pick and the Pick-Like Platforms?
You can find information about all of the platforms with Pick ancestry at news:comp.databases.pick.
Where can I find books on Pick and the Pick-like platforms?
At one point, in the mid-Eighties, there were quite a few books on the Pick variants available. Not so any more. With the "fragmentation" of the "community" into very specific niches, it became difficult for authors to write books for audiences where "one size fits all". We have compiled the Pick Publications Database for your research, with listings of every known or suspected Pick(-like)-related topic ever written, some of which are still avialiable. All contact information, ISBN, pricing, etc. information is provided.
Is the most Frequently Asked Question in comp.databases.pick "Where can I find a Programmer?!?!?"
Yes.
Are there any magazines or other periodicals that focus on the Pick(-like) "community"?
Yes. They are, in no particular order:

What front-end/terminal emulation products are available for me to take "Pick(-like)" data from my legacy host down to my PC or Mac?
There are a number of options available, listed here in no particluar order:

Are there any Pick(-like) User Groups with Web Pages?
Yes.

Is "Native" Pick(-like) easier than "Open (Pick-like)"?
Thread taken directly from CDP, with original formatting preserved.

(Due to the size of this thread, it has been moved to a separate file.)
Is there one particular question that appears to hold the record for the most frequently answered?
Yes, and here it is, with the orginal formatting preserved: (Due to the size of this thread, it has been moved to a separate file.)
Are there sites containing statistics and information related to comp.databases.pick?
Yes.

Charter for comp.databases.pick

"comp.databases.pick" will be a newsgroup for the discussion of the creation, administration, and use of the multitude of databases, operating systems, and applications environments which are generally known as "Pick-compatible", "Pick-like", "Pick-inspired", or "post-relational". These include, at the least:

This discussion will include, but not be limited to, programming theory and practice, database design techniques, efficient construction of application systems, practical system and database administration, experiences with and differences between various Pick-type products and implementations, technical questions and advice, and announcements of upcoming conferences, trade shows, and new products elevant to the Pick marketplace.
In uniVerse, how to you spool from the &hold& file to a printer connected to a PC?

On our old system (Fujitsu with R83) we could use "SP-ASSIGN AS" to easily route print jobs to the aux port, which worked great for PC printers. During our conversion to uniVerse (8.3.1.1 on RS6000/G30) we were pretty distraught to discover that UV didn't support the AS option and we were told that we'd have to make do without it. This was too big of a challenge to ignore & we invested a lot of effort into simulating the AS option. Eventually we came up with a solution that has been working smoothly for 6 months now. Unfortunately, it's not terminal-type independent (we're using Wyse-50/Adds-VP emulation).

I'll describe what we did & then give some suggestions for how to make it work for the vt100 & tvi925 interchangably.

     1.  in the /usr/spool/uv directory create 3 files:

        a.  pcptron:  char(27):'3'    (the Wyse/VP chars to turn
     transparent printing on.  File must contain the actual characters, not
     this BASIC coding for them.)

        b.  pcptroff: char(27);'4'    (chars to turn transparent printing
     off)

        c.  pcptr.drv (set permissions to rwsrwsrwt):

                sleep 1
                tty=`cat /pathofyourchoice/PCPTR-TABLES/$1`
                cat pcptron - pcptroff > "${tty}"

     2.  in uniVerse, create a unique print queue to use driver pcptr.drv.

     3.  in uniVerse, create PCPTR-TABLES (a small single-level file will
     do)

     4.  Copile & catalog the following BASIC program:

        SP.ASSIGN.AS

        * Start with some test to make sure user is a PC.  Our test is:
        IF @TERM.TYPE#'wy50-vpw' THEN STOP
        EXECUTE 'UMASK 111'
        OPEN '','PCPTR-TABLES' TO SPOOL.FILE ELSE STOP
        * Write TTY# to PCPTR-TABLES file, using effective USER-ID as ID
        WRITE @TTY ON SPOOL.FILE, SYSTEM(28)
        EXECUTE 'UMASK 007';* or whatever your normal UMask is
        EXECUTE 'SP-ASSIGN F88';* or whatever form queue uses pcptr.drv

     To spool a printjob to your pc's printer, just:

        SP.ASSIGN.AS (This writes your TTY# to a file & does the
     appropriate SP-ASSIGNment)

        LIST SOMEFILE (P or RUN SOMEPROGRAM (P.  This will pass the
     printjob to the pcptr.drv driver which will use the PCPTR-TABLES file
     to translate the effective user-ID (which the UV spooler automatically
     passes to the driver) back to the tty# & then redirect the job back to
     your PC along with the codes to turn the aux port on & off again.

     To spool a &hold& file entry, just do SP.ASSIGN.AS followed by SP-EDIT
     (R.

     Now, to modify the above to be able to use vt100 & tvi925 emulation
     interchangably:

     1.  instead of pcptron & pcptroff, create 4 files:

        pcptron.vt100  (I think codes are char(27):'5i')
        pcptroff.vt100 (I think codes are char(27):'4i')
        pcptron.tvi925 (I think codes are char(27):'`')
        pcptroff.tvi925 (I think codes are char(27):'a')

     2.  rename PCPTR-TABLES to PCPTR-TTYS & create another file called
     PCPTR-TERMS.

     3.  Modify SP.ASSIGN.AS to WRITE @TERM.TYPE ON TERMS.FILE,SYSTEM(28)

     4.  In pcptr.drv, add:

        termtype=`cat /pathofyourchoice/PCPTR-TERMS/$1`

        Then change the 'cat' line to:

        if [[ ${termtype} = vt100 ]]
        then
           cat pcptron.vt100 - pcptroff.vt100 > "${tty}"
        else
           cat pcptron.tvi925 - pcptroff.tvi925 > "${tty}"
        fi

Dick Bay * Acordia Lloyd Ins Svcs * DBay@aici.com * 415/541-9499 Return to CDP FAQ Main Index
When I sselect a particular file I get this message forward link zeo;" What causes this error?
Thread taken directly from CDP, with original formatting preserved.

(Due to the size of this thread, it has been moved to a separate file.)

Is "Native" Pick going away?
Thread taken directly from CDP, with original formatting preserved.

(Due to the size of this thread, it has been moved to a separate file.)

Are there any List Servers related to this newsgroup available?

There is currently one for uniVerse called the info-vmark mailing list.

To subscribe, send the following command in email to "listserv@NETCOM.COM":

subscribe info-vmark "your name"

This list is for the discussion of topics of interest to users of Vmark Software's products (UniVerse, PI-Open, HyperStar, etc.).

Do any of the vendors mentioned here have their own FAQ's?
Yes.

Are there any archives of every post ever made to comp.databases.pick?

How can I send faxes from my Pick system?
Thread taken directly from CDP, with original formatting preserved.

How do I test my newsreader's ability to post to comp.databases.pick?

A: The best way to do this is to subscribe to the newsgroup 'misc.test' and to post something there. If you have successfully posted there, various newsfeed sites around the world will send a verification of the post back to you.

In this way, you can avoid polluting newsgroups which people read with useless test posts. You may be assured that a successful post to misc.test proves you will be able to post to comp.databases.pick.

You can avoid the answerback of your test message by including the words 'test' and 'ignore as the first two words of your subject line. Then you can simply check to see if the post was posted by looking for it to appear. Put something you will recognize after the 'test - ignore' header. A subject line such as, "test - ignore: recognizable_subject_line," should work nicely.

Can somebody explain to me the concept of "atomic updates" and how this prevents GFEs?

Here follows Garrett's tutorial on GFE's in the classic Pick file structure and minor variants.

GFE's are detected by both the reader of the group and the updater, as both rely on the format of the group, and the items within it, as being correct. When the format is not, it is detected either by explicit checking or by trapping on errors in frame linkage.

Assuming that updates upon items and groups in a file are completed satisfactorily, and that the file is in good shape to begin with, then the only time a format error may be detected is while a file group is being updated.

If an item changes content, but not format or size, it may be updated in place without affecting group structure. If the file/group/item structure supports indirect items--items which reside outside of the group structure other than a group-resident pointer to the item, the item may be expanded or shrunk without affecting the group (as long as the shrinkage does not cause it to be placed back in the group).

Other than these two restrictions, one may assume that updates to an item will cause a change to the structure of the file group, which means that the update must have atomicity exclusive to all other readers and updaters of that group to avoid GFE's.

What this means is that the update must first acquire locked access to the item to prevent other updates, and then locked access to the item to prevent other readers, as all updates involve both reading and writing.

The update, or writing, of the item must have atomicity. This is usually accomplished via locking. If the update involves changing the structure of the file group then other readers may not be allowed to see the group during this time. Other updaters may not be allowed access in order to avoid the two updates from interfering with each other.

Even if the update could be performed with one instruction, locking is still required as the instruction could, "slice out," meaning that the quantum of time required for completion of the instruction is greater than the timeslice accorded the process, or the process may slice out due to frame fault.

In short, without appropriate locking, there is no atomicity to the update.

There are several types of GFE's. I categorize them as follows:

1. Errors in the format of an item.

2. Errors in the format of an item which make the group appear to have format problems.

3. Errors in the format of a group, such as incorrect frame linkage.

There are several causes of GFE's. I catagorize them as follows:

1. Incomplete update of an item/group, leaving it in an inconsistant state (a process did not complete update to the group due to a machine crash, for example, or a bug in the software, for another).

2. In-process update of the group, and improper locking schemes which allow other processes to view the group in an inconsistant state. (Early Pick machines showed these, and were called phantom GFE's because when looked for later, they were gone).

3. Incorrect update of a group, always due to a bug.

4. Overwrite of a group, caused by:
a. machine problems, such as incorrect memory mapping.
b. shared virtual space, caused either by using the old virtual contents of an address register (bugs in the software) or corrupted overflow table (also caused by bugs in the software, but also by machine crashes).

5. Human beings trying to fix something.

In short, whenever completion of an instruction must occur before another process can look at what the instruction is updating, then the instruction, or set of instructions, must be made atomic in some way, such as locking.

G.D. Hildebrand  Systems Wrangler Internet Information Services Administrator
Checking to see how cpp does stuff like catenate   |Canonical:    gdh@ACM.ORG
tokens...  Oh! Smells like ANSI's been here. We can|Temporal:     gdh@crl.com
catify or stringify, separately or together! (Perl)|  http://www.crl.com/~gdh
 
Special Thanks to:
 
 
Comments