martedì, 19 Marzo 2024

[JavaScript] Calcola il percorso più breve tra due punti su una griglia

Vediamo oggi come creare in JavaScript una griglia sulla quale posizionare due punti e trovare il percorso più breve evitando degli ostacoli.

A titolo di curiosità ho svolto un esercizio simile (ma senza l’uso di Nodi) in Python: [python] Esercizio su funzioni ricorsive e calcolo del percorso minore possibile

Il risultato che vogliamo ottenere sarà simile a questo (avere la possibilità di impostare una dimensione e il numero di ostacoli). Versione semplice:

Versione un po’ più complicata:

Questo esercizio è consultabile anche al seguente link.

Procediamo con ordine e andiamo anzitutto a creare una classe per gestire le singole celle e quelle ad esse collegate. Vogliamo creare un sistema collegato a nodi, che rappresenti la connessione tra tutte le celle. Definiamo perciò una classe nel modo seguente:

In particolare voglio mettere in evidenza il metodo addVicino(nodo)

Vogliamo che ogni nodo sia interconnesso con il proprio vicino, quindi se abbiamo due nodi A e B allora A avrà nei vicini B e B avrà nei vicini A.

Costruiamo adesso la classe che creerà la mappa. Nel codice ho inserito i commenti ai vari metodi:

In particolare vorrei soffermarmi sul controllo dei vicini con il metodo nMaxVicini(nodo,percorso)

Durante la ricerca del percorso voglio evitare tutti quei percorsi che si annodano a serpentina, perché tanto non sarebbero mai il percorso migliore. Se un percorso è così annodato, significa che esiste un nodo che ha almeno 3 vicini, durante la costruzione almeno 2 (ricordiamoci che il nodo successivo non è stato ancora aggiunto). Quindi ogni nodo, durante la costruzione, non deve avere più di un vicino.

Completiamo il tutto con la creazione della griglia vera e propria:

E naturalmente con un po’ di CSS:

E infine la pagina HTML per mettere il tutto insieme.

Vediamo infine un esempio funzionante del codice.

[JavaScript] Esercizio per realizzare il gioco del campo minato

Vediamo come realizzare un prototipo del gioco del campo minato, ideato da Robert Donner e Curt Johnson e pubblicato nel 1990 nella raccolta Microsoft Entertainment Pack 1 per Windows 3.1. Negli anni successivi il gioco divenne famoso anche con il nome Prato Fiorito.

Il gioco si basa sullo scoprire le mine nascoste nel campo, quando si scopre una cella che non contiene mine questa può essere vuota, oppure avere un numero che ci indica quante mine limitrofe sono presenti. Il risultato che vogliamo ottenere sarà simile a questo:

Per questo esercizio ho utilizzato il font Digital Counter 7, sviluppato da Sizenko Alexander

Anzitutto abbiamo bisogno di creare lo spazio per il nostro gioco. Creiamo quindi una pagina HTML come nel codice seguente:

Ogni cella del gioco dovrà contenere 4 proprietà diverse:

  1. indicatore se c’è o meno una mina
  2. indicatore se la cella sia o meno aperta
  3. il conteggio delle mine limitrofe
  4. indicatore se è stata messa o meno una bandierina

Faccio notare come i punti 3 e 1 possono essere riassunti in un’unica variabile, all’occorenza.

Creiamo quindi anzitutto un oggetto opportuno nel modo seguente:

Dentro a $(document).ready(function() {}); andiamo ad inizializzare il resto del gioco come segue.

Anzitutto popoliamo il nostro campo di celle:

Andiamo poi a distribuire tutte le mine, in base al numero prescelto.

Costruiamo ora una funzione ricorsiva per il controllo delle mine medesime.

Aggiungiamo anche una funzione per quando il gioco sarà finito e vorremo visualizzare tutte le mine:

A questo punto aggiungiamo una funzione per consentire il click sulle singole caselle:

E una per aggiungere le bandierine:

Il file JavaScript nel suo complesso sarà simile al seguente:

Affinché il tutto funzioni abbiamo bisogno anche di un po’ di CSS:

E il gioco è fatto.

Qui è possibile trovare una versione funzionante del gioco (con qualche aggiunta extra).

[python] Classe in Python per accedere con pyodbc ad un database MS Access

Vediamo un semplice esempio di una classe costruita in Python per accedere ad un database MS Access (*.mdb, *.accdb) utilizzando la libreria pyodbc.

Anzitutto procuriamoci pyodbc utilizzando PIP

Creiamo la nostra classe nella maniera seguente (nel mio caso creerò un file chiamato accessdb.py):

Il metodo In restituisce, se presente, l’ultimo ID inserito. Il metodo Out restituisce una lista di dizionari, con i nomi delle colonne e i valori per ogni riga.

Immaginiamo di posizionare il suddetto file in una sottocartella librerie.

Possiamo usare la classe nella maniera seguente:

ATTENZIONE! Nella stringa di connessione va inserito il percorso assoluto del file del database.

[FIFA22] Steam errore – Esci da eventuali giochi o strumenti in esecuzione prima di provare a verificare i tuoi file locali (RISOLTO)

Problema: Cercando di avviare FIFA 22 da Steam appare il seguente messaggio di errore “Esci da eventuali giochi o strumenti in esecuzione prima di provare a verificare i tuoi file locali” e il gioco non si avvia.

Soluzione: Disinstallare Origin e riavviare il gioco.

Quando si cerca di avviare FIFA 22 da Steam appare un popup di errore come il seguente.

Per quanto si possa cercare di riparare i file e avviare il gioco, quest’ultimo semplicemente non parte.

Per risolvere il problema è sufficiente (e necessario purtroppo!) disinstallare Origin.

Andare su App e funzionalità e individuare l’installazione di Origin.

 

Selezionare e scegliere disinstalla. Si aprirà una finestra come la seguente.

Confermare la disinstallazione.

Una volta completata avviare il gioco, comparirà una schermata come la seguente per l’installazione di OriginThinSetup.

Confermare cambiando eventualmente il percorso di installazione.

Adesso possiamo tornare a giocare a FIFA 22.

[risolto] Plesk: Unable to manage service by phpinimng: (‘start’, ‘plesk-php73-fpm’). Service plesk-php73-fpm is down after attempt to start it

Problema: Impossibile avviare il servizio PHP-FPM 7.3.5 su Plesk. Viene visualizzato un errore del genere Unable to manage service by phpinimng: ('start', 'plesk-php73-fpm'). Service plesk-php73-fpm is down after attempt to start it

Soluzione: Questo problema dipende spesso da errori di configurazione nei file che si trovano in /opt/plesk/php/7.3/etc/php-fpm.d/ oppure dalla presenza di file orfani, dopo la cancellazione di un servizio. Controllare tutti i file e rimuovere gli eventuali orfani (questa è la prima soluzione da valutare).

Nel mio caso specifico, a seguito della cancellazione di un sottodominio, era rimasto il file di configurazione del sottodominio stesso.

Entrando in SSH ed eseguendo rm /opt/plesk/php/7.3/etc/php-fpm.d/sottodominio.orfano.conf il problema si è risolto. E’ stato sufficiente riavviare il servizio e riapplicare la configurazione corrente su uno qualsiasi dei domini attivi che utilizzano il PHP 7.3

[virtualbox] Failed to query SMC value from the host (VERR_INVALID_HANDLE)

Problema: Avviare una macchina virtuale di MacOS su VirtualBox produce l’errore Failed to query SMC value from the host (VERR_INVALID_HANDLE). Un altro sintomo è una generale lentezza di tutte le macchine virtuali su VirtualBox.

Soluzione: Questo errore è dovuto probabilmente a Hyper-V che va disabilitato all’avvio di Windows. Per farlo è sufficiente aprire il prompt dei comandi come amministratore e digitare bcdedit /set hypervisorlaunchtype off. Riavviare infine il PC.

La procedura può essere eseguita anche dalla PowerShell.

Cliccare col destro sul tasto di avvio di Windows e selezionare Windows PowerShell (Amministratore)

Digitare bcdedit /set hypervisorlaunchtype off

Premere INVIO.

Riavviare il PC.

[c#] Semplice classe per gestire connessione e query su un database MySQL

Il nostro scopo è scrivere una semplice classe in C# che permetta di gestire l’inserimento e la lettura dei dati dal database. La caratteristica saliente che ci interessa in questo caso è l’accesso ai dati, in fase di lettura, tramite una List<ListDictionary>, che consente di trattare i risultati come una lista di dizionari.

La classe che vogliamo creare permetterà un utilizzo simile a questo:

La classe sarà formata invece nel modo seguente:

 

[wordpress] Errore RSS: WP HTTP Error: cURL error 60: SSL certificate problem: certificate has expired

Questo errore si presenta nel feed RSS di WordPress a causa di un certificato intermedio scaduto utilizzato da cURL.

Il problema è spesso causato da LetEncrypt. Per risolvere il problema è sufficiente disabilitare il certificato DST CA X3 scaduto.

Per farlo su Ubuntu digitiamo nel terminale i seguenti due comandi:

sed -i 's/mozilla\/DST_Root_CA_X3.crt/!mozilla\/DST_Root_CA_X3.crt/g' /etc/ca-certificates.conf

update-ca-certificates

[risolto] TekkenGame-Win64-Shipping.exe crash con eccezione 0xc0000005

Problema: Tekken 7 su PC (Steam) va in crash con codice di eccezione 0xc0000005 (nel mio caso succedeva quando si tentava una partita VS in locale)

Soluzione: Da Steam verificare l’integrità dei file di gioco.

Tekken 7, installato sul PC da Steam, comincia a crashare senza motivo apparente quando si sta per avviare una partita VS. Dopo aver provato in vano a modificare la risoluzione (passando anche dalla modalità schermo intero a quella borderless e infine a quella a finestra), modificare l’assetto grafico e perfino disattivare l’antivirus, ho eseguito la verifica di integrità dei file di gioco su Steam e questo ha risolto il problema.

L’errore nel registro di Windows dovrebbe apparire come qualcosa del genere:

Nome dell'applicazione che ha generato l'errore: TekkenGame-Win64-Shipping.exe, versione: 1.0.1.0, timestamp: 0x61fb9339
Nome del modulo che ha generato l'errore: TekkenGame-Win64-Shipping.exe, versione: 1.0.1.0, timestamp: 0x61fb9339
Codice eccezione: 0xc0000005
Offset errore 0x0000000000745b24
ID processo che ha generato l'errore: 0x15fc

Per risolvere il problema è dunque sufficiente andare nella libreria di Steam.

Cliccare col destro sul gioco e poi su Proprietà

Nella finestra delle proprietà spostarsi su File Locali.

Infine cliccare su Verifica integrità dei file di gioco…

Il processo richiederà qualche minuto probabilmente e dopodiché il problema dovrebbe essere risolto.

[apache] Isolare VirtualHost su Apache2

Per isolare un VirtualHost su apache ed impedire che si possa accedere agli altri VirtualHost, è sufficiente aggiungere la direttiva riguardante il PHP php_admin_value open_basedir /var/www/torregatti.it/

In questo caso l’unica cartella accessibile è la /var/www/torregatti.it/

Se si vogliono aggiungere più cartelle per quel VirtualHost si può scrivere /var/www/torregatti.it/:/altra/cartella/

Nel file di configurazione del VirtualHost avremo qualcosa del genere:

Usando chmod o-rw su /var/www possiamo isolare la cartella dall’accesso esterno degli utenti.