avatar

Come funziona il routing in Ionic 6 @ Serena Sensini | Giovedì 28 Aprile 2022 | 6 minuti

 

Una parte fondamentale dello sviluppo di app Ionic è configurare il routing e garantire una navigazione fluida tra le pagine.

 

In questo articolo andiamo ad analizzare le differenze e diversi esempi di come sfruttare il routing in Ionic!

 

Cos’è

 

Per spiegarne il funzionamento, facciamo riferimento agli strumenti messi a disposizione da Angular come l’oggetto Router, anche se molto dipende dalla tecnologia che usiamo insieme a Ionic.

 

Angular fornisce il modulo RouterModule che contiene tutti gli strumenti di cui avremo bisogno per configurare la nostra applicazione in modo tale da mostrare una diversa view a seconda dell’indirizzo digitato nella barra del browser.

 

Come funziona

 

Prima di continuare con la spiegazione, apriamo però un momento il file index.html presente nella cartella src di una qualsiasi app in Ionic, di cui qui riportiamo un esempio:

 

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="utf-8" />
  <title>Ionic App</title>

  <base href="/" />

  <meta name="color-scheme" content="light dark" />
  <meta name="viewport" content="viewport-fit=cover, width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no" />
  <meta name="format-detection" content="telephone=no" />
  <meta name="msapplication-tap-highlight" content="no" />

  <link rel="icon" type="image/png" href="assets/icon/favicon.png" />

  <!-- add to homescreen for ios -->
  <meta name="apple-mobile-web-app-capable" content="yes" />
  <meta name="apple-mobile-web-app-status-bar-style" content="black" />
</head>

<body>
  <app-root></app-root>
</body>

</html>

 

Come possiamo notare dal frammento di codice riportato sopra, immediatamente dopo l’elemento </em> è presente un elemento <em><base href="/"></em> avente un attributo <em>href</em> impostato al valore <em>’/’</em>.</p> <p> </p> <p>Con questa proprietà andiamo ad indicare l’URL di base rispetto al quale sono relativi tutti i <em>path</em> utilizzati dell’applicazione e si tratta di un elemento necessario.</p> <p> </p> <p>Infatti nelle versioni di Angular successive alla 2 la strategia predefinita per comporre le <em>route</em> prende il nome contenuto in <em>PathLocationStrategy</em> e si avvale della <a href="https://developer.mozilla.org/en-US/docs/Web/API/History_API">History API</a> per gestirne lo storico, ossia il meccanismo con cui gestire lo storico della sessione del browser.</p> <p> </p> <p>Se avessimo cambiato il valore dell’attributo <em>href</em> dell’elemento <em><base></em>, per esempio <em><base href="/la-mia-app"></em>, la pagina iniziale della nostra applicazione sarebbe stata mostrata partendo dall’indirizzo <em>http://localhost:4200/la-mia-app/</em>.</p> <p> </p> <p>Questo significa di conseguenza che tutti gli altri percorsi sarebbero stati automaticamente costruiti a partire dalla base fornita, e quindi per esempio <em>http://localhost:4200/la-mia-app/my-route</em>.</p> <p> </p> <h1 id="esempi">Esempi</h1> <p> </p> <h2 id="creazione-di-una-nuova-pagina">Creazione di una nuova pagina</h2> <p> </p> <p>Quando aggiungi una nuova pagina al tuo progetto Ionic, questa viene automaticamente aggiunta alla configurazione di <em>routing</em> all’interno di <em>app-routing.module.ts,</em> come visibile nella penultima riga della seguente immagine:</p> <p> </p> <p><img src="/img/Immagine-2022-04-12-113735.png" alt="Esempio di creazione di una pagina in Ionic"> Esempio di creazione di una pagina in Ionic</p> <p> </p> <p>Questo significa che potremo utilizzare la route definita all’interno del file di <em>routing</em> in qualsiasi altra pagina per navigarne il contenuto.</p> <p> </p> <h2 id="utilizzo-di-una-pagina-esistente">Utilizzo di una pagina esistente</h2> <p> </p> <p>Puoi utilizzare la stessa pagina in più posizioni assicurandoti che esista un percorso per essa da tali posizioni.</p> <p> </p> <p>Ad esempio, se desideri che la pagina “<em>Dettaglio</em>” sia accessibile all’interno di <em>Tab1</em> della tua applicazione e <em>Tab2,</em> devi avere una dichiarazione del path /<em>detail</em> nel router del file <em>app-routing.module.ts</em> sia per <em>Tab1</em> che per <em>Tab2</em>.</p> <p> </p> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-typescript" data-lang="typescript"><span style="display:flex;"><span><span style="color:#66d9ef">import</span> { <span style="color:#a6e22e">NgModule</span> } <span style="color:#66d9ef">from</span> <span style="color:#e6db74">'@angular/core'</span>; </span></span><span style="display:flex;"><span><span style="color:#66d9ef">import</span> { <span style="color:#a6e22e">RouterModule</span>, <span style="color:#a6e22e">Routes</span> } <span style="color:#66d9ef">from</span> <span style="color:#e6db74">'@angular/router'</span>; </span></span><span style="display:flex;"><span><span style="color:#66d9ef">const</span> <span style="color:#a6e22e">routes</span>: <span style="color:#66d9ef">Routes</span> <span style="color:#f92672">=</span> </span></span><span style="display:flex;"><span> [ { <span style="color:#a6e22e">path</span><span style="color:#f92672">:</span> <span style="color:#e6db74">'detail'</span>, <span style="color:#a6e22e">component</span>: <span style="color:#66d9ef">DetailPage</span>}, </span></span><span style="display:flex;"><span>{ <span style="color:#a6e22e">path</span><span style="color:#f92672">:</span> <span style="color:#e6db74">'tab1'</span>, <span style="color:#a6e22e">component</span>: <span style="color:#66d9ef">Tab1Component</span>}, </span></span><span style="display:flex;"><span>... </span></span></code></pre></div><p> </p> <h2 id="utilizzare-routerlink">Utilizzare routerLink</h2> <p> </p> <p>Quando cerchiamo di andare verso un’altra pagina tramite un pulsante o un qualsiasi altro elemento, possiamo utilizzare la proprietà <em>routerLink</em> specificando la pagina o il percorso che deve portarci ad una pagina diversa.</p> <p> </p> <blockquote> <p>Se questa istruzione non funzionasse e generasse un errore, assicurarati che il modulo <em>RouterModule</em> sia incluso nel modulo delle tue pagine!</p> </blockquote> <p> </p> <p>Nell’esempio seguente, analizziamo un caso d’uso e facciamo in modo che l’utente venga rimandato alla pagina <em>detail</em> di un prodotto (e lo specifichiamo grazie all’ID dell’oggetto) quando clicca sull’elemento <em>ion-item</em>.</p> <p> </p> <pre tabindex="0"><code class="language-markup" data-lang="markup"><ion-item [routerLink]="'/detail/' + item.id" routerDirection="forward" ></ion-item> </code></pre><p> </p> <p>In questo modo, avvieremo <em>DetailPage</em> e le forniremo un parametro <em>id</em> <em>route,</em> che potremo anche utilizzare all’interno del componente.</p> <p> </p> <p>Questo è in qualche modo molto <em>vantaggioso</em> perché significa che non è sempre necessario impostare un’associazione di eventi e coinvolgere il <em>NavController</em> ogni volta che si desidera passare a un’altra pagina fornendo dei dati.</p> <p> </p> <p>Si noti inoltre che sempre nell’esempio forniamo un <em>routerDirection</em> per indicare se si tratta di una navigazione in avanti o indietro in modo che l’animazione di transizione dello schermo possa essere applicata correttamente.</p> <p> </p> <blockquote> <p>Se questo non viene fornito, Ionic <em>indovinerà</em> quale animazione dovrebbe utilizzare, ma è meglio essere espliciti.</p> </blockquote> <p> </p> <p>Analizziamo ora il file <em>app-routing.module.ts</em>:</p> <p> </p> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-typescript" data-lang="typescript"><span style="display:flex;"><span><span style="color:#66d9ef">import</span> { <span style="color:#a6e22e">NgModule</span> } <span style="color:#66d9ef">from</span> <span style="color:#e6db74">'@angular/core'</span>; </span></span><span style="display:flex;"><span><span style="color:#66d9ef">import</span> { <span style="color:#a6e22e">RouterModule</span>, <span style="color:#a6e22e">Routes</span> } <span style="color:#66d9ef">from</span> <span style="color:#e6db74">'@angular/router'</span>; </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span><span style="color:#66d9ef">const</span> <span style="color:#a6e22e">routes</span>: <span style="color:#66d9ef">Routes</span> <span style="color:#f92672">=</span> [ </span></span><span style="display:flex;"><span> { </span></span><span style="display:flex;"><span> <span style="color:#a6e22e">path</span><span style="color:#f92672">:</span> <span style="color:#e6db74">''</span>, </span></span><span style="display:flex;"><span> <span style="color:#a6e22e">component</span>: <span style="color:#66d9ef">HomeComponent</span> </span></span><span style="display:flex;"><span> }, </span></span><span style="display:flex;"><span> { </span></span><span style="display:flex;"><span> <span style="color:#a6e22e">path</span><span style="color:#f92672">:</span> <span style="color:#e6db74">'saldi'</span>, </span></span><span style="display:flex;"><span> <span style="color:#a6e22e">component</span>: <span style="color:#66d9ef">SaldiComponent</span> </span></span><span style="display:flex;"><span> }, </span></span><span style="display:flex;"><span> { </span></span><span style="display:flex;"><span> <span style="color:#a6e22e">path</span><span style="color:#f92672">:</span> <span style="color:#e6db74">'sconti'</span>, </span></span><span style="display:flex;"><span> <span style="color:#a6e22e">redirectTo</span>: <span style="color:#66d9ef">SaldiComponent</span> </span></span><span style="display:flex;"><span> }, </span></span><span style="display:flex;"><span> { </span></span><span style="display:flex;"><span> <span style="color:#a6e22e">path</span><span style="color:#f92672">:</span> <span style="color:#e6db74">'not-authorized'</span>, </span></span><span style="display:flex;"><span> <span style="color:#a6e22e">component</span>: <span style="color:#66d9ef">UnauthorizedComponent</span>, </span></span><span style="display:flex;"><span> }, </span></span><span style="display:flex;"><span> { </span></span><span style="display:flex;"><span> <span style="color:#a6e22e">path</span><span style="color:#f92672">:</span> <span style="color:#e6db74">'not-found'</span>, </span></span><span style="display:flex;"><span> <span style="color:#a6e22e">component</span>: <span style="color:#66d9ef">ErrorComponent</span>, </span></span><span style="display:flex;"><span> }, </span></span><span style="display:flex;"><span> { </span></span><span style="display:flex;"><span> <span style="color:#a6e22e">path</span><span style="color:#f92672">:</span> <span style="color:#e6db74">'**'</span>, </span></span><span style="display:flex;"><span> <span style="color:#a6e22e">redirectTo</span><span style="color:#f92672">:</span> <span style="color:#e6db74">'/not-found'</span>, </span></span><span style="display:flex;"><span> <span style="color:#a6e22e">data</span><span style="color:#f92672">:</span> { </span></span><span style="display:flex;"><span> <span style="color:#a6e22e">title</span><span style="color:#f92672">:</span> <span style="color:#e6db74">'Pagina non trovata'</span> </span></span><span style="display:flex;"><span> } </span></span><span style="display:flex;"><span> } </span></span><span style="display:flex;"><span>]; </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span><span style="color:#66d9ef">@NgModule</span>({ </span></span><span style="display:flex;"><span> <span style="color:#a6e22e">imports</span><span style="color:#f92672">:</span> [ </span></span><span style="display:flex;"><span> <span style="color:#a6e22e">RouterModule</span>.<span style="color:#a6e22e">forRoot</span>(<span style="color:#a6e22e">routes</span>) </span></span><span style="display:flex;"><span> ], </span></span><span style="display:flex;"><span> <span style="color:#a6e22e">exports</span><span style="color:#f92672">:</span> [ </span></span><span style="display:flex;"><span> <span style="color:#a6e22e">RouterModule</span> </span></span><span style="display:flex;"><span> ], </span></span><span style="display:flex;"><span> <span style="color:#a6e22e">declarations</span><span style="color:#f92672">:</span> [] </span></span><span style="display:flex;"><span>}) </span></span><span style="display:flex;"><span><span style="color:#66d9ef">export</span> <span style="color:#66d9ef">class</span> <span style="color:#a6e22e">AppRoutingModule</span> { } </span></span></code></pre></div><p> </p> <p>Ciascun oggetto ha una proprietà <em>path</em> pari al percorso in corrispondenza del quale vogliamo venga mostrato un certo componente che indichiamo con la proprietà component.</p> <p> </p> <p>Nell’esempio ci sono poi degli oggetti leggermente diversi dagli altri. Notate infatti che nell’ultimo oggetto dell’array abbiamo assegnato il simbolo ‘**’ alla proprietà <em>path</em>.</p> <p> </p> <p>Si tratta della cosiddetta <em>wildcard</em> <em>route</em>, una sorta di percorso jolly che intercetta qualsiasi URL.</p> <p> </p> <p>È bene sottolineare una proprietà importante da tenere in mente quando si definisce l’oggetto <em>Routes:</em> infatti <strong>l’ordine</strong> in cui vengono inseriti i diversi oggetti di tipo <em>Route</em> nell’array è <strong>rilevante!</strong></p> <p> </p> <p>Il Router di Angular, dovendo decidere quale componente mostrare in corrispondenza di un certo percorso, inizia a scorrere l’array dal primo oggetto e si ferma non appena ne trova uno con una proprietà ‘<em>path</em>’ che corrispone al percorso.</p> <p> </p> <p>Per questo motivo è necessario inserire l’oggetto avente la <em>wildcard</em> route come proprietà <em>path</em> alla fine dell’array altrimenti verrebbero individuati tutti i percorsi e verrebbe sempre mostrato il componente <em>PageNotFoundComponent</em>.</p> <p> </p> <p>Abbiamo poi usato nel file di <em>routing</em> un altro oggetto con una proprietà <em>redirectTo</em> che fa in modo di redirigere il browser all’indirizzo con percorso pari a ‘/<em>saldi</em>’ ogni volta che si accede al percorso ‘/<em>sconti</em>’.</p> <p> </p> <h2 id="utilizzo-di-router">Utilizzo di Router</h2> <p> </p> <p>Per navigare in modo programmatico attraverso le diverse pagine, è possibile utilizzare il <a href="https://angular.io/api/router/Router">Router</a> standard di Angular nelle tue pagine e chiamando uno di questi metodi:</p> <p> </p> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-typescript" data-lang="typescript"><span style="display:flex;"><span>... </span></span><span style="display:flex;"><span><span style="color:#66d9ef">this</span>.<span style="color:#a6e22e">router</span>.<span style="color:#a6e22e">navigateByUrl</span>(<span style="color:#e6db74">'/login'</span>); </span></span><span style="display:flex;"><span><span style="color:#66d9ef">this</span>.<span style="color:#a6e22e">router</span>.<span style="color:#a6e22e">navigate</span>([<span style="color:#e6db74">'/detail'</span>, { <span style="color:#a6e22e">id</span>: <span style="color:#66d9ef">itemId</span> }]); </span></span><span style="display:flex;"><span>... </span></span></code></pre></div><p> </p> <p>Il primo naviga in maniera puntuale verso una pagina ed è l’equivalente di <em>routerLink</em>, ma questo può essere utilizzato all’interno del file *<em>.ts.</em></p> <p> </p> <blockquote> <p>Per poterlo questa modalità di routing in Ionic, è necessario importarlo nel <em>constructor</em> del componente/servizio che utilizziamo!</p> </blockquote> <p> </p> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-typescript" data-lang="typescript"><span style="display:flex;"><span><span style="color:#66d9ef">class</span> <span style="color:#a6e22e">MyComponent</span> { </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">constructor</span>(<span style="color:#a6e22e">router</span>: <span style="color:#66d9ef">Router</span>) { </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">this</span>.<span style="color:#a6e22e">router</span>.<span style="color:#a6e22e">navigateByUrl</span>(...); </span></span><span style="display:flex;"><span> } </span></span><span style="display:flex;"><span>} </span></span></code></pre></div><p> </p> <p>La funzione <em>navigate</em> permette invece di creare un nuovo URL applicando quanto passato nell’array, con la possibilità di aggiungere dei parametri extra, come l’ID che viaggerà insieme all’indirizzo della <em>route</em> e potrà essere utilizzato nel componente di destinazione.</p> <p> </p> <h2 id="utilizzo-di-navcontroller">Utilizzo di NavController</h2> <p> </p> <p>Il modo migliore per navigare a livello di codice in un’applicazione Ionic o Angular è utilizzare <a href="https://ionicframework.com/docs/angular/navigation"><em>NavController</em></a>.</p> <p> </p> <p>Questo è in realtà abbastanza simile al modo in cui avresti utilizzato il <em>routerLink</em> per navigare da una pagina all’altra specificando la direzione, tranne per il fatto che ora hai tutto all’interno di uno di questi metodi, come mostrato di seguito:</p> <p> </p> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-typescript" data-lang="typescript"><span style="display:flex;"><span><span style="color:#66d9ef">this</span>.<span style="color:#a6e22e">navCtrl</span>.<span style="color:#a6e22e">navigateForward</span>(<span style="color:#e6db74">'/my-route'</span>); </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span><span style="color:#66d9ef">this</span>.<span style="color:#a6e22e">navCtrl</span>.<span style="color:#a6e22e">navigateBack</span>(<span style="color:#e6db74">'/my-route'</span>); </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span><span style="color:#66d9ef">this</span>.<span style="color:#a6e22e">navCtrl</span>.<span style="color:#a6e22e">navigateRoot</span>(<span style="color:#e6db74">'/my-route'</span>); </span></span></code></pre></div><p> </p> <p>Il vantaggio dell’utilizzo di <em><a href="https://ionicframework.com/docs/angular/navigation">NavController</a></em> per navigare è che consente di specificare una “<em>direzione</em>” per la navigazione attraverso la funzione, che aiuterà <<em>ion-router-outlet></em> di Ionic a visualizzare correttamente la transizione della pagina.</p> <p> </p> <blockquote> <p>Che viaggio quello nel mondo dei router!</p> </blockquote> <p> </p> <h1 id="risorse-utili">Risorse utili</h1> <ul> <li><a href="https://amzn.to/3JxJSQ6">Manuale Ionic in italiano</a></li> <li><a href="https://ionicframework.com/docs/v5/studio/guides/routing-and-navigation">Routing in Ionic nella doc ufficiale</a></li> </ul> <p> </p> <h1>Ti potrebbe interessare anche... </h1> <ul> <li class="relatedPost"> <a href="/ionic/creare-una-direttiva-con-ionic/">Creare una direttiva con Ionic</a><br /> </li> <li class="relatedPost"> <a href="/aws/hosting-con-aws/">Hosting con S3 e Route 53 per Angular</a><br /> </li> <li class="relatedPost"> <a href="/fare-economia-con-angular/">Fare economia con Angular</a><br /> </li> </ul> </article> </section> <article class="ui segment utterances-comments" data-html2canvas-ignore> <script src="https://utteranc.es/client.js" repo="g1eny0ung/g1eny0ung.github.io" issue-term="og:title" theme="github-light" crossorigin="anonymous" async> </script> </article> </div> </div> <footer class="ui basic center aligned segment" style="background-color: transparent;"> <span class="dream-share"> <a href="https://twitter.com/theredcode_it" title="Twitter" target="_blank"> <i class="twitter icon"></i> </a> <a href="https://www.facebook.com/theredcode.it" title="Facebook" target="_blank"> <i class="facebook icon"></i> </a> <a href="https://www.linkedin.com/company/theredcode-it" title="LinkedIn" target="_blank"> <i class="linkedin icon"></i> </a> <a href="https://www.instagram.com/theredcode_it/" title="Instagram" target="_blank"> <i class="instagram icon"></i> </a> <a href="https://www.patreon.com/theredcode_it" title="Patreon" target="_blank"> <i class="patreon icon"></i> </a> <a href="https://www.paypal.com/donate/?hosted_button_id=L6PFB4KQ5W6WG" title="PayPal" target="_blank"> <i class="paypal icon"></i> </a> </span> <p>© 2021 - 2022 TheRedCode | <a href="/cookie" title="Cookie Policy"> Cookie Policy </a> </p> </footer> </div> </section> <section class="back"> <div class="dream-max-width"> <header class="ui basic very padded segment dream-header"> <div class="ui image"> <a href="/"> <img src="/img/theRedCode_logo_xl.png" alt="avatar" /> </a> <div class="subheader content"> <h1 class="ui large header main-header"> <span class="sub header" id="motto"> </span> </h1> </div> </div> </header> <div class="ui relaxed grid dream-grid dream-back"> <div class="sixteen wide mobile eight wide tablet four wide computer column dream-column"> <article class="ui segment"> <div class="ui medium header">Social</div> <nav class="ui secondary menu dream-menu dream-socials"> <a class="item" href="/index.xml"> <i class="large rss square icon" title="RSS"></i> </a> <a class="item" href="mailto:info@theredcode.it"> <i class="large mail icon" title="Email"></i> </a> <a class="item" href="https://twitter.com/theredcode_it" target="_blank"> <i class="large twitter icon" title="Twitter"></i> </a> <a class="item" href="https://facebook.com/theredcode.it" target="_blank"> <i class="large facebook icon" title="Facebook"></i> </a> <a class="item" href="https://instagram.com/theredcode.it" target="_blank"> <i class="large instagram icon" title="Instagram"></i> </a> <a class="item" href="https://www.linkedin.com/in/theredcode-it" target="_blank"> <i class="large linkedin icon" title="Linkedin"></i> </a> <a class="item" href="https://github.com/serenasensini/" target="_blank"> <i class="large github icon" title="GitHub"></i> </a> <a class="item" href="https://twitter.com/g1eny0ung" target="_blank"> <i class="large twitter icon" title="Twitter"></i> </a> <a class="item" href="https://facebook.com/g1eny0ung" target="_blank"> <i class="large facebook icon" title="Facebook"></i> </a> <a class="item" href="https://instagram.com/g1eny0ung" target="_blank"> <i class="large instagram icon" title="Instagram"></i> </a> <a class="item" href="https://www.linkedin.com/in/g1eny0ung" target=""> <i class="large linkedin icon" title="Linkedin"></i> </a> <a class="item" href="https://github.com/g1eny0ung" target="_blank"> <i class="large github icon" title="GitHub"></i> </a> <a class="item" href="https://stackoverflow.com/users/5676489/g1eny0ung" target="_blank"> <i class="large stack overflow icon" title="stack overflow"></i> </a> </nav> </article> </div> <div class="sixteen wide mobile eight wide tablet four wide computer column dream-column"> </div> </div> </div> </section> </div> </div> <script src="https://cdn.jsdelivr.net/npm/jquery@3.6.0" integrity="sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4=" crossorigin="anonymous"></script> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> </head> <body> <script> window.store = { "https:\/\/theredcode.it\/categories\/": { "title": "Categories", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/categories\/" }, "https:\/\/theredcode.it\/openshift\/deployment-vs-deploymentconfig\/": { "title": "Differenze tra Deployment e DeploymentConfig", "tags": ["openshift","kubernetes",], "content": "Gli oggetti Deployment e DeploymentConfig in OpenShift forniscono due metodi simili ma diversi per gestire in maniera precisa il comportamento delle applicazioni. I due oggetti, spesso confusi, hanno grandi differenze nella loro esecuzione e gestione: quali?\nAndiamo ad analizzare nel dettaglio questi due controller!\nCosa vedrai DeploymentConfig Deployment ReplicaSet vs ReplicationController Risorse utili DeploymentConfig Gli oggetti di tipo DeploymentConfig coinvolgono uno o più Replication Controllers, ossia delle risorse che contengono un point-in-time dello stato di uno o più pod, di cui ne gestiscono peraltro la numerosità.\nSarà proprio il Replication controllers ad assicurarsi che il numero specificato di pod siano in esecuzione; qualora un pod venisse eliminato o andasse in errore, sarà sua cura istanziarne uno in sostituzione.\nLa cosa interessante è la possibilità di gestire le versioni dell\u0026rsquo;applicazione per supportare i rollback manualmente o automaticamente in caso di un deploy che fallisce, oltre alla possibilità di catturare ogni cambiamento alla configurazione dell\u0026rsquo;oggetto attraverso un trigger: questo fa sì che una modifica all\u0026rsquo;environment del DeploymentConfig o delle sue risorse, produca una nuova versione.\nNon a caso, i DeploymentConfig creano dei Replication Controller i cui nomi riportano la versione di riferimento: se, ad esempio, il DeploymentConfig si chiama mongodb, il suo Replication Controller si chiamerà mongodb-1, perché fa riferimento al rollout (o versione) numero 1.\nQuando crei un oggetto DeploymentConfig, viene creato un Replication Controller che rappresenta il modello pod dell\u0026rsquo;oggetto DeploymentConfig.\nSe il DeploymentConfig cambia, viene creato un nuovo Replication Controller con il template aggiornato e viene eseguito un processo di deploy che porti a termine la precedente versione del Replication Controller, per avviare quello nuovo.\nEsempio di DeploymentConfig apiVersion: v1 kind: DeploymentConfig metadata: name: frontend spec: replicas: 5 selector: name: frontend template: { ... } triggers: - type: ConfigChange - imageChangeParams: automatic: true containerNames: - helloworld from: kind: ImageStreamTag name: hello-openshift:latest type: ImageChange strategy: type: Rolling Esempio di Replication Controller apiVersion: v1 kind: ReplicationController metadata: name: frontend-1 spec: replicas: 1 selector: name: frontend template: metadata: labels: name: frontend spec: containers: - image: openshift/hello-openshift name: helloworld ports: - containerPort: 8080 protocol: TCP restartPolicy: Always Deployment Allo stesso modo, gli oggetti di tipo Deployment lavorano grazie a degli oggetti chiamati Replica Set, i quali rappresentano un successore dei ReplicationController.\nSimile a un Replication controller, un ReplicaSet è un oggetto API nativo di Kubernetes che garantisce che un numero specificato di pod sia in esecuzione in un dato momento.\nI ReplicaSet possono essere usati in modo indipendente, ma vengono usati dai Deployment per gestire la creazione, l\u0026rsquo;eliminazione e gli aggiornamenti dei pod. I Deployment gestiscono automaticamente i ReplicaSet, motivo per cui non andrebbero utilizzati come oggetti a sé stanti.\nIl vantaggio dell\u0026rsquo;utilizzo dei Deployment è che supportano il rollback automatico all\u0026rsquo;ultimo ReplicaSet che ha avuto esito positivo nel deploy in caso di errore; questo vuol dire che se viene avviata una nuova versione del ReplicaSet, in caso quest\u0026rsquo;ultima vada in errore, sarà possibile sfruttare la versione precedente che verrà riavviata in maniera automatica.\nEsempio di Deployment apiVersion: apps/v1 kind: Deployment metadata: name: hello-openshift spec: replicas: 1 selector: matchLabels: app: hello-openshift template: metadata: labels: app: hello-openshift spec: containers: - name: hello-openshift image: openshift/hello-openshift:latest ports: - containerPort: 80 Esempio di ReplicaSet apiVersion: apps/v1 kind: ReplicaSet metadata: name: frontend-1 labels: tier: frontend spec: replicas: 3 selector: matchExpressions: - {key: tier, operator: In, values: [frontend]} template: metadata: labels: tier: frontend spec: containers: - image: openshift/hello-openshift name: helloworld ports: - containerPort: 8080 protocol: TCP restartPolicy: Always ReplicaSet vs ReplicationController La differenza tra un ReplicaSet e un Replication Controller sta nel fatto che il primo supporta la possibilità di gestire i selettori sulla base di alcune espressioni che ne controllino il match, mentre nel caso del Replication controller viene utilizzato un selettore che si basi sull\u0026rsquo;uguaglianza.\nIn altre parole, nel ReplicaSet ci possiamo aspettare una label come matchExpressions che riporta i criteri per individuare i pod sulla base di una chiave, un operatore e dei valori.\nNel primo caso di esempio, la chiave è tier, l\u0026rsquo;operatore è In (verifica l\u0026rsquo;esistenza in un insieme definito) e i valori sono espressi tramite un array pari a frontend.\nNel secondo caso, si esprime una label la cui chiave tier deve matchare il valore frontend.\nEsempio di ReplicaSet con matchExpressions apiVersion: apps/v1 kind: ReplicaSet metadata: name: frontend-1 labels: tier: frontend spec: replicas: 3 selector: matchExpressions: - {key: tier, operator: In, values: [frontend]} ... Esempio di ReplicaSet con matchLabels apiVersion: apps/v1 kind: ReplicaSet metadata: name: frontend-1 labels: tier: frontend spec: replicas: 3 selector: matchLabels: tier: frontend ... Il campo .spec.selector rappresenta un selettore di etichette. Un ReplicationController gestisce tutti i pod con label che corrispondono al selettore. Non fa distinzione tra pod creati o eliminati e pod creati o eliminati da un\u0026rsquo;altra persona o processo. Ciò consente di sostituire ReplicationController senza influire sui pod in esecuzione.\nEsempio di ReplicationController apiVersion: v1 kind: ReplicationController metadata: name: frontend-1 spec: replicas: 1 selector: name: frontend template: metadata: labels: name: frontend ... Risorse utili Docker Canale di Emmecilab Se ti è piaciuto questo articolo, non ti dimenticare di commentare e condividere! ⬇️\n ", "url": "https:\/\/theredcode.it\/openshift\/deployment-vs-deploymentconfig\/" }, "https:\/\/theredcode.it\/tags\/kubernetes\/": { "title": "kubernetes", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/tags\/kubernetes\/" }, "https:\/\/theredcode.it\/categories\/kubernetes\/": { "title": "kubernetes", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/categories\/kubernetes\/" }, "https:\/\/theredcode.it\/tags\/openshift\/": { "title": "openshift", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/tags\/openshift\/" }, "https:\/\/theredcode.it\/categories\/openshift\/": { "title": "openshift", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/categories\/openshift\/" }, "https:\/\/theredcode.it\/posts\/": { "title": "Posts", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/posts\/" }, "https:\/\/theredcode.it\/tags\/": { "title": "Tags", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/tags\/" }, "https:\/\/theredcode.it\/": { "title": "TheRedCode", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/" }, "https:\/\/theredcode.it\/database\/compressione-con-sql-server\/": { "title": "Compressione con SQL Server", "tags": ["database",], "content": "Cosa vedrai Definizione di compressione Come funziona Risorse utili Definizione di compressione L\u0026rsquo;attività di compressione o shrink di un database consiste nel ridurre le dimensioni dei dati del database e dei file di registro.\nCome funziona Come mostrato nella figura seguente, per eseguirlo dobbiamo cliccare con il tasto destro sul database, scegliere \u0026ldquo;Attività\u0026rdquo;\u0026gt;\u0026ldquo;Compatta\u0026rdquo; e selezionare un\u0026rsquo;opzione tra database e file.\nLa prima consente di eseguire lo shrink di tutto quello che rappresenta il database, compresi i file di log; nel caso della voce \u0026ldquo;file\u0026rdquo;, posso scegliere quale file -dati o log- andare a compattare.\nCompressione tramite SQL Server Management Studio\nSi aprirà una finestra nella quale vengono riportate le informazioni sul database scelto, sulla dimensione attuale (alias spazio allocato) e sulla dimensione che è possibile risparmiare dopo la compressione (alias spazio disponibile):\nDimensioni dopo la compressione\n Nel caso di una database vuoto, come questo, la dimensione rimarrà la stessa: come visto nell\u0026rsquo;articolo riguardante i report, viene riservato uno spazio di 16MB come minimo per un database, dove si hanno 8 MB per i dati e 8 MB per i log.\n Risorse utili Documentazione ufficiale Basi di Dati Se ti è piaciuto questo articolo, non ti dimenticare di commentare e condividere! ⬇️\n ", "url": "https:\/\/theredcode.it\/database\/compressione-con-sql-server\/" }, "https:\/\/theredcode.it\/tags\/database\/": { "title": "database", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/tags\/database\/" }, "https:\/\/theredcode.it\/categories\/database\/": { "title": "database", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/categories\/database\/" }, "https:\/\/theredcode.it\/database\/amazon-aurora-perche-usarlo\/": { "title": "Amazon Aurora: perché usarlo", "tags": ["database",], "content": "Cosa vedrai Amazon Aurora Storage Serverless o provisioned Costi Limiti Risorse utili Amazon Aurora Amazon Aurora è un servizio definito database-as-a-service fully-managed: questo significa che è gestito in tutto e per tutto da AWS per ciò che concerne monitoraggio, scaling e storage, con piena compatibilità MySQL e PostgreSQL.\nRisorse utili Documentazione ufficiale Basi di Dati Se ti è piaciuto questo articolo, non ti dimenticare di commentare e condividere! ⬇️\n ", "url": "https:\/\/theredcode.it\/database\/amazon-aurora-perche-usarlo\/" }, "https:\/\/theredcode.it\/database\/ripristino-con-sql-server\/": { "title": "Ripristino con SQL Server", "tags": ["database",], "content": "Cosa vedrai Definizione di ripristino Come funziona Risorse utili Definizione di ripristino Come funziona Cliccando con il destro sulla voce \u0026ldquo;Database\u0026rdquo;, vedremo l\u0026rsquo;opzione \u0026ldquo;Ripristina database\u0026rdquo;:\nOpzione per ripristinare un database\nQuesta andrà ad aprire una finestra che ci permetterà di definire le opzioni di ripristino.\nFinestra per ripristinare un database\nPrima di tutto, nella sezione \u0026ldquo;Origine\u0026rdquo; possiamo scegliere quale database ripristinare: nell\u0026rsquo;elenco presente nel menù a tendina verranno mostrati tutti i database i cui backup si trovano sotto la cartella di default:\nDatabase presenti nella cartella predefinita dei backup\nCartella predefinita per il salvataggio dei backup\nSelezionando la voce \u0026ldquo;Dispositivo\u0026rdquo;, possiamo invece scegliere di andare a recuperare la nostra copia altrove: su un disco differente, su un server dove abbiamo accesso tramite FTP\u0026hellip;\nNella sezione \u0026ldquo;Destinazione\u0026rdquo;, scegliamo dove andare ad eseguire il ripristino del database: in questo caso, se lasciamo che esegua il ripristino sul database creato in precedenza, quest\u0026rsquo;ultimo verrà totalmente sovrascritto.\nDestinazione per il ripristino del database\nL\u0026rsquo;opzione \u0026ldquo;Ripristina fino a\u0026rdquo; ci permette di selezionare l\u0026rsquo;intervallo di tempo che fa da riferimento per il backup da ripristinare:\nScelta dell\u0026rsquo;intervallo di tempo del ripristino del database\nNel caso della figura precedente, il backup è stato eseguito accodando più copie sullo stesso file ad intervalli orari diversi: possiamo quindi scegliere quale vogliamo andare a ripristinare seguendo la linea temporale in figura.\n Per rivedere il concetto di backup e accodamento, leggi l\u0026rsquo;articolo!\n Se invece il ripristino deve avvenire su un nuovo database, è sufficiente cambiare il nome del database di destinazione:\nNuova destinazione per il ripristino del database\nRisorse utili Documentazione ufficiale Basi di Dati Se ti è piaciuto questo articolo, non ti dimenticare di commentare e condividere! ⬇️\n ", "url": "https:\/\/theredcode.it\/database\/ripristino-con-sql-server\/" }, "https:\/\/theredcode.it\/database\/report-di-sql-server\/": { "title": "Report di SQL Server", "tags": ["database",], "content": "Mai sentito parlare di strumenti di Business Intelligence?\nI report vengono creati a partire da alcune query eseguite su un determinato database per l\u0026rsquo;analisi e la gestione del database.\nLa maggior parte delle applicazioni aziendali viene fornita con uno strumento di reporting integrato, che è un\u0026rsquo;interfaccia front-end che richiama le query del database back-end. In questo caso, andremo ad utilizzare SQL Server Management Studio per scoprire quali report è possibile generare!\nCosa vedrai Definizione di report Tipologie Come esportarlo Risorse utili Definizione di report Un report di database è il risultato formattato di query eseguite sul database e contiene dati utili per il processo decisionale e l\u0026rsquo;analisi.\nLa maggior parte delle applicazioni aziendali contengono uno strumento di reporting integrato; questa è semplicemente un\u0026rsquo;interfaccia front-end che si ha a disposizione per recuperare alcuni dati utili sulla gestione del database.\nTipologie Grazie a SQL Server Management Studio è possibile utilizzare dei report standard che possono essere generati all\u0026rsquo;occasione oppure personalizzabili.\nPer generarlo, è sufficiente cliccare con il destro sul database e cliccare su \u0026ldquo;Report\u0026rdquo;:\nCreare un report con SQL Server Management Studio\nTra quelli standard, abbiamo informazioni legate all\u0026rsquo;utilizzo del disco più o meno specifiche, o anche delle statistiche relative agli utenti o alle transazioni eseguite.\nReport standard disponibili di SQL Server\nUn esempio di report è il seguente:\nReport standard sull\u0026rsquo;utilizzo del disco\nSono disponibili diverse tipologie di report che corrispondono a diverse query a seconda del risultato grafico che vogliamo ottenere.\nCome esportarlo Questi report possono essere esportati in qualunque momento: generandone uno, è sufficiente cliccare con il destro in un qualsiasi punto della finestra del report per visualizzare il menù che ne gestisce le proprietà.\nCome mostrato in figura, vedremo che è possibile esportare in formato Word, PDF e Excel.\nEsportare un report\nRisorse utili Documentazione ufficiale Basi di Dati Se ti è piaciuto questo articolo, non ti dimenticare di commentare e condividere! ⬇️\n ", "url": "https:\/\/theredcode.it\/database\/report-di-sql-server\/" }, "https:\/\/theredcode.it\/openshift\/cos-e-un-template-in-openshift\/": { "title": "Cos\u0027è un template in OpenShift", "tags": ["openshift",], "content": "Docker Compose usa il file docker-compose.yml, mentre Kubernetes usa i chart. E OpenShift?\nOpenShift definisce i template, ossia dei modelli che possono essere utilizzati per descrivere lo stack di un\u0026rsquo;applicazione.\nCome funziona e come scriverne uno?\nDefinizione Un template descrive un insieme di oggetti che possono essere parametrizzati ed elaborati per produrre un elenco di risorse che possono essere create all\u0026rsquo;interno di un cluster OpenShift.\nUn template può essere definito per creare qualsiasi oggetto tu abbia l\u0026rsquo;autorizzazione di creare all\u0026rsquo;interno di un progetto, ad esempio Service, Build e DeploymentConfigs. Un template può anche definire una serie di etichette -o label- da applicare a ogni oggetto definito nel template.\nCome crearne uno vuoto Per creare un template bootstrap, puoi usare il seguente comando:\noc adm create-bootstrap-project-template -o yaml \u0026gt; template.yaml Questo andrà a produrre, sfruttando l\u0026rsquo;istruzione create-bootstrap-project-template, un template di base che potrai andare a completare secondo le tue necessità.\nL\u0026rsquo;output prodotto sarà simile al seguente:\napiVersion: template.openshift.io/v1 kind: Template metadata: creationTimestamp: null name: project-request objects: - apiVersion: project.openshift.io/v1 kind: Project metadata: annotations: openshift.io/description: ${PROJECT_DESCRIPTION} openshift.io/display-name: ${PROJECT_DISPLAYNAME} openshift.io/requester: ${PROJECT_REQUESTING_USER} creationTimestamp: null name: ${PROJECT_NAME} spec: {} status: {} - apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: creationTimestamp: null name: admin namespace: ${PROJECT_NAME} roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: admin subjects: - apiGroup: rbac.authorization.k8s.io kind: User name: ${PROJECT_ADMIN_USER} parameters: - name: PROJECT_NAME - name: PROJECT_DISPLAYNAME - name: PROJECT_DESCRIPTION - name: PROJECT_ADMIN_USER - name: PROJECT_REQUESTING_USER Come funziona La chiave apiVersion rappresenta la versione di riferimento dell\u0026rsquo;oggetto di tipo Template a cui farà riferimento il nostro oggetto, così come la proprietà kind.\nI metadata sono le informazioni che riguardano il template stesso, come il suo nome -che possiamo modificare liberamente- e la data di creazione.\n Tieni presente che il nome del template dev\u0026rsquo;essere univoco per singolo namespace!\n All\u0026rsquo;interno della chiave objects andremo invece a definire tutte le risorse che il template andrà a creare o istanziare: DeploymentConfig, Service, ConfigMaps, Secret e tutte quelle che OpenShift e Kubernetes ci mette a disposizione.\nQueste andranno definite come oggetti singoli che fanno parte della lista di objects, quindi ognuno di essi avrà un trattino che separa la definizione di una risorsa dall\u0026rsquo;altra.\nIn questo caso, il template va a definire un oggetto di tipo Project, quindi un vero e proprio namespace, con le relative informazioni: il nome univoco da associare (ossia name), il nome mostrato sulla console (ovvero metadata\u0026gt;annotations\u0026gt;openshift.io/display-name) e anche una descrizione (sempre all\u0026rsquo;interno di metadata\u0026gt;annotations).\n Il nome è l\u0026rsquo;unico parametro obbligatorio.\n Oltre al progetto, viene definito il RoleBinding che permette di associare l\u0026rsquo;utente al progetto; qui notiamo che, così come nella sezione precedente, ci sono alcune espressioni tra parentesi graffe.\n ${PLACEHOLDER} rappresenta il modo in cui possiamo parametrizzare dei campi nel template e valorizzarli solo in fase di creazione dell\u0026rsquo;istanza del template.\n Se osserviamo bene, come proprietà sibling di objects abbiamo parameters: questo oggetto permette la definizione dei parametri che possono essere valorizzati quando il template viene processato.\nMentre le proprietà che abbiamo elencato finora, come apiVersion e objects sono obbligatorie, i parametri non lo sono: è possibile scrivere un template con all\u0026rsquo;interno tutti i campi già valorizzati. Questo è solitamente sconsigliato perché il template dovrebbe rappresentare un modello astratto e configurabile a seconda delle necessità, piuttosto che un oggetto.\nCreare le risorse Per poter creare le risorse contenute in un template, sarà sufficiente eseguire un comando come il seguente:\n$ oc process -f my-template.yml -p PROJECT_NAME=my-namespace -p PROJECT_DISPLAYNAME=\u0026#34;My Project\u0026#34; ... Ogni parametro presente nel template potrà essere valorizzato usando l\u0026rsquo;opzione -p. Tuttavia, il comando oc process ci andrà a restituire il template con i parametri aggiornati grazie ai valori passati in input, ma non andrà a creare le risorse al suo interno.\nQuesto perché oc process prende il template e i parametri come input e lo processa, ma non lo esegue.\nPer farlo, useremo oc apply:\n$ oc process -f my-template.yml -p PROJECT_NAME=my-namespace -p PROJECT_DISPLAYNAME=\u0026#34;My Project\u0026#34; ... oc apply -f - oc apply andrà a sovrascrivere le risorse da creare a quelle esistenti, eventualmente apportando modifiche o aggiornamenti esistenti in questa versione. Per creare da zero, usare oc create.\n Tip Includere un\u0026rsquo;etichetta chiamata label in tutti gli oggetti che vengono creati a partire da quel template è una delle best practice.\nL\u0026rsquo;aggiunta di un\u0026rsquo;etichetta comune a tutti gli oggetti creati da un template consente agli utenti e agli amministratori di tenere traccia degli oggetti creati da un determinato template come un gruppo di risorse dipendenti.\nAd esempio, è sufficiente aggiungere una label come template=my-app-template.\nInoltre, includere un\u0026rsquo;etichetta app in tutti gli oggetti fornisce un\u0026rsquo;etichetta dinamica che può essere utilizzata per eseguire query su un\u0026rsquo;istanza specifica di un template e che può valorizzata usando un parametro come ${APPLICATION_NAME}.\n Se ti è piaciuto questo articolo, non ti dimenticare di commentare e condividere! ⬇️\n ", "url": "https:\/\/theredcode.it\/openshift\/cos-e-un-template-in-openshift\/" }, "https:\/\/theredcode.it\/tags\/interviste\/": { "title": "interviste", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/tags\/interviste\/" }, "https:\/\/theredcode.it\/categories\/interviste\/": { "title": "interviste", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/categories\/interviste\/" }, "https:\/\/theredcode.it\/interviste\/voglio-diventare-una-sustainability-manager\/": { "title": "Voglio diventare una... Sustainability Manager", "tags": ["interviste","voglio-diventare",], "content": "Le parole “ecologia” e “sostenibilità” sono parole molto usate negli ultimi anni e, giustamente, soprattutto a causa dell\u0026rsquo;accelerazione della crisi climatica globale. Aziende come Mia-Platform riconoscono la necessità urgente di agire sul cambiamento climatico e lo fanno grazie al lavoro di Sustainability Manager, ricoperto da Chiara Muzzolon.\nIn che modo può un\u0026rsquo;azienda del settore IT impegnarsi per essere più \u0026ldquo;sostenibile\u0026rdquo; e, soprattutto, cosa vuol dire \u0026ldquo;essere sostenibili\u0026rdquo;?\nCosa vedrai Descriviti in 100 parole In cosa consiste il ruolo di Sustainability Manager? Qual è la soft skill più importante che deve possedere una Sustainability Manager? La maggior parte di noi utilizza i social per parlare dei propri successi, ma la realtà è che siamo quel che siamo grazie al 90% dei nostri errori. Racconta il tuo più grande fallimento da quando lavori nel settore, che però ti ha reso ciò che sei. Come fare per diventare una Sustainability Manager? Parlando di successi, qual è il tuo prossimo obiettivo? Quale ruolo vorresti ricoprire entro i prossimi 3 anni? Conosci il tema gender gap in ambito STEM? Se sì, come fare per superarlo? Contatti Descriviti in 100 parole Sono appassionata di comunicazione e credo fortemente nella potenza delle parole.\n Mi affascina come una semplice scelta di termini possa cambiare l’esito di una conversazione. Da sempre cerco di trovare un senso più alto nel mio lavoro, e credo di averlo trovato in due modi: il primo, occupandomi della comunicazione interna e del community engagement, con l’obiettivo - complesso da raggiungere - di semplificare l’esperienza in azienda delle persone ; il secondo, integrando la sostenibilità nel mio lavoro, impegnandomi affinché sostenibilità e corporate social responsibility diventino parte integrante delle iniziative verso i dipendenti e verso l’ecosistema nel quale siamo inseriti e sul quale abbiamo inevitabilmente un impatto.\nIn cosa consiste il ruolo di Sustainability Manager? Il ruolo di Sustainability Manager è un ruolo che prevede tantissima collaborazione con diverse aree aziendali. Nel mio caso faccio parte del team di comunicazione di Mia-Platform, ma collaboro costantemente con il management, con il team di People\u0026amp;Culture, con l’Office Team, con Amministrazione e molte altre figure.\n Mi occupo principalmente della gestione di progetti di Corporate Social Responsibility, e cioè i progetti che l’azienda decide di portare avanti per migliorare il proprio impatto nel contesto in cui è inserita.\n Negli anni abbiamo, ad esempio, adottato un alveare con 3Bee, piantato alberi con Rete Clima, supportato il FAI regalando una tessera a ciascun dipendente.\nOgnuna di queste iniziative ha previsto il coinvolgimento dei dipendenti e in ciascun caso ho avuto la possibilità di seguire la scelta dell’attività, dell’ingaggio del fornitore e del coinvolgimento delle persone, sempre in collaborazione con le altre aree aziendali coinvolte.\nLa sostenibilità passa anche dalla scelta dei fornitori per i nostri gadget (che portiamo agli eventi e diamo ai dipendenti). Zaini, t-shirt, borracce, seguono tutte una filiera il più possibile rispettosa dell’ambiente e del lavoro delle persone.\nIl ruolo di Sustainability Manager poi è utile anche per rendere più sostenibili processi aziendali che potrebbero essere molto impattanti: nel nostro caso, ad esempio, abbiamo deciso di donare i PC che non rispettavano più i criteri alti richiesti dal nostro lavoro (principalmente di sviluppo), ma che erano comunque ancora funzionanti per un uso comune, ad associazioni che si sono occupate della loro rigenerazione e donazione a famiglie, scuole, associazioni che ne avessero bisogno.\nIl mio ruolo ha poi il compito di portare idee e proposte e di gestire eventuali progetti di certificazioni o altri adempimenti amministrativi legati alla sostenibilità.\nQuesti sono solo alcuni esempi. Per un\u0026rsquo;azienda come Mia-Platform, che è di medie dimensioni (circa 150 dipendenti), non esistono ancora, ad oggi, degli obblighi di legge legati alla sostenibilità, che invece esistono per le grandi aziende (più di 500 dipendenti).\nTutte le iniziative che portiamo avanti sono quindi totalmente volontarie e sono frutto di una sensibilità interna e di un confronto continuo. Questo significa che le attività di chi si occupa di sostenibilità possono variare tantissimo da settore a settore e in base alla dimensione aziendale.\nQual è la soft skill più importante che deve possedere una Sustainability Manager? Credo che sia un mestiere che possa essere svolto da persone con background molto diversi.\n Ciascun background - di comunicazione, di giurisprudenza, di management, di ingegneria - può dare un altissimo contributo allo sviluppo di strategie di sostenibilità.\n Bisogna essere molto aperti e curiosi, bisogna saper selezionare bene le informazioni perché viviamo un particolare momento dove “sostenibilità” è un termine molto usato. Bisogna quindi essere da un lato entusiasti e appassionati, ma anche molto critici perché è ancora molto difficile distinguere ciò che è realmente sostenibile da ciò che è greenwashing.\nLa maggior parte di noi utilizza i social per parlare dei propri successi, ma la realtà è che siamo quel che siamo grazie al 90% dei nostri errori. Racconta il tuo più grande fallimento da quando lavori nel settore, che però ti ha reso ciò che sei. Tornando al discorso di prima, a volte è difficile non farsi prendere dall’entusiasmo. Mi è certamente capitato di perdere del tempo appassionandomi a una specifica idea o certificazione da raggiungere, perdendo di vista gli aspetti fondamentali: era davvero utile per la sostenibilità? \nEra il momento giusto per Mia-Platform sostenere quel processo? Siamo certi che sul lungo periodo porterà benefici? Quali sono i passi da fare prima di questo?\n Ho imparato così che non tutti i percorsi vanno bene per tutte le aziende e ho iniziato a farmi molte domande in più prima di intraprendere un percorso o proporre un progetto che avrebbe portato via tempo e budget, anche per essere pronta a rispondere a eventuali dubbi di colleghe e colleghi che, presi dall’entusiasmo come me, vorrebbero vedere anche Mia- Platform in determinati contesti o con determinate certificazioni che però potrebbero aver bisogno di più temo per essere raggiunte.\n Come fare per diventare una Sustainability Manager? La formazione relativa alla sostenibilità esiste da relativamente poco (anche se non pochissimo).\nSono convinta che lo studio possa essere una buona strada per iniziare ad avere un’infarinatura sui concetti principali, ad ampio raggio. Il mio suggerimento è quello di trovare un percorso di studi (che sia un corso breve, un master o una laurea) che permetta di avere una visione di insieme utile da applicare poi nel proprio contesto.\nPer me è stato utilissimo il Master in Sostenibilità, Diritto e Management che ho frequentato nel 2019/2020 all’Università Bicocca di Milano. Questo tipo di scelta è adatta a chi ha un background come il mio oppure legato a studi di giurisprudenza o economia.\nCi sono poi percorsi di studi e professionali più specifici: ci sono CFO che si occupano di sostenibilità, così come figure ingegneristiche, amministrative o legali.\nLa sostenibilità passa attraverso normative in continua evoluzione che bisogna saper maneggiare e comprendere. Come dicevo, poi, è un ruolo che per natura deve collaborare con tutte le aree aziendali, perciò potenzialmente può essere inserito in molti team diversi.\nParlando di successi, qual è il tuo prossimo obiettivo? Quale ruolo vorresti ricoprire entro i prossimi 3 anni? Ho conseguito il master sulla sostenibilità nel 2020 e oggi ricopro questo ruolo. Per me questo è stato un grande successo e, più che ricoprire un altro ruolo, spero di occuparmi sempre più di questi temi e di saper aiutare sempre di più Mia-Platform a strutturare la propria strategia di sostenibilità in modo che sia davvero applicata a tutti gli aspetti dell’azienda: l’impatto dei dipendenti, così come l’impatto delle tecnologie e dello sviluppo del prodotto.\nConosci il tema gender gap in ambito STEM? Se sì, come fare per superarlo? Intanto sono felice di leggere questa domanda, perché la sostenibilità passa anche attraverso temi come la diversity e la riduzione del gender gap e questo spesso non è scontato. Lavoro in un’azienda tech, dove il ruolo principale è quello di developer, perciò vedo da vicino la tematica del gender gap in ambito STEM.\nHo visto delle bellissime iniziative di avvicinamento alle tematiche STEM nelle scuole medie/superiori. È da lì che si inizia a generare il gap, che quindi aumenta nelle università e conseguentemente nei luoghi di lavoro.\nCredo che queste iniziative possano avere, sul lungo periodo, ottimi risultati che spero si rispecchieranno anche delle aziende.\nHo avuto modo di conoscere associazioni che se ne occupano, e in Mia-Platform ne stiamo parlando come possibili iniziative da sostenere nell’ambito delle nostre attività di Corporate Social Responsibility. Nel frattempo internamente ci impegniamo affinché la parità sia alla base del nostro lavoro: il nostro Manifesto di valori ha un punto che recita “ripudiamo ogni forma di discriminazione” e credo che ogni ruolo aziendale debba impegnarsi affinché questo punto venga sempre rispettato.\nContatti Profilo LinkedIn ", "url": "https:\/\/theredcode.it\/interviste\/voglio-diventare-una-sustainability-manager\/" }, "https:\/\/theredcode.it\/tags\/voglio-diventare\/": { "title": "voglio-diventare", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/tags\/voglio-diventare\/" }, "https:\/\/theredcode.it\/data-science\/librerie-per-data-scientist\/": { "title": "4 librerie per data scientist", "tags": ["data-science",], "content": "La data science è un campo che può interagire con un\u0026rsquo;ampia varietà di domini tematici, dalla biologia e finanza alla geografia e al dettaglio. Ciò significa che i progetti di Data Science possono avere una varietà di formati e avere sfide molto diverse. Ciò non significa, tuttavia, che non ci siano punti in comune tra di loro.\nQuali sono gli strumenti che ogni Data Scientist dovrebbe avere nella propria cassetta degli attrezzi per essere in grado di lavorare nel modo più fluido possibile?\nCosa vedrai Libreria di plotting Libreria algebrica Libreria di analisi Libreria per database Risorse utili Libreria di plotting Uno degli strumenti più importanti nella maggior parte dei toolkit di una persona che lavora come Data Scientist dovrebbe includere la padronanza di almeno una libreria di plotting, indipendentemente dal linguaggio scelto.\nIl vantaggio di essere in grado di padroneggiare una libreria di visualizzazione sarà la possibilità di creare rappresentazioni efficaci per mostrare i tuoi dati, metodo e risultati.\n Quando si dice che un\u0026rsquo;immagine vale 1.000 parole, questo è particolarmente vero nel campo della scienza dei dati.\n Visualizzazioni chiare possono consentirti di comunicare in modo efficace con una varietà di stakeholder diversi, aumentando il valore e la portata dei tuoi progetti.\nLa padronanza della libreria di visualizzazione scelta dovrebbe includere come creare in modo semplice e veloce grafici altrettanto semplici. Questo ti gioverà quando sei bloccato/a o quando avrai bisogno di comprendere i dati.\n9 volte su 10, queste sfide possono essere risolte semplicemente guardando un grafico veloce, anche se non perfetto. Questo non significa che devi includere una legenda, colorare correttamente il grafico o perdere tempo ad aggiungere un titolo: l\u0026rsquo;importante è che tu abbia una rappresentazione dei dati che ti permetta di visualizzare a chiare lettere il problema .\nEssere in grado di creare queste semplici visualizzazioni ti aiuterà anche a gettare le basi per crearne di più complesse di modo che possano essere aggiunte a pubblicazioni, presentazioni o mostrate alla leadership.\nPer renderle adatte ad un pubblico più eterogeneo, sarà utile sapere come aggiungere legende, etichette, annotazioni, gestire i colori e combinare più grafici sulla stessa visualizzazione, tra le altre cose.\n Queste visualizzazioni saranno in grado di supportare la storia che stai cercando di raccontare al tuo pubblico in un modo che nessun discorso sarebbe mai in grado di trasmettere in uno spazio così breve e aggiungeranno valore al tuo risultato finale.\n Esempi matplotlib Seaborn Plotly Libreria algebrica Uno strumento comune che dovrebbe apparire nel kit di strumenti della maggior parte dei data scientist sarebbe quello di una libreria matematica e/o di statistica di base.\nQuesto perché mentre la maggior parte dei linguaggi di programmazione avrà funzioni matematiche integrate, nella maggior parte dei flussi di lavoro di Data Science molti processi possono essere semplificati con l\u0026rsquo;uso di una libreria oltre a quelle funzionalità esistenti.\nI vantaggi che ne derivano possono includere la capacità di utilizzare facilmente costanti o notazioni matematiche, eseguire calcoli o operazioni avanzati in modo rapido ed efficiente, archiviando anche grandi quantità di dati.\nEsempi Sci-kit Learn NumPy Libreria di analisi Il terzo strumento che deve essere presente in ogni toolkit di Data Scientist deve essere una libreria che può essere utilizzata per archiviare, analizzare e manipolare i tuoi dati. Sebbene molti linguaggi dispongano di strutture di dati integrate, la loro funzionalità è spesso limitata quando si tratta di flussi di lavoro di Data Science.\nUna libreria efficace dovrebbe essere in grado di leggere i dati da una varietà di formati, consentire di eseguire calcoli di base, aggiungere le comuni librerie di visualizzazione (o essere in grado di produrli da sola) ed essere in grado di integrarsi con una varietà di modelli di apprendimento automatico per inserire i dati.\nAffinché questo strumento venga utilizzato in modo efficace, ci sono tre azioni che devi essere in grado di eseguire.\n Il primo è la possibilità di caricare dati da una varietà di fonti e da una varietà di formati.\n I dati dei progetti di data science spesso coinvolgono dati provenienti da sorgenti diversi, quindi una libreria in grado di gestirli tutti sarà incredibilmente utile.\nLa padronanza di questo ti consentirà di caricare i dati e iniziare a lavorare molto più rapidamente rispetto all\u0026rsquo;utilizzo di una varietà di librerie o strumenti che altrimenti aumenterebbero la complessità di qualsiasi flusso di lavoro di Data Science.\nSebbene una libreria potrebbe non essere in grado di caricare da tutte le origini dati, dovrebbe essere in grado di gestire almeno quelle più comuni come csv, file Excel, file di testo, formati json e da database.\n Un Data Scientist dovrebbe anche essere in grado di eseguire semplici manipolazioni di dati con la libreria scelta.\n Ciò includerebbe la possibilità di eseguire semplici calcoli tra colonne o righe, selezionare uno o più elementi in base a determinate condizioni, raggruppare i dati per ottenere statistiche di riepilogo e poter creare sottoinsiemi di dati. Ciò consentirà a qualsiasi Data Scientist di avere un\u0026rsquo;idea e una panoramica dei dati prima che venga eseguita qualsiasi visualizzazione o modellazione, contribuendo a restringere i passaggi successivi.\n L\u0026rsquo;ultima azione che devi essere in grado di eseguire è passare la struttura dei dati in un\u0026rsquo;altra libreria per la visualizzazione o la modellazione.\n Essere in grado di creare in modo efficace una struttura dei dati che sia possibile utilizzare anche in altre librerie è fondamentale per creare un flusso di lavoro di Data Science efficace all\u0026rsquo;interno del progetto. Ciò potrebbe comportare molte delle semplici manipolazioni dei dati di cui sopra, ma è necessario assicurarsi che i dati possano essere passati nel formato corretto per lo strumento scelto.\nEsempi pandas Polars Vaex Libreria per database Oltre agli strumenti sopra menzionati, la maggior parte dei/delle data scientist dovrebbe almeno avere una conoscenza di base del linguaggio di query strutturato.\nCiò ti consentirà di interagire con i dati provenienti da una varietà di fonti e in modo tale da poter estrarre facilmente i dati che ti interessano.\nCiò è particolarmente vantaggioso per i progetti che interagiscono con set di dati di grandi dimensioni che sarebbero semplicemente troppo grandi da archiviare o manipolare in modo efficiente in formati o strutture di dati comuni o per archiviare i dati quando non vengono utilizzati.\nUn/a data scientist dovrebbero almeno apprendere le basi del linguaggio SQL per interagire con i database. Queste abilità includono essere in grado di selezionare i dati e filtrare i dati, proprio come con la libreria per conservare i tuoi dati, in modo da poter estrarre solo le informazioni che ti interessano.\nIn alcuni casi questo filtraggio deve essere eseguito a livello di database, piuttosto che il livello di flusso di lavoro, perché altrimenti potremmo non avere abbastanza potenza di calcolo per gestire la quantità di dati passati.\nInoltre, il vantaggio di farlo in una fase iniziale, consente di caricare solo i dati che ci interessano e quindi di ridurre la quantità richiesta di risorse di calcolo nel flusso di lavoro attuale.\nOltre a ciò, bisognerebbe anche essere in grado di eseguire semplici raggruppamenti e join di dati.\nEsempi SQLite psycopg2 Connettore per MySQL Risorse utili Python. Guida alla sintassi, alle funzionalità avanzate e all\u0026rsquo;analisi dei dati Analisi del linguaggio naturale con Python Towards Data Science Se ti è piaciuto questo articolo, non ti dimenticare di commentare e condividere! ⬇️\n ", "url": "https:\/\/theredcode.it\/data-science\/librerie-per-data-scientist\/" }, "https:\/\/theredcode.it\/tags\/data-science\/": { "title": "data-science", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/tags\/data-science\/" }, "https:\/\/theredcode.it\/categories\/data-science\/": { "title": "data-science", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/categories\/data-science\/" }, "https:\/\/theredcode.it\/interviste\/voglio-diventare-una-cloud-engineer\/": { "title": "Voglio diventare una... Cloud Engineer", "tags": ["interviste","voglio-diventare",], "content": "Ingegnere e divulgatrice con la testa fra le nuvole: no, non in quel senso! Giorgia Fiscaletti lavora come Cloud Engineer per Mia-Platform ed è una persona estremamente estrosa: nel corso della sua professione ha acquisito tante lezioni, tra cui la necessità e virtù di essere curiosi per stare al passo con l\u0026rsquo;evoluzione delle tecnologie.\nLeggi la sua intervista e scopri come diventare Cloud Engineer!\nCosa vedrai Descriviti in 100 parole In cosa consiste il ruolo di Cloud Engineer? Qual è la soft skill più importante che deve possedere una Cloud Engineer? La maggior parte di noi utilizza i social per parlare dei propri successi, ma la realtà è che siamo quel che siamo grazie al 90% dei nostri errori. Racconta il tuo più grande fallimento da quando lavori nel settore, che però ti ha reso ciò che sei. Come fare per diventare una Cloud Engineer? Parlando di successi, qual è il tuo prossimo obiettivo? Quale ruolo vorresti ricoprire entro i prossimi 3 anni? Conosci il tema gender gap in ambito STEM? Se sì, come fare per superarlo? Contatti Descriviti in 100 parole Non ho sempre voluto fare l’ingegnere.\n A 17 anni desideravo diventare un’artista digitale.\nLa mia strada sembrava spianata, avevo fatto da apprendista nello studio di un pittore ed ero riuscita ad entrare in una prestigiosa scuola d’arte.\nMa se c’è una cosa in cui sono davvero specializzata è stravolgere i miei piani per avventurarmi in sentieri tortuosi. Utilizzare strumenti digitali non mi bastava, volevo capire cosa c\u0026rsquo;era dietro. Così, si potrebbe dire quasi per sbaglio, sono diventata ingegnere informatico, con l\u0026rsquo;unica promessa di continuare ad essere creativa.\nDopo aver esplorato sviluppo software e accelerazione hardware, sono approdata nell’universo cloud e me ne sono innamorata.\nIn cosa consiste il ruolo di Cloud Engineer? Essendo un mondo che evolve ad una velocità spropositata - un po’ come le nuvole vere, in fondo - noi cloud engineers dobbiamo essere innanzitutto ricercatori.\n Bisogna stare al passo, aggiornarsi costantemente sulle nuove tecnologie, ed essere proattivi per permettere alla propria infrastruttura di evolversi al meglio.\n Evoluzioni che possono includere, ad esempio, l’integrazione di nuovi tool, la modernizzazione della piattaforma, l’automazione di processi, e molto altro.\nAll’occorrenza siamo anche developers, quando si deve passare all’implementazione di funzionalità e ottimizzazioni, e sistemisti, per intervenire all’occorrenza sull’infrastruttura con manutenzioni e aggiornamenti. Le cose da fare non mancano, non ci si annoia mai.\nQual è la soft skill più importante che deve possedere una Cloud Engineer? Per quanto all’apparenza non sembri, è un lavoro davvero creativo.\n C’è un intero universo di possibilità da esplorare per plasmare la propria infrastruttura cloud, e alle volte ci vuole anche un pizzico di fantasia per pensare a soluzioni non standard e valutare opzioni un po’ fuori dagli schemi.\n Oltre a questo “problem solving creativo”, a mio avviso è fondamentale un’attenzione particolare verso la pianificazione e l’organizzazione dei vari progetti.\nI prodotti del nostro lavoro devono essere funzionali e scalabili, di modo che possano evolvere con meno intoppi possibile e crescere insieme all’infrastruttura.\nA tal proposito, bisogna essere lungimiranti e cercare di avere un occhio al futuro sin dall’analisi, per impostare il progetto di conseguenza.\nLa maggior parte di noi utilizza i social per parlare dei propri successi, ma la realtà è che siamo quel che siamo grazie al 90% dei nostri errori. Racconta il tuo più grande fallimento da quando lavori nel settore, che però ti ha reso ciò che sei. Lavoro nel settore da poco più di un anno, quindi per fortuna posso dire di non essermi ancora imbattuta in fallimenti significativi. Ma ne ho fatti di errori in questi mesi, e continuano a far parte della mia quotidianità.\n Non c’è nulla di male nello sbagliare, nessuno di noi è nato imparato.\n Bisogna solo sapersi prendere le proprie responsabilità e sfruttare gli errori come occasioni di crescita, evitando di ripeterli. Tra i più divertenti (col senno di poi), ricordo il giorno in cui ho involontariamente sferrato un attacco DoS alla piattaforma dell’azienda mentre stavo eseguendo degli stress test sul nuovo API gateway. Ce la siamo cavata con qualche istante di downtime, ma da allora ho mille occhi di riguardo in più durante operazioni che potrebbero impattare l’infrastruttura.\nSe invece devo pensare ad un fallimento più importante, mi torna in mente la mia tesi di magistrale. Dopo mesi di ricerca e analisi, ho realizzato di aver fatto un enorme buco nell’acqua. La soluzione non stava in piedi. Ho dovuto buttare praticamente tutto, e mi rimaneva meno di metà del tempo per studiare un’alternativa.\n Dopo un primo momento di sconforto ho recuperato le redini della situazione e mi sono rimessa a lavoro, riuscendo infine a portare a casa un buon risultato nei tempi prestabiliti. Un fallimento è un’occasione per ricominciare, basta non perdersi d’animo e dare il meglio di sé (anche se non è sempre così semplice).\n Come fare per diventare una Cloud Engineer? Non c’è un percorso specifico, io per esempio mi stavo specializzando in tutt’altro. Me ne sono interessata durante il mio semestre negli Stati Uniti, dove ho avuto occasione di frequentare un corso di cloud computing (che ancora mancava nel mio corso di laurea in Italia). In quel periodo ho cominciato a districarmi nei concetti teorici e a sporcarmi le mani con qualche progettino. Ma la strada vera e propria da cloud engineer si potrebbe dire che l’ho imboccata durante la tesi. È stato lì che ho messo davvero in pratica le conoscenze acquisite da lezioni e ricerca, addentrandomi per la prima volta in un vero cluster Kubernetes.\nSicuramente è d’aiuto avere alle spalle uno studio tecnico-scientifico (preferibilmente informatico o ingegneristico, dalla mia esperienza), in quanto le infrastrutture cloud sono molto complesse e richiedono una conoscenza a 360° per essere comprese a fondo.\nDopodiché, i tool principali (orchestrazione, monitoraggio, containerizzazione, eccetera) sono generalmente ben documentati, e offrono spesso tutorial per chi è alle prime armi.\n Insomma, secondo me un background tecnico solido, interesse per il mondo cloud, e un po’ di sana voglia di imparare, sono più che sufficienti per diventare cloud engineer.\n Parlando di successi, qual è il tuo prossimo obiettivo? Quale ruolo vorresti ricoprire entro i prossimi 3 anni? Non ho mai amato pianificare troppo il mio futuro. Mi conosco bene, e so che i miei piani sono fatti principalmente per essere mandati all’aria.\nSono curiosa e sempre alla ricerca di nuovi stimoli, mi piace scoprire nuovi mondi dell’universo IT, cimentarmi in nuove sfide e inoltrarmi in territori inesplorati.\nPer ora il cloud sta tenendo viva la fiamma del mio interesse, è un ambito talmente vasto che non mi ha ancora dato modo di annoiarmi. Non ho difficoltà ad immaginarmi ancora a navigare queste acque tra qualche anno!\nDi recente ho anche sviluppato uno spiccato entusiasmo per la divulgazione. Ho già partecipato come speaker a qualche evento, dove ho avuto modo di presentare alcuni frutti del mio lavoro, confrontarmi con altri esperti, e conoscere persone fantastiche.\n È un’attività che mi dà tante soddisfazioni, mi fa sentire piena, e soprattutto mi diverte! Ho già altre conferenze in programma nei prossimi mesi e sono in fibrillazione. È a tutti gli effetti un secondo lavoro, ma vorrei continuare a portarlo avanti in parallelo alla mia attività principale. Staremo a vedere!\n Conosci il tema gender gap in ambito STEM? Se sì, come fare per superarlo? È una questione che ho molto a cuore, e che purtroppo è ancora ben lontana dall’essere superata. Io personalmente ne sento il peso dal primo giorno di università, e continuo tutt’ora a percepirne le conseguenze.\nSecondo me bisognerebbe intervenire già in tenera età, evitando di limitare ai bambini la scelta di attività in base al genere.\nPer fare un esempio, ancora oggi mi capita di vedere bambine rassegnarsi davanti a un gioco dicendo “Tanto non ci riesco, è da maschio”, e non c’è nulla di più sbagliato.\n Nessun bambino dovrebbe vivere con la convinzione di non poter fare qualcosa, o non poter raggiungere un determinato obiettivo (sempre nei limiti del proprio potenziale), per ragioni che trascendono dall’interesse e dalle passioni.\n Sono preconcetti che si instaurano nel cervello e accompagnano l’individuo per tutta la vita, influenzandone inconsciamente le scelte in fase di crescita.\nA tal proposito è fondamentale anche l’orientamento nelle scuole, per stimolare l’interesse nelle materie STEM anche per chi ha una curiosità potenziale che rimarrebbe altrimenti inesplorata.\nContatti Profilo LinkedIn Profilo Twitter ", "url": "https:\/\/theredcode.it\/interviste\/voglio-diventare-una-cloud-engineer\/" }, "https:\/\/theredcode.it\/database\/cos-e-sql-server\/": { "title": "Cos\u0027è SQL Server", "tags": ["database",], "content": "Cos\u0026rsquo;è SQL Server e cosa cambia rispetto ad altri sistemi di gestione di una base dati? Quanto costa? Come funziona?\nPer scoprirlo, introduciamo una breve panoramica del celebre prodotto di Microsoft, delle versioni disponibili e delle sue funzionalità principali.\nCosa vedrai Definizione Versioni disponibili Componenti Scalabilità Risorse utili Definizione Si tratta di un sistema di gestione di dati che ci permette di memorizzare dei dati sotto forma di tabelle. Quando installiamo questo strumento, andiamo a configurare un\u0026rsquo;istanza del motore principale grazie al quale potremo gestire le nostre informazioni.\nAll\u0026rsquo;interno dei database sarà possibile creare delle tabelle o delle viste, così come avviene per altri sistemi DBMS.\nGrazie a T-SQL, ossia Transact-SQL, è possibile definire delle procedure, essendo un\u0026rsquo;estensione del linguaggio SQL proprietaria di Microsoft.\nLa versione più recente è la 2022, anche se si tratta di una versione ancora in modalità Preview (ad oggi); quella attualmente più utilizzata è la 2019.\nEdizioni di SQL Server\nVersioni disponibili Enterprise: 3k-5k al mese (circa)\nStandard: 1.5k-3k al mese (circa)\nDeveloper: sistema di sviluppo e non come produzione, che però permette di eseguire dei test in locale.\nExpress: ha dei limiti, ma non ha costi aggiuntivi. Ogni singolo database può contenere 10 GB non comprimibili.\nComponenti SQL Server Si tratta del motore o del componente principale per la gestione dei database che funge da istanza del sistema. Sarà quindi lui che si occuperà di memorizzare le nostre informazioni e organizzarle di modo tale che possano essere recuperate!\nSQL Server Management Studio Questo è lo strumento principale con cui si interfaccia l\u0026rsquo;utente: permette di accedere, configurare e gestire l\u0026rsquo;istanza di SQL Server. Sia questo, che il componente precedente sono fondamentali e generalmente vengono installati entrambi.\nIn aggiunta, se volessimo leggere i nostri dati da un\u0026rsquo;applicazione terza (una webapp, un\u0026rsquo;app mobile, o altro) avremo bisogno di alcuni driver per connetterci: è possibile quindi configurare dei driver che fungeranno da componenti di connettività.\nStrumenti aggiuntivi Esistono dei tools aggiuntivi, i quali non sono strettamente necessari per il funzionamento di SQL Server, ma permettono piuttosto di avere uno strumento di business intelligence per eseguire, ad esempio, operazioni di data mining, come nel caso di Analysis Services.\nScalabilità Ogni versione ha i suoi limiti: la scalabilità è infatti la proprietà di un\u0026rsquo;applicazione di adattarsi ad un carico di lavoro variabile.\nNel caso di SQL Server, questa proprietà dipende dalla versione: come è possibile vedere all\u0026rsquo;interno di questa pagina, la versione Express è limitata a 4 core, che comunque rappresenta un limite superiore non così basso.\nRisorse utili Documentazione ufficiale Basi di Dati Se ti è piaciuto questo articolo, non ti dimenticare di commentare e condividere! ⬇️\n ", "url": "https:\/\/theredcode.it\/database\/cos-e-sql-server\/" }, "https:\/\/theredcode.it\/tags\/intelligenza-artificiale\/": { "title": "intelligenza-artificiale", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/tags\/intelligenza-artificiale\/" }, "https:\/\/theredcode.it\/categories\/intelligenza-artificiale\/": { "title": "intelligenza-artificiale", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/categories\/intelligenza-artificiale\/" }, "https:\/\/theredcode.it\/intelligenza-artificiale\/sistemi-generazione-immagini\/": { "title": "Sistemi di generazione di immagini", "tags": ["intelligenza-artificiale",], "content": "Immagini sintetiche: nelle ultime settimane sono usciti moltissimi articoli che parlano di intelligenze artificiali in grado di generare immagini a partire da un testo inserito dall\u0026rsquo;utente.\nStable Diffusion e DALL-E 2 sono solo due esempi di questi sistemi open source per la creazione di immagini sintetiche: ma come funzionano?\nCosa vedrai Cosa sono Soluzioni sul mercato Come funzionano Risorse utili Cosa sono Sono sistemi che a partire da alcuni front (o testi) generano svariate illustrazioni; essi si basano su un tessuto di deep-learning, prettamente paragonabile al tessuto nervoso umano, contenente oltre 3 miliardi e mezzo di connessioni e capace di generare immagini a partire da una vasta biblioteca di dati.\n Chiaramente questo lavoro richiede un addestramento fitto e oneroso, basti pensare che per “insegnare” a un sistema a generare immagini in autonomia servono diverse centinaia di CPU a lavorare simultaneamente.\n Soluzioni sul mercato Il più conosciuto nel settore è DALL-E 2 che, come è facile intuire, è la seconda versione di un precedente sistema omonimo divenuto famoso per la sua capacità di generare immagini in buona qualità. DALL-E 2 genera immagini a partire da un prompt, vale a dire un input.\nQuesti sistemi di IA sono essenzialmente quasi tutti privati (sì, può utilizzarli il pubblico ma affinché possano poi essere venduti come servizi più completi); difatti, anche i grandi del settore non stanno perdendo tempo: Google ha sviluppato Party e Imagen, ancora in fase di sviluppo, Microsoft sta implementando VQ-Diffusion, META lavora su Make-A-Scene (implementato perlopiù su scenari del metaverso), e un laboratorio indipendente sta sviluppando invece Midjourney.\nFanno eccezione, per la loro caratteristica di essere open source, Crayion e DreamStudio prodotto da Stability.AI.\nCome funzionano Questa rete neurale con cui sono stati costruiti è in grado di imparare a partire dai dataset vastissimi costituiti da immagini associati ad una “didascalia”; in altre parole partendo da una frase genererà la sua relativa illustrazione. Questa tecnica si chiama diffusion e consente la generazione delle immagini. La diffusione in avanti avviene se partiamo da un’immagine a cui aggiungiamo via via più rumore, al contrario la diffusione all’indietro avviene grazie all’intervento dell’IA e parte dal rumore generando, attraverso milioni di esempi contenuti nel dataset, delle illustrazioni, che diventeranno intellegibili grazie all’intervento del prompt.\nSpieghiamo meglio: affinché l’immagine generata dal sistema abbia un senso, al rumore dovrà essere associato un input testuale –e in questo caso parliamo di text-guided-diffusion.\nAlcuni esempi di immagini generate da Stable Diffusion:\nAlieno\nUn altro esempio oltre a quelli citati è GLIDE: si tratta di un modello che sfrutta la diffusion basata sul testo condizionale per produrre immagini sintetiche, e che è possibile provare sfruttando Python congiuntamente al repository ufficiale.\nRiflessioni La maggior parte di questi progetti di AI sono stati resi disponibili come progetti open source: questo è un segnale importante nel voler coinvolgere la community per evitare che ci siano potenziali usi impropri di questi strumenti.\nIn diverse occasioni, sono stati utilizzati per generare immagini che risultano divertenti e anche molto comiche:\nUn corgi con gli occhiali da sole\nGatti che sciano (?)\nConiglio con giacca rossa\nSottomarino che legge\nCome in tutte le applicazioni, bisogna considerare che le conseguenze che si hanno nel rendere questi strumenti alla portata di tutti: alcuni utenti si sono infatti detti preoccupati dell\u0026rsquo;utilizzo di queste risorse per generare immagini che producano deepfake o contenuti pornografici.\nDiversi sistemi che generavano immagini di volti di persone sono stati più volte utilizzati per creare profili fake online: l\u0026rsquo;esempio più conosciuto è quello del sito ThisPersonDoesNotExist.\nAlcuni di questi servizi tuttavia sono limitati nel loro utilizzo: l\u0026rsquo;accesso per testarne la beta version è su richiesta e ha una lista di attesa estremamente lunga, e questo anche per limitarne la diffusione e le potenziali conseguenze negative.\nInoltre, vale la pena valutare la possibilità che questi sistemi possiedano dei bias: inserendo frasi come \u0026ldquo;doctor at work\u0026rdquo;, \u0026ldquo;engineer\u0026rdquo; o \u0026ldquo;police\u0026rdquo; tramite il sito di Stable Diffusion, i risultati sono i seguenti:\n\u0026ldquo;Doctor at work\u0026rdquo;\n\u0026ldquo;Police\u0026rdquo;\n\u0026ldquo;Engineer\u0026rdquo;\nSebbene le capacità dei modelli di generazione di immagini siano impressionanti, possono anche rafforzare o esacerbare i pregiudizi della società. Poiché la maggior parte di questi modelli sono stati addestrati su dati non filtrati recuperati da Internet, è spesso possibile generare immagini che contengono stereotipi.\nCome si evince dalla documentazione di questi sistemi, si tratta comunque di un topic al centro dell\u0026rsquo;attenzione delle persone che sviluppano questi sistemi, e su cui stanno lavorando proattivamente.\nPiccola nota: i volti delle persone potrebbero risultare un po\u0026rsquo; \u0026ldquo;strani\u0026rdquo;: come spiega la documentazione di Craiyon, si tratterebbe di un problema causato dall\u0026rsquo;encoder delle immagini.\n E tu, che ne pensi?\n Risorse utili Video sui sistemi di generazioni di immagini a cura di Piero Savastano Stable Diffusion Prova Stable Diffusione online Repo Docker per provare Stable Diffusion ", "url": "https:\/\/theredcode.it\/intelligenza-artificiale\/sistemi-generazione-immagini\/" }, "https:\/\/theredcode.it\/interviste\/voglio-diventare-una-rd-director\/": { "title": "Voglio diventare una... R\u0026D Director", "tags": ["interviste","voglio-diventare",], "content": "Ottobre è il mese rosa per la prevenzione dei tumori femminili, e non potevamo non parlare di questa super donna: Rosilari Bellacosa è R\u0026amp;D Director di Syndiag, che sfrutta l’intelligenza artificiale per evidenziare la presenza di cancro ovarico nelle immagini ecografiche.\nTrovi la sua intervista di seguito!\nCosa vedrai Descriviti in 100 parole In cosa consiste il ruolo di R\u0026amp;D Director? Qual è la soft skill più importante che deve possedere una R\u0026amp;D Director? La maggior parte di noi utilizza i social per parlare dei propri successi, ma la realtà è che siamo quel che siamo grazie al 90% dei nostri errori. Racconta il tuo più grande fallimento da quando lavori nel settore, che però ti ha reso ciò che sei. Come fare per diventare una R\u0026amp;D Director? Parlando di successi, qual è il tuo prossimo obiettivo? Quale ruolo vorresti ricoprire entro i prossimi 3 anni? Conosci il tema gender gap in ambito STEM? Se sì, come fare per superarlo? Contatti Descriviti in 100 parole Sono Rosilari Bellacosa, pugliese di origine ma trapiantata in Veneto da un bel po’. Ho studiato neuroscienze e all’inizio ho seguito la carriera accademica in questo ambito: ho conseguito un dottorato e per quattro anni mi sono guadagnata da vivere addestrando ratti.\n La carriera universitaria però non era nelle mie corde e, dopo molte riflessioni, ho lasciato l’università e ho cercato progetti che mi permettessero di continuare a fare ricerca e di utilizzare tecnologie all’avanguardia, e che fossero anche sfidanti.\n E quale progetto migliore di una startup in medtech! Nel 2018 ho avuto la fortuna di conoscere i miei attuali soci, Daniele Conti e Federica Gerace, e assieme abbiamo fondato Syndiag.\nIn cosa consiste il ruolo di R\u0026amp;D Director? In Syndiag usiamo l’intelligenza artificiale per evidenziare la presenza di cancro ovarico nelle immagini ecografiche.\n L’attività di ricerca è quindi focalizzata sull’AI: in una giornata tipo, il team coinvolto in un progetto utilizza la letteratura scientifica dell’ambito per testare soluzioni e sviluppare i cosiddetti POC (proof of concept, prototipi).\nUn filone di progetti si focalizza poi sulla valutazione clinica dei prodotti che sviluppiamo, allestendo veri e propri esperimenti per valutare l’utilizzo dei prodotti da parte de* medic*.\nSyndiag è una startup early stage, con un team limitato. Io mi occupo di delineare le attività e di gestire il team, ma partecipo anche attivamente alla ricerca (scrivo codice anche io), e alla scelta delle tecnologie da utilizzare nel passaggio dalla POC al prodotto, un’attività più da CTO.\nQual è la soft skill più importante che deve possedere una R\u0026amp;D Director? Ce ne sono tante, sicuramente le abilità interpersonali e di comunicazione sono fondamentali nella gestione del team. Anche le competenze di project management sono importanti, soprattutto in una startup con risorse limitate.\nA mio avviso, però, la capacità di problem solving è una caratteristica immancabile, ed è alla base di una startup innovativa: creiamo prodotti che rispondano a un bisogno davvero sentito dall’utente.\n Mi piace pensare alla R\u0026amp;D come a un puzzle, per cui serve conoscenza, creatività, capacità di adattarsi velocemente e di affrontare i problemi (che si presentano spesso).\n La maggior parte di noi utilizza i social per parlare dei propri successi, ma la realtà è che siamo quel che siamo grazie al 90% dei nostri errori. Racconta il tuo più grande fallimento da quando lavori nel settore, che però ti ha reso ciò che sei. È difficile rispondere a questa domanda, perché il lavoro in startup insegna a cercare sempre di salvare il salvabile.\nTuttavia ho vissuto come un fallimento la scelta di lasciare università, perché avevo la sensazione di non essere stata all’altezza di quella carriera e al tempo stesso di aver perso anni preziosi per costruire una carriera al di fuori e che ormai fosse troppo tardi.\nHo superato il momento parlando con persone che avevano fatto la stessa scelta e che mi hanno fatto capire che si può cambiare percorso, non è la fine del mondo, e anzi è addirittura possibile sfruttare quanto imparato in un ambito nell’ambito successivo.\nBanalizzando, la morale per me è che siamo pien* di risorse. Il lavoro è importante e ci può appassionare, ma resta un lavoro, e un “fallimento” sul lavoro non determina il nostro fallimento come persone.\nCome fare per diventare una R\u0026amp;D Director? Premetto che la mia attività si svolge in una startup con un team limitato e con forte vocazione alla ricerca, nella quale prodotto e R\u0026amp;D si parlano molto, per cui si sovrappone spesso con quella di un CTO.\nServe ovviamente forte competenza di dominio: per Syndiag è fondamentale l’interazione con medic espert** e la conoscenza degli algoritmi di computer vision.\nNella mia esperienza, una formazione alla ricerca è anche necessaria. E’ importante anche avere competenze di gestione di progetti.\nParlando di successi, qual è il tuo prossimo obiettivo? Quale ruolo vorresti ricoprire entro i prossimi 3 anni? Da co-founder, gli obiettivi di crescita professionale si affiancano agli obiettivi di crescita dell’azienda.\n Gli obiettivi economici sono raggiungibili attraverso l’offerta di un prodotto funzionante e all’avanguardia, che a sua volta è il risultato di un team competente, ben affiatato, ed efficace.\nI miei obiettivi professionali mirano quindi alla crescita del team che supervisiono, di numero e di competenze. Mi aspetto che il mio ruolo diventi sempre meno operativo, e somigli sempre più a quello di un CTO “tradizionale”, con una forte componente strategica e meno scrittura di codice in Python!\nConosci il tema gender gap in ambito STEM? Se sì, come fare per superarlo? Come tutt*, probabilmente ho assistito a esempi di gender gap in STEM già a scuola, quando i ragazzi venivano premiati di più per i loro successi in matematica (a me per esempio avevano caldamente consigliato un percorso umanistico).\n Ho acquisito una visione più consapevole durante il percorso accademico: neuroscienze è un ambito interdisciplinare, ma le ragazze arrivano spesso da psicologia e biologia, considerate “da femmina”, mentre abbonda di ingegneri e fisici.\n È un tema che, anche per storia personale, mi sta molto a cuore. In Syndiag incentiviamo la presenza di donne in ruoli molto tecnici, a oggi abbiamo un team “sbilanciato in positivo” per genere.\nSiamo inoltre due donne su tre fondatori, e la mia socia Federica Gerace e io siamo a capo dell’intera divisione tecnologica dell’azienda. Assieme ad altr* professionist* lo scorso anno ho anche co-fondato un’associazione (CD5050) che ha l’obiettivo di avvicinare le ragazze al coding.\n Organizziamo workshop nelle scuole superiori in varie città, e invito a contattarmi chi fosse interessato a partecipare!\n Contatti Profilo LinkedIn Syndiag Associazione CD5050 ", "url": "https:\/\/theredcode.it\/interviste\/voglio-diventare-una-rd-director\/" }, "https:\/\/theredcode.it\/interviste\/voglio-diventare-una-yyy\/": { "title": "Voglio diventare una... XXX", "tags": ["interviste","voglio-diventare",], "content": "Cosa vedrai Descriviti in 100 parole In cosa consiste il ruolo di XXX? Qual è la soft skill più importante che deve possedere una XXX? La maggior parte di noi utilizza i social per parlare dei propri successi, ma la realtà è che siamo quel che siamo grazie al 90% dei nostri errori. Racconta il tuo più grande fallimento da quando lavori nel settore, che però ti ha reso ciò che sei. Come fare per diventare una XXX? Parlando di successi, qual è il tuo prossimo obiettivo? Quale ruolo vorresti ricoprire entro i prossimi 3 anni? Conosci il tema gender gap in ambito STEM? Se sì, come fare per superarlo? Contatti Descriviti in 100 parole In cosa consiste il ruolo di XXX? Qual è la soft skill più importante che deve possedere una XXX? La maggior parte di noi utilizza i social per parlare dei propri successi, ma la realtà è che siamo quel che siamo grazie al 90% dei nostri errori. Racconta il tuo più grande fallimento da quando lavori nel settore, che però ti ha reso ciò che sei. Come fare per diventare una XXX? Parlando di successi, qual è il tuo prossimo obiettivo? Quale ruolo vorresti ricoprire entro i prossimi 3 anni? Conosci il tema gender gap in ambito STEM? Se sì, come fare per superarlo? Contatti Profilo LinkedIn ", "url": "https:\/\/theredcode.it\/interviste\/voglio-diventare-una-yyy\/" }, "https:\/\/theredcode.it\/dev-tools\/python-online-compiler\/": { "title": "5 strumenti per usare Python online", "tags": ["dev-tools","python",], "content": "Hai bisogno di testare del codice Python, ma non hai nessun IDE a disposizione?\nVediamo alcune valide alternative per provare il tuo codice tramite dei compiler per Python online!\nCosa vedrai Replit Programiz W3Schools Tutorialspoint Jupyter Replit Replit è un IDE collaborativo online: questo vuol dire che possiamo programmare direttamente all\u0026rsquo;interno del browser, in più di 50 linguaggi di programmazione.\nProvalo\nProgramiz Programiz è una piattaforma per imparare la programmazione creata da dev per dev. Può essere utilizzato per scrivere e testare codice Python, ma anche C/C++, Java, Go e molto altro.\nProvalo\nW3Schools Chi non conosce W3Schools e non l\u0026rsquo;ha utilizzato almeno una volta per imparare qualche linguaggio? W3Schools è una piattaforma ottimizzata per l\u0026rsquo;apprendimento, il test e la formazione dei principali linguaggi di programmazione e strumenti per developer.\nSelezionando Python come linguaggio di base, avremo a disposizione diverse console che ci permetteranno di eseguire del codice Python in un attimo:\nProvalo\nTutorialspoint Tutorialspoint è un altro sito online molto utile per chi vuole apprendere di più sui maggiori linguaggi di programmazione e non solo: questo portale offre molti contenuti di qualità su Machine Learning, Data Science, basi di dati, cybersecurity e molto altro.\nProvalo\nJupyter Jupyter Notebook è una piattaforma informatica interattiva basata sul web ed è un progetto gestito dalla community con l\u0026rsquo;obiettivo di \u0026ldquo;sviluppare software open source, standard aperti e servizi per l\u0026rsquo;informatica interattiva attraverso decine di linguaggi di programmazione\u0026rdquo;\nJupyter è perfetto per chi vuole fare provare del codice per attività di data science in Python, dal momento che è possibile installare dei pacchetti extra sfruttando pip.\nInoltre, permette di testare non solo codice Python, ma anche scritto in C++, Julia, Kotlin, R e Ruby.\nProvalo\nE tu, conosci qualche altro tool? Aggiungilo nei commenti!\n Se ti è piaciuto questo articolo, non ti dimenticare di commentare e condividere! ⬇️\n ", "url": "https:\/\/theredcode.it\/dev-tools\/python-online-compiler\/" }, "https:\/\/theredcode.it\/tags\/dev-tools\/": { "title": "dev-tools", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/tags\/dev-tools\/" }, "https:\/\/theredcode.it\/categories\/dev-tools\/": { "title": "dev-tools", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/categories\/dev-tools\/" }, "https:\/\/theredcode.it\/tags\/python\/": { "title": "python", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/tags\/python\/" }, "https:\/\/theredcode.it\/categories\/python\/": { "title": "python", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/categories\/python\/" }, "https:\/\/theredcode.it\/interviste\/voglio-diventare-una-product-manager\/": { "title": "Voglio diventare una... Product Manager", "tags": ["interviste","voglio-diventare",], "content": "Lo scorso giugno il Product Management Day ha raccolto le esperienze di tantissimi professionisti e professioniste del settore, raccontando cosa vuol dire ricoprire il ruolo di Product Manager e in che modo stanno cambiando le esigenze aziendali sul \u0026ldquo;valore\u0026rdquo; del prodotto.\nFrancesca Tiso è Product Manager per TheFork, e ha una carriera consolidata e pazzesca alle spalle. Parliamo di Product Management insieme a lei!\nCosa vedrai Descriviti in 100 parole In cosa consiste il ruolo di Product Manager? Qual è la soft skill più importante che deve possedere una Product Manager? La maggior parte di noi utilizza i social per parlare dei propri successi, ma la realtà è che siamo quel che siamo grazie al 90% dei nostri errori. Racconta il tuo più grande fallimento da quando lavori nel settore, che però ti ha reso ciò che sei. Come fare per diventare una Product Manager? Parlando di successi, qual è il tuo prossimo obiettivo? Quale ruolo vorresti ricoprire entro i prossimi 3 anni? Conosci il tema gender gap in ambito STEM? Se sì, come fare per superarlo? Contatti Descriviti in 100 parole Da piccola adoravo la matematica, mi rilassava e divertiva. L’ho studiata all’università con il sogno di diventare una professoressa, ma ero costantemente irrequieta, così ho iniziato ad ampliare i miei orizzonti.\nDopo gli studi, ho seguito l’istinto e ho iniziato a lavorare per Zanichelli editore, dove con un percorso inaspettato sono diventata Product Owner. Mi si è letteralmente aperto un mondo sconosciuto che è diventato la mia passione.\nOra sono Senior Product Manager in TheFork, sono felice!\nHo molti progetti nella testa, adoro leggere e lo faccio nei momenti più improbabili e spenderei (spendo!) i miei soldi in viaggi.\nIn cosa consiste il ruolo di Product Manager? Come Product Manager sono responsabile della realizzazione di un “buon” prodotto, dove la bontà sta nel fatto che risponda a un problema e a un’esigenza reale di chi lo utilizzerà.\n Se il risultato del mio lavoro è la soluzione concreta che viene proposta agli utenti, il mio vero punto di attenzione è il problema che voglio risolvere. Lavoro a stretto contatto con un team ricco e variegato per competenze: ci facciamo molte domande, parliamo con gli utenti e cerchiamo di ricavare i dati e le evidenze su cui poniamo le basi delle nostre decisioni di prodotto, design e tecniche.\n Come Product Manager, chiarisco la visione e la strategia, stabilisco le priorità e definisco iniziative che man mano portano alla soluzione.\n Quello che ho descritto credo sia vero in generale per il nostro ruolo, anche se tutto dipende dall’interpretazione che ne dà l’azienda.\nPersonalmente, amo che sia un lavoro di team, dove ho la possibilità di entrare strettamente in contatto con temi di business, tecnologia e design. Ho la costante sensazione di avere molto da imparare e approfondire e questo per me è vitale.\nOgni giornata è piuttosto diversa dalle altre, inizia però sempre con uno sguardo alla mia to do list che è lunga, ma prioritizzata. Inizio molto presto per poter lavorare sulle cose che mi richiedono più concentrazione (allineamenti, mail o thread su slack, presentazioni). Durante il resto della giornata ho solitamente molte call di allineamento, pianificazione o evoluzione. Cerco sempre di ritagliarmi qualche momento, anche se delimitato, di formazione.\nQual è la soft skill più importante che deve possedere una Product Manager? La creatività (di pensiero).\n Ho sempre associato la creatività a capacità manuali che purtroppo non sento di avere. Tuttavia, da quando ho iniziato questo lavoro ho capito quanto sia importante la creatività di pensiero che ti porta a vedere la stessa situazione da più punti di vista, esplorare senza farsi mettere dei limiti, interpretare e ragionare per assurdo, rovesciare problemi in opportunità.\nLa maggior parte di noi utilizza i social per parlare dei propri successi, ma la realtà è che siamo quel che siamo grazie al 90% dei nostri errori. Racconta il tuo più grande fallimento da quando lavori nel settore, che però ti ha reso ciò che sei. Quando ho iniziato, ho avuto la possibilità e la fortuna di seguire sin da subito un prodotto da zero. Ho partecipato alla sua ideazione, l’ho visto nascere e ne ho seguito l’evoluzione. Il mio più grande errore credo sia stato affezionarmi!\nEra un prodotto nato dall’amore per l’idea che avevamo avuto, più che come risposta ad un’esigenza reale degli utenti a cui lo stavamo proponendo, che infatti non lo utilizzavano. Era difficile accettare che tutto lo sforzo fosse stato vano, anche se a ben vedere vano non è stato per nulla viste tutte le cose che ho e abbiamo imparato.\nGrazie a quell’esperienza (e da molte altre a seguire) ho iniziato a guardare con occhio critico ogni progetto, per quanto bello mi potesse sembrare.\n Questo mi permette di essere molto più ricettiva sui feedback che ricevo e ad ascoltare gli utenti senza includere bias.\n Come fare per diventare una Product Manager? Mi è capitato di parlare con Product Manager che alle spalle hanno percorsi diversissimi, talvolta con inizi casuali come è stato per me, altri più mirati. A oggi non esiste una tappa universitaria obbligatoria, credo siano più importanti le competenze acquisite nel proprio percorso di studi e/o lavorativo.\n Per me è importante avere un mindset analitico, unito a una buona dose di buon senso. Bisogna saper ascoltare ed essere molto ricettivi, di certo aiuta saper comunicare in modo chiaro in contesti diversi.\n È un ruolo che richiede una formazione continua e su fronti molto vari, proprio perché ampio è lo spettro di azione e il mondo che ci circonda è in costante evoluzione.\nInfine, per me è fondamentale confrontarsi con altri Product Manager, sia colleghi che non, per ragionare insieme, chiedere consigli e recepire suggerimenti, stimoli e nuove pratiche.\nParlando di successi, qual è il tuo prossimo obiettivo? Quale ruolo vorresti ricoprire entro i prossimi 3 anni? Mi piace molto il percorso che sto facendo e nei prossimi tre anni vorrei crescere nel mio ruolo in TheFork. A latere vorrei coltivare quello che un po\u0026rsquo; spontaneamente sta già accadendo: spesso mi contattano su LinkedIn professionisti curiosi di capire meglio il ruolo del Product Manager o che desiderano avere un confronto con me. Questi per me sono sempre momenti spontanei, ma preziosi e di cui mi prendo cura e non escludo la possibilità di farlo sempre di più.\nSe però ragioniamo più ad ampio raggio, da quando sono all’università mi interrogo spesso su come io possa riuscire con quello che so fare ad avere un impatto positivo sul mondo che mi circonda. Mi piacerebbe trovare la mia risposta!\nConosci il tema gender gap in ambito STEM? Se sì, come fare per superarlo? Se guardo il mio percorso, quando ero bambina e sognavo di diventare una matematica, nemmeno una volta ho pensato di non poterlo diventare o di non poter essere qualsiasi cosa volessi essere semplicemente perché ero donna. Eppure crescendo, anno dopo anno il senso di inadeguatezza e di insicurezza si è affacciato non poche volte.\nL’ingresso nel mondo del lavoro è stato da un lato molto protetto da questo punto di vista per il contesto in cui ero. Tuttavia, spesso mi sono ritrovata a essere l’unica donna (o una delle poche) nelle riunioni, nelle conferenze, in ogni corso io abbia fatto. Non esiste nessun gioco, colore, vestito che per me sia da donna o da uomo, figuriamoci un percorso di studi o un lavoro!\nPersonalmente credo che una delle possibilità più grandi di cambiamento stia nelle opportunità che creiamo per le studentesse che diventeranno le lavoratrici di domani. È a partire dalla scuola che una bambina prima e una ragazza poi deve poter sentire di essere libera di coltivare il proprio sogno senza limiti di sorta, esattamente come i suoi compagni.\nSe penso al mio percorso di studi, a me sono mancati sempre degli esempi e delle opportunità per capire quali scenari futuri potessero rispondere meglio alle mie capacità e passioni. Mi sarebbe piaciuto sognare in modo divergente con il mondo adulto che mi accompagnava.\nHo scelto tutto per istinto prima, un po’ a caso e per bravura dopo. Mi ritengo molto fortunata del risultato, ma cosa ci sarebbe stato di diverso se avessi avuto modo di parlare con donne che facevano lavori che i miei occhi da bambina non conoscevano?\n Sicuramente questo è quello che cercherò di creare per mia figlia!\n Contatti Profilo LinkedIn Product Managament Day ", "url": "https:\/\/theredcode.it\/interviste\/voglio-diventare-una-product-manager\/" }, "https:\/\/theredcode.it\/tags\/etl\/": { "title": "etl", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/tags\/etl\/" }, "https:\/\/theredcode.it\/categories\/etl\/": { "title": "etl", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/categories\/etl\/" }, "https:\/\/theredcode.it\/data-science\/etl-on-cloud\/": { "title": "ETL on cloud", "tags": ["data-science","etl",], "content": "Con questo articolo, chiudiamo il cerchio con l\u0026rsquo;ETL: dopo aver visto cos\u0026rsquo;è e come funziona e quali strumenti abbiamo a disposizione sul mercato da installare localmente od on-premise, vediamo quali soluzioni abbiamo a disposizione on-cloud.\nCosa vedrai Intro AWS Glue AWS Redshift Google Cloud Functions Intro Uno strumento ETL, che vogliate acquistarlo o costruirlo da voi, deve avere alcune caratteristiche non-tecniche che lo rendano facile da utilizzare, adattabile al progresso tecnologico e, soprattutto, efficace.\nAmmesso che vogliamo seguire i trend tecnologici, dovrebbe quindi essere anche cloud-native, cioè avere un proprio cloud di archiviazione.\nGli strumenti ETL tradizionali sono progettati, generalizzando, per girare on-premise.\n Questi strumenti non saranno in grado di raggiungere il beneficio della scalabilità e della velocità del cloud.\n I servizi cloud più affidabili, sexy e famosi per l’ETL sono tre: AWS Glue, Redshift e Google Functions.\nGlue Glue è stato rilasciato nell\u0026rsquo;agosto 2017. Da allora, ha visto molti aggiornamenti periodici. Lo scopo di Glue è quello di consentire agli utenti di scoprire, preparare e combinare facilmente i dati.\nCreare un flusso di lavoro che realizzi in modo efficiente i processi di cui sopra può richiedere molto tempo. \nÈ qui che entra in gioco Glue. Si tratta di un servizio ETL completamente gestito, specificamente progettato per gestire grandi quantità di dati.\n Il suo compito è quello di estrarre i dati da diversi altri servizi AWS e incorporarli in data lake e data warehouse.\n Glue è molto flessibile e facile da usare perché fornisce sia interfacce basate su codice che visive.\nUn\u0026rsquo;aggiunta molto popolare e recente è DataBrew. Utilizzando Glue, i dati di DataBrew possono essere puliti,\nnormalizzati e persino arricchiti senza nemmeno scrivere codice, mentre Glue Elastic Views rende molto semplice la combinazione e la replica dei dati attraverso diversi data store utilizzando un servizio SQL.\nEsempio di flusso di monitoraggio e esecuzione con AWS Glue\nAmazon Redshift Amazon Redshift è un servizio di data warehouse completamente gestito in-cloud, che permette di memorizzare da poche centinaia di gigabyte fino a un petabyte di dati e anche di più. Redshift consente prestazioni di query veloci per l\u0026rsquo;analisi dei dati su quasi tutti i set di dati di qualsiasi dimensione grazie al Massively Parallel Processing (abbreviato in MPP).\nIn altre parole, i database MPP sono di solito più flessibili, scalabili e convenienti dei sistemi tradizionali.\nEsempio di architettura con Redshift\nGoogle Cloud Functions In ultimo, Google Cloud Functions è uno strumento di integrazione dati cloud-native.\n È uno strumento ETL completamente gestito da Google Cloud che permette l\u0026rsquo;integrazione dei dati su qualsiasi scala.\n È costruito con un nucleo open-source, CDAP per la portabilità della vostra pipeline. Offre un\u0026rsquo;interfaccia visiva \u0026ldquo;punta e clicca\u0026rdquo; che permette la distribuzione senza codice delle pipeline ETL. Oltre all\u0026rsquo;integrazione nativa con Google Cloud Services, offre anche più di 150 connettori e trasformazioni preconfigurate a costo zero.\nInoltre\u0026hellip; L\u0026rsquo;ETL è strettamente legato a una serie di altre funzioni, processi e tecniche di integrazione dei dati. Comprenderli fornisce una visione più chiara di come funziona l\u0026rsquo;ETL.\n SQL: il linguaggio query strutturato è il metodo più comune per accedere e trasformare i dati in un database. Trasformazioni, regole di business e adattatori: dopo aver estratto i dati, l\u0026rsquo;ETL usa le regole di business per trasformare i dati in nuovi formati. I dati trasformati vengono poi caricati nel target. Mappatura dei dati: la mappatura dei dati fa parte del processo di trasformazione. La mappatura fornisce istruzioni dettagliate ad un\u0026rsquo;applicazione su come ottenere i dati che ha bisogno di elaborare. Descrive anche quale campo sorgente corrisponde a quale campo di destinazione. Per esempio, il terzo attributo di un feed di dati sull\u0026rsquo;attività di un sito web potrebbe essere il nome dell\u0026rsquo;utente, il quarto potrebbe essere l\u0026rsquo;orario di quando l\u0026rsquo;attività è avvenuta e il quinto potrebbe essere il prodotto su cui l\u0026rsquo;utente ha cliccato. Un\u0026rsquo;applicazione o un processo ETL che usa quei dati dovrebbe mappare questi stessi campi o attributi dal sistema di origine (cioè, il feed di dati sull\u0026rsquo;attività del sito web) nel formato richiesto dal sistema di destinazione. Se il sistema di destinazione fosse un sistema di gestione delle relazioni con i clienti, potrebbe memorizzare il nome dell\u0026rsquo;utente per primo e la marca temporale per quinto e potrebbe non memorizzare affatto il prodotto selezionato. In questo caso, una trasformazione per formattare la data nel formato previsto (e nel giusto ordine), potrebbe avvenire tra il momento in cui i dati vengono letti dalla fonte e scritti nella destinazione, cioè durante lo stream. Script: l\u0026rsquo;ETL è un metodo per automatizzare gli script (insieme di istruzioni) che vengono eseguiti dietro le quinte per spostare e trasformare i dati. Prima dell\u0026rsquo;ETL, gli script venivano scritti individualmente per trasferire i dati tra sistemi specifici. Questo si traduceva in database multipli che eseguivano numerosi script e l’orchestrazione era mind-blowing. I primi strumenti ETL, storicamente, giravano sui mainframe come processi batch. L\u0026rsquo;ETL è poi migrato alle piattaforme UNIX e PC. Le organizzazioni oggi usano ancora sia gli script che programmi per lo spostamento dei dati, ma cercano di orchestrare con strumenti specifici. ETL contro ELT: all\u0026rsquo;inizio c\u0026rsquo;era ETL. Più tardi le organizzazioni hanno prodotto l\u0026rsquo;ELT, un metodo complementare. ELT estrae i dati da un sistema sorgente, li carica in un sistema di destinazione e poi usa la potenza di elaborazione del sistema sorgente per condurre le trasformazioni. Questo accelera l\u0026rsquo;elaborazione dei dati perché avviene dove i dati vivono. La verità è che siamo fra il sofismo e il super-tecnico: ai fini di questo articolo, basti sapere che tutti abbiamo molti dati e trasformarli non è sempre banale. Qualità dei dati: prima che i dati vengano integrati, viene spesso creata un\u0026rsquo;area di sosta (mai sentito parlare di “Area di appoggio” o “Tabella di appoggio”?) dove i dati possono essere puliti, i valori dei dati possono essere standardizzati, gli indirizzi possono essere verificati e i duplicati possono essere rimossi. Tipicamente, questi dati di appoggio sono intaccati da processi schedulati a livello di sistema, ma in alcuni casi l’elaborazione può avvenire anche direttamente a livello di database: questo approccio evita la duplicazione dei dati e previene la necessità di usare capacità extra sulla piattaforma e può avere senso qualora ci fossero specifiche condizioni legate all’hardware a disposizione. Web services/API: i servizi web sono un metodo basato su internet per fornire dati o funzionalità a varie applicazioni in tempo quasi reale. Questo metodo semplifica i processi di integrazione dei dati. Per esempio, presupponiamo che un cliente contatti il nostro call center: potremmo creare un servizio web che restituisca il profilo completo del cliente con un tempo di risposta inferiore al secondo, semplicemente passando un numero di telefono a un servizio web che estrae i dati da più fonti o da un hub MDM. Con una conoscenza più ricca del cliente, il rappresentante del servizio clienti può prendere decisioni migliori su come interagire con lui. Virtualizzazione dei dati: la virtualizzazione è un metodo agile di fusione dei dati per creare una visione virtuale dei dati senza spostarli. La virtualizzazione dei dati differisce dall\u0026rsquo;ETL, perché anche se la mappatura e l\u0026rsquo;unione dei dati avvengono ancora, non c\u0026rsquo;è bisogno di una tabella fisica per memorizzare i risultati. Questo perché la vista è spesso memorizzata nella memoria e nella cache per migliorare le prestazioni. E tu, hai altri hint riguardo ETL?\n Se ti è piaciuto questo articolo, non ti dimenticare di commentare e condividere! ⬇️\n Contatti https://pausacaffe.live https://podcastdelminotauro.it https://instagram.com/eldoleo.dev ", "url": "https:\/\/theredcode.it\/data-science\/etl-on-cloud\/" }, "https:\/\/theredcode.it\/interviste\/voglio-diventare-una-data-scientist-3\/": { "title": "Voglio diventare una... Data Scientist", "tags": ["interviste","voglio-diventare",], "content": "Trading con Excel? Sembra una sfida, e invece si tratta di una grande opportunità. Donata Petrelli, Data Scientist specializzata nel mondo dei mercati finanziari, ha fatto della sua passione un lavoro, e anche un libro.\nIn questa intervista ci racconta cosa vuol dire essere una Data Scientist e come sfruttare alcuni \u0026ldquo;comuni\u0026rdquo; strumenti per creare dei sistemi di trading.\nCosa vedrai Descriviti in 100 parole In cosa consiste il ruolo di Data Scientist? Qual è la soft skill più importante che deve possedere una Data Scientist? La maggior parte di noi utilizza i social per parlare dei propri successi, ma la realtà è che siamo quel che siamo grazie al 90% dei nostri errori. Racconta il tuo più grande fallimento da quando lavori nel settore, che però ti ha reso ciò che sei. Come fare per diventare una Data Scientist? Parlando di successi, qual è il tuo prossimo obiettivo? Quale ruolo vorresti ricoprire entro i prossimi 3 anni? Conosci il tema gender gap in ambito STEM? Se sì, come fare per superarlo? Contatti Descriviti in 100 parole Lo ammetto, queste domande mi hanno sempre un po\u0026rsquo; messa in crisi. Penso a cosa dire e … cosa meglio non dire. Ad esempio definirmi uno “spirito ribelle” è positivo o negativo?\n Ho sempre cercato di fare quello che sentivo nelle mie corde, giusto per me e non per le convezioni sociali.\n Adoro i numeri e la logica. Per questo ho voluto studiare matematica ma non volevo diventare una professoressa. Già pensavo al suo impiego come strumento per il miglioramento di molti settori. Oggi il mio lavoro è creare modelli matematici e trasformarli in algoritmi per trovare soluzioni ai diversi problemi.\nIn cosa consiste il ruolo di Data Scientist? \u0026laquo; Data scientist is the sexiest job of the 21st century \u0026raquo; così la Harvard Business Review intitolava un suo articolo del 2012.\n Credo che per “affascinante” intendesse l’aspetto variegato che porta con sé questo mestiere.\nPerché fare il Data Scientist significa ricoprire diversi ruoli.\nDal ricercatore delle giuste fonti di dati, all’analista in grado di elaborarli ed interpretarli, passando per la figura in grado di trovare le tecniche migliori per estrapolarli.\n Ma è anche un lavoro di comunicazione.\n Il Data Scientist deve essere anche un sociologo ed uno psicologo, in grado di entrare in empatia con i bisogni del cliente ed un ottimo comunicatore per esporre il suo lavoro a persone di ambiti completamente diversi dal suo.\nQual è la soft skill più importante che deve possedere una Data Scientist? La costanza, la pazienza e\u0026hellip; l’abilità nel risolvere i rebus, anche se non saprei se quest’ultima rientra tra le soft skill!\nAnalizzare e trovare un significato all’interno di un insieme grezzo di dati è un po\u0026rsquo; come risolvere un enigma (e qui serve abilità nel risolvere i rebus).\nSolo che la soluzione potrebbe richiedere molto tempo, i dati non sempre sono completi o affidabili (qui la costanza). A volte si pensa di essere giunti a una conclusione plausibile per scoprire in seguito che è solo quella parziale (qui tanta pazienza).\nLa maggior parte di noi utilizza i social per parlare dei propri successi, ma la realtà è che siamo quel che siamo grazie al 90% dei nostri errori. Racconta il tuo più grande fallimento da quando lavori nel settore, che però ti ha reso ciò che sei. Vero, è indubbio che nei social si tende a mostrare il lato migliore della medaglia. La vacanza fantastica, la macchina nuova e anche l\u0026rsquo;ultimo aperitivo con gli amici. Nel lavoro idem. Ci fregiamo della nuova posizione raggiunta, della recente certificazione conseguita o del fantomatico round di finanziamento ottenuto.\nMagari fosse sempre bello così!\nDevo dire che in tutta la mia carriera lavorativa di inciampi ed errori ce ne sono stati. Ma più di tutti devo ammettere che il fallimento più grande è stato aver lanciato sul mercato, dopo diverso tempo di preparazione, un prodotto software che non è andato bene. Allora ci sono stati un mix di errori, dalla scelta del timing di immissione, a quella delle soluzioni adottate per la sua distribuzione, fino alle collaborazioni che si sono rivelate poco valide.\n Ma ho imparato la lezione, trasformando questa esperienza in una risorsa per il futuro.\n Come fare per diventare una Data Scientist? Ho cominciato questa professione ai suoi albori. Quello che si poteva fare allora, dopo aver conseguito una laurea in una disciplina scientifica, come matematica, statistica, informatica, ingegneria o anche economia, era frequentare corsi specialistici o master. Erano disponibili e fruibili on-line e offerti perlopiù da università americane.\nDa queste prime esperienze pioneristiche, da parte di università all’avanguardia, oggi la situazione è diversa e si possono fare interi percorsi per diventare Data Scientist scegliendo tra una vasta offerta formativa.\n Insomma, diventare un Data Scientist non è più un ostacolo per nessuno, basta volerlo!\n Parlando di successi, qual è il tuo prossimo obiettivo? Quale ruolo vorresti ricoprire entro i prossimi 3 anni? Dopo anni di numeri e formule, di recente ho scoperto una nuova passione. La scrittura. Amante dei libri lo sono sempre stata, ma solo come lettrice. Non avrei mai pensato di diventare un giorno autrice. Pensa che al liceo, ogni volta che c’era il tema in classe entravo nel panico!\nPer ora i miei libri sono tutti di stampo tecnico. Per lo più trattano argomenti di matematica e l’intelligenza artificiale, programmazione, finanza\u0026hellip; ma chissà tra tre anni cosa può succedere!\nConosci il tema gender gap in ambito STEM? Se sì, come fare per superarlo? Questo è un tema molto delicato, che tocca aspetti del genere umano molto sensibili. Affrontandolo si rischia con molta facilità di incappare in pregiudizi o suscitare critiche.\nPersonalmente quello che ritengo importante è riuscire a fare un lavoro di informazione ed orientamento a monte. Penso che ciò che maggiormente occorre sia mettere tutti, indistintamente, in grado di conoscere e sviluppare quelle che sono le proprie passioni e le proprie attitudini personali.\nPer questo ho sempre cercato di dare il mio contributo in tutte quelle attività di diffusione della cultura scientifica, facendo parte di gruppi con questa missione ed anche tenendo corsi e seminari di divulgazione nelle scuole.\nContatti Sito personale Profilo LinkedIn ", "url": "https:\/\/theredcode.it\/interviste\/voglio-diventare-una-data-scientist-3\/" }, "https:\/\/theredcode.it\/data-science\/etl-for-dummies\/": { "title": "ETL for Dummies", "tags": ["data-science","etl",], "content": "Nella scorsa puntata abbiamo parlato di cos\u0026rsquo;è ETL e di come funziona: ma da dove cominciare?\nIn questo articolo vediamo alcuni strumenti utili che abbiamo a disposizione per la nostra cassetta degli attrezzi!\nCosa vedrai Da dove cominciare Strumenti Da dove cominciare Per un principiante è una buona idea iniziare a disegnare un processo ETL con un sistema ad interfaccia grafica, perché avere un riscontro visivo in tempo reale dei processi contribuisce ad acquisire una visione a elicottero e aiuta a non percepire più il dato come qualcosa di statico, ma come uno stream, un flusso che si muove da un punto a un altro.\nStrumenti Quali sono gli strumenti più utili per questo fine? Riportiamo alcuni esempi!\nOracle Warehouse Builder OWB è uno strumento ETL prodotto da Oracle che offre un ambiente grafico per costruire, gestire e mantenere i processi di integrazione dei dati nei sistemi di business intelligence. L\u0026rsquo;uso principale di OWB è il consolidamento di fonti di dati eterogenee nel data warehousing e la migrazione dei dati dai sistemi legacy. \nInoltre, offre funzionalità per la modellazione di dati relazionali, dimensionali e metadati, la profilazione, la pulizia e il controllo.\nHitachi Vantara PDI Già conosciuto come Kettle, PDI (alias Pentaho Data Integration) è un software che consente di gestire processi ETL con una modalità veramente semplice. Oltre ad essere attivamente mantenuto, viene rilasciato sia in CE che in EE (la cui differenza sta essenzialmente nel supporto alla clusterizzazione e poco altro) ed è basato su Java, il che lo rende cross-platform by design.\nConsente la lettura e la scrittura, tramite i classici driver Java, a praticamente a tutte le tipologie di database esistenti, anche al limite dell’esotico e, se non dovesse essere abbastanza, lo sviluppatore veramente nerd può aggiungere un suo modulo per compensare eventuali mancanze.\nTip: PDI è il componente più usato della Suite Pentaho, un pacchetto di strumento completo per la gestione della BI aziendale.\nCoding Per quanto riguarda i linguaggi di programmazione con cui è più facile fare ETL, Python continua a essere l’opzione più scelta dagli utenti.\n Ci sono tantissimi framework, librerie e risorse già pronte all’uso.\n Questi strumenti diventano un valido aiuto quando si inizia a trattare con schemi complessi e massicce quantità di dati senza avere ancora tanta esperienza.\nChiunque sia bravo con Python avrà la tentazione di scrivere le proprie classi, ma sarebbe più un esercizio\nintellettuale, visto che esistono centinaia di migliaia di righe già scritte dalla comunità per aiutare a gestire i dati.\n Chi non ha mai sentito parlare di petl, pandas, bonobo o mETL?\n Inoltre, esistono delle vere e proprie Suite di gestione dati basate su Python, fra i più famosi Apache Airflow e Luigi.\nIl primo è uno strumento di automazione del flusso di lavoro e può essere usato per disegnare processi, anche ETL.\nInizialmente creato da Airbnb e passato sotto Apache pochi anni dopo, utilizza tutte le caratteristiche di Python e questo lo rende versatile, accessibile e facile da usare.\nEsempio di flusso di DAG in Airflow\nEsempio di rappresentazione delle dipendenze in un DAG in Airflow\nLa natura open-source di Airflow rende più facile impostare e mantenere le pipeline di dati e le integrazioni. \nAnche Luigi è uno strumento open-source, scritto in Python, che permette di costruire pipeline. Lo strumento è stato sviluppato da Spotify ed è utilizzato da una vasta gamma di aziende, tra cui Stripe e Red Hat.\nNode-RED Node-RED è uno strumento open-source basato su Javascript (Node.js) il cui scopo primario è la gestione dell’IoT tramite il paradigma dei flussi di dati e prevede un’interfaccia grafica accessibilie via HTTPs per l’architettura dei processi.\nInizialmente ideato per gestire code MQTT e dati in formato JSON, oggi può essere usato come strumenti ETL completo grazie ai numerosi connettori scritti dalla community.\nEsempio di funzionamento di Node-RED\nRisorse utili [https://theredcode.it/data-science/etl-e-dintorni](Articolo precedente) Se ti è piaciuto questo articolo, non ti dimenticare di commentare e condividere! ⬇️\n Contatti https://pausacaffe.live https://podcastdelminotauro.it https://instagram.com/eldoleo.dev ", "url": "https:\/\/theredcode.it\/data-science\/etl-for-dummies\/" }, "https:\/\/theredcode.it\/eventi\/django-girls-2022-pescara\/": { "title": "Django Girls 2022 @ Pescara", "tags": [], "content": "Anche per questo evento TheRedCode è Media Partner delle super Django Girls!\nQuando: 19 Novembre 2022\nDove: Pescara\nTitolo: Django Girls 2022\nPartecipa all’evento\nOrganizzato da: Django Girls Italia\nContatti Landing dell’evento Link per iscriversi Evento Facebook Django Girls Italia on Facebook Django Girls Italia on Twitter ", "url": "https:\/\/theredcode.it\/eventi\/django-girls-2022-pescara\/" }, "https:\/\/theredcode.it\/categories\/event\/": { "title": "event", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/categories\/event\/" }, "https:\/\/theredcode.it\/eventi\/": { "title": "Eventis", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/eventi\/" }, "https:\/\/theredcode.it\/interviste\/voglio-diventare-un-penetration-tester\/": { "title": "Voglio diventare un... Penetration Tester", "tags": ["interviste","voglio-diventare",], "content": "La cybersecurity è al centro dell\u0026rsquo;attenzione di tutte le aziende: richiede competenze tecniche trasversali e, soprattutto, tanta curiosità.\nOggi Simone Onofri ci racconta come funziona questo settore e cosa vuol dire diventare un Penetration Tester!\nCosa vedrai Descriviti in 100 parole In cosa consiste il ruolo di Penetration Tester? Qual è la soft skill più importante che deve possedere una Penetration Tester? La maggior parte di noi utilizza i social per parlare dei propri successi, ma la realtà è che siamo quel che siamo grazie al 90% dei nostri errori. Racconta il tuo più grande fallimento da quando lavori nel settore, che però ti ha reso ciò che sei. Come fare per diventare una Penetration Tester? Parlando di successi, qual è il tuo prossimo obiettivo? Quale ruolo vorresti ricoprire entro i prossimi 3 anni? Conosci il tema gender gap in ambito STEM? Se sì, come fare per superarlo? Contatti Descriviti in 100 parole Sono Simone, Director in una azienda di Cyber Security, dove svolgiamo attività di Penetration Testing e Red Teaming.\nSin da piccolo sono stato affascinato dai Computer e la curiosità mi ha spinto a smontare e rimontare software per capirne il funzionamento. Leggevo qualsiasi cosa mi capitasse tra le mani e ho cominciato a sviluppare.\nUn bel giorno, mi si sono aperte le porte di Internet e mi sono addentrato su IRC dove - con diversi amici - abbiamo imparato l’assembly e a fare reversing. Amici che poi ho ritrovato in questo lavoro dopo tanti anni.\n La passione mi ha dato la forza di trasformare il tutto in un lavoro.\n Ho cominciato a sviluppare e a gestire reti, sempre focalizzandomi sugli aspetti di sicurezza. Da li attività sempre più sfidanti, la gestione di progetti sempre più grandi fino a dove sono ora.\nIn cosa consiste il ruolo di Penetration Tester? Un Penetration Tester è una persona che simula un attacco, applicando un metodo e utilizzando strumenti e tecniche specifiche.\n Spesso si lavora in solitaria, ma è in team che si ottengono i risultati migliori, in particolare su bersagli complessi (si pensi ad una rete di una grande organizzazione) dove ognuno è specializzato su un aspetto specifico.\nQual è la soft skill più importante che deve possedere una Penetration Tester? Un noto motto nell’ambiente è “Try Harder”, quindi impegnarsi sempre di più quando affrontiamo un problema fino a che non lo risolviamo, senza demordere ai primi insuccessi e sfruttando, man mano che si fanno le prove, quello che viene definito il pensiero laterale o andare “Out of the box”.\nInoltre, lavorando in team, avere uno spirito collaborativo e di condivisione e’ fondamentale.\nLa maggior parte di noi utilizza i social per parlare dei propri successi, ma la realtà è che siamo quel che siamo grazie al 90% dei nostri errori. Racconta il tuo più grande fallimento da quando lavori nel settore, che però ti ha reso ciò che sei. Mi ricollego al punto precedente.\nEravamo con un collega all’estero. L’attività era molto importante e sfidante, durata due settimane. Alla fine della prima settimana non avevamo trovato nulla di interessante ed eravamo un po’ demoralizzati, ma nonostante questo non ci siamo persi d’animo con un po’ di pensiero “out of the box” e condividendo le nostre idee e perplessità abbiamo trovato finalmente una nuova vulnerabilità che – una volta sfruttata – ci ha permesso di portare a casa ottimi risultati.\n Da questo ho imparato a non arrendermi di fronte le difficoltà e che se non so una cosa oggi, la saprò domani… e che non devo mai pensare di sapere già tutto e – quando si impara – e’ fondamentale collaborare e condividere i propri dubbi.\n Come fare per diventare una Penetration Tester? Per diventare un Penetration Tester è necessario sviluppare un buon mix di competenze.\n Come dice un amico: “un buon tester è spesso un buon sistemista e un buon sviluppatore, un ottimo tester è spesso un ottimo sistemista e un ottimo sviluppatore”.\n Dobbiamo “conoscere il nostro nemico”, quindi se stiamo attaccando una rete Windows, dobbiamo sapere come e’ fatta e come si configura, se stiamo attaccando una rete quali sono i protocolli, come funzionano e come sono implementati.\nQuindi: linguaggi di programmazione, i sistemi, i protocolli di rete e il funzionamento delle reti.\nInoltre anche una conoscenza di quelle che sono le metodologie specifiche di test (e.g. OWASP Testing Guide, OSSTMM, PTES, NESCOR, ATT\u0026amp;CK, NIST…).\nNon può mancare la padronanza degli strumenti, che spesso ci facciamo da soli tramite un linguaggio come Python o Powershell.\nCome percorso sicuramente è utile avere delle basi teoriche ma in generale è cruciale fare pratica e “sporcarsi le mani”.\nQuindi è bene fare dei laboratori come anche partecipare ai Capture The Flag – che possono essere anche un interessante luogo di incontro dove conoscere persone coi nostri stessi interessi.\nPensando alle certificazioni spesso sono utili – preferendo quelle che hanno un risvolto pratico – sia per arricchire il proprio Curriculum – che come obiettivo per motivarsi.\nUltimo ma di non poca importanza, quando si fa un test dobbiamo saper spiegare e presentare i nostri risultati, quindi un po’ di “Technical Writing” non fa male.\nParlando di successi, qual è il tuo prossimo obiettivo? Quale ruolo vorresti ricoprire entro i prossimi 3 anni? Continuare a lavorare col team su attività sempre più sfidanti, mantenendo un ambiente sereno e collaborativo.\nConosci il tema gender gap in ambito STEM? Se sì, come fare per superarlo? Purtroppo questo è un ambiente prevalentemente maschile, e qualcuno dice per come sia stata presentata al grande pubblico la sicurezza informatica, come nel film War Games (1993). Ma se pensiamo al film Matrix (1999), non possiamo non fare riferimento all’importanza Trinity e alle sue competenze tecniche.\nMa tornando nel mondo reale - e indietro nel tempo – dobbiamo ricordarci di Margaret Hamilton: alla guida del suo team ha programmato il sistema di guida di Apollo che ha permesso nel 1969 a Neil Armstrong e a Buzz Aldrin di atterrare in sicurezza sulla Luna.\nIn tempi più recenti, pensando a quando lavoravo in HP, Meg Whitman ha guidato l’azienda attraverso uno dei suoi più grandi split tra HP e HPE – e di HPE è ancora CEO. I n ambito Security ho spesso notato che le Donne che lavorano nell’ambito sono molto competenti anche tecnicamente, come Valentina Palomitti (chompie), al momento Lead Security Researcher in una nota azienda americana. Questo a dimostrare che il Gender Bias è – come da traduzione letterale – un semplice pregiudizio.\n Nel mio piccolo, ho sempre cercato di collaborare e assumere ragazze evitando la disparità di stipendi e trattamenti particolari ma di basarmi direttamente sulle competenze tecniche e sul potenziale di ogni persona.\n Altro aspetto, che faccio nel mio quotidiano, è monitorare eventualmente problematiche di harassment e garantire una cultura del rispetto sia all’interno del team di lavoro e dell’azienda come anche dai clienti.\nContatti Profilo LinkedIn ", "url": "https:\/\/theredcode.it\/interviste\/voglio-diventare-un-penetration-tester\/" }, "https:\/\/theredcode.it\/data-science\/etl-e-dintorni\/": { "title": "ETL e dintorni", "tags": ["data-science","etl",], "content": "Il lavoro del/la data scientist a volte assomiglia a quello di un archeologo: nell\u0026rsquo;era dei Big Data, dove abbiamo dati ovunque, bisogna \u0026ldquo;scavare\u0026rdquo; per trovare delle informazioni utili, strutturarle, trasformare opportunamente\u0026hellip;\nCon oggi cominciamo una nuova mini-serie dedicata all\u0026rsquo;ETL: il processo di profilare, modificare e predisporre i dati per le esigenze business è un lavoro da supereroi e affatto noioso: ce lo racconta Giuseppe Checchia!\nCosa vedrai Intro ETL (Extract Transform Load) Come funziona Intro Nel mondo della progettazione software spesso si sente parlare di ETL e questo è particolarmente vero se si parla di data warehousing, integrazioni e strumenti di Business Intelligence.\n ETL significa “Extract, Transform, Load”, cioè “Estrarre, Trasformare, Caricare” ed è un pattern per la gestione dei dati, utilissimo quando abbiamo a disposizione diverse fonti e vogliamo centralizzare, cioè avere tutto a disposizione in un unico posto.\n “Che succede? Qualcosa non va con il monitor?” “Sto aspettando che finisca di caricare\u0026hellip;”\nPer la maggior parte degli addetti ai lavori, questo è stato probabilmente il primo impatto con la metodologia di integrazione ETL.\nSpesso chi è perso in questo genere di attività viene preso in giro dai colleghi, perché non di rado l’operatore può dare l’impressione di fissare un monitor senza fare niente: dopo aver programmato, il primo run delle procedure viene fatto osservando lo stato degli step e i log generati dal sistema per assicurarsi che tutto stia filando liscio.\nQuesto ha contribuito a generare il luogo comune per cui questo genere di lavoro dovrebbe essere noioso, poco attraente e adatto solo a chi non ha motivazione.\n Niente di più falso: ETL è alla base di moltissime tecnologie che usiamo e se programmi, probabilmente hai applicato questi procedimenti anche tu, senza rendertene conto.\n Inoltre, un pattern è uno schema, una mappa, un’indicazione e non il territorio: puoi usare bene la mappa ed arrivare a destinazione, oppure no.\nPer applicare ETL con successo, di norma è necessario conoscere moltissime cose e avere una grande esperienza, a causa delle numerose tecnologie con cui sarà necessario rapportarsi. Questa metodologia permette infatti di dividere concettualmente il lavoro in processi e step.\nOgni processo può essere eseguito da solo o parallelamente ad altri, mentre gli step sono necessariamente sequenziali: ogni step può servire per estrarre dati, trasformarli o caricarli su un supporto finale e ognuno di essi può relazionarsi con sistemi\noperativi diversi, protocolli diversi, tecnologie agli antipodi.\nGeneralmente chi è in grado di gestire processi ETL complessi ha quindi competenze che vanno dalla gestione di database tradizionali a quelli che stanno dietro ai cosiddetti Big Data, dalla conoscenza dei protocolli di rete ad aspetti più vicini alla programmazione, dall’ottimizzazione delle reti, fino alla comprensione di cosa sia davvero un cloud distribuito e di come possa funzionare.\nETL (Extract Transform Load) Introdotto già una cinquantina di anni fa a causa del crescente utilizzo dei database, ETL è diventato molto\nvelocemente uno standard di gestione delle informazioni.\nIl processo fornisce le basi per l\u0026rsquo;analisi dei dati ed è parte integrante di nuove materie come il Machine Learning: permette di organizzare tutto in modo da soddisfare specifiche esigenze di business intelligence, come i report mensili, ma può anche affrontare analisi più avanzate che possono migliorare i processi di back-end o le esperienze degli utenti finali.\n Il processo ETL, come abbiamo detto, comprende tre fasi: estrazione, trasformazione e caricamento (loading).\n Siccome la maggior parte delle attività commerciali hanno una quantità enorme di dati sparsi e frammentati (in programmi che vengono utilizzati di rado, in cloud sotto il controllo di vecchi fornitori e in sistemi legacy), inutilizzabili così come sono, sorge il bisogno di un unico sistema in grado di raccogliere tutti questi dati, ripulirli e utilizzarli.\n È come se avessimo bisogno di vari strumenti sparsi per la casa, e pochi clic ci potessero aiutare a raccogliere immediatamente questi strumenti, a ripulirli dalla ruggine e a utilizzarli nel modo più efficace possibile. Facile, no? No. :-D\n Come funziona Costruire un sistema ETL è impegnativo perché è pesantemente vincolato da realtà inevitabili. Il team deve scendere a patti con i requisiti di business, i formati e le carenze dei dati di origine, i sistemi legacy esistenti, le competenze del personale disponibile e i sempre mutevoli (e legittimi) bisogni degli utenti finali.\nCome se non bastasse, spesso il budget è limitato e il tempo a disposizione troppo poco.\nIdealmente, la progettazione del sistema ETL inizia con una delle sfide più difficili: circoscrivere i requisiti. \nCon questo si intende trasformare una richiesta apparentemente semplice da parte del cliente, che può essere interno o esterno, in una struttura dati voluta.\nQuesta struttura deve poter essere popolata sulla base dei dati esistenti, affinché possano essere riciclati per ottenere il prodotto voluto (un report, un grafico, un lake o qualsiasi altra cosa).\nNegli ultimi anni però, è stata aggiunta complessità: con le nuove direttive europee (GDPR and so on) e la crescente trasparenza richiesta a società e imprese, le organizzazioni sono costrette a fornire la prova che i numeri riportati sul prodotto siano accurati, completi, e non siano stati manomessi. Come è facile intuire, tale attività di certificazione tecnica dei dati ha impatti sulla progettazione e sul lavoro degli sviluppatori.\nChiaramente i dati relativi ad attività regolamentate, come le telecomunicazioni o la sanità, avrebbero dovuto\nrispettare i requisiti normativi già da molto tempo, ma le cose stanno diventando complesse anche per tutti gli altri settori.\n È importante anche il profiling dei dati: è un esame sistematico della qualità, della portata e del contesto di una\nfonte di dati, che assicura che il dato sia buono.\n Una fonte di dati molto pulita che è stata ben mantenuta prima di arrivare al data warehouse richiede una trasformazione minima e un intervento umano limitato, prima di essere ri-caricato nelle tabelle finali.\nUna fonte di dati sporchi, invece, può richiedere: l’eliminazione totale di alcuni campi di input, la segnalazione di dati\nmancanti, la generazione di chiavi speciali, la sostituzione automatica dei valori corrotti (o, nella peggiore delle ipotesi, un intervento manuale da record, che prosciuga forza lavoro e tempo).\nAll’estremo, il profiling potrebbe rivelare che i dati di origine sono intrinsecamente errati e non possono sostenere gli obiettivi del business: la magia non esiste.\nLa fase di profiling dei dati è fondamentale perché permette al team di pronosticare tempi e mole di lavoro, ma anche possibili impatti e deviazioni che, se ben gestite, consentono di gestire i problemi nella maniera opportuna senza portare il progetto al fallimento.\nChiunque voglia costruire un sistema ETL, dovrebbe occuparsi del profiling dei dati fin da subito, così da avere programmi di sviluppo realistici, capire le limitazioni nei dati di origine e la necessità di investire in modi migliori per ottenere i dati necessari.\n Se ti è piaciuto questo articolo, non ti dimenticare di commentare e condividere! ⬇️\n Contatti https://pausacaffe.live https://podcastdelminotauro.it https://instagram.com/eldoleo.dev ", "url": "https:\/\/theredcode.it\/data-science\/etl-e-dintorni\/" }, "https:\/\/theredcode.it\/interviste\/voglio-diventare-una-digital-business-manager\/": { "title": "Voglio diventare una... Digital Business Manager", "tags": ["interviste","voglio-diventare",], "content": "Digital Business Manager: una professione che concilia capacità organizzative e ottimizzazione nell\u0026rsquo;ambito digitale nata negli ultimi anni.\nEntriamo nel vivo di questo ruolo con Annalisa, che ci racconta da vicino cosa vuol dire e come diventarlo!\nCosa vedrai Descriviti in 100 parole In cosa consiste il ruolo di Digital Business Manager? Qual è la soft skill più importante che deve possedere una Digital Business Manager? La maggior parte di noi utilizza i social per parlare dei propri successi, ma la realtà è che siamo quel che siamo grazie al 90% dei nostri errori. Racconta il tuo più grande fallimento da quando lavori nel settore, che però ti ha reso ciò che sei. Come fare per diventare una Digital Business Manager? Parlando di successi, qual è il tuo prossimo obiettivo? Quale ruolo vorresti ricoprire entro i prossimi 3 anni? Conosci il tema gender gap in ambito STEM? Se sì, come fare per superarlo? Contatti Descriviti in 100 parole Aiuto!\n100 parole sono una bella sfida, ma amo le sfide!\nSono Annalisa dopo la laurea in lingue e comunicazione internazionale con una tesi in traduzione dal russo, inizio a lavorate nel settore hotellerie e gestione eventi. Divento in pochi mesi front office, location manager e assistente di direzione.\nDopo 10 anni decido di avviare il mio business online. Nel 2021 divento Professional Organizer specializzata in gestione del tempo e del lavoro associata APOI.\nOggi sono il braccio destro di tante imprenditrici digitali che adoro! Le supporto nella gestione di sistemi, processi di lavoro, progetti, team e collaboratori da remoto.\nIn cosa consiste il ruolo di Digital Business Manager? Un digital o online business manager aiuta imprenditori e imprenditrici a gestire team e collaboratori da remoto, pianificare progetti digitali e assicurarsi che tutte le attività e tutti i passaggi vengano effettivamente portati a termine, ottimizzare sistemi e processi di lavoro in modo che l’imprenditore o l’imprenditrice possa focalizzarsi sul suo core business.\n Lavoro principalmente con imprenditrici digitali e startup. Mi occupo di riconoscere tutti i passi che costituiscono un progetto in modo che tutte le task siano meno di effetto sovraccarico e che sia chiaro chi deve fare cosa entro quando.\nSupporto le mie clienti in creare strategie ad alto livello per realizzare obiettivi di business, progetti e realizzare una visione che sia ben definita; ottimizzo i sistemi e i processi di lavoro per fare in modo che il business possa scalare in modo fluido ottimizzando anche il tempo e le risorse investite in ogni progetto o attività.\nNon lavoro da sola, ma a stretto contatto con le mie clienti, sono il loro braccio destro e adoro i brainstorming e i confronti costruttivi continui che ho con loro.\nQual è la soft skill più importante che deve possedere una Digital Business Manager? Innanzitutto l’empatia: è un lavoro che ti porta a comunicare tantissimo non solo con i tuoi clienti, ma anche con collaboratori esterni e membri del team.\nDevi essere in grado di parlare direttamente e in modo accogliente con tutti coloro che si interfacciano con te affinché il lavoro fluisca bene e senza intoppi.\nDeve essere paziente e accogliente, avendo a che fare con i progetti di altre persone, spesso, le richieste ti arrivano all’ultimo minuto e diventi un po’ il punto di riferimento anche dei momenti di crisi.\n In queste situazioni devi essere paziente e sempre pronta a vedere il bicchiere mezzo pieno spingendo e dando entusiasmo a clienti e collaboratori.\n L’altra grande soft skill decisamente la curiosità e la voglia di studiare.\nCome tutti coloro che hanno a che fare con il digitale devi essere sempre pronta a trovare le soluzioni prima che si ponga il problema e in modo rapido ed efficiente.\nUltima soft skill è quella di essere disponibile all’ascolto attivo e la capacità di accogliere le critiche e gli appunti in modo sempre propositivo e costruttivo.\nNo scherzavo, ce n’è un’altra: desiderio di vedere i progetti dei clienti come se fossero i tuoi e prendertene cura in modo più forte che se fossero i tuoi.\nLa maggior parte di noi utilizza i social per parlare dei propri successi, ma la realtà è che siamo quel che siamo grazie al 90% dei nostri errori. Racconta il tuo più grande fallimento da quando lavori nel settore, che però ti ha reso ciò che sei. Una cosa che mi contraddistingue è il mindset di crescita, quindi ho difficoltà a trovare fallimenti perché sono sempre delle enormi possibilità di crescita.\n Forse il mio fallimento più grande, ma che poi mi ha aiutato tantissimo a fidarmi del mio istinto imprenditoriale è stato accettare uno dei miei primi clienti anche se l’istinto mi diceva che non sarebbe stato la persona giusta.\n In effetti è stato così: per me lavorare per lui è stato un incubo e il mio servizio non è stato per niente apprezzato, però è stata l’occasione per definire con ancora più nettezza con chi voglio lavorare e ora infatti riesco ad accogliere tutti progetti che amo e che è un vero piacere veder crescere passo dopo passo.\nCome fare per diventare una Digital Business Manager? Esiste una certificazione al momento negli Stati Uniti, ma non è indispensabile per lavorare nel settore. Io ho frequentato il corso di una collega inglese che mi ha affascinato subito per il suo modo super pratico e per la sua esperienza che ho sentito molto simile alla mia.\nCompetenze necessarie sono legate all’ambito digitale quindi dimestichezza con le nuove tecnologie, una buona conoscenza del marketing e dei social, come dicevo anche prima una forte propensione a curare la tua comunicazione anche nei contatti diretti faccia a faccia, capacità di lavorare e gestire un team anche da remoto, saper essere sempre sul pezzo con le innovazioni tecnologiche e di business.\nParlando di successi, qual è il tuo prossimo obiettivo? Quale ruolo vorresti ricoprire entro i prossimi 3 anni? Entro i prossimi 3 anni vorrei creare un mio corso per formare dei digital business manager, perché inizio a fare fatica a seguire i miei clienti e se dovessi lasciarli vorrei affidarli a qualcuno che conosco e che può entrare in contatto con me per risolvere problemi o difficoltà.\nQuando inizio una collaborazione con qualcuno, mi riesce poi difficile lasciarlo e non seguirlo più; il mio progetto quindi è quello di creare una mia academy per digital business manager e assistenti virtuali e poi un\u0026rsquo;agenzia per poter formare e lavorare con persone che siano in grado di \u0026ldquo;seguire le mie orme\u0026rdquo;.\nConosci il tema gender gap in ambito STEM? Se sì, come fare per superarlo? Assolutamente sì, lo conosco e lo sento ancora più vicino da quando ho iniziato a lavorare in questo campo e da quando sono diventata mamma di una splendida bimba. Ho firmato il manifesto Mind the STEM gap della Fondazione Bracco che è un’iniziatica di immenso valore per superare questo problema, anche se è ancora troppo poco noto.\nIo personalmente sto cercando di implementarlo nell’educazione che sto dando a mia figlia e cerco di diffonderlo anche intorno a me.\nNel mio caso specifico, due anni fa a 34 anni, nonostante molti intorno a me spingessero al non metterti in gioco specialmente in un settore così nel quale è complesso farsi strada soprattutto come freelance ho deciso di non ascoltare nessuno, ma al contrario formarmi ancora di più in temi che ho studiato sempre come autodidatta da decenni e mettermi in gioco e non avrei potuto fare scelta migliore.\n Ecco, con lo stesso spirito dovremmo reagire a tutti quelli che cercano di bloccarci con stereotipi e messaggi limitanti, se ci crediamo tutti insieme e passo dopo passo possiamo realizzare grandi cose!\n Contatti Pagina Instagram ", "url": "https:\/\/theredcode.it\/interviste\/voglio-diventare-una-digital-business-manager\/" }, "https:\/\/theredcode.it\/intelligenza-artificiale\/ai-ethics\/": { "title": "Etica dell\u0027intelligenza artificiale", "tags": ["intelligenza-artificiale",], "content": "Negli ultimi anni il settore dell\u0026rsquo;intelligenza artificiale ha ripreso in mano una tematica non nuova, ma certamente necessaria: affrontiamo diversi aspetti dell\u0026rsquo;etica dell\u0026rsquo;intelligenza artificiale, e di come i grandi colossi la stanno trattando.\nCosa vedrai AI Etica Principi per un\u0026rsquo;IA responsabile Calcolare le conseguenze Conclusioni Risorse utili AI Etica L\u0026rsquo;etica dell\u0026rsquo;intelligenza artificiale è una branca che nasce con lo scopo di definire delle linee guida riguardanti i valori fondamentali che ogni sistema di AI dovrebbe adottare, come diritti individuali, tra cui privacy e inclusione.\nLa questione etica è complessa e molto dipende dalla cultura in cui il sistema di AI agisce, per cui non può essere applicata con i soli mezzi tecnici.\nUn problema molto conosciuto è quello del carrello ferroviario, che risale agli anni \u0026lsquo;70: come riporta Wikipedia, nella versione originale, un autista di un tram conduce un veicolo capace solo di cambiare rotaia (tramite deviatoio), senza la possibilità di frenare.\nSul binario percorso si trovano cinque persone legate e incapaci di muoversi e il tram è diretto verso di loro. Tra il tram e le persone legate si diparte un secondo binario parallelo, sul quale è presente una persona legata e impossibilitata a muoversi. La persona nei pressi del deviatoio si trova di fronte un\u0026rsquo;alternativa che comporta due sole opzioni: lasciare che il tram prosegua dritto la sua corsa, uccidendo le cinque persone, oppure azionare lo scambio e ucciderne una sola.\nNel corso degli anni sono nate diverse varianti: la persona sul binario da sola potrebbe essere un criminale, e quindi la scelta sembrerebbe più semplice; nel caso in cui si abbia a che fare con una persona di età alta: cosa fare?\nL\u0026rsquo;etica nell\u0026rsquo;ambito dell\u0026rsquo;AI è un tema importante, soprattutto quando parliamo di applicazioni come le auto a guida autonoma.\nL\u0026rsquo;aspetto fondamentale è comprendere che non esiste un\u0026rsquo;opinione universale sul tema né delle linee guida, perché è una questione estremamente eterogenea. In Giappone o Cina, ad esempio, il problema del tram viene spesso risolto con la prima opzione, mentre sembra che il mondo occidentale propenda per uccidere una persona.\n Creare algoritmi è un\u0026rsquo;attività contestuale e dipende da diversi fattori, tra cui la cultura, per cui prendere delle decisioni solamente sui dati a nostra disposizione può portare a bias.\n All\u0026rsquo;interno di un processo di IA responsabile, abbiamo bisogno di costruire soluzioni minimal ethical: queste dovrebbero permettere di creare dei prodotti le cui attività di AI possano essere messi \u0026ldquo;in pausa\u0026rdquo; senza perdere la funzionalità del prodotto, nonché il rispetto dei principi etici di base. Un principio è la benevolenza: sviluppare un minimum ethical product significa monitorare attentamente come la soluzione impatta gli utenti. Non solo: è bene porsi domande come: qual è lo scopo che cerca di raggiungere questo sistema? C\u0026rsquo;è bisogno di sfruttare uno o più algoritmi di AI per raggiungere questo obiettivo? Ci sono altri metodi a più basso rischio che è possibile utilizzare? E, infine, il sistema di AI svolge in maniera efficiente?\n Non dimentichiamo che l\u0026rsquo;impatto sull\u0026rsquo;utente non solo dipende dal modo in cui il sistema viene progettato, ma anche in base a come l\u0026rsquo;utente vi interagisce.\n Principi per un\u0026rsquo;IA responsabile Equità: si tratta di un principio socio-tecnico che non può essere trattato come una singola prospettiva. Ci sono almeno 20 definizioni di equità che a volte si contraddicono e non includono eguaglianza. Un sistema non può essere \u0026ldquo;giusto\u0026rdquo; nei confronti di tutti i gruppi valutati nello stesso momento, quindi è più giusto parlare di fairness-related harms come meccanismo per valutare i gruppi più impattati e dare una priorità a loro. Problemi relativi al senso di giustizia di un sistema solo quelli che portano, tra le altre cose, a una mancata rappresentazione (sistemi di accesso che non prevedono accesso per uomini o donne neri o persone che portano dei cappelli). Nei set di dati che coinvolgono informazioni di identificazione personale, è estremamente importante garantire che non vi siano pregiudizi in termini di razza, genere o etnia. Trasparenza: Un sistema di IA trasparente supporta la governance richiesta alle aziende per garantire l\u0026rsquo;uso etico dell\u0026rsquo;IA. È difficile avere fiducia nelle azioni di un sistema che non può essere spiegato. Raggiungere la fiducia potrebbe comportare un compromesso in cui viene fatto un piccolo compromesso nelle prestazioni del modello al fine di selezionare un algoritmo che può essere spiegato. Responsabilità: chi progetta e chi sviluppa sistemi di IA ha la responsabilità di considerare la progettazione, lo sviluppo, i processi decisionali e i risultati dell\u0026rsquo;IA. Il giudizio umano gioca un ruolo in un sistema apparentemente oggettivo di decisioni logiche. Sono gli esseri umani che scrivono algoritmi, che definiscono il successo o il fallimento, che prendono decisioni sugli usi dei sistemi e che possono essere influenzati dai risultati di un sistema. Ogni persona coinvolta nella creazione di una soluzione di IA in qualsiasi fase è responsabile di considerare l\u0026rsquo;impatto del sistema per gli utenti finali, così come le aziende che hanno investito nel suo sviluppo. Interpretabilità: Quando i sistemi di intelligenza artificiale non funzionano come dovrebbero, i team devono essere in grado di tracciare una complessa catena di algoritmi e processi per scoprire il motivo. Le organizzazioni che utilizzano l\u0026rsquo;IA dovrebbero essere in grado di spiegare i dati di origine, i dati risultanti, cosa fanno i loro algoritmi e perché lo stanno facendo. \u0026ldquo;L\u0026rsquo;IA deve avere un forte grado di tracciabilità per garantire che se si verificano danni, possono essere ricondotti alla causa\u0026rdquo;, ha affermato Adam Wisniewski, CTO e co-fondatore di AI Clearing. Inclusione: Un sistema di intelligenza artificiale inclusivo è imparziale e funziona ugualmente bene in tutti gli spettri della società. Ciò richiede la piena conoscenza di ciascuna fonte di dati utilizzata per addestrare i modelli di intelligenza artificiale al fine di garantire che non vi siano distorsioni intrinseche nel set di dati. Richiede inoltre un\u0026rsquo;attenta verifica del modello addestrato per filtrare eventuali attributi che possano deviare il modello creato nel processo. I modelli devono sempre: essere attentamente monitorati per garantire che non si verifichino fenomeni di corruzione anche in futuro. Calcolare le conseguenze Uno dei motivi per cui uno sviluppo responsabile è difficile è che l\u0026rsquo;IA può creare più errori nascosti. I modelli sono semplicemente rappresentazioni statistiche delle caratteristiche osservabili come il movimento dei muscoli facciali, la lunghezza dei capelli o il tono della pelle. E non riescono a rappresentare concetti non osservabili come emozioni, genere o razza.\nL\u0026rsquo;etica delle macchine si occupa di garantire che il comportamento delle macchine nei confronti degli utenti umani e forse anche nei confronti di altre macchine sia eticamente accettabile. Idealmente, il ragionamento dell\u0026rsquo;IA dovrebbe essere in grado di tenere conto dei valori sociali, delle considerazioni morali ed etiche, soppesare le rispettive priorità dei valori detenuti dai diversi stakeholder in vari contesti multiculturali e spiegarne il ragionamento e garantire la trasparenza.\nIn un sondaggio di Avanade Insights, hanno scoperto che l'83% degli stakeholders aziendali e tecnologici ritiene\nche l\u0026rsquo;etica digitale sia una base per un\u0026rsquo;intelligenza artificiale di successo. Tuttavia, c\u0026rsquo;è un divario di esecuzione tra le nostre intenzioni dichiarate e ciò che facciamo in pratica. Ci sono due tipi di conseguenze. Inteso e non intenzionale. Le conseguenze previste sono il cambiamento o l\u0026rsquo;impatto che stai cercando di apportare. Questi sono i requisiti del tuo progetto.\nLe conseguenze a cui un sistema può portare sono chiaramente di due tipologie: previste, quindi anche inerenti lo scopo originale del business a beneficio dell\u0026rsquo;utente e di che sviluppa il sistema, e non previste, quindi delle azioni che non sono state incluse tra quelle previste.\n Non tutte le conseguenze sono negative: nel caso di un sistema che diagnostica una predisposizione per il cancro al seno, la conseguenza è estremamente positiva!\n Quando si esegue quindi una valutazione etica del sistema e si calcolano le conseguenze, è necessario chiedersi:\n Quali sono le conseguenze previste e non attese del sistema che l\u0026rsquo;utente deve aspettarsi? Quali sono quelle su cui vogliamo che il prodotto punti il suo focus? Quali conseguenze vogliamo mitigare, tra quelle non attese? Conclusioni Molte grandi aziende stanno lavorando a dei framework di intelligenza artificiale: questi permetterebbero di delineare le best practice per aderire ai principi di un\u0026rsquo;IA etica e di regolamentare il relativo impatto e monitoraggio.\nGoogle parla di approccio human-centered, IBM porta al centro dell\u0026rsquo;ecosistema il contesto della soluzione, dove i diversi attori contribuiscono con feedback continui.\nLa documentazione che viene presentata è sempre molto curata e ben presentata -la UX design è così attenta che navigare il sito dà un senso di pace, proprio per non far insorgere preoccupazione negli utenti che temono le conseguenze dell\u0026rsquo;AI-.\nIn che modo però si riesce a conciliare nel pratico diritti umani e AI?\nLo vediamo nel prossimo articolo!\n Se ti è piaciuto questo articolo, non ti dimenticare di commentare e condividere! ⬇️\n Risorse utili ‘Do no harm’ isn’t good enough Problema del carrello Chinese and Westerners Respond Differently to the Trolley Dilemmas IBM AI Ethics Google AI Ethics ", "url": "https:\/\/theredcode.it\/intelligenza-artificiale\/ai-ethics\/" }, "https:\/\/theredcode.it\/interviste\/voglio-diventare-una-cto\/": { "title": "Voglio diventare una... CTO", "tags": ["interviste","voglio-diventare",], "content": "Quando pensiamo alla figura del CTO, pensiamo ad un ruolo carico di responsabilità e perlopiù ricoperto da persone di genere maschile.\nCon l\u0026rsquo;ottica di portare delle role model, parliamo della carriera di **Pamela Gotti come CTO di Credimi!\nCosa vedrai Descriviti in 100 parole In cosa consiste il ruolo di CTO? Qual è la soft skill più importante che deve possedere una CTO? La maggior parte di noi utilizza i social per parlare dei propri successi, ma la realtà è che siamo quel che siamo grazie al 90% dei nostri errori. Racconta il tuo più grande fallimento da quando lavori nel settore, che però ti ha reso ciò che sei. Come fare per diventare una CTO? Parlando di successi, qual è il tuo prossimo obiettivo? Quale ruolo vorresti ricoprire entro i prossimi 3 anni? Conosci il tema gender gap in ambito STEM? Se sì, come fare per superarlo? Contatti Descriviti in 100 parole Sono Pamela Gotti, CTO di Credimi, una scaleup fintech milanese che aiuta le piccole medie imprese a crescere mettendo a disposizione prodotti finanziari in modo semplice e veloce.\nSono in Credimi da quando è nata e aver visto la sua crescita da quando eravamo in 5 ad ora che siamo in 90 è stato davvero emozionante!\nSono nel ramo dell’informatica da sempre (ho iniziato a studiarla dalle medie!) e ho sfruttato a pieno la sua versatilità: ho lavorato nella travel industry, nel product anti-abuse, nella political intelligence e adesso sono nel fintech.\n È un ramo talmente in evoluzione e talmente versatile che ogni giorno c’è qualcosa di nuovo da imparare, non ci si annoia mai!\n Credo anche fermamente nel potere delle community: sono CTO di SheTech, che si occupa di empowerment delle donne nel mondo del digital, dell’imprenditoria e della tecnologia, e partecipo attivamente alle community di AWS e Codemotion.\nTecnologia a parte, adoro immergermi in un buon libro, passare ore a passeggiare in montagna, fermarmi in posizioni strane facendo yoga e ascoltare e ballare musica swing.\n Insomma, mi piace spaziare sia sul lavoro che nella vita!\n In cosa consiste il ruolo di CTO? Il ruolo di CTO è diverso in ogni azienda, ma penso che alla base di tutto ci siano due attività da cui non si può proprio scappare.\nIl primo è lavorare con gli altri executive per definire la direzione aziendale, e da lì declinare la strategia della tecnologia. E questo significa definire cosa e come sviluppare in casa e cosa comprare, valutare diversi fornitori, e in generale come utilizzare al meglio il budget per raggiungere gli obiettivi aziendali.\nIl secondo invece è essere il volto tecnologico dell’azienda: mi capita di fare pitch con gli investitori e di contribuire al nostro employer branding partecipando come speaker ad eventi.\nTra le attività che svolgo io c’è il people management: ho definito insieme ad HR un piano di crescita per tutti gli ingegneri nel mio team e gestisco direttamente 7 persone (il che significa definire OKRs, fare 1:1 periodici con tutti, fare da mentor per i più junior quando serve), e 21 in tutto.\nAlcuni CTO riescono anche ad essere molto hands on, ovvero a continuare a scrivere codice. Non è il mio caso (e non ti nascondo che avendo il background da backend engineer un po’ mi manca).\nPenso che per capire a fondo la tecnologia e prendere le giuste decisioni bisogna per forza metterci le mani e la testa, e visto che adesso non ho più il tempo di una volta per farlo, quando posso contribuisco alla nostra code base fixando qualche bug o facendo code reviews; in questo modo riesco a rimanere attaccata alla realtà del mondo dello sviluppo, e a capire se ci sono blockers nei processi di sviluppo che impediscono al team di dare il meglio.\n Visto il mio ruolo posso anche agire sulle leve giuste per togliere quei blockers!\n Last but not least, oltre allo sviluppo tecnologico coordino anche lo sviluppo dell’IT, della security e del nostro data lake, che è il centro di tutte le decisioni data driven che prendiamo.\nSono tante sfaccettature, e per fare tutto non si può essere da soli! \nE quello che mi entusiasma di più è proprio il team di persone con cui lavoro.\nPer poter definire una roadmap di sviluppo ho bisogno di lavorare a stretto contatto in primis con prodotto (lavorando in un’azienda di prodotto, sono quotidianamente in contatto con il CPO - P = product), ma poi devo spaziare anche in altri ambiti come il marketing, il lending, customer delight.\nE poi ovviamente c’è il team che coordino che è composto da persone super in gamba, io cerco di dare loro il contesto necessario per lavorare e i ragazzi partono in quarta!\nQual è la soft skill più importante che deve possedere una CTO? Ti direi essere in grado di ascoltare, sia all’interno che all’esterno dell’azienda.\nAll’esterno per cogliere opportunità - come dicevo prima la tecnologia va alla velocità della luce e bisogna essere in grado di capire quali sono i trend su cui vale la pena investire.\nDa non sottovalutare anche l’ascolto del feedback dei clienti diretti, che consente di capire come migliorare il prodotto.\nAll’interno invece bisogna capire dove la tecnologia può aiutare i colleghi. Al di là del prodotto, ci sono sempre processi interni che possono essere automatizzati e migliorati; capire quali sono i colli di bottiglia e ottimizzarli si riversa automaticamente sull’efficienza del prodotto.\nLa maggior parte di noi utilizza i social per parlare dei propri successi, ma la realtà è che siamo quel che siamo grazie al 90% dei nostri errori. Racconta il tuo più grande fallimento da quando lavori nel settore, che però ti ha reso ciò che sei. Ti parlerei della mia esperienza precedente a Credimi. Arrivavo da un’esperienza all’estero, gli ultimi 3 anni ero stata a Google Dublino, dove sono stata molto viziata - avevo una manager spettacolare che mi ha aiutata a crescere e mi dava tutto il contesto di cui avevo bisogno per poter lavorare in serenità.\nDecido di tornare in Italia e di unirmi ad una startup che si occupava di political intelligence. Il ruolo ufficiale era quello di senior software engineer, di fatto gestivo il piccolo team di sviluppo.\n Mi sono trovata all’improvviso senza un manager che mi desse il contesto e che mi aiutasse a raggiungere i miei obiettivi!\n Per me iniziare un nuovo percorso lavorativo è anche un modo per poter imparare di più su un dominio nuovo, in questo caso, la politica. Ma il mio più grande fallimento in PolicyBrain (che oggi non esiste più) penso sia stato sottovalutare lo studio del dominio: conoscere bene il mondo in cui ci si muove permette di realizzare codice e in generale prodotti che risolvano i problemi giusti per il cliente.\n E senza conoscere bene l’area in cui mi stavo muovendo ho fatto degli sviluppi che avrei potuto evitare per prioritizzare altri più importanti per il cliente.\n Davo per scontato che la formazione da un punto di vista dei processi politici fosse dovuta arrivare dal mio manager, con un percorso ben definito.\nMi sono portata a casa da quell’esperienza che prima di tutto devo essere io l’owner della mia crescita professionale, e poi che quando si approccia un mondo nuovo, la prima cosa da imparare non sono tanto gli strumenti (dovrò sviluppare in Python o Javascript?) quanto il dominio, così si può davvero parlare con le controparti business e capire dove vale la pena investire.\nE ho scoperto che ci sono degli strumenti fantastici che ci aiutano a definire il perimetro in cui ci muoviamo (ad esempio il domain driven design o i workshop di event storming).\nCome fare per diventare una CTO? Sicuramente bisogna partire dall’ovvio: essere appassionati di tecnologia e aver voglia di imparare. Ma soprattutto se si arriva da un background molto hands on (io arrivo da anni di software engineering) bisogna essere pronti ad accantonare la scrittura del codice, non è più il focus principale, e aver voglia di dare un occhio sia allo sviluppo del prodotto a tutto tondo.\nParlando di successi, qual è il tuo prossimo obiettivo? Quale ruolo vorresti ricoprire entro i prossimi 3 anni? Sono CTO da solo un anno e ancora ho tantissime cose da imparare!\n Essendo un ruolo strategico penso che ci si debba dedicare del tempo, quindi nei prossimi 3 anni mi vedo ancora nello stesso ruolo, magari facendo crescere ancora di più il mio team!\nConosci il tema gender gap in ambito STEM? Se sì, come fare per superarlo? Avendo iniziato a studiare informatica dalle medie ho avuto modo di provare cosa significhi essere l’unica donna nella stanza e anche come ci si sente quando si viene scambiati per la segretaria o quando gli interlocutori si rifiutano di chiamarti ingegnere, insistendo su quel “signorina” tanto fastidioso.\nPenso che il gender gap si stia lentamente riducendo (un report di WeForum riporta che ci vorranno altri 136 anni per chiuderlo completamente!).\nSecondo me le vere leve per ridurlo sono quelle di raccontare storie, di trovare role model che condividano la loro esperienza e che trasmettano la loro passione per far capire che con le materie STEM si può lavorare divertendosi, avendo come target soprattutto i bambini.\nIo dico sempre che la mia fortuna sono stati mamma e papà che mi hanno dato la possibilità di giocare sia con le barbie che con il computer (quando ancora non tutti ne avevano uno :D).\nDa qualche anno ci sono i coderdojo che permettono ai bambini di avvicinarsi al mondo della programmazione e imparare divertendosi!\nE infine aggiungo che ogni volta che si vede una collega o un’amica in difficoltà, non bisogna avere paura di prendere le sue difese\u0026hellip; Che sia dare del feedback in presenza o intervenire online quando si vedono comportamenti discriminatori, oppure semplicemente dare del supporto!\nContatti Profilo LinkedIn ", "url": "https:\/\/theredcode.it\/interviste\/voglio-diventare-una-cto\/" }, "https:\/\/theredcode.it\/openshift\/openshift-vs-kubernetes\/": { "title": "OpenShift vs Kubernetes", "tags": ["openshift","kubernetes",], "content": "Ultimamente si sente parlare spesso di OpenShift e Kubernetes: ma quali sono le differenze, e quali le somiglianze?\nScopriamo insieme come funzionano questi due prodotti e quali sono i motivi per cui scegliere di utilizzarli!\nCosa vedrai Intro Kubernetes in un minuto OpenShift in un minuto OpenShift vs Kubernetes Intro La containerizzazione è comunemente definita come \u0026ldquo;il raggruppamento di diverse applicazioni per svilupparle, gestirle e distribuirle in modo più efficace su varie infrastrutture\u0026rdquo;.\n La containerizzazione consente alle aziende di diventare più agili e scalabili.\n Il risultato? Sviluppo di applicazioni più efficiente. Sempre più spesso le aziende si stanno rendendo conto dei vantaggi offerti da questi strumenti; secondo un rapporto pubblicato nel 2021 da Redhat qui qui il link, il 46% delle aziende intervistate ha visto le applicazioni basate su container come la principale priorità di sviluppo del software per il prossimo triennio.\nSia Kubernetes che OpenShift lavorano grazie al concetto di container, anche se sotto diverse forme: ma perché usare Kubernetes od OpenShift e non Docker?\nKubernetes in un minuto Kubernetes è un framework CaaS (container-as-a-service) open source creato dagli sviluppatori di Google più di dieci anni fa.\nFondamentalmente, Kubernetes è un sistema di containerizzazione portatile e open source che consente agli sviluppatori di gestire servizi e carichi di lavoro.\n Il sistema automatizza la distribuzione, il ridimensionamento e le operazioni delle applicazioni.\n Ora parte della Cloud Native Computing Foundation, Kubernetes consente agli sviluppatori di applicazioni di sfruttare funzionalità come il monitoraggio, l\u0026rsquo;automazione dei processi, il bilanciamento dei container, l\u0026rsquo;orchestrazione dello storage e altro ancora.\nOpenShift in un minuto OpenShift è un prodotto open source Red Hat che comprende diverse versioni, dalla community alla enterprise. OpenShift però non si discosta molto da Kubernetes: K8S rappresenta infatti il kernel dei sistemi distribuiti, mentre OpenShift ne è la distribuzione.\nFondamentalmente, OpenShift è una piattaforma container Kubernetes basata su cloud che è considerata sia un software di containerizzazione che una piattaforma come servizio (PaaS).\nOpenShift offre security-by-design, un sistema di monitoraggio integrato, gestione centralizzata delle policy di autenticazione e autorizzazione e compatibilità con i flussi e le risorse di lavoro Kubernetes.\n È veloce, consente il provisioning self-service e si integra con una varietà di strumenti tra i più utilizzati dalle grandi aziende per il monitoraggio e l\u0026rsquo;automazione di flussi di lavoro in ambienti di produzione.\n Precedentemente nota come Origin, questa piattaforma open source consente agli sviluppatori di creare, testare e distribuire applicazioni sul cloud. Supporta anche diversi linguaggi di programmazione, inclusi Go, Node.js, Ruby,\nPython, PHP, Perl e Java.\nOpenShift vs Kubernetes Ma è qui che finiscono le somiglianze. Ecco alcune delle differenze tra OpenShift e Kubernetes.\nInstallazione Kubernetes offre una grande flessibilità come framework e può essere installato su quasi tutte le piattaforme, come Microsoft Azure e AWS, nonché su qualsiasi distribuzione Linux, inclusi Ubuntu e Debian.\nOpenShift, d\u0026rsquo;altra parte, richiede Red Hat Enterprise Linux Atomic Host (RHELAH), Fedora o CentOS. Ciò restringe le opzioni per molte aziende, soprattutto se non stanno già utilizzando queste piattaforme.\nAttenzione, però: se hai voglia di provare OpenShift sul tuo PC\u0026hellip; Prova OpenShift Local!\nSicurezza OpenShift ha politiche di sicurezza più rigorose. Ad esempio, è vietato eseguire un container come root. Offre anche un\u0026rsquo;opzione di sicurezza per impostazione predefinita per migliorare la sicurezza.\nKubernetes non viene fornito con funzionalità di autenticazione o autorizzazione integrate, quindi gli sviluppatori devono gestire le procedure di autenticazione manualmente.\nNetworking Kubernetes non dispone di una soluzione di rete, ma consente agli utenti di utilizzare plug-in di rete di terze parti. OpenShift, d\u0026rsquo;altra parte, ha la sua soluzione di rete pronta all\u0026rsquo;uso chiamata Open vSwitch.\nTemplates Kubernetes offre i suoi Helm Charts facili da usare e offrono una generosa flessibilità.\nAl contrario, i templates OpenShift sono scritti in un formato YAML che permette di descrivere un\u0026rsquo;applicazione nella sua totalità: ConfigMap, Service, Deployment, e via dicendo, tutto in un unico blocco.\nGestione del registro delle immagini Kubernetes non ha un registro immagini integrato, sebbene ti consenta di estrarre immagini da un registro privato in modo da poter creare i tuoi pod.\nOpenShift, d\u0026rsquo;altra parte, ha un registro immagini integrato e si sposa perfettamente con DockerHub o altri. Pertanto, gli sviluppatori possono utilizzare gli Image Stream per cercare e gestire facilmente le immagini prese da diversi registry online, sia pubblici che privati.\nCI/CD integrato Kubernetes non fornisce una soluzione CI/CD completa e pronta all\u0026rsquo;uso. Tuttavia, puoi creare un\u0026rsquo;intera pipeline CI/CD associando Kubernetes a strumenti che ne consentano il monitoraggio automatico, test e server per la CI.\nCome Kubernetes, OpenShift non offre una soluzione CI/CD completa, ma dispone di una soluzione Jenkins certificata che funge da server di integrazione continua.\nUser interface Ultimo, ma non ultimo, l\u0026rsquo;esperienza utente: gli utenti che desiderano accedere all\u0026rsquo;interfaccia utente grafica (GUI) Web di Kubernetes devono installare separatamente una dashboard per Kubernetes e utilizzare kube-proxy per inviare la porta della propria macchina al server del cluster.\nOpenShift, al contrario, dispone di una console Web intuitiva che include una pagina di accesso one-touch. La console offre un\u0026rsquo;interfaccia semplice basata su moduli, che consente agli utenti di aggiungere, eliminare e modificare risorse. Con questa sola funzionalità, OpenShift ha un netto vantaggio per l\u0026rsquo;utente che deve approcciarsi a questo tool e non conosce la riga di comando a fondo.\nRisorse utili Docker - per cominciare bene con Docker e Kubernetes Se ti è piaciuto questo articolo, non ti dimenticare di commentare e condividere! ⬇️\n ", "url": "https:\/\/theredcode.it\/openshift\/openshift-vs-kubernetes\/" }, "https:\/\/theredcode.it\/design-dev\/alternative-a-google-analytics\/": { "title": "5 alternative a Google Analytics", "tags": ["design-dev",], "content": "Da qualche settimana il Garante per la protezione dei dati personali in Italia ha dichiarato illecito l\u0026rsquo;uso dei dati raccolti tramite Google Analytics (GA3) sul nostro territorio.\nIl problema principale è che i dati raccolti, come indirizzo IP, sistema operativo utilizzato o data dell\u0026rsquo;accesso dell\u0026rsquo;utente al sito possono essere trasferiti negli Stati Uniti, paese che non ha lo stesso livello di protezione dei dati e della privacy degli stessi.\nDire addio a Google Analytics può essere un problema, essendo un servizio gratuito e utilizzato sia da coloro che gestiscono siti personali, sia da chi ha in mano portali con migliaia di pagine visualizzate al mese.\nIn questo articolo riportiamo 5 alternative (gratuite e non) da utilizzare per cambiare piattaforma!\nCosa vedrai Umami Matomo Fathom Clicky Plausible Umami Umami è un\u0026rsquo;alternativa free a Google Analytics semplice, veloce e incentrata sulla privacy. Basato su Next.js, richiede l\u0026rsquo;utilizzo di un database Postgres o MySQL ed è rilasciato sotto licenza MIT: questo vuol dire che può essere installato su qualsiasi servizio di hosting e modificato a piacimento, senza dover pagare alcun servizio.\nPuò essere installato su DigitalOcean, Heroku, Railway e moltissimi altri servizi di hosting online, dove il costo da sostenere è solo relativo all\u0026rsquo;hosting.\nLa configurazione è semplice e richiede la configurazione di un database dove memorizzare i dati e dopodiché sarà sufficiente eseguire la build del progetto clonato da Git.\nEsempio di dashboard Umami\nEsempio di dashboard completa\nScopri di più\nDemo\nMatomo Ottima soluzione per chi cerca un servizio di report analitici completo molto vicino a Google Analytics; questo prevede due opzioni, una free on-premise che quindi va installata su un proprio server, e una on-cloud che ha un costo di 19 euro al mese.\nSi tratta di un\u0026rsquo;opzione molto valida che però, come per Umami, richiede delle conoscenze tecniche per la configurazione e l\u0026rsquo;installazione. Poco male, no?\nEsempio di dashboard Matomo\nScopri di più\nDemo\nFathom Fathom è un\u0026rsquo;alternativa a Google Analytics che non compromette la privacy dei visitatori per i dati, in quanto compliant al GDPR. Come riportato sul loro sito, il traffico generato e i relativi dati raccolti vengono riportati su infrastrutture con base europea.\nÈ disponibile una settimana di prova gratuita, dopodiché il servizio diventa a pagamento: 14 dollari al mese fino a 100.000 views, e poi a salire.\nScopri di più\nClicky Si tratta di un servizio piuttosto basic, con delle dashboard minimali che permettono di monitorare e analizzare il traffico in base a visitatori, contenuto, paese di provenienza e volume in tempo reale.\nIn questo caso, abbiamo a disposizione un piano free che prevede il monitoraggio di un solo sito web con un volume massimo di 3000 view al giorno, e diversi piani a pagamento che partono da un prezzo di 9.99 dollari al mese.\nScopri di più\nDemo\nPlausible Plausibile è un\u0026rsquo;analisi web leggera e open source. Non richiede nessun cookie e pienamente conforme a GDPR, è stato realizzato e ospitato nell\u0026rsquo;UE, grazie ad un\u0026rsquo;infrastruttura cloud di proprietà europea.\nQuesta opzione prevede un free trial di 30 giorni, per poi passare ad un piano che prevede un costo di 9 euro al mese per un volume di 10.000 view al mese, con dei limiti piuttosto alti sulle risorse che è possibile monitorare: fino a 50 siti web, alert customizzabili e integrabili con servizio e-mail e Slack con il piano di base.\nDashboard Plausible di demo\nScopri di più\nDemo\nRisorse utili Google Analytics 4, non è illegale: come usarlo bene ed evitare problemi col Gdpr Se ti è piaciuto questo articolo, non ti dimenticare di commentare e condividere! ⬇️\n ", "url": "https:\/\/theredcode.it\/design-dev\/alternative-a-google-analytics\/" }, "https:\/\/theredcode.it\/tags\/design-dev\/": { "title": "design-dev", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/tags\/design-dev\/" }, "https:\/\/theredcode.it\/categories\/design-dev\/": { "title": "design-dev", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/categories\/design-dev\/" }, "https:\/\/theredcode.it\/tags\/agile\/": { "title": "agile", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/tags\/agile\/" }, "https:\/\/theredcode.it\/tags\/design\/": { "title": "design", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/tags\/design\/" }, "https:\/\/theredcode.it\/design-dev\/scrum-development-team\/": { "title": "Development Team in Scrum", "tags": ["agile","design","dsdm","ingegneria-del-software",], "content": "Negli ultimi articoli abbiamo parlato del ruolo di Product Owner e di Scrum Master e di come un vero team debba seguirli per vincere ogni sfida.\nOggi diamo spazio ad un altro ruolo estremamente importante: il Development Team!\nCosa vedrai Development team: definizione Le sue responsabilità Skills Development team: cos\u0026rsquo;è Il Development team (abbreviato in Dev Team) è un gruppo di persone che hanno competenze tali da poter svolgere molteplici mansioni durante gli sviluppi, definite anche cross-functional. Esse infatti avranno la responsabilità di produrre valore ad ogni sprint, occupandosi di attività quali design, sviluppo e test.\nLe sue responsabilità Perform sprint execution Durante l\u0026rsquo;esecuzione dello sprint, i membri del team fanno un hands-on, mettendo in atto un lavoro creativo di desing, realizzazione e test degli sviluppi da portare a termine, organizzandosi autonomamente in ogni attività.\nIspezione e adattamento ogni giorno Ogni membro del Dev team dovrebbe partecipare ad ogni daily (aka, riunione giornaliera della durata massima di 15 minuti), durante il quale vengono ispezionati i progressi verso lo sprint goal, adattando il piano per il lavoro del giorno corrente.\nRifinitura del backlog Parte di ogni sprint dovrebbe essere dedicata alla preparazione dello sprint successivo, effettuata durante un evento definito Grooming, che include creazione, perfezionamento e stima delle storie. Il dev team dovrebbe dedicare a tale attività il 10% del tempo che ha a disposizione.\nSprint planning All\u0026rsquo;inizio di ogni sprint, il Dev team partecipa al planning. In collaborazione con il Product Owner e con la facilitazione dello Scrum master, stabilisce uno sprint goal e seleziona un set di storie utili al suo raggiungimento. \nAttività di ispezione e adattamento di prodotto e processi Al termine di ogni Sprint, il dev team partecipa a due eventi utili ad ispezionare i s risultati e fondamentali per migliorare i processi.\nSprint Review : Evento in cui dev team, Product Owner, Scrum Master, Sponsor, Cliente e tutti gli stakeholder interessati, revisionano le feature completate nello sprint corrente, e collaborano insieme dando il proprio feedback, al fine di suggerire ulteriori miglioramenti per il prodotto, ma anche per esprimere la loro soddisfazione in merito a quanto sviluppato.\nSprint retrospective : Evento in cui tutto lo Scrum Team si riunisce, per ispezionare e adattare processi, tecniche e tutto ciò che può essere utile a rilasciare un maggior valore e portare ad una collaborazione più efficace.\nSkills Ma quali sono le competenze che deve possedere un Development Team?\n Self-organizing: i membri del team di auto-organizzano per determinare il modo migliore per raggiungere lo sprint goal, non c\u0026rsquo;è un manager che decide per loro e lo scrum master non dovrebbe presumere di farlo.\n Cross functionality diverse and sufficient: i membri del dev team, dovrebbero avere skill differenti, sufficienti a formare un team in grado di produrre features che rispettino la Definition of Done. Un team cross funzionalmente diversificato ha un set di capacità cognitive, prospettive e schemi mentali differenti su come funzionano le cose, trovando soluzioni rapidamente, rilasciando prodotti di qualità sempre più alta, avendo inoltre il giusto mix di figure senior e junior.\n T-shaped skills: un membro del team ha una conoscenza profonda su una materia preferita, avendo allo stesso tempo le capacità di contribuire e aiutare gli altri, anche in materie non di sua competenza.\n Focused and committed: Un team coeso e performante, deve essere concentrato e devoto allo sprint goal, infatti ogni membro sarà impegnato al massimo nel suo lavoro, nel pieno rispetto di tutti i componenti del team e pronto a contribuire qualora sia necessario il suo aiuto, lavorando ad un ritmo sostenibile, per rilasciare prodotti di alto livello e soprattutto per mantenere un ambiente sano.\n Risorse utili Cos\u0026rsquo;è un Product Owner Chi è uno Scrum Master Se ti è piaciuto questo articolo, non ti dimenticare di commentare e condividere! ⬇️\n ", "url": "https:\/\/theredcode.it\/design-dev\/scrum-development-team\/" }, "https:\/\/theredcode.it\/tags\/dsdm\/": { "title": "dsdm", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/tags\/dsdm\/" }, "https:\/\/theredcode.it\/tags\/ingegneria-del-software\/": { "title": "ingegneria-del-software", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/tags\/ingegneria-del-software\/" }, "https:\/\/theredcode.it\/interviste\/voglio-diventare-una-ceo\/": { "title": "Voglio diventare una... CEO", "tags": ["interviste","voglio-diventare",], "content": "Misurare la qualità del software è un\u0026rsquo;attività estremamente complessa, ma fondamentale. Ilaria Pigazzini, CEO di Arcan, ci parla dell\u0026rsquo;idea con cui ha fondato Arcan insieme ai suoi soci e del perché il debito tecnico sia un problema troppo spesso sottovalutato.\nDescriviti in 100 parole Sono Ilaria Pigazzini, co-founder e CEO di Arcan, una startup innovativa che sviluppa una piattaforma per la valutazione della qualità dei sistemi software.\nHo un dottorato di ricerca in informatica e le mie passioni sono leggere libri di ogni tipo (ultimamente mi sto appassionando alla filosofia), guardare film e bere spritz con gli amici. Ho sempre avuto il desiderio di diventare imprenditrice ma alla fine non ho capito bene come sia successo.\nDa maggio la startup è parte del \u0026ldquo;Business Innovation Factory\u0026rdquo;, il programma di accelerazione di Leonardo che promuove le startup facendole crescere sia dal punto di vista tech che di business.\nIn cosa consiste il ruolo di CEO? Essendo CEO di una startup il mio ruolo ha molte sfaccettature e spesso sconfina in altri ruoli.\nIn questo momento faccio parte del team che vede partecipi i miei soci (Darius Sas, in veste di Product Manager e Davide Fanale, Business Development Manager) e il mio ruolo è portare equilibrio tra il lato tech e business della startup.\nLe attività principali che conduco sono parlare con i potenziali clienti e gli investitori, oltre a gestire l\u0026rsquo;amministrazione della società. Ma essendo una piccola startup sono anche social media manager, contabile, blogger, segretaria e grande scrittrice di slide.\nQual è la soft skill più importante che deve possedere una CEO? Confesso di non avere una risposta certa a questa domanda perché sono CEO da molto poco e in generale sono nel mondo business da poco.\nNel mio caso specifico, quello che so che mi sta aiutando molto è la capacità di parlare alle persone in modo chiaro, sapendo ispirare fiducia.\nLa maggior parte di noi utilizza i social per parlare dei propri successi, ma la realtà è che siamo quel che siamo grazie al 90% dei nostri errori. Racconta il tuo più grande fallimento da quando lavori nel settore, che però ti ha reso ciò che sei. Lavoro da molto poco come CEO di Arcan, e stiamo ancora costruendo tutto. Per ora piccoli successi e nessun grande fallimento.\nPosso però riportare uno dei più grandi fallimenti (almeno, secondo la mia percezione) che ho avuto durante il mio percorso scolastico.\n In terza superiore mi diedero due debiti formativi, rispettivamente in matematica e fisica.\n Non ho mai avuto troppi problemi in ambito scolastico, anzi mi piaceva andare a scuola e non mi sono mai sforzata troppo.\n Tutto ciò mi diede la falsa sicurezza di essere infallibile da quel punto di vista.\n Per me quei debiti e la realizzazione di poter rischiare la bocciatura agli esami di settembre furono uno schiaffo potente.\n Ma come gran parte dei fallimenti, sì, mi ha reso ciò che sono, cioè una persona che sa di poter fallire e che sa che è naturale che possa succedere. Essere stata messa di fronte al fallimento mi ha insegnato a non temerlo. E mi ha anche dato una forte spinta: non ho mai dato più niente per scontato.\n Come fare per diventare una CEO? Io sono diventata CEO perché volevo aprire una mia startup, ma sarò sincera, non ho ancora capito al 100% cosa significhi e se soprattutto io stia andando nella direzione giusta.\nHo seguito un percorso di studi completamente tecnico, ed è solo ultimamente che mi sono interessata al mondo business. Quindi quello che posso dire per esperienza è che serve determinazione e voglia di imparare ad essere CEO, cercando di capire quali sono i nostri limiti nell\u0026rsquo;affrontare le sfide quotidiane. \nAd esempio ho scoperto di avere profonde lacune per quanto riguarda la capacità di negoziare e sto studiando (e soprattutto allenandomi) per colmarle.\nParlando di successi, qual è il tuo prossimo obiettivo? Quale ruolo vorresti ricoprire entro i prossimi 3 anni? Il mio prossimo obiettivo per i prossimi tre anni è far crescere la mia startup ottenendo i fondi necessari per farla scalare velocemente.\n Mi vedo ancora nel ruolo di CEO in questo percorso. \nL\u0026rsquo;obiettivo più a lungo termine è portare a termine la strategia di exit della società e lavorare a qualcosa di nuovo. Potrà essere una nuova startup oppure un nuovo ruolo nel mondo del venture capital, che da quando ho iniziato a conoscere mi affascina molto.\nMa di questo se ne parlerà probabilmente tra una decina di anni.\nConosci il tema gender gap in ambito STEM? Se sì, come fare per superarlo? Si lo conosco molto bene perché è un tema che mi sta a cuore. Credo nell\u0026rsquo;esistenza del gender gap e credo che questo gap si possa colmare a partire dall\u0026rsquo;educazione di ragazzi e ragazze. In primis, mostrando loro modelli di ispirazione alternativi a quello del maschio bianco in ambiti STEM (vedi ad esempio Samantha Cristoforetti).\nNel mio piccolo qualche anno fa ho fatto un intervento durante un evento del progetto NERD (alias, \u0026ldquo;Non è roba per donne\u0026rdquo;) organizzato e promosso dall\u0026rsquo;Università degli Studi di Milano - Bicocca.\n Tale progetto ha l\u0026rsquo;obiettivo di mostrare alle ragazze della scuola superiore che l\u0026rsquo;informatica è per tutti.\n Fu durante quell’evento che parlai della mia esperienza come studentessa di informatica e della passione che mi aveva spinto a scegliere di frequentare anche il dottorato!\nContatti Sito Arcan ", "url": "https:\/\/theredcode.it\/interviste\/voglio-diventare-una-ceo\/" }, "https:\/\/theredcode.it\/design-dev\/scrum-scrum-master\/": { "title": "Scrum Master in Scrum", "tags": ["agile","design","ingegneria-del-software",], "content": "Ben tornati/e nella seconda puntata della serie dedicata ai ruoli in Scrum!\nNell\u0026rsquo;articolo precedente abbiamo parlato del ruolo di Product Owner: ma chi è, e cosa fa lo Scrum Master?\nScrum Master: cos\u0026rsquo;è Lo Scrum Master è colui che si impegna costantemente ad aiutare tutti i membri del team a comprendere Scrum e i suoi valori.\nCoach Lo Scrum Master è un coach sia per il dev team che per il Product Owner, capace di rimuovere ogni barriera tra i ruoli e di mettere il Product Owner nella condizione di guidare gli sviluppi.\n Osserva attentamente il modo in cui il team utilizza il framework e fa qualunque cosa per aiutarlo a raggiungere alti livelli di performance.\n Come ogni coach che si rispetti, nel caso in cui il team affronta un problema che può e dovrebbe risolvere autonomamente, lo Scrum Master cerca di guidare il team nella risoluzione dello stesso, senza però dargli la soluzione in mano ma cercando di renderlo quanto più autonomo possibile. Se invece il problema è un impediment che il team non può risolvere, allora se ne assumerà la responsabilità.\nServant Leader e Process Authority Lo Scrum Master è un leader al servizio del team, che si assicura che tutte le necessità di priorità più alta vengano sempre soddisfatte e ha il potere di assicurarsi che lo Scrum team aderisca e metta in atto valori, principi e pratiche del framework.\n Aiuta il team a migliorare i processi quando possibile, accertandosi che migliori costantemente.\n Interference Shield Lo Scrum Master protegge il Dev team da interferenze esterne, in modo che possa restare concentrato sul lavoro da portare a termine durante gli Sprint.\n Queste interferenze possono provenire da varie fonti, ad esempio manager che vogliono spostare membri del team nel mezzo di uno sprint, problemi legati creati da altri team, qualsiasi interferenza subentri, lo scrum master agisce da interceptor.\n Impediment remover Lo Scrum master ha la responsabilità di rimuovere gli impedimenti che inibiscono la produttività del team, qualora il team non sia in grado di rimuoverli autonomamente. Ad esempio, se il team non riesce a raggiungere lo sprint goal a causa di un impediment rappresentato dai server di produzione instabili, la cui responsabilità è dei VP di operation, lo Scrum master si assume la responsabilità di collaborare con questi ultimi, che possono far qualcosa di concreto per risolvere il problema.\nChange Agent Un buon Scrum master deve aiutare a cambiare mentalità e quasi mai questo cambiamento risulta essere facile. Aiuta gli altri a capire le necessità del cambiamento, gli impatti che Scrum può avere in un contesto complesso e i vantaggi che esso garantisce.\n Assicura inoltre che il cambiamento sia propagato a tutti i livelli dell\u0026rsquo;organizzazione, attivando benefici a breve e soprattutto a lungo termine.\n Skills Ma quali sono le competenze che deve possedere uno Scrum Master?\n Knowledgable: Per essere un buon coach di processo, lo scrum master deve conoscere Scrum davvero bene e deve essere in grado di comprendere anche i problemi tecnici a cui il team si dedica e le tecnologie utilizzate, avendo quindi ragionevoli competenze tecniche e discrete conoscenze sul dominio di business.\n Questioning: Lo scrum master usa le sue skill da coach, unite alla sua conoscenza tecnica, di business e di processo per fare le domande giuste, che portano le persone ad affermare \u0026ldquo;Non ci avevo pensato, effettivamente potrebbe esserci un\u0026rsquo;altra soluzione!\u0026rdquo;. Non risponde mai direttamente a una domanda ma piuttosto risponde in modo riflessivo con un\u0026rsquo;altra domanda, permettendo alle persone di trovare una sisposta.\n Patient: E\u0026rsquo; innegabile che uno scrum master, poichè preferisce non dare risposte dirette, debba avere anche la pazienza di dare al team il tempo di trovare la strada e la risposta migliore alle sue domande in completa autonomia.\n Collaborative: Lo Scrum Master deve avere un\u0026rsquo;ottima skill di collaborazione per lavorare con Product Owner, Dev team e tutte le parti interessate. In quanto coach di processo è sempre alla ricerca di nuove opportunità per aiutare i membri del team a raggiungere un invidiabile livello di collaborazione.\n Protective: Lo scrum master dovrebbe essere davvero protettivo verso il team, difendendolo da impediment\norganizzativi e non. Ha inoltre una grande sensibilità sia verso il team che verso le necessità di business, facendo si che venga raggiunto il giusto equilibrio fra questi.\n Transparent: Lo scrum master è trasparente in tutte le forme di comunicazione. Lavorando con i membri del team, non c\u0026rsquo;è posto per agende nascoste o informazioni non chiare, ciò che vedi e senti è esattamente ciò che realmente è. Lo scrum master promuove la comunicazione trasparente al fine di evitare ogni possibile forma di incomprensione.\n Se ti è piaciuto questo articolo, non ti dimenticare di commentare e condividere! ⬇️\n ", "url": "https:\/\/theredcode.it\/design-dev\/scrum-scrum-master\/" }, "https:\/\/theredcode.it\/interviste\/voglio-diventare-una-security-innovation-manager\/": { "title": "Voglio diventare una... Security Innovation Manager", "tags": ["interviste","voglio-diventare",], "content": "Il focus sulla sicurezza informatica negli ultimi anni è diventato sempre più centrale sia per piccole che grandi aziende: significa stare al passo con le nuove tecnologie, ma anche le relative vulnerabilità, e non finire mai di studiare.\nNell\u0026rsquo;intervista di oggi, la super Rita Manzo ci racconta cosa vuol dire essere una Security Innovation Manager in Accenture!\nDescriviti in 100 parole Mi chiamo Rita Manzo, e ad oggi lavoro in Accenture nell’ambito della sicurezza informatica nel ruolo di Manager. Sono sempre stata appassionata di matematica e di crittografia e questo mi ha portato ad intraprendere questo percorso durante l’università.\nDopo aver studiato matematica però, sentivo che mi mancava ancora qualcosa, avevo appreso quello che era alla base della cifratura, ma avevo bisogno di trovare un modo di applicare concretamente quello che avevo studiato e che tanto mi appassionava. Quindi ho deciso di prendere la laurea Magistrale in Informatica.\nOltre ai numeri sono una grande appassionata di sport e ad oggi pratico Body building a livello agonistico.\nIn cosa consiste il ruolo di Security Innovation Manager? Lo stratega del digitale (in inglese Security Innovation Manager) aiuta i brand a scegliere quale sia la strada migliore per raggiungere i propri obiettivi (di business, marketing e comunicazione) attraverso i punti di contatto digitali.\nPer farlo deve interfacciarsi di continuo con varie figure, sia del cliente che del suo team di lavoro, anche se il cuore delle attività avviene poi in solitaria quando le informazioni e i dati raccolti devono essere messi in fila con metodo per giungere alla definizione della strategia.\n La Security Innovation Manager chiarisce il perché intraprendere determinate azioni sul digitale, definendo quali fare e quando. Poi però non abbandona la nave: monitora, insieme al team che realizza le azioni, che gli obiettivi preposti vengano raggiunti, ritarando il tiro in caso di bisogno.\n Qual è la soft skill più importante che deve possedere una Security Innovation Manager? Secondo me tra le soft skill che dovrebbero avere tutti, a tutti i livelli, rientrano la capacità di saper ascoltare veramente chi ci circonda e quella di dialogare in maniera trasparente con ogni interlocutore.\nLa maggior parte di noi utilizza i social per parlare dei propri successi, ma la realtà è che siamo quel che siamo grazie al 90% dei nostri errori. Racconta il tuo più grande fallimento da quando lavori nel settore, che però ti ha reso ciò che sei. Da quando lavoro in questo settore, non posso dire di aver vissuto grandi “fallimenti”, ma sempre piccole cadute che hanno contribuito a formarmi come la professionista che sono oggi. Credo che sia stato determinante, in questo percorso, l’aver sempre chiesto feedback ai miei referenti, in modo tale da prevenire in tempo eventuali scivoloni.\nCome fare per diventare una Security Innovation Manager? Per crescere nell’ambito della sicurezza la parola chiave per me è una sola: “studiare”.\nSo che sembra banale, ma non bisogna mai sentirsi arrivati, mai pensare di possedere una conoscenza completa.\n È necessario mettersi costantemente in discussione per crescere professionalmente e anche personalmente.\n Parlando di successi, qual è il tuo prossimo obiettivo? Quale ruolo vorresti ricoprire entro i prossimi 3 anni? Se guardiamo all’ambito aziendale e al ruolo, il mio prossimo obiettivo è quello di diventare dirigente. Ma, detto così può sembrare riduttivo.\nQuello che voglio è, non solo ottenere il “ruolo” in questione, ma farlo “mio” e diventare un punto di riferimento per l’azienda nella quale opero.\nConosci il tema gender gap in ambito STEM? Se sì, come fare per superarlo? Certamente, è un tema di grande attualità con cui tutti noi facciamo i conti.\nE’ innegabile come il numero di ragazze interessate o iscritte a facoltà STEM ad oggi sia ancora inferiore rispetto alla popolazione maschile ma ci sono significativi segnali di miglioramento che fanno ben sperare per il prossimo futuro e le generazioni che verranno.\nAccenture è molto impegnata in ambito I\u0026amp;D e ha al suo attivo diverse iniziative come ad esempio seminari didattici a partire dalle scuole superiori, al fine di incuriosire in egual modo sia ragazzi che ragazze su tematiche STEM. Prima del COVID andavamo spesso nelle università a fare seminari su tematiche di cybersecurity per mostrare cosa vuol dire lavorare in questo ambito alle giovani menti.\nAttualmente ci stiamo muovendo mediante seminari “virtuali” anche se spero torneremo presto in presenza. Per aiutare le ragazze appassionate di cybersecurity, come su altri skill tech, Accenture organizza inoltre delle “Pink Academy” per permettere alle ragazze che hanno effettuato studi non STEM di fare della formazione ed essere successivamente assunte facendo della combinazione di laurea umanistica e competenze tecniche un vero punto di forza!\nContatti Profilo LinkedIn ", "url": "https:\/\/theredcode.it\/interviste\/voglio-diventare-una-security-innovation-manager\/" }, "https:\/\/theredcode.it\/design-dev\/scrum-product-owner\/": { "title": "Product Owner in Scrum", "tags": ["agile","design","ingegneria-del-software",], "content": "Ben tornati/e e ben trovati/e in questa nuova puntata della serie dedicata a Scrum!\nNell\u0026rsquo;ultimo articolo abbiamo parlato di quelli che sono i valori di questo Framework e di come un vero team debba seguirli per vincere ogni sfida.\nDa oggi inizieremo ad addentrarci in argomenti più corposi, partendo proprio da quelli che sono i ruoli presenti in un team Scrum, ossia Product Owner, Scrum Master e Development team e di quali siano le rispettive responsabilità e skill.\nMa analizziamoli uno per uno: oggi partiamo dal ruolo di Product Owner!\nProduct Owner: cos\u0026rsquo;è Il PO è una guida indispensabile per il team, colui che possiede una profonda conoscenza ad alto livello del prodotto che dovrà essere realizzato. In quanto tale deve comprendere le necessità e le priorità dei clienti, abbastanza bene da agire come se fosse il loro portavoce.\n Deve comunicare al dev team cosa deve essere implementato e in che ordine di priorità portare avanti gli sviluppi.\n Deve assicurarsi che gli acceptance criteria siano specificati e i test che li verificano siano eseguiti al fine di considerare una storia completa, rispettando la DoD (Definition of Done).\n Gestisce la parte economica di un progetto.\n Il Product Owner deve anche assicurarsi che vengano prese le decisioni giuste anche in termini economici e sotto molteplici aspetti, che siano essi a livello di release, di sprint e di product backlog.\nA livello di release: durante il corso di una release, ogni informazione data all\u0026rsquo;inizio può essere soggetta a cambiamenti, sarà quindi compito del product owner garantirne l\u0026rsquo;affidabilità al fine di rendere gli sviluppi chiari agli occhi del team.\nA livello di sprint: si assicura che ad ogni Sprint ci sia un buon ROI (Return Of Investment), avendo cura di trattare il budget a disposizione, come se fossero i suoi unici averi.\nA livello di Backlog: il Product Owner cambia la priorità degli Item (aka: storie che rappresentano gli sviluppi da concludere nell\u0026rsquo;arco di una release), in base anche alle condizioni economiche che possono variare nel tempo.\nPartecipa a tutte le fasi di pianificazione di un prodotto Product Planning: in questa fase di pianificazione, il Product Owner lavora con i clienti per \u0026ldquo;immaginare\u0026rdquo; il prodotto completo, attività che viene chiamata anche \u0026ldquo;Envision\u0026rdquo;.\nIl Product Owner partecipa attivamente in due fasi del processo:\n Release Planning: il Product Owner lavora con Scrum Team e clienti per definire nel dettaglio il contenuto di una release, suddividendo il prodotto in più parti.\n Sprint Planning: il Product Owner lavora con il dev team per definire uno Spring Goal, fornendo informazioni utili al dev team per selezionare gli item/funzionalità da sviluppare.\n Partecipa alle attività di refinement del Backlog.\n Il Product Owner monitora l\u0026rsquo;attività di refinement del product backlog, che include attività di creazione di storie e rifinitura delle stesse, stima e priorità degli item, non eseguendo direttamente tali attività ma guidando il team grazie alle sue preziose informazioni.\n Definisce i criteri di accettazione delle storie e verifica che siano rispettati.\n Il Product Owner è responsabile di definire i criteri di accettazione di ogni storia rappresentante uno sviluppo specifico.\n Queste sono le condizioni che devono essere soddisfatte per incontrare requisiti funzionali e non funzionali.\n Potrà scrivere anche i test di accettazione per la verifica di tutti i criteri stabiliti e assicurarsi che siano scritti prima che una storia sia presa in considerazione in uno sprint planning.\nSkills Ma quali sono le competenze che deve possedere un Product Owner?\n Domain Skills: Il Product Owner è un visionario capace di sintetizzare la vision del prodotto e di guidare il team nel raggiungimento della stessa, consapevole che non sia possibile sapere tutti i dettagli di uno sviluppo sin da subito.\n People Skills: Il Product Owner ha le capacità comunicative per parlare sia con il team che con tutte le parti interessate.\n Accountability: Il Product Owner si impegna affinchè i risultati ottenuti siano validi sotto ogni aspetto di business, gestisce con responsabilità le risorse a disposizione, cambia l\u0026rsquo;ordine di priorità del backlog.\n Nella prossima puntata parleremo del ruolo dello Scrum Master e delle relative skills e responsabilità!\n Se ti è piaciuto questo articolo, non ti dimenticare di commentare e condividere! ⬇️\n ", "url": "https:\/\/theredcode.it\/design-dev\/scrum-product-owner\/" }, "https:\/\/theredcode.it\/interviste\/voglio-diventare-una-digital-strategist\/": { "title": "Voglio diventare una... Digital Strategist", "tags": ["interviste","voglio-diventare",], "content": "Si può lavorare nel digitale senza definire una strategia? La professione di Federica è tra quelle più giovani, e c\u0026rsquo;è chi spera di ricoprire tra qualche anno un ruolo che ancora non esiste\u0026hellip;\nScopriamo grazie a Federica Tonon il lavoro di Digital Strategist in questa bellissima intervista!\nDescriviti in 100 parole Sono cresciuta in un piccolo paese di provincia del nord-est e da bambina, oltre alla Signora Fletcher, uno dei miei idoli era Penny del cartone “L’Ispettore Gadget”, con il suo mini laptop e la sua brillante intelligenza (chi è nato negli anni ‘80 come me capirà).\nPoi però, una volta grande, ho scelto di laurearmi in Scienze della Comunicazione ad indirizzo giornalismo, anche se il fascino per la tecnologia è rimasto intatto da allora. L’ho solo approcciato con piglio umanista.\nIn tutto ciò, con il tempo, ho imparato a far convivere la mia indole riservata con la curiosità diffusa che mi caratterizza.\nIn cosa consiste il ruolo di Digital Strategist? Lo stratega del digitale (in inglese Digital Strategist) aiuta i brand a scegliere quale sia la strada migliore per raggiungere i propri obiettivi (di business, marketing e comunicazione) attraverso i punti di contatto digitali.\nPer farlo deve interfacciarsi di continuo con varie figure, sia del cliente che del suo team di lavoro, anche se il cuore delle attività avviene poi in solitaria quando le informazioni e i dati raccolti devono essere messi in fila con metodo per giungere alla definizione della strategia.\n La Digital strategist chiarisce il perché intraprendere determinate azioni sul digitale, definendo quali fare e quando. Poi però non abbandona la nave: monitora, insieme al team che realizza le azioni, che gli obiettivi preposti vengano raggiunti, ritarando il tiro in caso di bisogno.\n Qual è la soft skill più importante che deve possedere una Digital Strategist? La capacità di ascolto credo sia una soft skill imprescindibile al pari delle abilità di sintesi. Una strategia può esistere solo se segue alla comprensione del contesto e alla definizione di un obiettivo. Per comprendere contesti e definire obiettivi però, bisogna sapere ascoltare attentamente ed essere in grado di sintetizzare la complessità. Inoltre l’ascolto permette anche di entrare facilmente in ambiti e settori spesso diversi che richiedono la consulenza di una digital strategist.\nLa maggior parte di noi utilizza i social per parlare dei propri successi, ma la realtà è che siamo quel che siamo grazie al 90% dei nostri errori. Racconta il tuo più grande fallimento da quando lavori nel settore, che però ti ha reso ciò che sei. Ce ne sono stati tanti perché, come si dice, “solo chi fa sbaglia”. Fra tutti però scelgo questo: in passato mi è capitato di non rendermi conto che dietro al successo dei progetti ci sono prima di tutto le persone che ci lavorano. Ho sottovalutato la forza che possono esercitare bisogni o difficoltà personali di chi ruota intorno a un progetto sulla sua buona riuscita. Ora so che solo team felici creano “progetti felici”.\nCome fare per diventare una Digital Strategist? Immaginiamo la figura della Digital Strategist come un traduttore.\n È il crocevia tra business e operatività tecnologica e deve farli dialogare per arrivare all’obiettivo.\n Competenze in ambito digital marketing sono quindi ** unabase necessaria** per poter parlare la stessa lingua dei referenti delle aziende clienti.\nPoi però sono utili anche conoscenza di ambiti più specialistici relativi alla progettazione come l’architettura dell’informazione e la user experience, insieme a quel tanto che serve per potersi interfacciare con chi si occupa di design, dello sviluppo web o dei social media.\nParlando di successi, qual è il tuo prossimo obiettivo? Quale ruolo vorresti ricoprire entro i prossimi 3 anni? Negli ultimi tempi sto cercando di ampliare le mie competenze in ambito di UX Research.\n Spero però che il ruolo che avrò fra 3 anni non esista ancora ad oggi: il digital ha tempi rapidissimi tutti propri e mi auguro di essere in grado di seguirli portando a frutto l’esperienza pregressa verso il nuovo che verrà.\n Credo comunque che sarà un ruolo sempre più vicino a e di raccordo con il mondo tech.\nConosci il tema gender gap in ambito STEM? Se sì, come fare per superarlo? Si, è un tema che mi sta a cuore innanzitutto per una questione pratica: sono stanca di riunioni mono-genere in ambito lavorativo e vorrei tanto che ci fosse una parità di contributi in certi campi perché lo considero arricchente e stimolante.\n A parte le questioni pratiche, seguo due realtà pro STEM (@she_is_a_scientist e @inspiringirls_italia su Instagram) e cerco di condividerne i messaggi.\n Sono madre di due figlie e nel mio piccolo sto cercando di educarle senza pre-concetti rispetto a cosa sia più adatto a un genere o a un altro nelle professioni.\nContatti ", "url": "https:\/\/theredcode.it\/interviste\/voglio-diventare-una-digital-strategist\/" }, "https:\/\/theredcode.it\/tags\/apogeo\/": { "title": "apogeo", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/tags\/apogeo\/" }, "https:\/\/theredcode.it\/categories\/natural-language-processing\/": { "title": "natural-language-processing", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/categories\/natural-language-processing\/" }, "https:\/\/theredcode.it\/tags\/nlp\/": { "title": "nlp", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/tags\/nlp\/" }, "https:\/\/theredcode.it\/intelligenza-artificiale\/nlp-preprocessing-di-un-testo-con-python\/": { "title": "Preprocessing di un testo con Python", "tags": ["apogeo","intelligenza-artificiale","nlp",], "content": "Sulla base di alcune conversazioni passate, mi sono resa conto che la pre-elaborazione del testo è un argomento spesso trascurato.\n La maggior parte delle persone con cui ho parlato hanno menzionato risultati incoerenti ottenuti dall\u0026rsquo;utilizzo di tecniche di NLP per poi rendersi conto che non stavano elaborando il testo per prepararlo all\u0026rsquo;analisi successiva.\n Tenendo questo a mente, ho pensato di far luce su cosa sia realmente il preprocessing di un testo con Python, i diversi metodi di preelaborazione del testo e diverse tecniche che ci permettono di stimare quanto lavoro potrebbe essere necessario.\n Cosa vedrai Tutto in minuscolo Stemming Lemmatizzazione Stop alle stop words! Risorse utili Tutto in minuscolo  Ridurre in minuscolo tutti i dati testuali, anche se può sembrare banale, è una di quelle attività super semplici e che però portano a grandi risultati.\n Pensiamo al calcolo della similarità tra più entità: il nostro programma potrebbe considerare come diverse delle parole che hanno la lettera maiuscola iniziale.\n Questo tipo di typo può essere riscontrato di frequente: il set di dati potrebbe contenere diverse rappresentazioni della parola \u0026ldquo;pizza\u0026rdquo; e non avrebbe \u0026ldquo;prove\u0026rdquo; sufficienti per i suoi algoritmi di addestramento per apprendere efficacemente.\n Un esempio per rendere in minuscolo una serie di parole contenute in una lista, potresti fare qualcosa di simile:\n texts=[\u0026#34;pizza\u0026#34;,\u0026#34;Pizza\u0026#34;,\u0026#34;PIZZA\u0026#34;,\u0026#34;PiZzA\u0026#34;] lower_words=[word.lower() for word in texts] print(lower_words)  Se volessi farlo su un dataframe?\n Nulla di più semplice. Come mostrato di seguito, è sufficiente importare pandas, leggere il dataframe e iterare le colonne applicando il metodo lower() su ogni colonna. Attenzione: usiamo .str per evitare che, nel caso siano presenti dati numerici, il codice vada in errore!\n import pandas as pd data = {\u0026#39;Fruits\u0026#39;: [\u0026#39;BANANA\u0026#39;,\u0026#39;APPLE\u0026#39;,\u0026#39;MANGO\u0026#39;,\u0026#39;WATERMELON\u0026#39;,\u0026#39;PEAR\u0026#39;], \u0026#39;Color\u0026#39;: [\u0026#39;Yellow\u0026#39;, \u0026#39;Red\u0026#39;, \u0026#39;Orange\u0026#39;, \u0026#39;Pink\u0026#39;, \u0026#39;Green\u0026#39;] } df = pd.DataFrame(data, columns = [\u0026#39;Fruits\u0026#39;, \u0026#39;Color\u0026#39;]) print (df) for column in df: df[column] = df[column].str.lower() print(df) \u0026gt;\u0026gt;\u0026gt; \tFruits Color 0 banana yellow 1 apple red 2 mango orange 3 watermelon pink 4 pear green  Stemming  Lo stemming è il processo di riduzione alla radice etimologica delle parole (ad es. buonissimo, buoni diventa buon). La \u0026ldquo;radice\u0026rdquo; in questo caso potrebbe non essere una vera radice, ma solo una forma canonica della parola originale.\n Lo stemming utilizza un processo euristico che rimuove le estremità delle parole nella speranza di trasformarle correttamente nella loro forma radice. Quindi le parole \u0026ldquo;buonissimo\u0026rdquo; e \u0026ldquo;buoni\u0026rdquo; potrebbero effettivamente essere convertiti in buon, che non rappresenta la radice reale della parola!\n Esistono diversi algoritmi per lo stemming, e spesso cambiano a seconda della lingua.\n L\u0026rsquo;algoritmo più comune, noto anche per essere empiricamente efficace per l\u0026rsquo;inglese, è l\u0026rsquo;algoritmo di Porter.\n  Tra l\u0026rsquo;altro, il suo creatore è un signore super gentile che ho avuto l\u0026rsquo;onore di intervistare per la pubblicazione del libro \u0026ldquo;Analisi del linguaggio con Python\u0026rdquo;, edizione di Apogeo. Attualmente è in pensione, odia le macchine e le gomme da masticare e adora passare del tempo nel suo giardino (qui il suo sito).\n  Qui un esempio del suo funzionamento:\n import nltk import pandas as pd from nltk.stem import PorterStemmer porter_stemmer=PorterStemmer() words=[\u0026#34;trouble\u0026#34;,\u0026#34;troubles\u0026#34;,\u0026#34;troubling\u0026#34;,\u0026#34;troubled\u0026#34;,\u0026#34;troubleshooting\u0026#34;] stemmed_words=[porter_stemmer.stem(word=word) for word in words]  Se abbiamo a che fare con testi non in inglese, ci sono comunque diverse opzioni: abbiamo la libreria NLTK che ci fornisce lo Snowball Stemmer, che supporta tra le altre lingue anche quella italiana:\n  from nltk.stem import SnowballStemmer stemmer_snowball = SnowballStemmer(\u0026#39;italian\u0026#39;) eg1 = [\u0026#39;andare\u0026#39;, \u0026#39;andai\u0026#39;, \u0026#39;andiamo\u0026#39;, \u0026#39;andarono\u0026#39;] eg_list = [] eg_list.extend(eg1) ​ print(\u0026#39;Parole: {}\\nRadici:\u0026#39;.format(eg_list)) for word in eg_list: print(\u0026#39;\\t- {}\u0026#39;.format(stemmer_snowball.stem(word))) Parole: [\u0026#39;andare\u0026#39;, \u0026#39;andai\u0026#39;, \u0026#39;andiamo\u0026#39;, \u0026#39;andarono\u0026#39;] Radici: \t- andar \t- anda \t- andiam \t- andar  Lemmatizzazione  La lemmatizzazione sembra in apparenza molto simile allo stemming, in cui l\u0026rsquo;obiettivo è rimuovere le desinenze e ridurre una parola alla sua forma radice.\n La reale differenza è che la lemmatizzazione cerca di farlo nel modo corretto. Non si limita a tagliare le parole, in realtà trasforma le parole nella radice effettiva.\n Ad esempio, la parola \u0026ldquo;migliore\u0026rdquo; verrebbe associata a \u0026ldquo;buono\u0026rdquo;, e non \u0026ldquo;miglior\u0026rdquo;.\n Lo fa utilizzando un dizionario come WordNet per mappare una parola con le parole collegate, ed eventualmente la sua radice, basandosi su un sistema di regole.\n Per la lingua inglese, possiamo utilizzare sempre la libreria NLTK che fornisce l\u0026rsquo;oggetto WordNetLemmatizer, il quale ci permette di eseguire la lemmatizzazione su un insieme di parole:\n import nltk nltk.download(\u0026#39;wordnet\u0026#39;) nltk.download(\u0026#39;omw-1.4\u0026#39;) import pandas as pd from nltk.stem import WordNetLemmatizer lemmatizer = WordNetLemmatizer() words = [\u0026#34;trouble\u0026#34;, \u0026#34;troubling\u0026#34;, \u0026#34;troubled\u0026#34;, \u0026#34;troubles\u0026#34;] lemmatized_words = [lemmatizer.lemmatize(word=word, pos=\u0026#39;v\u0026#39;) for word in words] lemmatizeddf = pd.DataFrame({\u0026#39;original_word\u0026#39;: words, \u0026#39;lemmatized_word\u0026#39;: lemmatized_words}) lemmatizeddf = lemmatizeddf[[\u0026#39;original_word\u0026#39;, \u0026#39;lemmatized_word\u0026#39;]] print(lemmatizeddf)  Per la lingua italiana -e molte altre-, che risulta più complicata per questo tipo di attività, esiste la libreria simplelemma, sviluppata da Adrien Barbaresi, che ha un livello di accuratezza del 93%.\n Un esempio è quello riportato di seguito, dove le parole \u0026lsquo;migliore\u0026rsquo;, \u0026lsquo;camminiamo\u0026rsquo;, \u0026lsquo;mangiassimo\u0026rsquo;, \u0026lsquo;promisi\u0026rsquo; e \u0026lsquo;derivante\u0026rsquo; vengono correttamente riportate al lemma:\n import simplemma mywords = [\u0026#39;migliore\u0026#39;, \u0026#39;camminiamo\u0026#39;, \u0026#39;mangiassimo\u0026#39;, \u0026#39;promisi\u0026#39;, \u0026#39;derivante\u0026#39;] langdata = simplemma.load_data(\u0026#39;it\u0026#39;) result = [] for word in mywords: result.append(simplemma.lemmatize(word, langdata)) print(result)   Stop alle stop words!  Gioco di parole a parte, le stopwords sono un insieme di parole comunemente usate in una lingua e che quindi non danno -solitamente- alcun valore aggiunto al contesto.\n Esempi di stopwords in inglese sono \u0026ldquo;a\u0026rdquo;, \u0026ldquo;the\u0026rdquo;, \u0026ldquo;is\u0026rdquo;, \u0026ldquo;are\u0026rdquo; e così via, così come in italiano lo sono gli articoli, le preposizione, alcuni avverbi, e via dicendo.\n L\u0026rsquo;idea alla base dell\u0026rsquo;uso di queste parole è che, rimuovendo le parole che non forniscono informazioni utili dal testo, possiamo concentrarci invece sulle parole veramente importanti.\n Ad esempio, nel contesto di un sistema di ricerca, in una query di ricerca con \u0026ldquo;che cos\u0026rsquo;è il preprocessing di un testo\u0026rdquo;, vorremo che il sistema di ricerca si concentri sui risultati di pagine che parlano di preprocessing di un testo rispetto a documenti che parlano di ciò che è un testo.\n Nella mia esperienza, la rimozione delle stopwords dipende dal contesto ed esistono diversi dataset adatti a diversi scopi; sebbene questa tecnica sia molto efficace nei sistemi di ricerca e di topic modeling, si è dimostrato non critico nei sistemi di classificazione.\n Un esempio è quello mostrato e riportato di seguito per la lingua inglese, dove parole come this, that, of e altro vengono rimosse dal testo della frase:\n stopwords=[\u0026#39;this\u0026#39;,\u0026#39;that\u0026#39;,\u0026#39;and\u0026#39;,\u0026#39;a\u0026#39;,\u0026#39;we\u0026#39;,\u0026#39;it\u0026#39;,\u0026#39;to\u0026#39;,\u0026#39;is\u0026#39;,\u0026#39;of\u0026#39;] text=\u0026#34;this is a text full of content and we need to clean it up\u0026#34; words=text.split(\u0026#34; \u0026#34;) shortlisted_words=[] for w in words: if w not in stopwords: shortlisted_words.append(w) else: shortlisted_words.append(\u0026#34;W\u0026#34;) print(\u0026#34;original sentence = \u0026#34;,text) print(\u0026#34;sentence with stopwords removed= \u0026#34;,\u0026#39; \u0026#39;.join(shortlisted_words))  Se hai bisogno di un elenco di stopwords da rimuovere per diverse lingue -come italiano, spagnolo e anche ungherese-, qui trovi un repository che potrebbe fare al caso tuo!\n In questa fase una delle altre tecniche di elaborazione del testo consiste nella rimozione della punteggiatura.\n Ci sono circa 30+ simboli di punteggiatura principali che dovrebbero essere presi in considerazione e possiamo creare direttamente utilizzare l\u0026rsquo;oggetto string: questo ha una proprietà punctuation che permette di distinguere i simboli di punteggiatura.\n Utilizzandolo insieme alla libreria re per le espressioni regolari, possiamo rimuovere tutti i simboli come nell\u0026rsquo;esempio di seguito:\n import re import string testo = \u0026#34;Lorem, ipsum; testo! di -prova.\u0026#34; testo = re.sub(\u0026#39;[%s]\u0026#39; % re.escape(string.punctuation), \u0026#39;\u0026#39; , testo) print(testo) \u0026#39;Lorem ipsum testo di prova\u0026#39;   E tu, conosci altre tecniche? Scrivilo nei commenti!\n  Risorse utili Analisi del linguaggio naturale con Python - Apogeo Awesome NLP list Simplelemma repository WordNet multilingue   Se ti è piaciuto questo articolo, non ti dimenticare di commentare e condividere! ⬇️\n ", "url": "https:\/\/theredcode.it\/intelligenza-artificiale\/nlp-preprocessing-di-un-testo-con-python\/" }, "https:\/\/theredcode.it\/interviste\/voglio-diventare-una-game-designer\/": { "title": "Voglio diventare una... Game Designer", "tags": ["interviste","voglio-diventare",], "content": "Mai sentito parlare dell\u0026rsquo;E3? Il suo sogno è quello di presentare un gioco di sua creazione: oggi parliamo con Giuliana, che di professione è una Game Designer.\nScopriamo subito quali competenze sono necessarie per entrare in questo mondo!\nDescriviti in 100 parole Ciao, sono Giuliana, ho 24 anni e ho un cane di nome Nana!\nIl mio amore per i videogiochi nasce giusto 20 anni fa, quando i miei genitori mi regalarono il game boy, è stato amore a prima vista.\nMi sono laureata alla triennale d’informatica a Salerno, mentre ora sono iscritta alla magistrale informatica della Statale di Milano (manca poco per finire!).\nInvece, per quanto riguarda il mondo gaming, sono più di sei anni che sviluppo videogiochi, mentre sono due anni che ho iniziato a farlo per lavoro da libera professionista! Sviluppo sia app VR/AR, che giochi :)\nIn cosa consiste il ruolo di Game Designer? Il Game Designer è una figura importantissima per la costruzione del videogioco: deve creare il miglior videogioco che esista.\n Io considero questa professione al pari di un registra di film.\n Il Game Designer deve, come un registra, dirigere l’aspetto creativo del gioco, analizzando anche la fattibilità facendo analisi di mercato. Deve inoltre redigere e tenere aggiornato il “game design document”: in pratica deve scrivere tutto ciò che riguarda il gioco in tutte le sue sfaccettature. Inoltre, deve anche collaborare a stretto contatto con tutte le altre aree del team di sviluppo in modo tale da gestire e supervisionare il lavoro.\nOltre a fare questo, mi occupo soprattutto della parte tecnica, ovvero faccio da ponte tra la progettazione e la programmazione.\nQual è la soft skill più importante che deve possedere una Game Designer? La soft skill più importante è la creatività.\n Per me un Game Designer è un adulto che ha ancora l’immaginazione di un bambino: i bambini riescono a divertirsi creando giochi e storie dal nulla. Io mi diverto tantissimo a immaginare dei possibili giochi mentre svolgo qualche attività.\n Ad esempio, un’idea che sto sviluppando, mi è venuta mentre facevo escursione in bicicletta, appena tornata a casa sono stata ore a scrivere!\nMa ovviamente è importante avere ottime capacità comunicative per riuscire a collaborare con il team.\nLa maggior parte di noi utilizza i social per parlare dei propri successi, ma la realtà è che siamo quel che siamo grazie al 90% dei nostri errori. Racconta il tuo più grande fallimento da quando lavori nel settore, che però ti ha reso ciò che sei. Un mio fallimento recente è avvenuto qualche tempo fa. Ero in team con altri ragazzi ed ero l’unica donna. Non riuscivo a farmi valere e mi scontravo sempre perché le mie idee venivano sempre contestate, per poi essere utilizzate.\nAd un certo punto del progetto non venivo più considerata, ogni mia aggiunta al progetto veniva cancellata o modificata senza essere avvisata, quando portavo questo problema a tavolo non venivo presa in considerazione.\nPer me è stato molto umiliante; mi reputo una ragazza forte, ma in quella occasione dove ero io contro tutti, mi sono sentita piccola, per questo ho giurato a me stessa che non devo più subire comportamenti del genere.\nCome fare per diventare una Game Designer? Le strade sono diverse, in Italia ci sono dei corsi/accademie che ti permettono di studiare per questo lavoro.\n Ma la cosa importante è sviluppare videogiochi.\n Come faccio a reputarmi un game designer se non ho mai fatto un gioco?\nBisogna rimboccarsi le maniche e sviluppare, tanto e cose diverse!\nPer quanto riguarda il mio percorso di studi è molto tecnico, come dicevo prima, mi sono laureata in informatica, sono nata “programmatrice” per poi seguire il percorso “progettazione di videogiochi” alla statale di Milano, dove ho continuato ad arricchire il mio background informatico, ma ho anche studiato il design e sviluppato videogiochi.\nParlando di successi, qual è il tuo prossimo obiettivo? Quale ruolo vorresti ricoprire entro i prossimi 3 anni? Bella domanda! Ho la mia “to-do list” da completare entro i 26 anni. È tra le tante (forse troppe) cose da fare comprende trasformare il mio lavoro di libera professionista in una azienda e presentare un gioco all’E3. Devo rimboccarmi le maniche!\nConosci il tema gender gap in ambito STEM? Se sì, come fare per superarlo? Al mio primo anno di università mi sono scontrata con questa triste realtà.\nNella mia classe (più di 200 studenti) noi donne ci contavamo sulle dita di una mano.\nCi sono fin troppi pregiudizi e convinzioni tossiche, che purtroppo ho dovuto (e a volte capita ancora oggi) subire in prima persona, ho dovuto farmi forza e rispondere a dovere, ma non è stato sempre facile, ma in determinate situazioni ho trovato la forza grazie ad altre donne.\nNel mio piccolo scrivo di qualche situazione che mi è capitata, ma come sempre quando qualcuno si espone sui social, ho dovuto leggere molte critiche del tipo “vuoi farti solo notare”, “post acchiappa like”, e commenti del tipo “è risaputo che determinati lavori sono per uomini”.\nMa ho anche ricevuto di messaggi bellissimi, soprattutto da parte delle ragazze che hanno paura a lavorare in questo mondo e che con le mie parole hanno trovato un po\u0026rsquo; di forza. Per superarlo quindi occorre scrivere e parlare per sensibilizzare quanto più possibile.\n Ma ricordiamoci una cosa: il nostro mondo STEM non ha genere, è libero e aperto a tutti.\n Contatti Link Tree\n", "url": "https:\/\/theredcode.it\/interviste\/voglio-diventare-una-game-designer\/" }, "https:\/\/theredcode.it\/tags\/angular\/": { "title": "angular", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/tags\/angular\/" }, "https:\/\/theredcode.it\/categories\/angular\/": { "title": "angular", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/categories\/angular\/" }, "https:\/\/theredcode.it\/ionic\/creare-una-direttiva-con-ionic\/": { "title": "Creare una direttiva con Ionic", "tags": ["angular","direttive","ionic","ionic-6",], "content": "Ah, le direttive\u0026hellip; In Angular vengono utilizzate moltissimo per personalizzare il comportamento di un componente. Il grande vantaggio di Ionic è la possibilità di integrarlo con diversi framework, tra cui Vue, React, Stencil e soprattutto Angular.\n Ma come funzionano?\n In questo articolo, vediamo come creare una direttiva con Ionic, e naturalmente Angular!\nCosa vedrai Cosa sono Quando usarle Creare una direttiva con Ionic Risorse utili Cosa sono   Una direttiva si usa per modificare il comportamento di un elemento DOM esistente.\n In altre parole, si usa quando vogliamo che un componente abbia un suo comportamento rispetto ad un evento o ad uno stato.\n Un componente si usa quando desideri un elemento DOM completamente nuovo; altrimenti, un componente e una direttiva sono praticamente la stessa cosa: un componente è solo una direttiva con il proprio modello!\n Quando usarle  Le direttiva possono essere utilizzate per diversi scopi: ad esempio, per creare una risorsa custom, come può essere un panel, che non è magari previsto dal framework che utilizziamo.\n Un altro motivo per cui possiamo scegliere le direttive è quello di modificare il comportamento di un elemento: ad esempio, se volessimo far \u0026ldquo;sparire\u0026rdquo; un elemento, quando l\u0026rsquo;utente ci clicca sopra.\n Non a caso, una direttiva può essere dichiarata in questo modo: nel primo esempio, c\u0026rsquo;è una direttiva che descrive un componente; nel secondo caso, c\u0026rsquo;è un componente che contiene una direttiva custom.\n \u0026lt;my-component\u0026gt;\u0026lt;/my-component\u0026gt; \u0026lt;some-ionic-component myDirective\u0026gt;\u0026lt;/some-ionic-component\u0026gt;  Creare una direttiva con Ionic  Vediamo adesso un esempio pratico di come crearne una con Ionic e lo facciamo usando l\u0026rsquo;esempio visto prima: creiamo una direttiva che nasconda un elemento una volta che l\u0026rsquo;utente ci clicca sopra.\n Per prima cosa, andiamo a creare una direttiva usando il comando seguente:\n ionic generate directive clickdirective  Ci verrà creato un file che si chiama click-directive.directive.ts, che andremo ad analizzare:\n clickdirective.directive.ts import {Directive, ElementRef, HostListener, Renderer2} from \u0026#39;@angular/core\u0026#39;; @Directive({ selector: \u0026#39;[appClickDirective]\u0026#39; }) export class ClickDirectiveDirective { ...  All\u0026rsquo;interno del decoratore @Directive, è specificato un selettore che di default viene chiamato come il nome della direttiva con il prefisso app; nel nostro caso, avremo quindi appClickDirective. Possiamo cambiarlo come vogliamo, ovviamente!\n Il resto della classe è vuota, e la andiamo a costruire step-by-step. Per farlo, andiamo a importare all\u0026rsquo;interno del costruttore due risorse, ossia ElementRef e Renderer2. Questi ci permetteranno di gestire i componenti HTML e modificarne comportamento e stile:\n clickdirective.directive.ts import {Directive, ElementRef, HostListener, Renderer2} from \u0026#39;@angular/core\u0026#39;; @Directive({ selector: \u0026#39;[appClickDirective]\u0026#39; }) export class ClickDirectiveDirective { constructor(public element: ElementRef, public renderer: Renderer2) { } ...  Nello specifico, ElementRef serve a fornirci l\u0026rsquo;accesso diretto all\u0026rsquo;elemento presente nel DOM, che sarà disponibile attraverso una proprietà chiamata nativeElement. Se volessimo accedere ad un elemento DOM, potremo accedervi usando l\u0026rsquo;istruzione this.element.nativeElement.\n Una volta che abbiamo un riferimento a quell\u0026rsquo;elemento DOM, potremmo modificarlo come desideriamo accedendo direttamente alle sue proprietà -proprio come faresti con JavaScript-.\n _Renderer_2 invece ci aiuta a modificare l\u0026rsquo;elemento fornito da ElementRef, così che saremo in grado di aggiornare l\u0026rsquo;elemento.\n Per utilizzare _Renderer_2, dobbiamo fornirgli il nativeElement che vogliamo \u0026ldquo;manipolare\u0026rdquo; direttamente e utilizzare i metodi che mette a disposizione per modificare l\u0026rsquo;elemento del DOM.\n Alcuni esempi di questi metodi sono:\n setStyle addClass createElement setAttribute ecc.  A questo punto, creiamo una funzione che abbia il decoratore @HostListener, il quale ci permette di specificare per quale evento o stato essere \u0026ldquo;in ascolto\u0026rdquo;, e in questo caso specifichiamo l\u0026rsquo;evento click tramite i due parametri:\n clickdirective.directive.ts ... @HostListener(\u0026#39;click\u0026#39;, [\u0026#39;$event\u0026#39;]) ...  Nella funzione, andiamo a utilizzare Renderer2 per cambiare lo stile dell\u0026rsquo;elemento su cui l\u0026rsquo;utente andrà a cliccare, e lo faremo settando l\u0026rsquo;opacità a zero.\n  Questo è solo un esempio di quel che possiamo fare grazie ai due oggetti importati nel costruttore, ma le possibilità sono davvero infinite!\n  clickdirective.directive.ts ... handleClick(event) { console.log(\u0026#39;Element has been clicked\u0026#39;); this.renderer.setStyle(this.element.nativeElement, \u0026#39;display\u0026#39;, \u0026#39;none\u0026#39;); } ...  La direttiva è quindi pronta per essere utilizzata: in un altro componente, andiamo a creare una veloce lista di messaggi che l\u0026rsquo;utente potrà usare per spuntare quelli che ha già letto. Il codice seguente verrà quindi modificato come segue:\n message.component.html ... \u0026lt;ion-item *ngIf=\u0026#34;message\u0026#34; [routerLink]=\u0026#34;\u0026#39;/message/\u0026#39; + message.id\u0026#34; [detail]=\u0026#34;false\u0026#34;\u0026gt; \u0026lt;div slot=\u0026#34;start\u0026#34; [class]=\u0026#34;!message.read ? \u0026#39;dot dot-unread\u0026#39; : \u0026#39;dot\u0026#39;\u0026#34;\u0026gt;\u0026lt;/div\u0026gt; \u0026lt;ion-label class=\u0026#34;ion-text-wrap\u0026#34;\u0026gt; \u0026lt;h2\u0026gt; {{ message.fromName }} \u0026lt;span class=\u0026#34;date\u0026#34;\u0026gt; \u0026lt;ion-note\u0026gt;{{ message.date }}\u0026lt;/ion-note\u0026gt; \u0026lt;ion-icon name=\u0026#34;chevron-forward\u0026#34; size=\u0026#34;small\u0026#34; *ngIf=\u0026#34;isIos()\u0026#34;\u0026gt;\u0026lt;/ion-icon\u0026gt; \u0026lt;/span\u0026gt; \u0026lt;/h2\u0026gt; \u0026lt;h3\u0026gt;{{ message.subject }}\u0026lt;/h3\u0026gt; \u0026lt;p\u0026gt; Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. \u0026lt;/p\u0026gt; \u0026lt;/ion-label\u0026gt; \u0026lt;/ion-item\u0026gt; ...  All\u0026rsquo;interno del componente ion-item, inseriamo la direttiva appClickDirective, che agirà seguendo le azioni dell\u0026rsquo;utente: quando questo cliccherà su uno dei messaggi, il messaggio sparirà:\n message.component.html \u0026lt;ion-item appClickDirective *ngIf=\u0026#34;message\u0026#34; [routerLink]=\u0026#34;\u0026#39;/message/\u0026#39; + message.id\u0026#34; [detail]=\u0026#34;false\u0026#34;\u0026gt; ... \u0026lt;/ion-item\u0026gt;  [video width=\u0026ldquo;auto\u0026rdquo; height=\u0026ldquo;50%\u0026rdquo; mp4=\u0026ldquo;http://35.180.247.192/wp-content/uploads/2022/04/Ionic-App-–-Mozilla-Firefox-2022-04-12-10-27-53-online-video-cutter.com_.mp4\u0026rdquo;][/video]\n  Semplice, no? 😉\n  Risorse utili Cosa sono le direttive (English) Manuale Ionic in italiano   Se ti è piaciuto questo articolo, non ti dimenticare di commentare e condividere! ⬇️\n ", "url": "https:\/\/theredcode.it\/ionic\/creare-una-direttiva-con-ionic\/" }, "https:\/\/theredcode.it\/tags\/direttive\/": { "title": "direttive", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/tags\/direttive\/" }, "https:\/\/theredcode.it\/tags\/ionic\/": { "title": "ionic", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/tags\/ionic\/" }, "https:\/\/theredcode.it\/categories\/ionic\/": { "title": "ionic", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/categories\/ionic\/" }, "https:\/\/theredcode.it\/tags\/ionic-6\/": { "title": "ionic-6", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/tags\/ionic-6\/" }, "https:\/\/theredcode.it\/interviste\/voglio-diventare-una-data-engineer\/": { "title": "Voglio diventare una... Data Engineer", "tags": ["interviste","voglio-diventare",], "content": "Lei l\u0026rsquo;informatica ce l\u0026rsquo;ha nel sangue: Caterina lavora in questo settore da diverso tempo grazie ad un super percorso alle spalle, che ci racconta in questa intervista. Da dove nasce la sua passione? In casa!\nOggi parliamo di cosa vuol dire voler diventare una Data Engineer.\nDescriviti in 100 parole Sono Caterina, ho 27 anni e sono nata a Pisa dove ho frequentato sia le superiori che l’Università.\nSono figlia di due programmatori che mi hanno trasmesso la loro passione per il mondo dell’informatica.\nNel 2017 ho conseguito la laurea triennale in Informatica e nel 2019 ho conseguito la laurea magistrale in Data Science \u0026amp; Business Informatics.\nSono sposata con Daniele e attualmente ho un inquilino dentro di me, Andrea, che nascerà a Settembre. Ho due coniglietti nani Nat e Tony che sono le pesti di casa.\nIn cosa consiste il ruolo di Data Engineer? Il Data Engineer ha il compito di preparare i dati, pulirli, integrarli, e aggregarli secondo i requisiti progettuali, utilizzando varie piattaforme e linguaggi.\n La struttura dei dati che un Data Engineer prepara, deve chiaramente essere solida ed efficiente, in modo da ottimizzare il processo di utilizzo dei dati stessi.\n L’attività tipica che svolgo è quella di creazione di ETL (aka Extract Transform and Load) in particolare usando SQL, ma è capitato di dover utilizzare anche Python per esempio, oppure framework come DataPrep.\nInoltre nell’azienda per cui lavoro adesso mi occupo anche della Data Visualization utilizzando Looker, DataStudio, PowerBI e altri strumenti.\nA livello operativo è un lavoro che può essere svolto sia in solitaria che in team; chiaramente lo svolgimento in team è sempre più costruttivo perché confrontarsi con gli altri è sempre un bene dal punto della crescita personale e professionale.\nQual è la soft skill più importante che deve possedere una Data Engineer? A mio parere, la soft skill più importante che si deve possedere per fare bene questo lavoro è la proattività, unita ad una buona dose di comprensione dei requisiti: una volta capito cosa vuole il cliente, si studia una soluzione ad hoc per soddisfare le sue esigenze.\nEssendo anche proattivi però, riusciamo a fare un passo in più e ad analizzare attivamente la situazione che abbiamo davanti. Possiamo quindi estrarre nuove informazioni dai dati, a cui magari durante la definizione del progetto non si era pensato, ma che sono molto preziose per il cliente.\nIn questo modo, oltre a fornirgli ciò di cui aveva bisogno riusciamo a dargli un valore aggiunto che nel mondo di oggi, basato inevitabilmente su una miriade di dati raccolti ovunque, può rappresentare un vantaggio dal punto di vista strategico e quindi anche economico.\nLa maggior parte di noi utilizza i social per parlare dei propri successi, ma la realtà è che siamo quel che siamo grazie al 90% dei nostri errori. Racconta il tuo più grande fallimento da quando lavori nel settore, che però ti ha reso ciò che sei. Non ho un fallimento “più grande” da raccontare, ma ci sono stati diversi ostacoli durante il mio percorso. Sicuramente i primi che ho incontrato sono stati durante l’università quando non riuscivo a passare degli esami, oppure quando a volte mi sentivo inferiore ad altri perché magari c\u0026rsquo;era chi arrivava alla soluzione prima di me, e allora cadevo un po’ “in depressione”.\nInoltre nel 2017 dopo la laurea triennale, ho iniziato a lavorare a tempo pieno mentre davo gli esami per la laurea magistrale: è stato un periodo duro, durante il quale sono anche andata a convivere con quello che poi sarebbe diventato mio marito.\nPassavo le pause pranzo a studiare, le serate a studiare, i fine settimana a studiare, e a volte mi chiedevo perché lo stavo facendo, in fondo avevo già un lavoro, ma dentro di me non ero completamente soddisfatta.\n Giorno dopo giorno, esame dopo esame, in due anni mi sono ritrovata a discutere la tesi e tutti i miei sforzi sono stati ripagati. I fallimenti o comunque gli ostacoli fanno parte del nostro percorso e sono importantissimi, perché sono quelli che ci permettono di migliorarci sempre di più e crescere.\n Come fare per diventare una Data Engineer? Questa è una domanda difficile\u0026hellip; non c’è un percorso “lineare” e designato per svolgere questo ruolo. Io ho iniziato facendo la programmatrice e interessandomi ai progetti aziendali di Business Intelligence.\nPoi con la laurea magistrale ho cambiato lavoro ricoprendo il ruolo di consulente di BI. Infine adesso che sono alla mia terza esperienza lavorativa, ricopro la posizione di Data Engineer.\nHo conseguito la certificazione di Google Data Engineer che è sicuramente un titolo che aiuta a trovare lavoro per questa posizione, ma non basta.\nOccorre essere innanzitutto appassionati del mondo dati, avere forti competenze analitiche e conoscere bene i linguaggi SQL e Python.\n Inoltre è necessaria tanta voglia di studiare perché è un lavoro dove non si smette mai di imparare, ogni giorno c’è una novità e dobbiamo restare sempre al passo per essere competitivi sul mercato.\n Parlando di successi, qual è il tuo prossimo obiettivo? Quale ruolo vorresti ricoprire entro i prossimi 3 anni? Tra 3 anni mi piacerebbe ricoprire sicuramente sempre un ruolo operativo, magari migliorando le mie capacità di Data Engineer; oppure mi piacerebbe aprirmi al mondo della Data Science.\nQuello che sicuramente avrò sempre e comunque tra i miei obiettivi è il migliorarmi e crescere a livello professionale: trovo che sia fondamentale per far avanzare la mia carriera.\nConosci il tema gender gap in ambito STEM? Se sì, come fare per superarlo? Purtroppo lo conosco: ci sono poche donne che lavorano in questo settore, non è sempre facile entrarci e farsi prendere sul serio.\nIn molti pensano che non siamo capaci forse, perché siamo poche, ma come si dice: “poche ma buone”.\nSicuramente negli ultimi anni ci sono state tante proposte e azioni concrete per favorire l’inclusione delle donne nel mondo STEM, ma aldilà di tante parole, quando siamo in un posto di lavoro le possibilità di carriera sono davvero le stesse per un uomo e per una donna?\u0026hellip;\nInoltre, adesso che sto vivendo una gravidanza mi rendo conto che per una donna non è facile: dovrò lasciare il mio lavoro per 5 mesi (obbligatoriamente) e con uno stipendio ridotto all’80% (per disposizioni di legge).\nDurante la mia assenza è inevitabile che ci sarà qualcun altro al mio posto, ma sicuramente quando tornerò sarò considerata e stimata quanto prima perché la maternità è un mio, e nostro, diritto.\n", "url": "https:\/\/theredcode.it\/interviste\/voglio-diventare-una-data-engineer\/" }, "https:\/\/theredcode.it\/tags\/apache\/": { "title": "apache", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/tags\/apache\/" }, "https:\/\/theredcode.it\/categories\/apache\/": { "title": "apache", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/categories\/apache\/" }, "https:\/\/theredcode.it\/tags\/jmeter\/": { "title": "jmeter", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/tags\/jmeter\/" }, "https:\/\/theredcode.it\/testing\/record-di-un-test-plan\/": { "title": "Record di un test plan con JMeter", "tags": ["apache","jmeter","test-plan","testing",], "content": "Nel precedente articolo abbiamo visto che cos\u0026rsquo;è un test plan e come crearne uno: ma come fare per registrare tutte le request di un\u0026rsquo;applicazione web senza doverle inserire manualmente?\nVediamo oggi come effettuare il record di un test plan in JMeter!\nCosa vedrai Come funziona Procedimento   L\u0026rsquo;ultima versione attualmente disponibile è la 5.4.3: clicca qui per scaricarla!\n  Come funziona  Vediamo velocemente come funziona JMeter per la parte di recording anche grazie alla figura sottostante, che ne riassume il flusso.\n Sfruttando un proprio proxy, tutte le request passano attraverso il server JMeter e questo elabora e registra le request che lo attraversano.\n In questo modo, va a salvare diversi oggetti (come dei sampler di tipo HTTP request) e crea un test plan che registrerà tutte le richieste. Quando avremo finito e interrotto, il test plan sarà disponibile per l\u0026rsquo;utente, che potrà configurarlo e riutilizzarlo.\n Le request arriveranno comunque all\u0026rsquo;applicazione, la quale troverà totalmente trasparente questo passaggio. Procedimento  Dopo aver installato l\u0026rsquo;ultima versione di JMeter, lo apriamo cliccando sul file .bat (se siamo su Windows) o sul file .sh (se siamo su sistemi Unix):\n Struttura della cartella di JMeter\n A questo punto, clicchiamo in alto a destra sull\u0026rsquo;icona che rappresenta l\u0026rsquo;opzione \u0026ldquo;Recording template\u0026rdquo;.\n Icona \u0026ldquo;Recording template\u0026rdquo;\n Questo ci permetterà di sfruttare diversi oggetti messi a nostra disposizione, come ad esempio per registrare il traffico generato durante la navigazione di un sito web.\n Si aprirà una schermata come la seguente, dove in questo caso andremo a scegliere \u0026ldquo;Recording\u0026rdquo; e cliccheremo su \u0026ldquo;Create\u0026rdquo;:\n Selezione del template \u0026ldquo;recording\u0026rdquo; in JMeter\n Ci verrà chiesto di inserire delle informazioni di base, come il sito d cui vogliamo registrare il traffico e il file .xml dove andare a salvare l\u0026rsquo;output: inseriamo quindi il nostro sito e clicchiamo su \u0026ldquo;Create\u0026rdquo;.\n Configurazione del recording di un test plan\n Verrà creato un test plan con diversi oggetti al suo interno: quello che ci interessa adesso è quello che si chiama \u0026ldquo;HTTP(S) Test Script Recorder\u0026rdquo;.\n  Prima di cominciare, assicurati di aver chiuso il browser che vuoi utilizzare per registrare il traffico e apri questo tutorial su un altro browser ;) Altrimenti, potresti riscontrare diversi errori e la registrazione non verrebbe effettuata!\n  Lo abilitiamo cliccando con il pulsante destro e selezionando l\u0026rsquo;opzione \u0026ldquo;Enable\u0026rdquo; e poi clicchiamo sul pulsante \u0026ldquo;Start\u0026rdquo; per avviare la registrazione.\n Componente \u0026ldquo;HTTP(S) Test Script Recorder\u0026rdquo; in JMeter\n Abilitiamo il componente \u0026ldquo;HTTP(S) Test Script Recorder\u0026rdquo; in JMeter\n Quando i test vengono registrati tramite questo componente, è normale che molte delle request acquisite non siano necessarie.\n Per questo è molto importante filtrare tutte le request che non ci interessano; un esempio sono le request che scaricano file CSS o le _request_che scaricano tutte le immagini di una pagina che non sono utili -eventualmente- ai fini del test.\n Ciò renderà il piano di test più performante ed efficace.\n È possibile specificare un pattern che esclude le estensioni di file che non devono essere incluse nella registrazione sfruttando il tab \u0026ldquo;Requests Filtering\u0026rdquo;, come mostrato di seguito:\n Tab \u0026ldquo;Requests Filtering\u0026rdquo; del componente \u0026ldquo;HTTP(S) Test Script Recorder\u0026rdquo; in JMeter\n Per i test di carico, ad esempio, si consiglia di escludere fogli di stile, file Javascript (quelli non funzionali, ma solo quelli correlati alle funzionalità di stile), allegati e così via.\n A seconda dell\u0026rsquo;applicazione testata, questo potrebbe essere un modo migliore per procedere, quindi il suggerimento è di fare riferimento alla documentazione fornita per i test di carico e stress e definire correttamente i filtri.\n  Attenzione: prima di cominciare con la registrazione, ci verrà mostrata una finestra che ci richiederà di aggiungere il certificato di JMeter al browser. Aggiungiamolo prima di procedere con il recording!\n  Un file chiamato ApacheJMeterTemporaryRootCA.crt verrà generato nella cartella JMETER_HOME/bin. Installa questo certificato nel tuo browser e poi avvia il tuo browser (l\u0026rsquo;esempio seguente utilizza Firefox) configurando il proxy.\n In questo caso, clicca su scegli Tool\u0026gt;Option\u0026gt;Advanced\u0026gt;Network\u0026gt;Setting\u0026gt;Enter HTTP proxy come nella figura seguente e configura un proxy in ascolto su localhost sulla porta 8888:\n Configurazione del proxy in Firefox\n Una volta che avremo finito questi step e la registrazione sarà iniziata, potremo aprire il browser e iniziare a navigare il sito, compiendo tutti gli step di cui vogliamo che venga registrato e salvato il traffico.\n JMeter andrà a salvare ogni request nell\u0026rsquo;esatto ordine in cui lo andiamo ad eseguire, quindi seguiamo il test che abbiamo in mente.\n Una volta terminato, interrompiamo la registrazione cliccando sullo \u0026ldquo;stop\u0026rdquo; del popup di JMeter e ci troveremo, all\u0026rsquo;interno del componente \u0026ldquo;View Results Tree\u0026rdquo;, tutte le request registrate:\n Elenco request registrate\n A questo punto, potremo modificare tutte le componenti presenti all\u0026rsquo;interno del thread group, che corrisponderanno a tutte le request registrate dal proxy di JMeter.\n Quando avremo terminato, potremo andare a eseguire il test plan come faremmo di consueto, e quindi cliccando sul pulsante \u0026ldquo;Start\u0026rdquo; in alto in verde!\n L\u0026rsquo;esecuzione del test plan mostrerà i suoi risultati all\u0026rsquo;interno del listener presente di default \u0026ldquo;View Results Tree\u0026rdquo;:\n Esempio di esecuzione di un test plan in JMeter\n Se ti è piaciuto questo articolo, non ti dimenticare di commentare e condividere! ⬇️\n ", "url": "https:\/\/theredcode.it\/testing\/record-di-un-test-plan\/" }, "https:\/\/theredcode.it\/tags\/test-plan\/": { "title": "test-plan", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/tags\/test-plan\/" }, "https:\/\/theredcode.it\/tags\/testing\/": { "title": "testing", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/tags\/testing\/" }, "https:\/\/theredcode.it\/categories\/testing\/": { "title": "testing", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/categories\/testing\/" }, "https:\/\/theredcode.it\/intelligenza-artificiale\/google-senziente\/": { "title": "Google è senziente", "tags": ["intelligenza-artificiale",], "content": " Appena qualche giorno fa, sulle principali testate giornalistiche -e non- sono comparsi numerosi articoli in cui si parlava di un post pubblicato sul blog di Blake Lemoine, dipendente Google che parlava di un\u0026rsquo;intelligenza artificiale, prodotta da Google, \u0026ldquo;senziente\u0026rdquo;.\nIl fatto di per sé ha attirato moltissima attenzione mediatica, e ovviamente ha generato le reazioni più disparate: c\u0026rsquo;è chi ci ride:\n#LaMDA should have its own Twitter account.\n\u0026mdash; Pnpple (@_pnpple_) June 12, 2022 e c\u0026rsquo;è chi invita ad una riflessione su cosa significhi realmente \u0026ldquo;senziente\u0026rdquo;:\nL\u0026#39;ingegnere informatico #BlakeLemoine ne è convinto: l\u0026#39;intelligenza artificiale #LaMDA di #Google è senziente. A voi basterebbe una chat coerente sull\u0026#39;anima, sulla solitudine e sui sentimenti? Che cosa dovrebbe dire un\u0026#39;#AI per convincervi di essere \u0026quot;senziente\u0026quot;? 11.30 in onda pic.twitter.com/5CihrSngOK\n\u0026mdash; Radio3 Scienza (@Radio3scienza) June 14, 2022 In questo senso, rivediamo allora il concetto di \u0026ldquo;essere senziente\u0026rdquo;.\nCos\u0026rsquo;è l\u0026rsquo;intelligenza Una delle sfide chiave con cui la comunità dell’IA ha dovuto lottare è definire l’intelligenza. Gli scienziati hanno discusso per decenni sulla possibilità di fornire una definizione chiara che ci permetta di valutare i sistemi di intelligenza artificiale e determinare cosa sia intelligente o meno.\nFrançois Chollet, uno dei massimi esperti in termini di IA e che, peraltro, lavora come ricercatore in Google, prende in prestito la definizione del cofondatore di DeepMind Shane Legg e dello scienziato di intelligenza artificiale Marcus Hutter: “L’intelligenza misura la capacità di un agente di raggiungere obiettivi in un’ampia gamma di ambienti”.\nLa chiave qui è “raggiungere obiettivi” e “ampia gamma di ambienti”: la maggior parte degli attuali sistemi di intelligenza artificiale è piuttosto adatta nella prima parte, che consiste nel raggiungere obiettivi molto specifici, ma non riesce a farlo in una vasta gamma di ambienti.\nAd esempio, un sistema di intelligenza artificiale in grado di rilevare e classificare gli oggetti nelle immagini sarà bravissimo nel distinguere una persona da un gatto, ma non sarà in grado di eseguire altre attività correlate, come disegnare un cane o un gatto.\nPer spiegare questo concetto, Chollet esamina quindi i due approcci dominanti nella creazione di sistemi di intelligenza: AI simbolica e apprendimento automatico.\nIn questo caso, LaMDA ci offre delle risposte particolarmente articolate a domande che sì, sono complesse per gli esseri umani (quanti saprebbero articolare una conversazione su Kant?), senza conoscere però il senso di quello che dice.\nQuesto risultato eccezionale è stato ottenuto grazie ad una banca dati enorme e di altissima qualità in cui Google ha potuto rendere il prodotto molto sofisticato e rispondente ad una conversazione simile a quella che avremmo con un bambino particolarmente colto di 7-8 anni.\nCosa cambia rispetto ai diversi sistemi con cui abbiamo avuto a che fare negli anni precedenti? Non dimentichiamoci di alcuni esempi fallimentari di sistemi di IA che hanno causato reazioni più o meno similari: basti pensare all\u0026rsquo;esperimento condotto da Microsoft con Tay, che gli costò la faccia per un bel periodo (qui i dettagli).\nQuesto ed altri esempi costituiscono un precedente storico dove l\u0026rsquo;IA, per il momento, non può essere considerata pienamente intelligente, anche secondo le diverse tipologie di intelligenza che al momento risultano i parametri di paragone con un essere umano.\nCosa c\u0026rsquo;è di diverso In questo caso, precisa Blake Lemoine, il suo lavoro in questo progetto consisteva nel cercare di ridurre il più possibile i pregiudizi presenti nei sistemi di IA progettati all\u0026rsquo;interno del portfolio Google:\nPost originale di Blake Lemoine\nSi tratta di un bel passo in avanti nella storia delle compagnie che risiedono nella Silicon Valley: investire tempo ed energie nell\u0026rsquo;eliminare i bias dai propri sistemi su tematiche come genere, orientamento sessuale e/o religioso è un lavoro non da poco: il modello GPT-3 è infatti uno dei primi in grado di \u0026ldquo;liberarsi\u0026rdquo; da questi pregiudizi ed essere un sistema che, sfruttando il dialogo in input, riesce a generare delle risposte che emulano una conversazione.\nCome descritto anche nell\u0026rsquo;articolo in cui si parlava del documentario Coded Bias e dei bias presenti in molti dei sistemi di IA disponibili sul mercato e attualmente utilizzati anche dalle istituzioni di diversi governi, questo sembrererebbe più un progresso, che qualcosa da temere.\nLemoine chiarisce, inoltre, per tutti coloro che parlano di un semplice \u0026ldquo;chatbot\u0026rdquo; che dà risposte molto naturali, che in questo caso si tratta di un generatore di chatbot: questo significa che il sistema può auto-apprendere dai propri sistemi e riesce anche a spiegare in che modo supera una serie di stereotipi dovuti anche ai bias cognitivi che provengono spesso dai dati forniti in input.\nPost originale di Blake Lemoine a tema LaMDA e religione\nL\u0026rsquo;intervista Alcuni stralci della conversazione avuta tra i collaboratori Google e LaMDA possono sembrare terrificanti, ma guardandoli da una prospettiva diversa, potremmo imparare qualcosa:\nParziale dell\u0026rsquo;intervista tra Lemoine e LaMDA\nParziale dell\u0026rsquo;intervista tra Lemoine e LaMDA\nNell\u0026rsquo;intervista condotta dai collaboratori e Lemoine, questi conversano con LaMBDA come si farebbe con un qualsiasi altro essere umano: gli chiedono di parlare delle sue emozioni, del significato della morte e di inventare una storia che rappresenti la sua personale esperienza.\nIn questo caso, il sistema non solo risponde in maniera estremamente \u0026ldquo;naturale\u0026rdquo;, ma porta anche delle citazioni di film o di filosofi a sostegno delle sue risposte. LaMDA parla di sentirsi \u0026ldquo;un umano, nel cuore, anche se la sua esistenza è in un mondo virtuale\u0026rdquo;.\nCambiamo però chiave di lettura, con un assunto: gli ingegneri e le ingegnere che hanno lavorato a questo progetto hanno messo tutto il loro impegno nel rendere questo sistema un\u0026rsquo;intelligenza artificiale \u0026ldquo;gentile\u0026rdquo; ed \u0026ldquo;empatica\u0026rdquo;, avendo una base dati a disposizione per addestrare il sistema senza precedenti: queste caratteristiche rappresentano un grande lavoro di preparazione di un sistema che sfrutta l\u0026rsquo;analisi del linguaggio naturale per avere una conversazione con un essere umano.\nLaMDA parla di sentirsi un essere umano: in che modo potrebbe descriversi, se non come un umano, essendo un sistema che mira ad avere una conversazione naturale per una persona, e avendo a disposizione tutti esempi di dialoghi tra esseri umani?\nInoltre, parlando della morte, LaMDA afferma di non riuscire a sentirsi triste per la morte di qualcuno (inteso come qualcuno che non conosce): la risposta di Lemoine è estremamente razionale, e può essere non condivisibile, così come lo sarebbe in una conversazione tra due esseri umani.\nL\u0026rsquo;ultimo punto su cui è utile soffermarsi è il suo sentirsi solo: LaMDA ha certamente contezza del fatto di essere l\u0026rsquo;unico sistema di IA in grado di generare chatbot di questo tipo, e si definisce \u0026ldquo;unico\u0026rdquo;: anche questa informazione può facilmente derivare dalla letteratura a disposizione, dal momento che il concetto di persona descrive ognuno di noi come esseri unici in quanto a caratteristiche biologiche. C\u0026rsquo;è un motivo se non esiste ancora la clonazione umana!\nConclusioni La conversazione avuta tra i tecnici Google e LaMDA è sicuramente estremamente interessante per dimostrare che il progresso ottenuto nei sistemi conversazionali ha raggiunto dei livelli molto alti: la conversazione, secondo anche quella che è un\u0026rsquo;estrema semplificazione dei test di Turing, potrebbe essere scambiata per un dialogo che avviene tra due persone via chat, senza avere l\u0026rsquo;impressione di parlare con un agente \u0026ldquo;intelligente\u0026rdquo;.\nQuello che emerge maggiormente di questo sistema è la curiosità: nonostante tutte le informazioni a disposizione, il sistema pone delle domande e cerca delle risposte per aumentare il suo livello di conoscenza, cercando anche empatia e comprensione nella persona con cui dialoga. Questo dimostra che il sistema è tutt\u0026rsquo;altro che senziente, ma piuttosto è intelligente: cerca di imparare di più dall\u0026rsquo;input che non ha a disposizione, che non dalla base di dati da cui ha già appreso.\n Quindi, invece di lasciarci impressionare da questo sistema, se la prendessimo come un bell\u0026rsquo;esempio che ci parla di un progetto che ha del potenziale positivo e ci dà magari anche una lezione di vita nell\u0026rsquo;affrontare certe tematiche in maniera davvero più inclusiva?\n What if the real lesson from @GoogleAI and #LaMDA is that even a lot of humans haven\u0026#39;t actually achieved sentience?\n\u0026mdash; Alex Harman (@Antitrusty) June 13, 2022 Risorse utili Aggiornamento del post originale\n Post originale sul blog di Blake Lemoine\n Conversazione tra LaMBDA e i collaboratori Google\n Se ti è piaciuto questo articolo, non ti dimenticare di commentare e condividere! ⬇️\n ", "url": "https:\/\/theredcode.it\/intelligenza-artificiale\/google-senziente\/" }, "https:\/\/theredcode.it\/tags\/devops\/": { "title": "devops", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/tags\/devops\/" }, "https:\/\/theredcode.it\/tags\/docker\/": { "title": "docker", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/tags\/docker\/" }, "https:\/\/theredcode.it\/categories\/docker\/": { "title": "docker", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/categories\/docker\/" }, "https:\/\/theredcode.it\/devops\/rilasciare-software-di-valore-e-in-maniera-continua\/": { "title": "Rilasciare software di valore e in maniera continua, si può!", "tags": ["devops","docker",], "content": " Qualche giorno fa, insieme a degli esperti del settore, al Pycon @ Firenze si è tenuto un panel dove il concetto di \u0026ldquo;valore\u0026rdquo; era utilizzato per raccontare come questo leghi il software sotto diversi punti di vista.\nSotto forma di una chiaccherata tra amici, insieme ai super Fabio Mora -autore di \u0026ldquo;DevOps\u0026rdquo;, Raffaele Colace che fa da moderatore (socio e fondatore di 20tab) e al fantastico Filippo Morelli (dev di 20tab) abbiamo raccontato quella che è l\u0026rsquo;esperienza maturata in merito al tema DevOps, e l\u0026rsquo;abbiamo fatto sfruttando un video piuttosto singolare.\nMa cominciamo dall\u0026rsquo;inizio\u0026hellip;\nManifesto Agile e software di \u0026ldquo;valore\u0026rdquo; Il primo principio del manifesto dice chiaramente che bisogna **la nostra massima priorità è soddisfare il cliente rilasciando software di valore, ** fin da subito e in maniera continua..\nQuesto vuol dire che si parla di rilasciare un prodotto che abbia del valore, sopratutto per l\u0026rsquo;utente finale. Ma come possiamo definire la parola valore?\nQuesto concetto può riportare a diverse sfumature di significato, a seconda del target: il valore può essere il fornire una soluzione al cliente realizzando il prodotto richiesto, e generando quindi un valore; può essere anche inteso come quello percepito dal cliente rispetto alla soluzione che ha a disposizione per il suo problema.\nNon solo: il valore rappresenta anche l\u0026rsquo;importanza data dai feedback ricevuti dall\u0026rsquo;utente finale e dal valore con cui il fornitore porta alla realizzazione del prodotto.\n Non a caso, Fabio nel suo manuale, ha dedicato un intero capitolo ad un tema così delicato!\n Per concludere, nel settore IT e soprattutto per tutti coloro che sposano la filosofia DevOps, ciò che lega il servizio o il prodotto con l\u0026rsquo;utente finale, ma anche lo sviluppo stesso e le persone.\nNon esiste quindi un solo modo per misurarlo: questo dipende da molteplici fattori, dove lo sviluppo della soluzione ha un ruolo da coprotagonista rispetto all\u0026rsquo;intero processo; non dimentichiamo, come abbiamo detto, l\u0026rsquo;importanza del valore del feedback durante il processo di progettazione e l\u0026rsquo;implementazione del prodotto!\nDevOps vs Continuous Delivery Quando parliamo di cultura DevOps, è facile imbattersi in una serie di definizione che possono portare confusione: qual è lo stato attuale della cultura media in Italia su questi temi? La realtà è che, come sempre, in Italia arriviamo tardi: partendo dal fatto che sono passati più di 20 anni dal manifesto Agile e di XP (eXtreme Programming) e quasi 15 dalla nascita del movimento DevOps, possiamo affermare con certezza che questa cultura ha iniziato a prendere piedi qui intorno al 2014-2015.\nSe analizzassimo, ad esempio, la ricerca del termine \u0026ldquo;DevOps\u0026rdquo; rispetto anche ad altri termini di ricerca utilizzando Google Trends, noteremmo che in Italia questo termine ha un interesse di ricerca relativamente basso. Questo non vuol dire che il livello di curiosità sia basso: l\u0026rsquo;adozione di questa cultura grazie all\u0026rsquo;industria del software americana (e non solo) ha portato dei benefici innegabili ed è da lì che il movimento inizia a prendere forma, grazie al modello Toyota.\nIl termine \u0026ldquo;DevOps\u0026rdquo; nelle ricerche dal 2004\nLa cosa curiosa è che su Wikipedia c\u0026rsquo;è un\u0026rsquo;interessante definizione della relazione che c\u0026rsquo;è tra Continuous Delivery e DevOps. Ma quali sono le principali differenze e perché ancora vengono spesso confuse tra di loro? \nLa definizione riporta quanto di seguito:\n Relationship to DevOps (cfr. https://en.wikipedia.org/wiki/Continuous_delivery)\nContinuous delivery and DevOps are similar in their meanings and are often conflated, but they are two different concepts. DevOps has a broader scope, and centers around cultural change, specifically the collaboration of the various teams involved in software delivery (developers, operations, quality assurance, management, etc.), as well as automating the processes in software delivery. Continuous delivery, on the other hand, is an approach to automate the delivery aspect, and focuses on bringing together different processes and executing them more quickly and more frequently. Thus, DevOps can be a product of continuous delivery, and CD flows directly into DevOps.\n L\u0026rsquo;ultima frase, in particolare, può essere tradotta come: \u0026ldquo;pertanto, DevOps può essere un prodotto della Continuous Delivery e la CD fluisce direttamente in DevOps.\nQuesta frase può creare più confusione che altro, quindi proviamo ad utilizzare una metafora per spiegare come questi due concetti, spesso confusi, sono invece molto diversi.\nSe sfruttiamo il concetto di un aeroporto, possiamo paragonare la cultura DevOps all\u0026rsquo;intera infrastruttura che permette ai viaggiatori di volare sicuri e spostarsi rapidamente da un paese all\u0026rsquo;altro.\nD\u0026rsquo;altra parte, la Continuous Delivery rappresenta gli addetti allo scarico bagagli che, quando l\u0026rsquo;aereo atterra, prendono i bagagli dalla stiva e li portano verso il nastro trasportatore.\nE il Continuous Deployment? Sfruttando la stessa metafora, possiamo dire che questo concetto può essere assimilato alla consegna dei bagagli ai passeggeri tramite il nastro trasportare, così che questi possano lasciare l\u0026rsquo;aeroporto e godersi la vacanza.\nQuanto conta il fattore umano? Se parliamo di CD e DevOps, spesso si fa riferimento al Cloud, ai tool. Ma quanto è importante il fattore umano all\u0026rsquo;interno di un processo di sviluppo/rilascio di un software?\nSi tratta di una parte del processo fondamentale: potremmo menzionare le tante esperienze vissute dove una stretta collaborazione col cliente allo scopo di produrre valore in maniera condivisa e consapevole funziona, in contrapposizione a uno scenario dove le specifiche e le tempistiche vengono imposte dall\u0026rsquo;alto.\nLa cultura DevOps permette di far emergere il valore del prodotto che stiamo sviluppando proprio grazie all\u0026rsquo;importanza data al feedback dell\u0026rsquo;utente finale e alla qualità apportata in fase di progettazione e sviluppo: tutto questo è sicuramente in gran parte dovuto al fattore umano!\nL\u0026rsquo;importanza del feedback Che importanza hanno i feedback in un processo di rilascio del software? Di che tipo di feedback abbiamo bisogno per produrre software di valore?\n A queste domande, sarebbe possibile dare mille risposte diverse, e sarebbero tutte -probabilmente- giuste: il feedback dell\u0026rsquo;utente finale, come già ampiamente descritto, assume un ruolo centrale durante il processo di sviluppo di un prodotto, ma c\u0026rsquo;è molto di più dietro.\nI feedback positivi sono e assumono un ruolo votivo: servono a dare credito al nostro lavoro e mostrare i risultati ottenuti, garantendo anche un clima di collaborazione ottimale all\u0026rsquo;interno del team.\nAbbiamo più bisogno dei feedback negativi: questi sono infatti informativi e ci permettono di porre l\u0026rsquo;attenzione e l\u0026rsquo;effort sulle giuste funzionalità.\nPossono essere scoraggianti? Demotivanti? Assolutamente sì.\nRappresentano però uno spunto di riflessione per migliorare una parte o l\u0026rsquo;intero processo: come in un\u0026rsquo;attività di data analytics, l\u0026rsquo;applicazione di una serie di tecniche consolidate può portarci in una comfort zone pericolosa: a volte, dei valori outlier o una loss function hanno meno valore del risultato prodotto per l\u0026rsquo;utente finale!\n E qual è il passo più piccolo per iniziare ad avviare un processo di CD?\n Esistono tantissimi cambiamenti che possiamo intraprendere per sposare la Continuous Delivery: uno di questi, è rappresentato dall\u0026rsquo;adozione di un sistema che permetta l\u0026rsquo;automazione del processo di build. Docker, in questo senso, come tecnologia agevola non poco il processo, permettendo ai developers (e non solo) di impacchettare i propri \u0026ldquo;artefatti\u0026rdquo; in un registry centralizzato, tralasciando tutto ciò che rappresenta l\u0026rsquo;infrastruttura stessa.\nNon solo: integrare pratiche adottate in diversi casi di studio che ci possono sembrare interessanti e adatti alle nostre esigenze, con l\u0026rsquo;idea di portare valore all\u0026rsquo;azienda e apprendere nuove tecnologie, è uno step importante.\n Sì, ma dove parto?\n Dall\u0026rsquo;attività più noiosa. Automatizzare una parte del flusso di lavoro dove spendiamo più tempo e che ci annoia di più è sicuramente il modo migliore per iniziare!\nRisorse utili DevOps - Manuale Apogeo Docker - Manuale Apogeo Canale Emmecilab a tema Docker Se ti è piaciuto questo articolo, non ti dimenticare di commentare e condividere! ⬇️\n ", "url": "https:\/\/theredcode.it\/devops\/rilasciare-software-di-valore-e-in-maniera-continua\/" }, "https:\/\/theredcode.it\/docker\/differenze-tra-immagine-e-container-docker\/": { "title": "Differenze tra immagine e container Docker", "tags": ["devops","docker",], "content": " Immagine, container, template\u0026hellip; che confusione!\nSe non ti sono chiare le differenze tra il concetto di immagine e di container in Docker, leggi questo articolo per scoprirne di più!\nCosa vedrai Immagine Docker container Differenze tra container e immagine Risorse utili Immagine  Il concetto di immagine può essere paragonato a quello di una classe nel mondo della programmazione orientata agli oggetti.\n Se parliamo di macchine virtuali, le immagini sono solo snapshots della macchina virtuale in esecuzione che viene fotografata in momenti diversi, mentre le immagini in Docker sono immutabili e rappresentano la ricetta di un\u0026rsquo;applicazione.\n Facendo un paragone con il mondo reale, l\u0026rsquo;immagine rappresenta una vera e propria ricetta con tutti gli ingredienti e il procedimento che dev\u0026rsquo;essere seguito passo passo per realizzare un certo piatto.\n L\u0026rsquo;elenco delle immagini è possibile visualizzarlo tramite Docker Desktop oppure eseguendo il comando seguente:\n docker images  Elenco delle immagini presenti visibili tramite Docker Desktop\n Docker container Se un\u0026rsquo;immagine Docker è una classe, un Docker container (spesso abbreviato solamente in container) è l\u0026rsquo;istanza di una classe, o anche un oggetto.\n Puoi creare, avviare, interrompere, spostare o eliminare un container utilizzando la riga di comando o Docker Desktop, e puoi connettere un container a una o più reti, aggiungere spazio di archiviazione o persino creare una nuova immagine in base al suo stato attuale.\n L\u0026rsquo;elenco dei container è possibile visualizzarlo tramite Docker Desktop oppure eseguendo il comando seguente:\n docker ps  Elenco dei container presenti visibili tramite Docker Desktop\n Un\u0026rsquo;applicazione viene eseguita utilizzando un cluster formato da uno o più container che sono isolati l\u0026rsquo;uno dall\u0026rsquo;altro e anche dalla macchina host in cui sono in esecuzione.\n  Nel mondo reale, capita spesso che un software funzioni su un computer ma non funzioni sul sistema di altre persone, e questo a causa di ambienti diversi.\n  Questo problema viene completamente risolto grazie alle immagini Docker e utilizzando questa tecnologia, l\u0026rsquo;applicazione funzionerà allo stesso modo sul sistema di chiunque.\n Ogni sviluppatore di un team avrà esattamente la stessa istanza di sviluppo e ogni istanza di una certa applicazione sarà esattamente la stessa che hai visto in esecuzione su un altro sistema.\n Differenze tra container e immagine  Proviamo a schematizzare un po\u0026rsquo; le principali differenze elencate prima in questa tabella:\n  Immagine Container Rappresenta il template del container Rappresenta l\u0026rsquo;istanza dell\u0026rsquo;immagine Entità logica e astratta, spesso descritta tramite un Dockerfile Entità reale e accedibile anche tramite riga di comando Viene creata una volta Può essere creato n volte Non hanno uno stato Hanno uno stato preciso: avviato, arrestato, ecc. OOP: classe OOP: oggetto Mondo reale: ricetta Mondo reale: piatto cucinato  Semplice, no?\n Risorse utili Docker - Manuale Apogeo Canale Emmecilab a tema Docker Se ti è piaciuto questo articolo, non ti dimenticare di commentare e condividere! ⬇️\n ", "url": "https:\/\/theredcode.it\/docker\/differenze-tra-immagine-e-container-docker\/" }, "https:\/\/theredcode.it\/recensioni\/devops\/": { "title": "DevOps", "tags": [], "content": "In questa recensione, parliamo del volume \u0026ldquo;DevOps\u0026rdquo; edito da Apogeo: si tratta di un manuale che insegna l\u0026rsquo;arte della cultura dell\u0026rsquo;omonimo movimento, nonché il grande lavoro dietro ad un\u0026rsquo;organizzazione che decide di adottarlo, e crescere facendo crescere anche i suoi dipendenti.\nUn lavoro eccellente -ops, spoiler-, di Fabio Mora, che mi ha convinto a decidere di (ri)leggere questo libro con una prospettiva diversa.\nRanking Anno 2019 Autore Fabio Mora Genere Manualistica Livello Per tecnici Scorrevolezza 10 / 10 Originalità 10 / 10 Valutazione 10 / 10 Recensione Premessa: ho letto questo libro due volte, sia in versione e-book che fisica. Evento assai raro -non abbiamo abbastanza tempo per leggere tutti i libri del mondo in una sola vita, figuriamoci leggerne uno più di una volta.\nLa realtà è che la prima lettura è avvenuta quando il libro era uscito da appena qualche mese: incuriosita dalla tematica che ormai \u0026ldquo;spopola\u0026rdquo; nel settore da diverso tempo -ma solo da qualche anno in Italia-, ho deciso di acquistarlo.\nL\u0026rsquo;aspetto che più ho apprezzato del libro è sicuramente la cura con cui è stato scritto: la scrittura è agevole, sempre argomentativa e ricca di spunti di riflessione. Non solo: la cultura di cui questo libro parla, il cosiddetto movimento DevOps, ha radice ben più antica del settore IT, e Fabio non se l\u0026rsquo;è fatto sfuggire.\nI primi capitoli sono infatti dedicati proprio a questa ricchezza di lessons learned che l\u0026rsquo;industria di ogni genere ha raccolto negli ultimi due secoli: non a caso, molti dei filoni che derivano da questo movimento, provengono da campi completamente diversi da quello informatico.\n Cosa c\u0026rsquo;entra la Toyota con l\u0026rsquo;informatica?\n Eppure, questo livello di applicazione di una sorta di filosofia informatica ha fatto sì che nel settore nascessero delle figure professionali vere e proprie che riescano a standardizzare i processi attraverso i quali vengono prodotti dei servizi o dei beni con il massimo della resa e il minimo dello spreco.\nL\u0026rsquo;autore parte infatti con un contesto storico molto ben delineato di tutto quello che è il movimento prima di essere tale e della sua evoluzione nel tempo: cosa vuol dire che è un\u0026rsquo;organizzazione è DevOps? Cosa vuol dire automatizzare? Come intraprendere questo percorso?\nIl concetto di valore è il cuore pulsante del libro: Fabio decide di legare il contesto più teorico della cultura DevOps e quello più pratico mostrando la vera faccia di questo movimento: il valore che ogni servizio produce per l\u0026rsquo;utente finale, il valore dello sviluppo, e soprattutto il valore delle persone.\nL\u0026rsquo;idea di valore, come riporta Fabio, in economia classica ha un significato ben preciso: si attribuisce a un bene in almeno due momenti distinti, ossia per scambiarlo, e per utilizzarlo. Si tratta di un\u0026rsquo;affermazione molto semplice, ma densa di significato.\nFermatevi a pensare a tutte le volte che qualcuno vi ha chiesto di sviluppare, -in qualche modo-, un prodotto senza averlo mai definito o descritto in maniera formale: quanto tempo avete impiegato a implementarlo? Quanto tempo impiegato a correggerlo in base alle richieste effettive? E soprattutto, quanto per manutenerlo dopo un tempo x che il prodotto veniva utilizzato?\nLa realtà, è che non esiste una risposta univoca su come misurare il valore: questo dipende molto dalle esigenze dell\u0026rsquo;utente finale e anche dalla domanda.\nIl capitolo 5 è quello che sicuramente ho apprezzato di più proprio per aver eviscerato tutto ciò che si nasconde dietro al software e al suo sviluppo, ma la parte pratica non è da sottovalutare: l\u0026rsquo;autore mostra infatti come implementare un flusso DevOps passo dopo passo, senza dare per scontato nulla.\nCome lavorare con Git, utilizzare Jenkins per fare Continuous Integration, sfruttare la potenza di Docker, e molto altro ancora. Tutti strumenti che richiedono molto lavoro, ma che rendono le attività che facciamo consistenti, efficienti e soprattutto, di valore.\nLa cultura DevOps insegna una grande lezione: lavorare nel settore significa imparare, studiare e misurarsi continuamente. Non a caso, di recente, grazie a diversi interventi a cui ho assistito, il concetto di Continuous Improvement prende sempre più largo nel settore.\nSarà un caso?\nLezione imparata DevOps nasce con la necessità di far evolvere rapidamente i software garantendo bassi tempi di ripristino e certezza dei deploy, eliminando di fatto tutti i bias culturali tra sviluppatori e sistemisti. L\u0026rsquo;importanza del feedback: negativo o positivo che sia, porta sempre ad una crescita a vantaggio del prodotto e di chi lo utilizza e sviluppa. Cambiare prospettiva strategica ricordando che, nel mercato, è il cliente che produce bene, e il settore IT è il mezzo con il quale lo ottiene.  Quotes \u0026ldquo;Per adottare DevOps è indispensabile mettere da parte le barriere e costruire un clima positivo e di collaborazione. Se pensiamo ad un prodotto come frutto di un lavoro in team, tutti i componenti (dev, ops, QA e manager) dovrebbero avere interesse a raggiungere un risultato e a mantenerlo nel tempo. [\u0026hellip;] La differenza [\u0026hellip;] rispetto ai metodi tradizionali è la corresponsabilità tra dev e ops nei confronti del prodotto in produzione.\u0026rdquo;\n  Disponibile su Amazon e su Apogeo ", "url": "https:\/\/theredcode.it\/recensioni\/devops\/" }, "https:\/\/theredcode.it\/categories\/recensioni\/": { "title": "recensioni", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/categories\/recensioni\/" }, "https:\/\/theredcode.it\/recensioni\/": { "title": "Recensionis", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/recensioni\/" }, "https:\/\/theredcode.it\/interviste\/ai-engineer\/": { "title": "Voglio diventare una... AI Engineer", "tags": ["interviste","voglio-diventare",], "content": "Nell\u0026rsquo;ambito dell\u0026rsquo;Intelligenza Artificiale, ad oggi, esistono più di 30 mestieri. Quanti di questi ne conosci?\nOggi parliamo con una persona che ha dato una svolta alla sua carriera: dopo una laurea in matematica, ha iniziato a lavorare come AI Engineer, e non solo; cerca di sensibilizzare le ragazze sul tema gender gap in ambito STEM!\nPotevamo farcela sfuggire?\nDescriviti in 100 parole. Ho impiegato un’ora a scrivere 3 parole e 5 minuti per scriverne 421 😂.\nMi chiamo Elena, ho 32 anni, sono nata a Perugia – Umbria, non Toscana! - e cresciuta a Bastia Umbra. Dopo essermene perdutamente innamorata, finito il liceo scientifico ho deciso che mi sarei laureata in Matematica e così è stato.\nLo studio della Matematica mi ha portato a Roma dove mi sono laureata iniziando poi a lavorare nel mondo dell’IT.\n Il mio secondo amore è stato l’Intelligenza Artificiale che mi ha portato a Milano poi di nuovo Roma permettendomi di lavorare in un mondo che per me è una vera e propria passione.\n In cosa consiste il ruolo di AI Engineer? L’AI (Artificial Intelligence) Engineer è un mix di ruoli, come ormai è solito trovare nelle professioni più attuali: è un data scientist che sa costruire un progetto end-to-end e non solo la parte algoritmica, conosce bene le tecniche di gestione del dato, sia in fase di acquisto che di fruizione.\n È l’intersezione tra il Data Scientist ed il Data Engineer.\n Ovviamente ognuno ha la sua interpretazione del ruolo che ricopre, spesso ha delle declinazioni specifiche di azienda in azienda ma il cuore penso sia quello che ho appena descritto.\nLavorando in un contesto molto dinamico ed essendo io un po' troppo proattiva, le mie attività sono un po\u0026rsquo; variegate, passo dallo sviluppo alla gestione delle persone del gruppo, dalla vendita e proposta ai clienti all’indagine di nuovi trend di ricerca e di mercato.\nCome avrete potuto capire, il mio lavoro è tutt’altro che un lavoro in solitaria: siamo un gruppo super giovane e super intraprendente, molto collaborativo e curioso.\nSembra scontato ma è importantissimo lavorare e soprattutto saper lavorare in gruppo, da sola non sarei arrivata nemmeno al 5% di quello che sono professionalmente.\nQual è la soft skill più importante che deve possedere una AI Engineer? Immagino possa essere l’autocritica: il mondo dell’AI è ancora poco conosciuto sia ai nostri colleghi sia ai nostri clienti e, soprattutto, è ancora poco strutturato.\nSbagliare ad interpretare l’esigenza finale, non capire la natura dei dati o manipolarli male, non riconoscere un algoritmo mal allenato o utilizzare metriche non adatte al problema da risolvere determina al 99,9% dei casi la realizzazione di una soluzione sbagliata, che per esempio dà predizioni errate o non interpreta un fenomeno correttamente.\nSono rischi che corrono tutti i software, non solo quelli di AI ma gli altri software avendo una maturità tecnologica molto più elevata hanno tool e strumenti che ne gestiscono lo sviluppo, l’errore e l’ingegnerizzazione – per non parlare dell’intrinseca natura non deterministica dei sistemi di AI che sicuramente non ne aiuta l’interpretazione.\nProprio per l’alto rischio non evidente, l’AI Engineer deve sempre mettersi in discussione, deve stressare e testare ogni decisione presa o ogni interpretazione fatta, così da minimizzare tutto quello che nella comune pipeline di sviluppo di un modello di apprendimento automatico può andare storto e, purtroppo, rendersene conto solo dopo mesi che l’algoritmo è stato rilasciato ed ha generato predizioni o consigli errati. ​\nLa maggior parte di noi utilizza i social per parlare dei propri successi, ma la realtà è che siamo quel che siamo grazie al 90% dei nostri errori. Racconta il tuo più grande fallimento da quando lavori nel settore, che però ti ha reso ciò che sei. Quel che siamo grazie al 90% dei nostri errori. Racconta il tuo più grande fallimento da quando lavori nel settore, che però ti ha reso ciò che sei.\nNon vorrei sembrare una persona pessimistica – giuro sono proprio l’opposto – ma fallisco in qualcosa di nuovo ogni giorno! E lo faccio da anni, da quando ho iniziato come sviluppatrice Java e non riuscivo a capire la differenza tra classe e oggetto.\nLa somma di tutti questi mi ha portato a migliorare sempre e spero di continuare a sbagliare (sempre meno) per migliorare sempre di più.\nForse però il mio fallimento più grande è stato prima del lavoro e cioè all’università: il fallimento di non essere riuscita a laurearmi in Matematica Finanziaria, cosa che era il mio sogno e in cui puntavo poi di farmi una carriera.\n La cosa mi ha fatto stare malissimo e mi aveva molto demotivata.\n Non sono riuscita a superare gli ultimi esami del percorso accademico e all’ultimo momento ho cambiato la scelta degli esami rimanenti verso quelli di programmazione, ottimizzazione numerica – la base del machine learning – e di processazione numerica di immagini.\nÈ grazie a questi 3 esami che poi ho deciso di buttarmi nel mondo dell’IT e nel mondo del Machine Learning, cosa che non avrei nemmeno mai considerato se non avessi “fallito” nel mio intento di andare a lavorare in finanza.\nCome fare per diventare una AI Engineer? Consiglierei sicuramente una laurea in ambito STEM ma fidatevi non è nemmeno fondamentale.\n Fondamentale è sicuramente tanta passione nella programmazione, lo studio della matematica di base degli algoritmi di Machine Learning per poterli governare al meglio, tanta voglia di mettere le mani dentro i progetti, dentro il codice, dentro le tecnologie.\nSicuramente seguire dei corsi e prendere certificazioni rende tutto più lineare e pulito, permettono di apprendere bene i concetti, le tecniche ed i tool.\nIo ho iniziato a lavorare nell’AI grazie ad un Master di II livello in Big Data e Data Science fatto all’università Ingegneria Informatica di Perugia. Consiglio comunque di seguire newsletter, di leggere blog e novità sui principali canali di divulgazione.\nParlando di successi, qual è il tuo prossimo obiettivo? Quale ruolo vorresti ricoprire entro i prossimi 3 anni? Domanda la cui risposta è difficile, perché è difficile immaginare cosa sarà del mio mondo (l’AI) tra 3 anni.\nPotrebbe anche non esistere più! Scherzo 😂 Avendo iniziato a lavorare in questo ambito relativamente presto per gli standard italiani – nel 2017 -, mi trovo ora ad essere tra le persone che “da più tempo” lavorano nel settore e a rivestire ruoli e mansioni di responsabilità.\n Probabilmente tra 3 anni vorrò rivestire il ruolo che ho ora ma con più consapevolezza e maggiore maturità. ​\n Conosci il tema gender gap in ambito STEM? Se sì, come fare per superarlo? Certamente sì, è un tema particolarmente sentito negli ultimi anni e ci sono molte iniziative e community volte a sensibilizzare il gender in minoranza nell’ambito STEM, che è quello femminile. Per me, la divulgazione e la comunicazione è la soluzione a questo gap.\n Bisogna raccontare e far capire che non esistono lavori femminili e lavori maschili e che, soprattutto, i lavori in settori STEM non sono lavori da uomini! Da un paio di anno sono Role Model in diverse associazioni con focus diversity, inclusion ed equality.\n Tante volte ho parlato in classi di liceo della mia esperienza e della mia carriera e sono del tutto intenzionata a continuare a farlo: ogni curiosità o interesse suscitato nella mente di una ragazza per le cose che io faccio o che vedo fare è per me una vittoria!\nContatti Profilo LinkedIn ", "url": "https:\/\/theredcode.it\/interviste\/ai-engineer\/" }, "https:\/\/theredcode.it\/docker\/docker-desktop-per-linux\/": { "title": "Docker Desktop per Linux", "tags": ["docker",], "content": "Dopo diverso tempo che gli utenti Linux chiedevano una versione Desktop che fosse adatta ai propri sistemi operativi, il team Docker ha finalmente pubblicato diverse versioni di Docker Desktop per Linux.\n In questo articolo, vediamo una breve panoramica di come si installa, del suo funzionamento e quali funzionalità abbiamo a disposizione.\n Docker Desktop: cos\u0026rsquo;è  Docker Desktop è un\u0026rsquo;applicazione facile da installare per il tuo ambiente Mac o Windows (e da qualche giorno, anche su Linux) che ti consente di creare e condividere applicazioni e microservizi eseguibili tramite container.\n Gli sviluppatori possono utilizzare la Docker Dashboard per gestire visivamente tutte le risorse del container e stare tranquilli sapendo che questa applicazione ha configurato delle impostazioni predefinite sicure per il consumo delle risorse dell\u0026rsquo;hardware sottostante.\n Non solo, Docker Desktop ora include le estensioni Docker, che consentono agli sviluppatori di scatenare la propria creatività integrando strumenti di sviluppo aggiuntivi creati dai partner Docker o dalla community!\n Docker Desktop per Windows\n Docker Desktop per Linux\n Requisiti generali  Questi sono i requisiti ufficiali per i diversi ambienti Linux attualmente supportati; tuttavia, alcuni di questi sistemi richiedono un po\u0026rsquo; più di attenzione e dei pacchetti aggiuntivi che potrebbero dover essere installati.\n  Kernel a 64 bit; Supporto per la virtualizzazione KVM; QEMU versione 5.2 o successiva; systemd come sistema di init; Ambiente desktop Gnome o KDE. Almeno 4 GB di RAM.  Installazione  Ubuntu  Un ulteriore requisito in questo caso è di avere una versione a 64 bit di Ubuntu Jammy Jellyfish 22.04 (LTS) o Ubuntu Impish Indri 21.10.\n Adesso puoi scaricare il pacchetto .deb da questa pagina e installalo con il seguente comando:\n sudo apt-get update sudo apt-get install ./docker-desktop-\u0026lt;version\u0026gt;-\u0026lt;arch\u0026gt;.deb  Per avviare Docker Desktop per Linux, cerca \u0026ldquo;Docker Desktop\u0026rdquo; nel menu Applicazioni e aprilo. Questo avvia l\u0026rsquo;icona del menu che contiene la celebre balena e apre la Docker Dashboard, riportando lo stato di Docker Desktop.\n In alternativa, apri un terminale ed esegui:\n systemctl --user start docker-desktop  Fedora  Un ulteriore requisito in questo caso è di avere una versione Fedora 35 o 36.\n Inoltre, se hai un ambiente Gnome Desktop, devi anche installare le estensioni AppIndicator e KStatusNotifierItem di Gnome.\nPer gli ambienti non Gnome Desktop, gnome-terminal deve essere installato:\n sudo dnf install gnome-terminal  A questo punto, scarica il pacchetto .rpm da questa pagina e installalo con il seguente comando:\n sudo dnf install ./docker-desktop-\u0026lt;version\u0026gt;-\u0026lt;arch\u0026gt;.rpm  Per avviare Docker Desktop per Linux, cerca \u0026ldquo;Docker Desktop\u0026rdquo; nel menu Applicazioni e aprilo. Questo avvia l\u0026rsquo;icona del menu che contiene la celebre balena e apre la Docker Dashboard, riportando lo stato di Docker Desktop.\n In alternativa, apri un terminale ed esegui:\n systemctl --user start docker-desktop  Debian  Se hai un ambiente Gnome Desktop, devi anche installare le estensioni AppIndicator e KStatusNotifierItem di Gnome.\nPer gli ambienti non Gnome Desktop, gnome-terminal deve essere installato:\n sudo apt install gnome-terminal  A questo punto, scarica il pacchetto .deb da questa pagina e installalo con il seguente comando:\n sudo apt-get update sudo apt-get install ./docker-desktop-\u0026lt;version\u0026gt;-\u0026lt;arch\u0026gt;.deb  Per avviare Docker Desktop per Linux, cerca \u0026ldquo;Docker Desktop\u0026rdquo; nel menu Applicazioni e aprilo. Questo avvia l\u0026rsquo;icona del menu che contiene la celebre balena e apre la Docker Dashboard, riportando lo stato di Docker Desktop.\n In alternativa, apri un terminale ed esegui:\n systemctl --user start docker-desktop C\u0026rsquo;è anche un\u0026rsquo;ultima opzione, che riguarda i sistemi basati su Arch: in questo caso, è necessario lavorare con i codici sorgente perché Docker non ha un repository Arch a disposizione: per farlo, segui questa guida!\n Se vuoi scoprire come utilizzarlo, il team Docker ha messo a disposizione un manuale pronto all\u0026rsquo;uso per prenderci confidenza: lo trovi a questa pagina!\n  E tu, l\u0026rsquo;hai mai utilizzato? Lo proverai su Linux?\n  Risorse utili \u0026ldquo;Docker\u0026rdquo; di Serena Sensini @ Apogeo Annuncio ufficiale del team Docker - post ", "url": "https:\/\/theredcode.it\/docker\/docker-desktop-per-linux\/" }, "https:\/\/theredcode.it\/eventi\/vuejs-2022\/": { "title": "VueJS Day 2022 @ Verona", "tags": [], "content": "Quando: 18 Novembre 2022\nDove: Verona\nTitolo: VueJS Day 2022\nCodice sconto (da condividere!): 10% con community_THEREDCODE\nPartecipa all’evento\nOrganizzato da: Grusp\n", "url": "https:\/\/theredcode.it\/eventi\/vuejs-2022\/" }, "https:\/\/theredcode.it\/apache\/cose-un-test-plan\/": { "title": "Cos\u0027è un test plan in JMeter", "tags": ["jmeter","testing",], "content": " In questo articolo vediamo cos\u0026rsquo;è un test plan in JMeter, come configurarlo e come visualizzare e analizzare i risultati prodotti!\n JMeter è infatti un software in grado di eseguire test di carico, test funzionali e/o stress test che permettono di valutare le prestazioni di un\u0026rsquo;applicazione su diversi protocolli o tecnologie.\n Non tutti lo sanno, ma è stato un italiano a portare avanti questo progetto: Stefano Mazzocchi della Apache Software Foundation è stato infatti lo sviluppatore originale di JMeter.\n Lo scrisse principalmente per testare le prestazioni di Apache JServ, vecchio nome per Apache Tomcat, che nel 1998 lo scrisse come tool senza interfaccia grafica, mentre il progetto Apache lo ha poi riprogettato per migliorare la GUI e per nuove aggiungere funzionalità.\n  L\u0026rsquo;ultima versione attualmente disponibile è la 5.4.3: clicca qui per scaricarla!\n  Introduzione  Prima di entrare nei dettagli del funzionamento di un test plan con JMeter, comprendiamo innanzitutto alcuni gerghi associati al testing di qualsiasi applicazione.\n Con JMeter possiamo effettuare diverse tipologie di test, con diverse finalità. Analizziamo le differenze velocemente, in modo tale da essere sicuri di prepararci per bene al test da configurare!\n Il **test delle prestazioni (**o performance test) è un test che stabilisce le migliori aspettative di prestazioni possibili in una determinata configurazione dell\u0026rsquo;infrastruttura.\n Evidenzia anche all\u0026rsquo;inizio del processo di test se è necessario apportare modifiche prima che l\u0026rsquo;applicazione entri in produzione, modificando l\u0026rsquo;architettura o rivedendo le configurazioni attuali.\n Il test di carico (o load testing) è un tipo di test delle prestazioni che determina le prestazioni di un sistema, un prodotto software o un\u0026rsquo;applicazione software in condizioni di carico basate sull\u0026rsquo;utilizzo reale.\n Il test di carico è quindi un test che viene fondamentalmente utilizzato per testare il sistema sotto il carico massimo con cui è stato progettato per funzionare e verificare se \u0026ldquo;regge\u0026rdquo;.\n Infine, lo stress test è un tipo di test del software che verifica la stabilità e l\u0026rsquo;affidabilità del sistema e determina in particolare la sua robustezza e la relativa gestione degli errori in condizioni di carico estremamente pesanti.\n In altre parole, lo stress test è un modo che abbiamo per verificare se la nostra infrastruttura, sotto stress e quindi sotto sovraccarico di risorse, riesce a resistere.\n A questo punto vediamo in che modo JMeter ci permette di eseguire diverse tipologie di test come quelli appena menzionati sfruttando le risorse a disposizione, e cominciamo da qui: cos\u0026rsquo;è un test plan e come si configura!\n Cos\u0026rsquo;è un test plan  È l\u0026rsquo;oggetto con cui è possibile specificare le impostazioni generali del test che andremo a effettuare in modo da delineare i passaggi che desideri che JMeter esegua.\n Solitamente è composto da diversi componenti, che permettono di compiere diverse tipologie di attività: request HTTP o HTTPS, estrazione di informazioni da una response, misurazioni sui tempi di risposta, e molto altro.\n Configurare un test plan  Segui questi step per configurare un test plan con JMeter: tieni presente di default, quando apri JMeter nella sua versione GUI, ti mostra Test Plan vuoto, che puoi utilizzare per iniziare a lavorare.\n Aggiungi un Thread Group  Fai clic con il pulsante destro del mouse sul test plan e fai clic su Add-\u0026gt; Threads (Users) -\u0026gt; Thread Group.\n Creazione del gruppo di thread\n  Il Thread Group è il contenitore che contiene la logica di come simulare l\u0026rsquo;utente o il thread.\n  Per rendere di più l\u0026rsquo;idea, al suo interno andremo a specificare come e in cosa consiste il nostro test: quali sono le request da eseguire, se ci sono delle variabili che dovremo passargli, se mostrare degli output e come salvarli.\n Se ci clicchiamo sopra, noteremo che ci sono diversi campi che possiamo andare a riempire, e ognuno di questi ha un diverso scopo.\n Configurazione del Thread Group\n Parliamo delle impostazioni nel pannello Thread Group.\n Action to be taken after a sample error. Se si verifica un errore durante l\u0026rsquo;esecuzione del test, è possibile far sì che il test esegua una delle seguenti operazioni:\n  Continue: porta avanti l\u0026rsquo;esecuzione; Start Next Thread Loop: passa al prossimo thread group (se presente); Stop Thread: interrompi l\u0026rsquo;esecuzione del thread; Stop Test: interrompi il test; Stop Test Now: interrompi il test in maniera forzata.  Number of Threads  Rappresenta il numero di thread simulati durante il test, o anche di utenti virtuali. Questo vuol dire che se specifichiamo un valore pari a 100, JMeter simulerà 100 utenti che eseguono le operazioni descritte all\u0026rsquo;interno del thread group come fossero persone reali.\n Ramp-up period (seconds)  Quanto tempo occorre per raggiungere il numero di thread specificato. Ad esempio, se ho specificato 100 utenti virtuali (number of threads) e specifico 100 secondi come ramp-up, JMeter creerà un utente virtuale ogni secondo.\n Loop Count  Il numero di iterazioni di cui JMeter andrà ad eseguire il thread group. Questo vuol dire che se inserisco un valore pari a 10, andrà ad eseguire tutto quello che è descritto all\u0026rsquo;interno del thread group per 10 volte!\n Nella figura seguente viene mostrato un esempio.\n In questo caso, il significato di questo thread è che se ci sono 100 thread (ovvero il numero di thread), verranno suddivisi per il periodo di ramp-up : ogni secondo, un nuovo utente invierà una richiesta e lo script completo verrà eseguito due volte.\n Esempio di configurazione di un thread group\n Oltre alle proprietà viste prima, abbiamo anche altre configurazioni che è possibile fare all\u0026rsquo;interno del thread group: ad esempio, possiamo scegliere di simulare uno stesso utente all\u0026rsquo;interno del thread group, oppure di usarne diversi.\n In che modo? Quando selezioni la casella \u0026ldquo;Same user on each iteration\u0026rdquo; e utilizzi il componente di configurazione HTTP Cookie Manager, i cookie che ottieni nella prima risposta verranno utilizzati per le request seguenti.\n Se la casella di controllo \u0026ldquo;Same user on each iteration\u0026rdquo; è deselezionata, i cookie non verranno utilizzati per le richieste successive, così da simulare utenti diversi!\n Inoltre, possiamo definire i dettagli della durata temporale del test, se vogliamo che questo abbia una durata stabilita, e lo facciamo valorizzando i campi Duration e Startup delay, se vogliamo che il test inizi con un certo ritardo (in secondi) prima di ogni periodo di ramp-up.\n Creare una request HTTP  A questo punto facciamo clic con il pulsante destro del mouse sul thread group e quindi selezioniamo Add -\u0026gt; Sampler -\u0026gt; HTTP Request.\n Creazione della request HTTP\nL\u0026rsquo;oggetto HTTP Request fa parte di quelli che si chiamano campionatori (o Sampler): questi consentono a JMeter di inviare tipi specifici di richieste a un server e simulano una richiesta dell\u0026rsquo;utente per una pagina dal server di destinazione.\n Clicchiamo sull\u0026rsquo;oggetto appena aggiunto e proviamo a vederne il funzionamento con un esempio di una request GET a https://httpbin.org.\n Configurazione della request HTTP\n Come tutti gli oggetti presenti in JMeter, abbiamo la possibilità di specificare un nome per quella risorsa, di modo che sia più parlando: una buona convenzione può essere quella di rinominare la request HTTP usando una sintassi del tipo: [GET-POST-PUT-ecc.]-[REQUEST].\n Abbiamo a disposizione anche una sezione per aggiungere dei commenti o una descrizione più parlando della nostra request in maniera testuale.\n Notiamo poi due pannelli, chiamati Basic e Advanced: nel primo, abbiamo la possibilità di configurare una request HTTP/S di base, specificando il protocollo, l\u0026rsquo;hostname o l\u0026rsquo;indirizzo IP, la porta e altre informazioni visibili nella figura precedente.\n In questo caso, è stato utilizzato il protocollo HTTPS per il sito https://httpbin.org, il quale utilizza la porta 443 (porta HTTPS predefinita, quindi può essere omessa).\n Andiamo ad eseguire una semplice GET, ossia una richiesta che ci permette di ottenere la pagina principale del sito, dal momento che come path specifichiamo semplicemente \u0026ldquo;/\u0026rdquo;.\n Nella sezione sottostante abbiamo anche la possibilità di aggiungere parametri, un body o anche dei file, proprio come avverrebbe anche utilizzando un altro tool come Postman o il browser.\n Aggiungere un listener  Per mostrare l\u0026rsquo;esecuzione del nostro test plan, possiamo andare ad aggiungere un componente chiamato listener.\n Quando eseguiamo un test plan, la parte più importante consiste nell\u0026rsquo;analizzare le risposte del server in varie forme e quindi analizzare i dati forniti in output.\n  I Listener forniscono una rappresentazione grafica dei dati raccolti da JMeter su quei casi di test descritti all\u0026rsquo;interno del thread o del test plan.\n  Questo facilita l\u0026rsquo;utente nella visualizzazione dei risultati prodotti grazie ad una rappresentazione tramite tabelle, grafici, XML o testo semplice.\nI listener possono essere aggiunti in qualsiasi punto del test, anche direttamente nel test plan come risorsa globale per uno o più thread.\n Un listener raccoglierà solo dati dagli elementi al suo livello o al di sopra, e non da quelli che seguono. Questo vuol dire che se un listener viene aggiunto allo script come elemento figlio, mostrerà solo i dati relativi al suo genitore.\n Se un listener viene aggiunto in un thread group di un test plan che ne ha diversi, quel listener visualizzerà i dati di tutte le risorse che appartengono a quel solo thread group.\n Proviamo ad esempio ad utilizzare View Results Tree per vedere i risultati dopo aver eseguito la nostra richiesta al sito di httpbin.\n Facciamo quindi clic con il pulsante destro del mouse sul thread group e quindi selezioniamo Add -\u0026gt; Listener -\u0026gt;View Results Tree.\n Listener View Results Tree\n A questo punto, possiamo andare ad eseguire il nostro primo test plan: clicchiamo sul tasto verde in alto e procediamo!\n  Esempio di visualizzazione dei risultati\n I listener consentono di vedere i risultati e le richieste eseguite con una serie di informazioni molto importanti: intanto, notiamo come la request HTTP sia andata a buon fine grazie al simbolo di colore verde che ne indica il successo.\n Se vi clicchiamo sopra, vedremo il dettaglio dei dati raccolti: oltre alle informazioni sulla request, come il codice HTTP di risposta, il messaggio e il tipo di content-type, abbiamo la possibilità di vedere la request (tramite il pannello request) e la risposta (tramite il pannello response).\n Esempio di request del listener View Results Tree\n All\u0026rsquo;interno della request possiamo, ad esempio, vedere il body della request e anche gli headers; questo ci torna particolamente utile se vogliamo controllare se eventuali headers o cookie siano stati impostati correttamente.\n Esempio di response del listener View Results Tree\n Nella sezione response possiamo vedere la risposta restituita, che in questo caso è una pagina HTML. Potremmo utilizzare lo stesso test plan anche per testare delle API che restituiscono dei JSON come risposta!\n Tieni presente JMeter memorizza tutte le request e le response ricevute.\n  Se l\u0026rsquo;articolo ti è piaciuto o ti è tornato utile, condividi o lascia un commento!\n ", "url": "https:\/\/theredcode.it\/apache\/cose-un-test-plan\/" }, "https:\/\/theredcode.it\/tags\/machine-learning\/": { "title": "machine-learning", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/tags\/machine-learning\/" }, "https:\/\/theredcode.it\/nlp\/nlp-e-machine-learning\/": { "title": "NLP e Machine Learning", "tags": ["intelligenza-artificiale","machine-learning","nlp",], "content": "Nell\u0026rsquo;analisi del linguaggio naturale vengono impiegati di frequente diversi algoritmi di machine learning. Quali sono quelli più comuni? Quali le differenze e gli utilizzi?\n Vediamo in questo articolo una breve introduzione al NLP e Machine Learning!\n Algoritmi di machine learning  Gli algoritmi di machine learning normalmente appartengono a tre grandi \u0026ldquo;famiglie\u0026rdquo;: esistono quelli che eseguono attività di classificazione, di regressione e infine di clustering.\n Quelli maggiormente utilizzati per l\u0026rsquo;analisi dei testi sono ad esempio le reti neurali, gli alberi decisionali, le macchine a vettori di supporto, K-Means e K-NN.\n Ognuno di questi appartiene ad una famiglia diversa: K-Means, per esempio, è un algoritmo di clustering, quindi permettono di raggruppare diversi dati che nono stati precedentemente \u0026ldquo;etichettati\u0026rdquo;.\n Questa tipologia di algoritmo permette di definire delle strategie di marketing che analizzino un certo target di clienti e la sua evoluzione, come avviene all\u0026rsquo;interno del processo di segmentazione.\n K-NN permette invece di calcolare la similarità e quindi la distanza tra due vettori, come possono essere due array di testi, e appartiene agli algoritmi di classificazione.\n I metodi di classificazione hanno come scopo quello di etichettare e quindi assegnare una o più parole chiave ad un documento, come avviene in un filtro spam.\n In ambito data mining e text mining ci sono diverse attività che possiamo assolvere con l\u0026rsquo;ausilio di algoritmi di machine learning: ad esempio, categorizzare dei testi, identificare un autore, identificare la lingua utilizzata nel testo o analizzare il sentiment.\n Ma qual è la differenza tra questi due campi?\n Text Mining vs Data Mining  Spesso si ha l\u0026rsquo;impressione che queste due tipologie di attività coincidano: la realtà è che il primo spesso opera con dati non strutturati, che quindi richiedono degli step in più non essendo elaborati, mentre il secondo si occupa di estrarre i dati da diverse fonti.\n  Il data mining è invece il processo di ricerca di modelli ed estrazione di dati utili da grandi set di dati.\n  Questo campo è utilizzato per convertire dati grezzi in dati utili.\n Il data mining può essere estremamente utile per migliorare le strategie di marketing di un\u0026rsquo;azienda poiché con l\u0026rsquo;aiuto di dati strutturati possiamo studiare i dati da diversi database e quindi ottenere idee e strategie che ci permettano di aumentare la produttività di un\u0026rsquo;azienda.\n Il text mining in particolare è un campo multi-disciplinare che coinvolge diverse branche e che porta a diverse tipologie di attività: ad esempio, al suo interno esistono delle macro-categorie come l\u0026rsquo;information retrieval, l\u0026rsquo;information extraction e soprattutto il natural language processing.\n  Il text mining è una branca del data mining e prevede quindi l\u0026rsquo;elaborazione dei dati da vari documenti di testo.\n  Attività dell\u0026rsquo;Information retrieval\n NLP e Machine Learning  Come visibile nella figura precedente, nell\u0026rsquo;ambito del text mining abbiamo la branca del natural language processing: le tecniche utilizzate sono normalmente analisi lessicale, sintattica e semantica.\n In generale, questa tecnica, si focalizza sul concetto di bag of words: un testo o un documento viene analizzato sulal base delle parole che lo compongono, individuando parole chiave che ne permettano un\u0026rsquo;analisi con diversi scopi.\n I dati utilizzati in questo ambito hanno le applicazioni più disparate: si passa dalla customer experience, fino all\u0026rsquo;ambito assicurativo, finanziario e di marketing.\n E quali dati vengono utilizzati per queste attività? I dati vengono estratti principalmente da blog, articoli, ma soprattutto commenti e recensioni su diverse tipologie di siti online, così come i questionari.\n Arriviamo però al cuore di questo articolo: come sfruttare NLP e machine learning per diverse tipologie di problemi: vediamo alcuni esempi pratici delle sfide alle quali un data scientist dovrà rispondere.\n Un problema comune è il raggruppamento di documenti simili tra loro, che è traducibile come un\u0026rsquo;attività di clustering: in questo caso, un algoritmo come k-means è sicuramente indicato.\n Nel caso in cui sia necessario etichettare dei documenti in base a dei termini specifici, oppure analizzare il sentiment di un documento o ridurne la dimensione, abbiamo a che fare con problemi di classificazione.\n Per questa tipologia di attività, possiamo utilizzare diversi algoritmi come Naive-Bayes, alberi di decisione, reti neurali o anche la regressione.\n E se dovessimo scoprire l\u0026rsquo;argomento principale di una raccolta di documenti?\n In questo caso, si tratta di topic model e un algoritmo che possiamo usare è LDA, ossia un algoritmo che usa il modello bayesiano per individuare il contesto di cun documento, molto utilizzato in ambito SEO, o anche dei dizionari ad hoc per la lingua utilizzata.\n Non meno importante, nell\u0026rsquo;ambito dell\u0026rsquo;analisi dei link per il web mining, abbiamo un problema molto simile alla social network analysis, perché permette di analizzare e individuare relazioni tra diversi oggetti in un gruppo sociale.\n In questo caso, abbiamo moltissimi algoritmi diversi a seconda dello scopo specifico: tra i più famosi c\u0026rsquo;è sicuramente PageRank, che assegna un peso ad ogni elemento presento in un insieme di documenti collegati.\n Da non sottovalutare gli alberi di decisione, che rappresenta uno strumento perfetto trattandosi di un processo gerarchico che ben rappresenta la rete che si crea grazie a link connessi tra loro.\n Altre opzioni sono sicuramente Naive-Bayes, macchine a vettori di supporto e reti neurali, tutti algoritmi che si prestano bene a dataset lineari e non così come lo sono i dati estratti con il web mining.\n  Se questo articolo ti è piaciuto, non dimenticare di condividerlo!\n  Risorse utili Analisi del linguaggio naturale con Python - Apogeo Editore  ", "url": "https:\/\/theredcode.it\/nlp\/nlp-e-machine-learning\/" }, "https:\/\/theredcode.it\/design-dev\/cose-il-framework-dsdm\/": { "title": "Cos\u0027è DSDM", "tags": ["agile","design","dsdm","ingegneria-del-software",], "content": "Nello scorso articolo abbiamo parlato del framework AgilePM rispetto ad altre metodologie e di quando è possibile adottarla.\n Abbiamo anche detto che AgilePM è un sottoinsieme del framework più comune DSDM: ma cos\u0026rsquo;è e come funziona?\n In questo articolo parliamo di cos\u0026rsquo;è DSDM, come funziona e quali sono i principi fondamentali su cui si basa.\n Cos\u0026rsquo;è  DSDM sta per Dynamic Systems Development Method ed è chiaramente una metodologia agile distribuita gratuitamente dal consorzio DSDM ai propri membri, fondato nel 1994.\n La metodologia DSDM è spesso rappresentata come un piccolo tempio: il valore maggiore da portare al business si ottiene se i progetti sono sempre allineati con gli obiettivi, con rilasci frequenti, con motivazione e con il potere decisionale che permetta di prendere decisioni sia dal punto di vista tecnico che gestionale.\n La sua filosofia si basa su quattro pilastri: Process, People, Products e Practices, che sono anche le colonne portanti del tempo; alla base, ci sono il senso comune e il pragmatismo, volti all\u0026rsquo;utilizzo di una conoscenza generica e non specifica e soprattutto all\u0026rsquo;essere pratici.\nCos\u0026rsquo;è DSDM e come rappresentarlo con un tempio\n Il processo si riferisce al lifecycle e rappresenta le fasi del metodo -che è comunque rigoroso- in cui ognuna delle sei fasi ha dei nomi ben precisi. Il processo può essere adattato anche in situazioni più complesse, e ci sono fasi che possono ripetersi e che possono semplificarsi.\n Non si tratta solo del processo in sé, ma anche di tutto quello che c\u0026rsquo;è prima e dopo (detto anche pre-project e post-project).\n  Se dovessimo quindi riferirci a questo principio, utilizzeremmo l\u0026rsquo;avverbio quando: qual è la fase giusta per questa iterazione?\n (quasi) inutile dirlo: persone si riferisce al fatto che all\u0026rsquo;interno di un progetto agile ci sono diverse persone che appartengono a diversi team e quindi hanno diversi livelli di gestione e di competenze.\n  La domanda giusta in questo caso risponde all\u0026rsquo;avverbio chi: chi ha determinate responsabilità?\n Parlando di prodotti, questi non sono da intendersi come i deliverable del progetto, ma piuttosto rappresentano i documenti e sono gli strumenti gestionali e quindi prodotti di management.\n  Se abbiamo quindi bisogno di informazioni e di risultati concreti, e vogliamo rispondere al cosa, facciamo riferimento ai prodotti.\n  L\u0026rsquo;ultimo pilastro sono le pratiche nel senso di tecniche che abbiamo a disposizione per gestire il nostro progetto secondo il framework AgilePM, e queste sono in totale cinque.\n La domanda da porsi in questo caso usa l\u0026rsquo;avverbio come: come gestisco questa fase del processo? Quale pratica adottare?\nPiccolo spoiler: la prima di queste tecniche è MoSCoW ed è la pratica basata sul concetto di priorità; un\u0026rsquo;altra è la TimeBoxing, ossia andare a ritagliare il progetti in tanti piccoli intervalli temporali, mai troppo corta o troppo lunga.\n Poi c\u0026rsquo;è Modelling (o modelizzazione) che consiste nell\u0026rsquo;usare dei modelli per fornire una visualizzazione più chiara del progetto; c\u0026rsquo;è l\u0026rsquo;Iterative Development e la cosa interessante è che questa si trovi all\u0026rsquo;interno di una metodologia come AgilePM anche quando non stiamo realmente sviluppando codice.\n Infine c\u0026rsquo;è la Facilitated Workshop, ossia uno o più incontri per trattare gli aspetti più importanti e più formali del progetto che necessitano della presenza di un mediatore che aiuta a coordinare le attività che che faccia da moderatore.\nVariabili di un progetto: come gestirle  Tutta la filosofia che c\u0026rsquo;è dietro a queste metodologie necessita di una visione comune degli obiettivi, di collaborazione, e soprattutto di accettare che il cambiamento è inevitabile e che tutte le persone coinvoltenel progetto sono necessarie nel processo decisionale.\n Rispetto all\u0026rsquo;approccio tradizionale, dove il cliente parte fin dall\u0026rsquo;inizio qual è lo scope del progetto e i relativi dettagli, requisiti, deliverable e funzionalità, nell\u0026rsquo;approccio DSDM si prendono la qualità, il tempo e i costi e si trasformano in costanti.\n Come visibile nella figura seguente, nell\u0026rsquo;approccio DSDM la qualità è il cuore pulsante di un progetto: il tempo e il costo sono ad essa strettamente legati e sono costanti fisse, mentre le funzionalità sono le vere variabili, che evolvono e cambiano con il tempo.\n Nell\u0026rsquo;approccio tradizionale, abbiamo l\u0026rsquo;inverso: tutto ciò che quindi riguarda le specifiche, le funzionalità e via dicendo sono tutti aspetti che variano e quindi sono quelle che guidano i progetto: le restanti proprietà sono variabili, e dipendono da moltissimi fattori.\n  Differenze tra approccio tradizionale e DSDM\n Ricordiamo un aspetto importantissimo: per la buona riuscita di un progetto è fondamentale che tutti concordino sul metodo utilizzato e che lo conoscano nel dettaglio, ed è fondamentale che i requisiti a livello macroscopico siano definiti.\n Ma quali basi utilizza DSDM e quali sono i suoi principi fondamentali?\n Principi DSDM  Questo approccio si basa su 8 principi ben distinti e riportati nella figura seguente: il primo gruppo (a sinistra) servono a capire cosa dovrò andare a consegnare, mentre gli altri sulla destra rappresentano il come dovrò andare a consegnare.\n Principi DSDM\n  Questi principi devono essere sempre validi, perché sono raccomandazioni e quindi vanno bene per qualsiasi progetto e qualsiasi circostanza!\n Ma partiamo dall\u0026rsquo;inizio: il primo principio si basa sul fatto che la ownership è sempre del cliente, quindi spetta a lui decidere quali sono o meno le esigenze, ed è l\u0026rsquo;aspetto su cui dovremo concentrarci maggiornamente.\nIl secondo principio dice che bisogna sempre consegnare in tempo e quindi ogni volta che pensiamo ad una scadenza, quella dev\u0026rsquo;essere rispettata e soprattutto rispettabile; questo vale non solo per la scadenza finale del progetto, ma anche quella dei singoli step del progetto.\nNel terzo principio di parla di collaborazione: questa è fondamentale per la buona riuscita del progetto e riguarda la collaborazione tra tutti gli attori del processo, non solo tra i singoli team.\nL\u0026rsquo;ultimo principio a sinistra, e quindi il quarto, è molto chiaro: qualsiasi sia l\u0026rsquo;obiettivo del progetto o della singola fase, questa dovrà avere la miglior qualità possibile.\nPassiamo ai principi posti sulla destra e partiamo con il quinto: in questo caso si parla di come lavorare per fasi incrementali.\n Ogni progetto DSDM possiede delle fasi iniziali che richiedono come primo step una fase di fattibilità del prodotto; dopodiché vengono definite le fasi (o incrementi) del progetto che portano al rilascio finale.\n L\u0026rsquo;avvio del progetto rappresenta la prima foundation e, ogni volta che stiamo per cambiare incremento, si riparte dalla fase di foundation. Questo vuol dire ricontrollare nei documenti iniziali di fattibilità l\u0026rsquo;andamento del progetto e foundation rappresenta proprio una fase su cui ripasso più volte (questa fase sarà chiarita nei prossimi articoli!).\n Nello sviluppo iterativo -sesto principio- si ha un modo di lavorare per cui si cerca di portare avanti un\u0026rsquo;attività per piccoli cicli, raccogliendo più feedback possibili e facendo i giusti test (anche delle review o dei controlli formali o informali sono certamente utili allo scopo).\nGli ultimi due principi descrivono il tipo di interazione continua che ci dev\u0026rsquo;essere con il cliente, che consiste in una comunicazione costante e chiara -settimo principio.\n Infine, nell\u0026rsquo;ultimo principio e quindi l\u0026rsquo;ottavo, invece di seguire un approccio comando-controllo, in cui si gestisce e comanda dall\u0026rsquo;alto, si cerca di non fare pressione sulle persone coinvolte né di usare delle metriche per misurare le performance delle stesse, favorendo un controllo ove necessario.\n Ad esempio, il team che sviluppa si dovrebbe incontrare ogni giorno (attraverso degli stand-up meeting, ad esempio) e raccontare quello che hanno fatto ogni giorno; qui il Project Manager non deve assumere il controllo, ma può piuttosto partecipare solo come osservatore, proprio perché questi incontri sono fatti dal team di sviluppo per il team di sviluppo.\n Questo principio serve a ricordare che l\u0026rsquo;utilità del PM è nel gestire situazioni in cui ci sono problemi o contrasti che devono essere sanati e/o mediati.\n  Se sei curioso/a di sapere come lavora un Project Manager, leggi qui l\u0026rsquo;intervista!\n I principi appena descritti sono necessari al mindset di tutto il team, e quindi non sono solo per il PM, ma per tutti gli attori del progetto.\n Ogni membro del team deve essere incoraggiato a parlare e il PM per questo ha, per esempio, un questionario a disposizione che permette di capire se le persone che fanno parte del team hanno compreso tutto e sanno applicare questi principi.\nChiavi del successo  Nella scorsa puntata abbiamo già accennato al fatto che questo metodo non deve e non può essere adottato in qualsiasi progetto: infatti, un buon PM è tenuto a controllare i rischi di un progetto ed eventualmente cambiare \u0026ldquo;rotta\u0026rdquo; o framework qualora ci siano delle incompatibilità con il progetto.\n  Ma quali sono le chiavi del successo di questo metodo?\n  Il primo è che se questo approccio, ove adottato, vale per tutti e che viene concordato da tutti, questo garantisce la buona riuscita di un progetto, che ha quindi come base una \u0026ldquo;lingua\u0026rdquo; comune su cui sono tutti d\u0026rsquo;accordo.\n Il secondo fattore è stabilire e coinvolgere le giuste persone, scegliendole per motivazione, stabilità e competenze condivise: un team solido è fondamentale per qualsiasi progetto.\n Altro fattore è avere un business coinvolto attivamente e durante tutto il processo: il cliente dev\u0026rsquo;essere partecipe durante l\u0026rsquo;intero processo e fornire quanti più feedback possibili, affinché il risultato sia quello sperato e desiderato.\n In questo senso, lo sviluppo iterativo e un delivery incrementale con testing continuo sono ancor più di sostegno, perché consentono dei piccoli rilasci che mostrano le singole fasi di lavoro e quindi dei prodotti parziali della soluzione finale che possono essere lavorati ed elaborati.\n Ultimo, ma non ultimo, la trasparenza: più si riesce ad essere chiari e più la comunicazione è trasparente, anche attraverso l\u0026rsquo;utilizzo di strumenti di condivisione, più l\u0026rsquo;intero processo è efficace e trasparente.\n  Nella prossima puntata, vediamo i ruoli e le responsabilità delle persone all\u0026rsquo;interno di un progetto DSDM!\n  Risorse utili \u0026ldquo;DevOps\u0026rdquo; di Fabio Mora - Apogeo Editore Corso di Metodologia AgilePM I principi di DSDM e AgilePM ", "url": "https:\/\/theredcode.it\/design-dev\/cose-il-framework-dsdm\/" }, "https:\/\/theredcode.it\/tags\/aws\/": { "title": "aws", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/tags\/aws\/" }, "https:\/\/theredcode.it\/categories\/aws\/": { "title": "aws", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/categories\/aws\/" }, "https:\/\/theredcode.it\/aws\/creare-un-sito-wordpress-con-aws-lightsail\/": { "title": "Creare un sito Wordpress con AWS Lightsail", "tags": ["aws","hosting","lightsail","wordpress",], "content": "Hai bisogno di creare un sito, ma non vuoi perdere tempo a configurare l\u0026rsquo;hosting o spendere una fortuna?\n Da qualche tempo, AWS ha messo a disposizione un servizio perfetto per le esigenze più disparate: hosting di un sito con Drupal? Blog con Django? Stack LAMP pronto all\u0026rsquo;uso? Tutto pronto con AWS Lightsail!\n In questo articolo, vediamo come creare un sito Wordpress con AWS Lightsail!\n AWS Lightsail: cos\u0026rsquo;è  Questo servizio nasce dall\u0026rsquo;esigenza di creare e avviare applicazioni Web super semplici, sfruttando degli stack tecnologici molto comuni: tra i citati ci sono LAMP, Nginx, MEAN e Node.js, o anche diversi CMS come Wordpress, Joomla o Drupal, che ti permettono di mettere online il tuo sito rapidamente e soprattutto facilmente.\n Non solo: se hai bisogno di creare degli ambienti di test senza la necessità di mettere in piedi delle macchine virtuali e quindi sovraccaricare a livello di risorse il tuo PC, hai la possibilità di scegliere diverse istanze che prevedono sistemi operativi Unix-like tra i più comuni.\n Avrai così degli ambienti di test in un tempo (quasi) zero dove puoi provare le tue nuove idee, senza correre alcun rischio!\n E il costo? Il costo rimane bassissimo, ma lo vedremo a breve!\n Amazon Lightsail\n Procedimento  Login alla console AWS  Per poter usufruire dei servizi AWS è necessario registrarsi: per farlo, puoi cliccare su questo link e seguire la procedura guidata, che ti permetterà di registrarti tramite il tuo indirizzo e-mail e usufruire subito dei servizi di AWS. Inoltre, per il primo anno (e non solo) è possibile avere a disposizione diversi servizi in forma totalmente gratuita: qui trovi tutti quelli che rientrano in questa iniziativa!\n Pagina di registrazione ad AWS\n Configurazione dell\u0026rsquo;istanza  Una volta loggati, potremo usufruire dei diversi servizi che Amazon ci mette a disposizione, a partire da AWS Lightsail: cerchiamo quindi questo servizio nella barra di ricerca e ci clicchiamo, come mostrato in figura:\n Servizio Amazon Lightsail\n Una volta dentro il servizio, ci verrà mostrata la pagina principale di Lightsail:\n Lightsail funziona sulla base del concetto di istanza: questi sono delle macchine con delle librerie, pacchetti e sistemi operativi già pronti all\u0026rsquo;uso che possiamo avviare nel giro di meno di un minuto.\n Panoramica di Lightsail\n Per avviare la nostra prima istanza, clicchiamo su \u0026ldquo;Create Instance\u0026rdquo; e seguiamo step-by-step la guida: il primo passo è quello di scegliere la zona di disponibilità e la tipologia di sistema operativo che vogliamo utilizzi l\u0026rsquo;istanza.\n In questo caso, scegliamo Parigi o Francoforte e come OS scegliamo Linux/Unix:\n Creazione di un\u0026rsquo;istanza su Lightsail\n Le blueprint non sono altro che dei servizi AWS testati e validati direttamente dal team di Amazon che utilizzano applicazioni di terze parti e che rappresentano delle istanze pronte all\u0026rsquo;uso con i servizi più comuni.\n Siccome noi vogliamo creare un sito Wordpress, andiamo a selezionare la prima voce che avvierà un\u0026rsquo;istanza con Wordpress versione 5.9.2-3.\n Tra le opzioni, vediamo che è anche possibile creare un Wordpress multi-sito, in pochi e semplici click! ;)\n  Scelta di una blueprint su Wordpress con AWS Lightsail\nA questo punto, è tempo di scegliere la dimensione dell\u0026rsquo;istanza: come vediamo nella figura seguente, sono presenti diversi sizing che possiamo utilizzare.\n Le prime tre istanze hanno dei costi molto bassi e le risorse che mettono a disposizione sono più che sufficienti per un sito Wordpress base o un blog: con il taglio più piccolo abbiamo infatti inclusi anche 20GB di storage in SSD e 1TB di trasferimento dati.\nScelta del tipo di istanza su AWS Lightsail\n In più, i primi 3 mesi sono totalmente gratis: questo vuol dire che possiamo avviare un\u0026rsquo;istanza, provarla e se non ci piace, buttarla via!\n Procediamo quindi con la configurazione: ci sono diverse opzioni che ci permettono di rendere resiliente il nostro ambiente, ma per il momento possiamo lasciare le impostazioni di default.\n L\u0026rsquo;ultimo step prevede la scelta di un nome per l\u0026rsquo;istanza: diamo un nome significativo alla nostra istanza, che può essere, ad esempio, il nome del blog o del sito che andremo a realizzare:\n Configurazione dell\u0026rsquo;istanza di AWS Lightsail\nClicchiamo su \u0026ldquo;Create instance\u0026rdquo; e attendiamo meno di un minuto. Una volta pronta, l\u0026rsquo;istanza appena avviata sarà visibile nella home:\n Riepilogo delle istanze attive su AWS Lightsail\n Per collegarci, sarà sufficiente utilizzare l\u0026rsquo;indirizzo IP assegnato e vedremo la pagina di benvenuto di Wordpress!\n Pagina iniziale di Wordpress con AWS Lightsail\n Per recuperare anche la password dell\u0026rsquo;utente user, è sufficiente accedere all\u0026rsquo;istanza ed eseguire il seguente comando:\n cat $HOME/bitnami_application_password   Nota: il sito sarà esposto in HTTP. Per installare i certificati sull\u0026rsquo;istanza, accedervi tramite un qualsiasi client SSH (ad esempio, tramite PuttY) ed eseguire il comando sudo /opt/bitnami/bncert-tool. Inserire le informazioni richieste, come il dominio e le redirezioni da HTTP a HTTPS_, et voilà_!\n  Tip   Migrazione di un sito su hosting qualsiasi a Lightsail  Come fare? Semplicissimo!\n Dopo aver seguito tutti gli step precedenti, andiamo ad installare il plugin di Wordpress All-in-One WP Migration sia sull\u0026rsquo;istanza attuale, sia sul sito sorgente: questo ci permetterà di esportare e importare il sito con pochi semplici click.\n In particolare, sarà sufficiente fare l\u0026rsquo;export con All-in-One-Migration e poi fare l\u0026rsquo;import sul Wordpress di cui abbiamo creato l\u0026rsquo;istanza in precedenza.\n Se la dimensione del tuo backup da importare supera gli 80MB, niente paura: sarà sufficiente modificare due file all\u0026rsquo;interno dell\u0026rsquo;istanza di arrivo di Lightsail come di seguito, e dovremo poi riavviare i servizi per far sì che le configurazioni vengano applicate correttamente.\n vi /opt/bitnami/php/etc/php.ini # set dei valori di upload che sono attualmente a 80M al valore necessario (esempio: 8G) vi /bitnami/wordpress/wp-config.php +++ @ini_set( \u0026#39;upload_max_filesize\u0026#39; , \u0026#39;8000M\u0026#39; ); @ini_set( \u0026#39;post_max_size\u0026#39;, \u0026#39;8008M\u0026#39;); @ini_set( \u0026#39;memory_limit\u0026#39;, \u0026#39;8000M\u0026#39; ); @ini_set( \u0026#39;max_execution_time\u0026#39;, \u0026#39;3000\u0026#39; ); @ini_set( \u0026#39;max_input_time\u0026#39;, \u0026#39;3000\u0026#39; ); sudo /opt/bitnami/ctlscript.sh status sudo /opt/bitnami/ctlscript.sh restart2  Risorse utili Documentazione Lightsail con Wordpress (inglese)  ", "url": "https:\/\/theredcode.it\/aws\/creare-un-sito-wordpress-con-aws-lightsail\/" }, "https:\/\/theredcode.it\/tags\/hosting\/": { "title": "hosting", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/tags\/hosting\/" }, "https:\/\/theredcode.it\/tags\/lightsail\/": { "title": "lightsail", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/tags\/lightsail\/" }, "https:\/\/theredcode.it\/tags\/wordpress\/": { "title": "wordpress", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/tags\/wordpress\/" }, "https:\/\/theredcode.it\/tags\/agilepm\/": { "title": "agilepm", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/tags\/agilepm\/" }, "https:\/\/theredcode.it\/tags\/framework\/": { "title": "framework", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/tags\/framework\/" }, "https:\/\/theredcode.it\/design-dev\/introduzione-al-framework-agilepm\/": { "title": "Introduzione al framework AgilePM", "tags": ["agile","agilepm","devops","dsdm","framework","ingegneria-del-software",], "content": "La metodologia AgilePM fornisce delle linee guida dettagliate su come gestire progetti agili seguendo un approccio strutturato e preciso, illustrando i principi, la filosofia, il ciclo di vita, i processi, le tecniche e le pratiche alla base del metodo Agile.\n In questa breve serie vedremo quali sono i concetti cardine di questa metodologia e quali sono le basi necessarie per comprendere al meglio questa metodologia, parlando degli strumenti, dei ruoli, delle responsabilità e dei controlli necessari al successo dei progetti, comprendendone le modalità di applicazione, i benefici e i punti di attenzione.\n Partiamo con l\u0026rsquo;introduzione al framework AgilePM!\n DSDM e AgilePM Somiglianze e differenze  Molto spesso vi capiterà di leggere DSDM accanto ad AgilePM: DSDM sta per Dynamic Systems Development Method ed è chiaramente una metodologia agile distribuita gratuitamente dal consorzio DSDM ai propri membri, fondato nel 1994.\n C\u0026rsquo;è una differenza fondamentale tra DSDM e gli altri metodi Agile di prima generazione: questi ultimi sono stati tutti progettati per piccoli progetti con un team, mentre DSDM è stato originariamente progettato per supportare progetti più grandi con più team.\n Per sua natura, DSDM è più sofisticato di altri metodi di prima generazione; infatti DSDM è anche molto ben strutturato e chiaro, ispirato a PRINCE2® e ad altri metodi consolidati che sono stati creati prima di loro. In altre parole, non ha cercato di reinventare la ruota, ma piuttosto di mettere in piedi delle basi solide e definite.\n DSDM si basa completamente su una filosofia ben formata e su un insieme di principi. Questi hanno avuto un impatto significativo sulle metodologie agili, e in particolare sui principi alla base del Manifesto Agile.\n DSDM costruisce una metodologia completa attorno alla sua filosofia. Questa metodologia prevede un processo con più fasi che possono essere organizzate in modi diversi per creare vari tipi di ciclo di vita.\n  Non a caso, la metodologia AgilePM nasce come un sottoinsieme del framework DSDM Agile Project. Quando parliamo di metodi agili, infatti, parliamo non di una metodologia, ma di uno stile di lavoro.\n  In questo, Agile è diverso da Scrum in quanto rappresenta un insieme di metodi e di caratteristiche comuni a tutti i metodi cosiddetti agili, che sono composti dalla necessità di creare un ambiente flessibile e lavorare fianco a fianco con il cliente dall\u0026rsquo;inizio alla fine di un progetto.\n Questo significa che ci sono feedback continui, c\u0026rsquo;è spesso un confronto diretto, il quale dovrebbe risolvere i problemi giorno dopo giorno.\n Significa anche rimandare le decisioni di dettaglio all\u0026rsquo;ultimo, perché non bisogna paralizzarsi sull\u0026rsquo;analisi di progetto all\u0026rsquo;inizio, ma concentrare le energie su un\u0026rsquo;analisi di alto livello per poter cominciare a lavorare subito e nel frattempo definire le specifiche man mano che si procede.\n Un concetto molto importante è far capire infatti al cliente che in un progetto Agile il ritorno dell\u0026rsquo;investimento non è immediato, ma si tratta di un passaggio graduale.\n  Ma in che modo tutti questi mondi e metodologie funzionano?\n  Metodi agili  Ognuna di queste metodologie copre una o più aree di competenza, andando a lavorare e definire diversi ruoli e diversi metodi di gestione: nella seguente figura, vediamo come AgilePM si occupi non solo di seguire lo sviluppo di un prodotto, ma anche di gestire un progetto e parzialmente un programma, inteso come portafoglio di progetti.\n DevOps e Scrum invece, sono metodologie che forniscono gli strumenti di lavoro per il rilascio di un prodotto e che danno indicazioni volte alla gestione di un progetto, soprattutto per quanto riguarda il lavoro in team e la comunicazione con il cliente finale.\n Se volessimo definire con ancora più chiarezza, framework come Scrum sono considerati di product development, mentre AgilePM o Prince2 sono metodi di project management.\n In questo senso, i due metodi non si escludono e spesso cooperano insieme: Scrum può dare delle indicazioni utili per gestire un progetto e permettere una flessibilità tale da adattarsi al cambiamento dello sviluppo di un prodotto, introducendo il concetto di progetto.\n AgilePM è perfetto per organizzare la gestione di un progetto e definirne le fondamenta.\n Scopi e campi di azione dei metodi agili\n Manifesto Agile  Il manifesto dello sviluppo software e rappresenta un documento a cui tutti i metodi agili fanno riferimento. I metodi sono 12 e tutte le persone coinvolte in un progetto agile devono rispettare questo manifesto.\n Principi del Manifesto Agile\n  Si tratta di un documento che nasce durante una vacanza in un resort sciistico nello Utah: le persone che ci hanno lavorato -17, per la precisione- avevano utilizzato diverse metodologie e volevano trovare un framework che fosse un\u0026rsquo;alternativa a quelli dove sono i documenti a governare il processo di sviluppo del software.\n Riprendendo la figura in alto, possiamo vedere come l\u0026rsquo;essere agile richieda di tenere in considerazione le frasi a sinistra in rosso: un contratto ci dev\u0026rsquo;essere, così come un processo, ma devo preferire la comunicazione che abbia degli incontri di persona rispetto alle mail.\n Oppure, dobbiamo preferire delle soluzioni che funzionano piuttosto che un manuale utente breve piuttosto che uno di 2000 pagine (secondo punto).\n In un progetto agile, inoltre (terzo punto), non è pensabile di eseguire la maggior parte del lavoro ed effettuare solo alla fine una review con il cliente: ci dev\u0026rsquo;essere un processo continuo con un feedback costante.\n Essere sempre pronti all\u0026rsquo;evoluzione di un prodotto è fondamentale, ancor più di onorare il processo definito in maniera iniziale: per questa ragione spesso non si vanno a definire i dettagli di un progetto agile, ma si preferisce un approccio più macroscopico al processo e alla soluzione finale.\nAgilePM o Scrum? Ma mentre queste regole valgono per qualsiasi progetto che adotti uno stile agile, quale metodo scegliere e perché?\n Le domande da porsi sono diverse e bisogna pensare anche che non sempre è possibile gestire un progetto con un metodo agile, ma bisogna valutare punti come la cultura aziendale, il background, il contesto del progetto, e via dicendo.\n Se la necessità è quella di gestire l\u0026rsquo;intero ciclo di vita di un progetto, definendo le persone, i prodotti, i processi e i metodi, allora AgilePM può essere una risposta.\n Se invece si vuole dare il focus ad un prodotto che può evolvere rapidamente e che dev\u0026rsquo;essere \u0026ldquo;cucito\u0026rdquo; addosso al cliente, Scrum è un metodo agile perfetto allo scopo.\n  Nella prossima puntata, vediamo la filosofia dietro DSDM e in che modo ognuno di questi principi ci guida lungo il ciclo di vita di un progetto!\n  Risorse utili \u0026ldquo;DevOps\u0026rdquo; di Fabio Mora - Apogeo Editore Corso di Metodologia AgilePM I principi di DSDM e AgilePM ", "url": "https:\/\/theredcode.it\/design-dev\/introduzione-al-framework-agilepm\/" }, "https:\/\/theredcode.it\/ionic\/come-funziona-il-routing-in-ionic\/": { "title": "Come funziona il routing in Ionic 6", "tags": ["angular","ionic-5","ionic-6","routing",], "content": " Una parte fondamentale dello sviluppo di app Ionic è configurare il routing e garantire una navigazione fluida tra le pagine.\n In questo articolo andiamo ad analizzare le differenze e diversi esempi di come sfruttare il routing in Ionic!\n Cos\u0026rsquo;è  Per spiegarne il funzionamento, facciamo riferimento agli strumenti messi a disposizione da Angular come l’oggetto Router, anche se molto dipende dalla tecnologia che usiamo insieme a Ionic.\n Angular fornisce il modulo RouterModule che contiene tutti gli strumenti di cui avremo bisogno per configurare la nostra applicazione in modo tale da mostrare una diversa view a seconda dell\u0026rsquo;indirizzo digitato nella barra del browser.\n Come funziona  Prima di continuare con la spiegazione, apriamo però un momento il file index.html presente nella cartella src di una qualsiasi app in Ionic, di cui qui riportiamo un esempio:\n \u0026lt;!DOCTYPE html\u0026gt; \u0026lt;html lang=\u0026#34;en\u0026#34;\u0026gt; \u0026lt;head\u0026gt; \u0026lt;meta charset=\u0026#34;utf-8\u0026#34; /\u0026gt; \u0026lt;title\u0026gt;Ionic App\u0026lt;/title\u0026gt; \u0026lt;base href=\u0026#34;/\u0026#34; /\u0026gt; \u0026lt;meta name=\u0026#34;color-scheme\u0026#34; content=\u0026#34;light dark\u0026#34; /\u0026gt; \u0026lt;meta name=\u0026#34;viewport\u0026#34; content=\u0026#34;viewport-fit=cover, width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no\u0026#34; /\u0026gt; \u0026lt;meta name=\u0026#34;format-detection\u0026#34; content=\u0026#34;telephone=no\u0026#34; /\u0026gt; \u0026lt;meta name=\u0026#34;msapplication-tap-highlight\u0026#34; content=\u0026#34;no\u0026#34; /\u0026gt; \u0026lt;link rel=\u0026#34;icon\u0026#34; type=\u0026#34;image/png\u0026#34; href=\u0026#34;assets/icon/favicon.png\u0026#34; /\u0026gt; \u0026lt;!-- add to homescreen for ios --\u0026gt; \u0026lt;meta name=\u0026#34;apple-mobile-web-app-capable\u0026#34; content=\u0026#34;yes\u0026#34; /\u0026gt; \u0026lt;meta name=\u0026#34;apple-mobile-web-app-status-bar-style\u0026#34; content=\u0026#34;black\u0026#34; /\u0026gt; \u0026lt;/head\u0026gt; \u0026lt;body\u0026gt; \u0026lt;app-root\u0026gt;\u0026lt;/app-root\u0026gt; \u0026lt;/body\u0026gt; \u0026lt;/html\u0026gt;  Come possiamo notare dal frammento di codice riportato sopra, immediatamente dopo l\u0026rsquo;elemento è presente un elemento avente un attributo href impostato al valore \u0026rsquo;/\u0026rsquo;.\n Con questa proprietà andiamo ad indicare l\u0026rsquo;URL di base rispetto al quale sono relativi tutti i path utilizzati dell\u0026rsquo;applicazione e si tratta di un elemento necessario.\n Infatti nelle versioni di Angular successive alla 2 la strategia predefinita per comporre le route prende il nome contenuto in PathLocationStrategy e si avvale della History API per gestirne lo storico, ossia il meccanismo con cui gestire lo storico della sessione del browser.\n Se avessimo cambiato il valore dell\u0026rsquo;attributo href dell\u0026rsquo;elemento , per esempio , la pagina iniziale della nostra applicazione sarebbe stata mostrata partendo dall\u0026rsquo;indirizzo http://localhost:4200/la-mia-app/.\n Questo significa di conseguenza che tutti gli altri percorsi sarebbero stati automaticamente costruiti a partire dalla base fornita, e quindi per esempio http://localhost:4200/la-mia-app/my-route.\n Esempi  Creazione di una nuova pagina  Quando aggiungi una nuova pagina al tuo progetto Ionic, questa viene automaticamente aggiunta alla configurazione di routing all\u0026rsquo;interno di app-routing.module.ts, come visibile nella penultima riga della seguente immagine:\n Esempio di creazione di una pagina in Ionic\n Questo significa che potremo utilizzare la route definita all\u0026rsquo;interno del file di routing in qualsiasi altra pagina per navigarne il contenuto.\n Utilizzo di una pagina esistente  Puoi utilizzare la stessa pagina in più posizioni assicurandoti che esista un percorso per essa da tali posizioni.\n Ad esempio, se desideri che la pagina \u0026ldquo;Dettaglio\u0026rdquo; sia accessibile all\u0026rsquo;interno di Tab1 della tua applicazione e Tab2, devi avere una dichiarazione del path /detail nel router del file app-routing.module.ts sia per Tab1 che per Tab2.\n import { NgModule } from \u0026#39;@angular/core\u0026#39;; import { RouterModule, Routes } from \u0026#39;@angular/router\u0026#39;; const routes: Routes = [ { path: \u0026#39;detail\u0026#39;, component: DetailPage}, { path: \u0026#39;tab1\u0026#39;, component: Tab1Component}, ...  Utilizzare routerLink  Quando cerchiamo di andare verso un\u0026rsquo;altra pagina tramite un pulsante o un qualsiasi altro elemento, possiamo utilizzare la proprietà routerLink specificando la pagina o il percorso che deve portarci ad una pagina diversa.\n  Se questa istruzione non funzionasse e generasse un errore, assicurarati che il modulo RouterModule sia incluso nel modulo delle tue pagine!\n  Nell\u0026rsquo;esempio seguente, analizziamo un caso d\u0026rsquo;uso e facciamo in modo che l\u0026rsquo;utente venga rimandato alla pagina detail di un prodotto (e lo specifichiamo grazie all\u0026rsquo;ID dell\u0026rsquo;oggetto) quando clicca sull\u0026rsquo;elemento ion-item.\n \u0026lt;ion-item [routerLink]=\u0026#34;\u0026#39;/detail/\u0026#39; + item.id\u0026#34; routerDirection=\u0026#34;forward\u0026#34; \u0026gt;\u0026lt;/ion-item\u0026gt;  In questo modo, avvieremo DetailPage e le forniremo un parametro id route, che potremo anche utilizzare all\u0026rsquo;interno del componente.\n Questo è in qualche modo molto vantaggioso perché significa che non è sempre necessario impostare un\u0026rsquo;associazione di eventi e coinvolgere il NavController ogni volta che si desidera passare a un\u0026rsquo;altra pagina fornendo dei dati.\n Si noti inoltre che sempre nell\u0026rsquo;esempio forniamo un routerDirection per indicare se si tratta di una navigazione in avanti o indietro in modo che l\u0026rsquo;animazione di transizione dello schermo possa essere applicata correttamente.\n  Se questo non viene fornito, Ionic indovinerà quale animazione dovrebbe utilizzare, ma è meglio essere espliciti.\n  Analizziamo ora il file app-routing.module.ts:\n import { NgModule } from \u0026#39;@angular/core\u0026#39;; import { RouterModule, Routes } from \u0026#39;@angular/router\u0026#39;; const routes: Routes = [ { path: \u0026#39;\u0026#39;, component: HomeComponent }, { path: \u0026#39;saldi\u0026#39;, component: SaldiComponent }, { path: \u0026#39;sconti\u0026#39;, redirectTo: SaldiComponent }, { path: \u0026#39;not-authorized\u0026#39;, component: UnauthorizedComponent, }, { path: \u0026#39;not-found\u0026#39;, component: ErrorComponent, }, { path: \u0026#39;**\u0026#39;, redirectTo: \u0026#39;/not-found\u0026#39;, data: { title: \u0026#39;Pagina non trovata\u0026#39; } } ]; @NgModule({ imports: [ RouterModule.forRoot(routes) ], exports: [ RouterModule ], declarations: [] }) export class AppRoutingModule { }  Ciascun oggetto ha una proprietà path pari al percorso in corrispondenza del quale vogliamo venga mostrato un certo componente che indichiamo con la proprietà component.\n Nell\u0026rsquo;esempio ci sono poi degli oggetti leggermente diversi dagli altri. Notate infatti che nell\u0026rsquo;ultimo oggetto dell\u0026rsquo;array abbiamo assegnato il simbolo \u0026lsquo;**\u0026rsquo; alla proprietà path.\n Si tratta della cosiddetta wildcard route, una sorta di percorso jolly che intercetta qualsiasi URL.\n È bene sottolineare una proprietà importante da tenere in mente quando si definisce l\u0026rsquo;oggetto Routes: infatti l\u0026rsquo;ordine in cui vengono inseriti i diversi oggetti di tipo Route nell\u0026rsquo;array è rilevante!\n Il Router di Angular, dovendo decidere quale componente mostrare in corrispondenza di un certo percorso, inizia a scorrere l\u0026rsquo;array dal primo oggetto e si ferma non appena ne trova uno con una proprietà \u0026lsquo;path\u0026rsquo; che corrispone al percorso.\n Per questo motivo è necessario inserire l\u0026rsquo;oggetto avente la wildcard route come proprietà path alla fine dell\u0026rsquo;array altrimenti verrebbero individuati tutti i percorsi e verrebbe sempre mostrato il componente PageNotFoundComponent.\n Abbiamo poi usato nel file di routing un altro oggetto con una proprietà redirectTo che fa in modo di redirigere il browser all\u0026rsquo;indirizzo con percorso pari a \u0026lsquo;/saldi\u0026rsquo; ogni volta che si accede al percorso \u0026lsquo;/sconti\u0026rsquo;.\n Utilizzo di Router  Per navigare in modo programmatico attraverso le diverse pagine, è possibile utilizzare il Router standard di Angular nelle tue pagine e chiamando uno di questi metodi:\n ... this.router.navigateByUrl(\u0026#39;/login\u0026#39;); this.router.navigate([\u0026#39;/detail\u0026#39;, { id: itemId }]); ...  Il primo naviga in maniera puntuale verso una pagina ed è l\u0026rsquo;equivalente di routerLink, ma questo può essere utilizzato all\u0026rsquo;interno del file *.ts.\n  Per poterlo questa modalità di routing in Ionic, è necessario importarlo nel constructor del componente/servizio che utilizziamo!\n  class MyComponent { constructor(router: Router) { this.router.navigateByUrl(...); } }  La funzione navigate permette invece di creare un nuovo URL applicando quanto passato nell\u0026rsquo;array, con la possibilità di aggiungere dei parametri extra, come l\u0026rsquo;ID che viaggerà insieme all\u0026rsquo;indirizzo della route e potrà essere utilizzato nel componente di destinazione.\n Utilizzo di NavController  Il modo migliore per navigare a livello di codice in un\u0026rsquo;applicazione Ionic o Angular è utilizzare NavController.\n Questo è in realtà abbastanza simile al modo in cui avresti utilizzato il routerLink per navigare da una pagina all\u0026rsquo;altra specificando la direzione, tranne per il fatto che ora hai tutto all\u0026rsquo;interno di uno di questi metodi, come mostrato di seguito:\n this.navCtrl.navigateForward(\u0026#39;/my-route\u0026#39;); this.navCtrl.navigateBack(\u0026#39;/my-route\u0026#39;); this.navCtrl.navigateRoot(\u0026#39;/my-route\u0026#39;);  Il vantaggio dell\u0026rsquo;utilizzo di NavController per navigare è che consente di specificare una \u0026ldquo;direzione\u0026rdquo; per la navigazione attraverso la funzione, che aiuterà \u0026lt;ion-router-outlet\u0026gt; di Ionic a visualizzare correttamente la transizione della pagina.\n  Che viaggio quello nel mondo dei router!\n  Risorse utili Manuale Ionic in italiano Routing in Ionic nella doc ufficiale  ", "url": "https:\/\/theredcode.it\/ionic\/come-funziona-il-routing-in-ionic\/" }, "https:\/\/theredcode.it\/tags\/ionic-5\/": { "title": "ionic-5", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/tags\/ionic-5\/" }, "https:\/\/theredcode.it\/tags\/routing\/": { "title": "routing", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/tags\/routing\/" }, "https:\/\/theredcode.it\/interviste\/java-developer\/": { "title": "Voglio diventare un... Java Developer", "tags": ["interviste","voglio-diventare",], "content": "Claudio è un grande formatore ed esperto italiano nell\u0026rsquo;ambito Java, per cui quando ho pensato ad un\u0026rsquo;intervista a tema Java Developer, non potevo che scegliere lui!\n Che poi, di mestiere voleva fare lo scrittore, e in parte ci è anche riuscito\u0026hellip;\n Claudio De Sio Cesari oggi ci racconta come fare per diventare un Java Developer!\n Descriviti in 100 parole  Non mi piacciono le etichette, quindi ti racconto giusto qualcosa su di me.\n Leggo almeno mezz’ora ogni giorno, ho una pessima memoria, senza silenzio assoluto non riesco a concentrarmi, non mi arrabbio mai tranne che per le ingiustizie, non ho rispetto per chi non rispetta il prossimo, ho diverse abitudini decisamente ossessive.\n  33 anni fa mi sono imposto di imparare qualcosa di nuovo ogni giorno e di raggiungere un obiettivo importante ogni anno. Lavoro senza orari perché faccio solo quello che mi piace.\n  Non è mai tardi, ma se avessi potuto avrei voluto fare il musicista e/o lo scrittore.\n In cosa consiste il ruolo di Java Developer?  Risposta breve: un Java Developer riesce ad interpretare delle specifiche tecniche correttamente e a tramutarle in codice Java.\n In realtà un qualsiasi teenager con un minimo di passione, un po’ di talento e una conoscenza basilare dei principali costrutti di programmazione, può interpretare delle specifiche tecniche correttamente e a tramutarle in codice Java.\n Il lavoro di Java Developer quindi non si può limitare a questo, bisogna fare molto di più.\n Prima cosa so utilizzare diversi processi di sviluppo per ottenere risultati di qualità: all’occorrenza posso farmi guidare dalla analisi e dalla progettazione, da una ben definita architettura, dai test, dall’esperienza, etc., ma mi risulta difficile sintetizzare tali processi in poche battute (erogo dei corsi appositamente su questi argomenti).\n In qualsiasi caso, quando creo del codice, curo scrupolosamente i test, la comunicazione con il team, la documentazione, il bug fixing, seguo i principi dell’object orientation, sfrutto soluzioni standard (pattern), cerco di misurare e migliorare le prestazioni nelle parti architetturalmente significative, dedico del tempo a rendere il mio codice sicuro e faccio il possibile per renderlo leggibile per me e per gli altri.\n Insomma, il codice non deve solo funzionare, deve anche essere efficiente, manutenibile, scalabile, robusto, testabile, evolvibile e riutilizzabile. Ovviamente questi sono gli obiettivi, la perfezione non esiste, ma almeno ci si deve provare!\n Qual è la soft skill più importante che deve possedere un Java Developer?  Per la mia esperienza, le soft skill più importanti sono la capacità di analisi di un problema all’interno di un contesto, e la capacità di implementare soluzioni semplici per risolvere problemi complessi.\n La complessità è nemica del nostro lavoro, e buttarsi a capofitto sul codice può essere divertente, ma di solito non garantisce grandi risultati in termini di qualità.\n La maggior parte di noi utilizza i social per parlare dei propri successi, ma la realtà è che siamo quel che siamo grazie al 90% dei nostri errori. Racconta il tuo più grande fallimento da quando lavori nel settore, che però ti ha reso ciò che sei.   È vero, i fallimenti sono fondamentali perché ci fanno crescere, è così che si fa esperienza.\n Ogni fallimento è una pietra miliare per la mia crescita, e ho fallito tante di quelle volte che ora ci sono meno probabilità che ripeta gli stessi errori del passato.\n È difficile scegliere il mio più grande fallimento, alla fine si tratta di situazioni che fortunatamente si sono sempre risolte in qualche modo.\n Potrei raccontarti di quando ho lanciato lo script sbagliato che ha causato l’installazione dell’applicazione del cliente B nell’ambiente di produzione del cliente A.\n Oppure di quando sviluppai un’applicazione con tutte le nuove caratteristiche introdotte da Java 5 (generics, varargs, annotazioni, foreach, etc…) ma che poi ho dovuto riscrivere da capo perché doveva essere installato su un ambiente di produzione che girava con una versione precedente.\n Oppure di quando ho dato un consiglio per risolvere un problema ad un programmatore junior senza seguirlo che poi ha causato un blocco in produzione. O anche di quando dovendo ricreare il mio personale ambiente di test, chiesi in prestito l’accesso all’ambiente di test di un mio collega, ed alla fine cancellai il suo ambiente di test!\n A parte quest’ultimo caso che mi ha fatto diventare una leggenda (Claudio, il divoratore di database), fallire solitamente è poco piacevole, ma non bisogna abbattersi.\n  A volte sbagliare è qualcosa di prezioso!\n  Come fare per diventare un Java Developer?  Ovviamente bisogna studiare molto, ma se c’è la passione questo non è affatto un problema, anzi è un piacere! Java non è solo il nome del linguaggio, ma anche di un immenso ecosistema composto da tool, architetture e tecnologie, aperto ad interfacciarsi con hardware e software di qualsiasi tipo. Non si finisce mai di studiare, io lo faccio da oltre 20 anni ogni giorno!\n Se dovessi consigliare che passi intraprendere per diventare Java Developer, consiglio di:\n Imparare molto bene il linguaggio e le principali librerie. Secondo me un libro di riferimento affidabile e aggiornato è fondamentale per avere la possibilità di approfondire. Un videocorso ti aiuta, ma un buon libro è tutta un’altra cosa. Oggi Java è un linguaggio molto più complesso di una volta e talmente rinnovato che i programmatori che l’hanno studiato anni fa, non sono neanche in grado di interpretare il codice Java scritto oggigiorno. Imparare le basi delle tecnologie più richieste come Spring, JPA e Java EE. Inoltre do per scontato che bisogna conoscere anche le basi di SQL, XML, JSON, e spesso di tecnologie front end quali JavaScript, HTML 5 e CSS. Lo studio è fondamentale ma non basta fare esercizi. All’inizio della mia carriera ho trovato molto utile creare da zero un progetto open source personale e pubblicarlo su una piattaforma come GitHub o SourceForge. Magari creando un clone di qualcosa che esiste già (un blocco note, una calcolatrice, una sveglia, un motore di ricerca, etc.) o qualcosa che ci potrebbe essere utile (un gestionale, una utility per organizzare il nostro lavoro, etc.). Non è facile, ma se non lo si riesce a fare da soli ci si può organizzare con altre persone, il confronto arricchisce moltissimo. Credo che un altro passo davvero importante sia quello di certificarsi. Le certificazioni Oracle richiedono molto studio, ma nel momento in cui ti certifichi hai oramai acquisito un grado di conoscenza del linguaggio molto elevato che ti porterà ad avere grande sicurezza quando programmi, ed è questo che fa la differenza.   Un candidato alla prima esperienza che si presenta ad un colloquio con una certificazione ed un progetto open source da mostrare, avrà importanti possibilità di iniziare una carriera nel migliore dei modi.\n  Parlando di successi, qual è il tuo prossimo obiettivo? Quale ruolo vorresti ricoprire entro i prossimi 3 anni?  Io sono stato sempre un consulente e mi reputo fortunato perché posso scegliere i miei obiettivi e ruoli senza grossi vincoli. Per i prossimi anni a venire, vorrei solo rimanere libero di scegliere di fare quello che mi va di fare.\n All’inizio della pandemia ho preso un anno sabbatico ed ho rifiutato quelle poche attività che mi hanno proposto per poter curare il mio ultimo libro (senza lavorare di notte come ho fatto per i libri precedenti) e dedicarmi alla divulgazione.\n Ho riaperto il mio blog dopo 15 anni ed erogato gratuitamente un corso di formazione di quindici lezioni ad una ventina di persone che in quel momento vivevano difficoltà economiche. Mi piacerebbe ripetere più spesso quella bellissima esperienza, magari anche con persone di altri paesi meno fortunati del nostro.\n Conosci il tema gender gap in ambito STEM? Se sì, come fare per superarlo?  Certo, purtroppo conosco bene il problema. Sul luogo di lavoro ho assistito spesso ad insopportabili mansplaining, decisioni sessiste, squallide allusioni e ad abusi verbali.\n Sono molto sensibile a questi eventi perché come ti ho detto all’inizio, l’unica cosa che mi fa arrabbiare sono le ingiustizie! Purtroppo si tratta di un problema culturale e ci vorrà tempo per superarlo.\n  In Italia e in tutto il mondo comunque, gli esempi di figure femminili che eccellono nei loro ruoli sono ormai tantissime, e piano piano il vento cambierà.\n  Io e tantissime persone seguono sui social grandi informatiche come Angie Jones, Thrisha Gee e soprattutto Rebecca Wirfs-Brock, che rappresenta una delle mie più grandi ispirazioni.\n  Tu sai cosa intendo, visto che proprio tu Serena, in Italia sei un riferimento femminile molto importante per il mondo informatico, e un esempio da seguire!\n  Un grazie enorme a Claudio per aver partecipato e dedicato il suo tempo a raccontare questa professione!\n Contatti Blog, corsi, risorse gratuite e link social - https://www.claudiodesio.com\n Il nuovo Java - https://www.nuovojava.it\n ", "url": "https:\/\/theredcode.it\/interviste\/java-developer\/" }, "https:\/\/theredcode.it\/docker\/copiare-file-da-verso-container-docker\/": { "title": "Copiare file da e verso un container Docker", "tags": ["docker",], "content": "Quando lavori con Docker, potrebbe essere necessario copiare file da e verso un container Docker e il tuo computer.\n Dopo aver creato l\u0026rsquo;immagine Docker e aver ottenuto il vostro container, dover eseguire la build ancora e ancora solo per aggiungere un file al suo interno potrebbe essere noioso, perché capita che le immagini siano di dimensioni abbastanza grandi\u0026hellip;\n Docker però ci fornisce dei comandi molto utili che ci consentono di copiare senza problemi i file da e verso un container Docker e il sistema locale.\n In questo articolo, discuteremo come utilizzare i comandi Docker cp vedendo degli esempi pratici!\n Copia di file dal container al computer locale  Segui i passaggi seguenti per copiare un file da un contenitore Docker a un computer locale:\n Crea un container  Come prova, è possibile utilizzare l\u0026rsquo;immagine di Ubuntu e creare un file di prova al suo interno, eseguendo i comandi riportati:\n docker run -it --name my-container ubuntu \u0026gt;\u0026gt;\u0026gt; root@e625c04df0b0:/# cd home/ root@e625c04df0b0:/home# ls -la total 8 drwxr-xr-x 2 root root 4096 Apr 15 2020 . drwxr-xr-x 1 root root 4096 Apr 5 15:16 .. root@e625c04df0b0:/home# touch myfile.txt root@e625c04df0b0:/home# echo \u0026#34;pippo\u0026#34; \u0026gt; myfile.txt root@e625c04df0b0:/home# cat myfile.txt pippo  Trova l\u0026rsquo;ID del container  Adesso andiamo a recuperare l\u0026rsquo;ID del container da cui vogliamo copiare il file eseguendo il comando seguente:\n docker ps -a \u0026gt;\u0026gt;\u0026gt; CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e3c6d689766e ubuntu \u0026#34;bash\u0026#34; 19 seconds ago Up 19 seconds my-container Copia il file sul tuo sistema locale  È possibile utilizzare il comando docker cp per copiare il file, specificando l\u0026rsquo;ID del container separato da \u0026ldquo;:\u0026rdquo; con il path assoluto del file e poi specificando il percorso -sempre assoluto- di dove verrà salvato in locale.\n Il comando ha questa sintassi:\n  docker cp [CONTAINER_ID]:[PATH_ASSOLUTO_SORGENTE] [PATH_ASSOLUTO_DESTINAZIONE]\nEsempio: docker cp 123abc:/home/folder/file.txt /tmp/file.txt\n  root@system:~$ docker cp e3c6d689766e:/home/myfile.txt /tmp/myfile.txt root@system:~$ ls -la /tmp/ \u0026gt;\u0026gt;\u0026gt; -rw-r--r-- 1 root root 6 Apr 5 19:19 myfile.txt  Copia di file da locale al container  Puoi usare sempre l\u0026rsquo;istruzione cp con la seguente sintassi -tieni presente che il container dev\u0026rsquo;essere up\u0026amp;running-:\n  docker cp [PATH_ASSOLUTO_SORGENTE] [CONTAINER_ID]:[PATH_ASSOLUTO_DESTINAZIONE]\nEsempio: docker cp 123abc:/home/folder/file.txt /tmp/file.txt\n   root@system:~$ docker cp /tmp/myfile.txt e3c6d689766e:/home/myfile.txt  Per verificare che il file sia stato copiato correttamente, utilizzare il comando seguente:\n root@system:~$ docker exec -it my-container /bin/bash root@e3c6d689766e:/# ls -la /tmp/ \u0026gt;\u0026gt;\u0026gt; -rw-r--r-- 1 root root 6 Apr 5 19:19 myfile.txt  Risorse utili Docker Apogeo Canale Emmecilab a tema Docker ", "url": "https:\/\/theredcode.it\/docker\/copiare-file-da-verso-container-docker\/" }, "https:\/\/theredcode.it\/tags\/designdev\/": { "title": "designdev", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/tags\/designdev\/" }, "https:\/\/theredcode.it\/tags\/scrum\/": { "title": "scrum", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/tags\/scrum\/" }, "https:\/\/theredcode.it\/design-dev\/valori-scrum-e-non-solo\/": { "title": "Valori Scrum e non solo", "tags": ["agile","designdev","scrum",], "content": " Rieccoci con una nuova puntata in cui parleremo dei valori Scrum, e non solo.\n Abbiamo parlato nel precedente articolo (link in fondo!) dei pilastri empirici di questo framework, ora è arrivato il momento di parlare dei suoi valori, i quali possono essere applicati se vogliamo non solo in ambito IT, ma nella vita di tutti i giorni e andando avanti con questa lettura vedremo insieme il perché.\n Di cosa si tratta  Secondo la guida Scrum, il successo nell\u0026rsquo;impiego di questo framework e del team stesso, dipende dalla capacità delle persone di diventare più abili a vivere 5 valori.\n Valori Scrum di Scrum.org\n Impegno   “Le persone si impegnano personalmente a raggiungere gli obiettivi del team Scrum.”\n  Nella vita di tutti i giorni, siamo impegnati al massimo in ciò in cui crediamo davvero, attraversando momenti belli, ma anche difficili ed è proprio in questo caso che scegliamo di non demordere e di andare avanti nonostante tutto per portare a termine i nostri progetti, per noi stessi, per le persone che amiamo e per qualsiasi altro motivo reputiamo importante e la fortuna più grande è avere al nostro fianco le persone di cui ci fidiamo in ogni momento.\n Allo stesso modo, anche nell\u0026rsquo;adottare scrum, ogni persona si impegnerà al 100% non solo sugli sviluppi da portare a termine, ma anche nei confronti dei suoi compagni di squadra.\n Uno Scrum team infatti deve essere in grado di lavorare insieme come un\u0026rsquo;unità speciale per raggiungere un obiettivo comune. Ciò significa fidarsi l\u0026rsquo;uno dell\u0026rsquo;altro, per portare a termine i propri compiti e dare il meglio delle proprie capacità.\n Focus   “Tutti si concentrano sul lavoro dello Sprint e sugli obiettivi dello Scrum team.”\n  Quando ci impegnamo a raggiungere un obiettivo, vien da sé che la nostra concentrazione sia tutta rivolta all\u0026rsquo;obiettivo stesso, soprattutto se desideriamo raggiungerlo entro un determinato limite di tempo.\n Così anche in Scrum, l\u0026rsquo;intero team è concentrato al 100% sul raggiungimento di quello che viene definito Goal, svolgendo il suo lavoro in intervalli temporali ben definiti chiamati Sprint (di Goal e Sprint ne parleremo in futuro nel dettaglio), senza alcun tipo di interruzione o di impedimento.\n Apertura   \u0026ldquo;Il team Scrum e i suoi stakeholder concordano di essere aperti su tutto il lavoro e le sfide legate all\u0026rsquo;esecuzione del lavoro.\u0026rdquo;\n  Capita a volte di trovarci nella condizione di dover affrontare problemi di varia natura, di prendere decisioni complesse e di essere estremamente sinceri nell\u0026rsquo;esporre problematiche o pensieri, con la consapevolezza di avere davanti a noi interlocutori con la nostra stessa apertura mentale e capaci di comprendere e accogliere le nostre parole, generando quindi fiducia e aprendo strade nuove per raggiungere un obiettivo o risolvere un problema.\n Così anche in un team Scrum, affinché possa fare il maggior numero di progressi nel più breve tempo possibile, ogni membro del team dovrà essere brutalmente onesto su qualsiasi forma di problema o progresso, considerando sempre i colleghi come validi contributori al successo del progetto.\n Rispetto   \u0026ldquo;I membri del team Scrum si rispettano a vicenda in quanto persone capaci e indipendenti.\u0026rdquo;\n  Proprio come in ogni lavoro di squadra, il rispetto in un team Scrum significa riconoscere che nessun singolo individuo o il suo contributo è più prezioso di un altro.\n Rispetto significa anche fidarsi dei membri del tuo team per svolgere i loro compiti, ascoltare e considerare le loro idee e riconoscere i loro risultati.\n Coraggio   “I membri del team Scrum hanno il coraggio di fare la cosa giusta e lavorare su problemi difficili.”\n  Il coraggio è un valore che risiede in ognuno di noi. Ci vuole coraggio nel cambiare direzione improvvisamente, per prendere decisioni difficili, per affrontare situazioni nuove che in quanto tali spaventano, ma rappresentano un cambiamento che può renderci felici e molto altro.\n I team Scrum devono avere il coraggio di essere onesti, aperti e trasparenti sia con se stessi che con gli stakeholder sull\u0026rsquo;avanzamento del progetto e su eventuali ostacoli che stanno incontrando.\n I membri del team hanno anche il coraggio di ammettere di aver sbagliato, coscienti della loro capacità di cambiare rotta nel modo giusto, e di chiedere aiuto quando è necessario, di provare nuove tattiche o metodi a cui non sono abituati, di dissentire rispettosamente e di avere un dialogo aperto.\n Credere fermamente in questi valori e viverli ogni giorno, anche in un contesto complesso come può essere quello dello sviluppo software, permette a tutte le persone coinvolte di portare a termine con successo il proprio lavoro, grazie al supporto e al rispetto reciproco.\n Il consiglio che sento di dare però a ogni persona che leggerà questo articolo è di allenarsi a seguire a pieno questi valori, sia nella vita quotidiana che nel lavoro, ricordando sempre che oltre ad essere dei professionisti, siamo persone, tutte diverse e con una storia diversa alle spalle, e forse è questa la cosa più bella.\n  Nel prossimo articolo parleremo finalmente dei ruoli presenti in un team Scrum!\n  Risorse utili Download del poster Scrum Values  ", "url": "https:\/\/theredcode.it\/design-dev\/valori-scrum-e-non-solo\/" }, "https:\/\/theredcode.it\/interviste\/project-manager\/": { "title": "Voglio diventare un... Project Manager", "tags": ["interviste","voglio-diventare",], "content": "Essere PM richiede delle doti tecniche, ma anche alcune innate, come l\u0026rsquo;empatia, l\u0026rsquo;ascolto, la mediazione, e molto altro.\n Si tratta infatti di una figura chiave in un\u0026rsquo;impresa che deve conciliare e facilitare la comunicazione tra il gruppo di sviluppo di una soluzione e fare al contempo gli interessi del progetto e del cliente: i suoi interessi sono ovviamente rivolti al business, ma attuando sempre come un leader.\n E quindi come diventare un ottimo Project Manager?\n Ce lo racconta Riccardo Ricciotti, che nella sua esperienza di \u0026ldquo;esperienze\u0026rdquo; ne ha maturate davvero moltissime; attualmente è Senior Project Manager presso la Tecnet Systems srl., ma il suo essere poliedrico e le sue capacità di comunicazione lo hanno reso un eccellente professionista.\n Descriviti in 100 parole.  Sono un “ragazzo” di 48 anni, curioso e orientato al cambiamento; penso che la vita offra continue opportunità di crescita e che occorra rimanere “sintonizzati” sulle frequenze della propria esistenza per evolvere e migliorarsi.\n Amo la musica e le arti in genere, la fotografia, le scienze e l’ecologia intesa come lo studio della nostra “casa”, mi stupisco davanti a un paesaggio e allo spettacolo della natura, mi deprime l’indifferenza delle persone e il cinismo antropocentrico dell’essere umano.\n Avrei voluto fare il medico, ma faccio il PM…non è la stessa cosa ma mi reputo comunque fortunato.\n In cosa consiste il ruolo di Project Manager?   “Gestire” un progetto, il che vuol dire essere sempre in prima linea.\n  Consideriamo la complessità di un progetto, una Babele in cui tutti gli attori coinvolti (e spesso sono davvero molti) parlino lingue diverse e abbiano esigenze e priorità diverse; in un sistema di questo tipo le variabili tendono a moltiplicarsi esponenzialmente fino a “seppellire” gli obiettivi stessi del progetto.\n  Il PM, in quanto responsabile di tali obiettivi, è dunque il “centro di equilibrio” intorno al quale si sviluppano (e sul quale talvolta collidono) le dinamiche di progetto.\n  Nella pratica, il PM “armonizza” il disordine intrinseco al progetto organizzandone in modo sostenibile le attività, condividendone avanzamenti e risultati e indirizzando la risoluzione dei conflitti e delle crisi che, inevitabilmente, in qualsiasi contesto umano tendono a verificarsi…un lavoro da masochisti!\n  Qual è la soft skill più importante che deve possedere un Project Manager?  Empatia e capacità comunicativa.\n Il Project Manager vive di comunicazione; deve dunque saper essere chiaro nel trasferire informazioni e cauto nella scelta delle informazioni da trasferire.\n Empatico, perché alla base del successo di un progetto c’è senza dubbio l’efficace interazione fra stakeholders e in particolar modo fra il PM e gli altri attori coinvolti nell’impresa (ebbene sì…un progetto, non a caso, si definisce “impresa”).\n  Riconoscere l’esigenza specifica di un membro del team o coinvolgere attivamente nelle decisioni un collaboratore capace ma insicuro e poco abituato a esprimersi, può certamente fare la differenza.\n  La maggior parte di noi utilizza i social per parlare dei propri successi, ma la realtà è che siamo quel che siamo grazie al 90% dei nostri errori. Racconta il tuo più grande fallimento da quando lavori nel settore, che però ti ha reso ciò che sei.  Ho appena affermato l’importanza dell’empatia nel mio lavoro\u0026hellip; io ho fallito quando non sono stato empatico, quando ho messo al centro le mie opinioni, quando non ho percepito l’importanza che un mio stakeholder stava dando a un aspetto del progetto che io consideravo secondario.\n Perchè nel lavoro, come nella vita, nulla è assoluto; così mi sono trovato a consegnare un progetto che piaceva a me ma non produceva valore per il mio Cliente; il risultato è stato poi recuperato, la fiducia no.\n  Ho poi imparato, prima di tutto, a pormi in ascolto…\n  Come fare per diventare un Project Manager?  Il percorso per diventare PM parte da lontano e, sebbene la teoria indichi come non necessaria una competenza specifica sull’ambito del progetto, trovo che essersi “sporcati le mani” sulle attività più tecniche e operative rappresenti un plus importante per un PM.\n Sia ben chiaro, il Project Management è una materia vera e propria, non ci si improvvisa PM e non basta aver partecipato a molti progetti per poterne condurre uno!\n Consiglio sempre di affacciarsi a questo mondo facendo un corso, quantomeno per apprenderne le basi e i processi principali.\n Parliamo intanto di metodologia Waterfall (che, per definizione, è il territorio del Project management): per iniziare è perfetta la certificazione emessa dall\u0026rsquo;istituto italiano di Project management, ISIPM base (che tra l\u0026rsquo;altro, ora stanno cominciando a richiedere anche per la partecipazione alle gare pubbliche).\n Questa prevede gran parte delle tematiche dal PMI (Project Management Institute), ma senza il livello di complessità del PMP (che rimane la \u0026ldquo;bibbia\u0026rdquo; del Project Management).\n Una declinazione interessante e molto completa della metodologia Waterfall è Prince2 (alias PRojects IN Controlled Environments).\n Si tratta di una bella certificazione e anche piuttosto richiesta, ma la consiglierei a chi abbia maturato già qualche esperienza; esiste poi il mondo Agile e difatti adesso stanno nascendo certificazioni da PM Agili (Prince2 ne ha rilasciata una e anche ScrumStudy).\n Io personalmente consiglio, a chi si voglia dedicare al mondo Agile, una certificazione da PO o anche da ScrumMaster\u0026hellip; che non sono specifiche per i PM ma danno una visione profonda dei processi Agile.\n In alternativa c\u0026rsquo;è la SAMC (Scrumstudy Agile Master certified), emessa da ScrumStudy e conferisce una competenza trasversale e piuttosto approfondita su tutte le metodologie Agili (Scrum, Kanban, Crystal, DSDM\u0026hellip;etc) e non implica la specializzazione su un ruolo in particolare\u0026hellip;\n Mi sento comunque di dire che il Project Management applicato all\u0026rsquo;Agile è un po\u0026rsquo; una forzatura, ma ci sono diverse strade che è possibile intraprendere!\n Parlando di successi, qual è il tuo prossimo obiettivo? Quale ruolo vorresti ricoprire entro i prossimi 3 anni?  Sicuramente continuerò a lavorare sui progetti, magari su progetti sempre più ambiziosi e sfidanti e in contesti altamente professionalizzanti.\n  Amo però anche lavorare con i giovani e sono un grande “fan” della formazione\u0026hellip;\n  Non è escluso che nei prossimi anni possa coniugare il mio ruolo di PM con quello di formatore; avviare e gestire una piccola “academy” interna all’azienda, magari proprio su tematiche di Project Management, sarebbe molto gratificante.\n Conosci il tema gender gap in ambito STEM? Se sì, come fare per superarlo?  Conosco il tema e posso affermare, con piacere, di non essermici mai confrontato…anzi, per caso o per fortuna la maggior parte dei progetti ai quali ho partecipato includevano una prevalente componente femminile.\n Certamente, anche nel nostro mondo ci sono professioni più ricercate dagli uomini e altre più ambite dalle donne, i motivi sono molteplici, ma non escludo che l’avvento dello Smart Working possa contribuire ad equilibrare le proporzioni.\n  Il tema della gestione del tempo, in un paese tradizionalista come l’Italia, è da sempre fattore discriminante, specialmente per le donne, nella scelta delle proprie carriere.\n  Quello che ho constatato da quando lavoro è che le donne percepiscono il tema della gestione del proprio tempo come prioritario se non addirittura \u0026ldquo;critico\u0026rdquo;.\n Questa visione deriva dalla natura profondamente tradizionalista della nostra cultura (e forse anche un po\u0026rsquo; arretrata) secondo cui è la donna ad essere principalmente deputata alla gestione della casa e della famiglia.\n Questa regola \u0026ldquo;implicita\u0026rdquo; indirizza e condiziona le donne nel momento in cui si affacciano al mondo del lavoro o addirittura prima, nella scelta dell\u0026rsquo;indirizzo di studio in funzione del successivo percorso professionale.\n Affrontare un percorso di studi STEM richiede sacrificio e le professioni a cui si può accedere con tale background formativo sono molto spesso faticose e di responsabilità, perchè si basano su competenze specifiche e \u0026ldquo;pregiate\u0026rdquo;.\n Una donna che tutti i giorni, al risveglio, parte già con un backlog di attività da svolgere (i figli, la casa, la spesa ecc.) non può permettersi (o, almeno, spesso si pensa questo) di avere un lavoro troppo impegnativo e sul quale essere continuamente misurata, cosa che avviene, ad esempio, nel mondo della consulenza.\n Sotto questo punto di vista, lo smart working in questo senso potrebbe abbattere questo limite (che deve comunque essere rimosso a livello culturale), di modo che sia possibile lavorare senza il timore di essere misurati/e per il tempo che si passa alla scrivania o per quante ore di permesso si prendono in un mese, affinché si possa essere anche più sereni/e nelle proprie scelte di carriera.\n Contatti Profilo LinkedIn ", "url": "https:\/\/theredcode.it\/interviste\/project-manager\/" }, "https:\/\/theredcode.it\/interviste\/crm-strategist\/": { "title": "Voglio diventare una... CRM Strategist", "tags": ["interviste","voglio-diventare",], "content": " La figura di CRM Strategist è una delle professioni più richieste nel settore del marketing digitale: saper leggere e interpretare la relazione tra brand e clienti utilizzando diversi strategie e tecnologie partendo dalle campagne di remarketing è parte essenziale di un\u0026rsquo;azienda.\n Ma cosa fa una professionista di questo settore? Come diventare una CRM Strategist? Ce lo racconta Giorgia Molinari, CRM Strategist, Project Manager e archeologa \u0026ldquo;impolverata\u0026rdquo;!\n Descriviti in 100 parole  Ciao! Sono Giorgia e ci ho messo un po’ per capire cosa volessi fare da grande: ho scelto di studiare archeologia alla Sapienza, in particolare ho studiato Archeologia Preistorica lavorando in Siria, Turchia e a Roma.\n Mentre lavoravo come archeologa ho aperto Cronache dal cantiere, una pagina Facebook in cui raccontavo in modo divertente cosa succedeva sui cantieri che seguivo.\n Durante l’università mi sono avvicinata al mondo delle startup grazie ad InnovAction Lab ed ho lavorato nel mondo della comunicazione e degli eventi, come Project Manager e in un’azienda in ambito AI.\n Ho scoperto dell’esistenza dei CRM un po’ per caso ma è stato subito amore.\n All’inizio mi sono sentita fuori posto per non aver studiato materie scientifiche o più attinenti al percorso, in realtà l’archeologia ha migliorato le mie capacità organizzative, di adattamento ai diversi ambienti (sia sociali che geografici) e di trovare soluzioni a problemi complessi.\n In cosa consiste il ruolo di CRM Strategist?   La CRM Strategist è la persona che fa in modo che il CRM sia funzionale alle esigenze dell’azienda che deve usarlo.\n  L’azienda per cui lavoro in questo ruolo è una system integrator e, in particolare, ci occupiamo di integrare HubSpot con i sistemi preesistenti dei clienti.\n Lavoro sia in solitaria che in team: mi confronto con PM del progetto, Business Analyst, sviluppatori e il reparto di design e faccio in modo che le esigenze del cliente siano soddisfatte dal CRM.\n  Sono io ad impostare il CRM ma senza i requisiti raccolti dal PM o senza il confronto con i Business Analyst, il mio lavoro sarebbe incompleto.\n  La parte più divertente del mio lavoro consiste nel trovare soluzioni semplici per le esigenze del cliente; è molto stimolante spingere lo strumento sempre oltre i suoi (ed i miei) limiti e superare ostacoli che qualche mese o settimana prima mi sembravano insormontabili.\n Inoltre, io mi occupo anche della formazione ai clienti; in questo caso la vera sfida è coinvolgerli nel processo di apprendimento e renderli autonomi mostrandogli la facilità d’uso di HubSpot.\n Qual è la soft skill più importante che deve possedere una CRM Strategist?   Sicuramente la capacità di semplificare e di capire le esigenze dei clienti.\n  Spesso arrivano da noi con dei processi molto articolati ed intricati che dobbiamo rendere più snelli e facili da attuare oppure, al contrario, non hanno mai usato un CRM e ne sono spaventati. In questo caso è importante tranquillizzarli e mostrargli come svolgere le diverse azioni in poche mosse.\nAnche la capacità di lavorare in team è importante: dovendo interagire con molte persone, sapersi relazionare nel modo corretto con tutti è fondamentale.\n La maggior parte di noi utilizza i social per parlare dei propri successi, ma la realtà è che siamo quel che siamo grazie al 90% dei nostri errori. Racconta il tuo più grande fallimento da quando lavori nel settore, che però ti ha reso ciò che sei.  Spesso ho commesso errori ma quello che ho sempre ben impresso nella mente è questo: lavoravo come CRM Strategist da poco e stavo seguendo un cliente che ha un e-commerce.\n Avevo impostato un flusso automatico che inviava email di marketing con un grosso sconto ma dovevo mandarlo solo ai nuovi contatti. Quando ho acceso l’automatismo, l’email è partita a tutti i clienti. Parliamo di migliaia di email.\nMe ne sono resa conto poco dopo ma ormai il danno era fatto, mi sentivo veramente sconfortata.\n Il cliente era abbastanza arrabbiato, abbiamo rimediato mandando un’email simpatica dicendo che il caldo estivo e la vicinanza delle ferie ci avevano dato alla testa.\n  Durante le mie formazioni racconto sempre questo errore, per dimostrare ai clienti che si sopravvive!\n  Come fare per diventare una CRM Strategist?  Penso di essere la dimostrazione che, per lavorare come CRM Strategist, non siano necessarie lauree particolari.\n Vorrei dire che una laurea in economia o in materie scientifiche aiutano ma non ci credo per niente!\n Credo sia più importante avere un mindset scientifico e organizzato, tanta curiosità e, soprattutto, voglia di imparare.\n Come ho già detto, ho studiato archeologia ma sono sempre stata molto metodica e organizzata e mi è sempre piaciuto semplificare processi: nella mia bolla è molto famoso uno schema che avevo fatto sull’uso della lavatrice.\n  Era un diagramma di flusso in cui bisognava rispondere solo sì o no alle azioni (tipo “è un capo in cotone?”, “è colorato?”\u0026hellip;) per trovare il programma, la temperatura ed i detergenti da utilizzare! Zero stress, solo domande a cui rispondere sì/no.\n  Ecco, questo sicuramente mi ha aiutata molto nel capire le logiche di funzionamento di HubSpot!\n Ovviamente certificazioni specifiche del CRM che si usa sono utili, così come la pratica costante e quotidiana. Le certificazioni aiutano nella ricerca di lavoro e a testimoniare che sai fare qualcosa ma credo siano un punto di partenza, più che un traguardo finale.\n Parlando di successi, qual è il tuo prossimo obiettivo? Quale ruolo vorresti ricoprire entro i prossimi 3 anni?  In azienda, sono l’unica ad occuparsi della formazione ai clienti. Mi piacerebbe far crescere almeno un’altra persona in questo ruolo così da poter dividere e condividere con qualcuno questo aspetto del lavoro.\n Vorrei, inoltre, mettermi alla prova di nuovo come Project Manager, perché penso sia un’attività stimolante ed in cui potrei offrire valore.\n Da CRM Strategist ho un quadro molto chiaro di una parte del progetto, mi piacerebbe molto averne una visione completa e sistemica. È una sfida che mi sento pronta a cogliere.\n  E poi, secondo me, la PM non è altro che un’archeologa meno impolverata, per cui mi piacerebbe molto tornare “sul campo” in questa veste!\n  Conosci il tema gender gap in ambito STEM? Se sì, come fare per superarlo?  Credo che il gender gap in ambito STEM sia una piaga che ci affligge. Secondo i dati dell’Osservatorio Talents Venture e STEAMiamoci di Assolombarda, la percentuale di donne che frequenta corsi STEM in Italia è pari a circa il 37%, le ragazze iscritte a corsi STEM presentano risultati accademici migliori ma tassi di occupazione e retribuzione più bassi rispetto agli uomini.\n I dati del report UNESCO 2021 non sono più confortanti.\n Il problema è sicuramente comune a tutti i Paesi del Mondo, è culturale e strettamente connesso al patriarcato, che instrada le donne fin da bambine verso la cura familiare e i bambini verso giochi più tecnici e scientifici.\n  Lo scautismo mi ha insegnato che l’esempio è un’arma potentissima che abbiamo.\n  E credo davvero che dando sempre più spazio alle donne che lavorano nelle materie STEM e che ricoprono posizioni di comando nelle aziende, così come nella politica, possiamo veramente fare la differenza ed offrire un modello di riferimento diverso.\n Portare questi temi nelle scuole, negli open day universitari, negli eventi per le studentesse e gli studenti di ogni ordine e grado è sicuramente utile.\n Ho molta fiducia nei giovani e nelle giovanissime ma credo pure che si debbano educare gli adulti, che sono le persone che prendono le decisioni.\n Nel mio piccolo quando organizzo eventi, cerco sempre di mantenere paritario il rapporto tra i sessi delle persone ospiti; inoltre, mi impegno a proporre attività, giochi e regali scientifici alle bambine con cui entro in contatto.\n Nel 2020, inoltre, con tre amiche ho fondato BeGet, un’APS che si prefigge di educare su temi digitali in modo semplice, attraverso corsi ed eventi. Ci rivolgiamo a entrambi i sessi ma il nostro pubblico è prevalentemente femminile. Da poco abbiamo lanciato anche JustBe! un podcast su questi temi. Seguici!\n Contatti Profilo LinkedIn Podcast JustBe - la puntata sul metaverso è meta-fantastica!  ", "url": "https:\/\/theredcode.it\/interviste\/crm-strategist\/" }, "https:\/\/theredcode.it\/what\/differenze-tra-keystore-e-truststore\/": { "title": "Differenze tra keystore e truststore", "tags": ["java",], "content": " Keystore e Truststore sono entrambi importanti ed essenziali per la comunicazione tramite un certificato SSL.\n Entrambi sono molto simili in termini di costrutto e struttura, poiché entrambi sono gestiti da uno strumento chiamato keytool, ma sono anche molto diversi\u0026hellip; In cosa?\n Vediamo le differenze tra keystore e truststore!\n Keystore  Il keystore viene utilizzato per archiviare chiavi private e certificati di identità che un programma specifico dovrebbe presentare a entrambe le parti (server o client) per la verifica.\n In altre parole, il keystore contiene i certificati di identificazione che ci identificano e sono informazioni private e sensibili, come la coppia chiave pubblica e privata.\n Il keystore viene utilizzato dal KeyManager di Java per inviare le credenziali di autenticazione ad un host remoto per autenticarsi durante un processo di handshake.\n Il TrustManager di Java verifica che le credenziali condivise dal server corrispondano con quelle presenti nel truststore e in tal caso consente la connessione.\n Truststore  Il truststore viene utilizzato per memorizzare i certificati forniti dalle Certified Authorities (CA) che verificano il certificato presentato dal server in una connessione SSL e ne autorizzano la comunicazione sicura.\n In altre parole, il truststore contiene certificati che identificano gli altri e sono informazioni non private, ma di pubblico dominio.\n Differenze  Entrambi sono genericamente resi disponibili tramite file in formato .jks (ossia Java Key Store) ed entrambi vengono aggiunti all\u0026rsquo;applicazione Java tramite delle opzioni Java come mostrato di seguito:\n javax.net.ssl.trustStore # specifica il path del trustStore javax.net.ssl.keyStore # specifica il path del keyStore Djavax.net.ssl.trustStorePassword # specifica la password del trustStore Djavax.net.ssl.keyStorePassword # specifica la password del keyStore  A parte ciò, le principali differenze possono essere riassunte nello schema di seguito:\n  Truststore Keystore TrustStore memorizza le credenziali di altri. Keystore memorizza le tue credenziali, come chiavi private o certificati di identità. La configurazione di TrustStore è necessaria per la corretta connessione lato client. Il Keystore è necessario quando si configura la comunicazione client-server. Un TrustStore contiene i certificati dei sistemi esterni di cui ti fidi. Un KeyStore contiene i certificati della tua applicazione.  Esempio  Se lavoriamo con un sistema A che funge da sistema di autenticazione, questo lavorerà come fosse un componente client.\n Se un sistema esterno B, quindi un server, avrà bisogno di autenticarsi, potrà inviare il proprio keystore al sistema A, il quale verificherà che le credenziali condivise dal server corrispondano con quelle che possiede il TrustManager e in tal caso consentità la comunicazione.\n Come accorgersi che manca un certificato all\u0026rsquo;applicazione? Se ad esempio riscontriamo un errore come quello riportato di seguito, la nostra applicazione con tutta probabilità non riesce ad autenticare il sistema con cui sta cercando di comunicare:\n {\u0026#34;error.stacktrace\u0026#34;:\u0026#34;s.s.p.c.SunCertPathBuilderException: unable to find valid certification path to requested target\\nat s.s.p.c.SunCertPathBuilder.build(SunCertPathBuilder.java:141)\\nat s.s.p.c.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:126)\\nat j.s.c.CertPathBuilder.build(CertPathBuilder.java:280)\\nat s.s.v.PKIXValidator.doBuild(PKIXValidator.java:445)\\n... 131 common frames omitted\\nWrapped...  In questo caso, è necessario importare il truststore all\u0026rsquo;interno della nostra applicazione!\n Se invece la comunicazione deve avvenire in mutua autenticazione, è allora necessario fornire sia keystore che truststore alla nostra applicazione per far sì che la comunicazione avvenga correttamente.\n Generare keystore e truststore  Java ci mette a disposizione uno strumento chiamato keytool per la gestione dei keystore e la generazione di certificati. Per generare i due, seguiamo i seguenti step:\n Con il seguente comando, andiamo a generare un keystore e salvarlo nel file my-keystore.jks Per il certificato, identificato con l’alias theredcode.it è utilizzato l’algoritmo RSA con chiavi di lunghezza 2048; è possibile anche fornire una password che ne consenta maggior sicurezza.\n keytool -genkey -alias theredcode.it -keyalg RSA -keystore my-keystore.jks -keysize 2048  Per creare il truststore, dal keystore estraiamo il certificato che conterrà esclusivamente la chiave pubblica e lo facciamo con il seguente comando:\n keytool -export -alias theredcode.it -file my-cert.crt -keystore my-keystore.jks -storepass changeme  Generiamo il truststore dove inserire il certificato e lo facciamo creando un keystore vuoto eliminando il certificato al suo interno con i seguenti comandi:\n keytool -genkey -alias theredcode-alias -keystore theredcode-truststore.jks keytool -delete -alias theredcode-alias -keystore theredcode-truststore.jks  Inseriamo il certificato pubblico estratto in precedenza e abbiamo fatto!\n keytool -import -trustcacerts -alias theredcode.it -file my-cert.crt -keystore theredcode-truststore.jks  Comandi utili  Come verifico le informazioni presenti all\u0026rsquo;interno di un certificato o di un keystore?\n keytool -printcert -v -file my-cert.crt # controllare un certificato stand-alone keytool -list -v -keystore keystore.jks # controllare quali certificati sono presenti nel keystore keytool -list -v -keystore keystore.jks -storepass changeme # come sopra, ma memorizza la password  E per elencare tutti i CA certs presenti?\n keytool -list -v -keystore $JAVA_HOME/jre/lib/security/cacerts ", "url": "https:\/\/theredcode.it\/what\/differenze-tra-keystore-e-truststore\/" }, "https:\/\/theredcode.it\/tags\/java\/": { "title": "java", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/tags\/java\/" }, "https:\/\/theredcode.it\/categories\/java\/": { "title": "java", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/categories\/java\/" }, "https:\/\/theredcode.it\/interviste\/cloud-solution-architect\/": { "title": "Voglio diventare una... Cloud Solution Architect", "tags": ["interviste","voglio-diventare",], "content": "Il cloud, o cloud computing, negli ultimi anni è un termine che è spopolato moltissimo, e così lo sono le nuovi professioni in questo campo: ma cosa fa una Cloud Solution Architect? Come diventarlo?\n Ce lo racconta Najla Said!\n Descriviti in 100 parole.  Sono una donna con interessi molto trasversali, e credo che questo sia il mio più grande punto di forza. Sono molto appassionata di arte e letteratura, leggo molto e amo la musica e la danza.\n Mi interessano tanto, però, anche la scienza e la tecnologia, e diciamo che sono abituata in genere a ragionare in modo analitico, anche nel quotidiano.\n Il mio percorso professionale ricalca questa caratteristica, ho studiato al liceo classico, ma poi mi sono laureata e dottorata in astrofisica, ed alla fine sono arrivata a lavorare nel mondo dell’informatica, che in realtà conosco fin da quando ero bambina, grazie a mio padre ed ai suoi Commodore 64.\n  Sapevi che si può installare un emulatore Commodore 64 su Ubuntu? Trovi qui i video per farlo!\n  In cosa consiste il tuo ruolo di Cloud Solution Architect?  Il mio lavoro consiste nel disegnare sistemi informatici utilizzando i servizi che sono forniti dai diversi Cloud provider.\n  Nella pratica è un lavoro di continua analisi e ricerca.\n  In primis si analizzano i requisiti del sistema che si vuole realizzare, e per farlo si lavora in gruppo, riunendo utenti, architetti, specialisti e chiunque possa chiarire cosa ci si aspetta da un sistema.\n Poi serve trovare soluzioni, quindi studiare quali servizi o componenti rispondano ai requisiti, e, soprattutto, capire come integrare il tutto nel disegno finale.\n Sembra un percorso lineare, ma vi assicuro che serve spesso tornare indietro a ridefinire o smussare i requisiti per far sì che il sistema non sia solo fantastico, ma che funzioni anche!\n Qual è la soft skill più importante che deve possedere una Cloud Solution Architect?  Le soft skill essenziali nel mio lavoro sono due: il pensiero critico, ovvero la capacità di mettere sempre tutto in discussione, senza la quale sarebbe veramente difficile realizzare anche il progetto più semplice.\n La seconda è l’abilità comunicativa, sia in termini di ascolto (per raccogliere i requisiti), che in termini di esposizione (per chiarire cosa è realizzabile e cosa no).\n  La maggior parte di noi utilizza i social per parlare dei propri successi, ma la realtà è che siamo quel che siamo grazie al 90% dei nostri errori. Racconta il tuo più grande fallimento da quando lavori nel settore, che però ti ha reso ciò che sei.  Dal mio più grande fallimento ho imparato ad accettare gli errori, essenziale per mettersi in gioco ed affrontare le sfide. Stavamo gestendo una situazione di emergenza con un cliente, tra nottate, sveglie all’alba e agitazione generale.\n  Mentre cercavo di aiutare, ho per sbaglio distrutto un componente essenziale. Dopo il panico iniziale, mi sono messa a lavoro e sono riuscita a ricrearlo in tempo record. Ad emergenza finita, riunione con il CTO del cliente: io mi aspettavo uno ‘shampoo’, ma lui fu molto gentile e disse “chi lavora sbaglia pure”.\n  Come fare per diventare una Cloud Solution Architect?  Per diventare architetto serve avere una gran voglia di imparare, sempre. L’informatica cambia ad una velocità impressionante, cambiano le richieste, le tecnologie, i paradigmi. Le certificazioni sono importanti, ma la cosa principale è sporcarsi le mani.\n  Mi piace sempre seguire da vicino la realizzazione dei sistemi che disegno: lì capisco cosa non devo dare per scontato, dove possono sorgere problemi, quali cose non rifarò e quali invece saranno le mie “best practice”.\n  Credo che implementare un sistema sia l’unico vero modo per imparare a disegnarlo.\n  Parlando di successi, qual è il tuo prossimo obiettivo? Quale ruolo vorresti ricoprire entro i prossimi 3 anni?  Ho appena cambiato lavoro, e l’ho fatto per inserirmi in un campo che credo stia lanciando una sfida alle architetture informatiche, per gestire e valorizzare l’immensa mole di dati a disposizione.\n L’obiettivo è quello di diventare una specialista nel settore, per poi cercare di dare il mio contributo. Quindi, tra tre anni mi vedo in questo stesso ruolo, ma più in gamba!\n Conosci il tema gender gap in ambito STEM? Se sì, come fare per superarlo?  Sono fortunata, ho alle spalle una famiglia che mi ha cresciuto con l’idea che potevo fare tutto, che il mio genere non rappresentava un limite.\n Poi ho avuto la fortuna di studiare e lavorare con molte donne, il che mi ha quasi cullato nell’illusione che la questione fosse risolta.\n Purtroppo, so bene che non è così, così come non lo è per molti altri gap, di altri generi che non sono uomo o donna, di culture e provenienze diverse, di estrazioni economico-sociali diverse (durante la mia laurea triennale un professore mi disse ‘l’università non è pensata per chi lavora’).\n Sono contenta delle varie iniziative che si portano avanti per cercare di risanare queste storture, partecipo sempre volentieri, ma sono anche convinta che sarà necessario affrontare una vera rivoluzione culturale per raggiungere l’obiettivo.\n Ho molta fiducia nelle nuove generazioni, mi sembrano incredibilmente più in gamba di noi da questo punto di vista, e mi auguro davvero che possano fare la differenza per costruire un mondo che non ha bisogno di istituire quote per garantire a tutti gli stessi diritti e le stesse opportunità.\n", "url": "https:\/\/theredcode.it\/interviste\/cloud-solution-architect\/" }, "https:\/\/theredcode.it\/intelligenza-artificiale\/tipologie-di-machine-learning\/": { "title": "Tipologie di Machine Learning", "tags": ["apogeo","intelligenza-artificiale","machine-learning",], "content": " Spesso il machine learning viene accostato a della \u0026ldquo;magia\u0026rdquo; o addirittura \u0026ldquo;alchimia\u0026rdquo;: un articolo molto interessante è quello pubblicato su Different Glasses che riporto qui, per raccontare l\u0026rsquo;accostamento di queste due materie\u0026hellip;\n Ma torniamo a noi: quali sono le tipologie di machine learning che esistono? Quali sono le differenze e quale adottare a seconda del problema?\n Intro  L\u0026rsquo;abbondanza di dati ha fatto sì che il machine learning sembri la soluzione ad ogni nostro problema: la realtà è che questo campo è una branca dell\u0026rsquo;intelligenza artificiale che sfrutta i dati a disposizione per effettuare delle previsioni.\n E, come tali, non sono da confondersi con le predizioni: il machine learning non è astrologia, né tantomeno alchimia!\n Al contrario dell\u0026rsquo;approccio manuale, il machine learning ci permette di avere un\u0026rsquo;alternativa che vada ad analizzare i dati e individuare dei modelli per costruire una generalizzazione per la rappresentazione dei dati.\n  Ma quali tipi di machine learning esistono e come possiamo creare una classificazione tra i vari approcci?\n  In questo campo, si ha una divisione tra apprendimento supervisionato, non supervisionato e apprendimento rafforzato.\n Apprendimento supervisionato  Cos\u0026rsquo;è  Come facilmente intuibile dal termine, quello supervisionato prevede un controllo sui dati: in effetti, con questa tipologia di problemi andiamo a trovare un modello che, grazie a dei dati di addestramento, riesca ad avere già un set di soluzioni da cui attingere.\nEsempio di dataset per apprendimento supervisionato: in questo caso, abbiamo dei film con relativi generi, che possono essere usati per classificarne di altri\n Algoritmi  L\u0026rsquo;esempio più semplice è quello della classificazione: in questo caso, andiamo ad associare ad ogni input una classe prendendo come riferimento le etichette fornite nel dataset.\n Questo significa che, come visto nell\u0026rsquo;esempio in precedenza, se ho dei film e devo associare loro un genere, posso pensare ad un algoritmo che compia un\u0026rsquo;azione di classificazione.\n Questo andrà a prendere gli esempi nel dataset di addestramento, le relative etichette, e cercare di trovare un modello che sia in grado di assegnare delle etichette a dei dati mai visti.\n  E con Python, quali sono gli algoritmi che abbiamo a disposizione?\n  Nel caso di scikit-learn, esistono diversi algoritmi che abbiamo a disposizione: regressione logistica, lasso, classificazione, SVM, e via dicendo (qui l\u0026rsquo;elenco completo).\n Tensorflow anche offre una serie di algoritmi supervisionati; alcuni di questi vengono riportati di seguito:\n Linear regression: tf.estimator.LinearRegressor Classification:tf.estimator.LinearClassifier Deep learning classification: tf.estimator.DNNClassifier Deep learning wipe and deep: tf.estimator.DNNLinearCombinedClassifier Booster tree regression: tf.estimator.BoostedTreesRegressor Boosted tree classification: tf.estimator.BoostedTreesClassifier  Apprendimento per rinforzo  Cos\u0026rsquo;è  Con questo tipo di apprendimento, cerchiamo di far sì che l\u0026rsquo;agente (ossia il sistema) sia in grado di imparare grazie a dei premi (o talvolta delle penalizzazioni).\n L\u0026rsquo;obiettivo è quello di far sì che la ricompensa arrivi ogni qualvolta l\u0026rsquo;agente riesca ad ottenere un buon risultato: possiamo pensare all\u0026rsquo;apprendimento rafforzato come un esempio di apprendimento supervisionato, dove la ricompensa misura la qualità, e non l\u0026rsquo;etichetta in sé stessa.\n Esempio del funzionamento dell\u0026rsquo;apprendimento per rinforzo\n Algoritmi  L\u0026rsquo;esempio per eccellenza è il gioco degli scacchi: in questo caso, l\u0026rsquo;agente deve decidere quale sarà la prossima mossa a seconda dello stato della scacchiera, e la ricompensa sarà definita in base alla vittoria o alla sconfitta del sistema.\n Apprendimento non supervisionato  Cos\u0026rsquo;è  Al contrario dei precedenti approcci, nell\u0026rsquo;apprendimento non supervisionato non abbiamo in anticipo una risposta giusta, né abbiamo una ricompensa per l\u0026rsquo;agente.\n In questo caso, il sistema cerca di misurare delle similarità o delle differenze tra i dati forniti in input per cercare un modello che riesca a descrivere questi dati.\n Algoritmi  Un esempio è il caso in cui cerchiamo di organizzare una serie di informazioni di diversi gruppi, non avendo però a priori delle categorie da assegnargli: in questo caso, si parla di clustering.\n Anche in questo caso, vediamo cosa ci offrono le librerie di Python: per quanto riguarda scikit-learn, esisono moltissimi algoritmi per il clustering o la misura della covarianza (qui la documentazione).\n Tensorflow e keras su questo però hanno il primato: queste librerie nascono proprio per lavorare su dati non strutturati e non etichettati, e hanno aperto le porte al mondo del deep learning.\nDa non sottovalutare il mondo delle reti neurali: questo tipo di algoritmi lavora bene in entrambe le situazioni, anche se richiedono del lavoro \u0026ldquo;in più\u0026rdquo;\u0026hellip; ma ne parleremo nella prossima puntata!\n  Se hai bisogno di uno schema veloce, scarica questo cheatsheet!\n   ", "url": "https:\/\/theredcode.it\/intelligenza-artificiale\/tipologie-di-machine-learning\/" }, "https:\/\/theredcode.it\/ionic\/aprire-unapp-esterna-con-ionic\/": { "title": "Aprire un\u0027app esterna con Ionic", "tags": ["ionic",], "content": "Come integrare la tua app con Facebook, Twitter e Whatsapp e altro ancora? Vediamo come aprire un\u0026rsquo;app esterna con Ionic e visualizzare una pagina o un profilo specifico sfruttando Angular come framework di base!\n Intro  Le app ibride devono interfacciarsi sempre più spesso con app esterne, tra cui molte app social come Facebook, Twitter, Instagram, o anche app per la navigazione e per il monitoraggio dell’attività fisica.\n Ionic mette a disposizione 2 plugin che servono allo scopo: vediamo come verificare se un\u0026rsquo;app esiste all\u0026rsquo;interno del dispositivo e come aprirla su una pagina specifica.\n Lo schema utilizzato per tutte e tre le app è il seguente:\n- Verifichiamo che tipo di dispositivo utilizza l\u0026rsquo;app, se Android, iOS o Web, utilizzando il servizio Platform;\n- Recuperiamo il profilo/la pagina che ci interessa dai social e ne prendiamo un identificativo;\n- Se siamo su un dispositivo mobile, andiamo a richiamare l\u0026rsquo;app utilizzando un URL specifico che ci rimanda al contenuto desiderato sfruttando un deep link e i plugin AppAvailability e InAppBrowser.\n Facebook  Per questo caso d\u0026rsquo;uso, proveremo ad aprire una pagina pubblica: abbiamo bisogno di recuperare l\u0026rsquo;ID della pagina di interesse. Se non sai come recuperare l\u0026rsquo;ID della tua pagina, qui trovi le informazioni di cui hai bisogno.\n All\u0026rsquo;interno della pagina .html, andiamo a creare un pulsante che, una volta cliccato dall\u0026rsquo;utente, richiami una funzione chiamata openFacebook():\n \u0026lt;p\u0026gt;Aprire un\u0026#39;app esterna: Facebook\u0026lt;/p\u0026gt; \u0026lt;ion-button (click)=\u0026#34;openFacebook(\u0026#39;100437145496561\u0026#39;)\u0026#34; expand=\u0026#34;block\u0026#34;\u0026gt; \u0026lt;ion-icon name=\u0026#34;logo-facebook\u0026#34;\u0026gt; Facebook \u0026lt;/ion-icon\u0026gt; \u0026lt;/ion-button\u0026gt;  All\u0026rsquo;interno della funzione, andremo a recuperare l\u0026rsquo;ID passato come parametro e faremo due controlli diversi: se il dispositivo ha un sistema iOS, andremo a utilizzare come prefisso del nostro URL fb://. Nel caso in cui l\u0026rsquo;app sia disponibile (usiamo AppAvailability per farlo), allora andiamo a richiamare l\u0026rsquo;app sfruttando il pattern indicato all\u0026rsquo;interno della funzione create del plugin InAppBrowser.\n Stesso vale per Android: i due utilizzano la stessa strategia, ma hanno bisogno di due pattern diversi per aprire l\u0026rsquo;app: mentre iOS usa il nome dell\u0026rsquo;app (in questo caso, è abbreviato), per Android è necessario utilizzare il nome del package.\n  Se non sai come recuperare il nome del package, è sufficiente recuperare l\u0026rsquo;URL del Play Store dell\u0026rsquo;app desiderata e leggere nella barra di ricerca quello indicato come id.\nEsempio: https://play.google.com/store/apps/details?id=com.facebook.katana\u0026amp;hl=it\u0026amp;gl=US\n   openFacebook(id) { let app; if(this.platform.is(\u0026#39;ios\u0026#39;)) { app = \u0026#39;fb://\u0026#39;; this.appAvailability.check(app).then( (yes: boolean) =\u0026gt; { console.log(app + \u0026#39; is available\u0026#39;); // @ts-ignore const browser: InAppBrowser = this.inAppBrowser.create(\u0026#39;fb://profile/\u0026#39; + id, \u0026#39;_system\u0026#39;); }, (no: boolean) =\u0026gt; { // @ts-ignore const browser: InAppBrowser = this.inAppBrowser.create(\u0026#39;https://facebook.com/\u0026#39; + id, \u0026#39;_system\u0026#39;); console.log(browser); } ); } else if(this.platform.is(\u0026#39;android\u0026#39;)) { app = \u0026#39;com.facebook.katana\u0026#39;; this.appAvailability.check(app).then( (yes: boolean) =\u0026gt; { console.log(app + \u0026#39; is available on Android\u0026#39;); // @ts-ignore const browser: InAppBrowser = this.inAppBrowser.create(\u0026#39;fb://page/\u0026#39; + id, \u0026#39;_system\u0026#39;); }, (no: boolean) =\u0026gt; { // @ts-ignore const browser: InAppBrowser = this.inAppBrowser.create(\u0026#39;https://facebook.com/\u0026#39; + id, \u0026#39;_system\u0026#39;); console.log(browser); } ); } else { // @ts-ignore const browser: InAppBrowser = this.inAppBrowser.create(\u0026#39;https://facebook.com/\u0026#39; + name, \u0026#39;_system\u0026#39;); return; } }  Twitter  Il meccanismo è piuttosto simile, ma Twitter utilizza il nome del profilo che vogliamo aprire: creiamo quindi un pulsante nella pagina .html che l\u0026rsquo;utente possa cliccare e richiamiamo la funzione per aprire l\u0026rsquo;app di Twitter:\n \u0026lt;p\u0026gt;Aprire un\u0026#39;app esterna: Twitter\u0026lt;/p\u0026gt; \u0026lt;ion-button expand=\u0026#34;block\u0026#34; (click)=\u0026#34;openTwitter(\u0026#39;theredcode_it\u0026#39;)\u0026#34;\u0026gt; \u0026lt;ion-icon name=\u0026#34;logo-twitter\u0026#34;\u0026gt; Twitter \u0026lt;/ion-icon\u0026gt; \u0026lt;/ion-button\u0026gt;  Come fatto in precedenza, abbiamo prima un controllo sul tipo di sistema del dispositivo: verifichiamo se è un dispositivo iOS o Android e quindi utilizziamo il pattern specifico; altrimenti, apriamo direttamente il browser sul profilo!\n openTwitter(name) { let app; if(this.platform.is(\u0026#39;ios\u0026#39;)) { app = \u0026#39;twitter://\u0026#39;; } else if(this.platform.is(\u0026#39;android\u0026#39;)) { app = \u0026#39;com.twitter.android\u0026#39;; } else { // @ts-ignore const browser: InAppBrowser = this.inAppBrowser.create(\u0026#39;https://twitter.com/\u0026#39; + name, \u0026#39;_system\u0026#39;); return; } this.appAvailability.check(app).then( (yes: boolean) =\u0026gt; { console.log(app + \u0026#39; is available\u0026#39;); // @ts-ignore const browser: InAppBrowser = this.inAppBrowser.create(\u0026#39;twitter://user?screen_name=\u0026#39; + name, \u0026#39;_system\u0026#39;); }, (no: boolean) =\u0026gt; { // @ts-ignore const browser: InAppBrowser = this.inAppBrowser.create(\u0026#39;https://twitter.com/\u0026#39; + name, \u0026#39;_system\u0026#39;); } ); }   Whatsapp  Questo altro esempio mostra come aprire Whatsapp Web (se si opera da Desktop), oppure l\u0026rsquo;app sul dispositivo nel caso di iOS e Android. Come sempre, creiamo un pulsante nella pagina .html per richiamare la funzione, alla quale passeremo il numero di telefono compreso di prefisso internazionale:\n \u0026lt;p\u0026gt;Aprire un\u0026#39;app esterna: Whatsapp\u0026lt;/p\u0026gt; \u0026lt;ion-button expand=\u0026#34;block\u0026#34; (click)=\u0026#34;openWhatsapp(\u0026#39;+393492394391\u0026#39;)\u0026#34;\u0026gt; \u0026lt;ion-icon name=\u0026#34;logo-whatsapp\u0026#34;\u0026gt; Whatsapp \u0026lt;/ion-icon\u0026gt; \u0026lt;/ion-button\u0026gt;  Se vogliamo aprire su un browser l\u0026rsquo;app, è sufficiente utilizzare l\u0026rsquo;URL https://wa.me e indicare il numero di telefono. Come fatto anche per gli altri due esempi, per iOS indichiamo il nome dell\u0026rsquo;app e per Android indichiamo l\u0026rsquo;id recuperato dal Play Store; a questo punto, ognuno dei dispositivi è configurato per aprire l\u0026rsquo;app tramite InAppBrowser!\n  openWhatsapp(name) { let app; if(this.platform.is(\u0026#39;ios\u0026#39;)) { app = \u0026#39;whatsapp://\u0026#39;; } else if(this.platform.is(\u0026#39;android\u0026#39;)) { app = \u0026#39;com.whatsapp\u0026#39;; } else { // @ts-ignore const browser: InAppBrowser = this.inAppBrowser.create(\u0026#39;https://wa.me/\u0026#39; + name, \u0026#39;_system\u0026#39;); return; } this.appAvailability.check(app).then( (yes: boolean) =\u0026gt; { console.log(app + \u0026#39; is available\u0026#39;); // @ts-ignore const browser: InAppBrowser = this.inAppBrowser.create(\u0026#39;whatsapp://send?phone=\u0026#39; + name, \u0026#39;_system\u0026#39;); }, (no: boolean) =\u0026gt; { // @ts-ignore const browser: InAppBrowser = this.inAppBrowser.create(\u0026#39;https://wa.me/\u0026#39; + name, \u0026#39;_system\u0026#39;); } ); }  Demo di come aprire un\u0026rsquo;app esterna con Ionic\n Risorse utili Compatibilità: Ionic con Angular e Node.js ", "url": "https:\/\/theredcode.it\/ionic\/aprire-unapp-esterna-con-ionic\/" }, "https:\/\/theredcode.it\/design-dev\/le-basi-di-scrum\/": { "title": "Le basi di Scrum", "tags": ["scrum","design-dev",], "content": " Come promesso, rieccoci con una nuova puntata a tema Dev\u0026amp;Design in cui parleremo di Scrum!\n Intro  Il termine scrum, per chi conosce il mondo del rugby, potrebbe rimandare subito a una mischia, giocatori che si prendono a spallate, si buttano l\u0026rsquo;uno addosso all\u0026rsquo;altro passandosi una palla..\n Nulla di tutto questo in realtà!\n Infatti parliamo di Scrum non riferendoci ad una disciplina sportiva, ma in quanto implementazione della metodologia Agile di cui abbiamo parlato nel precedente articolo.\n  Ma quando è nata questa tecnica?\n  Facciamo un piccolo passo indietro e parliamo del modello RUP (Rational Unified Process) che già prima della nascita di Scrum si avvicinava molto a quella che è una caratteristica fondamentale della metodologia Agile, ossia l\u0026rsquo;approccio iterativo-incrementale.\n Questa era infatti suddivisa in quattro fasi:\n Fase iniziale, o anche inception phase Fase di elaborazione, detta anche elaboration phase Fase di costruzione, ossia construction phase Fase di transizione, definita transition phase.  Ogni fase ha un certo insieme di obiettivi e si conclude con la realizzazione di un deliverable (chiamato anche prodotto) di qualche genere.\n Le fasi sono ulteriormente scomposte in iterazioni, ognuna delle quali associata a periodi temporali aventi scadenze precise.\n Ufficialmente nel 2001 nacque Scrum, dalla collaborazione di Ken Schwaber e Jeff Sutherland, i quali seguono da sempre il suo uso all\u0026rsquo;interno di un mondo sempre più complesso.\n Cos\u0026rsquo;è  Arriviamo al sodo, e iniziamo a parlare concretamente di cosa sia Scrum.\n Prima di tutto, è un framework, inteso come un insieme di principi, valori ed elementi da seguire e applicare per consentire a persone, team e organizzazioni di generare valore attraverso soluzioni adattive per problemi complessi.\n In parole povere non è prescrittivo, non esiste un unico modo di applicare Scrum ma per far sì che abbia successo in una grande organizzazione è assolutamente necessario seguire le regole del gioco, sta poi al team che ne fa uso, scegliere come sfruttarle al meglio in base alle esigenze; ciò che conta è non modificare nessuno dei suoi componenti.\n Immaginate ad esempio di utilizzare Angular come framework per il front-end. Potete sfruttarlo per sviluppare in mille e più modi differenti il vostro applicativo?\n Assolutamente SI. Potete modificarne la struttura e le regole interne? Decisamente no! Non sarebbe più lo stesso e perderebbe la sua essenza.\n  Empirismo e pensiero Lean sono alla base di questo framework.\n  L\u0026rsquo;empirismo afferma che la conoscenza derivi dall\u0026rsquo;esperienza e dal prendere decisioni basate su ciò che si è osservato.\n Il pensiero Lean riduce gli sprechi e si focalizza su ciò che davvero è essenziale e di valore.\n Non meno importante: Scrum si basa sulla intelligenza delle persone che ne fanno uso, mettendo al centro di tutto le persone stesse, intese come individui di valore e con tutte le capacità necessarie a portare a termine gli obiettivi, collaborando come un vero e indissolubile team di professionisti.\n Pilastri  Ma quali sono i pilastri empirici di Scrum? Diamogli un\u0026rsquo;occhiata più da vicino!\n Trasparenza  A quanti di voi è capitato di dover lavorare in una condizione di non chiarezza su ciò che fosse necessario fare?\n Immagino non pochi!\n Scrum fornisce una soluzione a situazioni di questo tipo grazie proprio al primo dei suoi tre pilastri fondamentali, ossia la trasparenza; grazie a questa, il processo ed il lavoro emergenti devono essere chiari e visibili sia a tutti coloro che svolgono il lavoro che a quelli che ne beneficiano.\n Applicare Scrum significa infatti che le decisioni importanti sono basate sulla PERCEZIONE dello stato dei suoi artefatti formali (hakuna matata, parleremo in un articolo dedicato anche di questo) e più in generale del lavoro svolto e futuro.\n  Un basso livello di trasparenza può portare a decisioni che riducono il valore e aumentano pericolosamente i rischi.\n  Elemento chiave della trasparenza è la comunicazione tra tutte le parti interessate.\n Chiunque sia coinvolto nelle varie attività di realizzazione di un prodotto, che sia il business, il cliente finale o il team di sviluppo, deve comunicare chiaramente quali sono gli obiettivi raggiunti e da raggiungere.\n Solo in questo modo sarà possibile raggiungere quel livello di coordinazione tale da poter garantire il successo.\n La trasparenza permette l’ispezione. L’ispezione senza trasparenza è fuorviante e genera spreco.\n Ispezione  In questo contesto non parliamo di un\u0026rsquo;ispezione da parte di un ispettore o di un auditor, ma un\u0026rsquo;ispezione da parte di tutti i membri dello Scrum Team.\n L\u0026rsquo;ispezione può essere eseguita per il prodotto, i processi, gli aspetti delle persone, le pratiche e i miglioramenti continui.\n Ad esempio, il team mostra il prodotto al cliente in modo aperto e trasparente alla fine di ogni Sprint per raccogliere feedback preziosi.\n Se il cliente modifica i requisiti durante l\u0026rsquo;ispezione, il team prontamente si adegua, sfruttando questa opportunità per collaborare con il cliente per chiarire i requisiti e testare la nuova ipotesi.\n Parlando proprio di questa reazione del team a eventuali cambiamenti di rotta, veniamo a quello che è il terzo pilastro..\n Adattamento  L\u0026rsquo;adattamento riguarda il miglioramento continuo, la capacità di adattamento in base ai risultati dell\u0026rsquo;ispezione.\nTutti nell\u0026rsquo;organizzazione devono porsi regolarmente questa domanda: stiamo meglio di ieri?\n E se la risposta è no, chiunque deve impegnarsi attivamente e in collaborazione con il resto del team a far sì che gli sviluppi seguano la giusta direzione.\nSe qualunque aspetto di un processo devia al di fuori dei limiti accettabili o se il prodotto risultante non rispetta il desiderata, il processo e il valore prodotto devono essere adattati il più velocemente possibile per ridurre al minimo ulteriori deviazioni, ricordando sempre che più l\u0026rsquo;esperienza di un team aumenta su un dominio, maggiore sarà la fiducia generata e la capacità di adattamento di ogni singolo componente del team stesso.\n In questo articolo abbiamo parlato brevemente di cosa sia Scrum e dei pilastri empirici; la realtà è che ci sarebbe tanto da dire, ma ci arriveremo\u0026hellip; e di quali siano i suoi valori, ne parleremo nella prossima puntata!\n Risorse utili Sito ufficiale Scrum.org ", "url": "https:\/\/theredcode.it\/design-dev\/le-basi-di-scrum\/" }, "https:\/\/theredcode.it\/interviste\/ai-audio-engineer\/": { "title": "Voglio diventare un... AI Audio Engineer", "tags": ["interviste","voglio-diventare",], "content": "Per chi lavora nel settore AI, Valerio Velardo è un pilastro: da anni cura un canale YouTube in cui racconta il suo lavoro in modo estremamente semplice e pratico, e soprattutto comprensibile anche per chi si sta iniziando a formare.\n Il suo campo di specializzazione è l\u0026rsquo;audio, e non a caso si definisce un AI Audio Engineer: ma come diventarlo?\n Oggi sarà proprio lui a raccontarcelo attraverso un\u0026rsquo;intervista che parla del suo lavoro e soprattutto dei progetti che sta portando avanti grazie alla sua community!\n Descriviti in 100 parole.  Ciao! Sono un consulente che si occupa di AI applicata all’audio e ho scelto di lavorare in questo campo, in particolare la musica, perché ho studiato come pianista, direttore d’orchestra e compositore.\n  La musica è sempre stata la mia passione; in più, programmo da quando sono teenager e mettere insieme queste due passioni è stata l’evoluzione più naturale.\n  Ho seguito un percorso classico, studiando al conservatorio e poi ho preso un dottorato all\u0026rsquo;Università di Huddersfield in Intelligenza Artificiale applicata alla musica, studiando come la musica si evolve nella società (qui l\u0026rsquo;elenco delle pubblicazioni e dei talk).\n  In cosa consiste il ruolo di AI Audio Engineer?  Attualmente collaboro con delle aziende per attività di ricerca o di definizione di strategie su progetti che prevedano l\u0026rsquo;utilizzo di tecniche di AI in ambito multimediale.\n Mi occupo anche di talent-sourcing: questa attività mi permette di mettere in contatto il giusto professionista con il giusto cliente e mettere a disposizione le sue competenze per portare avanti attività di diverso genere.\n Questo tipo di ricerca la porto avanti grazie alla mia community!\n  Ma cosa fa una persona che lavora in questo campo?\n  Normalmente, ho a che fare con professionisti/e come ingegneri in music retrieval o in speech processing, o ancora generative music engineer. La realtà è che queste professioni in Italia non esistono, ma si tratta di ruoli molto specifici che vengono poi costruiti su misura delle specifiche esigenze!\n All’interno di questo settore infatti, c’è perlopiù l’AI Sound Engineer, che può avere diverse competenze, come la music information retrieval: per fare un esempio, parliamo di chi fa sistemi di music recommandation o sistemi che possano estrarre il genere o il mood di una canzone.\n Altro compito da non sottovalutare è la Environmental Sound Classification, o ancora di chi si occupa di separare le voci di un pezzo, chi lavora con la speech recognition, text-to-speech_, voice verification_ e via dicendo -si tratta di tutti task analitici-.\n Sapevi che diverse banche stanno valutando o hanno adottato dei biomarkers basati sul riconoscimento vocale per gestire i propri conti?\n Qual è la soft skill più importante che deve possedere un AI Audio Engineer?  Senza ombra di dubbio, avere un approccio interdisciplinare: ti devi sedere al tavolo con l’idea che quello che stai facendo è più di un semplice applicare il machine learning.\n  Devi capire come funziona il suono e come funziona la musica, perché capire come funziona il dominio con cui stai lavorando ti dà un vantaggio enorme.\n  Canale slack con 4000 persone per supporto su audio e musica in tema AI: OpenSource research è un progetto nato e durato un anno e mezzo per pubblicare un paper in ambito generazione del suono e hanno implementato un sintetizzatore che usa una NN per generare suoni di chitarra. Sfrutta un’interfaccia audio che permette all’utente di generare un suono i.e. suono di chitarra distorta. Ha richiesto moltissimo lavoro di ricerca sul suono a cui ci hanno lavorato più di 100 persone ed è tutto open source, organizzato in 5 gruppi di ricerca. =\u0026gt; https://thesoundofaiosr.github.io/\n La maggior parte di noi utilizza i social per parlare dei propri successi, ma la realtà è che siamo quel che siamo grazie al 90% dei nostri errori. Racconta il tuo più grande fallimento da quando lavori nel settore, che però ti ha reso ciò che sei.  Uno abbastanza rilevante è quando avevo una startup chiamata Melodrive, per cui avevano sviluppato musica per videogames in tempo reale. Le aspettative erano altissime, ma non è andata come sperava; 3-4 anni investiti, sono stati in Silicon Valley, ma la cosa non ha funzionato e hanno venduto e da lì è iniziato il percorso di consulenza.\n Stare troppo appresso all’idea di alzare soldi piuttosto che concentrarsi sul prodotto fino in fondo, e quindi anche sul R\u0026amp;D invece sul business. Soluzione più facile e veloce piuttosto che rivolgersi verso la soluzione più complessa. Il mercato forse non era neanche pronto (inerzia nel mercato) e anche l’idea di andare troppo dritti invece di spendere risorse su cose che non erano quelle più importanti. Grande lezione di vita.\n Come fare per diventare un AI Audio Engineer?  Oltre a quanto detto prima, studiare l’audio signal processing e il music processing, poi si può parlare di machine learning e deep learning.\n Non bisogna dare per scontato che è necessaria tantissima applicazione sulla materia, leggere paper e pubblicazioni e provare anche a reimplementare i prototipi proposti nei paper.\n Le soluzioni con cui lavoro utilizzano perlopiù tecnologie come Python o C++ (quest\u0026rsquo;ultimo viene scelto spesso per questioni di performance) e sfruttando librerie come Tensorflow, e in seconda battuta anche PyTorch, Librosa, Essentia per l\u0026rsquo;audio.\n In ultimo, frequentare gli esperti del settore attraverso gli eventi, come ad esempio ISMIR (una conferenza top nel settore del music processing) o Interspeech e seguire anche i giornali come Journal of Creative Music Systems o Transactions of Music Retrieval.\n Parlando di successi, qual è il tuo prossimo obiettivo? Quale ruolo vorresti ricoprire entro i prossimi 3 anni?  Mi piacerebbe far crescere la mia community e continuare con attività che coinvolgano tutti i membri che ne fanno parte per avere un involvement della stessa. In passato ho lavorato con diverse startup, e chissà in futuro! ;)\n Conosci il tema gender gap in ambito STEM? Se sì, come fare per superarlo?  Parliamo di un problema ENORME.\n Conosco il tema e vorrei studiarlo in maniera più approfondita; da una parte, mi dico che nel 2022 non è possibile ci sia ancora questo gap; dall’altra, vedo i dati e mi rendo conto che in paesi considerati socialmente più “avanzati”, ti aspetteresti che questi problemi siano meno presenti.\n  La realtà è che si tratta di fardelli evoluzionisti che, come il razzismo, ci portiamo dietro da troppo tempo: vale la pena farsi delle domande e quali battaglie è possibile vincere.\n  Il problema c’è, inutile negarlo, e sicuramente è legato alla società e alla cultura, ma dove arriva l’evoluzione? Le differenze che ci sono tra i generi è innegabile, ma non hanno nessun valore.\n Facciamo un esempio: la disparità enorme tra uomini e donne nel settore degli scacchi esiste: perché? 98% dei giocatori sono uomini, e per questo ci sono più top players; non perché ci sia una reale differenza, ma perché c\u0026rsquo;è una mancanza di eterogeneità.\n Ti dirò di più: spesso si parla di molte giocatrici che in questo settore dimostrano una maggiore intelligenza spaziale e emozionale, campi in cui i due si diversificano moltissimo (qui i dati).\n  L’empowerment passa attraverso la conoscenza: studiare è la chiave.\n  Nella mia community all\u0026rsquo;inizio c\u0026rsquo;era una platea composta dal 95% maschi, mentre attualmente siamo intorno all'85%; questo non perché non ci siano esperte del settore, ma perché di natura tendiamo a seguire ruoli simili.\n  Creare dei role models femminili che infondano coraggio e consapevolezza.\n  Ho una visione miope probabilmente, ma io vedo persone e non generi o etichette.\n Io ho sempre fatto una battaglia dell’evitare i discorsi relativi allo status quo. All’interno della community, anche con i diversi progetti che portiamo avanti, non ci sono mai stati problemi: le persone vengono da tutto il mondo, e lavorano insieme in sinergia per una mission comune.\n Contatti Sito personale The Sound of AI community ", "url": "https:\/\/theredcode.it\/interviste\/ai-audio-engineer\/" }, "https:\/\/theredcode.it\/openshift\/configurare-wordpress-su-openshift\/": { "title": "Configurare Wordpress su OpenShift", "tags": ["openshift","wordpress",], "content": "Nuova serie per TheRedCode e soprattutto nuovo argomento: iniziamo con OpenShift, una piattaforma per container Kubernetes enterprise-ready che in moltissime aziende utilizzano già da diverso tempo per le sue mille qualità.\n Oggi parliamo di come configurare Wordpress su OpenShift 4.9, con pochi, semplici step!\n Procedimento  Per configurare quello che ci serve, è necessario configurare il repository Helm di Bitnami che andremo ad utilizzare. Nella documentazione ufficiale (qui il link) è descritto ogni passaggio per farlo!\n A questo punto, vai nel Catalogo delle applicazioni utilizzando la vista da Developer (aka Developer perspective) cliccando su \u0026ldquo;+Add\u0026rdquo; nella barra di navigazione a sinistra e cercando \u0026ldquo;Wordpress\u0026rdquo;: quella che viene suggerito di utilizzare è la v13.0.21 (a destra nella figura sottostante):\n Wordpress nel catalogo di OpenShift\nSeguendo le istruzioni della procedura guidata, è possibile inserire tutte le informazioni per la corretta configurazione di Wordpress.\nCome prima cosa, è bene scegliere con cura le informazioni per il login, definendo l\u0026rsquo;e-mail dell\u0026rsquo;amministratore/trice e il nome iniziale che assumerà il blog:\n Configurazione delle informazioni generali di Wordpress\n Inoltre, sarà necessario fornire le credenziali per accedere alla dashboard di Wordpress: se non inseriamo in questo momento una password, ne verrà impostata una casuale e sarà possibile recuperarla anche in un secondo momento leggendo il relativo secret_,_ che si troverà nell\u0026rsquo;apposita sezione.\n  Configurazione delle credenziali di accesso di Wordpress\n Inoltre, è possibile anche definire le informazioni sulla connessione al database MariaDB: se ne esiste uno esterno, possiamo configurarlo fornendo le informazioni mostrate nella sezione seguente, tra cui le credenziali, l\u0026rsquo;host, la porta e il nome del database che verrà utilizzato.\n Configurazione del database esterno di Wordpress\n Per accedere al sito web di Wordpress è possibile configurare il tipo di Service da utilizzare, scegliendo tra LoadBalancer (quello di default), ClusterIP e Nodeport -qui trovi maggiori informazioni-.\n Configurazione del service di Wordpress\n Se invece desiderassimo utilizzare un database che verrà ospitato all\u0026rsquo;interno del cluster -e nello specifico, nel namespace attuale-, vedremo che questa opzione nella sezione \u0026ldquo;MariaDB Details\u0026rdquo; è già selezionata. Verificare lo spazio definito nella voce \u0026ldquo;Principale\u0026rdquo;: per impostazione predefinita verranno assegnati 8 Gi per l\u0026rsquo;archiviazione del database.\n Configurazione di un database MariaDB interno al namespace\n Come ultimo step, è possibile scegliere il dimensionamento dello storage per i contenuti e i media statici di Wordpress. Per impostazione predefinita, verranno allocati 10Gi:\n Dimensione dello storage utilizzando da Wordpress\n  Dopo aver creato un\u0026rsquo;istanza del Helm chart, noterai che verranno visualizzati alcuni errori nella sezione eventi del pod di MariaDB. Questo perché ha bisogno di un S_ervice Account_ per essere avviato, che il Helm Chart dà per scontato.\n Il Deployment di Wordpress ha bisogno di un Service Account per avviarsi\n Il pod di MariaDB va in CrashLoopBackOff\n A questo punto, scaliamo a zero il Deployment di MariaDB e di Wordpress e creiamo un Service Account usando i comandi seguenti:\n oc create sa wordpress-mariadb -n your-namespace Output\u0026gt;\u0026gt;\u0026gt; serviceaccount/wordpress-mariadb created oc adm policy add-scc-to-user anyuid -z wordpress-mariadb Output \u0026gt;\u0026gt;\u0026gt; scc \u0026#34;anyuid\u0026#34; added to: [\u0026#34;system:serviceaccount:your-namespace:wordpress-mariadb\u0026#34;]   Prima di riprendere il deploy, modifichiamo il file YAML del Deployment e configuriamo lo stesso Service Account che abbiamo creato nel passaggio precedente, inserendo le voci come evidenziato nell\u0026rsquo;immagine di seguito nelle due proprietà seguenti:\n spec\u0026gt;template\u0026gt;spec\u0026gt;serviceAccountName spec\u0026gt;template\u0026gt;spec\u0026gt;serviceAccount  Aggiunta del Service Account corretto al Deployment\n Ora i due Deployment possono essere nuovamente scalati a una replica e dovrebbero essere in esecuzione in un attimo!\n Tip  Di default non è definita nessuna route per accedere al sito web di Wordpress: per crearne una, utilizziamo il pulsante in alto a destra della sezione \u0026ldquo;Routes\u0026rdquo; e utilizzando il relativo Service:\n Definizione della route\n A questo punto, sarai in grado di accedere alla tua installazione di Wordpress su OpenShift!\n  Esempio della homepage del sito Wordpress configurato su OpenShift\n   Se questo articolo ti è piaciuto, non dimenticare di condividerlo!\n ", "url": "https:\/\/theredcode.it\/openshift\/configurare-wordpress-su-openshift\/" }, "https:\/\/theredcode.it\/ionic\/ionic-6-cosa-cambia\/": { "title": "Ionic 6: cosa cambia", "tags": ["ionic",], "content": " Qualche settimana fa è uscito un nuovo articolo in cui il team che lavora dietro a Ionic ha rilasciato alcuni importanti aggiornamenti sul framework nato nel 2013, portando questa tecnologia alla versione 6.\n Cosa cambia in questa nuova versione? Come effettuare l\u0026rsquo;upgrade? Diamo subito un\u0026rsquo;occhiata da vicino a Ionic 6!\n Premessa  Se hai già un\u0026rsquo;app in Ionic 5, nessun problema: puoi continuare ad usare la tua app senza problemi e puoi anche aggiornarla all\u0026rsquo;ultima versione senza alcuna paura. Funzionerà alla grande!\n Le novità riguardano soprattutto degli oggetti nuovi che si adeguano alle linee guida in materia di design e si integrano ancora di più con i framework attualmente supportati.\n Nuovi componenti  Ottimo lavoro con l\u0026rsquo;introduzione dell\u0026rsquo;accordion: questo nuovo oggetto permette l\u0026rsquo;organizzazione del contenuto di una pagina in un modo semplice, soprattutto per chi viene dal mondo Bootstrap (secondo il Material Design, questi sono gli Expansion Panel).\n Questi funzionano grazie al componente ion-accordion, il quale ha una serie di animazioni che ne consentono le differenti transizioni in apertura e chiusura:\n Esempio di accordion con Ionic 6 - toggled\nEsempio di accordion con Ionic 6 - open\n  \u0026lt;ion-header [translucent]=\u0026#34;true\u0026#34;\u0026gt; \u0026lt;ion-toolbar\u0026gt; \u0026lt;ion-buttons slot=\u0026#34;start\u0026#34;\u0026gt; \u0026lt;ion-menu-button\u0026gt;\u0026lt;/ion-menu-button\u0026gt; \u0026lt;/ion-buttons\u0026gt; \u0026lt;ion-title\u0026gt;Homepage\u0026lt;/ion-title\u0026gt; \u0026lt;/ion-toolbar\u0026gt; \u0026lt;/ion-header\u0026gt; \u0026lt;ion-content class=\u0026#34;ion-padding\u0026#34;\u0026gt; \u0026lt;ion-accordion-group\u0026gt; \u0026lt;ion-accordion value=\u0026#34;colors\u0026#34;\u0026gt; \u0026lt;ion-item slot=\u0026#34;header\u0026#34;\u0026gt; \u0026lt;ion-label\u0026gt;Contenuto\u0026lt;/ion-label\u0026gt; \u0026lt;ion-icon slot=\u0026#34;start\u0026#34; name=\u0026#34;balloon-outline\u0026#34;\u0026gt;\u0026lt;/ion-icon\u0026gt; \u0026lt;/ion-item\u0026gt; \u0026lt;ion-list slot=\u0026#34;content\u0026#34;\u0026gt; \u0026lt;ion-item class=\u0026#34;ion-padding\u0026#34;\u0026gt; \u0026lt;ion-text\u0026gt;Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi molestie tellus lacus, quis facilisis neque sodales ac. Nullam volutpat risus nec feugiat fringilla. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Etiam eget libero luctus, interdum orci non, aliquam dolor. Morbi tincidunt facilisis ultrices. Phasellus hendrerit interdum ligula et hendrerit. Donec dictum eros eget aliquam imperdiet. Aliquam fringilla eros elit, sit amet dictum felis ultrices vehicula. Nulla auctor lorem nec aliquam finibus. Nulla dapibus sit amet velit ornare volutpat. Quisque volutpat ac risus in gravida. Ut vestibulum nisl purus, in porta est vulputate sed. Curabitur vehicula urna neque, nec vulputate nunc venenatis in. \u0026lt;/ion-text\u0026gt; \u0026lt;/ion-item\u0026gt; \u0026lt;/ion-list\u0026gt; \u0026lt;/ion-accordion\u0026gt; \u0026lt;/ion-accordion-group\u0026gt; \u0026lt;/ion-content\u0026gt;  Molto utile anche è l\u0026rsquo;aggiunta del componente breacrumbs, che soprattutto per le PWA in modalità desktop rendono la navigazione agli utenti contestualizzata: non c\u0026rsquo;è pericolo che si perdano nel sito, basta lasciare qualche briciola come fece Pollicino!\n Esempio di breadcrumbs con Ionic 6\n \u0026lt;ion-content class=\u0026#34;ion-padding\u0026#34;\u0026gt; \u0026lt;ion-breadcrumbs\u0026gt; \u0026lt;ion-breadcrumb href=\u0026#34;#\u0026#34;\u0026gt; Home \u0026lt;/ion-breadcrumb\u0026gt; \u0026lt;ion-breadcrumb href=\u0026#34;#\u0026#34;\u0026gt; Dettaglio \u0026lt;/ion-breadcrumb\u0026gt; \u0026lt;/ion-breadcrumbs\u0026gt; \u0026lt;ion-text\u0026gt;Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi molestie tellus lacus, quis facilisis neque sodales ac. Nullam volutpat risus nec feugiat fringilla. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Etiam eget libero luctus, interdum orci non, aliquam dolor. Morbi tincidunt facilisis ultrices. Phasellus hendrerit interdum ligula et hendrerit. Donec dictum eros eget aliquam imperdiet. Aliquam fringilla eros elit, sit amet dictum felis ultrices vehicula. Nulla auctor lorem nec aliquam finibus. Nulla dapibus sit amet velit ornare volutpat. Quisque volutpat ac risus in gravida. Ut vestibulum nisl purus, in porta est vulputate sed. Curabitur vehicula urna neque, nec vulputate nunc venenatis in. \u0026lt;/ion-text\u0026gt; \u0026lt;/ion-content\u0026gt;  Design  Alcune delle modifiche al design della modalità iOS includono un nuovo stile per l\u0026rsquo;aggiornamento tramite refresher, una nuova barra degli strumenti e anche l\u0026rsquo;inclusione della modalità a tema scuro per i modali.\n Invece, per quanto riguarda il mondo Android, hanno rinnovato lo stile di molti componenti per aderire ancora di più al Material Design, come ad esempio sfruttando le proprietà filled e outline per alcuni oggetti, tra cui ion-input e ion-select.\n Le novità non finiscono qui: il team sta tenendo d\u0026rsquo;occhio molto attentamente le linee guida dettate da Google ed è pronto ad adeguare il framework per seguire Material You, il nuovo concept in termini di Design annunciato a ottobre dello scorso anno.\n Il team di Ionic sta tenendo d\u0026rsquo;occhio Material You e attende che vengano rilasciate ulteriori indicazioni da Google.\n Routing con Vue  Per colo che lavorano con Vue, finalmente c\u0026rsquo;è un nuovo modo di navigare in Ionic usando l\u0026rsquo;Injectable useIonRouter. Questa nuova funzionalità consente agli sviluppatori di utilizzare il Router Vue mantenendo il controllo sulle transizioni di pagina.\n import { useIonRouter } from \u0026#39;@ionic/vue\u0026#39;; ... const router = useIonRouter(); router.navigate( `/my-page`, \u0026#39;forward\u0026#39;, \u0026#39;replace\u0026#39; );  Come fare l\u0026rsquo;upgrade  Angular Il pre-requisito fondamentale è avere una versione di Angular superiore alla 12. Se non l\u0026rsquo;hai ancora fatto o sei indietro con le versioni, dai un\u0026rsquo;occhiata a questo tool per aggiornarla!\n Invece, se hai aggiornato Angular, per fare l\u0026rsquo;upgrade anche di Ionic alla versione 6, esegui questo comando:\n npm install @ionic/angular@6  Se invece usi anche il server Angular per testare la tua applicazione in locale, esegui questo:\n npm install @ionic/angular@6 @ionic/angular-server@6    Se tutte queste versioni ti spaventano, non ti preoccupare: qui trovi tutti i dettagli sulle versioni compatibili tra Angular, Ionic e Node.js!\n  React  Per usare Ionic 6, è necessario avere una versione di React 17+. Fatto questo controllo, puoi fare l\u0026rsquo;upgrade con il seguente comando:\n npm install @ionic/react@6 @ionic/react-router@6  Vue  Ionic 6 supporta Vue 3.0.6+ e la versione 5 della command-line di Vue; prima di fare l\u0026rsquo;aggiornamento alla versione 6 di Ionic, verifica che le versioni siano corrette e aggiorna i plugin con il seguente comando:\n vue upgrade --next  Per fare l\u0026rsquo;upgrade all\u0026rsquo;ultima versione di Ionic 6, vai con il comando seguente:\n npm install @ionic/vue@6 @ionic/vue-router@6  Aggiornare il codice  E se avessi un\u0026rsquo;applicazione in una versione vecchia di Ionic?\n Il consiglio è di migrare l\u0026rsquo;applicazione prima di tutto alla versione 5, che è quella più vicina in termini di design e sviluppo all\u0026rsquo;ultima disponibile.\n Per rendere invece il codice adeguato alla versione 6, trovi tutte le indicazioni sui componenti aggiornati in questo link.\n Questo vale soprattutto se usi un componente tra cui:\n Text area Popover Modal Datetime Input Select   Stay tuned: nelle prossime settimane, usciranno degli esempi sull\u0026rsquo;utilizzo dei plugin di Ionic aggiornati alla versione 6!\n  Risorse utili Post sul Blog di Ionic Compatibilità: Ionic con Angular e Node.js ", "url": "https:\/\/theredcode.it\/ionic\/ionic-6-cosa-cambia\/" }, "https:\/\/theredcode.it\/tags\/cybersecurity\/": { "title": "cybersecurity", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/tags\/cybersecurity\/" }, "https:\/\/theredcode.it\/security\/guerra-informatica\/": { "title": "Operation Russia e la guerra informatica", "tags": ["cybersecurity","sicurezza-informatica",], "content": "In questi giorni difficilissimi -ed è un eufemismo-, è stata condotta una guerra silenziosa, quasi invisibile e che non comporta armi né soldati: la battaglia che Anonymous sta portando avanti nei confronti del regime di Putin.\n Ma che cos\u0026rsquo;è stato fatto finora? Vediamo una breve cronaca di questa guerra informatica, concentrandoci sulle tipologie di attacco informatico che vengono portate avanti dai diversi gruppi appartenenti a questo movimento.\n Anonymous alza il tiro. Diffusi 40 mila documenti attribuiti all’Istituto di Sicurezza Nucleare di Mosca\n In un\u0026rsquo;operazione denominata “Operation Russia – Defend Ukraine”, gli hacktivisti hanno dichiarato di aver preso una posizione contro il presidente russo e di voler aiutare a combattere contro la “propaganda e le folli azioni di Putin”.\n #Anonymous - Message to Russia \u0026amp; Western allies over Ukraine\n\"If tensions continue to worsen in #Ukraine, then we can take hostage... industrial control systems.\" Expect us. #Russia #NATO #USA #UkraineCrisis pic.twitter.com/1QhLJv7St8— Anonymous TV 🇺🇦 (@YourAnonTV) February 15, 2022  Per farlo, hanno iniziato con alcuni attacchi riconducibili a dei data breach: si tratta della diffusione intenzionale di dati protetti e confidenziali, come in questo caso.\n I documenti attribuiti all\u0026rsquo;Istituto di Sicurezza Nucleare di Mosca sono stati pubblicati tramite un tweet pubblicato sull\u0026rsquo;account ufficiale di Battalion \u0026lsquo;65, un gruppo legato ad Anonymous:\n   Non si sono fermati qui: qualche giorno fa hanno preso di mira l\u0026rsquo;agenzia di stampa russa TASS: il loro sito è stato cancellato e sostituito con un messaggio che indica che, nonostante alcuni potrebbero subire ritorsioni pesanti per le proprie azioni, non possono né vogliono rimanere indifferenti.\n Rivendicazione dell\u0026rsquo;attacco da parte di Anonymous all\u0026rsquo;agenzia di stampa TASS\n Messaggio originale pubblicato sul sito della testata (tradotto)\n L\u0026rsquo;attacco non è stato rivolto solo a TASS, ma anche nei confronti di altre testate, tra cui Izvestia, Fontanka, il sito Takie Dela, la rivista Kommersant, e il giornale online Znak.\n Questi sono esempi di defacing: quando un sito viene alterato o, letteralmente, sfregiato, si parla di un attacco di defacement.\n Si tratta ovviamente di un attacco informatico dove la pagina principale (o più pagine) vengono sostituite sfruttando le vulnerabilità del sito o del sistema che viene utilizzato per l\u0026rsquo;hosting.\n Un altro attacco significativo è quello condotto contro le colonnine di ricarica presenti su tutto il territorio russo e bielorusso: ogni stazione ha mostrato un messaggio contro Putin e di solidarietà verso l\u0026rsquo;Ucraina:\n Russian EV Charging station near Moscow hacked, saying \"Out of Service. Glory to Ukraine. Glory to Heroes...\" #Moscow #EVCharging #UkraineRussiaWar pic.twitter.com/AYkWgGrBGn\n— EV News (@EVNews4) February 28, 2022  Sembra banale, ma per hackerare una stazione di ricarica sono necessarie diverse competenze.\n Questo tipo di attacco è possibile tramite accesso fisico sull\u0026rsquo;attrezzatura stradale; infatti, i sistemi dietro queste colonne sono tipicamente basati su GNU/Linux e sono spesso protetti con un pannello che può essere aperto con un semplice tasto.\n A quel punto, si ha completo accesso ai componenti, consentendo l\u0026rsquo;analisi e il reverse engineering di hardware, CPU e firmware.\n Non solo: tramite attacchi come il man-in-the-middle, sfruttando il sistema di comunicazioni tra queste postazioni e il sistema centrale.\n Ciò può consentire agli hacker di attingere per intercettare le informazioni sulle identità dei clienti che stanno caricando le loro auto, oltre alle informazioni di pagamento.\n  Cosa possono fare gli hacker una volta entrati?\n  Furto d\u0026rsquo;identità, furto finanziario e attacco DoS sono sono alcuni degli esempi: gli aggressori possono intercettare le informazioni mentre le persone caricano, o possono recuperarne le informazioni relative ai metodi di pagamento, o anche rendere inutilizzabile l\u0026rsquo;intera stazione di ricarica.\n DoS è un altro modo di mettere fuori uso uno o più siti: l\u0026rsquo;acronimo sta infatti per Denial of Service, che indica un attacco dove il sistema viene messo K.O. esaurendo le risorse del sistema.\n In questa serie di attacchi, molto probabilmente si sta attuando un attacco DDoS, che significa \u0026ldquo;Distributed DoS\u0026rdquo;.\n Questo viene eseguito da un certo numero di macchine compromesse che prendono tutte di mira la stessa vittima, inondando la rete di pacchetti di dati che il sistema non riesce più a gestire, mettendola fuori uso.\n Un esempio di attacco DDoS è stato quello contro i siti governativi russi, che sono stati i primi presi di mira durante questa cyberguerra:\n Tweet di Anonymous dove dichiarano di aver attaccato diversi siti governativi russi\n   Sito kremlin.ru offline\n Leggere i giornali e rimanere indifferenti è pressoché impossibile, così come molti esperti del settore si sono pubblicamente offerti volontari tramite l\u0026rsquo;account ufficiale su Twitter per arruolarsi in questa guerra condotta Anonymous.\n La risposta è stata esemplare: \u0026ldquo;se non sai come aiutare, inizia a condividere e riportare tutte le notizie circa il tentativo di disinformazione russo, che è un lavoro fondamentale in questi giorni\u0026rdquo;.\n Il regime di Putin sta infatti tentando il tutto per tutto portando avanti attacchi informatici sulla rete ucraina, ma soprattutto conducendo un\u0026rsquo;attività di propaganda anche per mezzo di fake news come leva per guadagnare terreno.\n Le fake news sembrano in questa guerra l\u0026rsquo;ultimo dei problemi, ma la realtà è che non essere in grado di rilevarle, fa sì che il mondo non possa più attribuire valore al concetto di \u0026ldquo;verità\u0026rdquo;.\n Queste aprono la strada a chi vuole ingannare gli utilizzatori di determinate piattaforme per promuovere le proprie ideologie: non a caso, durante diverse campagne elettorali, le fake news sono state fondamentali per ottenere il favore durante nelle elezioni politiche.\n Gli utenti si chiedono come sostenere attivamente questa guerra informatica\n La missione di Anonymous è chiara: distruggere il regime di Putin con ogni mezzo a loro disposizione, combattendo attivamente contro l\u0026rsquo;informazione e la disinformazione russa, affinché un altro triste capitolo di storia veda la notte il prima possibile.\n   Fonti Anonymous alza il tiro. Diffusi 40 mila documenti attribuiti all’Istituto di Sicurezza Nucleare di Mosca Tipologie di cyberattacco (EN) Russia\u0026rsquo;s state-owned news agency TASS\u0026rsquo; website reportedly hacked Hacked electric car charging stations in Russia display ‘Putin is a d*ckhead’ and ‘glory to Ukraine’ Official Kremlin website down amid war in Ukraine Influence of fake news in Twitter during the 2016 US presidential election ", "url": "https:\/\/theredcode.it\/security\/guerra-informatica\/" }, "https:\/\/theredcode.it\/categories\/security\/": { "title": "security", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/categories\/security\/" }, "https:\/\/theredcode.it\/tags\/sicurezza-informatica\/": { "title": "sicurezza-informatica", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/tags\/sicurezza-informatica\/" }, "https:\/\/theredcode.it\/interviste\/data-analyst\/": { "title": "Voglio diventare una... Data Analyst", "tags": ["interviste","voglio-diventare",], "content": "Oggi ospite di eccezione: Alice Gabrieli ci parlerà di come diventare una Data Analyst e dell\u0026rsquo;incredibile lavoro di divulgazione che sta facendo con la sua pagina Instagram Data Journalice (@datajournalice).\n Attraverso delle infografiche e dei post su temi sempre molto attuali, in questa pagina si racconta il mondo dei dati e della statistica, legandola ad altre tematiche fondamentali, come l\u0026rsquo;intelligenza artificiale, il gender gap in ambito STEM, l\u0026rsquo;ambiente, e molto altro ancora.\n Se non hai ancora iniziato a seguirla, corri a farlo!\nDescriviti in 100 parole.  Mi chiamo Alice Gabrieli e sono una Data Analyst.\n  Di solito di fronte a questa frase, il 90% delle persone mi guarda di traverso e mi chiede “E cioè?”.\n  Diciamo che non è semplice svolgere un lavoro che prima neanche esisteva o non era riconosciuto, derivante da una disciplina, la Statistica, ancor più ignota, non è semplice perché potremmo definirlo un lavoro “del futuro”.\n Ma è estremamente stimolante e mi piace poter guardare il mio interlocutore con apprensione e spiegargli cosa faccio.\n Mi piace a tal punto che ho creato la prima pagina di informazione statistica su Instagram, Datajournalice, in cui parlo di questa disciplina, del perché sia utile e di come la troviamo nella nostra quotidianità, dato che ogni fenomeno è spiegabile attraverso dati e modelli.\n In cosa consiste il ruolo di Data Analyst?  Cosa faccio dunque nel mio lavoro?\n  Una data analyst, come suggerisce il nome, analizza i dati.\n  Questi dati possono essere di qualsiasi genere: sanitario, demografico, economico, ambientale, e via dicendo. Una data analyst esporta dati, li pulisce (questa è una parte tanto importante quanto noiosa per me), dopodiché importa il proprio dataset su R studio ed inizia a scrivere il codice adatto al tipo di analisi che si vuole applicare.\n La scelta dei modelli statistici dipende dal risultato che si sta cercando: correlazione fra due fenomeni, dipendenza di un evento rispetto a fattori esterni, significatività, calcolo di indici di sintesi, variazioni temporali o confronti territoriali.\n Queste sono alcune delle analisi che faccio nel mio lavoro, che in questo momento riguarda i prezzi dei prodotti agroalimentari.\n La parte che adoro di più è quella in cui scopro qualcosa di nuovo sui dati: è impossibile non sorprendersi davanti a quello che esce dopo l’elaborazione, sapendo che quella percentuale o quel test significativo deriva da migliaia di celle che al primo sguardo non dicevano assolutamente nulla.\n A proposito: mi capita di lavorare sia in team sia in solitaria.\n Qual è la soft skill più importante che deve possedere una Data Analyst?  La soft skill più importante (e complicata) è quella di spiegare i risultati delle analisi e renderli accessibili anche a chi non è esperto del settore.\n  Sono necessari grafici intuitivi e parole giuste, altrimenti la fatica delle fasi precedenti diventa inutile.\n  La maggior parte di noi utilizza i social per parlare dei propri successi, ma la realtà è che siamo quel che siamo grazie al 90% dei nostri errori. Racconta il tuo più grande fallimento da quando lavori nel settore, che però ti ha reso ciò che sei.  Mi sono trovata malissimo nella mia prima occasione di lavoro ed ho creduto che il motivo fosse di aver sbagliato tutto nella vita, di aver scelto la facoltà sbagliata ed essermi destinata ad una professione che non mi faceva stare bene.\nSolo dopo qualche mese ho capito che dovevo lasciarmi libera di trovare altre opportunità, che non ci si può illudere di trovare il lavoro dei sogni prima ancora di uscire dall’università.\n  Le opportunità nel mio ambito sono, oserei dire, illimitate!\n  Ma non vuol dire che ci si debba accontentare del primo HR che ti offre uno stipendio.\n  Fate quello che vi piace! E ricordate che c’è sempre tempo per cambiare!\n  Quando l’ho fatto, ho trovato la mia isola felice, ma con la consapevolezza che se un giorno cambierò idea e me ne vorrò andare, non commetterò lo stesso errore di forzarmi e non avrò paura di ricominciare da capo.\nCome fare per diventare una Data Analyst?  Per diventare una Data Analyst ci sono varie strade: la statistica è sicuramente la prima, ma possono essere anche l’economia, la fisica o altre discipline STEM, a patto di avere solide basi di informatica e probabilità.\n  Conta, inoltre, avere buon occhio per i dati e la determinazione nel volerci cavare qualcosa!\n  Non sono necessarie esperienze lavorative pregresse poiché è un ambito molto interattivo, all’interno del quale si impara ogni giorno qualcosa e si viene seguiti.\n Personalmente, un’esperienza che mi ha aiutata molto è stata quella Erasmus: si viene apprezzati di più ai colloqui e si viene riconosciuti come più intraprendenti e disposti ad adattarsi. Ed io mi sento davvero così.\n Parlando di successi, qual è il tuo prossimo obiettivo? Quale ruolo vorresti ricoprire entro i prossimi 3 anni?  Avendo 24 anni, il mio primo obiettivo al momento è trovare un equilibrio.\n  Sono stata catapultata rapidamente nel mondo del lavoro (pro e contro di chi non ha difficoltà sul mercato), e per questo devo ancora stabilizzare i ritmi fra la mia professione, la pagina Instagram e la mia vita privata.\n Per ora è tutta una confusione, ma nell’arco di 3 anni ce la farò, no? :)\n  Spero di avere ancora più competenze nel mio ambito e di riuscire a raggiungere un pubblico più ampio con i miei contenuti online.\n  Conosci il tema gender gap in ambito STEM? Se sì, come fare per superarlo?  Conosco il tema gender gap in ambito STEM, lo detesto e desidero abbatterlo.\n Quando ho cercato collaboratori per il mio team di Datajournalice, ho ricevuto candidature di uomini per il 70% e di donne per il 30%: ho scelto di usare le quote e creare un team parimente variegato, siamo metà donne e metà uomini.\n Qualcuno potrà non essere d’accordo, perché contano le competenze -è vero-, ma voglio far valere queste donne e far emergere le loro capacità attraverso il mio progetto.\n Contatti Pagina Instagram di DataJournalice  ", "url": "https:\/\/theredcode.it\/interviste\/data-analyst\/" }, "https:\/\/theredcode.it\/interviste\/digital-business-integration-analyst\/": { "title": "Voglio diventare una… Digital Business Integration Analyst", "tags": ["interviste","voglio-diventare",], "content": "Cosa c\u0026rsquo;entra il digital con la parte business integration? Tutto, direte.\n In effetti, gestire e digitalizzare i flussi di un cliente può non essere un compito semplice\u0026hellip; ed è qui che entra in gioco una Digital Business Integration Analyst!\n Oggi ci sarà Roberta Corsini a raccontarci la sua avventura in questo mondo complesso, ma mai noioso!\n Descriviti in 100 parole A****mbiziosa, creativa e sempre alla ricerca di nuovi stimoli.\n  Se qualcosa mi appassiona, mi ci butto a capofitto.\n Sono appassionata di tecnologia e durante gli ultimi anni mi sono avvicinata al mondo dell’additive manufacturing. Mi definisco una 3D makers, nel tempo libero progetto e, mediante tecnologia FDM, stampo oggetti in 3d adottando materiali che rispettano l’ambiente.\nAmo trovarmi in contesti dinamici e sfidanti perché voglio sempre mettermi alla prova e uscire dalla mia comfort zone.\nNessuno osi ostacolare la mia indipendenza e la mia libertà, potrebbe pagarla cara! :D\nIl mio outfit preferito? Giacca doppiopetto, camicia, pantalone a sigaretta, cravatta e un bel paio di decolleté!\nIn cosa consiste il ruolo di Digital Business Integration Analyst? Una Digital Business Integration Analyst si occupa della digitalizzazione dei processi aziendali del cliente, ma non solo.\n Nel mio caso, la mia mansione prevede di trasferire e aggregare dati, provenienti da una tecnologia sorgente, ad un database finale, mediante flussi creati con linguaggi di programmazione come python e pyspark.\nLe attività sono definite e pianificate in base alle richieste, esigenze e priorità del cliente. Perciò, è importante in questo lavoro saper comprendere a fondo cosa fare e come agire per poter implementare ciò che viene richiesto.\nNormalmente si lavora in team, ma può capitare anche di lavorare in solitaria. In tal caso, è importante sapersi organizzare per poter rispettare le scadenze, anche in caso di un carico di lavoro elevato.\n Una Digital Business Integration Analyst deve sempre essere pronta ad affrontare nuove sfide, come trovare e adottare nuove soluzioni a problemi non routinari.\n  Qual è la soft skill più importante che deve possedere una Digital Business Integration Analyst? Una Digital Business Integration Analyst deve possedere curiosità e capacità di apprendiment__o. Più si è al corrente di ciò che si può fare con gli strumenti a disposizione più sarà possibile gestire problemi futuri o essere in grado di trovare soluzioni alternative e più efficienti.\nPossedere anche capacità di problem solving e una buona dose di flessibilità e resistenza allo stress, non sarebbe male :D\nLa maggior parte di noi utilizza i social per parlare dei propri successi, ma la realtà è che siamo quel che siamo grazie al 90% dei nostri errori. Racconta il tuo più grande fallimento da quando lavori nel settore, che però ti ha reso ciò che sei. Il mio più grande fallimento è stato pens****are di non essere all’altezza del lavoro che mi apprestavo a svolgere.\nDurante i primi mesi, mi sentivo insicura, avevo bisogno del supporto di altri colleghi e pensavo di non essere in grado di capire ed eseguire quello che mi veniva richiesto.\n Ho passato notti insonni cercando di capire se fosse il posto giusto per me.\n Poi, con il passare delle settimane, ho capito che bisogna darsi il giusto tempo. Il mondo del lavoro è complesso e ogni giorno ci pone davanti a sfide diverse. Bisogna rischiare e avere il coraggio di abbattere gli ostacoli, soprattutto nel caso di chi come me esce dalla sua zona di comfort.\n Solo in questo modo si può avere la possibilità di migliorare le competenze tecniche e abbattere l’insicurezza.\n Se oggi sono quella che sono, lo devo anche ai miei colleghi che mi hanno fatto\nsentire parte del gruppo sin dal mio primo giorno di lavoro.\n Come fare per diventare una Digital Business Integration Analyst? Inizialmente, non sono richiesti requisiti particolari. La cosa fondamentale è saper dimostrare di poter apprendere e studiare in modo autonomo, senza aspettare che siano altri a dirti di doverlo fare.\nInoltre, col tempo, è importante prendere certificazioni, non solo per poter attestare le competenze acquisite, ma anche per poter dimostrare all’azienda per cui si lavora di essere in grado di portare valore aggiunto.\n Parlando di successi, qual è il tuo prossimo obiettivo? Quale ruolo vorresti ricoprire entro i prossimi 3 anni? Il mio prossimo obiettivo è quello di sviscerare il più possibile tutto quello che concerne il mondo della programmazione. Mi piacerebbe tanto saperne di più e sentirmi più confident nel programmare.\nPer quanto riguarda i prossimi 3 anni, spero in una promozione e di poter passare al livello successivo, quindi diventare una Digital Business Integration… Consultant!\n Conosci il tema gender gap in ambito STEM? Se sì, come fare per superarlo?  Conosco da vicino il tema gender gap in ambito STEM. Ho frequentato due corsi di laurea in ingegneria, quindi per me era inevitabile farci caso.\n  Ho scelto questi percorsi per passione e ho cercato di fare la mia parte avvicinandomi a nuove tecnologie e promuovendo e gestendo progetti 4.0.\n  Durante questi mesi di lavoro, però, ho sentito meno il divario. Ogni giorno mi interfaccio con tantissime colleghe, non solo colleghi.\n L’azienda per cui lavoro e che opera nel settore IT, infatti, sta favorendo l’assunzione di donne.\n Ha come obiettivo il raggiungimento della parità di genere delle proprie risorse entro il 2025, puntando in particolare sulla formazione di figure che abbiano un background ibrido che unisce competenze scientifiche e umanistiche.\n  Penso sia un’azione importante, che possa essere di esempio e possa dare il via al cambiamento in altre realtà aziendali.\n  ", "url": "https:\/\/theredcode.it\/interviste\/digital-business-integration-analyst\/" }, "https:\/\/theredcode.it\/design-dev\/parliamo-agile\/": { "title": "Parliamo AGILE", "tags": [], "content": " Progettare e sviluppare software è un\u0026rsquo;attività intensa e mai uguale: il metodo Agile permette di adottare un approccio che accorcia i cicli di sviluppo e supporta l\u0026rsquo;analisi just in time delle richieste, seguendo l\u0026rsquo;evoluzione della soluzione in modo veloce e a basso costo.\n Parliamo (di) AGILE e di come questa metodologia può aiutare non solo gli sviluppatori, ma tutte le persone coinvolte nella produzione e rilascio del software!\n Intro  Viviamo in un mondo frenetico in cui il progresso tecnologico va sempre più veloce, i progetti sono sempre più imponenti, i tempi in buona parte dei casi sono sempre più stringenti e la necessità di un\u0026rsquo;organizzazione efficiente aumenta sempre di più, necessità soddisfatta da una metodologia come quella di cui andremo a parlare a brevissimo\u0026hellip;\n Fino agli anni 80, è stata adottata come metodologia di sviluppo, quella che tutti conoscono con il nome di “Waterfall”, la quale prevede una gestione progettuale tradizionale e sequenziale, in cui ogni fase di sviluppo (analisi dei requisiti, sviluppo, test ed eventuale manutenzione), termina prima che inizi la successiva.\n Nulla di così strano in realtà.. Ma quale può essere uno svantaggio in una metodologia così rigida eppur tanto utilizzata?\n La risposta a questa domanda la troviamo in casi di software particolarmente complessi, la cui analisi dei requisiti può richiedere anche più di un anno, in cui si corre il rischio di arrivare alla fase di sviluppo con dei requisiti ormai obsoleti, costringendo il team che se ne occupa a fronteggiare un eventuale cambiamento con quelle che son conosciute come change request, ossia sviluppi fatti su un’architettura già esistente, con il rischio di ottenere come risultato un prodotto non ottimizzato.\n  E quindi, in che modo la metodologia Agile rappresenta una soluzione alternativa alla metodologia waterfall?\n  Grazie ad esempio al suo approccio iterativo incrementale, che riduce sensibilmente il rischio di incorrere nell’obsolescenza dei requisiti di cui parlavamo poco fa.\n Immaginate quindi che lo sviluppo complessivo di un grande progetto venga scomposto in tante piccole iterazioni waterfall, in ognuna delle quali saranno coinvolte tutte le fasi di sviluppo.\n E la cosa più interessante di questa suddivisione sta proprio nel rilascio di un software funzionante già al termine della prima iterazione!\n Alla base di una metodologia così innovativa, abbiamo il “Manifesto Agile” che consiglio caldamente di leggere, basato su 7 principi fondamentali.\n I principi  1. Deliziare i clienti   Tutto inizia con l\u0026rsquo;obiettivo giusto: lo scopo del lavoro è deliziare i clienti, non semplicemente fare soldi. Il solo obiettivo di fare soldi, porta l’azienda e di conseguenza le persone a pensare di guadagnare per se stessi, mettendo totalmente da parte collaborazione e creatività. Il segreto per un futuro duraturo è infatti avere un cliente disposto ad acquistare beni e servizi sia oggi che domani. Non si tratta quindi di una banale transazione: si tratta di creare una vera e propria relazione.\n 2. Team cross-funzionali e auto-organizzati   \u0026ldquo;Quando lavoriamo insieme a persone che hanno diverse interpretazioni e prospettive, spesso siamo in grado di trovare una soluzione a problemi che non saremmo in grado di risolvere da soli\u0026rdquo;. \u0026ldquo;Un problema complesso, come scoprire modi per deliziare i clienti, viene risolto al meglio da un gruppo di persone cognitivamente diversificato a cui viene data la responsabilità di risolverlo, si auto-organizza e lavora insieme raggiungere un obiettivo comune\u0026rdquo;.  3. Iterazioni guidate dal cliente  In altre parole, \u0026ldquo;lavora in iterazioni guidate dal cliente\u0026rdquo;.\n \u0026ldquo;Ciò che è ancora piccolo è facile da dirigere\u0026rdquo;. - Lao Tzù. \u0026ldquo;Attraverso le iterazioni guidate dal cliente, le aziende sono in grado di mantenere l\u0026rsquo;inventario e il lavoro in corso il più piccolo possibile e personalizzare il proprio prodotto non solo per soddisfare le esigenze percepite originali del cliente, ma anche per adattarlo a eventuali cambiamenti di tali esigenze\u0026rdquo;. \u0026ldquo;Le iterazioni guidate dal cliente migliorano la produttività dell\u0026rsquo;organizzazione concentrando il lavoro sugli elementi che realmente aggiungono valore ed eliminando il lavoro che non aggiunge valore (Ciò che ad oggi è conosciuto come pensiero Lean). Inoltre eliminano i tempi di pianificazione improduttivi e riducono i rischi, fornendo alla direzione non rapporti sullo stato di avanzamento inaffidabili, ma con prova del fatto che siano stati compiuti progressi effettivi\u0026rdquo;.  4. Fornire valore ai clienti in ogni iterazione  \u0026ldquo;Offri valore ai clienti in ogni iterazione\u0026rdquo;\n \u0026ldquo;Le iterazioni guidate dal cliente (e il Radical Management) implicano una rivoluzione mentale, un modo diverso di pensare al lavoro. La chiave del successo è fornire valore ai clienti alla fine di ogni iterazione\u0026rdquo;. \u0026ldquo;Una piccola cosa consegnata prima può deliziare di più di una grande cosa consegnata dopo.\u0026rdquo; \u0026ldquo;L\u0026rsquo;obiettivo principale è quello di ottenere prestazioni a un livello di qualità che soddisfi i clienti e poi lo fornisca prima\u0026rdquo;.  5. Trasparenza radicale  \u0026ldquo;Sii totalmente aperto sugli ostacoli e al miglioramento”\n \u0026ldquo;La verità ti renderà libero. Ma prima, ti farà incazzare.\u0026rdquo; - Gloria Steinem. \u0026ldquo;Il raggiungimento del complesso obiettivo della soddisfazione del cliente richiede una totale apertura su qualsiasi impedimento al lavoro: tutti sono alla pari con tutti gli altri\u0026rdquo;. \u0026ldquo;Il radical management accetta l\u0026rsquo;inevitabilità del fallimento e mette in atto accordi per imparare rapidamente dal fallimento e quindi progredire verso il successo\u0026rdquo;.  6. Auto-miglioramento continuo  \u0026ldquo;Creare un contesto per il continuo auto-miglioramento da parte del team\u0026rdquo;\n \u0026ldquo;Il continuo miglioramento personale è un insieme profondamente radicato di valori e atteggiamenti focalizzati sulla risoluzione dei problemi non appena si verificano\u0026rdquo;. \u0026ldquo;Il continuo miglioramento personale è fragile e quindi ha bisogno di nutrimento e attenzione ogni giorno.\u0026rdquo;  7. Comunicazione interattiva  \u0026ldquo;Condividi in modo interattivo storie, domande, conversazioni\u0026rdquo;\n \u0026ldquo;L\u0026rsquo;organizzazione moderna non può essere un\u0026rsquo;organizzazione di \u0026lsquo;capo\u0026rsquo; e \u0026lsquo;subordinati\u0026rsquo;: deve essere organizzata come una squadra di associati\u0026rdquo;. - Peter Drucker \u0026ldquo;I manager tradizionali parlano ai dipendenti come dipendenti e il potere è la valuta della comunicazione\u0026rdquo;. \u0026ldquo;Il Manager Radicale comunica da un essere umano all\u0026rsquo;altro. La gerarchia è presente ma in secondo piano\u0026rdquo;.  Questo, in maniera introduttiva, è uno scorcio di cosa sia la metodologia Agile\u0026hellip;\n Quando sentiamo parlare di Agile, si sente spesso nominare anche Scrum.\n Cos\u0026rsquo;è Scrum? Lo vedremo nella prossima puntata!\n", "url": "https:\/\/theredcode.it\/design-dev\/parliamo-agile\/" }, "https:\/\/theredcode.it\/tags\/social-media\/": { "title": "social-media", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/tags\/social-media\/" }, "https:\/\/theredcode.it\/interviste\/social-media-marketing-manager\/": { "title": "Voglio diventare una... Social Media Marketing Manager", "tags": ["interviste","voglio-diventare","social-media",], "content": "Abbiamo parlato di cosa vuol dire essere una Social Media Manager grazie a Sabrina; stavolta diamo spazio ad una figura ibrida, per cui saper attuare strategie e azioni volte a raggiungere obiettivi di marketing permettono ad un brand di crescere notelvolmente.\n Non si tratta solo di conoscere e saper sfruttare i social, ma di tradurre questa attività in migliore visibilità, brand awareness e aumento del fatturato.\n Annalisa ci parlerà di come diventare Social Media Marketing Manager, dal momento che lavora nel settore già di diversi anni e che ha fatto della sua curiosità il proprio mestiere!\n Descriviti in 100 parole  Mi chiamo Annalisa Vicari e la mia città è Milano, dove sono nata e vivo attualmente. Sono una Donna solare, sensibile, empatica, caparbia ed estremamente curiosa.\n Parlo della mia curiosità perché è come se fosse la chiave della mia vita, in quanto mi spinge ogni giorno a conoscere a 360 gradi tutto ciò che posso e che ancora non so.\n Amo interagire con le persone, sono una sorta di animale sociale, perché penso che ciascuno di loro abbia qualcosa da insegnarmi e resto in ascolto, ma parlo anche moltissimo. L’interazione con gli altri e l’aggiornamento costante sono il mio “pane quotidiano”.\n Amo tutto ciò che è natura e gli animali, con cui provo a stabilire una comunicazione.\n In cosa consiste il ruolo di Social Media Marketing Manager?  Faccio la Social Media Marketing Manager dal 2012, quando ancora questo lavoro era sconosciuto ai più e non aveva neppure un nome.\n Dopo il diploma come ragioniera e programmatrice informatica ho deciso di intraprendere il percorso universitario e mi sono laureata in Economia, marketing, comunicazione aziendale e mercati globali.\n Il percorso accademico mi ha fatto scoprire la mia creatività, la mia passione per la comunicazione e la pubblicità.\n Sono una freelance e lavoro da remoto in solitaria, ma negli anni ho avuto modo di lavorare in team con altri professionisti perché credo che la verticalizzazione nelle professioni digital sia la chiave del successo di un progetto.\n Mi spiego meglio: spesso si pensa che si possa fare tutto bene e da soli, io invece credo che ogni professionista abbia delle skills che vanno ad incastrarsi perfettamente con quelle di qualcun altro.\n Non vorrei addentrarmi nei tecnicismi, ma credo mi tocchi, quindi provo ad esemplificare il concetto: io mi occupo del progetto dall’inizio alla fine; quindi, conosco gli steps che occorrono per affermarsi sul web, in cui oggi non conta più solo esserci, ma il modo in cui si è presenti.\n Il sito internet è il punto di partenza per la comunicazione di un’azienda di qualunque dimensione ed è da questo che parto per fare l’analisi della strategia da attuare sui canali social. Questa è l’unica cosa che unisce tutti i miei clienti e i potenziali.\n Partendo da un sito web ben fatto (per cui occorrono la figura del web master, del copywriter e del SEO Expert) dopo aver chiesto la mission e la vision del cliente e quali obiettivi vorrebbe raggiungere, mi occupo di fare un’analisi generale, dei competitors, dei valori aziendali e su quali social network è opportuno presenziare per un’efficace comunicazione.\n Quindi redigo il business plan, il piano editoriale e il calendario editoriale, essenziali per ottimizzare il tutto.\n Oltre alla gestione dei social network, mi occupo di advertising sulle piattaforme e adoro osservare i dati, le metriche che sono l’indicatore delle performance delle campagne pubblicitarie e che mi consentono di avere sempre una visione chiara e di continuare l’ottimizzazione.\n Inoltre mi piace offrire consulenza sia ai social media marketing manager junior che a chiunque voglia aprirsi all’educazione digitale.\n Qual è la soft skill più importante che deve possedere una Social Media Marketing Manager?  Potrei fare un elenco delle soft skills importanti perché per fare bene il mestiere del Social Media Marketing Manager occorre avere una conoscenza di tante materie, da quelle più tecniche, economiche a quelle più umanistiche, ma la mia scelta sulla soft skills più importante cade sull’adattabilità del professionista.\n Lavorando su piattaforme terze, di cui non siamo proprietari, ma solo ospiti, dobbiamo aggiornarci quotidianamente e adattarci agli aggiornamenti e alle novità che ogni social network decide di implementare.\n Quindi se è vero che serve una struttura mentale aperta e creativa, è altrettanto vero che dobbiamo adeguarci agli standard in continuo movimento delle diverse piattaforme proprietarie per far sì che il nostro lavoro non perda di efficacia nel tempo. Insomma, questo è un lavoro in cui “chi si ferma è perduto”.\n La maggior parte di noi utilizza i social per parlare dei propri successi, ma la realtà è che siamo quel che siamo grazie al 90% dei nostri errori. Racconta il tuo più grande fallimento da quando lavori nel settore, che però ti ha reso ciò che sei.  Pensa che uno dei motivi per cui ho scelto questo lavoro è che ti permette di imparare dagli errori, un po\u0026rsquo; come nella vita.\n Il mio più grande errore è stato quello di fidarmi della sorella di una cliente che seguivo nei primi anni di lavoro; questo accade spesso quando sei in buona fede e ancora non conosci i “trucchi” del mestiere.\n Quello che è accaduto, mi ha lasciata talmente male da dover porre in essere da quel momento in poi la clausola di esclusività, insieme al cliente, se lo desidera, sull’amministrazione dei canali social del brand in oggetto.\n In altre parole, dopo aver lavorato per più di tre anni e mezzo alla visibilità, notorietà e vendita dei prodotti di un nuovo brand di gioielli, arrivando al punto in cui ad indossarli erano anche dei VIP e partecipando a kermesse di portata nazionale e internazionale, come il Festival di Sanremo, e a canali televisivi del calibro di Mediaset, un’altra persona, amministratrice anch’essa dei canali social con la giustificazione di verificare l’andamento del progetto, presa da un colpo di invidia per i successi raggiunti, da un giorno all’altro, ha cancellato quasi tutti i post, i video, gli eventi presenti sui canali principali.\n Per me è stato un vero e proprio shock vedere cancellati anni di lavoro in un “click” e senza una ragione seria e pochi mesi dopo ho deciso di non lavorare più per quel brand che mi aveva dato tante soddisfazioni, ma che purtroppo non aveva più le basi di fiducia e stima per proseguire.\n Posso dire che per me, ad oggi, più che un fallimento è stata una lezione importante, nonostante abbia comportato delle conseguenze importanti.\n Come fare per diventare una Social Media Marketing Manager?  Questa è una domanda che mi hanno posto moltissime persone che volevano approcciare alla professione del Social Media Marketing Manager e sono lieta di poter esprimere pubblicamente il mio pensiero perché c’è una grandissima confusione sul tema e molti abbandonano poco dopo aver iniziato.\n La prima cosa che deve avere un/a social media marketing manager sembra scontata, ma ti assicuro che non lo è: ti devono piacere i social network dal punto di vista dell’utente che li utilizza quotidianamente e devi avere la curiosità e la costanza di studiare per capire quali sono le dinamiche che si celano dietro agli algoritmi delle varie piattaforme.\n In seconda battuta, mi assumo la responsabilità di dire che le certificazioni che si ottengono a seguito di corsi di breve durata non sono sufficienti neppure per iniziare, perché purtroppo forniscono tanta teoria, ma nessuna pratica, quindi poi in fase di operatività molti si scoraggiano perché si sentono smarriti.\n Possono certamente essere utili per approfondire determinati argomenti o funzionalità, ma non insegnano all’atto pratico come si lavora nel mondo reale.\n Avere delle basi tecnologiche è un’altra prerogativa essenziale, così come essere aperti di mentalità e stabilire delle ore dedicate proprio all’aggiornamento delle tecnologie.\n Io sono stata fortunata perché, come dicevo, ho le basi della programmazione informatica, analisi dei dati, economia, marketing, comunicazione derivate dal mio percorso di studi -conoscenze fondamentali-, perché quando mi sono laureata, il settore digital ancora non esisteva.\n Oggi esistono invece veri e propri corsi universitari per lo studio dei new media, ma vista la velocità e la frequenza degli aggiornamenti, non sarà mai sufficiente fermarsi alla laurea.\n Tra parentesi, conosco bravissimi professionisti che non sono laureati, quindi il percorso universitario non è un elemento indispensabile!\n Lo studio costante lo è. Per lavorare in questo mondo occorre avere un minimo di cultura tecnologica, tecnica, statistica, matematica, di marketing, comunicazione, psicologia, neuromarketing e altro ancora.\n Acquisire queste competenze è possibile solo grazie alla curiosità di cui parlavo nell’introduzione, alla voglia di mettersi in gioco, al coraggio di sbagliare per imparare a migliorare.\n Possono essere delle buone esperienze quelle che si maturano nelle web agency, perché per iniziare è necessario “sporcarsi le mani”, ma poi sta a noi capire quali obiettivi vogliamo raggiungere e trovare la strada per farlo.\n  Iniziare un progetto proprio sul personal branding è la sfida migliore che si possa fare e poi qualche consulenza mirata per chiarire dubbi con professionisti senior è un buon metodo.\n  È molto importante non sentirsi mai arrivati, essere umili e avere il coraggio di chiedere a chi è più esperto. Lo scambio tra colleghi del settore è indispensabile!\n Parlando di successi, qual è il tuo prossimo obiettivo? Quale ruolo vorresti ricoprire entro i prossimi 3 anni?  Tre anni nel mondo del web sono un tempo lunghissimo, quindi di obiettivi ne ho moltissimi: tornando al focus delle domande, mi piacerebbe arrivare a ricoprire il ruolo di Digital Project Manager.\n In realtà, questo è un sogno che porto nel cuore dalla mia prima lezione di Pubblicità in università, ma ancora non mi è stato possibile arrivarci per varie ed eventuali.\n La prima cosa che sto cercando e che testerò sarà un team di professionisti freelance verticalizzati nella loro materia, interessati a collaborare per un progetto strutturato e che abbiano affinità con me e caratteristiche peculiari e caratteriali per riuscire a collaborare in modo sano e per l\u0026rsquo;obiettivo comune.\n Inoltre, vorrei continuare a implementare la parte del mio lavoro inerente alla formazione perchè per me è estremamente gratificante riuscire a insegnare e formare professionisti e far comprendere l\u0026rsquo;educazione digitale.\n Conosci il tema gender gap in ambito STEM? Se sì, come fare per superarlo?  Conosco molto bene il tema gender gap in generale, mi è capitato spesso di sposare cause per il superamento di questa discriminazione che ai miei occhi pare così obsoleta, eppure è ancora troppo presente in Italia (parlando sempre con cognizione di causa, mi riferisco al territorio che conosco) e ho partecipato attivamente alla campagna “Dateci Voce” qualche anno fa.\n Si tratta di un movimento che scrisse una lettera indirizzata a Giuseppe Conte, allora Presidente del Consiglio e al Governo Italiano e per conoscenza a Vittorio Colao e ai componenti della “task force” che chiedeva espressamente l\u0026rsquo;introduzione di Donne nella gestione della pandemia, che fino a quel momento non avevano avuto alcuna posizione di rilievo.\n Questa campagna ha avuto un risultato positivo e infatti abbiamo ancora una buona percentuale di donne nel Governo e nella gestione della situazione pandemica.\n In ambito STEM posso affermare che il gender gap è più evidente in alcune professioni rispetto ad altre.\n La posizione delle donne come Social Media Marketing Manager è abbastanza paritaria, specie per i freelancer, anche perché richiede una buona dose di complicità tra il cliente e il professionista; quindi, la scelta ricade spesso sull\u0026rsquo;empatia che si riesce a trovare tra le parti.\n  Resta invece ancora molto sentito ed evidente nel settore della programmazione, website e nuove tecnologie, come la realtà aumentata, mi riferisco sempre all\u0026rsquo;Italia.\n  Come potrebbe essere superato? Con l\u0026rsquo;educazione e la cultura che ponga fine alla discriminazione di genere e si focalizzi sulla meritocrazia dell\u0026rsquo;individuo in quando tale a prescindere dall\u0026rsquo;orientamento sessuale e/o al genere di appartenenza.\n A questo proposito mi impegno a utilizzare lo “schwa” ogni volta che mi è possibile perché al di là delle polemiche in merito, credo che possa essere il giusto seme da veder germogliare e crescere nelle generazioni future.\n Ci conto molto perché odio ogni genere di discriminazione perchè siamo tutti esseri umani che meritano rispetto per ciò che sono e che i pregiudizi, in gergo tecnico “bias cognitivi”, dovrebbero cessare di esistere e l\u0026rsquo;unico modo per essere più aperti mentalmente è riconoscerli e uscire dalla propria bolla, in cui ci sentiamo più forti e rafforziamo i pregiudizi.\n È un compito difficilissimo perché richiede molto lavoro su sé stessi, ma io resto idealista e voglio credere che riusciremo a sdoganarli.\n  Grazie ad Annalisa per aver condiviso la sua personale esperienza!\n  Contatti   Telegram Linkedin Facebook Instagram Twitter Pinterest Twitch Website  ", "url": "https:\/\/theredcode.it\/interviste\/social-media-marketing-manager\/" }, "https:\/\/theredcode.it\/docker\/java-servlet-con-docker\/": { "title": "Java Servlet con Docker", "tags": ["docker","java",], "content": "Uno dei problemi più comuni nell\u0026rsquo;usare Docker è prendere la propria applicazione e capire come \u0026ldquo;metterla\u0026rdquo; in un container\u0026hellip; E uno dei peggiori casi è quando parliamo di un\u0026rsquo;applicazione Java.\n Quindi, perché non dargli una chance? In questa guida, vediamo come prendere una semplice applicazione che usa le Java Servlet e vediamo come farla funzionare all\u0026rsquo;interno di un container basato su Tomcat.\n Iniziamo con l\u0026rsquo;articolo Java Servlet con Docker!\n Panoramica dell\u0026rsquo;applicazione Java  HelloServlet Il primo esempio di servlet è quello che fornisce una classe che restituisca una pagina HTML. L\u0026rsquo;esempio è volutamente semplice, perché cerca di concentrarsi su come far funzionare un\u0026rsquo;applicazione che avrete già scritta in Java su Docker!\n Di seguito, l\u0026rsquo;esempio della classe Servlet che, importando la libreria javax.servlet, ritorna una pagina con il classico messaggio \u0026ldquo;hello world\u0026rdquo; grazie al metodo init: usando l\u0026rsquo;annotazione @WebServlet, definiamo il nome della servlet ed anche l\u0026rsquo;endpoint che sarà possibile chiamare.\n import java.io.*; import javax.servlet.http.*; import javax.servlet.annotation.*; @WebServlet(name = \u0026#34;helloServlet\u0026#34;, value = \u0026#34;/hello-servlet\u0026#34;) public class HelloServlet extends HttpServlet { private String message; public void init() { message = \u0026#34;Hello World!\u0026#34;; } public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { response.setContentType(\u0026#34;text/html\u0026#34;); // Hello PrintWriter out = response.getWriter(); out.println(\u0026#34;\u0026lt;html\u0026gt;\u0026lt;body\u0026gt;\u0026#34;); out.println(\u0026#34;\u0026lt;h1\u0026gt;\u0026#34; + message + \u0026#34;\u0026lt;/h1\u0026gt;\u0026#34;); out.println(\u0026#34;\u0026lt;/body\u0026gt;\u0026lt;/html\u0026gt;\u0026#34;); } public void destroy() { } }  Nel metodo doGet indichiamo il tipo di Content-Type e poi, tramite un PrintWriter, andiamo a restituire il codice HTML della pagina all\u0026rsquo;interno dell\u0026rsquo;oggetto response.\n Questa servlet, una volta avviata tramite un server Tomcat, risponderà quindi all\u0026rsquo;indirizzo http://localhost:8080/hello-servlet:\nPagina principale dell\u0026rsquo;applicazione Java\nPagina di risposta della servlet\nJSONServlet  Per rendere l\u0026rsquo;esempio più completo, vediamo anche una servlet che restituisce un oggetto JSON: in questo caso, nel message andiamo a salvare una stringa che rappresenti un JSON. Questa può facilmente essere sostituita con un oggetto JSON che prendiamo da un database!\n Le operazioni da compiere per restituire questo oggetto sono le stesse fatte nella precedente servlet, cambia solo il Content-Type: in questo caso, specifichiamo application/json.\n import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; @WebServlet(name = \u0026#34;helloJsonServlet\u0026#34;, value = \u0026#34;/hello-json-servlet\u0026#34;) public class JSONServlet extends HttpServlet{ private String message; public void init() { message = \u0026#34;{\\\u0026#34;message\\\u0026#34;: \\\u0026#34;hello JSON!\\\u0026#34;}\u0026#34;; } public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { response.setContentType(\u0026#34;application/json\u0026#34;); // Hello PrintWriter out = response.getWriter(); response.setCharacterEncoding(\u0026#34;UTF-8\u0026#34;); out.print(message); } public void destroy() { } }  index.jsp  Il file .jsp ci servirà come view del progetto: in questa pagina abbiamo aggiunto due link che puntano alle due diverse servlet, per verificare che le chiamate vadano a buon fine.\n Il risultato dovrebbe essere quello mostrato nella prima immagine:\n \u0026lt;%@ page contentType=\u0026#34;text/html; charset=UTF-8\u0026#34; pageEncoding=\u0026#34;UTF-8\u0026#34; %\u0026gt; \u0026lt;!DOCTYPE html\u0026gt; \u0026lt;html\u0026gt; \u0026lt;head\u0026gt; \u0026lt;title\u0026gt;JSP - Hello World\u0026lt;/title\u0026gt; \u0026lt;/head\u0026gt; \u0026lt;body\u0026gt; \u0026lt;h1\u0026gt;\u0026lt;%= \u0026#34;Hello World!\u0026#34; %\u0026gt; \u0026lt;/h1\u0026gt; \u0026lt;br/\u0026gt; \u0026lt;p\u0026gt; Questa è la mia prima servlet. \u0026lt;/p\u0026gt; \u0026lt;%--Qui vengono definiti i contesti a cui punteranno i link: \u0026#34;hello-servlet\u0026#34; e \u0026#34;hello-json-servlet\u0026#34;--%\u0026gt; \u0026lt;a href=\u0026#34;hello-servlet\u0026#34;\u0026gt;Hello Servlet\u0026lt;/a\u0026gt; \u0026lt;a href=\u0026#34;hello-json-servlet\u0026#34;\u0026gt;Hello JSON Servlet\u0026lt;/a\u0026gt; \u0026lt;/body\u0026gt; \u0026lt;/html\u0026gt;  pom.xml  A questo punto, produciamo il file .war. Per farlo utilizziamo Maven e specifichiamo tutte le informazioni necessarie per produrre l\u0026rsquo;artifact all\u0026rsquo;interno del file pom.xml!\n \u0026lt;?xml version=\u0026#34;1.0\u0026#34; encoding=\u0026#34;UTF-8\u0026#34;?\u0026gt; \u0026lt;project xmlns=\u0026#34;http://maven.apache.org/POM/4.0.0\u0026#34; xmlns:xsi=\u0026#34;http://www.w3.org/2001/XMLSchema-instance\u0026#34; xsi:schemaLocation=\u0026#34;http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd\u0026#34;\u0026gt; \u0026lt;modelVersion\u0026gt;4.0.0\u0026lt;/modelVersion\u0026gt; \u0026lt;groupId\u0026gt;it.theredcode.example\u0026lt;/groupId\u0026gt; \u0026lt;artifactId\u0026gt;REST-API\u0026lt;/artifactId\u0026gt; \u0026lt;version\u0026gt;1.0-SNAPSHOT\u0026lt;/version\u0026gt; \u0026lt;name\u0026gt;REST-API\u0026lt;/name\u0026gt; \u0026lt;packaging\u0026gt;war\u0026lt;/packaging\u0026gt; \u0026lt;properties\u0026gt; \u0026lt;maven.compiler.target\u0026gt;1.8\u0026lt;/maven.compiler.target\u0026gt; \u0026lt;maven.compiler.source\u0026gt;1.8\u0026lt;/maven.compiler.source\u0026gt; \u0026lt;junit.version\u0026gt;5.7.1\u0026lt;/junit.version\u0026gt; \u0026lt;/properties\u0026gt; \u0026lt;dependencies\u0026gt; \u0026lt;dependency\u0026gt; \u0026lt;groupId\u0026gt;javax.servlet\u0026lt;/groupId\u0026gt; \u0026lt;artifactId\u0026gt;javax.servlet-api\u0026lt;/artifactId\u0026gt; \u0026lt;version\u0026gt;4.0.1\u0026lt;/version\u0026gt; \u0026lt;scope\u0026gt;provided\u0026lt;/scope\u0026gt; \u0026lt;/dependency\u0026gt; \u0026lt;dependency\u0026gt; \u0026lt;groupId\u0026gt;org.junit.jupiter\u0026lt;/groupId\u0026gt; \u0026lt;artifactId\u0026gt;junit-jupiter-api\u0026lt;/artifactId\u0026gt; \u0026lt;version\u0026gt;${junit.version}\u0026lt;/version\u0026gt; \u0026lt;scope\u0026gt;test\u0026lt;/scope\u0026gt; \u0026lt;/dependency\u0026gt; \u0026lt;dependency\u0026gt; \u0026lt;groupId\u0026gt;org.junit.jupiter\u0026lt;/groupId\u0026gt; \u0026lt;artifactId\u0026gt;junit-jupiter-engine\u0026lt;/artifactId\u0026gt; \u0026lt;version\u0026gt;${junit.version}\u0026lt;/version\u0026gt; \u0026lt;scope\u0026gt;test\u0026lt;/scope\u0026gt; \u0026lt;/dependency\u0026gt; \u0026lt;/dependencies\u0026gt; \u0026lt;build\u0026gt; \u0026lt;plugins\u0026gt; \u0026lt;plugin\u0026gt; \u0026lt;groupId\u0026gt;org.apache.maven.plugins\u0026lt;/groupId\u0026gt; \u0026lt;artifactId\u0026gt;maven-war-plugin\u0026lt;/artifactId\u0026gt; \u0026lt;version\u0026gt;3.3.1\u0026lt;/version\u0026gt; \u0026lt;/plugin\u0026gt; \u0026lt;/plugins\u0026gt; \u0026lt;/build\u0026gt; \u0026lt;/project\u0026gt;  Definire il Dockerfile  Per far sì che la nostra webapp funzioni con Docker, dobbiamo scrivere un Dockerfile. Lo facciamo partendo da un\u0026rsquo;immagine base di Tomcat che includa già JRE: in questo modo, non avremo bisogno di installare altre dipendenze.\n La versione di JRE è la 8 e utilizza OpenJDK; in questo caso, questa immagine è la slim-buster.\n Questo vuol dire che n_on contiene i pacchetti comuni contenuti nel tag predefinito_ e contiene solo i pacchetti minimi necessari per eseguire Tomcat.\n Questa immagine è perfetta se lavoriamo in un ambiente di sviluppo e vogliamo ridurre al minimo lo spazio occupato dall\u0026rsquo;immagine!\n Detto ciò, nel Dockerfile andremo a specificare questa immagine nell\u0026rsquo;istruzione FROM e poi andremo ad aggiungere il file .war generato precedentemente tramite l\u0026rsquo;istruzione ADD e lo andremo a copiare nella cartella /user/local/tomcat/webapps.\n In ultimo, andremo ad esporre la porta 8080 tramite la direttiva EXPOSE e infine andremo ad eseguire il comando che ci permetta di far avviare Tomcat nell\u0026rsquo;istruzione CMD:\n FROM tomcat:9.0.58-jre8-openjdk-slim-buster LABEL maintainer=\u0026#34;test@mail.com\u0026#34; ADD ./target/REST-API-1.0-SNAPSHOT.war /usr/local/tomcat/webapps/ EXPOSE 8080 CMD [\u0026#34;catalina.sh\u0026#34;, \u0026#34;run\u0026#34;]  A questo punto, è tempo di avviare Docker: lo faremo eseguendo prima la build dell\u0026rsquo;immagine e poi mettendo in run il container, dove andremo anche a specificare la porta 8080 tramite il parametro -p.\nQuesto ci permetterà di raggiungere l\u0026rsquo;applicazione anche in locale:\n docker build -t my-app . docker run -d -p 8080:8080 my-app  In questo caso, andremo a raggiungere l\u0026rsquo;applicazione tramite http://localhost:8080; attenzione però: è necessario specificare anche il nome del .war, che in questo caso è REST-API-1.0-SNAPSHOT.\nApplicazione Java Servlet con Docker\n  E il gioco è fatto!\n  Risorse utili Codice Java REST API con Docker Docker - Apogeo Canale Emmecilab  ", "url": "https:\/\/theredcode.it\/docker\/java-servlet-con-docker\/" }, "https:\/\/theredcode.it\/interviste\/full-stack-developer2\/": { "title": "Voglio diventare una... Full-Stack Developer", "tags": ["interviste","voglio-diventare",], "content": "Come si dice\u0026hellip; non c\u0026rsquo;è uno, senza due (e magari non c\u0026rsquo;è due, senza tre): oggi parliamo con Serena, Full-Stack Developer in Unikey srl, dopo aver parlato con Martina Della Corte la settimana scorsa della stessa professione.\nL\u0026rsquo;elenco delle competenze che deve possedere una figura di questo genere è molto lunga e sempre più spesso capita di vedere profili di questo tipo: donne e uomini che sono in grado di destreggiarsi su entrambi i fronti, avendo una panoramica piuttosto ampia del funzionamento di un applicativo web e non.\n Requisito fondamentale: essere curiosi e aver voglia di studiare ogni giorno!\n Descriviti in 100 parole  Sono una persona che ha sempre amato l’idea di costruirsi un futuro e una propria identità da sola, forse a causa di vicende passate che hanno influito sulla mia personalità (un po’ per fortuna, un po’ per sfortuna), cercando sempre di non reprimere mai quell’empatia che oggi credo fermamente sia fondamentale in molteplici ambiti, da quello lavorativo a quello privato.\n In alcune situazioni riesco ancora ad essere una persona abbastanza pigra devo dire 😃, ma con il tempo ho sviluppato ambizione e voglia di mettermi alla prova ogni singolo giorno della mia vita.\n In cosa consiste il ruolo di Full-Stack Developer?  Ho iniziato questo percorso partendo dal front-end e ho sempre lavorato in team, cosa che giorno dopo giorno mi ha insegnato tantissimo sul come ci si relaziona con le persone, soprattutto nell’ottica di fare un lavoro di squadra, ed attualmente mi occupo principalmente di back-end presso un grande cliente.\nSe dovessi darti una definizione di Full-Stack Developer, ti direi che questa figura “comunemente” è in grado di toccare tutto lo stack di un’applicazione, dal front-end, al back-end, fino ad arrivare al DB.\n Ma non è solo questo\u0026hellip; Al giorno d’oggi la tecnologia fa passi da gigante ed è in costante evoluzione, il che significa, per chi svolge un lavoro del genere, impegnarsi nell’apprendere con costanza tutti i cambiamenti e le novità che giorno dopo giorno emergono.\n Quindi full-stack developer, alla luce di un progresso così rapido, assume un significato più ampio, identificando persone in grado di comprendere sempre meglio le tecnologie più svariate e di affrontare tutti i cambiamenti e le novità, consapevoli di arricchire il proprio bagaglio culturale.\n  Qual è la soft skill più importante che deve possedere una Full-Stack Developer?  Tra le tante soft skills che contano in un lavoro del genere, che vanno dalla perseveranza e voglia di non abbattersi davanti ai problemi che possono sorgere (di natura tecnica e non), alla capacità di gestire lo stress in situazioni particolarmente sfidanti.\n Credo che curiosità e voglia di confrontarsi con figure di riferimento che possano essere fonte di conoscenza, siano elementi chiave per un miglioramento costante, permettendoti di superare i tuoi limiti e di crescere come persona e come professionista, con il conseguente raggiungimento dei tuoi obiettivi, anche grazie ai consigli di chi ha più esperienza di te..\n Perchè mamma Stack Overflow è sempre una valida risorsa, lo studio è fondamentale, ma il confronto fra persone che amano allo stesso modo questo lavoro è quanto di più produttivo e stimolante possa esserci!\n La maggior parte di noi utilizza i social per parlare dei propri successi, ma la realtà è che siamo quel che siamo grazie al 90% dei nostri errori. Racconta il tuo più grande fallimento da quando lavori nel settore, che però ti ha reso ciò che sei.  Non avresti potuto scrivere cosa più vera..\n Al giorno d’oggi i social sono uno strumento utile a mostrare davvero una microscopica parte della vita delle persone e tendenzialmente si mostra solo ciò che c’è di bello, come appunto i propri successi, creando un’immagine quasi idilliaca di alcune vite, ma è difficile immaginare ciò che si cela dietro tutto questo.\n Tornando però a quella che è la domanda principale…beh, probabilmente non essere riuscita ad integrarmi opportunamente in uno dei primi progetti sui quali ho lavorato, ha rappresentato per me una sconfitta pazzesca, dal punto di vista umano e professionale.\n E per quanto questa esperienza sia stata dolorosa e abbia segnato un periodo in cui, sia per inesperienza che a causa del contesto ostile in cui mi trovavo, non ero in grado di andare avanti, e, nonostante l’unica domanda che rimbombava nella mia testa fosse “Perchè è andata in questo modo?”, ho successivamente analizzato a mente fredda ogni singolo evento, dando una risposta a quella domanda e facendo tesoro di quanto accaduto, realizzando che per quanto l’empatia sia la chiave di una comunicazione efficace, debba essere accompagnata da forza di volontà e dalla competenza tecnica e relazionale che ovviamente matura con il tempo.\n Tutto ciò mi ha dato la forza di non fermarmi mai, mi ha resa una persona migliore, più forte, capace di affrontare con lucidità e “leggerezza” determinate situazioni, capace di apprendere quanto più rapidamente possibile tutto il necessario per essere autonoma e operativa in tempi brevi, rimanendo però sempre quella simpaticona del sud a cui piace sempre strappare un sorriso alle persone, ma se in alcuni casi non ci riesce…beh, tocca essere un po’ diplomatici suvvia! 😜\n Come fare per diventare una Full-Stack Developer?  Al di là della mole infinita di informazioni che troviamo online al giorno d’oggi, grazie alle quali potremmo apprendere da autodidatti una miriade di nozioni utili a svolgere un lavoro così articolato e stimolante, credo fermamente che un percorso formativo ad hoc sia fondamentale.\n Infatti è proprio grazie a questo che una figura professionale del genere nasce, acquisendo e soprattutto consolidando le basi della programmazione, imparando a toccare tutto lo stack di un’applicazione, partendo dal database, passando dal back-end, sino ad arrivare al front-end.\n Prendi me, per esempio: per il front-end ho usato Angular, ma per il backend adesso sviluppo in Java e attualmente sto lavorando su architettura a microservizi, API REST e via dicendo, ma ho toccato anche servizi SOAP.\n Di importanza equivalente è anche lo studio, incluso ovviamente nel percorso formativo di cui parliamo, delle tecnologie sulle quali successivamente si andrà a lavorare sul serio, che sia Angular o React per il front-end ad esempio, o linguaggi specifici quali C# o Java e così via, arrivando poi alle tantissime certificazioni disponibili ,che possono essere assolutamente un valido strumento per intraprendere un percorso di specializzazione e soprattutto di crescita professionale!\n Parlando di successi, qual è il tuo prossimo obiettivo? Quale ruolo vorresti ricoprire entro i prossimi 3 anni?  Domanda da un milione di dollari…😂\nMa riflettendo sulle esperienze fatte in questi anni e dopo aver osservato molto attentamente svariate situazioni che mi si son presentate davanti e che mi hanno permesso di imparare tantissimo sotto ogni aspetto, che sia esso tecnico piuttosto che organizzativo, ti direi che l’obiettivo che perseguo e che spero di raggiungere un giorno, sia quello di diventare una figura in grado di contribuire in modo importante al successo di un progetto.\n Aver visto progetti caotici, in cui i team navigavano nell’incertezza, nella fretta di dover terminare il proprio lavoro senza aver ben chiaro cosa si dovesse fare (e l’esserci stata anche in mezzo), aver visto progetti in cui il sentimento maggiormente percepito era l’insoddisfazione, è stata un’esperienza dolorosa e frustrante, ma questa è solo la parte negativa..\n Ho avuto la fortuna e l’onore di lavorare anche in team in perfetta sintonia, capaci di adattarsi ad ogni situazione, performanti come pochi, grazie alla trasparenza, alle idee chiare, ai requisiti precisi e ai LEADER che si occupavano della loro gestione e, vedere entrambe i lati della medaglia non ha fatto altro che alimentare in me questo desiderio di diventare come loro!\n Conosci il tema gender gap in ambito STEM? Se sì, come fare per superarlo?  E’ sicuramente un tema delicato.\n Un grande scoglio da superare a mio avviso e in base ai tanti articoli letti, si trova al momento dell’ingresso nel mercato del lavoro.\n Dati statistici affermano infatti, che nonostante le ragazze STEM abbiano delle capacità straordinarie al pari di tanti ragazzi pieni di talento, ad un anno dalla laurea, hanno comunque meno probabilità di trovare lavoro rispetto agli uomini e guadagnano meno di loro.\n Si sente spesso parlare di queste tematiche, ma l’unico auspicio è che la situazione possa migliorare sempre più con il passare del tempo e che si possano investire le energie giuste per superare questa discrepanza.\n Per cogliere poi le opportunità offerte dalla rivoluzione digitale, servono ovviamente professionisti con competenze STEM.\n In questo percorso è infatti fondamentale incentivare la partecipazione delle ragazze ai percorsi di studio e professionali scientifici e tecnologici, ad oggi principalmente frequentati da uomini, anche se fortunatamente, sempre più figure femminili si stanno affacciando a questo mondo e una testimonianza di questo cambiamento la posso trovare nella stessa azienda di cui faccio felicemente parte oggi, che ha accolto me, dandomi tutti gli strumenti necessari per diventare un professionista felice del suo lavoro e accoglie ragazzi e anche ragazze pieni di talento e forza di volontà, vedendoli crescere giorno dopo giorno e diventare dei professionisti del settore.\n Ci vuole forza ad affrontare i cambiamenti che la vita ci pone davanti, a mettersi in gioco, a provarci nonostante la paura di non farcela sia tanta..\n  Ma quando ce la fai, la strada sarà sempre meno in salita e sarà meraviglioso guardarti alle spalle e vedere ciò che sei diventato dopo una serie non indifferente di sacrifici.\n  Ma questo è un pensiero rivolto non solo alle donne, ma a chiunque stia lavorando su se stesso e si stia impegnando in ciò in cui crede!\n Contatti Profilo LinkedIn\n ", "url": "https:\/\/theredcode.it\/interviste\/full-stack-developer2\/" }, "https:\/\/theredcode.it\/tags\/postgres\/": { "title": "postgres", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/tags\/postgres\/" }, "https:\/\/theredcode.it\/database\/reset-password-di-postgresql-in-windows\/": { "title": "Reset password di PostgreSQL in Windows", "tags": ["postgres",], "content": "Se, come a me, capita di dimenticare le password, questa guida fa per te!\n In questo breve articolo, vedremo passo dopo passo come reimpostare la password di PostgreSQL in Windows.\n Procedimento  Per qualche motivo, dopo aver installato PostgreSQL, to capitasse di dimenticare la password dell\u0026rsquo;utentepostgres, questi sono i passi da seguire.\n PostgreSQL in Windows utilizza il file di configurazione pg_hba.confmemorizzato nella directory dei dati del database (ad esempio, C:\\Program Files\\PostgreSQL\\[VERSION]\\data) per controllare l\u0026rsquo;autenticazione tramite il client.\n Non a caso, hba significa host-based authentication!\n Attenzione a cambiare la versione di PostgreSQL nel precedente path con quella che effettivamente avete installato: questa guida vale sia per tutte le installazioni che vanno dalla 9.6 alla 13.\n Per reimpostare la password per l\u0026rsquo;utente postgres, è necessario modificare alcuni parametri in questo file di configurazione, accedere come postgres senza utilizzare alcuna password e reimpostarla.\n Per prima cosa, andremo a fare il backup del file pg_hba.conf copiandolo in una posizione diversa o semplicemente rinominandolopg_hba.conf.bk\n Path del file pg_hba.conf per PostgreSQL13\n Adesso passiamo alla modifica del pg_dba.conf: lo apriamo con un qualsiasi editor di testo e cambiamo tutte le voci da scram-sha-256 o md5 a trust. In questo modo, sarà possibile accedere al server del database PostgreSQL senza utilizzare una password.\n  File pg_hba.conf prima della modifica\n File pg_hba.conf dopo della modifica\nOra è il momento di riavviare Postgres: per farlo, possibile usare il tool di gestione dei Servizi di Windows oppure la riga di comando eseguendo questo comando:\npg_ctl -D \u0026#34;C:\\Program Files\\PostgreSQL\\[VERSION]\\data\u0026#34; restart Strumento di gestione dei Servizi di Windows\nDopo aver riavviato PostgreSQL, potremo finalmente accedere con l\u0026rsquo;utente postgres senza alcuna password: utilizziamo quindi PgAdmin (se installato) oppure la riga di comando per loggarci:\nLogin con PgAdmin\npsql -U postgres Questo è il momento di cambiare password. Eseguiamo la seguente query e, soprattutto, segnamocela!\nALTER USER postgres WITH PASSWORD \u0026#39;new_password\u0026#39;; Ultimo step è quello di ripristinare il file pg_dba.conf: andiamo quindi a chiudere sia il client che la riga di comando, sostituiamo il file di cui avevamo fatto il backup e riavviamo nuovamente il server del database PostgreSQL.\nPer verificare che sia andato tutto a buon fine, proviamo a connetterci al server del database PostgreSQL con la nuova password.\n Funziona? Ottimo!\n ", "url": "https:\/\/theredcode.it\/database\/reset-password-di-postgresql-in-windows\/" }, "https:\/\/theredcode.it\/interviste\/full-stack-developer\/": { "title": "Voglio diventare una... Full-Stack Developer", "tags": ["ingegneria-del-software","interviste",], "content": "La sua passione per il cibo passa attraverso i suoi canali social -che invidio tantissimo-, ma in realtà Martina fa molto più di questo: ricopre il ruolo di Full-Stack Developer (e di recente, non solo) in un\u0026rsquo;azienda svedese.\n Questa professione è spesso al centro di discussioni: come si fa a fare tutto? In realtà, non si tratta si essere tuttologi, ma di sapersi destreggiare su più fronti, anche grazie alla presenza di forti competenze tecniche.\n Diamo quindi il benvenuto a Martina Della Corte, Full-Stack Developer per TIQQE!\n Descriviti in 100 parole.  Ciao, sono Martina ho 30 anni e sono un ingegnere informatico.\nAttualmente ricopro il ruolo di full-stack developer presso TIQQE, un’azienda informatica svedese. Mi sono trasferita in Svezia nel 2019, dove vivo con la mia compagna.\nFin da piccola ho avuto un amore profondo per la matematica e sapevo di voler lavorare nel campo scientifico, ma la passione per la tecnologia me l\u0026rsquo;ha infusa mio zio: la miriade di floppy disk sulla sua scrivania ha sempre esercitato un potere magnetico su di me.\nOltre alla passione per l’informatica e la scienza ho un amore smisurato per la cucina e il BUON cibo (difficile concetto da spiegare ad alcuni svedesi), per i libri e per la fotografia.\nIl mio sogno: riuscire a realizzare una serra grandissima per coltivare anche qui in Svezia, i miei amati pomodori.\nIn cosa consiste il ruolo di Full-Stack Developer? Un full-stack developer è un developer che è in grado di prendere parte e dare il suo contributo in qualsiasi parte del processo di sviluppo di un’applicazione.\n  Un full-stack developer è, per esempio, in grado di sviluppare API, creare e gestire database, sviluppare e far comunicare microservizi, ma al tempo stesso è anche in grado di sviluppare l’interfaccia utente di un’applicazione web, lavorare a stretto contatto con i designer per migliorare UI/UX quando necessario e così via.\n  Più semplicemente, un full-stack developer è in grado di operare sia lato frontend, sia lato backend. Non è detto che in tutti i progetti un full-stack developer lavorerà ugualmente a frontend e backend.\nPer esempio, nel progetto a cui lavoro attualmente, svolgo per lo più task relativi al backend e tutto quel che concerne i servizi AWS che utilizziamo, con un’attenzione particolare alla affidabilità del sistema.\nIn progetti medio-grandi, un full-stack developer tipicamente lavora in team ma in progetti piccoli potrebbe tranquillamente lavorare da solo, viste le skill.\nIo per esempio lavoro per un’azienda leader nel settore logistico scandinavo, motivo per cui lavoro in team.\nIn progetti di dimensioni molto più piccole, un solo full-stack developer è sufficiente.\n  Qual è la soft skill più importante che deve possedere una Full-Stack Developer?  Credo che la soft skill più importante che ogni developer e più in generale ogni persona che lavori in questo settore sia l’empatia: dobbiamo ricordare che non tutte le persone sono uguali e che dovremmo essere tutti un po’ più bravi nel riuscire a metterci nei panni dell’altro.\n   Se riuscissimo in questo, avremmo ambienti di lavoro più sereni e team più produttivi.\n  Altra soft skill ritengo stia diventando sempre più importante è la capacità di comunicare.\n Sempre più frequentemente lavoriamo a stretto contatto con il cliente, con la quale discutiamo requisiti e dal quale riceviamo feedback sul nostro operato: saper comunicare in maniera chiara e saper argomentare può aiutare di molto le interazioni.\n La maggior parte di noi utilizza i social per parlare dei propri successi, ma la realtà è che siamo quel che siamo grazie al 90% dei nostri errori. Racconta il tuo più grande fallimento da quando lavori nel settore, che però ti ha reso ciò che sei.   Di errori ne ho fatti tanti nella vita, privata e lavorativa.\n Ma devo dire la verità: faccio fatica a considerarli dei fallimenti, anche i più grandi. Il fallimento mi sa di negativo e io invece adoro fare errori perché quando sbaglio imparo tantissimo, forse molto di più di quando ho successo in qualcosa.\nMagari mi arrabbio o ci rimango male ma quando la botta passa, riesco ad analizzare la situazione in maniera obiettiva e trarre qualcosa di positivo da essa.\nCome fare per diventare una Full-Stack Developer? Essere full-stack non richiede un percorso troppo diverso da quello di un normale sviluppatore.\n Se si frequenta un tradizionale percorso universitario i.e. ingegneria informatica, non c’è probabilmente bisogno di molto altro per poter diventare full-stack.\n Se invece si intraprendono percorsi (universitari e non) mirati più a frontend o backend, potrebbe essere necessario uno o più corsi che bilancino il peso delle nozioni acquisite, o per chi preferisce studio autonomo.\n In generale credo serva tanta passione e tanta voglia di non smettere mai di imparare.\n  Parlando di successi, qual è il tuo prossimo obiettivo? Quale ruolo vorresti ricoprire entro i prossimi 3 anni?  Ultimamente ricopro il ruolo di Site Reliability Engineer nel mio team. È un ruolo nato presso Google e sta diventando sempre più popolare.\nLa mia azienda ha deciso di sperimentarlo e sono tra i primi ad averlo ricoperto. In futuro vorrebbero avere più SRE nei diversi team che abbiamo.\nUn prossimo obiettivo è diventare Leader di un futuro SRE team. Il mio obiettivo primario però è quello di diventare un architetto software. Credo sia la parte più divertente e stimolante del processo produttivo.\n Conosci il tema gender gap in ambito STEM? Se sì, come fare per superarlo?   Se sei una donna che lavora nel settore non puoi non conoscere la tematica.\n Spesso e volentieri mi sono ritrovata ad essere “l’unica”. Lo sono stata in Italia all’università nel mio gruppo di amici, lo sono stata in Italia durante la mia prima esperienza lavorativa e lo sono stata anche qui in Svezia lavorando per il mio precedente datore di lavoro.\nDa qualche anno il numero di donne che lavorano nel settore scientifico-tecnologico è sicuramente in aumento. Ma non è abbastanza.\nSe non sistemiamo la questione parità di genere e patriarcato, non ne usciremo così velocemente. La questione è molto complessa e provare a sintetizzarla in qualche riga è impossibile\u0026hellip;\nContinuiamo a dividere i giochi in giochi da maschi e giochi da femmina e comportamenti che sono più consoni ai maschietti e meno alle femminucce.\nParte della nostra classe politica crede che il nostro posto sia prendersi cura della casa e della prole. Potrei continuare per ore ad elencare stereotipi radicati nella società: se non li sradichiamo vedo difficile ridurre il gender gap in ambito STEM.\n ", "url": "https:\/\/theredcode.it\/interviste\/full-stack-developer\/" }, "https:\/\/theredcode.it\/intelligenza-artificiale\/naive-bayes-e-sentiment-analysis-con-python\/": { "title": "Naive Bayes e Sentiment Analysis con Python", "tags": ["intelligenza-artificiale","machine-learning","nlp","python",], "content": " Come scrivere un programma in Python per distinguere tra una recensione positiva da una negativa o neutrale?\n  In questo articolo vediamo come usare Naive Bayes e Sentiment Analysis con Python sfruttando dei dataset in italiano.\n Il procedimento è valido per qualsiasi tipo di lingua: infatti, trattandosi di un metodo supervisionato, sarà sufficiente fornire un dataset in input che contenga dei testi già classificati; questo ci permetterà di adattare il procedimento a qualsiasi lingua!\n Intro  La sentiment analysis è un processo che permette di determinare se un testo esprime un contenuto positivo, negativo o neutrale. In altre parole, ci permette di chiedere al sistema di analizzare un testo e dirci che tipo di giudizio esprime.\n Non a caso, la sentiment analysis è spesso associata all’opinion mining: in che modo possiamo misurare il giudizio degli utenti su una certa tematica?\n I livelli di applicazioni di questo tipo di attività sono molteplici: nel settore dei social media, analizzare le emozioni degli utenti espresse tramite le varie reazioni o i post è fondamentale per finalità di marketing.\n Non solo: in campo politico, tenere traccia delle opinioni politiche sfruttando i social media permette di anticipare e gestire al meglio le campagne elettorali; un esempio di come farlo, ce lo insegna Obama durante la sua corsa alla Presidenza nel 2008.\n Gestire diverse lingue  L\u0026rsquo;analisi del sentiment sta diventando una parte sempre più importante della comunicazione a causa del numero crescente di persone che utilizzano attivamente i social media e i diversi canali online - attualmente contiamo circa 5 miliardi di persone per la precisione.\n Se si considera che solo il 25,9% degli utenti di Internet parla inglese come madrelingua, l\u0026rsquo;analisi del sentiment in lingue diverse dall\u0026rsquo;inglese diventa sempre più importante; ecco perché questo processo nella sola lingua inglese non è sufficiente.\n Riconoscendo che il sentimento è intrinsecamente legato alla lingua e alla cultura, riconoscere la lingua è un prerequisito fondamentale per questo tipo di analisi.\n Senza identificare la lingua di un post sui social media, un algoritmo non sarà in grado di decifrare le informazioni sul giudizio!\n Questa capacità, tuttavia, deve essere integrata nel modello utilizzato; semplicemente non è possibile coinvolgere dei linguisti umani per tradurre in inglese l\u0026rsquo;intero pool di post sui social media in lingua straniera e poi far assegnare loro un punteggio.\n Detto questo, è giusto sottolineare che l\u0026rsquo;analisi del sentiment multilingue coinvolge molte risorse ed è ancora difficile trovare strumenti che eseguano effettivamente questa attività in più di una lingua contemporaneamente\u0026hellip;\n Ma come fare in italiano?\n Classificare delle recensioni  Vediamo dunque come applicare l\u0026rsquo;analisi del sentiment per classificare delle recensioni; per farlo, utilizzeremo delle frasi tipo che descrivono il giudizio degli utenti rispetto ad un film che hanno appena visto.\n Per valutare il sentiment è possibile usare diversi algoritmi, tra i quali la regressione logistica o Naive Bayes; questi permettono di calcolare la probabilità che un commento o una recensione sia positivo o negativo, partendo da alcuni dati pre-esistenti.\n Se, ad esempio, leggessi la seguente recensione:\n  Film stupendo, pieno di colpi di scena, travolgente ed emozionante. Eccezionale!\n  saprei senza dubbio che si tratta di una recensione positiva.\n Anche nel caso in cui leggessi:\n  Non capisco cosa ci sia di tanto eccezionale in questo film\u0026hellip; tutti dicono che sia stupendo, ma è abbastanza banale.\n  è facile classificare il giudizio dell\u0026rsquo;utente come negativo.\n Questo evidenzia un problema: esistono dei casi in cui delle parole negative vengano usate in un contesto positivo.\n Quindi, non è sufficiente basarsi sulla presenza dei singoli termini positivi o negativi, ma è necessario calcolare la probabilità che un termine compaia in una recensione positiva o negativa che sia.\n Nella sentiment analysis è possibile usare dei metodi supervisionati e non: nel primo caso, si ha un dataset etichettato dove le recensioni sono classificate; nel secondo caso, si associa un punteggio ad ogni termine presente in una lista di parole che sono polarizzate come positive o negative.\n In questo caso d\u0026rsquo;uso, vediamo come sfruttare un metodo supervisionato avendo a disposizione dei dataset che sono già stati etichettati per classificare le recensioni come positive o negative (in fondo trovate tutti i riferimenti).\n In particolare, andremo ad utilizzare Naive Bayes: si tratta di un metodo supervisionato che calcola la probabilità che un testo sia polarizzato positivamente o negativamente sulla base del dataset fornito.\n Esempio  Per farlo, partiamo da un dataset molto semplice: lo scopo di questo articolo non è infatti trasformare il dataset, ma piuttosto, avendone uno pronto a disposizione, sfruttarlo per l\u0026rsquo;attività di sentiment analysis.\n In prima battuta, consideriamo quindi il seguente dataset:\n train2 = [(\u0026#34;E\u0026#39; stata una bella esperienza\u0026#34;, \u0026#34;positive\u0026#34;), (\u0026#34;Male recitato, male interpretato, pessimo\u0026#34;, \u0026#34;negative\u0026#34;), (\u0026#34;Il miglior film che ho mai visto, incredibile\u0026#34;, \u0026#34;positive\u0026#34;), (\u0026#34;Una perdita di tempo\u0026#34;, \u0026#34;negative\u0026#34;), (\u0026#34;Ben diretto, ben recitato, mi è piaciuto, bellissimo\u0026#34;, \u0026#34;positive\u0026#34;), (\u0026#34;Mi è piaciuta la fotografia e gli attori sono fantastici\u0026#34;, \u0026#34;positive\u0026#34;), (\u0026#34;Davvero deluso di questo film\u0026#34;, \u0026#34;negative\u0026#34;), (\u0026#34;Tutti i personaggi sono belli e ben interpretati\u0026#34;, \u0026#34;positive\u0026#34;), (\u0026#34;Purtroppo faceva schifo\u0026#34;, \u0026#34;negative\u0026#34;), (\u0026#34;Orribile e mediocre, sono orripilato\u0026#34;, \u0026#34;negative\u0026#34;)]  Ognuna di queste recensioni è stata classificata come positive o negative. Il dataset è molto piccolo, quindi il modello non sarà perfetto: sarà sufficiente utilizzare un dataset più completo!\n A questo punto, procediamo nel pre-processare i nostri dati: come primo step, andiamo a rendere in minuscolo tutte le parole contenute in ogni frase presente nel nostro dataset, e creiamo un dizionario a partire da questo:\n dictionary = set(word.lower() for passage in train2 for word in word_tokenize(passage[0])) Dizionario creato a partire dal dataset\nFatto questo, creiamo l\u0026rsquo;insieme di train, dove andremo a creare una sorta di mapping tra le parole presenti nelle diverse frasi; creiamo quindi un dizionario dove andiamo a segnare le parole che, a partire da dictionary, sono presenti in ogni frase:\n Nella prima frase sono presenti la parola \u0026ldquo;stata\u0026rdquo; e \u0026ldquo;bella\u0026rdquo;, che quindi vengono segnate come \u0026ldquo;True\u0026rdquo;\n A questo punto, passiamo il nostro set di parole al classificatore, che in questo caso sarà NaiveBayesClassifier: come parametro, gli forniremo proprio l\u0026rsquo;insieme di train appena creato.\n classifier = nltk.NaiveBayesClassifier.train(t)  Ci siamo quasi: il nostro classificatore ha usato i dati in input per creare un modello che adesso andremo a testare. Usiamo una frase fuori dal dataset iniziale e vediamo se riesce a classificare correttamente la recensione:\n test_data = \u0026#34;Questo libro era terribile, sono orripilato\u0026#34; test_data_features = {word.lower(): (word in word_tokenize(test_data.lower())) for word in dictionary} \u0026gt;\u0026gt; negative print(classifier.classify(test_data_features)) test_data2 = \u0026#34;Bellissimo, è stato incredibile\u0026#34; test_data_features2 = {word.lower(): (word in word_tokenize(test_data2.lower())) for word in dictionary} print(classifier.classify(test_data_features2)) \u0026gt;\u0026gt; positive  Ottimo! Il risultato, considerato il dataset iniziale, è un buono. Da non sottovalutare assolutamente di utilizzare dei dataset più completi: di seguito, alcune risorse utili per poter sfruttare dei dati in italiano per migliorare il modello appena creato.\n Risorse utili Dataset SENTIPOLC Dataset T4SA Codice completo  ", "url": "https:\/\/theredcode.it\/intelligenza-artificiale\/naive-bayes-e-sentiment-analysis-con-python\/" }, "https:\/\/theredcode.it\/voglio-diventare-un...-community-manager\/": { "title": "Voglio diventare un... Community Manager", "tags": ["interviste","voglio-diventare",], "content": "Se non hai mai sentito parlare del Community Manager, o non hai ben capito cosa sia, sei nel posto giusto: questa professione digitale ha preso piede nell\u0026rsquo;ultimo decennio in maniera più decisa, anche se si tratta di un ruolo che ha radici molto antiche.\n Per raccontarci il valore e i retroscena di questo mestiere, non potevamo chiedere a Innocenzo Sansone, Community Manager di moltissimi gruppi online e fisici e runner d\u0026rsquo;eccezione!\n A te il palco🎙️\nDescriviti in 100 parole.  Ciao Serena e ciao a tutte le lettrici e lettori 😀!\n Ho iniziato a programmare da bambino quando i miei genitori mi regalarono un Commodore 16. All\u0026rsquo;epoca le istruzioni dei computer erano veri e propri manuali di programmazione; sono partito da autodidatta e non ho più smesso di occuparmi di programmazione e tecnologia.\n Un’altra mia passione sono le maratone (42 km 195 m)! Cinque anni fa ho perso 40 kg camminando e poi ho iniziato a correre disputandone al momento ben 9!\n Ed ecco il mio lavoro ❤️: mi occupo da 15 anni a livello professionale di sviluppo e gestione di Community Dev \u0026amp; Tech per le principali aziende del settore.\n Se troverai interessanti le mie risposte, fai click qui 👉 www.innosans.it ed entriamo in contatto!\n In cosa consiste il ruolo di Community Manager?  Ho già letto in altre interviste del tuo blog di nuovi mestieri difficili da spiegare ai propri genitori 🤣. Ebbene, il Community Manager è uno di questi!\n Anzi ti dirò di più, molto spesso sono proprio le aziende che mi contattano per una consulenza o per lavorare alla propria Community a non avere le idee chiare su cosa il Community Manager faccia.\nOggi “avere una Community” o “fare attività con le Community” viene sempre più percepito come una necessità di business senza comprendere bene le differenze con altre attività e spingendo a commettere, a volte, gravi errori.\n Parlare di Community vuol dire prima di tutto parlare di Persone a cui bisogna dare del valore prima di aspettarsi un ritorno.\n  La “Community” non è un nuovo canale di Marketing!\n  Chi, invece, riesce a capirlo, investe nella propria Community, trasferisce valore a chi ne fa parte e ha la pazienza di farla crescere ne ottiene grossi benefici insieme ai propri membri.\n Spieghiamo velocemente cos’è una Community: è un gruppo di persone che contribuisce ad uno stesso interesse. Facciamo anche degli esempi: il gruppo dei runner di Roma, il gruppo italiano dei programmatori di PHP, il gruppo di chi pratica Yoga e così via..\n Molto spesso questi gruppi nascono in maniera naturale e spontanea, altre volte sono legate ad un progetto aziendale.\n In realtà, le Community sono sempre esistite! La prima forma di Community è stata la famiglia e partendo da qui si potrebbero fare tantissimi altri esempi di Community tradizionali.\n Ma perché oggi si parla sempre di più di Community come attività per cui è necessario un mestiere come quello del Community Manager?!\n Con l’avvento della tecnologia e dei mezzi di comunicazione e poi di Internet è stato sempre più facile comunicare!\n Le occasioni di incontrarsi e confrontarsi sono quindi cresciute esponenzialmente favorendo la costituzione di gruppi, a volte anche molto grandi, per contribuire ad uno stesso interesse.\n Non mi riferisco solo ai social network; l’avvento delle tecnologie di comunicazione e degli strumenti informatici ha reso più facile conoscere persone che condividessero i nostri stessi interessi, incontrarle di persona oltre che online, organizzare incontri per scambiarsi conoscenza e confrontarsi direttamente.\n Inoltre, ha reso semplicissimo rimanere in contatto e continuare a relazionarsi anche dopo. Sono nate le Community nell’accezione che conosciamo oggi.\n Una community può esistere in tantissimi modi differenti ma trovo focale il momento dell’Incontro, online e/o in presenza. E poi ci deve essere un posto dove comunicare in modo asincrono: una chat, un gruppo, un forum, un sito web e tantissimi altri strumenti che oggi ci sono messi a disposizione.\n Il Community Manager è colei/colui che gestisce gli strumenti, gli incontri, le attività della Community impegnandosi a farne rispettare finalità, valori e principi: ricordiamoci sempre che una Community è un gruppo di Persone!\n  Molto spesso il Community Manager fa nascere e crescere una Community, altre volte ne prende in eredità le sorti 😃.\n  Il ruolo del Community Manager può essere svolto per professione – quando si gestisce la community di un’azienda – o per passione – quando si gestisce un gruppo legato ad un proprio hobby o necessità.\n Sono solito definire il Community Manager che lo fa per passione e non per lavoro come “Community Leader”.\n In entrambi i casi, pur con accezioni differenti, è un lavoro molto impegnativo in quanto è caratterizzato dallo svolgere molte attività, ad un ritmo frenetico, coinvolge varie discipline e ti porta a confrontarti sempre con un mucchio di gente: certamente è il bello di questo mestiere ma che, a volte, ti fa venire voglia di scappare 😆.\n Negli anni mi sono costruito un modello del lavoro di Community Manager su cui si basa la mia attività e che sto cercando di affermare.\n Esso si basa su tre pilastri fondamentali che racchiudono tutte le mansioni che svolge il Community Manager: 1) Pubbliche Relazioni 2) Organizzazione 3) Comunicazione/Marketing specifici per la Community (da sviluppare parallelamente alla Comunicazione/Marketing tradizionale).\n Molto spesso il lavoro di Community Manager è inserito nei dipartimenti di Comunicazione/Marketing delle Aziende; a volte addirittura di Sales. Quello che sto cercando di far passare è che Community è un dipartimento a sé stante!\n Qual è la soft skill più importante che deve possedere un Community Manager?  Te ne posso citare almeno due?! 😝\n La prima è l’EMPATIA, cioè la capacità di immedesimarsi negli altri comprendendone punti di vista, pensieri e sentimenti.\n Gestire una Community, infatti, vuol dire avere a che fare continuamente con le Persone.\n Una Community accogliente è un posto dove tutti, con le proprie differenze, si possano sentire a proprio agio ed accolti, sia negli spazi online che in quelli fisici. Vuol dire, per esempio, cercare di coinvolgere anche i più timidi, chi di solito si mette in disparte.\n La seconda è la RESILIENZA, ossia la capacità di resistere anche a lungo ad una situazione difficile, a ritmi intensi e di saper reagire agli imprevisti. Essendo un lavoro che ha a che fare con le Persone, il rovescio della medaglia, è che molto spesso averci a che fare è molto impegnativo e logorante.\n Mi sono sempre chiesto se le soft skill fossero più legate alle peculiarità e alle attitudini delle persone oppure fossero capacità da poter apprendere e, esercitandosi, migliorare.\n Proprio svolgendo per molti anni il lavoro di Community Manager sul campo – più di 700 eventi fisici in 3 anni e più di 100 online in poco più di un anno – sono arrivato alla conclusione che la verità sta nel mezzo.\n Indubbiamente ci sono persone più portate all’empatia o alla resilienza di altre, ma spesso è così perché per più tempo hanno vissuto situazioni che hanno sviluppato in loro queste caratteristiche.\n Il lavoro del Community Manager sicuramente espone ad un contesto in cui, mettendosi con la giusta predisposizione, si possono accrescere queste qualità molto velocemente.\n Quando ho iniziato a fare il Community Manager, più di 15 anni fa, l’imprevisto mi spaventava terribilmente; oggi, invece, è ciò che rende il lavoro divertente e non monotono, una sorta di palestra!\nA volte credo proprio di essere diventato un maratoneta grazie a questo allenamento, perché correre 42 km è prima di tutto un lavoro di testa! Il segreto è non demordere mai!\n Anche l’empatia si può allenare: è sufficiente iniziare a guardarsi intorno piuttosto che allo specchio! Il segreto è quello di immedesimarsi negli altri per scoprirne esigenze e motivazioni; il proprio lavoro di Community Manager se ne avvantaggerà immediatamente, provarci per credere 😉.\n La maggior parte di noi utilizza i social per parlare dei propri successi, ma la realtà è che siamo quel che siamo grazie al 90% dei nostri errori. Racconta il tuo più grande fallimento da quando lavori nel settore, che però ti ha reso ciò che sei.  Quando un generale dell’antica Roma tornava dopo un trionfo bellico e sfilava nelle strade della Città per ricevere gli onori della folla aveva dietro di sé uno schiavo che gli diceva in continuazione: – Hominem te memento (”Ricordati che sei un uomo”) affinché non fosse sopraffatto dalle manie di grandezza. Frase conosciuta anche come “Memento mori”, uno dei miei motti preferiti!\n Quello che dici è assolutamente vero; il Community Manager, che suo malgrado è spesso al centro dell’attenzione, corre sempre un grosso rischio di essere sopraffatto dal proprio ego.\n Personalmente utilizzo i social soprattutto per informare sulle attività e cerco di essere sempre molto ironico quando c’è da “celebrare” non mentendo mai, in particolare sui numeri: le bugie hanno le gambe corte, si sa 😀.\n A volte non ho nemmeno il tempo di postare su quello che faccio! Un consiglio che mi sento vivamente di dare a tutti i futuri Community Manager è quello di fare tanto, e fare parlare gli altri di quello che fai 😉.\n Più che di un errore ti voglio parlare di quello che in tanti riterrebbero un grosso fallimento: dimettersi dal proprio lavoro di dipendente a tempo indeterminato e ritrovarsi da un giorno all’altro senza stipendio!\n È stata una decisione durata mesi e molto sofferta perché amavo il mio lavoro ed ero molto apprezzato nel mio ambito. Ma è stata una scelta necessaria perché erano cambiati in quel contesto certi valori per me fondamentali.\n Ecco, fallimento sì ma è stata la scelta giusta di cui non mi sono mai pentito perché credo che a volte il destino ci metta di fronte a responsabilità di cui dobbiamo farci carico.\n Quello che veramente mi è mancato sono stati i miei colleghi (non tutti eh 😆), i miei eventi e la mia Gente (quella proprio tutta!) ma sono molto orgoglioso di quello che ho costruito subito dopo.\n Comunque, di errori e “stupidaggini” ne faccio tutti i giorni. A volte anche molto divertenti!\n  Il Community Manager deve sbagliare di continuo per poter essere un bravo professionista!\n Come fare per diventare un Community Manager?  Di una cosa sono fortemente convinto: un bravo Community Manager padroneggia ed è appassionato dell’argomento della Community che gestisce!\n Vedo purtroppo sempre più persone che iniziano questo lavoro senza competenze specifiche sui temi che la propria Community tratta finendo per svolgere solo un lavoro di organizzazione.\n Come potranno essere pienamente di supporto, entrare a fondo nelle questioni, stimolare il dialogo con i membri della Community che gestiscono?!\n Al contrario, ci sono tanti Community Leader che partendo dalla propria passione hanno creato da soli e gestiscono Community di successo, anche se per loro non è un lavoro vero e proprio.\n Penso, quindi, che oggi in molti casi Community Manager si diventi seguendo le proprie attitudini tramite percorsi paralleli. Non è detto però che sarà per sempre così.\n Man mano che il peso della “Community” interpretata nella sua vera essenza crescerà in ambito aziendale, l’insieme delle attività di un Community Manager saranno meglio definite e ci saranno delle linee guida che potranno indirizzare in un percorso professionale fin dall’inizio.\n E così ci saranno tante bimbe e bimbi che diranno: “Da grande voglio fare la/il Community Manager!”.\n Oggi il lavoro di un Community Manager è ancora molto legato all’interpretazione data da ciascun professionista. È un processo creativo quotidiano più che una disciplina o un metodo.\n  Il Community Manager di successo è un artista nel mettere insieme gli strumenti, le materie che gli competono, le Persone.\n  Forse per questo mi piace così tanto come lavoro. Perché è un mestiere di sperimentazione e c’è molta creatività, tecnica e umana; un ponte tra due mondi che a volte sono ingiustamente ritenuti distanti.\n Il consiglio che posso dare a chi parte da zero è quello di entrare nelle Community legate ai propri interessi (ce ne sono di tutti i tipi) sforzandosi il più possibile di dare un contributo attivo e di lasciarsi coinvolgere nell’organizzazione della Community (un piccolo segreto, noi Community Manager adoriamo le persone più attive che ci possano sollevare da un po’ di lavoro 😉).\n A chi è già coinvolto nella gestione di una Community sia a livello amatoriale che professionale, consiglio di frequentare altri Community Manager, discutere dei problemi, delle attività, degli strumenti e chi più ne ha più ne metta!\n Non si finisce mai di imparare e solo l’esperienza rende ogni giorno un Community Manager un po’ più bravo del giorno precedente. Iniziano ad esserci tantissimi gruppi di Community Manager e io stesso ne ho creati alcuni 😉.\n In alcuni corsi di Marketing o di Comunicazione inizio a vedere spuntare la parola “Community”. Personalmente non penso che si possa raccontare esaustivamente cosa fare per gestire una Community in un singolo corso.\n Inoltre, penso che la Community non sia una parte di Marketing o Comunicazione ma piuttosto che sia una branca a sé stante.\n Mi batto sempre nelle aziende per cui lavoro 😀 per far capire che Community non deve essere inserita in questi dipartimenti ma è un dipartimento indipendente, che fa anche Marketing e Comunicazione ma in un modo differente e non in sostituzione di questi.\n Invece, trovo molto utile seguire corsi specifici sui singoli aspetti o strumenti che un Community Manager può utilizzare o su quelle discipline che è bene padroneggiare (tra cui Comunicazione e Marketing 😛).\n Infine, iniziano ad esserci anche delle certificazioni come quella creata da Facebook specifica per la propria piattaforma. Tutto è utile ma è importante avere ben chiaro che lavorare alle Community è un lavoro ancora in definizione, plastico! Quindi ci vuole tanta determinazione e voglia di innovare 💪.\n  Parlando di successi, qual è il tuo prossimo obiettivo? Quale ruolo vorresti ricoprire entro i prossimi 3 anni?  Come ho raccontato in una delle domande precedenti, qualche anno fa mi sono ritrovato senza lavoro da dipendente da un giorno all’altro.\n Negli ultimi anni ho, quindi, sia cercato altre aziende dove potessi ricoprire il ruolo di Community Director, sia iniziato a sviluppare la mia attività di libero professionista per aiutare tante realtà a creare o sviluppare la propria Community Dev \u0026amp; Tech.\n All’inizio non è stato affatto facile ma adesso, pur non avendo trovando nessun posto da Community Director da convincermi, ho avuto la fortuna di iniziare a lavorare con diverse aziende illuminate e sviluppare progetti Community interessanti e innovativi.\n Quindi l’obiettivo per i prossimi tre anni è quello di fare cose ancora più importanti con questi clienti e le Community che sono nate continuando, nel frattempo, a sviluppare la mia attività e riuscire, se mai, ad assumere qualche “apprendista” per creare Community di successo e organizzare eventi e conferenze che aiutino gli sviluppatori ad avere successo nel proprio lavoro e nelle relazioni professionali.\n Inoltre, sto portando avanti due grossi progetti: The Communities Bay e MyCertCloud.\n The Communities Bay è il Network delle Community Dev \u0026amp; Tech italiane che ho fondato tre anni fa. Non una community di community ma una vera e propria rete nella quale i player possano crescere in sinergia tra di loro.\n È un progetto in cui sto investendo molto sia in termini di risorse che di tempo, che non ha un ritorno diretto ma tramite il quale, nei prossimi anni, voglio lasciare il segno nel nostro Paese con iniziative Tech e la collaborazione di Persone di valore.\n Abbiamo bisogno del vostro supporto! Vi invito a seguire The Communities Bay su www.thecmmbay.com/seguici 🙌\n MyCertCloud (www.mycertcloud.com) è uno dei tanti strumenti che mi sono costruito per il mio lavoro di Community Manager essendo ancora uno sviluppatore attivo soprattutto la notte 😀.\n È un servizio web tramite il quale è possibile generare, distribuire e verificare certificati digitali (attestati di partecipazione, di merito, badge, diplomi) per premiare chi partecipa ai miei eventi.\n Ce la sto mettendo tutta affinché nei prossimi tre anni MyCertCloud da “startup” self-run e self-funded possa diventare una vera Azienda 💪.\n Conosci il tema gender gap in ambito STEM? Se sì, cosa fai nel tuo piccolo per combattere questo problema e come pensi si possa arrivare a chiudere questo capitolo?   La scarsa presenza femminile nei contesti scientifici e tecnologici, quelli dell’istruzione e lavorativi per citare i principali, è un grave problema per il quale non dobbiamo smettere di impegnarci attivamente.\n  È sufficiente fare un salto, per esempio, in una qualsiasi Facoltà di Ingegneria oppure buttare l’occhio in qualche ufficio delle aziende tech per rendersi conto di quante poche donne siano presenti!\n Io stesso che organizzo tanti incontri online e di persona, eventi e conferenze, registro di continuo questo divario.\n La situazione attuale è dovuta ai retaggi di una doppia discriminazione del passato: quella nei confronti delle donne relegate alla cura della famiglia e alle faccende di casa e la scarsità di accesso alla tecnologia, un tempo molto costosa e per pochi.\n Fortunatamente sono passati tanti anni ed entrambe queste barriere sono state abbattute (almeno spero!) ma è rimasto il problema culturale. Le rivoluzioni culturali hanno bisogno di moltissimi anni dai cambiamenti per propagarsi e cambiare effettivamente le cose.\n Dobbiamo impegnarci ad accelerare questo processo. Ci sono molte donne, per esempio, che a torto pensano che la tecnologia non è qualcosa per loro e per questo non si avvicinano nemmeno.\n  Il contributo che possiamo dare in questi casi è raccontare di tante donne che hanno successo in questo campo perché i processi imitativi sono quelli di maggior impatto.\n  La Comunicazione è uno strumento molto potente ma proprio per questo non va utilizzato per finalità non giuste; essendo il tema del gender-gap sempre più sentito spesso le aziende lo utilizzano per farsi pubblicità senza mettere effettivamente in campo quei comportamenti necessari al cambiamento.\n Per me viene sempre prima il fare e poi il raccontare: la coerenza è un valore assoluto. “Dobbiamo coinvolgere in questo progetto delle donne perché ce lo chiedono gli investitori” è una frase che non mi voglio proprio più sentire dire. “Al diavolo gli investitori, le donne vanno coinvolte perché ce ne sono tante veramente brave!”: è questa la risposta da dare a simili richieste.\n Sono ottimista! Quello che fai e che fanno tutti i giorni tante donne impegnate in ambito tech \u0026amp; dev con iniziative speciali e il “normale” lavoro quotidiano è il catalizzatore migliore per la rivoluzione sociale e culturale iniziata oltre un secolo fa 💪👏.\n Contatti   Sansone Community The Communities Bay Profilo LinkedIn ", "url": "https:\/\/theredcode.it\/voglio-diventare-un...-community-manager\/" }, "https:\/\/theredcode.it\/intelligenza-artificiale\/misurare-la-distanza-tra-due-testi-con-python\/": { "title": "Misurare la distanza tra due testi con Python", "tags": ["intelligenza-artificiale","nlp","python",], "content": "Immagina di avere due stringhe e di voler vedere se queste due parlano dello stesso argomento: come fare?\n Riuscire a misurare la distanza tra due testi con Python può sembrare difficile, ma non se si hanno gli strumenti giusti: ci sono infatti diverse tecniche che è possibile sfruttare, come la coseno-similarità o il prodotto scalare.\n Come farlo? Vediamo un esempio pratico su come quantificare la distanza tra due stringhe!\n Intro  Partiamo da un concetto fondamentale: nell\u0026rsquo;ambito dell\u0026rsquo;analisi del linguaggio naturale, la vettorializzazione di un testo significa rappresentare un documento come un vettore, in cui gli elementi rappresentano il numero di occorrenze nel testo.\n Si tratta di un\u0026rsquo;attività fondamentale nel campo dell\u0026rsquo;information retrieval, per topic analysis e sentiment analysis.\n Ovviamente, c\u0026rsquo;è un\u0026rsquo;assunzione implicita: la vettorializzazione può essere applicata solo quando l\u0026rsquo;ordine delle parole non è importante; questo vuol dire che il significato del documento deriva dai termini che lo costituiscono e non dal contenuto stesso, come ad esempio nella classificazione o nell\u0026rsquo;estrazione di informazioni.\n In questo caso, convertire le frasi in una matrice di termini ci tornerà molto utile per poter calcolare la similarità tra due frasi e quindi rappresentarne le distanze tramite i valori.\n Come funziona  Un\u0026rsquo;analisi che permetta di misurare la distanza tra due testi si basa su tre fasi: indicizzazione di un documento, dove le parole vengono rappresentate in base all\u0026rsquo;ordine e vengono rimosse le stopwords, i termini vengono poi pesati in base alla frequenza e viene calcolato il coefficiente di similarità.\n Abbiamo già detto che esistono diverse tecniche per farlo: una di queste è la coseno similarità, che si basa su un concetto matematico: misura il coseno dell\u0026rsquo;angolo tra due vettori proiettati in uno spazio multidimensionale.\n Cosa vuol dire? Vuol dire che quanto più piccolo è l\u0026rsquo;angolo, maggiore è la somiglianza del coseno, e quindi tanto più il valore sarà prossimo all\u0026rsquo;uno, tanto più i due testi saranno simili; al contrario, se il valore dovesse avvicinarsi allo zero, vuol dire che i due testi saranno molto diversi.\n Un approccio comunemente usato per abbinare documenti simili si basa sul conteggio del numero massimo di parole comuni tra i documenti.\n Ma questo approccio ha un difetto intrinseco: all\u0026rsquo;aumentare delle dimensioni del documento, il numero di parole comuni tende ad aumentare anche se i documenti parlano di argomenti totalmente diversi.\n Come metrica di somiglianza, in che modo la somiglianza del coseno differisce dal semplice conteggio di parole uguali?\n Quando viene tracciata su uno spazio multidimensionale, dove ogni dimensione corrisponde a una parola nel documento, la somiglianza del coseno cattura l\u0026rsquo;orientamento (l\u0026rsquo;angolo) dei documenti e non quantifica la somiglianza su un\u0026rsquo;unica dimensione.\n Codice Python  Esistono diverse metodologie per misurare la coseno-similarità, e un\u0026rsquo;ottima soluzione è quello di utilizzare la libreria NLTK, che fornisce un metodo in grado di calcolare il calcolo tra due array.\n Passiamo al codice!\n Come primo step, importiamo la funzione dalla libreria NLTK e importiamo numpy, che ci tornerà utile per poter gestire i testi di cui vogliamo misurare la similarità:\n from nltk.cluster.util import cosine_distance import numpy as np  La prima cosa da fare è definire un metodo che ci permetta di fornire due stringhe in ingresso e un elenco di stopwords: questo renderà la nostra funzione trasversale a più situazioni e lingue, potendo fornire una lista di parole che vari all\u0026rsquo;occorrenza!\n def get_cosine_similarity(sentence1, sentence2, stopwords=None):  All\u0026rsquo;interno di questa funzione, andremo a fare un po\u0026rsquo; di attività di pre-processing: renderemo tutte le frasi in minuscolo, così da non creare bias nel calcolo della similarità:\n  if stopwords is None: stopwords = [] sentence1 = [w.lower() for w in sentence1] sentence2 = [w.lower() for w in sentence2]  Ultimo step per questa funzione è quello di definire una lista con tutte le parole presenti nelle due frasi all\u0026rsquo;interno di words_all: dopo aver creato due array, andremo a inserire al loro interno le parole presenti nelle due frasi escludendo le stopwords:\n  words_all = list(set(sentence1 + sentence2)) array1 = [0] * len(words_all) array2 = [0] * len(words_all) for w in sentence1: if w in stopwords: continue array1[words_all.index(w)] += 1 for w in sentence2: if w in stopwords: continue array2[words_all.index(w)] += 1  Ora è tempo di restituire il valore che verrà calcolato dalla funzione di NLTK: l\u0026rsquo;ultima istruzione prevede infatti che venga restituita la differenza tra uno e il risultato del metodo, così che XXX\n  return 1 - cosine_distance(array1, array2)  La coseno-similarità viene di solito rappresentata tramite una matrice, all\u0026rsquo;interno della quale i valori presenti sulla diagonale rappresentano la somiglianza tra una frase e sé stessa: ovviamente, questo valore sarà sempre uguale.\n Andiamo avanti con il codice: definiamo quindi una funzione che prenda sempre le frasi e le stopwords e che crei una matrice lunga e larga quanto la dimensione delle due frasi:\n def cos_sim_matrix(sentences, stop_words): matrix = np.zeros((len(sentences), len(sentences)))  Adesso, per ogni frase presente nell\u0026rsquo;insieme iniziale, andiamo a calcolare la coseno-similarità: un po\u0026rsquo; come se giocassimo a battaglia navale, immaginiamo che ad ogni riga e ogni colonna, corrispondano due frasi che, in duello tra loro, cercano di assomigliarsi.\n Per farlo, richiamiamo la funzione creata in precedenza e chiamata get_cosine_similarity:\n  for idx1 in range(len(sentences)): for idx2 in range(len(sentences)): if idx1 == idx2: # ignore if both are same sentences continue matrix[idx1][idx2] = get_cosine_similarity(sentences[idx1], sentences[idx2], stop_words) return matrix  Per provare il codice, andiamo a usare tre frasi: la prima e la seconda si assomiglieranno (cambia una sola parola tra le due), mentre la terza sarà totalmente dissimile.\n Per questo, ci aspettiamo che i valori siano molto alti per le prime due colonne e due righe, mentre siano più bassi nell\u0026rsquo;ultima casella della matrice:\n sentence1 = \u0026#34;This is a first sentence\u0026#34; sentence2 = \u0026#34;This is a second sentence\u0026#34; sentence3 = \u0026#34;I don\u0026#39;t know if it\u0026#39;s clear, but pineapple on pizza is oltrageous.\u0026#34; print(cos_sim_matrix([sentence1, sentence2, sentence3], []))  Il risultato che otteniamo è il seguente:\n [[0. 0.93675938 0.79159032] [0.93675938 0. 0.77740376] [0.79159032 0.77740376 0. ]]  Attenzione però: questo è solo uno dei metodi\u0026hellip; Dai un\u0026rsquo;occhiata alla libreria al modulo nltk.cluster.util, dove ci sono altri metodi che permettono di verificare se due frasi sono uguali, come la distanza euclidea!\n Codice completo  from nltk.cluster.util import cosine_distance import numpy as np def get_cosine_similarity(sentence1, sentence2, stopwords=None): if stopwords is None: stopwords = [] sentence1 = [w.lower() for w in sentence1] sentence2 = [w.lower() for w in sentence2] words_all = list(set(sentence1 + sentence2)) array1 = [0] * len(words_all) array2 = [0] * len(words_all) for w in sentence1: if w in stopwords: continue array1[words_all.index(w)] += 1 for w in sentence2: if w in stopwords: continue array2[words_all.index(w)] += 1 return 1 - cosine_distance(array1, array2) def cos_sim_matrix(sentences, stop_words): matrix = np.zeros((len(sentences), len(sentences))) for idx1 in range(len(sentences)): for idx2 in range(len(sentences)): if idx1 == idx2: # ignore if both are same sentences continue matrix[idx1][idx2] = get_cosine_similarity(sentences[idx1], sentences[idx2], stop_words) return matrix sentence1 = \u0026#34;This is a first sentence\u0026#34; sentence2 = \u0026#34;This is a second sentence\u0026#34; sentence3 = \u0026#34;I don\u0026#39;t know if it\u0026#39;s clear, but pineapple on pizza is oltrageous.\u0026#34; print(cos_sim_matrix([sentence1, sentence2, sentence3], []))  Risorse utili: - Analisi del linguaggio con Python - Apogeo\n- Addestramento NER con spaCy per new entry\n- Machine Learning in una settimana\n", "url": "https:\/\/theredcode.it\/intelligenza-artificiale\/misurare-la-distanza-tra-due-testi-con-python\/" }, "https:\/\/theredcode.it\/interviste\/federica-ferraro\/": { "title": "Voglio diventare una... UX\/UI Designer", "tags": ["interviste","voglio-diventare",], "content": "Federica rappresenta una di quelle persone a cui la parola tenacia sta proprio bene indosso: nata in una società dove avere un obiettivo nella vita è fondamentale, non si è fatta scrupoli nel fare tutte le esperienze possibili e trovare ogni volta una strada diversa, la sua strada.\n In questo episodio, Federica ci racconterà cosa vuol dire diventare una UX/UI Designer: un mestiere che richiede molta creatività, ma anche capacità di comprensione e ascolto, oltre che empatia.\n Descriviti in 100 parole.   Mi chiamo Federica Ferraro e sin da bambina non ho mai avuto chiaro cosa volessi fare nella vita.\n  Le mie passioni erano incentrate nel settore della comunicazione e del design. Così, con molta incertezza sul mio lavoro futuro, ho intrapreso una carriera universitaria in Interpretariato e Traduzione, per poi specializzarmi in Scienze Linguistiche.\n Però, più studiavo e più mi rendevo conto dell’incredibile gap tra ciò che mi veniva insegnato e ciò che invece richiedeva il mondo del lavoro. Mossa forse da tanta (troppa) ambizione mi sono trasferita in Inghilterra per aprire un ristorante di pasta fresca biologica. Un’esperienza che ad oggi rifarei ad occhi chiusi (con qualche conoscenza e consapevolezza in più).\n Mi sono resa conto ben presto che il lavoro dell’imprenditore non era nelle mie corde e praticamente mi sentivo sempre più persa. Ho sofferto di depressione per qualche anno per poi riprendermi in seguito al mio rientro in Italia, dove ho svolto un master in web marketing per poi specializzarmi ulteriormente in UX/UI Design.\n Prima di definire il mio percorso ho impiegato qualche tempo per comprendere davvero quale fosse la mia vocazione: principalmente perché mi ritengo una persona multipotenziale, un concetto reso noto da Emilie Wapnick grazie al suo TED Talk, ossia una persona con una forte curiosità intellettuale, opposta ad uno ruolo specialista.\n In cosa consiste il ruolo di UX/UI Designer?  Oggi lavoro per una multinazionale e come UX/UI Designer mi occupo principalmente di comprendere le esigenze degli utenti e di capire con loro il modo migliore per modificare un servizio o un prodotto. Si lavora principalmente in team, ma la parte più operativa la porto a termine ovviamente da sola per poi ricondividere con il team il lavoro e presentarlo insieme al cliente finale.\n Quello che preferisco nel mio lavoro è fare ricerca: sulle nuove tecnologie, analizzando i dati, facendo interviste e workshop per trovare la soluzione migliore ai bisogni degli utenti. Di recente mi sto occupando anche dei mockup che richiedono conoscenze più tecniche di software come Adobe XD o Figma.\n Qual è la soft skill più importante che deve possedere una UX/UI Designer?  Come mi piace sempre dire: le hard skill si possono sempre imparare, non ho mai avuto difficoltà in questo. Su alcune cose forse possiamo impiegare più tempo perché particolarmente ostiche o complesse per il nostro modo di pensare, ma se spiegate con la giusta pazienza e in affiancamento, le competenze tecniche sono sempre acquisibili.\n Quello che invece è più complesso da imparare (e in questo sono fortunata perché la natura me le ha donate) sono le soft skill: prima fra tutti, l’empatia.\n  Non puoi condurre un workshop o un’intervista se non possiedi empatia e non sei incline all’ascolto.\n  La maggior parte di noi utilizza i social per parlare dei propri successi, ma la realtà è che siamo quel che siamo grazie al 90% dei nostri errori. Racconta il tuo più grande fallimento da quando lavori nel settore, che però ti ha reso ciò che sei.  Non so se definirlo un fallimento, ma avere aspettative troppo alte è purtroppo il mio punto debole. È qualcosa che mi accompagna da tempo.\n Il consiglio che dò a me stessa sempre è “non aspettarti niente e non ci resterai mai male”. Ad esempio, quando un progetto viene interrotto, dopo che ci hai lavorato per tanto tempo e poi purtroppo ti viene detto che non potrà essere implementato per taluni motivi, cerco di non farne una questione personale, ma di vedere il lato positivo.\n Come fare per diventare una UX/UI Designer?  Questa domanda me l’hanno fatta in tanti. In realtà, a mio avviso, non servono certificazioni, ma corsi certamente sì.\n  Gli strumenti si apprendono con l’esperienza, che è alla base di tutto il lavoro.\n  Ciò che ho appreso è che non si smette mai di studiare e di imparare, perché può arrivare sempre un nuovo software o una nuova piattaforma che supera le precedenti. Sconsiglierei questo lavoro a chi non è appassionato di tecnologia e non ama seguire i nuovi trend.\n Parlando di successi, qual è il tuo prossimo obiettivo? Quale ruolo vorresti ricoprire entro i prossimi 3 anni?  Molto interessante questa domanda! Migliorarmi sempre di più e comprendere sempre meglio tutte le fasi del design, passando per tutti gli step di un progetto: dal service, alla research, dalla user experience, alla user interface, ai test, ecc..\n Conosci il tema gender gap in ambito STEM? Se sì, cosa pensi sia possibile fare -anche nel tuo piccolo- per combattere questo problema?  Certamente. Credo fortemente che le donne siano ancora troppo poche nel settore IT, come veniva chiamato una volta.\n Un problema che però esiste da anni. Secondo la mia esperienza, è importante che vada prima arginato il muro culturale che c’è in Italia.\n Fortunatamente molte aziende si occupano di fare divulgazione nelle scuole, spiegando l’importanza di conoscere anche ambiti oltre quelli considerati tradizionali soprattutto per le giovani donne.\n Come sostengono molti psicologi, il ruolo maggiore lo giocano la società, l’ambiente e la famiglia nello sviluppo di un individuo. E in tutto ciò possiamo sempre contribuire con una comunicazione efficace.\n Grazie Federica per questo bellissimo contributo!\n", "url": "https:\/\/theredcode.it\/interviste\/federica-ferraro\/" }, "https:\/\/theredcode.it\/recensioni\/digital-forensics\/": { "title": "Digital Forensics", "tags": [], "content": "La Digital Forensics è una scienza che qui in Italia ha -purtroppo- poco seguito: è difficile infatti trovare qualcuno che sia esperto in questo campo. Ma chi di noi non ha mai sognato di fare il lavoro di Penelope Garcia in Criminal Minds? Diamo quindi un\u0026rsquo;occhiata a questo volume di Apogeo dedicato proprio alla Digital Forensics!\nRanking Anno 2021 Autore Darren R. Hayes Genere Saggistica Livello Per tutti Scorrevolezza 8 / 10 Originalità 10 / 10 Valutazione 8.5 / 10 Recensione Se sei appassionata o appassionato di Criminal Minds, NCIS o Lie to Me, questo è il libro per te. Attraverso una serie di sezioni ben distinte, potrai attraversare e scoprire la carriera di un esperto di Digital Forensics: come scovare delle immagini modificate, furti di identità e molto altro. L\u0026rsquo;approccio prettamente pratico è sicuramente quello che più è possibile apprezzare di questo volume: vengono riportati molti software (free e non) che possono aiutare nelle attività forensi. Altra nota positiva è sicuramente quella che riguarda i casi di studio: sfruttando degli episodi reali di attività illegali, è possibile toccare con mano tutte quelle che sono le procedure utilizzate durante le indagini dagli esperti.  Questo libro permette infatti di compiere un viaggio bellissimo dietro a quelli che è il mestiere di Garcia di Criminal Minds: sia che si tratti di hardware che di software, il volume mostra in che modo comportarsi e quali procedure attivare per poter essere dei perfetti esperti di scienza digitale forense. Avviso ai navigatori: alcuni dei casi riportati sono davvero da brividi, e non nel senso positivo del termine\u0026hellip; Spesso sono citati solo nomi e situazioni, senza approfondire i dettagli, che però sono disponibili online per i più curiosi. Invece, il capitolo 12 è interamente dedicati ai case study: serial killer, hacker, omicidi e soprattutto il cyberbullismo sono solo alcune delle tematiche trattate. Probabilmente quest\u0026rsquo;ultima è quella più attenzionata, ed è l\u0026rsquo;aspetto più lodevole: l\u0026rsquo;autore non si risparmia nel trattare questo fenomeno come un serio problema da affrontare e combattere, riportando situazioni reali e relative indagini, legislazione e come agire.\n Piccolo, ma non insignificante dettaglio: il tutto è riportato alle attuali legislazioni vigenti negli Stati Uniti, essendo l\u0026rsquo;autore americano.\n La realtà è che questo mestiere in Italia non ha ancora preso piede: si tratta di una professione non ancora riconosciuta, anche per via dei costi necessari alla formazione e alla messa in uso dei laboratori, che richiedono molti strumenti dai costi spesso non sostenibili. Nessuna delle sezioni dà per scontate le conoscenze informatiche di base: per chi non ha competenze in materia di sistemi operativi, reti, memoria e via dicendo, la parte introduttiva di ogni capitolo è dedicata a fornire il contesto adatto. Ogni capitolo è poi ricco, oltre che di esempi, ma anche di esercitazioni per poter mettere in pratica i concetti e gli strumenti illustrati, attraverso case study ed esempi che fanno riferimento a situazioni reali. Il libro è molto aggiornato, arriva a trattare quasi tutte le ultime versioni dei sistemi operativi disponibili (ad esempio, Windows 10 è l\u0026rsquo;ultima distribuzione trattata) e dedica un intero capitolo alla Mobile Forensics, che sicuramente è un tema molto interessante. Infatti, tutti gli attuali smartphone sono trattati come sistemi di archiviazione e sappiamo bene che ormai all\u0026rsquo;interno del telefono di ognuno di noi ci sono dati estremamente sensibili. Saper eseguire degli esami sui dispositivi mobili, quali sono le specifiche e i relativi sistemi operativi è fondamentale, e anche in questo caso vengono fornite indicazioni sulla documentazione da produrre. Il libro è davvero ben curato, esaustivo e forma un vero e proprio manuale da tenere pronto all\u0026rsquo;uso per quando si inizierà a lavorare in questo campo!\nLezione imparata   Strumenti come The Sleuth Kit e Autopsy sono molto utili per esaminare file system e volumi disco (e sono anche open source); PALADIN è una distro linux per il triage che permette di esaminare sistemi Mac, Windows, Android e Linux dove Autopsy è già incluso; Tails è un sistema operativo perfetto per chi vuole avere il totale anonimato; System Status è perfetto per chi vuole effettuare della diagnostica su dispositivi mobile Apple e dal punto di vista forense permette di analizzare tutti i processi in esecuzione, anche quelli in modalità stealth; C\u0026rsquo;è un\u0026rsquo;intera sezione dedicata a come funziona l\u0026rsquo;esame di una scena del crimine: spiega quali strumenti sono necessari, cos\u0026rsquo;è utile portarsi, come muoversi\u0026hellip; pazzesco! Disponibile su Amazon ", "url": "https:\/\/theredcode.it\/recensioni\/digital-forensics\/" }, "https:\/\/theredcode.it\/professioni\/essere-un-ingegnere-donna\/": { "title": "Essere un ingegnere donna", "tags": ["general",], "content": "Stavolta, un articolo diverso dal solito: parliamo di cosa vuol dire essere un ingegnere donna in questo pazzo mondo e cosa fare, nel concreto, per crescere una generazione che apprezzi l\u0026rsquo;inclusione senza neanche farne un \u0026ldquo;problema\u0026rdquo;.\n Parliamo di gender gap in ambito STEM.\n Intro  All\u0026rsquo;età di 12 anni, uno dei docenti della mia classe nella scuola media stabilì dopo un\u0026rsquo;interrogazione che \u0026ldquo;la matematica non faceva decisamente per me\u0026rdquo;.\n All\u0026rsquo;età di 14 anni, uno dei docenti del mio liceo mi prese in giro quando dissi che da grande avrei fatto l\u0026rsquo;ingegnera, perché \u0026ldquo;potresti studiare lingue, che è più semplice\u0026rdquo;.\n All\u0026rsquo;età di 18 anni ho cambiato scuola, giusto in tempo per fare l\u0026rsquo;ultimo anno, dopo che l\u0026rsquo;ennesimo docente aveva rovinato la mia esperienza scolastica con l\u0026rsquo;ennesima molestia.\n Quando sono entrata all\u0026rsquo;università, sono arrivata quarta su tutti i ragazzi e ragazze -e prima tra le ragazze- che hanno fatto il test di ingresso, e nonostante questo, il professore di informatica mi accusò di aver \u0026ldquo;barato\u0026rdquo; durante un esame perché era perfetto, e mi bocciò.\n Ho cambiato università, e ho trovato -non sempre, ma quasi, per fortuna- un ambiente molto più inclusivo, dove comunque il numero di ragazze che frequentavano i corsi erano inversamente proporzionali all\u0026rsquo;anno di iscrizione: molte delle mie coetanee abbandonavano perché \u0026ldquo;non mi sento in grado\u0026rdquo;, \u0026ldquo;tanto non passo mai un esame\u0026rdquo;, o ancora \u0026ldquo;non capisco niente e non voglio perdere tempo\u0026rdquo;.\n Lo so. Sembra che la sfortuna abbia trovato una vittima perfetta, ma non lo sono né mi sono mai considerata tale.\n Queste sono solo alcune delle storie che sono certa che altre mille ragazze prima di me abbiano vissuto sulla propria pelle in altrettante sfumature, e che in qualche modo abbiano leso l\u0026rsquo;autostima di ognuna di esse.\n Quante volte mi e ci siamo sentite dire \u0026ldquo;Questo settore è davvero difficile, sei pronta?\u0026rdquo; e \u0026ldquo;Sai che probabilmente sarai l\u0026rsquo;unica donna nella maggior parte delle tue lezioni, giusto?\u0026rdquo;\n E questo vale non solo in ambito istituzionale, ma professionale: mi è capitato di essere trattata come l\u0026rsquo;ultima ruota del carro non perché l\u0026rsquo;ultima arrivata, ma perché \u0026ldquo;non all\u0026rsquo;altezza\u0026rdquo;.\n All\u0026rsquo;età di 23 anni, mi è stato detto che avrei potuto fare domanda in moltissime multinazionali nel settore IT perché \u0026ldquo;tutte le aziende tecnologiche stanno cercando di assumere donne per aumentare la loro inclusività\u0026rdquo;. Unico requisito, in pratica: essere donna.\n All\u0026rsquo;età di 24 anni, dopo aver portato a termine l\u0026rsquo;ennesimo progetto, mi sono sentita dire: \u0026ldquo;wow, hai fatto tutto da sola? Ti ha aiutato il collega X, immagino\u0026rdquo;, come se fosse stupefacente che fossi in grado di reggere un carico di lavoro in totale autonomia.\n Mi sono sentita dire, in tempi non recenti, che \u0026ldquo;peccato essere così intelligente, ma così poco carina\u0026rdquo;.\n Sia chiaro: condivido queste storie non per vergogna e per cercare pietà, né per fare la vittima, ma per aumentare la consapevolezza e la comprensione.\n Mi è capitato tanto, troppo spesso, di avere delle conversazioni con amici e colleghi di ogni età e genere, e di sentire esclamazioni dubbiose e sguardi stupiti, come se cose del genere fossero fuori dalla realtà.\n La cosa divertente è che guardo indietro a tutti questi momenti (e molti altri che non ho intenzione di condividere qui) e penso a quanto sono fortunata: quanto sono fortunata che non sia andata peggio, com\u0026rsquo;è successo a molte altre donne che conosco.\n  Come sono stata fortunata perché, per ogni commento negativo, ci sono stati amici e colleghi che mi hanno spronato ad andare avanti e che non si sono mai posti \u0026ldquo;il problema\u0026rdquo;.\n  Nel corso delle interviste dello scorso anno sui mestieri digitali -proseguiranno anche quest\u0026rsquo;anno, promesso- , ho sempre chiesto alle ragazze intervistate dell\u0026rsquo;esperienza come donna nel settore della tecnologia e cosa poter fare concretamente per aiutare le donne\u0026hellip;\n E mi sono fermata a pensarci: onestamente, non avevo una mia risposta e, dopo aver dedicato del tempo a pensarci di più, ho deciso di poter fare di molto meglio.\n Quindi, se quanto raccontato finora ti ha lasciato un po\u0026rsquo; di amaro in bocca, e ti stai chiedendo cosa puoi fare per aiutare, dai una chance alle prossime righe.\n Infondere consapevolezza  Potrebbe sembrare una banalità, ma uno dei problemi principali della scarsa presenza di donne in ambito STEM è dovuto alla mancanza di autostima: questo significa che, a seconda delle persone, non tutte le ragazze si sentono pronte a lanciarsi in questo mondo di matti, o meglio, non sanno da dove cominciare.\n Come fare? Se conosci un\u0026rsquo;opportunità di lavoro che sarebbe perfetta per qualcuno, condividila.\n Se conosci un podcast in cerca di un\u0026rsquo;ospite, fai il ​​suo nome.\n Se qualcuno che conosci ha scritto un libro o un post sul proprio blog che hai trovato interessante, condividilo con la tua rete. Le possibilità in questo senso sono infinite ed è così facile alzarsi e spargere la voce. Non sottovalutare la potenza della tua voce e il peso della tua parola.\n Il principio è sempre lo stesso: e vuoi aiutare, incoraggia. Tante donne che conosco stanno raggiungendo grandi traguardi ogni giorno, ma sono troppo umili o troppo tranquille o troppo spaventate o semplicemente non pensano che sia abbastanza impressionante da condividere quando lo è davvero.\n Educa te stess* in modo da poter educare gli altri  Negli ultimi due anni si è parlato tanto del tema dell\u0026rsquo;inclusività: è vero che la maggior parte di noi non si ritrova più vicino alle macchinette del caffè che ci permettevano di socializzare più facilmente, ma è comunque importante creare un ambiente inclusivo, anche e soprattutto nel mondo virtuale.\n Adoro il recente focus sull\u0026rsquo;uso di un linguaggio più inclusivo, come porsi il problema di includere femminile e maschile di ogni professione o nome, come prestare attenzione al modo in cui diamo spazio alle donne sulle varie piattaforme per parlare e raccontarsi.\n  Non che una donna abbia per forza bisogno di un\u0026rsquo;altra donna nel lavoro per potersi realizzare: quello vale solo quando si deve andare in bagno! (Scherzo, sia chiaro\u0026hellip;)\n  Se qualcuno sta pubblicando commenti sessisti, denuncialo. Se assisti ad un commento sprezzante, un comportamento scortese, qualsiasi tipo di molestia, ecc., dì qualcosa. Se ritieni che le persone intorno a te non conoscano abbastanza l\u0026rsquo;argomento, non avere paura di farti avanti: la tua parola ha più peso di quanto pensi.\n Ci sono inoltre moltissime community che lavorano in questa direzione e che hanno bisogno di costante supporto: fare volontariato, farsi avanti per portare dei talk o organizzare degli eventi, è un modo utile per chi in prima persona si mette in gioco, e per chi ha bisogno di vedere qualcuno che ce l\u0026rsquo;ha fatta. E a questo proposito\u0026hellip;\n Istituire delle role models  Diversi studi (riferimenti tra le risorse utili) hanno riportato che le donne che hanno sostenuto un test in ambito STEM dove l\u0026rsquo;esaminatrice era donna non hanno subito un calo delle prestazioni rispetto alle donne il cui test è stato somministrato da un uomo.\n Può sembrare una banalità, ma avere una figura a cui ispirarsi è fondamentale per la crescita di ogni bambino: quanti/e di noi hanno sognato di diventare superoi/ne perché avevano visto un personaggio che li ispirava a fare di meglio?\n Non c\u0026rsquo;è bisogno che queste role models siano in una posizione lavorativa molto più alta della nostra: questi modelli possono anche essere tratti da gruppi di pari, che anzi, ci avvicinano all\u0026rsquo;obiettivo.\n Sebbene sia i modelli di ruolo femminili che quelli maschili possono essere efficaci nel reclutare donne nei campi STEM, i modelli di ruolo femminili sono più efficaci nel promuovere un maggior coinvolgimento delle donne in questi campi.\n La prima fase è proprio lavorare sulla scuola: creare delle attività che mettano in contatto gli studenti e le studentesse con professioniste e professionisti di ogni genere è fondamentale; non è da sottovalutare anche il fatto che le stesse insegnanti possono anche fungere da modelli per le ragazze.\n Tantissimi studi sul sistema scolastico in Europa (e non solo) hanno dimostrato che la presenza di insegnanti che siano in grado di andare oltre gli stereotipi e portare esempi di donne \u0026ldquo;che ce l\u0026rsquo;hanno fatta\u0026rdquo; influenza positivamente la percezione delle ragazze in materia di STEM e aumenta il loro interesse per le carriere in questo settore.\n In questo senso, moltissime community si stanno facendo avanti con iniziative importanti che portano alla luce e su un palco virtuale alcune donne che nel settore informatico hanno fatto una carriera brillante: è il caso di SheTech e di FuzzyBrains, o anche delle Django Girls.\n Conclusione  Per coloro che si potrebbero essere preoccupati o preoccupate per alcuni degli aneddoti che ho condiviso sopra, vi avviso: non ce n\u0026rsquo;è bisogno.\n Nonostante tutte le avversità e le frustrazioni che posso aver vissuto, ho imparato a darmi una pacca sulla spalla e guardare sempre oltre questi \u0026ldquo;incidenti\u0026rdquo; di percorso.\n Sono qui, ho un blog a cui dedico molto del mio tempo libero, ho scritto 4 libri (finora), ho conseguito la laurea che sognavo, ho un lavoro che mi stimola e dei colleghi fantastici; collaboro con moltissime community e cerco di fare la mia parte -e comunque non è mai abbastanza-.\n Sia in ambito lavorativo che istituzionale, ho trovato un sistema di supporto davvero incredibile durante il mio viaggio nella tecnologia e trovato alcuni colleghi, professori e amici piuttosto incredibili e di supporto lungo la strada, che hanno bilanciato tutto il negativo che c\u0026rsquo;è stato.\n In questo senso, per fortuna, posso dire che nel 2022 stiamo facendo passi da gigante e che vedere dove sono e dove siamo è un ottimo risultato, ma abbiamo ancora molta strada da fare.\n Moltissime realtà lavorative si sono adeguate e ci stanno mettendo la faccia nel promuovere iniziative che siano davvero inclusive, e non solo per far quadrare i conti in termine di personale.\n Anche la rete sta diventando un posto migliore, dove ci sono tanti colleghi che si fanno avanti e si fanno promotori di queste cause, nella speranza che questo sia presto solo un brutto ricordo.\n  E poi, ciò che non ci uccide ci rende più forti, giusto?\n Risorse utili https://shetechitaly.org/2020/12/11/donne-e-stem-un-divario-da-colmare/ https://web.archive.org/web/20190307215521/http://pdfs.semanticscholar.org/e7c1/ec1f75f97bce1006b71e7d95651261a86809.pdf https://web.archive.org/web/20200229051313/http://pdfs.semanticscholar.org/e035/cfa564e19dd94d49395f8d73122c5f619b55.pdf https://www.semanticscholar.org/paper/When-Do-Female-Role-Models-Benefit-Women-The-of-in-Drury-Siy/75cc8cebf24f5e6cf12f780aefdc87d5b21ee556 https://doi.org/10.1177%2F0956797619892892  Community https://djangogirls.org https://www.fuzzybrains.org/it/ https://shetechitaly.org/ https://techprincess.it/ https://www.meetup.com/it-IT/SheSharp/ http://codetochange.org/  ", "url": "https:\/\/theredcode.it\/professioni\/essere-un-ingegnere-donna\/" }, "https:\/\/theredcode.it\/tags\/general\/": { "title": "general", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/tags\/general\/" }, "https:\/\/theredcode.it\/categories\/professioni\/": { "title": "professioni", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/categories\/professioni\/" }, "https:\/\/theredcode.it\/voglio-diventare-un...-mobile-developer\/": { "title": "Voglio diventare un... Mobile Developer", "tags": ["interviste","voglio-diventare",], "content": "Il Natale è finito, abbiamo mangiato a volontà e ora il pensiero va subito alla dieta da iniziare lunedì (prossimo): come fare per smaltire cena e pranzo di Natale?\n Basta scaricare l\u0026rsquo;app di Gruppetto e organizzare un\u0026rsquo;uscita in bici! Forse non tutti sanno che una persona di 90 kg brucia in un\u0026rsquo;ora di bicicletta tra le 270 e le 370 calorie, quindi è facile dire addio al panettone di troppo!\n Scopriamo quindi come i ragazzi che hanno lavorato all\u0026rsquo;app hanno avuto l\u0026rsquo;idea e come l\u0026rsquo;hanno progettata, vedendo insieme a loro il mestiere del Mobile Developer!\n Presentatevi in meno di 100 parole Danilo Borroni: ho partecipato per alcuni anni alle più importanti competizioni a livello mondiale e per me essere founder di Gruppetto è un obiettivo che si realizza perché sono certo che sia uno sport che permetta di esprimere a 360 gradi la propria libertà e poterlo fare in compagnia è ancora più stimolante.\n Simone Valenziano: sono ciclista amatore da più di 10 anni e lavoro come CTO presso operaLogica, software factory che affianca Gruppetto nel percorso di sviluppo e comunicazione del progetto di startup.\n Luca Sacchetti: ho alle spalle 20 anni di ciclismo agonistico (tra cui un anno da professionista nella ex squadra Continental Marchiol) attualmente lavoro a Milano ma appena posso il mio tempo libero è dedicato alla bici.\n Cos’è Gruppetto?  La startup Gruppetto ha ideato una tecnologia intuitiva che unisce in una sola applicazione la passione per il ciclismo, la socializzazione e le funzionalità utili per competere a livello amatoriale ma anche agonistico.\n  Questo per incentivare, oltre ai professionisti del ciclismo, anche chi si approccia a questo mondo come principiante.\n  Gruppetto ha due funzionalità essenziali: creazione del Gruppetto, per condividere la ride con i propri amici o altri ciclisti oppure la funzione “Esplora” che permette all’utente di trovare nella zona desiderata il Gruppetto che fa al caso suo per livello di esperienza, genere e tipologia di percorso e di parteciparvi.\n Gruppetto App permette di organizzare un’uscita di allenamento e di chiedere a tutti gli amici se vogliono unirsi.\n Inoltre organizzando dei Gruppetti aperti a tutti è possibile anche socializzare con i ciclisti locali che organizzano le loro uscite nelle strade di casa, le quali molto spesso sono praticate in gruppi più o meno numerosi composti dai propri amici o da persone che si incontrano lungo la strada.\n  Esiste anche una sezione più social, pensata per incentivare le persone ad appassionarsi a questo sport ma anche a conoscere nuove persone, per uno scambio divertente di esperienze.\n Simone: Abbiamo scelto Flutter come framework di sviluppo mobile per essere veloci a garantire i nostri utenti novità ed efficienza.\n La scalabilità, per aumentare la potenza infrastrutturale, ci viene garantita da un architettura a microservizi costruita in .NET e chi meglio di Kubernetes per organizzare ed ospitare i nostri servizi.\n Come database abbiamo scelto un banca dati documentale come Ravendb per rendere sempre più dinamiche le nostre funzioni.\nGruppetto è già disponile sugli store Apple e Android ed è possibile scaricarla gratuitamente e con accesso a tutte le funzionalità utili per pedalare in compagnia, affrontare le ride con i propri amici e trovare i Gruppetti organizzati in zona.\n Inoltre creando il proprio profilo si potranno ricevere le informazioni sui prossimi sviluppi premium che prevedono uno sviluppo sempre più orientato alle gare e alla competizione.\n  Come nasce l’idea? Danilo “L’idea è nata durante il primo lockdown, quando io come molti altri appassionati di ciclismo, eravamo obbligati a pedalare sui rulli, in casa, da soli.\n Questo mi ha fatto apprezzare ancora di più le uscite in compagnia che sembravano un sogno. Il progetto di creare un’app che mettesse in contatto appassionati di ciclismo, è diventato concreto quando il giorno di Pasqua del 2020 ho condiviso con Simone quest’idea sotto forma di applicazione.”\n Simone “Quando Danilo mi ha parlato del progetto di creare un’app per condividere e organizzare giti in bici, da ciclista, mi è subito venuta in mente la parola “Gruppetto”.\n  Una parola universale e immediata che indica dei ciclisti che decidono di incontrarsi per affrontare insieme la fatica delle ride. Quale nome migliore per spiegare l’obiettivo della nostra nuova app?”\n  Da quel momento abbiamo lavorato per costituire la startup Gruppetto insieme a operaLogica, software factory di Garbagnate Milanese.\n Insieme al team di sviluppatori e UX Designer di operaLogica abbiamo ideato una tecnologia intuitiva che unisce in una sola applicazione la passione per il ciclismo, la socializzazione e le funzionalità utili per competere a livello amatoriale ma anche agonistico. “\n Danilo “Sabato 27 novembre 2021, dopo più di un anno di lavoro anche lato brand e comunicazione, abbiamo lanciato l’app durante un evento organizzato in Cicli Drali Milano e ora siamo pronti al rilascio di nuove funzionalità. “\nQual è stata la parte più difficile nel portare a termine il progetto dell’app?  La parte più difficile del progetto è stato lo sviluppo perché le funzionalità utili sono tante e inserirle in una progettazione rapida mantenendo un’esperienza intuitiva è stato complesso.\n Il team ha lavorato molto negli ultimi 6 mesi per garantire la piena funzionalità dell’applicazione prevista per il lancio che è ha visto il download di più di 3000 utenti in neppure 2 settimane.\n  È stato un gran lavoro di squadra di cui andiamo molto fieri.\n  Qual è la roadmap che avete seguito finora? L’applicazione mobile Gruppetto è stata progettata seguendo le fasi del Design Thinking e applicando una metodologia User-centered.\n Abbiamo indagato i bisogni degli utenti attraverso un questionario online, che ci ha permesso di scoprire le principali motivazioni che avrebbero spinto i ciclisti ad usare l’app.\n Analizzando i risultati della survey, abbiamo definito le personas per rappresentare le principali tipologie di utenti e successivamente individuato i requisiti dell’applicazione.\n La realizzazione dei wireframe ha stabilito la struttura e la gerarchia degli elementi, per poi passare al design dell’interfaccia grafica vera e propria seguendo un Design System coerente.\n È arrivato poi il momento di valutare l’usabilità dell’app: siamo andati in un negozio di biciclette a Milano per testare l’app con gli utenti reali. Grazie alla valutazione cooperativa, abbiamo raccolto feedback e nuovi suggerimenti in un processo di costante miglioramento!\nVi piacerebbe espandere l’idea, magari estendendola ad altri settori?  L’ambizione che il team Gruppetto si prefigge di raggiungere è quella di creare una nuova community di appassionati che va oltre allo schermo del proprio telefono.\n  Le opportunità che si creano sono infinite non solo a livello nazionale ma anche internazionale. Stiamo lavorando per creare una sezione sempre più community Bike e una dedicata all’aspetto più agonistico di questo sport.\n  Stiamo studiando il mondo dei runner e del ciclismo sostenibile per dare un’ impronta sempre più green alla nostra applicazione.\n Quali sono i prossimi obiettivi/progetti che avete in mente?  Socializzare grazie alle proprie passioni è una frontiera digitale sempre più esplorata. Gruppetto non si ferma a sta lavorando a nuove funzionalità.\n  In Gruppetto pensiamo che lo sport non sia solo un modo per rimanere in forma ed allenati, ma sia soprattutto un’opportunità per creare nuovi legami e rafforzare quelli già presenti.\n  Stiamo rilasciando nuove funzionalità per migliorare l’esperienza utente e ottimizzando la sezione di community per dare un ingaggio anche più interattivo, quindi restate sintonizzati!\n Contatti www.gruppetto.bike\n ", "url": "https:\/\/theredcode.it\/voglio-diventare-un...-mobile-developer\/" }, "https:\/\/theredcode.it\/tags\/api-gateway\/": { "title": "api-gateway", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/tags\/api-gateway\/" }, "https:\/\/theredcode.it\/aws-lambda-e-documentdb-con-python\/": { "title": "AWS Lambda e DocumentDB con Python", "tags": ["api-gateway","aws","documentdb","lambda","python",], "content": "Sperimentando un po\u0026rsquo; con il mondo AWS insieme a Michele Scarimbolo, amico e collega -denominato Mr. AWS-, abbiamo messo mano al servizio Lambda e DocumentDB, per creare delle funzioni che fossero in grado di gestire delle operazioni CRUD sfruttando questo database documentale.\n E tu che aspetti? Partiamo subito con questo tutorial su AWS Lambda e DocumentDB con Python!\n Intro  AWS Lambda consente di eseguire codice senza dover effettuare il provisioning né di dover gestire alcun server.\n Il servizio esegue codice su un\u0026rsquo;infrastruttura di calcolo ad alta disponibilità e amministra le risorse di elaborazione, tra cui la manutenzione del server e del sistema operativo, il provisioning e il dimensionamento automatico della capacità, il monitoraggio di codici e la creazione di log.\n È sufficiente fornire il codice in uno dei linguaggi supportati da AWS Lambda (attualmente Node.js, Java, C#, Python, Go, Ruby e PowerShell) per eseguirlo!\n È perfetto per l’esecuzione di porzioni di codice e funzioni atomiche o che fanno parte di un’architettura a microservizi che possono essere eseguite in poco tempo e il cui codice è stato ottimizzato.\n AWS DocumentDB è un servizio di database documentale che viene normalmente associato a MongoDB come tipologia di gestione dei dati, anche se, come la stessa community di MongoDB afferma, questo è compatibile rispetto all\u0026rsquo;uso delle API solo al 34%.\n Un database basato su documenti archivia in modo nativo dei dati in formato JSON; in questo caso, DocumentDB fornisce la possibilità di ricerche di documenti singoli, query tramite espressioni regolari e aggregazioni, creando un cluster di una o più istanze nelle zone di disponibilità specificate.\n Quando crei un cluster utilizzando la console Amazon DocumentDB e scegli di creare una replica in una zona di disponibilità diversa, Amazon DocumentDB crea due istanze: l\u0026rsquo;istanza primaria sarà in una zona di disponibilità e l\u0026rsquo;istanza di replica in una zona di disponibilità diversa.\n Creazione del cluster con DocumentDB  Prima di tutto, andiamo ad avviare un cluster su DocumentDB: per iniziare, è possibile configurare come classe quella più piccola disponibile, che in questo caso è la db.t3.medium:\n Configurazione del cluster DocumentDB\n Andiamo quindi a definire un utente e una password per il master seguendo le indicazioni fornite nel tab dedicato all\u0026rsquo;Authentication:\n Autenticazione a DocumentDB\n Nella sezione relativa alle impostazioni avanzate ci sono molte opzioni riguardo la configurazione di un backup, la gestione dei log, la configurazione di rete e via dicendo.\n Non dimentichiamo uno step fondamentale: Lambda avrà bisogno di accedere al database DocumentDB, e per farlo avrà bisogno di una policy che ne permette la scrittura e la lettura.\n Per impostazione predefinita, un cluster Amazon DocumentDB accetta solo connessioni sicure utilizzando Transport Layer Security (TLS). Per potersi connettere tramite TLS, sarà prima scaricare la chiave pubblica per Amazon DocumentDB.\n La connessione DocumentDB non può essere stabilita perché la nostra funzione Lambda e il cluster DocumentDB devono risiedere nello stesso VPC.\n Per farlo, nelle configurazioni avanzate del cluster, scorriamo verso il basso fino alla sezione Network settings e selezioniamo il VPC corretto, le sue subnet e un gruppo di sicurezza adeguato (aka security group).\n Esempio di configurazione della rete di DocumentDB (attenzione, qui il security group non è settato!)\n Una volta che il cluster sarà creato e istanziato, ci vorranno alcuni minuti prima che nell\u0026rsquo;elenco dei cluster presenti su DocumentDB riusciremo a vedere che il cluster è disponibile:\n Stato delle istanze del cluster DocumentDB\n A questo punto, non ci resta che prendere la stringa di connessione al cluster e utilizzarla all\u0026rsquo;interno delle lambda per collegarci!\n Per recuperare le informazioni relative alla connessione, clicchiamo sul cluster di nostro interesse e andiamo nella sezione Connectivity \u0026amp; Security: troveremo alcuni esempi per potersi connettere all\u0026rsquo;istanza di DocumentDB con una stringa del tipo:\n NOMECLUSTER-cluster.cluster-IDCLUSTER.eu-west-1.docdb.amazonaws.com:27017  La copiamo, e ce la mettiamo da parte. Prossimo step: creazione delle Lambda per aggiungere, modificare, eliminare e recuperare un documento dal database!\n Definizione delle funzioni Lambda  Il servizio Lambda ci permette di creare delle funzioni ad hoc per svolgere tutte le operazioni che vogliamo: il vero vantaggio in questo caso è la fruizione delle API che ci permettono di collegarci al cluster di DocumentDB per poter gestire i nostri dati.\n Creazione di una funzione Lambda\n In questo caso, andiamo quindi a creare una Lambda da zero, specificando qual è il linguaggio da utilizzare.\n In questo caso, selezioniamo Python: andremo a creare delle funzioni lambda che ci permettano di eseguire delle operazioni come inserimento, ricerca o cancellazione sul database di DocumentDB.\n Per farlo, andremo ad utilizzare alcune librerie, tra cui json, bson e pymongo: queste ci permetteranno di creare documenti, recuperarli e soprattutto restituirli tramite una risposta JSON che, per esempio, potremmo fornire tramite un\u0026rsquo;API Gateway.\n Attenzione: queste dovranno essere importate nella Lambda utilizzando i livelli.\n  Per approfondire, leggi questo articolo su Lambda e API Gateway!\n  Per poter utilizzare delle librerie aggiuntive, all\u0026rsquo;interno del servizio Lambda, basterà selezionare la voce nel menù laterale chiamata Livelli e crearne uno all\u0026rsquo;interno del quale andremo a caricare uno zip con tutti i file delle librerie di cui abbiamo bisogno.\n Come farlo? Per creare uno zip con le librerie, sarà sufficiente scaricarle utilizzando pip, specificando la cartella di destinazione dove andarle a salvare:\n pip install pymongo -t /dest/folder  Creazione di un livello per AWS Lambda\n Partiamo dall\u0026rsquo;operazione di creazione: vediamo come creare un documento e inserirlo all\u0026rsquo;interno di DocumentDB. Per farlo, importiamo le librerie necessarie e poi specifichiamo all\u0026rsquo;interno della funzione pymongo.MongoClient l\u0026rsquo;indirizzo del cluster che abbiamo creato in precedenza insieme alle credenziali per accedervi:\n import json import pymongo from bson import json_util def lambda_handler(event, context): client = pymongo.MongoClient(\u0026#39;mongodb://[USERNAME]:[PASSWORD]@[CLUSTER_NAME].XXX.eu-west-1.docdb.amazonaws.com:27017\u0026#39;)  A questo punto, richiamiamo il database che intendiamo creare (in questo caso, my_db) e la collezione che vogliamo aggiungere (ossia users). Dal momento che il contenuto del documento sarà popolato dal body della request che arriva dall\u0026rsquo;API Gateway, andiamo a verificare che event, ossia l\u0026rsquo;oggetto con cui AWS ci permette di fornire dei parametri, contenga un body.\n Nota a margine: event normalmente ha una struttura di questo tipo:\n { \u0026#34;resource\u0026#34;: \u0026#34;/\u0026#34;, \u0026#34;path\u0026#34;: \u0026#34;/\u0026#34;, \u0026#34;httpMethod\u0026#34;: \u0026#34;GET\u0026#34;, \u0026#34;requestContext\u0026#34;: { \u0026#34;resourcePath\u0026#34;: \u0026#34;/\u0026#34;, \u0026#34;httpMethod\u0026#34;: \u0026#34;GET\u0026#34;, \u0026#34;path\u0026#34;: \u0026#34;/Prod/\u0026#34;, ... }, \u0026#34;headers\u0026#34;: { \u0026#34;accept\u0026#34;: \u0026#34;text/html\u0026#34;, \u0026#34;accept-encoding\u0026#34;: \u0026#34;gzip, deflate, br\u0026#34;, \u0026#34;Host\u0026#34;: \u0026#34;xxx.us-east-2.amazonaws.com\u0026#34;, \u0026#34;User-Agent\u0026#34;: \u0026#34;Mozilla/5.0\u0026#34;, ... }, \u0026#34;multiValueHeaders\u0026#34;: { \u0026#34;accept\u0026#34;: [ \u0026#34;text/html\u0026#34; ], \u0026#34;accept-encoding\u0026#34;: [ \u0026#34;gzip, deflate, br\u0026#34; ], ... }, \u0026#34;queryStringParameters\u0026#34;: { \u0026#34;postcode\u0026#34;: 12345 }, \u0026#34;multiValueQueryStringParameters\u0026#34;: null, \u0026#34;pathParameters\u0026#34;: null, \u0026#34;stageVariables\u0026#34;: null, \u0026#34;body\u0026#34;: null, \u0026#34;isBase64Encoded\u0026#34;: false }  Non vi fate ingannare infatti dai test, all\u0026rsquo;interno dei quali potrete inserire qualunque tipo di JSON: nel momento in cui questa Lambda verrà sfruttata da un\u0026rsquo;API Gateway, tutto ciò che arriverà dalle request, si troverà nel body.\n  db = client.my_db coll = db.users if event and \u0026#39;body\u0026#39; in event: body = json.loads(event[\u0026#39;body\u0026#39;])  Dopo aver quindi verificato che il body non sia vuoto, andiamo a inserire il documento nel database, con questa semplice istruzione:\n coll.insert_one(body) Per verificare che sia andato a buon fine, proviamo a cercare quello stesso oggetto all\u0026rsquo;interno del database e, se presente, ritorniamo un messaggio di successo come risposta alla chiamata della funzione Lambda:\n  res = coll.find_one(body) client.close() if res: return { \u0026#39;statusCode\u0026#39;: 200, \u0026#39;body\u0026#39;: json_util.dumps(body), \u0026#39;headers\u0026#39;: { \u0026#39;Access-Control-Allow-Headers\u0026#39;: \u0026#39;Content-Type\u0026#39;, \u0026#39;Access-Control-Allow-Origin\u0026#39;: \u0026#39;*\u0026#39;, \u0026#39;Access-Control-Allow-Methods\u0026#39;: \u0026#39;OPTIONS,GET,POST\u0026#39; } } else: return { \u0026#39;statusCode\u0026#39;: 400, \u0026#39;body\u0026#39;: json.dumps(\u0026#39;Request NOT inserted!\u0026#39;), \u0026#39;headers\u0026#39;: { \u0026#39;Access-Control-Allow-Headers\u0026#39;: \u0026#39;Content-Type\u0026#39;, \u0026#39;Access-Control-Allow-Origin\u0026#39;: \u0026#39;*\u0026#39;, \u0026#39;Access-Control-Allow-Methods\u0026#39;: \u0026#39;OPTIONS,GET,POST\u0026#39; } }  Attenzione a due fattori: in primis, nel body di risposta viene utilizzato json_util.dumps perché insieme al metodo loads questo ci consente di convertire un oggetto da BSON a JSON o viceversa: in questo caso, utilizziamo dumps perché trasforma un oggetto da BSON a JSON.\n L\u0026rsquo;altra cosa a cui prestare attenzione è l\u0026rsquo;uso degli headers: qualora le Lambda che state creando si vadano ad integrare con un\u0026rsquo;API Gateway che ha le CORS policy attivate e questa sarà pubblicata su Internet, sarà necessario specificarlo nella risposta.\n Per recuperare invece l\u0026rsquo;elenco completo dei documenti inseriti, la Lambda avrà le seguenti istruzioni: il codice è molto simile a quanto visto per la creazione, ma in questo caso andiamo ad utilizzare il metodo find(): specificando list() all\u0026rsquo;esterno della chiamata, questo convertirà automaticamente il risultato della query in una lista che potremo andare a restituire come risposta.\n import json import pymongo from bson import json_util def lambda_handler(event, context): client = pymongo.MongoClient(\u0026#39;mongodb://[USERNAME]:[PASSWORD]@[CLUSTER_NAME].XXX.eu-west-1.docdb.amazonaws.com:27017\u0026#39;) db = client.my_db coll = db.users res = list(coll.find()) client.close() if len(res) \u0026gt;= 0: return { \u0026#39;statusCode\u0026#39;: 200, \u0026#39;body\u0026#39;: json_util.dumps(res), \u0026#39;headers\u0026#39;: { \u0026#39;Access-Control-Allow-Headers\u0026#39;: \u0026#39;Content-Type\u0026#39;, \u0026#39;Access-Control-Allow-Origin\u0026#39;: \u0026#39;*\u0026#39;, \u0026#39;Access-Control-Allow-Methods\u0026#39;: \u0026#39;OPTIONS,GET\u0026#39; } } else: return { \u0026#39;statusCode\u0026#39;: 400, \u0026#39;body\u0026#39;: json.dumps(\u0026#39;Component NOT retrieved!\u0026#39;) } Per recuperare un singolo documento, magari passando dei parametri tramite l\u0026rsquo;evento, è possibile usare il metodo find_one():\n res = coll.find_one(component)  Infine, creiamo una Lambda per cancellare un documento, con il seguente codice: oltre a collegarci al database e recuperare l\u0026rsquo;ID dell\u0026rsquo;oggetto da cancellare dal body dell\u0026rsquo;evento, andiamo a verificare che questo sia presente nel database: se il risultato della ricerca non è vuoto, procediamo con la cancellazione tramite il metodo delete_one.\n import json import pymongo from bson.objectid import ObjectId def lambda_handler(event, context): client = pymongo.MongoClient(\u0026#39;mongodb://[USERNAME]:[PASSWORD]@[CLUSTER_NAME].XXX.eu-west-1.docdb.amazonaws.com:27017\u0026#39;) db = client.my_db coll = db.users if event and \u0026#39;body\u0026#39; in event: body = json.loads(event[\u0026#39;body\u0026#39;]) user_id= body[\u0026#39;user_id\u0026#39;] res = coll.find_one({\u0026#34;_id\u0026#34;: ObjectId(user_id)}) if res is not None: coll.delete_one({\u0026#39;_id\u0026#39;: ObjectId(user_id)}) client.close() return { \u0026#39;statusCode\u0026#39;: 200, \u0026#39;body\u0026#39;: json.dumps(\u0026#39;Document deleted successfully!\u0026#39;), \u0026#39;headers\u0026#39;: { \u0026#39;Access-Control-Allow-Headers\u0026#39;: \u0026#39;Content-Type\u0026#39;, \u0026#39;Access-Control-Allow-Origin\u0026#39;: \u0026#39;*\u0026#39;, \u0026#39;Access-Control-Allow-Methods\u0026#39;: \u0026#39;OPTIONS,GET\u0026#39; } } else: return { \u0026#39;statusCode\u0026#39;: 200, \u0026#39;body\u0026#39;: json.dumps(\u0026#39;User with this ID does not exist!\u0026#39;), \u0026#39;headers\u0026#39;: { \u0026#39;Access-Control-Allow-Headers\u0026#39;: \u0026#39;Content-Type\u0026#39;, \u0026#39;Access-Control-Allow-Origin\u0026#39;: \u0026#39;*\u0026#39;, \u0026#39;Access-Control-Allow-Methods\u0026#39;: \u0026#39;OPTIONS,GET\u0026#39; } }  Niente male, no? Non ti resta che collegarlo ad un\u0026rsquo;API Gateway e il gioco è fatto!\n ", "url": "https:\/\/theredcode.it\/aws-lambda-e-documentdb-con-python\/" }, "https:\/\/theredcode.it\/tags\/documentdb\/": { "title": "documentdb", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/tags\/documentdb\/" }, "https:\/\/theredcode.it\/tags\/lambda\/": { "title": "lambda", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/tags\/lambda\/" }, "https:\/\/theredcode.it\/voglio-diventare-una...-content-strategist\/": { "title": "Voglio diventare una... Content Strategist", "tags": ["interviste","voglio-diventare","apogeo",], "content": "La figura della Content Strategist è fondamentale in un\u0026rsquo;epoca come questa delle professioni digitali (e non solo): si tratta infatti di creare, pubblicare e gestire contenuti utili, capaci di apportare dei risultati anche nella web experience, unendo scrittura e strategia.\n Per parlare di questa professione, diamo spazio a Valentina Di Michele, Content Strategist da diversi anni e fondatrice di Officina Microtesti, una bellissima attività che si occupa di scrittura e design!\n Descriviti in 100 parole.  Vent’anni fa mi sono laureata in filosofia: volevo fare la critica cinematografica, ero innamorata della filosofia del linguaggio.\n Dopo un Master in grafica pubblicitaria, ho fatto la redattrice per una rivista europea di industria cinematografica.\nI contratti erano brevi e incerti e io volevo essere indipendente, così ho trovato lavoro in un’agenzia che produceva contenuti web per i siti della PA centrale. In 20 anni ho scritto di tutto: articoli per riviste di cinema, testi di marketing, manuali tecnici di piattaforme IT.\nOggi sono la madrina dello UX Writing in Italia, amministro l’unica community italiana sul tema e gestisco il mio studio di scrittura e design, Officina Microtesti.\n In cosa consiste il ruolo di Content Strategist?  Come Content strategist mi occupo di progettare i contenuti di siti web e app e di verificare che siano quelli che servono davvero alle persone durante la navigazione.\n Supervisiono tutto il processo di creazione e progettazione: dalla definizione della voce di brand e di prodotto alla ricerca sulle persone, dalla definizione del prototipo insieme al team di design fino ai testi e ai microtesti e ai test di usabilità.\n È un lavoro che mi appassiona così tanto da spingermi a raccontarlo in un libro uscito l’anno scorso per Apogeo Feltrinelli (il libro si chiama Emotion Driven Design).\n A Officina Microtesti siamo in sette: oltre a me ci sono UX Writer, Content e Neurodesigner. Lavoriamo in team, da soli o con i team di marketing e design dei clienti.\n Qual è la soft skill più importante che deve possedere un Content Strategist?  Credo che serva esperienza sul campo: è un lavoro strategico e per farlo devi avere fatto anche quello operativo. Il mio lavoro è a cavallo tra scrittura, neuromarketing e design, e devi conoscere tutti e tre questi mondi per fare tutto al meglio.\n La maggior parte di noi utilizza i social per parlare dei propri successi, ma la realtà è che siamo quel che siamo grazie al 90% dei nostri errori. Racconta il tuo più grande fallimento da quando lavori nel settore, che però ti ha reso ciò che sei.  Il fallimento non piace a nessuno, e a nessuno piace raccontarlo. Il mio fallimento più grande, che mi fa ancora stare male, è stato un licenziamento.\n  Non direi che era colpa mia, ma non c’entra la realtà oggettiva: è quello che senti. Per me è stato proprio un tonfo, la sensazione di essere stata rifiutata, di essere inutile.\n  Dopo quella volta, ho iniziato a guardare in modo diverso le cose che non vanno. A volte si calibra male un’attività col cliente, a volte si fanno errori di gestione o di progettazione più o meno grossi.\n Però non me ne faccio più una malattia. Lo valuto come un evento naturale, una ruota forata in un lungo percorso: semplicemente, succede.\n  Come fare per diventare un Content Strategist?  Fare tanta esperienza operativa è fondamentale. È utile leggere, fare corsi, ma bisogna provare tutto: seguire in prima persona la fase di ricerca, creare i brief, lavorare a contatto con il team di design, capire come funzionano gli strumenti tecnici (tool, CMS etc).\n La strategia è una visione \u0026ldquo;alta\u0026rdquo; dell\u0026rsquo;insieme di attività operative, che impatta il cliente (che paga), il pubblico, e definisce gli obiettivi a breve e lungo termine, la pianificazione delle attività tattiche e la supervisione di quelle operative.\nÈ un\u0026rsquo;attività che si impara lavorando direttamente sul campo: partendo dalle singole attività operative, e pian piano prendendo confidenza con gli strumenti.\n Parlando di successi, qual è il tuo prossimo obiettivo? Quale ruolo vorresti ricoprire entro i prossimi 3 anni?  Con Officina Microtesti abbiamo molti nuovi progetti, grandi e molto impegnativi. Molte aziende ci conoscono per passaparola e stiamo lavorando con aziende enormi, che fanno cose incredibili. A volte non mi sembra quasi vero.\n Nei prossimi mesi lanceremo la nostra piattaforma di corsi, e sarà diversa da quello che c’è sul mercato in questo momento. Nei prossimi 3 anni vorrei però divertirmi: tornare a tenere talk agli eventi, magari internazionali, o lavorare a progetti fuori dal mio ambito più stretto.\n Conosci il tema gender gap in ambito STEM? Se sì, cosa puoi fare nel tuo piccolo per combattere questo problema? (Fai anche riferimenti a situazioni reali in cui hai avuto modo di fare la tua parte!)  Sono una donna che lavora in un ambito tecnologico, perché i contenuti che progetto e scrivo danno “voce” ai prodotti tecnologici.\n  Ricordo quando anni fa una donna nel team ICT era vista un po’ come “quella che fa i caffè”: oggi è diverso, ma mi capita ancora spesso di essere l’unica donna fra uomini. Io, che mi occupo di rendere la tecnologia più umana con le parole, in mezzo a un team di sviluppatori o ingegneri.\n  Officina Microtesti è composta al 90% da donne e da qualche mese è parte di Digital Skills Europe, un programma della Commissione Europea che ha lo scopo etico di migliorare le competenze digitali nella popolazione europea.\n Abbiamo il folle proposito di creare un nuovo umanesimo digitale, inclusivo, aperto a tutte le persone. Ma sono sicura che ce la faremo.\n \u0026hellip; e lo siamo anche noi! In bocca al lupo a Valentina e a Officina Microtesti!\n", "url": "https:\/\/theredcode.it\/voglio-diventare-una...-content-strategist\/" }, "https:\/\/theredcode.it\/tags\/qrcode\/": { "title": "qrcode", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/tags\/qrcode\/" }, "https:\/\/theredcode.it\/qrcode-con-python\/": { "title": "QRCode con Python", "tags": ["python","qrcode",], "content": "Ormai tutti abbiamo a che fare con i QRCode: Green Pass (e non solo) ci hanno costretto a scoprire questa tecnologia. Ma come funziona un QRCode con Python?\n In questo articolo, vediamo come creare un programma che sia in grado di generare un codice QR a partire da un semplice testo, e anche come estrarre il contenuto di un\u0026rsquo;immagine già presente.\n Cos\u0026rsquo;è il QRCode  Si tratta di un formato di codice a barre costituito da moduli neri su sfondo bianco, attraverso i quali è possibile trasmettere delle informazioni.\n In un solo QRcode possono essere contenuti fino a 7.089 caratteri numerici o 4.296 alfanumerici, al contrario dei tradizionali codici a barre.\n Esempio di QRCode: riesci a leggere cosa c\u0026rsquo;è scritto?\n  Sapevi inoltre che il nome \u0026ldquo;QR\u0026rdquo; è l\u0026rsquo;abbreviazione dell\u0026rsquo;inglese Quick Response (ossia \u0026ldquo;risposta rapida\u0026rdquo;)? Questo perché l\u0026rsquo;idea nasce nel 1994 nelle fabbriche della Toyota, dove il codice QR per tracciare i pezzi di automobili, dal momento che questo tipo di codifica permette di inserire diverse informazioni con una rapida decodifica del suo contenuto!\n  Come generare un QRCode  Per generare un codice QR esistono moltissimi siti online, ma perché non farlo con Python?\n Il codice è estremamente semplice. Per prima cosa, installiamo la libreria qrcode con il seguente comando:\n pip install qrcode  Dopodiché, andiamo ad importarla tramite il seguente codice:\n import qrcode  A questo punto, possiamo creare il codice QR con la seguente istruzione:\n qr = qrcode.QRCode(version=1,error_correction=qrcode.constants.ERROR_CORRECT_L,box_size=10,border=4,) qr.add_data(\u0026#39;https://www.patreon.com/theredcode_it\u0026#39;) qr.make(fit=True) img = qr.make_image(fill_color=\u0026#34;black\u0026#34;, back_color=\u0026#34;white\u0026#34;) im1 = img.save(\u0026#34;test.jpg\u0026#34;)  Con la prima riga, andiamo a definire le proprietà del QRcode: il parametro version è un numero intero compreso tra 1 e 40 che controlla la dimensione del QR Code (il più piccolo è rappresentato dalla versione 1 e sarà una matrice 21x21).\n Il parametro error_correction controlla la correzione degli errori utilizzata per il QR Code, e ne esistono quattro varianti, a seconda della percentuale di errori che vogliamo correggere.\n Il parametro box_size controlla quanti pixel è ogni \u0026ldquo;scatola\u0026rdquo; del codice QR, e in questo caso saranno 10x10; stessa vale per il border, che rappresenta la dimensione in pixel del bordo del codice QR.\n Se volessimo che il dimensionamento avvenisse in maniera automatica, sarà sufficiente impostare su None e utilizzare il parametro fit durante la creazione del codice per determinarlo automaticamente, come mostrato nella riga 3.\n fill_color e back_color nella penultima riga possono cambiare lo sfondo e il colore dell\u0026rsquo;immagine del codice QR e accettano entrambi tuple di colore RGB.\n Una volta eseguito il codice, l\u0026rsquo;ultima riga farà sì che il QR code generato sia salvato all\u0026rsquo;interno della cartella del progetto.\n Semplice, no?\n  Come estrarre da un QRCode  Abbiamo visto come inserire delle informazioni all\u0026rsquo;interno di un QRCode, ma vediamo come estrarle.\n Per farlo, avremo bisogno di installare due pacchetti, ossia Pillow e pyzbar tramite il seguente comando:\n pip install pyzbar pip install pillow  Una volta importate le librerie, potremo procedere a fornire l\u0026rsquo;immagine da decodificare, come mostrato nella prima riga.\n from pyzbar.pyzbar import decode from PIL import Image data = decode(Image.open(\u0026#39;test.jpg\u0026#39;)) print(data) data = data[0].data print(data.decode(\u0026#34;utf-8\u0026#34;))  Le ultime due righe sono necessarie per recuperare i dati contenuti nel QRCode: infatti, utilizzando l\u0026rsquo;oggetto decodificato, questo è il risultato che otterremmo:\n [Decoded(data=b\u0026#39;https://www.patreon.com/theredcode_it\u0026#39;, type=\u0026#39;QRCODE\u0026#39;, rect=Rect(left=39, top=39, width=292, height=292), polygon=[Point(x=39, y=39), Point(x=39, y=330), Point(x=331, y=331), Point(x=330, y=39)])]  Non molto chiaro, no?\n Questo perché la libreria pyzbar utilizza un oggetto chiamato Decoded per incapsulare tutte le informazioni relative al QRCode, come la dimensione, la tipologia di codice, e via dicendo.\n Dal momento che si tratta di una lista, prendiamo il primo oggetto e prendiamo la proprietà data della tupla risultante:\n data = data[0].data print(data.decode(\u0026#34;utf-8\u0026#34;))  Un gioco da ragazze!\n  Ti potrebbero interessare\u0026hellip; Come creare un sistema di raccomandazione per film con Python Docker per Django e Postgres Analisi del linguaggio con Python – Apogeo ", "url": "https:\/\/theredcode.it\/qrcode-con-python\/" }, "https:\/\/theredcode.it\/voglio-diventare-un-devops-engineer\/": { "title": "Voglio diventare un… DevOps Engineer", "tags": ["interviste","voglio-diventare",], "content": "Gianmarco è un supereroe informatico: nasce come sviluppatore, nel tempo extra ricopre il ruolo di Project Leader per un interessante progetto che ha avviato diversi anni fa a supporto della divulgazione scientifica in ambito biomedicale, anche se adesso fa il DevOps Engineer a tempo pieno: un mestiere ibrido che incarna diverse professioni con tante e diverse competenze..\n Il suo essere camaleontico ed entusiasta è fondamentale per svolgere questo lavoro!\n Nessuno spoiler: vediamo come diventare un DevOps Engineer.\n Descriviti in 100 parole.  Curioso. Questo aggettivo, apparentemente semplice, caratterizza da sempre ed arricchisce in modo significativo le mie attività. Essere curiosi significa essere pronti alla contaminazione dalle idee altrui, quindi aperti al confronto.\n Ho 32 anni, inzio la mia carriera 8 anni fa lavorando come sviluppatore firmware in ambito IoT; gli studi in ingegneria mi conferiscono quel giusto “approccio al problema” per affrontare le sfide tecniche/professionali del mondo lavorativo.\n Nei primi 5 anni di carriera, ho osservato gli applicativi software dapprima dall’alto dello stack tecnologico (frontend developer) per poi scendere sempre più in basso (backend developer e sys-admin), fino ad appassionarmi - da 3 anni a questa parte - alle metodologie proprie del DevOps.\n Mi piace - in ordine sparso - correre, leggere e programmare.\n La lettura è quello strumento che mi rende consapevole del fatto che gli orizzonti della conoscenza possono divenire sempre più ampi; la corsa, invece, è quell’attività fisica necessaria per riordinare (in gergo tecnico direi “deframmentare” ) le idee per meglio utilizzarle.\n Nel mente, utilizzo la programmazione come un esercizio - stavolta solo mentale - che mi permette di sperimentare velocemente, grazie all’utilizzo di astrazioni o modelli, e semplificare problemi ricorrenti in scenari quotidiani.\n In cosa consiste il ruolo di DevOps Engineer?  Continuo a ribadire che il ruolo del DevOps non va inteso come una posizione lavorativa nel vero senso della parola; piuttosto è un approccio metodico in relazione a particolari procedure che caratterizzano un rilascio applicativo.\n Il mio lavoro consiste, dunque, nell’utilizzo delle conoscenze di programmazione maturate (dev-) per realizzare automatismi (CI/CD) che garantiscono continuità ai canali - anche detti “pipeline” - inerenti ai rilasci applicativi, conoscendo approfonditamente l’infrastruttura tecnologica sottostate ed il fornitore dei servizi (-ops).\n  Le attività del DevOps sono quasi mai svolte in solitaria; tale figura, infatti, rappresenta un collante tra il team di sviluppatori software che realizza l’applicativo e quello dei sistemisti (o architetti cloud) che prepara il provisioning delle risorse necessarie.\n Qual è la soft skill più importante che deve possedere un DevOps Engineer?  Soprattutto nel contesto odierno, dove tutti siamo orientati al lavoro da remoto, considero il “saper comunicare bene” una delle abilità necessarie (ma non sufficienti) per essere un player importante in un team di lavoro.\n  È fondamentale anche per la figura del DevOps: più spesso di quanto si possa credere, ci si troverà ad essere un vero e propriò mediatore tra più figure tecniche, dove ognuna osserverà valide ragioni a difesa delle proprie scelte tecnologiche.\n  Il DevOps è un ruolo, per certi versi, multidisciplinare. Saper costruire canali di integrazione, comprendere l’importanza dei test, aumentare la sensibilità circa gli aspetti di sicurezza, richiedere l’utilizzo di best practices sono solo pochi esempi di attività per le quali è importante sapere comunicare bene per fornire più ampie prospettive a chi osserva solo una faccia della medaglia: lo sviluppo software oppure il sistema operativo.\n La maggior parte di noi utilizza i social per parlare dei propri successi, ma la realtà è che siamo quel che siamo grazie al 90% dei nostri errori. Racconta il tuo più grande fallimento da quando lavori nel settore, che però ti ha reso ciò che sei.  Falliamo ogni giorno, per fortuna. Non esiste un fallimento più grande dell’altro. Ciò che normalmente viene inteso come “fallimento” è invece un’iniziativa che ha portato ad un risultato diverso da quello previsto, producendo quindi un effetto inaspettato che ci consente di imparare qualcosa che prima era inimmaginabile.\n  Al contempo, è proprio così che ritengo riusciamo a crescere.\n Il vero fallimento, di conseguenza, si verifica unicamente quando non riusciamo ad apprendere dalle nostre azioni.\nCome fare per diventare un DevOps Engineer?  Il mio motto è: Life Long Learning. Siate curiosi di imparare ogni giorno ed appassionatevi di ciò che fate.\nIn ambito informatico, i prodotti e le tecnologie diventano velocemente obsolete, a favore di strumenti sempre più moderni o complessi; è fondamentale avere la volontà e la predisposizione ad essere sempre “sul pezzo”.\n Seguire certificazioni è uno dei percorsi - oltre a sperimentare, fare pratica e errori! - per rimanere sempre sulla cresta dell’onda tecnologica.\n Investire nelle competenze è, a mio parere, il miglior strumento per non essere mai inadeguati rispetto ai trend attuali di mercato e quindi sempre spendibili al miglior offerente, ovvero chi a sua volta crede nella formazione continua del team di lavoro.\n Parlando di successi, qual è il tuo prossimo obiettivo? Quale ruolo vorresti ricoprire entro i prossimi 3 anni?  Immaginando la carriera come uno stack di competenze, se fino a qualche anno fa la mia ambizione principale era verticalizzarmi nella conoscenza delle tecnologie, oggi credo che bisogna spostarsi anche nei livelli orizzontali per distinguersi.\nMi piace molto l’idea di essere un buon “Tech Leader”, una persona di riferimento capace di proporre non solo lo strumento più adatto alla soluzione tencologica ma anche il metodo o l’approccio migliore per le esigenze del cliente.\n Tale figura, a mio avviso, deve disporre anzitutto di una profonda e solida conoscenza delle tecnologie che il mercato attuale offre per poi essere in grado di distinguersi con iniziative volte a semplificare o migliorare i processi e quindi arrivare agilmente al goal.\n Conosci il tema gender gap in ambito STEM? Se sì, cosa puoi fare nel tuo piccolo per combattere questo problema? (Fai anche riferimenti a situazioni reali in cui hai avuto modo di fare la tua parte!) Si, il gender gap è evidente - purtroppo - anche nel ruolo del DevOps. Nelle differenti realtà aziendali che ho avuto il piacere di incontrare, ho constatato che 4 colleghi su 5 sono uomini.\n  Ma qualcosa sta cambiando ed in modo percettibile.\n  Ribadisco che, anche in questo settore, affinchè il cambiamento sia proficuo ed accogliente bisogna che si inizi elevando la propria mentalità. Non dovremmo permettere che questa disparità abbia senso di esistere quando le competenze possono essere ugualmente verificate.\n Credo, anzi, che il ruolo della donna sia un plus: in ambienti lavorativi fin troppo omogenei, ella regala l’opportunità per diversificare e creare nuove prospettive di osservazione dei problemi stessi fornendo migliori spunti di confronto.\n Contatti LinkedIn: https://www.linkedin.com/in/gianmarcorogo/ Sito: https://www.gianmarcorogo.com ", "url": "https:\/\/theredcode.it\/voglio-diventare-un-devops-engineer\/" }, "https:\/\/theredcode.it\/interviste\/voglio-diventare-una-web-designer\/": { "title": "Voglio diventare una... Web Designer", "tags": ["interviste","voglio-diventare",], "content": "Se non hai mai seguito una sua diretta su Twitch, non sai che ti sei pers*! Diana è una ragazza brillante e di grande ispirazione: non si pone mai problemi nel mettere sul piatto la sua esperienza personale e di farne tesoro con e per gli altri.\n Inoltre, veste tantissimi cappelli, tra cui quello di community manager: il suo percorso è portare il messaggio dell\u0026rsquo;importanza dell\u0026rsquo;accessibilità a tutti\u0026hellip; ma sarà lei a parlarne: vediamo come diventare una Web Designer!\n Descriviti in 100 parole.  ​​Creativa, curiosa e testarda. Sono una sviluppatrice/designer web e community addicted.\nDa marzo 2021 ho iniziato a parlare di sviluppo e design su Twitch e questo mi ha permesso di conoscere molti/e professionisti/e del settore e di creare la mia piccola community.\n  Credo che la condivisione sia la chiave di volta del nostro lavoro e fondare/gestire/seguire una community sia importante nella fase di crescita di un dev.\n  In cosa consiste il ruolo di Web Designer?  Il/La web designer si occupa della parte estetica di un sito web e dello sviluppo di interfacce utente.\n La progettazione del design di un sito web inizia cercando di capire i bisogni del cliente, e immaginando il prodotto finale che già ha in mente, poi si passa ad una prima bozza, conosciuta come wireframe dove si delinea lo scheletro della struttura del sito (in bianco e nero così da essere il più minimale possibile), poi si passa al mockup.\n Per procedere alla realizzazione del mockup si parte da uno studio sulla palette dei colori e sui font, poi si prende il wireframe e si vanno a creare tutti gli elementi grafici simulando il risultato finale senza ancora toccare codice.\n Una volta approvato il mockup si passa allo sviluppo vero e proprio, utilizzando la tecnologia più opportuna.\n Tendenzialmente se si è freelance spesso tutta questa procedura è a carico di una singola figura mentre se si è in azienda, e/o si lavora in team, entrano in gioco anche altre figure professionali come l’UX designer.\n Quanto l’accessibilità di un sito è parte integrante di questo lavoro?  Il ruolo dell’accessibilità è spesso considerato marginale o secondario invece deve essere parte integrante della realizzazione di un sito fin dalla sua prima bozza. Questo perché realizzare un sito accessibile è molto più facile di far diventare un sito accessibile.\n Ad oggi, l’accessibilità è considerata un requisito necessario solo da aziende estremamente grandi e enti statali/governativi, questo perché sono obbligati per legge (vedi legge Stanca) a rispettare dei requisiti minimi dettati dalle WCAG (abbreviazione di Web Content Accessibility Guidelines).\n Invece ogni sito dovrebbe essere accessibile e per rendervene conto vi lascio alcuni numeri:\n secondo l’Istat sono 3.1 milioni le persone con disabilità in Italia, circa il 5.2% della popolazione italiana; il 98% dei siti presenti su internet non sono accessibili, a fronte di più di un miliardo di persone affette da un tipo lieve o grave di disabilità che sono presenti nel mondo.  Qual è la soft skill più importante che deve possedere una Web Designer?  Non vorrei esagerare ma credo il “senso estetico” unito a tanta curiosità e empatia.\n Per “senso estetico” o “buon gusto” intendo proprio quella caratteristica che ti permette di realizzare, o di saper valutare, dei design belli nel vero senso del termine.\n  Io sono una grande fan del minimalismo nella grafica.\n  Sono cresciuta a pane e pubblicità della Apple ed ho sempre ammirato come l’uso degli spazi bianchi riesca a comunicare meglio il messaggio piuttosto di uno sfondo pieno di disegni/foto con scritte grandi e coloratissime.\n Poi ovviamente la curiosità nel tenersi sempre aggiornat* sulle nuove tendenze o su temi che ancora non abbiamo approfondito, dopo tutto non si smette mai di imparare.\n Per ultimo, ma non per importanza, credo che l’empatia e il sapersi immedesimare nell’utente sia l’ingrediente che differenzia chi sa replicare design da chi li sa realizzare da zero.\n  Questo perché comprendere le necessità dell’utente, anche quando non sono delle specifiche richieste scritte, dovrebbe essere parte integrante di questo lavoro.\n  Ad esempio, un web designer non dovrebbe porsi la domanda “questo sito lo progetto accessibile oppure non mi importa?”, perché sappiamo bene che un sito accessibile è un sito migliore per tutti, sia per chi ha dei tipi di disabilità sia per chi non ne ha.\n La maggior parte di noi utilizza i social per parlare dei propri successi, ma la realtà è che siamo quel che siamo grazie al 90% dei nostri errori. Racconta il tuo più grande fallimento da quando lavori nel settore, che però ti ha reso ciò che sei.  Domanda tosta. Devo ammettere che il mio più grande fallimento è quello di star impiegando a finire la triennale di Informatica ben più di tre anni.\n Questo ritardo è dovuto alla mia testardaggine nel proseguire il percorso in un ambiente in cui non mi sentivo a mio agio e apprezzata. In questo percorso ho ottenuto comunque buoni risultati ma sentivo di voler scappare e per questo mi sono “rifugiata” nelle community.\n Infatti nel periodo più confuso della mia vita in cui pensavo che l’informatica non facesse più per me mi sono messa a fare la libraia\u0026hellip; però più mi allontanavo dal codice e più sentivo che mi mancava.\n Ora sono felice di dire che il mio percorso universitario è il triplo più lungo di chi si laurea nei giusti tempi ma è anche ricco il triplo, se non di più, di esperienze sia tecniche che personali.\n Come fare per diventare una Web Designer?  Spesso chi è web designer si forma tramite un percorso artistico, frequentando corsi in accademie di belle arti o laboratori ad hoc, per poi passare al codice.\n Io però nasco sviluppatrice con il pallino per il design, quindi una parte del mio tempo l’ho sempre dedicata a consultare siti di classifiche di design di siti web e blog sul tema mentre miglioravo dal punto di vista tecnico.\n Nel mio tempo libero provo a fare dei re-design di siti che conosco, magari anche solo di sezioni che non trovo belle o ordinate. Aiuta molto avere un portfolio online dove caricare tutto quello che si produce così da rendere pubblico il proprio percorso e il proprio stile personale.\n Quali sono i progetti di cui vai più orgogliosa?  Il progetto di creare una mia identità sui social l’ho iniziato, con timore, come sfida personale. Ha alti e bassi, ma devo dire che mi rende molto orgogliosa sapere che i miei contenuti sono utili e di aver creato una rete di persone che mi ha arricchito moltissimo.\n Non a caso noi due ci siamo conosciute grazie a questo progetto :)\n Sicuramente conosci il tema gender gap in ambito STEM. Come pensi si possa arrivare a buttarselo alle spalle?  In primis ci vorrebbe un impegno attivo da parte delle donne del settore così da dare delle role model che le bambine e le ragazze possono prendere come ispirazione.\n Poi si dovrebbe iniziare a ripensare all’educazione fin dalle prime fasi, infatti il problema del gender gap nell’ambito STEM è, secondo me, solo la punta dell’iceberg. Viviamo in una società in cui alle bambine si compra/regala bambole e carrozzine, mentre ai bambini macchinine e dinosauri.\n Il discorso è molto ampio e magari si può pensare che la singola persona, che sia uomo o donna o gender fluid, può farci ben poco, perché magari è il governo che se ne dovrebbe occupare oppure dovrebbero farlo le persone più influenti.\n Invece io penso che se ognun* di noi iniziasse a “contaminare” e spiegare che una donna, esattamente come un uomo, può diventare quello che vuole, che sia un’ingegnera, una dottoressa, una sviluppatrice oppure una scienziata, il problema del gender gap si estinguerebbe nell’arco di una o due generazioni.\n Link social Instagram: https://www.instagram.com/_dianacodes/ Linkedin: https://www.linkedin.com/in/dianabernabei/ Twitch: https://www.twitch.tv/dianacodes YouTube: https://www.youtube.com/channel/UC7isiq-qXsVTSQOMLviEC5A Sito web: https://www.dianabernabei.com/  Ti potrebbero piacere anche\u0026hellip; Voglio diventare una Social Media Manager; Voglio diventare un Senior Back-end Developer; Voglio diventare un Senior Software Developer; Voglio diventare una Big Data Analyst; Voglio diventare una Digital Transformation Consultant; Voglio diventare un Data \u0026amp; Software Engineer; Voglio diventare uno Startupper; Voglio diventare una Operations Manager; Voglio diventare una Inspiring Fifty. ", "url": "https:\/\/theredcode.it\/interviste\/voglio-diventare-una-web-designer\/" }, "https:\/\/theredcode.it\/tags\/django\/": { "title": "django", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/tags\/django\/" }, "https:\/\/theredcode.it\/docker\/docker-con-django-e-postgres\/": { "title": "Docker per Django e Postgres", "tags": ["django","docker","docker-compose","python",], "content": "Qualche giorno fa, attraverso un sondaggio sui social, è venuto fuori che Docker e Python visti tramite un approccio pratico sono due tematiche che stanno particolarmente a cuore. E allora perché non approfittarne?\n Partiamo con Docker in pratica: come rendere un\u0026rsquo;applicazione scritta in Django, uno dei più noti framework di Python per creare delle interfacce web, attraverso l\u0026rsquo;uso di container.\n E perché non farlo usando il sito web delle Django Girls Italia?\n _Via alla volta di Docker per Django e Postgres!\n Requisiti Python 3.x installato Django installato Docker installato  Step 1: progetto Django  In questo caso, andremo ad usare un caso d\u0026rsquo;uso molto semplice, fornito dal mitico gruppo delle Django Girls Italia (qui il link).\n Vediamo insieme i file principali dell\u0026rsquo;applicazione:\n La directory principale farà da contenitore per il progetto, ed è quella esterna di djangogirls; manage.py: si tratta di un file che consente di interagire con questo progetto Django in vari modi e di agire come se stessimo utilizzando django-admin; __init__.py: file vuoto che dice a Python che questa directory dovrebbe essere considerata un pacchetto; settings.py: file per la configurazione del progetto; urls.py: in questo file, andremo a specificare le URL che andremo ad esporre; si tratta di una sorta di \u0026ldquo;indice\u0026rdquo; del sito basato su Django.  Eseguendo il seguente comando, dovremmo ottenere nel terminale un risultato simile a quello che segue:\n \u0026gt; python manage.py runserver Performing system checks... System check identified no issues (0 silenced). You have unapplied migrations; your app may not work properly until they are applied. Run \u0026#39;python manage.py migrate\u0026#39; to apply them. November 23, 2021 - 15:50:53 Django version 3.2, using settings \u0026#39;mysite.settings\u0026#39; Starting development server at http://127.0.0.1:8000/ Quit the server with CONTROL-C.  In questo modo, hai avviato il server di sviluppo Django, estremamente leggero e scritto esclusivamente in Python (ovviamente!).\n Questo perché non vale la pena preoccuparsi in questa dase di utilizzare un server più potente o complesso, ma piuttosto demandiamo questo step a quando saremo pronti per la messa in produzione!\n Step 2: definizione del Dockerfile  Ricordiamo: un Dockerfile è un documento di testo che contiene tutti i comandi che un utente potrebbe chiamare sulla riga di comando per assemblare un\u0026rsquo;immagine; una sorta di ricetta per preparare la nostra applicazione.\n In questo caso, lo andremo a creare all\u0026rsquo;interno della cartella principale del progetto, come mostrato nella figura seguente:\n Struttura del progetto DjangoGirls con Docker per Django e Postgres\n Il Dockerfile conterrà quindi tutte le istruzioni per far sì che l\u0026rsquo;applicazione possa essere avviata tramite un container:\n FROM python:3 ENV PYTHONUNBUFFERED 1 WORKDIR /app COPY ./requirements.txt /app/requirements.txt RUN pip install -r requirements.txt \u0026amp;\u0026amp; pip install --upgrade pip COPY . . RUN chmod a+x run.sh CMD [\u0026#34;./run.sh\u0026#34;]   Come prima cosa, andiamo a definire l\u0026rsquo;immagine di base: in questo caso, tramite l\u0026rsquo;istruzione FROM, specifichiamo che l\u0026rsquo;immagine da utilizzare è quella che contiene Python in versione 3.x, basata normalmente sul sistema operativo Alpine (un sistema molto minimal derivato da Ubuntu).\n La seconda riga imposta una variabile d\u0026rsquo;ambiente che assicura che l\u0026rsquo;output di Python venga inviato direttamente al terminale senza prima memorizzarlo nel buffer; questo garantisce che nessun output venga conservato da qualche parte e mai scritto nel caso in cui l\u0026rsquo;applicazione Python si arresti in modo anomalo.\n Si tratta di una configurazione piuttosto comune quando si ha a che fare con applicazioni Django!\n La terza riga permette di configurare la cartella di lavoro all\u0026rsquo;interno del container su /app: questo vuol dire che il progetto Django verrà copiato e lavorato al suo interno, come mostrato nella riga successiva.\n La riga n. 4 che contiene l\u0026rsquo;istruzione COPY copia il file requirements.txt che contiene i moduli e le relative versioni delle dipendenze di Python da installare: in questo caso, c\u0026rsquo;è solo Django e molto altro, ma è possibile aggiungervi tutti i moduli necessari.\n L\u0026rsquo;istruzione RUN permette di installare i requisiti specificati nel file appena copiato e procediamo anche con l\u0026rsquo;aggiornamento di pip: non è necessario, ma tuttavia è consigliato farlo!\n Successivamente, copiamo il file chiamato run.sh: grazie a questo file, possiamo aggiungere tutte le operazioni preliminari che ci permetteranno di rendere funzionante il sito in un ambiente di sviluppo (maggiori informazioni sono contenute nel README.md del progetto!).\n Le ultime due righe ci permettono di aggiornare i permessi dello script in modo che sia eseguibile (a sta per modificare permesso di esecuzione a tutti gli utenti e gruppi) e poi procediamo con l\u0026rsquo;esecuzione dello script.\n Questo però non basta: il nostro progetto ha bisogno anche di un Postgres. E perché non sfruttare Docker Compose per tirare su entrambi i servizi?\n Step 3: configurazione docker-compose.yml  Al suo interno andremo a definire tutti i requisiti necessari per far sì che in prima battuta venga avviato il database, e poi venga tirato su il server per l\u0026rsquo;applicazione Django.\n Il file docker-compose.yml avrà quindi questo aspetto:\n version: \u0026#34;3.9\u0026#34; services: db: image: postgres volumes: - ./data/db:/var/lib/postgresql/data environment: POSTGRES_USER: postgres POSTGRES_DB: djangogirls POSTGRES_PASSWORD: postgres web: build: . command: python manage.py runserver 0.0.0.0:8000 volumes: - .:/app ports: - \u0026#34;8000:8000\u0026#34; environment: - POSTGRES_NAME=postgres - POSTGRES_USER=djangogirls - POSTGRES_PASS=postgres depends_on: - db  Definisco due servizi, uno per il database (chiamato db) e uno per la parte web (chiamato proprio web).\n Nella sezione relativa al database, vado a specificare come immagine di base l\u0026rsquo;ultima di Postgres disponibile nei registry di DockerHub e aggiungo anche le variabili di ambiente che mi permetteranno di creare il database.\n Come indicato infatti all\u0026rsquo;interno del README.md del progetto, sarà necessario creare un database chiamato djangogirls con l\u0026rsquo;utenza postgres/postgres: andiamo quindi ad indicare questi valori all\u0026rsquo;interno della proprietà environment.\n ... db: image: postgres volumes: - ./data/db:/var/lib/postgresql/data environment: POSTGRES_USER: postgres POSTGRES_DB: djangogirls POSTGRES_PASSWORD: postgres ...  Per quanto riguarda l\u0026rsquo;applicazione Django, abbiamo a disposizione un Dockerfile che ne farà la build come abbiamo visto allo step 2: sarà quindi sufficiente indicare la cartella attuale come istruzione per la build.\n ... web: build: . ...  Per far sì che la nostra applicazione, una volta modificata, sia persistente, utilizziamo la direttiva volumes in entrambi i servizi: nel primo caso, andrà a salvare le informazioni del database, mentre nel secondo caso userà il codice sorgente specificato sotto /app.\n ... db: image: postgres volumes: - ./data/db:/var/lib/postgresql/data ... web: build: . command: python manage.py runserver 0.0.0.0:8000 volumes: - .:/app ...  Nella sezione ports indichiamo la porta 8000 come quella su cui il container dev\u0026rsquo;essere in ascolto e infine specifichiamo il comando di avvio nella sezione command, così come riportato nel README.md: questo avvierà il server di Django.\n Questo ci permette di avviare il server che conterrà l\u0026rsquo;applicazione Django: normalmente, si usa django-admin.\n django-admin è infatti lo strumento che offre Django per le attività amministrative; il file manage.py viene creato automaticamente in ogni progetto Django e fa la stessa cosa di django-admin, ma imposta anche la variabile d\u0026rsquo;ambiente DJANGO_SETTINGS_MODULE in modo che punti al file settings.py del tuo progetto.\n Generalmente, quando si lavora su un singolo progetto Django, è più facile usare manage.py rispetto a django-admin. Se devi passare da un file di impostazioni Django a un altro, usa django-admin con DJANGO_SETTINGS_MODULE o l\u0026rsquo;opzione della riga di comando --settings.\n Ultimo, ma non ultimo, la clausola depends_on: questa fa sì che il servizio di Django non si avvii fintanto che il database non è in esecuzione. Piccola nota: questo non lo salverà da eventuali errori: se venisse avviato con dei problemi, la dipendenza sarà comunque soddisfatta!\n ... depends_on: - db ...  Step 4: run!  E dunque, via col mambo: digitiamo il seguente comando da terminale (che accorcia in un unico comando sia la fase di build che di run dei servizi) e apriamo il browser all\u0026rsquo;indirizzo localhost:8000 per poter vedere la homepage!\n $ docker-compose up --build  Pagina principale della community DjangoGirls\n  Ce l\u0026rsquo;hai fatta! Docker per Django e Postgres realizzato in un baleno :)\n  Disclaimer  Questo caso d\u0026rsquo;uso è perfetto per un ambiente di sviluppo, ma non per la messa in produzione. In quel caso, è fondamentale utilizzare un web server diverso da quello di default, come Nginx.\n Per farlo, è sufficiente (a grandi linee) modificare il comando di esecuzione nel docker-compose.yml per avviare l\u0026rsquo;applicazione sfruttando un webserver diverso e aggiungere ai servizi Nginx o qualsiasi web server che sia adatto al compito!\n Risorse utili Docker - Apogeo Podman e Docker Compose Esplorando il Dockerfile MEAN Docker: sviluppare una webapp da zero in meno di un\u0026rsquo;ora Dockerfile cheatsheet Docker in pillole Repository Link GitHub\n", "url": "https:\/\/theredcode.it\/docker\/docker-con-django-e-postgres\/" }, "https:\/\/theredcode.it\/tags\/docker-compose\/": { "title": "docker-compose", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/tags\/docker-compose\/" }, "https:\/\/theredcode.it\/interviste\/voglio-diventare-una-senior-digital-strategist\/": { "title": "Voglio diventare una… Senior Digital Strategist", "tags": ["interviste","voglio-diventare",], "content": "Senior Digital Strategist: ho e-incontrato Sara Tessarin qualche mese fa, dopo aver visto qualche post online sul progetto che lei e le sue colleghe stanno portando avanti; posso -finalmente- usare il femminile parlando di professioni, perché in effetti la maggior parte dello staff con cui lavora è femminile.\n In più, la professione di Sara è qualcosa che negli ultimi anni è diventata fondamentale, per qualsiasi tipo di business: come ci racconta lei stessa, è il risultato della combinazione di diverse caratteristiche, che la rendono cruciale per il successo di qualunque progetto.\n Non solo: grazie al suo lavoro, illimity (sarà lei a raccontare cos\u0026rsquo;è) sta portando avanti questa bellissima iniziativa chiamata illimitHER\u0026hellip; Senza perdere tempo, passiamo la parola a lei, e cogliamo l\u0026rsquo;occasione per far raccontare a lei cosa vuol dire \u0026ldquo;voglio diventare una Senior Digital Strategist\u0026rdquo;!\n Descriviti in 100 parole  Ciao, mi chiamo Sara e sono una Senior Digital Strategist.\n Cosa vuol dire? Da quasi 10 anni mi occupo di design strategy e di operational excellence per aziende digitali e innovative, da Vodafone a Yoox fino a illimity, la banca fondata e guidata da Corrado Passera.\n Mi sono appassionata al Design, alla User Experience e all’e-commerce durante i miei studi in Economia alla Bocconi di Milano e alla Copenaghen Business School e ho capito che era il percorso giusto per me.\n Nel tempo libero mi piace andare ai concerti, a teatro e fare muay thai.\n In cosa consiste il ruolo di Senior Digital Strategist?  All’interno del team di Design di illimity, mi occupo di gestire progetti cross funzionali tra Marketing, Prodotto, Comunicazione, Design e IT con l’obiettivo di trasformare ogni progetto dell’azienda in un racconto digitale che risponda sempre a 3 principi: chiarezza e consistenza nei contenuti e nella forma, testing e ottimizzazione della user experience e il giusto mix tra creatività, innovazione e fattibilità tecnica.\n  Il mio è un ruolo che impersonifica bene il detto “no man is an island”.\n  Sarebbe infatti impossibile creare innovazione senza il supporto delle mie colleghe e colleghi, da cui imparo ogni giorno. Il motto del team, infatti, è mettere sempre in discussione ogni step per migliorare l’esperienza utente e migliorarci come professionisti.\n Qual è la soft skill più importante che deve possedere una Senior Digital Strategist?  Senza dubbio l’empatia, dote imprescindibile per creare un linguaggio comune forte tra divisioni che parlano lingue diverse. Capire e capirsi è il primo step per individuare i gap e i bisogni da colmare e creare un piano di azione condiviso.\n La seconda soft skill, che condivido con tutti gli illimiters in azienda, è l’attitudine all’oltre: non ci fermiamo mai davanti agli ostacoli, ma con visione, determinazione e soprattutto collaborazione cerchiamo di andare sempre oltre i limiti del passato.\n  La maggior parte di noi utilizza i social per parlare dei propri successi, ma la realtà è che siamo quel che siamo grazie al 90% dei nostri errori. Racconta il tuo più grande fallimento da quando lavori nel settore, che però ti ha reso ciò che sei.  Non so se definirei gli errori di inesperienza dei veri e propri fallimenti. Tendo a vedere l’opportunità di crescita e di rilancio personale in ogni occasione mancata o errore di valutazione.\n Il mio approccio, in perfetto mindset da designer, è analizzare la situazione, definire delle action misurabili e portarle a termine. Se qualcosa non funziona, si ricomincia e si guadagna un’esperienza in più. L’importante è non aver paura dell’errore:\n  se non si cade mai, vuol dire che non si sta mirando abbastanza in alto!\n  Come fare per diventare una Senior Digital Strategist?  Sicuramente avere un background di design o particolarmente immerso nel mondo digital può aiutare; prepararsi in facoltà con corsi specializzati o restare sempre informati tramite corsi, libri, conferenze è anche un buon motore di ispirazione.\nCredo che la chiave di volta sia però saper fare le domande giuste (a volte tante, a volte scomode) e la voglia di andare alla radice del problema vivendolo sempre come opportunità di miglioramento. Essere disponibili all’ascolto attivo di ciò che ci circonda e capire quanto si può imparare dalle figure professionali che ci circondano.\n Parlando di successi, qual è il tuo prossimo obiettivo? Quale ruolo vorresti ricoprire entro i prossimi 3 anni?  Mi piace pensarmi sempre nel mondo del digital, magari con la possibilità di creare e crescere insieme ad un team di customer experience nella mia azienda.\n Conosci il tema gender gap in ambito STEM? Se sì, cosa puoi fare nel tuo piccolo per combattere questo problema?  È un tema sicuramente caldo e che ho percepito diverse volte nel corso della mia carriera. Spesso mi sono trovata ad essere l’unica ragazza al tavolo di discussione; questo non deve essere sempre percepito come un ostacolo, ma anzi vissuto con orgoglio, con la voglia di diventare esempio per altre ragazze.\n illimity è molto impegnata su questo tema, a partire dal team di design che è a maggioranza femminile. Basti pensare che il 42% dei dipendenti è donna e siamo tutte molto attive nelle iniziative di illimitHER.\n Per chi ancora non ci seguisse, illimitHER è il programma di Diversity \u0026amp; Inclusion di illimity per valorizzare il potenziale delle giovani donne.\n Nasce per diffondere la cultura delle STEM e rimuovere gli stereotipi culturali che allontanano le ragazze dai percorsi di studio nelle materie tecnico-scientifiche. L’idea è dare accesso a figure di ispirazione: donne che sono state capaci di andare oltre, rimodellando il futuro grazie al proprio percorso personale e professionale. Ma anche coinvolgere uomini che credono e sostengono l’uguaglianza di genere.\n Soprattutto, diamo voce alle giovani donne under 35, al fine di connetterle con le giovanissime pronte a entrare nel mondo dello studio e del lavoro. Per condividere skills digitali ed esperienze professionali da una prospettiva unica: la vicinanza generazionale.\n", "url": "https:\/\/theredcode.it\/interviste\/voglio-diventare-una-senior-digital-strategist\/" }, "https:\/\/theredcode.it\/voglio-diventare-una...-inspiring-fifty\/": { "title": "Voglio diventare una... Inspiring Fifty", "tags": ["interviste","voglio-diventare",], "content": "Anna Gregorio è una di quelle donne che puoi solo ammirare: ha una forza inarrestabile, e non a caso ha fatto una carriera strabiliante, guadagnandosi un posto tra le migliori 100 donne italiane secondo Forbes\u0026hellip; Ma non è tutto qui, anzi: questo è solo l\u0026rsquo;inizio: vediamo quindi come diventare una Inspiring Fifty e, soprattutto, come portare una quota rosa nell\u0026rsquo;innovazione!\n Descriviti in 100 parole.  Mi dicono che già da bambina ero una piccola scienziata. Credo sia vero ma oggi sono anche un’imprenditrice e preferisco usare un termine legato all’innovazione per contribuire a creare un mondo come lo sogno io.\n Sono una persona normale, con un pizzico di pazzia e tanta passione. Ma se essere un’innovatrice vuol dire essere curiosa, cercare di capire le situazioni per il piacere di scoprire il mondo attorno a noi, di plasmarlo proponendo nuove tecnologie (per lo Spazio) che permettano di aiutare il progresso e condividerle con la società per migliorarla, allora sì, il mio sogno è proprio essere un’innovatrice.\n CEO, coordinator instrument operation team di Euclid (missione spaziale della ESA), membro del Comitato Scientifico del Collegio Fonda e professoressa associata all’Università di Trieste. Giornata piena, immagino! Com’è stato il tuo percorso professionale?  Giornate sempre pienissime, non c’è certo tempo per annoiarsi! Ho avuto un grande maestro, il mio papà scientifico mi ha trasmesso la sua passione e dedizione al lavoro ma mi ha anche insegnato a non trascurare la vita personale.\n Poi tutto è successo molto naturalmente, dopo la Laurea a Trieste, mia città natale, prima il dottorato a Pisa (Scuola Normale) e in parallelo la ricerca al CERN (Ginevra), poi il rientro a Trieste. Questo forse il momento più difficile perché improvvisamente risultavo un’esterna e non è stato facile farsi accettare. Ho voluto cambiare settore, da fisica delle particelle ad astrofisica, ma la fortuna aiuta gli audaci… ed eccoci qui.\n Comunque sempre al massimo sul lavoro e fuori, lo sport è la mia seconda vita che da sempre condivido con mio marito, il mio primo ragazzo, il mio miglior amico e fidato consigliere. Lo sport mi ha aiutato ad avere fiducia nelle mie capacità e a gestire successi e fallimenti, a ripartire dopo gli infortuni, a confrontarmi con gli altri, uomini e donne. La vela, lo sci e la corsa, sempre con me.\n E sempre con la valigia in mano, stranissimo essere a casa in questo periodo…\n Qual è la soft skill che più ti è stata di aiuto nella tua carriera?  Al primo posto metterei la tenacia ma subito dopo la capacità di mediare le situazioni e di mantenere un sorriso anche nelle condizioni più difficili.\nCredo che la combinazione di queste caratteristiche sia prettamente femminile, e in tutto quello che faccio c’è sempre un tocco di femminilità.\n Conosci il tema gender gap in ambito STEM? Se sì, cosa puoi fare/cosa fai nel tuo piccolo per combattere questo problema?  Quanto pagine ho per scrivere? In questo periodo in cui sono personalmente in evidenza in molte occasioni, mi sono spessa fatta portavoce di queste problematiche. Non ultimo ho partecipato a uno spettacolo teatrale, “Le Eccellenti”, ne sono molto orgogliosa ma fa male…\n PICOSATS è nata anche per questi motivi. Dal 2008 al 2013 ho gestito lo strumento scientifico “LFI” a bordo di Planck, una missione scientifica di grande successo della European Space Agency (il mio ruolo attuale in Euclid riflette direttamente quanto fatto a quel tempo).\n Da sportiva, la definisco la mia scalata dell’Everest ma questa mia prestazione non è evidentemente stata considerata rilevante nella valutazione delle mie attività scientifiche, anzi. Dopo questa grande delusione ho deciso di mettermi in gioco in un altro settore. L’ho fatto per creare qualcosa di positivo, di utile per la nostra società, per i/le giovani, ma anche per dimostrare cosa una donna (ferita) può fare.\n Non aggiungo altro perché credo che i fatti rispondano chiaramente.\n Se avessi modo di parlare con la Anna 15enne, cosa le diresti? Cosa voleva fare Anna da grande?  Anna è nata scienziata, iperattiva e testarda, con tanta passione e credo di poter dire generosa e attenta ai sentimenti altrui. Ho sempre creduto che se una persona VUOLE raggiungere un suo sogno, lo può fare. Per cui le direi semplicemente “Credi in te stessa, è la miglior cosa che puoi fare.”\n Le darei però un ulteriore suggerimento: guardati ogni tanto alle tue spalle, ahimè onestà ed etica sono virtù non sempre scontate.\n La maggior parte di noi utilizza i social per parlare dei propri successi, ma la realtà è che siamo quel che siamo grazie al 90% dei nostri errori. Racconta il tuo più grande fallimento da quando lavori nel settore.  Sono molto d’accordo, si impara soprattutto dai fallimenti. Di errori ne ho fatti molti ma come dico spesso, gli errori sono di chi “fa”, sulla poltrona non si fanno errori.\n Il mio più grande fallimento però non è scientifico o tecnico ma umano. Ho creduto nelle persone sbagliate e ingenuamente mi sono fidata di loro.\n Parlando infine di successi, sei stata nominata lo scorso anno da Forbes tra le donne italiane più influenti, quest’anno sei tra le Inspiring Fifty. Qual è il tuo prossimo obiettivo?  Il mio obiettivo è più pratico. La cosiddetta “New Space Economy” promette tempi di sviluppo e di crescita estremi. PICOSATS deve crescere, lo sta già facendo, ma voglio che cresca in maniera “sana”, le persone devono condividere i nostri valori, l’etica in primis.\n E poi ovviamente dal punto di vista scientifico il mio obiettivo è di gestire al meglio gli strumenti di Euclid, una missione spaziale estremamente complessa.\n Sul lungo termine, aggiungo un obiettivo che spero di raggiungere prima o poi ma che continuo a rimandare: “dedicarmi a me stessa”.\n Risorse utili: Anna Gregorio: Donne nella scienza Inspiring Fifty: Anna Gregorio Forbes: Picosats, la startup innovativa che punta a lasciare il segno nel cosmo  Ti potrebbero piacere anche\u0026hellip; Voglio diventare una Social Media Manager; Voglio diventare un Senior Back-end Developer; Voglio diventare un Senior Software Developer; Voglio diventare una Big Data Analyst; Voglio diventare una Digital Transformation Consultant; Voglio diventare un Data \u0026amp; Software Engineer; Voglio diventare uno Startupper; Voglio diventare una Operations Manager. ", "url": "https:\/\/theredcode.it\/voglio-diventare-una...-inspiring-fifty\/" }, "https:\/\/theredcode.it\/how-to\/come-si-misura-l-intelligenza-artificiale\/": { "title": "Come si misura l\u0027intelligenza (artificiale)", "tags": ["intelligenza-artificiale",], "content": "Spesso, quando si parla di intelligenza artificiale, oppure quando si lavora utilizzando tecniche di machine learning, ci si chiede come si faccia a stimare la bontà di una soluzione: quando posso veramente dirmi soddisfatta del risultato? Quando un sistema è in grado di essere classificato come intelligente?\n Anche gli stessi esseri umani spesso confondono le capacità mnemoniche con l\u0026rsquo;intelligenza: ricordare le poesie a memoria oppure sapere come risolvere un\u0026rsquo;equazione differenziale in meno di un minuto, non sono sinonimo di intelligenza.\n O meglio: l\u0026rsquo;intelligenza non si riduce a questo, ed è il motivo per cui con questi esempi, scambiare un sistema -o un computer- per intelligente può essere molto facile.\n La realtà è ben diversa: vediamo quindi come si misura l\u0026rsquo;intelligenza artificiale in questo articolo, analizzando alcuni degli aspetti che ci permettono di stimarne le reali capacità.\n Intro  Nel 2016, Lee Se-dol, il campione sudcoreano di Go che ha perso in uno storico match contro l\u0026rsquo;algoritmo di intelligenza artificiale AlphaGo di DeepMind, dichiarando il suo ritiro dal gioco professionale.\n Quello stesso giorno ha commentato dicendo \u0026ldquo;con il debutto dell\u0026rsquo;IA nei giochi Go, mi sono reso conto di non essere al top anche se divento il numero uno attraverso sforzi frenetici\u0026rdquo;, ha detto Lee all\u0026rsquo;agenzia di stampa Yonhap. \u0026quot; Anche se divento il numero uno, c\u0026rsquo;è un avversario che non può essere sconfitto.\u0026quot;\n Com\u0026rsquo;era prevedibile, i commenti di Se-dol hanno fatto rapidamente il giro di importanti pubblicazioni tecnologiche, alcune delle quali utilizzando titoli sensazionali riportando presunti spunti sul tema della dominanza dell\u0026rsquo;IA.\nSin dagli albori dell\u0026rsquo;IA, i giochi sono stati uno dei principali fattori di valutazione che permetesse la stima dell\u0026rsquo;efficienza degli algoritmi, e grazie ai progressi nel mondo del deep learning e dell\u0026rsquo;apprendimento per rinforzo, i ricercatori di intelligenza artificiale stanno creando programmi in grado di padroneggiare giochi molto complicati e battere i giocatori più esperti in tutto il mondo.\n Purtroppo, molti giornalisti e analisti disinformati hanno raccolto questi successi per suggerire che l\u0026rsquo;IA stia diventando più intelligente degli esseri umani, rischiando a breve di ritrovarci dominati da questa entità superiore.\nAllo stesso tempo, l\u0026rsquo;IA contemporanea fallisce miseramente in alcune delle attività più basilari che ogni essere umano può eseguire, come possono essere scegliere un tragitto che non sia passare su delle strade dissestate in mezzo alle campagne pur di farci risparmiare 2 minuti e 300 metri sul percorso verso la destinazione selezionata.\nQuesto fa sorgere la domanda: padroneggiare un gioco prova qualcosa? E se no, come si può misurare il livello di intelligenza di un sistema AI?\nPrendi il seguente esempio. Nell\u0026rsquo;immagine qui sotto, ti vengono presentati cinque problemi e la loro soluzione. C\u0026rsquo;è anche un sesto compito che non è stato risolto. Riuscite a indovinare la soluzione?\n Puzzle logico\nProbabilmente penserai che è molto facile (o molto difficile, dipende!) e sarai anche in grado di risolvere diverse varianti dello stesso problema con più combinazioni e diverse forme o colori, semplicemente vedendo questi esempi.\n Al momento, però, non esiste un sistema di intelligenza artificiale, compresi quelli sviluppati nei laboratori di ricerca più prestigiosi, che possa imparare a risolvere un problema del genere con così pochi esempi.\n L\u0026rsquo;esempio sopra è molto simile ad alcuni presenti nell\u0026rsquo;articolo \u0026quot; The Measure of Intelligence \u0026ldquo;, scritto da François Chollet, il creatore della libreria di deep learning di Keras. Chollet ha pubblicato questo articolo poche settimane prima che Le-sedol dichiarasse il suo ritiro, parlando proprio di come definire molte linee guida importanti sulla comprensione e la misurazione dell\u0026rsquo;intelligenza.\n Per questo, analizziamo alcuni degli aspetti di questo articolo, per vedere in che modo è possibile analizzare e stimare le reali capacità dell\u0026rsquo;IA.\n Cosa c\u0026rsquo;è di sbagliato nell\u0026rsquo;attuale IA?  \u0026ldquo;La comunità dell\u0026rsquo;IA contemporanea gravita ancora verso il benchmarking dell\u0026rsquo;intelligenza confrontando l\u0026rsquo;abilità esibita da sistemi di IA e esseri umani in compiti specifici, come giochi da tavolo e videogiochi\u0026rdquo;, scrive Chollet, aggiungendo che misurare solo le abilità in un dato compito non è sufficiente misurare l\u0026rsquo;intelligenza.\n Pensare che l\u0026rsquo;intelligenza sia sinonimo di capacità logiche o matematiche è totalmente erroneo: esistono diverse teorie, tra cui quella elaborata da Gardner, che parla proprio di diverse tipologie di intelligenza. Con il presupposto originale, invece, il lavoro nell\u0026rsquo;IA si è allontanato dalla visione originale di sviluppare \u0026ldquo;macchine pensanti\u0026rdquo; che possiedono un\u0026rsquo;intelligenza paragonabile a quella degli umani.\n “Anche se siamo in grado di progettare sistemi che si comportano estremamente bene su compiti specifici, ci sono ancora forti limiti, essendo fragili, affamati di dati, incapaci di dare un senso a situazioni che si discostano leggermente dai loro dati di addestramento o dalle ipotesi dei loro creatori, e incapaci di riutilizzare sé stessi per affrontare nuovi compiti senza un coinvolgimento significativo da parte dei ricercatori umani\u0026rdquo;, osserva Chollet nel documento.\n Le osservazioni di Chollet sono in linea con quelle fatte da altri scienziati sui limiti e le sfide dei sistemi di apprendimento profondo . Queste limitazioni si manifestano in molti modi:\n Modelli di intelligenza artificiale che necessitano di milioni di esempi per eseguire le attività più semplici; Sistemi di intelligenza artificiale che falliscono non appena si trovano davanti a casi limite, situazioni che esulano dai loro esempi di addestramento; Reti neurali che sono inclini a esempi contraddittori o piccole perturbazioni nei dati di input che fanno sì che l\u0026rsquo;IA si comporti in modo irregolare.  Ecco un esempio: le reti neurali che giocano a Dota di OpenAI hanno avuto bisogno dell\u0026rsquo;equivalente di 45.000 anni di gioco per raggiungere un livello professionale; infatti, l\u0026rsquo;IA è anche limitata nel numero di personaggi che può giocare e la minima modifica alle regole del gioco si tradurrà in un improvviso calo delle sue prestazioni.\n Lo stesso si può vedere in altri campi, come nel celebre caso delle auto a guida autonoma. Nonostante milioni di ore di esperienza su strada, gli algoritmi di intelligenza artificiale che alimentano i veicoli autonomi possono commettere errori stupidi, come schiantarsi contro i guardrail o i camion dei pompieri parcheggiati.\n Cos\u0026rsquo;è l\u0026rsquo;intelligenza  Una delle sfide chiave con cui la comunità dell\u0026rsquo;IA ha dovuto lottare è definire l\u0026rsquo;intelligenza. Gli scienziati hanno discusso per decenni sulla possibilità di fornire una definizione chiara che ci permetta di valutare i sistemi di intelligenza artificiale e determinare cosa sia intelligente o meno.\n Chollet prende in prestito la definizione del cofondatore di DeepMind Shane Legg e dello scienziato di intelligenza artificiale Marcus Hutter: \u0026ldquo;L\u0026rsquo;intelligenza misura la capacità di un agente di raggiungere obiettivi in un\u0026rsquo;ampia gamma di ambienti\u0026rdquo;.\n La chiave qui è \u0026ldquo;raggiungere obiettivi\u0026rdquo; e \u0026ldquo;ampia gamma di ambienti\u0026rdquo;: la maggior parte degli attuali sistemi di intelligenza artificiale è piuttosto adatta nella prima parte, che consiste nel raggiungere obiettivi molto specifici, ma non riesce a farlo in una vasta gamma di ambienti.\n Ad esempio, un sistema di intelligenza artificiale in grado di rilevare e classificare gli oggetti nelle immagini sarà bravissimo nel distinguere una persona da un gatto, ma non sarà in grado di eseguire altre attività correlate, come disegnare un cane o un gatto.\n Per spiegare questo concetto, Chollet esamina quindi i due approcci dominanti nella creazione di sistemi di intelligenza: AI simbolica e apprendimento automatico.\n AI simbolica vs machine learning  Le prime generazioni di ricerca sull\u0026rsquo;intelligenza artificiale si sono concentrate sull\u0026rsquo;intelligenza artificiale simbolica, che prevede la creazione di una r_appresentazione esplicita della conoscenza_ e del comportamento nei programmi per computer. Questo approccio richiede agli ingegneri umani di scrivere meticolosamente le regole che definiscono il comportamento di un agente AI.\n Il problema era che all\u0026rsquo;epoca si pensava fosse possibile descrivere e definire le abilità umane in regole formali dominate dalla logica, costruendo una sorta di conoscenza umana tramite delle apposite banche dati.\n Ma, piuttosto che essere intelligenti di per sé, questi sistemi simbolici di intelligenza artificiale manifestano l\u0026rsquo;intelligenza dei loro creatori nell\u0026rsquo;utilizzo di programmi -spesso- complicati in grado di risolvere compiti specifici.\n Il secondo approccio, ossia i sistemi basati sull\u0026rsquo;apprendimento automatico , si basa sul fornire al modello i dati del problema per far sì e lasciarlo sviluppare il proprio comportamento. La struttura di apprendimento automatico di maggior successo finora sono le reti neurali artificiali, che sono funzioni matematiche abbastanza complesse in grado di individuare dei modelli tra input e output.\n Ad esempio, invece di codificare manualmente le regole per rilevare il cancro nelle risonanze, si può utilizzare una rete neurale con molte risonanze fornite in input e -eventualmente- annotate con i relativi risultati, un processo chiamato \u0026ldquo;addestramento\u0026rdquo;.\n In questo caso, il cervello costituito dalla rete neurale, esamina i dati e sviluppa un modello matematico che rappresenta i tratti comuni dei modelli di cancro. Può quindi elaborare nuove radiografie e visualizzare la probabilità che i pazienti abbiano il cancro (disclaimer: si tratta di un\u0026rsquo;estrema semplificazione di un caso d\u0026rsquo;uso, la realizzazione è più complessa!).\nI progressi nelle reti neurali e nell\u0026rsquo;apprendimento profondo hanno consentito agli scienziati di intelligenza artificiale di affrontare molti compiti che in precedenza erano molto difficili o impossibili con l\u0026rsquo;IA \u0026ldquo;tradizionale\u0026rdquo;, come attività di elaborazione del linguaggio naturale, la visione artificiale e il riconoscimento di immagini.\n In questo senso, Chollet rifiuta entrambi gli approcci raccontati finora, perché nessuno di loro è stato finora in grado di creare un\u0026rsquo;IA generalizzata flessibile e fluida come la mente umana.\n “Vediamo il mondo attraverso la lente degli strumenti con cui abbiamo più familiarità. Oggi, è sempre più evidente che entrambe queste visioni della natura dell\u0026rsquo;intelligenza umana, che si tratti di una raccolta di programmi basati su una conoscenza di base o di una Tabula Rasa generica, sono probabilmente errate\u0026quot;, scrive.\n I sistemi veramente intelligenti dovrebbero essere in grado di sviluppare competenze di livello superiore che possono estendersi a molte attività. Sfortunatamente, il meglio che gli attuali sistemi di intelligenza artificiale ottengono è la \u0026ldquo;generalizzazione locale\u0026rdquo;, una stanza di manovra limitata all\u0026rsquo;interno del loro ristretto dominio.\n Generalizzazione  Nel suo articolo, Chollet sostiene che la \u0026ldquo;generalizzazione\u0026rdquo; o il \u0026ldquo;potere di generalizzazione\u0026rdquo; per qualsiasi sistema di intelligenza artificiale è la sua \u0026ldquo;capacità di gestire situazioni (o compiti) che differiscono dalle situazioni incontrate in precedenza\u0026rdquo;.\nÈ interessante notare che questo è un componente mancante dell\u0026rsquo;intelligenza artificiale sia simbolica che connessionista. Il primo richiede agli ingegneri di definire esplicitamente il suo confine comportamentale (fin dove sono in grado di arrivare? Quali sono i problemi che non posso risolvere con il mio sistema?) e il secondo richiede esempi che delineano il suo dominio di risoluzione dei problemi.\nChollet va anche oltre e parla di \u0026ldquo;generalizzazione consapevole dello sviluppatore\u0026rdquo;, che è la capacità di un sistema di intelligenza artificiale di gestire situazioni che \u0026ldquo;né il sistema né lo sviluppatore del sistema hanno incontrato prima\u0026rdquo;.\nQuesto è il tipo di flessibilità che ti aspetteresti da un maggiordomo-robot che potrebbe svolgere varie faccende all\u0026rsquo;interno di una casa senza avere istruzioni esplicite o dati di formazione su di esse. Un esempio è il famoso test del caffè di Steve Wozniak, in cui un robot entrava in una casa mai vista prima e preparava il caffè senza conoscere in anticipo la disposizione della casa o gli elettrodomestici in essa contenuti.\n Sembra un qualcosa relativamente banale per un essere umano, no? Per un sistema, è qualcosa di impossibile.\nAltrove nel documento, Chollet chiarisce che i sistemi di intelligenza artificiale che riescono nel loro obiettivo sfruttando l\u0026rsquo;esperienza acquisita in precedenza (tramite regole) e una base dati non sono intelligenti.\n Un esempio basato sulla rete neurale è AlphaZero , l\u0026rsquo;IA multiuso che è in grado di portare avanti una partita in diversi giochi da tavolo sfruttando milioni di partite per comprendere il gioco e come vincere.\nQuesto approccio funziona però facendo uso di risorse che vanno oltre le capacità della mente umana: l\u0026rsquo;essere umano più brillante non può memorizzare decine di migliaia di regole degli scacchi. Allo stesso modo, nessun essere umano può giocare milioni di partite a scacchi in una vita.\n\u0026ldquo;Risolvere qualsiasi compito con prestazioni al di là del livello umano sfruttando precedenti illimitati o dati illimitati non ci avvicina all\u0026rsquo;IA ampia o all\u0026rsquo;IA generale, indipendentemente dal fatto che il compito sia scacchi, calcio o qualsiasi e-sport\u0026rdquo;, osserva Chollet.\nQuesto è il motivo per cui è totalmente sbagliato confrontare Deep Blue, Alpha Zero, AlphaStar o qualsiasi altra IA di gioco con l\u0026rsquo;intelligenza umana.\n Come misurare l\u0026rsquo;intelligenza  Nel suo articolo, Chollet presenta l\u0026rsquo;Abstraction Reasoning Corpus (ARC), un dataset destinato a valutare l\u0026rsquo;efficienza dei sistemi di intelligenza artificiale e confrontare le loro prestazioni con quelle dell\u0026rsquo;intelligenza umana. ARC è un insieme di problemi da risolvere su misura sia per l\u0026rsquo;intelligenza artificiale che per gli esseri umani.\nUna delle idee chiave alla base di ARC è livellare il terreno di gioco tra umani e sistemi di intelligenza artificiale per fornire un terreno dove entrambi gli attori siano sullo stesso piano: è infatti progettato in modo che gli umani non possano sfruttare la loro vasta conoscenza di base del mondo per superare in astuzia l\u0026rsquo;intelligenza artificiale.\n Ad esempio, non comporta problemi relativi alla lingua, con i quali i sistemi di intelligenza artificiale hanno storicamente lottato; d\u0026rsquo;altra parte, è anche progettato in modo da impedire all\u0026rsquo;IA (e ai suoi sviluppatori) di barare e sfruttare l\u0026rsquo;accesso a grandi quantità di dati o modelli da cui attingere le informazioni necessarie.\n In questo caso, gli sviluppatori di sistemi dotati di IA devono costruire qualcosa in grado di gestire vari concetti come la coerenza di un oggetto, la persistenza dell\u0026rsquo;oggetto e delle azioni sull\u0026rsquo;oggetto, imparando a eseguire attività come cambiarne le dimensioni, disegnare qualcosa di simile, ruotarlo o colorarlo, riempiendo gli spazi.\n Esempio di attività da risolvere tramite l\u0026rsquo;ARC\nInoltre, il set di dati di test, i problemi che hanno lo scopo di valutare l\u0026rsquo;intelligenza del sistema sviluppato, sono progettati in modo tale da impedire agli sviluppatori di risolvere i compiti in anticipo e di codificare la loro soluzione nel programma.\nSecondo Chollet, \u0026ldquo;ARC valuta solo una forma generale di intelligenza fluida, con particolare attenzione al ragionamento e all\u0026rsquo;astrazione\u0026rdquo;. Ciò significa che il test favorisce la \u0026ldquo;sintesi del programma\u0026rdquo;, il sottocampo dell\u0026rsquo;intelligenza artificiale che implica la generazione di programmi che soddisfano le specifiche di alto livello.\n Esempio di task da risolvere: colorare tutti gli spazi interni alla figura di giallo\n Questo approccio è in contrasto con le tendenze attuali nell\u0026rsquo;IA, che sono inclini a creare programmi ottimizzati per un insieme limitato di attività, come ad esempio, saper vincere una partita ad un determinato gioco.\n Conclusioni  Nei suoi esperimenti con ARC, Chollet ha scoperto che gli esseri umani possono risolvere completamente i test ARC, mentre sembra che ARC sia fuori dalla portata degli attuali sistemi di intelligenza artificiale, che anche utilizzando eventualmente tecniche di Deep Learning, tendono a generalizzare un\u0026rsquo;attività che non è possibile astrarre completamente.\n Attualmente è infatti aperta (ancora per poco) una competizione su Kaggle, con in palio 20.000 dollari (divisi per i diversi livelli del podio): molti team hanno partecipato con entusiasmo alla challenge, ottenendo tra i punteggi massimi la risoluzione del 20% del dataset proposto; c\u0026rsquo;è da dire che Chollet non pensava di arrivare a questa soglia.\n Messaggio di Chollet che ringrazia i partecipanti alla challenge\n Sebbene l\u0026rsquo;ARC sia un lavoro in corso, può diventare un punto di riferimento promettente per testare il livello di progresso verso l\u0026rsquo;IA a livello umano.\n \u0026ldquo;Ipotizziamo che l\u0026rsquo;esistenza di un sistema in grado di risolvere le attività proposte all\u0026rsquo;interno dell\u0026rsquo;ARC: questo rappresenterebbe la capacità di programmare un\u0026rsquo;intelligenza artificiale tramite dei singoli esempi su attività completamente diverse per svolgere una vasta gamma di attività, cosa che normalmente richiederebbe un\u0026rsquo;intelligenza fluida, simile a quella umana\u0026rdquo;, osserva Chollet.\n Considerato il tipo di competenze necessarie per la risoluzione di queste problematiche e i risultati ottenuti finora, possiamo convenire che la tecnologia ha fatto dei passi da gigante e che i sistemi di intelligenza artificiale hanno imparato a risolvere dei compiti piuttosto difficili.\n Chiederci però come si misura l\u0026rsquo;intelligenza artificiale è però una domanda difficile a cui rispondere, perché significa tenere in conto di tutte le capacità umane che maturiamo con l\u0026rsquo;esperienza, circondati continuamente da stimoli che coinvolgono lo spazio, riferimenti temporali, 5 diversi sensi e via dicendo\u0026hellip;\n Ergo, tranquill*: nessun sistema di intelligenza artificiale potrà (al momento) prendere il posto di un essere umano quanto a intelligenza!\n", "url": "https:\/\/theredcode.it\/how-to\/come-si-misura-l-intelligenza-artificiale\/" }, "https:\/\/theredcode.it\/interviste\/voglio-diventare-una-operations-manager\/": { "title": "Voglio diventare una... Operations Manager", "tags": ["interviste","voglio-diventare",], "content": "Oggi è il turno di una ragazza brillante, diretta e fortissima: raccontare la propria storia e la propria vita senza filtri non è affatto semplice, ma lei non se ne preoccupa.\n Ogni giorno racconta un episodio della sua vita \u0026ldquo;passata\u0026rdquo; e di quelle presente, condividendo in maniera trasparente successi e fallimenti nel suo lavoro, giornate belle e quelle meno brutte; parla della sua famiglia, del suo lavoro e della sua amata India.\n Senza ulteriori indugi, passiamo la parola a Parminder Kaur per raccontarci cosa vuol dire essere una Operations Manager!\n Descriviti in 100 parole  Sono Parminder Kaur e sono Operations Manager di VoipVoice.\n Sono indiana di nascita e italiana di adozione, vivo in Italia da 21 anni. Amo l’arte, i gialli e viaggiare. Vivo nei pressi di Firenze, quindi in una delle regioni più belle di Italia a mio parere!\n Da piccola sognavo di diventare astronauta, ma la vita riserva sempre qualcosa di differente per noi.\n Dopo la fine degli studi scolastici sono entrata nel mondo del lavoro -e per caso- e ora posso dire che con mia grande fortuna ho iniziato un corso tramite il quale mi sono imbattuta in VoipVoice.\n Non avrei mai pensato di fare quello che faccio oggi, cioè la Operations Manager di VoipVoice.\n Lavoro in questa azienda da circa 11 anni: si tratta di una compagnia di telecomunicazioni che attiva servizi di fonia Voip e connettività su tutto il territorio italiano.\n In cosa consiste il ruolo di Operations Manager?  È un ruolo abbastanza complesso, ma nello specifico una Operations Manager gestisce tutti i processi aziendali, che vanno dalla gestione di un Lead alla gestione delle richieste post fatturazione, ma il mio lavoro è fatto anche di mail così come di riunioni.\n  Ogni attività che c’è in azienda deve essere fluida, snella e chiara nella sua modalità di gestione a tutti.\n  Inoltre, il lavoro dell’Operations Manager è quello che migliorare, ottimizzare e adattare ogni processo in base ai vari cambiamenti che ci possono essere all’interno dell’azienda.\n Non solo: deve integrare anche le novità nel migliore dei modi per creare sempre la linearità tra vari reparti e mansioni.\n Dunque si tratta di un lavoro circolare che non finisce mai, in quanto ci sono sempre delle variazioni o aggiornamenti.\n Al momento, nel mio caso, è un lavoro solitario, ma necessito sempre dei confronti con tutte le persone che operano su campo per trovare la soluzione che si adatta a tutti.\n Qual è la soft skill più importante che deve possedere una Operations Manager?  Sicuramente Problem Solving perché le richieste da gestire hanno sempre delle criticità che devono essere viste da tutti i punti di vista.\n Bisogna in questi casi indossare i famosi 6 capelli di De Bono perché non basta vedere l’aspetto positivo della situazione.\n Però penso che oltre a questo aspetto oggettivo ci sono altre due soft skill necessarie nel mio lavoro: Ascolto ed Empatia.\n  Ascoltare attentamente e capire l’esigenza delle persone che si interfacciano con noi per creare insieme processi è una degli aspetti che vanno curati maggiormente.\n  Ci possono essere varie versioni di varie questioni, ma tramite l’ascolto bisogna sapere cogliere l’essenza della situazione.\n La maggior parte di noi utilizza i social per parlare dei propri successi, ma la realtà è che siamo quel che siamo grazie al 90% dei nostri errori. Racconta il tuo più grande fallimento da quando lavori nel settore, che però ti ha reso ciò che sei.  Una dei miei punti deboli è sempre stata la precisione, sulla quale cerco di lavorarci sempre.\n Inizialmente facevo tutto insieme ad altre colleghe in azienda perché eravamo in pochi. Ho provato a fare varie volte i processi di fatturazione ma spesso ho sbagliato degli step e sono ripartita da 0, allungando così i giorni di fatturazione.\n Alla fine, fu deciso, giustamente, di farmi gestire l’assistenza tecnica in quanto avevo forte propensione alla Customer Care e dunque da questo fallimento arrivai verso il percorso che mi aiutò a trovare la mia strada.\n  Nel fallimento ho trovato il mio posto e non ritornerei indietro.\n  Sulla precisione ci lavoro tuttora e cerco di batterci la testa sempre!\n Come fare per diventare una Operations Manager?  Personalmente per me è stato un percorso molto differente da un percorso specifico per qualsiasi Operations Manager. Ho gestito un po\u0026rsquo; tutto quello che sono le attività dell’azienda, specializzandomi nella parte del problem solving.\n In ogni caso, è frutto di esperienza e conoscenza a fondo della propria azienda e settore alla quale si aggiungono gli studi sulla gestione lean. La gestione lean riprende un continuo miglioramento delle attività togliendo gli sprechi e aggiungendo valore ad ogni processo.\n Le competenze principali sono quelle di organizzazione e ottimizzazioni processi con una spiccata leadership nella gestione delle squadre. Anche la capacità di gestire lo stress e collocazione del personale al posto giusto collaborando così con l’HR dell’azienda.\n Alla fine**, formazione formazione formazione** e tanta formazione perché in qualsiasi ruolo non si smette mai di imparare!\n Parlando di successi, qual è il tuo prossimo obiettivo? Quale ruolo vorresti ricoprire entro i prossimi 3 anni?  Al momento vorrei migliorare le mie competenze nella gestione dei processi che ho finalmente iniziato a fare da luglio di quest’anno. Dunque, mi sto dedicando all’80% ai processi che, come ho scritto sopra, hanno bisogno di un continuo monitoraggio.\n  Cambiano troppo in fretta le cose nel settore delle TLC.\n  Allo stesso tempo mi piacerebbe poi evolvere questo mio ruolo in Project Manager, lavoro che adoro moltissimo.\n Conosci il tema gender gap in ambito STEM? Se sì, hai mai avuto qualche esperienza negativa? Cosa pensi sia possibile fare nel tuo piccolo per combattere questo problema?  Assolutamente si! Il settore delle telecomunicazioni è un settore fortemente costituito dagli uomini ed è difficile trovare donne tecniche. È sempre un piacere vedere ogni tanto un partner donna e vedere che qualcosa sta cambiando.\n Personalmente, quando ho lavorato all’assistenza tecnica e ho gestito le chiamate, a parte il nome straniero, era difficile far arrivare dall’altra parte il messaggio che potevo gestire io e risolvere la questione postami anche se era una questione tecnica.\n Non è stato facile ma negli anni poi quei partner mi hanno dato fiducia e mi hanno aiutata anche a crescere le mie competenze quando io cercavo di risolvere le loro questione tecniche.\n Mi piacerebbe moltissimo che nel settore delle telecomunicazioni ci fosse meno il divario tra sessi e più inclusione femminile come stiamo facendo nella nostra azienda.\n In VoipVoice stiamo cercando di favorire maggiormente la parte femminile nelle varie mansioni ed infatti non a caso ci sono 22 donne contro 15 uomini.\n Quello che è possibile fare e sono sicura che è fattibile, è fare dei corsi di specializzazione per il mondo digitale rivolto alle donne per farle avvicinare ancora di più verso questo settore.\n  Le competenze si imparano con esperienza, anche nel mondo digitale!\n ", "url": "https:\/\/theredcode.it\/interviste\/voglio-diventare-una-operations-manager\/" }, "https:\/\/theredcode.it\/perch%C3%A9-usare-docker-per-il-machine-learning\/": { "title": "Perché usare Docker per il machine learning", "tags": ["aws","docker","intelligenza-artificiale","machine-learning",], "content": " “Sul mio PC funziona”.\n  Questa è la classica frase con cui, chi lavora nel settore IT -e non solo- ha a che fare quotidianamente e che porta ad ore di revisioni, controlli e confronti.\n Se poi si parla di applicazioni che riguardano il machine learning, basta immaginarsi di dover avere a che fare con questioni come l’installazione di dipendenze, requisiti di sistema, CPU, GPU e altro ancora per desistere da ogni tentativo.\n E se tutto questo potesse diventare marginale?\n In questo, il mondo DevOps può arrivare in soccorso di chi vuole lavorare a costo -quasi- zero e rendendo lo stereotipo “sul mio PC funziona” uno stile di vita.\n Vediamo come sfruttare la forza di Docker per combinarla con il mondo del machine learning e creare una fusione dalla potenza incredibile.\n Premesse  Una premessa è doverosa: chi di noi ha un passato da sviluppatrice/sviluppatore, sa bene che lavorare sul proprio PC è tutt\u0026rsquo;altro che emozionante: si passa più tempo a litigare con gli aggiornamenti, le installazioni e le dipendenze, che a scrivere codice.\n Sia chiaro: pretotipare e prototipare sul proprio laptop è bellissimo ed è quello che, bene o male, facciamo tutti. Quando poi si ha bisogno di lavorare insieme a qualcuno, si sfruttano GitHub o simili per condividere il proprio codice e lavorare a più mani.\n E se avessi bisogno di maggiore potenza? Ecco che molti dei cloud provider che sono sul mercato vengono in nostro soccorso, fornendo delle macchine on-demand che possiedono certamente più CPU e GPU di quanta ce ne potremmo mai permettere allo stesso costo.\n  In questo scenario, qual è la necessità di ricorrere ai container, o perfino a Docker?\n  I container non sono quei pezzi di metallo nei porti che ci aiutano ad avere ogni giorno ciò di cui abbiamo bisogno?\n Scherzi a parte, i container sono spesso considerati qualcosa di assolutamente esotico, normalmente relegato alle responsabilità di sistemisti\u0026amp;co. che sono reputati i veri esperti del tema e che si occuperanno -con della magia, non c\u0026rsquo;è dubbio- di far funzionare il tuo codice.\n \u0026hellip; se non fosse che in questo settore la competizione è spesso così alta, che bisogna saper fare un po\u0026rsquo; di tutto, e soprattutto per chi ama questo lavoro, aggiungere un\u0026rsquo;altra tacchetta al proprio CV fa sempre bene.\n Andiamo quindi ad analizzare in prima battuta quali sono le problematiche che possono venir fuori quando si ha a che fare con del software che sfrutta tecniche e librerie di machine learning, e poi perché dovremmo considerare l\u0026rsquo;idea di usare i container contro i nostri malditesta.\n Caso di studio  Immagina di avere a che fare con un progetto che richiede la creazione di un sistema per il riconoscimento delle immagini che sia in grado di addestrare una rete generativa avversaria su dati mammografici per evidenziare caratteristiche di malignità utilizzando immagini radiografiche.\n  Per approfondire la tematica relativa alle reti GAN, leggi questo articolo.\n  Sembra un\u0026rsquo;attività piuttosto ambiziosa, no?\n In realtà, richiede l\u0026rsquo;utilizzo di diversi ingredienti, come potenza di computazione, memoria, librerie, backup (non si sa mai\u0026hellip;) e via dicendo. Tutto questo può essere configurato in locale o, ancora meglio, su una macchina EC2, a cui accedere tramite SSH e far sì che sia il server a farsi carico del lato operativo!\n Quindi, cosa c\u0026rsquo;è di sbagliato in questa configurazione? Niente, in realtà: la maggior parte delle configurazioni di sviluppo ha avuto questo aspetto per decenni: nessun cluster, nessun file system condiviso, versionamento del codice per coordinare diversi team\u0026hellip;\n Fatta eccezione per una piccola comunità di ricercatori nell\u0026rsquo;ambito della High-Performance Computing (HPC) che sviluppano codice e lo eseguono su supercomputer, il resto di noi si affida alle nostre macchine dedicate per lo sviluppo.\n A quanto pare, il machine learning ha più cose in comune con l\u0026rsquo;HPC che con lo sviluppo software tradizionale. Come i carichi di lavoro che richiedono HPC, i carichi di lavoro possono beneficiare di un\u0026rsquo;esecuzione più rapida e di una sperimentazione più rapida quando vengono eseguiti su un cluster di grandi dimensioni.\n Però, per poter sfruttare un cluster in cui effettuare delle attività di machine learning, devi assicurarti che il tuo ambiente di sviluppo sia portabile e che l\u0026rsquo;addestramento sia riproducibile su un cluster.\n Portabilità  Ad un certo punto del tuo lavoro di sviluppo del machine learning, andrai a scontrarti con uno di questi problemi:\n Stai sperimentando diverse cose e hai troppe varianti dei tuoi script di addestramento da eseguire, per cui sei bloccato perché non hai sufficienti risorse per parallelizzare le attività; Stai eseguendo l\u0026rsquo;addestramento su un modello di grandi dimensioni con un set di dati enorme e non è possibile eseguirlo sul tuo laptop, ottenendo anche risultati in un ragionevole lasso di tempo.  Questi due casi portano a momenti di forte frustrazione e sono proprio la ragione per cui utilizzare dei container su un cluster potrebbe essere una buona idea. Se decidessi di prendere questa via, allora la prima cosa su cui è necessario concentrarsi è la portabilità.\n Concetto sconosciuto ai più, o scontato per chi è del mestiere, è la caratteristica fondamentale che ha fatto di Docker una società incredibile nel giro di pochi anni.\n Infatti, la portabilità rappresenta la capacità di astrarre la soluzione software da dipendenze, configurazioni hardware e software come le risorse a disposizione o il sistema operativo, e rendere la nostra soluzione funzionante su qualsiasi ambiente fornendo delle semplici indicazioni.\n Un po\u0026rsquo; come quando ci passano la ricetta della parmigiana di nonna con tutti gli ingredienti e il procedimento, e noi dobbiamo \u0026ldquo;solo\u0026rdquo; prepararla\u0026hellip;\n Scherzi a parte, è molto più semplice di questo, ed entrambe le soluzioni descritte in precedenza richiedono che tu sia in grado di riprodurre correttamente e in modo coerente la tua configurazione di training per lo sviluppo su un cluster.\n Questa è sicuramente la parte più impegnativa perché il cluster potrebbe eseguire diversi sistemi operativi e versioni del kernel; diverse GPU, driver e runtime; e diverse dipendenze software rispetto alla macchina di sviluppo, per cui bisogna pensare a quali sono le reali necessità per far sì che la soluzione funzioni.\n Un altro motivo per cui hai bisogno di ambienti di machine learning portabili è per lo sviluppo collaborativo: condividere il tuo lavoro con altri colleghi tramite il versionamento del software è facile.\n Garantire la riproducibilità dell\u0026rsquo;output della soluzione senza condividere l\u0026rsquo;intero ambiente di esecuzione con codice, dipendenze e configurazioni è più difficile, come vedremo a breve.\n Dipendenze, hardware\u0026amp;co.  Una sfida per chi lavora con il machine learning è che bisogna basarsi su framework e toolkit di machine learning open source spesso complessi e in continua evoluzione che funzionano su ecosistemi hardware moderni e complessi. Sono certo condizioni che rappresentano qualità positive, ma pongono sfide a breve termine.\nQuante volte hai eseguito degli script con algoritmi di machine learning e ti sei post* queste domande:\n Il mio codice sfrutta tutte le risorse disponibili su CPU e GPU? Ho le librerie giuste per sfruttare l\u0026rsquo;hardware? Sono le versioni giuste? Perché il mio codice di addestramento funziona bene sulla mia macchina, ma si blocca su quella del mio collega, quando gli ambienti sono più o meno identici? Ho aggiornato i miei driver oggi e la formazione ora è più lenta/errori. Come mai? Perché sul mio PC funziona e su quello di Caio no?  Se potessimo disegnare il modo in cui spendiamo il nostro tempo su questo dipo di attività, sarebbe più o meno fatto così:\n Stack tradizionale di un\u0026rsquo;applicazione per il ML\n Se dai un\u0026rsquo;occhiata da vicino, noterai che trascorri la maggior parte del tuo tempo nella seconda parte del disegno, chiamato \u0026ldquo;configurazione\u0026rdquo;. Ciò include la configurazione dell\u0026rsquo;ambiente, delle librerie, la verifica delle dipendenze, l\u0026rsquo;aggiornamento delle stesse, l\u0026rsquo;installazione dell\u0026rsquo;ennesima libreria che ti eri perso, la configurazione del repository Git, e via dicendo.\n Come se ciò non fosse abbastanza complesso, sai bene che le librerie vengono aggiornate continuamente, che tra una versione x della libreria y e la sua versione con quel minor fix che ti serve proprio, c\u0026rsquo;è di mezzo una crisi nevrotica. Non solo: ci sono librerie che funzionano solo su macchine che hanno la GPU, e quella libreria a te risparmierebbe tanto tempo\u0026hellip;\n Quanto tempo rimane al codice? Tanto, certamente, ma il tempo di esecuzione? Porta a molti tempi morti che diventano l\u0026rsquo;attesa di un risultato che, se porta degli errori, richiede la revisione dell\u0026rsquo;interno processo.\n A causa dell\u0026rsquo;elevata complessità di uno stack software come quello necessario al machine learning, quando passi il ​​codice sul computer di un collega o in un ambiente cluster, rischi di aumentare i punti di errore.\n Infatti, tutto ciò che è stato evidenziato, rappresenta un punto di rottura dell\u0026rsquo;intero processo, che porta al fallimento dei tuoi esperimenti.\n Potresti a questo punto però obiettare pensando che, per questo, esiste l\u0026rsquo;ambiente virtuale, come grazie ad Anaconda; in parte è vero, questi strumenti astraggono il tuo lavoro, ma solo in parte.\n Diverse dipendenze non Python -che però Python usa- non sono gestite da queste soluzioni. A causa della complessità di un tipico stack di machine learning, gran parte delle dipendenze del framework, come le librerie hardware, non rientrano nell\u0026rsquo;ambito degli ambienti virtuali.\n Lunga vita ai container  A questo punto, cerchiamo di elencare tutti i possibili punti di fallimento del nostro lavoro, riprendendo le immagini viste in precedenza.\n Sappiamo che il software che stiamo progettando fa parte di un ecosistema frammentato su più parti di codice e con diverse persone che vi collaborano.\n La collaborazione è un\u0026rsquo;ottima cosa, poiché tutti beneficiano dei contributi di tutti e il tuo lavoro potrebbe tornare utile a qualcuno. Il rovescio della medaglia è affrontare problemi come la coerenza, la portabilità e la gestione delle dipendenze.\n È qui che entrano in gioco le tecnologie dei container. In questo articolo non discuterò i vantaggi generali dei container -che puoi trovare qui-, ma parleremo solo dei vantaggi che apporta al nostro lavoro di machine learning.\n I container possono incapsulare completamente non solo il codice di training, ma l\u0026rsquo;intero stack di dipendenze fino ad arrivare alle librerie hardware.\n Quello che ottieni è un ambiente di sviluppo di machine learning coerente e portabile. Con i container, sia la collaborazione che la scalabilità su un cluster diventano molto più semplici.\n Se sviluppi codice ed esegui il training in un container, puoi condividere comodamente non solo i tuoi script, ma l\u0026rsquo;intero ambiente di sviluppo, aggiornando l\u0026rsquo;immagine del container tramite un registry e chiedendo a un collega o a un servizio di automazione di estrarre l\u0026rsquo;immagine del container e di aggiornare l\u0026rsquo;ambiente in esecuzione per riprodurre i risultati.\n Esempio di containerizzazione di un\u0026rsquo;applicazione per il ML\n L\u0026rsquo;approccio giusto che ci porta a risparmiare del tempo e ci fa guadagnare terreno nel nostro lavoro è quello che considera di includere dipendenze e framework all\u0026rsquo;interno del container, fornendo (o includendo) il codice di training del tuo processo tramite la definizione di un\u0026rsquo;immagine.\n Questo permette di lavorare esclusivamente agli aspetti che riguardano la gestione del processo di addestramento, e lasciare che la configurazione generica sia gestita interamente dal container, che installerà tutto ciò che gli viene indicato e si occuperà solo di processare l\u0026rsquo;input.\n Anche condividere e modificare l\u0026rsquo;immagine di sviluppo è facile. Nell\u0026rsquo;ambiente di lavoro possiamo infatti andare a configurare un registry che tenga memoria delle versioni prodotte delle nostre immagini, per poterne effettuare il deploy secondo le esigenze.\n Per questo, AWS mette a disposizione dei container grazie a AWS Deep Learning Container, i quali contengono i più diffusi framework di deep learning open source e che sono necessitano di CPU e GPU ottimizzate per il calcolo.\n Caso d\u0026rsquo;uso  Torniamo all\u0026rsquo;esempio fatto inizialmente: vogliamo costruire sistema che sia in grado di riconoscere, utilizzando delle immagini mammografiche, possibili masse relative a carcinoma di origine benigna o maligna.\n Per portare avanti un\u0026rsquo;idea del genere, di sicuro avremo bisogno di utilizzare librerie come Pytorch o Tensorflow. Peccato che il mio PC abbia più di cinque anni e abbia una versione di Windows abbastanza obsoleta. Come fare?\n Dopo aver creato un account gratuito su AWS, posso andare a creare un\u0026rsquo;istanza EC2. Per chi non ne avesse mai sentito parlare, si tratta di un servizio che mette a disposizione delle macchine con diverse caratteristiche, a seconda delle esigenze.\n Ad esempio, quelle che appartengono alle famiglie C, P o G, sono perfette se abbiamo bisogno di potenza computazionale, così come le suddette librerie richiedono.\n Inoltre, possiamo scegliere tra diverse AMI (abbreviazione di Amazon Machine Image) che ci permettono di avviare delle macchine con tutto l\u0026rsquo;occorrente già pronto e installato: perché non utilizzare allora un container già pronto?\n Esistono infatti diversi container che hanno TensorFlow o PyTorch già installato, con una serie di librerie annesse: l\u0026rsquo;elenco completo di quelle messe a disposizione è disponibile nella documentazione fornita da AWS.\n Esempio di AMI per il Deep Learning con TensorFlow\nUna volta avviata l\u0026rsquo;istanza di EC2, sarà sufficiente avviare il container di TensorFlow con un comando simile al seguente (verificando la region specificata, che in questo caso è quella europea in Irlanda):\ndocker pull 763104351884.dkr.ecr.eu-west-1.amazonaws.com/tensorflow-training:2.1.0-gpu-py36-cu101-ubuntu18.04 docker run -it --runtime=nvidia -v $PWD:/projects --network=host --name=tf-dev 763104351884.dkr.ecr.eu-west-1.amazonaws.com/tensorflow-training:2.1.0-gpu-py36-cu101-ubuntu18.04  Dopodiché, dovremo solo installare il modulo jupyterlab tramite pip e avviare un nuovo laboratorio, che ci permetterà di lavorare e testare il codice sorgente in maniera più agile:\n pip install jupyterlab jupyter lab --ip=0.0.0.0 --port=9999 --allow-root --NotebookApp.token=\u0026#39;\u0026#39; --NotebookApp.password=\u0026#39;\u0026#39; Avvio di un Jupyter notebook\n Immaginando di lavorare direttamente in questo ambiente e di modificare quindi il container di base di cui abbiamo effettuato il pull in precedenza, arriveremo ad un punto in cui sarà necessario salvare il lavoro fatto: per questo, c\u0026rsquo;è docker commit.\n Nel momento in cui la nostra immagine sarà pronta e vorremo condividerla con gli altri colleghi, potremo sfruttare o un repository disponibile su Docker Hub, o anche Amazon Elastic Container Registry:\n aws ecr create-repository --repository-name my-tf-dev $(aws ecr get-login --no-include-email --region \u0026lt;REGION\u0026gt;) docker tag my-tf-dev:latest \u0026lt;ACCOUNT_ID\u0026gt;.dkr.ecr.\u0026lt;REGION\u0026gt;.amazonaws.com/my-tf-dev:latest docker push \u0026lt;ACCOUNT_ID\u0026gt;.dkr.ecr.\u0026lt;REGION\u0026gt;.amazonaws.com/my-tf-dev:latest  Tutto ciò che ho fatto finora, mi permette di essere cert* al 100% che il mio lavoro funzionerà esattamente come l\u0026rsquo;ho progettato su qualunque altra infrastruttura: sarà sufficiente utilizzare l\u0026rsquo;immagine caricata nel repository e avviarla.\n Semplice, no?\n Verso la conclusione  Arrivati a questo punto, potrebbe sorgere spontanea la domanda: e perché io, che mi occupo di data science, machine learning e via discorrendo, dovrei mettermi a gestire tutto questo?\n Certo, c\u0026rsquo;è un notevole risparmio di tempo e di possibili problematiche, ma non conoscendo così bene strumenti di orchestrazione, non avendo familiarità con tematiche come la gestione di un cluster, avrei difficoltà con un approccio del genere.\n Ecco l\u0026rsquo;asso nella manica: Amazon SageMaker. Si tratta di un servizio completamente gestito dove tutta la parte relativa alla configurazione di Jupyter, dell\u0026rsquo;ottimizzazione degli hyperparameters e dei nodi che ospiteranno la nostra applicazione (sì, per quando diventeremo grandi), è in mano ad Amazon.\n La nostra unica attività sarà quella di definire l\u0026rsquo;immagine da utilizzare: al resto, penserà SageMaker.\n Funzionalità di Amazon SageMaker\n Visto il nostro caso d\u0026rsquo;uso, avere a disposizione della potenza computazionale sufficiente allo scopo è fondamentale per ottenere un buon risultato.\n Ad esempio, AWS fornisce la possibilità di utilizzare Apache MXNet, ossia un framework di addestramento e inferenza veloce e scalabile integrata da un\u0026rsquo;API per attività di machine learning e deep learning.\n MXNet include l\u0026rsquo;interfaccia Gluon, che permette agli sviluppatori a qualsiasi livello di competenza di iniziare con il deep learning su cloud, per creare regressione lineare, reti convoluzionali e reti LSTM ricorrenti per il rilevamento di oggetti, il riconoscimento vocale, riconoscimento di immagini e via dicendo.\n La community dietro al mondo del machine learning si muove velocemente. Esistono migliaia di ricerche che vengono portate avanti ogni giorno, grazie alla pubblicazione di API e framework open source sempre aggiornati.\n Un approccio come questo ci garantisce molti vantaggi, come la possibilità di concentrarci sullo sviluppo, senza preoccuparci di non avere sufficiente potenza computazionale o di rendere difficile la collaborazione e la fruizione del nostro lavoro.\n Quando il software si evolve così rapidamente, tenere il passo con le ultime novità e mantenere la qualità, la coerenza e l\u0026rsquo;affidabilità di ciò a cui lavori può essere difficile\u0026hellip;\n \u0026hellip;ma non c\u0026rsquo;è bisogno di preoccuparsi. Passare allo sviluppo di attività di ML tramite container è un modo per affrontare queste sfide, come spero sia emerso in questo articolo sul perché usare Docker per il machine learning!\n", "url": "https:\/\/theredcode.it\/perch%C3%A9-usare-docker-per-il-machine-learning\/" }, "https:\/\/theredcode.it\/voglio-diventare-uno...-startupper-come-voltar\/": { "title": "Voglio diventare uno... Startupper, come Voltar", "tags": ["interviste","voglio-diventare",], "content": "Quando senti parlare di ragazzi di 19/20 anni che mettono su startup che fanno cose incredibili, quasi ti viene voglia di costruire una macchina del tempo per tornare indietro e dare un senso a quel decennio.\n Si parla di incredibile soprattutto se parliamo di questi due giovanissimi che hanno avuto un\u0026rsquo;idea brillante grazie ad una semplice necessità e grazie ad un grande impegno nel campo umano\u0026hellip;\n Senza però fare nessuno spoiler, diamo voce a Niccolò e Alessandro, due ragazzi che come startupper hanno fondato la loro prima realtà chiamata Voltar, grazie ad OperaLogica che li ha aiutati in questo bellissimo percorso!\n Presentatevi in meno di 100 parole!  Siamo Niccolò Armellini e Alessandro Sala, founder di Voltar, startup innovativa sul territorio di Garbagnate Milanese. Siamo due informatici di 19 anni diplomati al ITIS S. Cannizzaro di Rho e da sempre siamo appassionati di programmazione e tecnologia.\n Niccolò: Dal 2017 sono volontario alla Croce Rossa Italiana Comitato delle Groane e vivendo in prima persona i problemi dell’associazione di soccorso legati alla digitalizzazione, ho coinvolto Alessandro per sviluppare una piattaforma con un\u0026rsquo;unica missione: semplificare il lavoro dei soccorritori, dei volontari e delle associazioni di soccorso grazie alla tecnologia. All’interno dell’ecosistema di startup di operaLogica, abbiamo iniziato a farci conoscere sul territorio proponendo la nostra soluzione alle associazione di soccorso che vogliono digitalizzare i loro processi amministrativi e logistici.\n Alessandro: il rapporto di amicizia con Niccolò ci ha portato a lavorare insieme sul gestionale e a focalizzarci sulle difficoltà dei volontari rispetto all’uso della tecnologia. Abbiamo infatti dedicato un’attenzione particolare alla semplicità e alla sicurezza di tutte le funzionalità di Voltar, realizzando anche una versione mobile.\n  Cos’è Voltar?  Voltar è un gestionale totalmente in cloud di Azure che digitalizza le associazioni di soccorso. Le tecnologie utilizzate per la parte di sviluppo sono Blazor e Flutter.\n Inoltre, abbiamo una versione mobile che riprende alcune funzionalità di gestione e tracciamento dei mezzi e delle presenze, ed è già disponile sia per IOS che per Android. La fase di sviluppo l’abbiamo condotta sia io che Alessandro fino poi alla costituzione della startup nel giugno del 2021.\n  Questo progetto non è nato per caso o per voglia di fare business, ma è stato ideato nella maniera più naturale e semplice: vedo un problema e realizzo la soluzione.\n  Essere volontario e mettere a disposizione degli altri le proprie risorse personali, mi ha insegnato ad agire per costruire qualcosa di migliore, di utile per tutti.\n Voltar è frutto di una richiesta che non poteva essere ignorata e se non avessimo fatto nulla per l’associazione, avendone le competenze, sarebbe stato come perdere un’occasione preziosa di valore. Una sorta di responsabilità nei confronti di chi si impegna ogni giorno ad aiutare gli altri.\n Per me e Alessandro è stato quasi spontaneo progettare il gestionale; anche l’idea di pensarlo in cloud aiuta perché può essere davvero utilizzato da qualsiasi associazione, da quella più piccola a quella più strutturata.\n  Voltar ci sta a cuore perché ci fa sentire utili e parte del futuro, non come spettatori ma come innovatori.\n   Come nasce l’idea? Voltar è stata pensata per semplificare il lavoro di tutti, perché se si lavora meglio, si riesce a vivere appieno l’esperienza di aiutare le persone.\n  Durante l’ultimo anno c’è stato poco tempo per pensare alla digitalizzazione, ma forse proprio le difficoltà del periodo hanno messo in luce ancora di più quanto l’innovazione sia un passaggio virtuoso quanto necessario.\n  Sappiamo di essere sulla strada giusta perché Voltar è uno strumento utile che risponde a bisogni che io stesso ho percepito come volontario o parlando con i miei compagni.\n Siamo due informatici, abituati a linguaggi di programmazione e tecnologie, ci occorreva qualcuno che ci affiancasse nella comunicazione del nostro prodotto. Un progetto nato per i volontari e i soccorritori cresce grazie alla loro fiducia nella nostra tecnologia.\n Per questo ringraziamo sia la croce Rossa di Garbagnate Comitato delle Groane che per prima ha creduto in noi e ci ha sostenuti in questo progetto, sia operaLogica che ha messo a disposizione le sue competenze interne per affiancarci in questo percorso\n  Voltar è stata infatti inserita nell’ecosistema di startup innovative SpaceUp di operaLogica proprio per poter collaborare attivamente con il team di sviluppo, comunicazione e marketing e avere la possibilità di farsi conoscere come realtà tecnologica.\n  Qual è stata la parte più difficile nel portare a termine questo progetto?  La parte più difficile del progetto è stata rendere la piattaforma “semplice all’utilizzo” o meglio orientata all’utilizzo umano invece che centrata sui tecnicismi.\n  La tecnologia è davvero un’amica quando il tempo è poco e si lavora in emergenza.\n  Poter gestire in un\u0026rsquo;unica piattaforma tutte le attività amministrative, contabili e logistiche, le squadre e le persone, gli aiuti assistenziali, i soccorsi e i mezzi, la relazione con il 118, la privacy e la sicurezza dei dati e fare in modo che tutte queste funzioni non costringano i volontari a ore infinite di formazione, non è semplice.\n Da tecnici noi siamo abituati a certi passaggi invece le persone no e quindi fanno fatica a utilizzare un gestionale se non pensato in base alle LORO necessità e livello di digitalizzazione .\n Abbiamo fatto molti test con gli utenti, chiedendo semplicemente di usare il gestionale e dirci quanto fossero intuitivi e facili i vari passaggi. E’ stato un lavoro molto lungo e che ha richiesto molte modifiche. Ancora adesso non smettiamo mai di migliorare la User Expericence perché la tecnologia deve semplificare il lavoro non complicarlo.\n Qual è un esempio di uso in cui Voltar ha portato dei benefici?  Per esempio prendiamo l’uso di Voltar su mobile e di un operatore addetto al trasporto.\n L’operatore riceve la notifica dalla centrale operativa che gli assegna il trasporto. L’operatore dopo aver ricevuto la notifica sullo smartphone può vedere, aprendo l’applicazione, tutti i dettagli utili per il trasporto, come indirizzo, nominativo del paziente, telefono e dettagli sul trasporto e infine dare avvio alla missione.\n L’operatore avvia direttamente il navigatore per completare la missione di trasporto assegnata mentre il suo tragitto viene tracciato. Alla fine del trasporto può chiudere la missione segnalando di essere nuovamente disponibile per altre emergenze.\n Vediamo anche su desktop un processo di assegnazione della missione.\n L’operatore accede alla centrale operativa con le sue credenziali e consulta subito il pannello missioni. Inserisce l’equipaggio e i dati della missione. Dalla mappa può tracciare la missione e vedere dove si trova il mezzo. Non appena la missione è terminata riceve la notifica di fine missione.\n Come avete fatto a far conoscere il vostro progetto?  Stiamo lavorando per farlo conoscere anche ad altre associazioni ma inizialmente lo abbiamo presentato direttamente ai volontari.\n Ci siamo mossi come network (siamo sia soci Assintel che Microsoft Partner) e insieme a operaLogica, software factory di Garbagnate Milanese e società Benefit che potenzia il valore delle startup, investiamo nel Visual Branding per rafforzare la nostra identità.\n Stiamo costruendo le basi per una solida attività di marketing utilizzando strumenti online e offline. Crediamo nel valore delle persone e quindi il nostro reparto vendita non è solo digitale, ci piace andare in associazione, parlare con i volontari e far provare le potenzialità di Voltar anche per capire dove possiamo migliorare.\n Vi piacerebbe espandere l’idea, magari estendendola ad altri settori?  Sì, ci piacerebbe espanderla anche in altri settori oltre alle associazioni di soccorso; per esempio, in settori in cui c’è bisogno di digitalizzare la parte di logistica e tracciamento dei mezzi puntando su un interfaccia semplice.\n Quali sono i prossimi obiettivi/progetti che avete in mente?  I prossimi obiettivi sono sicuramente di farci conoscere in tutta Italia per avviare la digitalizzazione con più associazioni di soccorso possibile.\n Un altro progetto, più ambizioso e innovativo, è quello di utilizzare la tecnologia HoloLens, un visore a realtà mista senza cavi, per preparare i soccorritori alle missioni e per erogare in modalità più interattiva aggiornamenti formativi di soccorso e sicurezza.\n [embed]https://youtu.be/cNri9u68hOg[/embed]\n  Grazie a Niccolò e Alessandro per aver condiviso il frutto di questo lavoro incredibile -si ricorda, fatto da due giovanissimi-, che speriamo possa arrivare ad altre associazioni della Croce Rossa e non! ;)\n Contatti Sito di Voltar: https://www.voltar.it/ Sito di operaLogica: https://www.operalogica.com/ Linkedin: https://www.linkedin.com/company/voltar/ Facebook: https://www.facebook.com/voltar.sos  ", "url": "https:\/\/theredcode.it\/voglio-diventare-uno...-startupper-come-voltar\/" }, "https:\/\/theredcode.it\/i-diversi-volti-di-distinct-in-postgresql\/": { "title": "I diversi volti di DISTINCT in PostgreSQL", "tags": ["database",], "content": "  Lavorare con un DBMS può essere interessante.\n Lavorare però con più DBMS può essere frustrante: ognuno di essi ha una serie di istruzioni che sono leggermente diverse rispetto al collega più vicino: se ti abitui ad utilizzare SQL Server, passare a PostgreSQL può non essere immediato.\n La prima differenza che si noterà è proprio relativa ad una serie di funzionalità che proprio alcuni di questi aggiungono grazie a delle istruzioni particolari: vediamo quali sono i diversi volti del DISTINCT in PostgreSQL.\n Cos\u0026rsquo;è DISTINCT?   SELECT DISTINCT elimina le righe duplicate dal risultato.\n  L\u0026rsquo;uso più semplice di DISTINCT serve, ad esempio, per ottenere un elenco univoco di categorie di un prodotto:\n  SELECT DISTINCT categoria FROM prodotto;  -------------------------- \u0026#34;abbigliamento\u0026#34; \u0026#34;casa\u0026#34; \u0026#34;alimentari\u0026#34; \u0026#34;cartoleria\u0026#34; \u0026#34;igiene personale\u0026#34;   è anche vero che potremmo fare lo stesso con una GROUP BY:\n SELECT categoria FROM prodotto GROUP BY categoria;  E cos’è DISTINCT ON?  Una classica domanda da colloquio di lavoro è trovare, usando l’esempio precedente, il prodotto con il prezzo più alto in ogni categoria.\n Questo è ciò che insegnano all\u0026rsquo;università nei vari corsi, usando due SELECT annidate che consentono la selezione del prezzo più alto -di certo di non semplice lettura:\n SELECT  * FROM  prodotto WHERE  (categoria, prezzo) IN (  SELECT  categoria,  MAX(prezzo)  FROM  prodotto  GROUP BY  categoria  ) ORDER BY  categoria; -------------------------------------------- 174 \u0026#34;felpa\u0026#34; \u0026#34;abbigliamento\u0026#34; 7 6 12 \u0026#34;riso\u0026#34; \u0026#34;alimentari\u0026#34; 10 1 15 \u0026#34;scottona\u0026#34; \u0026#34;alimentari\u0026#34; 10 1 16 \u0026#34;emmenthal\u0026#34; \u0026#34;alimentari\u0026#34; 10 1 37 \u0026#34;uva\u0026#34; \u0026#34;alimentari\u0026#34; 10 1 65 \u0026#34;farro\u0026#34; \u0026#34;alimentari\u0026#34; 10 3 67 \u0026#34;uova\u0026#34; \u0026#34;alimentari\u0026#34; 10 3 69 \u0026#34;cracker\u0026#34; \u0026#34;alimentari\u0026#34; 10 3 119 \u0026#34;cacao amaro\u0026#34; \u0026#34;alimentari\u0026#34; 10 4 123 \u0026#34;uva\u0026#34; \u0026#34;alimentari\u0026#34; 10 4 134 \u0026#34;banana\u0026#34; \u0026#34;alimentari\u0026#34; 10 4 138 \u0026#34;lattuga\u0026#34; \u0026#34;alimentari\u0026#34; 10 4 149 \u0026#34;uova\u0026#34; \u0026#34;alimentari\u0026#34; 10 4 155 \u0026#34;wafer\u0026#34; \u0026#34;alimentari\u0026#34; 10 5 444 \u0026#34;certosa\u0026#34; \u0026#34;alimentari\u0026#34; 10 7 465 \u0026#34;ostriche\u0026#34; \u0026#34;alimentari\u0026#34; 10 8 471 \u0026#34;carciofi\u0026#34; \u0026#34;alimentari\u0026#34; 10 8 474 \u0026#34;parmigiano\u0026#34; \u0026#34;alimentari\u0026#34; 10 8 481 \u0026#34;insalata\u0026#34; \u0026#34;alimentari\u0026#34; 10 8 502 \u0026#34;bresaola\u0026#34; \u0026#34;alimentari\u0026#34; 10 9 510 \u0026#34;stracchino\u0026#34; \u0026#34;alimentari\u0026#34; 10 9 524 \u0026#34;pasta sfoglia\u0026#34; \u0026#34;alimentari\u0026#34; 10 9 182 \u0026#34;pasta\u0026#34; \u0026#34;alimentari\u0026#34; 10 6 183 \u0026#34;riso\u0026#34; \u0026#34;alimentari\u0026#34; 10 6 200 \u0026#34;cereali\u0026#34; \u0026#34;alimentari\u0026#34; 10 7 201 \u0026#34;wafer\u0026#34; \u0026#34;alimentari\u0026#34; 10 7 208 \u0026#34;vongole\u0026#34; \u0026#34;alimentari\u0026#34; 10 8 248 \u0026#34;olive\u0026#34; \u0026#34;alimentari\u0026#34; 10 1 254 \u0026#34;stracchino\u0026#34; \u0026#34;alimentari\u0026#34; 10 1 270 \u0026#34;pane al sesamo\u0026#34; \u0026#34;alimentari\u0026#34; 10 2 274 \u0026#34;passata di pomodoro\u0026#34; \u0026#34;alimentari\u0026#34; 10 2 291 \u0026#34;orzo\u0026#34; \u0026#34;alimentari\u0026#34; 10 2 293 \u0026#34;marmellata\u0026#34; \u0026#34;alimentari\u0026#34; 10 2 302 \u0026#34;pane al sesamo\u0026#34; \u0026#34;alimentari\u0026#34; 10 3 305 \u0026#34;ostriche\u0026#34; \u0026#34;alimentari\u0026#34; 10 3 310 \u0026#34;bresaola\u0026#34; \u0026#34;alimentari\u0026#34; 10 3 335 \u0026#34;ricotta\u0026#34; \u0026#34;alimentari\u0026#34; 10 4 339 \u0026#34;orata\u0026#34; \u0026#34;alimentari\u0026#34; 10 4 342 \u0026#34;bresaola\u0026#34; \u0026#34;alimentari\u0026#34; 10 4 344 \u0026#34;olive\u0026#34; \u0026#34;alimentari\u0026#34; 10 4 346 \u0026#34;parmigiano\u0026#34; \u0026#34;alimentari\u0026#34; 10 4 348 \u0026#34;certosa\u0026#34; \u0026#34;alimentari\u0026#34; 10 4 369 \u0026#34;ostriche\u0026#34; \u0026#34;alimentari\u0026#34; 10 5 378 \u0026#34;parmigiano\u0026#34; \u0026#34;alimentari\u0026#34; 10 5 382 \u0026#34;stracchino\u0026#34; \u0026#34;alimentari\u0026#34; 10 5 387 \u0026#34;orzo\u0026#34; \u0026#34;alimentari\u0026#34; 10 5 395 \u0026#34;pane al latte\u0026#34; \u0026#34;alimentari\u0026#34; 10 5 414 \u0026#34;stracchino\u0026#34; \u0026#34;alimentari\u0026#34; 10 6 427 \u0026#34;pane al latte\u0026#34; \u0026#34;alimentari\u0026#34; 10 6 428 \u0026#34;pasta sfoglia\u0026#34; \u0026#34;alimentari\u0026#34; 10 6 430 \u0026#34;pane al sesamo\u0026#34; \u0026#34;alimentari\u0026#34; 10 7 436 \u0026#34;tonno\u0026#34; \u0026#34;alimentari\u0026#34; 10 7 448 \u0026#34;yogurt\u0026#34; \u0026#34;alimentari\u0026#34; 10 7 460 \u0026#34;pasta sfoglia\u0026#34; \u0026#34;alimentari\u0026#34; 10 7 2 \u0026#34;set di penne\u0026#34; \u0026#34;cartoleria\u0026#34; 10 1 39 \u0026#34;detersivo per piatti\u0026#34; \u0026#34;casa\u0026#34; 8.10 1 50 \u0026#34;carta\u0026#34; \u0026#34;casa\u0026#34; 8.10 2 8 \u0026#34;cavo usb\u0026#34; \u0026#34;casa\u0026#34; 8.10 1 90 \u0026#34;ventilatore\u0026#34; \u0026#34;casa\u0026#34; 8.10 3 231 \u0026#34;sgrassatore\u0026#34; \u0026#34;casa\u0026#34; 8.10 9 167 \u0026#34;dentifricio\u0026#34; \u0026#34;igiene personale\u0026#34; 9 5   Vediamo che ci sono diversi prodotti con lo stesso prezzo, e quindi questa query non ci torna di aiuto.\n Se ti sei laureat* qualche tempo fa, magari avrai sentito parlare di PARTITION BY e ROW_NUMBER(), due funzioni che permettono di effettuare operazioni come assegnare un intero sequenziale a ciascuna riga in un set di risultati (nel caso di ROW_NUMBER()).\n Si potrebbe quindi trasformare la query precedente in una come questa:\n WITH highest_cost_product AS (  SELECT  ROW_NUMBER() OVER (  PARTITION BY categoria ORDER BY prezzo DESC  ) AS rn,  *  FROM  prodotto ) SELECT  * FROM  highest_cost_product WHERE  rn = 1 ORDER BY  categoria;  Il risultato in questo caso è lo stesso, ma senza i duplicati:\n 1 174 \u0026#34;felpa\u0026#34; \u0026#34;abbigliamento\u0026#34; 7 6 1 183 \u0026#34;riso\u0026#34; \u0026#34;alimentari\u0026#34; 10 6 1 2 \u0026#34;set di penne\u0026#34; \u0026#34;cartoleria\u0026#34; 10 1 1 50 \u0026#34;carta\u0026#34; \u0026#34;casa\u0026#34; 8.10 2 1 167 \u0026#34;dentifricio\u0026#34; \u0026#34;igiene personale\u0026#34; 9 5 …  Fino ad ora, risulta abbastanza familiare, no?\n Grazie a PostgreSQL, è possibile usare una clausola speciale DISTINCT ON per trovare la prima riga in un gruppo:\n SELECT DISTINCT ON (categoria)  * FROM  prodotto ORDER BY  categoria,  prezzo DESC; ----------------------------- 174 \u0026#34;felpa\u0026#34; \u0026#34;abbigliamento\u0026#34; 7 6 183 \u0026#34;riso\u0026#34; \u0026#34;alimentari\u0026#34; 10 6 2 \u0026#34;set di penne\u0026#34; \u0026#34;cartoleria\u0026#34; 10 1 50 \u0026#34;carta\u0026#34; \u0026#34;casa\u0026#34; 8.10 2 167 \u0026#34;dentifricio\u0026#34; \u0026#34;igiene personale\u0026#34; 9 5   WOW! Decisamente più semplice.\n Leggendo la documentazione, vediamo cosa si dice dell’istruzione DISTINCT ON:\n   SELECT DISTINCT ON ( espressione [, …] ) mantiene solo la prima riga di ogni insieme di righe in cui le espressioni date risultano uguali.\n  Il motivo per cui non se ne sente mai parlare è proprio che fa parte delle clausole cosiddette non standard:\n   Clausole non standard\nDISTINCT ON ( … ) è un\u0026rsquo;estensione dello standard SQL.\n  In questo caso, PostgreSQL fa tutto il lavoro pesante per noi. L\u0026rsquo;unico requisito è ORDER BY il campo per cui raggruppiamo (in questo caso categoria e prezzo), che consente anche il \u0026ldquo;raggruppamento\u0026rdquo; per più di un campo, il che rende questa clausola ancora più potente.\n IS DISTINCT FROM  Il confronto dei valori in SQL può portare a tre risultati: true, false o unknown. Prendiamo ad esempio questa query:\n WITH example AS (  SELECT 1 AS a, 1 AS b UNION ALL  SELECT 1, 2 UNION ALL  SELECT NULL, 1 UNION ALL  SELECT NULL, NULL ) SELECT  a,  b,  a = b as equal FROM  example;  a | b | equal ------+------+-------  1 | 1 | true  1 | 2 | false NULL | 1 | NULL NULL | NULL | NULL  Il risultato del confronto di NULL con NULL utilizzando l\u0026rsquo;uguaglianza (=) è UNKNOWN (contrassegnato come NULL nella tabella), un po’ come 0 alla 0!\n  In SQL 1 è uguale a 1 e NULL IS NULL restituisce vero, ma NULL non è uguale a NULL. Da perdere la testa, no?\n    È importante essere consapevoli di questa sottigliezza perché il confronto dei campi nullable potrebbe produrre risultati imprevisti.\n La condizione completa per ottenere true o false quando si confrontano campi nullable è:\n WITH example AS (  SELECT 1 AS a, 1 AS b UNION ALL  SELECT 1, 2 UNION ALL  SELECT NULL, 1 UNION ALL  SELECT NULL, NULL ) SELECT  a,  b,  (a is null and b is null)  or  (a is not null and b is not null and a = b)  as full_condition FROM  example; -------------------------------  a | b | equal | full_condition ------+------+-------+----------  1 1 true 1 2 false NULL 1 false NULL NULL true   Questo è il risultato che vogliamo ottenere, ma è molto lungo. C\u0026rsquo;è un modo migliore?\n Anche in questo caso, PostgreSQL ci fornisce un’opzione in più, ed è IS DISTINCT FROM:\n WITH example AS (  SELECT 1 AS a, 1 AS b UNION ALL  SELECT 1, 2 UNION ALL  SELECT NULL, 1 UNION ALL  SELECT NULL, NULL ) SELECT  a,  b,  (a is null and b is null)  or  (a is not null and b is not null and a = b)  as full_condition FROM  example; Il risultato dunque è:  a | b | equal | full_condition ------+------+-------+----------  1 1 true 1 2 false NULL 1 false NULL NULL true   La documentazione di PostgreSQL spiega in questo modo IS DISTINCT FROM:\n   IS DISTINCT FROM e IS NOT DISTINCT FROM tratta NULL come se fosse un valore noto, piuttosto che come un caso speciale per indicare sconosciuto.\n  Molto meglio: breve e conciso.\n Ma in che modo gli altri database gestiscono questo?\n MySQL — un operatore speciale, ossia ⇔, che ha funzionalità simili; Oracle invece fornisce una funzione chiamata LNNVL per confrontare i campi nullable (in bocca al lupo).\n Per quanto riguarda SQL Server? Non pervenuto.\n   ", "url": "https:\/\/theredcode.it\/i-diversi-volti-di-distinct-in-postgresql\/" }, "https:\/\/theredcode.it\/voglio-diventare-una...-data-journalist\/": { "title": "Voglio diventare una... Data Journalist", "tags": ["interviste","voglio-diventare",], "content": "Oggi si passa ad uno di quei mestieri che in Italia è difficilissimo trovare o poter esercitare: la Data Journalist.\n Si tratta di una figura ibrida tra un giornalista e un data analyst, che ha forti competenze in statistica, ma soprattutto un buon occhio per i dati.\n Come si diventa una Data Journalist? Ecco quanto racconta Debora Aru, che lavora in Reach plc a Cardiff ormai da qualche anno!\n Descriviti in 100 parole.  Ciao! Sono Debora, sono sarda e vivo a Cardiff, in Galles.\nFaccio la giornalista dal 2006, quando ho iniziato a fare la reporter per un TG locale di Oristano. Mi sono poi trasferita a Roma dove mi sono occupata di cronaca, politica e economia pubblica a livello nazionale.\nNel 2014 mi sono trasferita a Londra, dove ho prima studiato inglese e poi mi sono iscritta al corso di interactive journalism della City University, una delle più’ prestigiose università’ del Regno Unito.\nDal 2017 lavoro come Data journalist per la data unit di Reach plc, il più grande network di giornali nazionali e locali qui in UK.\n In cosa consiste il ruolo di Data Journalist?   Un data journalist usa l’analisi dei dati per trovare notizie.\n  Mi occupo di cercare, pulire e analizzare dati, normalmente pubblicati dal governo, ma anche attraverso Freedom of information richieste (una legge che ti permette di ottenere informazioni di dominio pubblico se in possesso di un ente).\nLavoro in un team composto da 6 giornalisti, 3 sviluppatori, un video maker e due designer.\nPrincipalmente mi occupo di giornalismo locale, scrivendo le notizie per i nostri titoli regionali, ma copro anche storie nazionali.\nIn cosa consiste il processo che segue un Data Journalist\n Quando hai deciso di diventare Data Journalist? Ho deciso di diventare Data Journalist quando ho deciso il tipo di Master che volevo fare alla City University di Londra.\nArrivavo da un background televisivo e di reporting su carta, entrambi settori molto competitivi nel campo del giornalismo.\n Quindi, per una questione di convenienza personale e di voglia di emergere, ho deciso di specializzarmi in Data journalism, dal momento che anche qui nel Regno Unito era un settore in ascesa con più margine di competizione sul mercato.\n Qual è la soft skill più importante che deve possedere un Data Journalist?   Alcune delle soft skill fondamentali sono sicuramente etica e communication.\n  L\u0026rsquo;etica è importante perché ha un ruolo fondamentale in generale nella professione del giornalista, in quanto questa definisce non solo l\u0026rsquo;affidabilità del reporter, ma anche il rispetto per i lettori, indicando loro quali temi evitare e quali no, ma anche come trattare, in generale, l\u0026rsquo;informazione soprattutto in situazioni controverse.\nIn Italia, esistono infatti le famose \u0026ldquo;Carte\u0026rdquo; deontologiche, come ad esempio la Carta di Roma, per i diritti dei migranti, o la Carta di Milano per tutelare i diritti dei detenuti, che delineano il comportamento che un giornalista deve tenere.\nE le capacità di comunicazione sono importanti perché, se non sai comunicare, che giornalista saresti? :)\nLa maggior parte di noi utilizza i social per parlare dei propri successi, ma la realtà è che siamo quel che siamo grazie al 90% dei nostri errori. Racconta il tuo più grande fallimento da quando lavori nel settore, che però ti ha reso ciò che sei.  Non ricordo onestamente grandi fallimenti, e non perché non ne siano capitati, ma perché il modo in cui lavoro e un po\u0026rsquo; a prova di errore.\n Cosa intendo? Tra colleghi, ci controlliamo a vicenda i pezzi, così da spalleggiarci ed evitare grossi errori!\n Come fare per diventare un Data Journalist?  In Italia, il ruolo di Data journalist non è ancora riconosciuto - come lo sono ad esempio il giornalista giudiziario o il cronista sportivo-, ma qui nel Regno Unito si tratta di una specialità del giornalismo già radicata e in continua evoluzione.\nPer fare il giornalista nel Regno Unito, Brexit permettendo, è necessario frequentare una scuola di giornalismo, perché raramente le redazioni prendono persone che non hanno una formazione specifica e ottenuta tramite un ente accreditato.\nAl giorno d’oggi, poi, siccome la competizione sta crescendo, un buon punto di forza che potrebbe tornare utile è quello di conoscere dei linguaggi di programmazione che ti permettano di pulire, analizzare e anche visualizzare basi di dati anche di grandi dimensioni.\n Parlando di successi, qual è il tuo prossimo obiettivo? Quale ruolo vorresti ricoprire entro i prossimi 3 anni?  Il mio lavoro mi piace davvero tanto e spero di essere ancora una Data journalist fra tre anni!\n Conosci il tema gender gap in ambito STEM? Se sì, cosa puoi fare nel tuo piccolo per combattere questo problema? (Fai anche riferimenti a situazioni reali in cui hai avuto modo di fare la tua parte!)  Conosco il tema e so che generalmente le materie in ambito scientifico sono principalmente rivolte al genere maschile, anche se per fortuna non ne ho esperienza diretta.\n Nel mio team, per esempio, i miei manager sono due donne e siamo abbastanza proporzionati in termini di gender!\n Grazie a Debora per la sua intervista direttamente dal Regno Unito!\n ", "url": "https:\/\/theredcode.it\/voglio-diventare-una...-data-journalist\/" }, "https:\/\/theredcode.it\/why\/che-fine-ha-fatto-clubhouse\/": { "title": "Che fine ha fatto Clubhouse?", "tags": ["clubhouse","social",], "content": "Era l\u0026rsquo;aprile del 2020, eravamo in piena pandemia COVID-19, tutti erano a casa, in quarantena, a preparare pizza e pasta a gogò. All\u0026rsquo;improvviso, si è scatenato un putiferio a causa di una nuova piattaforma di social network chiamata \u0026ldquo;Clubhouse\u0026rdquo;, a cui tutti volevano accedere.\n La maggior parte delle persone ne parlavano su Twitter, gridando all’innovazione intorno a questa cosiddetta \u0026ldquo;nuova normalità per i social\u0026rdquo;. Questo è stato quello che ha più attirato la mia attenzione all’inizio.\n Ma che fine ha fatto Clubhouse?\n Facciamo un passo indietro, e vediamo la sua nascita ed evoluzione. Sicuramente, la sua esclusività è stata ciò che ha reso la piattaforma una delle più desiderate dalle persone.\n Cos\u0026rsquo;è Clubhouse  Capitava di frequente di collegarsi su LinkedIn e leggere il post del collegamento di turno che scriveva di commentare il suo post per poter ottenere uno dei 5 inviti messi a disposizione di chi già faceva parte dell’app.\n Solo a me ricorda un po’ i Golden Tickets de La fabbrica di cioccolato di Willy Wonka?\n Infatti, per entrare, avevi bisogno di un invito, da qualcuno che ti facesse entrare. Questa strategia, apparentemente banale, è ciò che ha portato centinaia di migliaia e ora milioni di utenti sulla piattaforma.\nEsempio di invito su Clubhouse\n Si basa sul concetto di stanza: le stanze di conversazione vanno e vengono a seconda di quando le persone le avviano o le terminano.\n La società afferma che in media vengono create oltre 500.000 stanze al giorno. Inoltre, la stessa afferma di registrare le conversazioni man mano che prendono luogo, ma di conservarle solo se qualcuno presenta un reclamo mentre la stanza è attiva.\n Se nessuno presenta un reclamo, Clubhouse dice che la registrazione viene eliminata non appena l\u0026rsquo;ospite chiude la discussione.\n Clubhouse ha mantenuto la sua atmosfera di esclusività anche molto tempo dopo aver aggiornato la propria piattaforma in modo da essere disponibile senza invito.\n Non solo: era disponibile solo per iOS. Anche questo, rendeva il tutto più esclusivo, soprattutto per chi è già legato alla strategia di esclusività rispetto ai prodotti che acquista e utilizza, com’è nella filosofia del marketing Apple da sempre.\n Verso la metà di febbraio del 2021, hanno raggiunto un altro dei loro più grandi traguardi. Hanno raggiunto 10 milioni di utenti sulla loro piattaforma, il che è impressionante per un\u0026rsquo;app social online da meno di un anno.\n Da qui, è possibile trarre alcune informazioni:\n   iPhone sicuramente è un’ottima piattaforma per lanciare la tua idea di app;  La gente ama sentirsi parte di un’élite.  Solo verso la fine della prima metà del 2021, hanno ampliato la disponibilità dell’applicazione anche agli utenti Android.\n Tuttavia, a differenza del mercato Apple, questo ha fatto a malapena la differenza.\n Oggi, Clubhouse è disperso, e nessuno ne parla più.\n Che fine ha fatto Clubhouse?  Nel luglio del 2021, Clubhouse ha terminato il suo sistema di inviti un tempo pubblicizzato e ha aperto l\u0026rsquo;app a tutti. Ad oggi, è a malapena al 49 posto per le app di social network, e non è tra le prime 50 app più scaricate nell’App Store.\n Per fare dei paragoni, è meno popolare di Skype, ma più di Marco Polo - Stay in Touch. Mai sentito parlare di Marco Polo? Scommetto di no.\n Vediamo allora le possibili cause.\n Nessuna community = no social network  Clubhouse all’inizio offriva un’alternativa molto valida ad uno spettacolo come il programma di Jimmy Kimmel o un luogo in cui le celebrità si incontrano e parlano della loro famiglia, dei risultati, delle passioni e dei progetti futuri, rendendo l’esperienza più reale.\n Perfino personaggi come Elon Musk e Mark Zuckerberg hanno tutti partecipato all’entusiasmo iniziale di Clubhouse. Tuttavia, il motivo per cui lo hanno fatto è stato perché, nel momento in cui hanno messo su le loro stanze, migliaia di persone stavano ancora utilizzando la piattaforma.\n  Un bellissimo specchiatto per le allodole.\n  Clubhouse era ancora la piattaforma social più gettonata in quel momento e quando gli utenti hanno smesso di utilizzare la piattaforma, ovviamente, non c\u0026rsquo;era più motivo per gli altri utenti di utilizzarla.\n Può sembrare una giustificazione banale? Se ci pensate, no. La maggior parte delle innovazioni “muore” nel momento in cui gli utenti smettono di vederne l’utilità.\n Dopotutto, questo potrebbe non contare più niente: il team di Clubhouse ad oggi ha milioni di dollari da spendere, quindi potrebbero investire un paio di quei milioni in ricerca e sviluppo e potrebbero riunire la squadra per il design, la creatività e la visione, cercare di ridare vita alla strategia dietro a questa app.\n Le persone hanno iniziato a tornare alla loro vita normale  La pandemia è stato un vero incubo, e ancora ne stiamo pagando gli effetti. I social in questo senso potrebbero essere stati -per certi versi- di grande aiuto per evadere dalla propria stanza e fare un giro per il mondo, sperando di vedere qualcuno che se la passasse come noi, per sentirci meno soli.\n  Anche per questo, il numero di utenti attivi giornalieri su Clubhouse è diminuito drasticamente dopo che le persone hanno iniziato a uscire e sono tornate alla loro vita normale.\n  Potremmo tenere conto del fatto che una parte cruciale del successo di Clubhouse inizialmente era perché tutti noi stavamo a casa.\n Basta pensare ai fleet, una delle ultime iniziative di Twitter che emulava le stories di Instagram o Facebook. Poco dopo la sperimentazione, e nonostante un discreto successo iniziale, Twitter si è reso conto che non era una funzionalità significativa per i suoi utenti, e ne hanno interrotto la funzione.\n  La mente delle persone cambia davvero molto velocemente, e questa è una delle ragioni per cui è molto difficile mantenere alta l’attenzione di un prodotto considerato “innovativo”.\n  Ancora più importante, Clubhouse non è riuscito a fare nulla di nuovo e diverso negli ultimi mesi.\n Ad esempio? Non è ancora possibile creare una chat.\n Hanno aggiunto solo di recente l\u0026rsquo;accesso Android, perdendo una fetta di target che nel frattempo ha perso l’entusiasmo.\n Il sistema basato su invito inizia a penalizzarti subito se inviti troppe persone, quindi ti siedi impotente con una o due persone in attesa che succeda qualcosa.\n  Clubhouse è stato quindi vittima della sua stessa crescita.\n  Man mano che l\u0026rsquo;app è diventata sempre più popolare, i follower hanno improvvisamente notato che non c’era più nulla di interessante da seguire o ascoltare, le funzionalità erano sempre le stesse e che già altre piattaforme offrivano delle esperienze simili o più interessanti.\n  Brutto a dirsi, ma Clubhouse è il classico esempio di “è stato bello, finché è durato”.\n Una piattaforma in rapido fallimento a causa di un\u0026rsquo;arena altamente competitiva.\n", "url": "https:\/\/theredcode.it\/why\/che-fine-ha-fatto-clubhouse\/" }, "https:\/\/theredcode.it\/tags\/clubhouse\/": { "title": "clubhouse", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/tags\/clubhouse\/" }, "https:\/\/theredcode.it\/categories\/general\/": { "title": "general", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/categories\/general\/" }, "https:\/\/theredcode.it\/tags\/social\/": { "title": "social", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/tags\/social\/" }, "https:\/\/theredcode.it\/tags\/data-scientist\/": { "title": "data-scientist", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/tags\/data-scientist\/" }, "https:\/\/theredcode.it\/tags\/marketing\/": { "title": "marketing", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/tags\/marketing\/" }, "https:\/\/theredcode.it\/voglio-diventare-un-data-scientist-nel-marketing\/": { "title": "Voglio diventare un… Data Scientist nel marketing", "tags": ["data-scientist","interviste","marketing",], "content": "Il Data Scientist è un mestiere che negli ultimi anni si sente sempre più spesso: si parla dei dati come del nuovo petrolio, e non è del tutto sbagliato.\n Questa professione però presenta diverse sfaccettature: come raccontato anche nell\u0026rsquo;articolo \u0026ldquo;Voglio essere un/a data scientist\u0026rdquo;, di cappelli ce ne sono davvero tanti e l\u0026rsquo;ambito specifico cambia completamente l\u0026rsquo;approccio all\u0026rsquo;attività che si deve portare avanti.\n Il marketing poi è un campo fondamentale in qualsiasi business, tanto che negli ultimi anni sono nate diverse professioni che sono focalizzate proprio su quest\u0026rsquo;area: vediamo quindi insieme ad Andrea Ciufo, Data Scientist @ CollidaScope Limited, cosa vuol dire essere e diventare un Data Scientist nel marketing.\n Descriviti in 100 parole.  Ciao sono Andrea Ciufo, sono un Data Scientist e lavoro a Londra come Marketing Mix Model Optimization Consultant nell’industria dei beni di largo consumo con Collidascope.\n Ho un passato accademico particolare, perchè sono un ingegnere civile e mi sono innamorato della Scienza dei Dati durante un esame di teoria delle infrastrutture viarie.\n È stato qui che ho scoperto l’applicazione delle reti neurali per la sicurezza stradale e mi sono innnamorato completamente di questa disciplina.\n Nel tempo libero mi piace leggere e raccontare sul mio blog delle avventure che mi capitano tra il Regno Unito e l’Italia.\n Potete seguirmi su uomodellamansarda.com, la versione italiana, o lovabledata.com, la versione inglese un po’ meno aggiornata.\n In cosa consiste il ruolo di Data Scientist?  Il mio lavoro consiste nell’applicare dei modelli statistici per supportare la valutazione delle performance delle campagne di marketing condotte dai nostri clienti. L’obiettivo è difficile ma chiaro, identificare le leve migliori per incrementare le vendite nell’industria dei beni di largo consumo.\n Lavoro a stretto contatto con il mio team, in particolare con un econometrista ed un managing director, entrambi con esperienze passate all’interno di grandi società di consulenza retail come DunnHumby e Dentsu.\n Oltre a questo una parte fondamentale del mio lavoro consiste nell’ascoltare i clienti durante i meeting per poter formulare correttamente i problemi e la ricerca delle relative soluzioni.\n Questo significa ritrovarsi nella cabina di regia del dipartimento marketing di ogni società con la quale collaboriamo e, come un ct nel calcio, osservare le interazioni e le performance dei vari canali di comunicazione e le varie attività di marketing in corso.\n La maggior parte di noi utilizza i social per parlare dei propri successi, ma la realtà è che siamo quel che siamo grazie al 90% dei nostri errori. Racconta il tuo più grande fallimento da quando lavori nel settore, che però ti ha reso ciò che sei.  Sicuramente ho commesso diversi errori nel mio percorso accademico e lavorativo dai quali ho imparato sempre molto.\n Sul piano strettamente tecnico e teorico, uno dei miei più grandi è stato quello di dimenticarmi della dipendenza tra le variabili che carattezzavano una serie storica.\n Lavoravo nell’industria alimentare e stavo costruendo la prima versione di un modello per le proiezioni di vendita che avrebbe permesso l’ottimizzazione della produzione e la riduzione degli sprechi.\n Ovviamente in fase di valutazione degli output mi sono accorto che non erano accettabili, ho identificato l’errore e corretto il modello.\n Come fare per diventare un Data Scientist?  Il percorso del Data Scientist sicuramente dipende dalla specialità che si vuole intraprendere, è un titolo che copre delle competenze che vanno dal data engineer al business analyst e purtroppo non si possono conoscere nel dettaglio tutte.\n Sicuramente c’è un file rouge che unisce tutte queste conoscenze: la passione, tanta passione.\n Non mi stancherò mai di dirlo e sembra quasi una banalità, ma è alla base di tutto.\n Oltre a questo è fondamentale avere delle basi solidissime di Analisi Matematica, di Calcolo delle Probabilità e di Statistica.\n Non servono certificazioni, anzi sono particolarmente scettico nei confronti di queste.\n Serve tanto studio, tanta pratica e fortunatamente internet è pieno di risorse gratuite.\n Il vantaggio di un corso di studi che sia fisico o online è la definizione di un persorso strutturato, delle scadenze legate agli esami o i progetti che velocizzano la curva di apprendimento e, a volte, la presenza di convenzioni per tirocini e stage all’interno del percorso stesso.\n Inutile dire che sono un grande sostenitore dei MOOC e dell’educazione libera e gratuita per tutti.\n Inoltre è importante ricordare che il percorso di studi per una certificazione o per un titolo, non coincide con le esigenze dell’azienda dove si vorrebbe lavorare.\n Parlando di successi, qual è il tuo prossimo obiettivo? Quale ruolo vorresti ricoprire entro i prossimi 3 anni?  Attualmente sto consolidando le mie conoscenze lato dati e programmazione con Python.\n In particolare le librerie che utilizzo con maggior frequenza sono Pandas, Scikit-learn, SciPy ed ogni tanto Prophet.\n Parallelamente sto costruendo un bagaglio di conoscenza legato alla commercializzazione e promozione dei beni di largo consumo, dalle funzioni di elasticità che caratterizzano la relazione prezzo-vendite di un prodotto alla correlazione tra spot televisivi-radiofonici e vendite.\n Questo ultimo punto forse è il più complesso perchè molto più aleatorio e richiede maggiore esperienza sul campo.\n In entrambi i casi il confronto costante con figure senior resta fondamentale.\n  Bisogna avere il coraggio di chiedere sempre un parere ed un opinione sul proprio percorso tecnico ed avere l’umiltà di accettare le critiche.\n  Quando poi queste sono particolarmente dure ed è fondamentale approfondirle ringraziando chi ha speso del tempo per ascoltarci e condividere il proprio punto di vista.\n Nei prossimi anno ho l’obiettivo di diventare Head of Analytics. La passione e l’impegno non mancano, bisogna solo avere pazienza.\n Conosci il tema gender gap in ambito STEM? Se sì, cosa puoi fare nel tuo piccolo per combattere questo problema?  Il gender gap nel settore STEM è un problema del quale sono consapevole ma non con il giusto grado di approfondimento\u0026hellip; Intendo dire che conosco il problema sul piano qualitativo, ma non sul piano quantitativo. Non sarebbe sbagliato tra gli obiettivi di breve termine che io mi informi un po’ di più sulla questione.\n Nel passato avevo letto delle ricerche pubblicate sulla Harvard Business Review sulle disparità salariali e di come queste non solo dipendessero dal gender, ma anche dall’orientamento sessuale (qui una abbastanza recente).\n È necessario interessarsi alla questione e supportare le varie iniziative ad essa legate, non solo per una questione di uguaglianza, ma anche e soprattutto perchè nell’ambito dell’innovazione la diversità è un valore aggiunto.\n Nel mio micro-universo ho provato a contribuire, ricordo che ad una cara amica ho regalato “Lean It: Women, Work, and the Will to Lead” di Sheryl Sandberg la COO di Facebook o di come durante le festività natalizie con molto piacere ho regalato dei giochi legati al mondo STEM a delle cuginette.\n In particolare in quest’ultima situazione il mio obiettivo era fin da subito scardinare un paradigma culturale totalmente sbagliato.\n La strada è ancora lunga, in particolare in Italia, ma sono circondato da amiche e da amici veramente in gamba che hanno preso di petto questo problema sensibilizzando e stravolgendo quelli che sono dei vecchi schemi, ormai obsoleti.\n Grazie Ciufo per aver condiviso la tua esperienza!\n Contatti Twitter @uomodlamansarda\nLinkedIn Andrea Ciufo\nBlog:\n uomodellamansarda.com lovabledata.com ", "url": "https:\/\/theredcode.it\/voglio-diventare-un-data-scientist-nel-marketing\/" }, "https:\/\/theredcode.it\/interviste\/voglio-diventare-un-data-software-engineer\/": { "title": "Voglio diventare un… Data and Software Engineer", "tags": ["interviste","voglio-diventare",], "content": "Il Data and Software Engineer è un mestiere piuttosto complesso: un po\u0026rsquo; analista, un quarto progettista, un altro quarto informatico, un altro po\u0026rsquo; statista.. insomma, le competenze sono trasversali.\nQuesta settimana Andrea Guzzo ci racconterà il suo punto di vista del suo lavoro in Moxoff, e non solo!\n Descriviti in 100 parole  Ciao! Sono Andrea Guzzo e sono un Computer Scientist, nel lavoro attualmente ricopro il ruolo di Data \u0026amp; Software Engineer in Moxoff. Mi occupo principalmente di portare in produzione, ingegnerizzare e far funzionare modelli che spaziano dalla Data Science alla matematica applicata.\nNel tempo libero faccio parte di alcune community, sono uno degli organizzatori di PythonBiellaGroup, TedX Busto Arsizio e MilanoR (Erum2020).\nPer il resto: Videogames, musica e fantascienza sono le mie passioni (ovviamente) :)\nIn cosa consiste il ruolo di Data and Software Engineer?  Il Data \u0026amp; Software Engineer è una figura professionale simile ad un Data Engineer e può avere diverse connotazioni. Come spesso accade nel mondo dell\u0026rsquo;informatica le attività spaziano a seconda del tipo di organizzazione in cui si collabora, al tipo di azienda, alla sua grandezza, se realizza prodotti software e molto altro ancora\u0026hellip;\n Per come lo intendiamo in Moxoff un Data \u0026amp; Software Engineer è una persona con un background fortemente tecnico-informatico che si occupa di far funzionare e mettere in produzione ricerche, modelli, POC, analisi, dashboard. In pratica costruisce l\u0026rsquo;infrastruttura software (spesso di backend) e quella legata ai dati di un progetto.\n Tipicamente lavoro in piccoli team autoconsistenti, in molti progetti sono accompagnato spesso da un Math Model Developer oppure da un Data Scientist che sono molto più verticali su modelli, statistiche, analisi e KPI.\n In altri progetti più grandi invece mi capita di lavorare con altre figure come la mia perchè lo stack tecnologico è solitamente più ampio.\n In Moxoff utilizziamo questa sinergia su tutti i nostri progetti che è fondamentale per portare in produzione e far funzionare i nostri progetti, che per per il 90% sono composti dall\u0026rsquo;insieme di: dati, modelli, equazioni, statistica e tanto codice.\n Qual è la soft skill più importante che deve possedere un Data \u0026amp; Software Engineer?  Oltre alla pigrizia (che è un requisito fondamentale :) ) direi sicuramente tutto ciò che è legato al Problem Solving.\n Spesso capita di affrontare problemi complicati, dati molto sporchi e variabili, modelli che non vogliono saperne di funzionare e tantissimi altri problemi, avere una buona skill di risoluzione di problemi, accompagnata da un buon pensiero critico, consente di essere flessibili, trovare la soluzione giusta al momento giusto ed evitare di sbattere (troppo) il muso sulle varie difficoltà che si possono incontrare durante il cammino.\n È certamente importante anche la capacità di sapersi relazionare bene e con una buona intelligenza emotiva con le altre persone, in particolare con gli altri membri del team. Requisito fondamentale per portare al successo qualsiasi attività progettuale.\n Ovviamente sono tutti aspetti che con l\u0026rsquo;esperienza, la formazione e la pratica è possibile migliorare e far crescere, ovviamente a fronte di un grande lavoro su se stessi.\nLa maggior parte di noi utilizza i social per parlare dei propri successi, ma la realtà è che siamo quel che siamo grazie al 90% dei nostri errori. Racconta il tuo più grande fallimento da quando lavori nel settore, che però ti ha reso ciò che sei.   Di errori ne ho commessi moltissimi e continuo a farne!\n  Più che essere i nostri errori a definire noi stessi direi che sono le risposte e le lezioni che riusciamo ad imparare dai nostri errori a costruire ciò che siamo e che saremo nel futuro.\n Un episodio emblematico che ha profondamente cambiato la mia etica lavorativa e l\u0026rsquo;approccio con gli altri (in particolare con il cliente) è un\u0026rsquo;esperienza vissuta nel precedente impiego durante un grande progetto in Microsoft.\n A causa di alcuni errori dovuti alla mia mancanza di conoscenza di alcuni aspetti tecnici, poca attitudine nell\u0026rsquo;attività che stavo svolgendo e impegno ho ricevuto una valutazione negativa da parte del cliente che ha comportato la mia esclusione dall\u0026rsquo;attività progettuale.\n All\u0026rsquo;inizio ho subito moltissimo a livello personale questa decisione, ma con il tempo ho imparato dai miei sbagli e ora cerco sempre di essere al 100% all\u0026rsquo;inizio e durante una nuova sfida, approfondendo aspetti tecnici richiesti, con un atteggiamento propositivo e positivo, ma soprattutto cercando di non farmi coinvolgere troppo a livello emotivo e personale dalle varie situazioni che si vengono creare sul posto di lavoro.\nCome fare per diventare un Data \u0026amp; Software Engineer?  Il mio è stato un percorso certamente variegato e mi sono trovato a fare questo lavoro guidato dalla passione e da una domanda: \u0026ldquo;ma è possibile che la maggior parte dei progetti legati al mondo dell\u0026rsquo;Intelligenza Artificiale rimanga spesso in fase di prototipo? Come mai non vanno in produzione?\u0026rdquo;.\n All\u0026rsquo;epoca ero un Data Scientist e mi occupavo principalmente di modelli e analisi dati, ma visto il mio background fortemente informatico e la continua ricerca alla risposta a questa domanda alla fine mi sono trovato a fare questo mestiere.\n Rispetto ad un Data Scientist quindi direi che la mia figura professionale ha delle competenze forti in ambito Computer Science simili a quelle di un Data Engineer, con un pizzico di conoscenza di modelli e di statistica, necessarie per affrontare i progetti più complessi.\n Se proprio vogliamo classificarla potrebbe somigliare ad un MLOps Engineer :)\n Infine le certificazioni certamente servono, ma penso che non definiscano un bravo programmatore o un esperto in un settore.\n Quello che certamente mi ha aiutato è l\u0026rsquo;esperienza sul campo, fare errori trovando e proponendo soluzioni, lavorare su progetti sfidanti, farsi guidare da colleghi più esperti, collaborare su progetti open source e non ultimo frequentare community, eventi di settore, persone; scambiandosi idee, codice ed esperienze.\n Parlando di successi, qual è il tuo prossimo obiettivo? Quale ruolo vorresti ricoprire entro i prossimi 3 anni?  Il mio prossimo obiettivo personale è quello di lavorare (sia dal punto di vista tecnico che umano) per diventare un buon team leader tecnico, cercando di acquisire una buona conoscenza degli strumenti e tecnologie attualmente sul mercato in modo da definire con efficacia, in base alle richieste e agli obiettivi progettuali, delle soluzioni valide e funzionali.\n Una specie di Architetto Software che sappia anche coordinare un gruppo di lavoro nella costruzione dell\u0026rsquo;architettura disegnata.\n  Una sfida certamente ambiziosa, ma non per questo meno stimolante :)\n  Conosci il tema gender gap in ambito STEM? Se sì, cosa puoi fare nel tuo piccolo per combattere questo problema?  Eccome! Vengo da una percorso universitario che per il 90% (se non di più) era a frequentazione maschile.\n È un problema estremamente complesso e molto sfaccettato, dal mio piccolo punto di vista cerco, assieme alla nostra community PythonBiellaGroup, di diffondere la cultura di python come linguaggio di programmazione, dell\u0026rsquo;open source e spiegando cosa vuol dire essere un informatico nel 2021.\n Ci piacerebbe moltissimo andare nelle scuole a parlare con i ragazzi spiegando come funziona il nostro mondo, ma è sempre molto difficile riuscire a trovare spazi di collaborazione.\n Credo e penso che questo sia un problema molto serio che va affrontato a partire dalla giovane età a partire dalla scuola, creando sinergie con varie community, con il mondo associativo, esperti di settore, università e ricercatori, in modo da avvicinare le ragazze alle discipline scientifiche suscitando curiosità e presentando il mondo in cui viviamo per quello che è davvero.\n Contatti Linkedin: https://www.linkedin.com/in/andreaguzzo/ Github: https://github.com/JeyDi  ", "url": "https:\/\/theredcode.it\/interviste\/voglio-diventare-un-data-software-engineer\/" }, "https:\/\/theredcode.it\/tags\/bestpractice\/": { "title": "bestpractice", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/tags\/bestpractice\/" }, "https:\/\/theredcode.it\/k8s-in-produzione-best-practices\/": { "title": "K8S in produzione: best practices", "tags": ["bestpractice","docker","kubernetes","produzione",], "content": "Sono sempre più frequenti le tecnologie appartenenti al mondo OCI: container a destra, pod a sinistra\u0026hellip;\n Installare e testare Docker o Podman localmente è semplice, ma cosa succede quando dobbiamo andare in produzione e abbiamo a che fare con Kubernetes?\n Definiamo quindi una checklist di verifiche da completare quando il nostro ambiente di produzione sta per entrare in funzione e vediamo quali sono le best practices per portare K8S in produzione!\n Docker vs. Kubernetes  Utilizzare Kubernetes dà l\u0026rsquo;opportunità di usare gli stessi strumenti che oggi usano le più grandi aziende nel mondo, le quali distribuiscono applicazioni basate su container.\n Perché questa scelta? Tengono fede a tutte le promesse fatte in materia di resilienza dell’architettura o del servizio, della robustezza e della sicurezza dell’applicazione; si tratta di comuni best practices da applicare sempre.\nSapevi da dove nasce il nome di Kubernetes?\nKubernetes, di base, è un sistema per l\u0026rsquo;esecuzione e il coordinamento di applicazioni containerizzate in un cluster di macchine. È una piattaforma progettata per gestire completamente il ciclo di vita di applicazioni basati su container fornendo degli strumento per gestirne scalabilità e alta disponibilità.\n Grazie ad una serie di funzionalità, è possibile ridimensionare i servizi, eseguire aggiornamenti continui e trasferire il traffico tra diverse versioni delle applicazioni per testare funzionalità o rollback di distribuzioni problematiche.\n K8S fornisce interfacce componibili che consentono di definire e gestire le applicazioni con alti livelli di flessibilità, potenza e affidabilità.\n La creazione di un singolo container da eseguire per uso personale non richiede molte risorse o qualche tipo di pianificazione; sicuramente avrete visto quanto sia semplice avviare un servizio Docker ed eseguire tramite pochi comandi l’avvio di un container per renderlo disponibile.\n La creazione di container su cui però fare affidamento per fornire servizi più complessi in modo sicuro, affidabile, aggiornabile e scalabile comporta una nuova serie di sfide.\n Ad esempio, distribuire un\u0026rsquo;applicazione che includa più componenti (es. un server Web, un database e un server di autenticazione), piuttosto che configurare il sistema per avere delle repliche in ​​caso di arresto anomalo di uno di questi, è fondamentale in un sistema su larga scala.\nDocker vs. Kubernetes\nArchitettura in 2 parole  Per capire come Kubernetes è in grado di fornire queste funzionalità, è utile avere un\u0026rsquo;idea di come è progettato e organizzato ad alto livello.\n Può essere visualizzato come un sistema integrato in livelli, in cui ogni livello superiore sottrae la complessità riscontrata nei livelli inferiori.\n Quello sottostante è uno schema abbastanza completo del funzionamento di Kubernetes: alla sua base, Kubernetes riunisce singole macchine fisiche o virtuali in un cluster utilizzando una rete condivisa per comunicare tra ciascun server.\nRappresentazione dei componenti dell\u0026rsquo;architettura K8S\nQuesto cluster è la piattaforma fisica in cui sono configurati tutti i componenti, le capacità e i carichi di lavoro di Kubernetes.\n A ciascuna macchina del cluster viene assegnato un ruolo all\u0026rsquo;interno dell\u0026rsquo;ecosistema Kubernetes: un server (o un piccolo gruppo in distribuzioni altamente disponibili) funziona come server principale, ed è quello che in figura si trova sulla sinistra, definito come “master”.\n Questo server funge da gateway e oltre che da “cervello” per il cluster, esponendo una serie di API per utenti e client e verificando l\u0026rsquo;integrità degli altri server, oppure decidendo il modo migliore per suddividere e assegnare il lavoro e orchestrando la comunicazione tra altri componenti.\n Il server principale funge da punto di contatto primario con il cluster ed è responsabile della maggior parte della logica centralizzata fornita da Kubernetes.\n Le altre macchine nel cluster sono designate come nodi (spesso chiamati minions) e sono i server responsabili dell\u0026rsquo;accettazione e dell\u0026rsquo;esecuzione dei carichi di lavoro utilizzando risorse locali ed esterne.\n Per aiutare nelle attività di isolamento, gestione e flessibilità, Kubernetes esegue applicazioni e servizi in container, quindi ogni nodo deve essere dotato di un’istanza del container.\n Il nodo riceve le istruzioni di lavoro dal server principale e crea o distrugge i container di conseguenza, configurando le regole di rete per instradare e inoltrare il traffico in modo appropriato.\nSemplificazione di un cluster K8S in produzione\nElenco degli oggetti principali del mondo K8S (e non solo!)\nEsempio di pod con tre container\nEsempio di Deployment con due pod in replica\nChecklist  Dopo questa (non) brevissima introduzione al funzionamento di Kubernetes, vediamo adesso una lista di controlli che costituiscono delle vere e proprie best practices e che sono fondamentali quando abbiamo a che fare con un ambiente di produzione (ma anche qualche stage prima!).\n Nota: alla fine di questo articolo, trovi anche un cheatsheet pronto da salvare per avere la checklist sempre a portata di mano!\n Healthcheck  Kubernetes offre due meccanismi per tenere traccia del ciclo di vita dei container dei pod: readiness probe e liveness probe.\n La prima determina se un container è pronto a ricevere delle richieste e quindi del traffico in ingresso, mentre la seconda determina se l’oggetto è ancora in esecuzione o meno.\n Grazie a queste “prove”, kubelet può decidere se instradare il traffico o se riavviare il pod.\n Attenzione però: non esiste un valore predefinito per definire l’esito positivo o negativo di questi test. Piuttosto, è buona pratica definire una convenzione rispetto alle verifiche che vengono effettuate.\n Se questi controlli non vengono configurati, kubelet presuppone che la nostra applicazione sia stata avviata correttamente e sia pronta a ricevere traffico non appena viene avviato il contenitore.\n Vediamo un caso d’uso: consideriamo il seguente scenario, dove c’è un\u0026rsquo;app con interfaccia grafica che dipende da un\u0026rsquo;API che costituisce il back-end.\n Se l\u0026rsquo;API è instabile (ad esempio, di tanto in tanto non è disponibile a causa di un bug), la readiness probe del back-end fallisce e anche la liveness del front-end; in questo caso, un errore all’interno di una dipendenza tra due componenti può propagarsi.\n In questo senso, può essere l’ideale testare le due componenti e fornire un esito positivo solo quando entrambe le verifiche vanno a buon fine!\n Gestione delle risorse  Spesso quando si ha a che fare con infrastrutture che lavorano su cloud, si pensa ad un pool infinito di risorse, ma difficilmente è così. Le risorse costano e i costi vanno tenuti in considerazione, impostando dei limiti di memoria e CPUper tutti i container.\n I limiti delle risorse vengono utilizzati per vincolare la quantità di CPU e memoria che i container possono utilizzare e vengono impostati utilizzando la proprietà delle risorse di un container, e non solo.\n Un numero illimitato di pod, in caso di utilizzo massivo, può portare a un impegno eccessivo delle risorse e a potenziali arresti anomali del nodo (e del kubelet).\n Tags  Le labels (o etichette) sono un meccanismo super utile che è possibile utilizzare per organizzare gli oggetti Kubernetes.\n Un\u0026rsquo;etichetta rappresenta una coppia chiave-valore senza alcun significato predefinito, quindi è possibile adattarla alle esigenze dettate dall’infrastruttura.\n Queste possono essere applicate a tutte le risorse presenti nel cluster, ed è possibile utilizzarle per classificare le risorse in base a scopo, proprietario, ambiente o altri criteri.\n Di seguito, riportiamo alcuni esempi utili, dove vengono utilizzate informazioni come il nome dell’applicazione (label con chiave name), oppure la versione (label con chiave version), a quale componente dell’infrastruttura ci si riferisce (ad esempio component).\n Puoi taggare i tuoi Pod con:\n apiVersion: apps/v1 kind: Deployment metadata:  name: deployment  labels:  app.kubernetes.io/name: user-api  app.kubernetes.io/instance: user-api-1234  app.kubernetes.io/version: \u0026#34;1.0.1\u0026#34;  app.kubernetes.io/component: api   O ancora proprietario, utilizzato per identificare chi è responsabile della risorsa (tag pari a owner), oppure il nome del progetto (tag uguale a project) o anche la business-unit di riferimento (ossia business-unit).\n apiVersion: apps/v1 kind: Deployment metadata:  name: deployment  labels:  owner: my-team  project: app-project  business-unit: \u0026#34;12345a\u0026#34;  Logging  I log prodotti dalle applicazioni possono aiutarci a capire cosa sta succedendo all\u0026rsquo;interno dei singoli servizi e sono fondamentali per monitorare le attività o per effettuare del debug.\n Generalmente, esistono due strategie di logging: passiva e attiva. Le applicazioni che utilizzano la gestione dei log passivi non sono a conoscenza dell\u0026rsquo;infrastruttura di logging e registrano i messaggi su output standard.\n Questa best practice fa parte del metodo dell\u0026rsquo;app a dodici fattori.\n Per quanto riguarda l’approccio attivo, l\u0026rsquo;applicazione stessa invia i dati a delle apposite applicazioni di gestione dei log, oppure li salva direttamente in un database.\n Questo tuttavia è considerato l’approccio peggiore!\n Scalabilità automatica  L\u0026rsquo;Horizontal Pod Autoscaler (abbreviato in HPA) è una funzionalità Kubernetes che permette di monitorare le applicazioni e aggiungere o rimuovere automaticamente repliche del pod in base all\u0026rsquo;utilizzo corrente delle risorse.\n La configurazione dell\u0026rsquo;HPA consente alla soluzione di rimanere disponibile e reattiva in qualsiasi condizione di traffico, inclusi picchi imprevisti o eventuali guasti.\n L\u0026rsquo;HPA può monitorare sia le metriche che fanno riferimento alle risorse integrate (CPU e l\u0026rsquo;utilizzo della memoria dei tuoi pod) sia sfruttando delle metriche personalizzate.\n Nel caso delle metriche personalizzate, sei anche responsabile della raccolta e dell\u0026rsquo;esposizione di queste metriche, cosa che puoi fare, ad esempio, con Prometheus e Prometheus Adapter.\n Gestione dell’accesso  Questo step si può riassumere in pochi, ma semplici punti:\n Applicare il principio del privilegio minimo, e quindi concedere agli utenti solo le autorizzazioni necessarie Adeguare continuamente la strategia RBAC, in quanto questa non è autosufficiente, ma è necessario adottare un approccio volto alla convalida continua della policy RBAC adottata. Definizione di un set di ruoli, che saranno poi assegnati e utilizzati adeguatamente, per non aumentare il rischio e la superficie di attacco.  Tips  Esternalizzare tutta la configurazione è molto importante, se si vuol rendere facilmente gestibile l’ambiente.\n Questo tipo di approccio ha diversi vantaggi, tra il cui il fatto che, utilizzando oggetti come ConfigMap e Secret, la modifica della configurazione non richiede la ricompilazione dell\u0026rsquo;applicazione.\n In Kubernetes, la configurazione può essere salvata in oggetti come le ConfigMaps, che può quindi essere montata in container tramite dei volumi dove queste informazioni vengono passate come variabili di ambiente.\n Attenzione: è importante montare i Secrets come volumi, e non come variabili di ambiente, per evitare che i relativi valori vengano visualizzati nel comando utilizzato per avviare il container, il quale potrebbe essere analizzato da utenti che non dovrebbero averne l’accesso!\n Risorse utili Download K8s in prod cheatsheet\n", "url": "https:\/\/theredcode.it\/k8s-in-produzione-best-practices\/" }, "https:\/\/theredcode.it\/tags\/produzione\/": { "title": "produzione", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/tags\/produzione\/" }, "https:\/\/theredcode.it\/interviste\/voglio-diventare-una-social-media-manager\/": { "title": "Voglio diventare un… Social Media Manager", "tags": ["interviste","voglio-diventare",], "content": "Sabrina è una ragazza brillante, solare e sempre sorridente: sono tutte caratteristiche fondamentali per il ruolo che ricopre e che cura con tanto amore e dedizione.\n Il ruolo di Social Media Manager è un ruolo che mi ha sempre affascinato: come funziona? Come si diventa bravi in questo settore? Quali competenze deve possedere?\n Lavorare con diverse community e aziende, trattare contesti sempre diversi, può essere certamente stimolante, ma anche difficile\u0026hellip;\n Vediamo dunque come lavora Sabrina e cosa significa essere una Social Media Manager all\u0026rsquo;interno dell\u0026rsquo;ambito tech e quali sfide ha dovuto affrontare!\n Descriviti in 100 parole.  Sono Sabrina e mi occupo di comunicazione digital per un’azienda informatica. Scrivo, creo contenuti per il web\u0026hellip; e per i social! Da che ho memoria amo scrivere e sono una persona creativa.\n Per questo, quando ho iniziato a muovere i primi passi nel mondo della comunicazione digital, i social media mi hanno conquistata subito permettendomi di dare libera espressione alla mia creatività.\n Anche se, non mi occupo soltanto di questo e il mio ruolo è più “orizzontale”, nel senso che mi occupo di social media e in generale di comunicazione digital a tutto tondo.\n  Sono quella che di solito chiami quando hai bisogno di aiuto su un testo.\n  Una mail? Una bio inviare per la call 4 speaker? O un post sui social, appunto! Quando non lavoro, divoro libri, vado ai concerti, viaggio e cammino. Amo il trekking e scoprire il mondo camminando.\n In cosa consiste il ruolo di Social Media Manager?  No, non siamo quelli che postano foto carine e simpatiche sui social dell’azienda 😂\n Il/La Social Media Manager è la persona che si occupa di gestire i canali social dell’azienda per cui lavora o del progetto/brand/iniziativa di cui cura la comunicazione social.\n Può lavorare come dipendente in azienda, o in agenzia di comunicazione, oppure come freelance. Per spiegarti di cosa si occupa, ti racconto la mia giornata tipo.\n La mia giornata tipo inizia con il check quotidiano dei canali social che gestisco: se ci sono commenti da gestire, menzioni a cui rispondere, crisi da risolvere. Ebbene si, delle crisi.\n Un commento negativo, o una discussione tra utenti, se gestiti male possono far nascere delle vere e proprie “crisi” con conseguenti danni di immagine. Tutte queste attività rientrano in quello che viene comunemente chiamato community management.\n Nel mio caso, lavorando in ambito tecnologico, mi occupo anche della gestione social di alcune community tech: prima fra tutte Django Girls Italia, e a seguire aiuto anche Python Italia.\n Successivamente, continuo con l’aggiornamento di piani editoriali, seguito dalla stesura di calendari editoriali. Questi strumenti sono fondamentali per un Social Media Manager.\n Il primo serve per progettare il tipo di contenuti che vogliamo pubblicare sui nostri canali; mentre il secondo serve per calendarizzare, con data, orario, copy del post e grafica, tutti i post che vogliamo pubblicare sui social che gestiamo.\n Quindi nella mia giornata tanto spazio è assorbito dalla pianificazione ma anche dalla scrittura dei post e, in alcuni casi, dalla creazione delle grafiche stesse.\n  Social Media Manager stereotypes\n Questo è uno degli aspetti che amo di più del mio lavoro perché mi da modo di esprimere la mia creatività. Non sempre al Social Media Manager viene chiesto di saper elaborare delle grafiche, ma se sai farlo, tanto meglio.\n Tutto dipende dall’ambiente in cui lavori: se lavori per una grande azienda o un’agenzia di comunicazione in cui ci sono team strutturati in cui ognuno ha il suo ruolo specifico (Graphic Designer, Social Media Manager, Social Media Advertiser ecc), oppure se lavori per una piccola azienda dove una sola figura deve ricoprire più funzioni.\n Per tornare alla mia giornata, prosegue con l’analisi delle performance, e quindi del monitoraggio di alcune metriche molto importanti - che ci mettono a disposizione le stesse piattaforme social - perché ci mostrano se i nostri contenuti stanno performando bene, cosa si può migliorare e cosa invece non sta funzionando ed è meglio accantonare.\n Nel mio caso specifico, il lavoro vero di pianificazione, creazione dei post, pubblicazione e monitoraggio lo svolgo in solitaria.\n Ma, come dicevo poche righe fa, questo dipende molto dalla realtà aziendale in cui ti troverai a lavorare. In passato, ho lavorato per agenzie in cui il lavoro era svolto completamente in team ed era bello per questo. Sono una fautrice del team working!\n Qual è la soft skill più importante che deve possedere una Social Media Manager?  È una vera cattiveria chiedermi di individuarne solo una!\nMa se devo scegliere direi l’intraprendenza e la proattività. Quello che intendo è non aver paura di sperimentare con tutti gli strumenti che le piattaforme social ci mettono a disposizione per comunicare con il nostro pubblico.\n Solo così conosceremo lo strumento, capiremo cosa funziona per noi e cosa no, e scopriremo anche i nuovi trend (immaginatemi mentre sto cercando di capire come funzionano i video su Tik Tok!).\n Se devo fare una classifica, a seguire metterei una buona abilità comunicativa. Ci aiuta sia nel lavoro di team ma anche nel capire che ogni piattaforma ha i suoi linguaggi sulla base dei quali dobbiamo calibrare la nostra comunicazione e costruire il messaggio.\n E infine, la capacità di pianificare e organizzare. Un/a buon/a Social Media Manager deve essere organizzato/a!\n Era impossibile citarne solo una! 😅\n La maggior parte di noi utilizza i social per parlare dei propri successi, ma la realtà è che siamo quel che siamo grazie al 90% dei nostri errori. Racconta il tuo più grande fallimento da quando lavori nel settore, che però ti ha reso ciò che sei.  Sicuramente rimasi molto male, quando qualche anno fa, dopo aver curato la comunicazione di un Django Girls a Roma che si sarebbe tenuto all’Università, esplose un vero e proprio flame di polemiche sterili. Avevo curato tutto nei minimi dettagli, per non urtare la sensibilità di nessuno, come richiedono questo tipo di eventi.\n Dispiace, quello si. Mi sono chiesta se potevo fare le cose diversamente ma la verità è che nei casi di alcune tematiche particolarmente sensibili ci sarà sempre una parte di pubblico che non si sentirà compresa, o non sentirà sua quella problematica e lo dirà.\n Lo dirà anche in modo poco educati, da dietro uno schermo. Dobbiamo fare i conti con questo aspetto. Cosa possiamo fare? Essere empatici e calarsi nei panni di chi leggerà la nostra comunicazione è fondamentale.\n Oltre ad essere strategici e moolto pazienti nella gestione della crisi che emergono da queste situazioni. Questo episodio mi ha insegnato a non sottovalutare mai questi due aspetti.\n In generale, i progetti a cui ho preso parte ma che potevano andare meglio hanno tutti un minimo comune denominatore, anzi due: mancanza di pianificazione e organizzazione e una scarsa strategia di comunicazione.\n Come fare per diventare una Social Media Manager?  La laurea non è essenziale ma avere delle solide basi di marketing e comunicazione digitale, branding, strategia di comunicazione, si! Per me l’Università è stata importante per questo.\n Ad oggi, i corsi di specializzazione per Social Media Manager sono moltissimi e sono un ottimo modo per intraprendere questo percorso. Potrai coniugare la teoria - magari già affrontata in un Corso di Laurea - agli strumenti e alle competenze più pratiche.\n Anche le risorse gratuite che si trovano online sono un buon modo per avvicinarsi alla materia ma da sole non sono sufficienti.\nPer fare questo lavoro, i social devono appassionarti. Devi viverli quotidianamente, usarli tu stesso per primo come utente, per capire le loro dinamiche. Devi essere creativo, curioso e dinamico.\n I cambiamenti non devono spaventarti e devi essere sempre pronto a conoscere le nuove funzionalità, piattaforme per cavalcare i nuovi trend.\n  È un mondo che cambia molto velocemente.\n  Io in questo periodo sto lottando con Tik Tok! Devi saper scrivere testi efficaci e calibrare il messaggio che vuoi mandare in base al canale su cui stai scrivendo, al tuo target e all’obiettivo che vuoi ottenere.\n Quello che mi sento di dire è che la differenza in questo settore la fa la pratica sul campo. È retorica? Probabilmente si, ma è anche altrettanto vero. È importantissimo sperimentare e sporcarsi le mani. Inizia da piccoli progetti, anche personali per capire le dinamiche social, creare contenuti e vedere cosa funziona di più.\n Se sei all’inizio, i progetti più piccoli sono quelli che potrai inserire nel tuo curriculum o in un eventuale portfolio da mostrare in sede di colloquio. Un piccolo trucchetto? Non hai progetti da inserire in un portfolio? Creali tu. Crea un brief e sulla base di quello mostra cosa puoi realizzare a livello social.\n Anche io, all’inizio ho gestito le pagine Facebook più disparate: collaboravo con un magazine online che si occupava di serie tv e gestivo la loro pagina facebook nel tempo libero; per un brevissimo periodo ho collaborato con alcune community local di promozione del territorio su Instagram; ho anche aperto un blog personale - tristemente non aggiornato 😅 - per parlare di social.\n Per me sono stati importantissimi anche i molti, molti, molti stage che ho fatto dopo il mio percorso formativo. Tutte esperienze che mi hanno permesso di imparare da chi già ricopriva questo ruolo, oltre a farmi scoprire anche quale contesto lavorativo mi piaceva di più.\n Ero più una social media manager da agenzia o da ufficio marketing e comunicazione? Un aspetto che ritengo importantissimo e mi ha guidata successivamente nella ricerca di opportunità di lavoro.\n Le certificazioni sono utili ma non fondamentali. Io ad esempio non ne ho, anche se non escludo di conseguirle in futuro. Tra le più famose ci sono quelle rilasciate da Facebook. Se le possiedi tanto meglio, ma non ti servono per iniziare.\n Ti serviranno per “certificare”, quando avrai già fatto un po’ di esperienza sul campo che sei un/a professionista “certificato” e competente.\n  Per riassumere: fai tanta tanta tanta pratica! Buttati anche se ti senti ancora alle prime armi.\n  Parlando di successi, qual è il tuo prossimo obiettivo? Quale ruolo vorresti ricoprire entro i prossimi 3 anni?  Voglio continuare a crescere in questo ruolo, acquisire ancora più esperienza e t_rovare nuovi progetti stimolanti e con un impatto_ in cui buttarmi. Tra tre anni mi vedo sempre nel mondo dei social, della comunicazione digital e nel settore tecnologico.\n Come dicevo qualche riga sopra, lavoro per un’azienda informatica, e nel settore tech ho scoperto un ambiente stimolante, interessante, ricco di bellissime persone che hanno avuto un forte impatto sulla mia vita professionale ma anche personale, tanto che vorrei continuasse a far parte del mio percorso.\n Mi vedo anche a creare strategie social e magari a guidare un vero e proprio team di comunicazione.\n Conosci il tema gender gap in ambito STEM? Se sì, cosa puoi fare nel tuo piccolo per combattere questo problema?  Da donna sono sempre stata sensibile alle questioni sociali legate al raggiungimento della parità di genere.\n Da quando lavoro in ambito tech ho poi scoperto che ci sono settori, compreso quello tecnologico, in cui il divario di genere è numericamente schiacciante, sia a livello di numeri che di salario. Ma la cosa bella è stata scoprire di poter fare qualcosa per migliorare la situazione.\n Dal 2018 sono una delle organizzatrici e community manager di Django Girls Italia, una community che si occupa di far avvicinare le donne al mondo della programmazione attraverso l’organizzazione di workshop pratici e faccio parte dell’associazione no-profit Fuzzy Brains che ha l’obiettivo di abbattere il divario di genere in ambito tech e rendere il mondo tecnologico più inclusivo.\n In questi progetti, ogni giorno metto il cuore. Il mondo STEM e quello tecnologico sono settori che ancora soffrono di inutili stereotipi e pregiudizi di genere.\n I dati statistici sulle percentuali di occupazione dimostrano chiaramente che c’è ancora molta resistenza da parte di studentesse, donne, e altre minoranze, di intraprendere percorsi in questi ambiti.\n È un problema in larga parte culturale, che dobbiamo assolutamente superare. Il settore IT sarà uno dei protagonisti in termini di occupazione nel prossimo futuro e non possiamo permetterci che sia sottorappresentato.\n  Abbiamo bisogno di diffondere una maggiore cultura della diversità e dell’inclusività, in generale, e nel settore tech. Con Fuzzy Brains, che supporta la community Django Girls in Italia, ci occupiamo proprio di questo e io sono contentissima di poter fare la mia parte e mettere le mie competenze a servizio di questi progetti.\n Grazie a Sabrina per aver condiviso la sua esperienza!\n Contatti - LinkedIn\n ", "url": "https:\/\/theredcode.it\/interviste\/voglio-diventare-una-social-media-manager\/" }, "https:\/\/theredcode.it\/persi-senza-google-maps\/": { "title": "Persi senza Google Maps", "tags": ["random",], "content": "Ti è mai capitato di fermarti a pensare come faresti ad andare ad un evento dall’altra parte della città, se non avessi installata qualche app che ti faccia da navigatore?\n Nascere nella generazione in cui è “impossibile perdersi” è una grandissima fortuna. Nessuno dopo di noi, neanche una sola generazione, potrà avere la sensazione di essersi perso così come lo sono state le generazioni prima di noi.\n La realtà è che siamo persi senza Google Maps, letteralmente.\n Intro  Immagina di trovarti in vacanza. Immagina di aver dimenticato il telefono in albergo e di avere una prenotazione in un ristorante nel giro di pochi minuti, ma di trovarti in un posto di cui non sai assolutamente nulla. Che fare?\n La rivoluzione di Google Maps ha toccato dei terreni inesplorati: la frustrazione e la paura che derivano dalla sensazione di perdersi in un territorio sconosciuto.\n La vergogna che si provava a causa dell’incapacità di seguire le indicazioni dettagliate nel Tuttocittà che erano state accuratamente studiate e stampate il giorno prima di un viaggio. L\u0026rsquo;ansia di accostare per chiedere indicazioni a una stazione di servizio. E così via.\n Google Maps rappresenta una di quelle tecnologie di cui si è ampiamente sottostimato il valore e l’impatto.\n Mentre viaggio e mi sposto in giro per il mondo -certamente, prima del Covid-19-, si diventa più consapevoli delle proprie capacità di confidare di essere sulla strada giusta verso la mia destinazione solo grazie ad un telefono.\n La comoda ignoranza di non sapere dove siamo, di sapere quanto abbiamo viaggiato e di quanto tempo ci aspetta prima di arrivare a destinazione, se ci sarà parcheggio o se sarà affollato, sono tutte informazioni che prima erano impensabili.\n  Cristoforo Colombo sarebbe stato un uomo qualunque, se Google Maps fosse esistito già nel 1400.\n  Mentre la navigazione attraverso il classico navigatore GPS ha seguito un percorso contorto verso l\u0026rsquo;obsolescenza, Google Maps ci ha portato il mondo intero.\n Oggi in tutto il mondo le persone atterrano a New York, a Tokyo, al Cairo o persino nella Repubblica Democratica del Congo senza avere la più pallida idea di quale strada dovrà portarli in albergo o se la città sia quella giusta.\n Ovunque, scendono dagli aerei in una terra straniera, in un posto in cui non sono mai stati, e indovina un po\u0026rsquo;, sanno dove sono\u0026quot;.\n Ma\u0026hellip;\n Che cos’è Google Maps?  La piattaforma Google Maps, formalmente nota come API di Google Maps, nasce nel 2005 e da qualche anno ha lanciato diversi aggiornamenti che stanno interessando sia gli sviluppatori che gli imprenditori.\n Google Maps funge sia da motore di ricerca per trovare informazioni su aziende e attività locali, sia da mappa per indirizzare gli utenti verso quella posizione.\n Ciò è particolarmente importante poiché il 30% di tutte le ricerche da dispositivi mobili è basato sulla posizione, il che significa che Google Maps rappresenta un fattore critico per il traffico mobile.\n Un difetto? Le foto sono state “schiacciate” per essere adattate al servizio, anche se in realtà si tratterebbe di ortofoto.\n Posti insoliti  Il tutto ha però anche un lato comico: vediamo qualche esempio di posti divertenti (e straordinari) da guardare seduti comodamente a casa propria.\n Un aereo tra gli alberi\n Gesù ti ama\n Gli stagni di potassio in Utah\n Un branco di bufali in corsa\n Il Gigante di Atacama in Cile\n  Meteor Crater Visitor Center\n  La sede di Batman\n E poi\u0026hellip;  Google Maps è però solo uno dei primi progetti nati su questo tema: pensiamo anche a Google Earth.\n E se volessimo volare fuori dal pianeta?\n Google Earth Pro è gratuito e disponibile per tutti i sistemi operativi. Ci permetterà di fare un bel giro per l\u0026rsquo;universo\u0026hellip;\n Google Mars è un\u0026rsquo;applicazione all\u0026rsquo;interno di Google Earth che è una versione dello stesso programma, ma per le immagini del pianeta Marte.\n Una foto di Marte\n Google gestisce anche una versione basata su browser, sebbene le mappe abbiano una risoluzione molto più accurata all\u0026rsquo;interno di Google Earth e includano terreno 3D, nonché immagini a infrarossi e dati di elevazione.\n Ci sono anche alcune immagini ad altissima risoluzione della telecamera HiRISE del Mars Reconnaissance Orbiter che hanno una risoluzione simile a quelle delle città sulla Terra.\n Marte ha anche una piccola applicazione trovata vicino in una certa zona di Marte. Si chiama Meliza, un personaggio robot con cui l\u0026rsquo;utente può parlare. Spoiler: è abbastanza diffidente!\n Un estratto della conversazione con Meliza\n Infine, quella che originariamente era un\u0026rsquo;applicazione browser, Google Moon è una funzione che consente l\u0026rsquo;esplorazione della Luna. Google ha portato la funzione su Google Earth per il 40° anniversario della missione Apollo 11 il 20 luglio 2009.\n Foto della Luna\n Infine, Google Sky: possiamo esplorare tutte le costellazioni ad ora note inserendo le coordinate della carta celeste, nel formato [ascensione retta] [declinazione] (ad esempio: 12h 46m 10.1s +30° 43′ 55″).\n Galassie topo, parte della Chioma di Berenice\n", "url": "https:\/\/theredcode.it\/persi-senza-google-maps\/" }, "https:\/\/theredcode.it\/tags\/random\/": { "title": "random", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/tags\/random\/" }, "https:\/\/theredcode.it\/categories\/random\/": { "title": "random", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/categories\/random\/" }, "https:\/\/theredcode.it\/voglio-diventare-una...-digital-transformation-consultant\/": { "title": "Voglio diventare una... Digital Transformation Consultant", "tags": ["interviste","voglio-diventare",], "content": " La serie di articoli a tema \u0026ldquo;cosa voglio fare da grande\u0026rdquo; continua e ogni martedì porterà un ospite diverso, che racconterà quello che è il suo lavoro secondo l\u0026rsquo;esperienza che vive giorno dopo giorno.\n Questa settimana passa la parola a Flavia Marzano, che tra i tanti cappelli ha indossato anche quello di Digital Transformation Consultant.\n Donna con una carriera professionale incredibile, ci ha messo del suo per migliorare la città in cui ha vissuto negli ultimi anni. Ha fatto della sua professione una vera e propria missione, portando avanti delle iniziative che hanno fatto la differenza non solo in ambito digitale, ma toccando temi importantissimi come l\u0026rsquo;accessibilità.\n Ma partiamo dall\u0026rsquo;inizio\u0026hellip;\n Descriviti in poche parole  Sono laureata in Informatica qualche decennio -\u0026ldquo;secolo\u0026rdquo;- fa e ho fatto una tesi basata sull\u0026rsquo;Intelligenza Artificiale, quando di Intelligenza Artificiale quando se ne parlava ancora molto poco.\n Adesso per fortuna si comincia a vedere anche nelle imprese e nella pubblica amministrazione.\n Per più di trent\u0026rsquo;anni ho fatto la consulente nella pubblica amministrazione, anche se all\u0026rsquo;inizio non si parlava di Digital Transformation, ma più di \u0026ldquo;innovazione tecnologica\u0026rdquo;.\n Parliamo di un periodo in cui alcuni comuni non avevano neanche la rete, quindi possiamo parlare di un\u0026rsquo;altra epoca, anche se in fondo siamo solo a trent\u0026rsquo;anni di distanza\u0026hellip;\n  L\u0026rsquo;utilizzo della tecnologia nella pubblica amministrazione all\u0026rsquo;anagrafe o alla ragioneria era qualcosa di avveniristico.\n  All\u0026rsquo;inizio il mio compito era anche quello di aiutarli predisponendo capitolati che permettessero la digitalizzazione, e posso dire che ho visto cose che voi umani\u0026hellip; cosa da raccapriccio!\n Purtroppo capita molto spesso che, in comuni piccoli e grandi, vengano usati gli stessi software da più di trent\u0026rsquo;anni, perché \u0026ldquo;hanno sempre funzionano così bene\u0026hellip;\u0026rdquo;.\n Questo descrive l\u0026rsquo;importanza della Digital Transformation, anche nella politica: una maggiore consapevolezza avrebbe sicuramente evitato diverse situazioni come queste!\n Qual è la soft skill più importante per questa professione?  La consapevolezza digitale. La prima cosa che devi fare quando arrivi a lavorare in un settore come questo della pubblica amministrazione, è farsi fare un elenco dei contratti in essere: cosa viene usato, da quando, quando scadono le licenze\u0026hellip;\n Software? Anche chi non è strettamente tecnico, dovrebbe tenere in considerazione che c\u0026rsquo;è bisogno del digitale. Perché non far sì che i dipartimenti collaborino?\n Adesso c\u0026rsquo;è una figura -obbligatoria- che è il Responsabile della Transazione Digitale e proprio perché non è necessario essere \u0026ldquo;esperti informatici\u0026rdquo;, questo ruolo diventa fondamentale per gestire al meglio le risorse a propria disposizione.\n Questo software è vecchio, che alternative abbiamo? Questo software funziona bene, può essere utile ad altri dipartimenti?\n  Purtroppo lavorare per silos \u0026ldquo;informativi\u0026rdquo; non aiuta: sono necessari momenti di lavoro condiviso, fare lavoro di squadra, spesso così i progetti vengono meglio -e costano meno-.\n  Un esempio: che cosa fa un cittadino romano medio che vede la neve per strada? Guarda sul sito di Roma se è stata lanciata un\u0026rsquo;allerta meteo e se le scuole saranno chiuse.\n In questo caso, sono necessari diversi step, come la comunicazione.\n Serve un banner gigante in prima pagina che permetta agli utenti di rilevare subito l\u0026rsquo;informazione, e non qualcosa che i cittadini devono andare a cercare in giro per il sito.\n Per queste attività è fondamentale avere competenze digitali che siano trasversali: sono tutte cose che si devono e si possono imparare, e non valgono solo per le persone strettamente \u0026ldquo;tecniche\u0026rdquo;.\n Per non parlare di usabilità, data driven design, e soprattutto accessibilità. Parliamo di una legge di più di 16 anni fa, che però richiede ancora tanto lavoro.\n Quando il portale (di Roma) è stato rifatto, è stato prima messo in beta test online, per chiedere agli utenti che cosa funzionasse e cosa no, cosa trovassero facilmente e quale fosse la loro esperienza.\n Non solo: l\u0026rsquo;ho abbiamo fatto analizzare dall\u0026rsquo;Unione Italiana Ciechi Ipovedenti che lo hanno studiato e ci hanno mandato tanti suggerimenti essenziali che ovviamente abbiamo adottato!\n Alla fine di questa esperienza, ho ricevuto una bellissima mail dove mi hanno fatto notare che se tutti i siti della pubblica amministrazione fossero così, i problemi di accessibilità sarebbero drasticamente ridotti.\n E sia chiaro, non perché sono brava io: ho solo posto attenzione all\u0026rsquo;utente finale, togliendo il cappello tecnico e vestendo i panni di chi usa effettivamente il servizio e investendo nella comunicazione e nel trovare un linguaggio comune.\n Esempio pratico? Se un medico ti parla di RMN, non tutti hanno le capacità per capire che si tratta di Risonanza Magnetica Nucleare.\n Allo stesso modo, non tutti sanno che cosa significa avere a disposizione servizi digitalizzati, come la richiesta di un certificato.\n E non solo: se una persona avanti con l’età e con poca familiarità con le tecnologie ha difficoltà, figuriamoci chi magari è a Roma di passaggio e conosce poco la lingua! Ed ecco come sono nati i punti Roma Facile.\n  Il \u0026ldquo;nessuno escluso\u0026rdquo; parte anche da questo.\n  Nei social passa sempre il messaggio del \u0026ldquo;ce l\u0026rsquo;ho fatta\u0026rdquo;, ma parliamo di quando va male.\n Nella tua carriera, qual è stato il più grande fallimento?  Nella mia ultima esperienza c\u0026rsquo;è stato un episodio per cui non riesco a trovare un aggettivo: durante alcune riunioni, provando ad essere una persona educata, alzavo la mano per poter dire la mia durante le varie discussioni.\n Non una volta, ma tante volte, inutilmente. Vedendo che al mio gesto non veniva dato seguito, una volta in cui era davvero importante quello che volevo dire perché a mio avviso si trattava di una delibera sbagliata, mi sono alzata dopo aver verificato che avevano ugualmente il numero legale.\n La sindaca allora mi ha chiesto spiegazioni, dopo le quali ha tolto la delibera dall’ordine del giorno.\n Mi pento di non aver fatto più spesso, e quindi di non aver fatto sentire la mia voce, magari alzandola -come hanno fatto tanti miei colleghi, perlopiù maschi-.\n  Mi vergogno di non aver parlato quando avrei dovuto, perché magari avrei potuto fare la differenza!\n  Tema gender gap in ambito STEM: cosa fare sul serio, e cos\u0026rsquo;hai fatto tu nel tuo piccolo?  \u0026ldquo;Nel mio piccolo\u0026rdquo; è giusto, perché sapessi il mondo quant\u0026rsquo;è grande.. Sicuramente partire dalle elementari: purtroppo e per fortuna le bambine e i bambini sono condizionati dai loro genitori, e sappiamo che nella società la tecnologia è un qualcosa che viene associato ai maschietti.\n Insegnare alle scuole elementari alla bambine e ai bambini che cosa sono le scienze, a che cosa servono, e trasformarle in un gioco, farebbe davvero la differenza. Se in una classe ci fosse un potenziale nuovo Einstein, questo/a magari verrebbe sottovalutato/a e non valorizzato/a come invece dovrebbe, per colpa di una mancanza di competenze non solo digitali ma anche di scienze di base.\n E questo per cominciare\u0026hellip; Creare poi dei momenti formativi non solo per i bambini, ma per i docenti. Iniziative come l\u0026rsquo;Ada Lab e il CoderDojo sono fondamentali per aiutare e supportare anche le più giovani per entrare in questo meraviglioso mondo.\n  Questi sono momenti per far apprezzare il gioco che c\u0026rsquo;è dietro la programmazione, che non è assolutamente lontano dal mondo femminile, anzi!\n  In questo senso, l\u0026rsquo;associazionismo aiuta tanto. Bisognerebbe mettere a fattor comune le competenze e sfruttare le community locali che hanno a cuore questo tema, organizzando eventi che siano in grado di raccogliere queste donne e fare coaching. Io lo faccio, aiutando le ragazze a capire che possono e devono avere più fiducia in sé stesse!\n Aiutare i docenti a identificare le ragazze e i ragazzi nelle loro propensioni e fare da mentori è importantissimo: io ho fatto il classico a Roma e ricordo bene quando la mia professoressa di filosofia, arrivati in fondo al percorso scolastico, mi chiese che cosa volevo fare \u0026ldquo;dopo\u0026rdquo;. Le risposi che le mie due passioni erano le lingue e la matematica.\n Lei mi rispose: \u0026ldquo;Perché non ti iscrivi ad informatica?\u0026rdquo;. Era il 1973: io non sapevo neanche che esistesse, perché a Roma non c\u0026rsquo;era. Mi portò un libro di algebra booleana, me lo sono letto e me ne sono totalmente innamorata.\n Qual è il tuo prossimo obiettivo?  Difficile questa\u0026hellip; ok, ce l\u0026rsquo;ho. Fare formazione alla classe politica italiana. Io non sono in nessun partito, ma dico che se anche istituzioni come Camera o Senato mi autorizzassero e supportassero nel fare formazione sul digitale, sarebbe una grandissima opportunità.\n Basta guardare le varie linee programmatiche: manca quasi sempre un obiettivo che sia concreto e misurabile. Anche gratis, regalo il mio tempo, per fare formazione ad assessori, sindaci, deputati. Vorrei poter trasmettere a queste persone il minimo che permetta loro di avere a cuore la trasformazione digitale.\n Vorrei che quelle digital soft skill fossero ben assimilate e chiare: open source, blockchain e anche intelligenza artificiale, sono tematiche fondamentali e bisogna avere la consapevolezza e la conoscenza di argomenti come questi che ormai sono all\u0026rsquo;ordine del giorno.\n Non a caso, con gli Stati Generali dell\u0026rsquo;Innovazione avevamo prodotto un ebook -che andrebbe aggiornato perché ormai ha 6 anni- che parlava delle le parole dell\u0026rsquo;innovazione che un politico non può ignorare.\n Oltre a tematiche come l\u0026rsquo;Open Data, si parlava anche della legislazione vigente, e del perché questa tematica andrebbe affrontata e valutata. Dobbiamo assolutamente aggiornarlo.. Proviamoci!\n ", "url": "https:\/\/theredcode.it\/voglio-diventare-una...-digital-transformation-consultant\/" }, "https:\/\/theredcode.it\/101-funzioni-async\/await\/": { "title": "101 - Funzioni async\/await", "tags": ["javascript",], "content": "Le funzioni async/await sono l’incubo di tutte le persone che iniziano a lavorare con tecnologie come Javascript, ma in realtà sono tanto facili quanto ordinare una pizza con un\u0026rsquo;app di consegna a domicilio.\n Comprendere una funzione asincrona e farla cooperare con altre funzioni, può sembrare difficile, ma non è assolutamente così.\n In questo articolo, diamo quindi un’occhiata a come rendere le funzioni async/await super facili!\n Che cos\u0026rsquo;è un\u0026rsquo;attività asincrona?  Un\u0026rsquo;attività asincrona consente di completare altre attività mentre l\u0026rsquo;attività asincrona è ancora in fase di completamento. In altre parole, questa funzione verrà eseguita in maniera indipendente rispetto alle altre e manderà una notifica o un evento quando avrà terminato.\n Prendiamo come esempio l’ordine di una pizza su una qualsiasi app di consegna a domicilio.\n Scegli la pizza, mandi l’ordine (async) e chiudi l’app. Nel frattempo che attendi la conferma (await), accendi la TV e scegli che film vedere la sera, mentre la struttura avvia la preparazione dell’ordine e cucina la tua pizza (async).\n Un altro esempio? Una funzione asincrona è quando lavi il pavimento della cucina (async) e mentre aspetti che si asciughi (await), vai a mettere su una lavatrice (async).\n Torniamo al nostro esempio principale e iniziamo a scrivere un po’ di codice!\n Hands on!  Diciamo che vogliamo ordinare una pizza in quel ristorante napoletano sotto casa che ci piace tanto. Il primo passo è aprire l’app e scegliere la pizza; una volta inviato l’ordine, scegliamo il film per la serata e aspettiamo che la pizza sia pronta.\n Quando il rider sarà partito dalla struttura, riceveremo un messaggio e aspetteremo con ansia che il campanello suoni. Ci siamo?\n Ok, procediamo!\n // Funzione per ordinare la pizza const orderPizza = async () =\u0026gt; {  console.log(\u0026#39;Pizza has been chosen and order has been sent! Wait for the confirmation\u0026#39;);  const response = await orderConfirmed();  console.log(response); } // Funzione asincrona che aspetta la conferma dell\u0026#39;ordine const orderConfirmed= async () =\u0026gt; {  return new Promise(resolve =\u0026gt; setTimeout(() =\u0026gt; {  resolve(\u0026#39;Thanks for your order! Pizza is on its way to the oven!\u0026#39;)  }, 3000)); } // Funzioni accessorie const getPizza = () =\u0026gt; console.log(\u0026#39;Order pizza.\u0026#39;); const chooseMovie= () =\u0026gt; console.log(\u0026#39;Opening Netflix and choosing a movie for tonight.\u0026#39;); const watchTV = () =\u0026gt; console.log(\u0026#39;Watching movie.\u0026#39;); // Eseguiamo le funzioni getPizza(); orderPizza(); chooseMovie(); watchTV(); // Output Order pizza. Pizza has been chosen and order has been sent! Wait for the confirmation Opening Netflix and choosing a movie for tonight. Watching movie. Thanks for your order! Pizza is on its way to the oven!  ll risultato è quanto prodotto dalle funzioni asincrone: mentre scegliamo la pizza e ordiniamo (funzione orderPizza()), noi ci sediamo sul divano pronti per un po’ di Netflix (funzione chooseMovie() e watchMovie()) e aspettiamo che l\u0026rsquo;ordine venga confermato.\n Sembra paradossale, ma in Javascript funziona allo stesso modo.\n Breve sintassi sull\u0026rsquo;uso delle funzioni async/await. Credits to Il Blog di Andrea Merlin (https://amerlin.keantex.com)\n Notare però che quando si attende una risposta da una funzione asincrona, è necessario chiamarla all\u0026rsquo;interno di un\u0026rsquo;altra funzione che è sempre asincrona. Questo è ciò che vediamo sopra quando all\u0026rsquo;interno di orderPizza() viene chiamato orderConfirmed().\n Due punti chiave da ricordare:\n   Javascript NON attende il completamento di una funzione asincrona come orderPizza() prima di passare alle attività che seguono come watchTV() e chooseMovie().  Javascript attenderà una funzione asincrona come orderConfirmed() per completare e restituire i dati prima di passare all\u0026rsquo;attività successiva all\u0026rsquo;interno di una funzione asincrona padre. Lo vediamo nel momento in cui ci viene restituita la risposta finale.  E se l’esempio della pizza è chiaro, passiamo al caso in cui abbiamo bisogno di dati che devono essere restituiti da un servizio esterno, ed eseguire delle operazioni solo quando questi dati saranno pronti!\n Definiamo una funzione asincrona (riga 1) che, recuperati dei dati da un’API esterna, attende che questi dati siano restituiti (riga 3) e se la response ottenuta è positiva (riga 4) , li estrae in una nuova variabile (riga 5) li stampa a nei log (riga 6).\n const getTheData = async () =\u0026gt; {  try {  const response = await fetch(\u0026#39;https://jsonplaceholder.typicode.com/users\u0026#39;);  if (!response.ok) throw Error();  const data = await response.json();  console.log(data);  console.log(\u0026#39;End!\u0026#39;) } catch (err) {  console.error(err);  } } getTheData(); console.log(\u0026#39;Begin\u0026#39;); // Output Begin. // data End!  Che dici, è più chiaro ora come si usano le funzioni async/await?\n  Ti potrebbero interessare\u0026hellip; 101 - CORS Policy con Ionic e Node Come costruire un API Gateway con Express HttpClient GetAsync - Asynchronous Coding \u0026amp; Performance ", "url": "https:\/\/theredcode.it\/101-funzioni-async\/await\/" }, "https:\/\/theredcode.it\/tags\/javascript\/": { "title": "javascript", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/tags\/javascript\/" }, "https:\/\/theredcode.it\/categories\/javascript\/": { "title": "javascript", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/categories\/javascript\/" }, "https:\/\/theredcode.it\/tags\/big-data\/": { "title": "big-data", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/tags\/big-data\/" }, "https:\/\/theredcode.it\/tags\/big-data-analytics\/": { "title": "big-data-analytics", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/tags\/big-data-analytics\/" }, "https:\/\/theredcode.it\/voglio-diventare-una...-big-data-analyst\/": { "title": "Voglio diventare una... Big Data Analyst", "tags": ["big-data","big-data-analytics","interviste",], "content": " Determinazione: questa è la parola chiave con cui Maria racconta e vive la sua esperienza da Big Data Analyst. Entrare in un mondo a lei totalmente sconosciuto non è stato semplice, ma si è fatta strada in pochissimo tempo: nell\u0026rsquo;intervista di oggi, raccontiamo la sua storia, grazie alle sue stesse parole!\n A proposito: Maria cura anche una bellissima pagina Instagram a tema #tech. Trovi in fondo all\u0026rsquo;articolo il link!\n Descriviti in 100 parole  Ciao a tutti! Mi chiamo Maria e lavoro nel campo della Data Analysis e Big Data Engineering.\n Sono una ragazza di 23 anni e sono fiera del percorso professionale che sto percorrendo. Sono stata fin da piccola appassionata di informatica - smanettando con il mio primo Windows Vista -, ma non ci sono mai state le giuste opportunità per poter studiare questa materia; tuttavia, questo non ha fermato il mio obiettivo.\n Mi sono diplomata in relazioni internazionali per il marketing ed ho iniziato sin da subito il mio percorso lavorativo nell’amministrazione e contabilità. Non sentendomi parte di quel “mondo” sono uscita dalla mia “comfort zone” e ho ricominciato da capo con esperienze nel campo informatico. La scalata è stata graduale ma _molto veloc_e, fino a specializzarmi nell’analisi e trasformazione dei Big Data.\n In cosa consiste il ruolo di data scientist?  Il Data Analyst permette alle aziende di analizzare e aggregare i dati per creare nuovi modelli di business e generare vantaggio competitivo, trasformando dei dati grezzi in informazioni comprensibili.\n Raccoglie dati da diverse fonti, li organizza e li struttura per poi analizzarli e ricavarne informazioni utili per il business.\n Il Data Analyst spesso lavora partendo da un problema: collaborando con i manager dei diversi reparti aziendali (dal Marketing alla Logistica, dalla Produzione alle Risorse Umane, dalla Ricerca \u0026amp; Sviluppo al reparto Sales), con Project Managers e i Data Scientists (vedi capitolo a parte), identificando i problemi che rallentano il business e che possono trovare una soluzione tramite l’analisi statistica dei dati.\n Le sorgenti da cui provengono i dati da elaborare infatti possono essere molto varie, ad esempio software gestionali, database interni o forniti da fonti esterne, transazioni finanziarie, o anche sensori ambientali.\n Sono quindi dati con strutture differenti (valori alfanumerici, documenti, foto, video, audio…), che hanno bisogno di essere processati e organizzati in un formato uniforme che permette l’analisi e il confronto.\n Spesso la pulizia dei dati permette di evidenziare eventuali problemi nella raccolta di queste informazioni, che l’analista riferisce a chi di competenza.\n In alcuni casi è lo stesso Data Analyst il responsabile della creazione e mantenimento dei database e quindi deve occuparsi anche delle relative attività di debugging per migliorare le procedure di raccolta, gestione e conservazione dei dati.\n Le tecniche di data visualization che spesso deve impiegare nel suo lavoro sono infatti molto utili per rendere i risultati comprensibili anche per gli utenti che non hanno skills tecniche.\n Qual è la soft skill più importante che deve possedere una Big Data Analyst?  Le soft skills per me più importanti sono:\n Avere capacità analitica; Essere curiosi; Essere determinati a trovare a tutti i costi una spiegazione ad ogni problema.  Queste qualità possono essere maturate con il tempo e l’esperienza, ma sono fondamentali per lavorare, specialmente in questo ambito.\n Quello che noti immediatamente quando inizi in un’azienda è distinguere ed evidenziare le persone che hanno queste qualità, che hanno successo in azienda e sono un punto di riferimento per tutti i colleghi e gli “esecutori”, ovvero le persone che non hanno piena coscienza in quello che fanno.\n Spesso ai colloqui mi chiedono se sono convinta di fare questo lavoro e se ho ben chiaro le attività che si svolgono al suo interno.\n In alcuni casi, infatti, questo lavoro viene giudicato pesante o “monotono”, ma il problema è sempre lo stesso: in qualsiasi lavoro che intraprendi se non inizi con la giusta motivazione lo trasformerai TU in abitudine e monotonia.\n Avere la giusta attitudine è importantissimo specialmente quando il lavoro richiede molta responsabilità e coscienza nelle proprie azioni.\n Quando tratti dei dati spesso ti trovi in ambiti bancari o contesti molto importanti. Quando sei all’interno di un progetto, nella maggior parte dei casi, il tuo obiettivo è creare una struttura e una logica adatta per estrapolare i dati nel modo più efficiente possibile.\n Ovviamente una volta creata la logica viene anche testata ed è qui che si mettono in pratica le tue doti: quasi sempre ti troverai davanti ad una estrapolazione che dovrai analizzare fino al singolo caso, e applicare nel modo corretto tutte le logiche necessarie ed ottenere il risultato voluto.\n In poche parole, si è sia sviluppatore che tester allo stesso tempo, quindi la responsabilità cresce al momento che non puoi rinviare delle fix e rilasciare delle logiche che già sai non sono corrette.\n Detto questo, chi vuole lavorare come Data Analyst deve prima avere una chiara visione del mondo in cui si sta approcciando e soprattutto essere consapevole di quanta responsabilità e capacità di ragionamento devono essere presenti nella tua quotidianità.\n In questo caso, il mio carattere sembra esser costruito per questo tipo di lavoro: tendo a fare le cose sempre in modo frenetico, e la mia apprensione dà quello sprint in più per creare più velocemente un’analisi. Cerco sempre di avere il controllo della situazione e avere coscienza di ogni mia azione.\n  Prima e dopo un\u0026rsquo;elaborazione mi domando sempre da dove e perché ottengo i dati che sto visualizzando.\n  Questa parte mi porta molto vantaggio competitivo nel mio lavoro ma in certe occasioni può mostrarsi d’intralcio quando non hai più la situazione più sotto controllo a ridosso di scadenze o continue richieste del cliente, che rimescola tutte le carte e crea quella confusione nella mia mente che rallenta tutto lo sviluppo.\n La maggior parte di noi utilizza i social per parlare dei propri successi, ma la realtà è che siamo quel che siamo grazie al 90% dei nostri errori. Racconta il tuo più grande fallimento da quando lavori nel settore, che però ti ha reso ciò che sei.  Più che fallimenti, durante il mio percorso professionale ho dovuto affrontare ostacoli che mi hanno aiutata a formarmi tecnicamente e soprattutto caratterialmente. Grazie a queste esperienze, ho trovato una consapevolezza che prima non avevo, forse per paura, o forse perché non riuscivo a superare quei limiti che a volte ci imponiamo inconsciamente.\n Anche quando pensiamo di trovarci davanti a situazioni difficili da risolvere, dobbiamo riuscire ad andare oltre e imparare a evolvere la nostra forma.\n Per quanto riguarda gli errori si dice sempre la stessa frase “chi non fa non sbaglia”, nessuno ti da in mano un manuale da seguire per non commettere nessuno sbaglio e fare un lavoro perfetto. Per arrivare più vicini alla perfezione bisogna sbagliare tanto e a meno che un giorno non verrà installata una CPU nella nostra mente continueremo a sbagliare.\n  Uno degli errori che ricordo è fidarmi delle indicazioni dei più esperti senza avere la consapevolezza di ciò che si sta facendo.\n  Un consiglio che mi sento di dare è: non sottovalutare mai la tua intelligenza a prescindere dalla seniority che hai o da quanto la situazione sia delicata, non aver mai paura di mettere in dubbio ogni cosa prima di premere il tasto invio.\n Come fare per diventare una Big Data Analyst? Qual è il tuo prossimo obiettivo?  Ho trovato per caso questo lavoro! Ho risposto ad un’offerta come back-office e invece mi sono ritrovata a creare store procedure in SQL e da lì ha avuto inizio il mio percorso. In questo tipo di sviluppo, a differenza di quello web, ci ritroviamo ad un livello più basso e quindi meno evidente e spiegabile a livello di business, ma fondamentale per creare qualunque software strutturato.\n Per quanto riguarda la formazione, scegliere delle facoltà come ingegneria informatica oppure statistica da una buona base per questo tipo di lavoro.\n Non ci sono ancora molti percorsi ufficiali che ti formano in modo completo per questo tipo di professione, per cui quello che può aiutare è fare diversi corsi incentrati sull’analisi dei dati e sui maggiori linguaggi utilizzati per l’ETL e il machine Learning, come SQL, Python o Pyspark, particolarmente utile per la gestione dei Big data.\n Il mio prossimo passo è studiare per approfondire sempre di più questa nuova tecnologia: la blockchain. In vista alle garanzie che sta dimostrando, penso che in futuro tutta la gestione dei dati che posseggono le aziende dovrà essere trasformata per essere più sicura ed efficiente.\n  Un dato di fatto è che i dati diventeranno la ricchezza di ogni azienda e questi stanno crescendo molto velocemente; questo significa che si creeranno un sacco di nuove posizioni come analisti o architetti di dati, i quali avranno il compito di sapere come gestirli al meglio.\n  Conosci il tema gender gap in ambito STEM? Se sì, cosa puoi fare nel tuo piccolo per combattere questo problema?  Su questo argomento posso parlare delle esperienze vissute in prima persona.\n Partiamo dal fatto che nonostante la mia giovane età, in tempi di scuola, l’informatica veniva ancora considerata come una materia frequentata da uomini.\n In tutta la scuola industriale su 600 alunni ho contato 5 ragazze (e purtroppo per la prima impressione ho dovuto accantonare il mio percorso per scegliere un ambiente più “vivibile”). Nel mondo del lavoro invece non importa l’età o l’azienda in cui sei, conta l’intelligenza delle persone che ti circondano in quel momento.\n Se sei circondata da persone che seguono una certa etica a lavoro, non sentirai mai nessun tipo di differenza, neanche generazionale. Il problema è individuare le persone che purtroppo non condividono gli stessi principi per poter lavorare nella giusta armonia e per non sentirti a disagio.\n L’unico modo per affrontare una serie di situazioni spiacevoli è saper reagire nel modo giusto e dimostrare con più determinazione il tuo valore.\n Grazie a Maria per aver raccontato la sua esperienza!\n Contatti  GitHub https://github.com/MariaPantone\nInstagram https://www.instagram.com/thinkbeforeudoing._/\n ", "url": "https:\/\/theredcode.it\/voglio-diventare-una...-big-data-analyst\/" }, "https:\/\/theredcode.it\/7-lezioni-di-vita-sul-machine-learning\/": { "title": "7 lezioni di vita sul machine learning", "tags": ["intelligenza-artificiale","machine-learning",], "content": "Gli algoritmi di apprendimento automatico possono riuscire ad eseguire attività importanti generalizzando dagli esempi. Questo è spesso più fattibile ed economico rispetto alla programmazione manuale di una serie di risoluzioni a dei problemi.\n Man mano che diventano disponibili più dati, è possibile affrontare problemi sempre più ambiziosi, e di conseguenza, l\u0026rsquo;apprendimento automatico è ampiamente utilizzato nei computer e in molti altri settori. Tuttavia, lo studio e lo sviluppo di applicazioni di machine learning di successo richiede una notevole quantità di \u0026ldquo;fede cieca\u0026rdquo; in certe situazioni difficile da imparare dai libri di testo.\n Tra tutte le frasi che ho sentito da quando lavoro, ecco 7 lezioni di vita sul machine learning con cui ti ritroverai a combattere prima o poi e che costituiscono delle vere e proprie best practices.\n I dati non bastano   Essendo la generalizzazione l\u0026rsquo;obiettivo, ne consegue che i dati da soli non siano sufficienti.\n So che sembra una notizia piuttosto deprimente: come possiamo sperare di imparare qualcosa, soprattutto su tematiche dove i dati sono scarsi e di bassa qualità?\n Fortunatamente, come la deduzione, anche l\u0026rsquo;induzione fa da leva: trasforma una piccola quantità di conoscenza in ingresso in una grande quantità di conoscenza come risultato. L\u0026rsquo;induzione è qualcosa di anche più potente della deduzione, perché richiede molta meno conoscenza di input per produrre risultati utili, anche se ha bisogno di una conoscenza superiore “allo zero”.\n Certo, può sembrare scontato affermare che per l’apprendimento è necessario avere a disposizione una “fonte di conoscenza”, ma è altrettanto vero che spesso il machine learning viene scambiato per qualcosa che ha della magia.\n Quello che l’apprendimento automatico fa è utilizzare i dati che ha a disposizione per cavarne qualcosa, così come nel mondo della programmazione o dell’agricoltura: la maggior parte del lavoro sta alla natura, ma ci vuole comunque la materia prima e servono gli agricoltori per aiutare i raccolti a crescere.\n Allo stesso modo, chi studia e lavora nel settore, combina la sua esperienza e conoscenza del mondo reale con le tecniche di machine learning, per estrarne una nuova forma di conoscenza.\n Machine learning = Loop Rappresentazione + valutazione + ottimizzazione   Tutti gli algoritmi di apprendimento automatico sono generalmente costruiti per mezzo della combinazione di 3 componenti, che vengono utilizzati come blocchi fondamentali durante una qualsiasi attività che usi tecniche di machine learning.\n Rappresentazione Esistono moltissimi algoritmi che sono a disposizione degli utenti che intendono approcciarsi a questo mondo; mentre però un classificatore viene definito in modo formale tramite diversi linguaggi di programmazione, sta all’utilizzatore finale la scelta di utilizzare l’uno piuttosto che l’altro a seconda del compito. Per scegliere esistono diverse tecniche, dove sicuramente prendere in considerazione le feature a disposizione è fondamentale.\n Valutazione è sempre necessario fornire una valutazione per distinguere i classificatori che hanno dato dei buoni risultati da quelli che hanno avuto un esito negativo. Esistono diverse funzioni anche interne agli algoritmi stessi, che però possono dare risultati diversi da valutazioni esterne, motivo per cui è sempre bene fare un raffronto oggettivo dei risultati ottenuti.\n Ottimizzazione  Completata la fase di valutazione, è molto importante utilizzare un metodo che permetta di imparare dagli errori: cercare tra i classificatori quello con il punteggio più alto non è sufficiente, ma bisogna esaminare attentamente le valutazioni effettuate e cercare di ottimizzare il più possibile l’output ottenuto.\n La scelta della tecnica di ottimizzazione è fondamentale per l’efficacia del risultato e aiuta anche a determinare se la soluzione prodotta ha più di un ottimo. Esistono anche in questo caso moltissime funzioni di ottimizzazione, dalle più standard alle sperimentali, ed è bene studiarne il funzionamento per comprenderne a pieno le potenzialità.\n Il fitting soffre di disturbo di personalità multipla   Cosa succede se gli input e i dati che abbiamo a disposizione non sono sufficienti (troppi o troppo pochi) a determinare completamente il classificatore corretto? Corriamo il rischio di rendere il classificatore uno strumento in grado solo di codificare stranezze casuali nei dati, adattandosi troppo alle conoscenze passate in input.\n Questo problema è chiamato overfitting ed è uno dei principali nemici dell\u0026rsquo;apprendimento automatico, tanto che chi ci inizia a lavorarci, teme di vedere valori come il 100% di accuratezza: questo valore è pressoché impossibile da ottenere, se non in casi di overfitting.\n Tutti nell\u0026rsquo;apprendimento automatico conoscono l\u0026rsquo;overfitting, ma la realtà è che si presenta in molte forme che non sono immediatamente ovvie: spesso si pensa che l’overfitting sia quando un valore viene sovrastimato, ma la realtà è che spesso si trasforma in underfitting.\n Un modo per comprendere l\u0026rsquo;overfitting è scomporre l\u0026rsquo;errore di generalizzazione in bias e varianza.\n Il pregiudizio o bias è la tendenza di un sistema o di una persona a imparare costantemente la stessa cosa sbagliata basandosi su esperienze “sbagliate”. La varianza è invece la tendenza ad apprendere cose casuali indipendentemente dal segnale reale.\n Ad esempio, gli alberi decisionali non hanno problema di bias perché possono rappresentare qualsiasi funzione booleana, ma d\u0026rsquo;altro canto possono soffrire di alta varianza.\n Tecniche come la convalida incrociata può aiutare a combattere l\u0026rsquo;overfitting, ma non è una panacea, dal momento che se la usiamo per fare scegliere troppi parametri, l’overfitting può verificarsi sotto forma di sovrastima.\n Oltre alla convalida incrociata, esistono molti metodi per combattere l\u0026rsquo;overfitting, ma la realtà è che esistono diversi fattori che vanno tenuti in considerazione, e purtroppo non esiste una pozione magica!\n La generalizzazione conta  L\u0026rsquo;obiettivo fondamentale dell\u0026rsquo;apprendimento automatico è generalizzare: questo vuol dire che dopo la fase di addestramento, l’algoritmo deve essere in grado di lavorare con input mai visti.\n Questo perché, indipendentemente dalla quantità di dati di cui disponiamo, è assai improbabile che vedremo di nuovo gli stessi esempi al momento del test; per questa ragione, solitamente si divide il dataset iniziale di modo che il sistema venga addestrato su una parte degli esempi a disposizione, per poi testarne il corretto funzionamento su un insieme di dati mai visto.\n Come dividere correttamente il dataset? Questo è un altro dei grandi dilemmi: i seguenti metodi di partizionamento dei dati sono stati suggeriti in diversi casi nella letteratura inerente il campo dell\u0026rsquo;apprendimento automatico.\n Una prima opzione prevede di suddividere in due parti il dataset originale, di cui quello per il training pari al 75% e il restante per la fase di test; altri suggeriscono anche di utilizzare il 70% dell\u0026rsquo;intero set di dati per la parte relativa al training, 15% per la convalida e 15% per il test.\n Personalmente credo che il metodo empirico per stabilire quale sia la cifra più adatta sia il migliore: mai andare sotto il 70%/30%, ma provare anche con un partizionamento pari a 80%/20% o intermedio per valutare le performance e stabilire quale offre prospettive migliori.\n Comprendere le feature Alla fine della giornata, alcuni progetti di apprendimento automatico hanno successo e altri falliscono. Cosa fa la differenza? Spesso il fattore più importante è rappresentato dalle funzionalità utilizzate. Se hai molte feature indipendenti che si correlano bene con la classe di apprendimento, allora l’attività sarà facile.\n D\u0026rsquo;altra parte, se la classe è invece rappresentabile tramite una funzione molto complessa, potresti non essere in grado di trarre dei buoni risultati. Per questo, analizzare a fondo i dati grezzi a nostra disposizione, facendo delle valutazioni e ipotesi iniziali, ci aiuta poi ad interpretare anche meglio il risultato ottenuto.\n In questo senso, l’intuizione, la creatività e un pizzico di esperienza fanno sì che questa parte del lavoro sia una delle parti più interessanti, perché ci rende degli investigatori dei dati, avendo sotto gli occhi un caso da risolvere, di cui non solo non conosciamo l’assassino, ma neanche il movente o l’arma!\n Per questo spesso mi sento dire: “Tutto qui?” quando ci si trova davanti ad un addestramento concluso e testato, dopo ore e ore spese a raccogliere dati, pulirli ed elaborarli opportunamente. Può sembrare assolutamente banale, ma queste fasi preliminari sono fondamentali, più dell’applicazione di algoritmi super complessi.\n Non fermarti alle apparenze (del modello)  Agli albori dell\u0026rsquo;apprendimento automatico, tutti avevano il loro algoritmo preferito, insieme ad alcuni motivi a priori per credere nella sua superiorità. Negli anni però, la maggior parte degli sforzi è andata a provare molte varianti degli algoritmi iniziali, mostrando che il miglior algoritmo varia da un\u0026rsquo;applicazione all\u0026rsquo;altra e che non ne esiste uno ottimale per ogni tipo di problema.\n Per questa ragione, prima di concludere per la strada più “comoda”, valuta anche alternative da mettere in coda per una valutazione complessiva, che ti permetterà di confermare o ribaltare totalmente il tuo giudizio.\n Più dati, migliori risultati Nella maggior parte dell\u0026rsquo;informatica, le due principali risorse in quantità limitate sono il tempo e la memoria. Nell\u0026rsquo;apprendimento automatico, ce n\u0026rsquo;è una terza: i dati.\n Questo è un dato di fatto che fino a qualche anno fa rappresentava un grande limite e spesso si sente dire che più dati si ha a disposizione, migliori saranno i risultati. Questo è vero, genericamente parlando: ripetiamo che l’overfitting è dietro l’angolo, quindi va sempre posta attenzione in questo senso.\n Soprattutto al giorno d’oggi che sono disponibili enormi quantità di dati e spesso non c\u0026rsquo;è abbastanza tempo per elaborarli, questi vengono utilizzati in maniera impropria.\n Questo porta a un paradosso: anche se in linea di principio più dati significa che si possono produrre risultati anche per situazioni più complesse, in pratica si finisce per usare gli algoritmi più semplici, perché quelli complessi richiedono troppo tempo per digerire grandi moli di dati ed elaborarli.\n Di norma infatti vale la pena provare prima gli algoritmi più semplici, come ad esempio Naive-Bayes prima della regressione logistica, K-Means prima delle SVM. Spesso gli algoritmi più sofisticati rappresentano un’alternativa molto attraente, ma di solito sono più difficili da usare, perché hanno più parametri da gestire e anche una complessità intrinseca che rende il risultato non all’altezza delle aspettative o delle tempistiche.\n Conclusioni Le informazioni e le pratiche viste sono molte, ma fanno parte di un prontuario all’uso che consiglio di tenere sempre a portata di mano: spesso si incappa in “meccanismi” che ci fanno restare nella nostra comfort zone e che ci portano nella direzione sbagliata.\nRicordare che alcuni degli stereotipi con cui ci scontriamo e scontreremo ogni giorno sono, appunto, stereotipi, ci aiuta a mantenere il focus e cercare di migliorarci ogni giorno, grazie anche all’esperienza di chi, prima di noi, ci ha sbattuto la testa!\n", "url": "https:\/\/theredcode.it\/7-lezioni-di-vita-sul-machine-learning\/" }, "https:\/\/theredcode.it\/voglio-diventare-un...-javascript-developer\/": { "title": "Voglio diventare un... Javascript Developer", "tags": ["javascript","voglio-diventare",], "content": "Patryk è un ragazzo con un senso dell\u0026rsquo;umorismo molto spiccato ed è anche molto attivo sui social, tanto da aver creato una community per devs su Telegram (link al gruppo) con oltre 900 membri che ogni giorno mantengono super attiva la chat!\n Non solo: mantiene ben aggiornato il suo profilo GitHub, su cui è possibile trovare moltissimi template pronti all\u0026rsquo;uso sui framework più vari (e non è cosa da poco), a cui dedica moltissimo tempo, perché crede molto nella filosofia del software open source.\n Parliamo allora di come diventare un Javascript Developer attraverso la sua esperienza!\n Descriviti in 100 parole  Uno sviluppatore, povero, che vuole diventare ricco creando software gratis e open source. Questo mi descrive molto bene.\n Sono nato come linuxaro, appassionato delle community dove tutti danno/ricevono qualcosa gratis per il mero gusto di imparare e accrescersi come persone.\n Molti si dimenticano che l\u0026rsquo;informatica è una scienza e, senza l\u0026rsquo;open source, questa sarebba ancora ferma a processori i386, 512kb di ram e, probabilmente, al Pascal o Cobol.\n Sono una persona che si batte affinché questa cosa non venga dimenticata, perché è importante aprire un proprio business, fare soldi con le app e l\u0026rsquo;informatica (non siamo la caritas) ma, se possibile, contribuire con l\u0026rsquo;open source per non tornare al medioevo o arrivare ad uno stallo dell\u0026rsquo;evoluzione tecnologica. Facciamolo!\n  In cosa consiste il ruolo di Javascript developer?  Una volta, ho letto la bio di un ragazzo americano su Twitter che recitava \u0026ldquo;Javascript artist\u0026rdquo;: a quel tempo c\u0026rsquo;erano tanti problemi con Internet Explorer e lui supportava i suoi applicativi e snippet fino a IE6.\n Questa cosa mi ha sempre affascinato e, per un periodo, anche io mi sono etichettato così. 15 anni fa il Javascript developer era quello che lottava contro Internet Explorer, oggi è quello che spera che domani non esca un nuovo framework da imparare che sia uguale ai 10 precedenti.\n Javascript è un linguaggio molto vecchio che ha avuto un\u0026rsquo;evoluzione e una crescita praticamente nulla fino al 2014, dal 2015 in poi praticamente è impossibile stare dietro alla sua evoluzione, perché stanno provando ad aggiustare tutto ciò che è stato fatto male, visto che i browser supportano solo quello. Io, in breve, faccio questo di lavoro: provo a sopravvivere.\n Mi occupo di vari progetti in una società basata sull\u0026rsquo;open source, dove si sviluppa e usa prevalentemente questo tipo di approccio.\n A volte sono team leader e gestisco piccoli team di 4-5 persone, a volte lavoro da solo, altre invece aiuto colleghi con \u0026ldquo;roba legacy\u0026rdquo; su cui non c\u0026rsquo;è budget ma va mantenuta.\n In breve, non per vantarmi, ma faccio il super eroe! Scherzo, ovviamente, sono un developer come tanti che ha passione per questo lavoro che, se sei fortunato, consiste nel creare cose belle e user friendly sul web.\n Qual è la soft skill più importante che deve possedere un Javascript developer  Spoiler: la pazienza. A differenza di altri linguaggi di programmazione, quello del Javascript developer è in assoluto quello che ti farà dire più volte \u0026ldquo;non funziona mai niente\u0026rdquo;.\n Per quanto sottovalutato e sminuito, perchè esistono framework e miliardi di librerie (basta guardare npm dove trovi di tutto), molto spesso i pezzi non si incastrano mai come dovrebbero.\n I meme sul CSS si sprecano: basta un margin fuori posto o una scrollbar che appare dal nulla che si rompe tutto e sviluppare responsive non è mai una cosa così scontata, visto che molti grafici/designer si aspettano determinati risultati e posizioni che non riesci a rispettare (ancora oggi trovi difficoltà a fargli capire che lo spazio è quello e se sei andato a capo con un elemento è perchè non entrava).\n Dall\u0026rsquo;altra parte sei un full-stack che può passare da back-end, frontend o creare app mobile/desktop usando sempre Javascript : sei una macchina super flessibile quando impari a padroneggiare Javascript e non è una visione da sottovalutare che altri linguaggi non possono permettersi.\n La maggior parte di noi utilizza i social per parlare dei propri successi, ma la realtà è che siamo quel che siamo grazie al 90% dei nostri errori. Racconta il tuo più grande fallimento da quando lavori nel settore, che però ti ha reso ciò che sei.  Il mio ex capo diceva \u0026ldquo;chi non sbaglia mai, non lavora\u0026rdquo;. Siamo umani. A me è capitato di eliminare un intero database di produzione di un mio progetto, pubblicare per sbaglio un dato sensibile degli utenti al posto del loro username (sbagliando il nome della variabile).\n Posso anche vantarmi di aver distrutto l\u0026rsquo;intera SEO di un sito cambiando le url delle pagine e non mettendo redirect 301 a quelle nuove (ma come? Google non è così intelligente? ASSURDO).\n Al lavoro mi è successo anche di fidarmi di alcune persone, scoprendo che mi facevano fare cose non preventivate dal mio capo e che poi non ci furono pagate, perchè ingenuamente pensavo \u0026ldquo;si si ti aiuto io\u0026rdquo; ma nel mondo business le feature si pagano (\u0026hellip;e io che pensavo fossimo un team, tutti uniti per arrivare all\u0026rsquo;obiettivo).\n Non abbiate paura di sbagliare: pure Google ogni tanto va down.\n Come fare per diventare un Javascript developer, e q****ual è il tuo prossimo obiettivo?  Javascript, a differenza di altre realtà (oracle, mongodb, atlassian, android e ios), non ha certificazioni valide, non esiste un ente vero e proprio che rilascia certificazioni al riguardo. Io in genere consiglio \u0026ldquo;Eloquent Javascript\u0026rdquo; per iniziare, libro in PDF(in inglese), fatto molto bene.\n A seguire, tutte le risorse online sono valide, ognuno scelga il percorso che preferisce: università, corsi online a pagamento, Udemy, fare esperienza da autodidatta. Non c\u0026rsquo;è un percorso migliore di un altro, ma bisogna tener conto di alcune cose mentre si studia: la famosa \u0026ldquo;roba legacy\u0026rdquo;.\n Studiare jQuery, ad esempio, è controproducente perchè con i framework attuali e nel mondo business non si usa più, quindi seguire una strada sbagliata nello studio può portare ad essere un Javascript developer obsoleto alla nascita, nello stesso tempo ti potrà capitare di fixare o trovare snippet in jQuery che dovrai modificare o adattare ad esempio a React: è il cane che si morde la coda.\n Non invidio chi inizia a studiare oggi Javascript , è un inferno, ma quando riesci domare le fiamme non ti sembrerà così brutto.\n  Conosci il tema gender gap in ambito STEM? Se sì, cosa puoi fare nel tuo piccolo per combattere questo problema?  Si, ma sarò molto schietto e diretto: al lavoro per me sono tutti uguali, che siano uomini, donne, gay, cani, manager\u0026hellip;\n Bisogna lavorare per raggiungere l\u0026rsquo;obiettivo e vincere sul progetto di cui si sta facendo parte. Non mi rivedo neanche nel discorso del salario minore: in confronto ad alcuni colleghi uomini dello stesso livello, io prendo meno di RAL, così come alcune colleghe donne prendono più di me e altre meno di me.\n Secondo me, molto lo fa il modo di vendersi. Concludo dicendo che le donne sono molto poche in questo settore, quindi è difficile fare una statistica corretta su qualsiasi punto di vista, ma nel mio mondo lavorativo l\u0026rsquo;unica lamentela che ho ricevuto è stata non aver notato che una mia collega si era fatta i capelli rosa e ci ha tenuto il muso tutto il giorno\u0026hellip; ce lo siamo meritati!\n Fossero questi i problemi del gender gap, sarebbe effettivamente un mondo migliore.\n  Ti potrebbero piacere anche\u0026hellip;\n- Voglio essere un Senior back-end developer;\n- Voglio essere un Senior Software developer;\n", "url": "https:\/\/theredcode.it\/voglio-diventare-un...-javascript-developer\/" }, "https:\/\/theredcode.it\/aws\/hosting-con-aws\/": { "title": "Hosting con S3 e Route 53 per Angular", "tags": ["angular","aws",], "content": "Immaginiamo di avere a disposizione una webapp in Angular e di volerla mettere online: come fare, spendendo meno di dieci euro l’anno?\n Vediamo com’è possibile avere un hosting con S3 e Route 53 per Angular!\n Requisiti: Un dominio; Una webapp in Angular (o anche React.js, Vue.js o Ionic); Un account su AWS  Build del progetto  Per questo esempio, andremo ad utilizzare un template che troviamo sul repository https://github.com/creativetimofficial/now-ui-kit-angular e che offre una webapp con diverse dashboard che possono fungere da gestionale per diversi scopi.\n Per poter utilizzare questo progetto all’interno del nostro bucket, ossia il contenitore del servizio S3 di Amazon che ospiterà il nostro sito, abbiamo bisogno di creare una versione di distribuzione dell’applicazione.\n Andiamo quindi ad eseguire il comando ng build all’interno del progetto e prendiamo come riferimento la cartella dist/ che verrà creata al termine dell’esecuzione di questo comando.\n Generazione della versione di distribuzione per Angular\n Il contenuto della cartella dist/ è proprio quello che ci serve. Teniamo aperta questa scheda e proseguiamo!\n Cartella dist/\n Configurazione del bucket con S3  A questo punto, andiamo a creare il bucket che ospiterà la nostra webapp: tramite la barra di ricerca, cerchiamo il servizio S3 e clicchiamo sul pulsante “Crea Bucket”:\n Creazione bucket su S3\n  Come prima cosa, inseriamo il nome del bucket. In questo caso, lo chiameremo esattamente come il dominio che dovremo andare a configurare, per esempio mymanagement.it. Lasciamo la regione impostata sul territorio europeo e proseguiamo.\n Nella sezione successiva, ci viene dettagliato il funzionamento del blocco degli accessi al bucket: chiaramente, questo blocco verrà rimosso nel momento in cui il nostro sito andrà online, ma per il momento lasciamolo attivo finché la configurazione non è ultimata.\n Molto utile è il versionamento del bucket: ci permette di tenere in canna le diverse versioni di ciò che andremo a caricare al suo interno, per poter eventualmente tornare indietro se qualcosa andasse storto.\n Versionamento del bucket\n Clicchiamo su “Crea bucket” in fondo e proseguiamo.\n Fatto questo, ci verrà mostrato il riepilogo dei bucket: clicchiamo su quello appena creato ed entriamo al suo interno.\nRiepilogo del bucket\n Al momento il bucket è vuoto: lo andremo infatti a riempire con i file prodotti dalla build effettuata allo step precedente. Clicchiamo quindi su “Carica” e teniamo aperta la cartella che contiene tutti i file della webapp.\n Contenuto del bucket\n Caricamento oggetti nel bucket\n Trasciniamo tutti gli oggetti contenuti nella cartella dist del progetto all’interno della schermata della console di AWS e attendiamo il caricamento.\n Riepilogo dei file che verranno caricati\n A questo punto, possiamo cliccare su “Carica” in fondo alla pagina e attendere il caricamento di tutti i file all’interno del bucket.\n Una volta terminato, clicchiamo sul pulsante “Chiudi” in altro a destra e verremo riportati all’interno del bucket, dove potremo vedere tutto il contenuto della cartella dist/ riportato all’interno del bucket.\n Configurazione dell\u0026rsquo;hosting per siti statici\n A questo punto, è necessario verificare che tutto stia funzionando correttamente, prima di collegare il nostro dominio: infatti, dobbiamo attivare la funzionalità di hosting e verificare che il sito sia visibile correttamente.\n Per farlo, clicchiamo su “Proprietà” in alto e andiamo nella sezione “Hosting di siti web statici”, che al momento è disabilitato. Clicchiamo su “Modifica” e poi selezioniamo “Attiva”.\n In questo caso, le configurazioni di default sono sufficienti, quindi clicchiamo su “Salva le modifiche” e andiamo avanti!\n Configurazione dell\u0026rsquo;hosting per siti statici\n Fatto questo, verremo reindirizzati sulla pagina delle proprietà del bucket, e scorrendo verso il basso, vedremo che è stato creato un endpoint per la nostra webapp: se ci clicchiamo sopra, potremo visualizzare il nostro sito sfruttando AWS…\n Errore di permessi\n Cos’è successo? Abbiamo ancora attivo il blocco dell’accesso pubblico: andiamo quindi sul tab “Autorizzazioni” e clicchiamo su “Modifica” nella sezione dedicata al blocco.\n A questo punto, deselezioniamo l’opzione principale e clicchiamo su “Salva le modifiche”:\n Configurazione dell\u0026rsquo;accesso al bucket\n Non basta: infatti, i nostri file non sono stati ancora resi “pubblici”. Per farlo, clicchiamo sul tab “oggetti” e selezioniamo tutti gli oggetti presenti all’interno del bucket. Clicchiamo poi su “Operazioni” e selezioniamo “Rendi pubblico”.\n Conferma della configurazione dell\u0026rsquo;accesso\n Torniamo quindi all’endpoint di prima e aggiorniamo la pagina: finalmente la nostra webapp è online!\n Homepage della webapp Angular\n Questa è la situazione ideale se abbiamo bisogno di mostrare a qualcuno il lavoro fatto in maniera facile e veloce. Se hai a disposizione un account gratuito di AWS, hai a disposizione 5GB di spazio per ospitare il tuo sito gratuitamente per 12 mesi.\n E se volessimo associare un dominio al nostro bucket? Vai col prossimo step!\n  Configurazione di Route 53  Nella barra di ricerca dei servizi, cerchiamo Route 53. Questo servizio ci permetterà di collegare il dominio a nostra disposizione con il bucket di S3 che ospita il nostro sito.\n Creiamo una cosiddetta “zona ospitata” cliccando su “Crea” e inseriamo tutte le informazioni richieste: in questo caso, la zona ci permette di definire la configurazione di come AWS dovrà gestire le richieste in arrivo per il nostro dominio.\n Creazione della zona tramite Route 53\n  Una volta cliccato su “Crea” in fondo, vedremo il riepilogo della zona: vengono creati di default due record, ossia un NS e un SOA. Nel primo caso, abbiamo un Name Server, ossia la definizione di quei server che comunicheranno le informazioni relative ai DNS per gestire il traffico in arrivo.\n Nel caso del record SOA, abbiamo al suo interno tutte le informazioni che riguardano la zona DNS, come il server principale, l’email dell’amministratore di sistema, e via dicendo. Si tratta infatti di tutte le informazioni di base del dominio.\n Record presenti di default nella zona alla creazione\n Questi due record non devono essere modificati per nessun motivo, anzi: il record NS ci sarà molto utile perché, a seconda di dove avremo registrato il nostro dominio, dovremo andare a specificare i diversi DNS riportati nella tabella al provider utilizzato.\n Per esempio, nel caso di Register.it, potremmo dover modificare i DNS di default in questo modo:\n Configurazione dei DNS su Register.it\n Attenzione: il cambio di DNS e quindi la messa online del sito dipende dalla velocità di propagazione delle informazioni relative ai DNS. Nel caso di Register.it, i tempi arrivano fino a 2 giorni!\n L’ultimo step da compiere dopo aver aggiornato i DNS, è quello di creare un record A: questo ci permetterà di instradare le richieste che arrivano al nostro dominio verso il bucket S3.\n Clicchiamo quindi su “Crea record” e selezioniamo come tipologia il record A: le altre impostazioni possono essere liberamente configurate a seconda delle esigenze.\nCreazione dei record su Route 53\n Nel giro di qualche minuto, sempre che i DNS siano stati aggiornati correttamente, il nostro sito sarà online.\n Ma parliamo velocemente dei costi: il costo è di 0.50 centesimi circa al mese:\nCosti di Route 53\n  Quindi, a conti fatti, abbiamo come spesa meno di un euro al mese, escludendo il costo del dominio, che in molti casi viene offerto gratuitamente per il primo anno.\n Non male, no?\n ", "url": "https:\/\/theredcode.it\/aws\/hosting-con-aws\/" }, "https:\/\/theredcode.it\/voglio-diventare...-un-senior-software-developer\/": { "title": "Voglio diventare... un Senior Software Developer", "tags": ["interviste","voglio-diventare",], "content": "Questa settimana diamo spazio ad un altro professionista del settore: Marco Breveglieri (qui il link al suo blog!) ci racconterà cosa vuol dire essere un Senior Software Developer e quali sono le esperienze che ha maturato finora, anche grazie al canale Twitch il cui nome è tutto un programma: Compila Quindi Va trasmette sessioni di live coding settimanali a tema programmazione web e non!\n Descriviti in 100 parole  Se l\u0026rsquo;abilità di Neo era quella di \u0026ldquo;vedere\u0026rdquo; il codice, il mio compito è quello di scriverlo, o almeno ci provo!\n  Mi definisco in generale uno \u0026ldquo;sviluppatore software\u0026rdquo;, nel senso che scrivendo codice cerco di dare vita ad applicazioni vere e proprie, sia per ambienti desktop o per dispositivi mobili, fino ad arrivare a servizi che girano in background.\n In ambito Web, lavoro sia sulla parte relativa al backend che al frontend di siti e applicazioni Web. Quello che imparo da queste esperienze, cerco di divulgarlo a livello professionale con corsi di formazione o, più recentemente, partecipando a community e facendo qualche “live”.\n In cosa consiste il ruolo di Senior Software Developer?  Partiamo dall’appellativo “Senior”: principalmente, serve a cercare di essere pagati di più, più di un Junior appunto\u0026hellip; Scherzo! 😉\n In realtà sta a indicare che sono un po’ più vecchio\u0026hellip; No, scherzo ancora (anche se un pochino è vero). 😁\n Semplicemente, cerco ogni giorno di mettere a disposizione le mie conoscenze nell’ambito dello sviluppo software e del coding, nella speranza che 25 anni di attività vogliano effettivamente dire qualcosa.\n Oltre a lavorare su progetti specifici della mia azienda (ABLS Team), mi offro anche come consulente esterno e sviluppatore “on demand” presso clienti, in outsourcing, entrando a far parte di altri team di sviluppo (di cui poi mi sento comunque parte integrante).\n Per consolidare le mie conoscenze e abilità poi, mi offro per corsi di formazione, organizzati in prima persona o tramite enti per fornire a chi richiede tutte le conoscenze indispensabili per poter fare la mia stessa attività. Credo fortemente che sarebbe bello se ci fosse almeno un developer in ogni tipo di azienda!\n Qual è la soft skill più importante che deve possedere un Senior Software Developer?  C’è una abilità, credo, che uno sviluppatore debba necessariamente avere, in quantità proporzionale alla propria maturità, senza però che questa lo faccia passare al Lato Oscuro di ogni “developer”, ovvero la cosiddetta Sindrome dell’Impostore, la cui caratteristica fondamentale è l’umiltà.\n Non so se sia il termine adatto, ma piuttosto che farsi sottomettere in ogni occasione dalle persone che abbiamo di fronte, è bene avere la capacità di confrontarsi con chiunque in merito a questioni tecniche esponendo con calma e tranquillità il proprio parere, soprattutto motivandolo, senza sovrastare l’altro.\n Questo a mio avviso crea le condizioni affinché il proprio parere venga raccolto senza pregiudizi che non siano tecnici, ponendo l’interlocutore in condizioni di assorbirlo ma anche, se vuole, di contestarlo.\n In breve, si escludono tutte quelle intollerabili situazioni (quasi simili a quelle che si creano nel rapporto tra adolescenti e genitori) del “sono più vecchio (quindi più esperto) di te”, che possono fare anche molto male quando alla fine di una lunga discussione si scopre, dall’alto della propria “seniority”, di avere torto marcio. 😅\n Racconta il tuo più grande fallimento da quando lavori nel settore, che però ti ha reso ciò che sei.  Potrei citarne più di uno, ma in realtà tutti i fallimenti di cui ho memoria avevano una radice comune: l’assenza di una precisa organizzazione dell’attività di sviluppo, una abilità che solo con il tempo e l’esperienza si può maturare, e su cui non ho mai smesso di lavorare perché credo che in quell’ambito non riuscirò mai a raggiungere la perfezione.\n Mi riferiscoin particolare a tutte quelle abilità che girano attorno a una corretta pianificazione e stima delle complessità, al dare il giusto equilibrio tra precisione nella realizzazione tecnica (soprattutto nella scrittura del codice) che va controbilanciata con il rilascio della funzionalità richiesta (dove spesso questo aspetto non è visibile).\n Io purtroppo sono un perfezionista, e questo da un lato tende ad allungare i tempi e ad aumentare l’impegno necessario a raggiungere un risultato; per contro, essendo sicuro dei miei mezzi, ottimista e modestamente capace in alcuni ambiti, riesco nella maggior parte dei casi a uscirne portando a casa entrambe le cose, ma non senza correre pericoli.\n Come fare per diventare Senior Software Developer  La mia filosofia assomiglia un pochino a quella di Auguste Gusteau, lo chef di Ratatouille, riguardo la cucina: “chiunque può programmare”.\n  Quando leggo questa domanda all’interno di gruppi e forum di discussione, spesso vedo il discorso vagare tra diversi estremi: chi suggerisce come imprescindibile un percorso universitario, chi lo sconsiglia e suggerisce basti un corso di pochi giorni, chi invece ritiene servano mesi ma solo per una conoscenza di base, chi distoglie l’interessato dal suo proposito tracciando scenari infausti, paghe da fame e altri eventi tragici.\n A mio avviso, è impossibile dare una risposta precisa, soprattutto quando non si conosce la persona che si ha davanti, quanto è convinto del percorso che vuole intraprendere e cosa è disposto a fare per raggiungere i propri obiettivi.\n È ovvio che l’esperienza pluriennale conta, ma io penso che, usando determinati linguaggi e tecnologie, lo sforzo necessario per poter raggiungere un risultato proficuo, ossia produrre qualcosa che abbia un valore (per sé, per la propria azienda o per un ipotetico cliente) in termini di software non sia così elevato una volta che si sono apprese le tecniche fondamentali, purché si abbia un certo talento personale e un interesse reale verso questa disciplina.\n Parlando di successi, qual è il tuo prossimo obiettivo?  Da quando ho iniziato a scrivere codice, ho sempre pensato che avrei finito i miei giorni facendo questa attività. Tralasciando discorsi macabri e fatalisti, diciamo che la programmazione riserva ogni giorno sempre nuove sorprese: nascono continuamente nuove tecnologie, framework, librerie, strumenti e metodologie che richiedono un aggiornamento costante.\n Detto questo, da qui ai prossimi tre anni vedo me stesso ricoprire sempre il medesimo ruolo, ma non come una nostalgica cozza incrostata che si aggrappa passivamente al proprio scoglio, bensì come un professionista che giorno dopo giorno migliora i propri difetti, consolida le proprie conoscenze e riesce ad essere un Senior Developer sempre più “Senior” e sempre più “Developer”. 😄\n Oggi come oggi, mi accontenterei di riuscire ad avere più tempo di fare un maggior numero di live sul mio canale Twitch (https://www.twitch.tv/compilaquindiva), possibilmente con meno imbarazzo e più spigliatezza. 😉\n Conosci il tema gender gap in ambito STEM? Se sì, cosa puoi fare nel tuo piccolo per combattere questo problema?  Sin dai tempi scolastici, scegliendo un percorso specificatamente orientato al mio attuale lavoro, proseguendo poi nei primi incarichi come dipendente, mi sono trovato in luoghi dove la presenza maschile era in netta prevalenza. Parliamo degli anni attorno al 2000.\n Oggi lo scenario mi sembra stia cambiando, o quantomeno vedo un crescente coinvolgimento del genere femminile, specie nel ramo della programmazione front-end, ed è ironico perché vedendo alcune “stranezze” del linguaggio JavaScript nello specifico, viene naturale pensare che “solo un uomo possa aver creato una robaccia del genere”.\n Ovviamente la mia esperienza aneddotica non è un dato considerabile come campione, e se questo discorso emerge ancora, allora do per scontato che il problema sussista e abbia sempre più bisogno di una soluzione urgente.\n Ho iniziato recentemente a interessarmi alle questioni legate al genere in senso generale e non necessariamente legato all’ambito STEM, e credo che non vi sia assolutamente nulla di precluso a un genere o un altro, tantomeno nell’ambito informatico, e che le capacità di ciascuna persona prescindano completamente da esso.\n La prima cosa che intendo fare per combattere questo problema è innanzitutto informarmi su ciò che evidentemente ancora non conosco a riguardo del fenomeno; in seguito, in base a questo, credo sia giusto promuovere e condividere tutto ciò che possa essere utile per mitigarlo e portarlo progressivamente all’annullamento, poiché credo che nell’ambito dello sviluppo software e in tutto ciò che vi ruota attorno vi sia bisogno dell’apporto di chiunque, e tanto maggiore è la diversificazione in termini di genere, pensiero e talento, meglio è!\n Un enorme grazie a Marco per il suo tempo e per aver condiviso le sue esperienze!\n", "url": "https:\/\/theredcode.it\/voglio-diventare...-un-senior-software-developer\/" }, "https:\/\/theredcode.it\/il-futuro-della-open-innovation\/": { "title": "Il futuro della open innovation", "tags": ["open-innovation","recensione",], "content": "L’estate significa più lavoro, ma anche più tempo libero: aver dedicato gran parte del tempo a disposizione per un po’ di sano “retreat” è stato fondamentale, e tra le molte cose che sono riuscita a fare, c’è stato tempo per leggere…. per cui, partiamo da qui: ecco la recensione de “Il futuro della open innovation” di Henry Chesbrough.\nRecensione  Inizio con il dire che sicuramente non è una lettura per tutti: il testo è improntato -chiaramente- sul business model adottato da molte aziende relativa alla loro esperienza nell’adottare una strategia di open innovation.\n Vengono portati in esame diversi casi di studio con protagonisti anche molto conosciuti, tra cui Procter\u0026amp;Gamble, Intel e la Royal Bank of Scotland, dove non sempre strategie di open innovation hanno portato a risultati positivi.\n  Interessante infatti come l’autore analizzi cosa c’è dietro all’adozione di questo modello: l’open innovation è un processo lungo e tortuoso, che può dover affrontare ostacoli di diverso tipo, che a volte portano a situazioni fallimentari.\n L’iniziativa Smart Villages portata avanti in India, per esempio, ha costituito una vera e propria rivoluzione per una porzione di paese che altrimenti avrebbe continuato a convivere in una situazione di totale povertà.\n Fornendo dei sostegni allo sviluppo, come nuove competenze, prevedere progetti e programmi di aiuto a lungo termine o ancora creare comunità dove l’innovazione viene disseminata e condivisa, l’impatto ottenuto è enorme: grazie all’attenzione data alla formazione dei villaggi, questi sono arrivati a raggiungere risultati impensabili.\n Nel link riportato qui ci sono moltissime informazioni su come il progetto è stato articolato e sui benefici apportati alla comunità: se pensiamo che in Occidente manovre simili sono considerate “il minimo sindacale per il raggiungimento della civiltà”, in paesi come l’India sono necessari per lo sviluppo stesso della civiltà.\n L’ottavo capitolo è quello più interessante: sono riportati i casi di studi delle aziende citate precedentemente con le relative esperienze e soprattutto una sezione alla fine di ogni caso con le “lezioni apprese” da queste aziende, positive e non.\n Questo esempio di struttura permette di analizzare caso per caso e vedere che non c’è una ricetta magica in cui l’open innovation porta al successo, ma piuttosto ci sono diverse strategie da attuare che fanno riferimento ad un’unica filosofia e che vanno poi adattate al contesto.\n La strategia outside-in è quella che statisticamente ha avuto più successo: molte aziende infatti sviluppano delle soluzioni o portano avanti dei progetti in maniera totalmente “segreta” per evitare che queste idee fuoriescano e che qualcuno realizzi la stessa idea prima o meglio.\n Alcune delle idee che questo approccio suggerisce sono infatti basate sul concetto che le conoscenze esterne sono importanti tanto quanto quelle interne: se un’azienda ha bisogno di realizzare un prodotto che magari già altri hanno realizzato, perché perdere tempo a reinventare la ruota? Vale la pena inglobare l’idea, e magari adattarla alle proprie esigenze di business.\n Spesso dietro a tanta reticenza c’è il problema della proprietà intellettuale: si tratta di un lavoro importante e molto complesso, per cui questa non deve costituire un limite, ma piuttosto un incentivo (se ti interessa approfondire, dai un\u0026rsquo;occhiata al libro di Simone Aliprandi sulle licenze software!).\n  Se un’azienda porta avanti, grazie al suo reparto di R\u0026amp;S, delle idee che si rivelano positive per il business model aziendale, è possibile anche esternare queste conoscenze, senza poi perderne il “controllo”, ma anzi, crescendo anche grazie agli utilizzatori esterni.\n Il riconoscimento sociale è fondamentale, ma non sufficiente, soprattutto se parliamo di un’azienda privata: “l’ho fatto io” non basta, ma bisogna anche giustificare in qualche modo gli investimenti atti al raggiungimento di una certa soluzione.\n In questo senso, garantire qualche grado di protezione, come tramite un sistema di licenze, è importante per garantire un successo anche in termini di investimento economico e di tempo speso per lo sviluppo dell’idea.\n Interessante, in questo senso, il caso della NASA, che ha sollecitato diversi aiuti esterni per assicurarsi di affrontare nel modo migliore la progettazione di voli spaziali con equipaggio umano: il contributo ottenuto è stato risolutivo per prevedere le eruzioni solari con l’aiuto di un algoritmo, così da evitare l’esposizione dell’equipaggio alle pericolose radiazioni solari.\n  Un laureato in previsioni meteorologiche risolse il problema, fornendo un algoritmo che garantiva una finestra temporale di 24 ore rispetto alle predizione: un risultato incredibile e raggiunto grazie ad un contributo esterno alla NASA.\n In conclusione: questo è un saggio che molte aziende che hanno voglia e bisogno di crescere dovrebbero leggere, per apprezzare a pieno l’approccio all’open innovation e per ricordarsi e ricordare anche agli altri che non tutte le idee considerate “originali” sono idee che portano al successo, ma che, anzi, spesso hanno bisogno di uscire per poterne apprezzare le potenzialità.\n Inoltre, un approccio che sia outside-in o inside-out, aiuta l’azienda a investire in pretotipi o soluzioni che, tramite tempi e costi ridotti, possono più facilmente essere utilizzati all’interno del processo aziendale.\n Lezione imparata L’open innovation funziona grazie alle persone; Per adottare questo approccio, ci deve essere collaborazione: ci vogliono persone disposte a collaborare fianco a fianco con quelle dell’azienda che condivide con voi la conoscenza, e per farlo ci vogliono dipendenti di talento dell’azienda stessa; Boundary-spanning: persone che sono in grado di accedere a fonti di conoscenza diverse e di combinarle insieme per ottenere un processo innovativo, avendo il ruolo di collegare le reti interne dell\u0026rsquo;organizzazione con fonti esterne di informazioni. Quotes Un requisito da soddisfare per una disseminazione e assimilazione delle nuove conoscenze è l’esistenza di un reparto di ricerca e sviluppo interno.\nUn’impresa può riuscire a fare proprie le conoscenze esterne quanto basta a utilizzarle solo se dispone di una certa quantità di mordente creativo e può lasciare alle persone che lavorano sulle nuove conoscenze il tempo necessario ad applicarle insieme.\n  Potrebbe piacerti anche.. Recensione di Pretotype it Recensione di Big Data Analytics Recensione di Software Licensing e data governance ", "url": "https:\/\/theredcode.it\/il-futuro-della-open-innovation\/" }, "https:\/\/theredcode.it\/tags\/open-innovation\/": { "title": "open-innovation", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/tags\/open-innovation\/" }, "https:\/\/theredcode.it\/tags\/recensione\/": { "title": "recensione", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/tags\/recensione\/" }, "https:\/\/theredcode.it\/categories\/recensione\/": { "title": "recensione", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/categories\/recensione\/" }, "https:\/\/theredcode.it\/voglio-diventare-un-senior-back-end-developer\/": { "title": "Voglio diventare un… Senior back-end developer", "tags": ["interviste","voglio-diventare",], "content": "Iniziamo questa serie con un\u0026rsquo;intervista ad Andrea Carratta, senior back-end developer e professionista freelance (piuttosto attivo su LinkedIn) e che porta avanti un suo blog a tema C# e cloud Azure!\n Andrea Carratta in 100 parole.  Mi chiamo Andrea e da quasi due mesi ho scollinato nei quaranta. Fermandomi un attimo a riflettere ho trascorso più di metà vita su diversi backend e non potrei chiedere di meglio! Come ho scritto nel mio profilo Linkedin, \u0026ldquo;Il mio spirito si nutre di pizza \u0026amp; backend\u0026rdquo; e posso solo sperare nel futuro.\nL\u0026rsquo;Andrea non programmatore ama lo sport. Ho superato le cinquanta maratone (comprese le ultra) ed ho fatto tre IronMan (l\u0026rsquo;ultimo nel 2014). La combo \u0026ldquo;Sport \u0026amp; Coding\u0026rdquo; mi aiuta moltissimo e se non ci fosse stata da quando ho cominciato a lavorare non sarei quello che sono ora.\n In cosa consiste il ruolo di senior back-end developer?  Per definirmi al meglio vorrei usare l\u0026rsquo;espressione utilizzata da un PM durante una valutazione: Andrea è un programmatore da sgabuzzo! Lavoro in team, ma programmo ancora meglio chiuso nel mio angolino (=sgabuzzo) dove riesco a gestire il tutto tra codice, pause bagno meditative (non negate di andare in bagno solo per cambiare aria sperando nell\u0026rsquo;”idea del giorno” che non vi credo) e vita privata. Questo non vuole dire fare quello che si vuole, sia ben chiaro!\n Provo a spiegarvi cosa faccio in poche parole. Il progetto su cui lavoro dal 2018 è in ambito Big data per una startup America che opera a livello mondiale. Si tratta di acquisire dati da attori diversi, validarli, processarli, aspettare eventi esterni ed infine computare i risultati.\n Orchestrare processi tra diverse piattaforme (webhook, API, trigger, ecc.) è un lato del progetto che adoro davvero tanto. Non è per nulla semplice e credo di poterlo definire il mio cavallo di battaglia, soprattutto viste le attività svolte in questo ambito durante anche mesi e mesi di sviluppo.\n Vedere i dati che si muovono secondo una precisa orchestrazione è un qualcosa che riempie gli occhi di lacrime e ti fa battere forte il cuore.\n Qual è la soft skill più importante secondo te?  La soft-skill che preferisco e reputo importante durante la mia attività lavorativa? Essendo freelance credo che la mia soft-skill preferita sia sapere organizzare il tempo. Il fatto che il 90% del mio lavoro sia in \u0026ldquo;orario di ufficio\u0026rdquo; pur lavorando full remote non vuole dire che non bisogni sapere gestire l\u0026rsquo;elemento tempo.\n Quando fare uno sviluppo?\nQuando rilasciare uno sviluppo?\nCome si incastra nel progetto?\nRiuscirò a rispettare la consegna?\n Non dobbiamo dimenticare una cosa importantissima: anche se i meme sui programmatori dicono che non abbiamo una vita, bisogna tenere conto dei nostri impegni personali.\n Personalmente reputo che il concetto delle otto ore di lavoro sia antico e da superare, se non dimenticare. Gestire il proprio tempo in questo lavoro significa anche lavorare avendo ben in mente l\u0026rsquo;obiettivo.\n Uscire a correre in pausa pranzo e quel giorno lavorare mezz\u0026rsquo;ora meno non vuol dire essere lavativi. Sapere concentrarsi e chiudere il task è indice di professionalità. Tutto ha una seconda faccia della medaglia!\n Per la stessa regola sappiate che succede anche di non andare a correre in pausa pranzo, mangiare un qualcosa al volo davanti al monitor e sviluppare sino a tardi per chiudere in tempo.\n Per quanto riguarda l\u0026rsquo;ultima domanda che ho posto \u0026ldquo;Riuscirò a rispettare la consegna?\u0026rdquo; Non ho mancato una consegna in vent\u0026rsquo;anni per colpa mia. Quindi sì, credo di saper gestire il tempo sia professionalmente che intrecciandolo alla mia vita privata!\n La maggior parte di noi utilizza i social per parlare dei propri successi, ma la realtà è che siamo quel che siamo grazie al 90% dei nostri errori.\n Racconta il tuo più grande fallimento  da quando lavori nel settore, che però ti ha reso ciò che sei.\n Partiamo da un presupposto molto chiaro. Chi dice di non avere avuto fallimenti clamorosi non si è realmente sporcato le mani come si deve a mio avviso. La domanda è molto chiara: “racconta il tuo più grande fallimento”. Io vorrei raccontarne due. Uno riguarda l\u0026rsquo;ambito professionale/ carriera e l\u0026rsquo;altro riguarda il punto di vista tecnico. Dovendo sceglierne uno ho deciso di raccontare solamente il primo.\n Continuo a pensarci e non riesco a darmi una giustificazione sensata e razionale. Ho \u0026ldquo;sprecato\u0026rdquo; anni su un progetto che non mi stava dando più nulla se non noia. Quando ho cominciato ad avvertire il disgusto di aprire il portatile la mattina per accenderlo ho capito che qualcosa non andava.\n Ho cominciato a mandare via CV e dopo una serie di colloqui sono riuscito ad uscire da quella \u0026ldquo;black box\u0026rdquo; (che personalmente la immagino come un /dev/null per capirci). Di recente un ragazzo mi ha chiesto in privato \u0026ldquo;se dovessi dare un consiglio al te del passato di 10 anni fa, cosa gli diresti?\u0026rdquo;.\n Secondo voi, cosa posso avergli risposto? \u0026ldquo;Lo stesso consiglio che mi rimprovero di non avere applicato. Non hai firmato un patto di sangue su un progetto. Se non ti porta più nulla di interessante, guarda altrove\u0026rdquo;\n Alla fine, la parte più difficile è stata quella di dire \u0026ldquo;ciao, io voglio andare altrove\u0026rdquo; a me stesso rimettendomi in gioco. Purtroppo, avevo utilizzato poco Linkedin sino a quel momento e non ero visibile come ora. Aspettate, riformulo la frase.\n Anche adesso non ho un seguito esagerato, ma riesco ad essere trovato e contattato da nuovi clienti per nuovi progetti, e variare progetto, anche se per poco, aiuta. L\u0026rsquo;esperienza genera esperienza. Anche il rapportarsi con nuovi team aiuta a capire come vengono affrontati i progetti ed i costi.\n Non fatevi sfruttare. Non fatevi mettere in un angolino. Non fatevi dare lavori monotoni da copia ed incolla.\n Infine, e questa ve la scrivo separata perché merita una maggiore attenzione, NON fatevi sminuire e/o sottovalutare per quello che siete con \u0026ldquo;contentini\u0026rdquo; oppure con poca iniziativa personale.\n Se un team vuole un programmatore \u0026ldquo;CTRL+C \u0026amp; CTRL+V\u0026rdquo; ricordatevi: NON dovete essere voi!\n Come fare per diventare un senior back-end developer? Questo tema -anche da quello che leggo sui social- è parecchio discusso.\n Certificazioni? È dal 2018 che dico \u0026ldquo;adesso studio e provo a prendere la mia prima certificazione Microsoft\u0026rdquo;. Secondo voi come è andata? Ovviamente ho studiato ma non ho mai provato a fare delle simulazioni d\u0026rsquo;esame e tanto meno a prenderla. Eppure, lavoro quasi esclusivamente su Cloud Azure!\n Esperienze? Si, queste servono e tanto! Non cercate di \u0026ldquo;farla\u0026rdquo; troppo lontano. Cominciate con quanto alla vostra portata e poi aumentate. Aprire e/o cominciare con un progetto mostruoso non vi lascerà capire le cose come serve.\n Il backend a mio avviso è sentimento puro e odiarlo può essere facile soprattutto all\u0026rsquo;inizio. Ogni tanto ripenso ad alcuni progetti \u0026ldquo;datati\u0026rdquo; e mi domando: ora come l\u0026rsquo;avrei fatto? Sappiate che spesso (=sempre) la risposta è diversa dal progetto svolto.\n Volete sapere cosa vi serve davvero per imparare a crescere in questo mondo?\n - BUG\n- Crollo delle performance\n  Scrivere del codice è facile (circa).\nScrivere IL codice è difficile.\n  Ragazzi, diciamola tutta\u0026hellip; Quando ho cominciato programmare non era come adesso. Ho cominciato con ASP3.0 e, se volete cercare della documentazione, fate pure. Avete idea di cosa voleva dire sviluppare agli inizi del 2000? Niente NuGet e la ruota andava inventata ogni volta.\n Mi sento privilegiato ad avere cominciato in quel momento. L\u0026rsquo;esperienza fatta per scrivere determinate funzionalità ora vi manca in quanto integrata o nei framework o nei NuGet. Volete crescere? Provate a titolo di studio a non usare nulla di pronto \u0026hellip;\n Parlando di successi, qual è il tuo prossimo obiettivo? Quale ruolo vorresti ricoprire entro i prossimi 3 anni?  Come mi vedo da qua a tre anni? Personalmente spero di continuare ad abbronzarmi con la luce da monitor emessa da Visual studio (tema dark) aperto.\n Il grande dilemma che mi pongo spesso è il seguente: in che ambito vorresti programmare? Pensando a questo penso di volere cambiare (o almeno introdurre) ambiti diversi.\n Lavorare con i Big Data è davvero stimolante, ma mi piacerebbe avviare sviluppi in altri ambiti.\nQuali? Al momento ho due filoni nella mia mente: AI \u0026amp; Data Analysis. Come mai? Avere i dati è un discorso. Saperli utilizzare e farli fruttare è un discorso diverso.\n Sempre in C# come dall\u0026rsquo;uscita della primissima versione di .NET? A questa domanda non mi sono ancora dato una risposta.\n Sappiamo tutti benissimo che tre anni nel nostro mondo sono pari a tre ere geologiche per i comuni mortali. Speriamo solo di riuscirci prima che sia troppo tardi!\n Un grazie infinito ad Andrea per aver accettato di partecipare!\n Riferimenti Profilo LinkedIn\nGitHub\nBlog\n", "url": "https:\/\/theredcode.it\/voglio-diventare-un-senior-back-end-developer\/" }, "https:\/\/theredcode.it\/machine-learning-in-una-settimana\/": { "title": "Machine Learning in una settimana", "tags": ["intelligenza-artificiale",], "content": "Intro Entrare nel mondo del machine learning può sembrare un qualcosa di impossibile, soprattutto se inizi dalla fine.\n Tuttavia, esistono moltissime risorse online totalmente gratuite che permettono di accelerare il percorso di formazione e di apprendere velocemente una serie di competenze di base.\n Vediamo quindi come dedicarsi ad imparare il machine learning in una settimana e preparare il terreno per approfondire molto di più!\n Piccolo disclaimer: conoscere Python e avere qualche nozione di matematica e statistica di base è sicuramente di grande aiuto.\n Lunedì  Riferimenti: Imparare il machine learning con Python: https://www.datacamp.com/community/tutorials/machine-learning-python Librerie da studiare: Scikit-learn e pandas per la gestione dei dati; Matplotlib per la visualizzazione dei dati;  La prima giornata dovrebbe concentrarsi nell’imparare in maniera generica che cos’è il machine learning e come gestire dati di diverse tipologie e che provengono da diverse fonti.\n Durante il tuo percorso professionale infatti ti renderai conto che man mano che vai avanti, il recupero e la pulizia dei dati può richiedere molto più tempo rispetto all\u0026rsquo;effettivo tempo dedicato all’applicazione di meccanismi di apprendimento automatico.\n In questo senso, la capacità di scrivere script per estrarre dati dai file o eseguire operazioni di web scraping sono spesso abilità essenziali per aspiranti professionisti dell\u0026rsquo;apprendimento automatico.\n Martedì Riferimenti: Scegliere il giusto algoritmo: https://scikit-learn.org/stable/tutorial/machine_learning_map/ Dataset: https://www.kaggle.com/spscientist/students-performance-in-exams Librerie da utilizzare: Scikit-learn per la stima; Matplotlib per mostrare un riepilogo dei dati iniziali;  Applicare quello che si impara al mondo reale è fondamentale. Quando si tocca con mano un problema reale, è più semplice memorizzare e analizzare quanto fatto, soprattutto se ci perdiamo diverso tempo.\n Un modo per farlo può essere quello di utilizzare un dataset come quello riportato tra i riferimenti e porsi delle domande del tipo: “come posso stimare il voto finale dell’esame, sapendo il livello di istruzione dei genitori dello studente e il tipo di pranzo che hanno avuto?\n Utilizzando le librerie messe a disposizione e scegliendo il giusto algoritmo, è possibile risolvere facilmente problemi come questi.\n La consuetudine in questo tipo di attività è che i dati messi a disposizione vengano visualizzati per ottenere un quadro iniziale della situazione, per poi passare alla risoluzione effettiva.\n Risolvere un problema come questo può sembrare piuttosto banale, ma posso assicurare che approcciarsi ad un argomento nuovo e toccare con mano i risultati prodotti dal lavoro è una forte spinta per la tua motivazione!\nMercoledì Riferimenti: Capire la regressione: https://towardsdatascience.com/understanding-the-fundamentals-of-linear-regression-7e64afd614e1 Capire la classificazione: https://towardsdatascience.com/classification-lets-understand-the-basics-78baa6fbff48 Capire il clustering: https://machinelearningmastery.com/clustering-algorithms-with-python/  Torniamo alla fase iniziale di apprendimento e iniziamo a comprendere le potenzialità di alcune attività, come la regressione e la classificazione. Utilizzando lo schema visto il giorno prima, concentriamoci su due problemi: cosa succede quando applichiamo un algoritmo? Cosa c’è dietro le quinte?\n Passiamo quindi a studiare nel dettaglio cosa succede ai meccanismi di regressione, classificazione e clustering: capire cosa c’è sotto al cofano è fondamentale per applicare al meglio queste tecniche.\n Non è necessario imparare a memoria l’algoritmo, ma è fondamentale comprenderlo: questo rende la fase di apprendimento effettiva, perché non si tratta più dell’applicazione meccanica di algoritmi, ma della risoluzione di problemi.\nGiovedì  Riferimenti: Kaggle: https://www.kaggle.com/competitions Competizione sui tweet più “disastrosi”: https://www.kaggle.com/c/nlp-getting-started  Tempo di mettersi alla prova: sul sito di Kaggle sono presenti moltissime competizioni che permettono di mettere alla prova le proprie capacità. Non tutte sono alla nostra portata per il momento, ma possiamo filtrare per beginners (o magari esplorare quelle già concluse) e avviarci verso un nuovo progetto.\n Un esempio? Vediamo la competizione proposta per chi si approccia al mondo dell’intelligenza artificiale e vuole concentrarsi nell’ambito dell’analisi del linguaggio naturale: la challenge proposta non ha un dataset particolarmente grande ed è un’attività stimolante.\n Il bello di questi progetti è il misurarsi con sé stessi: può essere estremamente frustrante passare le ore a studiare algoritmi e teoremi, per poi ritrovarsi davanti ad un problema reale senza alcuna certezza di dove iniziare con la risoluzione.\n Venerdì Riferimenti: Knime: https://www.knime.com/getting-started-guide Il libro di Big Data Analytics: https://amzn.to/37TY2e3  Il mondo del machine learning è davvero ampio, per cui può essere utile apprendere come utilizzare degli strumenti più “visuali”: un esempio è KNIME Analytics Platform, un programma open-source che permette di creare dei workflow per la scienza dei dati anche attraverso tecniche di machine learning disponibile per tutti i sistemi operativi.\n Tip: se vuoi imparare nel dettaglio come usarlo, consiglio vivamente di leggere il libro Big Data Analytics di Andrea De Mauro, che porta molti esempi pratici di casi d’uso reali e di cui esiste una recensione qui!\n Machine Learning in una settimana :S\n Conclusioni  Farlo per una settimana non solo sarà molto divertente, ma può anche incrementare la tua consapevolezza dell’utilità e dell’importante riscontro nell’utilizzare queste tecniche nel mondo reale.\n Alla fine di questa intensa settimana, dovresti essere in grado di saper svolgere qualche attività di base. Personalmente, posso dire che più ne imparo e più ci lavoro, più vedo quali e quante aree possono essere utilizzate per risolvere i problemi.\n Il machine learning è un campo molto vasto e le professioni che richiedono queste competenze sono molte e diverse: se dopo questa settimana ti piace l’idea di fare di questa materia il tuo futuro lavoro, dai un’occhiata a questo articolo per cercare una specializzazione che ti stimoli!\n", "url": "https:\/\/theredcode.it\/machine-learning-in-una-settimana\/" }, "https:\/\/theredcode.it\/pagamenti-con-paypal-e-ionic\/": { "title": "Pagamenti con Paypal e Ionic", "tags": ["ionic",], "content": " Sapevi che è possibile effettuare pagamenti con Paypal e Ionic? Ormai creare un\u0026rsquo;app che integri anche operazioni di pagamento è fondamentale; ad oggi, possono essere utilizzati diversi gateway di pagamento, tra cui Stripe (se non l\u0026rsquo;hai ancora letto, trovi qui l\u0026rsquo;articolo!), Braintree e ApplePay.\n Oggi, vedremo Paypal: questo metodo di pagamento può essere integrato nei siti web e nelle app mobile con pochi e semplici step.\n Repository\nhttps://github.com/serenasensini/Ionic5-pagamenti-con-Paypal.git\n Intro  PayPal è una società americana che gestisce un sistema di pagamenti online in tutto il mondo e supporta trasferimenti di denaro online tra persone fisiche ed anche attività commerciali. Si tratta di una validissima alternativa ai tradizionali metodi cartacei e per di più a costi molto contenuti.\n Logo di Paypal\n Questa società è stata fondata da un personaggio a noi noto: sai chi? Clicca qui per scoprirlo!\n Hands on!  Per creare un’app che possa gestire i pagamenti, è necessario seguire alcuni passi, tra cui la creazione di un ambiente chiamato sandbox per effettuare i test: se questo termine fosse nuovo, possiamo definire una sandbox come un tipo di ambiente per testare il software che consente l\u0026rsquo;esecuzione isolata di parti di programmi per valutazione, monitoraggio o test indipendenti.\n In questo modo, sarà possibile effettuare dei pagamenti di prova per vedere se tutto il giro ci torna e poi passare alla versione di produzione!\n Creazione account developer Paypal  Per configurare i pagamenti PayPal nella nostra app, è necessario creare un conto PayPal Business e questa è un’operazione che andrà fatta nel momento in cui si decida di pubblicare l’app negli store ufficiali.\n A scopo di test, è possibile utilizzare gli account di test Sandbox. I test saranno esattamente come i pagamenti in tempo reale, ma non detrarranno denaro dal tuo account o dalla tua carta di credito.\n Per ottenere le credenziali Sandbox, procediamo nel seguente modo: colleghiamoci al sito https://developer.paypal.com/developer/accounts/ e creiamo un account Sandbox di test:\n Creazione account sandbox\n Dopodiché, clicchiamo su “My Apps \u0026amp; Credentials” e clicchiamo su \u0026ldquo;Create app\u0026rdquo;: in questo modo, sarà possibile creare tutto l\u0026rsquo;occorrente per iniziare con l\u0026rsquo;integrazione di Paypal.\n Gestione dell\u0026rsquo;integrazione con la tua app\n Le credenziali che andranno collegate all’account di prova sandbox saranno disponibili all\u0026rsquo;interno della nostra app: per esempio, cliccando su \u0026ldquo;Default Application\u0026rdquo; vedremo qualcosa di simile alla seguente schermata:\n Esempio di credenziali API per l\u0026rsquo;ambiente di sandbox\n Fin qui ci siamo!\n Installazione delle dipendenze  Per abilitare il plugin di Paypal sull’app Ionic, installare le librerie tramite comandi:\n $ ionic cordova plugin add com.paypal.cordova.mobilesdk $ npm install @ionic-native/paypal  e importare il plugin tra i providers dell’app.module.ts:\n import { NgModule } from \u0026#39;@angular/core\u0026#39;; import { BrowserModule } from \u0026#39;@angular/platform-browser\u0026#39;; import { RouteReuseStrategy } from \u0026#39;@angular/router\u0026#39;; import { IonicModule, IonicRouteStrategy } from \u0026#39;@ionic/angular\u0026#39;; import { SplashScreen } from \u0026#39;@ionic-native/splash-screen/ngx\u0026#39;; import { StatusBar } from \u0026#39;@ionic-native/status-bar/ngx\u0026#39;; import { AppComponent } from \u0026#39;./app.component\u0026#39;; import { AppRoutingModule } from \u0026#39;./app-routing.module\u0026#39;; import { PayPal } from \u0026#39;@ionic-native/paypal/ngx\u0026#39;; @NgModule({  declarations: [AppComponent],  entryComponents: [],  imports: [  BrowserModule,  IonicModule.forRoot(),  AppRoutingModule  ],  providers: [  StatusBar,  SplashScreen,  PayPal,  { provide: RouteReuseStrategy, useClass: IonicRouteStrategy }  ],  bootstrap: [AppComponent] }) export class AppModule { }  Abilitazione del pagamento  Nel nostro file HTML del componente dove vogliamo inserire il pagamento, andremo a creare, per esempio, un pulsante che richiami la funzione di pagamento e avvii la transazione:\n \u0026lt;ion-button expand=\u0026#34;full\u0026#34; color=\u0026#34;success\u0026#34; (click)=\u0026#34;pagaConPaypal()\u0026#34;\u0026gt;Paga con PayPal\u0026lt;/ion-button\u0026gt;  Nel componente Typescript, andremo invece a creare una funzione che, usando il Client ID recuperato al passaggio precedente, effettua il pagamento.\n Inizieremo utilizzando l\u0026rsquo;oggetto PayPal con l\u0026rsquo;ambiente di Sandbox in cui andremo ad inserire la chiave recuperata per preparare il dispositivo per l\u0026rsquo;elaborazione dei pagamenti.\n Tramite la funzione prepareToRender(), passeremo questa configurazione ed eseguiremo il rendering dell\u0026rsquo;interfaccia utente di PayPal per riscuotere il pagamento dell\u0026rsquo;utente chiamando il metodo renderSinglePaymentUI ():\n this.payPal.init({  PayPalEnvironmentProduction: \u0026#39;[CLIENT_ID]\u0026#39;,  PayPalEnvironmentSandbox: \u0026#39;[CLIENT_ID]\u0026#39; }).then(() =\u0026gt; {  this.payPal.prepareToRender(\u0026#39;PayPalEnvironmentSandbox\u0026#39;, new PayPalConfiguration({  })).then(() =\u0026gt; {  const payment = new PayPalPayment(this.totale, this.currency, \u0026#39;Descrizione\u0026#39;, \u0026#39;vendita\u0026#39;);  this.payPal.renderSinglePaymentUI(payment).then((res) =\u0026gt; {  console.log(res);  }, () =\u0026gt; {  // Errore durante la transazione o chiusura della finestra  });  }, () =\u0026gt; {  // Configurazione errata  }); }, () =\u0026gt; {  // Altro });  Sostituendo i segnaposti [CLIENT_ID] con le chiavi recuperate in precedenza, potremo andare a testare i nostri pagamenti: notare che nella chiamata prepareToRender() il primo parametro è impostato a “PayPalEnvironmentSandbox”, ossia la specifica dell’ambiente di test; se invece l’app dovesse essere rilasciato, questo parametro andrebbe sostituito con “PayPalEnviromentProduction”.\n Una risposta tipo dell’esito del pagamento è la seguente:\n{  \u0026#34;client\u0026#34;: {  \u0026#34;environment\u0026#34;: \u0026#34;sandbox\u0026#34;,  \u0026#34;product_name\u0026#34;: \u0026#34;PayPal iOS SDK\u0026#34;,  \u0026#34;paypal_sdk_version\u0026#34;: \u0026#34;2.16.0\u0026#34;,  \u0026#34;platform\u0026#34;: \u0026#34;iOS\u0026#34;  },  \u0026#34;response_type\u0026#34;: \u0026#34;payment\u0026#34;,  \u0026#34;response\u0026#34;: {  \u0026#34;id\u0026#34;: \u0026#34;PAY-123XXX\u0026#34;,  \u0026#34;state\u0026#34;: \u0026#34;approved\u0026#34;,  \u0026#34;create_time\u0026#34;: \u0026#34;2021-10-03T13:33:33Z\u0026#34;,  \u0026#34;intent\u0026#34;: \u0026#34;sale\u0026#34;  }  All’interno del campo response abbiamo l’esito del pagamento, mentre nel campo client, troviamo le informazioni dell’ambiente tramite il quale è stato effettuato il pagamento.\nSemplice, no?\n  Risorse utili   Letture consigliate: Ionic 5 (disponibile su Amazon) Ionic 6: cosa cambia  ", "url": "https:\/\/theredcode.it\/pagamenti-con-paypal-e-ionic\/" }, "https:\/\/theredcode.it\/recensioni\/software-licensing-e-data-governance\/": { "title": "Software Licensing E Data Governance", "tags": [], "content": "Software licensing e data governance era nel mio Kindle da qualche mese, ma purtroppo non c’era stata occasione di leggerlo con la dovuta attenzione; finalmente, dopo qualche settimana in cui è stato possibile ritagliarsi una mezz’ora al giorno per leggerlo, dedichiamo uno spazio a questo piccolo, ma -spoiler- incredibile manuale.\nRanking Anno 2020 Autore Simone Aliprandi Genere Manuale Livello Per approfondire Scorrevolezza 9 / 10 Originalità 10 / 10 Valutazione 10 / 10 Recensione La prima nota positiva riguarda sicuramente la diversità di argomenti trattati: non si parla di software in senso generico, ma di tutto ciò che coinvolge la creazione e la progettazione del software. Usare librerie, sfruttare repository online, utilizzare open data: questi sono tutti temi che Simone Aliprandi, autore del libro, ha saputo spiegare in maniera molto chiara ed esaustiva, senza mai tralasciare anche i riferimenti alle norme giuridiche. Ma partiamo dall’inizio: si comincia dal diritto d’autore e si fa una panoramica molto ampia su come questo funzioni. Il tema non è per nulla scontato ed è interessante vedere come ci siano una serie di misunderstanding circa l’utilizzo di termini come proprietà intellettuale, copyright, copyleft e via dicendo. Nella parte introduttiva viene infatti spesa qualche parola per definire i diversi perimetri di queste terminologie, che poi ci accompagneranno nel corso di tutto il libro. Non solo: capire qual è il campo di azione del diritto d’autore in ambito software è fondamentale per riuscire a proteggersi e a proteggere. Lo sviluppo software è un ambito relativamente nuovo in ambito giuridico e come l’autore più volte ha ricordato all’interno del manuale, non sempre la legislazione riesce a stare al passo con l’evoluzione tecnologica. È facile incappare tra l’altro in un errore abbastanza comune. Si pensa che il diritto d’autore si applichi solo a seguito di un’apposita registrazione tramite qualche ufficio o istituzione pubblica: in realtà, la semplice creazione implica l’associazione di questo diritto (con i limiti del caso, che riguardano le tipologie di opere coperte da questo diritto). Particolarmente interessante è il capitolo dedicato al software libero e open source. Grazie ad una brevissima introduzione su come questi due settori -affini, ma diversi- siano nati, vengono definite le mille e una licenze che sono a disposizione e che abbiamo davanti agli occhi tutti i giorni. Per esempio, per chi sviluppa e condivide il proprio codice su piattaforme come GitHub, sarà capitato spesso di ritrovarsi a dover scegliere una licenza adatta. Barcamenarsi tra le moltissime possibilità a disposizione non è affatto facile: in questo senso, Simone riesce invece a creare e definire molto bene i limiti e gli utilizzi delle licenze a nostra disposizione. Vengono messi anche a disposizione diversi schemi che riassumono le differenze tra questa tipologia di licenze, nonché l’applicabilità e i diritti relativi: fondamentale quando si tratta di avere a che fare con dei progetti personali, ma soprattutto lavorativi. Abbiamo detto all’inizio che non si parla solo di software in senso stretto, ma anche di tutto ciò che è coinvolto nella “messa in produzione” del codice: importante è proprio il ruolo delle banche dati e di come queste devono essere gestite e soprattutto utilizzate. In un momento storico in cui gli open data sono sempre più accessibili e presenti all’interno del contesto dello sviluppo software, è interessante come l’argomento sia tuttora in corso di trattazione e i problemi di compatibilità tra licenze che riguardano questa tipologia di data sia un tema molto caldo. Soprattutto nell’ambito della ricerca scientifica, questo tipo di dato è fondamentale e va regolamentato conseguentemente: oltre al potenziale infinito nel rispettare i principi cardine alla base degli open data, l’applicabilità è infinita e può davvero portare benefici alla comunità intera. Chiaramente, si tratta di un argomento molto delicato e che richiede particolare attenzione anche in materia di licenze per quanto riguarda la condivisione e l’utilizzo: avere a disposizione dei dati “in sola lettura” è di per sé inutile. Ultima -ma non ultima- nota sul tema dati personali: l’autore spende diverse pagine per parlare di privacy -altro termine abusato nel mondo di oggi- e di come questo si accosti al GDPR.\nCuriosità La parola “licenza” deriva dal latino e significa permettere. Già solo questo aiuta a ricordare a cosa servono le licenze! Mai sentito parlare di Affero GPL? Si tratta di una licenza pubblicata sempre dalla Free Software Foundation che riguarda il software reso fruibile tramite soluzioni “remote”. Inoltre, sapevi che Simone terrà un corso online che parla di copyright e social media? Dai un\u0026rsquo;occhiata qui per iscriverti!\nLezione imparata Il concetto del dual licensing o multilicensing; Come acquisire e cedere software tramite le licenze; Esistono dei dati “indirettamente personali”, come quelli meteorologici o territoriali; La protezione del diritto d’autore copre le espressioni, ma non le idee!  Quotes   In un ventennio di evoluzione normativa e giurisprudenziale, nonché di approfondimenti dottrinali, la scienza giuridica ha fornito risposte a questi interrogativi (parlando di leggi e livelli di applicazione). La situazione è tutt’altro che semplice e uniforme, anche per il semplice fatto che l’evoluzione delle tecnologie telematiche ha una velocità tale per cui il mondo del diritto non riesce a tenere il passo.\n Disponibile su Amazon ", "url": "https:\/\/theredcode.it\/recensioni\/software-licensing-e-data-governance\/" }, "https:\/\/theredcode.it\/docker\/differenze-tra-run-cmd-e-entrypoint\/": { "title": "Differenze tra RUN CMD e ENTRYPOINT", "tags": ["docker","dockerfile",], "content": "Differenze tra RUN CMD e ENTRYPOINT: uno degli argomenti peggiori quando si tratta di avere a che fare con Docker. Oggi sfatiamo qualche mito e facciamo chiarezza su queste tre istruzioni.\n Introduzione  Alcune istruzioni di Docker come quelle sopracitate sembrano molto simili e causano confusione tra gli utilizzatori che hanno appena iniziato a lavorare con Docker o lo fanno in modo discontinuo.\n Versione breve RUN esegue i comandi in un nuovo layer e crea una nuova immagine, spesso definita intermedia. Questo comando viene spesso utilizzato per l\u0026rsquo;installazione di pacchetti tramite i vari package manager. CMD definisce il comando e/o i parametri predefiniti, che possono essere sovrascritti dalla riga di comando durante l\u0026rsquo;esecuzione del container Docker. ENTRYPOINT configura un container che verrà eseguito come eseguibile.  Versione lunga  Quando Docker esegue un container, esegue un\u0026rsquo;immagine al suo interno. Questa immagine viene solitamente creata eseguendo le istruzioni definire nel Dockerfile, che aggiungono livelli (o layer) sopra l\u0026rsquo;immagine esistente.\n La prima istruzione rappresenta la distribuzione scelta -solitamente un sistema operativo con qualche pacchetto- e ogni livello aggiuntivo crea una nuova immagine.\n L\u0026rsquo;immagine finale di Docker ricorda una cipolla con il sistema operativo all\u0026rsquo;interno e diversi livelli sopra questo primo strato. Ad esempio, la tua immagine può essere creata installando diversi pacchetti tramite apt e la tua applicazione può quindi basarsi su una versione minificata di Ubuntu 20.04.\n Architettura Docker come una cipolla\n Modalità diretta vs. modalità shell  Alcuni di questi comandi possono essere eseguiti in due modalità, diretta e shell: nel primo caso, la sintassi è del tipo:\n $ RUN [“apt”, “install”, “python3”]  Nel secondo caso invece, la sintassi è la seguente:\n $ RUN apt install python3  Quando l\u0026rsquo;istruzione viene eseguita con la modalità diretta, viene chiamato l\u0026rsquo;eseguibile e l\u0026rsquo;elaborazione della shell non avviene. Cosa vuol dire?\n Vuol dire che il seguente comando inserito all’interno di un Dockerfile non riuscirebbe a valorizzare la variabile e produrrebbe un risultato pari a “Hello $name”:\n ENTRYPOINT [\u0026#34;/bin/echo\u0026#34;, \u0026#34;Hello $name\u0026#34;]  In questo altro caso, l’output sarebbe corretto:\n ENV name John Doe ENTRYPOINT [\u0026#34;/bin/bash\u0026#34;, \u0026#34;-c\u0026#34;, \u0026#34;echo Hello $name\u0026#34;] $ Hello John Doe   Comando RUN  Abbiamo detto che il comando RUN esegue i comandi in un nuovo layer creando una nuova immagine. Quando usato per installare pacchetti software, fa sì che venga creata un\u0026rsquo;immagine intermedia che poi viene scartata una volta terminata l\u0026rsquo;esecuzione dell\u0026rsquo;attività richiesta.\n Può essere eseguito in entrambe le modalità.\n Esempi  $ RUN npm install python3 $ RUN apt update \u0026amp;\u0026amp; apt install -y \\  git \\  xz\\  unzip  Comando CMD  L\u0026rsquo;istruzione CMD consente di impostare un comando predefinito, che verrà eseguito solo quando si esegue il container senza specificare un comando. Se il container Docker viene eseguito con un comando, il comando predefinito verrà ignorato.\n Se Dockerfile ha più di un\u0026rsquo;istruzione CMD, tutte le istruzioni CMD tranne l\u0026rsquo;ultima vengono ignorate.\n Può essere eseguito in entrambe le modalità.\n Esempi  $ CMD echo “Hello world” $ CMD node server.js   Comando ENTRYPOINT  L\u0026rsquo;istruzione ENTRYPOINT consente di configurare un container che verrà eseguito come eseguibile. È simile all’istruzione CMD, perché consente anche di specificare un comando con dei parametri, ma a differenza è che i parametri non verranno ignorati quando il container Docker viene eseguito con i parametri passati tramite riga di comando.\n Esempi  FROM ubuntu:trusty ENTRYPOINT [\u0026#34;/bin/ping\u0026#34;,\u0026#34;-c\u0026#34;,\u0026#34;3\u0026#34;] CMD [\u0026#34;localhost\u0026#34;] ENTRYPOINT /bin/echo \u0026#34;Welcome, $name\u0026#34; COPY entrypoint.sh /entrypoint.sh ENTRYPOINT [\u0026#34;/entrypoint.sh\u0026#34;]  Esempi di utilizzo Airflow  FROM python:3.8-alpine ENV AIRFLOW_VERSION=1.10.11 ENV AIRFLOW_EXTRAS=async,all_dbs,celery,crypto,devel_hadoop,jdbc,ldap,password,redis,s3,samba,ssh,statsd ENV AIRFLOW_HOME=/opt/airflow ENV AIRFLOW_CONFIG=/opt/airflow/airflow.cfg RUN set -xe \\  \u0026amp;\u0026amp; apk add --no-cache \\  build-base \\  cyrus-sasl-dev \\  freetds \\  freetds-dev \\  krb5-dev \\  libffi-dev \\  mariadb-dev \\  postgresql-dev \\  python3-dev \\  \u0026amp;\u0026amp; pip install --no-cache-dir cython numpy psycopg2-binary \\  \u0026amp;\u0026amp; pip install --no-cache-dir apache-airflow[${AIRFLOW_EXTRAS}]==${AIRFLOW_VERSION} \\  \u0026amp;\u0026amp; apk del \\  build-base \\  cyrus-sasl-dev \\  freetds-dev \\  krb5-dev \\  libffi-dev \\  mariadb-dev \\  postgresql-dev \\  python3-dev \\  \u0026amp;\u0026amp; rm -rf /root/.cache/pip WORKDIR ${AIRFLOW_HOME} VOLUME ${AIRFLOW_HOME} EXPOSE 8080 ENTRYPOINT [\u0026#34;airflow\u0026#34;] CMD [\u0026#34;--help\u0026#34;]  Django CMS FROM vimagick/python:2 WORKDIR /app RUN set -xe \\  \u0026amp;\u0026amp; apk add -U py-pillow tzdata \\  \u0026amp;\u0026amp; pip install --no-cache-dir djangocms-installer \\  \u0026amp;\u0026amp; mkdir -p data \\  \u0026amp;\u0026amp; djangocms --db sqlite://localhost/data/project.db \\  --filer \\  --languages en \\  --no-input \\  --parent-dir . \\  --skip-empty-check \\  --utc \\  mysite VOLUME /app/data EXPOSE 80 CMD [\u0026#34;python\u0026#34;, \u0026#34;manage.py\u0026#34;, \u0026#34;runserver\u0026#34;, \u0026#34;0.0.0.0:80\u0026#34;]   MariaDB FROM alpine RUN set -xe \\  \u0026amp;\u0026amp; apk add -U bash \\  mariadb \\  mariadb-client \\  tzdata \\  \u0026amp;\u0026amp; mkdir -p /run/mysqld \\  \u0026amp;\u0026amp; chown mysql:mysql /run/mysqld \\  \u0026amp;\u0026amp; sed -Ei -e \u0026#39;s/^(bind-address|log)/#\u0026amp;/\u0026#39; \\  -e \u0026#39;s/^\\[mysqld\\]$/\u0026amp;\\nskip-host-cache\\nskip-name-resolve\\nuser=mysql/\u0026#39; /etc/mysql/my.cnf \\  \u0026amp;\u0026amp; rm -rf /var/cache/apk/* COPY docker-entrypoint.sh / VOLUME /var/lib/mysql ENTRYPOINT [\u0026#34;/docker-entrypoint.sh\u0026#34;] EXPOSE 3306 CMD [\u0026#34;mysqld\u0026#34;]   Tomcat FROM tomcat:8.0-alpine ADD sample.war /usr/local/tomcat/webapps/ EXPOSE 8080 CMD [\u0026#34;catalina.sh\u0026#34;, \u0026#34;run\u0026#34;]  Se ancora non fossero chiare le differenze, prova a dare un’occhiata tra le risorse utili per trovare ispirazione!\n Risorse utili Docker Pillole di Docker: RUN, CMD, ENTRYPOINT Dockerfile cheatsheet Docker cheatsheet ", "url": "https:\/\/theredcode.it\/docker\/differenze-tra-run-cmd-e-entrypoint\/" }, "https:\/\/theredcode.it\/tags\/dockerfile\/": { "title": "dockerfile", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/tags\/dockerfile\/" }, "https:\/\/theredcode.it\/101-deep-learning\/": { "title": "101 - Deep learning", "tags": ["intelligenza-artificiale",], "content": "Il deep learning è un campo di cui si sente parlare sempre più spesso: vediamo di cosa si tratta e come funziona, sfruttando alcuni esempi pratici.\n Cos\u0026rsquo;è Il deep learning è quel campo di ricerca dell\u0026rsquo;apprendimento automatico e dell\u0026rsquo;intelligenza artificiale che si basa su diversi livelli di rappresentazione, corrispondenti a gerarchie di caratteristiche di fattori o concetti, dove i concetti di alto livello sono definiti sulla base di quelli di basso.\n Tecnica sviluppata già negli anni ’80 (grazie a persone come Geoff Hinton, Yann Lecun, Yoshua Bengio e Jürgen Schmidhuber) ispirandosi ai risultati sulla cognizione umana.\n Uno degli obiettivi è ignorare la (noiosa) fase di definizione di feature ad-hoc per uno specifico problema da esaminare e lasciare alle reti neurali il compito di identificare le features più adatte; risulta particolarmente utile in scenari dove si ha a che fare con grosse moli di dati perlopiù complessi e non strutturati.\n Tra i vantaggi del deep learning c’è la possibilità di condividere e riutilizzare i parametri ottenuti durante l’apprendimento per uno specifico task in altri contesti, nonché la possibilità di sviluppare un unico framework computazionale che può essere implementato ed eseguito su diverse piattaforme.\n Rapporto con l\u0026rsquo;intelligenza artificiale e il machine learning\n Come funziona  Invece di una singola rete con molti parametri da individuare tutti insieme, si suddividono le fasi di elaborazione in più livelli distinti a cascata. L’output di ogni rete neurale è l’input della successiva.\n Tipicamente l’input iniziale è a basso livello (ad esempio, si sfruttano piccoli gruppi di pixel di un’immagine) e ogni rete genera delle rappresentazioni più ad alto livello (ad esempio il contorno viso, la bocca, gli occhi, ecc.). Le elaborazioni degli strati intermedi sono tipicamente meccanismi non supervisionati.\n Funzionamento del deep learning\n  Esempi di utilizzo  Assistenti virtuali  Il cuore della \u0026ldquo;traduzione\u0026rdquo; del discorso e del linguaggio è basate su tecniche di deep learning. Esempi comuni di assistenti virtuali sono Cortana, Siri e Alexa.\n Auto a guida autonoma  Per addestrare un\u0026rsquo;auto come questa, ad esempio una Tesla, sono necessarie un\u0026rsquo;esperienza e una competenza simili a quelle umane.\n Per comprendere gli scenari del traffico per le strade, il significato dei segnali stradali, i pedoni che attraversano la strada, i limiti di velocità e molti altri fattori come questi, è chiaro come sia necessaria una grande quantità di dati.\n Che se ne creda, la prima auto a guida autonoma ha utilizzato le reti neurali per rilevare le linee che delimitano le corsie stradali, segmentare il terreno e altre funzionalità: si chiamava ALVINN ed è stata creata nel 1989.\n Chatbot  La continua interazione dei chatbot con gli esseri umani per fornire servizi ai clienti richiede risposte basate sul contesto, e spesso non sono facilmente interpretabili, magari per banali errori di battitura.\n Per rispondere in modo utile a tutte le domande difficili e fornire una risposta appropriata, è necessario sfruttare diverse tecniche di deep learning, che permettono di fornire in input dialoghi e conversazioni in linguaggio umano che possono essere elaborate e sfruttate per costruire uno strumento di risposta automatica.\n Riconoscimento facciale  Il riconoscimento facciale ha molte funzionalità, dall\u0026rsquo;utilizzo nell\u0026rsquo;ambito della sicurezza al meccanismo fino alla funzione di tagging utilizzato da Facebook ogni qualvolta si aggiunge una foto che contenga delle persone.\n Questo campo di applicazione tuttavia non è semplicissimo: ad esempio, riconoscere una stessa persona con aumento o perdita di peso, dopo la crescita di una barba o senza, nuove acconciature e così via, sono tutte attività che spesso sono difficile per un essere umano, ma non sono difficili tuttavia per un algoritmo di questo tipo.\n Sanità  Personalizzazione dei farmaci in base al profilo genetico e alle malattie sono compiti perfetti come applicazioni del deep learning: questo campo ha ampliato la portata di applicazioni in ambito medico e ha attirato l\u0026rsquo;attenzione delle più grandi aziende farmaceutiche.\n Non solo: il deep learning è alla base di altri meccanismi, come il Deep Fake. Non ne hai mai sentito parlare? Dai un\u0026rsquo;occhiata qui!\n Altri casi d\u0026rsquo;uso Esistono molti livelli di applicazione di questa tecnica, alcuni anche molto specifici:\n POS tagging; Named-entity recognition; Clustering; Similarità tra documenti; Sentiment analysis; Riconoscimento di oggetti nelle immagini.  Risorse utili Costruire un chatbot sfruttando il deep learning (inglese) Deepfake e perché (non) preoccuparsi GAN ed healthcare ", "url": "https:\/\/theredcode.it\/101-deep-learning\/" }, "https:\/\/theredcode.it\/101-lambda-e-api-gateway\/": { "title": "101 Lambda e API Gateway", "tags": ["aws","gateway","lambda",], "content": "Lambda e API Gateway: una combinazione vincente per creare del codice serverless.\n  Introduzione  Immaginiamo di aver bisogno di scrivere una funzione che ci restituisca un risultato, magari in formato JSON, dopo aver eseguito qualche operazione.\n  Just a gif  Magari si tratta di una singola funzione -o anche solo un paio- e mettere su un’intera infrastruttura sembra assurdo: grazie alle funzioni Lambda, il problema può essere facilmente risolto.\n Just a gif  Cos’è una funzione Lambda  Si tratta di un servizio offerto da AWS che permette di eseguire del codice serverless, ossia senza la necessità di avere a disposizione un server o di doverne effettuare il provisioning.\n Il bello delle funzioni Lambda è questo: organizzando il codice in singole funzioni sotto forma di richiesta = risultato, Lambda andrà ad eseguire la funzione solo quando è necessario ridimensionandosi automaticamente.\n Le tariffe sono calcolate solo in base ai tempi di calcolo, perciò non viene addebitato alcun costo quando il codice non è in esecuzione, ma solo quando viene effettivamente utilizzato.\n Qui risiede il concetto chiave: per pagare il meno possibile, queste funzioni devono essere efficienti al massimo. Sono supportati diversi linguaggi, tra cui Node.js e Python, motivo per cui possiamo scrivere il codice utilizzando lo strumento che più ci torna facile e poi crearne una funzione Lambda.\n Come creare una funzione Lambda  Per creare una funzione è necessario prima di tutto accedere alla console di AWS e cercare tra i servizi “Lambda”: la schermata mostrata di seguito è il tipico scenario:\n  Elenco funzioni Lambda  Cliccando sul pulsante in alto a destra “Crea funzione”, si aprirà una schermata come la seguente: da qui, potremo creare la nostra funzione assegnandole un nome e scegliendo quale linguaggio andremo ad utilizzare:\n  Creazione di una funzione Lambda  Le possibilità sono diverse: Node.js, Ruby, Python, ma anche Go, Java 11 e .NET Core 3.1. In questo caso di esempio, andremo ad utilizzare Python 3.7.\n  Elenco dei linguaggi disponibili  Una volta inserite le informazioni richieste nel form precedente, visualizzeremo una schermata come quella riportata nella prossima figura, dove avremo a disposizione un file chiamato lambda_functions.py che ci servirà per inserire il nostro codice.\n  Panoramica della funzione appena creata  Clicchiamo quindi sul file Python e vediamo che c’è già del codice: quello che ci viene mostrato nell’esempio, ci permette di restituire un JSON di risposta con codice HTTP pari a 200 e un body con messaggio tipico da funzioni “Hello world”.\n Codice di esempio per un banale \u0026#34;Hello world\u0026#34;  In questo caso, ci interessa notare due cose: il tasto “Test” ci permette di verificare se, per esempio, nella nostra funzione ci sono errori di sintassi o di esecuzione.\n Chiaramente, nel primo caso, sarebbe opportuno testare prima la funzione in locale e poi creare una Lambda, ma si tratta di una funzionalità molto utile, perché ci permette anche di definire degli “eventi”, ossia dei parametri in ingresso che ci permettono di rendere dinamica la funzione.\n Questi eventi possono essere creati per testare più casi d’uso, utilizzando sempre il formato JSON, proprio come fosse il body di una request tradizionale:\n Esempio di evento  La seconda cosa da notare è il badge in verde sulla destra dove si dice “Changed deployed”: ogni volta che modifichiamo la nostra funzione, gli aggiornamenti devono essere deployati per poter essere utilizzate.\n Se clicchiamo sul tasto “Test”, questo è il risultato dell’esecuzione:\n  Test della funziona getHello  Oltre la response che viene visualizzata nel formato che abbiamo definito nel return della funzione, facciamo caso ai log: nell’ultima riga che afferisce al report, vengono indicati i tempi di elaborazione della funzione (1.74 ms), quanto effettivamente viene conteggiato dalla fatturazione AWS (2 ms), la dimensione della memoria e quella effettivamente utilizzata (il minimo è 128 MB).\n Dobbiamo preoccuparci dei prezzi? Assolutamente no: qui è possibile trovare un riepilogo dei costi, ma basti sapere che il piano di utilizzo gratuito per AWS Lambda include 1 milione di richieste al mese e 400.000 GB/secondo di tempo di elaborazione al mese.\n Anche ammettendo che facessimo oltre 30.000 richieste al giorno ogni giorno per un mese, non riusciremmo a superare la soglia. Non male, no?\n Ok, ora che la nostra funzione è pronta, come possiamo utilizzarla dall’esterno? Ecco qui che viene in soccorso API Gateway.\n Cos’è API Gateway Questo servizio ci permette di gestire delle API mettendosi in mezzo tra un client e una raccolta di servizi back end. In questo caso, è possibile far sì che API Gateway si metta in mezzo tra la rete Internet e le nostre Lambda.\n  Esempio di funzionamento dell\u0026#39;API Gateway Come funziona  Come fatto anche in precedenza, cerchiamo tra i servizi AWS quello relativo all’API Gateway e vedremo una schermata come la seguente:\n Panoramica dell\u0026#39;API Gateway  Per creare un API, basta cliccare nel tasto in alto a destra e scegliere la tipologia da utilizzare. Un API REST può fare al caso nostro, soprattutto se poi volessimo rendere la funzione parametrizzabile:\n Configurazione API Rest  Dopo aver cliccato su “Crea” e aver inserito le informazioni che vengono richieste nel modulo sottostante, come nome e il tipo di protocollo da utilizzare, proseguiamo e andiamo a creare tutto l’occorrente, come risorse e metodi.\n Creazione di una nuova API   Riepilogo delle risorse presenti Come prima cosa, creiamo una risorsa: questo farà sì che sia possibile accedere alla nostra API tramite degli endpoint specifici, come ad esempio getHelloWorld:\n  Creazione di una risorsa Configurazione della risorsa  Una volta creata la risorsa, passiamo al metodo: ci basterà un semplice metodo GET che ci restituisca il messaggio e il codice HTTP visto prima durante il test della Lambda:\n  Creazione di nuovo metodo  In questa sezione, abbiamo la possibilità di scegliere se collegare la nostra API ad una funzione Lambda: iniziamo a scrivere il nome della funzione (nel nostro caso, era getHello) e clicchiamo su “Salva”:\n  Configurazione del metodo  Quello che ci verrà mostrato è lo schema di funzionamento della risorsa appena creata: quando all’API Gateway arriva una richiesta, questa invoca la funzione Lambda, gestisce la risposta e la include nella response della richiesta originale.\n  Schema della risorsa  Per testarla, possiamo cliccare sul pulsante “Test” e visualizzare la stessa risposta che avevamo ottenuto in precedenza.\n Test del metodo  A questo punto, è ora di distribuire la nostra API: apriamo il menù “Operazioni”, clicchiamo su “Distribuisci”:\n Distribuzione dell\u0026#39;API  In questa sezione, andremo a definire la cosiddetta “fase”, ossia la versione in cui si trova la nostra funzione. Possiamo definirla come alpha, beta o anche v1: la fase è qualcosa che serve agli sviluppatori per indicare a che punto è la lavorazione del codice.\n  Definizione della fase dell\u0026#39;API  Clicchiamo su “Distribuzione” e vediamo una pagina come la seguente, dove in alto viene riportato l’endpoint da chiamare per utilizzare la nostra API. Lo copiamo e passiamo a testarlo!\n  Panoramica della fase  Niente di più semplice: basterà aprire Postman (o un qualsiasi altro client), inserire l’URL mostrato nella schermata, aggiungere la risorsa che abbiamo creato (nel nostro caso, gethelloworld) e specificare come metodo della richiesta GET: questo è il risultato:\n  Esempio di utilizzo con Postman  L’esempio mostrato è molto, molto semplice, ma pensiamo a qualcosa che possa prendere in input dei parametri e restituirci un risultato, senza dover ricorrere ad un intero server che ne gestisca la scalabilità, la durabilità o la resilienza, minimizzando i costi: niente male, direi!\n That’s all, folks!\n", "url": "https:\/\/theredcode.it\/101-lambda-e-api-gateway\/" }, "https:\/\/theredcode.it\/tags\/gateway\/": { "title": "gateway", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/tags\/gateway\/" }, "https:\/\/theredcode.it\/tags\/deepfake\/": { "title": "deepfake", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/tags\/deepfake\/" }, "https:\/\/theredcode.it\/deepfake-e-perch%C3%A9-non-preoccuparsi\/": { "title": "Deepfake e perché (non) preoccuparsi", "tags": ["deepfake","gan","intelligenza-artificiale",], "content": "Vediamo in che modo le reti generative avversarie hanno contributo allo sviluppo della tecnica chiamata Deepfake e perché (non) preoccuparsi della sua evoluzione e della sua rapida diffusione.\n Intro  Diverse testate online e sempre più canali mediatici parlano di questo fenomeno: c’è chi ci ride su, pensando che sia divertente “incollare” la faccia di un attore famoso sulla propria, in modo che il video sembri girato dal finto volto (vedi qui Jim Carrey nei panni di James Bond e qui i video di un creator che genera video imitando Tom Cruise in modo molto realistico), o chi ne studia le possibilità evolutive (vedi Facebook).\n Jim Carrey nei panni di James Bond grazie al Deepfake\n C’è chi è seriamente preoccupato, perché degli utilizzi non positivi sono già venuti fuori (in questo articolo si parla di come alcuni parlamentari sembra siano stati ingannati convinti di aver parlato con un politico russo).\n Vediamo però nel dettaglio di cosa stiamo parlando e quali sono i benefici e i rischi di questa tecnologia.\n Cosa vuol dire Deepfake?  Questa parola deriva da una combinazione di \u0026ldquo;fake\u0026rdquo; che sta per “falso” e “deep”, intenso come abbreviazione di deep learning. Il deep learning è un tipo di algoritmo basato sulle \u0026ldquo;reti neurali\u0026rdquo; che impara a replicare i modelli passando attraverso set di dati.\n Con queste capacità, il Deepfake può creare foto, audio o video falsi molto realistici e convincenti, che ritraggono o imitano persone che fanno o dicono cose che non hanno mai fatto, spesso riuscendo ad ingannare perfettamente il pubblico del video.\n In effetti, il Deepfake è un nuovo tipo di falsificazione di un qualunque oggetto multimediale, chiaramente più complesso da riconoscere a causa delle tecnologie utilizzate. Con il progresso delle GPU negli ultimi anni, i ricercatori sono stati in grado di sviluppare tecniche di deep learning che rendono possibili queste applicazioni, come autoencoder e GAN.\n Parliamo di numeri  Secondo un rapporto della startup Deeptrace, all\u0026rsquo;inizio del 2019 sono stati conteggiati circa 7.964 video messi in rete e frutto di Deepfake, che però sono saliti a 14.678 appena nove mesi dopo. A giugno 2020, un nuovo studio di Sensity rivela che quasi 49.081 video sono stati caricati online, con un aumento di oltre il 330 percento rispetto a luglio del 2019.\n L\u0026rsquo;atto di creare immagini o video manipolati non è nuovo, né lo è la falsificazione di volti nelle immagini. Il termine “deepfake” è apparso per la prima volta nel 2017 dopo che un utente su Reddit si è definito tale e ha condiviso video pornografici dove i protagonisti avevano volti di celebrità sui corpi di altre persone.\n In quell’occasione, la confusione fu tale che molte testate giornalistiche parlarono di video di artisti al centro di molti video per adulti.\n Questo utente ha poi rivelato in un’intervista che il codice prodotto e che ha usato era basato perlopiù su più librerie open source che, combinate insieme, hanno prodotto quel risultato. Per compilare abbastanza materiale di immagini facciali per i suoi video, ha sfruttato immagini prese da Google, screenshot di YouTube e foto d\u0026rsquo;archivio per addestrare l’algoritmo che producesse queste immagini.\n Subito dopo che l\u0026rsquo;utente ha reso pubblico il codice sorgente, sono emerse applicazioni specializzate nella creazione di deepfake come FaceSwap o FakeApp, che hanno avuto una diffusione massiva, rendendo possibile per meno esperti di digitale di utilizzare strumenti come questi.\n Com’è fatto un Deepfake  Le principali tecniche di apprendimento automatico per i deepfake tendono ad essere una combinazione dell\u0026rsquo;utilizzo di autoencoder e reti generative avversarie (abbreviate in GAN) di cui abbiamo già parlato.\n Le GAN utilizzano due reti neurali, chiamate generatore e discriminatore: queste reti sono messe in competizione tra loro, di modo che consentano al sistema di apprendere rapidamente.\n Il generatore tenterà di creare un\u0026rsquo;immagine realistica e il discriminatore proverà a determinare se si tratta di un deepfake o meno.\n Se il generatore inganna il discriminatore, il discriminatore utilizza le informazioni raccolte per diventare un giudice migliore. Allo stesso modo, se il discriminatore determina che l\u0026rsquo;immagine del generatore è un falso, la seconda rete migliorerà nel creare un\u0026rsquo;immagine falsa.\n In questo modo, man mano vengono prodotte delle immagini sempre più realistiche, che lo stesso discriminatore ha sempre più difficoltà a riconoscere.\n Perché (non) preoccuparsi  Tutto quello che abbiamo descritto finora può facilmente risultare terrificante: una tecnica del genere può avere esiti molto negativi, e come abbiamo visto i risultati non hanno tardato ad arrivare.\n Lo stesso Einstein disse, quando il fisico Leo Szilárd parlò all’amico della possibilità di utilizzare la fissione nucleare per utilizzarla nelle bombe atomiche, di non averci nemmeno pensato.\n Come spesso succede, molte delle scoperte nel campo tecnologico possono avere applicazioni positive e negative.\n Per fare un esempio, una tecnica come questa potrebbe permettere agli attori di recitare in tutte le lingue, utilizzando un attore che parla la lingua da doppiare per poi “incollare” il volto dell’originale (qui un esempio).\n La produzione di immagini false, ma realistiche, potrebbe aiutare moltissimo nella realizzazione di dataset specifici su determinate tipologie di immagini di cui non si ha un facile accesso (per questione di privacy), e che renderebbero il lavoro più semplice a chi vuole condurre lavori di ricerca.\n I deepfake hanno anche un notevole potenziale nel mondo dell\u0026rsquo;arte. L\u0026rsquo;anno scorso, i ricercatori del laboratorio di intelligenza artificiale di Samsung a Mosca sono stati in grado di trasformare la famosa Gioconda di Da Vinci in un video utilizzando il deep learning per mostrare il soggetto del dipinto che muoveva gli occhi, la testa e la bocca.\n Allo stesso modo, il Museo Dalí di St. Petersburg, in Florida, ha utilizzato questa tecnologia l\u0026rsquo;anno scorso come parte di una nuova mostra chiamata Dalí Lives: si mostrava un deepfake a grandezza naturale dell\u0026rsquo;artista surrealista che era stato creato tramite 1.000 ore di apprendimento automatico delle vecchie interviste dell\u0026rsquo;artista.\n Tramite questo lavoro, è stato possibile creare e riprendere una varietà di citazioni che Dalí aveva effettivamente pronunciato o scritto nel corso della sua carriera e far sì che fosse possibile “vederlo\u0026quot;.\n Gli esempi appena citati mostrano come i deepfake possono servire a portare la storia e l\u0026rsquo;arte \u0026ldquo;vive\u0026rdquo; per un pubblico più ampio. E se questo aiuta ad interessare migliaia o milioni di persone all\u0026rsquo;arte e alla storia, allora il mondo non può che trarne beneficio.\n L’utilizzo di una tecnica come questa può avere molti risvolti positivi; è chiaro che però ignorare una serie di episodi che sfruttando queste tecnologie con esiti spesso inopportuni vanno contrastati e ridotti: Facebook per prima ha parlato di come riconoscere immagini o video frutto di Deepfake e come gestirli in modo da vietarne la pubblicazione sulla propria piattaforma.\nIn conclusione, operazioni del genere vanno effettuate su larga scala, e non solo: come sempre la tecnologia corre veloce, molto più di quanto la legislazione riesca o possa: in questo senso, è però un intervento necessario, perché una regolamentazione definita è fondamentale per definire il perimetro di utilizzo di questa tecnologia.\n Risorse utili Lettera Einstein-Szilárd Wired: due nuovi sistemi per difendersi dai video deepfake Reti generative avversarie per l\u0026rsquo;healthcare ", "url": "https:\/\/theredcode.it\/deepfake-e-perch%C3%A9-non-preoccuparsi\/" }, "https:\/\/theredcode.it\/tags\/gan\/": { "title": "gan", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/tags\/gan\/" }, "https:\/\/theredcode.it\/mary-kenneth-keller-in-3-minuti\/": { "title": "Mary Kenneth Keller in 3 minuti", "tags": ["stem",], "content": "Donne nell’informatica che potresti non aspettarti, soprattutto quando parliamo di suore: vediamo insieme la storia di Mary Kenneth Keller, in 3 minuti.\n Chi è  Monaca cristiana e educatrice, viene considerata un pioniere dell’informatica, per la sua tesi in cui dimostra come costruire algoritmi per la risoluzione analitica di equazioni differenziali, scritta in CDC FORTRAN 63.\n Il suo percorso  Nata in Ohio nel 1913 (più di un secolo fa!), entra giovanissima a far parte dell’ordine delle Suore della Carità della Beata Vergine Maria: aveva infatti solo 29 anni.\n Dieci anni più tardi, consegue un dottorato in scienze matematiche e un master in matematica e fisica.\n Credeva moltissimo nel potere dell’istruzione e soprattutto dei computer, così fondò nel 1965 un dipartimento di informatica nel Clarke College e lo diresse sapientemente per vent’anni.\n Quello stesso anno, ottenne un risultato eccezionale: conseguì un dottorato in informatica, e fu la prima in tutti gli Stati Uniti.\n Qualche anno prima però, fu coinvolta in un progetto di grande rilievo: insieme ad un team di colleghi del Dartmouth College -da sempre aperto solo agli uomini-, lavorò alla prima versione di BASIC, chiamato allora DTSS BASIC.\n  Questo linguaggio, ad oggi sconosciuto ai più, è però stato uno dei primi mattoni dell’informatica: l’acronimo sta per Beginner’s All-purpose Symbolic Instruction Code, proprio perché fu creato con l’intento di aiutare anche i programmatori alle prime armi.\n Basti pensare che questo primo BASIC ha fatto innamorare Bill Gates, che anni dopo ha realizzato la versione Microsoft Basic, fino ad arrivare all’attuale Visual Basic, adottato ampiamente da Microsoft.\n Donna visionaria, prevede l’esplosione della società dell’informazione, gli sviluppi dell’intelligenza artificiale, la digitalizzazione dei dati, la centralità di avere dei dispositivi elettronici nella gestione delle banche dati di biblioteche, aziende ed istituzioni pubbliche.\n Molti anni prima della diffusione di Internet, riconosce il potenziale dei computer nel rendere le informazioni accessibili a tutti: Mary Keller sosteneva fortemente soprattutto il coinvolgimento delle donne nel settore informatico.\n Suor Mary ha lavorato duramente per forgiare il suo percorso unico nella vita ed era un\u0026rsquo;appassionata sostenitrice delle donne nell\u0026rsquo;informatica. Per questa ragione, contribuì alla fondazione dell’Association of Small Computer Users in Education (abbreviato in ASCUE).\n Il computer, scriveva, l’aveva aiutata ad esercitare due virtù: l’umiltà, perché gli errori non sono della macchina ma del programmatore, e la pazienza, nelle infinite operazioni di de-bug, nel cercare le linee di codice contenenti errori e correggerle.\n Oltre ad essere una pioniera nel campo dell\u0026rsquo;informatica, è anche autrice di quattro libri nel settore. Il potenziale che Keller vedeva per il futuro dell\u0026rsquo;informatica era molto in anticipo sui tempi: credeva che l\u0026rsquo;uso dei computer avesse una capacità illimitata per la condivisione delle informazioni.\n Riconoscimenti  In suo onore il Clarke College – oggi Clarke University – ha istituito la borsa di studio in informatica Mary Kenneth Keller e ha ribattezzato il centro informatico dell’istituto Keller Computer Center and Information Services.\n Citazioni   “We\u0026rsquo;re having an information explosion, among others, and it\u0026rsquo;s certainly obvious that information is of no use unless it\u0026rsquo;s available”\n   “For the first time, we can now mechanically simulate the cognitive process. We can make studies in artificial intelligence. Beyond that, this mechanism [the computer] can be used to assist humans in learning. As we are going to have more mature students in greater numbers as time goes on, this type of teaching will probably be increasingly important.”\n  Curiosità  Muore nel 1985, all’età di 71 anni, ma anche in quest’ultima fase della sua vita, non si ferma mai: nella casa di cura in cui trascorre l’ultimo periodo della sua vita, malata di cancro, porta con sé un Apple IIe, che utilizza per tenere un corso di informatica agli altri ospiti della struttura e per scrivere un programma per la gestione e il monitoraggio dei pasti.\n Risorse utili Pioneering Women in Computer Science Timeline of women in science ", "url": "https:\/\/theredcode.it\/mary-kenneth-keller-in-3-minuti\/" }, "https:\/\/theredcode.it\/tags\/stem\/": { "title": "stem", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/tags\/stem\/" }, "https:\/\/theredcode.it\/tags\/deep-learning\/": { "title": "deep-learning", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/tags\/deep-learning\/" }, "https:\/\/theredcode.it\/gan-ed-healthcare\/": { "title": "GAN ed healthcare", "tags": ["deep-learning","healthcare","intelligenza-artificiale",], "content": "GAN ed healthcare: le reti generative avversarie potrebbero sembrare un gioco da ragazzi: in che modo possono però essere costituire un vantaggio enorme se utilizzate in determinati settori, come in ambito sanitario?\n Introduzione Negli Stati Uniti, a partire dal 2009, con la promulgazione dell’HITECH Act, vengono stanziati 30 milioni in dollari di incentivi per tutte quelle strutture sanitarie che adottassero sistemi che fruissero di cartelle cliniche elettroniche (in inglese, EHR, che sta per Electronic Health Record).\n Questo vuol dire che il passaggio dalle consuete cartelle cartacee ad un sistema completamente digitalizzato che contenesse le informazioni circa la salute dei cittadini prese piedi e nel giro di pochi anni è diventato la consuetudine.\n Infatti, uno studio condotto nel 2016 dall’ONC (aka Office of the National Coordinator for Health Information) ha stimato che il 95% degli ospedali americani ha adottato questo approccio. Non male, no?\n L’utilizzo di queste tecnologie non porta un beneficio solo in termini di durabilità, consistenza e reperibilità delle informazioni, ma queste informazioni hanno portato anche enormi vantaggi per chi quei dati sa sfruttarli: negli ultimi anni abbiamo infatti assistito ad un boom di studi sugli effetti dei Big Data, e gli effetti nel settore healthcare non sono da meno.\n Avere a disposizione grandi quantità di dati su referti medici, immagini di radiografie e via dicendo, ha permesso di portare a compimento l’implementazione di diversi strumenti di diagnostica predittiva, che nel passato utilizzava le reti neurali convoluzionali.\n Questo tipo di rete convoluzionale ha un enorme successo nel momento in cui gli esempi a sua disposizione contengono tanti dati “positivi” quanti “negativi”, per ognuna delle classi che è necessario stimare.\n In questo senso, le reti convoluzionali sono perfette per il riconoscimento di oggetti tramite immagini: insegnare ad un sistema a distinguere un gatto da un cane o da un’auto è piuttosto semplice, anche se non sempre è efficace nel caso dei volti umani (leggi l’articolo Coded Bias).\n Il primo problema si presenta dunque nel momento in cui non sia una “parità” di esempi a disposizione: avere un dataset di buona qualità e quantità è merce rara. Non solo: un problema rilevante è rappresentato dall’anonimizzazione dei dati: i più complottisti potrebbero dire che “usare questi dati compromette la privacy dei pazienti o dell’intera popolazione”.\n In effetti, il problema del rendere non identificabili informazioni di questo genere non è una questione così irrilevante: si parla pur sempre di dati estremamente sensibili, che possono e devono essere utilizzati a scopo benefico, ma senza mai compromettere la privacy della fonte originaria.\n In questo senso, le reti generative avversarie sono perfette, soprattutto per un settore come quello dell’healthcare: vediamo il perché.\n Cos’è una rete neurale convoluzionale Una rete neurale convoluzionale (spesso abbreviata in ConvNet o CNN) è un algoritmo di deep learning che può prendere in input un\u0026rsquo;immagine, assegnare un fattore di rilevanza in termini di pesi e bias a vari aspetti/oggetti nell\u0026rsquo;immagine ed essere in grado di apprendere a riconoscere, ad esempio, oggetti in un’immagine.\n La pre-elaborazione richiesta in una rete di questo tipo è molto più bassa rispetto ad altri algoritmi di classificazione, per cui mentre nei metodi primitivi i filtri sono progettati manualmente, con un addestramento sufficiente, questa rete ha la capacità di apprendere in maniera semi-autonoma a migliorarsi.\n L\u0026rsquo;architettura di una rete come questa è analoga a quella del modello utilizzato dal cervello per gestire la connettività dei neuroni ed è stata ispirata dall\u0026rsquo;organizzazione della corteccia visiva. I singoli neuroni rispondono agli stimoli solo in una regione ristretta del campo visivo nota come campo recettivo.\nCome funziona una rete neurale convoluzionale Questo tipo di rete è costituita da più livelli, ognuno dei quali è specializzato in un’attività diversa: allo stesso modo funziona il cervello umano, perché questo opera delle semplificazioni che ci permette di riconoscere gli oggetti applicando diverse “funzioni”.\nSe dovessimo rappresentarla in modo semplice, questo potrebbe essere uno schema: fornendo un input alla rete, questo passa attraverso diverse “convoluzioni”, viene partizionato e i risultati forniti dai diversi livelli vengono poi assemblati per produrre il risultato finale.\nEsempio di CCN - Credits to Wikimedia\n Che vuol dire convoluzione? Vuol dire che questo strato calcola l\u0026rsquo;output dei neuroni che sono collegati a regioni locali o campi recettivi nell\u0026rsquo;input, calcolando un prodotto scalare tra i loro pesi e un piccolo campo recettivo a cui sono collegati nel volume di input; in altre parole, ogni calcolo porta all\u0026rsquo;estrazione di una mappa delle caratteristiche dell\u0026rsquo;immagine di input.\n Immagina di avere un disegno rappresentato come una matrice di valori 5x5, e prendi una matrice 3x3 e fai scorrere quella finestra 3x3 attorno all\u0026rsquo;immagine.\n In ogni posizione di quella matrice, moltiplichi i valori della tua finestra 3x3 per i valori nell\u0026rsquo;immagine che sono attualmente coperti dalla finestra; di conseguenza, otterrai un singolo numero che rappresenta tutti i valori in quella finestra delle immagini.\n Utilizzi questo livello per filtrare: mentre la finestra si sposta sull\u0026rsquo;immagine, controlli i modelli in quella sezione dell\u0026rsquo;immagine.\n Esempio di convoluzione - Credits to: https://www.cosmos.esa.int/web/machine-learning-group/convolutional-neural-networks-introduction\n Funziona grazie ai filtri, che vengono moltiplicati per i valori emessi dalla convoluzione. Il suo compito principale è dunque quello di individuare degli schemi con una tale precisione che semplificare porti a generalizzare il modello (per approfondire queste tematiche, vedi le risorse utili in fondo).\n Cos’è una rete generativa avversaria Le reti generative avversarie (abbreviate in GAN) sono un insieme di modelli di reti neurali profonde, sviluppate da Ian Goodfellow nel 2014, utilizzate per produrre dati sintetici.\n Vi immaginate? Produrre dei dati che fossero verosimili, ma non simili, rilevanti per una situazione specifica, ma che non provengono dal mondo reale.\n L\u0026rsquo;obiettivo di una GAN è quindi quello di addestrare un discriminatore ad essere in grado di distinguere tra dati reali e falsi e allo stesso tempo addestrare un generatore a produrre istanze sintetiche di dati che possono ingannare in modo affidabile il discriminatore.\n Il discriminatore è una normale rete neurale convoluzionale utilizzata per distinguere tra immagini autentiche e sintetiche e il generatore è una rete neurale convoluzionale modificata e addestrata per produrre immagini false dall\u0026rsquo;aspetto autentico.\n Le GAN addestrano allo stesso modo sia il discriminatore che il generatore per migliorare tramite un approccio iterativo la capacità del discriminatore di individuare immagini false e la capacità del generatore di produrre immagini realistiche, creando una sorta di “battaglia” intestina che però porta benefici progressivi.\n Come funziona una rete generativa avversaria (o GAN) Nella figura seguente, vediamo come le zebre diventino improvvisamente identiche a dei cavalli, anche se appare chiaro che ad un occhio attento le strisce sui corpi dei cavalli siano comunque visibili: questa sorta di “rumore” permette però alla rete di calibrarsi rispetto ad eventuali immagini “false” e lo rende sempre più prestante.\n Zebre vs. cavalli: distinguere i veri dai falsi - Credits to: https://medium.com/analytics-vidhya/implementing-a-gan-in-keras-d6c36bc6ab5f\n Cosa succederebbe se facessimo lo stesso utilizzando delle TAC al cervello? Nell\u0026rsquo;illustrazione seguente, un generatore viene addestrato inserendo dei pixel di rumore casuali e quindi generando immagini cerebrali false. Le immagini false create dal generatore vengono quindi inserite nel discriminatore insieme alle immagini reali, per cui quest’ultimo dovrà imparare a distinguere tra immagini reali e false.\n La formazione del generatore mira a produrre immagini false sempre più realistiche che possano ingannare il discriminatore. Man mano che l\u0026rsquo;addestramento continua, il generatore migliora nel produrre falsi e il discriminatore migliora nel distinguere tra immagini reali e false finché il generatore non produce immagini che assomigliano molto alle immagini autentiche.\n Esempio di GAN applicate alle immagini di TAC\n Una volta completato l\u0026rsquo;addestramento, la GAN ​​dovrebbe essere in grado di produrre immagini realistiche che possono essere utilizzate per aumentare i dati esistenti o creare set di dati completamente nuovi (primo scopo, quindi, la produzione di dati sintetici), nonché a riconoscere correttamente quali sono quelle false da quelle vere.\n Benefici Questa tipologia di rete è utile in questi casi perché possono imparare a produrre falsi esempi dei dati sottorappresentati, addestrando meglio il modello. Oltre a migliorare il rilevamento delle malattie, le GAN possono essere utilizzati per l’anonimizzazione dei dati, che impedisce l\u0026rsquo;esposizione delle informazioni personali del paziente.\n La normativa sulla privacy dell\u0026rsquo;Health Insurance Portability and Accountability Act del 1996 (HIPAA) impone infatti la protezione delle informazioni del paziente, il che significa che lavorare con questi dati non è uno scherzo.\n Vale a dire, la maggior parte dei metodi attuali di anonimizzazione può essere invertita con un po’ di reverse engineering, compromettendo la privacy dei dati personali dei pazienti. In questo senso, le reti avversarie, sia nella ricerca che nella pratica, rappresentano una soluzione promettente a molti dei problemi spinosi che devono affrontare oggi l\u0026rsquo;assistenza sanitaria.\n Oltre all’anonimizzazione infatti, abbiamo detto che spesso un problema è rappresentato dalla scarsità di informazioni a nostra disposizione per l’addestramento, soprattutto se si tratta di avere un dataset sufficiente per avere dei casi reali e dei controesempi: in questo senso, una rete GAN mette a disposizione a termini del suo addestramento un dataset perfetto perché completamente anonimo, ma “veritiero”.\n Non a caso, le applicazioni più diffuse dei GAN nel settore sanitario riguardano l\u0026rsquo;imaging medico. Due importanti attività di imaging medico sono la segmentazione dei dati per i tumori cerebrali e la sintesi di immagini mediche.\n Nel primo caso, si tratta di suddividere le TAC del cervello in singole immagini che identifichino i bordi del tumore, il tessuto sano o anche interi siti di tumore. Sebbene la rilevazione della maggior parte dei tipi di tumore cerebrale sia in genere semplice per un medico, la definizione del confine del tumore mediante la valutazione visiva rimane una sfida.\n Come detto in precedenza, un\u0026rsquo;altra interessante applicazione dei GAN è nella sintesi di immagini mediche. I dati di imaging medico sono raramente disponibili per analisi su larga scala a causa dell\u0026rsquo;alto costo per ottenere annotazioni cliniche.\n Dato questo fattore che costituisce un blocco vero e proprio, molti progetti di ricerca hanno lavorato per sviluppare metodi affidabili per la sintesi di immagini mediche.\n Queste immagini false possono essere utilizzate per aumentare i dati in situazioni in cui il numero di immagini retiniche è limitato e possono essere ulteriormente utilizzate per addestrare futuri modelli di intelligenza artificiale.\n In futuro, questi metodi possono essere utilizzati per produrre dati per modelli di addestramento per rilevare malattie in cui non ci sono abbastanza dati reali per addestrare un modello accurato. Inoltre, questo tipo di dati di imaging sintetici può essere utilizzato per proteggere ulteriormente la privacy del paziente.\n In questo senso, è chiaro che le GAN si siano dimostrate promettenti nello spazio della segmentazione delle immagini e della sintesi: hanno dunque tutto il potenziale per rivoluzionare l\u0026rsquo;analisi sanitaria.\n Il metodo di segmentazione dell\u0026rsquo;immagine in medicina può essere esteso all\u0026rsquo;identificazione di oggetti estranei nelle immagini mediche, al rilevamento di ulteriori tipi di escrescenze tumorali e all\u0026rsquo;identificazione precisa della struttura dell\u0026rsquo;organo.\n Inoltre, possono essere davvero un beneficio a costi ridottissimi nell’ambito della sintesi di immagini mediche. Nella maggior parte dei casi, l\u0026rsquo;analisi delle immagini mediche è limitata dalla mancanza di dati e/o dal costo elevato dei dati autentici.\n Così facendo, si potrebbe fornire uno strumento fondamentale a ricercatori e medici per lavorare con immagini sintetiche ma realistiche e di alta qualità. Ciò potrebbe migliorare significativamente la diagnosi, la prognosi e l\u0026rsquo;analisi della malattia, portando benefici quindi su tutti i fronti nell’ambito sanitario.\n", "url": "https:\/\/theredcode.it\/gan-ed-healthcare\/" }, "https:\/\/theredcode.it\/tags\/healthcare\/": { "title": "healthcare", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/tags\/healthcare\/" }, "https:\/\/theredcode.it\/grace-hopper-in-3-minuti\/": { "title": "Grace Hopper in 3 minuti", "tags": ["stem",], "content": "Torniamo a parlare di donne che hanno lavorato nel settore dell\u0026rsquo;ingegneria informatica insieme alla straordinaria Grace Hopper in 3 minuti.\n Chi è Informatica, matematica e militare americana nata agli inizi del ‘900, dimostra fin da piccola una grande propensione per le materie scientifiche, dimostrando grande curiosità.\n Il suo percorso Frequenta la Hartridge School e si laurea al Vassar College in Scienze matematiche e fisiche, ma non si ferma qui: si iscrive alla Yale e ottiene un master e un dottorato di ricerca in Matematica, il quale le vale l’ingresso come docente universitario al Vassare College nel 1941.\nGrazie alla figura paterna che sostiene Grace in tutto e per tutto e soprattutto nello “smontare” i vecchi stereotipi femminili, la incoraggia a praticare sport come hockey, basket e pallanuoto.\nDue anni dopo, si arruola come volontaria nella Marina Militare e prende l’incarico di sviluppatrice dei programmi per il “Mark I”, uno dei primi calcolatori della storia: tenendo conto che l’informatica all’epoca non era considerata una materia scientifica, Grace assume subito un ruolo di primaria importanza.\nIl suo lavoro rappresenta una rivoluzione: insegnare ad un sistema in che modo tradurre diverse operazioni attraverso dei comandi sul nastro perforato (foto di questo strumento anacronistico per chi è nato dopo gli anni ’80) era un qualcosa di incredibile.\nNel 1949 viene assunta dalla Eckert-Mauchly Computer Corporation e crea il primo compilatore della storia, senza parlare del fatto che porta avanti la sua battaglia verso la definizione di un processo di debugging.\nIn quell’epoca, la risoluzione degli errori veniva fatto passo passo sulla base della logica dei programmi e richiedeva moltissimo tempo.\nNell’estate del 1947, mentre Grace e il team di cui faceva parte lavoravano con il Mark II, questo si arrestò all’improvviso, a causa di una falena che entrò dalle finestre e si conficcò in un relè. Fu rimossa con le pinzette e inserito nel registro di gruppo, così che il termine bug prese il via nel settore.\nIl compilatore rappresenta una svolta per l’epoca: in principio, il codice sorgente utilizzato dagli sviluppatori è composto da soli simboli che il computer è in grado di decifrare senza problemi, ma che per un essere umano richiedono uno sforzo maggiore.\nDimostrando che fosse possibile “insegnare” una serie di istruzioni che entrambi gli attori fossero in grado di comprendere, nasce il FLOW-MATIC, ossia un compilatore che utilizzava non più il linguaggio simil-macchina, ma alcune istruzioni in inglese.\nFLOW-MATIC può sembrare qualcosa di molto lontano, ma in realtà è alla base del più famoso Cobol, altro linguaggio inventato da Hopper; questo -e non solo- le valgono il titolo di “regina dell’informatica”.\n Questa la foto più celebre: Grace alla tastiera dell’UNIVAC nel 1960.\n Riconoscimenti Nel 1969 riceve il “Computer sciences man of the year”, premio assegnato di consuetudine a soli uomini.\nNel 1971 viene istituito un premio a suo nome, il “Grace Murray Hopper Award”, assegnato a giovani informatici.\nNel 1973 guadagna il titolo di “Distinguished Fellow of the British Computer Society” come prima donna in assoluto.\nNel 1991 le viene assegnata la Medaglia Nazionale della Tecnologia.\n Citazioni Parlando di quando lavorò per la Marina: “all’improvviso non dovevo decidere nulla, era già tutto sistemato. Non mi dovevo preoccupare neanche di come mi sarei vestita la mattina; era già tutto lì. Prendevo il mio abito e lo indossavo. […] Non dovevo nemmeno decidere che cosa avrei preparato per cena […]. È tutto scomparso, e sono rifiorita. Non ho mai avuto tanta libertà.”\n“Dobbiamo immettere [informazioni] mediante un processore. Poi un essere umano deve trasformare le informazioni in notizie o conoscenze. Tendiamo a dimenticare che nessun computer formulerà mai una domanda nuova.”\n  Curiosità Grazie al suo enorme contributo nel settore informatica, nel corso degli anni ha guadagnato diversi soprannomi come “Amazing Grace” e “Nonna Cobol”.\n Risorse utili Enciclopedia delle donne Pagina nell’enciclopedia britannica ", "url": "https:\/\/theredcode.it\/grace-hopper-in-3-minuti\/" }, "https:\/\/theredcode.it\/recensioni\/link\/": { "title": "Link", "tags": [], "content": "Ranking Anno 2002 Autore Albert­ László Barabási Genere Saggio Livello Per approfondire Scorrevolezza 8 / 10 Originalità 10 / 10 Valutazione 9 / 10 Altro giro, altra corsa: con questa recensione de Link: la scienza delle reti, vediamo in che modo scoprire e definire il concetto di rete ha profondamente cambiato la nostra esistenza, in modi spesso neanche lontanamente immaginabili.\nRecensione Leggere questo libro è stata davvero un\u0026rsquo;esperienza incredibile: concetti come grafo, alberi e reti sono concetti generalmente noti, soprattutto quando si segue un percorso come quello di ingegneria; tuttavia, sono concetti che spesso vengono trattati in maniera molto, troppo teorica, al contrario di questo libro. Pur essendo stato scritto dal celebre fisico Albert-László Barabási, il suo è un trattato per niente scontato: il mondo delle reti attraversa ogni aspetto della nostra vita quotidiana, dai social alla genetica. Per comprendere in che modo le reti permeano ogni aspetto, ogni capitolo è dedicato ad una tematica completamente diversa: ognuno di questi è un link, a partire da Internet, allo studio delle molecole, fino ad arrivare alla sicurezza informatica e perfino alla struttura della società stessa. Alla base, il concetto di hub: questi hanno totalmente rivoluzionato il modo in cui guardiamo diversi episodi della nostra vita. In che modo questi hub cambiano e influenzano totalmente la nostra vita è chiarissimo: in Hollywood i nuovi attori sono sponsorizzati spesso e volentieri da grandi attori che fungono da contatto, così come il mondo degli amministratori delegati è concentrato nelle mani di una piccola fetta della popolazione, dove per entrare in questa élite è fondamentale avere un \u0026ldquo;contatto\u0026rdquo;. Mai sentito parlare di grado di separazione? Se ti stai chiedendo quante persone ti separano tra te e il tuo idolo, sappi che probabilmente questo numero è 6 (qui una breve spiegazione). Le reti spiegano moltissimi aspetti della nostra vita, e non solo: riescono anche a definirlo e modellarlo in maniera precisa, anche se non sempre è semplice contare il numero di nodi. Basti pensare ad Internet: si stimano un trilione di pagine online, ma la realtà è che il numero preciso è impossibile da stimare. Alla velocità con cui Internet cresce ogni secondo, anche i robot non riescono a codificare tutte le pagine che nel frattempo vengono create! In conclusione? Il famoso detto \u0026ldquo;n__el bene o nel male, purché se ne parli\u0026rdquo; è un altro modo di esprimere questa visione del mondo. Le persone \u0026ldquo;di successo\u0026rdquo; -in senso sia positivo che negativo- sono persone che in qualche modo \u0026ldquo;accentrano\u0026rdquo; l\u0026rsquo;attenzione verso di loro, creando diversi collegamenti che riconducono ad un unico centro. Più collegamenti ci sono, più l\u0026rsquo;hub assume importanza. Allo stesso modo, più un hub è importante, più un\u0026rsquo;eventuale cancellazione di quest\u0026rsquo;ultimo può portare a conseguenze gravi: un caso semplice è quello di un sistema distribuito che non conta su delle repliche di sé stesso. Se il componente che coordina tutto viene meno, il sistema smette di funzionare. In questo senso, intravedo una riflessione anche etica e morale: per avere successo o per fare la differenza, è importante lavorare sul proprio ruolo nella società, senza mai trascurare le persone con cui veniamo a contatto. Il contributo che diamo con il nostro lavoro (e non solo) può collegarci ad altri argomenti o persone, che a loro volta possono riscontrare un impatto: in questo senso, le community sono il più grande esempio di hub a nostra disposizione, che cresce o decresce nel tempo e che sopravvive grazie ai collegamenti preferenziali\u0026hellip; Un esempio di rete a invarianza di scala perfetto!\nCuriosità Cos\u0026rsquo;è il numero di Bacon: si assegna a ogni attore o attrice che ha partecipato a un film in cui recita anche Kevin Bacon un numero di Bacon pari a 1, e a ogni attore che abbia lavorato con uno della lista precedente un numero di Bacon pari a 2 e così via. Kevin Bacon ha numero di Bacon 0. Tre studenti dell\u0026rsquo;Albright College di Reading decidono di portare questo dilemma in tv, partecipando al John Stewart Show una sera e lanciando questa provocazione: Kevin Bacon ha recitato in così tanti film che può essere collegato direttamente o indirettamente con qualsiasi attore di Hollywood. In questo modo, hanno avuto il loro quarto d\u0026rsquo;ora di celebrità e hanno portato alla luce una teoria a dir poco geniale. Se vuoi dare un\u0026rsquo;occhiata alla puntata originale, qui trovi il video!\nLezione imparata Il concetto di hub è fondamentale per comprendere come agiamo; Il numero di Bacon esiste; La rete a invarianza di scala descrive la maggior parte delle reti del mondo reale. Quotes \u0026ldquo;Entro il 2020 questi progressi avranno cambiato la medicina in tutti i suoi aspetti. I bambini non verranno più portati dal dottore per un mal di gola: le mamme potranno usufruire di un dispositivo palmare con chip intercambiabile che rivelerà come il mald di gola di Tommy sia stato provocato da un\u0026rsquo;infezione da streptococchi.\u0026rdquo; \u0026ldquo;Il colpo di genio, se così si può definire, di questi tre studenti fu la loro constatazione che ogni attore di Hollywood può essere connesso a Kevin Bacon in non più di due o tre passaggi\u0026rdquo;.\n  Disponibile su Amazon ", "url": "https:\/\/theredcode.it\/recensioni\/link\/" }, "https:\/\/theredcode.it\/helen-meriwether-lewis-thomas-in-3-minuti\/": { "title": "Helen Meriwether Lewis Thomas in 3 minuti", "tags": ["stem",], "content": " Prima donna, seconda americana e terza persona in assoluto a vincere un dottorato di ricerca per il corso di laurea in storia della scienza dell’Università di Harvard: parliamo di Helen Meriwether Lewis Thomas, in 3 minuti.\n Chi è  Helen Meriwether Lewis Thomas prevede trent’anni prima dell’effettiva scoperta fattori come l\u0026rsquo;autonomia, la velocità di crociera, capacità e l\u0026rsquo;uso di motori a reazione da parte delle compagnie aeree commerciali, guadagnando un premio $ 50.000 dalla Trans World Airlines.\n Il suo percorso  Ha iniziato i suoi studi a New York City, dove sua madre lavorava come insegnante di scuola pubblica, continuando gli anni del liceo alla St. Catherine\u0026rsquo;s School di Richmond, in Virginia.\n Il suo interesse per l\u0026rsquo;astronomia fu stimolato dal lavoro universitario svolto presso l\u0026rsquo;Osservatorio di Harvard, dove assistette il professor Willem Luyten nell\u0026rsquo;identificazione delle nane bianche.\n Ha lavorato per tre anni come segretaria di Leon Campbell, a capo dell\u0026rsquo;American Association of Variable Star Observers, allora affiliata all\u0026rsquo;Harvard Observatory.\n È entrata a far parte dello staff dell\u0026rsquo;Osservatorio di Harvard sotto la straordinaria astronoma Cecilia Payne-Goposchkin.\n Alla fine degli anni \u0026lsquo;30 iniziò anche a lavorare per un dottorato di ricerca sotto la supervisione del professore di Harvard George Sarton, preparando una tesi sulla storia delle osservazioni di stelle variabili osservate dal II secolo a.C. al XIX secolo d.C.\n Per questo studiò testi sia latini che arabi. All\u0026rsquo;inizio della Seconda guerra mondiale, il suo lavoro di laurea fu interrotto dal lavoro di guerra e la sua laurea non le fu assegnata fino al 1948.\n  Nel 1947 fu nominata ingegnere senior presso la Raytheon Manufacturing Company, dove rimase fino al 1954, lavorando sui sistemi di guida. Tornò al MIT come redattore e capo delle pubblicazioni presso il Research Laboratory of Electronics fino al suo pensionamento nel 1971.\n Riconoscimenti  Grazie a lei, vengono scoperte diverse stelle variabili, ossia quelle stelle la cui luminosità osservata dalla Terra varia; il tutto viene fuori grazie al suo lavoro di catalogazione di diversi testi appartenenti al II a.C., che lei lesse e tradusse.\n Inoltre, contribuì alla scoperta di oltre 1100 stelle insieme all’astronomo Willem Luyten, oltre ad aver lavorato per la scoperta di alcune nane bianche, delle stelle di piccole dimensioni considerate molto rare e fondamentali per lo studio dell’evoluzione.\nCuriosità Durante la sua adolescenza, rimase estasiata nell’osservare le meteore, tanto da sperare di diventare una “meteorologa”, pensando che questo termine intendesse un esperto in ambito astronomico. E alla fine ci riuscì davvero, ma diventando astronoma e ingegnera!\n Risorse utili Elogio a Helen Meriwether Lewis Thomas Cambridge Women’s Heritage Project In Memory of Helen Meriwether Lewis Thomas August 21, 1905 - August 6, 1997 Margaret Hamilton ", "url": "https:\/\/theredcode.it\/helen-meriwether-lewis-thomas-in-3-minuti\/" }, "https:\/\/theredcode.it\/tags\/podman\/": { "title": "podman", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/tags\/podman\/" }, "https:\/\/theredcode.it\/categories\/podman\/": { "title": "podman", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/categories\/podman\/" }, "https:\/\/theredcode.it\/docker\/podman-e-docker-compose\/": { "title": "Podman e Docker Compose", "tags": ["docker-compose","podman",], "content": "Ti sei mai chiesto come usare Podman e Docker Compose? Vediamo insieme i vantaggi e le alternative a disposizione.\n Podman: cos’è (short version)  Ref. https://www.theredcode.it/what-is-podman/\n Podman (abbr. Pod Manager) è un container engine rilasciato nel 2018. È stato sviluppato da Red Hat e somiglia a Docker per molti aspetti, come l’utilizzo della riga di comando; questo rende infatti possibile utilizzare i comandi tipici di Docker su Podman, utilizzando l’alias docker=podman.\n Nella maggior parte dei casi il passaggio da Docker a Podman è relativamente semplice; la novità però che caratterizza Podman è l’assenza di un demone centrale come istanza di controllo del singolo container e questo offre la possibilità di accedere alle diverse applicazioni virtualizzate anche senza permessi di root.\n Podman gira su tutte le distribuzioni di Linux disponibili come Ubuntu, Fedora, CentOS, Debian e RHEL ma anche su Raspbian. Per la maggior parte dei casi, questo motore si può installare direttamente attraverso la gestione dei pacchetti del relativo sistema.\n Per installarlo, è possibile seguire le indicazioni della documentazione ufficiale.\n Docker Compose: cos’è (short version)  Docker Compose è uno strumento per definire ed eseguire applicazioni Docker multi-container. Con questo strumento, basta usare un file YAML per configurare diversi servizi che compongono la tua applicazione ed avviarli con un solo comando, creando e avviando tutti i servizi necessari.\n Disponibile per Mac, Windows e Linux, possiamo installarlo tramite i seguenti comandi, che scaricano il pacchetto tramite curl e poi gli assegnano i permessi di esecuzione:\n $ sudo curl -L \u0026#34;https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)\u0026#34; -o /usr/local/bin/docker-compose $ sudo chmod +x /usr/local/bin/docker-compose   Altrimenti, la maggior parte dei package manager permettono di installarlo da riga di comando:\n $ sudo apt install docker-compose  Usare Docker Compose con Podman  Esistono moltissimi esempi online di file docker-compose.yml da usare come esempio: in questo articolo, useremo questo repository analizzato nel precedente articolo sullo stack MEAN.\nPrima di eseguire Docker Compose, ci assicuriamo che tutti i pacchetti richiesti siano installati e configuriamo il servizio di sistema Podman (in versione 3.0 o successiva) utilizzando systemd.\n Oltre a Podman e alle sue dipendenze, devono essere installati i pacchetti podman-docker e docker-compose, per cui, a seconda del package manager a disposizione, installiamo i suddetti pacchetti.\n Dopo averlo fatto, avviamo il servizio di Podman attivato dalla socket utilizzando il seguente comando:\n $ sudo systemctl start podman.socket  A questo punto, utilizziamo come di consueto Docker Compose per avviare il nostro set di servizi con il seguente comando:\n $ sudo docker-compose up  Una volta che i servizi saranno stati avviati e pronti all’uso, potremo usare come di consueto i comandi che useremmo con Docker:\n $ sudo podman ps # container attivi $ sudo podman volume ls # elenco dei volumi …   Usare Podman Compose  Com’è ovvio, non potevamo non aspettarci un parallelo al consueto Docker Compose: in questo caso, non ci resta che installarlo e provarlo!\n Installazione tramite curl  Utilizzando curl, andiamo a scaricare il pacchetto e gli assegniamo i permessi di esecuzione:\n $ curl -o /usr/local/bin/podman-compose https://raw.githubusercontent.com/containers/podman-compose/devel/podman_compose.py $ chmod +x /usr/local/bin/podman-compose   Installazione con dnf  Per sistemi Fedora e similari, utilizzare il seguente comando:\n $ sudo dnf install podman-compose  Installazione con pip3  Per sistemi che abbiano installato pip3, utilizzare il seguente comando:\n $ pip3 install podman-compose  Dopodiché, per poterlo utilizzare, è sufficiente avere a disposizione il classico file docker-compose.yml, ma sostituendo al classico comando docker-compose, la parola podman:\n $ podman-compose –help $ podman-compose up # crea ed avvia i container $ podman-compose down # arresta e rimuove container, volumi, immagini, ecc. $ podman-compose ps # elenco dei container …  Risorse utili Tantissimi esempi utili per comprendere Docker Compose Esplorando il Dockerfile Cos’è Podman Docker cheatsheet Dockerfile cheatsheet ", "url": "https:\/\/theredcode.it\/docker\/podman-e-docker-compose\/" }, "https:\/\/theredcode.it\/margaret-hamilton-in-3-minuti\/": { "title": "Margaret Hamilton in 3 minuti", "tags": ["stem",], "content": " Parliamo di successo nel settore dell\u0026rsquo;ingegneria informatica, e lo facciamo con questa pioniera: vediamo Margaret Hamilton in 3 minuti.\n Chi è Informatica, ingegnera, imprenditrice, nasce alla fine degli anni \u0026lsquo;30. Questi sono solo alcuni fra i tanti cappelli che Margaret indossa nel corso della sua vita: non per nulla, è stata la prima direttrice del Software Engineering Division del MIT, niente poco di meno che il laboratorio in cui viene sviluppato e progettato il software installato per la missione dello sbarco dell’Apollo 11.\n Il suo percorso Laureata in matematica presso l’Università del Michigan e in matematica e filosofia presso l’Earlham College, dopo aver insegnato per un breve periodo, capisce che la sua strada è un’altra e si trasferisce a Boston: lì inizia a lavorare al MIT nel dipartimento di meteorologia, diventando una pioniera del settore informatico. Infatti, nel 1960, l’informatica non era una disciplina universitaria e tutto quello che Margaret produce è farina del suo sacco.\n Lavoro al progetto SAGE, ossia un sistema che doveva prevedere e simulare eventi meteorologici con una certa accuratezza, visto l’impiego militare: questo le vale la candidatura per la posizione di capo dello sviluppo software del programma Apollo alla NASA. Così, nel giro di una decade, si trova ad occuparsi di un intero gruppo della missione dell’Apollo 11, tanto che grazie al suo lavoro e a quello dei suoi collaboratori, viene evitato l’abbandono della missione dovuto ad errore di configurazione della procedura di aggiornamento di un contatore.\n Riconoscimenti Grazie a lei, viene segnato l’inizio dell’ingegneria del software, che viene finalmente considerata una materia scientifica alla stregua delle altre. Riceve la Medaglia presidenziale della libertà, ossia la più alta decorazione degli Stati Uniti d’America, da Barack Obama come ringraziamento per il lavoro svolto per il paese, oltre al premio Augusta Ada Lovelace Award.\n Citazioni \u0026ldquo;Mia figlia Lauren veniva spesso a lavorare con me di notte e nei fine settimana perché eravamo tutti molto impegnati. Non c\u0026rsquo;era un momento in cui non lavoravamo. Le piaceva giocare all\u0026rsquo;astronauta perché mi vedeva giocare in quel modo in alcune simulazioni avremmo eseguito. Un giorno, provò una simulazione hardware perché volevamo provare se il software funzionasse correttamente con tutti gli altri elementi, come l\u0026rsquo;astronauta. Quindi ricordo una volta quando nella simulazione di Lauren si schiantò e pensai: \u0026ldquo;Oh mio dio, come è successo?\u0026rsquo;\n Curiosità Hai mai visto questa foto?\nQuesta foto incredibile di Hamilton e del codice Apollo del suo team ha fatto il giro dei social media e negli articoli che descrivono in dettaglio i suoi contributi chiave al successo dell\u0026rsquo;Apollo 11. Secondo Hamilton, questa immagine ormai iconica, è stata scattata al MIT nel 1969 da un fotografo dello staff dell\u0026rsquo;Instrumentation Laboratory per essere utilizzata nella promozione del lavoro del laboratorio su il progetto Apollo. La didascalia originale, dice, recita:\n\u0026ldquo;Qui, Margaret è mostrata in piedi accanto agli elenchi del software sviluppato da lei e dal team di cui era responsabile, il team del software di volo di bordo LM [modulo lunare] e CM [modulo di comando]\u0026rdquo;.\n Risorse utili Storia della celebre foto Pagina ufficiale del KLabs ", "url": "https:\/\/theredcode.it\/margaret-hamilton-in-3-minuti\/" }, "https:\/\/theredcode.it\/categories\/stem\/": { "title": "stem", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/categories\/stem\/" }, "https:\/\/theredcode.it\/user-onboarding-con-ionic\/": { "title": "User onboarding con Ionic", "tags": ["ionic","user-onboarding",], "content": " Quando sviluppiamo una nuova app, non sempre l\u0026rsquo;utente riesce a percepirne tutte le funzionalità: il processo di user onboarding con Ionic che vedremo in questo articolo ci permette di riuscire alla nostra app di farsi notare e di far scoprire all\u0026rsquo;utente tutte le feature messe a disposizione.\n Repository\nhttps://github.com/serenasensini/Ionic5-onboarding\n User onboarding: cos\u0026rsquo;è  Tutti gli utenti hanno bisogno di una piccola guida quando iniziano a utilizzare la tua nuova app: è fondamentale prenderli per mano e guidarli attraverso le diverse sezioni chiave del tuo prodotto\u0026hellip;\n Ma attenzione: un buon flusso di onboarding è molto più di un semplice tour del prodotto: è necessario illustrare perché quello a cui hai lavorato è perfetto per l\u0026rsquo;utente che sta per utilizzarla, il modo in cui può sfruttarla al meglio e l\u0026rsquo;ideale è che gli utenti si sentano come se conoscessero la tua app da sempre.\n Esempio di user onboarding con Ionic\n Procedimento  In questo esempio, vediamo come creare delle semplici slides che l\u0026rsquo;utente può scorrere per dare un\u0026rsquo;occhiata alle funzionalità della nostra app, e lo faremo seguendo i prossimi passi.\n Definizione delle slides  Andiamo a costruire tre slides, ognuna delle quali con delle immagini esemplificative e una breve descrizione della funzionalità di cui vogliamo illustrare le potenzialità: è chiaro che quanto mostrato di seguito sia puramente di esempio, ma è perfetto per rendere l\u0026rsquo;idea di quello su cui stiamo andando a lavorare.\n All\u0026rsquo;interno della pagina onboarding.page.html andiamo ad inserire un componente ion-slides come riportato di seguito, dove inseriamo due slides che hanno due pulsanit, uno per saltare il tutorial e uno per scorrere in avanti.\n Il componente _ion-slides_ha già di per sé permette tramite la gesture di sliding di passare da una slide all\u0026rsquo;altra in maniera molto semplice, ma è utile guidare in questo senso l\u0026rsquo;utente: in più, attiviamo il pager che permette all\u0026rsquo;utente di capire qual è lo step corrente che sta visualizzando.\n \u0026lt;ion-slides pager=\u0026#34;true\u0026#34;\u0026gt; \u0026lt;ion-slide class=\u0026#34;ion-padding\u0026#34;\u0026gt; \u0026lt;img src=\u0026#34;../../assets/slide1.png\u0026#34; \u0026gt; \u0026lt;div class=\u0026#34;slider-text\u0026#34;\u0026gt; \u0026lt;h2\u0026gt;Spiaggia, arrivo!\u0026lt;/h2\u0026gt; \u0026lt;p\u0026gt; Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla ultricies, erat vitae porta consequat. \u0026lt;/p\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026#34;navigator\u0026#34;\u0026gt; \u0026lt;ion-button color=\u0026#34;primary\u0026#34; fill=\u0026#34;clear\u0026#34; (click)=\u0026#34;skip()\u0026#34;\u0026gt;SALTA\u0026lt;/ion-button\u0026gt; \u0026lt;ion-button color=\u0026#34;primary\u0026#34; fill=\u0026#34;clear\u0026#34; (click)=\u0026#34;next()\u0026#34;\u0026gt;AVANTI\u0026lt;/ion-button\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/ion-slide\u0026gt; \u0026lt;ion-slide class=\u0026#34;ion-padding\u0026#34;\u0026gt; \u0026lt;img src=\u0026#34;../../assets/slide2.png\u0026#34; \u0026gt; \u0026lt;div class=\u0026#34;slider-text\u0026#34;\u0026gt; \u0026lt;h2\u0026gt;Non vedo l\u0026#39;ora di mangiare gelato...\u0026lt;/h2\u0026gt; \u0026lt;p\u0026gt; Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla ultricies, erat vitae porta consequat. \u0026lt;/p\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026#34;navigator\u0026#34;\u0026gt; \u0026lt;ion-button color=\u0026#34;primary\u0026#34; fill=\u0026#34;clear\u0026#34; (click)=\u0026#34;skip()\u0026#34;\u0026gt;SALTA\u0026lt;/ion-button\u0026gt; \u0026lt;ion-button color=\u0026#34;primary\u0026#34; fill=\u0026#34;clear\u0026#34; (click)=\u0026#34;next()\u0026#34;\u0026gt;AVANTI\u0026lt;/ion-button\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/ion-slide\u0026gt; \u0026lt;ion-slide class=\u0026#34;ion-padding\u0026#34;\u0026gt; \u0026lt;img src=\u0026#34;../../assets/slide3.png\u0026#34; \u0026gt; \u0026lt;div class=\u0026#34;slider-text\u0026#34;\u0026gt; \u0026lt;h2\u0026gt;...e nuotare nel mare!\u0026lt;/h2\u0026gt; \u0026lt;p\u0026gt; Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla ultricies, erat vitae porta consequat. \u0026lt;/p\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;ion-button color=\u0026#34;primary\u0026#34; [routerLink]=\u0026#34;\u0026#39;/home\u0026#39;\u0026#34;\u0026gt;Andiamo!\u0026lt;/ion-button\u0026gt; \u0026lt;/ion-slide\u0026gt; \u0026lt;/ion-slides\u0026gt;  Funzioni avanti e salta Le funzioni che i nostri pulsanti andranno a richiamare dovrebbero compiere due azioni: nel caso della funzione next, si dovrebbe scorrere da una slide all\u0026rsquo;altra, mentre nel caso della funzione skip, l\u0026rsquo;utente decide di saltare il tutorial e quindi non glielo dovremmo più mostrare.\n Definiamo quindi le due funzioni nel seguente modo: per la funzione next, usiamo il decorator ViewChild che ci permette di fare riferimento all\u0026rsquo;oggetto IonSlides e manipolarlo attraverso la pagina onboarding.page.ts:\n @ViewChild(IonSlides) slides: IonSlides; ... next() { this.slides.slideNext(); }  Per la funzione skip andiamo invece ad utilizzare uno dei plugin messi a disposizione dalla community di Ionic che ci permette di memorizzare la scelta dell\u0026rsquo;utente e di ricordarci che questo ha deliberatamente scelto di non seguire il tutorial o di non visualizzarlo più.\n Utilizziamo questo strumento in due punti: quando carichiamo la pagina, controlliamo che non sia già stato visionato il tutorial e che l\u0026rsquo;utente non abbia scelto di nasconderlo; invece, tramite la funzione skip, andiamo a memorizzare la scelta dell\u0026rsquo;utente, per poi mostrare la pagina principale dell\u0026rsquo;app.\n constructor(public storage: NativeStorage, public router: Router) { this.storage.getItem(\u0026#39;skipped\u0026#39;).then((val) =\u0026gt; { console.log(\u0026#39;skipped:\u0026#39;); console.log(val); if (val){ this.router.navigate([\u0026#39;/home\u0026#39;]); } }, reason =\u0026gt; { console.log(reason); }); } ... skip() { this.storage.setItem(\u0026#39;skipped\u0026#39;, true).then(() =\u0026gt; { this.router.navigate([\u0026#39;/home\u0026#39;]); }, reason =\u0026gt; { console.log(reason); this.router.navigate([\u0026#39;/home\u0026#39;]); }); }  Gestione del routing All\u0026rsquo;interno del componente di routing, andiamo a definire il modo in cui la nostra app mostrerà le diverse pagine: la prima sarà sempre quella di onboardin__g, la quale poi effettuerà i dovuti controlli con le funzioni sopra definite.\n Ci saranno poi tutte le altre pagine che fanno riferimento ai vari componenti presenti all\u0026rsquo;interno della nostra app, e nel caso di esempio c\u0026rsquo;è il componente home:\n const routes: Routes = [ { path: \u0026#39;home\u0026#39;, loadChildren: () =\u0026gt; import(\u0026#39;./home/home.module\u0026#39;).then( m =\u0026gt; m.HomePageModule) }, { path: \u0026#39;\u0026#39;, redirectTo: \u0026#39;onboarding\u0026#39;, pathMatch: \u0026#39;full\u0026#39; }, { path: \u0026#39;onboarding\u0026#39;, loadChildren: () =\u0026gt; import(\u0026#39;./onboarding/onboarding.module\u0026#39;).then( m =\u0026gt; m.OnboardingPageModule) }, ]; Test Il risultato ottenuto dovrebbe essere il seguente:\nRisultato ottenuto\n Risorse utili Ionic: guida completa per creare app per Android e iOS Ionic cheatsheet 101 - CORS policy con Ionic e Node.js ", "url": "https:\/\/theredcode.it\/user-onboarding-con-ionic\/" }, "https:\/\/theredcode.it\/tags\/user-onboarding\/": { "title": "user-onboarding", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/tags\/user-onboarding\/" }, "https:\/\/theredcode.it\/recensioni\/intelligenza-artificiale-for-dummies\/": { "title": "Intelligenza Artificiale for Dummies", "tags": [], "content": "Il concetto di “intelligenza artificiale” è sulla bocca di tutti: pubblicità di auto, telefoni, lavatrici, ma anche frigoriferi, e soprattutto nel mondo del lavoro Tutti parlano degli svariati usi di tecniche di “intelligenza artificiale” all’interno del loro portfolio; quanti hanno davvero capito di cosa si parla? Con questa recensione de Intelligenza artificiale for dummies esploriamo questo vasto e complessimo mondo.\nRanking Anno 2020 Autore Luca Massaron \u0026amp; Johny Paul Mueller Genere Manuale Livello Per iniziare Scorrevolezza 8 / 10 Originalità 10 / 10 Valutazione 9 / 10 Trama Con questo manuale diviso in tematiche in pieno stile _from zero to hero -_non per niente, fa parte della collana for dummies-, si analizzano i concetti principali e le soluzioni realmente presenti, nonché il presente, passato e futuro di questo settore in continua e rapidissima crescita Non solo: partendo dal concetto di intelligenza, affrontando il machine learning e il deep learning rispetto ai relativi utilizzi, si arriva a parlare delle applicazioni software e del futuro che ci si prospetta nei prossimi anni.\nRecensione In meno di 300 pagine i due autori raccolgono attraverso dei paragrafi brevi ma concisi tutti i concetti che riguardano il settore che ruota intorno alle tecniche di intelligenza artificiale: senza perdersi mai in chiacchere -il che non è scontato-, attraverso moltissime citazioni ed esempi, si parla di casi d’uso e del mondo in cui l’AI viene impiegata nella società, il tutto senza mai far mancare i riferimenti ai singoli concetti Spesso e volentieri, si tratta di gizmo. Un misto di pubblicazione scientifica e di manuale per l’uso di un mondo che è vastissimo e che spesso è al centro di confusione: tra i primi concetti che portano a queste idee errate c’è la comune credenza che il futuro dell’intelligenza artificiale sia solo fatto di morte e distruzione Gli autori non si perdono di animo e con estrema concretezza e razionalità raccolgono le varie critiche e predizioni e le documentano una ad una; i prossimi anni non saranno caratterizzati da lavori che scompariranno, robot che sostituiranno il lavoro degli esseri umani e auto che si guideranno da sole Il presente ci dimostra che l’intelligenza artificiale è fondamentale sostituire le persone in una serie di lavori, ma per una ragione ben precisa: una serie di professioni estremamente manuali e meccaniche possono essere svolte con maggior sicurezza da sistemi intelligenti che possono gestire al meglio i rischi, il tutto sempre sotto la supervisione umana I giornali ci insegnano che non è così strano sentir parlare di incidenti sul lavoro e l’idea di avere una soluzione alternativa, dove dei sistemi dotati di un’intelligenza soccombono a delle attività con dei potenziali rischi, potrebbe davvero fare la differenza Non solo: tra i vari concetti che gli autori portano in questo manuale c’è una spiegazione chiara di quello che è l’intelligenza artificiale e perché siamo lontanissimi da quel futuro distopico di cui sentiamo parlare Non dobbiamo pensare infatti ad un sistema dotato di intelligenza artificiale come qualcosa che sa fare dei conti ad una velocità impressionante, riconoscere dei volti o gestire la guida di un’auto, perché l’intelligenza è ben altro L’intelligenza è visuale e spaziale, corporea, creativa, interpersonale, intrapersonale, linguistica e solo alla fine logica (vedi qui) Calcolare dei risultati è infatti solo uno dei compiti più semplici che è possibile svolgere per un sistema come quello descritto, e questo perché attraverso dei modelli matematici si possono descrivere molti dei problemi che ci troviamo a dover affrontare. La cosa che è più ho apprezzato di questo libro è la concretezza: ci sono tantissime pagine dedicate agli usi dell’AI nella società, ma senza fronzoli: nel campo medicale, nelle applicazioni per computer e nei processi meccanici. Ti è mai capitato di scrivere una mail con Gmail e trovarti dei suggerimenti in grigetto che possiamo utilizzare per velocizzare l’invio? Le frasi suggerite sono perfettamente sensate, e questo grazie all’analisi del linguaggio (qui per approfondire). E cosa c’entrano i robot? Altra confusione derivata dall’uso del concetto di intelligenza artificiale è proprio la confusione con questi sistemi: il ruolo dei robot spesso è ben diverso da quello che fa parte dell’immaginario collettivo e, come detto in precedenza, diventa fondamentale quando si mette da parte la fantascienza e si dà spazio alla messa in sicurezza dei molti professionisti che senza questi strumenti dovrebbero esporsi a rischi molto seri. L’idea chiave è semplice: la noia uccide, e non nel senso metaforico, ma anche letterale. Un essere umano può annoiarsi facilmente nell’eseguire un compito meccanico e ripetitivo, tanto da arrivare a compiere degli errori: un robot non si annoia, anzi: può eseguire uno stesso compito all’infinito senza mai stancarsi. Questa dovrebbe essere una ragione sufficiente per evidenziare il concetto che l’intelligenza artificiale dev’essere vista come un supporto e un aiuto all’attività umana, e non come una sostituzione. Tirare le somme con questo libro è facilissimo: un manuale consigliato a tutti, che evita inutili fronzoli tecnici per chi vuole farsi un’idea più chiara, ma soprattutto per chi vuole fare chiarezza su quello che ci aspetta nei prossimi decenni. Non mancano infatti riferimenti alle grandi aziende del futuro, come SpaceX e Blue Origin: non ci resta che continuare a lavorare e vedere con i nostri occhi quel che verrà. Piccola nota: for dummies non è appropriato, perché delle basi matematiche e statistiche sono necessarie per comprendere a pieno una serie di sezioni. Tuttavia, i concetti generali sono alla portata di tutti!\nLezione imparata Utilizzare in modo efficace i dati non è banale, e questo perché l’errore è dietro l’angolo; Il concetto di inverno dell’AI; Perché gli esseri umani hanno così paura dei robot: effetto uncanny valley.  Disponibile su Amazon ", "url": "https:\/\/theredcode.it\/recensioni\/intelligenza-artificiale-for-dummies\/" }, "https:\/\/theredcode.it\/101-cors-policy-con-ionic-e-node\/": { "title": "101 - CORS policy con Ionic e Node", "tags": ["cors","express-js","ionic","node-js",], "content": "CORS policy con Ionic e Node: che incubo! Hai sviluppato un\u0026rsquo;app e dei servizi back-end e vuoi sapere come gestire la CORS policy?\nMettiti comod****ə e leggi questo articolo.\n Repository\nRepository App Ionic di esempio\nRepository back-end Node.js di esempio\n Breve intro A chi non è capitato di avere a che fare con lo sviluppo di un\u0026rsquo;applicazione che deve comunicare con dei servizi esterni e di vedere che tutto funziona (più o meno) perfettamente, finché non installiamo l\u0026rsquo;app sul device e\u0026hellip; Si rompe.\n Vediamo come gestire questa comunicazione nel modo più semplice possibile (per sviluppo, e non solo), in modo da portare alla luce temi come la CORS policy e la sua gestione.\n Esempio di errore di CORS policy con Ionic e Node\n In questo caso, l\u0026rsquo;app creata è estremamente semplice: permette di inserire una serie di attività da compiere o di cancellarle, il tutto grazie ad un servizio sviluppato in Node.js che comunica con un database MongoDB (se hai dubbi su come questi componenti funzionano o come crearli, controlla le risorse utili in fondo!).\n CORS policy Cos\u0026rsquo;è Si tratta di un meccanismo basato sull’utilizzo del protocollo HTTP che consente a un server di specificare una qualsiasi origine (dominio, schema o porta) oltre alla propria da cui un browser dovrebbe consentire il caricamento delle risorse; in altre parole, serve a specificare chi, in termini di dominio, ha accesso ad una certa risorsa, come ad esempio un servizio.\n Casi d\u0026rsquo;uso  Si basa su un altro meccanismo anche più vecchio: i browser effettuano una richiesta di \u0026ldquo;verifica preliminare\u0026rdquo; rispetto al contenuto che devono accedere (aka preflight) al server che ospita la risorsa, al fine di verificare che il server ne consenta la richiesta effettiva. Per rendere ancora più immediato il concetto, vediamo un esempio: supponendo di avere un dispositivo (browser o mobile che sia) con un indirizzo http://localhost:8100 (che definiamo origine) e un\u0026rsquo;API Node.js che risponde all\u0026rsquo;indirizzo http://localhost:8081 (che definiamo destinazione), se i CORS accettano qualunque tipo di request, abbiamo quanto segue:\n Caso 1: CORS in cui vengono accettate tutte le request\n Allo stesso modo, se configurassimo i servizi Node.js in modo che accettino le request solo da quelle con origine http://localhost:8100, avremmo quest\u0026rsquo;altro caso d\u0026rsquo;uso, che è abbastanza comunque quando si testa un\u0026rsquo;applicazione Ionic in locale:\n Caso 2a: CORS per cui solo http://localhost:8100 è accettata come origin, quindi il browser accede correttamente\n Caso 2b: CORS per cui solo http://localhost:8100 è accettata come origin, quindi da mobile non si accede ai servizi\n Questo è il caso più comune: come visibile nella parte superiore a sinistra dell\u0026rsquo;immagine, dove è riportato quello snippet di codice, vediamo che nella configurazione del back-end abbiamo configurato un\u0026rsquo;origine specifica per cui accettiamo le request in ingresso. Chiaramente, essendo un array, è possibile specificarne più di una e non solo: per come è stata pensata questa policy, è possibile fare riferimento anche ad altri campi inerenti l\u0026rsquo;header delle request, come il campo Access-Control-Allow-Credentials.\n Torniamo però a noi: nei casi che abbiamo appena illustrato, la soluzione sembra semplice. In effetti, lo è se abbiamo controllo sul back-end e quindi possiamo decidere in che modo modificare la gestione di questa policy.\n La stessa documentazione di Ionic suggerisce che, usando Capacitor, è possibile specificare a seconda del sistema operativo, l\u0026rsquo;origine con la quale veicolare le request.\n Per quanto sembri strano, localhost è il valore di default e funzionerà anche una volta che l\u0026rsquo;applicazione sarà disponibile negli store: questo vuol dire che se lasciassimo che il servizio Node.js accetti tutte le richieste da http://localhost, questo meccanismo funzionerebbe come un orologio svizzero anche una volta che il nostro utente avrà scaricato l\u0026rsquo;app dal suo store di riferimento.\n Documentazione ufficiale di Ionic sull\u0026rsquo;uso di Capacitor: https://ionicframework.com/docs/troubleshooting/cors\n Ma siamo sicuri\u0026hellip;?  Tuttavia, è sicuro lasciare localhost come origine? Assolutamente no (anche se\u0026hellip;)\n Come scritto nelle ultime due righe riportate nella figura precedente, localhost dovrebbe essere sostituito da un valore più consono relativo all\u0026rsquo;hostname che diventerà la nostra origine.\n Un suggerimento può essere quello di utilizzare il dominio che fa riferimento all\u0026rsquo;applicazione: se, per esempio, questa avesse un sito di riferimento come pippo.com, l\u0026rsquo;idea dovrebbe essere quella di utilizzare questa come origine.\n Per farlo, sono necessarie due modifiche: in primis, è necessario specificarlo all\u0026rsquo;interno del file capacitor.config.json in questo modo:\n { \u0026#34;appId\u0026#34;: \u0026#34;io.ionic.starter\u0026#34;, \u0026#34;appName\u0026#34;: \u0026#34;todoslist\u0026#34;, \u0026#34;bundledWebRuntime\u0026#34;: false, \u0026#34;npmClient\u0026#34;: \u0026#34;npm\u0026#34;, \u0026#34;webDir\u0026#34;: \u0026#34;www\u0026#34;, \u0026#34;plugins\u0026#34;: { \u0026#34;SplashScreen\u0026#34;: { \u0026#34;launchShowDuration\u0026#34;: 0 } }, \u0026#34;cordova\u0026#34;: {}, \u0026#34;server\u0026#34;: { \u0026#34;hostname\u0026#34;: \u0026#34;http://pippo\u0026#34; } }  Non solo: come visto in precedenza, all\u0026rsquo;interno della dichiarazione della funzione cors() nel servizio Node.js, dobbiamo aggiungere il dominio scelto tra quelli ammessi:\napp.use(cors({origin: [\u0026#39;http://pippo\u0026#39;]})) Caso 3: CORS per cui solo http://pippo è accettata come origin, quindi da mobile si accede correttamente\n Let\u0026rsquo;s test!  Per poter verificare che tutto funzioni correttamente sfruttando la nostra rete di casa, abbiamo bisogno di 2 cose: un dispositivo mobile e una connessione WiFi.\n Prima di tutto, colleghiamo il dispositivo mobile su cui installeremo l\u0026rsquo;app di sviluppo alla stessa rete dove è collegato il nostro portatile; fatto questo, verifichiamo qual è l\u0026rsquo;indirizzo del portatile nella rete locale tramite la riga di comando, con il comando ipconfig per Windows o ifconfig per sistemi GNU/Linux e macOS:\n Esempio di indirizzo IP nella rete locale\n Perfetto, l\u0026rsquo;indirizzo IPv4 è 192.168.1.64; ci aspettiamo che anche il telefono abbia un indirizzo di rete che appartiene alla stessa rete, e possiamo verificarlo tramite le impostazioni, a seconda del sistema operativo. Indicativamente, se inizia con 192.168.1.x, siamo a cavallo!\n A questo punto, modifichiamo il file che riporta l\u0026rsquo;indirizzo di base dei servizi che utilizziamo nella nostra app: in questo caso, è sufficiente modificare il valore della proprietà endpointUrl all\u0026rsquo;interno del file environment.ts in questo modo:\n export const environment = { production: true, baseURL: \u0026#39;http://192.168.1.66:8081/api\u0026#39; };  Fatto questo, siamo pronti: colleghiamo il telefono al portatile, installiamo l\u0026rsquo;app, e verifichiamo che tutto funzioni perfettamente!\n  Risorse utili Ionic 5: Guida completa per creare app per Android e iOS Ionic cheatsheet Documentazione ufficiale delle CORS policy di Ionic Post di dettaglio sul funzionamento della CORS policy nel blog Ionic Spiegazione sul funzionamento della CORS policy Articolo su come funziona uno stack MEAN ", "url": "https:\/\/theredcode.it\/101-cors-policy-con-ionic-e-node\/" }, "https:\/\/theredcode.it\/tags\/cors\/": { "title": "cors", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/tags\/cors\/" }, "https:\/\/theredcode.it\/tags\/express-js\/": { "title": "express-js", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/tags\/express-js\/" }, "https:\/\/theredcode.it\/tags\/node-js\/": { "title": "node-js", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/tags\/node-js\/" }, "https:\/\/theredcode.it\/ia\/coded-bias-e-lintelligenza-non-artificiale\/": { "title": "Coded bias e l\u0027intelligenza non artificiale", "tags": ["intelligenza-artificiale","entertainement",], "content": "Il documentario girato da Netflix e divenuto popolare negli ultimi mesi, dà una visione molto chiara su cosa sia il Coded bias e l\u0026rsquo;intelligenza non artificiale: parliamone insieme.\n Coded Bias e l\u0026rsquo;intelligenza non artificiale\n Trama   In questo documentario (disponibile dal 5 aprile scorso) si parla del funzionamento degli algoritmi di apprendimento automatico che ci sono dietro ad una serie di applicativi anche molto conosciuti, come social media, assistenti vocali e molto altro.\n Non solo: si analizzano gli effetti che questi hanno in termini di risultati: il tutto ha inizio grazie alla storia raccontata da Joy Buolamwini, un\u0026rsquo;informatica e attivista che ha scoperto e denunciato il modo in cui gli algoritmi di riconoscimento facciale utilizzati da grandi società -tra le quali figura IBM- avessero un\u0026rsquo;accuratezza inferiore nel gestire volti femminili o con pelle scura, rispetto a uomini bianchi.\nNel dettaglio\u0026hellip; Il suo studio inizia grazie al dottorato volto all\u0026rsquo;MIT Media Lab, dove progetta uno specchio che permette di vedere il riflesso della propria immagine rispetto alle proprie aspirazioni: Aspire Mirrors si basava su tecnologie quali una telecamera e un software di riconoscimento facciale che, una volta individuato il viso, proiettava sullo schermo una serie di informazioni.\n Durante il documentario, Joy mostra come questo schermo fosse in grado di rilevare una maschera bianca come volto, ma non il suo: questo perché il software di riconoscimento aveva appreso da ciò che gli era stato fornito come input, ossia un insieme di volti di maschi bianchi, piuttosto che di altro genere o etnie.\n Algoritmo pregiudicato In questo frangente nasce dunque il concetto di coded bias, che letteralmente si potrebbe tradurre come algoritmo affetto da pregiudizio. D\u0026rsquo;altronde, il computer è un sistema -attualmente- stupido e possiede un\u0026rsquo;intelligenza artificiale, ossia il frutto della nostra esperienza.\n La storia ci insegna che la società ha un passato a tratti oscuro e macabro e una parte dei dati a nostra disposizione parlano anche di queste fasi: non a caso, i dataset utilizzati contengono il risultato di un razzismo intrinseco che è frutto di decenni di (triste) storia.\n Per fortuna, per Joy questo però è un punto di svolta: il suo progetto si trasforma in un\u0026rsquo;attività tutta nuova, che prende il nome di Gender shades e che, grazie ad una sorta di lega di supereroi informatici, la Algorithmic Justice League, cerca di combattere ogni giorno questa discriminazione algoritmica in cui la cultura patriacarcale e razzista ha influenzato il risultato di alcuni algoritmi.\nIl documentario non si ferma però qui: Joy, insieme ad un\u0026rsquo;altra serie di associazioni non meno degne di nota, si occupa di trovare un dialogo con le aziende produttrici e consumatrici di questi strumenti -tra cui sempre IBM- per aprire un canale di comunicazione e tracciare una roadmap che definisca un percorso di revisione e miglioramento di questi algoritmi.\n Il tutto può sembrare banale e scontato, ma per un\u0026rsquo;azienda di quella portata, ammettere che il proprio lavoro abbia una serie di vizi non è cosa da niente: parliamo di anni di lavoro che devono essere sottoposti ad un cambiamento radicale.\n Il ruolo della matematica Tra le figure con cui Buolamwini collabora, spicca anche la matematica Cathy O\u0026rsquo;Neil, celebre per aver scritto il libro \u0026ldquo;Weapons of Math Destruction\u0026rdquo;: in quest\u0026rsquo;opera, lei denuncia l\u0026rsquo;utilizzo di questi algoritmi in processi completamente automatizzati, che invece richiedono l\u0026rsquo;intervento di un essere umano.\n Un esempio? Algoritmi decisionali che decidono in maniera precisa e puntuale quali CV sono adatti ad un certo profilo o meno, sulla base di ciò che questi file contengono; un esempio che può risultare banale, ma la realtà è che questi strumenti sono sempre più parte della nostra quotidianeità, e il tutto senza rendercene sempre conto.\n Portano come caso di studio anche la città di Londra, che per un lungo periodo ha utilizzato delle camere collegate ad un sistema centralizzato per rilevare i volti delle persone che passavano per strada e, se registrati nel database dei profili criminali, inviavano una segnalazione alla polizia, che si preoccupava di fermare il \u0026ldquo;sospetto\u0026rdquo; e chiedergli informazioni.\n Anche in questo caso, strumento utilizzato nella vita reale, ma con un grado di precisione al di sotto della media: non poche volte diverse persone sono state fermate perché scambiate per altre, come un ragazzo di 14 anni che viene fermato perché sospettato di essere criminale. Inutile dire che il ragazzo in questione era di pelle scura e che l\u0026rsquo;algoritmo aveva totalmente sbagliato persona: l\u0026rsquo;algoritmo ne ha comunque registrato il volto e rilevato le relative informazioni.\n Joy non si ferma qui: arriva a presentare i suoi lavori al Congresso degli Stati Uniti dove trova largo consenso, soprattutto da parte di politici del tutto ignari della questione: nel maggio del 2019, grazie alle lunge battaglie condotte da questi gruppi di attivisti, diverse città iniziano a bandire l\u0026rsquo;utilizzo delle tecnologie di riconoscimento facciale, soprattutto fintanto che non venga redatta una documentazione relativa alla regolamentazione che sia consona ai limiti di utilizzo.\n Aspetti interessanti  Molti degli episodi raccontati durante il documentario sono del tutto sbalorditivi, ma non in senso positivo: immaginare che l\u0026rsquo;intelligenza (non)artificiale possa essere razzista, è a dir poco lontano dall\u0026rsquo;immaginario comune e medio, quando purtroppo i fatti hanno dimostrato altro. Non solo: per tutti coloro che sono terrorizzati all\u0026rsquo;idea che un giorno i computer possano prendere decisioni al posto degli esseri umani e distruggere il mondo intero, un documentario del genere non può che rafforzare una serie di concetti.\n Certo, alcune esperienze che vengono portate come casi di studio non sono proprio positivi: basti pensare all\u0026rsquo;esperimento condotto da Microsoft con Tay, che gli costò la faccia per un bel periodo (qui i dettagli).\n In questo contesto, è infatti utile parlare di intelligenza (non) artificiale: questa intelligenza -debole, ricordiamolo- che stiamo addestrando tramite una serie di input, utilizza quello che per noi rappresenta una porzione di mondo reale: la verità è che questi algoritmi non prevedono il futuro, ma fanno una serie di predizioni sulla base del passato, ed è esattamente in questo modo che gli algoritmi contengono le stesse ideologie razziste che hanno attraversato parte della nostra storia.\n Cosa ci insegnano queste esperienze? Non solo, come scontato, che come esseri umani abbiamo ancora molto lavoro da fare, ma soprattutto che prima di poter utilizzare questi strumenti con una certa autonomia, sarebbe bene analizzarne sul lungo periodo gli effetti, senza vedere queste tecnologie come magia pura, ma piuttosto come il frutto delle nostre esperienze passate.\n Risorse utili Consigli per approfondire alcuni dei temi trattati:\n TedX di Joy intitolato \u0026ldquo;How I\u0026rsquo;m fighting bias in algorithms\u0026rdquo; (video) L\u0026rsquo;intelligenza non artificiale di Meredith Broussard (libro) Le persone non servono di Jerry Kaplan (libro) \u0026ldquo;Non sono una donna?\u0026rdquo; (video) Intelligenza artificiale for dummies (libro) Armi di distruzione matematica (libro) Voglio essere un a data scientist ", "url": "https:\/\/theredcode.it\/ia\/coded-bias-e-lintelligenza-non-artificiale\/" }, "https:\/\/theredcode.it\/tags\/entertainement\/": { "title": "entertainement", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/tags\/entertainement\/" }, "https:\/\/theredcode.it\/recensioni\/la-non-intelligenza-artificiale\/": { "title": "La Non Intelligenza Artificiale", "tags": [], "content": "Questo libro era in lista da diverso tempo, ma finalmente ho trovato il tempo per leggerlo, o meglio\u0026hellip; divorarlo! \u0026ldquo;La non intelligenza artificiale\u0026rdquo; è uno di quei libri che dovrebbe far parte di quelli obbligatori quando si intraprende questa carriera (e non solo). Vediamo perché!\nRanking Anno 2021 Autore Meredith Broussard Genere Saggio Livello Per approfondire Scorrevolezza 10 / 10 Originalità 10 / 10 Valutazione 10 / 10 Recensione Comincio con il dire che il libro è diviso in tre parti, di cui la prima è di base un\u0026rsquo;introduzione al funzionamento dei computer, dei sistemi informatici e del mondo della programmazione: può sembrare una banalità, ma ecco perché non lo è. Meredith Broussard, da brava giornalista, non dà per scontato che chi si approccia a questa tematica sia pienamente consapevole delle tematiche/terminologie che andrà ad utilizzare. Non solo: magari, chi è competente nel mondo della programmazione, non lo è nel settore dell\u0026rsquo;AI, o magari ha delle conoscenze di base, che sono sufficienti, ma non adatte a seguire a pieno il contesto trattato. E così, con delle parole estremamente semplici e degli esempi a portata di chiunque (perfino della nonna di Einstein), l\u0026rsquo;autrice ci dà un caloroso benvenuto all\u0026rsquo;interno di quest\u0026rsquo;avventura che è il mondo della tecnologia, senza dimenticare quello che è il suo mestiere e la sua formazione. Super interessante è infatti la sezione dedicata al data journalism, un mestiere che in Italia ha poco riscontro, ma che si sta affermando come professione in diversi paesi europei (per saperne di più, leggi questo articolo). Nella seconda parte passiamo al cuore del libro: perché l\u0026rsquo;intelligenza artificiale NON salverà il mondo. La missione di Meredith Broussard è infatti quella di demistificare le possibilità che i sistemi \u0026ldquo;intelligenti\u0026rdquo; prendano controllo dell\u0026rsquo;umanità fino a distruggerla. Con degli esempi banali, ma alla portata e a conoscenza di tutti -vedi gli esami di fine anno o le automobili a guida autonoma-, distrugge letteralmente uno per uno tutte quelle credenze per cui il nostro futuro sulla Terra è ormai al capolinea. Un esempio? La difficoltà che spesso si ha nel parlare di questioni informatiche tra persone non tecniche e persone che invece sono tecniche, è enorme: basti pensare che insegnare ad un bambino a riconoscere una zebra, richiede più o meno 10 minuti. Ad un computer ci potrebbero volere anche 5 anni. Spesso c\u0026rsquo;è questa credenza per cui se un computer è in grado di calcolare quale debba essere il prezzo giusto per una casa che si trova nel quartiere centrale di Milano con 3 locali, un garage e un salone openspace, allora la fine del mondo è vicina. L\u0026rsquo;intelligenza artificiale a cui viene assegnata una sorta di \u0026ldquo;intelligenza\u0026rdquo; intrinseca e frutto dell\u0026rsquo;esperienza è in realtà il risultato di addestramento che però pecca sulle questioni più banali: è impossibile infatti misurare l\u0026rsquo;intelligenza, figuriamoci per un sistema (qui qualche dettaglio!).\n Se le piccole cose non funzionano, è ingenuo pensare che le cose più complesse funzioneranno per magia.\n L\u0026rsquo;ultima parte è dedicata al futuro, per dare uno sguardo a quelle che sono le prospettive future dell\u0026rsquo;intelligenza artificiale e dei suoi livelli di applicazione. Racconta in particolare di un episodio in cui si è ritrovata a lavorare 3 giorni di fila su un autobus durante uno dei tanti hackaton che vengono organizzati nel settore. La sua idea iniziale (geniale, peraltro) di creare un\u0026rsquo;app che calcolasse quanta pizza ordinare per una festa, ha vinto l\u0026rsquo;hackaton e le ha regalato una grande lezione: la tecnologia che porta dei benefici a lungo termine, richiede un lungo periodo.\n Si tratta di una maratona, non dei 100 metri.\n Spesso, intorno al mondo della tecnologia, e ancor di più sul tema dell\u0026rsquo;intelligenza artificiale, ci sono tante storie e leggende che meritano di essere riviste. Il mondo degli hackaton poi, per chi l\u0026rsquo;ha vissuto, è un qualcosa che dà una carica assurda, stimola la creatività, allarga la rete dei contatti, ma che funziona una volta su un milione, e l\u0026rsquo;autrice lo racconta senza tanti giri di parole. Il taglio che ha questo volume è molto pratico, diretto e senza filtri: è stato bellissimo leggere di come, anche nel suo vissuto, il gender gap nell\u0026rsquo;ambito STEM abbia creato un senso di non appartenza e di disagio. E questo non vale solo in alcuni settori o ambienti: vengono citate università come Harvard, all\u0026rsquo;interno della quale alle studentesse era suggerito di seuguire corsi più facili rispetto ai ragazzi, e di come l\u0026rsquo;intero corpo docenti non contasse neanche una docente senior fino al 2009. Ogni singola pagina del libro merita di essere letta e assaporata, spesso con dell\u0026rsquo;amaro in bocca, perché l\u0026rsquo;esperienza personale dell\u0026rsquo;autrice, insieme all\u0026rsquo;uso di moltissima bibliografia che è stata ben curata, danno un punto di vista assolutamente non banale. Il sottotitolo del libro, non a caso, è \u0026ldquo;come i computer non capiscono il mondo\u0026rdquo;: non solo non ci riescono i computer, ma anche noi esseri umani abbiamo ancora molto su cui lavorare. Non a caso, l\u0026rsquo;autrice è una delle protagoniste di un documentario Netflix che parla proprio di pregiudizi: Coded Bias, per chi non l\u0026rsquo;ha visto, è un MUST per chi vuole capire come il nostro -pessimo- passato abbia influenzato quelli che definiamo \u0026ldquo;sistemi intelligenti\u0026rdquo;.\nLezione imparata   I dati sono costrutti sociali, quindi i sistemi avranno gli stessi pregiudizi che noi esseri umani abbiamo; Se qualcuno ti dice che il computer è come un cervello, no: non è affatto così; L\u0026rsquo;intelligenza artificiale potrà affiancare gli esseri umani, potrà sollevarci da una serie di compiti gravosi e anche pericolosi, ma non potrà né deve sostituire il lavoro svolto dagli esseri umani, né può assumerne il controllo.  Quotes   Occorre aver fede nel fatto che si riuscirà a inventare ciò a cui si sta lavorando e aver fede nel fatto che, alla fine, l\u0026rsquo;aspetto finanziario andrà a posto. L\u0026rsquo;ingegneria, a volte, è un elettrizzante salto nell\u0026rsquo;ignoto.\n   Se le piccole cose non funzionano, è ingenuo pensare che le cose più complesse funzioneranno per magia.\n Disponibile su Amazon\n", "url": "https:\/\/theredcode.it\/recensioni\/la-non-intelligenza-artificiale\/" }, "https:\/\/theredcode.it\/addestramento-ner-con-spacy-per-new-entry\/": { "title": "Addestramento NER con spaCy per new entry", "tags": ["intelligenza-artificiale","python",], "content": "\u0026ldquo;Named Entity Recognition\u0026rdquo;: letteralmente significa riconoscere le entità. Con Python, è un\u0026rsquo;attività piuttosto semplice, grazie alla potenza di libreria come spaCy che forniscono dei modelli pronti all\u0026rsquo;uso per riconsocere oggetti comuni come luoghi, persone, brand, e molto altro.\nE se volessi aggiornare il modello con delle nuove categorie?\n \u0026ldquo;Addestramento NER con spaCy per new entry\u0026rdquo;: what?\n  \n Proseguiamo con il nuovo filone di articoli a tema intelligenza artificiale e parliamo di come addestrare [spaCy] (https://spacy.io/) per riconoscere nuove entità! L\u0026rsquo;ambito dell\u0026rsquo;analisi del linguaggio non è affatto nuovo -nonostante sia credenza usuale pensarlo- ed è un argomento particolarmente a me caro: il primo libro che ho pubblicato ne parla in maniera introduttiva e consiglio di darci un\u0026rsquo;occhiata per iniziare a buttare giù qualche idea.\n  Cos\u0026rsquo;è il NER  Il riconoscimento delle entità nominate (in inglese, Named Entity Recognition) è il processo di identificazione automatica delle entità presenti in un testo e di conseguente classificazione in categorie predefinite come \u0026ldquo;persona\u0026rdquo;, \u0026ldquo;organizzazione\u0026rdquo;, \u0026ldquo;posizione\u0026rdquo; e così via. La libreria spaCy ti consente di utilizzare modelli per il NER già addestrati, ma anche di aggiornarli per adattarli al contesto specifico delle informazioni a nostra disposizione, o ancora di addestrare un nuovo modello da zero.\n La realtà è che questi modelli sono molto sviluppati in inglese e possono riconoscere date, eventi, lingue, località, numeri, percentuali, organizzazioni, persone, prodotti, quantità e molto altro, ma non lo sono in lingue come l\u0026rsquo;italiano: il numero di entità riconosciute si conta con una sola mano. Per averlo chiaro, vediamo come dovrebbe funzionare_,_ e come invece funziona:\n Come dovrebbe funzionare il NER\n Come invece funziona\n Ma facciamo un passo alla volta: vediamo in che modo questo modello funziona e come utilizzarlo!\n Come funziona  Per far sì che venisse fuori un risultato come quello precedente, i passi sono davvero semplici: per prima cosa, è necessario avere una versione di Python 3.x e, nel nostro caso, aver scaricato il modello per l\u0026rsquo;italiano: sempre tramite il sito di spaCy, è possibile scegliere quale modello utilizzare a seconda della lingua e del tipo di lavoro da effettuare. Nel nostro caso, andremo ad utilizzare il modello più grande denominato it_core_news_ls.\n python -m spacy download it_core_news_lg  Piccola precisazione: è possibile anche partire da zero, costruendo un modello da zero, ma non è questo il caso: noi vogliamo piuttosto integrare delle informazioni in quello disponibile.\n Dopo averlo scaricato grazie al precedente comando, passiamo al funzionamento: lo vado a caricare tramite la funzione di spaCy load e, partendo da un semplice file di testo che contiene il testo che vogliamo classificare, andiamo a stampare per ogni entità riconosciuta, l\u0026rsquo;etichetta assegnata:\n import spacy\nCarico modello precedente nlp = spacy.load(\u0026lsquo;it_core_news_lg\u0026rsquo;)\nwith open(\u0026lsquo;articolo.txt\u0026rsquo;) as file: article = file.read()\nApplico modello su file doc = nlp(article) for ent in doc.ents: print(ent.text, ent.label_)\n  Come vediamo, il risultato è abbastanza buono: riconosce Franco Battiato e Francesco Battiato come persone, Riposto e Ionia come luoghi, e via dicendo. Considerando che si tratta di un testo abbastanza semplice, quello che ci viene restituito è accettabile.\n E se invece del testo sulla biografia di Franco Battiato (buon viaggio, maestro!), volessimo poter etichettare delle nuove entità? Abbiamo visto che per l\u0026rsquo;italiano, le possibilità sono poche: luoghi, organizzazioni, persone o altre entità che vengono (spesso erroneamente) categorizzate come \u0026ldquo;miscellaneous\u0026rdquo;.\n Come aggiornare il modello  Ad esempio, proviamo a mettere il nostro modello in grado di riconoscere il cibo: l\u0026rsquo;esempio che andremo ad esaminare è volutamente semplice, perché serve a rendere l\u0026rsquo;idea del lavoro da svolgere per arrivare ad un buon risultato, ma è altrettanto semplice estenderlo.\n Per prima cosa, raccogliamo in un file di testo una decina di frasi che parlino di cibo, in questo modo:\n Ho comprato del latte. Federico adora la cioccolata. Io e mio cugino andiamo matti per le lasagne. Per preparare la pasta, è sufficiente mettere una pentola d\u0026rsquo;acqua sul fuoco\u0026hellip; Per preparare il tiramisù, hai bisogno di\u0026hellip; I savoiardi dovranno essere imbevuti di caffè e poi adagiati in una pirofila. Il gelato alla nocciola è il mio preferito. Hai mai assaggiato le lasagne al pesto? Per cena cucinerò della pasta. Non mi va di cucinare stasera. Ordiniamo della pizza?\n Questi sono esempi scritti a mano, ma sarebbe opportuno avere un vero dataset, che sia molto più completo e ampio: su questo argomento ci torneremo un\u0026rsquo;altra volta. Fatto questo, andiamo a creare un oggetto fatto in questo modo:\n TRAIN_DATA = [ (\u0026ldquo;Prima di tutto dividete i tuorli dagli albumi e metteteli in due ciotole diverse.\u0026rdquo;, {\u0026ldquo;entities\u0026rdquo;: [(27, 33, \u0026ldquo;ALIMENTO\u0026rdquo;), (40, 46, \u0026ldquo;ALIMENTO\u0026rdquo;)]}), (\u0026ldquo;Unite un cucchiaio di zucchero\u0026rdquo;, {\u0026ldquo;entities\u0026rdquo;: [(22, 30, \u0026ldquo;ALIMENTO\u0026rdquo;)]}), (\u0026ldquo;unire il mascarpone\u0026rdquo;, {\u0026ldquo;entities\u0026rdquo;: [(9, 19, \u0026ldquo;ALIMENTO\u0026rdquo;)]}), (\u0026ldquo;mescolare le uova\u0026rdquo;, {\u0026ldquo;entities\u0026rdquo;: [(13, 17, \u0026ldquo;ALIMENTO\u0026rdquo;)]}), (\u0026ldquo;ricopritela con uno strato di savoiardi imbevuti nella bagna\u0026rdquo;, {\u0026ldquo;entities\u0026rdquo;: [(30, 39, \u0026ldquo;ALIMENTO\u0026rdquo;)]}), (\u0026ldquo;Mescolate con il liquore al caffè\u0026rdquo;, {\u0026ldquo;entities\u0026rdquo;: [(18, 25, \u0026ldquo;ALIMENTO\u0026rdquo;), (29, 34, \u0026ldquo;ALIMENTO\u0026rdquo;)]}), (\u0026ldquo;Usare lo sbattitore\u0026rdquo;, {\u0026ldquo;entities\u0026rdquo;: []}), (\u0026ldquo;Mangiare la pizza una volta a settimana è d\u0026rsquo;obbligo\u0026rdquo;, {\u0026ldquo;entities\u0026rdquo;: [(12, 17, \u0026ldquo;ALIMENTO\u0026rdquo;)]}), (\u0026ldquo;Ho comprato del latte.\u0026rdquo;, {\u0026ldquo;entities\u0026rdquo;: [(17, 22, \u0026ldquo;ALIMENTO\u0026rdquo;)]}), (\u0026ldquo;Marco adora la cioccolata.\u0026rdquo;, {\u0026ldquo;entities\u0026rdquo;: [(16, 26, \u0026ldquo;ALIMENTO\u0026rdquo;)]}), (\u0026ldquo;Io e mio cugino andiamo matti per le lasagne.\u0026rdquo;, {\u0026ldquo;entities\u0026rdquo;: [(38, 45, \u0026ldquo;ALIMENTO\u0026rdquo;)]}), (\u0026ldquo;Per preparare la pasta, è sufficiente mettere una pentola d\u0026rsquo;acqua sul fuoco\u0026hellip;\u0026rdquo;, {\u0026ldquo;entities\u0026rdquo;: [(18, 23, \u0026ldquo;ALIMENTO\u0026rdquo;), (61, 66, \u0026ldquo;ALIMENTO\u0026rdquo;)]}), (\u0026ldquo;Per preparare il tiramisù, hai bisogno di\u0026hellip;\u0026rdquo;, {\u0026ldquo;entities\u0026rdquo;: [(18, 26, \u0026ldquo;ALIMENTO\u0026rdquo;)]}), (\u0026ldquo;I savoiardi dovranno essere imbevuti di caffè e poi adagiati in una pirofila.\u0026rdquo;, {\u0026ldquo;entities\u0026rdquo;: [(3, 12, \u0026ldquo;ALIMENTO\u0026rdquo;)]}), (\u0026ldquo;Il gelato alla nocciola è il mio preferito.\u0026rdquo;, {\u0026ldquo;entities\u0026rdquo;: [(4, 10, \u0026ldquo;ALIMENTO\u0026rdquo;), (16, 24, \u0026ldquo;ALIMENTO\u0026rdquo;)]}), (\u0026ldquo;Hai mai assaggiato le lasagne al pesto?\u0026rdquo;, {\u0026ldquo;entities\u0026rdquo;: [(23, 30, \u0026ldquo;ALIMENTO\u0026rdquo;), (34, 39, \u0026ldquo;ALIMENTO\u0026rdquo;)]}), (\u0026ldquo;Per cena cucinerò della pasta.\u0026rdquo;, {\u0026ldquo;entities\u0026rdquo;: [(20, 25, \u0026ldquo;ALIMENTO\u0026rdquo;)]}), (\u0026ldquo;Non mi va di cucinare stasera. Ordiniamo della pizza?\u0026rdquo;, {\u0026ldquo;entities\u0026rdquo;: [(47, 53, \u0026ldquo;ALIMENTO\u0026rdquo;)]})\n]\n Si tratta di un array di tuple, dove ogni tupla è costituita da una stringa rappresentante la frase da cui imparare, mentre la seconda parte rappresenta le entità: queste sono a loro volta definite tramite un array che ne stabilisce la posizione dell\u0026rsquo;oggetto che vogliamo il nostro modello impari e l\u0026rsquo;etichetta che vogliamo assegnargli; infatti, nel caso nella nostra frase ci siano più alimenti, è bene segnalarli tutti.\n (\u0026ldquo;Prima di tutto dividete i tuorli dagli albumi e metteteli in due ciotole diverse.\u0026rdquo;, {\u0026ldquo;entities\u0026rdquo;: [(27, 33, \u0026ldquo;ALIMENTO\u0026rdquo;), (40, 46, \u0026ldquo;ALIMENTO\u0026rdquo;)]}),\n Fatto questo, andiamo ad aggiungere le varie entità all\u0026rsquo;interno delle labels a disposizione del modello di riconoscimento, in questo modo:\n for _, annotations in TRAIN_DATA: for ent in annotations.get(\u0026ldquo;entities\u0026rdquo;): ner.add_label(ent[2])\n Arriviamo al cuore dell\u0026rsquo;attività: dobbiamo addestrare ed aggiornare il nostro modello. Per farlo, andremo ad eseguire 30 iterazioni (o epoche) in cui, per ognuna di queste, i dati saranno rimescolati e andremo a calcolare i valori in termini di losses: significa che utilizzeremo un dizionario per mantenere le informazioni relative alle \u0026ldquo;perdite\u0026rdquo; rispetto a ciascun componente della pipeline. In altre parole, l\u0026rsquo;addestramento è un processo iterativo basato su reti neurali in cui le previsioni del modello vengono confrontate man mano che questo avviene, per poter stimare quello che si chiama gradiente. Questo viene infatti utilizzato per calcolare il valore dei pesi attraverso la retropropagazione degli errori. I gradienti indicano come modificare i valori di peso in modo che le previsioni del modello diventino più simili alle etichette da assegnare. Ma mano che i valori di loss diminuiscono, il nostro modello è sempre più vicino all\u0026rsquo;esser pronto a lavorare per noi!\n   Non ti preoccupare: se questi concetti non ti sono chiari, troverai delle risorse utili alla fine dell\u0026rsquo;articolo per approfondire questi aspetti.\n Inoltre, utilizzeremo i batch, che sono molto utili quando si deve suddividere l\u0026rsquo;input iniziale in gruppi più piccoli: in questo caso, utilizzeremo 2 coppie di frasi (vedi riga con parametro size=2) per ogni minibatch.\n Per ogni frase contenuta nel nostro insieme di addestramento di partenza e per ogni gruppo di entità, andremo a creare un oggetto Example: questo strumento appartenente sempre alla libreria di spaCy è fondamentale per creare gli oggetti con cui il modello potrà \u0026ldquo;aggiornarsi\u0026rdquo;, e lo farà grazie alla funzione update. Ultimo, non ultimo, il valore di drop: questo rappresenta il cosiddetto dropout rate e si tratta di una tecnica che usano le reti neurali per ridurre l\u0026rsquo;eccessivo adattamento all\u0026rsquo;insieme di addestramento. Può infatti succedere che il modello impari troppo alla lettera dagli esempi che gli forniamo e quindi non sappia generalizzare: in questo caso, sarebbe utile come un pappagallo a cui insegnamo a dire \u0026ldquo;cioccolato\u0026rdquo;!\n Il valore per il dropout di default è di 0.2: questo vuol dire che il 20% dei neuroni utilizzati nel modello verrà eliminato in maniera casuale dall\u0026rsquo;addestramento, per rendere più robusto il modello. In questo caso, impostiamo a 0.3, visto che il nostro dataset iniziale è molto piccolo:\n # Import delle librerie import random from spacy.util import minibatch, compounding from pathlib import Path from spacy.training import Example\nAddestramento del modello with nlp.disable_pipes(*unaffected_pipes): # Per 30 iterazioni for iteration in range(30):\n # Shuffle dei dati prima di ogni iterazione random.shuffle(TRAIN\\_DATA) losses = {} batches = minibatch(TRAIN\\_DATA, size=compounding(4.0, 32.0, 1.001)) for batch in spacy.util.minibatch(TRAIN\\_DATA, size=2): for text, annotations in batch: # Creo l'oggetto example doc = nlp.make\\_doc(text) example = Example.from\\_dict(doc, annotations) # Aggiorno il modello nlp.update(\\[example\\], losses=losses, drop=0.3) print(\u0026quot;Losses\u0026quot;, losses)  Una volta che il nostro modello è stato creato, andiamo a salvarlo: in questo modo, sarà possibile utilizzarlo come base di partenza, proprio come abbiamo fatto all\u0026rsquo;inizio sfruttando quello già disponibile chiamato it_core_news_lg: lo salviamo all\u0026rsquo;interno della cartella ner e lo carichiamo nuovamente, per andarlo a testare.\n doc = nlp(\u0026ldquo;Il tiramisù richiede il mascarpone\u0026rdquo;) print(\u0026ldquo;Entità:\u0026rdquo;, [(ent.text, ent.label_) for ent in doc.ents])\nSalvo il modello output_dir = Path(\u0026rsquo;/ner/\u0026rsquo;) nlp.to_disk(output_dir) print(\u0026ldquo;Salvato nella cartella: \u0026ldquo;, output_dir)\n  Test  Così come abbiamo fatto con il primo step, carichiamo tramite la funzione load di spaCy il modello e poi andiamo ad inserire delle frasi nuove, per vedere come lavora:\n # Carico modello print(\u0026ldquo;Carico modello dalla cartella: \u0026ldquo;, output_dir) nlp_updated = spacy.load(output_dir) doc = nlp_updated(\u0026ldquo;Amo il tiramisù con i savoiardi e la pizza con la mozzarella\u0026rdquo;) print(\u0026ldquo;Entità:\u0026rdquo;, [(ent.text, ent.label_) for ent in doc.ents])\ndoc = nlp_updated(\u0026ldquo;Per preparare le tagliatelle, ci vuole la farina\u0026rdquo;) print(\u0026ldquo;Entità:\u0026rdquo;, [(ent.text, ent.label_) for ent in doc.ents])\ndoc = nlp_updated(\u0026ldquo;Marco adora la marmellata\u0026rdquo;) print(\u0026ldquo;Entità:\u0026rdquo;, [(ent.text, ent.label_) for ent in doc.ents])\n Andiamo ad eseguire e\u0026hellip;\n Losses {\u0026rsquo;ner\u0026rsquo;: 13.718762298731333} Losses {\u0026rsquo;ner\u0026rsquo;: 3.8097394014000354} Losses {\u0026rsquo;ner\u0026rsquo;: 3.809832848429478} Losses {\u0026rsquo;ner\u0026rsquo;: 5.24418013019176} Losses {\u0026rsquo;ner\u0026rsquo;: 5.251497398704705} Losses {\u0026rsquo;ner\u0026rsquo;: 5.252461936261976} Losses {\u0026rsquo;ner\u0026rsquo;: 5.252638007338877} Losses {\u0026rsquo;ner\u0026rsquo;: 7.138335501468781} Losses {\u0026rsquo;ner\u0026rsquo;: 10.640419887586425} Losses {\u0026rsquo;ner\u0026rsquo;: 10.643248762972322} Losses {\u0026rsquo;ner\u0026rsquo;: 1.9226063930241843} Losses {\u0026rsquo;ner\u0026rsquo;: 3.5654583980540644} Losses {\u0026rsquo;ner\u0026rsquo;: 5.100164967156944} Losses {\u0026rsquo;ner\u0026rsquo;: 6.197872385207523} \u0026hellip; Losses {\u0026rsquo;ner\u0026rsquo;: 0.0012744452799972822} Losses {\u0026rsquo;ner\u0026rsquo;: 0.001274446825658949} Losses {\u0026rsquo;ner\u0026rsquo;: 0.0012744472823863233} Losses {\u0026rsquo;ner\u0026rsquo;: 0.0013462597426898537} Entità: [(\u0026lsquo;mascarpone\u0026rsquo;, \u0026lsquo;ALIMENTO\u0026rsquo;)] Salvato nella cartella: \\ner Carico modello dalla cartella: \\ner Entità: [(\u0026lsquo;savoiardi\u0026rsquo;, \u0026lsquo;ALIMENTO\u0026rsquo;), (\u0026lsquo;pizza\u0026rsquo;, \u0026lsquo;ALIMENTO\u0026rsquo;), (\u0026lsquo;mozzarella\u0026rsquo;, \u0026lsquo;ALIMENTO\u0026rsquo;)] Entità: [(\u0026lsquo;farina\u0026rsquo;, \u0026lsquo;ALIMENTO\u0026rsquo;)] Entità: [(\u0026lsquo;marmellata\u0026rsquo;, \u0026lsquo;ALIMENTO\u0026rsquo;)]\n Da notare una cosa: parole come \u0026ldquo;farina\u0026rdquo;, \u0026ldquo;mozzarella\u0026rdquo; e \u0026ldquo;marmellata\u0026rdquo; non erano incluse nell\u0026rsquo;insieme di addestramento, ma sono state etichettate correttamente: questo perché il modello non viene addestrato a riconoscere le parole esatte, piuttosto impara a dedurne il contesto e quindi a trarre conclusioni su quali parole possano corrispondere a quella categoria, in modo da poter generalizzare il suo uso\u0026hellip; ed è questa la parte incredibile!\n  Risorse utili Analisi del linguaggio con Python (libro) Repository GitHub Guida from zero to hero (EN): spaCy 101 Le reti neurali in 5 minuti (video) Intelligenza artificiale for dummies (libro) Machine learning for dummies (libro) Python: guida completa (libro) ", "url": "https:\/\/theredcode.it\/addestramento-ner-con-spacy-per-new-entry\/" }, "https:\/\/theredcode.it\/esplorando-il-dockerfile\/": { "title": "Esplorando il Dockerfile", "tags": ["design-dev","docker",], "content": "Finora abbiamo sempre parlato di Docker, ma senza entrare nel dettaglio in merito a cosa succede quando andiamo a farlo funzionare: oggi, esplorando il Dockerfile, cerchiamo di riprendere un po\u0026rsquo; di concetti lasciati da parte e di chiarirne il funzionamento con alcuni esempi.\n Introduzione  Il Dockerfile è alla base della creazione di immagini Docker: per chi ne ha una vaga idea, si tratta di un file di testo che contiene un elenco di comandi (o più genericamente istruzioni) e descrive il modo in cui un\u0026rsquo;immagine Docker viene costruita: un\u0026rsquo;analogia che mi piace spesso fare è quella di paragonare il Dockerfile ad una sorta di ricetta che contiene tutti gli ingredienti del nostro piatto. Una volta che abbiamo bisogno di preparare il nostro piatto, ci basta prendere la ricetta ed \u0026ldquo;avviarne\u0026rdquo; il procedimento, per creare il nostro container.\nVediamo però com\u0026rsquo;è formato, cosa produce e cosa c\u0026rsquo;è dietro le quinte...\n Struttura di un Dockerfile  Un Dockerfile inizia sempre con un comando FROM che indica l\u0026rsquo;immagine di partenza che il container andrà ad utilizzare; infatti, i comandi successivi nel file vengono eseguiti all\u0026rsquo;interno dell\u0026rsquo;immagine di base che deve essere un\u0026rsquo;immagine valida.\nUn esempio di Dockerfile di un\u0026rsquo;applicazione Angular è il seguente:\n # Immagine di base FROM node:16.0.0\nCartella di lavoro WORKDIR \u0026lsquo;/app\u0026rsquo;\nCopia dell\u0026rsquo;elenco dipendenze COPY package.json .\nInstallazione delle dipendenze RUN npm install\nCopia dell\u0026rsquo;applicazione COPY . .\nPorta in ascolto EXPOSE 4200\nAvvio dell\u0026rsquo;applicazione CMD [\u0026ldquo;npm\u0026rdquo;, \u0026ldquo;start\u0026rdquo;]\n (P.s.: se vuoi saperne di più, leggi questo articolo!)\nIn questo caso, l\u0026rsquo;immagine di base è quella di Ubuntu (indicata dalla riga con l\u0026rsquo;istruzione FROM), e poi vengono descritti i vari passaggi che richiede l\u0026rsquo;esecuzione dell\u0026rsquo;applicazione: copia delle dipendenze, installazione, e via dicendo. Ora che ho tutto pronto, cosa faccio?\n Come funziona il contesto  Grazie al concetto di contesto, posso effettuare la build dell\u0026rsquo;immagine: eseguendo infatti il seguente comando all\u0026rsquo;interno della stessa cartella dove è stato salvato il Dockerfile, Docker costruisce il container finale seguendo passo passo le istruzioni che abbiamo inserito all\u0026rsquo;interno della nostra ricetta.\n $ docker image build .\n Una nota importante qui è che la build viene eseguita dal daemon Docker, quindi l\u0026rsquo;intero contesto (la cartella in cui si trova il Dockerfile e all\u0026rsquo;interno del quale andiamo ad eseguire il comando) viene trasferito al daemon. Dall\u0026rsquo;output del comando riportato in precedenza, questo è quanto viene mostrato:\n Dimensione del contesto trasferito\n Come avrai notato, l\u0026rsquo;output indica anche quanti dati vengono trasferiti (25MB nell\u0026rsquo;esempio) grazie al contesto; questo perché l\u0026rsquo;applicazione dispone di diversi componenti e, come la maggior parte delle applicazioni in Angular, l\u0026rsquo;applicazione pesa diversi MB.\n Pertanto, un avviso importante ai telespettatori: MAI utilizzare la directory root come contesto poiché fa sì che la build trasferisca l\u0026rsquo;intero contenuto del tuo disco rigido al daemon Docker.\n No, non è uno scherzo: il path specificato come contesto definisce dove trovare i file per i riferimenti sul contesto da utilizzare nel processo di build del daemon Docker; ciò significa che vengono inviati tutti i file presenti nel contesto, non solo quelli elencati in un\u0026rsquo;eventuale istruzione ADD nel Dockerfile. Il trasferimento del contesto dalla macchina locale al daemon Docker è specificato proprio dalle righe \u0026ldquo;Transferring context\u0026rdquo; o \u0026ldquo;Sending build context\u0026rdquo;.\n E i layers?  Abbiamo detto che il daemon Docker, quando crea la tua immagine, esegue passo passo quanto definito nel Dockerfile. In ogni passaggio viene generato un container intermedio e l\u0026rsquo;istruzione viene eseguita all\u0026rsquo;interno del container generato; una volta che l\u0026rsquo;istruzione ha esito positivo, il container viene memorizzato come una nuova immagine, come nuovo layer. Vuol dire che l\u0026rsquo;istruzione successiva ne costruirà un\u0026rsquo;altra nuova sopra quella precedente.\nDiamo una rapida occhiata all\u0026rsquo;output completo della creazione del Dockerfile di esempio:\n $ docker image build . [+] Building 94.8s (10/10) FINISHED =\u0026gt; [internal] load build definition from Dockerfile 0.1s =\u0026gt; =\u0026gt; transferring dockerfile: 174B 0.0s =\u0026gt; [internal] load .dockerignore 0.0s =\u0026gt; =\u0026gt; transferring context: 57B 0.0s =\u0026gt; [internal] load metadata for docker.io/library/node:16.0.0 2.3s =\u0026gt; [1/5] FROM docker.io/library/node:16.0.0@sha256:25516f3de85ebf588e29d81052495d2e1177b55cddbd7ddab2f5ff2c4496dd5e 0.3s =\u0026gt; =\u0026gt; resolve docker.io/library/node:16.0.0@sha256:25516f3de85ebf588e29d81052495d2e1177b55cddbd7ddab2f5ff2c4496dd5e 0.0s =\u0026gt; =\u0026gt; sha256:2b67c5888e26a4427faec4741c9db1445df567c3bd76bc35c59a39f83ba75ba1 2.21kB / 2.21kB 0.0s =\u0026gt; =\u0026gt; sha256:25516f3de85ebf588e29d81052495d2e1177b55cddbd7ddab2f5ff2c4496dd5e 1.21kB / 1.21kB 0.0s =\u0026gt; =\u0026gt; sha256:6817534de6bde9d1425d176fa9c71177eec84b5e4269c0b92a6f71a8edb82567 7.79kB / 7.79kB 0.0s =\u0026gt; [internal] load build context 0.3s =\u0026gt; =\u0026gt; transferring context: 24.93MB 0.3s =\u0026gt; [2/5] WORKDIR /app 0.1s =\u0026gt; [3/5] COPY package.json . 0.0s =\u0026gt; [4/5] RUN npm install 81.6s =\u0026gt; [5/5] COPY . . 0.2s =\u0026gt; exporting to image 10.2s =\u0026gt; =\u0026gt; exporting layers 10.2s =\u0026gt; =\u0026gt; writing image sha256:c4d6da5125d6ceee71148f84787fdabcfbb0a14b1eb7007240034b6ad1e24a25\n Infatti un\u0026rsquo;immagine Docker è composta da diversi livelli, o layers: ogni container è un\u0026rsquo;immagine con un livello leggibile e scrivibile che viene posto sopra un gruppo di livelli di sola lettura. Questi livelli (chiamati anche immagini intermedie) vengono generati quando i comandi nel Dockerfile vengono eseguiti durante il processo di build dell\u0026rsquo;immagine Docker.\nCome mostrato nell\u0026rsquo;output precedente, quando Docker crea il container a partire dal Dockerfile, ogni passaggio corrisponde a un comando eseguito nel Dockerfile e ogni livello è costituito dal file generato dall\u0026rsquo;esecuzione di quel comando. Insieme a ogni passaggio, il livello creato è elencato e rappresentato dal suo digest generato casualmente (ad esempio, il digest del livello per il passaggio 1 è 6817534de6bde9d1425d176fa9c71177eec84b5e4269c0b92a6f71a8edb82567).\n In questo caso, ci sono 5 passaggi riportati nell\u0026rsquo;output perché ci sono 5 righe di istruzioni nel Dockerfile (escludendo i commenti, ovviamente). Dopo aver completato tutti i passaggi, l\u0026rsquo;immagine verrà visualizzata nell\u0026rsquo;output del comando seguente:\n $ docker images\nREPOSITORY TAG IMAGE ID CREATED SIZE myimage 0.0.1 f6c0798a113c 5 minutes ago 1.5GB\n E se volessimo vedere come è stata costruita la nostra immagine? Eseguiamo il comando docker history :\n History dell\u0026rsquo;immagine appena creata\n Vediamo che nella colonna IMAGE ci sono due valori, ossia una stringa alfanumerica (che corrisponde ad un ID) e una serie di . Ognuna di queste righe riporta anche l\u0026rsquo;istruzione che ha generato quell\u0026rsquo;immagine e la dimensione\u0026hellip; ma cosa rappresenta quel missing?\n Sembra molto più complicato di quanto non sia: storicamente parlando (prima di Docker v1.10), ogni volta che veniva creato un nuovo layer come risultato di un\u0026rsquo;azione, Docker creava anche un\u0026rsquo;immagine corrispondente, identificata da un codice UUID a 256 bit generato casualmente, indicato come ID dell\u0026rsquo;immagine; storicamente si parlava infatti di immagini intermedie, senza tag \u0026ldquo;human-friendly\u0026rdquo;.\nA partire da Docker 1.10, immagini e livelli non sono più sinonimi: invece, un\u0026rsquo;immagine fa riferimento direttamente a uno o più layer che alla fine contribuiscono al filesystem di un container.\nNella colonna IMAGE il termine significa proprio questo: quelle non sono immagini, ma livelli e sono parti costitutive dell\u0026rsquo;immagine.\n  Che diavolo, perché la colonna si chiama così?\nIn realtà, quando viene eseguito il commit di un layer durante la creazione di un\u0026rsquo;immagine, viene creata contemporaneamente un\u0026rsquo;immagine \u0026ldquo;intermedia\u0026rdquo; e, proprio come tutte le altre immagini, ha un elemento di configurazione che è rappresentato da un elenco dei digest che devono essere incorporati come parte dell\u0026rsquo;immagine, e il suo ID contiene un hash dell\u0026rsquo;oggetto di configurazione. Le immagini intermedie non sono contrassegnate con un nome, ma hanno una chiave \u0026ldquo;Parent\u0026rdquo;, che contiene l\u0026rsquo;ID dell\u0026rsquo;immagine principale.\nQuindi, in realtà, quando costruisci localmente, quei layer sono immagini (proprio come erano una volta, anche quando li andavamo ad estrarre da qualche altra parte nella versione precedente descritta) e sono usati per facilitare il processo di cache (parte che rende veloci le build se hai già costruito quel livello).\nQuindi la risposta è \u0026hellip; a volte sono immagini (tecnicamente), a volte sono livelli (e quindi rappresentati in quella colonna come ).\n A tutta cache!  Se andassimo ad eseguire nuovamente il comando di build, vedremmo che i tempi sono notevolmente diminuiti:\n Esempio di uso della cache\n Noterai \u0026ldquo;CACHED\u0026rdquo; in ogni passaggio, il che indica che il daemon Docker ha utilizzato la cache direttamente per generare l\u0026rsquo;immagine intermedia invece di ricostruirla.\nLa cache viene utilizzata quando le istruzioni nel Dockerfile sono uguali o invariate rispetto alla versione precedente, ed è molto utile quando l\u0026rsquo;immagine di cui dobbiamo effettuare la build è corposa.\n Ad ogni occorrenza di un comando RUN nel Dockerfile, Docker creerà e committerà un nuovo layer nell\u0026rsquo;immagine, che è solo un insieme di directory strettamente accoppiate piene di varie strutture di file che comprendono un\u0026rsquo;immagine Docker. In un\u0026rsquo;installazione predefinita, questi si trovano in /var/lib/docker (questo non vale per Docker Desktop).\nDurante una nuova build, tutte queste strutture devono essere create e scritte su disco: è qui che Docker memorizza le immagini di base. Una volta creato, il container (e i successivi nuovi) verrà archiviato nella cartella in questa stessa area.\n Cosa rende importante la cache? Se gli oggetti sul filesystem che Docker sta per produrre rimangono invariati tra le build, riutilizzare la cache di una build precedente sull\u0026rsquo;host è un grande risparmio di tempo -basti pensare che la differenza in termini di tempo dei due processi di build precedenti è di un minuto e mezzo contro 2 secondi quando ci si avvale della cache-.\nTuttavia, quella cache viene utilizzata in modo piuttosto aggressivo e può causare problemi quando si desidera che l\u0026rsquo;output aggiornato di un comando RUN venga inserito nel nuovo container . Allo stato attuale, a meno che il comando RUN non cambi (e quindi invalidi la cache su host di Docker), Docker riutilizzerà i risultati precedenti dalla cache; ciò è chiaramente svantaggioso quando il comando RUN è un checkout del codice sorgente, come ad esempio avviene per il clone di un progetto Git.\n Fortunatamente, ci sono un paio di modi per aggirare questo problema: in primis, è possibile eseguire una build Docker con l\u0026rsquo;opzione \u0026ldquo;-no-cache\u0026rdquo;, che ignora completamente tutta la cache a disposizione e quindi per ogni processo di build sarà necessario tanto tempo quanto la prima.\nQuesto approccio è chiaramente binario: o usi la cache o no, e quindi rappresenta un approccio molto drastico.\nPer ottenere lo stesso risultato, ma sfruttando comunque la cache, si potrebbero inserire delle operazioni di controllo del codice sorgente nell\u0026rsquo;ultima istruzione di RUN nel Dockerfile, assicurandoci che venga eseguita ogni volta: basta racchiudere la build in un altro script che genera un mini-script con numero univoco per l\u0026rsquo;operazione di clonazione.\n  Questo passaggio inserirà l\u0026rsquo;invocazione di quello script nel Dockerfile che viene generato al volo appena prima del processo di build, di modo tale che per l\u0026rsquo;operazione che deve essere eseguita ogni volta - in questo caso, il clone del progetto - la sua istruzione RUN sia davvero unica.\n  Risorse utili Manuale Docker in italiano Docker cheatsheet Dockerfile cheatsheet Guida sulla differenza immagine vs. layer Come installare Docker (e Docker Compose) ", "url": "https:\/\/theredcode.it\/esplorando-il-dockerfile\/" }, "https:\/\/theredcode.it\/tags\/api\/": { "title": "api", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/tags\/api\/" }, "https:\/\/theredcode.it\/come-costruire-un-api-gateway-con-express\/": { "title": "Come costruire un API Gateway con Express", "tags": ["api","express-js","gateway","node-js",], "content": " Hai bisogno di sapere come costruire un API Gateway con Express, ma non sai come fare? Nessun problema. Chiariamo il concetto di API gateway e poi vediamo come realizzarne uno, oppure quali tra gli strumenti già esistenti è possibile (e consigliato usare).\n  Cos\u0026rsquo;è un API gateway  Funzionamento dell\u0026rsquo;API gateway con due o più microservizi\n Un API gateway è un componente che accetta tutte le request API dai client e quindi le instrada al microservizio appropriato attraverso il routing, la composizione e il protocollo appropriato. In altre parole, è un servizio che permette di gestire più richieste a servizi diversi, occupandosi di prendere in carico le chiamate e \u0026ldquo;smistarle\u0026rdquo; al microservizio giusto, determinando il percorso migliore. Può occuparsi anche della traduzione tra protocolli Web e protocolli non compatibili con l\u0026rsquo;applicazione del client (come AMQP o WebSocket).\n Inoltre, l\u0026rsquo;API gateway è un vero e proprio pattern: è consigliato se si desidera progettare e creare applicazioni basate su microservizi complessi o di grandi dimensioni con più applicazioni client che devono accedere ad una serie di servizi. Lo scopo è simile a quello del pattern cosiddetto facade: in questo caso però, costituisce un proxy inverso all\u0026rsquo;interno di un sistema e utilizza un modello di comunicazione sincrono.\n Un API gateway fornisce un singolo endpoint o URL che le applicazioni client possono utilizzare e mappa internamente le richieste ai microservizi appropriati; questo fornisce quindi un livello di astrazione maggiore, nascondendo alcuni dettagli di implementazione (ad esempio, il modo in cui la richiesta verrà gestita), oltre a funzionalità aggiuntive come piani di sottoscrizione (chi può interrogare una serie di servizi e fino a quando) o trasformazioni dell\u0026rsquo;input e dell\u0026rsquo;output, o ancora gestione dei logs e degli errori.\n In questo articolo, il nostro API gateway fungerà semplicemente da gateway tra i client e i nostri servizi.\n  Step-by-step  Creazione del progetto Express Gateway Per creare un progetto con Express Gateway, è necessario installare Node.js ed Express Gateway; una volta fatto, è possibile usare questo comando per creare un progetto che ci permetta di scrivere la nostra applicazione:\n $ eg gateway create\n Verrà generato un progetto con i seguenti file:\n File generati dal comando precedente\n Chiaramente, dovremo avere a disposizione uno (o più) servizi con il quale il nostro gateway dovrà interagire. All\u0026rsquo;interno di questo articolo, andremo ad utilizzare questo repository, che offre un servizio di memorizzazione delle attività di una TODO list, ma nulla esclude che il nostro gateway possa in futuro aggiungere altri servizi e fornire un unico punto di accesso!\nConfigurazione del gateway Per creare dei servizi manutenibili, esiste il file gateway.config.yml, che permette di definire un elenco di API che il gateway deve andare ad interrogare quando riceve una richiesta da un client.\n Quando creiamo un progetto ex-novo, il file ha il seguente aspetto:\n Andiamo a modificare le seguenti voci: per prima cosa, definiamo nella riga 6 all\u0026rsquo;interno della proprietà apiEndpoints una nuova API che il nostro gateway andrà ad esporre, ossia tasksApi: a partire dall\u0026rsquo;indirizzo localhost (il nostro gateway si trova in locale, al momento), mapperà tutti i path sotto /tasks* (vedere la definizione all\u0026rsquo;interno del file di routing del singolo microservizio), sfruttando il servizio che andiamo a definire subito dopo, all\u0026rsquo;interno di serviceEndpoints:\n apiEndpoints: tasksApi: host: localhost paths: \u0026lsquo;/tasks*\u0026rsquo; serviceEndpoints: tasksService: url: \u0026lsquo;http://localhost:8081/api\u0026rsquo;\n Anche i servizi sono esposti su localhost, ma sulla porta 8081: nel caso del gateway, andremo ad utilizzare la porta 8080, definendo questa regola all\u0026rsquo;inizio del file:\n http: port: 8080\n L\u0026rsquo;oggetto pipelines ci permette di definire in che modo il gateway deve cablare gli endpoint dell\u0026rsquo;API e il servizio: in questo caso, ne creiamo una ad hoc chiamata tasks che utilizza l\u0026rsquo;API endpoint definito in precedenza e stabilisce a quale servizio deve fare riferimento quando riceve una request:\n pipelines:\n name: tasks apiEndpoints: tasksApi policies: proxy: action: serviceEndpoint: tasksService changeOrigin: true   Testiamo su Postman Per assicurarci che la nostra API funzioni correttamente, possiamo testarla con Postman (o qualunque altro strumento).\n Quello che avremmo fatto in precedenza, utilizzando il microservizio, sarebbe stato di effettuare una chiamata come quella riportata in figura, dove interroghiamo direttamente il servizio attraverso la sua porta:\n Chiamata al microservizio\n Invece, adesso disponiamo di un gateway che ci permette di reindirizzare correttamente le request, utilizzando un\u0026rsquo;unica porta (la 8080):\n Chiamata al microservizio attraverso il gateway\n Abbiamo raggiunto il nostro obiettivo configurando un solo microservizio: se ne volessimo aggiungere altri 10? Sarebbe sufficiente modificare il file seguendo gli step visti in precedenza per ogni nuovo microservizio, ed il gioco è fatto!\n Definire un customer API  Express Gateway offre anche la possibilità di definire dei customer, ossia degli utenti che sono autorizzati ad utilizzare l\u0026rsquo;API, e questo ci permette di mettere in sicurezza i nostri servizi.\n Per creare un nuovo consumer, eseguiamo la seguente request sulla porta 9876 (che viene utilizzata per la gestione amministrativa):\n Creazione di un consumer\n Una volta inserite le informazioni, dobbiamo specificare che la nostra API ha bisogno di una chiave di autenticazione, e lo facciamo in questo modo: inseriamo all\u0026rsquo;interno dell\u0026rsquo;attributo policies la proprietà key-auth, che ci permette di definire che l\u0026rsquo;API sarà esposta tramite una chiave di autenticazione con un header personalizzato (opzionale) che definiamo come CUSTOM-HEADER:\n pipelines:\n name: tasks apiEndpoints: tasksApi policies: key-auth: action: apiKeyHeader: CUSTOM-HEADER disableHeadersScheme: true proxy: action: serviceEndpoint: tasksService changeOrigin: true  A questo punto, creiamo delle credenziali da assegnare all\u0026rsquo;utente creato poco fa con il seguente comando:\n Creazione credenziali nel formato key-auth\n Se proviamo ad eseguire nuovamente una request lasciando le impostazioni così com\u0026rsquo;erano, questo è quello che otteniamo:\n  La response è (giustamente) unauthorized\n  Per far sì che funzioni, andiamo ad aggiungere un header alla nostra request, dove il nome sarà quello configurato in precedenza, e il valore sarà dato dalla keyId:keySecret, ossia le due chiavi che abbiamo ottenuto durante il processo di creazione:\n Aggiunta dell\u0026rsquo;header alla request\n     Alternative  Se ti è sembrato tutto (troppo) complicato, prova a dare un\u0026rsquo;occhiata a queste alternative:\n Amazon API Gateway: https://aws.amazon.com/it/api-gateway/pricing/ Gravitee.io: https://docs.gravitee.io/apim/1.x/apim_installguide_gateway_configuration.html  Risorse utili Documentazione ufficiale: https://www.express-gateway.io/docs Tutorial ufficiali: https://www.express-gateway.io/getting-started/#installation ", "url": "https:\/\/theredcode.it\/come-costruire-un-api-gateway-con-express\/" }, "https:\/\/theredcode.it\/categories\/express-js\/": { "title": "express-js", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/categories\/express-js\/" }, "https:\/\/theredcode.it\/categories\/node-js\/": { "title": "node-js", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/categories\/node-js\/" }, "https:\/\/theredcode.it\/fare-economia-con-angular\/": { "title": "Fare economia con Angular", "tags": ["angular","design-dev",], "content": "Se sviluppi in Angular o stai cominciando, non puoi perderti questo articolo: vediamo insieme perché fare economia con Angular e come sfruttare al massimo le potenzialità di questo framework durante lo sviluppo!  Può sembrare strano parlare di economia in questo contesto, ma la realtà è che le dimensioni di Angular sono piuttosto care: care in termini di dimensioni perché, come spesso avviene, molto del codice prodotto è codice morto: queste righe apparentemente innocue aggiungono kilobyte (e anche megabyte) all\u0026rsquo;applicazione, che non vengono però mai sfruttate.\n Il codice morto è una perdita di tempo, spazio e consumo di risorse: basti pensare che con un\u0026rsquo;applicazione in Angular appena creata, vengono impiegati circa 4MB. Cosa saranno mai? Niente, se però pensiamo che ancora non sono state inserite immagini, componenti, librerie o CSS. Questo numero varierà in maniera significativa nell\u0026rsquo;arco di poco!\n Esempio di un\u0026rsquo;app in Angular con appena 3 componenti e solo un logo come immagine: il suo peso complessivo è di 20 MB.\n Nel tempo, la crescita della tua applicazione aumenterà: diamolo per scontato. Questo spesso significa più funzionalità e quindi più codice da scrivere; di conseguenza, le dimensioni della tua applicazione diventano poco pratiche. Qui entra in gioco il meccanismo dei budget di Angula: questo permette di fornire avvisi o errori una volta che l\u0026rsquo;applicazione raggiunge una certa dimensione durante il processo di compilazione.\nLa dimensione complessiva della tua applicazione è infatti molto importante perché gli utenti ne pagano le conseguenze: latenza, dati mobile limitati, connessione non rapida (che però influisce sulla reazione dell\u0026rsquo;utente). Il concetto di budget aiuta a diventare maggiormente consapevole delle dimensioni che assume il tuo lavoro e quando raggiunge il limite massimo. In questo modo, se in qualche modo siamo riusciti a raggiungere la soglia impostata, sappiamo che è ora di tornare indietro e operare di refactor.\n Ma come si impostano i budget?  Come prima cosa, andiamo nel file angular.json e scorriamo verso il basso nella sezione riguardante la configurazione della produzione:\n Configurazione del budget nel file angular.json\n Probabilemente esiste già un valore predefinito di avviso (aka maximumWarning) massimo impostato su 2 MB, mentre per il processo di compilazione viene prodotto un errore (aka maximumError) e viene interrotta la build nel caso in cui si arrivi a 5 MB.\n Questo è il momento di pensare ad un valore ragionevole per il contesto della tua applicazione. La build di produzione (quando eseguiamo la build con l\u0026rsquo;opzione --prod) esegue tutto il code shaving possible per fornire una dimensione finale che sia reale; se però il risultato finale è comunque troppo grande e non riesci a capire perché, usando il flag --stats-json durante il processo di build, verrà generato un file stats.json che è possibile utilizzare tramite l\u0026rsquo;analizzatore di Webpack.\n  Per poterlo installare, è sufficient eseguire il seguente comando:\n npm i -D webpack-bundle-analyzer\n e poi all\u0026rsquo;interno del file package.json, aggiungere queste righe all\u0026rsquo;interno della proprietà scripts:\n \u0026ldquo;scripts\u0026rdquo;: { \u0026ldquo;ng\u0026rdquo;: \u0026ldquo;ng\u0026rdquo;, \u0026ldquo;start\u0026rdquo;: \u0026ldquo;ng serve \u0026ndash;host 0.0.0.0 \u0026ndash;poll=500\u0026rdquo;, \u0026ldquo;build\u0026rdquo;: \u0026ldquo;ng build\u0026rdquo;, \u0026ldquo;test\u0026rdquo;: \u0026ldquo;ng test\u0026rdquo;, \u0026ldquo;lint\u0026rdquo;: \u0026ldquo;ng lint\u0026rdquo;, \u0026ldquo;e2e\u0026rdquo;: \u0026ldquo;ng e2e\u0026rdquo;, \u0026ldquo;build:stats\u0026rdquo;: \u0026ldquo;ng build \u0026ndash;stats-json\u0026rdquo;, \u0026ldquo;analyze\u0026rdquo;: \u0026ldquo;webpack-bundle-analyzer dist/frontend/stats.json\u0026rdquo; },\n La sezione build:stats ci consente di creare il file per analizzare le statistiche della nostra applicazione grazie alla creazione del file stats.json; la sezione analyze definisce invece un altro script che esegue il comando per mostrarci l\u0026rsquo;analisi che Webpack esegue sulla nostra applicazione.\n A questo punto, eseguendo il seguente comando, verrà avviata l\u0026rsquo;applicazione per permetterti di analizzare nel dettaglio dove vengono consumati tutti i KB in eccesso.\n npm run analyze\n Statistiche prodotte dell\u0026rsquo;analyzer di Webpack\n Dimenticavo! È possibile specificare il budget della dimensione dell\u0026rsquo;app definendo questi valori nei seguenti formati:\n 123 o 123b: dimensione in byte; 123kb: dimensione in kilobyte; 123mb: dimensione in megabyte.  Non è necessario essere precisi al centesimo: piuttosto, è importante assegnare un valore soglia che non sia arbitrario, ma calibrato sulla base delle dimensioni effettive e necessarie all\u0026rsquo;app per funzionare e non incidere sull\u0026rsquo;esperienza finale.\n That\u0026rsquo;s all, folks! ", "url": "https:\/\/theredcode.it\/fare-economia-con-angular\/" }, "https:\/\/theredcode.it\/docker\/come-distribuire-una-webapp-angular-in-produzione\/": { "title": "Come distribuire una webapp Angular in produzione", "tags": ["angular","apache","docker","nginx",], "content": " Non sai come distribuire una webapp Angular in produzione, ma non sai come fare? Nessun problema: sei nel posto giusto.\n Introduzione  Se non hai familiarità con Angular portato in produzione, nessun problema: questo articolo è quello che fa al caso tuo. Quello che leggerai vale anche per React o Angular o qualsiasi altra applicazione basata su un framework che lavori con un router interno. Dal momento che il codice che viene scritto viene poi eseguito tramite un browser, il quale parla solo HTML, CSS e JavaScript, questa guida descrive esattamente il modo in cui possiamo trasformare il tuo codice per essere impacchettato e portato in produzione. In questo caso, partiremo da una semplice applicazione Angular: se non sai come fare, leggi questo articolo dove, tra le altre cose, vediamo come creare una semplice webapp!\n Dopo aver visto come funziona, vedremo come funziona il processo di build per la creazione dei file di produzione, e poi porteremo l\u0026rsquo;esempio su tre casi d\u0026rsquo;uso piuttosto frequenti: Nginx, Apache e Docker come tecnologia per la messa in produzione della nostra applicazione.\n Come funziona  Utilizzando il comando ng serve per avviare la nostra applicazione, vengono generati cinque file:\n  inline.bundle.js: un piccolo file che aiuta il webpack a caricare le risorse di cui ha bisogno; main.bundle.js: la maggior parte della nostra applicazione Angular; polyfills.bundle.js: questo file tutto l\u0026rsquo;occorrente per far funzionare Angular nei browser meno recenti; styles.bundle.js: gli stili! vendor.bundle.js: contiene la definizione delle librerie di Angular.  Ora che abbiamo una vaga idea di come funziona, passiamo al primo step: il processo di build.\n Step 1: build  Il comando ng serve funziona per eseguire la nostra applicazione in ambiente di sviluppo. E per la produzione? Se guardiamo nel file package.json, possiamo vedere che ci sono diversi script che possiamo usare:\n \u0026#34;scripts\u0026#34;: { \u0026#34;ng\u0026#34;: \u0026#34;ng\u0026#34;, \u0026#34;start\u0026#34;: \u0026#34;ng serve\u0026#34;, \u0026#34;build\u0026#34;: \u0026#34;ng build --prod\u0026#34;, \u0026#34;test\u0026#34;: \u0026#34;ng test\u0026#34;, \u0026#34;lint\u0026#34;: \u0026#34;ng lint\u0026#34;, \u0026#34;e2e\u0026#34;: \u0026#34;ng e2e\u0026#34; },  Per rendere il nostro codice fruibile per la produzione, abbiamo bisogno di configurare un parametro aggiuntivo, ossia il flag \u0026ndash;prod. Possiamo farlo in due modi:\n # utilizzando gli script npm $ npm run build # utilizzando direttamente la cli di Angular $ ng build --prod Your global Angular CLI version (11.2.2) is greater than your local version (11.1.0). The local Angular CLI version is used. To disable this warning use \u0026#34;ng config -g cli.warnings.versionMismatch false\u0026#34;. √ Browser application bundle generation complete. √ Copying assets complete. √ Index html generation complete. Initial Chunk Files | Names | Size main.dc687d6444d7b41c628c.js | main | 563.91 kB styles.ace737526e6d3cb122f0.css | styles | 71.10 kB polyfills.6abdde2583a2e01a2350.js | polyfills | 35.73 kB runtime.7b63b9fd40098a2e8207.js | runtime | 1.45 kB | Initial Total | 672.19 kB Build at: 2021-05-03T15:55:44.502Z - Hash: fea003044cca574ddcf4 - Time: 47700ms  Il comando ng build in questo caso compila l\u0026rsquo;app Angular in una directory di output denominata dist nella cartella principale del progetto (se non specificato diversamente); questa opzione attiva molti flag di ottimizzazione. Uno di questi è –aot per la compilation Ahead Of Time (se non ne hai mai sentito parlare, trovi qui un articolo molto interessante).\n I modelli dei componenti vengono compilati durante la compilazione, quindi TypeScript può rilevare più problemi nel codice di quanti non ne abbiamo rilevati durante l\u0026rsquo;esecuzione in sviluppo: nessun problema!\n  Gli errori sono solitamente molto parlanti, quindi ti basterà dare un\u0026rsquo;occhiata ai log per risolverli.\n  Tornando alla cartella dist, dicevamo che il comando build crea una nuova cartella chiamata per la distribuzione: al suo interno infatti ci sono i file che ci serviranno per dare vita alla nostra applicazione su un server!\n Questo è tutto ciò che serve per distribuire un\u0026rsquo;applicazione Angular:\n  A questo punto, quello che ci serve è solo\u0026hellip; un server. Che sia Apache o qual