Introduzione
Intelligenza artificiale
L'anno 2023 sarà segnato dai progressi folgoranti dell'intelligenza artificiale. È stata democratizzata attraverso strumenti molto popolari come ChatGPT. Ora disponiamo di un'intera gamma di strumenti in grado di produrre un risultato a partire da un'idea o da un pensiero.
Containerizzazione
Allo stesso tempo, stiamo assistendo alla democratizzazione e alla crescente popolarità della containerizzazione. È diventata una parte essenziale dell'infrastruttura moderna. Stabilendo nuovi standard nello sviluppo delle applicazioni, standardizza le pratiche di sviluppo e garantisce l'interoperabilità di tutti i componenti IS. Pertanto, investire in tecnologie cloud native non è più nice-to-have ma must-have. Consiglio anche la lettura di questo articolo pubblicato da Google, che sottolinea l'importanza di standardizzare i propri strumenti.
...E che dire di IBM i?
Come possiamo finire a parlare di AI, containerizzazione... e IBM i? In AUMERIAL abbiamo appena rilasciato NTi, un fornitore di accesso al cloud IBM i per .NET, nativo, autonomo e containerizzabile.
In questo articolo, vi illustrerò lo sviluppo e la pubblicazione di un'applicazione web .NET che accede a IBM i, containerizzata in Docker in un ambiente ARM.
La scrittura di questa applicazione sarà supervisionata da ChatGPT, per dimostrare l'interesse di questo strumento anche per uno sviluppatore esperto. Non si tratta di sostituire lo sviluppatore con un'intelligenza artificiale, ma di dimostrare la potenza di questo strumento per aumentare la produttività nello sviluppo di applicazioni .NET.
Quindi abbiamo AI, container e IBM i.
Lo scenario
Devo sviluppare un'applicazione web per la prenotazione di biglietti per concerti. Sono coinvolte le seguenti fasi:
- Progettazione del database relazionale
- Scrittura degli accessi ai dati (CRUD)
- Sviluppo dell'interfaccia web
Il tutto sarà sviluppato in ASP.NET Blazor server, su un database DB2 for i utilizzando il data provider NTi sviluppato da AUMERIAL.
Questo articolo passa in rassegna le varie fasi della progettazione di un'applicazione e della sua distribuzione. L'obiettivo non è quello di presentare un tutorial dettagliato, ma piuttosto un approccio per dimostrare che :
- L'uso di un assistente virtuale può aiutare lo sviluppatore nel suo lavoro aumentando la produttività.
- Lo sviluppo di un'applicazione .NET/IBM i è un compito banale come l'utilizzo di qualsiasi altro database.
- La soluzione NTi di AUMERIAL semplifica lo sviluppo di applicazioni e consente di integrare l'IBM i nei moderni schemi di sviluppo.
Infine, per questo esempio ho scelto di puntare su un'architettura ARM, ma senza modificare il codice, l'applicazione può essere eseguita in un ambiente POWER o x86.
Briefing con ChatGPT
Inizio spiegando il mio approccio al mio assistente virtuale:
Poi spiego chiaramente il mio caso d'uso:
Ora che il briefing è finito, possiamo iniziare!
Passo 1: Creare il database
Per sviluppare questo tipo di applicazione, inizio sempre modellando la situazione e creando il mio modello di dati. Poi creo le varie tabelle nel mio DBMS. Diamo un'occhiata a ChatGPT:
Rileggendo questo modello, ho notato alcuni punti che devono essere corretti:
Sono soddisfatto del modello, quindi passiamo all'implementazione in SQL:
Copiamo tutto in ACS per eseguire questo script, lo controlliamo e tutto viene creato senza problemi:
Tutto è andato bene, il database è stato creato e non resta che sviluppare la nostra applicazione!
Passo 2: creazione dell'applicazione
Creazione di un nuovo progetto .NET
Creeremo un progetto asp.net blazor server. Aggiungeremo anche tutte le dipendenze di cui avremo bisogno:
- MudBlazor** per creare l'interfaccia
- Aumerial.Data.Nti** e l'ORM Dapper per accedere a DB2 for i
![Progetto ASP.NET Core Blazor Server con dipendenze MudBlazor e NTi(/images/articles/article-conteneurisation/8.webp)
Il progetto è ora creato con le sue dipendenze. Una volta aperto il progetto in Visual Studio (o VSCode), seguire i passi di installazione di MudBlazor.
Implementazione del livello di accesso ai dati
Cominciamo con i modelli:
Ci atteniamo a un approccio molto tradizionale, in cui le classi rappresentano le diverse entità.
Poi creiamo i vari servizi che implementano l'SQL per recuperare i dati dai vari modelli. Il fornitore NTi espone le classi ADO.NET, quindi chiediamo a ChatGPT di creare un'implementazione basata sulle classi generiche ADO.NET, specificando che i parametri delle nostre query SQL sono i punti interrogativi per rispettare il formato previsto dall'IBM i:
Non entrerò nei dettagli, ma dopo aver controllato e messo a punto il lavoro svolto da ChatGPT, ora disponiamo di tutti i servizi di accesso al database, scritti in SQL e protetti contro le SQL injection (uso di parametri e query preparate).
Le query vengono inviate direttamente all'IBM i tramite NTi senza l'uso di driver come ODBC o OLEDB. Questa applicazione è quindi totalmente agnostica rispetto alla piattaforma. Possiamo facilmente containerizzare la nostra applicazione.
Possiamo ora passare all'interfaccia.
Creare un'interfaccia moderna
Infine, possiamo creare l'interfaccia della nostra applicazione utilizzando i ricchi ed efficienti strumenti offerti da .NET, in questo caso la libreria di componenti MudBlazor.
A questo punto, dobbiamo creare le varie pagine della nostra applicazione:
- Pagina di accesso/creazione dell'account
- Pagina iniziale/visualizzazione dei concerti e delle prenotazioni dei biglietti
- Pagina di visualizzazione dei biglietti prenotati dall'utente
- Pagina di gestione delle informazioni sul profilo dell'utente
Chiediamo a ChatGpt il codice per la pagina di visualizzazione dei concerti e di prenotazione dei biglietti:
Il codice generato da ChatGPT fa ancora una volta un buon lavoro, anche se ci sono ancora alcuni aggiustamenti da fare, ma la struttura di base c'è. Il risultato è un'applicazione web moderna e dinamica:
I dati provengono dal nostro database relazionale DB2 for i:
Una volta sviluppate tutte le pagine secondo questo principio, la nostra applicazione è pronta per essere pubblicata in qualsiasi ambiente che supporti Docker o che disponga di un orchestratore di container (Openshift, Kubernetes, ecc.).
Passo 3: Creare l'immagine Docker
Ora che abbiamo finito di sviluppare l'applicazione, possiamo pubblicarla come immagine Docker. Per farlo, seguiamo la procedura di Visual Studio per pubblicare la nostra applicazione come immagine Docker in un repository remoto.
Viene creato automaticamente un file Docker:
E l'interfaccia grafica di Visual Studio ci guida attraverso le varie fasi della pubblicazione:
Una volta completati questi passaggi, la nostra applicazione viene inserita in Docker:
Passo 4: Avvio dell'applicazione in un contenitore
In quest'ultima parte, tutto ciò che dobbiamo fare è recuperare l'immagine Docker dell'applicazione dal nostro server ed eseguirla. Nel nostro caso, si tratta di un computer Raspberry pi a scheda singola basato su architettura ARM. Non sono necessarie dipendenze, ma solo l'installazione di Docker.
Da una sessione SSH sul server, eseguire il seguente comando:
Questo comando si traduce come:
Eseguire l'immagine di concertbookingapp dal repository rrouillo in un nuovo contenitore chiamato ConcertApp, esponendo la porta 5000.
Una volta eseguito questo comando, la nostra applicazione si avvia ed è accessibile da un browser web (all'indirizzo 192.168.46.31 nel mio caso):
E l'app è disponibile:
Conclusione
Da questo articolo avrete capito che un assistente virtuale come ChatGPT può essere un aiuto prezioso nello sviluppo di un'applicazione, in questo caso tra .NET e IBM i.
Abbiamo anche visto che con la soluzione NTi sviluppata da AUMERIAL, l'utilizzo dell'IBM i da .NET non è affatto complesso, anzi. La sintassi è identica a quella di tutti gli altri fornitori di database e si può lavorare con l'IBM i senza che ci sia uno schermo verde.
NTi si distingue dalle altre soluzioni per la sua totale integrazione con .NET: qualunque sia l'architettura di destinazione, la nostra applicazione comunica con IBM i. Questo è un punto molto importante se si vuole essere in grado di eseguire i carichi di lavoro .NET/IBM i altrove rispetto alle macchine virtuali di Windows... con risparmi significativi e un'infrastruttura veramente moderna.
Infine, che si tratti di sviluppare l'applicazione o di pubblicarla, tutto è semplice, efficiente e diretto. Qualsiasi sviluppatore può padroneggiare questi concetti e sviluppare applicazioni aziendali performanti e decisamente moderne.
*Grazie per aver letto questo articolo. Sarò lieto di rispondere a qualsiasi domanda o di fornire chiarimenti o commenti su questi argomenti. In un prossimo articolo tratterò l'uso di altre risorse di tipo IBM i, come i comandi CL e la chiamata di programmi RPG da .NET con NTi.
Rémi ROUILLOT