3
Riepilogo post marzo 2018
Attenzione! Questo contenuto è vecchioQuesto articolo risale al 2018, quindi i contenuti e le operazioni qui consigliate potrebbero essere diventate obsolete nel corso del tempo.

E' uscito il nuovo Raspberry PI 3 Model B+. E' già disponibile per l'acquisto su Amazon.

Questa nuova versione aggiorna il SoC del Raspberry PI 3 "model B" passando dal modello BCM2837 al più performante BCM2837B0.

Ecco la lista completa, in inglese, delle specifiche del nuovo Raspberry Pi 3 Model B+:

  • Broadcom BCM2837B0, Cortex-A53 (ARMv8) 64-bit SoC @ 1.4GHz
  • 1GB LPDDR2 SDRAM
  • 2.4GHz and 5GHz IEEE 802.11.b/g/n/ac wireless LAN, Bluetooth 4.2, BLE
  • Gigabit Ethernet over USB 2.0 (maximum throughput 300 Mbps)
  • Extended 40-pin GPIO header
  • Full-size HDMI
  • 4 USB 2.0 ports
  • CSI camera port for connecting a Raspberry Pi camera
  • DSI display port for connecting a Raspberry Pi touchscreen display
  • 4-pole stereo output and composite video port
  • Micro SD port for loading your operating system and storing data
  • 5V/2.5A DC power input
  • Power-over-Ethernet (PoE) support (requires separate PoE HAT)

Purtroppo, non esiste ancora il tanto richiesto supporto a USB 3.0. Questa è ancora una grossa limitazione del raspberry, però, per l'uso per il quale questo strumento è stato progettato, è una scelta oculata: il controller USB3 richiederebbe delle modifiche pesanti all'hardware (per quanto sono riuscito a capire), ergo, non è un plus che la Raspberry Foundation ha messo al vertice della lista di priorità.

Ecco come appare la scheda del Raspberry PI 3 Model B+, che evidenzia differenze sostanziali sul processore: questo nuovo SoC ha una frequenza di clock di 1.4GHz (incremento di 200MHz rispetto al precedente) ottenuta grazie ad una nuova architettura e una gestione termica migliore grazie anche alla presenza del dissipatore metallico.


Sulle questioni di connettività, c'è stata una piccola rivoluzione: si è passati dal vecchio Broadcom BCM43438 al Cypress CYW43455, che permette di avere sia il bluetooth 4.2 sia il wifi dual band (2.4/5GHz). Questo nuovo chip incrementa le prestazioni sulla banda dei 2.4GHz, rispetto al modello precedente, e aggiunge la banda dei 5 GHz. Come si può notare dall'immagine del nuovo Raspberry, il modulo wireless è racchiuso da un contenitore metallico (che rispetta le specifiche FCC) : così facendo c'è un effettivo risparmio di costi nei test di conformità nei progetti basati sulla Raspberry Pi 3 model B+.

Per quanto riguarda il software, NOOBS dovrebbe essere compatibile con il nuovo Raspberry senza nessun problema. Fino a qualche giorno fa qualche utente stava lamentando problemi, ma con l'ultimo aggiornamento NOOBS 2.7 questi sono stati risolti. La procedura per installare Raspbian su questa scheda è dunque assolutamente identica al suo predecessore.

Il Raspberry è già disponibile per l'acquisto in consegna a 1 giorno su Amazon: ti consiglio di effettuare l'acquisto perchè Kodi e Retropie beneficiano di molto della nuova architettura del processore. Per quanto riguarda Kodi, nello specifico, i primi rumors parlano di ottimo supporto al playback di video 4K in mkv codificati con codec H265. Tuttavia, non ci si deve aspettare performance da NUC. Maggiori informazioni saranno disponibili su questo sito non appena avrò personalmente testato il supporto a questi formati.

Termino con il video ufficiale del Raspberry PI 3 Model B+


Raspberry PI 3b+

Attenzione! Questo contenuto è vecchioQuesto articolo risale al 2018, quindi i contenuti e le operazioni qui consigliate potrebbero essere diventate obsolete nel corso del tempo.

Nota di Marzo 2018: è uscito il nuovo Raspberry PI 3 Model B+, che è l'ultima versione disponibile del Raspberry 3, con CPU a 1400Mhz. E' disponibile anche su Amazon. Ti consiglio di effettuare l'upgrade, e di leggere le guide aggiornate che trovi su questo sito sulla categoria Raspberry PI.

In questa guida vediamo come controllare la temperatura del Raspberry con un comodo script, e come effettuare un benchmark delle prestazioni: entrambe queste operazioni sono utili nel processo di overclock del Raspberry, per controllare il funzionamento dell'overlock, la stabilità dello stesso, e verificare che il sistema non si surriscaldi troppo.

Tool di controllo temperature:

Aprire una nuova sessione SSH sul Raspberry, e digitare:

nano pi-temp.sh

Questo aprirà l'editor di testo del terminale: incollare questo script

#!/bin/bash
# Script: pi-temp.sh
# Purpose: Display the ARM CPU and GPU temperature of Raspberry Pi 2/3/3b+
# Author: Maurizio Fonte <www.mauriziofonte.it> under GPL v2.x+
# -------------------------------------------------------
LRED='\033[1;31m'
LCYAN='\033[1;36m'
NC='\033[0m'
while :
do
        cpu=$(</sys/class/thermal/thermal_zone0/temp)
        gpu_a=$(/opt/vc/bin/vcgencmd measure_temp)
        gpu_b=${gpu_a//[^0-9.]/}
        echo -e "${LRED}CPU => $((cpu/1000))°C${NC}"
        echo -e "${LCYAN}GPU => $gpu_b°C${NC}"
        sleep 1
done

Salvare il file, ed eseguire quindi:

chmod +x pi-temp.sh
./pi-temp.sh

Questo script stamperà su schermo, ogni secondo, le temperature di GPU e CPU.

Per quanto riguarda il benchmark, basta eseguire questi comandi:

wget https://raw.githubusercontent.com/aikoncwd/rpi-benchmark/master/rpi-benchmark.sh
chmod +x rpi-benchmark.sh
./rpi-benchmark.sh

Con questo tool si potranno ricevere informazioni sulle prestazioni della connessione internet, test su CPU in single thread e multi thread, e performance della memoria RAM e della scheda SD.

Questo tool è molto utile come test incrementale da eseguire ad ogni step di overclock effettuato sul raspberry. Consiglio di far girare, assieme allo script di benchmark, in un altro terminale, lo script per il monitoraggio della temperatura: così facendo, si riesce a capire la curva di riscaldamento della CPU e la curva di raffreddamento della CPU. Questo è molto utile perchè riscaldamenti troppo repentini significano che il sistema di dissipazione non sta funzionando correttamente. Parimenti, un raffreddamento troppo lento è sintomo di problemi di dissipazione.

Overclock ottimizzato Raspberry PI 3 Model B

Attenzione! Questo contenuto è vecchioQuesto articolo risale al 2018, quindi i contenuti e le operazioni qui consigliate potrebbero essere diventate obsolete nel corso del tempo.

Importante: non esiste supporto ufficiale per l'overclock del Raspberry PI 3. Prendere le dovute precauzioni prima di compiere qualsiasi azione, perchè potreste danneggiare il vostro Raspberry in modo irreparabile. Procedete a vostro rischio e pericolo!

In una mia precedente guida ho spiegato come effettuare un overclock stabile al Raspberry PI Model 3. Tuttavia, in internet ho trovato una configurazione che permette di tirare fuori dal Raspberry tutto quello che può dare.

Questa guida è molto utile se vuoi usare il Raspberry 3 Model B con Kodi oppure con Retropie, in quanto le impostazioni di overclock sono molto specifiche anche per la GPU e per la RAM, nonchè per sbloccare il decoding software per i codec MPEG2, VC1,VP6, VP8, Theora, etc.

Attenzione: alla data di oggi esiste già in commercio il Raspberry 3 Model B+. E' molto più potente del suo predecessore! Ti consiglio di valutare l'acquisto, lo trovi già disponibile su Amazon a questo indirizzo.

Vediamo le impostazioni per l'overclock estremo del Raspberry 3 Model B ( fino a Marzo 2018 ).

# Raspberry PI 3 Model B (pre March 2018) "extreme" overclock
force_turbo=0                   #Enable cpu-overclock over 1300MHz (default 0)
avoid_pwm_pll=1                 #Enable no-relative freq between cpu and gpu cores (default 0)

arm_freq=1300                   #Frequency of ARM processor core in MHz (default 1200)
core_freq=550                   #Frequency of GPU processor core in MHz (default 400)
over_voltage=6                  #ARM/GPU voltage adjust, values over 6 voids warranty (default 0)

sdram_freq=575                  #Frequency of SDRAM in MHz (default 450)
sdram_schmoo=0x02000020         #Set SDRAM schmoo to get more than 500MHz freq (default unset)
over_voltage_sdram_p=6          #SDRAM phy voltage adjust (default 0)
over_voltage_sdram_i=4          #SDRAM I/O voltage adjust (default 0)
over_voltage_sdram_c=4          #SDRAM controller voltage adjust (default 0)

gpu_mem=256                     #GPU memory in MB. Memory split between ARM and GPU (default 64?)
gpu_freq=550                    #Sets core_freq h264_freq isp_freq v3d_freq together (default 300)
v3d_freq=500                    #Frequency of 3D block in MHz (default ?)
h264_freq=350                   #Frequency of hardware video block in MHz (default ?)

dtparam=sd_overclock=90         #Clock in MHz to use for MMC micrSD (default 50)
dtparam=audio=on                #Enables the onboard ALSA audio (always use this ON)
dtparam=spi=on                  #Enables the SPI interfaces (default OFF)

temp_limit=80                   #Overheat protection. Disable overclock if SoC reaches this temp
initial_turbo=60                #Enables turbo mode from boot for the given value in seconds

start_x=1                       #Enable software decoding (MPEG-2, VC-1, VP6, VP8, Theora, etc)
overscan_scale=1                #Respect the overscan settings with the use of an LCD display

Ricordo che è assolutamente necessario provvedere al raffreddamento del Raspberry se si vuole procedere con l'overclock, in quanto il Raspberry non è progettato per queste frequenze, e potrebbe effettivamente rompersi. Su questo sito è presente una guida per il raffreddamento del Raspberry 3 Model B.

Ricordo anche che per far funzionare correttamente il Raspberry, ma in particolar modo se si vuole overcloccare, è assolutamente necessario utilizzare un alimentatore da 5V da almeno 2.5A in output, quindi, un alimentatore da almeno 13W di potenza erogabile.

Ultima modifica: Marzo 2018. Se stai leggendo questo articolo e siamo già mesi avanti a questa data, ricordati che esiste già il nuovo Raspberry 3 Model B+ che è più potente del suo predecessore. Naviga su questo sito per conoscere benchmark e overlock per il Raspberry 3 Model B+


Attenzione! Questo contenuto è vecchioQuesto articolo risale al 2018, quindi i contenuti e le operazioni qui consigliate potrebbero essere diventate obsolete nel corso del tempo.

Nel lavoro di uno sviluppatore web il primo fattore di criticità è senza dubbio il server su cui vengono ospitate le applicazioni web e più in generale i siti web dei clienti, ma anche e soprattutto tutte quelle cose che uno sviluppatore web utilizza nel suo lavoro: server di backup, server GIT, cloud privati e server di replica mysql.

Nei miei 12 anni di esperienza nel mondo dello sviluppo web ho provato e valutato moltissime opzioni per la creazione di server VPS, ma da quando utilizzo Digital Ocean non sono più passato alla concorrenza: Digital Ocean è il miglior hosting 2018 per quanto riguarda i server VPS privati.

Vediamo un paio di funzionalità e peculiarità di Digital Ocean:

  1. Permette la creazione di server VPS in pochi click ( immagini sotto ). Su Digital Ocean i server VPS vengono definiti Droplets
  2. I server VPS sono fatturati per utilizzo orario, quindi, si possono fare deploy di test creando un droplet, provando la configurazione, e poi semplicemente cancellare il droplet: si pagherà solo per le ore effettive nelle quali il droplet è rimasto acceso
  3. In ogni caso, i droplet hanno un costo mensile fisso. Sotto riporto una tabella di prezzi aggiornati al Marzo 2018
  4. Il proprio account è collegato ad una sorta di portafoglio da ricaricare, e i costi dei droplet vengono decurtati dal credito presente sul proprio portafogli. Le fatture vengono invece emesse il primo di ogni mese, sulla base dei consumi effettuati al mese precedente. Questo è molto comodo per la contabilità!
  5. I Droplet possono essere "fotografati" ad uno stato particolare, salvati in quelli che vengono definiti Snapshot, possono essere lasciati in stato Snapshot per tutto il tempo che si desidera, e poi gli stessi Snapshot possono essere ripristinati con un click. Questo permette quindi di fare test di deploy ( punto 2 della lista ), verificare che tutto funzioni, poi salvare lo snapshot della configurazione funzionante, cancellare il Droplet ( evitando quindi di pagarlo a vuoto ), e ripristinare poi successivamente lo Snapshot, magari dopo mesi, ritornando quindi di fatto ad avere il Droplet così come lo si era lasciato
  6. Digital Ocean ha un team di blogging sempre sul pezzo: tengono aggiornate moltissime guide sulla configurazione di Linux, e queste guide sono sempre funzionanti sui loro server
  7. I server di Digital Ocean sono velocissimi, anche i Droplet più economici da 5$ / mese
  8. Digital Ocean ha 3 macrocategorie per la creazione di Droplet: quelle "Standard", quelle "Optimized", e quelle "Flexible". In base all'utilizzo che dovrete fare del server VPS, potete scegliere la versione del servizio. Le droplet "Standard" vanno bene nel 90% dei casi, in quanto sono general purpose. Le Droplet "Optimized" sono ottimizzate per un utilizzo intensivo di multi-threading e encoding video, o anche machine learning. Le Droplet "Flexible" sono a prezzo fisso di 15$ / mese, ma in base al vostro utilizzo, ovvero, più ram o più spazio o più processore, potete scegliere quella più adatta

Riguardo alla velocità dei droplet, posso riportare un caso specifico: ho creato un droplet Standard da 5$ / mese, per creare un server remoto mysql e togliere quindi l'onere del servizio mysql da un altro server.

Il server VPS Standard di Digital Ocean da 5$ / mese è configurato con 1GB di RAM, 1vCPU ( 1 processore virtuale allocato ), e 25GB di spazio su HDD. Io ho installato sopra un server mysql con mariadb con una base dati, principalmente su tabelle InnoDB, da circa 15GB di dati puri, e circa 5GB di indici.

Bene, si potrebbe pensare che il server mysql si comporti male con un server del genere: troppi dati negli indici per così poca RAM, e troppa poca potenza di calcolo. E invece, il server si comporta molto bene, con delle performance che fanno pensare che il server sia molto più potente di quanto sia in realtà.

Da sviluppatore e sistemista non posso che consigliare Digital Ocean perchè è il miglior hosting VPS del 2018.

Si può anche approfittare di una promozione: utilizzando infatti i link a Digital Ocean che ho proposto in questo articolo, dopo la prima ricarica di 25$, avrete a disposizione, gratis, 10 dollari da parte di Digital Ocean. Questi 10 dollari omaggio li potete ottenere solo utilizzando i link a Digital Ocean da me proposti in questo articolo. Ecco quindi il link per potervi registrare su Digital Ocean e ottenere 10$ omaggio dopo la prima ricarica di 25$: link alla promozione 10$ in omaggio Digital Ocean.

Vediamo un paio di schermate di Digital Ocean, e qualche prezzo reale aggiornato a Marzo 2018.

Schermata lista Droplet

Schermata Grafici prestazioni e utilizzo

Costi mensili Digital Ocean e configurazioni server

Memoria allocata Numero di vCpus Capacità disco SSD Banda mensile Prezzo mensile
1 GB 1 vCPU 25 GB 1 TB $5/mo
$0.007/hr
2 GB 1 vCPU 50 GB 2 TB $10/mo
$0.015/hr
4 GB 2 vCPUs 80 GB 4 TB $20/mo
$0.030/hr
8 GB 4 vCPUs 160 GB 5 TB $40/mo
$0.060/hr
16 GB 6 vCPUs 320 GB 6 TB $80/mo
$0.119/hr
32 GB 8 vCPUs 640 GB 7 TB $160/mo
$0.238/hr
48 GB 12 vCPUs 960 GB 8 TB $240/mo
$0.357/hr
64 GB 16 vCPUs 1,280 GB 9 TB $320/mo
$0.476/hr
96 GB 20 vCPUs 1,920 GB 10 TB $480/mo
$0.714/hr
128 GB 24 vCPUs 2,560 GB 11 TB $640/mo
$0.952/hr
192 GB 32 vCPUs 3,840 GB 12 TB $960/mo
$1.429/hr

Consiglio caldamente Digital Ocean come miglior hosting 2018 e come miglior server VPS 2018. Registrati su Digital Ocean e crea le tue Droplet!

Attenzione! Questo contenuto è vecchioQuesto articolo risale al 2018, quindi i contenuti e le operazioni qui consigliate potrebbero essere diventate obsolete nel corso del tempo.

Una notevole miglioria di PHP7 è senza ombra di dubbio l'inserimento di un operatore di confronto combinato che viene chiamato Spaceship per semplicità comunicativa: infatti è un operatore di confronto che assomiglia tantissimo ad una navetta spaziale stilizzata, un pò come se fosse una emoticon.

Questo operatore è semplicemente definito come <=>

E' un operatore che va utilizzato per la comparazione di scalari, quindi, di numeri interi, bool, float, e stringhe, ma anche per la comparazione di Array e Oggetti. Ecco un esempio:

<?php
echo 1 <=> 1; // 0
echo 1 <=> 2; // -1
echo 2 <=> 1; // 1

La particolarità di questo operatore è che al posto di definire un "vero o falso", come accade per i suoi fratelli <, >, <= e >=, la sua mappa di verità è leggermente diversa, e permette di avere 3 stati di ritorno:

  • 0:  se entrambe le espressioni sono UGUALI
  • 1: se l'espressione di SINISTRA è maggiore
  • -1: se l'espressione di DESTRA è maggiore

Ora, ragionando un secondo su espressioni scalari "stringa", questo operatore fa quello che ha sempre fatto la funzione strcmp di php.

<?php
// qui è chiaramente visibile il comportamento dell'operatore Spaceship, che è assolutamente identico alla funzione strcmp per le stringhe
$a = 'aeroporto';
$b = 'piscina';
echo strcmp ( $a, $b ); // -1
echo $a <=> $b; // -1

La vera potenza di questo operatore è che rende la scrittura di funzioni di ordinamento custom molto più veloce da scrivere: ecco un esempio di stessa identica funzione di ordinamento custom, usando il "vecchio" triplo if, e usando il nuovo operatore Spaceship:

<?php
$numeri = [ 0 => [ 'v' => 10 ], 1 => [ 'v' => 20 ], 2 => [ 'v' => 30 ], 3 => [ 'v' => 10 ], 4 => [ 'v' => 40 ], 5 => [ 'v' => 40 ] ];

// vecchio metodo di ordinamento
usort ( $numeri, function ( $n1, $n2 ) {
   if ( $n1['v'] == $n2['v'] ) return 0;
   else if ( $n1['v'] < $n2['v'] ) return 1;
   else return -1;
});

// nuovo metodo di ordinamento
usort ( $numeri, function ( $n1, $n2 ) {
   return $n1['v'] <=> $n2['v'];
});

Vediamo invece qualche esempio di confronto tra più di un tipo di variabile e i relativi ritorni di verità:

<?php
// Interi
echo 1 <=> 1; // 0
echo 1 <=> 2; // -1
echo 2 <=> 1; // 1
// Float
echo 1.5 <=> 1.5; // 0
echo 1.5 <=> 2.5; // -1
echo 2.5 <=> 1.5; // 1
// Stringhe
echo "a" <=> "a"; // 0
echo "a" <=> "b"; // -1
echo "b" <=> "a"; // 1
echo "a" <=> "aa"; // -1
echo "zz" <=> "aa"; // 1
// Array
echo [] <=> []; // 0
echo [1, 2, 3] <=> [1, 2, 3]; // 0
echo [1, 2, 3] <=> []; // 1
echo [1, 2, 3] <=> [1, 2, 1]; // 1
echo [1, 2, 3] <=> [1, 2, 4]; // -1
// Oggetti
$a = (object) ["a" => "b"];
$b = (object) ["a" => "b"];
echo $a <=> $b; // 0
$a = (object) ["a" => "b"];
$b = (object) ["a" => "c"];
echo $a <=> $b; // -1
$a = (object) ["a" => "c"];
$b = (object) ["a" => "b"];
echo $a <=> $b; // 1
// solo i valori vengono confrontati, non le chiavi: in questo caso i valori sono "b" e "b" in entrambi gli oggetti
$a = (object) ["a" => "b"];
$b = (object) ["b" => "b"];
echo $a <=> $b; // 0

La migliore applicazione di questo comparatore è l'utilizzo in funzioni di ordinamento custom:

<?php
class Veicolo {
   public $nome;
   public $velocitaMassima;
   public function __construct ( string $nome, int $velocitaMassima ) {
      $this -> nome = $nome;
      $this -> velocitaMassima = $velocitaMassima;
   }
}

$veicoli = [
   new Veicolo ( 'Panda', 160 );
   new Veicolo ( 'Punto', 180 );
   new Veicolo ( 'Giulia', 240 );
   new Veicolo ( 'Ape', '50' );
   new Veicolo ( 'Ducato', 160 );
   new Veicolo ( 'Z4', 240 );
];

// ordinamento per nome
usort ( $veicoli, function ( $v1, $v2 ) {
   return $v1 -> nome <=> $v2 -> nome;
});
echo $veicoli[0] -> name;  // Ape

// ordinamento per velocità massima
usort ( $veicoli, function ( $v1, $v2 ) {
   return $v1 -> velocitaMassima <=> $v2 -> velocitaMassima;
});
echo $veicoli[0] -> name;  // Giulia

Vediamo come si comporta l'operatore Spaceship di PHP 7 quando utilizzato su ordinamenti di valori multipli. Questa tecnica semplifica enormemente l'ordinamento di array o oggetti basando l'ordinamento su più chiavi.

<?php
usort ( $veicoli, function ( $v1, $v2 ) {
   return [ $v1 -> velocitaMassima, $v1 -> nome ] <=> [ $v2 -> velocitaMassima, $v2 -> nome ];
});
foreach ( $veicoli as $veicolo ) {
   echo 'La velocità massima di "' $veicolo -> nome . '" è ' . $veicolo -> velocitaMassima . '\n';
}
// Stampa:
// La velocità massima di "Ape" è 50
// La velocità massima di "Ducato" è 160
// La velocità massima di "Panda" è 160
// La velocità massima di "Punto" è 180
// La velocità massima di "Giulia" è 240
// La velocità massima di "Z4" è 240

Sfruttando la comparazione di array, questa funzione di ordinamento ha richiesto 1 sola riga per essere scritta, al posto delle 6 o 7 richieste precedentemente.

Questa era la seconda lezione su PHP 7. Naviga nella categoria PHP7 di questo blog per scoprire le altre lezioni e le novità introdotte da PHP7.