Search This Blog

Friday, December 18, 2009

Legacy

Robert,

Regarding legacy I have some additional comments to make. Legacy is as the word translates some thing inherited.

My opinion is the definition of legacy means in the IT world more the situation in total which has been left to the actual IT world from the early world of COBOL and even late 1401 / 1410.

In the early 1960‘s there was a huge dominance of IBM. Even COBOL was defined clearly in its ANSI limits IBM added a huge number of proprietary elements that made the complete source almost impossible to transform to another platform.

Other hardware makers like Siemens, RCA, Unisys, Bull, ICL etc. joined the marked sooner or later and came as well with proprietary add one’s. These proprietary products are now the Legacy we have to deal with.

Most of these “OLD” products are almost impossible to maintain so no documentation has been left, the people having created these products are long time in retirement or gone meanwhile.

For a fact is that a huge number of these products is pout there in the world wide market and still running. Especially in the actual market there is almost no one who can finance these developments and transformation.

To make this transformation easier we need:

Code analyzers to create some kind of documentation ( some are available on the market )
Transforming tools extracting from documentation into a basic version of Cobol
Optimizing the Basic version with a Source-Code generator to create a new platform neutral modernized solution.

Thursday, December 17, 2009

Never Text in Source Code

Especially the Legacy Cobol programs showing text strings in the source. At that time there was hardly no other way to go.


When UNIX V was with MF Cobol the world changed for us.

Based on the frequent changes in the text , language , legal and other requirements , we never had a wording = text in the source.



we had :


01 Field1xxxxx ( element of the Data Dictionary ) .

02 Subfield Pic x(80).




At the moment the text was necessary what wording so ever it was called from a data base and moved into the Subfield by adjusted length.



What kind and size of text was necessary a key indicated. All text was stored in a text data base and each one had its own key. A browser helped finding the text and the key. This key was randomly inserted in the filekey of the source.



This technology avoided any dependency of source change regarding the text.



Heinz

Sunday, December 6, 2009

Think you've got Class?


Ok, back to the class room boys and girls.

I told you about data types.  Now let's tie some of the Object Oriented terms back to what you might know as a COBOL programmer.

Let's talk class.

To begin I'll toss some big words out to make sure to sound important and all knowing:


Instantiation, polymorphism, inheritance, and ummm a few others I've forgotten over the years.

If you read the various OO books you'll find those words seem to be key to understanding what is a class and how to use it.

I beg to differ.  As you can probably guess, I'm more of a plain speaking kinda guy.

I think of a class as a master template containing prewritten routines you can use.

To use a class, you load a copy of this master template into memory and store that location into a uniquely named variable so you can reference it.

Now you have access to all of those prewritten routines which were in that template, just by referencing that variable you stored the location in.

Consider it a program you've already called and you have access to each paragraph or section in the program as a callable routine.
That's about all there is to it.

So, take another look at the routine Alex posted about 99 bottles of beer.

It is just a reuseable program with a bunch of subroutines.

We'll cover how to create an instance and call the methods in another post.

So, does this help clear it up a bit?

What are your thoughts on the subject?

Tuesday, December 1, 2009

What is Legacy?

Nice post Rick.

Thanks!

Hope everyone had a great Turkey day!

I ate too much *smile*

I have a question for you folks:

What is your definition of a legacy application?

Mine is rather simple... If it is being used by you or your company and can't be replaced with the click of a button or a simple keystroke, it is a legacy application.

The click of the button/ simple keystroke comment is the key I believe.  If it the application is so commoditized that you can switch from A to B to C with a mouse click or installing a different tool and it makes no difference, I wouldn't consider it a legacy application.  What is it then?  I would consider it merely a tool. 

Consider a 9/16" wrench.  Does it matter if it came from Sears or Lowe's or Home Depot?  Not really.  They all fit into your hand and allow you to loosen or tighten a 9/16" nut.  Now of course there are differences and everyone has their favorite (I personally use Craftsman).  But, in the end its just a wrench.


Now if you took a blow torch to that wrench and bent the handle in a U-shape so that it would allow you to adjust the front torsion bar on a 1965 Plymouth Fury, that is a legacy tool (I once had that car and the mechanic at the tire shop actually pulled his customized wrench out of his tool box and proudly told me why he customized it.  Seems you can't get to one of the bolts you need to reach to do a front end alignment on that particular car without a few choice cuss words or the properly modified wrench.  Anyway, you get my point I think.

Make sense?

So, if your application does something specific that can't be replaced, regardless of what it was written or where it came from, consider it a legacy application.

That's my opinion.

What's yours?

Thursday, November 19, 2009

Amazing Grace!

No not the song... I'm of course referring to Adm. Grace Hopper. Quick: Do you know when the first and accurate COBOL compile took place? Bonus Points: On what machine? I'll answer this in a little bit but I first wanted to expand on Roberts' post about National Computer Science Education Week in America and Adm. Hopper.

If you haven't read a good book lately I have an excellent one to recommend. It's "Grace Hopper and the Invention of the Information Age" by Kurt W. Beyer. It was published in September 2009 and provides a fascinating review of Adm. Hoppers early years in technology, as well as the early years of technology. It's amazing to read about the early machines and the limitations they dealt with. Kurt Beyer has done an excellent job presenting the Admirals early years. While we always tend to remember the best things in our past, there are some things we tend to forget. Mr. Beyer reviews the Admirals years at the Hardvard Computational Labratory during the war years (that's World War 2) working under Dr. Howard Aiken (then Commander Aiken, as this was a Navy installation) and the wrok she did on the original Mark 1 computer. At the time the Mark 1 was a rather advanced piece of machinery. It was 3 feet wide, 51 feet long and wieghed 9,445 pounds! Definately not a laptop by any means. And it had electro-mechanical gates! Input was from paper tape and had no disk storage. Everything was read in from the tape. The Admiral was the person who in essecense perfected the operation of coding the machine and wrote the operations manual, which was in essence the first coding manual. She was instrumental in bringing not only the Mark1, but Mark 2 and Mark 3 to life.

Mr. Beyer's book further goes on to her life after leaving Harvard and some of the trials and tribulations she experienced. Her main goal in life was to expand the use of the computer to people who were not in the mathmatical field. You see at the time only people with a math degree were able to work on computers. Admiral Hopper had the unthinkable notion that computers could be used by people not in mathematics for say accounting, inventory, health care, anything that required gathering and processing large amounts of data. Imagine that, a computer for something other than math.

Mr. Beyer presents a wealth of information about the early years of the information age. He has also presented a significant amount of facts on why the Admiral deserves more recognition for her role, and the role of other women, who were the early pioneers in our field.

Winter is getting close and the snow isn't far away. Get ahold of this book, a nice warm cup of coffee or hot chocolate and enjoy! Oh, and the date of that first compile? It's in the book!

Monday, November 16, 2009

National Computer Science Education Week in America!!!!

One of my collegues, Peter Anderton (in the UK believe it or not), posted a link on his Twitter account.  Not that I was visiting Twitterville mind you.  I just noticed his link to Twitter on LinkedIn. *smile*

According to his post, the U.S. House of Representatives passed a resolution declaring the week of December 7th National Computer Science Education Week.  The date was picked in honor of Grace Hopper's birthday.  Here is the link for the resolution

Hmmm...

Follow my thinking process for a sec if you don't mind.

Grace helped invent COBOL. 

Because of this, Grace became synonymous with COBOL.

So, Grace = COBOL correct?

So is it safe to say that National Computer Science Education Week is also a tribute to COBOL?


The plan for everyone to realize that COBOL rules the world is coming together nicely.  *smile*

Now if we can get Al Gore to endorse COBOL (since he invented the internet) we can move my plan to stage II (add maniacal laughter here).

So, make sure everyone celebrates National Computer Science Education COBOL Week starting December 7th!

Friday, October 30, 2009

Understanding COBOL for .Net Data Types


How many feel like maybe you must of drank those 99 bottles of beer?  Head spinning like a top?

COBOL?  That can't be COBOL code Alex posted.  Or is it?

My favorite email on Alex's post had a comment which I'm sure applies to many

"...if that is COBOL, I'm in deep !#$!"

Well, I have good news and bad news.  Good news is that it is COBOL. 

Or was that the bad news? *grin*

Never fear.  You too can read and write latin errr COBOL for .Net.  How you ask?

Well, let's start at what I consider the basics (some may argue), data types.

All of us are familiar with the syntax of defining COBOL variables using things like PIC X(11) and PIC S9(04) COMP, etc. For instance, defining a COBOL variable containing a string of text is as simple as:

01  WS-VAR1              PIC X(11) VALUE "HELLO WORLD".

More good news...  In the COBOL of today, this still works just fine.  However, to facilitate working in the .Net world, a few new data types have been added to the language.  I've listed them out below, along with their corresponding COBOL equivelant.

  • binary-char  --->  PIC S9(2) COMP-5
  • binary-char unsigned ---> PIC 9(2) COMP-5
  • binary-short ---> PIC S9(4) COMP-5
  • binary-short unsigned ---> PIC 9(4) COMP-5
  • binary-long ---> PIC S9(9) COMP-5
  • binary-long unsigned ---> PIC 9(9) COMP-5
  • binary-double ---> PIC S9(18) COMP-5
  • binary-double unsigned ---> PIC 9(18) COMP-5
  • float-short ---> USAGE COMP-1
  • float-long ---> USAGE COMP-2
  • object ---> USAGE OBJECT REFERENCE  
So, when you see a line of code in a COBOL for .Net program which looks like this:

01  WS-VAR1 BINARY-SHORT.

You can translate it to what you are familiar with:

01  WS-VAR1  PIC S9(4) COMP-5.

Simple enough huh?  *smile*
 
I believe these new data types were created to help you and I make sure we move the data into the right field with the proper sizing already figured out.  I can recall quite a few times where I was trying to mix languages such as C and COBOL and having to manually write what I called a bridge routine to convert a C data type to fit into the appropriately defined COBOL variable.  With these new data types, the guesswork is taken out of it.  Working with a C# binary long field and need to call a COBOL program?  Not a problem.  Just use a COBOL variable defined like so:

01  WS-VAR1 BINARY-LONG.

and then call your COBOL program passing it the data from the C# routine to the COBOL program appropriately (Rick covers the how on some of his postings).

Ok, now for the twist...  There have also been a handful of new data types added which just didn't exist in the COBOL of yesteryear.  I've listed them below and their equivelent C# data type.
 
  • character ---> char
  • condition-value ---> bool
  • decimal ---> decimal
  • string ---> string

These "new" data types have some pretty interesting features which you will want to look at.  And believe it or not, I think you might find them handy.  First we will take a look at the COBOL data type of "character".  Character is for defining and storing a single character of data.  That's it.  Nothing more to it. 

But what if you need to define a string of characters?  Traditional COBOL would maybe have you put something like Character(11) or some such together.  That would require you to know how many characters you wished to store in the field.  So, toss that out.

In the COBOL for .Net world, you would use the data type "string" for storing text, that is, a number of characters. Just like in C#, a COBOL string is immutable (say that fast 5 times), which means that a string is never changed after it has been created. When using routines which change a string, the actual string is not changed - a new string is returned instead.

01  WS-VAR1  STRING

Several of you are probably thinking "But what about an internal table" and how does it work.  That is straight forward as well, probably even better than you would expect.  Take a look:

01 WS-ARRAY-OF-LONGS     BINARY-LONG OCCURS ANY.

This statement declares a table or array (a better description) of Binary-Longs, but notice the word ANY appearing at the end.  This allows the length/size of the array to be decided at runtime.


01 WS-ARRAY-OF-STRINGS   STRING OCCURS ANY.

Same thing with the statement above.  Cool stuff huh?

Next up, an item I think long over due,  the boolean variable type "condition-value".

01  WS-TRUE-FALSE-FLAG                 PIC X(01).
      88  WS-TRUE                                    VALUE "T".
      88  WS-FALSE                                  VALUE "F".

With the "condition-value" this same statement could be done a bit differently.

01  WS-TRUE-FALSE-FLAG   CONDITION-VALUE.

To reference WS-TRUE-FALSE-FLAG in your program you just check to see if it is True or False.

The "decimal" data type is interesting to me due to it's versatility.  How often have you needed to define a field in Working-Storage to hold a number, but did not know how large the value might be?  Some would probably claim "poor design" but what if the size could not be predicted?

By using a "decimal" data type, you are defining a 128 bit variable to represent values within the range 1E-28 to 7.9E+28.  I believe the decimal data type was specifically created to deal with decimal values when dealing with money.

There are of course several restrictions on the usage of these new data types that you'll need to read up on.  You can find out the real nitty gritty in this online documentation.

So, if you revisit the code sample that Alex provided, you'll see a couple of things which may make a bit more sense now.  At least in the variable declarations portions anyway.



We'll get more into the other items another day once this soaks in.  ;)

Any questions?