 intanto mi presento, mi chiamo Vincenzo Di Franco, qualcuno mi conosce perché partecipato a Milano come spettatore quindi come la maggior parte di voi. Poi dopo a Torino ho partecipato anzi tutti quelli che sono spettatori partecipate ai workcamp anche come diciamo persone che aiutano perché tutto questo è fatto anche da volontari quindi perché no aiutiamo WordPress in questo modo e adesso sono qui a relazionare un po' una cosa che ho visto per motivi di lavoro e che quindi volevo condividere anche con voi. La mia formazione un po' in ingegneria durante i anni dell'università sono diventato Presidente di un'associazione culturale e quindi ho iniziato a fare il sito di questa associazione avendo iniziato a fare il sito della sua azione ho conosciuto WordPress poi dopo la vita mi ha portato a diventare responsabile T in un'azienda che si occupava di un'esidimercato, successivamente ho fatto anche i responsabili commerce quindi mi sono occupato di un e-commerce che vendeva gioielli di una gioielleria e adesso sono sviluppatore full stack e ho scoperto la posizione di programmare. Chi è che programma qui? Ecco quindi abbiamo diversi programatori. Cosa vi farò vedere in questa presentazione? Intanto vi darò un po' il concetto di sincronizzazione per farvi capire quali sono gli aspetti della sincronizzazione in un ambiente di lavoro che dove lavoro io è fatto da un ambiente locale dove si sviluppano tutti i prodotti e poi un ambiente di produzione dove quindi tutti i prodotti che abbiamo sviluppato in locale si portano al pubblico quindi è importante che quello che viene portato in produzione non abbia mal funzionamenti poi vedremo quali sono i vantaggi di sincronizzare sviluppo e produzione. Cosa fa lo script? Ho messo uno script su GitHub e questo script può essere stesso ovviamente ed è soltanto una base e mi è utile soprattutto a me a fare dei test veloci sull'ambiente di produzione e sull'ambiente di sviluppo e faremo una piccola introduzione a quello che è vpcly. Chi è che ha utilizzato vpcly? Quindi una piccola parte delle persone che sono qui. Allora poi alla fine parleremo un po' delle funzioni del codice e entreremo magari proprio non nel dettaglio come funzionano queste, come funziona il codice e come si esegue questo controllo. Fondamentalmente il talk è rivolto sia professionisti di WordPress e quei professionisti che vogliono garantire coerenza tra ambienti di lavoro ha programmatori perché ci sarà un po' di codice e anche non programmatori perché vorrei dare la possibilità che non è programmatore di capire un po' i concetti dietro quello che ho sviluppato perché capisco anche per chi non è programmatore alcuni concetti possono essere complicati da comprendere. Andiamo subito a quella che è la mind map del concetto di sincronizzazione. Quando bisogna sincronizzare un ambiente, quindi immaginate i tuoi computer nell'esempio più semplice, cioè il computer che sta a casa mia e dove io sviluppo è il computer che sta da qualche parte nel mondo dove il sito viene visto dalle persone. Abbiamo quel sito di computer che devono essere sincronizzati perché ci deve essere una consistenza dei dati. Perché PHP, ma qualsiasi codice che dobbiamo scrivere, dipende alle volte da delle librerie che potrebbero cambiare. Quindi immaginate di essere dei registi e che c'è una scena di un film che dovete fare, che la scena è identica alla scena che dovete fare perché dovete magnificare qualche piccola cosa. La coerenza starebbe in questo, andare a controllare che ogni singolattore si trova nella stessa posizione che è vestito nello stesso modo e che fa le stesse identiche cose. Quindi cosa devo fare? Devo avere queste dipendenze uguali e devo stabilire che la configurazione del mio computer, dove io sto facendo le prove, sia uguale a quella del computer online quello che sta servendo il prodotto a tutti i clienti. Cosa c'è come complicazione? La complicazione è che ci potrebbero essere degli errori. Io come sviluppatore con una persona potrei commettere degli errori potrei avere delle situazioni inaspettate e produrre degli errori che non mi permettono di avere del codice che funziona online. Quindi cosa succede? Se ci sono degli errori c'è tempo e risorse limitate, i clienti vogliono spendere una certa quantità di denaro e quindi i costi aumentano. Inoltre c'è un problema di sicurezza, il testo e il locale per evitare che poi ci siano problemi di sicurezza e che quindi il sito non funzioni in produzione. Questo è praticamente molto importante perché garantisce camps qualità del software e quindi in maggior affidabilità hai riduzione dei rischi. Cosa abbiamo come vantaggi? Una maggiore stabilità, non ci sono malfonuzionamenti se mettono interruzioni, poi abbiamo anche una maggiore sicurezza. Abbiamo detto posso testare il locale e vedere se ci sono dei bug in produzione o il locale e posso essere tranquillo di testare quanto voglio prima di portare le cose in produzione. E poi abbiamo un altro vantaggio, qui ho messo delle ghiere tra di loro, quindi immaginate tutti vari plugin come se fossero delle ghiere. Se ci sono delle differenze e come se questa rotellina è leggermente diversa in produzione o in sviluppo, quindi cosa succede? Che tutto l'insieme potrebbe funzionare diversamente da come ci aspettiamo. Quindi dobbiamo assicurare che le funzionalità siano consistenti tra gli ambienti. Quindi tutto questo garantisce applies una giornabilità. Possiamo avere facilmente nuove implementazioni del software. Quindi possiamo permetterci di avere un software migliore che non ha interruzioni. Sapete bene, in un e-commerce un interruzione potrebbe essere anche una partita di guadagno. C'è una mancata produzione, un e-commerce non è online, non funziona bene. Quindi tutti i test che facciamo e li facciamo in locale e questi test permetterlo di identificare alcune vulnerabilità prima che avvengano in produzione. Almeno si spera che questo non avvenga in produzione. Cosa fa lo script, il plugin che ho inserito su GitHub? Fondamentalmente, se vedete questa bilancia, fa un controllo di un numero, il numero di versione. Per chi non lo sapesse, la versione solitamente ha tre numeri. Il primo numero che stabilisce specia la versione è un numero relativo a delle modifiche che cambiano sostanzialmente il software. Il secondo, questo quattro, sono delle modifiche minori, mentre il terzo, sono relative a pace di sicurezza. Quindi se io vedo un cambiamento in questo numero probabilmente non succede nulla, il codice può continuare quella ghera e molto simile a quella successiva. Quindi tolgo la ghera e ne metto un'altra che è molto simile. Questo si può fare ovviamente manualmente. Si scorre la lista dei plugin nel sito di produzione e sviluppo e si vede quali sono le differenze. Attraverso PuppyKly, questo si può fare tramite una riga di comando. Qual è l'utilità di utilizzare le rigole di comando? Qual è la cosa migliore? Perché possiamo gestire WordPress senza un interfaccia web. Cioè possiamo fare delle cose veloci e automatizzate così che non si potrebbero fare se le facessimo direttamente dall'interfaccia perché ci abbiamo dei comandi attraverso il pannello di amministrazione. Quindi i comandi sono anche svolte in maniera più veloce. Non c'è la parte gratica che appesantisce teorische il calcolo. Di fatto, perché non fosse programmatore, WPKly è un telecomando per WordPress. Immaginate di avere la televisione con un elenco di programmi. È più difficile andare a scegliere l'elenco tra l'elenco rispetto a premere il tasto 1 del telecomando. Quindi WPKly fondamentalmente è un interfaccia più semplice, più rapida. Andiamo un po' a quello che è il codice. Cerco di entrare nel codice però visto che magari qualcuno non sviluppa, sarò sempre con un modo di spiegare che sia il più facile da comprendere. Possibilmente daremo degli esempi pratici. Fondamentalmente il codice, come vedete, è un'estensione di un comando. Quindi questo è un comando che viene utilizzato per connettersi. Questo comando che ha anche questi due argomenti, fondamentalmente cosa fa? Scarica da un server di produzione la lista di che cosa, dei plugin. Quindi la lista con tutti quei codici di cui parlavo prima. E questi argomenti che ho utilizzato, usaved at that list, praticamente utilizza delle credenziali. Nel codice ho inserito le credenziali all'interno del codice. Questo non è un plugin da utilizzare per chi non è programmatore, è un plugin che ti permette di scrivere. È più intenso come qualcosa che tu vai scrivendo e che ti serve secondo le tue esigenze. Si può anche fare delle modifiche, si può prevedere che queste credenziali vengono salvate nel database e riutilizzate. Ma fondamentalmente per andare al di fuori del codice, cosa fa? È un bibliotecario che ha una serie di libri e deve capire l'edizione di quei libri. Quindi in automatico legge tutti i libri e vede che edizione hanno. Questi risultati vengono poi salvati. Quindi per chi è programmatore, o estese una classe, la classe vpq, ho inserito queste option key, option remote, option local. Fondamentalmente immaginatele come se fossero delle cassette di una cassa forte. Quindi come se avessi qui i miei dati salvati in una specifica cassette. Questo 461 rappresenterebbe questo nome, quindi la cassette della cassa forte e dove vado a salvare i dati relativi alla lista di plugin. Successivamente il comando funziona in questo modo. Questo comando utilizza altre funzioni e va praticamente a farmi vedere innanzitutto le credenziali perché qui io passo le credenziali e poi utilizza queste credenziali per crearmi un comando, questo ssh command che adesso vedremo e fare un salvataggio di questa lista. Questo salvataggio della lista praticamente poi mi permette di fare quello che è la parte finale del plugin. Andiamo avanti e vi faccio vedere un po' il comando. Questo comando che sarebbe questo qui è un comando che rappresenta, diciamo sempre in modo da spiegarlo a chi non è programmatore, scrivere il codice per aprire la cassa forte. Quindi sto chiedendo al mio computer apri la cassa forte che c'è online e dimmi quali sono gli attori che stanno facendo questa determinata scena. Chi sono i plugin e che versione hanno? Li salvo e dopo che gli salvo questo comando, lo mostro a video ma semplicemente per capire cosa è che sto facendo, li inserisco dentro la cassettina della cassa forte, gli metto lì, li salvo. Una volta che li ho salvati, quindi come vedete qui abbiamo un update option, qualcuno che è più programmatore sa cosa significa questa funzione, quindi vado a salvare questi dati all'interno di una variabile, all'interno del database, questi dati che adesso io ho salvato, li posso analizzare, posso capire quali sono queste differenze, quindi quella scena dove ci sono questi attori che stanno fermi in attesa che il regista dico parti. Cosa abbiamo qui? Abbiamo quelli in locale, quindi la ripetizione della scena e quelli in remoto. Le informazioni remote vengono acquisite dalla fonte remota, le informazioni locali vengono recuperati dall'ambiente locale. Quindi adesso che cosa devo fare? Fondamentalmente devo comparare le due scene, devo comparare le edizioni dei libri, quindi questo bibliotecario sta su due biblioteche e cerca di vedere quali sono le edizioni diverse, ci possono essere vari condizioni, ci sono plugin solo in remoto, plugin solo in locale, plugin attivi solo in remoto, plugin attivi solo in locale oppure con versioni diverse. Tutte queste informazioni mi servono per stabilire se ci sono diverse situazioni, diverse scene nella situazione locale che nella situazione remota. Fondamentalmente dopo questa comparazione, quello che faccio io è anche di crearmi dei comandi, quindi su questo vpt line inserire dei comandi che poi andrò a utilizzare questi comandi per fare degli update automatici di tutti i plugin. Quindi qui andrò a inserire un'attiva update, installa, sono tutti i comandi della vpt.glie che posso scrivere qui, copiarmi e incollare, quindi in automatico ho subito o il locale o in produzione la stessa situazione. Quindi fare la cosa in maniera manuale sarebbe molto più costoso perché ci metterei più tempo fondamentalmente. Quindi questo è un comando che fondamentalmente mi fa vedere nello schermo il testo e mi fa vedere in questo caso quali sono quelli nel mio sito in locale. Questo comando è leggermente diverso, mi fa vedere le versioni diverse, quali sono le differenze tra le versioni, montare da stabilire quali attori si stanno comportando in maniera diversa. Quindi come riassunto, diciamo, è una cosa che ci tengo e questa è la chiave per innovazione e la combinazione di diverse prospettive. Questa frase praticamente dice di guardare le cose attraverso diverse angolazioni o dall'altro tecnico direi di mettere insieme diverse tecnologie per creare qualcosa di nuovo. Questo è quello che vorrei darvi come stimolo di utilizzare tante tecnologie insieme, in questo caso è utilizzato WPC, Warpress e SSA, sono tecnologie diverse insieme e fanno qualcosa che può essere utile ed è uno stimolo anche a migliorare sempre, a fare qualcosa che sia migliore, anche meno costosa diciamo. Per il resto sono disponibili a domande e quindi che se volete qualcosa di più dettagliato qua c'è la mia email. Eccoci, abbiamo un omande. Considerate che aggionerò anche la versione che c'è su GitHub perché non è aggiornata rispetto a quella che ho sul mio computer, quindi vi aggionerò a breve. Cioè fondamentalmente sono per PHP degli array, quindi di fatto attraverso delle funzioni di PHP non faccio altro che confrontare il valore della stringa. Questo valore che confronto mi permette di avere degli array diversi e una funzione di PHP. Cioè vado a confrontare delle variabili e queste variabili se sono diverse vanno a finire in un contenitore un altro. Forse non sono stata abbastanza chiaro, quindi non ci sono abbastanza domande. Ecco, non ci sono domande se sono stato abbastanza chiaro pagare questo. Sono in locale, sono cose che mi servono nel momento dello sviluppo, non mi servono sul sito, sarebbe anche pericoloso fare una cosa del genere in produzione. Sono tutte informazioni che poi in produzione non andranno a finire, mi servono. Perché nella mia intenzione era di fare diverse versioni in modo tale che potessi andare avanti, tornare indietro, però è una cosa che ancora non ho sviluppato.