Archivio dell'autore: Jazzo

Gatti e Montanari: dal Parlamento chieste azioni nei loro confronti sulla vicenda Microscopio

La verità su Gatti e Montanari sulla vicenda Microscopio sta per saltar fuori!

Vi ricordate il mio post del 2009 “Stefano Montanari sulla vicenda microscopio“? Ovviamente fui goffamente attaccato(e censurato sul suo blog) da Stefano Montanari che ha tutto l’interesse evidente che non emerga la verità. Ma ci sono persone nella vita che non si fermano, che vanno avanti mettendoci la faccia. Lo fanno con coraggio, infischiandosene delle minacce altrui. Persone che fanno il bene dei cittadini. Li stanno accerchiando. Un numero crescente di persone sta facendo sapere, con documentazione e atti alla mano, chi sono e cosa realmente fanno Antonietta Gatti e Stefano Montanari.

Ora finalmente sono sotto la lente d’ingrandimento del Parlamento e di 3 Ministeri (Giustizia, Ricerca e Salute). E’ stata infatti presentata un’interrogazione parlamentare da ben 8 Senatori che chiedono verifiche e risposte urgenti sull’UTILIZZO A SCOPO DI LUCRO DEL MICROSCOPIO comprato da migliaia di benefattori – e da una Onlus onesta – che credevano a quanto dicevano i signori Stefano Montanari e Antonietta Gatti dai palchi degli spettacoli del comico Beppe Grillo. Solo una volta ottenuto il microscopio Stefano Montanari ha detto pubblicamente che la storia delle nanoparticelle presenti nella famosa lista di alimenti era una bufala concordata con Grillo per fare spettacolo.

Peccato che invece in tanti ci abbiano creduto.

Dopo aver ricevuto il microscopio Antonietta Gatti e Stefano Monatanari l’hanno semplicemente utilizzato A SCOPO DI LUCRO. La Onlus non ha voluto essere complice e l’ha donato all’Università di Urbino con la clausola di permettere ai due di usarlo almeno una volta alla settimana (sempre per mantenere fede a quella raccolta fondi di Beppe Grillo alla quale tutti avevamo ingenuamente creduto).

E ora loro cosa fanno?

Continuano ad usarlo a scopo di lucro anche ora che è di proprietà dell’Università di Urbino e senza alcune convenzione/autorizzazione! Ma nel 2006, anziché far donare da ingenui benefattori dei soldi per acquistare lo strumento da usare per la loro azienda, non potevano farsi un mutuo in banca e comprarselo loro?
Comunque, ora troppa gente si è stancata e il caso finalmente è finito in Parlamento, sui tavoli della Procura della Repubblica e sul tavolo della Corte dei Conti.
Bene! Ottimo! Finalmente si saprà una volta per tutte la verità!
Poi si passerà a focalizzare l’attenzione sulla vicenda relativa ai vaccini, e qui mi sa che ne scopriremo delle altre…

Linux, spazio su disco esaurito (ma sono gli iNodes)

In questi giorni si è presentato un problema sul server Linux di non facile risoluzione. L’errore che appariva era “spazio esaurito sul device” (No space left on device) ma non era lo spazio, bensì gli iNodes (grazie!) che potete verificare col comando:
df -i

Nella root / avevo il 100% utilizzato senza più un iNodes libero e il problema stava nel fatto che ogni comando dava errore proprio per la mancanza di inodes disponibili. Cosa avesse causato il problema subito facevo fatica a comprenderlo e così la prima cosa da fare è cancellare qualche files “a mano”. Ho iniziato dai log in /var/log/ cancellando ricorsivamente tutti i file .gz. Ho liberato circa 300 inodes e questo mi ha permesso di eseguire un’altra operazione: spostare una directory temporaneamente.

Con questo utile comando ho identificato una directory particolarmente piena di files da spostare per liberare ulteriore spazio (es. in /var/lib):
find /var/lib -xdev -printf '%h\n' | sort | uniq -c | sort -k 1 -n
(il comando restituisce un elenco con numero file per ogni sottodirectory)

Per liberare qualche iNode ho spostato una directory in home che risiede su un’altra partizione (gli iNodes sono riferiti ad ogni singola partizione, su /home ero solo al 3%) e poi ho creato un link simbolico (l’ho fatto per /var/lib/dpkg/info che conteneva oltre 6000 files):
mv var/lib/dpkg/info /home/jazzo/dpkg_info/

Liberato un po’ di “spazio” son riuscito finalmente a lavorare e ad approfondire il problema.
Dopo un po’ di ricerche ho scoperto che erano ancora presenti tutte le versioni del kernel dal momento dell’installazione.
Per conoscere l’elenco di tutte le versioni presenti nel sistema:
dpkg --get-selections | grep linux-image

Schermata 2015-09-17 alle 17.49.35

Ho rimosso una ad una le vecchie versioni con questo comando (lasciando solo le ultime 2):

apt-get remove --purge linux-image-3.13.0-36-generic

Ogni versione occupava circa 150Mb e 5.000 iNodes.
A questo punto ho lanciato l’autoremove e si son liberati oltre 300.000 iNodes!
apt-get autoremove

Questa la situazione prima:
Schermata 2015-09-17 alle 17.58.10
e questa dopo!
Schermata 2015-09-17 alle 17.58.23

E così ora le versioni le cancellerò di volta in volta, senza dar sempre per scontato che lo spazio sia infinito!

Consorzio del Parmigiano Reggiano, a scuola di marketing!

 

Schermata 2015-08-13 alle 12.44.24

PornHub, piattaforma leader nel settore del porno (giornalmente trasmette in streaming circa 10 volte quello che trasmette Facebook), lancia il servizio Premium attraverso uno spot pubblicitario di circa 20 secondi. In questo spot il Parmigiano Reggiano viene definito come “il Pornhub Premium” dei formaggi con inequivocabile parallelo tra l’eccellenza del prodotto italiano e quella del nuovo servizio Premium.

Ora io non sono un esperto in materia ma non ci vuole un ninja marketing per comprendere che la pubblicità di PornHub non poteva che fare bene al Parmigiano Reggiano. Il Consorzio a tutela del Parmigiano Reggiano invece “ha dato mandato ai propri legali dì verificare quali ipotesi di reato possano sussistere a carico del sito pornografico americano che ha utilizzato il nome ed il prestigio del prodotto per pubblicizzare i propri servizi di video porno in streaming” (leggi articolo su Huffington Post). Hanno perso un’altra occasione per tacere, peccato. Questa era un’onda da cavalcare e non da respingere. Ma vi rendete conto di che impatto avrà questa pubblicità in USA?

In USA dove, già 3 anni fa, un articolo su Forbes (“Most Parmesan Cheeses In America Are Fake, Here’s Why“) sottolineava quanto il termine “Parmesan” tragga in inganno gli statunitensi proprio per il fatto che sotto quel termine ci finisce di tutto. Un articolo profondo e pieno di dettagli che addirittura porta in luce la distinzione tra “Grana Padano” e “Parmigiano Reggiano” su cui lo stesso Consorzio poteva fare di meglio in questi anni.

Il Consorzio inoltre sostiene che “quanto sia ben premeditata l’azione di sfruttamento della prestigiosa Dop italiana è reso ancor più evidente dal fatto che si cita il suo nome corretto e integrale, e non la più generica forma ‘parmesan’, che negli Usa è utilizzata per tanti formaggi“.
Incredibile!
Proprio perchè avevano bisogno di un marchio di eccellenza, qualcosa che si discostasse dal “prodotto di massa”, hanno pensato ad un prodotto unico nel suo genere, genuino e incredibilmente buono come il “Parmigiano Reggiano”. Non capisco il senso della “lamentela” per non aver usato il termine “Parmesan” quando invece mi chiedo da tempo come mai il Consorzio non sia riuscito ad imporre il marchio “Parmigiano Reggiano” nel mondo, così come i nostri vicini hanno fatto con il “Prosciutto di Parma” (marchio registrato in circa 90 paesi). Perchè “Parmesan”? Cos’è PARMESAN mi chiedo, mah!

Lui dice “Aged Parmigiano Reggiano“. Spettacolo!
Scandito bene, sound italiano. Fa leva sulla stagionatura del prodotto e sottolinea il marchio. Cosa volete di più? Invece no, questi si inca**ano.

Io avrei cavalcato l’onda fancendo uscire ciò che i reggiani ben sanno: “che il Parmigiano Reggiano è anche afrodisiaco!”. E così facevano il botto. Un esempio? Lo spot della “Pizza a Portafoglio” dopo la pubblicità di McDonald!

Infine vi segnalo anche l’ottimo articolo di Michela Dell’Amico su Wired.

E ora non scandalizzatevi, ecco a voi lo spot:

 

 

Fairphone, smartphone etico ed eco-sostenibile

Fairphone

Oggi il consumatore critico si trova di fronte a dilemmi immensi perché la tecnologia è sempre più parte integrante della nostra vita quotidiana ma il costo per il pianeta e per l’umanità è altissimo. Per fortuna stanno nascendo aziende del futuro, come Fairphone (Olanda), le quali stanno invertendo il ciclo: “Together we can change the way products are made” (“insieme possiamo cambiare il modo con cui i prodotti sono costruiti”) recita il loro slogan.

L’impatto ambientale del progresso tecnologico degli ultimi decenni è devastante. Solo in Europa si stima vi siano 1,6 miliardi di vecchi telefoni non più utilizzati e di questi solo il 7% viene riciclato in modo corretto (Fonte: European Commission Study for Ecodesign Working Plan). Il resto va ad alimentare quel fenomeno denominato High-Tech Trash ben descritto nell’articolo del National Geographic già nel lontano 2008 e nell’omonimo libro di Elizabeth Grossman. Ancora oggi, in Ghana, la situazione è estremamente grave. La foto qui sotto mostra un bambino che raccoglie componenti elettronici per bruciarli e ricavarne così rame e alluminio da “rivendere” (guarda il video “Elettronic Waste in Ghana“).

After school, kids go to Agbogbloshie to collect copper and aluminium to make a little extra money.

After school, kids go to Agbogbloshie to collect copper and aluminium to make a little extra money. (Fonte: Fairphone)

Un altro paese dell’Africa che stiamo devastando, insieme al suo popolo, è il Congo. Ancora prima della catena di produzione disumana cinese per l’assemblaggio c’è il popolo congolese che muore per estrarre dalle miniere il Coltan (columbite-tantalite). Il Coltan è nei nostri telefoni, nei PC, nei Tablet e ormai anche nella lavatrice visto che vengono equipaggiate di schede elettroniche. Si estrae anche in Nigeria, Australia e Brasile ma in Congo costa meno. I proventi del commercio semilegale di Coltan, attuato dai movimenti di guerriglia che controllano le province orientali del Congo, alimentano la guerra civile in questi territori (Fonte: Wikipedia). Stiamo parlando di un conflitto che dura da 20 anni e che ha fatto 8 milioni di morti.
Le foto di Erberto Zani mostrano perfettamente la situazione oggi.

«Nel 2008, dopo 14 anni di lontananza, ho deciso di tornare a casa, in Congo, dalla mia famiglia. É stato uno shock: trovare che non esiste più niente. Chiedo di un amico e mi dicono che è morto, le strade e le infrastrutture non esistono più. Niente era più come prima, non riuscivo a spiegarmelo. Un giorno ho anche pianto, mia madre pensava che la mia tristezza fosse dovuta a qualche problema in Italia, mentre in realtà piangevo per il mio paese». Queste sono le parole dell’attivista  John Mpaliza, l’ingegnere congolese protagonista della marcia per il Congo: da Reggio Emilia (dove vive e lavora) a Bruxelles per rompere il muro di silenzio sulla guerra e sulla devastazione del suo paese. Oggi è conosciuto come Peace Walking Man.

Tutto ciò impone una riflessione. E’ inutile puntare il dito contro quelli che corrono freneticamente a comprare sempre l’ultimo modello di smartphone presentato da Apple o Samsung. Il problema coinvolge tutti, compresi quelli che tentano di “stare alla larga” dalla tecnologia. Ognuno di noi ha un telefono. A Marzo di quest’anno, quando il mio iPhone 3GS arrivò a fine corsa, mi sono fermato. Ho cercato qualcosa di diverso, orientato al futuro, non tanto per l’aspetto tecnologico quanto sul fronte etico ed eco-sostenibile. E così ho conosciuto il meraviglioso Fairphone (grazie Silvia e Terri).

Fairphone nasce come progetto di Waag Society, Action Aid and Schrijf-Schrijf in Olanda per sensibilizzare le persone sulle guerre legate al mondo dell’elettronica, in particolar modo quella della Repubblica Democratica del Congo. Nel 2013 viene costituita l’impresa sociale indipendente con sede ad Amsterdam.

Lo smartphone Fairphone è stato realizzato mettendo in primo piano questi aspetti fondamentali: Minerario, Design, Produzione, Ciclo di vita e Imprenditoria Sociale.

Minerario – Ogni Fairphone contiene circa 40 minerali (“including tantalum, tungsten, copper, iron, nickel, aluminum, tin, silver, chromium, gold and palladium”) e per ognuno di essi l’obiettivo è stato quello di integrare solo materiali a supporto delle economie locali, non milizie armate.

Design – L’idea è quella di cambiare il rapporto tra le persone ed i loro telefoni. In primo piano mettono longevità e riparabilità del telefono, dare alle persone il totale controllo del telefono acquistato fornendo la massima trasparenza su come è stato progettato. Sul sito vendono tutti i pezzi di ricambio, cambiare la batteria (18 euro) è un’operazione semplicissima come nei vecchi Nokia. Per la cover si possono scaricare i modelli 3D da stampare.

Manufacturing – La produzione avviene in Cina ma le garanzie sul lavoro sono state messe in primo piano: condizioni di sicurezza, salari equi e rappresentanza dei lavoratori. Lavorano a stretto contatto con i produttori che vogliono investire nel benessere dei dipendenti. Anche qui in totale controtendenza rispetto a chi va in Cina a sfruttare i lavoratori.

Life Cycle – “We believe that our responsibility doesn’t end with sales” (“Crediamo che la nostra responsabilità non finisca con la vendita”). Chi compra un Fairphone viene seguito durante l’intero arco di vita del telefono: uso, riutilizzo e riciclaggio sicuro. Hanno appena avviato un meraviglioso programma di Riciclo per vecchi telefoni in Europa.

Imprenditoria Sociale – Sul sito trovate tutta la documentazione per trasparenza sui costi e lista dei fornitori di tutti i materiali utilizzati per la costruzione del telefono. Gli utenti della community (sempre più attiva e creativa) vengono coinvolti nel processo di produzione e ascoltati quando riportano le loro esperienze.

Il Fairphone viene prodotto per “stock”, vale a dire che non esiste una produzione continua, proprio per non cadere nella morsa del dover poi vendere a tutti i costi. Periodicamente viene lanciato un batch (l’ultimo a Giugno 2014 per 35.000 pezzi, il prossimo a Gennaio 2015) e la produzione inizia solo dopo aver raggiunto un certo numero. Una volta venduti tutti i pezzi costruiti ci si ferma tutti a ragionare.

Quanto costa?
Per quanto mi riguarda è proprio il caso di dire solo 310 euro.
Queste riportate sotto sono le specifiche tecniche di base, qui le Specifiche tecniche complete.

fairphone-tech-specs

Una volta acquistato ricordatevi di aderire al movimento #WeAreFairphone
E anche l’aver creato un movimento è un bel modo per valorizzare il prodotto, diverso dai soliti slogan, perché il Fairphone rivoluziona la relazione col telefono soprattutto dopo che l’hai comprato. Sei parte di un movimento e hai la possibilitá di far sentire la tua voce. E’ tantissimo già solo questo.

Spero di avervi convinto!

Cambio di rotta: Twenty Twelve

Schermata 2014-11-22 alle 23.35.06

Il tempo vola e a volte ci si ostina a risolvere problemi percorrendo la strada sbagliata. Due anni fa ho acquistato un template a pagamento per questo sito (Whiteblack) perchè volevo un layout diverso. Poi, un anno fa, smise di funzionare. Per un anno intero (nei ritagli di tempo) ho cercato di risolvere il problema senza mai dedicargli il tempo necessario. E così un anno e volato e non ho più scritto un post (l’editor smise di funzionare)!

Dopo un anno mi son deciso ad utilizzare un tema WordPress standard che più standard non si può: Twenty Twelve. E così finalmente torno a scrivere! 😉

MediaWiki, bloccare accesso alle Special Pages (Pagine speciali)

Schermata 2013-09-20 alle 12.17.42

Se utilizzate il wiki in ambiente privato (quindi con accesso consentito solo agli utenti registrati) avrete notato che le Pagine Speciali sono accessibili da chiunque, anche agli utenti non registrati. Queste pagine contengono una serie di informazioni (tra cui elenco utenti, categorie, ecc.) molto importanti e sensibili che è bene proteggere!

Per fare questo basta aggiungere questo piccolo code snippet di MarkAHershberger nel vostro file di configurazione LocalSettings.php. Se come me utilizzate il wiki in ambiente privato però sarà necessario comunque abilitare agli utenti l’accesso alla Login Page, fondamentale direi. A questo punto resta da aggiungere una sola riga al suddetto codice.

Ecco il codice completo da utilizzare:

function disableAllSpecialPages(&$list) {
global $wgUser;
if(!$wgUser-> isLoggedIn()) {
$list = array();
// Enable Login page
$list['Userlogin'] = "LoginForm";
}
return true;
}
$wgHooks['SpecialPage_initList'][]='disableAllSpecialPages';

Testato e verificato sulla versione 1.21.2.

Conversione codifica di un file (da UTF-8/UTF-16 a cinese GB18030)

200px-Unicode_logo.svg

Mi è arrivato un file direttamente dalla Cina per la traduzione di un sito web. Lì tutto gira in UTF-8 quindi anche il file in questione (caricato dinamicamente via php) deve essere in UTF-8. Come fare?

Per prima cosa bisogna capire con precisione che tipo di encoding ha il file in questione. Mi sono documentato un po’ e per OSX molti dicono che il comando “file -I” non funziona, o meglio non bene. E’ vero: nel mio caso il file cinese aveva codifica GB18030 (Chinese) e il comando “file -I” mi ha restituito erroneamente iso-8859-1:

# file -I lang-cn.php_cn
lang-cn.php_cn: text/x-php; charset=iso-8859-1

Ho cercato sull’App Store e ho trovato l’app ezText la quale mi ha restituito la codifica corretta: GB18030 (Chinese).
A questo punto la stessa App vi permette di effettuare la conversione su una diversa codifica ma anche qui non mi ha convinto fino in fondo. Il passaggio da GB18030 a UTF-8 mi modificava anche i caratteri normali (non solo gli ideogrammi cinesi).
Per questo scopo ho trovato perfetto il comando “iconv” da Terminale, mi è bastato inviare il comando:

iconv -f GB18030 -t UTF-8 nome-file_GB18030 > nome-file_UTF8

Conversione perfetta!

Deploy di un progetto su Git via FTP

Git-Icon-1788C

Git è eccezionale, una volta scoperto difficilmente si torna indietro.
Tutti i miei progetti infatti ora sono su Git e per la maggior parte di essi il relativo ambiente di produzione risiede su Hosting Linux “normali”, quelli in cui il provider fornisce come unica possibilità di aggiornamento dei file il servizio FTP. Così, dopo aver terminato lo sviluppo di nuove features, mi ritrovo spesso con diversi commit eseguiti e per aggiornare l’ambiente in produzione avevo 2 possibilità:

  1. effettuare l’upload dell’intero progetto sovrascrivendo tutti i file
  2. creare un file di tutti i file modificati (estrandoli da tutti i commit) per poi aggiornarli via FTP

La prima soluzione è sicuramente la più veloce ma spesso risulta lunga e si va ad utilizzare banda inutilmente perchè la maggior parte dei file non dovrebbe essere aggiornata (parliamo di tutti quelli non modificati). La seconda soluzione richiedeva un lavoro da certosino che poi ho scoperto di poter eseguire tramite alcuni comandi Git. Da qui ho pensato di realizzare uno script shell per ottimizzare le operazioni di deploy in produzione: Git-Deploy-by-FTP.

E’ il mio primo shell script e l’ho condiviso via GitHub, sicuramente può essere migliorato! 😉
L’ambiente su cui sviluppo e su cui ho testato il corretto funzionamento è OSX.

Come funziona?

Questo script può essere richiamato da riga di comando e devono essere passati alcuni parametri che vedremo successivamente.
Le operazioni che esegue possono essere sostanzialmente riassunte in:

  • crea un git clone del repository e su questa copia lavora
  • effettua un git diff per estrarre tutti i file modificati/eliminati/aggiunti basandosi su 2 commit che definiamo “deploy” e “production
  • esegue l’aggiornamento di tutti i file (eliminandoli dove necessario) dell’ambiente di produzione via FTP (tramite CURL)

Ho preferito far lavorare lo script su un clone in modo da poter stare tranquilli su eventuali problemi dovuti ad interruzione delle procedure. Lavorando su una copia del repository infatti in qualsiasi momento posso interrompere la procedura senza creare problemi al repository principale.

I due commit “deploy” e “production” sono identificati dal loro SHA. Il primo (deploy) rappresenta lo stato dei file nel commit che vorrei mandare in produzione, il secondo (production) identifica l’ultimo commit mandato in produzione. Il comando git diff esegue le operazioni anche a ritroso, quindi potrei anche effettuare un downgrade del software anzichè un upgrade.

L’aggiornamento dei file avviene tramite comando CURL che effettua il login via FTP e invia i comandi necessari.

Configurazione

Ho pensato ad un sistema flessibile che mi permettesse di gestire più progetti tramite un unico script. L’idea quindi è quella di poter scrivere diversi file di configurazione e richiamare quello interessato tramite parametro da riga di comando (vedi sotto). Nello script trovate un file di esempio di configurazione: dp-sample-config.
Create una copia del file e rinominatelo secondo questo criterio: .dp-config-ProjectName
dove ProjectName identifica un vostro progetto. In questo modo potrete avere diversi file di configurazione, uno per ogni progetto. I file di configurazione devono necessariamente risiedere nella stessa directory dello script (iniziando col . però dovrebbero rimanere nascosti).

Le variabili da valorizzare obbligatoriamente in ogni file sono quelle nella sezione “SETTINGS”:

  • EXPORTED_DIR – è la directory temporanea utilizzata per creare il repo clone di cui sopra
  • PROJECT_REPO_DIR – è la directory in cui si trova il repository da utilizzare
  • FTP_SERVER – il nome del server FTP dell’ambiente in produzione
  • FTP_PATH – il path dell’ambiente in produzione del suddetto server FTP
  • FTP_USERNAME – FTP username per connettersi al server
  • FTP_PASSWORD – FTP password per connettersi al server

Nel file troverete anche altri parametri secondari che potrete configurare in un secondo momento dopo averne capito il loro utilizzo.

Usage (come usare lo script)

Lo script dp.sh può essere richiamato da riga di comando passando alcuni parametri di cui 2 obbligatori:

  • -p, –project Imposta il nome del progetto di cui si vuole effettuare il deploy
  • -d, –deploy Imposta il commit di cui si vuole effettuare il deploy
  • –not-simulate Con questo parametro lo script eseguirà il deploy realmente, viceversa effettuerà solo una simulazione

Il parametro -p (o –project) deve essere seguito dal ProjectName di cui sopra.
Il parametro -d (o –deploy) deve essere seguito dal SHA del commit di cui si vuole effettuare il deploy.
Dopo aver verificato tramite simulazione che tutto è corretto potrete aggiungere il parametro –not-simulate per effettuare realmente il deploy. Questo parametro è stato aggiunto per ovvi motivi di sicurezza, meglio una simulazione in più che qualche file errato in produzione!

Ora un esempio di comando:
# dp.sh --project progetto1 --deploy bb5c8d9

Questo comando per prima cosa cercherà il file di configurazione .dp-config-progetto1 da cui prelevare le suddette variabili. Successivamente effettuerà una simulazione del deploy del commit bb5c8d9 in ambiente di produzione. Aggiungendo come ultimo parametro –not-simulate i file verranno realmente inviati via FTP al server.

Tag “production”

Ho cercato una soluzione che mi permettesse di tenere traccia dell’ultimo deploy effettuato in modo da sapere sempre in che commit si trova l’ambiente di produzione. Per fare questo utilizzo un tag chiamato “production” sul repository principale. Prima di effettuare il “git diff” di cui sopra lo script interroga il repository per ottenere il commit relativo al tag “production”.

In fase di chiusura delle operazioni, solo nel caso in cui non sia stata effettuata una simulazione, lo script sposta il tag “production” sul nuovo commit di cui si è appena effettuato il deploy. Questa è l’unica operazione che viene eseguita sul repository principale e non sulla copia clonata.

ToDo list

Lo script al momento funziona bene quando i commits “deploy” e “production” sono sullo stesso branch. Nel caso si trovino su due branch diversi è bene verificare con attenzione cosa accade (simulate!).
Una nuova feature da implementare è sicuramente la gestione dei sub-moduli che al momento vengono ignorati dalla procedura.

Buon deploy! 😉