<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Posts on Cloudsurfer</title>
        <link>https://cloudsurfer.netlify.app/posts/</link>
        <description>Recent content in Posts on Cloudsurfer</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>it-it</language>
        <copyright>All rights reserved.</copyright>
        <lastBuildDate>Sun, 09 May 2021 00:00:00 +0000</lastBuildDate>
        <atom:link href="https://cloudsurfer.netlify.app/posts/index.xml" rel="self" type="application/rss+xml" />
        
        <item>
            <title>Nuovo sito statico con Hugo</title>
            <link>https://cloudsurfer.netlify.app/posts/2021/05/nuovo-sito-statico-con-hugo/</link>
            <pubDate>Sun, 09 May 2021 00:00:00 +0000</pubDate>
            
            <guid>https://cloudsurfer.netlify.app/posts/2021/05/nuovo-sito-statico-con-hugo/</guid>
            <description>Perchè è nato questo sito? E perchè questo è legato con lo sviluppo di un sito statico con Hugo?
Da più parti, durante le mie peregrinazioni sul web, avevo sentito parlare di generatori di siti statici per blog e siti. Approfondendo ho scoperto Hugo: un promettente e semplice generatore di siti statici. Nello stesso periodo mi sono appassionato alla riga di comando ed a come svolgere tutta una serie di operazioni di gestione senza utilizzare le utility grafiche (soprattutto nei sistemi Linux e MacOS).</description>
            <content type="html"><![CDATA[

<h2 id="perchè-è-nato-questo-sito">Perchè è nato questo sito?</h2>

<p>E perchè questo è legato con lo sviluppo di un sito statico con Hugo?</p>

<p>Da più parti, durante le mie peregrinazioni sul web, avevo sentito parlare di <strong>generatori di siti statici</strong> per blog e siti. Approfondendo ho scoperto Hugo: un promettente e semplice generatore di siti statici. Nello stesso periodo mi sono appassionato alla <strong>riga di comando</strong> ed a come svolgere tutta una serie di operazioni di gestione senza utilizzare le utility grafiche (soprattutto nei sistemi Linux e MacOS). Cercavo quindi una <em>scusa</em> per provare <strong>Hugo</strong> e per approfondire l&rsquo;uso di strumenti da riga di comando, primo fra tutti <strong>Git</strong>. E&rsquo; la scusa è stata <em>cloudsurfer.it</em>, un dominio che avevo acquistato per un vecchio progetto di e-commerce mai decollato e che è diventato la base sperimentale per questo blog dove raccolgo un po&rsquo; di appunti su quello che studio.</p>

<p>Questo è quindi il mio <em>homelab</em> di programmazione web: ogni tanto scrivo articoli, utilizzo Hugo in locale per <em>servire</em> il sito e fare i controlli, quando tutto mi sembra corretto con <em>Git</em> invio al repo privato su <em>Github</em> e <em>Netlify</em> fa il deploy automantico del sito.</p>

<p>Non sono uno scrittore prolifico quindi condivido il processo che ho utilizzo per creare questo sito in modo che questo possa essere sfruttato da creatori di contenuti migliori di me. Questo non è un tutorial: ne puoi trovare tanti on-line e su youtube fatti sicuramente meglio di quello che potrei fare io. Il mio contributo è il <strong>flusso operativo</strong> che spesso manca nei tutorial.</p>

<h2 id="hugo-un-framwork-per-costruire-siti">Hugo: un framwork per costruire siti</h2>

<p><a href="https://gohugo.io" target="_blank">Hugo</a> è un framework per costruire siti statici. I siti creati hanno in generale ottime performance dal punto di vista della velocità. I siti <em>generati</em> da Hugo sono statici per il fruitore ma permettono un aggiornamento semplice e continuo da parte dello sviluppatore attraverso pagine <code>.md</code> (markdown) come questa che contiene l&rsquo;articolo, attraverso file di configurazione <code>.yaml</code> o <code>.toml</code> ed attraverso all&rsquo;utilizzo ed alla personalizzazione di temi che utilizzano tutto un sistema di <code>shortcodes</code> per la generazione della pagina.</p>

<p>Quindi il sito è veloce come un sito puramente statico ma il programmatore sfrutta <em>Hugo</em> per generarlo invece che programmare direttamente in <code>html</code>, <code>css</code> e <code>javascript</code>.</p>

<p>Ti assicuro che è molto più difficile da spiegare che da fare &hellip; il mio consiglio è partire da un progetto semplice, un bel tema preconfezionato e osservare come il framework lavora.</p>

<h3 id="1-installare-hugo">1. Installare Hugo</h3>

<p>Il primo passo è installare Hugo per il sistema operativo utilizzato. La procedura è semplice e si riduce al lancio di un comando che varia a seconda del sistema operativo:</p>

<p>MacOS</p>

<pre><code>$ brew install hugo
</code></pre>

<p>Windows</p>

<pre><code>$ choco install hugo -confirm
</code></pre>

<p>Linux</p>

<pre><code>$ snap install hugo
</code></pre>

<p>Consiglio comunque di dare un occhiata alla guida ufficiale di installazione prima di procedere in modo da eseguire la procedura aggiornata: <a href="https://gohugo.io/getting-started/installing/" target="_blank">guida installazione Hugo</a>.</p>

<h3 id="2-crea-un-nuovo-sito-hugo">2. Crea un nuovo sito Hugo</h3>

<p>Con il comando:</p>

<pre><code>$ hugo new site nuovo_sito
</code></pre>

<p>Si crea una cartella <em>nuovo_sito</em> con all&rsquo;interno il nuovo progetto.</p>

<h3 id="3-aggiungere-un-tema">3. Aggiungere un tema</h3>

<p>Ora che il progetto è creato si deve entrare nella cartella <em>nuovo_sito</em>, inizializzare git ed aggiungere un tema. Ecco ad esempio l&rsquo;installazione del tema Ananke:</p>

<pre><code>cd nuovo_sito
git init
git submodule add https://github.com/theNewDynamic/gohugo-theme-ananke.git themes/ananke
</code></pre>

<p>Sul sito puoi trovare <a href="https://themes.gohugo.io/" target="_blank">tanti temi</a> creati per diverse tipologie di siti. In quasi tutti i temi trovi le informazioni per l&rsquo;installare, una descrizione del tema ed un esempio.</p>

<p>In generale quando installi un tema, all&rsquo;interno della cartella <code>themes/nome_thema</code> trovi una cartella con il sito esempio. Ciascun tema ha un file di configurazione che contiene una serie di parametri che permettono di configurare il sito.</p>

<h3 id="4-aggiungi-un-contenuto">4. Aggiungi un contenuto</h3>

<p>Puoi aggiungere un primo contenuto con:</p>

<pre><code>hugo new posts/my-first-post.md
</code></pre>

<p>Il nuovo post comincia con alcune righe come sotto dove sono impostati i parametri di base del post. Puoi prendere spunto per questo dal sito di esempio presente nella cartella <code>themes/nome_thema</code>.</p>

<pre><code>---
title: &quot;My First Post&quot;
date: 2021-05-09T08:47:11+01:00
draft: true
---
</code></pre>

<h3 id="5-lancia-il-server">5. Lancia il server</h3>

<p>Per lanciare il server di Hugo usa il comando:</p>

<pre><code>hugo serve -D
</code></pre>

<p>Il -D permette di vedere anche i post in draft. Il sito è <em>servito</em> generlamente su <code>http://localhost:1313/</code>; questo è comunque indicato nell&rsquo;output del comando sopra.</p>

<h2 id="git">GIT</h2>

<p>A questo punto si può <strong>caricare il sito su git</strong> creando un repository per il sito.
La procedura prevede la creazione su github di un repository, quindi l&rsquo;aggiunta dei file del progetto a questo repo.</p>

<p>Questo articolo non riguarda l&rsquo;utilizzo di git quindi questo aspetto lo vedremo in un altro contenuto perchè è uguale per tutti i progetti.</p>

<h2 id="netlify">NETLIFY</h2>

<p>Per questo progetto ho utilizzato per la prima volta <a href="https://www.netlify.com/" target="_blank">netlify</a> nella sua versione gratuita.
Questo servizio ti permette di fare il deploy del sito in modo automatico tutte le volte che il repository viene aggiornato. <strong>netlify</strong> supporta Hugo come generatore di siti statici e quindi quando si aggiorna il repo è il servizio stesso che lancia tutti i comandi di Hugo per <em>costruire</em> il tuo sito.
Netlify in automatico pubblica il sito su <code>nuovo_sito.netlify.com</code>. Ma con qualche semplice impostazione nei record DNS del tuo sito puoi far rispondere il tuo dominio principale <code>nome_sito.it</code>.</p>

<h2 id="conclusione-flusso-di-lavoro">Conclusione: flusso di lavoro</h2>

<p>In conclusione - una volta creato il sito, configurato <em>GIT</em>, configurato <em>NETLIFY</em>, eseguito il primo deploy del sito e verificato che tutto funzioni correttamente - il flusso di lavoro è il seguente:</p>

<ul>
<li><p>Entrare nella cartella con il nuovo sito e fare il pull</p>

<pre><code>git pull
</code></pre></li>

<li><p>Creare un nuovo post</p>

<pre><code>hugo new posts/my-new-post.md
</code></pre></li>

<li><p>Scrivere il post con l&rsquo;editor preferito - io utilizzo visual studio code</p></li>

<li><p>Finito il post fare l&rsquo;add e poi il push sul repository</p>

<pre><code>git add .
git push
</code></pre></li>

<li><p>Dopo qualche minuto Netlify aggiornerà il sito con il nuovo post pubblicato</p></li>
</ul>

<p>Questo mi permette di gestire il sito da praticamente tutti i dispositivi che utilizzo compreso l&rsquo;iPad dove utilizzo l&rsquo;app <em>textastic</em>.</p>
]]></content>
        </item>
        
        <item>
            <title>Sistemi di sviluppo utilizzati</title>
            <link>https://cloudsurfer.netlify.app/posts/2021/05/sistemi-di-sviluppo-utilizzati/</link>
            <pubDate>Sun, 02 May 2021 00:00:00 +0000</pubDate>
            
            <guid>https://cloudsurfer.netlify.app/posts/2021/05/sistemi-di-sviluppo-utilizzati/</guid>
            <description>I miei dispositivi Comincio con una premessa: mi piace cambiare e provare sempre strumenti nuovi sia per il mio lavoro principale che per la programmazione: una passione che in qualche caso si incrocia con il mio lavoro.
Solitamente il mio setup prevede: un macbook (in questo momento utilizzo un air con processore M1, prima avevo un Pro da 16 pollici), un PC Desktop con Windows (il mio principale PC lavorativo), un iPad (in questo momento ho un Pro da 11 pollici prima generazione), un notebook con Linux (solitamente utilizzo Ubuntu con l&amp;rsquo;ultima release disponibile anche se ora sono molto incuriosto da Elementary Os e da Pop!</description>
            <content type="html"><![CDATA[

<h2 id="i-miei-dispositivi">I miei dispositivi</h2>

<p>Comincio con una premessa: mi piace cambiare e provare sempre strumenti nuovi sia per il mio lavoro principale che per la programmazione: una <em>passione</em> che in qualche caso si incrocia con il mio lavoro.</p>

<p>Solitamente il mio setup prevede: un macbook (in questo momento utilizzo un air con processore M1, prima avevo un Pro da 16 pollici), un PC Desktop con Windows (il mio principale PC lavorativo), un iPad (in questo momento ho un Pro da 11 pollici prima generazione), un notebook con Linux (solitamente utilizzo Ubuntu con l&rsquo;ultima release disponibile anche se ora sono molto incuriosto da Elementary Os e da Pop!_OS). Quest&rsquo;ultimo pc è quello che sostituisco più di frequente perchè normalmente sono pc usati che rivendo quando trovo qualcosa che mi piace di più e perchè qualche volta lo sostituisco con macchine virtuali installate su un vecchio server aziendale dismesso dove ho installato <em>PROXMOX</em> come hypervisor.
Fino a poco tempo avevo anche una macchina virtuale Windows 10 su un server aziendale con hypervisor VMWARE da utilizzare da remoto. Ora ho configurato un semplice sistema domotico che mi permette tra le altre cose di accendere da remoto il mio Pc Desktop in ufficio a cui accedere con la VPN aziendale da qualsiasi altro dispositivo.</p>

<p>La cosa che cerco di realizzare è sempre l&rsquo;intercambiabilità tra sistemi in modo che posso fare (quasi) qualsiasi cosa con ognuno dei dispositivi che utilizzo.</p>

<h2 id="i-software-per-la-navigazione">I software per la navigazione</h2>

<p>Come dicevo il mio scopo è quello di poter utilizzare <strong>tutti i dispositivi in modo intercambiabile</strong>.
Uno strumento indispensabile è il <strong>browser</strong>. Quale usare? All&rsquo;inizio preferivo utilizzare lo stesso browser ovunque così da delegare a questo la gestione di preferiti e password (insieme ad un file su una cartella condivisa). Questo sistema però crea un problema: spesso <em>ogni sistema ha il browser ideale</em>. Su Windows mi trovavo bene con <em>chrome</em> mentre ora preferisco <em>edge</em>. Su Linux sicuramente <em>firefox</em> è il più performante mentre su MAC <em>safari</em> è il più veloce (soprattutto nel mio attuale mac con M1). Senza considerare poi che alcuni servizi funzionano meglio su alcuni browser (alcuni servizi aziendali funzionano solamente su chrome o su internet explorer).
Quindi ora ho scelto di installare su ciascun sistema i browser disponibili in modo da poter verificare la risposta dei siti e portali che programmo sui diversi sistemi. Quindi, a seconda della disponibilità nella singola piattaforma, installo: chrome, edge, firefox e safari.</p>

<p>Per i preferiti utilizzo <strong>start.me</strong> che permette di creare una pagina iniziale con i bookmarks suddivisi anche tra diverse tab. Ho utilizzato la versione gratuita per diverso tempo per passare alla versione completa in occasione di una promozione.</p>

<p>Per le password utilizzo <strong>lastpass</strong>. Ne ho provati diversi e questo era quello che dava la versione gratuita più completa. In questo caso sono dovuto passare alla versione a pagamento con le recenti limitazioni al numero di dispositivi introdotte per il servizio gratuito. Una volta provato il sistema di gesione della password è molto difficile rinunciare alla sua comodità. In più aumenta la sicurezza visto che la scelta di password complesse non è più un problema.</p>

<h2 id="i-software-per-la-programmazione">I software per la programmazione</h2>

<p>Il primo software da considerare è il <strong>terminale</strong>. Su Linux e Mac il terminale è sempre presente. Su Mac utilizzo anche <strong>iTerm 2</strong> che permette una forte personalizzazione con <em>oh-my-ZSH</em>. In questo articolo trovi un ottimo tutorial per la personalizzazione: <a href="https://blog.larsbehrenberg.com/the-definitive-iterm2-and-oh-my-zsh-setup-on-macos" target="_blank">iTerm2 e oh-my-zsh</a>.
Su Windows preferisco una terminale <em>linux like</em> e utilizzo <strong>git bash</strong>. Su windows abilito anche WSL2.</p>

<p>Per la gestione e condivisione dei progetti di programmazione tra tutti i dispositivi utilizzo quasi esclusivamente <strong>GIT</strong>.</p>

<p>Come editor di sviluppo installo sempre <strong>VSCODE</strong> e <strong>Sublime Text</strong> (e <strong>Notepad++</strong> dove disponibile). Quello che al momento utilizzo principalmente è VSCODE con alcune estensioni come <em>docker</em>, <em>Laravel Extension Pack</em>, <em>MySQL</em>, <em>Material Icon Theme</em>, &hellip; e qualche altra estensione per toml, .env, javascript, php, css, emmet, &hellip;</p>

<p>Altro software indispensabile è <strong>docker</strong> (e <em>Vagrant</em> anche se ultimamente non utilizzo più Homestead per lo sviluppo con Laravel).</p>

<p>Un discorso a parte va fatto per l&rsquo;ambiente di sviluppo locale che permette di <em>eseguire</em> applicazioni Php e Laravel. Anche in questo caso ho provato molti sistemi LAMP, WAMP, MAMP, &hellip; o ambienti più complessi utilizzando container docker; anche adesso ho generalmente più sistemi installati. Però con Laravel utilizzo quasi esclusivamente <strong>SAIL</strong> presentato con laravel 8 che si basa su containers docker e rende l&rsquo;ambiente molto semplice da gestire. Su Windows utilizzo invece principalmente <strong>Laragon</strong>: super semplice e potente.</p>

<h2 id="i-dati">I dati</h2>

<p>Per i progetti di programmazione, come già detto, utilizzo <strong>GIT</strong>.</p>

<p>Per tutti gli altri dati utilizzo servizi cloud come <strong>Dropbox</strong>, <strong>Google drive</strong> e <strong>Onedrive</strong>. In questo momento, avendo un account aziendale di office365 ,il mio software principale è <em>onedrive</em> sia con il client per i dispositivi in cui è disponibile sia con accesso via web (per Linux).</p>

<h2 id="i-software-indispensabili">I software indispensabili</h2>

<p>Gli altri software che installo sempre sono:
* Office: word, excel, powerpoint, outlook - office365 mi permette di installare tutte le applicazioni desktop su più piattaforme (su Linux utilizzo le webapp).
* Gimp - per l&rsquo;elaborazione delle immagini. Il mio utilizzo è basico.
* Notion - da quando ho scoperto questa applicazione per la gestione della produttività ho spostato tutto quì: agenda, appunti, progetti, note, &hellip; ancora è gratuita con un ottimo di livello di funzioni disponibili
* Teams - utilizzata per tutta la messaggistica aziendale
* Zoom - per le videoconferenze insieme a meet
* OpenOffice e LibreOffice - installo sempre anche un sistema di &ldquo;office&rdquo; free. Su Mac utilizzo anche Pages, Numbers, Keynotes.
* NordVPN - per la sicurezza in mobilità una VPN è, secondo me, fondamentale. Al momento ho l&rsquo;abbonamento a questo servizio. In più installo il client per il collegamento alla VPN aziendale
* Lastpass - per la gestione delle password (come app e/o come estensione dei browser)
* Microsoft Desktop remoto - su Linux, a seconda della distro, utilizzo un sistema RDP alternativo
* Sistema gestionale aziendale
* EXTRA: Adobe Cloud - non è una indispensabile ma da un paio di anni ho un abbonamento ad adobe cloud che mi permette di utilizzare le app desktop (sui sistemi supportati) come Photoshop, Illustrator, Acrobat DC, InDesign, &hellip; . L&rsquo;applicazione che utilizzo maggiormente è Acrobat DC soprattutto per lavoro, per la modifica di documentazione aziendale.</p>

<h2 id="conclusione">Conclusione</h2>

<p>Naturalmente i diversi dispositivi che utilizzo hanno installati diversi altri software che utilizzo per scopi particolari o che semplicemente ho installato per provare. Cerco di mantenere sempre i sistemi il più puliti possibili disinstallando i programmi che non utilizzo. Qualche volta però <em>mi scappa la mano</em> e se la situazione non è più gestibile, faccio un backup e riparto da zero.</p>

<p>Le configurazioni sopra descritte sono quelle di partenza quando configuro un nuovo terminale. Da li poi ciascuno prende <em>una sua strada</em> a seconda anche dell&rsquo;utilizzo specifico: solo lavoro, solo personale, lavoro e personale, svago, &hellip;</p>
]]></content>
        </item>
        
    </channel>
</rss>
