Immaginare l'immaginario
Da qualche tempo sto pubblicando delle pagine con una sorta di tutorial del linguaggio di programmazione Inform7; si tratta di un linguaggio specializzato per la creazione di avventure testuali (Nuova pagina) o, come vengono chiamate ora, interactive fictions.
E' un genere di gioco nato negli anni 70 del novecento, sono delle storie descritte solo con il testo, anche perchè sui computer dell'epoca era difficile fare diversamente, in cui il giocatore si muove e può maneggiare degli oggetti per scoprire tesori nascosti, indagare su fatti accaduti.
Si tratta di risolvere enigmi, trovare modi ingegnosi di aprire passaggi e contenitori...
Ne ho fatto cenno anche in un articolo su NOC Sensei (Nuova pagina), interessante rivista di fotografia online.
Ma cosa centra la fotografia con creazioni senza alcuna illustrazione?
La fotografia tradizionale, quella che conosciamo da quasi due secoli, nulla, ma da pochissimo tempo sono apparsi strumenti che consentono di realizzare immagini simil-fotografiche a partire da descrizioni testuali: perchè non provare a passare a questi strumenti le descrizioni del gioco per vedere come potrebbero essere interpretate?
Ecco che la maestosa sala da pranzo, degna di un castello, prende forma.
La storia che avevo in mente di realizzare era ambientata in un sottopasso di un hotel in un piccolo paese dell'Alto Adige; in quel sottopasso era custodita una raccolta di cavallini giocattolo che avevo fotografato durante l'estate.
Con una di quelle foto ho anche realizzato la copertina che può essere inserita nel gioco compilato.
Ho utilizzato una delle mie fotografie ed il risultato finale non mi sembra così male, ma provando a passare a Bing Image Creator (Nuova pagina) (che utilizza il motore Dall-E (Nuova pagina)) il banner iniziale del gioco si ottiene quello che riporto sotto.
La cosa inizia a diventare divertente ed inizio ad utilizzare le immagini create in questo modo per illustrare il tutorial che ho citato all'inizio.
Quella trattazione in effetti più che a spiegare ad altri come fare le cose serve a me, principiante, per capire come farle e le immagini servono come test per individuare che tipo di immaginazione può essere stimolata.
Perdo un sacco di tempo a generare le immagini, perchè mi piace provare soluzioni diverse: mica siamo tutti uguali e i giocatori potrebbero avere reazioni diverse alla stessa descrizione.
Prendo ad esempio lo stesso prompt e lo inserisco su Stable Diffusion (Nuova pagina) impostando lo stile a cinematic: il risultato diventa tutt'altro.
Il prompt utilizzato altri non è che una sequenza del gioco costruito nel tutorial in cui il protagonista si trova accanto al tavolo del buffet della colazione e si versa un bicchiere di succo d'arancia.
Buffet A corner where you can pick up food from two tables, one on the left and the other on the right. On the left table are ten dishes, five bibs, ten glasses (empty), a jug of water, a jug of milk, a jug of orange juice, a jug of ACE juice, a jug of clear apple juice and a jug of pear juice. On the right table are ten slices of speck, a decorated canister (closed), a white bowl (in which are ten knobs of butter), a white basket (in which are eight slices of white bread) and a brown basket (in which are ten slices of pumpernickel bread). >take a glass Taken. >fill it from the jug of orange juice Now you have a glass of orange juice, it is full. >drink orange juice (the glass of orange juice) You drank orange juice; pleasant.
Nello studio del sistema mi faccio sempre più ardito, al momento sto imparando a costruire i dialoghi: perchè non passarne uno come prompt?
In questi casi la differenza tra Dall-E e Stable Diffusion (che con il medesimo prompt ha creato l'immagine all'inizio della pagina) si fa sentire: la differenza sta probabilmente nel fatto che Dall-E può avvalersi anche dell'analisi del testo fatta da ChatGPT (Nuova pagina).
Di contro Dall-E è anche troppo puritano e talora si rifiuta di generare le immagini come nel caso in cui si voleva semplicemente avere una porta del bagno chiusa.
Salvo poi generare immagini come quella utilizzata per creare questa storia di Instagram (Nuova pagina).
Ha proprio sbagliato tutto: l'idraulico doveva montarlo il wc, non utilizzarlo; nella stanza non dovevano esserci finestre e invece ce n'è una enorme dalla quale l'idraulico si gode il panorama.
A tal proposito ho ricreato il prompt e non gli ho dato in pasto direttamente il sorgente dove una stanza senza finestre viene definita dark, cosa che non potevo pretendere che capisse.
The wc-room is a dark room. "The small room is floored and covered with white tiles.[line break][if wc-lamp is lit]The light comes from a ceiling lamp[otherwise]A lamp is at the ceiling, but it's off; the light comes from the door[end if].". The printed name is "WC room". The wc-lamp is a scenery ceiling lamp in the wc-room. Printed name is "wc ceiling lamp". The toilet light switch is a scenery light switch in the bathroom-antechamber. The toilet light switch powers the wc-lamp. The toilet bowl is an enterable supporter in the wc-room. "In front of the door there is the toilet bowl, above the button of the flush." The flush button is scenery in the wc-room. The description is "A large white button. You should press it after using the wc." Instead of pushing the flush button: say "You cleaned the bowl with the water flush."; now the toilet bowl is clean.
Quello riportato sopra è proprio il frammento di codice sorgente che definisce la toilet, con il wc ed il relativo sciacquone, la plafoniera e l'interuttore per accenderla.
Siamo abituati a pensare ad un sorgente di un programma per computer a qualcosa come:
#includeint main() { std::cout << "Hello World"; return 0; }
Quella che spesso è definita come una passeggiata del gatto sulla tastiera.
L'esempio appena mostrato è scritto in C++, linguaggio diffusissimo e disponibile per praticamente qualsiasi microprocessore, da quello della lavatrice ai grandi datacenter; l'unica operazione che fa è scrivere Hello World quando avviato.
La descrizione della toilet di sopra invece utilizza il linguaggio Inform 7 (Nuova pagina), espressamente dedicato alla creazione di giochi interattivi testuali, in cui l'equivalente è:
Hello by Roberto Ceccarelli Hello World is a room.
Questo qui invece lo capisce chiunque.
L'idea di scrivere dei programmi che fossero facilmente comprensibili alle persone prima che alle macchine non è affatto nuova; oggi possiamo chiedere in modo discorsivo a ChatGPT di scriverci un programma che poi potremo compilare e far eseguire al nostro pc, ma nel 1983 non era nemmeno pensabile.
User good morning ChatGPT Good morning! How can I help you today? User Could you write a c# program to write the fibonacci's numbers? ChatGPT Absolutely! Here's a simple C# program that generates Fibonacci numbers up to a specified limit:using System; class Fibonacci { static void Main() { Console.WriteLine("Enter the number of Fibonacci numbers to generate:"); int count; // Validate user input for a positive integer while (!int.TryParse(Console.ReadLine(), out count) || count <= 0) { Console.WriteLine("Please enter a positive integer:"); } GenerateFibonacci(count); } static void GenerateFibonacci(int count) { int first = 0, second = 1, next; Console.WriteLine("Fibonacci Series:"); for (int i = 0; i < count; i++) { if (i <= 1) { next = i; } else { next = first + second; first = second; second = next; } Console.Write($"{next} "); } } }This program prompts the user to input the number of Fibonacci numbers they want to generate and then displays that many Fibonacci numbers. User thank you ChatGPT You're welcome! If you have any more questions or need further assistance, feel free to ask. Happy coding!
Ecco qua un esercizietto scolastico brillantemente svolto.
Nel settembre del 1983 Donald E. Knuth (Nuova pagina), informatico conosciuto soprattutto per la serie di volumi The Art of Computer Programming (Nuova pagina), invia alla rivista accademica The Computer Journal (Nuova pagina) un saggio dal titolo Literate Programming (Nuova pagina) nel quale si sostiene che i programmi dovrebbero essere considerati alla stregua di opere letterarie e comprensibili innanzitutto agli esseri umani.
Il prompt delle due immagini sopra (ad eccezione della prima frase aggiunta per mantenere una certa coerenza stilistica con le altre immagini) è tratto proprio da quel saggio.
La cosa curiosa è che tutto il sistema del literate programming viene chiamato WEB, che nulla c'entra con quello che oggi noi chiamiamo allo stesso modo e che sarebbe stato teorizzato (Nuova pagina) solo nel 1989 da Tim Berners-Lee (Nuova pagina).
Graham Nelson (Nuova pagina), l'autore del linguaggio Inform, in un saggio all'interno di «IF Theory Reader» (Nuova pagina) (pag. 141), ci spiega quali sono le ragioni della scelta di utilizzare un linguaggio quasi naturale per la scrittura di programmi di interactive fiction.
Tradotto in immagine da Bing:
Riprendiamo ancora una volta come prompt (salvo il solito incipit aggiunto) una citazione dal saggio di Knuth.
Il generatore di immagini ci propone un hotel accanto ad un lago con delle imbarcazioni ed uno strano ponte sinuoso che lo raggiunge, parrebbe quasi una ferrovia.
Questa invece è l'introduzione dell'avventura The house of the rocking horses che avevo iniziato a scrivere e di cui avevo generato l'immagine, sempre con Bing, tempo fa.
Con ogni prompt vengono generate quattro immagini e con quello del WEB c'era anche questa qui sotto.
Quei cavalli non glielo ha detto nessuno di metterli in questa occasione, ma ormai old hotel in the alps viene abbinato a rocking horses e me li mette ogni volta che può.
L'intelligenza artificiale evidentemente si auto-alimenta con i prompt che gli vengono sottoposti.
Proviamo ora a passare un pezzo del codice sorgente come prompt; è il punto in cui si definiscono i due camerieri presenti nella sala.
Spezzoni di sorgente vengono capiti benissimo dal generatore di immagini; in questo caso era una situazione statica, ma Bing (ovvero Dall-E) è decisamente sorprendente quando c'è azione.
Dunque l'intelligenza artificiale farà sparire programmatori, fotografi e disegnatori?
Sicuramente li spingerà in nicchie sempre più specializzate, ma sicuramente non mi priverà del gusto di programmare la mia avventura, di scattare fotografie alle cose che mi incuriosicono o che voglio ricordare, però mi permette di ottenere generiche immagini per illustrare un altrimenti noiosissimo tutorial di programmazione.
Come tutte le cose va utilizzata con intelligenza (umana), prendete ad esempio l'immagine sotto: non c'entra nulla con la richiesta, ma vuoi vedere che attira più di tutto il resto?