[{"content":"L\u0026rsquo;articolo potrebbe risultare lungo ma cercherò di spiegare tutti i passaggi che faccio, pubblicare un\u0026rsquo;applicazione Angular con Azure Pipeline è estremamente semplice ma voglio fare una piccola premessa.\nLa Continuous Integration è al momento il sistema più semplice e sicuro di mettere in produzione una web app, specialmente se si parla di utilizzare servizi cloud. Esistono diversi servizi di Continuous Integration (CI), io ho utilizzato Circle CI per diverso tempo, poi ho adottato la CI di github e di bitbucket, ma dal momento che quasi tutti i miei servizi sono gestiti tramite il cloud di Microsoft ho deciso di provare la loro CI.\nNell\u0026rsquo;articolo quindi porrò attenzione alla creazione di una pipeline per fare il deploy di una applicazione scritta in Angular.\nFacciamo prima un rapido ricapitolo di alcuni concetti:\nChe cos\u0026rsquo;è il Deploy Nel nostro caso, per deploy intendiamo tutte quelle operazione fatte per rendere un applicativo, che sia statico o dinamico, disponibile online e accessibile tramite browser.\nChe cos\u0026rsquo;è un Hosting Un hosting è un servizio che permette alle aziende o alle persone di rendere disponibile su internet un sito o una risorsa web.\nCome funziona il Continuous Deployment La filosofia dietro al continuous deployment è quella di rendere lo sviluppo e il deploy continuo, senza dover necessariamente avere un intervento manuale e delle fasi gestite da uno sviluppatore.\nQuesto permette di ridurre gli errori di compilazione e di deploy e permette di installare tutte le dipendenze corrette, in questo modo il nostro applicativo avrà sempre le stesse condizioni rispetto allo sviluppo in locale.\nQuesta è un immagine di esempio presa da Google\nChe cos\u0026rsquo;è Azure Azure è una piattaforma di servizi cloud che permette una miriade di possibili soluzioni per gli sviluppatori. Oltre permettere la distribuzioni di semplici applicativi web, ci sono database, sistemi di analisi, AI, IoT, Docker, Applicazioni Mobile, serverless, sistemi di archiviazione e chi più ne ha più ne metta.\nAzure App Service Nel nostro caso utilizzeremo quelli che su Azure sono chiamati App Service, ovvero un contenitore generico nel quale è possibile mettere un sito o delle pagine web.\nNon mi dilungherò su come configurare una applicazione Angular perchè ho scritto un altro articolo per questo. ♥️\nPer poter velocizzare il processo di deploy ed essere sicuri che il tutto funzioni correttamente utilizzo Angular CLI, ovvero tutte quei comandi che semplificano il lavoro di chi sviluppa utilizzando Angular. Nel 90% dei casi anche tu utilizzi Angular CLI e quindi puoi seguire tutti i passaggi che sto per fare, altrimenti dovrai usare due volte i comandi di npm.\nSetup del Deploy Andiamo su dev.azure.com se non lo hai ancora fatto, dovrai creato un account per questo servizio, che comunque sarà lo stesso di Azure.\nCreazione del progetto all\u0026rsquo;interno dell\u0026rsquo;organizzazione\nNel caso in cui non ci sono contenitori creati, come nel mio caso, andrà creato come nell\u0026rsquo;esempio.\nCreazione del progetto all\u0026rsquo;interno dell\u0026rsquo;organizzazione\nQuesto è quello che compare cliccando su new project.\nSistema per DevOps Quello che useremo noi sono solo le Pipelines del sistema di DevOps, ma esistono anche altre cose che sono utili e che potreste prendere in considerazione più avanti, le citiamo solo per spiegarle:\nBoards \u0026mdash; per tenere traccia delle attività e dell\u0026rsquo;avanzamento di un progetto Repos \u0026mdash; una gestione dei repository, un servizio come quello di github per intenderci Pipelines \u0026mdash; sono proprio le pipeline di CI e CD Test Plans \u0026mdash; una serie di strumenti per testare le applicazioni e ridurre l\u0026rsquo;insorgenza di errori Artifacts \u0026mdash; è un archivio sicuro e ad alta efficienza Quello che però interessa a noi sono le Pipelines, selezioniamole dal menu a sinistra e aggiungiamo una nuova pipeline.\nCreiamo una nuova Pipeline Le pipelines si possono realizzare tramite file yaml o tramite il tool messo a disposizione per farlo graficamente, come faremo noi.\nCreazione della pipeline\nSelezioniamo il repository che useremo per recuperare il nostro codice.\nNel mio caso che uso github, inserisco le credenziali e seleziono il repository e il branch da usare per il deploy.\nSelezione del Repository\nAdesso mi verrà chiesto se voglio utilizzare un pipeline da un template o se voglio partire da zero.\nNoi partiremo da zero 😜\nSeleziona un template per il job\nAdesso ci troviamo nella schermata della pipeline e inseriremo uno dopo l\u0026rsquo;altro le attività da fare per distribuire il progetto.\nAggiungiamone uno alla volta facendo click sul pulsante aggiungi.\nPagina vuota dei job\nSetup degli step della pipeline Adesso entriamo nel vivo e cominciamo ad inserire tutto quello che serve per distribuire l\u0026rsquo;applicazione.\n1. Installiamo Node Node è l\u0026rsquo;ambiente base che serve per compilare il tutto, lo cerchiamo e lo aggiungiamo.\nInstallazione di node\nVersione di node\nSeleziona la versione di node che hai utilizzato anche in locale per sviluppare.\n2. Installiamo npm Installiamo e configuriamo npm\nUna volta aggiungo npm alla pipeline selezioniamo il comando da lanciare.\nNel nostro caso ci basta selezionare install che recupererà il package.json e installerà tutti i pacchetti necessari.\nUpdate: ho scoperto che nel caso in cui nella cartella che verrà recuperata dalla pipeline è presente il file package-lock.json lo script npm install fallirà. Quindi preoccupatevi di non avere il file nel branch che verrà richiamato dalla pipeline.\n3. Installiamo Angular Cli Da non molto tempo è disponibile sul marketplace di azure DevOps l\u0026rsquo;elemento che permette l\u0026rsquo;uso di Angular Cli, quindi cerchiamolo e installiamolo, dopodiché lo aggiungiamo alla pipeline.\ninstallazione di Angular Cli\nUna volta aggiunto lo configuriamo.\nconfigurazione di Angular Cli\nBasterà selezionare quale comando far eseguire e spuntiamo ProdBuild se stiamo facendo il deploy in produzione.\n4. Installiamo Azure App Service Deploy L\u0026rsquo;ultimo passaggio è quello di terminare il processo di build spostando il compilato nel contenitore che abbiamo creato su azure.\nPer fare questo le pipeline ci vengono in aiuto utilizzando l\u0026rsquo; Azure APP Service Deploy.\nAggiungiamolo alla pipeline e configuriamolo.\nAzure app service deploy\nTutto quello che è evidenziato deve essere selezionato dal contenitore app che abbiamo creato su azure, questo ci aiuterà a pubblicare automaticamente il tutto.\nDobbiamo fare attenzione alla cartella di pubblicazione, io ho inserito dist/ che è la cartella creata dal comando ng build ed è la cartella che deve essere servita dalla nostra app.\nArrivati fin qui possiamo salvare, e se vogliamo, lanciare la prima build.\nSe abbiamo fatto tutto bene vedremo il risultato della build, naturalmente io non avevo fatto tutto bene la prima volta ed infatti è fallita due volte. 😂\nRisultato esecuzione pipeline\nConclusioni Spero che in questo articolo sono riuscito a far trasparire la potenzialità di quelle che sono le pipeline di Microsoft, specialmente per chi usa i servizi di Azure.\nPubblicherò anche l\u0026rsquo;esempio per le pipeline di altre tipologie di app prossimamente.\nCome sempre ti ringrazio se sei arrivato fino alla fine del post, il mio intento rimane solo quello di condividere le mie piccole esperienze sperando di essere utile a qualcuno.\nGrazie 👋\n","permalink":"https://www.michelecriscuolo.com/deploy-angular-con-azure-pipeline/","summary":"\u003cp\u003eL\u0026rsquo;articolo potrebbe risultare lungo ma cercherò di spiegare tutti i passaggi che faccio, pubblicare un\u0026rsquo;applicazione \u003cstrong\u003eAngular con Azure Pipeline\u003c/strong\u003e è estremamente semplice ma voglio fare una piccola premessa.\u003c/p\u003e\n\u003cp\u003eLa \u003cstrong\u003eContinuous Integration\u003c/strong\u003e è al momento il sistema più semplice e sicuro di mettere in produzione una web app, specialmente se si parla di utilizzare servizi cloud. Esistono diversi servizi di Continuous Integration (CI), io ho utilizzato \u003cem\u003eCircle CI\u003c/em\u003e per diverso tempo, poi ho adottato la CI di \u003cem\u003egithub\u003c/em\u003e e di \u003cem\u003ebitbucket\u003c/em\u003e, ma dal momento che quasi tutti i miei servizi sono gestiti tramite il cloud di Microsoft ho deciso di provare la loro CI.\u003c/p\u003e","title":"Deploy Angular con Azure Pipeline"},{"content":"Azure è il servizio cloud che più si trova in sintonia con il mio modo di fare, è piuttosto flessibile, completo nelle sue risorse e facilmente utilizzabile senza necessariamente essere un system administrator.\nNon voglio toccare tutti gli aspetti di Azure, mi concentrerò solo sul come fare il deploy di un\u0026rsquo;applicazione Angular su Azure.\nAzure App Service Andiamo nel nostro pannello Azure e clicchiamo su nuova risorsa.\nAzure App Web\nSelezioniamo App Web come tipologia di risorsa e configuriamo le voci che ho selezionato nell\u0026rsquo;immagine qui sotto:\nAzure app service\nTutti i campi sono obbligatori ma quelli che ho evidenziato sono i più importanti.\nLa sottoscrizione è quella connessa alle fatture e ai pagamenti, da quella si può mutuare il gruppo di risorse connesse, nel caso in cui esistano già delle app o dei servizi attivi si possono creare adesso, in questo punto.\nPoi abbiamo il nome dell\u0026rsquo;app il tipo di pubblicazione se basata su codice puro o se su una immagine docker.\nUn attimo di attenzione è da porre sullo Stack di runtime, selezionate la miglior versione di ASP.NET presente nell\u0026rsquo;elenco perché è così che sarà eseguita la nostra app Angular.\nRiguarda tutto perché non potrai più fare dei cambiamenti, specialmente nel nome dell\u0026rsquo;app e quando ti senti pronto crea la risorsa cliccando su rivedi e crea.\nAdesso troverai la nuova app creata nell\u0026rsquo;elenco di tutte le risorse.\nl\u0026rsquo;app è immediatamente accessibile e azure ti creerà un url che di base usa questo schema http://nomeapp.azurewebsites.net\nSchermata app vuota\nFinito! Già finito?\nEh si, come puoi vedere pubblicare un app è più facile del previsto, adesso dovrai riempire questo contenitore che è stato creato ma di questo semmai parleremo un\u0026rsquo;altra volta 😁\nGrazie per aver letto l\u0026rsquo;articolo, se hai spunti o suggerimenti o se ti va di entrare in contatto non esitare a scrivermi.\n","permalink":"https://www.michelecriscuolo.com/deploy-di-una-applicazione-angular-su-azure/","summary":"\u003cp\u003eAzure è il servizio \u003cstrong\u003ecloud\u003c/strong\u003e che più si trova in sintonia con il mio modo di fare, è piuttosto flessibile, completo nelle sue risorse e facilmente utilizzabile senza necessariamente essere un \u003cem\u003esystem administrator\u003c/em\u003e.\u003c/p\u003e\n\u003cp\u003eNon voglio toccare tutti gli aspetti di \u003cstrong\u003eAzure\u003c/strong\u003e, mi concentrerò solo sul come fare il \u003cstrong\u003edeploy\u003c/strong\u003e di un\u0026rsquo;applicazione \u003cstrong\u003eAngular su Azure\u003c/strong\u003e.\u003c/p\u003e\n\u003ch2 id=\"azure-app-service\"\u003eAzure App Service\u003c/h2\u003e\n\u003cp\u003eAndiamo nel nostro pannello Azure e clicchiamo su nuova risorsa.\u003c/p\u003e","title":"Deploy di una applicazione Angular su Azure"},{"content":"Let\u0026rsquo;encrypt è sicuramente il metodo più facile e conosciuto per ottenere, gratuitamente, un certificato SSL.\nNel mio caso sto usando una macchina con su installato Ubuntu 18:04 e Nginx, dove ho necessità di installare un certificato per un unico dominio, quindi la guida è per questi due elementi.\nPer farlo utilizzeremo il tool ufficiale di let\u0026rsquo;s encrypt, che si chiama certbot.\nCi tengo a precisare che la guida di certbot è fatta molto molto bene ed è possibile consultare tantissime configurazioni diverse di server sul quale installarlo.\nInstallazione di certbot Per installare certbot devi eseguire i comandi di seguito.\nsudo apt-get update sudo apt-get install software-properties-common sudo add-apt-repository ppa:certbot/certbot sudo apt-get update sudo apt-get install certbot python-certbot-nginx Nota che oltre a certbot ho installato anche un plugin per Nginx.\nRichiedere il certificato In pratica abbiamo già fatto perché adesso ci basterà solo chiedere il certificato. Ti ricordo che questa guida è solo per i domini singoli, se hai bisogno di generare un certificato wildcard, ovvero con più domini, ti consiglio di seguire questa guida qui, fatta sempre da me.\nAdesso lanciamo il comando:\nsudo certbot -d www.nomesito.com --nginx Fatto!\nCosì facendo stiamo dicendo a certbot che vogliamo un certificato per il sito www.nomesito.com e che deve configurare automaticamente il nostro web server nginx\nIn alternativa, se vogliamo configurare manualmente il web server, possiamo richiedere solo il certificato in questo modo:\nsudo certbot -d www.nomesito.com Adesso non abbiamo null\u0026rsquo;altro da fare, certbot utilizza automaticamente un cron job che si occuperà di rinnovare il certificato una volta che scada.\nRicorda che il certificato let\u0026rsquo;s encrypt ha una durata di 90 giorni.\nTestare il rinnovo automatico Se però non ti fidi 😀 e vuoi testare manualmente il rinnovo dei certificati, ti basterà lanciare questo comando\nsudo certbot renew --dry-run Nota: Il comando di rinnovo di certbot si trova in una di questi path\n/etc/crontab/ /etc/cron.*/* systemctl list-timers Finito Abbiamo finito, spero di esserti stato utile, ricorda che ti basta andare al sito con https davanti per verificare l\u0026rsquo;installazione del certificato.\nSpero di rivederti presto qui.\n","permalink":"https://www.michelecriscuolo.com/come-installare-un-certificato-ssl-con-lets-encrypt-su-un-dominio/","summary":"\u003cp\u003e\u003cem\u003eLet\u0026rsquo;encrypt\u003c/em\u003e è sicuramente il metodo più facile e conosciuto per ottenere, gratuitamente, un certificato \u003cstrong\u003eSSL\u003c/strong\u003e.\u003c/p\u003e\n\u003cp\u003eNel mio caso sto usando una macchina con su installato \u003cem\u003eUbuntu 18:04\u003c/em\u003e e \u003cem\u003eNginx\u003c/em\u003e, dove ho necessità di installare un certificato per \u003cstrong\u003eun unico dominio\u003c/strong\u003e, quindi la guida è per questi due elementi.\u003c/p\u003e\n\u003cp\u003ePer farlo utilizzeremo il tool ufficiale di \u003cem\u003elet\u0026rsquo;s encrypt\u003c/em\u003e, che si chiama \u003ccode\u003ecertbot\u003c/code\u003e.\u003cbr\u003e\nCi tengo a precisare che la \u003ca href=\"https://certbot.eff.org/lets-encrypt/ubuntubionic-nginx\"\u003eguida di certbot\u003c/a\u003e è fatta molto molto bene ed è possibile consultare tantissime configurazioni diverse di server sul quale installarlo.\u003c/p\u003e","title":"Come installare un certificato SSL con Let's Encrypt su un dominio"},{"content":"Se hai necessità di un certificato SSL per il tuo sito, sicuramente Let\u0026rsquo;s Encrypt è un modo piuttosto rapido e gratuito per ottenerlo.\nPer un lavoro che ho svolto ultimamente, il cliente voleva che il suo sito fosse accessibile tramite due indirizzi, ovvero www.nomesito.com e nomesito.com\nSe l\u0026rsquo;indirizzo del sito fosse stato uno solo la configurazione sarebbe stata semplice ed intuitiva. La puoi vedere nell\u0026rsquo;articolo che avevo già fatto qui.\nNel caso specifico dato che non sono un amministratore di rete volevo agire rapidamente e in modo chiaro e semplice.\nIl sito è costituito dal backend sviluppato con Laravel e da un frontend sviluppato con VueJs, il tutto servito da Nginx su un\u0026rsquo;istanza Ubuntu su AWS.\nPer fare questo ho utilizzato certbot quello che è il tool ufficiale di Let\u0026rsquo;s Encrypt. Ti ricordo che i passaggi che ti mostrerò di seguito non servono se non hai bisogno di un certificato wildcard.\nInstallazione di certbot Per installare certbot devi eseguire i comandi di seguito, parte di questi si possono vedere anche dalla guida di certbot.\nNota che le istruzioni che ti ho messo nel link fanno riferimento al caso specifico di Ubuntu 18.04 con Nginx.\nsudo apt-get update sudo apt-get install software-properties-common sudo add-apt-repository ppa:certbot/certbot sudo apt-get update sudo apt-get install python-certbot-nginx Installazione di pip Pip è un package manager per pyton, ci servirà per installare l\u0026rsquo;estensione di certbot che ci permetterà di configurare Route 53 su AWS.\nsudo apt-get update \u0026amp;\u0026amp; sudo apt-get -y upgrade sudo apt-get install python-pip Il primo comando, ovvero quello di upgrade non è necessario se sapete quello che state facendo.\nInstallazione del plugin Route 53 per certbot Adesso che installeremo il plugin di Route 53 per certbot l\u0026rsquo;unica attenzione che dobbiamo avere per evitare problemi e quella di assicurarci che il plugin abbia la stessa versione di certbot. Per farlo ti basterà lanciare il comando certbot --version.\nNel mio caso era la 1.2.0 ma se installi entrambi nello stesso momento sarà molto probabile avere la stessa versione.\npip install certbot_dns_route53==1.2.0 Configurare un utente per AWS Adesso, per fare in modo che il nostro plugin certbot_dns_route53 funzioni, è necessario che abbia l\u0026rsquo;accesso al servizio Ruote 53 di AWS.\nPer farlo nel modo migliore e con maggior sicurezza possibile, andremo a creare un utente su AWS e gli assegneremo dei permessi specifici.\nSchermata di gestione utenti e gruppi su AWS\nPenso che non sia complicato creare un utente su AWS, quello che però bisogna fare attenzione è creare un utente con Programmatic access (not console). In poche parole che non abbia possibilità di accedere alla console. Una volta creato, per comodità lo aggiungeremo ad un gruppo, il quale ci aiuterà a gestire al meglio i DNS nel caso in cui, in futuro, i nostri siti o domini cresceranno.\nQuesto utente che andremo a creare avrà bisogno di permessi specifici per far in modo che il plugin per certbot modifichi i records CNAME necessari. I permessi si posso aggiungere o da una lista enorme di elementi oppure tramite un json nella schermata apposita. Noi useremo quest\u0026rsquo;ultimo passaggio, ti basterà copiare e incollare il json di seguito.\n{ \u0026#34;Version\u0026#34;: \u0026#34;2012-10-17\u0026#34;, \u0026#34;Statement\u0026#34;: [ { \u0026#34;Effect\u0026#34;: \u0026#34;Allow\u0026#34;, \u0026#34;Action\u0026#34;: [ \u0026#34;route53:ListHostedZones\u0026#34;, \u0026#34;route53:GetChange\u0026#34; ], \u0026#34;Resource\u0026#34;: [ \u0026#34;*\u0026#34; ] }, { \u0026#34;Effect\u0026#34; : \u0026#34;Allow\u0026#34;, \u0026#34;Action\u0026#34; : [ \u0026#34;route53:ChangeResourceRecordSets\u0026#34; ], \u0026#34;Resource\u0026#34; : [ \u0026#34;arn:aws:route53:::hostedzone/YOURHOSTEDZONEID\u0026#34; ] } ] } L\u0026rsquo;unico cambiamento da fare è quello di andare a recupera il vostro l\u0026rsquo;ID della zona dei DNS su Route 53 e sostituirlo dove ho riportato YOURHOSTEDZONEID.\nEsempio di dove reperire lo zoneID in Route53\nRicordati che una volta creato l\u0026rsquo;utente devi scaricare e salvare in un luogo sicuro (meglio se con un password manager) le credenziali d\u0026rsquo;accesso. Ovvero l\u0026rsquo;access key e la secret key.\nConfigurazione delle credenziali AWS Adesso abbiamo bisogno di mettere le credenziali da qualche parte sul server in modo che il plugin possa usarle, possibilmente nella cartella home, ma è una tua scelta.\nCreiamo una cartella .aws e dentro creiamo il file credentials che sarà un semplice file di testo, con al suo interno le credenziali dell\u0026rsquo;utente AWS creato.\n[default] aws_access_key_id=XXXXXX aws_secret_access_key=XXXX/XXXXX Ricordati di sostituire le X con i dati corretti.\nLanciamo Certbot A questo punto, ho creato una cartella letsencrypt sempre nella home e al suo interno le cartelle log, config, work che mi aiuteranno nella gestione del tool certbot.\nSpostiamoci dentro e creiamo il nostro primo certificato in questo modo:\ncertbot certonly -d nomesito.com -d *.nomesito.com --dns-route53 --logs-dir /home/username/letsencrypt/log/ --config-dir /home/username/letsencrypt/config/ --work-dir /home/username/letsencrypt/work/ -m email@nomesito.com --agree-tos --non-interactive --server https://acme-v02.api.letsencrypt.org/directory Piccola spiegazione sui comandi usati certonly: Questo serve a dire a certbot di generare solo il certificato e di salvarcelo da qualche parte, senza intervenire successivamente sull\u0026rsquo;installazione dello stesso nel nostro webserver. Nel caso non stiate generando certificati wildcard potreste anche non usarlo. -d: Questo serve per specificare per quali domini si sta generando il certificato, puoi inserirne più di uno ma ricordati di inserire sempre prima tutti i domini e solo per ultimo il dominio per cui stai generando il certificato wildcard. --dns-route-53: Questo indicherà al plugin che vogliamo che il certificato venga validato. La convalida del certificato passa tramite i DNS, è l\u0026rsquo;unico modo per validare un certificato wildcard. --logs-dir, --work-dir, --config-dir: servono ad indicare le cartelle specifiche che ci aiuteranno anche nell\u0026rsquo;eseguire certbot senza il comando sud. -m: indica l\u0026rsquo;email. --agree-tos: accettiamo i termini e le condizioni di certbot automaticamente. --non-interactive: esegue tutti i passaggi non critici automaticamente, senza interrompersi per chiederci informazioni. --server: punta manualmente al server che abiliterà i nostri certificati wildcard. Il server al quale punta di default certbot non supporta la generazione di certificati wildcard, quindi ci servirà inserirlo manualmente. Una volta che avremo lanciato il comando e tutto sarà andato per il meglio, i files del certificato saranno salvati nella cartella che abbiamo usato durante la configurazione, nel nostro caso era:\n/home/username/letsencrypt/config/live/nomesito.com/\nQui troveremo due files, uno dal nome fullchain.pem e un altro dal nome privkey.pem.\nAggiungiamo i certificati alla configurazione di Nginx Adesso che abbiamo creato i files, sarà necessario aggiungerli alla configurazione del nostro webserver. Nel caso dell\u0026rsquo;esempio sarà Nginx.\nApriamo il file di configurazione di Nginx che farà riferimento al nostro sito. In questo file troveremo del testo racchiuso in un blocco server { }, con diversi settaggi tipo listen and location.\nDentro al blocco server inseriamo queste linee di codice:\nssl_certificate /home/username/letsencrypt/config/live/nomesito.com/fullchain.pem; ssl_certificate_key /home/username/letsencrypt/config/live/nomesito.com/privkey.pem; Non dimenticarti di sostituire il blocco username con la username dell\u0026rsquo;utente che hai sul server e il nome della cartella nomesito.com nel quale sono stati salvati i certificati da certbot.\nUna volta aggiunto tutto al file di configurazione di nginx, salvalo e esci.\nAdesso ci tocca riavviare il server, ma prima di farlo ti consiglio di lanciare il comando per fare il test del file di configurazione, per evitare che qualcosa scritta male tenga giù il server finchè non risolvi il problema.\nnginx -c /etc/nginx/nginx.conf -t Questo comando dovrebbe essere sufficiente.\nSe in risposta ricevete un OK! Allora possiamo riavviare il server.\nsudo service nginx reload Una volta riavviato il server ci basterà andare sul sito per verificare che sia tutto ok. Naturalmente nella sua versione https.\nRinnovare automaticamente i certificati Adesso che tutto è configurato e funzionante quello che ci serve è fare in modo che, alla loro scadenza, i certificati si rinnovino automaticamente, anche perché i certificarti di Let\u0026rsquo;s Encrypt durano soltanto 90 giorni.\nPer fare questo, ci arriva in aiuto certbot con una sua utility.\nTramite questo comando:\ncertbot renew --dns-route53 --logs-dir /home/username/letsencrypt/log/ --config-dir /home/username/letsencrypt/config/ --work-dir /home/username/letsencrypt/work/ --non-interactive --server https://acme-v02.api.letsencrypt.org/directory --post-hook \u0026#34;sudo service nginx reload\u0026#34; Questo comando è molto simile al primo che abbiamo lanciato e proverà ad aggiornare tutti i certificati che abbiamo generato. Inoltre con il comando\n--post-hook facciamo in modo che successivamente alla corretta generazione del certificato venga lanciato un comando.\nComando che nel nostro caso sarà il riavvio del server nginx.\nAdesso non ci resta che configurare un cronjob che ogni giorno andrà a lanciare questo comando per vedere se i certificati sono ancora validi ed eventualmente aggiornarli. Per fare questo potete vedere l\u0026rsquo;articolo su come configurare un cron job.\nAlla fine Alla fine non mi rimane che dire grazie, se sei arrivato fin qui vuol dire che hai trovato interessante quello che ho scritto.\nSe hai consigli o se qualcosa non ha funzionato non aspetto altro che saperlo.\n","permalink":"https://www.michelecriscuolo.com/come-configurare-un-certificato-wildcard-con-lets-encrypt-su-aws-route-53/","summary":"\u003cp\u003eSe hai necessità di un certificato \u003cstrong\u003eSSL\u003c/strong\u003e per il tuo sito, sicuramente \u003cem\u003eLet\u0026rsquo;s Encrypt\u003c/em\u003e è un modo piuttosto rapido e gratuito per ottenerlo.\u003c/p\u003e\n\u003cp\u003ePer un lavoro che ho svolto ultimamente, il cliente voleva che il suo sito fosse accessibile tramite due indirizzi, ovvero \u003ccode\u003ewww.nomesito.com\u003c/code\u003e e \u003ccode\u003enomesito.com\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eSe l\u0026rsquo;indirizzo del sito fosse stato uno solo la configurazione sarebbe stata semplice ed intuitiva. La puoi vedere nell\u0026rsquo;articolo che avevo già fatto qui.\u003c/p\u003e","title":"Come configurare un certificato wildcard con Let's Encrypt su AWS Route 53"},{"content":"Creare un cron job è un operazione utile in tantissimi casi.\nUn cron job non è nient\u0026rsquo;altro che un\u0026rsquo;azione che verrà eseguita in un determinato momento oppure ogni tot di tempo, da un programma che è costantemente in esecuzione nel sistema operativo e che si chiama cron.\nLa guida che ti presento è scritta per Ubuntu 18:04 ma ogni sistema Unix/Linux e anche MacOS ha il suo bel cron che gira e che ci permette di usare.\nPartiamo con il dire che utilizzeremo un file dal nome crontab.\nQuesto file ci permetterà di configurare in modo molto più semplice il nostro cron job, rispetto ad utilizzare direttamente la struttura di cron.\nTi ricordo che in qualunque momento puoi vedere il manuale eseguendo il comando man 5 crontab oppure consultando la sezione wiki apposita di Ubuntu.\nIl sistema ha un suo file cron che è presente in /etc/crontab ma ogni utente può creare il suo, per questo motivo, se hai necessità di eseguire comandi in root, che quindi necessitano dei privilegi di amministratore, sarebbe più corretto che facessi il login come amministratore, prima di creare il file crontab.\nPer modificare un file crontab ti basterà scrivere\ncrontab -e Una volta scritto il tuo comando nel crontab, salva il file e controlla che sia stato inserito correttamente digitando:\ncrontab -l In questo modo comparirà una lista di job per l\u0026rsquo;utente corrente.\nSintassi del comando Il file crontab deve rispettare una sintassi precisa, la prima parte riguarda quando il comando deve essere eseguito e segue una formattazione come questa:\nminuti, da 0 a 59 (m); ore, da 0 a 23 (h); giorno del mese, da 1 a 31 (dom); mese, da 1 a 12 (mon); giorno della settimana, da 0 (Domenica) a 6 (Sabato) (dow). Quindi per eseguire un aggiornamento dei pacchetti del sistema ogni giorno alle 2:10 troveremo una riga, nel nostro crontab simile a questa:\n10 2 * * * /usr/bin/apt-get update L\u0026rsquo;asterisco ci permette di non specificare nessun valore\nCaso specifico Nel mio caso specifico mi occorreva aggiornare i certificati SSL generati in wildcard, e per fare questo dovevo inserire un comando specifico. Quindi ho scritto il comando completo per rigenerare i certificati (che era molto lungo) in un file sotto la cartella home dell\u0026rsquo;utente, era una cosa più o meno così:\ncertbot renew --dns-route53 --logs-dir /home/username/letsencrypt/log/ --config-dir /home/username/letsencrypt/config/ --work-dir /home/username/letsencrypt/work/ --non-interactive --server https://acme-v02.api.letsencrypt.org/directory --post-hook \u0026#34;sudo service nginx reload\u0026#34; Successivamente ho aperto il file crontab e inserito\n0 0 * * * ./ ~/username/filedaeseguire.sh\nIn questo modo ogni giorno a mezzanotte il mio job proverà ad aggiornare il mio certificato SSL\nAltri esempi d\u0026rsquo;uso dei tempi StringaDescrizione12 05 * * *tutte le mattine, più o meno alle 512 05 15 * *tutti i 15 del mese, alla stessa ora12 05 31 * *7 volte l'anno, alla stessa ora0 12 * * 1ogni lunedì, a mezzogiorno1 0 * * *ogni giorno, più o meno a mezzanotte01 05 * * 2,4ogni Martedì e Giovedì, alle 5 del mattino circa Inoltre ci sono altri parametri speciale, ad esempio:\n*/5 9-17 * * mon,tue,wed,thu,fri Questo viene eseguito ogni 5 minuti dalle 9 alle 17 dal Lunedì al Venerdì.\nPer altri comandi ti consiglio di vedere la guida che ti ho messo all\u0026rsquo;inizio dell\u0026rsquo;articolo\nGrazie per aver letto l\u0026rsquo;articolo, le informazioni che ho messo sono tutt\u0026rsquo;altro che difficili da reperire e sono anche un po\u0026rsquo; ridondanti, ma ho voluto comunque scriverlo per farmi un appunto di quello che avevo imparato. 👋\n","permalink":"https://www.michelecriscuolo.com/come-creare-un-cron-job/","summary":"\u003cp\u003eCreare un \u003cstrong\u003ecron job\u003c/strong\u003e è un operazione utile in tantissimi casi.\u003cbr\u003e\nUn \u003cstrong\u003ecron job\u003c/strong\u003e non è nient\u0026rsquo;altro che un\u0026rsquo;azione che verrà eseguita in un determinato momento oppure ogni tot di tempo, da un programma che è costantemente in esecuzione nel sistema operativo e che si chiama \u003cstrong\u003ecron\u003c/strong\u003e.\u003c/p\u003e\n\u003cp\u003eLa guida che ti presento è scritta per \u003cem\u003eUbuntu\u003c/em\u003e 18:04 ma ogni sistema \u003cem\u003eUnix/Linux\u003c/em\u003e e anche \u003cem\u003eMacOS\u003c/em\u003e ha il suo bel \u003cem\u003ecron\u003c/em\u003e che gira e che ci permette di usare.\u003c/p\u003e","title":"Come creare un cron job"},{"content":"Mi è capitato che dalle ultime versioni di Mac OS, Mamp non riuscisse più ad avviare il server Apache, mentre riusciva tranquillamente ad avviare il server MySql.\nDopo vari tentativi, pensando che fosse cambiato qualcosa nella configurazione di Apache, ho capito che il web server andava in conflitto con la versione di Apache contenuta di default nel sistema Mac Os.\nPer farlo tornare a funzionare ho dovuto stoppare in modo permanente quello presente in Mac Os tramite questo comando\nsudo apachectl stop Così facendo tutto è tornato a funzionare correttamente.\n","permalink":"https://www.michelecriscuolo.com/perche-mamp-non-avvia-apache-su-mac-os/","summary":"\u003cp\u003eMi è capitato che dalle ultime versioni di Mac OS, Mamp non riuscisse più ad avviare il server Apache, mentre riusciva tranquillamente ad avviare il server MySql.\u003c/p\u003e\n\u003cp\u003eDopo vari tentativi, pensando che fosse cambiato qualcosa nella configurazione di Apache, ho capito che il web server andava in conflitto con la versione di Apache contenuta di default nel sistema Mac Os.\u003c/p\u003e","title":"Perchè Mamp non avvia apache su Mac Os"},{"content":"Chi è l\u0026rsquo;autore di Il vicolo cieco? L\u0026rsquo;autore del libro è Seth Godin.\nNon dovrei neanche spiegarti chi è 😅\nSeth ha ispirato tantissime persone e scritto diversi best seller, se ti interessi di marketing o se fai un lavoro che ha che fare con il marketing, hai sicuramente uno dei suoi libri sulla tua scrivania.\nHa uno dei blog più seguiti al mondo.\nLasciati ispirare!!!\nDi cosa parla Il il vicolo cieco? Il vicolo cieco estremizza quello che accade durante la nostra vita, portandolo al paragone di quello che accade in una attività.\nCi dice che tutto quello che facciamo ad un certo punto incontra delle difficoltà e allora a quel punto possono succedere due cose.\nO si entra in un fossato e dobbiamo stringere i denti oppure ci troviamo davanti ad un vicolo cieco e allora tanto vale lasciar perdere.\nAl contrario di altri personaggi che si definiscono Guru motivazionali, Seth ci dice che i migliori non sono quelli che tengono duro a tutti i costi, ma bensì quelli che sono capaci di capire quando è giusto mollare, prima che le cose diventino troppo impegnative da rendere problematico anche un ritiro. La bravura deve essere quella di capire una determinata strada dove ci sta portando, se un fossato è davvero solo un fossato o un percorso insormontabile.\nPerchè devi leggere Il vicolo cieco? Personalmente mi sono trovato tante volte a chiedermi se una strada che stavo percorrendo avesse dei vantaggi dalle difficoltà che mi metteva davanti. Alcune volte ho avuto ragione a resistere altre volte no.\nIl libro non mi ha aperto la mente, ma mi ha dato conferma di cose che avevo intuito ma non realizzato completamente, questo ha fatto si che proprio recentemente, abbandonassi un fossato dal quale sono sicuro non avrei ricavato nulla di buono.\nSe anche tu ti stai chiedendo o ti chiedi spesso se le scelte che fai sono giuste, uno sguardo a questo libro devi darlo.\nSe non altro perchè non è un vero libro, è una chiacchiera informale, sembra quasi che mi sia trovato in un caffè e casualmente abbia cominciato a parlare con un tizio che solo più tardi ho riconosciuto essere Seth Godin.\nCome sempre ti lascio il link amazon per il libro ☺️\n","permalink":"https://www.michelecriscuolo.com/recensione-il-vicolo-cieco/","summary":"\u003ch2 id=\"chi-è-lautore-di-il-vicolo-cieco\"\u003e\u003cstrong\u003eChi è\u003c/strong\u003e l\u0026rsquo;\u003cstrong\u003eautore di Il vicolo cieco?\u003c/strong\u003e\u003c/h2\u003e\n\u003cp\u003eL\u0026rsquo;autore del libro è \u003cstrong\u003eSeth Godin\u003c/strong\u003e.\u003cbr\u003e\nNon dovrei neanche spiegarti chi è 😅\u003cbr\u003e\nSeth ha ispirato tantissime persone e scritto diversi best seller, se ti interessi di marketing o se fai un lavoro che ha che fare con il marketing, hai sicuramente uno dei suoi libri sulla tua scrivania.\u003cbr\u003e\nHa uno dei blog più seguiti al mondo.\u003cbr\u003e\n\u003ca href=\"https://www.sethgodin.com/\"\u003eLasciati ispirare!!!\u003c/a\u003e\u003c/p\u003e","title":"Recensione Il vicolo cieco"},{"content":"Chi è l\u0026rsquo;autore di Il potere delle abitudini? L\u0026rsquo;autore del libro è Charles Duhigg.\nLaureato ad Harvard è diventato giornalista per il \u0026ldquo;new york times\u0026rdquo;.\nE\u0026rsquo; stato inviato di guerra in Iraq. Ha all\u0026rsquo;attivo molte pubblicazioni, alcune delle quali hanno avuto premi con un riconoscimento importante.\nE\u0026rsquo; diventato ancora più famoso con la pubblicazione di questo libro che ha all\u0026rsquo;attivo oltre 1 milione di copie vendute.\nDi cosa parla Il potere delle abitudini? Il libro, suddiviso in 3 parti racconta:\nChe cos\u0026rsquo;è un abitudine, come si forma e come è possibile riconoscerla; Quali sono le abitudini che sono state formate o adottate dalle organizzazioni di successo; Quali sono le abitudini riconoscibili all\u0026rsquo;interno della società. In modo più descrittivo:\nla prima parte si sofferma su come la scienza ha individuato le abitudini, come le studia e come cerca di sostituirle, specialmente se queste sono riconosciute come cattive abitudini.\nLa seconda parte, racconta diversi episodi, prendendo spunto da come alcune società di successo, hanno utilizzato le abitudini per migliorare se stesse, sia dal punto di vista delle abitudini dei dipendenti che da quello dei clienti.\nLa terza, ed ultima parte, affronta è più delicata, ovvero, le abitudini all\u0026rsquo;interno della società.\nRaccontando come è stato possibile combattere la discriminazione razziale o come riconoscere alcune abitudini anche quando non si è pienamente coscienti, come nel caso di un malato di alzheimer o di un sonnambulo.\nIl libro si conclude con un piccolissimo capitolo aggiuntivo, dove l\u0026rsquo;autore racconta della sua esperienza personale. Racconta che scrivendo il libro ha dovuto applicare alla sua vita le regole di cui ci parla, permettendogli di cambiare una cattiva, se pur piccola, abitudine.\nPerchè devi leggere Il potere delle abitudini? Spesso mi sono trovato a parlare con amici che mi raccontavano che facevano fatica a cambiare una loro abitudine e io stesso do la colpa al tempo, al lavoro, o a determinati momenti della vita che non mi permettono di adottare uno stile di vita migliore, come iniziare una dieta.\nTempo fa ho già affrontato questo argomento leggendo un altro libro, che ho già recensito qui.\nQuello che mi è piaciuto di più del libro, è il modo in cui è stato scritto, molto informale e sotto forma di piccoli racconti che si intrecciano più volte per non rendere l\u0026rsquo;argomento pesante.\nPiù che un saggio sembra un romanzo.\nNon ti nascondo che ho letto le 400 e passa pagine del libro in meno di 4 giorni.\nRispetto all\u0026rsquo;altro libro che ho letto, questo cerca di renderci coscienziosi di cosa sono le abitudini e come possiamo riconoscerle, dando una piccola ricetta su come è possibile affrontarle e cambiarle.\nMentre l\u0026rsquo;altro libro è più simile ad un manuale, più ricco di suggerimenti su come è possibile attuare un cambiamento. Anche se non parla di abitudine in realtà i due libri affrontano i diversi argomenti nello stesso modo.\nIn definitiva il libro mi ha arricchito su un argomento che per un freelance come me, che per giunta lavora da casa, è alle volte delicato.\nIn questo modo ho potuto provare ad eliminare quelle cattive abitudini che diminuiscono la produttività giornaliera.\nTi ringrazio come sempre di aver letto le mie oneste righe e ti chiedo di consigliarmi qualche libro se te la senti, o di farmi qualunque domanda.\nSono sempre alla ricerca di libri da leggere, non mi stanco mai.\nIn oltre se vuoi regalarmi un caffè comprando il libro tramite il mio link di amazon, ne sarei felice. 😜\n","permalink":"https://www.michelecriscuolo.com/recensione-il-potere-delle-abitudini/","summary":"\u003ch2 id=\"chi-è-lautore-di-il-potere-delle-abitudini\"\u003e\u003cstrong\u003eChi è\u003c/strong\u003e l\u0026rsquo;\u003cstrong\u003eautore di Il potere delle abitudini?\u003c/strong\u003e\u003c/h2\u003e\n\u003cp\u003eL\u0026rsquo;autore del libro è Charles Duhigg.\u003cbr\u003e\nLaureato ad Harvard è diventato giornalista per il \u0026ldquo;new york times\u0026rdquo;.\u003cbr\u003e\nE\u0026rsquo; stato inviato di guerra in Iraq. Ha all\u0026rsquo;attivo molte pubblicazioni, alcune delle quali hanno avuto premi con un riconoscimento importante.\u003cbr\u003e\nE\u0026rsquo; diventato ancora più famoso con la pubblicazione di questo libro che ha all\u0026rsquo;attivo oltre 1 milione di copie vendute.\u003c/p\u003e","title":"Recensione Il potere delle abitudini"},{"content":"Chi è l’autore di \u0026ldquo;da Brand a Friend\u0026rdquo;? L’autore del libro è Robin Good, per chi non lo conoscesse è lo pseudonimo di Luigi Canali De Rossi. Italiano di nascita, laureato negli Stati Uniti, nella scena italiana è un personaggio davvero famoso, specialmente se si parla di personal branding.\nAll\u0026rsquo;epoca che studiavo all\u0026rsquo;università, sono cresciuto con le parole di Robin Good, era una sorta di Guru per me, e ancora oggi mi rendo conto di quanto sia lungimirante. Diventato famoso per essere stato il primo a fatturare più di 1 milione di dollari con Google Adwords.\nOggi continua ad essere un Guru della rete, e questo libro lo rappresenta in tutto se stesso, ha diverse attività e promuove le sue idee anche attraverso una business school.\nDi cosa parla da Brand a Friend? Nell\u0026rsquo;epoca attuale gli strumenti social digitali la stanno facendo da padrona.\nAlle volte sono usati bene e alle volte molto, molto male.\nIl libro si focalizza su come è giusto comunicare in rete, sia dal punto di vista del personal branding, ma anche dal punto di vista di una piccola azienda. Non si focalizza molto sulle grosse aziende, perché le dinamiche di comunicazione di quest\u0026rsquo;ultime sono molto diverse e molto più strutturate.\nIn particolare il libro si divide in piccoli capitoli che cercano di spiegare ogni aspetto della presenza online di un individuo/azienda.\nSi parte parlando di nicchie, ovvero quelle persone, che hanno un esigenza specifica e che di solito essendo un numero non enorme possono essere più facilmente raggiunte. Queste sono un ottimo punto di partenza per un prodotto, specialmente per capire se effettivamente il mercato ha l\u0026rsquo;esigenza che si vuole proporre.\nPoi si passa a parlare di credibilità online, cosa a mio avviso molto sottovalutata dai creatori di contenuti.\nSiamo davvero pieni di contenuti e poche persone condividono valore online, tanto da potersi creare una reputazione valida e solida.\nTutto ruota intorno alla condivisione, più siamo capaci di condividere materiale valido e interessante, ed in più lo facciamo in modo spassionato, proprio per diffondere la cultura di quello che ci appassiona e più potremmo inspirare fiducia nelle persone con le quali veniamo in contatto.\nCostruiremo così una buona base solida di persone che hanno fiducia in noi. Non dobbiamo avere paura di esporci e non dobbiamo pensare come prima cosa al profitto, quando decidiamo di creare un nuovo servizio online. Se siamo spinti da buone intenzioni è molto più probabile che qualcuno ci segua, specialmente la nicchia che avevamo in precedenza individuato.\nPoi ci spiega l\u0026rsquo;importanza di creare un seguito di FAN.\nI Fan sono le persone più appassionate e diventeranno ambasciatori del nostro pensiero e dei nostri prodotti senza che glielo chiediamo.\nSono persone che hanno capito il valore delle nostre condivisione e decidono di volerle a loro volta condividere, senza compenso, ma semplicemente perché il mondo diventi un posto migliore.\nInfine parla del modo giusto di ascoltare, eh si!\nPerché è giusto comunicare, ma ascoltare è mille volte più importante di parlare e scrivere.\nLe persone migliori sono quelle che sanno come favorire una discussione, come far sorgere domande nella propria community, sanno far nascere qualcosa d\u0026rsquo;interessante e di confronto anche quando non sono loro al centro della discussione.\nIl libro conclude che, nel momento in cui si padroneggiano questi concetti, e che si entri in confidenza con alcuni tools, è possibile creare e sviluppare un prodotto/servizio su misura.\nPerchè devi leggere da Brand a Friend Se sei capitato sul mio blog o se mi leggi da un po\u0026rsquo;, sarai senz\u0026rsquo;altro come me, cerco ogni giorno nuovi modi per approcciarmi ai miei clienti e a creare opportunità di networking e lavoro.\nAlle volte le cose sono sotto i nostri occhi, ma facciamo fatica a vederle, o perché concentrati su altri obiettivi, o semplicemente perché ignoriamo alcuni concetti e alcune strade. Leggere libri come questo, mi aprono la mente e mi mettono al corrente di cose che normalmente implicano tanta ricerca per essere padroneggiate.\nInvece così, ho scoperto, oltre al fatto che sto percorrendo la strada giusta, anche alcuni tool e alcuni progetti interessanti dai quali prendere ispirazione.\nIl libro pullula di questi, e non ti nascondo che alcuni di questi esempi li sto utilizzando i prima persona.\nInoltre è scritto in modo molto leggero ed informale, anche se alle volte si ripete spesso.\nDetto questo, ti auguro buona lettura, e come sempre ti lascio il link su amazon e il ink al blog dell\u0026rsquo;autore che pubblica sempre tanti contenuti interessanti.\nQuesto è il link al libro su amazon ,non ti nascondo che il link è affiliato a me, quanto meno se ti piace mi avrai regalato un caffè, e io te ne sarò riconoscente. 😁\n","permalink":"https://www.michelecriscuolo.com/recensione-da-brand-a-friend/","summary":"\u003ch2 id=\"chi-èlautore-di\"\u003e\u003cstrong\u003eChi è\u003c/strong\u003e l’\u003cstrong\u003eautore di \u0026ldquo;da Brand a Friend\u0026rdquo;?\u003c/strong\u003e\u003c/h2\u003e\n\u003cp\u003eL’autore del libro è Robin Good, per chi non lo conoscesse è lo pseudonimo di Luigi Canali De Rossi. Italiano di nascita, laureato negli Stati Uniti, nella scena italiana è un personaggio davvero famoso, specialmente se si parla di \u003cstrong\u003epersonal branding.\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eAll\u0026rsquo;epoca che studiavo all\u0026rsquo;università, sono cresciuto con le parole di Robin Good, era una sorta di \u003cstrong\u003eGuru\u003c/strong\u003e per me, e ancora oggi mi rendo conto di quanto sia lungimirante. Diventato famoso per essere stato il primo a fatturare più di \u003cstrong\u003e1 milione\u003c/strong\u003e di dollari con \u003cem\u003eGoogle Adwords.\u003c/em\u003e\u003c/p\u003e","title":"Recensione da Brand a Friend"},{"content":"Parliamo velocemente di cosa è il Growth Hacking Day 2019.\nSe mi avessero detto due anni fa che le compagnie avessero avuto un reparto di growth hacking, avrei alzato le spalle 🤷‍♂️e mi sarei girato.\nOggi molti tentano di cavalcare l\u0026rsquo;onda, specialmente le agenzie che si occupano del marketing tradizionale. Ma in tanti non hanno ancora capito che essere un growth hacker è molto più complesso del creare una campagna marketing e seguirla su Facebook.\nEssere un growth hacker significa saper sperimentare e trovare il modo giusto per poter far crescere un\u0026rsquo;azienda.\nChi c\u0026rsquo;è dietro il Growth Hacking Day Parliamo degli organizzatori, sono 4 e sono cazzutissimi.\nRaffaele Gaito: Growth Hacker\nAndrea Roberto Bifulco: Director @ Startup Grind\nGerardo Forliano: CEO @ Growthalia\nLuca Barboni: Head of Growth @ 247x\nOgnuno di loro ha competenze orizzontali su una miriade di argomenti, oltre ad essere degli animali da palcoscenico e avere tutta l\u0026rsquo;esperienza necessaria per parlare di growth hacking sulla scena italiana e non solo.\nParliamo di numeri Che numeri ha fatto il growth hacking day 2019.\n2 Giorni di Workshop 17 Ore di evento 15 Speech sul palco ∞ Possibilità di incontri, networking e cena con gli speaker Chi sono speaker di questa edizione Gli speaker:\nRaffaele Gaito - WebSite - Facebook -Linkedin Vicky Dallas - Linkedin Luca Micheli - Linkedin Yaroslav Stepanenko - WebSite - Linkedin Alessandro Cadoni - Linkedin Matteo Concas - Linkedin Gerardo Forliano - WebSite - Linkedin Luca Barboni - Facebook - Linkedin Maria Giulia Ganassini - Linkedin Michele Franzese - Linkedin Mario Moroni - WebSite - Facebook - Linkedin Yara Paoli - Linkedin Yari Brugnoni - Linkedin Mihaela Mateescu - Linkedin Theodore Moulos - Linkedin Cosa ho portato a casa dall\u0026rsquo;evento Parliamo sicuramente dell\u0026rsquo;evento più grande d\u0026rsquo;Europa.\nTornando a casa, in treno, ho ripreso gli appunti che avevo trascritto sul mio iPhone. Mi sono reso conto che effettivamente qualcosa stava cambiando e che le storie che erano state raccontate all\u0026rsquo;evento mi avevano affascinato, e non poco.\nHo realizzato che non importa se sei una startup o una grande corporate, il growth hacking è un valido alleato per la crescita di un\u0026rsquo;azienda, e che non è un approccio al marketing ma è un modo di pensare, viene definito un mindset (una mentalità). Questo ti permetterà di continuare a far crescere l\u0026rsquo;azienda, anche quando le regole che esistono in questo momento, cambieranno.\nAlle storie motivanti si è aggiunto il fatto di poter fare networking, grazie alle pause inserite, il che rende la cosa un\u0026rsquo;opportunità fantastica, il poter scambiare quattro chiacchiere con gli speaker che sono rimasti tra le persone per tutta la durata dell\u0026rsquo;evento. E questo mi ha permesso di fare un sacco di domande che in altro modo non sarei riuscito a fare.\nNon è semplice parlare dell\u0026rsquo;argomento in un articolo così breve, ma se ti stai avvicinando al growth hacking allora non puoi fare a meno di approfondire la cosa. Questo evento è sicuramente un inizio, ma non è l\u0026rsquo;unico che devi utilizzare. Ti lascio con qualche risorsa che reputo indispensabile per cominciare a capire che cos\u0026rsquo;è il growth hacking.\nChi può dirlo, forse ci vediamo al prossimo evento.\nTi lascio con un paio di link che potrebbero essere utili per approfondire l\u0026rsquo;argomento:\nLibro, Il libro italiano sul growth hacking, a mio parere meglio realizzato, di Raffaele Gaito Libro, il libro capostipite, direttamente dal padre del growth hacking, Sean Ellis Blog, dal quale prendere diversi spunti, anche questo di Raffaele Gaito Youtube, i video dei Ghday, passato, presente e futuro GHDay, il sito della conferenza che si aggiorna con le nuove edizioni, così da non poter perdere un\u0026rsquo;altra volta l\u0026rsquo;occasione di esserci Spero di essere stato utile a qualcuno ☺️\n","permalink":"https://www.michelecriscuolo.com/ghday-cosa-ho-imparato-partecipando-al-growth-hacking-day-2019/","summary":"\u003cp\u003eParliamo velocemente di cosa è il \u003cstrong\u003eGrowth Hacking Day 2019\u003c/strong\u003e.\u003cbr\u003e\nSe mi avessero detto due anni fa che le compagnie avessero avuto un reparto di growth hacking, avrei alzato le spalle 🤷‍♂️e mi sarei girato.\u003c/p\u003e\n\u003cp\u003eOggi molti tentano di cavalcare l\u0026rsquo;onda, specialmente le agenzie che si occupano del \u003cem\u003emarketing tradizionale\u003c/em\u003e. Ma in tanti non hanno ancora capito che essere un \u003cstrong\u003egrowth hacker\u003c/strong\u003e è molto più complesso del creare una campagna \u003cem\u003emarketing\u003c/em\u003e e seguirla su \u003cem\u003eFacebook\u003c/em\u003e.\u003cbr\u003e\nEssere un \u003cstrong\u003egrowth hacker\u003c/strong\u003e significa saper sperimentare e trovare il modo giusto per poter far crescere un\u0026rsquo;azienda.\u003c/p\u003e","title":"#GHDay - Cosa ho imparato partecipando al Growth Hacking Day 2019"},{"content":"Tutto è cominciato quando ho ho avuto la necessità, per un nuovo progetto, di creare una classe che potesse svolgere le stesse operazioni all\u0026rsquo;interno dell\u0026rsquo;intero progetto, un po\u0026rsquo; come il concetto di Service che ha Angular.\nPer fare questo su Vue esistono tanti modi, ma sicuramente il più corretto, se vogliamo mantenere l\u0026rsquo;approccio alla metodologia di Vue è quello di utilizzare un Plugin.\nChe cos\u0026rsquo;è un Plugin Vue Un Plugin di Vue non è niente di più di un modo semplice e veloce per aggiungere delle funzionalità globali al progetto.\nPuò essere utilizzato per diversi scopi, come quello di creare delle direttive, ma non è il modo in cui l\u0026rsquo;ho utilizzato io.\nA cosa serve Nel mio caso specifico, che è quello che vi mostrerò, è quello di utilizzare una sorta di wrap per axios, per fare in modo che ogni richiesta http sia più snella ed eventualmente permettere una gestione dei dati e degli errori personalizzata.\nScriviamo il nostro primo Plugin Concettualmente è molto semplice.\nUn plugin deve avere un metodo .install che prende due parametri, uno è l\u0026rsquo;istanza Vue e l\u0026rsquo;altro sono le options che vogliamo passare al nostro plugin, ad esempio se vogliamo inizializzarlo in qualche modo particolare.\nPer mostrare un esempio di come un plugin funzioni proviamo a crearne uno, semplice semplice, che scrive in console un messaggio ogni volta che viene caricato nel DOM.\nconst MyPlugin = { install(Vue, options) { Vue.mixin({ mounted() { console.log(\u0026#39;Mounted!\u0026#39;); } }); } }; export default MyPlugin; Nella prima parte utilizziamo il metodo install, come detto prima, per indicare a Vue che questo è un plugin.\nFatto questo, in mixin, possiamo fare l\u0026rsquo;inject di tutte le funzionalità che ci occorrono, ad esempio, utilizzando il metodo mounted(), come qualunque altro componente Vue, nel momento in cui il nostro plugin sarò caricato nel DOM, scriverà in console \u0026lsquo;Mounted\u0026rsquo;.\nOra basterà importarlo e usarlo con Vue.use(MyPlugin)\nimport Vue from \u0026#39;vue\u0026#39; import MyPlugin from \u0026#39;./my-vue-plugin.js\u0026#39; import App from \u0026#39;./App.vue\u0026#39; Vue.use(MyPlugin) new Vue({ el: \u0026#39;#app\u0026#39;, render: h =\u0026gt; h(App) }); Utilizzando questo approccio, possiamo inserire e rimuovere funzionalità a nostro piacimento, rendendo il progetto snello e aiutandoci in un eventuale distribuzione del nostro plugin.\nAggiungere funzionalità al nostro plugin Se vogliamo aggiungere componenti o direttive al nostro plugin, possiamo inserirle in modo semplice:\nimport MyComponent from \u0026#39;./components/MyComponent.vue\u0026#39;; import MyDirective from \u0026#39;./directives/MyDirective.js\u0026#39;; const MyPlugin { install(Vue, options) { Vue.component(MyComponent.name, MyComponent) Vue.directive(MyDirective.name, MyDirective) } }; export default MyPlugin; Modificare l\u0026rsquo;oggetto globale Vue Possiamo anche modificare l\u0026rsquo;oggetto Vue, in modo veloce, può essere comodo per aggiungere funzionalità globali, direttamente sull\u0026rsquo;oggetto Vue.\nconst MyPlugin { install(Vue, options) { Vue.myAddedProperty = \u0026#39;Example Property\u0026#39; Vue.myAddedMethod = function() { return Vue.myAddedProperty } } }; export default MyPlugin; Se invece vogliamo aggiungere parametri e metodi all\u0026rsquo;istanza del nostro plugin, piuttosto che all\u0026rsquo;oggetto globale Vue, possiamo farlo così:\nconst MyPlugin { install(Vue, options) { Vue.prototype.$myAddedProperty = \u0026#39;Example Property\u0026#39; Vue.prototype.$myAddedMethod = function() { return this.$myAddedProperty } } }; export default MyPlugin; Dal momento che usiamo questa notazione e che decidiamo di distribuire il nostro plugin ad altri utenti vue, è previsto che davanti alla notazione $ venga applicato un prefisso per identificare, quanto più univocamente possibile, il nostro plugin.\nPotremmo anche fare in modo che il nostro plugin sia immediatamente disponibile, senza dover indicare a Vue di inglobarlo.\nPer farlo basterò aggiungere alla fine del plugin:\nif (typeof window !== \u0026#39;undefined\u0026#39; \u0026amp;\u0026amp; window.Vue) { window.Vue.use(MyPlugin) } Conclusioni Come puoi vedere è davvero facile sviluppare un plugin e puoi utilizzare tutti i metodi di lifecycle di Vue, come abbiamo fatto noi con il metodo mounted().\nAdesso puoi usarlo come meglio credi, e sei anche pronto per distribuirlo alla comunità. 😉\nTi lascio con due riferimenti importanti.\nIl collegamento alla documentazione Vue per la creazione di plugin, il quale troverai altri interessanti approfondimenti.\nE la guida, sempre nella documentazione di Vue, su come è possible un pacchetto e distribuirlo su npm\n","permalink":"https://www.michelecriscuolo.com/creare-un-plugin-per-vue/","summary":"\u003cp\u003eTutto è cominciato quando ho ho avuto la necessità, per un nuovo progetto, di creare una classe che potesse svolgere le stesse operazioni all\u0026rsquo;interno dell\u0026rsquo;intero progetto, un po\u0026rsquo; come il concetto di Service che ha Angular.\u003c/p\u003e\n\u003cp\u003ePer fare questo su Vue esistono tanti modi, ma sicuramente il più corretto, se vogliamo mantenere l\u0026rsquo;approccio alla metodologia di Vue è quello di utilizzare un Plugin.\u003c/p\u003e","title":"Creare un Plugin per Vue"},{"content":"Recentemente ho avuto l\u0026rsquo;esigenza di configurare un certificato ssl per poter far funzionare alcune libreria in locale, per poi poter spostare il tutto in produzione. Pensavo fosse una cosa più semplice, in realtà mi ha portato via una buona mezza giornata e da questa esperienza ho deciso di realizzare questa piccola guida.\nGeneriamo il certificato La prima cosa da fare, è generare il certificato. Vi indicherò un semplice comando da eseguire in terminale che restituirà il certificato già pronto, senza password, autofirmato, che avrà la funzione di convalidare tutte le richieste sicure che verranno fatte.\nopenssl req -x509 -out localhost.crt -keyout localhost.key \\ -newkey rsa:2048 -nodes -sha256 \\ -subj \u0026#39;/CN=localhost\u0026#39; -extensions EXT -config \u0026lt;( \\ printf \u0026#34;[dn]\\nCN=localhost\\n[req]\\ndistinguished_name = dn\\n[EXT]\\nsubjectAltName=DNS:localhost\\nkeyUsage=digitalSignature\\nextendedKeyUsage=serverAuth\u0026#34;) Aggiungere il certificato al sistema Una volta che avrete il certificato, andrà aggiunto al Portachiavi di Sistema, sotto la categoria Certificati, trascinarlo nella schermata.\nA questo punto occorre indicare al certificato di accettare tutte le richieste, basterà fare doppio click sul certificato e selezionare da \u0026ldquo;attendibilità\u0026rdquo; Fidati sempre per Quando si usa questo certificato.\nDopo fatto questo, abbiamo il nostro certificato, ma dobbiamo indicare al nostro web server che esiste.\nCome anticipato all\u0026rsquo;inizio uso il sistema operativo Mac Os e utilizzo per i mie progetti web l\u0026rsquo;applicazione MAMP.\nCiò non toglie che la guida, può essere utilizzata ache su sistemi e web server diversi, vi basterà conoscerli quel tanto che basta per fare le semplici operazioni che sto per spiegarvi.\nConfigurare MAMP Un piccolo consiglio, prima di iniziare, è più semplice che MAMP sia configurato con le porte standard anziché con quelle di default di MAMP.\nOra spostiamoci sul file di configurazione di apache all\u0026rsquo;interno di MAMP\nMachintosh HD⁩ ▸ ⁨Applicazioni⁩ ▸ ⁨MAMP⁩ ▸ ⁨conf⁩ ▸ ⁨apache⁩ ▸ httpd.conf\nIn questo file dovremo abilitare l\u0026rsquo;uso del certificato SSL, cercando e decommentando la riga corretta e cercando e decommentando la riga che abilita l\u0026rsquo;uso delle virtual-hosts. Di seguito entrambe le righe:\nSecure (SSL/TLS) connections\n#Include /Applications/MAMP/conf/apache/extra/httpd-ssl.conf\nVirtual hosts\n# Include /Applications/MAMP/conf/apache/extra/httpd-vhosts.conf\nConfiguriamo apache per SSL Adesso aggiungiamo nel file di configurazione dell\u0026rsquo;SSL di apache presente in questa posizione il codice che vedete di seguito, in modo dire alla virtual host qual\u0026rsquo;è il certificato che dovrà prendere per le chiamate sulla porta 443.\nIl file è:\nMachintosh HD⁩ ▸ ⁨Applicazioni⁩ ▸ ⁨MAMP⁩ ▸ ⁨conf⁩ ▸ ⁨apache⁩ ▸ ⁨extra⁩ ▸ httpd-ssl.conf\nUPDATE: nelle ultime versioni di MAMP è necessario modificare anche alcune cose prima di chiudere il file.\nOccorre, innanzitutto assegnare una wildcard per la porta di default dell\u0026rsquo;ssl e quindi andremo a sostituire\nold : \u0026lt;VirtualHost _default_:443\u0026gt; new : \u0026lt;VirtualHost *:443\u0026gt;\nInoltre bisogna indicare il ServerName che si occuperà di gestire la richiesta e quindi sostituiremo\nold: ServerName localhost:443 new: ServerName localhost:443\nUltima modifica da fare prima di poter inserire il nostro VirtualHost è quella di indicare in quale cartella sarà presente il certificato che si occuperà di controfirmare le nostre richieste, in pratica quello creato all\u0026rsquo;inizio del tutorial.\nQuindi sostituiremo i due path di deafault\nold: SSLCertificateFile \u0026ldquo;/Applications/MAMP/conf/apache/server.crt\u0026rdquo; old: SSLCertificateKeyFile \u0026ldquo;/Applications/MAMP/conf/apache/server.key\u0026rdquo;\nnew: SSLCertificateFile \u0026ldquo;/Applications/MAMP/conf/ssl/localhost.crt\u0026rdquo; new: SSLCertificateKeyFile \u0026ldquo;/Applications/MAMP/conf/ssl/localhost.key\u0026rdquo;\nOra possiamo continuare inserendo il nostro VirtualHost\n\u0026lt;VirtualHost progettodiesempio.local:443\u0026gt; SSLEngine on SSLCertificateFile \u0026#34;/Applications/MAMP/conf/ssl/localhost.crt\u0026#34; SSLCertificateKeyFile \u0026#34;/Applications/MAMP/conf/ssl/localhost.key\u0026#34; ServerAdmin info@website.com DocumentRoot \u0026#34;/Applications/MAMP/htdocs/progettodiesempio/public\u0026#34; ServerName progettodiesempio.local DirectoryIndex index.php \u0026lt;Directory \u0026#34;/Applications/MAMP/htdocs/progettodiesempio/public\u0026#34;\u0026gt; AllowOverride All Allow from All \u0026lt;/Directory\u0026gt; \u0026lt;/VirtualHost\u0026gt; Come puoi vedere, ho un virtual host che si chiama progettodiesempio, significa che per poter visitare l\u0026rsquo;applicazione che sto conservando nella cartella htdocs di MAMP sotto il nome di progettodiesempio, non mi basterà fare altro che digitare nel browser progettodiesempio.local, ma è ancora presto per provare.\nConfiguriamo il nostro virtual host Adesso possiamo completare la configurazione del nostro virtual host, aprendo il file di seguito e incollando il codice:\nMachintosh HD⁩ ▸ ⁨Applicazioni⁩ ▸ ⁨MAMP⁩ ▸ ⁨conf⁩ ▸ ⁨apache⁩ ▸ ⁨extra⁩ ▸ httpd-vhosts.conf\n\u0026lt;VirtualHost 127.0.0.1\u0026gt; ServerAdmin info@website.com DocumentRoot \u0026#34;/Applications/MAMP/htdocs/progettodiesempio/public\u0026#34; ServerName progettodiesempio.local DirectoryIndex index.php \u0026lt;Directory \u0026#34;/Applications/MAMP/htdocs/progettodiesempio/public\u0026#34;\u0026gt; AllowOverride All Allow from All \u0026lt;/Directory\u0026gt; \u0026lt;/VirtualHost\u0026gt; In questo caso stiamo dicendo che le richieste che arriveranno da localhost faranno capo al mio solito progetto dal nome progettodiesempio che ancora una volta avrà la sua posizione nella cartella htdocs di MAMP e che risponderà quando nella barra dell\u0026rsquo;url del browser avremo chiamato progettodiesempio.local.\nInsegniamo al computer a puntare sul nostro dominio Non ci resta che dire alla gestione degli host del sistema operativo che cose ne vogliamo fare del nostro indirizzo progettodiesempio.local, per farlo, apriamo il file hosts che sul Mac si trova nella posizione:\nMachintosh HD⁩ ▸ ⁨private⁩ ▸ ⁨etc⁩ ▸ hosts\n#custom domain 127.0.0.1\tprogettodiesempio.local Scrivendo quello che vedete sopra, non farete altro che dire al computer, che se dovesse arrivare una richiesta dal browser per il sito progettodiesempio.local, il computer dovrà rigirare al richiesta al localhost.\nOra non vi resta che riavviare apache o MAMP dopodiché, adesso il vostro applicativo risponderà in https senza problemi, e vedrete che il certificato che vi mostrerà è proprio quello che abbiamo creato.\nConfigurare il browser per accettare il certificato autofirmato Alcuni browser, ma è molto probabile che mentre mi stai leggendo oramai lo facciano tutti, non accettano certificati autofirmati e potrebbe uscirvi una schermata che vi esorta a non proseguire, tipo questa:\nCome nell\u0026rsquo;esempio basterà cliccare su procedi su progettodiesempio.local per permettere a Chrome (in questo caso) di accettare il certificato.\nConclusioni Dal momento in cui ho scritto questa piccola guida a quando lo leggerete, probabilmente sarà cambiato qualcosa, o semplicemente conoscete un modo migliore per fare quello che ho fatto.\nMi farebbe piacere conoscere le vostre opinioni. ☺️\nPS: ci sono delle cose che volutamente non ho trattato nel tutorial, ma solo perché in MAMP sono abilitate già dalla prima installazione.\n","permalink":"https://www.michelecriscuolo.com/come-usare-un-certificato-ssl-in-localhost-mamp-mac/","summary":"\u003cp\u003eRecentemente ho avuto l\u0026rsquo;esigenza di configurare un certificato \u003cstrong\u003essl\u003c/strong\u003e per poter far funzionare alcune libreria in \u003cstrong\u003elocale\u003c/strong\u003e, per poi poter spostare il tutto in produzione. Pensavo fosse una cosa più semplice, in realtà mi ha portato via una buona mezza giornata e da questa esperienza ho deciso di realizzare questa piccola guida.\u003c/p\u003e\n\u003ch4 id=\"generiamo-il-certificato\"\u003eGeneriamo il certificato\u003c/h4\u003e\n\u003cp\u003eLa prima cosa da fare, è \u003cem\u003egenerare il certificato\u003c/em\u003e. Vi indicherò un semplice comando da eseguire in \u003cem\u003eterminale\u003c/em\u003e che restituirà il \u003cstrong\u003ecertificato\u003c/strong\u003e già pronto, senza \u003cem\u003epassword\u003c/em\u003e, \u003cem\u003eautofirmato\u003c/em\u003e, che avrà la funzione di convalidare tutte le richieste sicure che verranno fatte.\u003c/p\u003e","title":"Come usare un certificato SSL in localhost - Mamp - Mac"},{"content":"Chi è l\u0026rsquo;autore del profumo dei limoni? L\u0026rsquo;autore del libro è Jonah Lynch è un sacerdote, entrato in seminario nel 2006 dopo essersi laureato in fisica alla McGill University di Montreal, ma ha conseguito diverse lauree in molteplici campi.\nScrive di diversi argomenti, dalla musica all\u0026rsquo;amore, passando per la tecnologia. Vive a Roma ed è vice-rettore del seminario della Fraternità Sacerdotale dei Missionari di San Carlo Borromeo.\nSfortunatamente in Italia ha pubblicato solo 2 libri, ma ne ha diversi all\u0026rsquo;attivo in altre lingue\nDi cosa parla il libro? La tecnologia ha preso il sopravvento su moltissimi aspetti della nostra vita.\nJonah Lynch è, tra le tante cose, è anche un appassionato di tecnologia, fin dalla sua infanzia ha avuto a che fare con il progresso tecnologico che ogni giorno sembra esserci imposto.\nNel libro evidenzia molti aspetti.\nParla su diversi fronti e attraverso alcuni punti salienti.\nDapprima ci racconta che il progresso tecnologico non può essere visto come un male assoluto, altri decenni al di fuori del nostro hanno avuto problemi con la tecnologia. Si pensi al telefono, alla televisione, oggetti oramai onnipresenti nella nostra vita e che con il tempo siamo stati capaci di gestire e dominare.\nSolo le generazioni che verranno, potranno decidere se quello che la tecnologia sta introducendo oggi, sarà davvero dannoso o meno.\nE\u0026rsquo; pero anche vero che alcune trasformazioni tecnologiche che stiamo subendo hanno davvero cambiato il nostro modo di fare, basti pensare a come l\u0026rsquo;essere sempre connessi con gli altri ci ha resi impazienti.\nNon siamo capaci neanche di leggere 10 righe di un testo sul web senza sentire l\u0026rsquo;esigenza di arrivare in fondo e saltare il tutto, le nostre vite sono diventate eccessivamente frenetiche e non ci fermiamo quasi mai, andiamo sempre più di fretta.\nPerché devi leggere il libro? Ho letto il libro in una mezza giornata, è rapido e scritto in modo molto leggibile.\nI capitoli sono chiari e alcuni possono essere saltati.\nPer più di metà libro, vengono esaltate e sottolineate quelli che sono le problematiche che la nostra generazione sta affrontando a contatto con le nuove tecnologie.\nSi passa dall\u0026rsquo;aspetto filosofico a quello religioso, raccontando anche gran parte delle esperienze personali che Lynch ha avuto a stretto contatto con la tecnologia.\nCome sempre il libro l\u0026rsquo;ho acquistato su amazon.\n","permalink":"https://www.michelecriscuolo.com/recensione-il-profumo-dei-limoni-tecnologia-e-rapporti-umani-nellera-di-facebook/","summary":"\u003ch2 id=\"chi-è-lautore-del-profumo-dei-limoni\"\u003e\u003cstrong\u003eChi è\u003c/strong\u003e l\u0026rsquo;\u003cstrong\u003eautore del profumo dei limoni?\u003c/strong\u003e\u003c/h2\u003e\n\u003cp\u003eL\u0026rsquo;autore del libro è \u003cstrong\u003eJonah Lynch\u003c/strong\u003e è un sacerdote, entrato in seminario nel 2006 dopo essersi laureato in fisica alla McGill University di Montreal, ma ha conseguito diverse lauree in molteplici campi.\u003c/p\u003e\n\u003cp\u003eScrive di diversi argomenti, dalla musica all\u0026rsquo;amore, passando per la \u003cstrong\u003etecnologia\u003c/strong\u003e. Vive a Roma ed è vice-rettore del seminario della Fraternità Sacerdotale dei Missionari di San Carlo Borromeo.\u003cbr\u003e\nSfortunatamente in \u003cem\u003eItalia\u003c/em\u003e ha pubblicato solo 2 libri, ma ne ha diversi all\u0026rsquo;attivo in altre lingue\u003c/p\u003e","title":"Recensione Il profumo dei limoni. Tecnologia e rapporti umani nell'era di Facebook"},{"content":"** Chi è** l\u0026rsquo;autore di Fatti il letto?\nL\u0026rsquo;autore del libro è William McRaven. Pluridecorato Navy Seals\nritiratosi nel 2014 e attualmente rettore di molte università nel Texas.\nMcRaven ha partecipato a molteplici operazioni della marina militare e tenuto parte alle più importanti missioni, come l\u0026rsquo;operazione Desert Storm o all\u0026rsquo;Operazione lancia di Nettuno dov\u0026rsquo;è stato ucciso \u0026ldquo;Osama Bin Laden\u0026rdquo;.\nHa continuato a prestare servizio nella marina fino a ricoprire incarichi ad ogni livello, fino a \u0026ldquo;capo delle operazioni speciali\u0026rdquo;, condotte da tutte le forze armate del paese.\nDi cosa parla Fatti il letto? Il libro è ricavato da un famoso discorso che l\u0026rsquo;ammiraglio tenne ai laureandi dell\u0026rsquo;università del Texas, diventando ben presto un best seller tradotto in diverse lingue.\nNel discorso mette in evidenza, quelli che secondo lui, sono i 10 punti da tenere presente per imparare a condurre una vita migliore. 10 piccoli concetti:\nFatti il letto ogni mattina, in modo da aver completato il primo compito della giornata ancor prima di iniziarla;\nTrova qualcuno che ti aiuti, perché nella vita da soli non si riesce ad arrivare lontani;\nMisurate le persone dalla grandezza del cuore, le persone che hanno un cuore grande sono capaci di imprese delle quali è impossibile aspettarsi;\nAccettate di poter perdere, la vita non è sempre giusta, accettatelo e andate avanti;\nNon abbiate paura degli insuccessi, perché da essi avrete la possibilità di diventare più forti di prima;\nButtatevi giù dall\u0026rsquo;ostacolo a capofitto, alle volte è necessario osare e non pensare troppo;\nNon arretrate di fronte agli squali, non lasciate ai prepotenti la possibilità di comandare;\nDate il meglio di voi nei momenti più bui, è proprio quando ci si sente persi che è il momento di dare il massimo;\nQuando siete nel fango mettetevi a cantare, date speranza agli altri che vi circondano, non abbandonateli mai;\nNon suonate la campana, ovvero non mollare mai, mai \u0026hellip;. mai.\nElencati in questo modo possono sembrare insignificanti, ma nel libro l\u0026rsquo;ammiraglio suddivide ogni punto in due parti.\nLa prima parte è il racconto di un episodio che spiega da dove prende spunto la sua lezione, principalmente durante l\u0026rsquo;addestramento da Navy Seal, e il secondo che racconta come nella vita, poi, quell\u0026rsquo;insegnamento si sia rivelato utile.\nPerchè devi leggere Fatti il letto? E\u0026rsquo; un libro che si legge molto rapidamente e che lascia dei piccoli insegnamenti, alcuni sicuramente più forti di altri e che ci fa riflettere su quali possono essere le azioni e i comportamenti che possiamo utilizzare per essere delle persone migliori.\nTanto migliori da diventare degli esempi per altri che a loro volta possono diventarlo per altre persone.\nCosì facendo possiamo davvero sperare una giorno di cambiare il mondo.\nLo reputo senza pretese ed una valida lettura da domenica pomeriggio o da viaggio di lavoro nel treno, io ne sono venuto a conoscenza tramite il servizio di lettura dei libri audible, mentre mi allenavo su di un vogatore 😁\nHo poi successivamente comprato il libro su amazon.\n","permalink":"https://www.michelecriscuolo.com/recensione-fatti-il-letto-piccole-cose-che-cambiano-la-tua-vita-e-forse-il-mondo/","summary":"\u003ch2 id=\"heading\"\u003e**\u003c/h2\u003e\n\u003cp\u003eChi è** l\u0026rsquo;\u003cstrong\u003eautore di Fatti il letto?\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eL\u0026rsquo;autore del libro è William McRaven. Pluridecorato Navy Seals\u003cbr\u003e\nritiratosi nel 2014 e attualmente rettore di molte università nel Texas.\u003c/p\u003e\n\u003cp\u003eMcRaven ha partecipato a molteplici operazioni della marina militare e tenuto parte alle più importanti missioni, come l\u0026rsquo;operazione \u003cstrong\u003eDesert Storm\u003c/strong\u003e o all\u0026rsquo;\u003cstrong\u003eOperazione lancia di Nettuno\u003c/strong\u003e dov\u0026rsquo;è stato ucciso \u0026ldquo;Osama Bin Laden\u0026rdquo;.\u003c/p\u003e\n\u003cp\u003eHa continuato a prestare servizio nella marina fino a ricoprire incarichi ad ogni livello, fino a \u0026ldquo;capo delle operazioni speciali\u0026rdquo;, condotte da tutte le forze armate del paese.\u003c/p\u003e","title":"Recensione Fatti il letto -  Piccole cose che cambiano la tua vita... e forse il mondo"},{"content":"Laravel ha un’interfaccia a line di comando chiamata Artisan che permette di velocizzare molte fasi del processo di sviluppo.\nTutti i comandi generati da Artisan vengono memorizzati nel percorso app/Console/Commands, ma è possibile posizionarli ovunque per poi richiamarli tramite composer.\nAl momento della scrittura dell\u0026rsquo;articolo è disponibile Laravel 5.6 ed è la documentazione alla quale mi rifarò.\nCreare e registrare un Comando Laravel è un framework davvero completo e ti aiuta a fare tante cose nel modo più veloce possibile. Per questo ci basta scrivere in console make:console *NomeClasse* per creare un comando.\nCosì facendo NomeClasse sarà anche il comando che potremo successivamente lanciare dalla console. In alternativa, è possibile tramite il parametro --command, assegnare un nome diverso dal nome della classe generata, come nell’esempio di seguito.\nphp artisan make:command QuizStart --command=quiz:start Questo comando creerà la classe QuizStart in /app/console/commands\nIl comando make di artisan dovrebbe in automatico inserire anche il path della classe appena creata nel file /app/console/Kernel.php, se così non fosse bisognerà aggiungerlo in questo modo:\nprotected $commands = [ \u0026#39;App\\Console\\Commands\\QuizStart\u0026#39; ]; Per controllare che il comando sia stato inserito nella lista di quelli disponibili tra il namespace che gli abbiamo assegnato, basterà lanciare\nphp artisan list Nel caso in cui non fosse ancora disponibile, possiamo provare a pulire la cache di artisan con il comando:\nphp artisan quiz:start Struttura di un file Command Aprendo il file generato da artisan make, possiamo cambiare il nome e la descrizione, come nell’esempio qui sotto.\n\u0026lt;?php #/App/Console/Commands/QuizStart.php namespace App\\Console\\Commands; use Illuminate\\Console\\Command; class QuizStart extends Command { /** * The name and signature of the console command. * * @var string */ protected $signature = \u0026#39;quiz:start\u0026#39;; /** * The console command description. * * @var string */ protected $description = \u0026#39;Command description\u0026#39;; /** * Create a new command instance. * * @return void */ public function __construct() { parent::__construct(); } /** * Execute the console command. * * @return mixed */ public function handle() { // } } Stampare Messaggi Per stampare messaggi in console esistono diversi comandi, a seconda di come si vuole formattare il messaggio. Per testare i vari stili dei messaggi è possibile copiare e incollare l’esempio:\n/** * Execute the console command. * * @return mixed */ public function handle() { $this-\u0026gt;line(“Semplice testo\u0026#34;); $this-\u0026gt;info(\u0026#34;Hey, questo è un avviso guarda !\u0026#34;); $this-\u0026gt;comment(“Questo è un commento\u0026#34;); $this-\u0026gt;question(“Davvero hai qualcosa da chiedermi?\u0026#34;); $this-\u0026gt;error(\u0026#34;Ops, qualcosa è andato storto.\u0026#34;); } Input: arguments e options Utilizzare Argomenti e opzioni Nella property signature è possibile, insieme al nome del comando, definire anche gli arguments e le options di cui abbiamo bisogno per far lavorare il nostro script.\n/** * The name and signature of the console command. * * @var string */ protected $signature = \u0026#39;quiz:start {user} {age} {--difficulty=} {--istest=}’; Gli argument verranno registrati tramite la sintassi {nomeArgomento}, mentre le option {- -nomeOpzione=}. Non è necessario creare i metodi get per recuperare le options, più avanti vedremo come fare. La sintassi è molto semplice, questi sono i modi per poter utilizzare gli arguments e le options nei nostri comandi:\nArgomento: quiz:start {argument}. Argomento opzionale (da notare il punto interrogativo alla fine del nome dell\u0026rsquo;argument): quiz:start {argument?}. Argomento con un valore di default: quiz:start {argument=defaultValue}. Opzione Booleana: quiz:start \u0026ndash;myOption. Opzione con un valore: quiz:start \u0026ndash;myOption=. Opzione con un valore di default: quiz:start \u0026ndash;myOption=12. Recuperare i valori da argomenti e opzioni Per poter recuperare gli argomenti e le opzioni all’interno del nostro comando possiamo usare la seguente sintassi:\n/** * Execute the console command. * * @return mixed */ public function handle() { // Get single Parameters $username = $this-\u0026gt;argument(\u0026#39;user\u0026#39;); $difficulty = $this-\u0026gt;option(\u0026#39;difficulty\u0026#39;); // Get all $arguments = $this-\u0026gt;arguments(); $options = $this-\u0026gt;options(); // Stop execution and ask a question $answer = $this-\u0026gt;ask(\u0026#39;What is your name?\u0026#39;); // Ask for sensitive information $password = $this-\u0026gt;secret(\u0026#39;What is the password?\u0026#39;); // Choices $name = $this-\u0026gt;choice(\u0026#39;What is your name?\u0026#39;, [\u0026#39;Taylor\u0026#39;, \u0026#39;Dayle\u0026#39;], $default); // Confirmation if ($this-\u0026gt;confirm(\u0026#39;Is \u0026#39;.$name.\u0026#39; correct, do you wish to continue? [y|N]\u0026#39;)) { // } } Esempio Nell\u0026rsquo;esempio che segue, mostro un quiz interattivo, dove bisognerà rispondere a tutte le domande e alla fine verranno mostrate in console, tutte le risposte date.\n/** * Execute the console command. * * @return mixed */ public function handle() { $difficulty = $this-\u0026gt;option(\u0026#39;difficulty\u0026#39;); if(!$difficulty){ $difficulty = \u0026#39;easy\u0026#39;; } $this-\u0026gt;line(\u0026#39;Welcome \u0026#39;.$this-\u0026gt;argument(\u0026#39;user\u0026#39;).\u0026#34;, starting test in difficulty : \u0026#34;. $difficulty); $questions = [ \u0026#39;easy\u0026#39; =\u0026gt; [ \u0026#39;How old are you ?\u0026#39;, \u0026#34;What is the name of your mother?\u0026#34;, \u0026#39;Do you have 3 parents ?\u0026#39;,\u0026#39;Do you like Javascript?\u0026#39;, \u0026#39;Do you know what is a JS promise?\u0026#39; ], \u0026#39;hard\u0026#39; =\u0026gt; [ \u0026#39;Why the sky is blue?\u0026#39;, \u0026#34;Can a kangaroo jump higher than a house?\u0026#34;, \u0026#39;Do you think i am a bad father?\u0026#39;,\u0026#39;why the dinosaurs disappeared?\u0026#39;, \u0026#34;why don\u0026#39;t whales have gills?\u0026#34; ] ]; $questionsToAsk = $questions[$difficulty]; $answers = []; foreach($questionsToAsk as $question){ $answer = $this-\u0026gt;ask($question); array_push($answers,$answer); } $this-\u0026gt;info(\u0026#34;Thanks for do the quiz in the console, your answers : \u0026#34;); for($i = 0;$i \u0026lt;= (count($questionsToAsk) -1 );$i++){ $this-\u0026gt;line(($i + 1).\u0026#39;) \u0026#39;. $answers[$i]); } } Eseguire un comando da un controller o una route Naturalmente se abbiamo una interazione nel nostro comando non possiamo eseguirlo in una route o in un controller.\nNel caso in cui volessimo lanciare una routine possiamo farlo da controller, route e anche da altri comandi in questo modo:\n$exitCode = Artisan::call(\u0026#39;quiz:start\u0026#39;, [ \u0026#39;user\u0026#39; =\u0026gt; \u0026#39;Carlos\u0026#39;, \u0026#39;--difficulty\u0026#39; =\u0026gt; \u0026#39;hard\u0026#39; ]); Passando un array con gli arguments e le option che ci servono.\nInserire una barra di avanzamento Alle volte, quando si realizza uno script di migrazione, come mi capita spesso, è utile avere una barra di avanzamento che indica a che punto si trova il nostro comando.\nPer fare questo, Laravel ci viene incontro e ci da a disposizione un oggetto già bello e pronto.\nNell’esempio seguente, inizializzeremo l’oggetto e includeremo il suo avanzamento in un ciclo foreach, dopodiché chiameremo la fine dell’avanzamento quando avremo completato tutte le operazioni:\n$bar = $this-\u0026gt;output-\u0026gt;createProgressBar(count($users)); foreach ($users as $user) { $this-\u0026gt;performTask($user); $bar-\u0026gt;advance(); } $bar-\u0026gt;finish(); Per quanto riguarda la progressbar esiste una documentazione dedicata, se ad esempio si vuole personalizzare lo stile.\nPer approfondire l\u0026rsquo;argomento sui comandi invece, puoi fare riferimento alla documentazione ufficiale\n","permalink":"https://www.michelecriscuolo.com/come-creare-un-comando-artisan-per-laravel/","summary":"\u003cp\u003eLaravel ha un’interfaccia a line di comando chiamata Artisan che permette di velocizzare molte fasi del processo di sviluppo.\u003c/p\u003e\n\u003cp\u003eTutti i comandi generati da Artisan vengono memorizzati nel percorso \u003ccode\u003eapp/Console/Commands\u003c/code\u003e, ma è possibile posizionarli ovunque per poi  richiamarli tramite composer.\u003c/p\u003e\n\u003cp\u003eAl momento della scrittura dell\u0026rsquo;articolo è disponibile Laravel 5.6 ed è la documentazione alla quale mi rifarò.\u003c/p\u003e\n\u003ch2 id=\"creare-e-registrare-un-comando\"\u003eCreare e registrare un Comando\u003c/h2\u003e\n\u003cp\u003eLaravel è un framework davvero completo e ti aiuta a fare tante cose nel modo più veloce possibile. Per questo ci basta scrivere in console \u003ccode\u003emake:console *NomeClasse*\u003c/code\u003e per creare un comando.\u003c/p\u003e","title":"Come creare un comando artisan per Laravel"},{"content":"Salernitano DOC, tra una lezione e un calcio al pallone in cortile, coltivavo la passione per i computer e per la tecnologia fin da piccolo. Alle superiori ho scoperto la programmazione ed è stato subito amore. Con l’andare degli anni e il passaggio all’università, ho fatto di questa passione il mio lavoro. Ho iniziato a programmare che avevo poco più di 15 anni e ho da subito conosciuto tante persone capaci che mi hanno fatto crescere professionalmente. La mia sete di conoscenza e la maturità professionale acquisita mi hanno permesso di fondare, ad oggi, due aziende. Con la mia prima azienda sviluppavamo soluzioni web-based, i classici gestionali. Abbiamo anticipato di un anno quelle che sono conosciute con il nome di applicazioni in Cloud. Successivamente è nato l’iPhone e ho cavalcato l’onda delle Apps per iOS. Ho lavorato per oltre 2 anni allo sviluppo nativo della app e ancora oggi in segreto mi diverto a programmare applicazioni per me stesso. In quel momento capisco che serve un ulteriore salto di qualità e nel 2011 ho fondato ”Mangatar”. Con Mangatar ho sviluppato nuove competenze, sono diventato un Digital Entrepreneur ed ho intrapreso l’avventura dello sviluppo di videogame. Negli ultimi sei anni ho vinto diverse competizioni per Startup e lavorato con clienti come Digital Bros. Oggi, questo ciclo di maturazione mi ha portato a voler fare ancora una volta qualcosa di nuovo e a cercare nuovi stimoli e problemi da risolvere. Si è capito che mi piacciono le sfide? Nonostante la diversità dei progetti sui quali ho lavorato, ogni volta mi sono trovato ad affrontare problemi che, mi hanno dato al possibilità d’imparare e moltiplicare le mie capacità ma continuo a studiare e imparare nuove tecnologie. In pratica sono un Full Stack Developer. Forse ti stai chiedendo: ma quindi sei sempre chiuso in un posto buio con le mani sulla tastiera? Assolutamente no, mi piace lasciarmi contaminare dalle persone e partecipo spesso ad eventi. Questo mi permette di entrare in contatto con tante altre persone che possono trasmettermi nuovi stimoli e nuove conoscenze. Nel tempo libero che mi rimane (avendo dovuto abbandonare il pallone in cortile), pratico il CROSSFIT, che come per la programmazione, mi ha travolto la vita. E’ uno stimolo a migliorarsi sempre e accettare giorno dopo giorno una sfida più difficile. Come quando ero un ragazzetto, oggi il mio obiettivo è non fermarmi mai e in questo momento nel quale stai leggendo, sono in attesa della prossima sfida, quindi ti invito a metterti in contatto con me. Forse non ti ho detto proprio tutto tutto su di me, prova a dare uno sguardo al mio profilo Linkedin.\n","permalink":"https://www.michelecriscuolo.com/chi-sono/","summary":"\u003cp\u003eSalernitano DOC, tra una lezione e un calcio al pallone in cortile, coltivavo la passione per i computer e per la tecnologia fin da piccolo. Alle superiori ho scoperto la programmazione ed è stato subito amore. Con l’andare degli anni e il passaggio all’università, ho fatto di questa passione il mio lavoro. Ho iniziato a programmare che avevo poco più di 15 anni e ho da subito conosciuto tante persone capaci che mi hanno fatto crescere professionalmente. La mia sete di conoscenza e la maturità professionale acquisita mi hanno permesso di fondare, ad oggi, \u003cstrong\u003edue aziende\u003c/strong\u003e. Con la mia prima azienda sviluppavamo soluzioni \u003cstrong\u003eweb-based\u003c/strong\u003e, i classici gestionali. Abbiamo anticipato di un anno quelle che sono conosciute con il nome di applicazioni in Cloud. Successivamente è nato l’iPhone e ho cavalcato l’onda delle Apps per \u003cstrong\u003eiOS\u003c/strong\u003e. Ho lavorato per oltre 2 anni allo sviluppo nativo della app e ancora oggi in segreto mi diverto a programmare applicazioni per me stesso. In quel momento capisco che serve un ulteriore salto di qualità e nel 2011 ho fondato ”Mangatar”. Con Mangatar ho sviluppato nuove competenze, sono diventato un \u003cstrong\u003eDigital Entrepreneur\u003c/strong\u003e ed ho intrapreso l’avventura dello sviluppo di videogame. Negli ultimi sei anni ho vinto diverse competizioni per \u003cstrong\u003eStartup\u003c/strong\u003e e lavorato con clienti come \u003cstrong\u003eDigital Bros\u003c/strong\u003e. Oggi, questo ciclo di maturazione mi ha portato a voler fare ancora una volta qualcosa di nuovo e a cercare nuovi stimoli e problemi da risolvere. Si è capito che mi piacciono le sfide? Nonostante la diversità dei progetti sui quali ho lavorato, ogni volta mi sono trovato ad affrontare problemi che, mi hanno dato al possibilità d’imparare e moltiplicare le mie capacità ma continuo a studiare e imparare nuove tecnologie. In pratica sono un \u003cstrong\u003eFull Stack Developer\u003c/strong\u003e. Forse ti stai chiedendo: ma quindi sei sempre chiuso in un posto buio con le mani sulla tastiera? Assolutamente no, mi piace lasciarmi contaminare dalle persone e partecipo spesso ad eventi. Questo mi permette di entrare in contatto con tante altre persone che possono trasmettermi nuovi stimoli e nuove conoscenze. Nel tempo libero che mi rimane (avendo dovuto abbandonare il pallone in cortile), pratico il CROSSFIT, che come per la programmazione, mi ha travolto la vita. E’ uno stimolo a migliorarsi sempre e accettare giorno dopo giorno una sfida più difficile. Come quando ero un ragazzetto, oggi il mio obiettivo è non fermarmi mai e in questo momento nel quale stai leggendo, sono in attesa della prossima sfida, quindi ti invito a metterti in contatto con me. Forse non ti ho detto proprio tutto tutto su di me, prova a dare uno sguardo al mio profilo \u003ca href=\"https://www.linkedin.com/in/michelecriscuolo/\"\u003eLinkedin\u003c/a\u003e.\u003c/p\u003e","title":"Chi sono"},{"content":"","permalink":"https://www.michelecriscuolo.com/blog/","summary":"","title":"Blog"},{"content":"Chi sono gli autori di Switch? Gli autori del libro sono due fratelli, Chip e Dan Health. Chip è professore alla Stanford School of Business, mentre Dan è un membro della comunità scientifica della Duke University. Insieme hanno pubblicato tre libri, tutti best seller, switch è solo uno di questi. Il loro primo libro s\u0026rsquo;intitola “Idee Forti - Dalle leggende metropolitane ai prodotti: perchè alcuni concetti durano e altri no”. E l’lutimo, ancora non disponibile in italiano, dal titolo “Decisive - How to Make Better Decisions in Life and Work”.\nDi cosa parla Switch? Il libro ci mostra quali sono le possibili difficoltà che s’incontrano quando si vuole attuare un cambiamento, che sia una cattiva abitudine personale o di un familiare, o che riguardi la propia azienda. L’autore, attraverso esempi ci fa capire che tutti possono cambiare, per quanto questo sembri difficile, basta conoscere quali sono i passi da percorrere. Per fare questo utilizza tre macro argomenti. Il primo è “La Guida”, ovvero la nostra parte razionale che tende a trovare tutti i problemi che potrebbero esserci nell’attuare il cambiamento. Il secondo è “l\u0026rsquo;Elefante”, ovvero la parte istintiva ed emotiva che è in noi, testarda e abitudinaria, che non accetta nessun tipo di cambiamento, per quanto semplice possa essere. Ed infine, il terzo è “il Percorso”. Su questo argomento le cose si dividono nuovamente. Il percorso viene raccontato come la strada da percorrere per aiutare la guida e l’elefante lungo il cammino del cambiamento. Questo percorso può essere una vera e propria strada fatta di obiettivi da raggiungere o di un posto che frequentiamo quotidianamente, costruito ad hoc per aiutarci.\nPerchè devi leggere Switch? Il libro mi ha affascinato anche su aspetti che non sono direttamente collegati con il cambiamento. Soprattutto nella capitolo dedicato al lato razionale.\nHo imparato che non esiste un modo facile o difficile per creare un cambiamento, per quanto questo possa essere difficile, c’è sempre un processo da seguire.\nChe tu voglia smettere di fumare o motivarti ad andare in palestra, che tu voglia far cambiare un\u0026rsquo;odiosa abitudine a qualcuno o che tu voglia far insegnare ai tuoi dipendenti ad essere più efficienti, questo libro ti aprirà la strada ad un approccio che ti aiuti a farlo.\nIl libro è su amazon, insieme agli altri libri degli autori.\n","permalink":"https://www.michelecriscuolo.com/recensione-switch-come-cambiare-quando-cambiare-e-difficile/","summary":"\u003ch1 id=\"chi-sono-gli-autori-di-switch\"\u003e\u003cstrong\u003eChi sono\u003c/strong\u003e \u003cstrong\u003egli autori di Switch?\u003c/strong\u003e\u003c/h1\u003e\n\u003cp\u003eGli autori del libro sono due fratelli, Chip e Dan Health. Chip è professore alla Stanford School of Business, mentre Dan è un membro della comunità scientifica della Duke University. Insieme hanno pubblicato tre libri, tutti best seller, switch è solo uno di questi. Il loro primo libro s\u0026rsquo;intitola “Idee Forti - Dalle leggende metropolitane ai prodotti: perchè alcuni concetti durano e altri no”. E l’lutimo, ancora non disponibile in italiano, dal titolo “Decisive - How to Make Better Decisions in Life and Work”.\u003c/p\u003e","title":"Recensione Switch - Come cambiare quando cambiare è difficile"}]