Index
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!
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”
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:
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
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
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
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!
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:
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
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
C’è un ottimo post di Mike Larsen su IT Jungle : Guru: Calling RPG Programs From Python, Part 1
Ottimo post su PowerWire di Andy Youens , come aggiornare records con Node.js : A NodeJS Website on IBM i – Updating Records
Riceviamo e pubblichiamo ben volentieri questo "tip & trick" di Patrick Rizzi che presenta una tecnica che permette di intervenire…
Prendo spunto da una risposta di Michael Mayer sulle mailing list di Midrange.com a chi chiedeva come monitorare i messaggi…
Le imprese sono sempre più alla ricerca di strumenti che possano migliorare l'efficienza, la collaborazione e la gestione delle risorse.…
I primi di Aprile è uscita la "Spring Version" di ACS Access Client Solution, versione 1.1.9.5 Interessanti novità soprattutto in…
Se non vi bastava la ricca agenda delle sessioni del Common Europe Congress 2024, 3-6 Giugno Milano, ecco un altro…
Le funzioni di debug con Visual Studio Code sono disponibili da qualche tempo ma questa nuova versione 2.10.0 semplifica la…