Tutti gli esperti
NL

PowerLab400 · esperto della community

Nicholas Labati

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…