martedì, 3 Dicembre 2024

[python] Semplice esercizio per creare il gioco del campo minato in Python (da console)

In questo semplice esercizio vogliamo riprodurre in Python, in modo un po’ rudimentale, quello che era il gioco del campo minato (poi campo fiorito) per Windows.

Quello che vogliamo ottenere assomiglierà a questo all’avvio:

Mentre alla vittoria otterremo qualcosa di simile:

Il gioco sarà costruito su una griglia 10×10, di 100 caselle in totale, che faremo selezionare all’utente con un numero da 1 a 100.

Anzitutto costruiamo la griglia fatta di oggetti di tipo Casella, definiti nel modo seguente:

Per costruire il campo useremo la funzione random.randint() per distribuire le mine in modo casuale, nel modo seguente:

In questo caso la variabile difficolta viene usata per bilanciare la distribuzione casuale. Se impostiamo difficolta su 2, avremo in media il 50% di caselle con mine (1/2). Se impostiamo difficolta su 10 allora avremo circa il 10% di mine (1/10), ecc.

Fatto questo dobbiamo costruire due metodi che si occuperanno rispettivamente di conteggiare le mine e aprire le celle. All’interno di entrambi i metodi useremo due cicli for ricordandoci che rispetto alla posizione attuale quelle intorno partiranno da [-1,-1] fino a [1,1]

Riporto di seguito il codice, commentato, dell’intero giochino realizzato a partire da queste idee:

 

Ripristino password admin (webpanel) per accesso web ad allarme FC-7688

L’allarme FC-7688 dispone di un pannello di controllo via web che consente di configurare e gestire l’allarme. Per assurdo alcune opzioni sono disponibili esclusivamente da tale pannello di controllo e qualora si dovesse smarrire la password di amministratore non ci sarebbe nemmeno modo di ripristinare le impostazioni di fabbrica del dispositivo. Il dispositivo in questione è il seguente:

Il pannello di controllo, nella versione a cui faccio riferimento a questo aspetto:

Mentre la pagina di configurazione della password tipicamente ha questo aspetto:

Per maggiori informazioni sul modello e la configurazione del sistema rimando al manuale ufficiale: FC-7688 USER MANUAL. Read this instruction thoroughly before installation and use of this device. P_N_ A02

Detto questo i dati di accesso predefiniti sono:

username: admin

password: 012345

E’ possibile modificare questi dati a piacere accedendo al suddetto pannello di controllo e salvare, ma bisogna prestare attenzione. La password può contenere esclusivamente caratteri alfanumerici e deve essere lunga non più di 8 caratteri. Qualora si dovesse inserire una password più lunga è probabile che si finisca bloccati dall’accesso, non riuscendo più a collegarsi con nessun nome utente.

In tal caso si può ripristinare l’accesso procedendo nella maniera seguente:

  1. Spegnere completamente l’allarme rimuovendo eventuali batterie collegate
  2. Accendere nuovamente l’allarme
  3. Per i primi 10 secondi è possibile accedere con le impostazioni di fabbrica che sono:
    username: admin
    password: 000000
  4. Una volta effettuato l’accesso andare su Password dalla schermata principale
  5. Modificare nuovamente nome utente e password a piacere
  6. Ricordarsi che la password deve essere puramente alfanumerica con al massimo 8 caratteri

Fatto tutto questo avremo ripristinato l’accesso al sistema.

[moodle] Migrazione di Moodle 3.4 su nuovo server e dominio

Questa guida fa riferimento a Moodle 3.4, ma in linea generale dovrebbe essere valida per tutte le versioni di Moodle 3.x.

Per determinare la versione del proprio Moodle è sufficiente consultare il file version.php nella root del portale.

All’occorenza possiamo impostare Moodle in modalità manutenzione, durante il trasferimento.

1. Backup di tutti i dati

Anzitutto dobbiamo effettuare il backup di tutti i dati.

Moodle si trova tipicamente distribuito in due cartelle, la root del virtualhost e una cartella per i dati.

Per esempio le due cartelle potrebbero trovarsi in:

radice virtual host > /var/www/vhosts/petarkaran.it/htdocs

cartella dei dati > /var/www/vhosts/petarkaran.it/dati_moodle

La cartella dei dati dovrebbe trovarsi sempre in un’ubicazione privata, non accessibile direttamente dal virtualhost. Ovviamente deve essere accessibile ad apache.

Questo vuol dire che dobbiamo ricreare entrambe le posizioni sul nuovo server (con l’eventuale nuovo dominio).

ATTENZIONE! Se il backup dei dati viene fatto tramite FTP bisogna impostare il trasferimento dei dati su binario

A questo punto l’ideale sarebbe fare un file zip per il contenuto di ciascuna delle due cartelle. Per farlo su server Linux è sufficiente digitare:

Il comando va eseguito all’interno di ciascuna cartella. Se volessi farlo in sequenza per le suddette due cartelle, dovrei fare:

Se si dovesse procedere con un client FTP invece, assicuriamoci, come evidenziato prima, di impostare il trasferimento su binario.

Su FileZilla bisogna andare su Modifica > Impostazioni > Trasferimenti > Tipi di file e selezionare Tipo di trasferimento predefinito > Binario, come nell’immagine:

Fatto tutto questo eseguiamo il backup del database.

Se abbiamo fatto tutto correttamente avremo 3 file di backup:

  • cartella della radice principale di moodle
  • cartella dei dati di moodle
  • file SQL del database

2. Importare il database

Adesso predisponiamo il database MySQL/MariaDB.

Anzitutto assicuriamoci che il set di caratteri del nuovo database sia utf8mb4

Per importare il database potrebbe essere necessario modificare alcuni parametri del database stesso.

In particolare potrebbe essere necessario modificare il file /etc/mysql/my.cnf aumentando i parametri innodb_log_file_size e max_allowed_packet

Prima di importare il file dobbiamo sostituire dentro tutti i parametri del vecchio dominio. Se per esempio stessimo migrando la piattaforma da petarkaran.it a petarkaran.org allora dovremmo usare il Trova e Sostituisci di un opportuno editor di testo (per esempio Notepad++).

Una volta sostituiti tutti gli indirizzi possiamo importare il file sql nel nuovo database.

3. Trasferire i dati e modificare il file config.php

A questo punto ricostruiamo la struttura delle cartelle della radice e dei dati sul nuovo server. Immaginiamo di creare:

radice virtual host > /var/www/vhosts/petarkaran.org/htdocs

cartella dei dati > /var/www/vhosts/petarkaran.org/dati_moodle

Scompattiamo dentro i dati (o trasferiamoli tramite FTP) ed assicuriamoci che i permessi siano impostati correttamente sull’utente di apache del nuovo server.

Fatto questo modifichiamo le seguenti voci del file config.php nella radice del virtualhost:

Ovviamente bisogna inserire i dati corretti.

4. Avviare Moodle e pulire la cache

Una volta avviato Moodle possiamo effettuare l’accesso. Prima di rendere tutto operativo dobbiamo solamente svuotare la cache per far ripartire tutto da capo con i nuovi parametri.

Per farlo andiamo su Dashboard > Amministrazione del sito > Sviluppo > Svuota le cache

Premiamo il tasto Svuota Cache

[windows] Installazione di Microsoft Exchange Mailbox server su Windows Server 2016

Per installare Exchange abbiamo bisogno di un Windows Server configurato come controller di dominio. Per tale configurazione rimando alla guida Configurazione Windows Server 2016 con Dominio, DNS e DHCP [per esordienti totali

1. Installazione di Exchange Server

Inseriamo il disco di installazione di Exchange Server 2016 che comparirà in Questo PC > Dispositivi e unità:

Accediamo al disco ed avviamo il Setup.

Si avvierà la richiesta di verifica degli aggiornamenti, nel mio caso li eseguirò semmai successivamente, selezionando dunque Non verificare la disponibilità di aggiornamenti adesso.

Premiamo Avanti. Si avvierà la copia dei file, attendiamo:

Nella schermata successiva scegliamo Avanti.

Accettiamo il Contratto di licenza.

Nella schermata successiva scegliamo Usa impostazioni consigliate:

Nella Scelta del ruolo del server selezioniamo Ruolo Cassette postali e Installa automaticamente ruoli e funzionalità di Windows Server necessari per installare Exchange Server.

Premiamo di nuovo avanti.

A questo punto selezioniamo la posizione di installazione di Exchange, possiamo lasciare quella predefinita e premere nuovamente Avanti.

Specifichiamo un nome per la nostra organizzazione Exchange, per esempio la Torregatti Spa. Premiamo di nuovo Avanti.

Alla richiesta se disabilitare la protezione antimalaware, diciamo di No e procediamo premendo Avanti.

Verranno avviati i controlli di conformità, attendiamo.

A questo punto è molto probabile che si presenti una serie di errori, che andranno risolti.

Per risolverli basterà seguire i link ed effettuare le installazioni suggerite.

Nel mio caso vengono richieste due installazioni specifiche, il cui:

Errore:
Questo computer richiede l'aggiornamento descritto nell'articolo della Microsoft Knowledge Base KB3206632 (http://support.microsoft.com/kb/3206632). Senza questo aggiornamento, Exchange Server 2016 non funzionerà in modo affidabile su Windows Server 2016.
Per altre informazioni, visitare il sito: http://technet.microsoft.com/library(EXCHG.150)/ms.exch.setupreadiness.Win2k16LSARollupUpdateNotInstalled.aspx

Errore:
Questo computer richiede Microsoft Unified Communications Managed API 4.0, Core Runtime a 64 bit. Installare il software dal sito http://go.microsoft.com/fwlink/?LinkId=260990.
Per altre informazioni, visitare il sito: http://technet.microsoft.com/library(EXCHG.150)/ms.exch.setupreadiness.UcmaRedistMsi.aspx

Alla fine dell’installazione potrebbe essere necessario riavviare. In tal caso riavviamo e poi riprendiamo l’installazione dall’inizio.

Se tutto è andato a dovere arriveremo nuovamente alla schermata precedente con solo un elenco di avvisi. A questo punto possiamo premere su Installa.

A questo punto si avvierà l’installazione vera e propria. Attendiamo.

Quando sarà tutto completato otterremo un risultato simile al seguente.

Riavviamo il sistema.

Una volta riavviato il server è probabile che dal Server Manager si vedano diversi servizi, principalmente quelli di Exchange, non avviati.

Selezioniamo i servizi (possiamo selezionarli anche tutti utilizzando SHIFT ed il mouse), clicchiamo con il destro e scegliamo Avvia Servizio.

 

2. Configurazioni cassette postali

Quando tutto è avviato possiamo procedere alla configurazione delle cassette postali.

Accediamo al Menù Start e cerchiamo Microsoft Exchange Server 2016 > Exchange Administrative Server

Si aprirà l’interfaccia amministrativa dentro il browser web (nel mio caso Google Chrome).

Inseriamo nome utente e password dell’amministratore del dominio e premiamo accedi.

Nella scheda Destinatari > Cassette postali possiamo configurare le caselle di posta. Ogni caselle può essere associata ad un utente del dominio, oppure può essere creata una casella a se stante. Clicchiamo sul tasto più e selezioniamo Cassetta postale utente.

Ricordiamoci che il nostro dominio è petarkaran.local, quindi le caselle postali saranno del tipo nome_utente@petarkaran.local. Si aprirà quindi la finestra di configurazione della cassetta postale:

Vogliamo creare la casella luisa.neri@petarkaran.local per l’utente di dominio luisa.neri. Clicchiamo su Sfoglia… per selezionare un utente del dominio.

Selezioniamo l’utente desiderato e premiamo su Salva.

In questo modo abbiamo creato la cassetta postale desiderata per l’utente selezionato.

Se volessimo aggiungere un altro dominio al server di posta, per esempio un dominio esterno accettato, selezioniamo flusso di posta > domini accettati.

Vogliamo aggiungere torregatti.com. Clicchiamo sul più e compiliamo la scheda nel modo seguente:

Premiamo su Salva.

Andiamo su flusso di posta > criteri degli indirizzi e-mail. Facciamo un doppio click su Default Policy. Andiamo su formato indirizzi posta elettronica.

Clicchiamo sul più. Selezioniamo il dominio appena creato, modifichiamo eventualmente il nome utente e premiamo su Salva.

Nella schermata principale, se lo stato della policy è su Non applicato, clicchiamo su Applica, poi premiamo su .

In questo modo tutti i nostri destinatari di posta potranno ricevere le email anche sull’indirizzo nome_utente@torregatti.com.

[owncloud] Installare ownCloud su Ubuntu Server 20.04.1, configurazione VirtualHost, certificato HTTPS e disco dati con LVM

Vediamo come installare ownCloud su un Ubuntu Server 20.04.1. In aggiunta configureremo anche un VirtualHost con un certificato autofirmato, aggiungendo infine un disco in LVM che ospiti i dati di ownCloud.

1. Configurazione server LAMP

Anzitutto configuriamo il server LAMP installando Apache, MariaDB e il PHP 7.4.

Eseguiamo il seguente comando:

A questo punto configuriamo il database eseguendo:

ATTENZIONE! Se si esegue il commando senza sudo verrà chiesta la password dell’utente root e non ci sarà modo di cambiarla, generando l’errore: ERROR 1698 (28000): Access denied for user 'root'@'localhost'

Digitare in sequenza, per le singole domande:

Change the root password? [Y/n] Y

Remove anonymous users? [Y/n] Y

Disallow root login remotely? [Y/n] Y

Remove test database and access to it? [Y/n] Y

Reload privilege tables now? [Y/n] Y

Una volta completata la configurazione di MariaDB il server LAMP e pronto è possiamo procedere con le specifiche configurazioni.

2. Creiamo il certificato di crittografia

Se non lo abbiamo già fatto installiamo openssl. Questo ci servirà per creare un certificato autofirmato, nel caso in cui si disponga già del certificato si può passare al punto successivo.

Creiamo la chiave privata e il certificato:

Nel caso specifico stiamo dicendo ad openssl:

  • req sottocomando col quale specifichiamo che vogliamo usare l’X.509 CSR (certificate signing request), un’infrastruttura standard per le chiavi pubbliche utilizzata tipicamente con SSL e TSL
  • nodes indica ad OpenSSL di non cifrare il certificato con una password, dal momento che verrà utilizzato su Apache che deve potervi accedere liberamente
  • days specifica la durata di validità del certificato, nel nostro caso 365 giorni
  • newkey specifica il tipo di chiave privata (RSA 2048) che si vuole generare e il fatto che la si voglia generare assieme al certificato
  • keyout indica la posizione dove creare la chiave
  • out indica la posizione dove creare il certificato

Rispondiamo ai quesiti posti da OpenSSL per la configurazione del certificato. Nel mio caso procederò così:

Country Name (2 letter code) [AU]:IT
State or Province Name (full name) [Some-State]:Firenze
Locality Name (eg, city) []:Firenze
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Torregatti Spa
Organizational Unit Name (eg, section) []:Servizi Cloud
Common Name (e.g. server FQDN or YOUR name) []:cloud.local
Email Address []:scrivi@petarkaran.it

I valori sono per lo più arbitrari, l’unica cosa importante è il Common Name, che può essere l’indirizzo IP del server, oppure il dominio a cui sarà associato il certificato.

Configuriamo Apache affinché utilizzi correttamente i certificati SSL:

Nel file digitiamo:

Affinché la configurazione funzioni dobbiamo attivare il modulo SSL e il modulo Headers in Apache.

A questo punto attiviamo la configurazione digitando:

Affinché la configurazione sia corretta bisogna riavviare Apache, anche se non è necessario farlo adesso, lo possiamo fare anche dopo.

3. Configuriamo il VirtualHost

A questo punto configuriamo il nostro VirtualHost, immaginiamo che il nostro ownCloud debba trovarsi all’indirizzo cloud.local. (nel caso specifico da http://cloud.local e https://cloud.local)

Creiamo anzitutto due cartelle in /var/www, una per i file, una per i dati ed una per i log, entrambe sottocartelle di cloud.local, nella maniera seguente.

Grazie all’argomento -p creiamo l’intero percorso anche se non esiste.

A questo punto procediamo con la creazione del file del VirtualHost vero e proprio.

Nel file inseriamo le seguenti istruzioni.

In questo modo forziamo il redirect sul HTTPS e abilitiamo il certificato creato in precedenza.

A questo punto riavviamo apache:

4. Creazione partizione per i dati con LVM

Aggiungiamo al nostro server un disco aggiuntivo a creiamo un nuovo disco logico con LVM. Per ulteriori approfondimenti sulla procedura rimando all’articolo LVM, gestore logico dei volumi su Ubuntu [per pinguini alle prime armi]

Anzitutto vediamo i dischi dei quali disponiamo con:

Nel mio caso (sto utilizzando VirtualBox per l’esempio con 2 dischi da 10GB ciascuno):

Il disco che utilizzerò è /dev/sdb. Procediamo quindi a preparare il disco:

Su fdisk digitiamo in ordine:

  1. n per creare una nuova partizione
  2. p per una partizione primaria
  3. 1 numero di partizione
  4. INVIO per confermare il primo settore di default 2048
  5. INVIO per confermare l’ultimo settore
  6. t per modificare la partizione
  7. 8e per impostare Linux LVM
  8. w per scrivere e salvare il tutto

Utilizzando sudo fdisk -l dovremmo vedere qualcosa di simile:

Creiamo un volume fisico digitando:

Creiamo un gruppo di volumi chiamato dati-cloud digitando:

Creiamo sopra il volume logico dati:

Formattiamo il volume in ext4.

A questo punto montiamo il nuovo volume logico sulla cartella /var/www/cloud.local/dati

Siccome vogliamo che il disco sia montato in modo permanente, modifichiamo /etc/fstab.

In fondo al file aggiungiamo la seguente riga:

In questo modo al riavvio del server il volume logico verrà caricato automaticamente.

5. Creiamo un database per ownCloud

ownCloud necessita di un database per funzionare, pertanto creiamone uno nuovo all’interno di MariaDB.

Entriamo in MariaDB/MySQL:

Una volta dentro creiamo un nuovo database chiamato cloud_db:

Creiamo anche un utente per il database appena creato, che potrà accedere esclusivamente da locale (agli scopi dell’esercizio metterò una password banale):

6. Installazione ownCloud

Scarichiamo ownCloud nella cartella httpdocs. Da qui possiamo scegliere da dove scaricarlo.

Se non abbiamo installato unzip facciamolo:

A questo punto estraiamo il file zip.

Spostiamo i file dalla cartella owncloud creata dall’unzip, nella radice del virtualhost.

In questo modo rimuoviamo anche la cartella aggiuntiva ed il file zip.

Assegniamo adesso l’utente apache a tutta la cartella ed i file creati.

Infine abilitiamo la configurazione e riavviamo apache:

Se tutto è andato bene potremo aprire ownCloud all’indirizzo https://cloud.local/

Inseriamo i parametri nella maniera seguente (utilizzando quelli creati):

  1. Scegliamo un utente ed una password
  2. Per la cartella dati impostiamo la cartella creata all’inizio
  3. Inseriamo i dati del database configurati in precedenza:

Una volta fatto tutto possiamo premere su TERMINA CONFIGURAZIONE.

Se tutto è andato bene vedremo una schermata come la seguente:

Fatto tutto questo possiamo accedere al sistema. Spostandoci su Impostazioni > Generali, potremmo notare delle notifiche come le seguenti:

Apportiamo quindi ancora un paio di modifiche per aggiustare il tutto correttamente.

Anzitutto configuriamo correttamente il crontab affinché esegua gli script di ownCloud.

Digitiamo:

Se è la prima volta che lo apriamo ci chiederà quale editor preferiamo utilizzare, io scelgo 1 per nano.

Aggiungiamo la seguente riga:

Salviamo con CTRL+O e usciamo.

Nelle suddette impostazioni di ownCloud selezioniamo come meccanismo di aggiornamento Cron.

Spostiamoci nella nostra cartella di installazione con:

Eseguiamo i seguenti comandi:

L’utilizzo di sudo -u www-data è necessario perché l’esecuzione deve essere effettuata da Apache. Eseguendolo senza sudo lo faremmo usando il nostro utente, con sudo come root. In entrambi i casi non andrebbe bene.

Per risolvere l’avviso di HTTP "Strict-Transport-Security" dobbiamo aggiungere a <VirtualHost *:443> le seguenti tre righe:

Il file definitivo del virtualhost sarà come il seguente:

Riavviamo ancora una volta apache.

A questo punto è tutto pronto e possiamo cominciare ad usare ownCloud.

[FIFA21] La connessione con l’avversario si è interrotta

Problema: Quando a FIFA21 si cerca di giocare con un amico online non sembra possibile stabilire una connessione e dopo poco compare il messaggio “La connessione con l’avversario si è interrotta

Soluzione: Assicurarsi che il router abbia abilitata l’opzione UPnP, in alternativa aprire tutte le porte necessarie sul firewall, infine provare a riavviare la connessione con il gioco aperto (questo farà sì che nel gioco venga ripristinata la connessione)

Premetto che resto convinto che la cosa dipenda quasi esclusivamente dai server EA, e che spesso sia sufficiente provare diverse volte con ostinazione. Vediamo comunque le possibili soluzioni da adottare nel dettaglio.

1. Attivare UPnP sul router

Anzitutto accedere al router. Di solito per individuarlo è sufficiente premere WIN+R e digitare cmd nella finestra di Esegui.

Nel Prompt dei comandi digitare poi ipconfig e premere INVIO. Apparirà un risultato simile al seguente:

Nel mio caso vedo che il mio computer si trova all’indirizzo 192.168.1.76, mentre il router (che si trova di solito sul gateway) è all’indirizzo 192.168.1.254

L’indirizzo dei router domestici di solito si trova su: 192.168.1.1, 192.168.0.1, 192.168.1.254, 192.168.0.254

Una volta individuato l’indirizzo corretto digitarlo nel browser (per esempio Chrome) nella barra dell’indirizzo.

Accedere con nome utente e password, in base al router che si ha a disposizione.

Individuare le impostazioni di rete, oppure le impostazioni avanzate del router. Di solito in tale posizione si trova la configurazione per l’UPnP.

Nel caso di un MediaAccess di Technicolor (il router in dotazione con la fibra di FastWeb, nel mio specifico caso il modello è il MediaAccess FGA2130FWB) l’opzione si trova sotto Avanzate > Configurazione semplificata delle porte

Assicurarsi che l’UPnP sia attivo nella maniera seguente:

Faccio notare che, su questo modello di router, dovreste poter già notare il tunneling aperto per FIFA21.

Se l’opzione è attiva non è necessario aprire le porte (o almeno non dovrebbe esserlo). Si può comunque tentare se il problema persiste.

2. Aprire le porte necessarie sul firewall

L’altra soluzione papabile è quella di aprire le opportune porte sul firewall del router. Accedendo al router sempre secondo la procedura precedente, abilitare le seguenti porte in base alla console di gioco (io ho FIFA21 sul PC con Steam, ma riporto anche le altre configurazioni)

TCP UDP
PC 3569,8080,9946,9988,10000-20000,42124 3659,9000-9999
PlayStation 4 1935,3478-3480,3659,10000-10099,42127 3074,3478-3479,3659,6000
Steam 3569,8080,9946,9988,10000-20000,27015-27030,27036-27037,42124 3659,4380,9000-9999,27000-27031,27036
Xbox One 3074,3659 88,500,3074,3544,3659,4500
Xbox Series X 3074,3659 88,500,3074,3544,3659,4500
PlaySation 5 1935,3478-3480,3659,10000-10099,42127 3074,3478-3479,3659,6000

Dalla mia esperienza dovrebbe essere comunque sufficiente l’UPnP.

3. Ripristinare la connessione durante il gioco

Nonostante l’UPnP attivo correttamente e le porte configurate sul firewall il gioco potrebbe lo stesso non partire (dando il solito errore di prima). In tal caso procedere nella maniera seguente.

  1. Avviare il gioco
  2. Mentre il gioco è avviato premere ALT+TAB per tornare su windows (oppure il tasto WIN), senza però spegnere il gioco
  3. Una volta su Windows aprire il Panello di Controllo (su Windows 10 basta cercarlo nella ricerca)
  4. Andare su Rete e Internet
  5. Selezionare Centro connessioni di rete e condivisione
  6. Sulla sinistra selezionare Modifica impostazioni scheda
  7. Identificare la propria scheda di rete, potrebbe essere quella wireless oppure ethernet, in base alla connessione e cliccarci sopra col destro
  8. Mentre il gioco è acceso cliccare su Disabilita
  9. Tornare al gioco, a questo punto dovrebbe comparire un avviso che ci informa che ci siamo disconnessi dal server EA
  10. Usando ALT+TAB tornare nuovamente sul desktop
  11. Cliccare nuovamente sulla connessione col destro e scegliere abilita
  12. Tornare nel gioco e provare a collegarsi online (ci verrà detto che sta venendo effettuata la connessione)

La procedura di disconnessione dovrebbe ripristinare la connessione col server EA. Questo passaggio sembra l’unico in grado di consentire effettivamente la connessione con l’avversario.

Conclusione

Nella mia configurazione non ho inserito le porte sul firewall, ma ho lasciato solamente attivo l’UPnP. Ciononostante avviare una partita online con un amico è pressoché impossibile al primo colpo. Dopo il primo errore di solito provo la procedura per ripristinare la connessione come al punto 3, e a quel punto il gioco online parte. In ogni caso il mio consiglio è di riprovare più volte, spesso dopo quei 20 minuti buoni di tentativi, di solito ripristinando più volte la connessione, il gioco alla fine decide che si può giocare online con un amico.

[FIFA21] Giocare da Steam, utilizzando il controller della PS4

Con mia grande soddisfazione FIFA21 è finalmente uscito anche per Steam. Ma funzionerà tutto bene, lontano dalle assurdità di Origin?

Se state usando un controller DualShock4 per PS4, è molto probabile che il gioco parta senza vedere il controller.

Per risolvere la cosa procediamo nella maniera seguente.

1. Dall’elenco dei giochi su Steam individuiamo EA SPORTS™ FIFA 21 e clicchiamoci sopra col destro. Andiamo su Gestisci > Sfoglia i file locali

2. Dalla cartella di installazione di FIFA21 andiamo su FIFASetup

3. Individuiamo il file config.ini e modifichiamolo con un editor di testo (per esempio Notepad)

4. Modifichiamo il file aggiungendo in fondo AUTO_LAUNCH = 1 e lasciando tutto il resto inalterato.

Una volta apportata la modifica salviamo il file.

Fatto questo avviamo Steam Big Picture e da dentro a SBP avviamo FIFA21, tenendo il controller DS4 collegato (nella mia configurazione ho il controller collegato al PC tramite cavo USB).

Per avviare Steam Big Picture è sufficiente cliccare sull’apposita icona in alto a destra su Steam.

Se abbiamo fatto tutto correttamente possiamo giocare a FIFA21 con il controller DualShock della PS4.

[javascript] Uncaught TypeError: Cannot read property ‘msie’ of undefined

Dalla versione jQuery 1.9 alcune funzionalità sono state deprecate, tra le quali anche quella di $.browser. Questo pò produrre errori come: Uncaught TypeError: Cannot read property 'msie' of undefined

Per risolvere il problema è sufficiente aggiungere la seguente istruzione dopo aver importato jQuery:

 

[ubuntu] Load balancer su Ubuntu Server 20.04.1 con Apache e Pound

In questa guida vedremo come configurare un load balancer utilizzando Pound su Ubuntu Server 20.04.1.

Pound è un software opensource sviluppato principalmente come reverse proxy e application firewall, utilizzato spesso per realizzare load balancer. Tra le caratteristiche salienti ci sono la capacità di rilevare lo stato di un server di backend, la possibilità di tradurre richieste in HTTPS su HTTP e un forte accento sulla sicurezza. Quando un server di backend non è raggiungibile Pound è in grado di rilevarlo, scegliendo tra gli altri server accessibili secondo criteri predefiniti a distribuzione casuale. Il tutto avviene tenendo traccia delle sessioni attive, che tipicamente permangono verso il medesimo server di backend di partenza.

La struttura che andremo a realizzare assomiglierà alla seguente:

Detto questo installiamo Ubuntu Server su tutte e tre le macchine e configuriamo opportunamente gli indirizzi di rete.

1. Configurazione rete

Questa operazione dovrà essere ripetuta in modo uguale su tutte le macchine. Procediamo con la prima. Prima di andare avanti vediamo la configurazione che vogliamo avere.

Creeremo una rete 192.168.0.0/24 nella quale le tre macchine saranno configurate nella maniera seguente:

Per visualizzare la configurazione di rete corrente (comincio dalla prima macchina) digitiamo

Comparirà qualcosa di simile:

Nel mio caso sto utilizzando una macchina virtuale con VirtualBox e la scheda di rete è enp0s3. Tipicamente al suo posto si trova eth1. L’indirizzo configurato dal DHCP è il 192.168.0.4.

La configurazione di rete si trova in /etc/netplan

Per vedere tutti i file di configurazione presenti digitiamo:

dovremmo vedere un file tipo 00-installer-config.yaml

Creiamone un backup del file digitando:

Adesso andiamo a modificare il file, bisogna fare attenzione all’identazione, che prevede 2 spazi vuoti per ciascuna sottosezione. Digitiamo:

Il file originale dovrebbe contenere qualcosa di simile:

Modifichiamolo nella maniera seguente:

Il mio gateway è il 192.168.0.1, per scoprirlo tramite DHCP possiamo digitare ip r

Una volta modificata la configurazione salviamo il file e testiamola digitando:

Se va tutto bene possiamo applicare la modifica, digitando:

Verifichiamo infine la configurazione con:

Se tutto è andato bene vedremo qualcosa del genere:

Se dovessimo cambiare il nome della macchina possiamo digitare:

Per assegnare alla macchina il nome webserver-1. Una volta modificato il nome sarà sufficiente riavviare.

2. Installazione di Pound

Adesso procediamo ad installare Pound su load-balancer-server. Per farlo digitiamo:

Per configurare Pound procediamo a modificare il file /etc/pound/pound.cfg. Digitiamo quindi:

Troveremo di default una struttura simile alla seguente nel file:

Questo significa che Pound è in ascolto sulla porta 8080 e utilizza come servizio un server di backend sempre all’indirizzo locale (qui si suppone si sia installato apache sul medesimo server). Adesso i servizi possono essere definiti in modo globale oppure relativamente ad uno specifico listener. In questo caso sono definiti all’interno di un listener. Ogni servizio ha dentro i server di backend ai quali può essere data una priorità. La priorità di predefinito è impostata su 5, i valori possibili sono da 1 a 9.

Riorganizziamo il nostro file di configurazione per ottenere il seguente risultato:

Se volessimo configurare dei servizi di emergenza, anziché usare il TAG BackEnd potremmo utilizzare Emergency. Tutto il resto rimarrebbe identico. Un server di emergenza interverrebbe solo qualora tutti gli altri backend fallissero.

Salviamo il file e modifichiamo il meccanismo di startup digitando:

Modifichiamo il file nella maniera seguente:

A questo punto riavviamo Pound. Digitiamo:

3. Installazione di Apache sui backend

Sui server di backend sarà sufficiente installare Apache, senza ulteriori configurazioni. Ricordiamoci che Pound, anche se interrogato in HTTPS si connetterà ai server di backend in HTTP.

Per farlo digitiamo semplicemente:

Una volta installato Apache modifichiamo l’output predefinito del webserver. Per farlo cancelliamo il file originale e creiamone uno nuovo.

In questo caso ci scriverò dentro il nome del WebServer, per esempio:

Configuriamo ora il backend affinché effettui il log per le richieste X-Forwarded-For.

Anzitutto abilitiamo l’estensione remoteip di apache.

Modifichiamo il file di configurazione digitando:

Modifichiamo il seguente paragrafo del file:

Faccio notare che l’IP 192.168.0.5 è quello della macchina col Pound.

Riavviamo Apache:

Ripetiamo questa procedura su ogni backend.

4. Prova di funzionamento

A questo punto colleghiamoci al nostro server con Pound, nel mio caso si trova all’indirizzo http://192.168.56.1/

Aggiornando più volte la pagina vedremo comparire, in modo casuale, la risposta del webserver-1 oppure del webserver-2

Oppure:

[PHP] Classe in PHP per autenticazione utenti con LDAP

Immaginiamo di avere un server Windows con dominio chiamato torregatti.local. Possiamo effettuare l’autenticazione tramite PHP utilizzando il metodo LDAP (Lightweight Directory Access Protocol).

Anzitutto assicuriamoci di avere attiva la libreria LDAP all’interno del PHP.

Su Linux possiamo installare la libreria, per esempio con Ubuntu digitiamo:

Mentre su Windows, per esempio usando XAMPP, sarà sufficiente attivare l’estensione nel file php.ini, rimuovendo il commento alla seguente riga:

Che diventerà quindi:

Fatto questo possiamo creare una classe che si occupi del processo di login.

Prima di procedere vediamo il minimo indispensabile per effettuare il processo:

In questo caso stiamo entrando con l’utente amministratore TORREGATTI\ADMINISTRATOR che ha per password Password123

Ricordiamoci che nel nostro esempio il dominio è torregatti.local e il server si trova sull’indirizzo 192.168.56.1. Ci stiamo collegando con una connessione non sicura, usando il protocollo ldap anziché ldaps (richiederebbe la porta 636).

Possiamo creare una classe che effettui tutto il processo di login e ci permetta di verificare l’autenticazione mediante i cookie, nella maniera seguente:

Per effettuare il login sarà sufficiente configurare la classe nella maniera seguente:

Abbiamo aggiunto una nostra chiave casuale e segreta che verrà utilizzata per la costruzione del hash nei cookie.

Per verificare che l’utente sia autenticato, una volta terminato il processo di login, sarà sufficiente richiamare:

Per effettuare il logout sarà sufficiente richiamare:

E’ molto probabile che l’inserimento di username e password lo si voglia fare dopo aver costruito l’oggetto per l’autenticazione LDAP, in tal caso si potrebbe procedere nella maniera seguente:

Con il metodo getError() è possibile verificare gli altri eventuali errori durante il processo di autenticazione, sfruttando le costanti della classe.