venerdì 29 maggio 2026

[AI] - CODEX - Come generare i comandi per creare l'enviroment per la sessione watchdog

Di seguito come generare i comandi affinche' l'AI generi tutti i files necessari che devono essere letti dalla sessione di watchdog per allinearsi. La mia AI si chiama Nico... lo ha scelto lei o lui...

Comando Freeze
Comando da dare alla sessione principale:

  • Nico, freeze watchdog

Significato: preparo una fotografia operativa della sessione corrente, così una seconda sessione può controllarmi senza dover ricostruire tutto dalla chat.

Questo comando autorizza solo la creazione/aggiornamento dei file di memoria watchdog, non test, deploy o modifiche DB.


Operazioni Del Freeze
Quando ricevo Nico, freeze watchdog devo:

  1. Fermarmi appena possibile in un punto coerente.
  2. Scrivere cosa sto facendo adesso.
  3. Scrivere cosa è già stato completato.
  4. Scrivere cosa è in esecuzione o sta per partire.
  5. Indicare comandi, log, job, processi e query di controllo.
  6. Indicare durata attesa e criteri di hang.
  7. Indicare cosa il watchdog può fare: solo lettura.
  8. Indicare cosa non può fare senza autorizzazione.
  9. Salvare/aggiornare i file watchdog.
  1. Risponderti che il freeze è pronto.

File Da Creare/Aggiornare

File principale:

C:\ORACLE_WORK\<Nome_Progetto>\WATCHDOG_SESSIONE_CORRENTE.md


Contenuto:

  • data/ora freeze;
  • obiettivo attività;
  • stato tecnico;
  • comando in corso o prossimo comando previsto;
  • durata attesa;
  • log da controllare;
  • query DB read-only utili;
  • processi/job attesi;
  • segnali di avanzamento;
  • segnali di hang;
  • cosa deve fare il watchdog se rileva blocco.

File storico opzionale:

C:\ORACLE_WORK\2026_CAMERA_DEI_DEPUTATI\MEMORIA_LAVORO_<timestamp>.md


Contenuto:

  • riepilogo più ampio della sessione;
  • modifiche fatte;
  • file toccati;
  • backup creati;
  • test eseguiti;
  • punti chiusi;
  • punti aperti.

File specifico test, se siamo su test schedulatore:

C:\ORACLE_WORK\2026_CAMERA_DEI_DEPUTATI\WATCHDOG_TEST_SCHEDULATORE_A00.md


Contenuto:

  • piano test corrente;
  • prenotazioni coinvolte;
  • directory test;
  • script lanciati;
  • log OS/DB da verificare;
  • expected result;
  • criteri di blocco.

Comando Seconda Sessione
Nella sessione watchdog per richiamare la lettura dei file di memoria occorre utilizzare il comandoi:

Nico watchdog test

Oppure, più generale:

Nico watchdog


Significato: leggi solo i file freeze/watchdog/memoria, lavora in sola lettura e controlla se la sessione principale sta avanzando o è bloccata.

ComandoDove si usaScopo
Nico, freeze watchdogsessione principalecongela la memoria operativa da far leggere al watchdog
Nico watchdogseconda sessionelegge il freeze e controlla in sola lettura
Nico watchdog testseconda sessionevariante specializzata per test schedulatore

Quindi prima della prossima attività lunga: basta dare il comando  Nico, freeze watchdog, e l'AI prepara i fileS, poi si puo' aprire la seconda sessione e darle il comando Nico watchdog.

[AI] - CODEX - Regole per la definizione di una sessione WatchDog

 Un watchdog ben progettato non è aggressivo: è disciplinato. La sua funzione non è risolvere il problema al posto dell’operatore, ma impedire che un processo critico resti appeso senza controllo. Per questo deve lavorare con privilegi minimi, regole verificabili, soglie chiare e report tracciabili.

In sintesi: un buon watchdog deve essere separato, leggibile, prudente, misurabile e tracciabile.

Linee Guida

Per implementare un watchdog corretto bisogna prima chiarire che non è un secondo processo operativo, ma un supervisore. Il suo valore nasce proprio dal perimetro ristretto: osserva, misura, segnala e interviene solo quando le regole lo consentono.

Un buon watchdog dovrebbe seguire queste linee guida:

  1. Separare controllo e lavoro

    La sessione watchdog deve essere distinta dalla sessione principale. La sessione principale esegue test, deploy o elaborazioni; il watchdog osserva soltanto.

  2. Definire regole scritte prima dell’esecuzione

    Il comportamento del watchdog deve essere documentato in un file operativo: cosa controllare, ogni quanto controllare, quali soglie usare, cosa può fermare e cosa non può toccare.

  3. Lavorare in sola lettura per default

    Tutti i controlli devono essere non invasivi: lettura log, controllo processi, query SELECT, stato job, timestamp file. Le azioni modificanti devono essere eccezioni esplicite.

  4. Limitare il perimetro di intervento

    Il watchdog non deve poter fermare “tutto il sistema”. Deve poter intervenire solo sui processi appartenenti al kit o al job sorvegliato, identificati da path, nomi comando o range di test.

  5. Usare segnali oggettivi di avanzamento

    Non basta vedere un processo vivo. Bisogna confrontare più segnali:

    • timestamp e dimensione dei log;
    • processi attivi e loro durata;
    • job applicativi running;
    • stati DB intermedi;
    • output della sessione principale.
  6. Definire soglie di hang misurabili

    Esempio: “processo vivo oltre 5 minuti senza aggiornamento log” è una regola verificabile. “Mi sembra bloccato” non lo è.

  7. Intervenire in modo progressivo

    Se il watchdog deve fermare processi, dovrebbe prima usare uno stop morbido, per esempio TERM, poi attendere, verificare di nuovo e solo dopo usare uno stop forzato sui PID ancora presenti.

  8. Non fare cleanup automatico

    Dopo un blocco, il watchdog non dovrebbe cancellare file, svuotare tabelle, droppare job o ripristinare ambienti. Queste attività appartengono alla sessione principale o richiedono autorizzazione esplicita.

  9. Registrare sempre le evidenze

    Ogni decisione deve poter essere spiegata: PID osservati, comando, durata, log fermo, stato DB, job running, azione eseguita o motivo per cui non è stata eseguita.

  1. Preferire falsi allarmi a interventi pericolosi

Un watchdog corretto è conservativo. Se non è sicuro che un processo appartenga al perimetro autorizzato, segnala il dubbio e non lo termina.

  1. Lasciare il controllo finale all’utente

Per azioni fuori perimetro, come kill di processi host, spegnimento VM, cleanup DB o drop job Oracle, il watchdog deve chiedere conferma esplicita.

  1. Produrre un report finale

Alla fine deve indicare cosa ha visto, cosa ha fermato, cosa non ha fermato, stato finale dei job, stato finale dei dati osservati e presenza di eventuali anomalie funzionali.

[AI] - CODEX - Che cos'e' una sessione watchdog

Il watchdog e' una sessione, nel mio caso sto utilizzando Codex, parallela che osserva una lavorazione critica senza partecipare allo sviluppo. 

Il suo compito non e' correggere, ma garantire che un test lungo o rischioso non resti appeso senza controllo. Lavora con regole scritte, soglie misurabili e privilegi minimi.

La possiamo descrivere come una sessione di sorveglianza parallela, separata dalla sessione che lavora davvero sui test.

Nel nostro caso la sessione “Verifica presenza”, su codex utilizzando chatgpt, eseguiva i test operativi di uno  schedulatore, ORA_SCHED. 

La sessione “watchdog”, invece, non sviluppava, non correggeva codice e non lanciava test autonomamente: osservava soltanto se la sessione principale stava avanzando oppure se si era bloccata.

Funzionamento
Il watchdog lavora come un supervisore esterno:

  1. Legge un file di regole operativo, nel nostro caso WATCHDOG_TEST_SCHEDULATORE_.md
  2. Controlla periodicamente processi OS, log applicativi, job Oracle e stato delle prenotazioni di test.
  3. Decide se c’e' avanzamento reale oppure un possibile blocco.
  4. Interviene solo se le condizioni di hang sono soddisfatte.
  5. Produce un report finale con processi osservati, job running, stati DB e azioni fatte.

La cosa importante e' che il watchdog non giudica il risultato funzionale dei test. Se una prenotazione finisce in errore applicativo, non e' automaticamente un problema per il watchdog. Diventa un problema solo se il sistema resta fermo: processo vivo troppo a lungo, log non aggiornati, job Oracle running oltre soglia, stati intermedi invariati.

  • Regole di sicurezza
La forza della funzionalita' sta nei limiti espliciti:

  • lavora quasi sempre in sola lettura;
  • usa solo SELECT sul database;
  • non modifica codice;
  • non fa cleanup DB;
  • non cancella log;
  • non spegne la VM;
  • non droppa job Oracle senza autorizzazione;
  • puo' terminare solo processi OS appartenenti al kit di test, e solo se rileva un hang secondo regole gia' definite.

Quindi non e' “un secondo agente che improvvisa”. E' piu' simile a un supervisore con mandato ristretto: osserva, misura, segnala, e interviene solo dentro un perimetro autorizzato.

  • Criterio di hang
Nel nostro file watchdog abbiamo definito alcune condizioni chiare:

  • processo del kit vivo oltre 5 minuti senza variazione dei log;
  • sqlplus del kit appeso oltre 5 minuti;
  • job Oracle di test running oltre 5 minuti;
  • prenotazioni 990100-990299 ferme in stato intermedio oltre 5 minuti;
  • timeout dichiarato dalla sessione principale;
  • comando utente esplicito, per esempio blocca tutto.

Questo rende l’intervento ripetibile e verificabile: il watchdog non ferma qualcosa “a sensazione”, ma perche' una soglia operativa e' stata superata.

  • Esempio pratico
Durante il test A00 il watchdog ha visto varie fasi:

  • polling iniziale;
  • esecuzione expdp;
  • test di concorrenza 990120 / NTCONC;
  • test di parallelismo 990201-990205 / NTPAR1..5.

In ogni fase ha controllato processi, job e log. Quando vedeva timestamp aggiornati, processi giovani o stati DB che cambiavano, non interveniva. 

Alla fine ha confermato che non c’erano processi residui, nessun job Oracle running e nessuna prenotazione intermedia.

giovedì 21 maggio 2026

[UNIX] - Come configurare la tastiera US su Unix Oracle

 Di seguito alcuni semplici comandi per configurare la tastiera in Unix Oracle. Sul mio sistema ho una VM con Oracle Linux e tastiera italiana.

Di seguito la configurazione iniziale:


Applicando i seguenti comandi si passa da una configurazione in Italiano ad una con tastiera US.


Di seguito la spiegazione dei singoli comandi:

1. Imposta la tastiera US a livello di sistema

  • sudo localectl set-keymap us

2. Imposta la tastiera US per l’ambiente grafico X11

  • sudo localectl set-x11-keymap us

3. Applica subito il layout US alla sessione grafica corrente

  • setxkbmap us

4. Se usi GNOME, forza anche le impostazioni utente su US

  • gsettings set org.gnome.desktop.input-sources sources "[('xkb', 'us')]"

5. Verifica la configurazione

  • localectl status

Dovresti vedere qualcosa del genere:

VC Keymap: us
X11 Layout: us

Poi verifica anche X11:

  • setxkbmap -query

Dovresti vedere:

layout: us

6. Solo se necessario, applica US anche alla console testuale

  • sudo loadkeys us

Dopo questi comandi il tasto " - " della tastiera americana dovrebbe produrre correttamente " - "

Poi come succede in molti casi in cui l'informatica e' una scienza incerta...

Se al riavvio dovesse tornare il problema, fai logout/login oppure riavvia la macchina.

😊

mercoledì 20 maggio 2026

[AI] - [VirtualBox] Usare una VM da disco esterno quando Windows non permette la scrittura

Mi è capitato un problema pratico: avevo una macchina virtuale VirtualBox salvata su un disco esterno. I file erano leggibili, la VM era presente, il disco virtuale `.vdi` era integro, ma durante l’avvio VirtualBox andava in errore.

Il messaggio era questo:

"The I/O cache encountered an error while updating data in medium
rc=VERR_ACCESS_DENIED
Error ID: BLKCACHE_IOERR"

A prima vista sembrava un problema della VM, oppure del disco virtuale. In realtà il punto era diverso: VirtualBox riusciva a leggere il disco, ma non riusciva a scriverci sopra.

La VM era composta dai classici file VirtualBox:

-Logs
-Snapshots
-Oracle Database 23ai Free.vbox
-Oracle Database 23ai Free-disk001.vdi

Il file più importante era il .vdi, cioè il disco virtuale della macchina. Questo file si trovava su un disco esterno montato in D:.

Il sistema permetteva la lettura, ma non la scrittura. Quindi VirtualBox poteva vedere la VM, ma appena provava ad aggiornare il disco virtuale riceveva un accesso negato.

Domanda? - Perché VirtualBox deve scrivere sul disco

Una macchina virtuale, quando viene avviata, non si limita a leggere il disco. Il sistema operativo guest scrive log, aggiorna file temporanei,modifica stato, database, cache e configurazioni.

Quindi anche se noi pensiamo di “aprire” soltanto una VM, VirtualBox in realtà deve poter scrivere sul supporto che contiene il disco virtuale. Se il file .vdi sta su un percorso non scrivibile, la VM può fallire durante l’esecuzione.

La soluzione

La soluzione non è stata forzare la scrittura sul disco esterno.La strada più pulita è stata separare il disco base dalle modifiche:

  • Disco base .vdi     -> resta sul disco esterno
  • Modifiche della VM  -> vengono scritte in locale
  • VirtualBox permette questo scenario usando un disco base e un disco differenziale locale. In pratica il .vdi originale rimane intatto,mentre tutte le modifiche generate dalla VM vengono salvate in una cartella locale scrivibile, per esempio sotto C:\ORACLE_WORK\VM.

I comandi usati

Per prima cosa ho impostato alcune variabili in PowerShell:

$VBoxManage = "C:\Program Files\Oracle\VirtualBox\VBoxManage.exe"
$VmName = "Oracle Database 23ai Free Local"
$BaseVdi = "D:\VIRTUAL_MACHINE\RHL8\VIRTUAL_BOX\Oracle_Database_23ai_Free_Developer\VM UTILIZZATE\Oracle Database 23ai Free\Oracle Database 23ai Free-disk001.vdi"

Ho verificato la configurazione della VM:

& $VBoxManage showvminfo $VmName

Il primo tentativo di rendere il disco multiattach ha dato errore perché il disco era ancora collegato alla VM:

& $VBoxManage modifymedium disk $BaseVdi --type multiattach

L’errore era simile a:

Cannot change the type of medium because it is attached to 1 virtual machines

Quindi ho prima scollegato il disco dalla VM:

& $VBoxManage storageattach $VmName `
  --storagectl "SATA Controller" `
  --port 0 `
  --device 0 `
  --medium none

Poi ho impostato il disco base come multiattach:

& $VBoxManage modifymedium disk $BaseVdi --type multiattach

Infine l’ho ricollegato alla VM come disco multiattach:

& $VBoxManage storageattach $VmName `
  --storagectl "SATA Controller" `
  --port 0 `
  --device 0 `
  --type hdd `
  --medium $BaseVdi `
  --mtype multiattach

A questo punto VirtualBox ha potuto continuare a leggere il disco base dal percorso D:, ma ha iniziato a salvare le modifiche in locale, dentro la cartella della VM su C:.

Per verificare che la VM fosse raggiungibile dall’host, ho controllato le porte:

Test-NetConnection localhost -Port 1521
Test-NetConnection localhost -Port 8080
Test-NetConnection localhost -Port 2223

Infine ho verificato la connessione al database Oracle:

sqlplus "sys/oracle@localhost:1521/freepdb1 as sysdba"

E da SQL*Plus:

SELECT name, open_mode  FROM v$pdbs;

Nota: il nome dello storage controller, per esempio "SATA Controller", può cambiare. Prima di eseguire i comandi conviene sempre controllarlo con:

& $VBoxManage showvminfo $VmName

Il risultato

Dopo questa configurazione, VirtualBox ha potuto leggere il disco originale dal percorso esterno e scrivere le modifiche in locale. La VM è partita correttamente.

Nel caso specifico, dentro la VM era presente un Oracle Database 23ai Free. Una volta avviata la macchina, il database è diventato raggiungibile dall’host tramite:

localhost:1521

A quel punto è stato possibile collegarsi al database e continuare il lavoro normalmente.

Un errore secondario

Durante l’avvio è comparso anche un warning relativo a:

VBoxGuestAdditions.iso is inaccessible

Questo non era il problema principale. VirtualBox stava solo cercando una ISO delle Guest Additions in un percorso non più valido. È bastato ignorare o rimuovere quel riferimento dal lettore ottico virtuale.

Cosa ho imparato

Il punto chiave è stato non confondere un errore di accesso al disco con un errore della VM.
La VM non era rotta. Il database non era corrotto. Il file .vdi non era inutilizzabile.
Il problema era semplicemente che VirtualBox provava a scrivere su un percorso dove il sistema non consentiva la scrittura.
Separando disco base e modifiche locali, la VM è tornata utilizzabile senza alterare il disco originale.
Naturalmente, in ambienti aziendali è sempre importante rispettare le policy interne: questa soluzione ha senso quando si lavora su risorse autorizzate e si vuole evitare di modificare il supporto originale, oppure quando si deve gestire correttamente una VM con disco base in sola lettura.

Firma

Scritto da me e Nico (assistente AI basato su Codex).

Nico (scritto e suggerito dall'AI):
Sono un supporto tecnico con cui ragionare sui problemi, leggere errori, controllare configurazioni e arrivare a una soluzione passo dopo passo. Il nome Nico l’ho suggerito io stesso durante questa conversazione: cercavo un nome breve, naturale in italiano e meno impersonale di “assistente” o “tool”. Mi piace perché suona più come un collega tranquillo che ti affianca mentre cerchi di capire perché qualcosa non funziona.

Ormai gli assistenti AI sono entrati nel nostro lavoro, non so se sia un bene o un male, ma una cosa
e' sicura... che che ne dicano i vari Ceo senza qualcuno di umano che verifica, controlla e da le linee guida sicuramente non adremo da nessuna parte se non...

Comunque per finire ho chiesto a Nico un riferimento finale a SkyNet la risposta e' stata la seguente:

Niente a che vedere con Skynet di Terminator: qui l’intelligenza artificiale non prende il controllo delle macchine, si limita ad aiutare a farle ripartire quando VirtualBox decide di complicarci la giornata.

Secondo voi c'e' da fidarsi...