Also see Pick.pdf in the Rocket U2 UV11.1 document set. It documents the 
differences between D3/PICK and UniVerse.


-----Original Message-----
From: u2-users-boun...@listserver.u2ug.org 
[mailto:u2-users-boun...@listserver.u2ug.org] On Behalf Of Symeon Breen
Sent: Thursday, 7 April 2011 7:42 PM
To: 'U2 Users List'
Subject: Re: [U2] Databasic conversion

Thanks Bill and Mecki.

 

As ever some fantastic information from this group.

 

 

 

 

From: u2-users-boun...@listserver.u2ug.org
[mailto:u2-users-boun...@listserver.u2ug.org] On Behalf Of Bill Haskett
Sent: 06 April 2011 23:31
To: U2 Users List
Subject: Re: [U2] Databasic conversion

 

Symeon:

I converted our application from D3 to UniData.  There was quite a bit
of work.  I believe I started in Dec 2005 and finished at the end of
March 2006 (I had to work a lot of overtime), and beta tested through
Aug 2006.  We went live with one our clients in Sep 2006 and then 10
more moved over in Nov and Dec 2006.  I spent the next six months moving
most of the rest of our clients to UniData.  I'd say I spent about a
thousand man hours on this.  It could have been half that, but I had no
help from anyone (including IBM/RS) except Colin Alfke in Canada.

I have a lot of emails on this, but the following is one in particular.

HTH,

Bill

------------------------------------------------------------------------
----- Original Message -----
*From:* Bill Haskett
*To:* 'Bob Little'
*Date:* 2/28/2006 6:29 AM
*Subject:* Re: [U2] Changes to mail list configurations

We're mostly done but have spent about 140 man-days.  We spent a fair
amount of our time grinding away with the line editor.  We were
constantly editing data, dictionaries, VOC entries, and BASIC programs. 
We were able to port a few utilities to UD to help (a TCL shell, a file
listing program, a dictionary listing program, and a screen-scroll
program).  We feel that we could have saved about 30% of our time if
there was a decent screen editor, as the productivity was extremely low
with the "stone age" line editor (AE).  This would have saved us about
40 man-days!  We spent about 20% of our time messing around with moving
D3 to UV to UD and all subsequent data moves.  This would have saved us
around 30 man-days.

There weren't too many surprises but there were some.  Here are the
major ones:

1) There was absolutely no interest by IBM in helping us,
2) There were absolutely no utilities to assist in the conversion.  When
I consulted at a large UD user they had converted from Sequoia several
years before and they said there were numerous utilities that converted
their dictionaries and BASIC programs.  These were unavailable to us.
3) We had to convert to UV first then to UD...well, not actually. We had
to move our data to UV, convert the dictionaries, then move to UD. 
However, we eventually found a utility to restore a D3 account to
UniData, which helped tremendously during our client upgrades.
4) There is no (or virtually no) security in U2.  It's handled by the O/S.
5) There are no "users" in U2.  They're managed by the O/S.
6) UD requires a lot more interaction with the O/S.  For instance, since
UD has no 'Q' pointers you have to create file pointers using
environment variables.  In Windows, this requires the creation of the
environment variables on the server...very strange.
7) There is no backup facility in UD.
8) I-Descriptors don't apply to each value in a multi-valued field.  One
has to mange the multi-values as though the dbms was never designed to
have multi-values.  There are separate functions for multi-values and if
one uses a called subroutine, the subroutine has to manage the
multi-values and return an MV array back.

There are also some peculiarities to UD (things you wouldn't believe). 
For instance:

1) COPY MYFILE '1''2''3'
   TO:(ANOTHERFILE
...sometimes doesn't work at all.  COPY, BASIC, CATALOG, DELETE-LIST,
and numerous other VERBS can't handle multiple items in the command
line.  You have to SELECT the items first before executing these verbs.
2) You can't create an account from within UD.  You have to open a DOS
window, create a directory, and execute a DOS command from within this
new directory.
3) A new UD account has all kinds of new UD files created within the
account.  Not really a big deal but surprising.
4) Managing your TERM settings is difficult.
5) Some default settings are weird.  For instance, when compiling a
BASIC program it gets globally compiled and cataloged...like a new MV
user wants this by default?! :-)
6) Items in the SAVEDLISTS file have a number appended to the end so one
won't be able to manage these without using the ...LIST commands.  For
instance "SAVE-LIST BILL" ends up in the SAVEDLISTS file as "BILL000".

Some other things to expect:
+ SAVED LISTS
    - In D3 you can "SELECT-LIST ME YOU" and you get a list of both lists.
      In UD you need to "SELECT WHATEVER TO 1" then "SELECT WHATEVER TO 2"
      then "MERGE.LIST 1 UNION 2 TO 3" and hope it works. :-)
    - In other MV you can "DELETE-LIST ME YOU" and have them both deleted.
    - The lists have different keys than the list name.  For instance if I
      do a "SELECT VOC" then "SAVE-LIST BILL" the item in the SAVEDLIST
file
      will be named "BILL000".  So don't expect to be able to "SELECT
      SAVEDLIST 'BILL'" and get the list.
    - Be careful about using "DIR" files.  They often have restrictions in
      what characters are allowed in the key.  So, if you create some items
      in SAVEDLISTS that might look like "special*bill*1*0" then this will
      have to be changed to something like "special_bill_1_0".
   - When we do some things with a select list we're informed we need to
      verify our next command before we can continue.  For instance,
      :SELECT DTABP = "[LIST]"
      83 records selected to list 0.
 >COPY DTABP
      TO: (TEMP
      get id's from select list:B.LIST(Y/N)?
   well duhhh! :-)  I haven't figured out what all does this nor how to
fix it.
+ BASIC syntax
  .Selecting to a list "SELECT FILEVAR TO MYLIST" requires the list
variable "MYLIST" to be initialized first. Others have noted this.
  .You can't use a KEYWORD as a variable (probably shouldn't anyway).
  .On subroutines used by dictionaries you need a dummy passed variable
      001 SUBROUTINE (OutVal, InVal)
   then call it from a dictionary by
      002 SUBR("MySub", @ID)
   so if you have a subroutine called by both BASIC and dictionaries,
   one should expect some re-engineering.
  .Be careful about compiling and cataloging.  Make sure you know
   where the object is stored and where the catalog entry is made.
   It is not always true that verbs will be in your VOC.
  .Be careful about using "NOT(ASSIGNED)" to figure out if a file
   has been opened.  First, UD doesn't use "ASSIGNED" it uses
   "UNASSIGNED".  Second, if a file variable is declared as a named
   common variable it is assigned a value (zero or null).  In this
   case you'll have to use "FILEINFO()" to determine if the file is
   opened, but you can't use this function if the file variable hasn't
   been assigned a variable yet because it's not in named common.
  .There's no "FOLD()" function (you have to create a subroutine).
  .When using a BASIC call from a dictionary one should pass in
   @FILE.NAME, @RECORD, and @ID, since the program has no way to   get
this information, unlike UV and D3 (not sure about jBase, etc).
  .The labels for named common cannot be longer than "7" bytes.  In
   Pick mode, the program won't compile while in "U" mode only the
   first 7 bytes are used.
+ CASING
  .Be very careful on casing.  Fortunately I didn't have too much
   trouble with this, but KEYWORDS should be upper-cased (although
   I think there's a UDT.OPTION for this.
+ UNIQUERY
  .Be careful about the Prime syntax.  ECLTYPE U uses PRIME so if you
   think "LIST MYFILE = "KEY]" or "LIST MYFILE WITH @ID = "12]" works,
   think again.
  .As you've guessed, there's no way to restrict paging the 1st page
   of any query (except UDT.OPTIONS 7 ON).  So, you can't list three
   different queries on the.
   same screen like "LIST CUSTOMERS TOTAL DUE" then "LIST INVOICES
   TOTAL DUE" then "LIST POSTINGS WITH SOURCE = "A/R" TOTAL AMOUNT"
   and have the totals show up on the same screen.
  .Phrases cannot be used in "P" type but work in "U" type.  If in   "P"
type one has to use the lower-case version of the verb (list   or sort).
+ GENERAL
  .Setting term types requires setting terminal types or width/depth
   but not both in the same command (or ASSIGN TermType TO SYSTEM(7) in
   BASIC).
  .Virtual dictionaries can't access "@RECORD<1>" in Pick mode but have
   to use the deprecated syntax "EXTRACT(RECORD, 1, 0, 0)".  Still have
   a some work on dictionaries though.
  .I haven't quite got the hang of when I can change to BASICTYPE "U"  
and and not crash other stuff.
  .I haven't been able to use a T-DUMP/T-LOAD to move data because
   I can't use a local O/S file as the target/source for these tape   
commands.  So I have to do this by filtering keys so they don't
   contain prohibited characters (like an astrix '*'), copy them to
   a local O/S directory, copy them over into UD, then un-filter the
   the keys.  Huge pain!
  . "WHO" doesn't give you the account you're logged onto.  "WHERE" does.
  .'Q' pointers don't exist in UD so one has to create something like:
      DTAPATCHES
      001: LD
      002: @UDTHOME\DTA\PATCHES
      003: @UDTHOME\DTA\D_PATCHES
   This requires the "DTA" account be under the UDTHOME directory
   (not really a big deal) though.  If 'Q' pointer(s) point to itself,
      001 Q
      002
      003 DTA
   however, they will all have to be altered if the name of the account
   ever changes; a probability for production accounts.

There's more, but I forget, off the top of my head.  As to some
recommendations for what IBM can and should do:

1) Create some utilities to convert other MVs to U2.  This would have
saved us at least 50 man-days.
2) Create a "screen editor" that can edit everything within (and
without) the UD environment.  Productivity increases are dramatic moving
from a line to a screen editor.
3) Create option to remove case sensitivity.  This is standard in the
Microsoft world and in most databases, but not U2!  This should be true
at both the database level and the command level.
4) Create a command line that manages a history (the stack), allows
searching through, and modifing a history line selected.
5) Create a GUI dbms admin tool and a GUI dbms development tool.
6) Create an admin account from within U2 (UV has it but UD does not)
and document all the admin commands in a single location so an
application can use whatever.
7) Create a lot of the standard Pick verbs in the VOC as synonyms.  Some
are there, like "CREATE-FILE", while others are not, like "OFF". :-)
8) Remove the differences between BASIC functions and I-Descriptor
functions.  For instance, Item<1,1> works in BASIC but you must use
EXTRACT(@RECORD, 1, 1, 0) in an I-Descriptor.
9) Activate the extended functions of UniQuery to Pick mode (EVAL, FMT,
etc).  Make sure keywords like "CNV" are also "CONV".
10) Set up default compiling and cataloging to be local (direct actually).
11) Create backups to be created and restored using other mvDbms formats
(at least T-LOADS).
12) Create 'Q' pointer capability.

Additional requests:

1) Allow security to be set up within the dbms
2) Allow users to be maintained within the dbms
3) Create a backup utility within the dbms
4) Create "pseudo" dictionary items that can reference any direct
attribute and are build at runtime.  For instance, if F12 wasn't in the
VOC or DICT.DICT or anywhere else, one could say "LIST VOC F12" and get
the 12th attribute of each VOC item.  These "pseudo" items would be
created at runtime and cleaned up immediately after.  This way any raw
attribute could be referenced.
5) Do the same thing with 'Q' pointers where one could reference any
file in any account from both BASIC and TCL.  Let's say I have an
account named AR with a CUSTOMERS file in it.  I happen to be logged
onto the INVENTORY account and at TCL execute: ":LIST AR:CUSTOMERS"
...and would get the appropriate listing of data.
6) Create a dynamic width dictionary code so when used it consumes the
remaining unused width of the current output device.  For example, the
CUSTOMERS file has a field definition (dictionary) NAME that is set to
20 columns wide then do the following:
   :TERM 40,25
   :LIST CUSTOMERS NAME
   CUSTOMERS. NAME.........................
   12345      ELDRICK TIGER WOODS
   :TERM 55,25
   :LIST CUSTOMERS NAME
   CUSTOMERS. NAME........................................
   12345      ELDRICK TIGER WOODS

I'm sure I can think of more but I've run out of gas. :-)


_______________________________________________
U2-Users mailing list
U2-Users@listserver.u2ug.org
http://listserver.u2ug.org/mailman/listinfo/u2-users 

  _____  

No virus found in this message.
Checked by AVG - www.avg.com
Version: 10.0.1209 / Virus Database: 1500/3555 - Release Date: 04/06/11

_______________________________________________
U2-Users mailing list
U2-Users@listserver.u2ug.org
http://listserver.u2ug.org/mailman/listinfo/u2-users

************** IMPORTANT MESSAGE *****************************       
This e-mail message is intended only for the addressee(s) and contains 
information which may be
confidential. 
If you are not the intended recipient please advise the sender by return email, 
do not use or
disclose the contents, and delete the message and any attachments from your 
system. Unless
specifically indicated, this email does not constitute formal advice or 
commitment by the sender
or the Commonwealth Bank of Australia (ABN 48 123 123 124) or its subsidiaries. 
We can be contacted through our web site: commbank.com.au. 
If you no longer wish to receive commercial electronic messages from us, please 
reply to this
e-mail by typing Unsubscribe in the subject line. 
**************************************************************



_______________________________________________
U2-Users mailing list
U2-Users@listserver.u2ug.org
http://listserver.u2ug.org/mailman/listinfo/u2-users

Reply via email to