Tag: Mondo codice 🖥

  • Come scegliere la versione PHP per un sito

    Come scegliere la versione PHP per un sito

    Qual è la versione preferibile di PHP per il nostro sito?

    In molti casi ci prendiamo la versione che viene fornita dall’hosting senza entrare nel merito, e ci sono circostanze in cui è preferibile che sia così. Ci sono casi, pero’, in cui la scelta della versione determina in modo deciso sia le prestazioni del sito che il funzionamento del CMS, per cui bisognerà  fare attenzione a sceglierla con cura.

    Capire PHP e le sue versioni diverse: 5, 7, 8.1 …

    Cosa cambia tra le diverse versioni di PHP?

    Ogni versione di PHP, in generale (e senza entrare in dettagli tecnici avanzati) supporta un insieme preciso di funzionalità : in genere più è recente la versione che usiamo, più sarà  ampio e funzionale il set di funzioni disponibili. Tale disponibilità  si pone anche nell’uso di particolari funzioni che richiedono per forza PHP, e di conseguenza la disponibilità  di moduli, librerie avanzate e di complemento o ottimizzazione del sito saranno molto dipendenti da questa variabile.

    Se diciamo PHP versione 8.1, ad esempio, 8 rappresenta la versione principale mentre 1 la sotto-versione specifica. A volte possono essere presenti due punti a separare le diverse versioni di PHP:

    8.1.9 è l’ultima versione PHP disponibile al momento in cui aggiorniamo l’articolo, ad esempio.

    Andare nel pannello di controllo dell’hosting

    Nei pannelli di controllo dei principali servizi di hosting (cPanel, Plesk, ecc.), spesso viene riferito il numero principale di versione del linguaggio PHP in uso nel vostro sito, senza specificare la release (ad esempio PHP 5, e non PHP 5.6 o 5.7, la release è rispettivamente 6 e 7, mentre la versione è sempre 5); in genere, questo significa che l’utente dovrà  accettare la scelta di default, che ha stabilito il sistemista in precedenza, oppure – se l’opzione è disponibile – potrà  cambiarla mediante uno switch apposito che le ultime versioni di cPanel e Plesk offrono.

    In genere, in caso di dubbi, conviene accettare la scelta della versione del linguaggio PHP senza cambiarla ,per evitare di complicarsi inutilmente la vita e perchè cambiando versione potremmo dare adito a malfunzionamenti o incompatibilità nel nostro sito.

    Criterio migliore per la scelta di una versione PHP: scegliere l’ultima versione stable!

    La realtà  dei CMS e dei siti web reali è fatta di decine di casi intermedi, specialistici, adattati anche su una variabile che fin qui non abbiamo considerato ovvero il server ospitante; non è realistico pensare che tutti gli hosting supportino qualsiasi cosa, per cui dovremo sempre orientare la nostra scelta dell’hosting su un qualcosa che possa darci quello che ci serve per il CMS che intendiamo utilizzare. Un criterio generale che potete applicare per determinare la versione di PHP da installare è il seguente: in mancanza di altre informazioni specifiche, provate sempre ad installare l’ultima versione stable, cioè che viene fornita attivamente dall’hosting in questione mediante pannello di controllo oppure via terminale remoto.

    Se si usano PHP, MySQL e Apache abbastanza recenti uniti ad un software aggiornato all’ultima versione, non ci dovrebbe essere alcun problema di uso ed il problema della scelta del linguaggio neanche dovrebbe porsi. In genere, poi, bisogna tenere conto che il passaggio ad esempio dal vecchio PHP 4 al 5 può creare qualche problema a qualche specifica libreria del vostro sito, così come il passaggio dalla 5 alla 7 potrebbe far apparire errori o warning (anche se nella mia esperienza recente questo è un caso raro e non succede quasi mai). Tenete conto, comunque, che la scelta del PHP 7 orienta il vostro sito ad una maggiore velocità , visto che è stato progettato con in mente un miglioramento delle prestazioni generali del sito del 50% in media.

    Come cambiare la versione di PHP in esecuzione nel sito

    Per scegliere la giusta versione di PHP, basta accertarsi dall’indirizzo

    http://php.net/downloads.php

    che sia una versione stable (stabile); al momento le versioni stabili più recenti sono:

    8.1.9 (l’ultima disponibile)

    7.4.4

    7.3

    7.2

    7.1

    7.0

    5.6

    5.5

    Posso usare versioni più vecchie di PHP

    Sì certo, anche se in genere non conviene usare le versioni più datate, perchè potrebbero contenere dei bug non risolvibili, esporvi a falle di sicurezza o non essere più supportate (cioè, in gergo, aver raggiunto l’End Of Life). Ad ogni modo alcuni siti non funzionano con le versioni nuove di PHP, quindi se volete lasciarli online dovrete per forza usare una versione supportata dal vostro CMS, anche se non è nuovissima.

    Di norma, ma questo vale per qualsiasi software, non è neanche detto che l’ultima versione sia la migliore, perchè dipende dalle caratteristiche tecnica della versione in questione, e dipende anche e soprattutto dai requisiti imposti dal CMS.

    Andiamo quindi a vedere cosa richiedono, attualmente, i più diffusi CMS per quello che riguarda PHP. In pratica cercheremo di dettagliare i requisiti di sistema dei vari CMS per poter far funzionare PHP, MySQL e Apache / NGINX nel modo migliore possibile, il tutto utilizzando un linguaggio semplice e chiaro anche per i meno esperti.

    WordPress

    Ad oggi WordPress richiede:

    • PHP versione 7.2 o 8.1
    • MySQL 5.6 o successive (in alternativa, MariaDB 10.0 o superiori)
    • Supporto al protocollo HTTPS (anche con certificati gratuiti come Let’s Encrypt)

    In genere è buona norma accertarsi che l’hosting presso cui andate supporti appieno tutte queste caratteristiche. Le vecchie versioni di WP continuano a funzionare con la 7.1 o con la 5.6, ma in genere è sconsigliabile continuare a farne uso per troppo tempo: conviene sempre aggiornare all’ultima versione.

    Joomla!

    Ad oggi Joomla! 3.x richiede:

    • consigliato PHP versione PHP 7 (minimo PHP 5.3.10)
    • MySQL 5.1 o successive (in alternativa, SQL Server minimo 10.50.1600.1 oppure PostGreSQL 8.3.18)
    • Apache 2.0 o successive (oppure NGINX 1.0 oppure Microsoft IIS 1.0 minimo)
    • Supporto al protocollo HTTPS (anche con certificati gratuiti come Let’s Encrypt)

    Invece Joomla! 1.6, 1.7 e 2.5 richiedono:

    • consigliato PHP versione 5.6 (almeno PHP 5.2.4)
    • MySQL 5.0.4 o successive (in alternativa, SQL Server minimo 10.50.1600.1, PostGreSQL non supportato)
    • Apache 2.2 o successive (oppure NGINX 1.0 oppure Microsoft IIS 1.0 minimo)

    In genere è buona norma accertarsi che l’hosting presso cui andate supporti appieno le rispettive caratteristiche. Le vecchie versioni di Joomla! continuano a funzionare con versioni di PHP più vecchie, ma anche qui in genere non è buona norma farne uso.

    Magento

    Il supporto PHP a Magento non è banale da far capire, in quanto non esiste un supporto uniforme alle varie versioni, a differenza di quello che accade per altri CMS. Pero’ proveremo lo stesso a rendere divulgativa questa idea: del resto la complessità  del sistema giustifica questo genere di comportamento bizzarro, ma che deve essere tenuto in conto molto bene dai webmaster per non incorrere in problemi nel seguito.

    Attualmente Magento 2.1 richiede:

    • Apache 2.2 oppure 2.4 (in alternativa  NGINX 1.8)
    • MySQL 5.6 (Se usate Magento 2.1.2 bisogna optare per MySQL 5.7)
    • PHP 7.0.2, 7.0.4, 7.0.6, 7.0.x, 5.6.5–5.6.x (le altre versioni NON sono supportate)

    Sono inoltre richieste le estensioni PHP seguenti, che devono essere fornite dall’hosting o installate da voi in ambiente dedicato o VPS:

    • bc-math (se usate Magento Commerce)
    • curl
    • gd, ImageMagick 6.3.7 (o successive)
    • intl
    • mbstring
    • mcrypt
    • hash
    • openssl
    • PDO/MySQL
    • SimpleXML
    • soap
    • xml
    • xsl
    • zip
    • solo se usate PHP 7:

      • json
      • iconv

    Per questioni di performance, è altamente consigliato fare uso di PHP OPcache ed assicurarsi che sia abilitato e funzionante.

    Prestashop

    Per questo famoso e potentissimo CMS per l’e-commerce è richiesto:

    • Apache 1.3, Apache 2.x, Nginx oppure Microsoft IIS
    • PHP almeno 5.4 o superiori
    • MySQL 5.0

    Photo by CalEvans

  • Algoritmo di Euclide: cos’è e come funziona

    Algoritmo di Euclide: cos’è e come funziona

    L’algoritmo di Euclide è un metodo efficace per trovare il massimo comune divisore (MCD) di due numeri interi. Il massimo comune divisore è il più grande numero intero che divide entrambi i numeri senza lasciare un resto. L’algoritmo è chiamato così in onore del matematico greco Euclide, che lo descrisse nel suo libro “Gli Elementi” nel 300 a.C.

    L’algoritmo di Euclide può essere implementato in diverse forme, ma una delle versioni più comuni è l’Algoritmo di Euclide per la divisione.

    Massimo Comune Divisore (MCD)

    Il Massimo Comune Divisore (MCD) è un concetto matematico che rappresenta il numero più grande che divide senza resto due o più numeri interi. L’algoritmo di Euclide è uno strumento comune utilizzato per calcolare il MCD di due numeri.

    Algoritmo di Euclide

    L’Algoritmo di Euclide per il calcolo del MCD prevede il seguente processo:

    1. Divisione Iniziale:

      Dividi il numero più grande per il numero più piccolo e ottieni il quoziente e il resto.
    2. Ripetizione:

      Se il resto è diverso da zero, ripeti il processo usando il precedente divisore come nuovo dividendo e il resto come nuovo divisore.
    3. Risultato:

      Continua questo processo fino a quando il resto diventa zero. Il MCD è il precedente resto non zero.

    Esempio MCD(48,18)

    Consideriamo l’esempio di calcolare il MCD tra 48 e 18 utilizzando l’Algoritmo di Euclide.

    Algoritmo di Euclide per il MCD tra 48 e 18

    1. Divisione Iniziale: Iniziamo dividendo il numero più grande, 48, per il numero più piccolo, 18: 48=18⋅2+12 Qui, 2 è il quoziente mentre 12 è il resto.
    2. Ripetizione: Dato che il resto (12) è diverso da zero, ripetiamo il processo. Ora 18 diventa il nuovo dividendo e 12 diventa il nuovo divisore: 18=12⋅1+6 Ora, 1 è il quoziente e 6 è il nuovo resto.

      Proseguiamo ancora una volta: 12 diventa il dividendo e 6 diventa il divisore: 12=6⋅2+0 Questa volta, il resto è zero, quindi terminiamo il processo.

    3. Risultato: L’ultimo resto non zero è 6. Quindi, il Massimo Comune Divisore (MCD) tra 48 e 18 è 6.

    Conclusione: L’Algoritmo di Euclide ci ha permesso di determinare che il MCD tra 48 e 18 è 6, il quale rappresenta il più grande numero che divide entrambi senza resto. Questo processo è una metodologia comune per trovare il MCD di due numeri.

    Quindi, il Massimo Comune Divisore di 48 e 18 è 6.

    Foto di Photograph taken by Mark A. Wilson (Wilson44691, Department of Geology, The College of Wooster).[1] – Opera propria, CC BY-SA 4.0, https://commons.wikimedia.org/w/index.php?curid=50414450

  • Google Colab: cos’è e come funziona

    Google Colab: cos’è e come funziona

    Google Colab rappresenta un potente strumento per esplorare, sviluppare e condividere il codice Python senza dover preoccuparsi dell’infrastruttura di calcolo. Abbiamo visto come iniziare con un semplice “Hello World” e come approfondire l’utilizzo con alcune funzionalità avanzate, come l’importazione di librerie, la manipolazione dei dati e l’accelerazione hardware. Con questa piattaforma a disposizione, le possibilità di sviluppo e ricerca sono pressoché illimitate.

    Questa piattaforma si rivela particolarmente vantaggiosa per eseguire calcoli complessi o addestrare modelli di machine learning su risorse di calcolo più potenti. In questo articolo, esploreremo come iniziare con Google Colab, creare un semplice “Hello World” e affrontare alcuni utilizzi più avanzati.

    Fare un “Hello World” con Google Colab

    1. Accedi a Google Colab Apri il tuo browser e visita il sito di Google Colab all’indirizzo https://colab.research.google.com/. Accedi con il tuo account Google o crea uno se non ne hai già uno.
    2. Creazione di un nuovo notebook Clicca su “Nuovo notebook” per creare un nuovo file notebook. Verrà aperto un ambiente Jupyter-like dove puoi scrivere e eseguire codice.
    3. Hello World Nella prima cella del notebook, digita il seguente codice Python:
    print("Hello, World!")
    1. Esegui il codice Per eseguire il codice, premi Shift + Invio o clicca sul pulsante di riproduzione a sinistra della cella. Dovresti vedere l’output “Hello, World!” sotto la cella.

    Uso avanzato di Google Colab

    1. Importare librerie Colab è preinstallato con numerose librerie Python comuni, ma puoi importare altre librerie a tua discrezione. Ad esempio, per utilizzare la libreria di visualizzazione dei dati “matplotlib”, basta eseguire il codice seguente:
    import matplotlib.pyplot as plt

    # Codice per il grafico di esempio

    x = [1, 2, 3, 4, 5]
    y = [10, 20, 15, 25, 30]
    plt.plot(x, y)
    plt.xlabel('X')
    plt.ylabel('Y')
    plt.title('Grafico di esempio')
    plt.show()
    Verrà fuori qualcosa del genere.
    1. Caricamento e manipolazione dei dati Google Colab fornisce una potente memoria temporanea in cui puoi caricare i dati da fonti esterne e manipolarli direttamente nel notebook. Ad esempio, per caricare un file CSV, puoi eseguire il seguente codice:
    python
    import pandas as pd

    # Carica il file CSV

    url = 'https://example.com/dati.csv'
    df = pd.read_csv(url)

    # Visualizza le prime righe del dataframe

    print(df.head())
    1. Utilizzo di GPU e TPU Google Colab offre anche l’opzione di utilizzare l’accelerazione hardware con GPU e TPU (Tensor Processing Unit) per calcoli più veloci, soprattutto nel machine learning. Per abilitare l’uso di una GPU o TPU, vai su “Modifica” nella barra dei menu, quindi seleziona “Impostazioni del notebook”. Nella finestra delle impostazioni, seleziona l’acceleratore desiderato.

    Conclusioni

    Questo naturalmente è solo un spunto e ci sono molte altre app che potete sperimentare senza dover installare nulla. Alcuni esempi potrebbero essere:

    1. Machine Learning e Deep Learning: Google Colab è particolarmente popolare per l’addestramento di modelli di machine learning e deep learning. Puoi utilizzare librerie come TensorFlow, Keras e PyTorch per creare e addestrare reti neurali su CPU, GPU o TPU.
    2. Analisi dei Dati: Puoi importare dati da diverse fonti, come file CSV, JSON o database, e utilizzare librerie come Pandas e NumPy per analizzare e manipolare i dati in modo efficiente.
    3. Visualizzazione dei Dati: Utilizza librerie come Matplotlib e Seaborn per creare grafici e visualizzazioni accattivanti dei tuoi dati.
    4. Elaborazione di Immagini e Video: Con librerie come OpenCV, puoi elaborare immagini e video, applicare filtri, rilevare oggetti e altro ancora.
    5. Natural Language Processing (NLP): Sfrutta librerie come NLTK e SpaCy per analizzare testi, eseguire analisi del sentiment, estrarre informazioni e molto altro.
    6. Apprendimento AutoML: Google Colab consente anche di utilizzare servizi cloud di Google come AutoML Vision, AutoML Natural Language e AutoML Tables per creare modelli di machine learning senza dover scrivere codice da zero.
    7. Simulazioni Scientifiche: Puoi utilizzare Colab per eseguire simulazioni scientifiche, risolvere equazioni differenziali e visualizzare i risultati in modo interattivo.
    8. Web Scraping: Utilizza librerie come BeautifulSoup e Scrapy per estrarre dati da pagine web e salvarli per analisi successiva.
    9. Applicazioni IoT (Internet of Things): Puoi connetterti a dispositivi IoT e raccogliere dati da essi, elaborarli e prendere decisioni in tempo reale.
    10. Creazione di Interfacce Utente Interattive: Con librerie come ipywidgets, puoi creare interfacce utente interattive per controllare e visualizzare i risultati delle tue analisi e dei tuoi modelli.

    Foto di Gerd Altmann da Pixabay

  • Guida pratica al polimorfismo in informatica

    Guida pratica al polimorfismo in informatica

    Il polimorfismo permette di scrivere codice più flessibile e generico, facilitando la manutenzione e l’estensione delle applicazioni. In C++, il polimorfismo è implementato attraverso l’uso di metodi virtuali e l’ereditarietà. In Python, il polimorfismo è più dinamico grazie alla natura flessibile del linguaggio stesso.

    Il polimorfismo è un concetto fondamentale della programmazione orientata agli oggetti (OOP) che permette a oggetti di classi diverse di essere trattati come se fossero oggetti della stessa classe. Questo è possibile attraverso l’uso di metodi e proprietà comuni che le classi condividono. Ci sono due principali tipi di polimorfismo:

    1. Polimorfismo a tempo di compilazione (Statico): Ottiene attraverso il sovraccarico dei metodi e degli operatori.
    2. Polimorfismo a tempo di esecuzione (Dinamico): Ottiene attraverso l’ereditarietà e l’uso di metodi virtuali.

    Di seguito, mostrerò esempi di polimorfismo in C++ e Python. Un primo esempio semplice di polimorfismo può essere quello di una funzione speak che viene implementata da diverse classi di animali. Ogni animale ha un modo diverso di “parlare”, ma possiamo chiamare il metodo speak su qualsiasi animale e ottenere il comportamento appropriato.

    class Animal:
     def speak(self):
      print("Some generic animal sound")
    
    class Dog(Animal):
     def speak(self): 
      print("Woof!")
    
    class Cat(Animal):
     def speak(self):
      print("Meow!")
    
    def make_animal_speak(animal):
      animal.speak()
    
    dog = Dog()
    cat = Cat()
    animal = Animal()
    
    make_animal_speak(dog) # Output: Woof!
    make_animal_speak(cat) # Output: Meow!
    make_animal_speak(animal) # Output: Some generic animal sound

    Polimorfismo in C++

    1. Polimorfismo a tempo di compilazione (Sovraccarico dei metodi)

    #include <iostream>
    using namespace std;
    
    class Print {
    public:
    void show(int i) {
    cout << "Intero: " << i << endl;
    }
    
    void show(double f) {
    cout << "Float: " << f << endl;
    }
    
    void show(string s) {
    cout << "Stringa: " << s << endl;
    }
    };
    
    int main() {
    Print p;
    p.show(10);
    p.show(10.5);
    p.show("Ciao");
    return 0;
    }

    2. Polimorfismo a tempo di esecuzione (Metodi virtuali)

    #include <iostream>
    using namespace std;
    
    class Base {
    public:
    virtual void show() {
    cout << "Base class" << endl;
    }
    };
    
    class Derived : public Base {
    public:
    void show() override {
    cout << "Derived class" << endl;
    }
    };
    
    int main() {
    Base* b;
    Derived d;
    b = &d;
    b->show(); // Questo chiamerà il metodo show() della classe Derived
    return 0;
    }

    Polimorfismo in Python

    1. Polimorfismo a tempo di compilazione (Sovraccarico dei metodi)

    In Python, il sovraccarico dei metodi non è supportato direttamente come in C++. Tuttavia, si può ottenere un comportamento simile usando valori predefiniti o *args.

    class Print:
    def show(self, *args):
    if len(args) == 1:
    if isinstance(args[0], int):
    print(f"Intero: {args[0]}")
    elif isinstance(args[0], float):
    print(f"Float: {args[0]}")
    elif isinstance(args[0], str):
    print(f"Stringa: {args[0]}")
    
    p = Print()
    p.show(10)
    p.show(10.5)
    p.show("Ciao")

    Poliformismo a run time

    class Base:
      def show(self):
        print("Base class")
    
    class Derived(Base):
      def show(self):
        print("Derived class")
    
    b = Base()
    d = Derived()
    b.show() # Questo chiamerà il metodo show() della classe Base
    d.show() # Questo chiamerà il metodo show() della classe Derived
    
    b = d
    b.show() # Questo chiamerà il metodo show() della classe Derived grazie al polimorfismo
  • Error HTTP 400 – 400 Bad Request: cos’è e come si risolve

    Error HTTP 400 – 400 Bad Request: cos’è e come si risolve

    Natura dell’errore: si tratta di un problema molto comune, che può capitare per le cause più svariate. In genere viene notificato mediante una pagina di errore che può variare leggermente in base al tipo di server del sito, ma che riporta comunque un errore con codice numerico 400. La notifica di errore HTTP 400 è, in altri termini, il modo in cui un server ci dice che è stato generato un errore sul formato HTTP stesso, ad esempio sulla query che dovrebbe fornire dei risultati sulla pagina, che non è stato “rispettato” rispetto allo standard – per cui non può essere inoltrata la risposta (a livello pratico potrebbe significare: errori o bug di programmazione PHP, ad esempio, del servizio)

    Da cosa dipende un errore 400?

    Si tratta di una notifica del server (è una notifica di Bad Request che significa cattiva richiesta, cattiva nel senso di “formulata in modo errato“) che avvisa che la pagina che avete richiesto non è disponibile, perchè si trova ad essere in un formato non corretto. Ad esempio, su server IIS un errore 400 può essere dovuto all’intestazione dell’header della pagina di dimensione nulla (pari a zero, ovvero vuota).

    Errore 400 in PHP

    In PHP un 400 viene codificato come errore “Bad Request” e capita ad esempio se richiamiamo un servizio esterno nel codice, ad esempio per ottenere un file XML o un flusso JSON, e sbagliamo ad associare i parametri oppure a scrivere la query parametrica.

    A livello più tecnico un errore 400 è legato ad errori di programmazione, oppure a pratiche di cattiva programmazione: ad esempio, mi è capitato di recente utilizzato la libreria di Google Maps – come mostrato nell’esempio seguente.

    Se ad esempio utilizziamo la funzione PHP:

    function GetDrivingDistance($lat1, $lat2, $long1, $long2)
    {
           $url = "https://maps.googleapis.com/maps/api/distancematrix/json?origins=".$lat1.",".$long1."&destinations=".$lat2.",".$long2."&mode=driving&language=it-IT";
           $ch = curl_init();
           curl_setopt($ch, CURLOPT_URL, $url);
           curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
           curl_setopt($ch, CURLOPT_PROXYPORT, 3128);
           curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
           curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
           $response = curl_exec($ch);
    
    ...

    in questo caso non vengono eseguiti opportuni controlli sulle variabii in ingresso $lat1, $lat2, $long1 e $long2, la funzione in questione potrebbe inviare una richiesta via cURL una richiesta che la API di Google Maps non potrà  evadere in alcun modo. Prima di inviare la richiesta, dunque, è essenziale inserire un controllo che verifichi che quei quattro dati, trattandosi di calcolo della distanza in geolocalizzazione tra due punti, che siano effettivamente coordinate valide.

    Errore 400 secondo il W3C

    Nello specifico, il consorzio W3C per gli standard internazionali del web indica che l’errore 400 fa riferimento ad un errore di sintassi nella scrittura dell’URL (malformed syntax), per cui la richiesta non andrebbe ripetuta in seguito (è inutile farlo), se non dopo che l’errore sia stato corretto a monte. Quindi l’utente medio che visita una pagina non può farci nulla, e deve intervenire il proprietario o webmaster del sito in questione. Viene a volte suggerito, in questi casi, di verificare la connessione ad internet ed aggiornare sia browser che sistema operativo in uso all’ultima versione, ma questo non sempre garantisce la risoluzione del problema.

    Errore 400 nella pratica: Android & Youtube

    A livello pratico, le casistiche più comuni legati all’errore di tipo 400 possono essere le seguenti:

    • errore 400 su Youtube: può capitare ad esempio qualora si provi ad accedere a Youtube su telefono o dispositivo Android, oppure nel caso in cui si provi ad accedere a Youtube con una smart TV in wireless. In quest’ultimo caso dovrebbe bastare, per risolvere, resettere il dispositivo smart alle impostazioni di fabbrica (per il lettore blu-ray Philips, ad esempio)
    • errore 400 su Android: in questo caso può capitare se si prova ad effettuare un aggiornamento di sistema, ad esempio, da una versione alla successiva o più recente. In questi casi la cosa migliore è quella di risincronizzare l’account Gmail utilizzato per l’accesso, oppure effettuare un ripristino soft del sistema nella peggiore delle ipotesi (attenzione: solo per utenti esperti)
    • una bad request 400, in altri casi, può essere risolta esclusivamente con un aggiornamento di sistema o di impostazioni effettuabile qualora diventi disponibile.

    Soluzione dell’errore 400

    Come si risolve? L’errore 400 può essere risolto mettendo mano al codice (ovviamente se è possibile farlo), oppure riprovando ad accedere al servizio in un secondo momento.

  • Congettura di Collatz in Python: come funziona

    Congettura di Collatz in Python: come funziona

    La congettura di Collatz è un famoso problema aperto della matematica, che a prima vista può sembrare semplice ma che si è dimostrato estremamente complesso. In parole povere, il problema chiede se, data una qualunque sequenza di numeri interi positivi, si può sempre arrivare al numero 1 seguendo un preciso algoritmo. La congettura di Collatz rappresenta un affascinante problema aperto della matematica che continua a intrigare i matematici di tutto il mondo. Nonostante non sia stato ancora dimostrato o confutato, la ricerca sulla congettura ha portato a importanti sviluppi nella teoria dei numeri e potrebbe portare a nuove scoperte in futuro.

    Algoritmo per la congettura di Collatz

    L’algoritmo è il seguente: partendo da un numero intero positivo n, se n è pari si divide per 2, altrimenti si moltiplica per 3 e si aggiunge 1. Si ripete questo processo finché non si arriva al numero 1. In Python:

    def collatz(n):
        while n != 1:
            print(n)
            if n % 2 == 0:
                n = n // 2
            else:
                n = 3 * n + 1
        print(n)
    
    collatz(6)

    In questo esempio, il codice parte dal numero 6 e applica l’algoritmo della congettura di Collatz finché non si arriva al numero 1. Il risultato stampato dal codice è la seguente sequenza: 6, 3, 10, 5, 16, 8, 4, 2, 1.

    Problema della terminazione

    Ad oggi non è noto se questo algoritmo funzioni sempre per ogni numero intero positivo, ovvero non sappiamo se esista almeno un numero che non faccia finire l’algoritmo che girerà per sempre. Se esistesse, si invaliderebbe tutta la congettura ma ad oggi non è stato dimostrato, quindi funziona come nel metodo scientifico “fino a prova contraria”. In altre parole, non si sa se qualsiasi sequenza di numeri ottenuta seguendo questo algoritmo arrivi sempre al numero 1, anche se sembrerebbe che per la maggioranza dei numeri fino a 5,48 x 1018 sia esattamente così. La congettura è stata formulata dal matematico tedesco Lothar Collatz nel 1937, e da allora ha attirato l’attenzione di numerosi matematici che hanno tentato di dimostrare o confutare la congettura. Nonostante siano stati fatti progressi significativi, il problema resta aperto.

    Perché è importante sapere della dimostrazione questa congettura? Innanzitutto, la congettura di Collatz rappresenta un interessante sfida per i matematici, che cercano di comprendere le proprietà dei numeri interi e le loro connessioni. Inoltre, la risoluzione della congettura potrebbe portare a nuove scoperte e sviluppi nella teoria dei numeri. Per mostrare come funziona la congettura di Collatz in pratica, possiamo scrivere un semplice codice Python che mostra la sequenza di numeri che converge sempre e comunque sul numero 1.

    Esempi di sequenze di Collatz

    n = 25

    25
    76
    38
    19
    58
    29
    88
    44
    22
    11
    34
    17
    52
    26
    13
    40
    20
    10
    5
    16
    8
    4
    2
    1

    n = 666

    666
    333
    1000
    500
    250
    125
    376
    188
    94
    47
    142
    71
    214
    107
    322
    161
    484
    242
    121
    364
    182
    91
    274
    137
    412
    206
    103
    310
    155
    466
    233
    700
    350
    175
    526
    263
    790
    395
    1186
    593
    1780
    890
    445
    1336
    668
    334
    167
    502
    251
    754
    377
    1132
    566
    283
    850
    425
    1276
    638
    319
    958
    479
    1438
    719
    2158
    1079
    3238
    1619
    4858
    2429
    7288
    3644
    1822
    911
    2734
    1367
    4102
    2051
    6154
    3077
    9232
    4616
    2308
    1154
    577
    1732
    866
    433
    1300
    650
    325
    976
    488
    244
    122
    61
    184
    92
    46
    23
    70
    35
    106
    53
    160
    80
    40
    20
    10
    5
    16
    8
    4
    2
    1

    n = 1979

    1979
    5938
    2969
    8908
    4454
    2227
    6682
    3341
    10024
    5012
    2506
    1253
    3760
    1880
    940
    470
    235
    706
    353
    1060
    530
    265
    796
    398
    199
    598
    299
    898
    449
    1348
    674
    337
    1012
    506
    253
    760
    380
    190
    95
    286
    143
    430
    215
    646
    323
    970
    485
    1456
    728
    364
    182
    91
    274
    137
    412
    206
    103
    310
    155
    466
    233
    700
    350
    175
    526
    263
    790
    395
    1186
    593
    1780
    890
    445
    1336
    668
    334
    167
    502
    251
    754
    377
    1132
    566
    283
    850
    425
    1276
    638
    319
    958
    479
    1438
    719
    2158
    1079
    3238
    1619
    4858
    2429
    7288
    3644
    1822
    911
    2734
    1367
    4102
    2051
    6154
    3077
    9232
    4616
    2308
    1154
    577
    1732
    866
    433
    1300
    650
    325
    976
    488
    244
    122
    61
    184
    92
    46
    23
    70
    35
    106
    53
    160
    80
    40
    20
    10
    5
    16
    8
    4
    2
    1
  • Willis Gibson (BlueScuti) ha finito Tetris per la prima volta (dopo 34 anni)

    Willis Gibson (BlueScuti) ha finito Tetris per la prima volta (dopo 34 anni)

    Il nome Willis Gibson non avrebbe suggerito nulla ai più, prima di oggi. Se non fosse per quell’omonimia con William Gibson, il popolare autore di fantascienza che con Neuromante aveva prefigurato la nascita di internet. Willis ha soli 13 anni, ed è noto sui social come BlueScuti: è diventato celebre a livello mondiale perchè è riuscito a finire il gioco del Tetris per la prima volta. Questa notizia è clamorosa perchè il gioco non viene aggiornato come avverrebbe con Word, ad esempio, per cui rimane sempre la stessa versione per anni e qui parliamo di un qualcosa che è avvenuto ben 34 anni dopo l’uscita del gioco, per la prima volta in assoluto da parte di un giocatore umano. Per chi fosse avulso alla materia la cosa potrebbe ancora sembrare singolare, e per cogliere il senso della notizia è bene partire dall’inizio.

    Nel Tetris tradizionale, il gioco non ha una fine nel senso tradizionale: non c’è un livello finale da raggiungere o una storia da completare, anche perchè si tratta di fare più punti possibili incastrando adeguatamente i pezzi. Il Tetris infatti procede aumentando la velocità, la difficoltà cresce man mano che si avanzano i livelli e di fatto non si arriva mai a un punto in cui si può dire di aver completato il gioco. Cosa che avviene, nel 99% dei casi, con il giocatore che si ritrova con lo schema scombinato e appare la scritta GAME OVER.

    Il gioco continua finché non si accumulano blocchi fino al punto in cui raggiungono la parte superiore dello schermo, bloccando il giocatore e impedendo così ulteriori mosse. D’altro canto, in teoria, il gioco potrebbe durare indefinitamente qualora si è abili a eliminare i blocchi e ad incastrarli nel modo opportuno, oppure superando il punteggio di 999.999. Cosa che ha fatto il giovane videogiocatore in questione all’inizio dell’anno.

    Willis Gibson è riuscito nell’impresa di finire il Tetris filmando ciò che aveva realizzato, dove è possibile vedere che il punteggio diventa 999.999 e rimane bloccato lì, per superato limite, finchè il gioco non si ferma e, di fatto, finisce per la prima volta così. Solo un’intelligenza artificiale, in passato, era riuscita ad ottenere lo stesso risultato.

    Di Eunice Szpillman – Crop of Image:Alexey Pajitnov – 2575833305.jpg (Flickr), CC BY-SA 2.0, https://commons.wikimedia.org/w/index.php?curid=4577503

    Per quanto alcune versioni  e spinoff più recenti di Tetris possano avere modalità con obiettivi specifici, il gioco originale (inventato da Alexey Pajitnov nel 1984) non aveva questa possibilità. In realtà non è proprio così: la difficoltà cresce al punto che la maggioranza dei giocatori non possono fare a meno di fermarsi. Qualora un giocatore raggiunga il Livello 29 su NES ad esempio (eliminando così poco meno di 300 righe dello schema), il gioco raggiunge la velocità massima e, tipicamente, anche i giocatori più forti finiscono per soccombere qualche istante dopo. Qualche giocatore si era inventato una tecnica di gioco nota come hypertapping, del resto, che pero’ risolveva il problema soltanto in parte.

    È altresì noto che le versioni più popolari del gioco hanno un problema di stack overflow, ovvero possono creare problemi inattesi e bug: che è anche il modo in cui si intende l’informatica oggi, spingendola fino al limite, facendo uscire fuori situazioni non previste dai programmatori all’epoca. Un mondo da (ri)scoprire, insomma, per comprendere i passi tecnologici che abbiamo compiuto e capire che non è neanche la prima volta che succede: ci sono giochi come Faxanadu per NES, ad esempio, per i quali sono stati scoperti livelli segreti e cheat per avere vite infinite solo moltissimmi anni dopo che erano stati programmati.

  • Open data: cosa sono e a cosa servono

    Open data: cosa sono e a cosa servono

    Definizione open data

    La definizione di open data o, in italiano, dato aperto, è stata ufficialmente fornita dalla Open Knowledge Foundation:

    un contenuto o un dato si definisce aperto se chiunque è in grado di utilizzarlo, ri-utilizzarlo e ridistribuirlo, soggetto, al massimo, alla richiesta di attribuzione e condivisione allo stesso modo

    Questa definizione è quella che viene maggiormente utilizzata e che, analizzandola, mette in evidenza i punti cardine perchè un dato possa definirsi open:

    1. il dato deve essere utilizzabile o riutilizzabile da chiunque, in modo libero;
    2. il dato deve essere distribuibile o ridistribuibile da chiunque, in modo libero;
    3. può essere richiesta un’attribuzione all’autore o referente del dato
    4. può essere richiesta una condivisione che sia apertamente allo stesso modo di quella originale (tipico delle Licenze Creative Commons)

    Nonostante il concetto di open data non sia nulla di sconvolgente, non sembra esistere una definizione in grado di mettere d’accordo tutti nel concreto, e si ricorre ad una che è invece sostanzialmente astratta e si applica diversamente caso per caso.

    Esempi di open data

    Un esempio di open data nella pratica è dettato, ad esempio, dalle banche che dovranno aprirsi al PSD2 e all’open banking. Un altro esempio di open data sono le banche dati offerte da Google (Dataset Search), relative a statistiche sulla popolazione, dati sulla diffusione del Covid-19 e dati sulla temperatura a livello mondiale. In Italia, poi, il sito ufficiale dell’AGID mediante il portale:

    www.dati.gov.it

    fornisce pubblicamente open data relativi a diversi ambiti: energia, agricoltura, ambiente, finanza, popolazione, regioni, città , trasporti e così via.

    Critiche agli open data

    Non mancano le critiche, tuttora irrisolte, alla diffusione degli open data: sfruttandoli troppo massivamente molte aziende rischiano di perdere il proprio potenziale commerciale dovuto alla perdita del valore commerciale degli stessi.

    Ulteriori “attori” che non sono favorevoli agli open data non lo sono per motivazioni spesso lecite, come ad esempio tutela della privacy, segreto statistico, dati sensibili che rischierebbero di essere diffusi in modo indiscriminato oppure, più frequentemente, specifici interessi aziendali o commerciali.

    Equivoci sugli open data

    La diffusione di banche dati su internet o nel dark web, peraltro, non deve essere intesa come diffusione di open data, perchè gli open data non devono semplicemente potersi scaricare ma dovrebbero essere pubblicati col consenso degli interessati, e deve esistere un protocollo informatico e funzionale atto a consentirne l’accesso, in modo regolamentato a dovere.

    Quali sono le conseguenze degli open data?

    Open data è, pertanto, un’idea o un modello di distribuzione dell’informazione che prevede che i dati, nel loro insieme (ad esempio anagrafici, bancari, relativi ad un ambito specifico ecc.) dovrebbero essere liberamente disponibili senza restrizioni dettate da brevetti o copyright o meccanismi di controllo analoghi. Gli obiettivi del movimento dei dati open source sono simili a quelli di altri movimenti “open (-source)” come software open-source, hardware, contenuto aperto, istruzione aperta, risorse educative aperte, governo aperto, conoscenza aperta, accesso aperto , scienza aperta e Web aperto. Questi elementi sono necessari allo sviluppo tecnologico, alla crescita della società  e ad un aumento (teoricamente) del numero, del tipo e della qualità  di servizi   online disponibili per gli utenti finali.

    Ma gli open data devono essere gratis?

    Esattamente come avviene per l’open source, la mia idea è che gli open data possano essere gratuiti ma – attenzione – non debbano necessariamente essere free data o dati gratis; puoi anche farti pagare, l’accesso a determinati dati può essere soggetto ad un pagamento ed è il motivo per cui svariate API o librerie per accedere a informazioni in una certa nicchia sono e saranno comunque soggette al pagamento di una fee. Questo, a mio avviso, senza contraddire l’idea degli open data per come sono stati pensati.

  • Python mediante esempi: introduzione alla versione 3 del linguaggio

    Python mediante esempi: introduzione alla versione 3 del linguaggio

    Oggi proveremo a vedere qualche esempio pratico nel linguaggio Python per eseguire alcune semplici operazioni.

    Nozioni preliminari su Python

    Per chi proviene da altri linguaggi di programmazione, Python possiede delle notevoli semplificazioni sintattiche: ad esempio, non fa uso dei punti e virgola, e sfrutta i tab (spaziature) per strutturare il codice e renderlo leggibile al massimo. Se si sbagliano le spaziature il codice, semplicemente, non sarà eseguito e darà errore. Da un punto di vista pratico, Python ha una curva di apprendimento molto poco ripida, si apprende facilmente ed è fornito di notevoli librerie open source molto facili da adottare ai vari casi (si veda ad esempio Python per il networking).

    Come fare un “Hello world” in Python

    Aprire un file di testo ed inserire il codice seguente:

    print("Hello, World!")

    Salvare il file come hello.py (l’estensione .py caratterizza i file di codice Python) e lanciarlo da terminale di comando con la sintassi:

    python3 hello.py

    seguito dal testo Invio: apparirà ovviamente su terminale la scritta:

    Hello, World!

    Variabili in Python

    Una variabile è definita come una cella di memoria indirizzata in cui è possibile inserire dei dati a piacere. Per definire una variabile in Python si scrive semplicemente:

    x = 667

    che definisce un intero x con valore 667. Se volessi definire un decimale y:

    y = 62.21

    Per definire il tipo di una variabile si usa la funzione integrata type():

    type(x)

    restituisce <class ‘int’> mentre:

    type(y)

    ritorna <class ‘float’>.

    Import in Python

    Le import sono una delle funzionalità più importanti del linguaggio, in quanto permettono di importare librerie esterne di ogni genere. Basta scrivere import nome_pacchetto , una riga alla volta, all’inizio del file, per poterne fare uso.

    Funzioni in Python

    Per definire una funziona basta scrivere la parola chiave def, seguita dal nome della funzione, i parametri di input tra parentesi tonde, i due punti (non dimenticarli!). Ad esempio una funzione somma si può scrivere come segue:

    def somma(a, b):
       return (a+b)
    

    Sulla base di questo semplice template possiamo divertirci a snocciolare un po’ di esempi pratici per la risoluzione dei problemi più comuni.

    Esercizi in Python

    Numero intero casuale in Python

    import random
    random.randint(01,100)

    Media aritmetica tra i numeri di una lista in Python

    def media( lisat ):
      media = 0
      for x in lista:
        media = media + x
      return media / len(lista)
    

    Scambio di due variabili in Python

    def swap(a,b):
      c = a
      a = b
      b = c 
      return (a,b)

    Radice quadrata in Python

    import cmath
    def radice_quadrata(a): 
      return cmath.sqrt(a)
    

    oppure, senza usare librerie esterne:

    def radice_quadrata_positivi(a): 
      return a ** 0.5
    

    Foto di Gerd Altmann da Pixabay

  • Come connettersi al database sui principali CMS (Drupal, WordPress, …)

    Come connettersi al database sui principali CMS (Drupal, WordPress, …)

    Connettersi ad un database è un’operazione necessaria per tutti i siti che necessitino di elementi dinamici all’interno del proprio sito: in questa FAQ andremo a vedere come sia possibile effettuare questo tipo di operazione.

    I quattro parametri da configurare per connettersi al database

    Tutti i principali CMS (Content Management Systems, quindi da Drupal a Joomla! passando per WordPress) sono caratterizzati da quattro parametri basilari, che sono sempre gli stessi e che è utile conoscere concettualmente. Essi infatti servono a far “capire” al CMS come connettersi al database, in modo da poter offrire contenuti dinamici agli utenti, e permettere a noi webmaster blogger ed imprenditori di modificare i siti come vogliamo.

    Solitamente la tecnologia di riferimento è PHP + Apache / NGINX   con database MySQL, per quanto possano esistere delle considerevoli eccezioni a questa regola – ad esempio usando CMS basati su ASP. La sostanza, comunque, non cambia, ed in genere per connettere il rispettivo database ad un sito sempre di questi magnifici quattro si tratta.

    Questi parametri sono, nello specifico:

    1. il nome dell’host, cioè l’hostname, che indica dove si trova il database server come host – un esempio classico è localhost, cioè il database server si trova direttamente sul servizio che stiamo utilizzando;
    2. il nome del database, cioè quale dei database che abbiamo creato con PHPMyAdmin o mediante interfaccia di terminale MySQL sia quello del nostro sito; il nome deve essere copiato ed incollato con precisione perchè, diversamente, non sarà  possibile connettersi al database;
    3. la username del database, cioè quale delle tante username associate al database che abbiamo creato con PHPMyAdmin o via terminale MySQL sia quello del nostro sito; il nome deve essere, anche qui, copiato ed incollato con precisione e senza errori perchè, diversamente, non sarà  possibile connettersi al database;
    4. la password del database, cioè la password necessaria per l’utenza del punto 3 sul database del punto 2 per poter accedere. Tale password è una specifica tecnica del database e non facciamo confusione: non è (quasi mai, direi) come quella per accedere come amministratori del sito o come utente normale.

    Come faccio a trovare questi dati?

    Molti webmaster si disorientano a questo punto, perchè trovare questi quattro dati non è semplice, anche perchè delle volte devono essere rigenerati da noi. Ad ogni modo, niente panico: ci sono almeno tre modi diversi per trovarli.

    1. la prima tecnica è quella di guardare direttamente, via FTP, all’interno dei rispettivi file di configurazione (guarda nella tabella qui in basso); se state mettendo mano ad una configurazione può darsi che già  l’hosting abbia impostato questi valori nel modo corretto.
    2. la seconda tecnica è quella di andare nel pannello cPanel / Plesk, sezione database, e di vedere il nome del database e dell’utenza da usare. Se avete dimenticato la password, è opportuno A) creare una nuova utenza B) associarvi una password complessa (anche se è difficile da ricordare non è un problema, anzi è meglio) C) associare l’utenza al database e prendere nota delle nuove credenziali che avete appena creato.
    3. la terza tecnica è quella di guardare nella mail di attivazione del vostro servizio di hosting, dove solitamente queste indicazioni sono riportate in modo puntuale. Se così non fosse, aprite un ticket con l’hosting e chiedete a loro.

    Ecco la tabella per determinare rapidamente il file di configurazione (se trovate uno slash / come primo carattere del nome del file, significa che dovrete cercarlo nella root, diversamente dovrete andare nella directory indicata, seguendo il path o cammino riportato). In genere, per fortuna, il nome dei file ed i path di configurazione non cambiano nel tempo, anche con i successivi update del CMS.

    File di configurazione di tutti i CMS

    Dove si trovano i file di configurazione del database di ogni CMS: Joomla!, WordPress, Drupal, OpenCMS e così via.

    Ecco la tabella per determinare rapidamente il file di configurazione (se trovate uno slash / come primo carattere del nome del file, significa che dovrete cercarlo nella root, diversamente dovrete andare nella directory indicata, seguendo il path o cammino riportato). In genere, per fortuna, il nome dei file ed i path di configurazione non cambiano nel tempo, anche con i successivi update del CMS.

    CMS File di configurazione del database Permessi consigliati
    WordPress/wp-config.php660
    Magento/app/etc/local.xml600
    Prestashop/config/settings.inc.php660
    Joomla/configuration.php660
    Open Cart/config.php
    /admin/config.php
    660
    Drupal/sites/default/settings.php660
    OS Commerce/includes/configure.php660

    Quale file devo modificare?

    Il file da modificare per collegare il database al sito è tipicamente uno solo, come avete visto nella tabella precedente con la parola config nel nome (anche se non sempre), quasi sempre con estensione XML oppure PHP, ed è localizzato nella root della directory del sito, oppure all’interno di una directory specifica che cambia caso per caso.

    Ogni CMS possiede le proprie impostazioni e caratteristiche, in tal senso, per cui se non lo trovate qui fate riferimento alla documentazione del vostro CMS.

    Connettersi al db su WordPress

    File di configurazione da modificare: wp-config.php (lo trovate nella root, cioè nella cartella principale del vostro sito)

    Esempio:

    All’interno di questo file troverete 4 costanti PHP definite mediante define., che sono quelle che corrispondono ai dati di connessione del database. Ovviamente DB_NAME è il nome del DB, DB_USER il nome utente, DB_PASSWORD la password dell’utente associata al db, DB_HOST il nome dell’hosting (Attenzione che potrebbe non essere per forza localhost, vi ricordo).

    define('DB_NAME', 'il nome del database');
    define('DB_USER', 'il nome utente del database');
    define('DB_PASSWORD', 'la password del database qui');
    define('DB_HOST', 'il nome dell'host a cui connettersi');

    Connettersi al db su Joomla

    File di configurazione da modificare: configuration.php (lo trovate nella root, cioè nella cartella principale del vostro sito)

    All’interno di questo file, tra le altre cose, tra parentesi graffe troverete 4 variabili pubbliche in PHP, che corrispondono ai rispetti campi richiesti, e che dovrete editare a dovere.

           public $host = 'il nome dell'host a cui connettersi';
            public $user = 'il nome utente del database';
            public $password = 'la password del database qui';
            public $db = 'il nome del database';