Versione Italiana   English Version
 
Cobol
. Html
. Debug
. Note
. Db2
. Oracle
.PostgreSql
. Video

 
Javascript
. overview
. function
 
Vue
. overview

AngularJS
. overview

React
. overview

 
. Contact us  
 
 
Future is here
"All your dream projects can become reality", contant us

Perché non guardare i costi ed aumentare l’efficienza
(Il Business Services e Web Service realizzati in Cobol)

Tutti i prodotti realizzati con Cobol e Html sono utilizzabili su qualsiasi elettrodomestico dotato di brouser, da decenni funzionano su smartphone, sulla tv, sul frigorifero, senza nessun "driver", senza gli aggiornamenti quotidiani.

I programmi ed il profilo utente controllano ogni elemento della pagina nel senso di visibilità, modificabilità, focus eccetera. Invece i colori i fonts la mobilità tra le pagine, sono completamente liberi.

La grafica separata della gestione,
le pagine html sono separate dai programmi, sono a se stanti, possono essere completamente variate, punto fondamentale da rimarcare, le pagine sono pilotate, tutto è deciso nei programmi, la pagina chiede, il programma dispone, sono la proiezione e non vincolano la navigazione. Mediamente nei progetti gestionali l’interfaccia utente (UI, User Interface) non arriva alle due cifre e non deve vincolare a tortuosi artifici di mobilità e gestione dei dati.

Avete in interfaccia a caratteri (3270)?,
per trasformarla in Html, basta un click, più di un quarto di secolo di esperienza, tempi di riposta, manutenzione nell’ordine di frazione nel confronto con altri linguaggi.

Confronto con altri linguaggi,
Oggi i linguaggi di moda sono OOP hanno delle significative caratteristiche, non riducono:
(1) ne i tempi di sviluppo
(2) ne i tempi di cpu
(3) ne i tempi di manutenzione
(4) ne i tempo di ingegneria del software.
La programmazione OOP è perfetta per tematiche semplici, scolastiche, il punto due riassume, ma, Voi, avete mai visto un giocoliere o un lanciatore di coltelli che si trova variati i suoi oggetti. Un esempio di OOP: se non hai la versione 17 non parte il Developer, ne segue, punto:
(5) si è diventati "versione dipendenti".

Riflessioni,
Sicuramente è bello avere oggetti a fisarmonica con decine di attributi ed usarne solo alcuni, ordinati a piacere ma non è senza controindicazioni. Cosa cambia tra una Copy ed una Classe ... tra una Call ed un Package? Sicuramente cambia alla chiusura della Call ed aspettare il ritorno di un messaggio, il return-code di ogni istruzione e la gestione delle eccezioni, le pagine html gestite dal grafico e la matassa inguardabile ed ingestibile negli altri casi.

 

<

Debug essenziale, realizzato con solo Cobol - "free".

Per le funzioni web http bisogna attivare online il punto di partenza, da un terminale remoto si può innescare il debug, come nelle immagini sopra riportate. Il dizionario dati, utilizzato per vedere o modificare il contenuto dei dati è realizzato in rexx, analizzando i sorgenti le copy e le include.
In alternativa per ambiente Cics-TS si può utilizzare il debug Ibm, prodotto completo e sofisticato, intercetta le transazioni web in debug, dando la massima operatività ed in qualsiasi momento rilascia il controllo all’utente.

La qualità del prodotto è direttamente proporzionale alla qualità del debug, alla modalità e tempestività d'intervento.

Comandi Attivi:
BOTTOM ⇒ si posizione in coda al listato del programma
CLEAR ⇒ cancella la "variabile + valore" messo in evidenza con MONITOR
FIND/F + "valore" ⇒ ricerca nel programma la scritta
HELP ⇒ riassume i comandi e funzioni attive
MONITOR ⇒ tiene in evidenza il contenuto della "variabile + valore", nel caso di una struttura mostra le enne righe dei singoli campi
MOVE "valore"/variabile1 TO variabile2 ⇒ imposta il contenuto ("valore") della variabile2
TOP ⇒ si posiziona all'inizio del listato del programma

Funzioni Attive:
f1 ⇒ elenca le funzioni attive
f2 ⇒ avanza di uno step
f3 ⇒ chiude il debug
f4 + il cursore sul campo ⇒ visualizza il contenuto
f5 + scritta in "command line" ⇒ ricerca nel listing
f6 + cursore in "prefix line" ⇒ attiva il breakpoint o lo toglie se ripremuto
f7 ⇒ si sposta di una pagina all'indietro
f8 ⇒ si sposta in avanza di una pagina
f9 ⇒ avanza fino allo "stop run" o al prossimo breakpoint
f12 ⇒ retrieve dei comandi eseguiti

 

La filosofia gestionale è nata in ambiente Z/Os, pensata per essere trasportata e scalata fino ad un portatile. Il lato utente necessita del solo browser, per i nostalgici neanderthaliani (o per giusta causa) di una stampante.

Come ambiente di sviluppo, presentiamo la versione Linux, dove si hanno meno vincoli e di maggiore interesse. Si consideri che in tutti i casi l’interfaccia utente non è sviluppata in ambiente Mainframe per motivi di semplicità e facilità dei test.

Due oggetti fondamentali per il dialogo pagina programmi sono:
(A) il parser dei campi variabili con la pagina ed invio pagina al browser (le pagine html sono dei file distinti dai programmi),
(B) la ricezione della pagina al programma (passaggio dalla stringa alle singole variabili) equivalente per tutti gli ambienti.

Due semplici programmi in Cobol Linux e due funzioni del Cics-TS nel caso di Mainframe.

Cobol o "C"
Abbiamo sempre parlato di Cobol ma usando GnuCobol dovremmo parlare di "C" (Gcc) vista la conversione automatica prima della compila.

Cobol e Java
Ovviamente i due linguaggi non sono mutuamente esclusivi, la soluzione dove il Cobol utilizza java è la condizione ottimale, si fruttano al meglio la potenzialità di entrambi, versione di Cobol tipo isCobol o Micro Focus danno una ricca documentazione.

Cosa dobbiamo installare:

  • un Cobol (GnuCobol o ...)
  • un framework (Komodo, Ibm.Openeditor, Opencobolide, VSCodium, V.S.C. Aibber.base, ecc.)
  • per il substrato base (Aibber.base per compile, gestione folder, ecc.) di gestione servono: Regina (rexx), The (Hessling editor con xclip (X11) e wl-clipboard (Wayland)), Perl
  • un web serser http (Apache2 o ...)
  • un database (Db2, Oracle, PostgreSql e ...) ovviamente se il gestionale lo richiede
Post Scriptum:
Convertire un unload di tabella da Mvs (ebcdic) in (ascii); La tabella contiene campi Binary e Comp-3, come si procede? La versione di cobol (GnuCobol 3.2) non contempla "RECORD IS VARYING IN SIZE ..", bisogna intervenire sulla "PIC " del file di input, il programma generalizzato di conversione diventa specifico con:

(1) correggere la "SELECT .." e "FD .." senza parametri
(2) "PIC " lunghezza + 1 del tracciato da MVS
(3) sezionamento file da MVS con "aibbercopy.pl"
(4) "INSERT" in tabella direttamente nel programma di conversione

( Unica soluzione ammessa )

Unload-file (ebcdic):
  ./bin/aibbercopy.pl 113 ./tabelle  comu2.binary  comu2.113

Utility (NTEBCDIC):
  ....
   SELECT ARCHIN ASSIGN TO EXT-I-FILES
          FILE STATUS  IS FILE-STAT.
  ....
   FD  ARCHIN.
   01  REC-ARCHIN          PIC X(114).
  ....

Structure of the table:
  regina ./bin/ll_db21.rexx 2 ./source/include/RSCO2DCL.sqb ./str/comu2.str

Input parameters (NTEBCDIC.src):
 ....
  -157- file
  CODE=E037-UTF8
  LRECL=113
  FILE-INPUT=/home/luc/d/cobol/tabelle/comu2.113
  FILE-OUTPUT=/home/luc/d/cobol/tabelle/comu2.ascii
  FILE-STRUCTURE=(A),00,00,/home/luc/d/cobol/str/comu2.str
 ....

Run:
  ./loadlib/NTEBCDIC A ./bin/NTEBCDIC.src


Utility (aibbercopy.pl):
#!/usr/bin/perl -w
# ----------------------------------------------------- #
# -  Split file                   (Aibber)            - #
# ----------------------------------------------------- #
# - - - -
# example:
# perl ./aibbercopy.pl 143 ./temp cl040.txt cl040.sql
# parms: length folder file-binary "file-binary + \n"
# - - - -
# $Args = $#ARGV + 1;
  $lrecl  =$ARGV[0];
  $dirmain=$ARGV[1];
  $filein =$ARGV[2];
  $fileout=$ARGV[3];
  my($buf)="";
 # - - Open
     $filename = "$dirmain/$filein";
     open(FILEIN, "<$filename")
               or die goto FINE_MAIN_ERROR;
     open(FILEOUT, ">$dirmain/$fileout")
              or die "can't redirect FILEOUT";
     select(FILEOUT); $| = 1;     # make unbuffered
 #
 #-----Loop (1) Lettura per Split--------------#
 #
     $loop  = 1;
     $linee = 0;
     while ($loop > 0) {
         $bytes = read( FILEIN, $buf, $lrecl);
         if ( $bytes < 1) {
            $loop -= 1;
         } else {
     #---scrive il file di output---------------#
         print FILEOUT "$buf\n";
         $linee += 1;
         }        #--- end else
     };          #--- end while (loop)
 # - - Loop (1) Fine
   # - - Close files
     close(FILEIN);
     close(FILEOUT);
  $word = sprintf "%d", $linee;
  $line_out = "Ok file::$filename Linee=$word";
goto FINE_MAIN;
FINE_MAIN_ERROR:
  $line_out = "Ko file::$filename -- $! -- $0 (Errore +100)";
FINE_MAIN:
# print { $OK ? STDOUT : STDERR } "$line_out\n";
  print STDOUT "$line_out\n";
# undef @riga;
exit 0;
# ---------------------------------------------------------- #
# http://www.tutorialspoint.com/perl/perl_read.htm
# http://perldoc.perl.org/index-overview.html
# ---------------------------------------------------------- #
 
 

Install Db2-10.1 express-c su Client Linux (Ubuntu ram 32G)

Usato in modalità integrato nei programmi ( embedded database ),
il setup del database e delle tre user è abbastanza intuitivo, all’inizio il problema della "share memery" mi ha fatto pensare di cestinare questo D.B., ma come sovente succede è una banalità. Il D.B. si riscatta con una messaggistica eccellente, nelle anomalie fatte durante lo sviluppo dai programmi Cobol. Dal Manzoni "L’uom che nacque e visse senza pecca", il Bind dei programmi è un ostacolo gratis, inutili e senza senso durante l’esecuzione dei programmi, con errore -805 e/o -818, costringendo a tortuose manovre per i debugs.
Attenzione: i formati binary non funzionano, da Cobol a Database.

Librerie richieste:
sudo apt-get install libpam0g:i386 libaio1
sudo apt-get install ksh
sudo apt-get install lib32stdc++6
sudo apt-get install libpam0g:i386
sudo apt-get install libstdc++6
--sudo apt-get install libaio-dev
--sudo apt-get install gcc-4.9

controlla e abilita il link, per esempio:
sudo find / -name "libpam.so*"
sudo ln -s /usr/lib/i386-linux-gnu/libpam.so.0 /lib/libpan.so

./db2prereqcheck

se tutto okay, con utenza di root:
(selezionare solo lingua inglese altrimenti serve il cd)
./db2setup -l /tmp/db2setup.log -t /tmp/db2setup.trc

aggiornare .profile della user di lavoro:

  # set PATH db2 bin if it exists
    if [ -d "/home/db2inst1/sqllib/bin" ] ; then
        PATH="$PATH:/home/db2inst1/sqllib/bin"
    fi
  if [ -d "/opt/ibm/db2/V10.1/bin" ] ; then
      PATH="$PATH:/opt/ibm/db2/V10.1/bin"
  fi


  # lines have been added by IBM DB2 instance utilities.
  if [ -f /home/luc/sqllib/db2profile ]; then
      . /home/luc/sqllib/db2profile
  fi
  ##LD_LIBRARY_PATH=/home/db2inst1/sqllib/lib64:/usr/local/lib/
  LD_LIBRARY_PATH=/home/db2inst1/sqllib/lib64
  export LD_LIBRARY_PATH

aggiornare /etc/profile:

  DB2DIR=/opt/ibm/db2/V10.1
  export DB2DIR
  LD_LIBRARY_PATH="/home/db2inst1/sqllib/lib64"
  export LD_LIBRARY_PATH
  DB2INCLUDE=/home/luc/d/cobol/source/include
  export DB2INCLUDE

aggiornare /etc/passwd per le tre user con la bash,
per errore di share memory:

 sudo /opt/ibm/db2/V10.1/instance/db2idrop db2inst1
 sudo /opt/ibm/db2/V10.1/instance/db2icrt -u db2fenc1 db2inst1

accedere e create il vostro dbpreferito:

 su - db2inst1
 db2start
 db2 create database dbpreferito automatic storage yes
 db2 get db cfg for dbpreferito
 db2 update dbm cfg using SVCENAME 50000
 db2set db2comm=tcpip
 db2
  connect to dbpreferito
   GRANT DBADM ON DATABASE TO user your_user
   GRANT ACCESSCTRL, BINDADD, CONNECT, CREATETAB, CREATE_
     EXTERNAL_ROUTINE, CREATE_NOT_FENCED_ROUTINE, DATAACCESS,
     DATAACCESS, EXPLAIN, IMPLICIT_SCHEMA, LOAD, QUIESCE_CONNECT,
     SECADM, SQLADM, WLMADM ON DATABASE TO user your_user
   QUIT

La configurazione base è completata, controlliamo:
 su - db2inst1
 db2level
 db2ls
 db2licm -l
 db2set -all
Command line: clpplus

Suggerimento per il debug:
cmp -b -l (program).bnd (program-debug).bnd ⇒ (Δ2) (Δ1)
  se (Δ1) unica presenza in (program-debug).so lanciare:
perl -i -pe 's{Δ1}{Δ2}g' (program-debug).so

 
 

Install Oracle-xe-21c su Client Linux (Ubuntu ran 32G)

Usato in modalità integrato nei programmi ( embedded database ),
non avete un IP statico? ma dinamico, lanciare il comando "ip a" prendere il valore di inet: nella sezione della scheda di rete (per esempio 192.168.1.108). Correggere in: impostazioni di rete, modalità ipv4, con manuale, indirizzo uguale 192.168.1.108 e gateway 192.168.1.1, aggiungere al dns il valore del gateway, con utente di root correggere i valori in "/etc/netplan/" il più recente ...yaml come:

     network:
      version: 2
      ethernets:
        NM-dfghjk9-8927-6754-22d3-0g78907q6613:
          renderer: NetworkManager
          match:
            name: "enp2s0"
          dhcp4: true
    #     addresses:
    #     - "192.168.1.108/24"
          nameservers:
            addresses:
            - 1.1.1.1
            - 1.0.0.1
            - 192.168.1.1
          dhcp6: true
       (eccetera ...)

Attenzione: i caratteri (#) contano, sono la chiave di volta, permettono a Oracle-xe-21c di vedere IP statico ed il sistema operativo di funzionare in Dhcp, fare un riavvio (del servizio) e voilà.

da rpm a deb: sudo alien -c -d --fixperms oracle-database-xe-21c.rpm
installare: sudo dpkg -i ./oracle-database-xe-21c.beb
completare la user oracle: cambiare il terminale in "/etc/passwd" in bash, creare il folder di default "/home/oracle" cambiare "chwon -R oracle:dba /home/oracle" copiare da un altro utente ".profile" e completarla con:

if [ -d "/opt/oracle/product/21c/dbhomeXE" ] ; then
    PATH="$PATH:/opt/oracle/product/21c/dbhomeXE"
    export PATH
fi
if [ -d "/opt/oracle/product/21c/dbhomeXE/bin" ] ; then
    PATH="$PATH:/opt/oracle/product/21c/dbhomeXE/bin"
    export PATH
fi
export ORACLE_HOME=/opt/oracle/product/21c/dbhomeXE
export ORACLE_BASE=/opt/oracle/product/21c/dbhomeXE
ORACLE_SID="XE"
export ORACLE_SID
accedere e completare ".bashrc" con:
cd
if [ -d "/opt/oracle/product/21c/dbhomeXE/bin" ] ; then
    PATH="$PATH:/opt/oracle/product/21c/dbhomeXE/bin"
    export PATH
fi
. oraenv1

dove oraenv1 clone di oraenv con eliminata la selezione del SID, imposto fisso "XE", controlliamo i gruppi della user con:
"cat /etc/passwd |grep /home |grep -v false |cut -d: -f1 |xargs groups |grep oracle"
otteniamo la lista (oinstall dba oper backupdba dgdba kmdba racdba) se tutto sistemato e provato possiamo installare il DB.
configurazione: da root "/etc/init.d/oracle-xe-21c configure"
controlli finali: eseguire da brouser "https://localhost:5500/em/" con user: system e (pw) quella impostata durante il passo di install, provare:
"sudo -S /etc/init.d/oracle-xe-21c start"
"sudo -S /etc/init.d/oracle-xe-21c stop "
"sudo -S /etc/init.d/oracle-xe-21c status"

da una procedura per esempio in rexx:
"push (pw)"
"sudo -S -i -u oracle lsnrctl status"

ed il listener/sql da utente oracle:
"lsnrctl stop"
"lsnrctl start"
"lsnrctl status"
"sqlplus / as sysdba"
"show pdbs;"
"select * from v$version;"
"select instance_name, status, database_status from v$instance;"

da un gestore per esempio DBeaver impostando i dati (host: 192.168.1.108 port: 1539 db: XE, SID, "Oracle Database Native", user: sys, pw: (pw), role: sysdba). Con il comando:

sudo xhost +si:localuser:oracle
sistemiamo il display, vedi dbca, xclock, xeyes, ultimo neo da sistemare il clipboard manager,

 
 

Install PostgreSql su Client Linux (Ubuntu ram 32G)

Usato in modalità integrato nei programmi ( embedded database ), spettacolare la semplicità di primo approdo, tutto si svolve con fluidità e semplicità. Parlando di un prodotto che supporta più database il primo ostacolo è dovuta alla normalizzazione delle include sql, le built-in fanno il loro lavoro, peccato per i cursori, la declare deve essere spostata vicino alla open, comporta un supplemento di controlli.

Le operazioni sql risentono dei linguaggi nativi risultano notevolmente più criptiche rispetto all'approccio dei precedenti database.

Un ulteriore difficoltà è la completa incomprensione della messaggistica, le anomalie del precompilatore sono "mitiche" non esistono riferimenti ne al Database ne al sorgente, stessa sorte per il compilatore. Sicuramente il suo utilizzo è orientato verso linguaggi che non sanno gestire le chiavi tradizionali e si appoggiano alle chiavi surrogate, con la tecnica: se raddoppi semplifichi!? O meglio non capisco ma ho scritto.

Il database è orientato verso un utilizzo esclusivo come Open Database Connectivity (ODBC).

 
 

Esempi di Cobol con Apache2 e Db2
( un click sulla descrizione per attivare il Link al Video )

Debug realizzato con il solo Cobol

Alcune pagine, le più vintage (qualche ritocco alla fine dello scorso secolo):

Debug versione 2008 con interfaccia The-editor (Hessing):

 
  stop/start images
Copyright © 2023, A s o f t - Italy (va) ® Asoft-va.com utilizza cookie essenziale, si accetta Grazie