IBM i e OpenSource: Faq & Howto (Parte 1) IT

iOSS-FAQ-001: Da dove iniziare

Non possiamo che mettere al primo posto delle nostre FAQ & Howto questa domanda: Da dove iniziare se voglio lavorare con linguaggi e pacchetti Open Source in ambiente IBM i.

Diciamo che, innanzitutto, la cosa migliore è essere aggiornati con il livello di sistema operativo di IBM i : dalle ultime release di sistema (a partire dalla 7.1) IBM ha sempre di più migliorato l’approccio alle soluzioni Open Source in ambiente IBM i…. se ho una vecchia V6R1 o peggio V5R4 meglio darsi all’ippica, ci sono più probabilità di portarsi a casa qualcosa!

iOSS-FAQ-002: Hello world con Node.js

Niente di meglio di un video per iniziare da un Hello World application con Node.js …. il nostro amico Yusy4Code è sempre pronto con i suoi tutorial di base, come questo “Hello World to Node.js from IBM i”

iOSS-FAQ-003: I primi passi con Python su IBM i, non solo Hello World

Ecco due siti dai quali partire per un classico Hello World con Python in ambiente IBM i

In alternativa una piccola guida passo passo creata dal sottoscritto: seguendo una guida IT-Jungle di Stephanie Rabbani (“Guru: Getting Started With Python On IBM i”) e qualche altro post in giro per il web (“Introduction to Python for IBM i” di Mike Pavlak e “Pratical guide to Python” di Kevin Adler) ho installato Python3 sulla mia macchina IBM i 7.2.

In meno di 20 minuti ho testato il classico Hello World e scaricato da Github un progetto di Alan Seiden Group con qualche bel esempio di Python e IBM i… non è fantastico? E’ proprio qui il bello … rispetto allo sviluppo classico RPG con Python (e altri linguaggi disponibili su IBM i) possiamo trovare in giro migliaia di applicazioni Open Source da assemblare insieme nei nostri progetti.

Ecco i pochi passi fatti, con qualche commento, e, a seguire, i riferimenti del materiale:

  • Da IBM ACS Access Client Solution scelgo “Strumenti – Gestione pacchetti Open Source”
  • Installo oppure aggiorno se non aggiornati i pacchetti “yum” e “python3” e “git”
  • Apro una sessione con Putty in SSH sul mio IBM i (assolutamente meglio di QP2TERM!)
  • Aggiorno la PATH come indicato nella guida di Stephanie Rabbani ( PATH=/QOpenSys/pkgs/bin:$PATH export PATH )
  • Creo nella mia home IFS un piccolo programma con la sola istruzione ” print(“hello world”) ” (attenzione al print in minuscolo e non in maiuscolo come nella guida!)
  • Eseguo il mio primo programma Hello Word : “python3 /home/faq400/hello.py” (anche qui attenzione a scrivere python3 in minuscolo!
  • Primo passo fatto … vediamo se trovo qualcosa di pronto da testare …
  • Vado su Github e trovo “Pyhon for IBM i example” del Club Seiden
  • Provo a scaricare il progetto con git “git clone https://github.com/Club-Seiden/python-for-IBM-i-examples.git” … ma ho un problema di HTTPS (“fatal: Unable to find remote helper for ‘https’”)
  • Litigo un po’ cercando di disabilitare il controllo della firma ma niente da fare …
  • Clono allora il repository con questo comando, che funziona egregiamente ” git clone git://github.com/Club-Seiden/python-for-IBM-i-examples.git“
  • Mi metto nella directory del servizio “active job dashboard” ( cd /home/faq400/python-for-IBM-i-examples/non-wheel/active-jobs-dashboard/ )
  • Eseguo l’applicazione Python che mi genera un server http in attesa: ” python3 ./server.py “
  • Provo l’applicazione sulla porta 3333 all’indirizzo ip del mio IBM i ( http://192.168.xxx.xxx:3333/)
  • Si può fare!

C’è anche un video di Moammed Yusuf che spiega come leggere tabelle DB2 for i da Python… tutto direttamente da un accesso a PUB400.COM, quindi senza neanche installare niente sul proprio IBM i:

How to connect IBM i db2 using Python | yusy4code

iOSS-FAQ-004: Passaggio parametri da QSH con apostrofi(‘ single-quote) o virgolette(” double-quote)

Prendo spunto da una interessante discussione fatta su Midrange.com riguardo al passaggio parametri quando si ha a che fare con l’apostrofo (‘) o le doppie virgolette (“) dove John Yeung e Kevin Adler si scambiano interessanti idee al riguardo riprendendo alcuni commenti di Barbara Morris da DW.

Caso 1, passaggio parametri semplice … due parametri normali

 QSH CMD('~/script1.sh param1 param2')  

Caso 2, ho un terzo parametro con uno spazio in messo (‘my house’) … in questo caso possiamo utilizzare tranquillamente le virgolette (double quote) per delimitare il terzo parametro

 QSH CMD('~/script1.sh param1 param2 "my house"')  

Caso3, ho un quarto parametro che oltre agli spazi ha anche un apostrofo (maledetto genitivo sassone!) … in questo caso possiamo utilizzare un doppio apostrofo (double your single quote) utilizzandolo come se fosse un escape

 QSH CMD('~/script1.sh param1 param2 "my house" "my dog''s house"') 

Per capire meglio il caso 4 riportato qui sotto dobbiamo cercare di capire come funzionano gli escape quotes negli ambienti CL e Bourne Shells (lo shell di QSH), in CL si può usare solo il single-quote mentre in Bourne Shell si possono usare sia single-quote che double-quote. Questo significa che in ambiente QSH possiamo semplicemente utilizzare il single quote o il double quote dove ci risulta più semplice:

"This is John's apple."   
'I said, "Can you hear me?"' 

Oppure raddoppiare il single-quote o double-quote per utilizzare il nostro delimitatore dentro una stringa

 'This Pascal string''contains two apostrophes''' 
 "I said, ""Can you hear me?""" 

Un altro modo è quello di usare il backslash come carattere di escape

'This Pascal string\'s contains two apostrophes\' '
"I said, \"Can you hear me?\" "

L’uso di questi escape potrebbe essere quindi fare al caso nostro quando vogliamo passare dei parametri: prendiamo questo esempio … la classica applicazione “hello world” node.js … che in questo caso particolare, presenta i parametri passati in una pagina HTML (*)

Ecco un esempio di passaggio parametri via QSH ad una applicazione Node.hs

QSH CMD('/QOpenSys/pkgs/bin/node /home/Opensource/nodejs01/testparms.js myfirstparm mysecondparm "my house" "my dog''s house" "he said \"Your dog''s house is very large\" "')                                                            

Il sorgente della applicazione testparms.js è scaricabile in questo Github-Gist https://gist.github.com/Faq400Git/44b0aa307e6eda78354a4227f905e53d

iOSS-FAQ-005: Return message da QSH

La shell script QSH ci permette di richiamare degli script in ambiente PASE da RPG o da CL, questo lo sappiamo … ma la cosa che non risulta semplice è quella di intercettare i returncode/returnmessage di QSH.

Ci sono diversi modi … uno è quello di catturare il messaggio QSH0005 (procedura terminata correttamente) tramite QIBM_CMD_ESCAPE_MESSAGE … come negli esempi di Midrange.com qui sotto riportato:

https://code.midrange.com/d5909d4cc2.html – Capturing QSH0005 error messages

https://code.midrange.com/999b8e2180.html – Retrieve status code from msg QSH0005

Vedi documentazione qui: https://www.ibm.com/support/pages/using-rcvmsg-and-monmsg-retrieve-qshell-messages – Using RCVMSG and MONMSG to Retrieve QSHELL Messages

Un secondo metodo è quello di deviare l’output di uscita di QSH ( QIBM_QSH_CMD_OUTPUT ) come descritto in questa guida IBM : https://media.techtarget.com/search400/downloads/Qshell_for_iSeries_ch2.pdf oppure in questo post di Bradley Stone su FieldExit : Calling QSH command from RPG

iOSS-FAQ-006: Gestire lo STDOUT di un lavoro QSH (non solo Node.js) in un file o nel Joblog del lavoro stesso

In fase di debug di un JOB QSH generalmente utilizziamo lo STDOUT per vedere i messaggi tipo console.log, ed è comodo… ma se il lavoro è un JOB schedulato le cose si complicano.

Tra le tante utility interessanti di Richard Schoen, nel suo repository Github, troviamo anche questa NodeOni che ci permette di sottomettere in batch un JOB che esegue un comando da QSH con reindirizzamento dello STDOUT nel Joblog, in un file, in uno spool file ecc … veramente comodo!

iOSS-FAQ-007: Come cambiare la Shell dell’ambiente PASE SSH

Se lavoriamo con l’Open Source in ambiente IBM i sappiamo che è molto più comodo connettersi con un terminale SSH (come Putty) piuttosto che lavorare con QSH da ambiente 5250 IBM i perché possiamo utilizzare differenti Shell del PASE, come BASH, che rendono il lavoro nettamente più produttivo.

Per settare la Shell di default possiamo lavorare sul nostro .profile delle /home/user oppure utilizzare le due tecniche qui di seguito:

  1. Imposto la Shell con una Stored Procedure SQL:
CALL QSYS2.SET_PASE_SHELL_INFO('*CURRENT', '/QOpenSys/pkgs/bin/bash')                

2. Installo via yum una utility dedicata come chsh

 yum install chsh
chsh -s /QOpenSys/usr/bin/ksh
or
chsg -s /QOpenSys/pkgs/bin/bash

Un ottimo articolo dal quale partire per capire le diverse shell disponibili per ambiente PASE è

Tech Tip: Be like a Turtle! di Jesse Gorzinski

iOSS-FAQ-008: Rational Rdi e Editor per sorgenti Python e Node.js

Se sei uno sviluppatore RPG o Cobol e utilizzi Rational Rdi per editare i tuoi sorgenti, troverai molto comodo anche gestire eventuali sorgenti Node.js o Python con la vista IFS di Rational Rdi.

Per default Rdi aprirà con il doppio click su questi tipi di file un generico editor di testo: è possibile andare nelle impostazioni (Finestra/Preferenze/Generale/Editor/Associazione file) ed impostare l’editor di default.

Ecco un esempio con Jython per aprire un .py Python

iOSS-FAQ-009: Chiamare un programma RPG da Python con iToolkit

C’è un ottimo post di Mike Larsen su IT Jungle : Guru: Calling RPG Programs From Python, Part 1



iOSS-FAQ-010: Node.js Web App on i – Updating records (By Andy Youens)

Ottimo post su PowerWire di Andy Youens , come aggiornare records con Node.js : A NodeJS Website on IBM i – Updating Records



Related Posts
DB2 for i SQL – Stringhe – POSSTR-LOCATE-LOCATE_IN_STRING (IT)

Introduzione Spesso, nelle nostre applicazioni, abbiamo la necessità di lavorare con le stringhe di testo e l'SQL del DB2 può Read more

DB2 for i & SQL – FAQ & Howto (Part. 1) (IT)

Database DB2 e SQL ... forse lo strumento più potente e completo che abbiamo sulla piattaforma IBM i: ecco una Read more

Annuncio IBM i 7.4

Arriva direttamente con l'uovo di Pasqua questo annuncio IBM per le novità della versione IBM i 7.4, versione iNext secondo Read more

Generated Always Columns – Approfondimenti (IT)

Introduzione "Generated Always Column": sono colonne, campi, di una tabella il cui contenuto è controllato direttamente dal sistema ... e Read more

--- Roberto De Pedrini Faq400.com

Recent Posts

Gestione dei file video bloccati su IBM i: una soluzione efficace

Riceviamo e pubblichiamo ben volentieri questo "tip & trick" di Patrick Rizzi che presenta una tecnica che permette di intervenire…

2 mesi ago

Monitoraggio Messaggi QSYSOPR: SQL per Ottenere Messaggi e Reply

Prendo spunto da una risposta di Michael Mayer sulle mailing list di Midrange.com a chi chiedeva come monitorare i messaggi…

2 mesi ago

Perché l’ERP è la Chiave del Successo per le Imprese Moderne

Le imprese sono sempre più alla ricerca di strumenti che possano migliorare l'efficienza, la collaborazione e la gestione delle risorse.…

4 mesi ago

ACS Access Client Solution 1.1.9.5

I primi di Aprile è uscita la "Spring Version" di ACS Access Client Solution, versione 1.1.9.5 Interessanti novità soprattutto in…

8 mesi ago

Tim Rowe and Scott Forstie – Promo video for CEC 2024 – Milan

Se non vi bastava la ricca agenda delle sessioni del Common Europe Congress 2024, 3-6 Giugno Milano, ecco un altro…

8 mesi ago

Code for IBM i 2.10.0 – Debug IBM i con Visual Studio Code

Le funzioni di debug con Visual Studio Code sono disponibili da qualche tempo ma questa nuova versione 2.10.0 semplifica la…

8 mesi ago