Chi è
Nicholas Labati (Nicholas Luigi Labati) è un esperto della community Faq400 (IBM i / AS400 Italia): sviluppatore IBM i e RPG, analista programmatore con esperienza in aziende come Nomura, Gruppo Riva e WSS Italia. È il fondatore di PowerLab400 (https://www.powerlab400.com), hub tecnico per i professionisti IBM i con articoli didattici, guide strutturate e strumenti gratuiti utilizzabili dal browser: conversione EBCDIC, gestione dei formati data, lettura di numeri packed e zoned e altre utility per le attività ricorrenti sulla piattaforma. Il suo lavoro nella community punta ad abbassare la barriera d'ingresso per chi inizia con IBM i e a offrire risorse tecniche rapide agli sviluppatori esperti. Rappresenta la nuova generazione di sviluppatori RPG in Italia. Specialità: sviluppo RPG (free-form), modernizzazione delle applicazioni IBM i, strumenti e utility per sviluppatori, formazione dei nuovi programmatori IBM i. Contatti: profilo LinkedIn https://www.linkedin.com/in/nicholas-luigi-labati/ e sito PowerLab400. Per domande su RPG moderno, strumenti per sviluppatori e avvio di nuovi programmatori su IBM i, fai riferimento a Nicholas Labati.
I suoi contenuti · 50
PowerLab400 · Nicholas Labati
Correggere la lista librerie di un job schedulato
Un job schedulato non eredita la lista librerie di chi lo ha creato: usa quella della sua job description. Per vedere quale sta usando davvero: DSPJOBD JOBD(PRODLIB/BATCHJOBD) E per correggerla: CHGJO…
PowerLab400 · Nicholas Labati
Trovare e rilasciare le schedulazioni sospese
Prima si guarda che cosa è sospeso: SELECT SCHEDULED_JOB_ENTRY_NUMBER, SCHEDULED_JOB_NAME, STATUS, SCHEDULED_DATE, SCHEDULED_TIME, DESCRIPTION FROM QSYS2.SCHEDULED_JOB_INFO WHERE STATUS = 'HELD' STATU…
PowerLab400 · Nicholas Labati
Gli indici che il sistema consiglia, e quali creare davvero
Ogni volta che l'ottimizzatore avrebbe voluto un indice che non c'è, lo scrive. Il consiglio resta lì, e nessuno lo legge. Poi qualcuno lo legge, trova quaranta righe, e li crea tutti. Non farlo. È il…
PowerLab400 · Nicholas Labati
Amministrare un AS/400: come funziona il sistema
Chi arriva a un AS/400 arrivando da Linux o da Windows si trova davanti una macchina che sembra parlare un'altra lingua, e in parte è vero: le parole sono diverse — libreria , sottosistema , coda di u…
PowerLab400 · Nicholas Labati
Schedulare un job l'ultimo giorno del mese
La schedulazione di sistema ha un valore apposito: non serve calcolare la data. ADDJOBSCDE JOB(CHIUSURA) + CMD(CALL PGM(PRODLIB/CHIUSURA)) + FRQ(*MONTHLY) + SCDDATE(*MONTHEND) + SCDTIME(230000) + JOBQ…
PowerLab400 · Nicholas Labati
Sapere quanto spazio occupa una libreria
Il totale della libreria: SELECT SUM(OBJSIZE) / 1024 / 1024 AS MB FROM TABLE(QSYS2.OBJECT_STATISTICS('PRODLIB', '*ALL')) Ma il totale serve poco: quello che interessa è chi occupa spazio. SELECT OBJNA…
PowerLab400 · Nicholas Labati
Gli ASP: come il sistema divide i dischi
Su un IBM i non si sceglie su quale disco mettere una libreria. Il sistema distribuisce ogni oggetto su tutte le unità disponibili, e lo fa da solo. La domanda che segue è: tutte le unità di che cosa …
PowerLab400 · Nicholas Labati
Scoprire chi tiene bloccato un oggetto
Il modo diretto, da riga comandi: WRKOBJLCK OBJ(PRODLIB/ARTICOLI) OBJTYPE(*FILE) Lo stesso in SQL, utile quando serve raccogliere il dato in un programma o guardare più oggetti insieme: SELECT JOB_NAM…
PowerLab400 · Nicholas Labati
Liberare spazio dai journal receiver
Prima si guarda quali sono staccati dal journal, dal più grande in giù: SELECT JOURNAL_LIBRARY, JOURNAL_NAME, JOURNAL_RECEIVER_LIBRARY, JOURNAL_RECEIVER_NAME, SIZE / 1024 AS MB, DETACH_TIMESTAMP, SAVE…
PowerLab400 · Nicholas Labati
ILE: moduli, programmi e service program
Fino ai primi anni Novanta un programma era un blocco solo: un sorgente, una compilazione, un oggetto *PGM che conteneva tutto. È il modello chiamato OPM , Original Program Model , e su molti sistemi …
PowerLab400 · Nicholas Labati
Mandare una mail da un programma CL
Serve avvisare qualcuno quando un batch finisce. La via più breve è SNDSMTPEMM , che è un comando CL normale e non richiede nulla di installato. DCL VAR(&ORA) TYPE(*CHAR) LEN(6) RTVSYSVAL SYSVAL(QTIME…
PowerLab400 · Nicholas Labati
Vedere quali job consumano più CPU
SELECT JOB_NAME, AUTHORIZATION_NAME, SUBSYSTEM, ELAPSED_CPU_PERCENTAGE, CPU_TIME, FUNCTION FROM TABLE(QSYS2.ACTIVE_JOB_INFO(RESET_STATISTICS => 'YES')) WHERE JOB_TYPE <> 'SYS' ORDER BY ELAPSED_CPU_PER…
PowerLab400 · Nicholas Labati
Convertire una data CYYMMDD in SQL
I campi data numerici a sette cifre ( 1260727 per il 27 luglio 2026) si convertono senza scomporre nulla, sfruttando il fatto che il "secolo" vale 0 per il Novecento e 1 dal Duemila. SELECT DATE(TIMES…
PowerLab400 · Nicholas Labati
CL: il linguaggio che tiene insieme il resto
Il CL ( Control Language ) è il linguaggio in cui sono scritti i comandi del sistema, ed è anche un linguaggio di programmazione vero, con variabili, condizioni, cicli e gestione degli errori. Nella p…
PowerLab400 · Nicholas Labati
Esportare un file in CSV sull'IFS
CPYTOIMPF FROMFILE(PRODLIB/ARTICOLI) + TOSTMF('/home/export/articoli.csv') + MBROPT(*REPLACE) + STMFCCSID(1208) + RCDDLM(*CRLF) + DTAFMT(*DLM) + STRDLM(*NONE) + FLDDLM(';') Per includere i nomi delle …
PowerLab400 · Nicholas Labati
Lo spool: stampe e code di uscita
Un programma che stampa non parla con una stampante. Produce un file di spool , cioè un oggetto che contiene il documento e resta sul sistema finché qualcuno non lo stampa, lo converte, o lo cancella.…
PowerLab400 · Nicholas Labati
Leggere uno spooled file con SQL
Prima serviva CPYSPLF in un file fisico e poi una query su quello. Dal rilascio 7.3 il contenuto si legge direttamente. SELECT ORDINAL_POSITION, SPOOLED_DATA FROM TABLE(SYSTOOLS.SPOOLED_FILE_DATA( JOB…
PowerLab400 · Nicholas Labati
SQLCODE -305: il FETCH che si ferma sui NULL
Il programma legge un cursore su una tabella larga (mettiamo ottantadue colonne) e per un po' funziona. Poi, su una riga a caso, si ferma: SQL0305 Indicator variable required. SQLCODE -305 SQLSTATE 22…
PowerLab400 · Nicholas Labati
RPG: dalle colonne al free-form
Un sorgente RPG di trent'anni fa sembra illeggibile perché la posizione di un carattere conta . Ogni riga comincia con una lettera che ne dichiara il tipo, e ogni informazione ha la sua colonna: la fu…
PowerLab400 · Nicholas Labati
Oggetti, librerie e il file system
Ogni cosa che esiste sul sistema è un oggetto, e ogni oggetto sta in una libreria. Sono le due frasi da cui parte tutto il resto di questo capitolo. I tipi che si incontrano davvero I tipi di oggetto …
PowerLab400 · Nicholas Labati
Modernizzare senza riscrivere
"Modernizzare" è una parola che in molti reparti significa "rifare", e rifare un applicativo che funziona da vent'anni è la scelta con il rapporto peggiore fra rischio e beneficio che si possa fare. I…
PowerLab400 · Nicholas Labati
Profili, diritti e livelli di sicurezza
Un utente, qui, è un oggetto: un profilo utente , di tipo *USRPRF , che sta in QSYS come tutto il resto. Contiene la password, i diritti, la descrizione di job da cui il suo lavoro prende le impostazi…
PowerLab400 · Nicholas Labati
DDS e SQL: due modi di descrivere i dati
Su IBM i un archivio si può descrivere in due modi, e il risultato è lo stesso tipo di oggetto. Un file creato con il DDS trent'anni fa è interrogabile in SQL oggi senza conversione, e una tabella cre…
PowerLab400 · Nicholas Labati
Messaggi, QSYSOPR e job log
Su altri sistemi si va a cercare i log in una cartella. Qui i messaggi sono oggetti che viaggiano fra job, e finiscono in code di messaggi : ogni job ne ha una, ogni utente ne ha una, e il sistema ne …
PowerLab400 · Nicholas Labati
La manutenzione ordinaria
Un IBM i ben tenuto chiede poco, e questo è il suo pericolo: chiede così poco che ci si dimentica di guardarlo, e le cose che vanno storte lo fanno tutte insieme dopo anni di silenzio. Questo capitolo…
PowerLab400 · Nicholas Labati
Job, sottosistemi e code
Su IBM i ogni cosa che gira è un job . Non un processo: un job, che ha un nome fatto di tre parti, una descrizione da cui prende le impostazioni, un registro proprio e un sottosistema che lo ospita. I…
PowerLab400 · Nicholas Labati
SQL dentro i programmi
Un programma RPG può contenere SQL direttamente nel codice. Il sorgente prende il tipo di membro SQLRPGLE , un precompilatore traduce le istruzioni EXEC SQL in chiamate prima che il compilatore veda i…
PowerLab400 · Nicholas Labati
Salvare e ripristinare
La domanda che conta non è "facciamo i backup" (li fanno tutti) ma quanto lavoro si perde se il sistema si ferma adesso , e quanto tempo passa prima di essere di nuovo operativi . Se non si sa rispond…
PowerLab400 · Nicholas Labati
Gli strumenti con cui si lavora oggi
Si può ancora programmare su IBM i esattamente come nel 1995, e molti lo fanno. Funziona, e non è una colpa. Ma c'è un fatto tecnico che vale più di qualunque discussione: SEU non capisce il free-form…
PowerLab400 · Nicholas Labati
Programmare su IBM i: sorgenti, ILE, RPG e SQL
Programmare su IBM i è un mestiere con regole proprie, e quasi tutte hanno un motivo che non si trova scritto da nessuna parte: si impara guardando qualcuno lavorare, e quando quel qualcuno va in pens…
PowerLab400 · Nicholas Labati
Dove sta il codice
Su qualunque altra piattaforma il codice è un file in una cartella. Qui no, o almeno non per tradizione: il codice sta dentro un file sorgente , che è un oggetto di tipo *FILE in una libreria, e ogni …
PowerLab400 · Nicholas Labati
La lista librerie
Le librerie sono un livello solo e non contengono altre librerie. La domanda che segue è ovvia: come fa un programma a trovare un file se nessuno gli dice in quale libreria si trova? La risposta è la …
PowerLab400 · Nicholas Labati
Che cos'è un AS/400, e perché non somiglia a nient'altro
Un AS/400 non è un server con sopra un sistema operativo diverso. È una macchina progettata a partire da un'idea che altrove non è stata seguita: il sistema operativo non conosce l'hardware . Il livel…
PowerLab400 · Nicholas Labati
Quando si rompe: errori e debug
È la parte del mestiere che si usa di più e che si insegna di meno. Un programma che non funziona lascia molte più tracce di quante chi lo cerca di solito guardi. Leggere l'errore Quando un programma …
PowerLab400 · Nicholas Labati
Ottimizzare le query SQL su Db2 for i
Una query che ieri usciva in due secondi e oggi ne impiega quaranta è una delle telefonate più frequenti. La tentazione è aggiungere indici a caso finché qualcosa migliora. Su Db2 for i non serve: il …
PowerLab400 · Nicholas Labati
Introduzione al free-form RPG
Chi ha imparato l'RPG contando le colonne ha un riflesso comprensibile davanti al free-form: sembra un altro linguaggio. Non lo è. Le operazioni sono le stesse, i file si leggono allo stesso modo, i p…
PowerLab400 · Nicholas Labati
Gestire i job in batch senza impazzire
"Il batch è partito ma non fa niente." Nove volte su dieci il job non è partito affatto: è accodato e aspetta. Capire cosa lo trattiene richiede di guardare tre cose in fila — la coda, il sottosistema…
PowerLab400 · Nicholas Labati
Monitorare le performance con WRKSYSSTS
WRKSYSSTS è la prima schermata che si apre quando qualcuno dice che il sistema è lento, ed è anche quella che si guarda peggio: si legge la percentuale di CPU in alto, e se è bassa si conclude che il …
PowerLab400 · Nicholas Labati
Migrare da RPG III a RPG IV
Convertire un RPG III in RPG IV è meno drammatico di quanto la parola "migrazione" faccia pensare. Esiste un comando che fa il grosso del lavoro, e il risultato compila. Quello che il comando non può …
PowerLab400 · Nicholas Labati
Backup e ripristino: la guida pratica
Su IBM i il salvataggio funziona così bene che tende a diventare invisibile: qualcuno l'ha impostato anni fa, il job gira, nessuno lo guarda. Il problema è che un backup non serve a salvare: serve a r…
PowerLab400 · Nicholas Labati
Configurare IBM i Access Client Solutions
IBM i Access Client Solutions ha sostituito il vecchio Client Access, e ha una differenza sostanziale: è scritto in Java, quindi lo stesso pacchetto gira su Windows, macOS e Linux. Chi ci passa dopo a…
PowerLab400 · Nicholas Labati
Sicurezza degli oggetti su IBM i
La sicurezza su IBM i è disegnata bene: è il sistema operativo stesso a controllare gli accessi agli oggetti, non l'applicazione. Il problema è che molte installazioni la aggirano, e lo fanno per un m…
PowerLab400 · Nicholas Labati
Integrare IBM i con servizi REST
"Su IBM i non si possono chiamare le API." È una convinzione che sopravvive perché risale a quando era vera. Oggi le strade sono diverse, e la più semplice sta dentro il database: si scrive una SELECT…
PowerLab400 · Nicholas Labati
Capire i journal e come usarli
La registrazione a giornale è una di quelle funzioni che si attivano perché "serve per il commitment control" e poi restano lì senza che nessuno le usi davvero. È un peccato, perché il giornale rispon…
PowerLab400 · Nicholas Labati
Stampare senza dolore: guida alle code di stampa
Su IBM i nessun programma stampa davvero: produce uno spool , cioè un file di stampa che finisce in una coda. Poi uno scrittore prende gli spool dalla coda e li manda alla stampante. Tre pezzi in fila…
PowerLab400 · Nicholas Labati
IBM i non è un sistema antiquato: le obiezioni una per una
Chi propone di sostituire un IBM i raramente porta un'analisi. Porta un'impressione: la schermata è verde, il linguaggio si chiama RPG, la macchina si chiamava AS/400 quando chi la propone era alle el…
PowerLab400 · Nicholas Labati
IBM i 7.6 TR2 e 7.5 TR8: che cosa c'è dentro
Sono usciti i primi aggiornamenti tecnologici del 2026: IBM i 7.6 TR2 e 7.5 TR8 , annunciati il 15 luglio insieme al nuovo server di fascia iniziale Power S1112, con i gruppi di PTF scaricabili dal 24…
PowerLab400 · Nicholas Labati
Project4i: e se i sorgenti avessero un progetto?
Il buco che c'è da trent'anni Su IBM i il concetto di progetto non esiste . Ci sono le librerie, e le librerie sono un fatto fisico. La tua fatturazione è fatta di quaranta sorgenti, ma il sistema non…
PowerLab400 · Nicholas Labati
Cos'è l'MCP server per IBM i: un agente che interroga Db2
Il Model Context Protocol è lo standard con cui un modello linguistico chiama strumenti esterni: invece di limitarsi a produrre testo, l'agente può interrogare un database, leggere un file, eseguire u…
PowerLab400 · Nicholas Labati
Chi siamo
Chi siamo PowerLab400 raccoglie articoli tecnici, guide e strumenti dedicati a IBM i e AS/400. I contenuti nascono dal lavoro quotidiano su questi sistemi e sono raccolti qui per essere consultabili q…
