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>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>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>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>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> <h1 id="esempi">Esempi</h1> <h2 id="creazione-di-una-nuova-pagina">Creazione di una nuova pagina</h2> <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><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>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> <h2 id="utilizzo-di-una-pagina-esistente">Utilizzo di una pagina esistente</h2> <p>Puoi utilizzare la stessa pagina in più posizioni assicurandoti che esista un percorso per essa da tali posizioni.</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> <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><h2 id="utilizzare-routerlink">Utilizzare routerLink</h2> <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> <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>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> <pre tabindex="0"><code class="language-markup" data-lang="markup"><ion-item [routerLink]="'/detail/' + item.id" routerDirection="forward" ></ion-item> </code></pre><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>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>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> <blockquote> <p>Se questo non viene fornito, Ionic <em>indovinerà</em> quale animazione dovrebbe utilizzare, ma è meglio essere espliciti.</p> </blockquote> <p>Analizziamo ora il file <em>app-routing.module.ts</em>:</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>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>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>Si tratta della cosiddetta <em>wildcard</em> <em>route</em>, una sorta di percorso jolly che intercetta qualsiasi URL.</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>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>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>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> <h2 id="utilizzo-di-router">Utilizzo di Router</h2> <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> <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>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> <blockquote> <p>Per poterlo questa modalità di routing in Ionic, è necessario importarlo nel <em>constructor</em> del componente/servizio che utilizziamo!</p> </blockquote> <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>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> <h2 id="utilizzo-di-navcontroller">Utilizzo di NavController</h2> <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>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> <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>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> <blockquote> <p>Che viaggio quello nel mondo dei router!</p> </blockquote> <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> <h2>Ti potrebbe interessare anche... </h2> <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> <h1>Condividi questo post </h1> <div class="center-div"> <button class="ui circular icon button red save-as-image" title="Salva come immagine" onclick="savePostAsImg()"> <i class="save icon"></i> </button> <a href="https://twitter.com/intent/tweet?text=Come%20funziona%20il%20routing%20in%20Ionic%206&url=https%3a%2f%2ftheredcode.it%2fionic%2fcome-funziona-il-routing-in-ionic%2f" class="ui circular twitter red icon button" target="_blank"> <i class="twitter icon"></i> </a> <a href="https://facebook.com/sharer/sharer.php?u=https%3a%2f%2ftheredcode.it%2fionic%2fcome-funziona-il-routing-in-ionic%2f" class="ui circular facebook icon button red" target="_blank"> <i class="facebook icon"></i> </a> <a href="https://www.linkedin.com/sharing/share-offsite/?url=https%3a%2f%2ftheredcode.it%2fionic%2fcome-funziona-il-routing-in-ionic%2f" title="LinkedIn" class="ui circular linkedin icon button red" target="_blank"> <i class="linkedin icon"></i> </a> <a href="https://web.whatsapp.com/send?text=https%3a%2f%2ftheredcode.it%2fionic%2fcome-funziona-il-routing-in-ionic%2f" title="Whatsapp" class="ui circular whatsapp icon button red" target="_blank"> <i class="whatsapp icon"></i> </a> </div> <script src="https://cdn.jsdelivr.net/npm/html2canvas@1.0.0-rc.1/dist/html2canvas.min.js" integrity="sha256-uacRffSSMP9qpvNWhVmYLykBv9YKMA1d/VSIN1AmfyQ=" crossorigin="anonymous"></script> <script src="/js/post.js"></script> </article> </section> <article class="ui segment post-disqus-area" data-html2canvas-ignore> <div id="disqus_thread"></div> <script> var disqus_config = function () { this.page.url = "https://theredcode.it/ionic/come-funziona-il-routing-in-ionic/" this.page.identifier = "/ionic/come-funziona-il-routing-in-ionic/" } ;(function () { var d = document, s = d.createElement('script') s.src = 'https://' + "theredcode-it" + '.disqus.com/embed.js' s.setAttribute('data-timestamp', +new Date()) ;(d.head || d.body).appendChild(s) })() </script> <noscript>Please enable JavaScript to view the <a href="https://disqus.com/?ref_noscript">comments powered by Disqus.</a></noscript> </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.paypal.com/donate/?hosted_button_id=L6PFB4KQ5W6WG" title="PayPal" target="_blank"> <i class="paypal icon"></i> </a> </span> <p>© 2021 - 2023 TheRedCode | <a href="/privacy-policy" title="Privacy Policy"> Privacy Policy </a> </p> </footer> <br/> <br/> <br/> </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\/apple\/": { "title": "apple", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/categories\/apple\/" }, "https:\/\/theredcode.it\/categories\/": { "title": "Categories", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/categories\/" }, "https:\/\/theredcode.it\/categories\/colima\/": { "title": "colima", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/categories\/colima\/" }, "https:\/\/theredcode.it\/database\/sql-server-macos-apple-silicon\/": { "title": "Come avviare un\u0027istanza SQL Server su macOS Apple Silicon", "tags": ["database","sqlserver","macOS",], "content": "Microsoft SQL Server è uno dei sistemi di gestione dei database (RDBMS) più popolari al mondo ma tradizionalmente era stato limitato all\u0026rsquo;uso su piattaforme con sistema operativo Windows. Attualmente, Microsoft SQL Server non è ufficialmente supportato per essere eseguito su macOS Apple Silicon ma solo su piattaforme hardware basate su architettura x86_64 e sistemi operativi Windows e Linux.\n Per maggiori informazioni sul supporto Linux, consiglio la lettura del documento Installation guidance for SQL Server on Linux e in particolare il paragrafo Supported platforms.\n Qualora tu fossi un utente macOS (Apple Silicon) e avessi bisogno di utilizzare SQL Server per lo sviluppo o per altre attività, sarebbe possibile eseguire quest\u0026rsquo;ultimo utilizzando una macchina virtuale (VM) o un ambiente di containerizzazione. L\u0026rsquo;obiettivo è facilmente raggiungibile grazie a Colima, e questo articolo ti guiderà attraverso i passaggi necessari per avviare SQL Server utilizzando Colima su macOS.\nCos\u0026rsquo;è Colima Colima è un progetto Open Source che implementa un container runtime che richiede una configurazione minima e funziona su sistemi operativi macOS e Linux. Le caratteristiche principali di questo tool sono:\n Intel and M1 Macs support Simple CLI interface Docker and Containerd support Port Forwarding Volume mounts Kubernetes Multiple instances Colima è quindi un container runtime che esegue una VM Linux sul tuo Mac (in modo simile a come funziona Docker Desktop per Mac). Grazie al sistema di template (o anche da linea di comando), è possibile configurare la VM in modo tale che sia eseguita utilizzando l\u0026rsquo;hypervisor del framework di virtualizzazione nativo in macOS.\nInstallazione del software Le prime operazioni da eseguire, riguardano l\u0026rsquo;installazione di tre principali componenti software:\n Rosetta Docker CLI Colima Rosetta è un software di emulazione sviluppato da Apple per i computer Mac con processori basati su architettura ARM, come il chip Apple M1. L\u0026rsquo;obiettivo principale di Rosetta è consentire l\u0026rsquo;esecuzione di applicazioni sviluppate per i processori Intel x86_64 su Mac con processori ARM64 senza richiedere alcuna modifica da parte degli sviluppatori delle applicazioni stesse. Questa tecnologia permette agli utenti di continuare a utilizzare le loro applicazioni esistenti su nuovi Mac con processori ARM.\nDocker CLI è uno strumento potente e flessibile che consente agli sviluppatori e agli amministratori di sistema di automatizzare il processo di creazione, gestione e distribuzione di applicazioni in container Docker.\nA seguire sono indicati i comandi necessari per l\u0026rsquo;installazione dei tre componenti. Per l\u0026rsquo;installazione di Docker e Colima è necessario che sul vostro Mac sia installato il package manager Homebrew.\nLe versioni di riferimento di Docker e Colima, per questo articolo, sono rispettivamente: 24.0.6 e 0.5.5.\n# Installazione di Rosetta, Docker e Colima $ sudo softwareupdate --install-rosetta $ brew install docker $ brew install colima # Verifica della versione di Docker $ docker --version Docker version 24.0.6, build ed223bc820 # Verifica della versione di Colima $ colima version colima version 0.5.5 git commit: 6251dc2c2c5d8197c356f0e402ad028945f0e830 runtime: docker arch: aarch64 client: v24.0.6 server: v23.0.6 Output 1 - Installazione del software di base necessario per l\u0026rsquo;uso di Colima\nAl fine di poter sfruttare il framework di virtualizzazione nativo di macOS in combinazione con Rosetta, è necessario che la versione di macOS sia almeno la 13.x.\nConfigurazione di Colima Una volta che l\u0026rsquo;installazione del software è stata portata a termine con successo, possiamo procedere con la configurazione della macchina virtuale che deve essere creata al fine di fornire un kernel Linux per i container specifici x86_64 in esecuzione su macOS.\nPer configurare la VM secondo le specifiche richieste per l\u0026rsquo;esecuzione di SQL Server, è possibile agire sulla configurazione della VM attraverso il meccanismo dei template (in formato yaml). Il template per il profilo di default è locato all\u0026rsquo;interno del folder $HOME/.colima/_templates/default.yaml, in ogni caso, usando il comando colima template --print riusciamo a ottenere il path assoluto del template di default.\nI parametri da configurare sul template per la nostra specifica VM sono:\n vmType: imposta il tipo di VM che in questo caso deve essere vz anziché quello predefinito, qemu. In questo modo potremo sfruttare il framework di virtualizzazione nativo di macOS (che richiede la versione 13 del sistema operativo); rosetta: abilita Rosetta in modo che sia possibile attivare l\u0026rsquo;emulazione per architetture amd64, così come richiesto da SQL Server Server. Il valore da impostare è true (valido solo per Apple Silicon e vmType vz.) Il valore di default è false; mountType: imposta il driver per il mount dei volumi. Nel caso di macOS la scelta ricade su virtiofs, dedicato alle VM vz su macOS. Il valore predefinito è sshfs; cpu: imposta il numero di CPU da allocare per la VM. Il valore di default è 2 ma consiglio di impostare il valore a 4; memory: imposta la dimensione (in GiB) da allocare per la VM. Il valore di default è 2GiB che è il requisito minimo per l\u0026rsquo;SQL Server 2022, il mio consiglio è di portare il valore a 4. Per apportare le modifiche sopra indicate alla configurazione del template, è necessario eseguire il comando colima template. Il comando aprirà il file yaml del template per il profilo di default (se non diversamente specificato) utilizzando l\u0026rsquo;editor di default del vostro sistema o quello impostato tramite l\u0026rsquo;environment $EDITOR. Nel caso in cui l\u0026rsquo;editor sia vim, una volta eseguite le modifiche, usare il comando :x per salvare la configurazione e uscire dall\u0026rsquo;editor.\nSu questo GitHub Gist è disponibile il file di configurazione del template completo.\nLe configurazioni sopra impostate nel file del template, possono essere passate come parametri del comando colima start. La mia preferenza è avere questi parametri di configurazione persistenti in un file.\nStarting up Colima Da questo momento è possibile creare la macchina virtuale dal template configurato in precedenza eseguendo il comando colima start.\nIl comando crea e avvia una VM così come configurata in precedenza. Inoltre, modifica il contesto del comando docker, pertanto, quando si utilizzeranno i comandi docker, questi saranno inviati al runtime appena creato.\nL\u0026rsquo;output finale che dovreste ottenere eseguendo il comando colima start dovrebbe essere quello indicato a seguire.\nINFO[0000] starting colima INFO[0000] runtime: docker INFO[0000] creating and starting ... context=vm INFO[0021] provisioning ... context=docker INFO[0021] starting ... context=docker INFO[0026] done Output 2 - Output finale a fronte dell\u0026rsquo;esecuzione del comando colima start\nEseguendo il comando colima status dovreste ottenere le informazioni circa il runtime appena avviato.\nL\u0026rsquo;output dovrebbe essere uguale a quello indicato a seguire a meno delle coordinate del socket.\nINFO[0000] colima is running using macOS Virtualization.Framework INFO[0000] arch: aarch64 INFO[0000] runtime: docker INFO[0000] mountType: virtiofs INFO[0000] socket: unix:///Users/\u0026lt;vostra-username\u0026gt;/.colima/default/docker.sock Output 3 - Output del comando colima status\nEseguendo il comando docker context list è possibile verificare che il contesto di default sia quello di Colima (identificato attraverso il carattere *). A seguire l\u0026rsquo;output del comando.\nNAME DESCRIPTION DOCKER ENDPOINT ERROR colima * colima unix:///Users/\u0026lt;vostra-username\u0026gt;/.colima/default/docker.sock default Current DOCKER_HOST based configuration unix:///var/run/docker.sock desktop-linux Docker Desktop unix:///Users/\u0026lt;vostra-username\u0026gt;/.docker/run/docker.sock Output 4 - Visualizzazione dei contesti Docker con evidenza di quello attivo (in questo caso colima)\nSu asciinema è disponibile l\u0026rsquo;intero processo di starting up e verifica del runtime di Colima.\n\nAsciicast 1 - Processo di starting up e verifica del runtime di Colima\nStarting SQL Server Container Adesso che il runtime di Colima è operativo, siamo nelle condizioni di poter creare ed eseguire il container di SQL Server a partire da una delle immagini pubblicate sull\u0026rsquo;account Docker Hub ufficiale di Microsoft. La pagina Docker Hub descrive nel dettaglio le modalità d\u0026rsquo;uso, i tag dell\u0026rsquo;immagini (quindi delle versioni di SQL Server) che sono disponibili su https://mcr.microsoft.com/v2/mssql/server/tags/list e il significato dei nomi dei tag.\nPer avviare una configurazione minimale di SQL Server, è possibile eseguire il comando docker indicato seguire. Nello specifico, la versione di riferimento di SQL Server è la 2022 CU7 Ubuntu 20.04. Il comando docker run si occuperà di eseguire il pull dell\u0026rsquo;immagine se necessario.\n$ docker run \\ --env \u0026#39;ACCEPT_EULA=Y\u0026#39; \\ --env \u0026#39;MSSQL_SA_PASSWORD=YourStrong@Passw0rd\u0026#39; \\ --name \u0026#39;sqlserver-2022\u0026#39; \\ --hostname \u0026#39;sqlserver-2022\u0026#39; \\ --publish 1433:1433 \\ --detach \\ --platform linux/amd64 mcr.microsoft.com/mssql/server:2022-CU7-ubuntu-20.04\tOutput 5 - Creazione e run del container SQL Server versione 2022\nPer chi ha della curiosità sull\u0026rsquo;uso dei tag, esiste questo post sul perché il tag \u0026ldquo;latest\u0026rdquo; non vada utilizzato.\nRiprendendo la configurazione, a seguire è mostrato l\u0026rsquo;output che dovreste ottenere a fronte dell\u0026rsquo;esecuzione del comando precedente. La prima riga informa che l\u0026rsquo;immagine non è presente sul sistema locale e di conseguenza provvede a reperire l\u0026rsquo;immagine dal registry. Una volta completato il pull dell\u0026rsquo;immagine mcr.microsoft.com/mssql/server:2022-CU7-ubuntu-20.04, il container sarà creato ed eseguito; l\u0026rsquo;ultima riga mostra l\u0026rsquo;identificativo assegnato al container, ovvero, il containerId (vedi riga 9 di Console 6).\nUnable to find image \u0026#39;mcr.microsoft.com/mssql/server:2022-CU7-ubuntu-20.04\u0026#39; locally 2022-CU7-ubuntu-20.04: Pulling from mssql/server 5b07ce5bcac1: Pull complete b5f87f539427: Pull complete 8cf84f077c03: Pull complete 05a221025c3d: Pull complete Digest: sha256:5362c818aad4a787e3bac20d19a2e8db7ac91cdc30b359c176bc986547b0c2d0 Status: Downloaded newer image for mcr.microsoft.com/mssql/server:2022-CU7-ubuntu-20.04 52a65e2200082558ac1accaf9ccc7d03679096a19f095b97809abfb1b7462a30 Output 6 - Output del comando docker run di creazione ed esecuzione del container SQL Server\nEseguendo il comando docker ps -l, dovreste vedere una serie d\u0026rsquo;informazioni circa l\u0026rsquo;ultimo container creato. A seguire un esempio dell\u0026rsquo;output.\nCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 52a65e220008 mcr.microsoft.com/mssql/server:2022-CU7-ubuntu-20.04 \u0026#34;/opt/mssql/bin/perm…\u0026#34; 2 hours ago Up 2 hours 0.0.0.0:1433-\u0026gt;1433/tcp, :::1433-\u0026gt;1433/tcp sqlserver-2022 Output 7 - Output del comando docker ps -l\nCome ultima verifica, potremmo provare a controllare il banner della versione di SQL Server eseguendo l\u0026rsquo;istruzione SQL SELECT @@VERSION attraverso il comando docker exec, così come mostrato a seguire.\n$ docker exec -it sqlserver-2022 /opt/mssql-tools/bin/sqlcmd -S localhost,1433 -U SA -P \u0026#34;YourStrong@Passw0rd\u0026#34; -Q \u0026#39;SELECT @@VERSION\u0026#39; # Output del comando Microsoft SQL Server 2022 (RTM-CU7) (KB5028743) - 16.0.4065.3 (X64) \tJul 25 2023 18:03:43 \tCopyright (C) 2022 Microsoft Corporation \tDeveloper Edition (64-bit) on Linux (Ubuntu 20.04.6 LTS) \u0026lt;X64\u0026gt; (1 rows affected) Output 8 - Esecuzione dell\u0026rsquo;istruzione SQL per verificare la versione di SQL Server\nSe non diversamente specificato tramite l\u0026rsquo;environment MSSQL_PID, l\u0026rsquo;edizione di default è la Developer Edition (vedi riga 7 del codice precedente).\nSu asciinema è disponibile l\u0026rsquo;intero processo di creazione ed esecuzione del container di SQL Server e la successiva esecuzione del comando docker exec di verifica del banner di SQL Server.\n\nAsciicast 2 - Processo di creazione ed esecuzione del container di SQL Server e successiva esecuzione del comando docker exec\nNota personale Per lo sviluppo software utilizzo due tipi di macchine: una Workstation basata su AMD e Fedora Linux (da me assemblata) e il Mac Book Pro con macOS. Dal momento in cui ho eseguito il passaggio a Apple Silicon, sono stato costretto a trovare una soluzione che mi consentisse l\u0026rsquo;esecuzione di quei container esclusivamente compatibili con piattaforme x86. SQL Server è uno degli strumenti che uso regolarmente e compatibile solo con architetture x86 e lo stesso vale per esempio vale per Oracle Database.\nColima è stato la mia salvezza, soprattutto per il fatto che supporta K8s e la configurazione tramite template YAML. Ho buttato via Docker Desktop (anche per via del cambio delle politiche di licenza) e sostituito con Colima.\n Per chi non conosce Docker nel dettaglio o desidera approfondire l\u0026rsquo;argomento, si consiglia il libro Docker - Sviluppare e rilasciare software tramite container di Serena Sensini (la versione eBook è scontata del 50% fino al primo ottobre).\n Contatti Blog LinkedIn E-mail ", "url": "https:\/\/theredcode.it\/database\/sql-server-macos-apple-silicon\/" }, "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\/tags\/macos\/": { "title": "macOS", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/tags\/macos\/" }, "https:\/\/theredcode.it\/categories\/macos\/": { "title": "macOS", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/categories\/macos\/" }, "https:\/\/theredcode.it\/posts\/": { "title": "Posts", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/posts\/" }, "https:\/\/theredcode.it\/tags\/sqlserver\/": { "title": "sqlserver", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/tags\/sqlserver\/" }, "https:\/\/theredcode.it\/categories\/sqlserver\/": { "title": "sqlserver", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/categories\/sqlserver\/" }, "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\/recensioni\/n%C3%A8-intelligente-n%C3%A8-artificiale\/": { "title": "Né Intelligente Né Artificiale", "tags": ["recensioni",], "content": "Ranking Anno 2021 Autore Kate Crawford Genere Saggio Livello Per tutti Scorrevolezza 7 / 10 Originalità 9 / 10 Valutazione 8 / 10 Recensione Il rapporto che ho avuto con questo libro è stato abbastanza conflittuale: non è sempre scorrevole nella lettura, presenta tantissimo dati e riferimenti storici e mantenere l\u0026rsquo;attenzione non è stato facile.\nA parte questo livello di dettaglio sulle modalità di scrittura -che chiaramente cambiano a seconda della penna che scrive-, sicuramente presenta alcuni spunti interessanti: cosa si nasconde dietro ad un\u0026rsquo;apparente dichiarazione di intenti sul mantenere una serie di sistemi \u0026ldquo;sostenibili\u0026rdquo;, ma anche cosa si nasconde dietro ai più famosi sistemi di IA, partendo dalle risorse naturali che servono ad alimentare i diversi server fino al costo \u0026ldquo;nascosto\u0026rdquo; dei dati utilizzati per il training.\nQuello che l\u0026rsquo;autrice rende chiaro è che sistemi come ChatGPT hanno un costo altissimo, in termini economici, ma anche sociali, politici e umani.\nNon è stato facile arrivare in fondo al libro senza fermarsi di tanto in tanto a riflettere su quanto, nel settore tech, una serie di azioni abbiano impatti ben più a lungo termine di quanto si possa immaginare: quando parliamo di sistemi super veloci e a disposizione di tutti, non pensiamo mai ai costi che servono a sostenere questo tipo di progetti.\nL\u0026rsquo;autrice infatti si concentra per buona parte del libro sullo sfruttamento di risorse umane (come con il sistema del \u0026ldquo;turco meccanico\u0026rdquo; di Amazon) e naturali (come nel caso di Tesla e simili). Il libro, più che un libro, è una vera e propria inchiesta condotta personalmente da chi scrive e corredata di diverse note bibliografiche che rimandano ad articoli, libri e pubblicazioni di voci autorevoli sul tema.\nL\u0026rsquo;autrice ha infatti compiuto diversi viaggi nei posti di cui si parla, per poter vedere con i propri occhi quanto raccontato poi successivamente in prima persona.\nÈ un volume non tecnico, ma volto a creare un terreno fertile per discutere di diverse tematiche, dove la parte dedicata ad algoritmi e dati da un punto di vista più pratico è sicuramente limitata.\nQuesto volume è consigliato per approfondire una prospettiva sulla sostenibilità economica, sociale e ambientale di una serie di sistemi di AI, soprattutto per poter allargare la propria visione del mondo, anche se quel che traspare è una forte critica ad una serie di sistemi e aziende, più che una discussione a due. Interessante per approfondire, un po\u0026rsquo; faticoso da completare.\nUna riflessione importante, per concludere, c\u0026rsquo;è: il modo in cui i dati che utilizziamo vengono raccolti, utilizzati e interpretati è un atto demagogico, dove l\u0026rsquo;utente cerca di plasmare il mondo attraverso delle informazioni che ha a disposizione e che rappresentano una porzione di mondo certamente molto ridotta. Certo è che, per molte aziende, la raccolta di questi dati ad uso \u0026ldquo;benevolo\u0026rdquo; è solo l\u0026rsquo;ultimo degli obiettivi: dietro molti dei dati raccolti ad oggi c\u0026rsquo;è una vera e propria dichiarazione di potere, che protegge in maniera forte coloro che ne traggono i maggiori benefici, soprattutto in termini economici.\nLezione imparata Il turco meccanico, un automa risalente agli inizi del 1700, è stato di grande ispirazione per un servizio Amazon definito da Lilly Irani \u0026ldquo;automazione a combustibile umano\u0026rdquo; Come il turco, anche il reCAPTCHA di Google rappresenta un esempio di automazione in cui noi lavoriamo per supportare la big tech company: \u0026ldquo;selezioniamo diligentemente più caselle contenenti numeri civici, automobili o case. Educhiamo gratuitamente gli algoritmi di riconoscimento delle immagini di Google\u0026rdquo;. Esiste una logica che è permeata nel quotidiano in maniera quasi silenziosa: \u0026ldquo;la convinzione incrollabile che tutto si traduca in dati e che questi dati siano a disposizione per esser presi. Non importa dove sia stata scattata la fotografia o se questa rifletta un momento di vulnerabilità o dolore, [\u0026hellip;]\u0026rdquo;, perché la normalità è che pochi mettono in discussione come certi dati vengano acquisiti. Quotes Tutte queste cose fanno parte di quello che è l\u0026rsquo;intelligenza artificiale: una combinazione di due parole su cui è mappato un insieme complesso di aspettative, ideologie, desideri e paure.\n Disponibile su Amazon ", "url": "https:\/\/theredcode.it\/recensioni\/n%C3%A8-intelligente-n%C3%A8-artificiale\/" }, "https:\/\/theredcode.it\/tags\/recensioni\/": { "title": "recensioni", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/tags\/recensioni\/" }, "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\/devops\/podman-desktop\/": { "title": "Cos\u0027è Podman Desktop", "tags": ["podman","docker","devops",], "content": "In passato abbiamo parlato di cosa fosse Podman e quali sono i vantaggi nel suo utilizzo rispetto a una serie di alternative come Buildah o Docker.\nRecentemente, tuttavia, Docker ha perso terreno: l\u0026rsquo;ambiente grafico integrato per lo sviluppo e la gestione dei container, ossia Docker Desktop, non può più essere utilizzato in ambito enterprise. Ma recentemente, Podman ha presentato uno strumento simile.\nDurante la KubeCon North America 2022, tenutasi dal 24 al 28 ottobre a Detroit, il team di sviluppo dietro Podman ha presentato Podman Desktop, un nuovo strumento per gli sviluppatori.\nCos\u0026rsquo;è Podman Desktop è una nuova applicazione desktop integrata multipiattaforma con un\u0026rsquo;interfaccia utente unificata che semplifica notevolmente il lavoro con i container.\nPodman Desktop sfrutta il Podman Engine, consentendo di lavorare con i container dal proprio ambiente locale in modo comodo e veloce. Permette di eseguire container su qualsiasi macchina in pochi minuti e con pochi clic. Inoltre, combina tutte le funzionalità di Podman con l\u0026rsquo;ulteriore vantaggio di un\u0026rsquo;interfaccia grafica facile da usare.\nCon Podman Desktop, è possibile:\n Elencare, cercare, ispezionare, connettersi, avviare e arrestare i container Costruire, estrarre ed eseguire il push delle immagini Gestire le risorse di Podman - visualizzare la memoria, la CPU e lo storage allocati Importare le estensioni di Docker Desktop Sito ufficiale\nPerché usarlo Intanto, si installa facilmente su qualsiasi tipo di sistema operativo: Windows, macOs o Linux.\nPodman Desktop ha molte caratteristiche che migliorano la gestione dei container, ma in realtà è molto più di uno strumento di gestione dei container: è una soluzione completa progettata per soddisfare le esigenze delle aziende moderne. \nPer le aziende, Podman Desktop porta maggiore facilità e semplicità al processo di sviluppo dei container. L\u0026rsquo;interfaccia utente intuitiva consente a chi sviluppa di gestire tutti i container in un unico luogo, evitando complessi comandi da riga di comando, risparmiando tempo prezioso e mitigando i rischi di errore quando si tratta di container multipli o configurazioni complesse.\nInoltre, offre l\u0026rsquo;integrazione con Kubernetes, che consente ai team di sviluppo di lavorare in modo nativo con gli oggetti di questa tecnologia, facilitando la transizione dai container a Kubernetes.\nSenza menzionare la sua integrazione dello strumento con Red Hat OpenShift Local, che consente di testare le applicazioni in locale utilizzando le stesse immagini e lo stesso ambiente di container ma all\u0026rsquo;interno di un ambiente OpenShift locale, riducendo i rischi di distribuzione e favorendo la continuità operativa.\nInfine, la connessione di Podman Desktop a Developer Sandbox per Red Hat OpenShift offre un\u0026rsquo;alternativa per distribuire le applicazioni in un ambiente OpenShift gratuito e basato su cloud che non richiede risorse aggiuntive.\nCiò offre all\u0026rsquo;azienda la possibilità di testare le applicazioni in un ambiente Kubernetes gestito, senza l\u0026rsquo;onere di impostare e gestire l\u0026rsquo;infrastruttura.\nIntegrazione con OpenShift https://developers.redhat.com/articles/2023/05/23/podman-desktop-now-generally-available\nInstallazione Niente di più semplice: basta collegarsi al sito, selezionare il proprio sistema operativo e cliccare su download:\nPagina principale del sito\nDownload per Windows\nUna volta completata l\u0026rsquo;installazione, si aprirà l\u0026rsquo;applicazione con il tutorial iniziale che spiega come sfruttare le diverse integrazioni per utilizzare Docker, OpenShift Local o Kind:\nTutorial iniziale\n Se ti stai chiedendo come funziona per Docker Compose, sappi che esiste un\u0026rsquo;alternativa: Podman Compose!\n ", "url": "https:\/\/theredcode.it\/devops\/podman-desktop\/" }, "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\/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\/tags\/red-updates\/": { "title": "red-updates", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/tags\/red-updates\/" }, "https:\/\/theredcode.it\/categories\/red-updates\/": { "title": "red-updates", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/categories\/red-updates\/" }, "https:\/\/theredcode.it\/red-updates\/wikipedia-intelligenza-artificiale-generativa\/": { "title": "Wikipedia nell\u0027era dell\u0027IA generativa", "tags": ["red-updates",], "content": "Più che una domanda filosofica, è un dubbio con uno sguardo rivolto al futuro della conoscenza, soprattutto di quella \u0026ldquo;libera\u0026rdquo;: per via delle recenti novità in materia di intelligenza artificiale generativa e dei modelli relativi al linguaggio, la produzione di \u0026ldquo;documenti\u0026rdquo; e \u0026ldquo;testi\u0026rdquo; è diventata un\u0026rsquo;attività piuttosto comune, con il giusto prompt.\nLa risposta a questa domanda si trova nel post di Selena Deckelmann: no, non sarebbe lo stesso.\nIl processo di creazione dei contenuti su Wikipedia, della condivisione della conoscenza, ma soprattutto dell\u0026rsquo;aggiornamento e della continua manutenzione -la storia non si fa in un giorno-, ha richiesto il supporto nel corso degli ultimi 20+ anni il supporto di volontari e di progetti satellite a supporto -vedi Wikimedia- di questa enorme enciclopedia virtuale libera da sempre, e per sempre.\nIn un contesto dove siamo sotto costante bombardamento di testo generato da sistemi artificiali, il lavoro prodotto da Wikipedia assume ancora più valore: negli ultimi 6 mesi, molti dei LLMs (cfr. Large Language Models) prodotti dalle diverse tech companies sono stati addestrati su enormi dataset di informazioni, per far sì che fossero in grado di leggere, riassumere e generare testo a partire da questi dati.\nWikipedia di per sé costituisce uno dei più grandi corpus testuali presenti su Internet, essendo costituito da più di 58 milioni di articoli scritti in 300 lingue diverse: non a caso, si tratta della parte maggioritaria del training di questi sistemi, sebbene non ne rappresenti la totalità.\nMolte persone, tramite questi sistemi di LLM, hanno anche tentato la generazione di nuovi contenuti, proprio sfruttando il delta di questi dataset, per generare nuovi articoli da pubblicare su fonti come Wikipedia.\nE quindi?\nEsiste una grossa differenza tra gli articoli prodotti artificialmente e quelli presenti nella banca dati di Wikipedia:\n Tutto ciò che viene prodotto da questi sistemi non ha alcun sistema di fact-checking in grado di verificare se le informazioni siano corrette o meno; questo rende l\u0026rsquo;informazione meno importante? Certo che sì: nel corso del tempo, i contenuti presenti su questo sito hanno assunto una valore di affidabilità e verificabili tale da rendere attendibili le informazioni attualmente presenti. Nota bene: un errore o una mancata fonte ci sta sempre, ma non siamo forse umani? Un modello di IA come i LLM non possono produrre del contenuto su informazioni che non hanno; questo vuol dire che se non sono aggiornati sugli ultimi libri pubblicati, o sulle notizie del giorno, non saranno in grado di rispondere alle domande degli utent ssenza rischiare di incappare in pericolosi bias o inesattezze; questo può essere particolarmente problematico nel caso si tratti di informazioni che hanno a che fare con domini di conoscenza \u0026ldquo;sensibili\u0026rdquo;, come la medicina; Ultimo, ma non per importanza, è il peggioramento di alcuni modelli dovuto al riutilizzo di prompt umani come input per il re-addestramento di questi modelli: è stato studiato e dimostrato che LLM addestrati con l\u0026rsquo;output prodotto in risposta agli utenti (pensiamo a casi di hijacking, ma non solo) ne porta al degrado delle performance, culminando in una sorta di collasso del modello. In questo senso, diventa quindi fondamentale che le diverse aziende che producono e mantengono questi sistemi siano in grado di mantenere inalterato il dataset originale prodotto a partire da contenuti \u0026ldquo;umani\u0026rdquo;, per rendere il sistema sostenibile nel tempo. Questo porta a tre considerazioni fondamentali: ogni LLM dovrebbe essere rivisto/costruito sulla base di alcuni principi solidi, quali l\u0026rsquo;equità, per mantenere inalterate le fondamenta di questi sistemi e non produrre conoscenza non attendibile o potenzialmente pericolosa, ma anche la sostenibilità, per rendere questi modelli dei collaboratori grazie ai quali gli esseri umani possano creare nuova conoscenza in una sorta di partecipazione collettiva, oltre alla trasparenza: questo si traduce anche nella possibilità di spiegare l\u0026rsquo;output prodotto ad una persona che sia in grado di verificare la sorgente e correggere eventuali interpretazioni errate, piuttosto che veri e propri errori.\n L\u0026rsquo;evoluzione della tecnologia è inevitabile, e lo sappiamo.\n Tutti questi principi portano il vero valore di Wikipedia su due palmi di mano e promettono una visione del futuro dove le persone continuino ad avere uno spazio per crescere, imparare e connettersi le une alle altre, sempre con lo spirito di condivisione a guida della produzione della conoscenza, ma anche con il supporto di strumenti come questo che possono contribuire ad avere un\u0026rsquo;informazione sempre più libera, affidabile e aggiornata anche a lungo termine.\n", "url": "https:\/\/theredcode.it\/red-updates\/wikipedia-intelligenza-artificiale-generativa\/" }, "https:\/\/theredcode.it\/kubernetes\/vite-con-kubernetes-helm-chart\/": { "title": "Come usare Vite.js con Helm", "tags": ["kubernetes","docker","helm",], "content": "Hai bisogno di sapere come portare la tua applicazione su Kubernetes in Vite.js da zero?\nSei nel posto giusto.\nUnico requisito per seguire questa guida: avere un\u0026rsquo;applicazione Vite.js. Nel caso in cui tu non ne abbia una pronta, qui trovi un esempio di un counter scritto in Vite.js.\nDi base, questo esempio non fa altro che esporre una pagina dove è presente un pulsante che riporta il numero di click eseguiti:\nIl progetto -al momento- ha questa struttura:\nMa andiamo avanti, e vediamo step-by-step come arrivare ad avere un\u0026rsquo;istanza su Kubernetes:\nDockerfile Per far sì che funzioni su Kubernetes, è necessario avere un\u0026rsquo;immagine: per avere un\u0026rsquo;immagine, serve un Dockerfile che ci permetta di configurare l\u0026rsquo;applicazione attraverso dei semplici passaggi:\n installazione di Node.js 18, dal momento che stiamo utilizzando la versione Vite.js 4.4.5+ (istruzione FROM) specificare la cartella di lavoro dove i file del codice sorgente verranno copiati (istruzione WORKDIR) copiare tutti i file necessari all\u0026rsquo;installazione delle dipendenze (istruzione COPY) installare npm e le relative dipendenze (istruzione RUN) copiare i restanti file riguardanti l\u0026rsquo;applicazione (istruzione RUN) specificare la porta 5173, ossia la porta di default utilizzata da Vite.js per esporre l\u0026rsquo;applicazione (istruzione EXPOSE) definire qual è il comando con cui l\u0026rsquo;applicazione viene avviata (istruzione CMD). FROMnode:18LABEL authors=\u0026#34;TheRedCode.it\u0026#34;WORKDIR/appCOPY package*.json ./RUN npm i \u0026amp;\u0026amp; npm install -g npm@9.8.1COPY . .RUN mkdir /.npm \u0026amp;\u0026amp; \\ chgrp -R 0 /app \u0026amp;\u0026amp; \\ chmod -R ug+rwX /app \u0026amp;\u0026amp; \\ chown -R 1001:0 /app \u0026amp;\u0026amp; \\ chgrp -R 0 /.npm \u0026amp;\u0026amp; \\ chmod -R ug+rwX /.npm \u0026amp;\u0026amp; \\ chown -R 1001:0 /.npm;EXPOSE5173USER1001CMD [\u0026#34;npm\u0026#34;, \u0026#34;run\u0026#34;, \u0026#34;dev\u0026#34;]Le restanti righe, come l\u0026rsquo;istruzione RUN che contiene i comandi mkdir e chgrp o quella contenente l\u0026rsquo;istruzione USER servono per assegnare un utente che non abbia i permessi di amministratore al container e per far sì che possa eseguire i file necessari all\u0026rsquo;avvio dell\u0026rsquo;applicazione: questo perché vogliamo che l\u0026rsquo;immagine sia sicura e segua la best practices in materia di container.\n Ognuna delle righe precedenti può e deve essere adattata all\u0026rsquo;applicazione utilizzata: ad esempio, se la porta utilizzata è diversa da quella riportata, è sufficiente sostituirla; stesso vale per la versione di Node.js utilizzata o il comando che viene specificato per avviare l\u0026rsquo;applicazione in locale.\n A questo punto, testiamo l\u0026rsquo;immagine con il comando seguente:\ndocker build -t vite-app . docker run -d vite-app -p 5173:5173 Anche qui, utilizziamo il parametro -p per specificare la porta dell\u0026rsquo;applicazione (parametro a destra) da esporre localmente (parametro a sinistra).\nSe tutto ha funzionato correttamente, dovremmo ottenere lo stesso risultato visto in precedenza:\nOra che l\u0026rsquo;immagine è pronta, dobbiamo renderla accessibile tramite un registry: esistono diverse opzioni, come DockerHub o Quay.io, che richiedono solamente un account gratuito.\nNel caso di DockerHub, è sufficiente creare un account, creare un repository e poi eseguire il login da riga di comando per poter eseguire il tag e il push dell\u0026rsquo;immagine.\ndocker login -u IL_MIO_UTENTE docker tag vite-app IL_MIO_UTENTE/vite-app:0.0.1 docker push IL_MIO_UTENTE/vite-app:0.0.1 Nel caso di Quay.io, è sufficiente creare un account, creare un repository e poi eseguire il login da riga di comando per poter eseguire il push dell\u0026rsquo;immagine.\ndocker login quay.io -u IL_MIO_UTENTE docker tag vite-app IL_MIO_UTENTE/vite-app:0.0.1 docker push IL_MIO_UTENTE/vite-app:0.0.1 Creare il Chart Abbiamo già visto cos\u0026rsquo;è Helm e come funziona: vediamo come contestualizzarlo su Vite.js.\nPer iniziare a costruire il Chart, utilizziamo la riga di comando ed eseguiamo il comando:\nhelm create vite-chart \u0026gt;\u0026gt;\u0026gt; Creating vite-chart Questo andrà a creare una cartella con i diversi file necessari alla sua esecuzione:\nOra dobbiamo toglierci il cappello da #dev e passare a quello di #architect per poter analizzare dall\u0026rsquo;alto l\u0026rsquo;applicazione e scegliere le giuste risorse Kubernetes necessarie al suo deploy.\nStateless o no? Partiamo dall\u0026rsquo;inizio: l\u0026rsquo;applicazione è stateless? Ossia, è in grado di girare senza la necessità di salvare alcun dato riguardo la sessione? Nel caso di esempio, sì: possiamo quindi utilizzare un oggetto come il Deployment per eseguire il container, che è pensato nativamente per applicazioni stateless.\nApriamo dunque il file deployment.yaml nella cartella templates e iniziamo ad analizzarlo -e modificarlo.\nGià dalle prime righe, notiamo che ci sono alcune istruzioni che, per chi non avesse familiarità con i Chart, potrebbero risultare complicate: l\u0026rsquo;istruzione include, ad esempio, fa riferimento a un file chiamato helpers.tpl che rappresenta un template all\u0026rsquo;interno del quale è possibile includere diverse porzioni di YAML che rappresentano i valori con cui quel campo (nel caso di esempio seguente, name), dovrà essere valorizzato.\napiVersion: apps/v1 kind: Deployment metadata: name: {{ include \u0026#34;vite-chart.fullname\u0026#34; . }} ... Giusto per avere un riferimento, nel file _helpers.tpl avremo una definizione di questo tipo, dove il campo fullname viene valorizzato troncando a 63 il numero massimo di caratteri per evitare problemi di sintassi con alcune risorse Kubernetes che hanno questa limitazione; il tutto viene fatto tramite alcune istruzioni if/else che controllano diversi aspetti del campo per adattarlo al caso d\u0026rsquo;uso.\n{{- define \u0026#34;vite-chart.fullname\u0026#34; -}} {{- if .Values.fullnameOverride }} {{- .Values.fullnameOverride | trunc 63 | trimSuffix \u0026#34;-\u0026#34; }} {{- else }} {{- $name := default .Chart.Name .Values.nameOverride }} {{- if contains $name .Release.Name }} {{- .Release.Name | trunc 63 | trimSuffix \u0026#34;-\u0026#34; }} {{- else }} {{- printf \u0026#34;%s-%s\u0026#34; .Release.Name $name | trunc 63 | trimSuffix \u0026#34;-\u0026#34; }} {{- end }} {{- end }} {{- end }} Dal momento che vogliamo semplificarci la vita, faremo uso del solo file values.yaml, mentre il file _helpers. tpl verrà scartato, per cui possiamo rimuovere l\u0026rsquo;istruzione include dallo YAML che definisce il Deployment e inserire un campo nel file values.yaml per definire il fullname, così da avere un\u0026rsquo;istruzione che da riutilizzare, in questo modo: aggiungo il campo fullname al file values.yaml, e poi inserisco l\u0026rsquo;istruzione che lo sostituisce nel file deployment.yaml:\n# Default values for vite-chart. # This is a YAML-formatted file. # Declare variables to be passed into your templates. replicaCount: 1 image: repository: \u0026#34;ssensini/vite-app\u0026#34; pullPolicy: IfNotPresent # Overrides the image tag whose default is the chart appVersion. tag: \u0026#34;0.0.1\u0026#34; imagePullSecrets: [] nameOverride: \u0026#34;\u0026#34; fullname: \u0026#34;vite-chart\u0026#34; ... apiVersion: apps/v1 kind: Deployment metadata: name: {{ .Values.fullname }} ... Lo stesso principio può essere applicato per i diversi campi, come replicas e via dicendo, se vogliamo rendere parametrizzabile ogni aspetto del Deployment. In questo caso, proseguiamo con la lettura del file:\napiVersion: apps/v1 kind: Deployment metadata: name: {{ .Values.fullname }} labels: app: vite-chart spec: {{- if not .Values.autoscaling.enabled }} replicas: {{ .Values.replicaCount }} {{- end }} selector: matchLabels: app: vite-chart ... Nel caso di labels e matchLabels, inseriamo una label di default chiamata app:\napiVersion: apps/v1 kind: Deployment metadata: name: {{ .Values.fullname }} labels: app: vite-chart ... Andando avanti nella lettura del file, vediamo che viene aggiunto il campo imagePullSecret, serviceAccountName e securityContext: questi sono valorizzati come vuoti nel file values.yaml e in effetti al momento non sono necessari, quindi proseguiamo ignorando o rimuovendo questa sezione.\n... spec: {{- with .Values.imagePullSecrets }} imagePullSecrets: {{- toYaml . | nindent 8 }} {{- end }} serviceAccountName: {{ include \u0026#34;vite-chart.serviceAccountName\u0026#34; . }} securityContext: {{- toYaml .Values.podSecurityContext | nindent 8 }} ... Nella sezione relativa al container che verrà creato, troviamo invece le informazioni sull\u0026rsquo;immagine da utilizzare: questa fa sempre riferimento al file values.yaml che, di default, viene valorizzata con l\u0026rsquo;immagine di Nginx in una specifica versione. Sostituiamo con quella presente nel repository creato in precedenza direttamente nel file values.yaml:\n... # Default values for vite-chart. # This is a YAML-formatted file. # Declare variables to be passed into your templates. replicaCount: 1 image: repository: \u0026#34;IL_MIO_UTENTE/vite-app\u0026#34; pullPolicy: IfNotPresent # Overrides the image tag whose default is the chart appVersion. tag: \u0026#34;0.0.1\u0026#34; ... Continuando, la porta di default è impostata a 80, mentre dovrebbe essere 5173: sempre nel file nel file values.yaml modifichiamo questo valore:\n... service: type: ClusterIP port: 5173 ... Al momento, rimuoviamo le sezioni livenessProbe e readinessProbe, dal momento che non sono presenti questa tipologia di controlli nella nostra applicazione e ignoriamo la sezione relativa alle risorse (chiamata resources), che definiscono la CPU e la memoria necessarie all\u0026rsquo;applicazione per poter funzionare.\nRimuovendo anche gli ultimi campi, il Deployment dovrebbe risultare in questo modo:\napiVersion: apps/v1 kind: Deployment metadata: name: {{ .Values.fullname }} labels: app: vite-chart spec: {{- if not .Values.autoscaling.enabled }} replicas: {{ .Values.replicaCount }} {{- end }} selector: matchLabels: app: vite-chart template: metadata: {{- with .Values.podAnnotations }} annotations: {{- toYaml . | nindent 8 }} {{- end }} labels: {{- include \u0026#34;vite-chart.selectorLabels\u0026#34; . | nindent 8 }} spec: {{- with .Values.imagePullSecrets }} imagePullSecrets: {{- toYaml . | nindent 8 }} {{- end }} serviceAccountName: {{ include \u0026#34;vite-chart.serviceAccountName\u0026#34; . }} securityContext: {{- toYaml .Values.podSecurityContext | nindent 8 }} containers: - name: {{ .Chart.Name }} securityContext: {{- toYaml .Values.securityContext | nindent 12 }} image: \u0026#34;{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}\u0026#34; imagePullPolicy: {{ .Values.image.pullPolicy }} ports: - name: http containerPort: {{ .Values.service.port }} protocol: TCP resources: {{- toYaml .Values.resources | nindent 12 }} Comunicare tramite Service Per poter permettere l\u0026rsquo;accesso alla rete del cluster, è necessario utilizzare una risorsa di tipo Service: durante la creazione del Chart, è stato infatti creato un file service.yaml che ne definisce uno standard. Analizziamolo:\napiVersion: v1 kind: Service metadata: name: {{ include \u0026#34;vite-chart.fullname\u0026#34; . }} labels: {{- include \u0026#34;vite-chart.labels\u0026#34; . | nindent 4 }} spec: type: {{ .Values.service.type }} ports: - port: {{ .Values.service.port }} targetPort: http protocol: TCP name: http selector: {{- include \u0026#34;vite-chart.selectorLabels\u0026#34; . | nindent 4 }} Come fatto in precedenza, sostituiamo il valore del campo name con quello recuperato dal file values.yaml:\napiVersion: v1 kind: Service metadata: name: {{ .Values.fullname }} ... Per il resto, il file riporta i valori del file values.yaml correttamente definendo un Service di tipo ClusterIP esponendo la porta 5173 tramite protocollo TCP e chiama la porta del Service http.\napiVersion: v1 kind: Service metadata: name: {{ .Values.fullname }} labels: app: vite-chart spec: type: {{ .Values.service.type }} ports: - port: {{ .Values.service.port }} targetPort: {{ .Values.service.port }} name: http protocol: TCP In questo modo, l\u0026rsquo;applicazione sarà in grado di comunicare con altri Pod all\u0026rsquo;interno del cluster.\nUltimo step: il file Chart.yaml: verifichiamo che le informazioni riguardo i metadati del Chart che andremo a creare siano corrette, rimuoviamo eventuali commenti e proseguiamo.\napiVersion: v2 name: vite-chart description: A Helm chart for Kubernetes type: application version: 0.1.0 appVersion: \u0026#34;1.16.0\u0026#34; Ultimi ritocchi Rimuoviamo una serie di file che non ci servono: in particolare, rimuoviamo hpa.yaml e serviceaccount.yaml e controlliamo che la sintassi di quanto fatto finora sia corretta tramite il comando helm lint: questo andrà a verificare se i file finora modificati contengono errori o meno.\nhelm lint . ==\u0026gt; Linting . [INFO] Chart.yaml: icon is recommended 1 chart(s) linted, 0 chart(s) failed Perfetto, tutto funziona perfettamente!\nInstallazione A questo punto, possiamo testare il Chart all\u0026rsquo;interno di un cluster Kubernetes. Per farlo, dopo esserci collegati, possiamo eseguire il comando helm install sfruttando il file values.yaml e assegnando vite-app come nome alla release, in questo modo:\nhelm install -f values.yaml vite-app ./ \u0026gt;\u0026gt;\u0026gt; NAME: vite-app LAST DEPLOYED: ... NAMESPACE: kube-public STATUS: deployed REVISION: 1 NOTES: 1. Get the application URL by running these commands: export POD_NAME=$(kubectl get pods --namespace kube-public -l \u0026#34;app.kubernetes.io/name=vite-chart,app.kubernetes.io/instance=vite-app\u0026#34; -o jsonpath= \u0026#34;{.items[0].metadata.name}\u0026#34;) export CONTAINER_PORT=$(kubectl get pod --namespace clinalytix $POD_NAME -o jsonpath=\u0026#34;{.spec.containers[0].ports[0].containerPort}\u0026#34;) echo \u0026#34;Visit http://127.0.0.1:8080 to use your application\u0026#34; kubectl --namespace clinalytix port-forward $POD_NAME 8080:$CONTAINER_PORT Esporre l\u0026rsquo;applicazione Ok, sembra che il pod stia funzionando: e ora come vi accedo? Per fare un test al volo, possiamo sfruttare i comandi riportati nell\u0026rsquo;output e modificarli per nostra comodità.\nIn primis, eseguiamo il comando di export che ci permette di recuperare il nome del pod dell\u0026rsquo;applicazione utilizzando la label app e fornendo come output il solo campo name:\nexport POD_NAME=$(kubectl get pods --namespace kube-public -l \u0026#34;app\u0026#34; -o name) Poi, recuperiamo la porta del container esposta dal pod con il secondo comando, sostituendo il nome del Pod in questo modo:\nexport CONTAINER_PORT=$(kubectl get $POD_NAME --namespace kube-public -o jsonpath=\u0026#34;{.spec.containers[0].ports[0].containerPort}\u0026#34;) Infine, eseguiamo il port-forward della porta esposta dal container (ricordiamo, la 5173) verso la porta 8080 locale (o un\u0026rsquo;altra qualsiasi porta):\nkubectl --namespace kube-public port-forward $POD_NAME 8080:$CONTAINER_PORT Fatto questo, ci basterà aprire il browser e digitare http://localhost:8080 per visualizzare la pagina principale dell\u0026rsquo;applicazione:\nIn realtà, per esporre l\u0026rsquo;applicazione ci sono diversi altri modi, a seconda del tipo di configurazione di rete che è supportata: è possibile creare un LoadBalancer, oppure sfruttare un Ingress\u0026hellip;\nMa questo lo vedremo in un\u0026rsquo;altra puntata!\nRisorse utili Repository di esempio per Docker Repository di esempio per Kubernetes ", "url": "https:\/\/theredcode.it\/kubernetes\/vite-con-kubernetes-helm-chart\/" }, "https:\/\/theredcode.it\/tags\/helm\/": { "title": "helm", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/tags\/helm\/" }, "https:\/\/theredcode.it\/categories\/helm\/": { "title": "helm", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/categories\/helm\/" }, "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\/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\/llm-rag-cos-e\/": { "title": "Retrieval-Augmented Generation e LLM: cosa cambia", "tags": ["intelligenza-artificiale",], "content": "RAG sta per Retrieval-Augmented Generation, quindi un modello di generazione aumentata tramite delle attività di retrieval. Ma facciamo un passo indietro e parliamo solo della parte \u0026ldquo;generativa\u0026rdquo; per un minuto, dimenticando il resto.\nLa generazione si riferisce ai modelli linguistici di grandi dimensioni, o LLM, che generano testo in risposta a una richiesta dell\u0026rsquo;utente, detta prompt.\nQuesti modelli possono avere un comportamento indesiderato e possiamo raccontarlo tramite un esempio molto banale. Immaginate di parlare con un bambino che pone questa domanda: \u0026ldquo;Nel nostro sistema solare, quale pianeta ha più lune?\u0026rdquo;\nLa mia risposta potrebbe essere: \u0026ldquo;Giove ha 88 lune\u0026rdquo;. Ora, in realtà, ci sono un paio di cose che non vanno: innanzitutto, non ho alcuna fonte (solo ricordi) a sostegno di ciò che sto dicendo. Quindi, anche se ho detto con sicurezza \u0026ldquo;So la risposta!\u0026rdquo;, non ho una fonte certa, e inoltre la mia risposta non è aggiornata.\nQuindi abbiamo due problemi: uno è l\u0026rsquo;assenza di fonti, mentre il secondo problema è che non sono aggiornata. Questi sono due comportamenti che vengono spesso considerati problematici quando si interagisce con modelli linguistici di grandi dimensioni e sono sfide ben note per i LLM. \n Ora, cosa sarebbe successo se avessi cercato la risposta su una fonte affidabile come il sito della NASA?\n Beh, allora sarei stata in grado di dire: \u0026ldquo;Ah, ok! Quindi la risposta è Saturno con 146 lune\u0026rdquo;, e in effetti la risposta attuale è questa, ma continua a cambiare perché chi si occupa di questo campo continua a scoprire sempre più lune. Se non altro, avrei avuto una risposta su qualcosa di più credibile, e proveniente da una fonte autorevole.\nBene, cosa c\u0026rsquo;entra questo con i modelli linguistici di grandi dimensioni? Come avrebbe risposto a questa domanda un modello linguistico di grandi dimensioni?\nSupponiamo che un utente ponga la stessa domanda. Un modello linguistico di grandi dimensioni direbbe con sicurezza: \u0026ldquo;Sono stato addestrato e, in base ai parametri che conosco durante l\u0026rsquo;addestramento, la risposta è Giove\u0026rdquo;.\nLa risposta è sbagliata, ma magari non lo sappiamo, anche se il modello linguistico di grandi dimensioni è molto sicuro di ciò che ha risposto.\n Ora, cosa succede quando si aggiunge questa parte di \u0026ldquo;recupero\u0026rdquo; che \u0026ldquo;aumenta\u0026rdquo; l\u0026rsquo;informazione? Che cosa significa?\n Significa che ora, invece di fare affidamento solo su ciò che il LLM conosce attualmente, aggiungiamo un archivio di contenuti aggiornati. Questo può avvenire tramite Internet, o tramite una raccolta di documenti o fonti offline.\nIl punto, però, è che il modello per prima cosa va a controllare l\u0026rsquo;archivio di contenuti e dice: \u0026ldquo;Ehi, puoi recuperare per me le informazioni che sono rilevanti per la richiesta dell\u0026rsquo;utente?\u0026rdquo;. In questo caso, si ottiene una risposta potenziata dal contenuto di dati aggiornati, e -probabilmente- più corretta. Come ti sembra?\nIn origine, se stiamo parlando con un modello generativo, questo dice: \u0026ldquo;Oh, ok, conosco la risposta. Eccola\u0026rdquo;. Ma ora, utilizzando il framework RAG, il modello generativo ha un\u0026rsquo;istruzione che dice: \u0026ldquo;Per prima cosa, vai a recuperare i contenuti rilevanti, combinali con la domanda dell\u0026rsquo;utente e solo dopo genera la risposta\u0026rdquo;.\n Quindi, in che modo RAG aiuta le due sfide del LLM che ho menzionato prima?\n Prima di tutto, comincerò con la parte obsoleta: ora, invece di dover rivedere il modello, se si presentano nuove informazioni, tutto ciò che si deve fare è aumentare l\u0026rsquo;archivio dati con nuove informazioni, aggiornandole. In questo modo, la prossima volta che un utente porrà la domanda, avremo delle informazioni di prima mano.\nIl secondo problema, la fonte: i modelli linguistici di grandi dimensioni sono ora istruiti a prestare attenzione ai dati della fonte primaria prima di fornire la propria risposta, mentre ora sono in grado di fornire prove.\nIn questo modo è meno probabile che abbia allucinazioni o che fornisca informazioni non corrette, perché è meno probabile che si affidi solo ai dati appresi durante l\u0026rsquo;addestramento.\nQuesto permette anche di far sì che il modello abbia un comportamento che può essere molto positivo, ovvero sapere quando è il caso di dire \u0026ldquo;Non lo so\u0026rdquo;. Se infatti non è possibile rispondere in modo affidabile alla domanda dell\u0026rsquo;utente sulla base dell\u0026rsquo;archivio di dati, il modello dovrebbe dire \u0026ldquo;Non lo so\u0026rdquo;, invece di inventare qualcosa di credibile che potrebbe fuorviare l\u0026rsquo;utente.\nQuesto però può avere anche un effetto negativo, perché se la sorgente dati (ossia il retriver di informazioni) non ha una qualità sufficiente da fornire al modello linguistico di grandi dimensioni le informazioni di base \u0026ldquo;migliori\u0026rdquo;, allora forse la domanda dell\u0026rsquo;utente che può ricevere una risposta non ottiene una risposta.\nEd è qui che molte grandi aziende stanno lavorando: migliorare il retriever, in modo da fornire al modello i dati di migliore qualità su cui basare la propria risposta, in modo che il LLM possa dare la risposta più ricca all\u0026rsquo;utente quando genera la risposta.\n E tu, l\u0026rsquo;hai provato?\n Risorse utili Analisi del linguaggio naturale con Python ", "url": "https:\/\/theredcode.it\/intelligenza-artificiale\/llm-rag-cos-e\/" }, "https:\/\/theredcode.it\/database\/ripristino-backup-con-sql-server\/": { "title": "Ripristino backup con SQL Server", "tags": ["database","sql-server",], "content": "Cosa vedrai Definizione di ripristino Come funziona Risorse utili Definizione di ripristino Il recupero e il ripristino di un\u0026rsquo;istanza SQL Server supporta l\u0026rsquo;utilizzo di dati da backup di un intero database, di un file di dati o di una pagina di dati.\nIn questo post, vediamo come ripristinare un intero database.\nCome 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 a 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\n \u0026hellip; and that\u0026rsquo;s done!\n Risorse utili Documentazione ufficiale Basi di Dati ", "url": "https:\/\/theredcode.it\/database\/ripristino-backup-con-sql-server\/" }, "https:\/\/theredcode.it\/tags\/sql-server\/": { "title": "sql-server", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/tags\/sql-server\/" }, "https:\/\/theredcode.it\/intelligenza-artificiale\/futuro-della-musica-con-ai-generativa\/": { "title": "Il futuro della musica con l\u0027AI generativa", "tags": ["intelligenza-artificiale","red-updates",], "content": "Con l\u0026rsquo;aumento della popolarità dei Large Language Models e degli strumenti di intelligenza artificiale generativa come ChatGPT, le persone che sviluppano hanno trovato altri modi per trasformare il testo per casi d\u0026rsquo;uso che vanno dalla scrittura di e-mail al riepilogo di interi articoli: l\u0026rsquo;ultima novità riguarda la generazione di brani musicali semplicemente digitando alcune parole.\nBrett Bauman, lo sviluppatore di PlayListAI (in precedenza LinupSupply), ha lanciato questa settimana una nuova app chiamata Songburst -per ora- disponibile solo sull' App Store di Apple.\nL’app non richiede grande sforzo per utilizzarla: devi solo digitare un testo come \u0026ldquo;Musica di pianoforte rilassante da ascoltare mentre studi\u0026rdquo; o \u0026ldquo;Sigla funky per un\u0026rsquo;introduzione al podcast\u0026rdquo; per consentire all\u0026rsquo;app di generare una clip musicale.\nPagina principale del sito Songburst\nEsempio di generazione di una canzone con Songburst\nBauman ha dichiarato di aver creato il back-end dell\u0026rsquo;app utilizzando Vercel, un tool che lavora con Next.js, e che la musica viene generata tramite Leap, una piattaforma che offre API e SDK per la generazione di immagini, musica e molto altro.\nAttualmente esiste un limite alla generazione di 30 secondi e alcuni output potrebbero non essere di ottima qualità. Bauman ha detto che col tempo cercherà di aumentare la lunghezza del clip musicale generato e di migliorarne la qualità.\nSongburst può essere provata gratuitamente, ma offre un abbonamento a $ 9,99 al mese o $ 79,99 all\u0026rsquo;anno per tutte le funzionalità avanzate.\nTuttavia, Bauman non è stato il solo a cercare di creare un\u0026rsquo;app di testo in musica accurata: Akhil Tolani, che ha lanciato CassetteAI, disponibile sia sul web che sull\u0026rsquo;App Store.\nA livello di input, CassetteAI funziona in modo simile ad altre app: digiti la tua richiesta di come dovrebbe essere il brano e questo produce una traccia. Tuttavia, può generare un campione della durata massima di tre minuti e il produttore dell\u0026rsquo;app ha affermato che ciò è dovuto al fatto che l\u0026rsquo;app funziona su un modello basato sull\u0026rsquo;architettura gerarchica seq2seq ed è addestrata su un set di dati specializzato per generare musica priva di copyright.\nPagina principale del sito di CassetteAI\nLo strumento fornisce inoltre un\u0026rsquo;interfaccia che consente agli utenti di creare diverse versioni delle tracce generate e modificarle o mixarle per creare una nuova traccia. Questi strumenti sono piuttosto semplici, quindi non aspettarti di diventare un/a artista musicale con qualcosa di questo tipo!\nEsempio di canzone generata con CassetteAI\nTolani ha affermato che lo strumento avrà in futuro anche un abbonamento CassetteAI pro al prezzo di $ 4,99 al mese, che darà agli utenti l\u0026rsquo;accesso a una generazione illimitata di brani e l\u0026rsquo;accesso a modelli AI di migliore qualità per una migliore generazione di brani.\nLo sviluppatore ha affermato che CassetteAI è migliore di altri generatori di musica perché genera musica di migliore qualità in tempi più rapidi, e inoltre ha aggiunto che con CassetteAI vuole rispettare i confini etici dell\u0026rsquo;industria musicale.\nOltre a persone che sviluppano in maniera indipendente, anche le principali aziende tecnologiche stanno affrontando il problema della generazione di testo in musica: Google ha reso pubblico il suo strumento MusicLM durante la conferenza degli sviluppatori Google I/O di maggio. A giugno, Meta ha reso open source il proprio generatore musicale basato sull\u0026rsquo;intelligenza artificiale chiamato MusicGen.\nMentre i modelli stanno migliorando per quanto riguarda la qualità delle tracce generate, ci sono preoccupazioni riguardo ai dati di training che utilizzano per creare musica.\nPer evitare problemi legali, OpenAI ha reso open source il suo modello Jukebox e ha vietato agli utenti di creare musica per casi d\u0026rsquo;uso commerciali.\nE poi ci sono alcuni musicisti all\u0026rsquo;avanguardia che sfruttano l\u0026rsquo;intelligenza artificiale a proprio vantaggio per farsi pubblicità, come Grimes, che ad aprile ha invitato i fan a creare canzoni con la sua voce per aumentare la propria popolarità, ma anche per dividere i guadagni sui diritti d\u0026rsquo;autore con i fan che useranno la sua voce per creare della musica.\n E tu, che ne pensi? 🤨\n ", "url": "https:\/\/theredcode.it\/intelligenza-artificiale\/futuro-della-musica-con-ai-generativa\/" }, "https:\/\/theredcode.it\/kubernetes\/helm-introduzione\/": { "title": "Helm in 5 minuti", "tags": ["kubernetes","openshift",], "content": "Cos\u0026rsquo;è Helm Helm è un gestore di pacchetti open-source per Kubernetes.\nViene utilizzato per installare, aggiornare e gestire le applicazioni sui cluster Kubernetes.\nIl concetto di Chart in Helm rappresenta il formato di pacchetto in cui Helm definisce un\u0026rsquo;applicazione. Nella pratica, è un insieme di file che serve a definire un\u0026rsquo;applicazione con le relative risorse, che ne permette il rilascio e l\u0026rsquo;installazione all\u0026rsquo;interno del cluster.\nStruttura di un Chart Un Chart è costituito da diversi componenti organizzati in una specifica struttura di cartelle:\n Il file Chart.yaml, che contiene i metadati, come il nome, la versione e la descrizione. Questo file viene utilizzato per descrivere il Chart e fornire informazioni sull\u0026rsquo;applicazione che esso rappresenta. Il file values.yaml, che contiene i parametri configurabili utilizzati per personalizzare l\u0026rsquo;installazione del grafico. Questo file serve a definire i valori utilizzati durante l\u0026rsquo;installazione dell\u0026rsquo;applicazione, come il numero di repliche, l\u0026rsquo;immagine da utilizzare e altre opzioni di configurazione. La cartella charts/, che può essere usata per memorizzare le dipendenze del Chart. Ad esempio, se l\u0026rsquo;applicazione richiede un database, è possibile includere il database come dipendenza. In questo modo ci si assicura che il database venga installato insieme all\u0026rsquo;applicazione quando il Chart viene deployato. La cartella templates/, che contiene i manifesti (o file YAML) che definiscono le risorse da installare. Questa directory viene utilizzata per definire gli oggetti Kubernetes necessari per l\u0026rsquo;esecuzione dell\u0026rsquo;applicazione, come Deployment, i Services e Ingress. Esempio di struttura di un Chart\nIn generale, la struttura delle cartelle di un Chart è stata progettata per essere intuitiva e facile da usare. Organizzando i componenti in directory specifiche, è più facile gestire le applicazioni sui cluster Kubernetes e condividerle con altri.\nInstallare Helm Helm può essere installato su diversi sistemi operativi, tra cui Windows, Mac e Linux. Per installare Helm sul proprio sistema operativo, è possibile seguire la guida all\u0026rsquo;installazione sul sito ufficiale di Helm.\nCome creare un Chart Una volta installato Helm, si può iniziare a costruire il proprio Chart di esempio utilizzando la riga di comando. Per farlo, eseguiamo il comando:\nhelm create [NOME_CHART] Questo comando crea una nuova cartella con il nome del Chart specificato, che conterrà i file necessari per definire l\u0026rsquo;applicazione, compresi quelli descritti in precedenza.\nInstallare un Chart Definita l\u0026rsquo;applicazione utilizzando il Chart, è possibile installarla sul cluster Kubernetes utilizzando il comando helm install:\nhelm install [NOME_CHART] [NOME_RELEASE] Una release è un\u0026rsquo;istanza di un Chart in esecuzione in un cluster Kubernetes con un nome specifico. Quando un Chart viene installato, la libreria Helm crea una release per tenere traccia dell\u0026rsquo;installazione.\nQuesto significa che un singolo Chart può essere installato più volte nello stesso cluster e creare molte release diverse: ad esempio, è possibile installare tre database PostgreSQL eseguendo helm install tre volte e fornire un nome di release diverso.\nCome aggiornare un\u0026rsquo;applicazione Uno dei vantaggi dell\u0026rsquo;uso di Helm Chart è che consente di aggiornare e ripristinare facilmente l\u0026rsquo;applicazione. È possibile aggiornare l\u0026rsquo;applicazione modificando il file values.yaml e utilizzando il comando helm upgrade.\nhelm upgrade [NOME_RELEASE] [NOME_CHART] Questo comando aggiorna il Chart e il nome della release specificati sul cluster.\n E se volessi tornare indietro di una modifica?\n Come il software versioning, è possibile tornare indietro di un \u0026ldquo;commit\u0026rdquo; anche nelle release, e per questo esiste il comando helm rollback:\nhelm rollback [NOME_RELEASE] [REVISIONE] Ad esempio, un\u0026rsquo;applicazione potrebbe avere per la stessa release diverse revisioni, che corrispondono a diverse modifiche e aggiornamenti della stessa, ognuna con una revisione diversa:\nhelm history myapp \u0026gt;\u0026gt;\u0026gt; REVISION UPDATED STATUS CHART APP VERSION DESCRIPTION 1 Mon Oct 3 10:15:13 2016 superseded alpine-0.1.0 1.0 Initial install 2 Mon Oct 3 10:15:13 2016 superseded alpine-0.1.0 1.0 Upgraded successfully 3 Mon Oct 3 10:15:13 2016 superseded alpine-0.1.0 1.0 Rolled back to 2 4 Mon Oct 3 10:15:13 2016 deployed alpine-0.1.0 1.0 Upgraded successfully Semplice, no?\nRisorse utili Manuale su Docker - Guida per cominciare bene con Docker e Kubernetes Manuale su Kubernetes - Guida per gestire e orchestrare i container ", "url": "https:\/\/theredcode.it\/kubernetes\/helm-introduzione\/" }, "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\/database\/postgresql-gestire-permessi-utente\/": { "title": "Gestire utenti e permessi su Postgres", "tags": ["database","postgresql",], "content": "Partiamo dalle basi: definiamo alcuni concetti di base che saranno ripetuti spesso all\u0026rsquo;interno di questo post, come il concetto di utente, ruolo e permessi.\nUtenti e ruoli Un utente in Postgres è un ruolo che ha il permesso di eseguire il login by default, nulla di più. Questo potrebbe sembrare confusionario, ma la realtà è che in questo database utenti, ruoli e anche gruppi sono la stessa cosa.\nRappresentazione dell\u0026rsquo;istruzione CREATE USER\nQuesto vuole dire che le istruzioni CREATE USER e CREATE GROUP sono in realtà degli alias dell\u0026rsquo;istruzione CREATE ROLE, e che quando andremo a creare un utente, gli verrà assegnato automaticamente il ruolo LOGIN. Per questa ragione, nella documentazione ufficiale e su molti tutorial online, i due termini sono utilizzati in maniera ambivalente; per non fare confusione, ci atterremo all\u0026rsquo;utilizzo della parola utente e ruolo come intese in senso più generale, anche se consapevoli della differenza.\nInfatti, in altri database relazionali come Oracle, utenti e ruoli sono due entità molto diverse: per esempio, un ruolo non può essere usato per eseguire il login all\u0026rsquo;interno del database, ma serve a garantire una serie di permessi a gruppi e utenti.\nE cosa sono i ruoli?\nUn ruolo è un\u0026rsquo;entità che può possedere tutti gli oggetti presenti nel database e avere privilegi sul database stesso.\nUn esempio di ruolo è SUPERUSER: questo permette all\u0026rsquo;utente di bypassare tutti i permessi richiesti per qualsiasi operazione all\u0026rsquo;interno del database, eccetto il login (se non diversamente specificato).\nAltri ruoli sono:\n LOGIN: consente agli utenti di connettersi inizialmente al database; CREATEDB: consente di creare nuovi database; CREATEROLE: permette all\u0026rsquo;utente di creare, modificare e cancellare altri ruoli. Questo attributo consente anche al ruolo di assegnare o modificare l\u0026rsquo;appartenenza a un ruolo. REPLICATION: consente al ruolo di avviare la replica dei dati nel database su repliche secondarie. PASSWORD: assegna al ruolo una password che verrà utilizzata tramite i meccanismi di autenticazione. INHERIT: Determina se il ruolo eredita i privilegi dei ruoli. Questi permessi vengono attribuiti tramite due istruzioni: GRANT, che serve ad assegnare dei privilegi a un utente, oppure ALTER, che modifica lo stato attuale di questi permessi per un dato utente.\nUn privilegio è un riferimento a un\u0026rsquo;istruzione SQL ben precisa, come può essere SELECT, CREATE o TRUNCATE. I permessi -o privilegi- definiscono l\u0026rsquo;insieme specifico di operazioni e di accesso disponibili per i vari ruoli; di base, PostgreSQL segue un modello che richiede la specifica di un \u0026ldquo;elenco di permessi\u0026rdquo;, il che significa che gli utenti non possono accedere agli oggetti presenti del database se non esplicitamente concessi.\nL\u0026rsquo;elenco completo è il seguente: SELECT, INSERT, UPDATE, DELETE, TRUNCATE, REFERENCES, TRIGGER, CREATE, CONNECT, TEMPORARY, EXECUTE, USAGE, SET e ALTER SYSTEM.\nRappresentazione di privilegi, ruoli e utenti in PG\nFatte queste premesse, andiamo a vedere un esempio pratico: creiamo un utente myuser, a cui permetteremo di eseguire una serie di operazioni sulle tabelle tramite l\u0026rsquo;istruzione GRANT per la prima volta e ALTER per le volte successive.\nCreare un utente All\u0026rsquo;interno del database mydatabase, creiamo un utente chiamato myuser con la seguente sintassi:\nCREATE USER myuser Attenzione: per fare questo, avremo bisogno di aver eseguito la lo**gin tramite un utente che abbia i permessi di creazione, e che quindi sia -ad esempio- SUPERUSER.\nAssegnare dei permessi Immaginiamo di avere all\u0026rsquo;interno del database uno schema chiamato acme all\u0026rsquo;interno del quale sono state create due tabelle, una chiamata products e l\u0026rsquo;altra orders:\nEsempio di database con delle tabelle\nLa sintassi generica dell\u0026rsquo;istruzione GRANT è la seguente:\nGRANT \u0026lt;privilege\u0026gt; ON \u0026lt;oggetto\u0026gt; TO \u0026lt;utente/ruolo\u0026gt; [WITH GRANT OPTION]; Se volessimo assegnare all\u0026rsquo;utente myuser i permessi per inserire nuovi record ed elencare sulla tabella orders, ma solo per recuperare l\u0026rsquo;elenco dei prodotti presenti in products, potremmo scrivere le seguenti query:\nGRANT SELECT ON products IN SCHEMA acme TO myuser; GRANT SELECT, INSERT ON orders IN SCHEMA acme TO myuser; Se invece avessimo un utente che deve avere tutti i permessi su queste due tabelle, potremmo riscrivere la precedente istruzione in questo modo:\nGRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA acme TO mysuperuser; Per modificare i ruoli di un utente, possiamo anche sfruttare l\u0026rsquo;istruzione ALTER in questo modo: qui andiamo ad assegnare all\u0026rsquo;utente mysuperuser i permessi di creazione di un database:\nALTER USER mysuperuser CREATEDB; Per renderlo un utente con privilegi amministrativi, potremmo invece usare questa istruzione, configurando anche la relativa password attraverso il relativo ruolo:\nALTER USER mysuperuser WITH SUPERUSER PASSWORD \u0026#39;mypassword\u0026#39;; Revocare dei permessi Piuttosto semplice finora, no?\nProviamo a revocare i permessi agli utenti: ad esempio, rimuoviamo i permessi di inserimento sulla tabella orders all\u0026rsquo;utente myuser tramite l\u0026rsquo;istruzione REVOKE.\nLa sintassi generica dell\u0026rsquo;istruzione GRANT è la seguente:\nREVOKE \u0026lt;privilege\u0026gt; ON \u0026lt;oggetto\u0026gt; FROM \u0026lt;utente/ruolo\u0026gt;; Quindi, per l\u0026rsquo;esempio precedente, l\u0026rsquo;istruzione sarà questa:\nREVOKE INSERT ON orders FROM myuser; Per rimuovere del tutto questi permessi, è possibile eseguire un\u0026rsquo;istruzione che contenga la parola ALL, in questo modo:\nREVOKE ALL ON orders FROM myuser; Per saperne di più sulle basi di dati e su PostgreSQL (e non solo), dai un\u0026rsquo;occhiata a questo manuale!\n ", "url": "https:\/\/theredcode.it\/database\/postgresql-gestire-permessi-utente\/" }, "https:\/\/theredcode.it\/tags\/postgresql\/": { "title": "postgresql", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/tags\/postgresql\/" }, "https:\/\/theredcode.it\/categories\/postgresql\/": { "title": "postgresql", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/categories\/postgresql\/" }, "https:\/\/theredcode.it\/docker\/come-funziona-docker-init\/": { "title": "Scopriamo \u0027docker init\u0027", "tags": ["docker","kubernetes","devops",], "content": "Docker ha rivoluzionato il modo in cui chi sviluppa crea, impacchetta e distribuisce le loro applicazioni.\nI container Docker forniscono un ambiente di runtime leggero, portabile e coerente che può essere eseguito su qualsiasi infrastruttura.\nPoco più di un mese fa, il team di Docker ha presentato docker init, un nuovo comando dell\u0026rsquo;interfaccia della riga di comando (CLI) introdotto come funzionalità beta che semplifica il processo di aggiunta di Docker a un progetto.\nIl nuovo comando docker init automatizza la creazione delle risorse Docker necessarie, come i Dockerfile, i file per Docker Compose e i file .dockerignore, in base alle caratteristiche del progetto. Eseguendo il comando docker init, gli sviluppatori possono rapidamente containerizzare i loro progetti.\ndocker init è uno strumento prezioso per gli sviluppatori che desiderano sperimentare con Docker, conoscere la containerizzazione o integrare Docker nei loro progetti esistenti.\n Nota: per utilizzare docker init, gli sviluppatori devono eseguire l\u0026rsquo;aggiornamento alla versione 4.19.0 o successiva di Docker Desktop ed eseguire il comando nella cartella del progetto di destinazione. docker init rileverà le definizioni del progetto e genererà automaticamente i file necessari per eseguire il progetto in Docker.\n \u0026lsquo;docker init\u0026rsquo; in azione Dopo aver aggiornato Docker Desktop, ci posizioniamo all\u0026rsquo;interno della cartella del progetto che vogliamo dockerizzare e andiamo a eseguire tramite il terminale il comando docker init:\n$ docker init \u0026gt;\u0026gt;\u0026gt; Welcome to the Docker Init CLI! This utility will walk you through creating the following files with sensible defaults for your project: - .dockerignore - Dockerfile - compose.yaml Let\u0026#39;s get started! ? What application platform does your project use? [Use arrows to move, type to filter] Go - suitable for a Go server application \u0026gt; Python - suitable for a Python server application Node - suitable for a Node server application Rust - suitable for a Rust server application Other - general purpose starting point for containerizing your application Don\u0026#39;t see something you need? Let us know! Quit In questo caso, ci chiede se il progetto che vogliamo dockerizzare usa una delle tecnologie elencate: scegliamo Python -ovvio- e andiamo avanti:\n? What application platform does your project use? Python ? What version of Python do you want to use? (3.8.10) Indichiamo la versione di Python utilizzata, e procediamo:\n? What application platform does your project use? Python ? What version of Python do you want to use? 3.8.10 ? What port do you want your app to listen on? 5000 A questo punto, selezioniamo qual è la porta che l\u0026rsquo;applicazione utilizza per comunicare con altri servizi: usiamo la porta 5000, che è una di quelle utilizzate più comunemente nei progetti che usano gunicorn per la propria applicazione:\n? What application platform does your project use? Python ? What version of Python do you want to use? 3.8.10 ? What port do you want your app to listen on? 5000 ? What is the command to run your app (e.g., gunicorn \u0026#39;test:app\u0026#39; --bind=0.0.0.0:5000)? Il comando riportato è quello di esecuzione di un\u0026rsquo;applicazione molto basica che specifica la porta di cui eseguire il binding dell\u0026rsquo;applicazione sulla 5000 tramite il modulo chiamato test:app: questo va chiaramente sostituito con il nome del modulo Python (ad esempio, il file test.py) e la funzione che esegue il codice che espone il servizio. Un esempio veloce è il seguente:\n# test.py \u0026gt;\u0026gt;\u0026gt; def app(env, start_response): ... data = b\u0026#39;Hello my world!\u0026#39; ... status = \u0026#39;200\u0026#39; ... response_headers = [ ... (\u0026#39;Content-type\u0026#39;, \u0026#39;text/plain\u0026#39;), ... (\u0026#39;Content-Length\u0026#39;, str(len(data))) ... ] ... start_response(status, response_headers) ... return iter([data]) Completato questo step, siamo al punto di arrivo: verranno creati un file .dockerignore, un Dockerfile e un compose.yml, seguendo le indicazioni fornite.\n? What application platform does your project use? Python ? What version of Python do you want to use? 3.8.10 ? What port do you want your app to listen on? 5000 ? What is the command to run your app (e.g., gunicorn \u0026#39;myapp.example:app\u0026#39; --bind=0.0.0.0:5000)? gunicorn \u0026#39;test:app\u0026#39; --bind=0.0.0.0:5000 CREATED: .dockerignore CREATED: Dockerfile CREATED: compose.yaml ✔ Your Docker files are ready! Take a moment to review them and tailor them to your application. WARNING: No requirements.txt file found. Be sure to create one that contains the dependencies for your application, including an entry for the gunicorn package, before running your application. When you\u0026#39;re ready, start your application by running: docker compose up --build Your application will be available at http://localhost:5000 Apriamo il Dockerfile, e diamogli un\u0026rsquo;occhiata: il file riporta la versione di Python selezionata tramite l\u0026rsquo;istruzione ARG, un\u0026rsquo;immagine di base che sfrutta questo parametro, così come la porta 5000 da esporre (vedi EXPOSE) e il comando di avvio dell\u0026rsquo;applicazione (istruzione CMD):\n# syntax=docker/dockerfile:1# Comments are provided throughout this file to help you get started.# If you need more help, visit the Dockerfile reference guide at# https://docs.docker.com/engine/reference/builder/ARG PYTHON_VERSION=3.8.10FROMpython:${PYTHON_VERSION}-slim as base# Prevents Python from writing pyc files.ENV PYTHONDONTWRITEBYTECODE=1 # Keeps Python from buffering stdout and stderr to avoid situations where# the application crashes without emitting any logs due to buffering.ENV PYTHONUNBUFFERED=1 WORKDIR/app# Create a non-privileged user that the app will run under.# See https://docs.docker.com/develop/develop-images/dockerfile_best-practices/#userARG UID=10001 RUN adduser \\ --disabled-password \\ --gecos \u0026#34;\u0026#34; \\ --home \u0026#34;/nonexistent\u0026#34; \\ --shell \u0026#34;/sbin/nologin\u0026#34; \\ --no-create-home \\ --uid \u0026#34;${UID}\u0026#34; \\ appuser# Download dependencies as a separate step to take advantage of Docker\u0026#39;s caching.# Leverage a cache mount to /root/.cache/pip to speed up subsequent builds.# Leverage a bind mount to requirements.txt to avoid having to copy them into# into this layer.RUN --mount=type=cache,target=/root/.cache/pip \\ --mount=type=bind,source=requirements.txt,target=requirements.txt \\ python -m pip install -r requirements.txt# Switch to the non-privileged user to run the application.USERappuser# Copy the source code into the container.COPY . .# Expose the port that the application listens on.EXPOSE5000# Run the application.CMD gunicorn \u0026#39;test:app\u0026#39; --bind=0.0.0.0:5000Queste istruzioni andranno certamente riviste in base alle esigenze, ma è già un ottimo punto di partenza, considerato che ogni comando è opportunamente commentato, così che sia più semplice metterci mano!\ndocker init è uno strumento prezioso per le persone che sviluppano che desiderano semplificare il processo di aggiunta del supporto Docker ai propri progetti. Automatizza la creazione delle risorse Docker necessarie e può aiutare a standardizzare la creazione delle risorse Docker in diversi progetti.\nQuesto consente ai/lle developers di concentrarsi sullo sviluppo delle proprie applicazioni e riducendo il rischio di errori e incoerenze, accelerando l\u0026rsquo;adozione di Docker e la migrazione verso i container!\n Tip: l\u0026rsquo;immagine è stata generata con il modello di Deep.ai, che permette di creare immagini a partire da un testo 😉\n Risorse utili Articolo originale sul blog Docker Manuale su Docker - Guida per cominciare bene con Docker e Kubernetes Manuale su Kubernetes - Guida per gestire e orchestrare i container ", "url": "https:\/\/theredcode.it\/docker\/come-funziona-docker-init\/" }, "https:\/\/theredcode.it\/intelligenza-artificiale\/ai-ethics\/": { "title": "Etica e responsabilità dell\u0027IA", "tags": ["intelligenza-artificiale",], "content": "Cosa 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. Considerare 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-.\nResta da chiedersi, in che modo però si riesce a conciliare nel pratico diritti umani e AI?\nRisorse 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\/categories\/chatgpt\/": { "title": "chatgpt", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/categories\/chatgpt\/" }, "https:\/\/theredcode.it\/tags\/chatgpt\/": { "title": "ChatGPT", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/tags\/chatgpt\/" }, "https:\/\/theredcode.it\/intelligenza-artificiale\/chatgpt-proprieta-intellettuale\/": { "title": "ChatGPT e proprietà intellettuale", "tags": ["intelligenza-artificiale","chatgpt",], "content": "Potreste aver sentito parlare di ChatGPT nelle ultime settimane, anzi, potreste essere tra il milione di persone che ha iniziato a sperimentarlo subito dopo il suo lancio. ChatGPT è un chatbot lanciato dalla società di intelligenza artificiale OpenAI. Il sistema è stato originariamente creato per fornire supporto al servizio clienti online, ma l\u0026rsquo;intelligenza artificiale alla base di questo programma ha superato ogni aspettativa, diventando molto popolare.\nChe cos\u0026rsquo;è ChatGPT? Abbiamo deciso di chiederglielo direttamente!\n ChatGPT è un modello di intelligenza artificiale sviluppato da OpenAI, basato sull\u0026rsquo;architettura GPT-3.5. Si tratta di un sistema di generazione del linguaggio naturale, addestrato su una vasta quantità di testi provenienti da diverse fonti presenti su Internet. ChatGPT è stato progettato per interagire con gli utenti in modo conversazionale e fornire risposte e informazioni su una varietà di argomenti. Il modello utilizza un\u0026rsquo;architettura di rete neurale trasformatore che gli consente di comprendere e generare testo in modo coerente. Attraverso l\u0026rsquo;apprendimento supervisionato e l\u0026rsquo;adattamento ai dati di addestramento, ChatGPT è in grado di rispondere alle domande degli utenti, fornire spiegazioni, svolgere compiti di traduzione, creare testo e altro ancora.\n È importante notare che ChatGPT, come molti altri modelli di linguaggio, riflette le informazioni presenti nei dati con cui è stato addestrato. Può quindi essere influenzato da eventuali pregiudizi o inesattezze presenti in tali dati, motivo per cui OpenAI ha dichiarato il suo impegno nel migliorare continuamente il modello per renderlo più affidabile, sicuro ed eticamente responsabile.\nTecnicamente parlando, ChatGPT è una chat autogenerativa che estrae dati da libri di testo, giornali, siti web e articoli diversi.\nQuindi raccoglie questa enorme quantità di dati e li elabora utilizzando l\u0026rsquo;elaborazione del linguaggio naturale (conosciuto come NLP), per renderli comprensibili e il più possibile simili al linguaggio umano.\nQuesto chatbot è in grado di creare una varietà di contenuti tutelabili dalla legge sulla proprietà intellettuale, come articoli, testi di canzoni, codici di programmazione o traduzioni di testi.\nIn effetti, ChatGPT si sta dimostrando davvero utile in diversi campi, anche se ci sono alcuni dibattiti e preoccupazioni al riguardo, poiché l\u0026rsquo;interazione tra proprietà intellettuale e intelligenza artificiale sta aumentando in modo esponenziale con la crescita della tecnologia: ne abbiamo parlato quando, ad esempio, Stack Overflow decise di bannare ChatGPT e chi lo utilizzava per rispondere alle domande della community.\nMa come funziona la proprietà intellettuale? In termini di proprietà intellettuale, abbiamo affrontato qui di seguito alcune domande.\n[TheRedCode]: \u0026ldquo;Chi è il proprietario dei contenuti generati da ChatGPT?\u0026rdquo;\n[ChatGPT]:\n\u0026ldquo;I contenuti generati da ChatGPT sono di proprietà dell\u0026rsquo;utente che fa uso del modello per interagire con esso. OpenAI, l\u0026rsquo;organizzazione che ha sviluppato ChatGPT, ha la proprietà e il controllo del modello stesso, ma non rivendica la proprietà dei contenuti generati dagli utenti.\nTuttavia, è importante notare che OpenAI può raccogliere dati sulle interazioni dell\u0026rsquo;utente con il modello per migliorare il sistema e la sua prestazione complessiva. OpenAI ha implementato politiche di privacy per proteggere i dati degli utenti e si impegna a rispettare la privacy e la sicurezza delle informazioni personali.\nÈ fondamentale considerare le responsabilità nell\u0026rsquo;utilizzo del modello e aderire alle norme etiche e legali riguardanti i diritti di proprietà intellettuale, la privacy e altri aspetti legali pertinenti quando si utilizza ChatGPT o altri modelli di generazione del linguaggio.\u0026rdquo;\nCome afferma la stessa ChatGPT, sebbene il contenuto generato possa essere protetto da copyright, non sarà di proprietà dell\u0026rsquo;IA stessa. Infatti, secondo la legge europea (e statunitense) un\u0026rsquo;intelligenza artificiale non può essere titolare di diritti d\u0026rsquo;autore, in quanto non può essere riconosciuta come autore e non ha la personalità giuridica che è un prerequisito per la proprietà di beni (immateriali).\nPertanto, ChatGPT non può essere proprietaria di ciò che scrive in quanto è \u0026ldquo;solo\u0026rdquo; un\u0026rsquo;intelligenza artificiale. Tuttavia, elabora risposte a partire dalle informazioni che ha raccolto nel suo database e quindi sta creando una nuova risposta, anche se si basa su un\u0026rsquo;informazione esistente. Questa risposta può essere tutelata dal diritto d\u0026rsquo;autore, ma ciò dipende dal fatto che possa essere considerata innanzitutto un\u0026rsquo;\u0026ldquo;opera\u0026rdquo;, cioè qualcosa che esprime le scelte creative del suo autore.\nA questo proposito è importante sapere che la questione della proprietà e della paternità delle opere generate dall\u0026rsquo;IA non è ancora del tutto risolta dalla legge e, in quanto \u0026ldquo;tema caldo\u0026rdquo;, potrebbe evolversi negli anni a venire a seconda delle modifiche normative e della giurisprudenza.\nQuesto vuol dire che se nella risposta viene riportato integralmente o parte dell\u0026rsquo;input, questo può essere comunque raccolto e utilizzato per migliorare il sistema, come riportato anche nelle condizioni d\u0026rsquo;uso.\nPer ora, sembra che gli artisti/creatori che utilizzano l\u0026rsquo;IA per supportare il loro processo creativo possano rivendicare la proprietà dell\u0026rsquo;opera se questa riflette le loro scelte e la loro creatività. D\u0026rsquo;altra parte, un comando generico come \u0026ldquo;scrivi una poesia d\u0026rsquo;amore\u0026rdquo; finirebbe per far sì che ChatGPT generi il testo senza che l\u0026rsquo;utente abbia fatto alcuna scelta creativa: in questi casi, l\u0026rsquo;esistenza di un diritto d\u0026rsquo;autore o di un\u0026rsquo;\u0026ldquo;opera\u0026rdquo; nel senso della legge sul copyright è piuttosto dubbia.\nPosso usare il contenuto generato da ChatGPT? Sembra chiaro a questo che non ci siano problemi quando si tratta di un uso privato come assistenza alla conversazione. E come già detto, l\u0026rsquo;uso pubblico non comporta alcun problema per quanto riguarda i termini e le condizioni di OpenAI. Detto questo, in termini di utilizzo dei contenuti per una comunicazione pubblica più ampia, come gli articoli, potrebbero sorgere dei problemi.\nÈ infatti importante notare che i contenuti creati da ChatGPT derivano da contenuti precedentemente generati da altri e quindi non è chiaro quali siano le implicazioni in termini di diritto d\u0026rsquo;autore per il riutilizzo di questi contenuti: quando l\u0026rsquo;output è \u0026ldquo;ispirato\u0026rdquo; a opere esistenti e quando invece le sta effettivamente violando? Dove tracciare il limite?\nUn utente di ChatGPT può quindi finire involontariamente per violare il copyright di qualcuno se pubblica un output che assomiglia troppo a un\u0026rsquo;opera esistente.\nIn conclusione, ChatGPT è certamente uno strumento interessante in molti campi, compreso quello della proprietà intellettuale, in quanto può fornire informazioni e assistenza.\nTuttavia, è necessario prestare attenzione quando si \u0026ldquo;alimenta\u0026rdquo; con informazioni riservate, in quanto ciò potrebbe finire per alimentare altri dati o essere dannoso per la protezione di eventuali segreti commerciali.\nInoltre, bisogna fare attenzione quando si copiano i contenuti generati da ChatGPT, in quanto potrebbero essere considerati una violazione del copyright se basati strettamente su opere esistenti: ricordiamo che, poiché la fonte delle informazioni fornite non è citata, esse non sono necessariamente affidabili. \nCome ultima osservazione, si noti che sebbene questo strumento possa fornire informazioni e assistenza in materia di proprietà intellettuale, è sempre consigliabile rivolgersi a esperti/e di proprietà intellettuale, poiché ChatGPT (per il momento) non può sostituire la figura di chi è esperto/a in materia di legge!\nRisorse utili Software Licensing E Data Governance ", "url": "https:\/\/theredcode.it\/intelligenza-artificiale\/chatgpt-proprieta-intellettuale\/" }, "https:\/\/theredcode.it\/latest\/twitter-chiude-al-data-scraping\/": { "title": "Twitter chiude al pubblico", "tags": ["red-updates",], "content": "L\u0026rsquo;acquisizione di Twitter da parte di Elon Musk ha finora rappresentato un terremoto non da poco: nel corso degli ultimi mesi, ci sono stati diversi stravolgimenti della piattaforma, come il pagamento dietro alla spunta blu di verifica degli account, o il pagamento per l\u0026rsquo;utilizzo delle API anche a scopo di ricerca, oltre alle continue modifiche alla piattaforma (chi dice direttamente in produzione) con tanto di annunci di nuove funzionalità in arrivo tramite dei tweet.\nTutte modifiche annunciate direttamente tramite l\u0026rsquo;account di Elon Musk, che posta e commenta quotidianamente sulle modifiche attuate sulla piattaforma, ma anche tutto quello è il suo flusso di pensieri sui temi più disparati e controversi:\npic.twitter.com/VHZpjEBcuS\n\u0026mdash; Elon Musk (@elonmusk) June 24, 2023 Must confess to a deep love of fashion \u0026amp; architecture\n\u0026mdash; Elon Musk (@elonmusk) July 6, 2023 Tutto questo interrotto qualche giorno fa, quando l\u0026rsquo;account di Elon Musk riporta questo messaggio:\nTemporary emergency measure. We were getting data pillaged so much that it was degrading service for normal users!\n\u0026mdash; Elon Musk (@elonmusk) June 30, 2023 Modifica che sembrava essere stata annunciata come temporanea, e invece, a oggi la situazione è questa:\nMentre c\u0026rsquo;è ci sono moltissime community che lavorano duramente per portare avanti progetti che siano (e restino) open source, Twitter incassa un altro colpo che agli utenti non piace: Elon Musk ha infatti annunciato di aver imposto dei limiti temporanei per contrastare il data scraping, dove dice:\n Per affrontare gli alti livelli di scraping dei dati e di manipolazione del sistema, abbiamo applicato i seguenti limiti temporanei:\n Gli account verificati sono limitati a leggere 6000 tweet al giorno. Gli account non verificati possono leggere 600 tweet al giorno Nuovi account non verificati a 300 al giorno To address extreme levels of data scraping \u0026amp; system manipulation, we’ve applied the following temporary limits:\n- Verified accounts are limited to reading 6000 posts/day\n- Unverified accounts to 600 posts/day\n- New unverified accounts to 300/day\n\u0026mdash; Elon Musk (@elonmusk) July 1, 2023 La notizia non ha colto così di sorpresa gli utenti, dal momento che il ex-CEO di Twitter si è già espresso in passato con il suo disappunto nei confronti di aziende d\u0026rsquo;intelligenza artificiale come OpenAI, proprietaria di ChatGPT, che utilizzano i dati di Twitter per addestrare i loro modelli linguistici.\nIl data scraping è il male? No, il data scraping ha implicazioni sia positive che negative.\nIl lato positivo è che può essere utilizzato per vari scopi legittimi: chi fa ricerca e/o analisi può effettuare lo scraping dei dati per raccogliere informazioni per ricerche di mercato, analisi dei trend o per il monitoraggio dei prezzi e dei prodotti dei concorrenti.\nLe aziende possono effettuare lo scraping dei dati per acquisire clienti, recensioni o per generare lead per i loro team di vendita.\nLo scraping dei dati può essere utilizzato anche per la ricerca accademica, il giornalismo o per creare applicazioni che sfruttino questi dati a scopi di innovazione.\nQuali sono gli svantaggi del data scraping? Lo scraping dei dati può ovviamente essere dannoso se utilizzato per scopi non etici o illegali.\nAd esempio, molti siti web hanno dei termini di servizio o accordi di utilizzo che vietano lo scraping dei loro dati senza autorizzazione.\nQuando lo scraping viola questi termini, qualunque tipo di acquisizione dei dati diventa un accesso non autorizzato ai dati di un sito web e può e può portare a conseguenze legali.\nQuesto perché c\u0026rsquo;è sempre la minaccia di violazione del copyright nel caso in cui si faccia scraping di dati come il materiale protetto da copyright, o anche come indirizzi e-mail, numeri di telefono o informazioni sensibili, senza il cui consenso delle persone, può comportare violazioni della privacy.\nDietro a quest\u0026rsquo;ultima novità sul mondo di Twitter, Elon Musk ha espresso venerdì scorso la sua preoccupazione per organizzazioni che hanno effettuato un ampio scraping dei dati di Twitter, che secondo lui ha avuto un impatto negativo sull\u0026rsquo;esperienza degli utenti con la piattaforma, oltre al fatto che secondo Musk, gli utenti sono \u0026ldquo;dipendenti\u0026rdquo; da Twitter e \u0026ldquo;hanno bisogno di uscire\u0026rdquo;.\nThe reason I set a “View Limit” is because we are all Twitter addicts and need to go outside.\nI’m doing a good deed for the world here.\nAlso, that’s another view you just used.\n\u0026mdash; Elon Musk (Parody) (@ElonMuskAOC) July 1, 2023 La preoccupazione dell\u0026rsquo;imprenditore è un richiamo alla sua precedente critica, dove dichiara San Francisco una città \u0026ldquo;post-apocalittica\u0026rdquo;, che non si è mai ripresa dalla pandemia e dove i dipendenti di Twitter \u0026ldquo;non si sentono sicuri\u0026rdquo; a raggiungere il posto di lavoro.\nLe risposte da parte degli utenti non tardano però ad arrivare:\nBrother just be honest, are you trying to kill the company? pic.twitter.com/40YikPzRNn\n\u0026mdash; trev 🏵️ (@trevvvv_) July 1, 2023 Che Elon abbia preso Twitter come il suo personale esperimento sociale?\n Risorse utili Recensione alla biografia autorizzata di Musk ", "url": "https:\/\/theredcode.it\/latest\/twitter-chiude-al-data-scraping\/" }, "https:\/\/theredcode.it\/eventi\/2023-container-day\/": { "title": "ContainerDay 2023 @ Bologna\u0026Online", "tags": [], "content": "containerday è la principale conferenza italiana dedicata esclusivamente alle tecnologie di containerizzazione e virtualizzazione ed alle buone pratiche ad esse associate.\nDocker, Kubernetes e le tecnologie di virtualizzazione stanno cambiando radicalmente il mondo delle infrastrutture IT. Alla conferenza saranno presentate le best practices, le tecnologie innovative e gli strumenti più maturi per poter gestire e far evolvere una infrastruttura IT moderna.\n📅 Quando:: 12 ottobre 2023\n🗺️ Dove: Bologna\u0026amp;Online\n🎫 Codice sconto (da condividere!): 10% con community_THEREDCODE\n#container #containerday #docker #kubernetes #serverless\n➡ ️Partecipa all’evento\n🫶 Organizzato da: Grusp\n", "url": "https:\/\/theredcode.it\/eventi\/2023-container-day\/" }, "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\/eventi\/2023-devsecopsday\/": { "title": "DevSecOpsDay 2023 @ Bologna\u0026Online", "tags": [], "content": "devsecopsday è la prima conferenza italiana dedicata alla pratiche di sicurezza in ambito DevOps - dallo stesso team che organizza Incontro DevOps Italia e containerday.\n📅 Quando:: 13 ottobre 2023\n🗺️ Dove: Bologna\u0026amp;Online\n🎫 Codice sconto (da condividere!): 10% con community_THEREDCODE\n#devsecopsday23 #DevSecOps #DevOps #Cybersecurity #Containers #Kubernetes #Microservices\n➡ ️Partecipa all’evento\n🫶 Organizzato da: Grusp\n", "url": "https:\/\/theredcode.it\/eventi\/2023-devsecopsday\/" }, "https:\/\/theredcode.it\/eventi\/2023-codemotion\/": { "title": "Codemotion 2023 @ Milano", "tags": [], "content": "Siamo felici di annunciare che siamo #partner della Conferenza @codemotion che avrà luogo il 24 e 25 di ottobre 💙\nCodemotion è la piattaforma di riferimento per la crescita professionale di ogni developer. Per la sua community organizza eventi, offre contenuti live e on-demand e crea opportunità di networking e carriera. Inoltre supporta le aziende nella ricerca di talenti tech favorendo processi di selezione trasparenti ed efficaci.\n📅 Quando: 24-25 ottobre 2023\n🗺️ Dove: Milano\n🎫 Codice sconto (da condividere!): 20% con PARTNER_TRC\n#CodemotionMilan23 #CodemotionPartner\n➡ ️Partecipa all’evento\n🫶 Organizzato da: Codemotion\n", "url": "https:\/\/theredcode.it\/eventi\/2023-codemotion\/" }, "https:\/\/theredcode.it\/eventi\/2023-productmanagementday\/": { "title": "Product Management Day 2023 @ Firenze", "tags": [], "content": "Non stiamo più nella pelle, dobbiamo dirti l’ultima: saremo presenti, come partner, al Product Management Day 2023!\nQuesto vuol dire che sta tornando il più grande evento italiano dedicato al prodotto, il Product Management Day. E ci saremo anche noi, come partner!\nTorna la conferenza italiana dedicata al Product Management, e non potevamo che esserci anche noi a sostenere un evento innovativo come questo.\nCi vediamo lì?\n📅 Quando: 27 ottobre 2023\n🗺️ Dove: Firenze @ Nana bianca\n🎫 Codice sconto: 15% tramite questo link\nPer ottenere un biglietto gratuito, scrivi un\u0026rsquo;email a info@theredcode.it!\n#productmanagementday #productmanagement\n➡ ️Partecipa all’evento\n🫶 Organizzato da: Product Management Day\n", "url": "https:\/\/theredcode.it\/eventi\/2023-productmanagementday\/" }, "https:\/\/theredcode.it\/eventi\/2023-reactjsday\/": { "title": "ReactJSDay 2023 @ Verona", "tags": [], "content": "reactjsday 2023 is the 9th edition of the Italian React conference, organized by GrUSP, organizers of events like jsday and phpday.\nThe event is international and all sessions will be in English. The event’s goal is to allow all React developers to meet and share experience while having fun and networking in an enjoyable context.\n📅 Quando:: 27 ottobre 2023\n🗺️ Dove: Verona\n🎫 Codice sconto (da condividere!): 10% con community_THEREDCODE\n#reactjsday2023 #reactjsday #react #reactjs #javascript #js #development #developer #webdevelopment #dev\n➡ ️Partecipa all’evento\n🫶 Organizzato da: Grusp\n", "url": "https:\/\/theredcode.it\/eventi\/2023-reactjsday\/" }, "https:\/\/theredcode.it\/eventi\/2023-cloudday\/": { "title": "Cloud Day 2023 @ Milano - Online", "tags": ["eventi",], "content": "Porta le tue skill sul #cloud al massimo incontrando esperti/e e le maggiori community cloud in Italia.\n📅 Quando: 13 Novembre 2023\n🗺️ Dove: Milano - Online\nTitolo: Cloud Day 2023\n🎫 Codice sconto (da condividere!): 10% con P-R3DCODE\n➡ ️Partecipa all’evento\n🫶 Organizzato da: Cloud Champions\n", "url": "https:\/\/theredcode.it\/eventi\/2023-cloudday\/" }, "https:\/\/theredcode.it\/tags\/eventi\/": { "title": "eventi", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/tags\/eventi\/" }, "https:\/\/theredcode.it\/intelligenza-artificiale\/generative-ai-roadmap\/": { "title": "IA generativa: a che punto siamo", "tags": ["intelligenza-artificiale",], "content": "L\u0026rsquo;IA generativa ad oggi rappresenta l\u0026rsquo;innovazione tecnologica più dirompente dall\u0026rsquo;avvento del personal computer e dalla nascita di 5 Internet, con il suo enorme potenziale: questa branca dell\u0026rsquo;intelligenza artificiale permette di creare immagini attraverso della grafica computerizzata, ma anche simil-fotografie, montaggi video, campagne pubblicitarie e sì, anche articoli.\n La generazione d\u0026rsquo;immagini è un campo relativamente nuovo: ne abbiamo parlato in questo articolo.\n Sebbene l\u0026rsquo;IA generativa sia stata un\u0026rsquo;area di ricerca sull\u0026rsquo;IA fin dal 2014, è decollata nella seconda metà del 2022 quando la tecnologia è stata messa nelle mani dei consumatori con il rilascio di diversi servizi di modelli da testo a immagine come MidJourney, Dall-E 2, Imagen e il rilascio open-source del famoso progetto di Stability AI\u0026rsquo;s, Stable Diffusion.\nImmagine generata da StableDiffusion che rappresenta un alieno\n Visualizza questo post su Instagram Un post condiviso da Midjourney Gallery (@midjourney.gallery)\n A questo ha fatto rapidamente seguito ChatGPT di OpenAI, che ha ipnotizzato i consumatori con una versione di GPT-3 (ora in versione potenziata) addestrata al dialogo conversazionale che apparentemente aveva una risposta per tutto e forniva risposte in modo molto simile a quello umano.\nAllo stesso tempo, i VC alla ricerca di una nuova tecnologia su cui investire hanno colto l\u0026rsquo;opportunità di strumenti di IA generativa e sia Stability AI che Jasper sono diventate immediatamente degli unicorni con finanziamenti di serie A superiori a 100 milioni di dollari. Anche Copilot di GitHub ha visto un\u0026rsquo;ampia adozione, uno strumento costruito sul Codex di Open AI che è stato addestrato su tutti i repository di codice pubblico di Github e assiste le persone che sviluppano con strumenti come i suggerimenti a base di testo in linguaggio naturale che viene trasformato in codice software eseguibile.\nGithub Github Copilot GIFfrom Github GIFs Esempio di utilizzo di GitHub Copilot\nTuttavia, ci sono stati notevoli contraccolpi contro l\u0026rsquo;IA generativa. Sono state sollevate molte preoccupazioni in merito a possibili violazioni del copyright per ciò che concerne l\u0026rsquo;arte, il testo e il codice sorgente prodotto dall\u0026rsquo;IA generativa, anche rispetto all\u0026rsquo;impatto sui posti di lavoro dei creativi. L\u0026rsquo;azione legale collettiva intentata contro Microsoft per Copilot costituirà un prezioso precedente nei tribunali per il quale potrebbero essere intentate altre cause, poiché molti sviluppatori sostengono che la loro proprietà intellettuale sia stata rubata. Chi lavora nell\u0026rsquo;arte ma anche nello sviluppo, vuole che le proprie opere siano escluse dallo scraping su larga scala effettuato per creare insiemi di dati validi per i modelli linguistici e d\u0026rsquo;immagini di grandi dimensioni: un esempio sono gli artisti di ArtStation si sono ribellati chiedendo che tutta l\u0026rsquo;arte generata dall\u0026rsquo;IA sia bandita dalla piattaforma.\nL\u0026rsquo;IA generativa è un\u0026rsquo;area di ricerca attiva fin dagli anni \u0026lsquo;60, quando Joseph Weizenbaum sviluppò il primo chatbot chiamato ELIZA. Si trattava di uno dei primi esempi di elaborazione del linguaggio naturale (NLP) ed era stato progettato per simulare le conversazioni tra uno psicoterapeuta e un utente, generando risposte in base al testo ricevuto. Sebbene si trattasse di un\u0026rsquo;implementazione primitiva basata su regole e volta a sintetizzare una conversazione umana, il sistema ha aperto la strada a ulteriori sviluppi nei decenni successivi nel campo dell\u0026rsquo;NLP.\nLa moderna IA generativa si basa sulla più nota branca del deep learning, le cui origini risalgono agli anni Cinquanta. Le innovazioni nel campo di questa area dell\u0026rsquo;intelligenza artificiale sono rimaste in sordina per decenni, per poi risorgere negli anni \u0026lsquo;80 e \u0026lsquo;90 con l\u0026rsquo;avvento delle reti neurali artificiali (abbreviate in RNA) e degli algoritmi di retropropagazione.\nNegli anni 2000 e 2010 la quantità di dati disponibili e le capacità di calcolo sono migliorate al punto da rendere pratico il deep learning. Nel 2012 Geoffrey Hinton (noto come padrino del deep learning) e il suo team hanno fatto un passo avanti nel campo del riconoscimento vocale utilizzando le reti neurali convoluzionali (abbreviate in CNN) e nel 2014 hanno fatto un passo avanti analogo nel campo della classificazione delle immagini, aprendo la strada a importanti innovazioni successive nello studio dell\u0026rsquo;intelligenza artificiale.\nEsempio di CCN - Credits to Wikimedia\nNel 2014 Ian Goodfellow ha pubblicato il suo articolo fondamentale sulle Reti Generative Avversarie (GAN), che metteva due reti l\u0026rsquo;una contro l\u0026rsquo;altra in un gioco a somma zero (se uno vince, l\u0026rsquo;altro perde: come nel poker) per creare nuove immagini che fossero simili nell\u0026rsquo;aspetto alle immagini su cui il modello era stato addestrato, ma non uguali.\nZebre vs. cavalli: distinguere i veri dai falsi\nQuesto lavoro ha portato a sviluppi incrementali dell\u0026rsquo;architettura GAN che hanno dato risultati sempre migliori nella sintesi di immagini negli anni successivi, e gli stessi metodi hanno iniziato a essere applicati a nuove applicazioni come la composizione musicale. Sono state sviluppate nuove architetture di modelli sotto forma di reti neurali convoluzionali e ricorrenti (per generazione di testi e video), memorie a breve termine (LSTM) (generazione di testi), trasformers (sempre per generazione di testi) e modelli di diffusione (generazione d\u0026rsquo;immagini).\nSebbene negli ultimi anni siano stati raggiunti risultati significativi in questo settore, tra cui la generazione d\u0026rsquo; immagini fotorealistiche, video deepfake (dove chi parla, è il risultato di un montaggio sintetico) e anche sintesi audio di voci reali perfettamente credibili, è stato solo nella seconda metà del 2022 che sono stati rilasciati alcuni servizi d\u0026rsquo;immagini basati sul concetto di diffusione: (MidJourney, Dall-E 2, Stable Diffusion) sono alcuni, ma c\u0026rsquo;è stato anche, insieme al rilascio di ChatGPT di OpenAI, dei modelli di diffusione di text-to-video (per esempio Make-a-Video) e text-to-3D (come DreamFusion, Magic3D e Get3D), di cui i media hanno preso nota.\nCon questi pochi esempi, abbiamo visto come l\u0026rsquo;impatto dell\u0026rsquo;IA generativa sarà senza dubbio un argomento importante nel 2023. I casi d\u0026rsquo;uso della generazione d\u0026rsquo;immagini, testi, codici, audio, musica, video e modelli 3D che abbiamo visto fino a ora sono solo la punta dell\u0026rsquo;iceberg: nel 2023 arriveranno sicuramente altri casi di utilizzo che rappresenteranno più o meno delle innovazioni, insieme sicuramente al consolidato timore associato alla possibile perdita di posti di lavoro per chi fa attività creative: sarà davvero così, o nasceranno invece nuovi mestieri?\n", "url": "https:\/\/theredcode.it\/intelligenza-artificiale\/generative-ai-roadmap\/" }, "https:\/\/theredcode.it\/dev\/container-sicuri-leggeri-rhel\/": { "title": "Container sicuri e leggeri con RedHat", "tags": ["openshift","kubernetes",], "content": "Perché Il rilascio di applicazioni tramite container leggeri presenta dei vantaggi pratici, dal momento che le immagini contengono tutte le dipendenze necessarie per il corretto funzionamento dell\u0026rsquo;applicazione. Tuttavia, si possono perdere i vantaggi della containerizzazione se queste immagini sono troppo grandi e quindi richiedono diversi minuti per l\u0026rsquo;avvio dell\u0026rsquo;applicazione.\nIn questo post vediamo come utilizzare le Universal Base Images (aka UBI) di Red Hat come base per costruire delle immagini per i vostri container che siano leggere e sicure per le vostre applicazioni.\nCreare applicazioni Red Hat fornisce delle immagini di base per la creazione di applicazioni cloud-based e applicazioni web in container. Con queste immagini, l\u0026rsquo;affidabilità, la sicurezza, le prestazioni e le caratteristiche del ciclo di vita delle immagini sono caratteristiche già integrate e verificate dalle persone che lavorano in quest\u0026rsquo;azienda, per cui è possibile creare un\u0026rsquo;applicazione containerizzata tramite un\u0026rsquo;immagine UBI, pusharla sul proprio registry preferito, condividerla facilmente e distribuirla anche su piattaforme che non siano Red Hat.\nCosa sono Ogni immagine UBI è basata su Red Hat Enterprise Linux (alias RHEL), la distribuzione Linux di livello enterprise più diffusa degli ultimi due decenni. Costruire l\u0026rsquo;immagine del container su una base di software RHEL garantisce che l\u0026rsquo;immagine sia affidabile, sicura e liberamente distribuibile. Non è necessario essere clienti Red Hat per utilizzare o ridistribuire le immagini UBI: basta usarle e lasciare che Red Hat gestisca le immagini di base per voi senza alcun costo.\nDove trovarle Sono facilmente disponibili sia sul Red Hat Container Catalog che sul repository ufficiale di Red Hat di Docker Hub.\nSe dovessimo scegliere tra le due opzioni, si dovrebbe preferire l\u0026rsquo;utilizzo della console del catalogo Red Hat, perché mostra diverse informazioni come la dimensione dell\u0026rsquo;immagine, la versione, i controlli sulla sicurezza, l\u0026rsquo;elenco dei pacchetti presenti, il Dockerfile e le diverse opzioni disponibili per il pull dell\u0026rsquo;immagine.\nQuale immagine utilizzare Le Universal Base Images di Red Hat sono offerte in diversi formati:\n Micro: si tratta di un\u0026rsquo;immagine ridotta che utilizza il gestore di pacchetti dell\u0026rsquo;host sottostante per installare i pacchetti, tipicamente utilizzando Buildah o una build multi-stage con Podman. Minimal: definisce un\u0026rsquo;immagine ridotta che utilizza microdnf come gestore di pacchetti. Standard: immagine pensata e progettata per essere il livello di base per tutte le applicazioni, il middleware e le utility containerizzate. Init: progettata per eseguire un sistema con ID processo pari a 1 (che corrisponde al processo di init di Linux) per l\u0026rsquo;esecuzione di più servizi all\u0026rsquo;interno di un container. Esempio Vediamo un piccolo use case per Python: utilizzeremo un\u0026rsquo;applicazione di esempio che andremo a impacchettare in un\u0026rsquo;immagine UBI.\nIl codice delle applicazioni di esempio, compreso il Dockerfile, è disponibile su questo repository GitHub.\nDi seguito il Dockerfile:\nFROM registry.access.redhat.com/ubi8/ubi RUN yum install -y python3.11-pip-wheel python3.11-wheel python3.11-pip; WORKDIR /app COPY ./requirements.txt ./app ./ RUN mkdir -p /.local; \\ chown -R 1001:0 /.local; \\ chmod -R ug+rwX /.local; \\ \tpip3 install -r requirements.txt; EXPOSE 8000 CMD [\u0026#34;uvicorn\u0026#34;, \u0026#34;main:app\u0026#34;, \u0026#34;--host\u0026#34;, \u0026#34;0.0.0.0\u0026#34;, \u0026#34;--port\u0026#34;, \u0026#34;8000\u0026#34;] Per l\u0026rsquo;esempio di Python abbiamo come immagine di base utilizzata quella standard ufficiale di Red Hat UBI, nella versione 8.\nIl comando yum installa l\u0026rsquo;eseguibile di Python, mentre il comando WORKDIR specifica la directory in cui si trova l\u0026rsquo;applicazione all\u0026rsquo;interno dell\u0026rsquo;immagine del container e il comando RUN esegue l\u0026rsquo;installazione delle dipendenze.\nIl comando COPY copia il file dei requisiti di Python nell\u0026rsquo;immagine UBI, che sarà poi utilizzato dal comando RUN per installare le dipendenze.\nIl comando EXPOSE specifica la porta su cui l\u0026rsquo;applicazione si metterà in ascolto, che solitamente è la 8000 per FastAPI.\nInfine, il comando CMD specifica il comando che verrà eseguito quando il container verrà eseguito.\nDi seguito, riportiamo i comandi per eseguire la build e il run dell\u0026rsquo;immagine:\ndocker build -t python-ubi8 . docker images | grep -i python-ubi8 docker run -it -p 8000:8000 -d python-ubi8 Il comando cURL dovrebbe restituire la seguente risposta:\ncurl -vk http://localhost:8000 \u0026gt;\u0026gt;\u0026gt; * Trying ::1:8000... * TCP_NODELAY set * Connected to localhost (::1) port 8000 (#0) \u0026gt; GET / HTTP/1.1 \u0026gt; Host: localhost:8000 \u0026gt; User-Agent: curl/7.68.0 \u0026gt; Accept: */* \u0026gt; * Mark bundle as not supporting multiuse \u0026lt; HTTP/1.1 200 OK \u0026lt; date: Mon, 19 Jun 2023 09:22:48 GMT \u0026lt; server: uvicorn \u0026lt; content-length: 18 \u0026lt; content-type: application/json \u0026lt; * Connection #0 to host localhost left intact {\u0026#34;Hello\u0026#34;:\u0026#34;World!\u0026#34;} La dimensione finale dell\u0026rsquo;immagine è di soli 320 MB:\n$ docker images \u0026gt;\u0026gt;\u0026gt; REPOSITORY TAG IMAGE ID CREATED SIZE python-ubi8 latest 50c12e1ca549 55 minutes ago 320MB Chiaramente, queste dimensioni potrebbero essere ridotte ulteriormente, utilizzando un\u0026rsquo;immagine UBI in versione minimal, magari con Python pre-installato, come nell\u0026rsquo;esempio seguente:\nFROM registry.access.redhat.com/ubi8/ubi-minimal RUN microdnf install -y python3 WORKDIR /app COPY ./requirements.txt ./app ./ RUN python3 -m pip install -r /app/requirements.txt EXPOSE 8000 CMD [\u0026#34;uvicorn\u0026#34;, \u0026#34;main:app\u0026#34;, \u0026#34;--host\u0026#34;, \u0026#34;0.0.0.0\u0026#34;, \u0026#34;--port\u0026#34;, \u0026#34;8000\u0026#34;] In questo caso, le dimensioni vengono dimezzate, dal momento che i pacchetti non necessari sono già stati rimossi:\n$ docker images \u0026gt;\u0026gt;\u0026gt; REPOSITORY TAG IMAGE ID CREATED SIZE python-ubi8 latest c4f0d7e3049c 8 minutes ago 161MB Conclusioni L\u0026rsquo;utilizzo delle UBI offre maggiore affidabilità, sicurezza e tranquillità per le vostre applicazioni containerizzate.\nInoltre, è possibile distribuire liberamente le applicazioni containerizzate basate su UBI ai vostri amici (e nemici) sia su piattaforme Red Hat che non Red Hat, avvalendosi dei controlli di sicurezza che vengono effettuati periodicamente.\nNell\u0026rsquo;esempio visto in precedenza abbiamo usato una semplice UBI8, ma in realtà ne esistono di già pronte con Python e altri linguaggi già installati e configurati di default: perché non provare?\nRisorse utili Repository GitHub UBI: documentazione ufficiale RHEL: cos\u0026rsquo;è Docker - per cominciare bene con Docker e Kubernetes Kubernetes - Guida per gestire e orchestrare i container ", "url": "https:\/\/theredcode.it\/dev\/container-sicuri-leggeri-rhel\/" }, "https:\/\/theredcode.it\/intelligenza-artificiale\/cheshire-cat-intro\/": { "title": "AI e stregatti: il futuro dei LLM open source", "tags": ["intelligenza-artificiale","chat-gpt",], "content": "Di cosa parliamo Nelle ultime settimane si è parlato moltissimo di ChatGPT come dello strumento perfetto per chi sviluppa, per chi deve scrivere documentazione, ma non ha fantasia -o voglia- e perfino per chi ha bisogno di fare dei riassunti di storia per scuola.\nMan mano che cresce la popolarità di questo strumento, arrivano anche le nuove funzionalità e rilasci, che però lasciano sempre più punti interrogativi: mentre OpenAI sta creando degli standard per utilizzare chat models che si discostano dai modelli di completamento, si crea un vincolo di chiusura verso l\u0026rsquo;utilizzo di OpenAI: chi sviluppa avrà un vincolo sempre più forte con questo prodotto, portando a una scelta molto simile a quel che succede quando ci si affida completamente ai servizi di un qualsiasi provider SaaS.\nIl progetto del Cheshire Cat nasce dall\u0026rsquo;idea di avere un\u0026rsquo;applicazione che permetta di costruire dei sistemi di AI custom utilizzando qualsiasi language model.\n Lo scopo è semplice: chiunque dovrebbe essere in grado di utilizzare il proprio assistente AI alle proprie condizioni.\n Ecco perché Cheshire Cat è rilasciato sotto licenza GPLv3.\nPerché \u0026ldquo;Stregatto\u0026rdquo; Lo Stregatto deriva dal famoso personaggio di Alice nel Paese delle Meraviglie ed è un\u0026rsquo;architettura d\u0026rsquo;intelligenza artificiale costruita sulla base di un LLM (ad esempio ChatGPT, Cohere, Alpaca e così via). Tuttavia, questo progetto estende le capacità di questi modelli.\nLanguage model e memoria In questo caso, il Cheshire Cat è un agente che incorpora due tipi di memoria. Si tratta di memorie episodiche e dichiarative.\nCon \u0026ldquo;memoria episodica\u0026rdquo; si intende il contesto delle cose che l\u0026rsquo;uomo ha detto in passato; parlando di \u0026ldquo;memoria dichiarativa\u0026rdquo;, ci si riferisce al contesto dei documenti che è possibile caricare all\u0026rsquo;interno del Gatto (sì, è possibile caricare e fargli analizzare documenti .txt, .pdf e .md per estendere la sua conoscenza).\nQueste memorie vengono salvate localmente come vettori e caricate quando necessario.\nCome funziona Senza entrare nei dettagli: un language model funziona come un embedder, cioè produce una rappresentazione vettoriale di una stringa; il vettore dell\u0026rsquo;input (o prompt) dell\u0026rsquo;utente viene confrontato con i vettori delle memorie e i vettori più simili vengono recuperati e utilizzati per arricchire il prompt dell\u0026rsquo;utente.\nQuesta tecnica è chiamata Retrieval Augmented Generation.\nEsempio L\u0026rsquo;installazione e l\u0026rsquo;esecuzione di Cat sono piuttosto semplici e già spiegate nella documentazione ufficiale. È sufficiente installare Docker e Docker-compose, per poi clonare il repository ed eventualmente creare un file .env.\nIn questo file si devono memorizzare le chiavi API che saranno impostate come variabili d\u0026rsquo;ambiente.\nQuindi, è sufficiente lanciare tramite Docker-compose lo Stregatto:\ngit clone https://github.com/pieroit/cheshire-cat.git cd cheshire-cat touch .env # opzionale echo \u0026#34;OPENAI_KEY=\u0026lt;paste-your-api-here\u0026gt;\u0026#34; \u0026gt; .env # opzionale docker compose up Questo è quanto. L\u0026rsquo;applicazione sarà disponibile tramite il browser all\u0026rsquo;indirizzo http://localhost:1865/admin\n Nota: La prima volta (solamente la prima) ci potrebbero volere alcuni minuti per eseguire la build delle immagini, poiché queste occupano alcuni GB.\n Configurazione Come prima cosa, il Gatto vi chiederà di configurare il vostro modello preferito. È possibile farlo direttamente tramite l\u0026rsquo;interfaccia della pagina \u0026ldquo;Impostazioni\u0026rdquo; (in alto a destra nella pagina amministrativa).\nQui sono disponibili diversi modelli: Cohere, HuggingFace e Anthropic.\nNel caso di esempio, usiamo OpenAI e inseriamo quindi l\u0026rsquo;API Key che è possibile reperire sul sito ufficiale tramite questo link (questo al posto del file .env!):\nUltimata la configurazione, torniamo nella pagina principale del Cheshire Cat e testarlo, facendo qualche domanda, e cominciamo dal semplice: \u0026ldquo;cosa dovrei fare con te?\u0026rdquo;:\nTip Non scontata è la possibilità di utilizzare questo strumento anche fornendo input in lingue diverse: se scrivo in italiano e chiedo allo Stregatto se è possibile mangiare della pizza con l\u0026rsquo;ananas, mi risponde in maniera molto \u0026ldquo;diplomatica\u0026rdquo;:\nMa andiamo avanti: chiediamo di fornire una filastrocca in inglese, e questo è il risultato:\nSi tratta di una canzoncina piuttosto conosciuta per chi parla la lingua inglese, ma proviamo a richiedere la stessa cosa in italiano:\nLa risposta è più che soddisfacente.\nIn questo ultimo esempio, notiamo anche un altro paio di caratteristiche estremamente importanti di questo strumento: la memoria e il contesto, fondamentali per qualsiasi modello che lavora con il linguaggio.\nNella pagina relativa alla memoria, sarà possibile infatti vedere la proiezione in 2d dei ricordi ed esportarli, così da 1) avere controllo sul modello che, ricordiamo, è locale e 2) gestire quanto configurato dal sistema.\nConclusioni Questo è solo l\u0026rsquo;inizio della sperimentazione con Cheshire Cat.\n Anche se ancora in evoluzione, le possibilità sembrano vaste. Ricercatori, sviluppatori e aziende che desiderano creare applicazioni AI personalizzate dovrebbero considerare di dare un\u0026rsquo;occhiata allo Stregatto sotto il suo cappello peloso.\n Ma attenzione\u0026hellip; questo gatto ha un lato giocoso e potrebbe condurvi in qualche tana di coniglio inaspettata! 😸\n Resta da vedere se si tratta di altre disavventure o di magia. Per ora, lo Stregatto sembra felice di chiacchierare.\nTra l\u0026rsquo;altro, ricordiamo che questo tool è già su container, e non vediamo l\u0026rsquo;ora atterri anche come utility su strumenti come #Kubernetes e #OpenShift.\nE mentre ChatGPT avanza, un grande augurio va a questo progetto e a tutte le persone che contribuiscono attivamente alla sua realizzazione. Forza, \u0026ldquo;è tardi, tardi, TARDI!\u0026rdquo;\nvia GIPHY\nRisorse utili Documentazione ufficiale Video di intro Community su Discord ", "url": "https:\/\/theredcode.it\/intelligenza-artificiale\/cheshire-cat-intro\/" }, "https:\/\/theredcode.it\/tags\/chat-gpt\/": { "title": "chat-gpt", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/tags\/chat-gpt\/" }, "https:\/\/theredcode.it\/categories\/chat-gpt\/": { "title": "chat-gpt", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/categories\/chat-gpt\/" }, "https:\/\/theredcode.it\/kubernetes\/come-k8s-crea-un-pod\/": { "title": "Come Kubernetes crea un pod", "tags": ["kubernetes","openshift",], "content": "Kubernetes è composto da più componenti che interagiscono tra loro per compiere diverse attività, come il deploy di un Deployment o un servizio.\nCos\u0026rsquo;è che succede quando un utente richiede che un pod venga creato? Vediamo step-by-step come funziona!\nCosa vedrai Concetti di base In Kubernetes esistono due tipi di nodi: i nodi control plane e i nodi computazionali: i primi sono quelli che si occupano di gestire il cluster, mentre i secondo faranno da backup del cluster di Kubernetes. Se questa definizione ti sembra generica, a breve vedremo nel dettaglio quali sono gli attori che muovono le fila dietro questi nodi.\n In un ambiente di produzione, il cluster avrà almeno 3 nodi control plane.\n Negli step successivi andremo ad analizzare come avviene la creazione di un pod a partire da un cluster con un nodo control plane e due nodi computazionali.\nCome funziona Immaginiamo un/una utente che, tramite il comando kubectl richiede la creazione di un pod. L\u0026rsquo;istruzione kubectl si collegherà al server Kube API e sarà pronto per lavorare con il cluster.\nIl primo step consiste, da parte del componente kube-api, nell\u0026rsquo;autenticare l\u0026rsquo;utente e convalidare la sua richiesta per verificare che abbia i permessi per poter procedere. Una volta che questo passaggio è stato smarcato, comunica a etcd la richiesta e questa verrà inserita all\u0026rsquo;interno del datastore di modo che si proceda alla sua esecuzione.\nNel frattempo, kube-api comunica all\u0026rsquo;utente che la creazione è in esecuzione, anche se siamo ancora all\u0026rsquo;inizio del processo. Questo avviene perché sia kube-api che etcd hanno definito lo stato desiderato in cui il sistema dovrà essere.\nQuesto vuol dire che tutti i componenti lavoreranno affinché lo stato desiderato sia quello reale e attuale, una volta terminate le operazioni necessarie al completamente della richiesta.\nOra è il turno dello scheduler: questo si occupa di tenere d\u0026rsquo;occhio le richieste di possibili task che devono essere eseguiti e scegliere su quale nodo questi andranno. Per farlo, richiede a kube-api a intervalli regolari (circa 5 secondi) se ci siano attività da svolgere e, in tal caso, si occupa della loro pianificazione.\nUna volta che questa richiesta arriva e che lo scheduler deve eseguirla, comunica con i nodi computazionali grazie a kubelet: questo componente permette infatti a nodi control plane e compute di interagire attraverso kube-api.\nTra i diversi compiti di kubelet, c\u0026rsquo;è il controllo periodico dello stato dei nodi, così da informarmare kube-api in caso di problematiche, nonché la creazione dei diversi oggetti.\nAll\u0026rsquo;interno dei nodi compute c\u0026rsquo;è inoltre un componente che lavorerà come motore di esecuzione dei container: questo è storicamente associato a Docker, anche se spesso si tratta di Podman e comunque può essere una delle tante tecnologie conformi alla OCI.\nL\u0026rsquo;ultimo componente nei nodi compute è kube-proxy: questo va citato anche se non strettamente necessario all\u0026rsquo;esempio di questo articolo, ma perché parte del funzionamento tra nodi compute: si occupa infatti di gestire la presenza di attività che coinvolgono più nodi compute all\u0026rsquo;interno del cluster.\nTornando allo scheduler, questo andrà a valutare quali nodi compute sono disponibili, escludendo quelli che non hanno abbastanza risorse per il pod che deve essere creato, o che magari sono stati esclusi dall\u0026rsquo;amministratore del cluster per diversi motivi.\nUna volta scelto il nodo su cui eseguire l\u0026rsquo;attività, comunica la sua decisione a kube-api: questo, a sua volta, inserirà l\u0026rsquo;informazione su etcd e una volta che lo stato desiderato sarà quindi parte del datastore, si proseguirà per far sì che questo diventi lo stato attuale.\nIl server kube-api comunicherà quindi con il kubelet del nodo compute che si occuperà della creazione del pod secondo la scelta eseguita dallo scheduler: a questo punto, kubelet e CRI (che sta per Container Runtime Interface) lavoreranno congiuntamente per creare il pod.\n Cosa succede se il pod va in errore e la sua politica di riavvio prevede che venga avviato automaticamente?\n Entra in gioco l\u0026rsquo;ultimo componente di Kubernetes, ossia il controller-manager: questo è composto dall\u0026rsquo;unione dei controller, il quale, come lo scheduler, comunica con kube-api per tenere sotto controllo il numero di repliche presenti all\u0026rsquo;interno del cluster.\nIn tal caso, verificando che uno dei pod è andato in errore e che lo stato attuale e quello desiderato non corrispondono -grazie ai dati presenti in etcd, andrà a fare richiesta per la creazione di un nuovo pod con le caratteristiche di quello andato in errore.\n Se ti è piaciuto questo articolo, non ti dimenticare di commentare e condividere! ⬇️\n Risorse utili Docker - per cominciare bene con Docker e Kubernetes Kubernetes - Guida per gestire e orchestrare i container Come installare Docker (e Docker Compose) Esplorando il Dockerfile Canale di Emmecilab ", "url": "https:\/\/theredcode.it\/kubernetes\/come-k8s-crea-un-pod\/" }, "https:\/\/theredcode.it\/database\/table-partitioning-postgresql\/": { "title": "Table partitioning in PostgreSQL", "tags": ["database","postgresql",], "content": "Se il concetto di ereditarietà permette di creare una relazione tra una o più tabelle, il partizionamento ne consente una suddivisione logica che si adatta meglio alle esigenze di business.\nPartizionare la tabella, chiamato table partitioning, significa dividere una tabella in pezzi più piccoli.\nIl partizionamento delle tabelle offre molti vantaggi in termini di prestazioni per le tabelle che contengono grandi quantità di dati.\nE, indovina un po\u0026rsquo;? PostgreSQL consente il partizionamento delle tabelle tramite l\u0026rsquo;ereditarietà delle tabelle.\nOgni partizione viene creata come tabella figlia di una singola tabella genitore.\nUn esempio potrebbe essere quello delle prenotazioni effettuate da un\u0026rsquo;agenzia di viaggi internazionale: tenendo in una tabella unica tutte le prenotazioni eseguite nel corso della sua attività, la lista rischia di allungarsi di molto nel giro di poco tempo.\nPer questo, creare delle tabelle partizionate per anno/mese, permette alle persone che vi lavorano di recuperare le informazioni più velocemente, e quindi migliorare anche le prestazioni del database.\nEsempio Riprendendo l\u0026rsquo;esempio fatto in precedenza, immaginiamo di voler memorizzare le informazioni di tutti i voli prenotati nel corso dell\u0026rsquo;attività dell\u0026rsquo;agenzia, con il relativo numero di volo, compagnia, stato del volo e data di prenotazione: creiamo la tabella bookings con queste informazioni.\nCREATE TABLE bookings(id serial, flightno int, flightcompany varchar(100), status varchar(100), booking_date timestamp) Creiamo anche una serie di tabelle che rappresentino i voli per anno e mese, e che ci permettano di suddividere i dati attraverso più \u0026ldquo;elenchi\u0026rdquo;, di dimensione ridotta: nella creazione delle tabelle, specifichiamo di creare la tabella esattamente come quella originale, ma con un controllo sulle date inserite:\nCREATE TABLE bookings_2023_jan(check(booking_date \u0026gt;= \u0026#39;2023-01-01\u0026#39; AND booking_date \u0026lt;= \u0026#39;2023-01-31\u0026#39;)) inherits(bookings); CREATE TABLE bookings_2023_feb(check(booking_date \u0026gt;= \u0026#39;2023-02-01\u0026#39; AND booking_date \u0026lt;= \u0026#39;2023-02-28\u0026#39;)) inherits(bookings); CREATE TABLE bookings_2023_mar(check(booking_date \u0026gt;= \u0026#39;2023-03-01\u0026#39; AND booking_date \u0026lt;= \u0026#39;2023-03-31\u0026#39;)) inherits(bookings); ... Se usi pgAdmin come client per accedere al tuo database, questo è quello che vedrai nel menù di sinistra: due frecce accanto alle tabelle, dove le tabelle derivate riportano una freccia in entrata per indicare che sono create a partire da quella principale, ossia bookings:\nA questo punto, applichiamo un barbatrucco per poter partizionare i nostri dati all\u0026rsquo;inserimento: creiamo una procedura che, verificati i dati che stanno per essere inseriti all\u0026rsquo;interno della tabella bookings, procediamo ad inserire i dati nella tabella corretta, secondo la data specificata nel campo booking_date:\ncreate or replace function on_insert() returns trigger as $$ begin if (new.booking_date \u0026gt;= timestamp \u0026#39;2023-01-01\u0026#39; and new.booking_date \u0026lt;= timestamp \u0026#39;2023-01-31\u0026#39;) then insert into bookings_2023_jan values(new.*) ; elsif (new.booking_date \u0026gt;= timestamp \u0026#39;2023-02-01\u0026#39; and new.booking_date \u0026lt;= timestamp \u0026#39;2023-02-28\u0026#39;) then insert into bookings_2023_feb values(new.*) ; elsif (new.booking_date \u0026gt;= timestamp \u0026#39;2023-03-01\u0026#39; and new.booking_date \u0026lt;= timestamp \u0026#39;2023-03-31\u0026#39;) then insert into bookings_2023_mar values(new.*) ; else raise \u0026#39;Enter valid booking date\u0026#39; ; end if; return null; end; $$ LANGUAGE plpgsql; All\u0026rsquo;interno di questa funzione, andiamo a specificare quali sono i controlli da eseguire sul campo booking_date all\u0026rsquo;interno dell\u0026rsquo;oggetto denominato new: questo contiene i dati inseriti dall\u0026rsquo;utente che richiede l\u0026rsquo;aggiunta di un nuovo record nella tabella, e ne riporta le informazioni principali. Per ogni mese, andiamo a creare un ramo if e terminiamo, eventualmente, con un messaggio di errore, che riporta di creare una prenotazione che segua una data valida tra quelle che si vogliono memorizzare.\nQuesta funzione è una funzione \u0026ldquo;speciale\u0026rdquo;, perché va a restituire un trigger: si tratta di un oggetto che si attiva e scatena delle operazioni non appena vengono rilevate delle azioni particolari. In questo caso, andiamo infatti a creare un trigger che, all\u0026rsquo;inserimento di un nuovo record nella tabella bookings, vada a richiamare la funzione appena creata, così che i dati vengano correttamente inseriti nella tabella partizione:\ncreate trigger booking_entry before insert on bookings for each row execute procedure on_insert(); Inserimento Proviamo a inserire dei dati, e vediamo cosa succede:\nINSERT INTO bookings(flightno, flightcompany, status, booking_date) VALUES (12345, \u0026#39;AirCanada\u0026#39;, \u0026#39;Ontime\u0026#39;,\u0026#39;2023-01-07\u0026#39;); INSERT INTObookings(flightno, flightcompany, status, booking_date) VALUES (67890, \u0026#39;Lufhtansa\u0026#39;, \u0026#39;Ontime\u0026#39;,\u0026#39;2023-02-16\u0026#39;); INSERT INTO bookings(flightno, flightcompany, status, booking_date) \tVALUES (13579, \u0026#39;Vueling\u0026#39;, \u0026#39;Delayed\u0026#39;,\u0026#39;2023-03-09\u0026#39;); Riportando l\u0026rsquo;elenco delle singole tabelle, vediamo che i record sono stati inseriti correttamente:\nSELECT * FROM bookings_2023_feb; \u0026gt;\u0026gt;\u0026gt; 2\t67890\t\u0026#34;Lufhtansa\u0026#34;\t\u0026#34;Ontime\u0026#34;\t\u0026#34;2023-02-16 00:00:00\u0026#34; Notiamo l\u0026rsquo;ID del record del mese di febbraio: è pari a 2, e non 1, nonostante sia l\u0026rsquo;unico della tabella. Questo perché in PostgreSQL, quando si eredita una colonna che ha come tipo di dato serial dalla tabella genitore, la sequenza è condivisa dalla tabella genitore e figlia.\nQuesto vuol dire che se riprendiamo il concetto di ereditarietà, ci aspettiamo che tutti i record inseriti finora siano 3:\nSELECT * FROM bookings; \u0026gt;\u0026gt;\u0026gt; 1\t12345\t\u0026#34;AirCanada\u0026#34;\t\u0026#34;Ontime\u0026#34;\t\u0026#34;2023-01-07 00:00:00\u0026#34; 3\t67890\t\u0026#34;Lufhtansa\u0026#34;\t\u0026#34;Ontime\u0026#34;\t\u0026#34;2023-02-16 00:00:00\u0026#34; 4\t13579\t\u0026#34;Vueling\u0026#34;\t\u0026#34;Delayed\u0026#34;\t\u0026#34;2023-03-09 00:00:00\u0026#34; Allo stesso modo, utilizzando l\u0026rsquo;operatore ONLY, visto nell\u0026rsquo;articolo dedicato all\u0026rsquo;ereditarietà, noteremo che la tabella è vuota:\nSELECT * FROM ONLY bookings; \u0026gt;\u0026gt;\u0026gt; Questo perché la funzione creata in precedenza interviene prima che il record sia inserito in bookings e lo smista nella tabella corretta, portando due vantaggi: i dati sono correttamente partizionati all\u0026rsquo;origine dell\u0026rsquo;inserimento, senza la necessità di avere informazioni duplicate, e di conseguenza non si va a riempire la tabella principale di dati che la renderebbero un elefante a 6 gambe.\nRisorse utili Libro sulle Basi di Dati (edito da Apogeo) Documentazione ufficiale If-else in Postgresql ", "url": "https:\/\/theredcode.it\/database\/table-partitioning-postgresql\/" }, "https:\/\/theredcode.it\/intelligenza-artificiale\/medspacy-intro\/": { "title": "Una libreria al giorno toglie il medico di torno", "tags": ["intelligenza-artificiale",], "content": "Intro L\u0026rsquo;analisi del linguaggio naturale rappresenta un campo con una miriade di opportunità per casi d\u0026rsquo;uso nella vita di tutti i giorni: uno dei migliori esempi è il settore sanitario, dove la ricerca medica e la cura del paziente possono contare su diverse tecnologie che possono migliorare le informazioni che sono già state raccolte. Molte aziende sfruttano software proprietario o sotto licenza a pagamento, ma quali sono le alternative open source?\nScopriamo MedSpaCy, una libreria di strumenti per eseguire delle attività di NLP sul dominio clinico sfruttando un caso d\u0026rsquo;uso reale!\nmedspaCy MedSpaCy è uno strumento di libreria per l\u0026rsquo;esecuzione di attività di NLP clinica e di elaborazione del testo.\nRiunisce una serie di altri strumenti, ciascuno dei quali implementa funzionalità specifiche per l\u0026rsquo;elaborazione di testi clinici comuni come la segmentazione delle frasi, l\u0026rsquo;analisi contestuale e la segmentazione del testo.\nQuesta libreria viene progettata per essere utilizzato come parte della pipeline di elaborazione spaCy, una delle più conosciute librerie di analisi del linguaggio naturale.\nIn questo post, ci concentriamo su un task in particolare, ossia quello del riconoscimento delle entità -in inglese Named Entity Recognition (aka NER)- ossia un\u0026rsquo;attività che contrassegna le entità nel testo con il tipo corrispondente.\n Esempio: pneumonia potrebbe essere classificato come \u0026ldquo;problema\u0026rdquo;, così come warfarin come \u0026ldquo;medicinale\u0026rdquo;.\n Si tratta di un\u0026rsquo;attività piuttosto semplice, anche se spesso non riesce a lavorare bene su un testo molto specifico, come quello relativo al campo della salute e della medicina.\nInstallazione Tramite pip, è super semplice:\npip install medspacy Tieni presente, tuttavia, che hai bisogno di https://spacy.io/ versione 3 e pyrush come requisiti per l\u0026rsquo;installazione di medspaCy.\nNER Vediamo un esempio di come addestrare il modello giò presente usando il TargetMatcher, un componente che serve per fornire delle regole ulteriori alla pipeline che andremo a utilizzare.\nL\u0026rsquo;obiettivo è quello di creare un piccolo sistema che estragga da un testo le entità cliniche e le evidenzi, come mostrato nella figura seguente, dove vengono etichettati problemi (intesi come problemi clinici), trattamenti ed eventuali problemi negati, quindi condizioni che il/la paziente non presenta.\nAndiamo per gradi: per prima cosa, importiamo le librerie necessarie\nimport medspacy from medspacy.ner import TargetMatcher, TargetRule from medspacy.visualization import visualize_ent import pandas as pd In questo caso, andiamo a importare MedSpaCy insieme al TargetRule, che ci permette di specificare delle regole o dei pattern per alimentare il modello già addestrato. Inoltre, andiamo a importare una libreria di utility, come pandas, per poter lavorare al meglio con i dati che abbiamo in input.\nNel prossimo passaggio, andiamo a caricare il modello di default dalla libreria e selezioniamo il componente TargetMatcher nella pipeline:\nnlp = medspacy.load() target_matcher = nlp.get_pipe(\u0026#34;medspacy_target_matcher\u0026#34;) A questo punto, dobbiamo caricare il dataset che contiene i dati che vogliamo esaminare: nel caso di esempio, ne andremo a utilizzare uno presente su Kaggle che contiene una serie di diagnosi più o meno specifiche. Il dataset è un file .dat composto da diverse righe, ognuna delle quali contiene una diagnosi diversa, e non ha alcuna intestazione: per questo, usiamo il metodo read_table di pandas per caricare queste informazioni, specificando che la prima riga è già un dato e non un\u0026rsquo;intestazione.\ndf = pd.read_table(\u0026#34;./input/test.dat\u0026#34;, header=None) Ora è il momento di specificare delle regole per il riconoscimento delle entità: per esempio, vogliamo identificare surgery come un trattamento, e stroke come un problema: costruiamo una TargetRule e specifichiamo sia la categoria a cui appartiene, sia il termine da utilizzare:\ntarget_rules = [ TargetRule(\u0026#34;surgery\u0026#34;, \u0026#34;TREATMENT\u0026#34;), TargetRule(\u0026#34;stroke\u0026#34;, \u0026#34;PROBLEM\u0026#34;) ] Queste regole possono essere complesse a piacere: è possibile infatti specificare anche dei pattern da rispettare, piuttosto che l\u0026rsquo;opzionalità di uno o più termini: nel seguente esempio, riportiamo che la parola tumor potrebbe essere preceduta da infiltrative o myofibroblastic, termini che possono comparire 0 o una volta.\ntarget_rules = [ \tTargetRule(\u0026#34;myofibroblastic tumor\u0026#34;, category=\u0026#34;CONDITION\u0026#34;, pattern=[ {\u0026#34;LOWER\u0026#34;: {\u0026#34;IN\u0026#34;: [\u0026#34;infiltrative\u0026#34;, \u0026#34;myofibroblastic\u0026#34;]}, \u0026#34;OP\u0026#34;: \u0026#34;?\u0026#34;}, {\u0026#34;LOWER\u0026#34;: \u0026#34;tumor\u0026#34;}, ]) ] Una volta aggiunte le regole con le entità del dominio d\u0026rsquo;interesse, andiamo ad aggiungere queste regole al componente della pipeline che abbiamo caricato in precedenza:\ntarget_matcher.add(target_rules) L\u0026rsquo;ultimo step consiste nel testare il modello: è sufficiente utilizzare la funzione nlp per recuperare il Document prodotto dalla libreria, che contiene le entità rilevate e le informazioni a esso associate.\nPer il caso di esempio, andiamo a stampare il nome dell\u0026rsquo;entità e se questa fa parte di un contesto di negazione (un problema che il/la paziente non presenta), e poi utilizziamo la funzione visualize_ent per riportare il testo con le etichette evidenziate, rispetto al testo fornito come input: utilizzando un testo diverso da quello presente nel dataset, questo è quello che otteniamo:\ntext = \u0026#34;\u0026#34;The lesion could not be totally resected. Not an benign tumor, but a inflammatory myofibroblastic tumor was suspected, so steroid pulse therapy was not introduced, but it was ineffective. Two months after the referral to our department, endoscopic transsphenoidal surgery was performed. Gamma Knife radiosurgery (marginal dose 15 Gy, maximum dose 30.1 Gy) was performed, and chemotherapy with tamoxifen and sulindac was introduced...\u0026#34; doc = nlp(text) for ent in doc.ents: print(ent, ent._.is_negated) visualize_ent(doc) L\u0026rsquo;esempio è banale, quanto efficace: con una persona esperta di dominio, è possibile personalizzare il modello per un contesto più specifico e riuscire a individuare le entità cliniche, così da utilizzare il sistema per molteplici obiettivi: un caso può essere quello di uno strumento per fornire un primo consulto rapido per uno strumento che consente una conversazione tra paziente e professionista, dove la persona curante può utilizzare questo sistema come ausilio per le sue attività.\nRisorse utili Documentazione ufficiale Repo ufficiale Esempio completo Dataset di esempio ", "url": "https:\/\/theredcode.it\/intelligenza-artificiale\/medspacy-intro\/" }, "https:\/\/theredcode.it\/database\/table-inheritance-postgresql\/": { "title": "Table inheritance in PostgreSQL", "tags": ["database","postgresql",], "content": "Il concetto di ereditarietà nella programmazione orientata agli oggetti è un qualcosa di piuttosto popolare: permette infatti di creare una relazione di dipendenza e gerarchia tra due entità, denominate -ad esempio- genitore e figlio.\nQuesto vuol dire che, a partire dall\u0026rsquo;entità genitore, sarà possibile ereditare tutte le caratteristiche: attributi, tipo di dati e, nel caso della programmazione, anche le funzioni.\nCome possiamo implementare la stessa logica all\u0026rsquo;interno di PostgreSQL?\nTramite il concetto di table inheritance.\nDefinizione L\u0026rsquo;ereditarietà delle tabelle consente alle tabelle figlie di ereditare tutte le colonne della tabella genitore.\nUna tabella figlia può ovviamente avere campi aggiuntivi oltre alle colonne ereditate, ma non richiede la ricreazione di queste da zero.\nCome funziona Vediamo un esempio: la tabella animals definisce un caso abbastanza generico di rappresentazione degli animali, con un ID, un nome e un\u0026rsquo;età:\nCREATE TABLE animals(id serial, age int, name varchar(100)) A seguito, potremmo voler declinare gli animali nelle diverse specie che ci vengono in mente: dogs, ad esempio, i quali hanno una propria razza, ed eventualmente un microchip. In questo caso, nell\u0026rsquo;istruzione di creazione della tabella, utilizziamo la parola inherits, che stabilisce da quale tabella ereditare le colonne. In questo caso, da animals:\nCREATE TABLE dogs(breed varchar(100), microchip boolean) inherits(animals) Inseriamo degli animali all\u0026rsquo;interno della tabella principale e di quella figlia:\nINSERT INTO animals(age, name) VALUES(3, \u0026#39;Zoe\u0026#39;); INSERT INTO animals(age, name) VALUES(7, \u0026#39;Zach\u0026#39;); INSERT INTO animals(age, name) VALUES(1, \u0026#39;Zed\u0026#39;); INSERT INTO dogs(age, name, breed, microchip) VALUES(1, \u0026#39;Dom\u0026#39;, \u0026#39;Bernese mountain dog\u0026#39;, true); INSERT INTO dogs(age, name, breed, microchip) VALUES(1, \u0026#39;Jack\u0026#39;, \u0026#39;Jack Russell\u0026#39;, true); Se usi pgAdmin come client per accedere al tuo database, questo è quello che vedrai nel menù di sinistra: due frecce accanto alle tabelle, dove la tabella animals riporta una freccia in uscita per indicare che ha delle tabelle che ereditano le sue proprietà, e al contrario dogs ne ha una in entrata:\nElenco Finora, nulla di eccezionale. Vediamo però come cambiano le cose quando si usa questa tipologia di rappresentazione, e proviamo ad elencare tutti i record presenti nella tabella \u0026ldquo;principale\u0026rdquo;:\nSELECT id, age, name \tFROM public.animals; \u0026gt;\u0026gt;\u0026gt; id age name 1\t3\t\u0026#34;Zoe\u0026#34; 2\t7\t\u0026#34;Zach\u0026#34; 3\t1\t\u0026#34;Zed\u0026#34; 4\t1\t\u0026#34;Dom\u0026#34; 5\t1\t\u0026#34;Jack\u0026#34; Vengono riportati 5 animali, e non 3, come quelli inseriti per la tabella animals: questo perché, di base, PostgreSQL andrà a restituire tutte le entità che afferiscono a quella tabella, comprese quelle \u0026ldquo;derivate\u0026rdquo;, come gli oggetti presenti in dogs.\nSe volessimo però restringere il campo ai soli animali, potremmo usare un\u0026rsquo;istruzione speciale: only.\nSELECT id, age, name \tFROM only public.animals; \u0026gt;\u0026gt;\u0026gt; id age name 1\t3\t\u0026#34;Zoe\u0026#34; 2\t7\t\u0026#34;Zach\u0026#34; 3\t1\t\u0026#34;Zed\u0026#34; La parola chiave \u0026ldquo;only\u0026rdquo; può essere usata per indicare che la query deve essere applicata solo a una particolare tabella e non a qualsiasi altra tabella.\nNotare un aspetto interessante: in PostgreSQL, quando si eredita una colonna che ha come tipo di dato serial dalla tabella genitore, la sequenza è condivisa dalla tabella genitore e figlia.\nQuesto vuol dire che se inserissimo un nuovo animale nella tabella dogs, questo assumerebbe ID 7; se poi ne inserissimo uno nella tabella principale animals, questo avrebbe ID 8. Questo avviene anche per evitare che, nel rappresentare le diverse entità, gli ID delle due tabelle, vadano in conflitto.\nModifica Chiaramente, questo vuol dire che qualsiasi aggiornamento o cancellazione della tabella dei genitori non ha effetto solo sui record della tabella dei figli, ma anche su quella principale. Un esempio come il seguente risulta nella modifica di tutti i record presenti, compresi quelli presenti in dogs, del campo age delle due tabelle:\nUPDATE animals SET age=3 Per aggiornare solo i dati di una tabella, è sufficiente utilizzare l\u0026rsquo;operatore visto in precedenza:\nUPDATE ONLY animals SET age=3 Cascade E se provassimo a cancellare la tabella animals? Questo sarebbe il risultato:\nDROP TABLE animals; Questo perché il database tiene conto della relazione che c\u0026rsquo;è tra le tabelle e riporta che dogs dipende da animals, pertanto non è possibile procedere in questo modo alla cancellazione, se non cancellando prima le tabelle figlie.\nPer procedere comunque ed eliminare tutte le tabelle, è possibile specificare di eseguire il DROP anche delle tabelle dipendenti, con l\u0026rsquo;istruzione CASCADE:\nDROP TABLE animals CASCADE; Risorse utili Documentazione ufficiale Libro sulle Basi di Dati (edito da Apogeo) ", "url": "https:\/\/theredcode.it\/database\/table-inheritance-postgresql\/" }, "https:\/\/theredcode.it\/kubernetes\/label-selector-kubernetes-openshift\/": { "title": "Label e selector in Kubernetes", "tags": ["kubernetes","openshift",], "content": "In che modo può esserci utile sfruttare le label e i selector per poter gestire i componenti all\u0026rsquo;interno di un cluster basato su Kubernetes?\nAnalizziamo il concetto di label e di selector, attraverso qualche esempio.\nIntro Le label sono coppie chiave-valore collegate a pod, controller di replica e servizi. Vengono utilizzati come attributi identificativi per oggetti come pod e controller di replica. Possono essere aggiunti a un oggetto al momento della creazione e possono essere aggiunti o modificati in fase di esecuzione.\nLe label non forniscono unicità. In generale, possiamo dire che molti oggetti possono portare le stesse label. Il selector è il modo in cui è possibile raggruppare delle risorse in Kubernetes (così come in OpenShift).\nL\u0026rsquo;API Kubernetes attualmente supporta due tipi di selettori:\n Selettori basati sull\u0026rsquo;uguaglianza Selettori basati su insiemi di valori Di base, è quindi possibile utilizzare diversi operatori per poter selezionare le risorse che ci interessano: operatori come \u0026ldquo;!=\u0026rdquo;, \u0026ldquo;=\u0026rdquo; o \u0026ldquo;==\u0026rdquo;, che corrispondono relativamente all\u0026rsquo;operatore di diseguaglianza e di uguaglianza (gli ultimi due sono sinonimi).\nCome funziona Colleghiamoci al cluster e recuperiamo tutte le label associate ai Pod del progetto corrente: questo è possibile tramite l\u0026rsquo;opzione show-labels.\nkubectl get pods --show-labels \u0026gt;\u0026gt;\u0026gt; NAME READY STATUS RESTARTS AGE LABELS nodejs-postgresql-example-1-build 0/1 Completed 0 4m35s openshift.io/build.name=nodejs-postgresql-example-1 nodejs-postgresql-example-1-deploy 0/1 Completed 0 3m11s openshift.io/deployer-pod-for.name=nodejs-postgresql-example-1 nodejs-postgresql-example-1-jjcn8 1/1 Running 0 3m6s app.openshift.io/runtime=nodejs,deployment=nodejs-postgresql-example-1,deploymentconfig=nodejs-postgresql-example,name=nodejs-postgresql-example postgresql-1-deploy 0/1 Completed 0 4m35s openshift.io/deployer-pod-for.name=postgresql-1 postgresql-1-fsw24 1/1 Running 0 4m31s deployment=postgresql-1,deploymentconfig=postgresql,name=postgresql Se volessimo riportare solo i Pod che fanno parte della webapp Node.js, potremmo utilizzare una di quelle che sono state assegnate e, tramite l\u0026rsquo;opzione \u0026ndash;selector, potremmo elencare tutti i Pod relativi a Node.js che hanno una label con chiave deployment e valore nodejs-postgresql-example-1:\nkubectl get pods --show-labels --selector=\u0026#34;deployment=nodejs-postgresql-example-1\u0026#34; # or kubectl get pods --show-labels -l=\u0026#34;deployment=nodejs-postgresql-example-1\u0026#34; # or kubectl get pods --show-labels -l \u0026#34;deployment=nodejs-postgresql-example-1\u0026#34; \u0026gt;\u0026gt;\u0026gt; NAME READY STATUS RESTARTS AGE LABELS nodejs-postgresql-example-1-jjcn8 1/1 Running 0 9m48s app.openshift.io/runtime=nodejs,deployment=nodejs-postgresql-example-1,deploymentconfig=nodejs-postgresql-example,name=nodejs-postgresql-example Piccola nota: l\u0026rsquo;opzione \u0026ndash;show-labels non è necessaria, ma serve a confermare l\u0026rsquo;output ottenuto!\nCon questa opzione è possibile specificare anche più di una label contemporaneamente, per essere sicuri/e di matchare tutte le risorse che ci interessano, separando le chiavi con i valori da una virgola:\nkubectl get pods --show-labels -l \u0026#34;deployment=postgresql-1,name=postgresql\u0026#34; NAME READY STATUS RESTARTS AGE LABELS postgresql-1-fsw24 1/1 Running 0 23m deployment=postgresql-1,deploymentconfig=postgresql,name=postgresql Se invece volessimo selezionare tutti gli oggetti che hanno la chiave deployment, sarebbe sufficiente utilizzare la seguente opzione:\nkubectl get pods --show-labels --selector=\u0026#34;deployment\u0026#34; \u0026gt;\u0026gt;\u0026gt; NAME READY STATUS RESTARTS AGE LABELS nodejs-postgresql-example-1-jjcn8 1/1 Running 0 10m app.openshift.io/runtime=nodejs,deployment=nodejs-postgresql-example-1,deploymentconfig=nodejs-postgresql-example,name=nodejs-postgresql-example postgresql-1-fsw24 1/1 Running 0 12m deployment=postgresql-1,deploymentconfig=postgresql,name=postgresql Inoltre, è possibile utilizzare l\u0026rsquo;opzione \u0026ndash;selector anche per specificare più di un valore che ci si aspetta per una certa chiave: nel seguente esempio, andiamo a riportare tutti i Pod che hanno una chiave name il cui valore è postgresql o nodejs-postgresql-example.\nkubectl get pods --show-labels --selector=\u0026#34;name in (postgresql, nodejs-postgresql-example)\u0026#34; \u0026gt;\u0026gt;\u0026gt; NAME READY STATUS RESTARTS AGE LABELS nodejs-postgresql-example-1-jjcn8 1/1 Running 0 13m app.openshift.io/runtime=nodejs,deployment=nodejs-postgresql-example-1,deploymentconfig=nodejs-postgresql-example,name=nodejs-postgresql-example postgresql-1-fsw24 1/1 Running 0 14m deployment=postgresql-1,deploymentconfig=postgresql,name=postgresql E come fare per escludere una label tra quelle di cui non vogliamo riportare le risorse? Possiamo utilizzare l\u0026rsquo;operatore di disuguaglianza \u0026ldquo;!=\u0026rdquo;, come mostrato di seguito: nell\u0026rsquo;output avremo tutti quei Pod che non hanno una chiave deployment con il valore specificato:\nkubectl get pods --show-labels --selector=\u0026#34;deployment!=nodejs-postgresql-example-1\u0026#34; \u0026gt;\u0026gt;\u0026gt; NAME READY STATUS RESTARTS AGE LABELS nodejs-postgresql-example-1-build 0/1 Completed 0 16m openshift.io/build.name=nodejs-postgresql-example-1 nodejs-postgresql-example-1-deploy 0/1 Completed 0 14m openshift.io/deployer-pod-for.name=nodejs-postgresql-example-1 postgresql-1-deploy 0/1 Completed 0 16m openshift.io/deployer-pod-for.name=postgresql-1 postgresql-1-fsw24 1/1 Running 0 16m deployment=postgresql-1,deploymentconfig=postgresql,name=postgresql Questo vuol dire che saremo in grado di cancellare tutte le risorse associate a una o più label:\nkubectl delete all,configmap,pvc,serviceaccount,rolebinding --selector=\u0026#34;name in (postgresql, nodejs-postgresql-example)\u0026#34; \u0026gt;\u0026gt;\u0026gt; pod \u0026#34;nodejs-postgresql-example-1-jjcn8\u0026#34; deleted pod \u0026#34;postgresql-1-fsw24\u0026#34; deleted Tutto ciò che abbiamo visto finora, vale anche per cluster OpenShift! 😉\n Risorse utili Docker - per cominciare bene con Docker e Kubernetes Kubernetes - Guida per gestire e orchestrare i container Come installare Docker (e Docker Compose) Esplorando il Dockerfile Canale di Emmecilab ", "url": "https:\/\/theredcode.it\/kubernetes\/label-selector-kubernetes-openshift\/" }, "https:\/\/theredcode.it\/intelligenza-artificiale\/k8sgpt-chatgpt\/": { "title": "Superpoteri per Kubernetes con ChatGPT", "tags": ["openshift","kubernetes","chatgpt",], "content": "Intro Se hai provato a chattare con ChatGPT e hai provato delle sensazioni contrastanti dopo le sue fantastiche risposte, allora devi sapere k8sgpt sfrutta ChatGPT per supportarti nel tuo utilizzo di Kubernetes (e anche OpenShift).\nTramite un\u0026rsquo;analisi delle risorse in esecuzione, consente all\u0026rsquo;utente di analizzare i problemi del cluster e di fornire suggerimenti più esplicativi -rispetto ai messaggi di errore- per risolvere il problema. Spesso di fronte a un problema ci si trova con pochi indizi, e una soluzione da trovare velocemente: per poter ottenere delle indicazioni più dettagliate su come risolvere il problema, k8sgpt è perfetto.\nInstallazione La configurazione è molto semplice: basta scaricare il pacchetto di k8sgpt in base al sistema operativo che verrà usato per eseguire k8sgpt -Linux, Windows o Mac - dalla pagina di rilascio di k8sgpt:\nwget https://github.com/k8sgpt-ai/k8sgpt/releases/download/v0.1.1/k8sgpt_Linux_x86_64.tar.gz tar -xvf k8sgpt_Linux_x86_64.tar.gz ./k8sgpt In secondo luogo, sarà necessario ottenere una chiave API dal sito web di OpenAI per poter utilizzare questo strumento: tramite il comando sottostante, è possibile ottenere il link per generarla:\nk8sgpt generate Opening: https://beta.openai.com/account/api-keys to generate a key for openaish Please copy the generated key and run `k8sgpt auth` to add it to your config file Dopo aver generato e copiato la chiave, possiamo aggiungere questo token al file di configurazione usando il comando seguente:\nk8sgpt auth new \u0026gt;\u0026gt;\u0026gt; Enter openai Key: MYTOKEN added to the AI backend provider list Esempio Attualmente sono disponibili alcuni analyzer integrati per k8sgpt (come quelli per Pod, PVC, Events, e così via) che permettono di fornire delle descrizioni dettagliate degli oggetti in esecuzione, anche se in futuro sono previste delle ulteriori estensioni.\nIn altre parole, k8sgpt è in grado di trovare problemi in oggetti Kubernetes come Pod, PVC, Replicaset e Services.\nPer tentare un test veloce, è possibile una semplice analisi sarà simile a quella che segue:\n# Creazione di un Pod con un\u0026#39;immagine kubectl run nginx --image=nginx:latest --restart=Never # Analisi degli eventi prodotti dalle risorse del namespace corrente -di default, risponde in inglese k8sgpt analyze --explain --filter=Pod \u0026gt;\u0026gt;\u0026gt; No problems detected In effetti, è possibile ottenere la risposta anche in altre lingue. Ad esempio, se si desidera ottenere una risposta in italiano, si può specificare l\u0026rsquo;opzione in questo modo -attenzione, le traduzioni non sono perfette!:\n# Immagine errata kubectl run nginx --image=nginx:1.2.3 --restart=Never k8sgpt analyze --explain --language \u0026#39;Italian\u0026#39; Every 2,0s: k8sgpt analyze --explain edgeblazer-desktop: Tue Mar 28 18:10:56 2023 { 0% | | (0/1, 0 it/hr) [0s:0s] 100% |██████████████████████████████████████████████| (1/1, 3182 it/s) 0 default/nginx(nginx): Back-off pulling image \u0026#34;nginx:1.2.3\u0026#34; I Pod non sono in grado di scaricare e lanciare l\u0026#39;immagine prevista, pertanto è stato attivato un back-off per attendere prima di riprovare. La soluzione è assicurarsi che il tag dell\u0026#39;immagine sia specificato correttamente e che non ci siano problemi di rete che impediscano il download. Verificare inoltre che l\u0026#39;immagine esista e sia accessibile al cluster. Sviluppi futuri Il team dietro a k8sgpt ha previsto di aggiungere nuove funzionalità, come ulteriori comandi eseguibili tramite la riga di comando, il supporto ad analyzer personalizzati, e il supporto a modelli di ML.\nQuale può essere il vantaggio di uno strumento come questo, anche se ancora in via di sviluppo? Si tratta sicuramente di uno strumento utile che aiuta nella risoluzione dei problemi iniziali, migliorando così l\u0026rsquo;esperienza operativa di chi lavora su cluster basati su Kubernetes, soprattutto se ci si trova di fronte ad errori imprevisti, o sconosciuti!\nRisorse utili Documentazione ufficiale Docker - per cominciare bene con Docker e Kubernetes Kubernetes - Guida per gestire e orchestrare i container ", "url": "https:\/\/theredcode.it\/intelligenza-artificiale\/k8sgpt-chatgpt\/" }, "https:\/\/theredcode.it\/database\/creare-una-tabella-con-sql-server\/": { "title": "Creare una tabella con SQL Server", "tags": ["database","sql-server",], "content": "Cosa vedrai Definizione di tabella Come funziona Tip Risorse utili Definizione di tabella Le tabelle sono oggetti presenti all\u0026rsquo;interno di un database che contengono tutti i dati. Nelle tabelle, i dati sono organizzati in modo strutturato tramite righe e colonne in un formato simile a quello di un foglio di calcolo, dove ogni riga rappresenta un record e ogni colonna un campo.\nCome funziona Per creare una nuova tabella tramite SQL Server Managament Studio, è sufficiente cliccare con il destro sulla voce \u0026ldquo;Tabelle\u0026rdquo; presente all\u0026rsquo;interno del database di nostro interesse e scegliere \u0026ldquo;Nuovo\u0026rdquo;:\nOpzione per creare una tabella tramite SQL Server Management Studio\nSi aprirà una finestra che ci permetterà di scegliere quali sono le colonne da aggiungere alla nostra tabella, e soprattutto le tipologie di dato.\nNel primo campo, inseriamo il nome della colonna. Nel secondo campo, il tipo di dato che vogliamo rappresentare e l\u0026rsquo;eventuale dimensione.\nInfine, possiamo decidere di permettere o meno la creazione di record in cui la colonna presenta dei valori nulli.\nUn esempio di utilizzo dei diversi tipi di dato è riportato di seguito:\nEsempio di tabella tramite SQL Server Management Studio\nDopo aver definito le informazioni riguardanti le colonne, clicchiamo sul tasto per salvare (o usiamo \u0026ldquo;Ctrl+S\u0026rdquo;) e scegliamo il nome che la tabella assumerà. La tabella non sarà visibile subito nell\u0026rsquo;elenco a sinistra degli oggetti: sarà necessario cliccare con il destro sul database e selezionare \u0026ldquo;Aggiorna\u0026rdquo;:\nNuova tabella\nTipi di dato Ne esistono moltissime varianti, di cui viene riportato un elenco dettagliato qui sotto:\nDati testuali Tipo di dato Descrizione Dimensione massima char(n) Lunghezza fissa di una stringa 8,000 caratteri varchar(n) Lunghezza variabile di una stringa 8,000 caratteri varchar(max) Lunghezza variabile di una stringa 1,073,741,824 caratteri text Lunghezza variabile di una stringa fino a 2GB 2GB nchar Lunghezza fissa di una stringa Unicode 4,000 caratteri nvarchar Lunghezza variabile di una stringa Unicode 4,000 caratteri nvarchar(max) Lunghezza variabile di una stringa Unicode con massimo 536,870,912 caratteri ntext Lunghezza variabile di una stringa Unicode 2GB binary(n) Lunghezza variabile di una stringa binaria 8,000 bytes varbinary Lunghezza variabile di una stringa binaria 8,000 bytes varbinary(max) Lunghezza variabile di una stringa binaria con massimo 2GB La differenza tra un campo con lunghezza fissa e una variabile sta nell\u0026rsquo;allocazione dello spazio: se viene definito un campo di tipo testuale con lunghezza variabile di 100 caratteri, nel caso in cui il valore del record inserito sia inferiore, lo spazio viene \u0026ldquo;trimmato\u0026rdquo;, ossia accorciato all\u0026rsquo;effettiva lunghezza del campo. Un esempio sono i dati anagrafici di una persona, che variano in lunghezza del nome e del cognome.\nSe usassimo invece un campo di tipo testuale ma a lunghezza fissa, ogni record avrebbe allocato per sé sempre quella dimensione, anche in caso di utilizzo parziale. Un esempio è il campo che definisce il codice fiscale!\nDati numerici Tipo di dato Descrizione Dimensione massima bit 0,1 o NULL tinyint [0, 255] 1 byte smallint [-32768,32767] 2 bytes int [-2147483648,2147483647] 4 bytes bigint [-9223372036854775808,9223372036854775807] 8 bytes numeric(p,s) [-10^38 +1, 10^38 –1] 5-17 bytes smallmoney [-214748.3648,214748.3647] 4 bytes money [-922337203685477.5808,922337203685477.5807] 8 bytes float(n) [-1.79E + 308, 1.79E + 308] 4/8 bytes real [-3.40E + 38 , 3.40E + 38] 4 bytes Dati temporali Tipo di dato Descrizione Dimensione massima datetime Accuratezza in millisecondi 8 bytes datetime2 Accuratezza in nanosecondi 6-8 bytes smalldatetime Accuratezza in minuti 4 bytes date Data per memorizzare giorno, mese e anno 3 bytes time Tempo espresso con una precisione in termini di nanosecondi 3-5 bytes datetimeoffset Come datetime2, ma con la possibilità di specificare la timezone 8-10 bytes timestamp Tempo espresso in millisecondi 4 bytes Qual è la differenza tra timestamp e time? Un campo di tipo timestamp viene aggiornato automaticamente ogni volta che un valore presente nella riga viene aggiornato o modificato ed è basato su un valore interno al database.\n Ogni tabella dovrebbe avere un solo campo di tipo timestamp.\n Tip Qual è la data minima che un campo datetime supporta? Il primo gennaio 1753.\nE la data massima? Il 31 dicembre 9999.\nRisorse utili Documentazione ufficiale Basi di Dati ", "url": "https:\/\/theredcode.it\/database\/creare-una-tabella-con-sql-server\/" }, "https:\/\/theredcode.it\/categories\/sql-server\/": { "title": "sql-server", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/categories\/sql-server\/" }, "https:\/\/theredcode.it\/eventi\/2023-vuejs\/": { "title": "VueJS Day 2023 @ Verona", "tags": [], "content": "Per tutte le persone appassionate di Vue.js e dintorni, questo è l\u0026rsquo;evento da non perdere!\n📅 Quando:: 10 Novembre 2023\n🗺️ Dove: Verona\nTitolo: VueJS Day 2023\n🎫 Codice sconto (da condividere!): 10% con community_THEREDCODE\n➡ ️Partecipa all’evento\n🫶 Organizzato da: Grusp\n", "url": "https:\/\/theredcode.it\/eventi\/2023-vuejs\/" }, "https:\/\/theredcode.it\/intelligenza-artificiale\/chagpt-alternative\/": { "title": "Addio ChatGPT", "tags": ["intelligenza-artificiale","chagpt",], "content": "Negli ultimi mesi, ChatGPT ha guadagnato molti utenti grazie alla sua capacità di scrivere e-mail, blog, codice e altro ancora.\nTuttavia, esistono altri strumenti che utilizzano il modello alla base di ChatGPT e che vanno ben oltre le sue capacità.\nIn questo articolo vediamo un elenco di strumenti che con funzionalità differenti, e addirittura migliori di ChatGPT perché offrono features aggiuntive, possono essere personalizzati e sono stati costruiti per casi d\u0026rsquo;uso specifici utilizzando GPT-3.5/GPT-4.\nEcco 3 strumenti di intelligenza artificiale migliori di ChatGPT.\nAuto-GPT Immaginate di poter automatizzare ChatGPT in modo che si auto-alimenti fino a raggiungere gli obiettivi da voi stabiliti.\nSembra bello, vero?\nBene, ora potete farlo con Auto-GPT.\nCon Auto-GPT, si ritorna al concetto di \u0026ldquo;agente\u0026rdquo; e si può sfruttare questo strumento per creare dei micro-operatori autonomi che possono completare delle attività utilizzando GPT-4.\nUn agente ha solo bisogno di un ruolo e di alcuni obiettivi per auto-produrre tutti i prompt necessari per completare un obiettivo.\nÈ possibile installare Auto-GPT localmente sul computer, se si ha un po\u0026rsquo; di esperienza nel campo della programmazione, oppure utilizzare AgentGPT tramite il browser.\nCi sono molte cose che Auto-GPT può fare che ChatGPT non può fare: ad esempio, con Auto-GPT è possibile effettuare ricerche su Internet, raccogliere informazioni, fornire o interagire tramite dei file, e via dicendo.\nPlayground Attualmente, ChatGPT ci permette solo di scegliere il modello che desideriamo utilizzare (se GPT-3.5/GPT-4).\nE se volessimo personalizzare ulteriormente le risposte di ChatGPT?\nOpenAI ha rilasciato un altro strumento che si chiama Playground e che permette agli utenti di sperimentare ed esplorare le capacità dei vari modelli di intelligenza artificiale da loro sviluppati.\nA differenza di ChatGPT, su Playground è possibile trovare i seguenti parametri per controllare ulteriormente i modelli di OpenAI:\nEcco il significato di parte di questi parametri:\n temperatura: temperatura di campionamento da utilizzare; questo vuol dire che i valori prossimi a 1 daranno al modello più rischio/creatività, mentre valori prossimi a 0 genereranno risposte ben definite; max_token: numero massimo di token da generare (fino a 2.048 e 4.000 token condivisi tra prompt e completamento); Top p: controlla la diversità attraverso il campionamento dei nuclei Penalità di frequenza: quanto penalizzare i nuovi token in base alla loro frequenza esistente nel testo fino a quel momento; Penalità di presenza: quanto penalizzare i nuovi token in base alla loro presenza nel testo fino a quel momento. Nota: un altro modo per controllare i parametri di cui sopra è attraverso le API di ChatGPT; tuttavia, è necessaria una certa esperienza in ambito di sviluppo.\n Jasper Jasper è uno strumento di intelligenza artificiale che può aiutare a creare contenuti per i social media, per la pubblicità, post sul blog (non su questo, promesso!), newsletter, e così via.\n Ma non è possibile farlo con ChatGPT gratuitamente?\n Sì, ma Jasper è stato creato per casi d\u0026rsquo;uso aziendali come il marketing, le vendite e altro ancora. A differenza di ChatGPT, che ha un uso generico, Jasper adatta il linguaggio a casi d\u0026rsquo;uso specifici.\nCon Jasper, potete scrivere copy e contenuti, generare contenuti rapidamente, fare brainstorming di nuove idee e scrivere per i giusti target con il giusto contenuto!\nEcco alcuni esempi dei modelli pronti che troverete su Jasper:\n Se hai provato, o pensi di provare qualcuno di questi strumenti, o conosci qualche alternativa, non dimenticarti di lasciare un commento!\n ", "url": "https:\/\/theredcode.it\/intelligenza-artificiale\/chagpt-alternative\/" }, "https:\/\/theredcode.it\/tags\/chagpt\/": { "title": "chagpt", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/tags\/chagpt\/" }, "https:\/\/theredcode.it\/categories\/chagpt\/": { "title": "chagpt", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/categories\/chagpt\/" }, "https:\/\/theredcode.it\/openshift\/machine-vs-machineset-openshift\/": { "title": "La resilienza in OpenShift", "tags": ["openshift","kubernetes",], "content": "Intro OpenShift è una straordinaria piattaforma per la gestione dei container, che fornisce la potenza di Kubernetes con una serie di funzionalità che ne permettono la distribuzione e l\u0026rsquo;utilizzo sia su infrastrutture on-premise che su un ambiente cloud pubblico.\nOra, con OpenShift 4.10, è diventato semplicissimo creare un cluster: ci sono diversi installer o soluzioni che possiamo utilizzare all\u0026rsquo;interno del nostro ambiente in cloud e, voilà, questo si occupa (quasi) di tutto: creare e configurare i nodi, installare il prodotto e renderlo pronto per l\u0026rsquo;uso. Niente male, no?\nAlla luce di tutta questa automazione, la domanda che può sorgente è: \u0026ldquo;cosa succede quando si prova a distruggere OpenShift?\u0026rdquo;\nIn questo articolo, vediamo cosa vuol dire testare la resilienza di OpenShift, passando per il concetto di Machine e Machinset, e facendo dei test: proviamo a distruggere parte del cluster, e vediamo cosa succede.\nTest #1 Supponiamo di avere un tipico cluster OpenShift (su AWS) con la seguente configurazione: 3 nodi master e 3 nodi worker configurati tramite delle semplici Machine, di cui possiamo recuperare le informazioni tramite il comando oc get nodes (avendo i permessi di cluster-admin):\n$ oc get nodes \u0026gt;\u0026gt;\u0026gt; NAME STATUS ROLES AGE ip-xxx-yyy-zzz-10.eu-central-1.compute.internal Ready worker 2d ip-xxx-yyy-zzz-121.eu-central-1.compute.internal Ready worker 2d ip-xxx-yyy-zzz-233.eu-central-1.compute.internal Ready worker 2d ip-xxx-yyy-zzz-193.eu-central-1.compute.internal Ready master 2d ip-xxx-yyy-zzz-94.eu-central-1.compute.internal Ready master 2d ip-xxx-yyy-zzz-100.eu-central-1.compute.internal Ready master 2d Come primo test, andiamo a distruggere uno dei nodi master e rispondere alla domanda: \u0026ldquo;Cosa succede?\u0026rdquo;\nCi sono alcuni modi per compiere questo test: distruggere l\u0026rsquo;istanza su cui gira il nodo o anche renderla inaccessibile agli altri master cambiando le configurazioni di rete. In questo caso, eseguiamo un test semplice e distruggiamo la risorsa che si occupa di gestire il nodo, ossia la Machine.\n Le Machine sono degli oggetti che descrivono una risorsa che incapsula e definisce un nodo. In altre parole, rappresenta la macchina virtuale, o l\u0026rsquo;istanza con le relative risorse in termini di CPU, memoria e storage.\n I nodi, quindi, rappresentano una Machine configurata per l\u0026rsquo;utilizzo con OpenShift, ovvero un\u0026rsquo;istanza che contiene i servizi necessari per eseguire i pod ed è gestita dai componenti master.\nLe differenze sorgono a livello di astrazione: un nodo in OpenShift è esattamente la stessa cosa rispetto ad un nodo in Kubernetes e normalmente ci si riferisce all\u0026rsquo;astrazione di un \u0026ldquo;nodo\u0026rdquo; worker/master quando si parla di un \u0026ldquo;cluster\u0026rdquo;. L\u0026rsquo;astrazione del nodo esiste solo all\u0026rsquo;interno dei limiti di un cluster in esecuzione.\nUna Machine è un\u0026rsquo;astrazione introdotta dalla definizione di Cluster API per permettere a chi definisce l\u0026rsquo;infrastruttura host richiesta di eseguire i\nnodi utilizzando le specifiche della macchina.\nQuindi troviamo tutte le Machines eseguendo il seguente comando:\n$ oc get machines --all-namespaces \u0026gt;\u0026gt;\u0026gt; NAMESPACE NAME PHASE TYPE REGION ZONE AGE openshift-machine-api my-cluster-master-0 Running m5.xlarge eu-central-1 eu-central-1b 2d openshift-machine-api my-cluster-master-1 Running m5.xlarge eu-central-1 eu-central-1b 2d openshift-machine-api my-cluster-master-2 Running m5.xlarge eu-central-1 eu-central-1b 2d openshift-machine-api my-cluster-worker-eu-central-1b-xxxxx Running c5.4xlarge eu-central-1 eu-central-1b 2d openshift-machine-api my-cluster-worker-eu-central-1b-yyyyy Running c5.4xlarge eu-central-1 eu-central-1b 2d openshift-machine-api my-cluster-worker-eu-central-1b-zzzzz Running c5.4xlarge eu-central-1 eu-central-1b 2d Per distruggere dunque un nodo master, e quindi la relativa istanza, andiamo ad eseguire il comando:\n$ oc delete machine my-cluster-master-0 \u0026gt;\u0026gt;\u0026gt; machine.machine.openshift.io \u0026#34;my-cluster-master-0\u0026#34; deleted E cosa succede dopo che ho distrutto uno dei nodi master?\nNiente.\nCome visibile, OpenShift non ha creato un nuovo master, ma sta lavorando con soli due:\n$ oc get nodes \u0026gt;\u0026gt;\u0026gt; NAME STATUS ROLES AGE ip-xxx-yyy-zzz-10.eu-central-1.compute.internal Ready worker 2d ip-xxx-yyy-zzz-121.eu-central-1.compute.internal Ready worker 2d ip-xxx-yyy-zzz-233.eu-central-1.compute.internal Ready worker 2d ip-xxx-yyy-zzz-193.eu-central-1.compute.internal Ready master 2d ip-xxx-yyy-zzz-94.eu-central-1.compute.internal Ready master 2d Cos\u0026rsquo;è successo: dopo aver chiesto a OpenShift di eliminare l\u0026rsquo;istanza, questa non è stata creata nuovamente per rimpiazzare la precedente, perché esattamente come per un Pod in Kubernetes, una risorsa di tipo Machine non ha un meccanismo di ripristino.\nQuindi, quando viene eliminata o muore, è morta.\nPer fornire la dovuta resilienza alle risorse Machine, è necessario utilizzare un MachineSet, così come avviene tramite l\u0026rsquo;uso di un ReplicaSet per un Pod).\nQuindi, diamo un\u0026rsquo;occhiata ai MachineSet nell\u0026rsquo;ambiente:\n$ oc get machinesets --all-namespaces \u0026gt;\u0026gt;\u0026gt; NAMESPACE NAME DESIRED CURRENT READY AVAILABLE AGE openshift-machine-api my-cluster-worker-eu-central-1b 3 3 3 3 2d Dall\u0026rsquo;output è possibile vedere che ci sono MachineSet per i nodi worker, ma non per il master. A questo punto è facile immaginare che il master sia così configurato perché non abbia bisogno di scalabilità: solitamente nell\u0026rsquo;architettura di un cluster ce ne saranno sempre -minimo- 3, quindi OpenShift ha deciso di non creare un MachineSet per il master.\nQuesto vuol dire che attualmente il cluster rimane operativo, ma ci troviamo su un terreno molto rischioso. Se perdiamo un altro master (per qualsiasi motivo), etcd smetterà di funzionare, e di conseguenza OpenShift.\nCome ritornare alla situazione precedente? Semplice.\nRicostruiamo il terzo master. Ancora una volta, seguiamo il concetto di Machine per creare l\u0026rsquo;istanza e avremo bisogno della definizione di una risorsa da poter utilizzare per crearne una nuova. Quindi, eseguiamo i seguenti comandi per creare il file YAML da modificare:\n$ oc get machine ip-xxx-yyy-zzz-94.eu-central-1.compute.internal -n openshift-machine-api -o yaml \u0026gt; master-1.yaml Quindi ora ho un file YAML con la definizione di uno degli altri master, che posso modificare per creare il master mancante.\nSarà sufficiente cambiare il campo metadata.name ed eseguire il seguente comando:\n$ oc create -f master1.yaml Una volta che questo sarà creato, verrà rilevato dal cluster come nuovo nodo master e aggiunto all\u0026rsquo;infrastruttura:\n$ oc get machines --all-namespaces \u0026gt;\u0026gt;\u0026gt; NAMESPACE NAME PHASE TYPE REGION ZONE AGE openshift-machine-api my-cluster-master-0 Running m5.xlarge eu-central-1 eu-central-1b 2d openshift-machine-api my-cluster-master-1 Running m5.xlarge eu-central-1 eu-central-1b 2d openshift-machine-api my-cluster-master-2 Running m5.xlarge eu-central-1 eu-central-1b 2d openshift-machine-api my-cluster-worker-eu-central-1b-xxxxx Running c5.4xlarge eu-central-1 eu-central-1b 2d openshift-machine-api my-cluster-worker-eu-central-1b-yyyyy Running c5.4xlarge eu-central-1 eu-central-1b 2d openshift-machine-api my-cluster-worker-eu-central-1b-zzzzz Running c5.4xlarge eu-central-1 eu-central-1b 2d $ oc get nodes \u0026gt;\u0026gt;\u0026gt; NAME STATUS ROLES AGE ip-xxx-yyy-zzz-10.eu-central-1.compute.internal Ready worker 2d ip-xxx-yyy-zzz-121.eu-central-1.compute.internal Ready worker 2d ip-xxx-yyy-zzz-233.eu-central-1.compute.internal Ready worker 2d ip-xxx-yyy-zzz-193.eu-central-1.compute.internal Ready master 2d ip-xxx-yyy-zzz-94.eu-central-1.compute.internal Ready master 2d ip-xxx-yyy-zzz-175.eu-central-1.compute.internal Ready master 2d Voilà: ambiente ripristinato, con 3 nodi master.\nSpiegazione La documentazione dell\u0026rsquo;architettura di Openshift 4 descrive i master come un gruppo di macchine che non fanno parte di un set di macchine, questa è l\u0026rsquo;architettura supportata, testata e consigliata. Lo stesso documento afferma che il numero di master deve essere esattamente 3:\nCome visto, esiste una procedura di ripristino per sostituire un master in errore con uno nuovo, e questo prevede la creazione del nuovo master come risorsa Machine, anche se potrebbe venire in mente di utilizzare un MachineSet per mantenerne la configurazione e la gestione del numero di repliche. Tuttavia, la configurazione risultante non è ufficialmente supportata da Red Hat, e per diversi motivi.\nAvere i master definiti come un MachineSet non offre vantaggi evidenti ma aggiunge ulteriori rischi, per diversi motivi:\n La presenza di più di tre master non è consigliata o supportata, pertanto il ridimensionamento dei master potrebbe causare problemi nel cluster. Il ridimensionamento dei nodi master per il ripristino da una situazione di errore di uno di essi richiede comunque l\u0026rsquo;applicazione manuale della procedura di ripristino di emergenza di cui sopra, pertanto non è possibile alcun ripristino automatico. Dopo che il MachineSet di un master è stato ridimensionato e la procedura di ripristino di emergenza è stata applicata con successo per sostituire un master in errore, a un certo punto il MachineSet dovrebbe essere\nridimensionato per rimuovere la macchina in errore, tuttavia si tratta di un\u0026rsquo;operazione rischiosa, è necessario\nadottare misure aggiuntive per evitare di rimuovere la macchina sana invece di quella guasta. Test #2 E allora, cosa succederebbe se eliminassimo un worker?\nEseguiamo lo stesso test di prima, ma stavolta eliminiamo uno dei nodi applicativi. Come visto, esistono molti modi per farlo, e andremo a utilizzare la CLI di OpenShift e il concetto di Machine:\n$ oc delete machine my-cluster-worker-eu-central-1b-xxxxx \u0026gt;\u0026gt;\u0026gt; machine.machine.openshift.io \u0026#34;my-cluster-worker-eu-central-1b-xxxxx \u0026#34; deleted Ora, se controlliamo nuovamente il numero di Machine, ce ne dovremmo aspettare 2, giusto?\nSbagliato.\nVediamo le Machine:\n$ oc get machines -n openshift-machine-api \u0026gt;\u0026gt;\u0026gt; NAMESPACE NAME PHASE TYPE REGION ZONE AGE openshift-machine-api my-cluster-master-0 Running m5.xlarge eu-central-1 eu-central-1b 2d openshift-machine-api my-cluster-master-1 Running m5.xlarge eu-central-1 eu-central-1b 2d openshift-machine-api my-cluster-master-2 Running m5.xlarge eu-central-1 eu-central-1b 2d openshift-machine-api my-cluster-worker-eu-central-1b-xxxxx Running c5.4xlarge eu-central-1 eu-central-1b 2d openshift-machine-api my-cluster-worker-eu-central-1b-yyyyy Running c5.4xlarge eu-central-1 eu-central-1b 2d openshift-machine-api my-cluster-worker-eu-central-1b-AAAAA Running c5.4xlarge eu-central-1 eu-central-1b 2m Dall\u0026rsquo;ultima riga, noteremo che OpenShift ha creato immediatamente un\u0026rsquo;altra istanza del worker node, nella stessa zona di disponibilità.\nQuesto è il potere delle risorse di tipo Machine e dei MachineSets.\nAllo stesso modo in cui un ReplicaSet fornisce resilienza a un Pod, un MachineSet fornisce resilienza a una Machine.\nUtilizzando il principio Kubernetes dello stato desiderato, un MachineSet dichiarerà quante istanze in una determinata zona di disponibilità vogliamo e quindi, non appena distruggiamo l\u0026rsquo;istanza corrispondente, il MachineSet distribuirà rapidamente un\u0026rsquo;altra macchina in AWS e la configurerà come worker node.\n Niente male, no?\n Risorse utili Documentazione ufficiale Docker - per cominciare bene con Docker e Kubernetes Kubernetes - Guida per gestire e orchestrare i container ", "url": "https:\/\/theredcode.it\/openshift\/machine-vs-machineset-openshift\/" }, "https:\/\/theredcode.it\/database\/report-con-sql-server\/": { "title": "Report con SQL Server", "tags": ["database",], "content": "I 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 a 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 ", "url": "https:\/\/theredcode.it\/database\/report-con-sql-server\/" }, "https:\/\/theredcode.it\/random\/fine-localhost-cloud\/": { "title": "La fine di localhost", "tags": ["red-updates",], "content": "Sentito parlare di Codespaces?\nSe sì, allora probabilmente la fine di un\u0026rsquo;era si avvicina: entro dieci anni \u0026ldquo;localhost\u0026rdquo; non sarà più utilizzato, e il codice verrà presto sviluppato su piattaforme diverse dal nostro PC.\nSe sei una persona che sviluppa, allora (quasi) sicuramente conoscerai Shawn @swyx Wang: scrittore, DevAdv e speaker, è conosciuto per avere delle idee molto \u0026ldquo;forti\u0026rdquo; sull\u0026rsquo;impatto e il futuro della tecnologia.\nIn uno dei suoi articoli, parla di come localhost stia vivendo i suoi ultimi momenti di gloria, per poi cedere il passo a nuovi strumenti.\nlocalhost è quel termine che appartiene alle reti di calcolatori per indicare la macchina di un utente e, in questo senso, si riferisce a una persona che sviluppa che memorizza avendo i file sul proprio dispositivo.\nPer impostazione predefinita, la maggior parte di chi sviluppa salva il proprio lavoro sul proprio PC locale e quindi lo carica nell\u0026rsquo;ambiente di sviluppo dell\u0026rsquo;applicazione.\nIn effetti, è così che funziona Git, poiché fornisce a chi progetta una copia locale della cronologia completa del proprio lavoro e quindi sincronizza le modifiche in un repository (che spesso si trova nel cloud).\nTuttavia, come ha sottolineato Wang a giugno 2022, aziende tecnologiche come GitHub, Etsy e Shopify hanno spostato tutti o la maggior parte dei loro ambienti di sviluppo nel cloud.\nThere’s a very real possibility local dev may be dead in 10 years.\n- @isamlambert “Planetscale doesnt believe in localhost”\n- @ericsimons40 Stackblitz runs Node fast in the browser\n- @GitHub runs entirely on Codespaces\nThis would be the biggest shift in dev workflow since git.\n\u0026mdash; swyx ➡️ 🐘 (@swyx) June 6, 2022 Ma, attenzione: avere a disposizione strumenti come Codespaces non è sufficiente: esistono comunque fattori come la latenza degli ambienti, la gestione della privacy e della sicurezza, una connessione ad alta velocità non sempre ben distribuita da tenere in considerazione.\n Perché nasce questa esigenza?\n Le persone vogliono iniziare a lavorare con macchine su cloud non solo per avere una maggiore potenza di calcolo, ma perché spesso ne hanno bisogno: soprattutto se lavorano con qualcosa di più complesso, come nel caso in cui si voglia sfruttare Stable Diffusion o gestire un cluster Kubernetes di sviluppo, per esempio.\nIl reale problema è che gli ambiente di sviluppo on-cloud non sono ancora pienamente accettati da chi sviluppa: Wang suggerisce per esempio l\u0026rsquo;adozione di Gitpod, che abilita ciò che l\u0026rsquo;azienda chiama \u0026ldquo;ambienti di sviluppo basati su cloud effimeri\u0026rdquo;, o anche Replit, una piattaforma di codifica online destinata ai giovani che imparano a programmare o, in altre parole, un \u0026ldquo;IDE nel browser per codificare in oltre 50 linguaggi, senza spendere un secondo per l\u0026rsquo;installazione\u0026rdquo;.\nNonostante la promessa di un ambiente di sviluppo completamente online, il tweet di Wang a giugno ha ricevuto molti feedback negativi dagli utenti. In effetti, lui stesso preferisce ancora lo sviluppo @localhost per alcune parti del suo flusso di lavoro.\nAs someone who likes going into the mountains to work with no internet connection intentionally, I plan on making it possible to develop my stuff completely offline for the foreseeable future. I\u0026#39;m not interested in your cloud-based development world. https://t.co/kMp3rSClNG\n\u0026mdash; Kent C. Dodds 🌌 (@kentcdodds) July 25, 2022 Controversial take inbound\nEvery year for the past 5 or 6 years has been the \u0026quot;Year of the Remote Dev Environment\u0026quot;. I think it is going to have the same fate as The Year of VR\nI remember the heated arguments inside Red Hat 5 or 6 years ago claiming we had to jump on it quick https://t.co/x4NBCSox9t\n\u0026mdash; (((TheSteve0))) @TheSteve0@data-folks.masto.host (@TheSteve0) September 8, 2022 Se Wang ha capito qualcosa, significa che c\u0026rsquo;è una grande opportunità di mercato per gli strumenti di sviluppo basati su cloud. Aziende come Gitpod e Replit stanno già facendo un lavoro innovativo in quest\u0026rsquo;area, ma di alternative iniziano ad essercene veramente tante: oltre a Codespaces, vedi anche Brev, Coherence e Railway.\n", "url": "https:\/\/theredcode.it\/random\/fine-localhost-cloud\/" }, "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-web-designer2\/": { "title": "Voglio diventare una... Web Designer", "tags": ["interviste","voglio-diventare",], "content": "Descriviti in 100 parole Sono Michela e sono una grafica e web designer freelance. Nata a metà degli anni ‘80, fin da piccola ho avuto accesso a computer e internet, quando ancora costava quanto una telefonata interurbana!\nLa programmazione e il disegno mi hanno sempre affascinato. A 12 anni, volendo imparare da sola un linguaggio semplice, acquistai il libro “HTML for dummies” e realizzai il primo sito web. Ho sperimentato presto la grafica digitale con risultati discutibili, finché non ho scoperto il vettoriale, con cui riuscivo a esprimermi al massimo pur utilizzando semplicemente il mouse.\nDal 2011 sono ideatrice, fondatrice e tuttofare di MeCreativa.\nIn cosa consiste il ruolo di Web Designer? Il web designer si occupa della realizzazione di siti web, utilizzando contenuti testuali, immagini e media, curando la semplicità d’uso e la compatibilità con i vari dispositivi allo scopo di ottimizzare la User Experience e rendere quindi un sito facile e piacevole da navigare.\n Serve un equilibrio tra competenze tecniche, grafiche e comunicative: a linguaggi di programmazione quali HTML, PHP, JavaScript si affianca la cura per l’aspetto estetico del sito e l’attenzione a una comunicazione efficace con l’utente.\nSono specializzata in CMS, soprattutto Wordpress e Prestashop, le cui aree backend sono particolarmente intuitive, permettendo al proprietario del sito di essere autonomo nella gestione ordinaria, aspetto per me fondamentale.\nHo scelto di essere autonoma e lavorare da sola, ma nella realizzazione dei siti spesso collaboro con altre figure come copywriter, esperti di marketing, fotografi e programmatori.\nQual è la soft skill più importante che deve possedere una Web Designer? Premesso che creatività, capacità d’ascolto, gestione del tempo e pazienza servono sicuramente, credo che quella fondamentale sia la capacità comunicativa.\nSaper comunicare in modo efficace consente di creare siti che trasmettono qualcosa agli utenti. Ed è importante saper spiegare in modo appropriato al cliente, che spesso non ha competenze tecniche, tutti i passaggi e le scelte che vengono fatte, così che sia parte del progetto e non solo il committente.\nQuanto l’accessibilità di un sito è parte integrante di questo lavoro? L’accessibilità è fondamentale, specie ora che internet è alla portata di tutti. Spesso ci si sofferma principalmente sulla velocità di un sito e sull’adattabilità ai vari supporti: desktop, tablet, smartphone.\nIn realtà ci sono una serie di accorgimenti da seguire in fase di progettazione: scelta di colori, struttura, posizioni di elementi chiave, testi alternativi per le immagini che rendono il sito fruibile a più utenti possibili, senza creare “barriere architettoniche” digitali.\nDipende poi anche dalla tipologia di sito: un sito informativo/istituzionale di un’associazione o una scuola deve garantire l’accessibilità a tutti. Un e-commerce più fruibile può avere un tasso di conversione più alto. Un privato che vuole pubblicare un suo progetto personale, potrebbe avere meno vincoli.\nCi sono tantissimi tool gratuiti online che aiutano nell’analisi dell’accessibilità del sito, controllando link, testi alternativi, contrasto dei colori ecc insomma non ci sono scuse!\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. “Chi non fa non sbaglia mai”: si fanno costantemente errori, che ripensandoci tempo dopo avremmo sicuramente evitato.\nNon ho un vero fallimento da raccontare ma di sicuro per me è stato un grande errore da non ripetere la gestione della realizzazione del mio primo e-commerce: ero a inizio carriera, preparata sulla teoria ma senza esperienza pratica e non l’ho adeguatamente comunicato al cliente.\nIl sito è venuto abbastanza bene e nel tempo è stato migliorato, ma l’iniziale mancanza di esperienza e preparazione mi ha messo in una posizione di svantaggio. Non riuscivo a guidare il lavoro e mi sono limitata a eseguire le richieste. La percezione di tale insicurezza e vendite inferiori alle attese hanno portato a una perdita di credibilità e il cliente per un certo periodo ha preferito cercare soluzioni presso altri professionisti, prima di tornare. Avevo accettato il lavoro perché volevo fare pratica con gli e-commerce, ma a parte quello ho imparato tanto su come gestire progetti e clienti.\nCome fare per diventare una Web Designer? Ci sono tantissimi corsi, online o in presenza, di poche ore o mesi. C\u0026rsquo;è l\u0026rsquo;imbarazzo della scelta forse perché negli anni l’attività del web designer è diventata un po’ il piano B di tutti, chiunque ha o conosce qualcuno che ha un “cugino che fa siti”.\nIo sono autodidatta ed ho cominciato quando i siti erano tecnicamente più semplici, la mia formazione è stata graduale e ha seguito le evoluzioni del web. Non saprei dire quale sia la strada migliore per chi vuole iniziare oggi, di sicuro direi di diffidare di corsi che promettono tanto in poco tempo.\nOccorre un mix di varie competenze che possono essere acquisite separatamente. Di sicuro imparare Python, PHP e JavaScript, non solo HTML e CSS. Dal lato grafico è importante una certa padronanza di software di elaborazioni di immagini per tagliarle e comprimerle in modo adeguato, ma soprattutto di software vettoriali per lavorare con immagini svg, che performano meglio in scalabilità e velocità di caricamento, oltre a essere modificabili e animabili tramite CSS.\nQuali sono i progetti di cui vai più orgogliosa? I lavori di cui vado più orgogliosa sono solitamente i progetti che partono da zero, in cui ho la possibilità di curare brand identity e sito in modo coeso e senza vincoli preesistenti. In quei casi ho più libertà di espressione e si crea anche un rapporto più stretto col cliente, mi sento parte integrante della nuova attività.\nDi recente ho collaborato con Andrea Carratta e André Santacroce alla realizzazione di CloudNinja, un progetto di professionisti verticali nel settore delle tecnologie #cloud.\nL’idea alla base mi è piaciuta subito ed è stato divertente coinvolgere dei puristi del backend nella scelta di colori ed elementi grafici per il logo. Allo stesso tempo mi sono sentita molto sotto pressione sul lato tecnico durante la realizzazione del sito che, visto il committente, doveva essere super performante.\nConosci il tema gender gap in ambito STEM? Se sì, come fare per superarlo? Da ragazzina volevo studiare Informatica all’Istituto Tecnico della mia città, ho rinunciato a priori perché era una scuola dove non andavano le ragazze. Crescendo mi sono resa conto di quanto fosse sbagliata l’ideologia.\nHo due figli, un maschio e una femmina, a partire dai giochi non ho mai creato distinzioni di genere, perché sono convinta che alla base del gender gap ci sia anche un errore nelle famiglie e nella scuola, che alle volte trasmettono preconcetti e creano divisioni, quando invece dovrebbero seguire e valorizzare le attitudini del singolo indipendentemente che sia maschio o femmina.\nSono fortemente convinta che se ci fossero più ragazze libere di scegliere una carriera, senza preconcetti e supportate dalla loro base sicura, fisiologicamente il gender gap diminuirebbe!\nContatti Profilo Instagram Sito ", "url": "https:\/\/theredcode.it\/interviste\/voglio-diventare-una-web-designer2\/" }, "https:\/\/theredcode.it\/tags\/voglio-diventare\/": { "title": "voglio-diventare", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/tags\/voglio-diventare\/" }, "https:\/\/theredcode.it\/tags\/pipelines\/": { "title": "pipelines", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/tags\/pipelines\/" }, "https:\/\/theredcode.it\/categories\/pipelines\/": { "title": "pipelines", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/categories\/pipelines\/" }, "https:\/\/theredcode.it\/openshift\/redhat-pipelines-vite\/": { "title": "Red Hat Pipelines con Vite", "tags": ["openshift","pipelines","tekton",], "content": "Intro OpenShift offre diverse opzioni per creare e distribuire applicazioni e tra questi ci sono:\n templates: si tratta del modo più semplice per descrivere tutti gli oggetti necessari per rilasciare effettivamente un\u0026rsquo;applicazione in OpenShift (tipicamente, ma non esclusivamente, DeploymentConfig, Service, Route e forse BuildConfig) e avere il pieno controllo sulla loro configurazione; Pipeline Jenkins: sì, puoi usare il buon vecchio Jenkins per implementare il tuo processo CI/CD su OpenShift. In questo caso, vogliamo però realizzare una pipeline che permetta di utilizzare del codice sorgente disponibile su un repository qualsiasi e di avviare il deploy dell\u0026rsquo;applicazione all\u0026rsquo;interno del cluster in maniera del tutto automatica.\nPer farlo, è sufficiente utilizzare le Red Hat OpenShift Pipelines, uno strumento potente tanto quanto complesso, che dietro le quinte utilizza Tekton, uno dei progetti open source più utilizzati in ambito CI/CD.\nAndiamo per gradi: lo scenario per ripetere l\u0026rsquo;esperimento che verrà mostrato e che andremo a descrivere è abbastanza semplice:\n Il codice sorgente per l\u0026rsquo;applicazione si trova in un repository GitHub pubblico (o privato); L\u0026rsquo;immagine del container creata durante il processo di compilazione viene inviata a un registry di immagini (come Quay) pubblico (o privato); Disponiamo di un cluster OpenShift attivo e funzionante da qualche parte, pronto per eseguire l\u0026rsquo;applicazione. Se non hai cluster a disposizione, puoi sempre utilizzare OpenShift Local! Per il caso di esempio, useremo un\u0026rsquo;applicazione scritta in Vite.js (il repository è in fondo nelle risorse utili), ma è possibile utilizzare qualsiasi altro esempio che abbia un Dockerfile valido e utilizzabile su OpenShift!\nCos\u0026rsquo;è Tekton Come descritto nel sito web del progetto open source Tekton:\n Tekton è un framework open source potente e flessibile per la creazione di sistemi CI/CD, che consente agli sviluppatori di creare, testare e distribuire tra provider cloud e sistemi on-premise.\n Red Hat OpenShift Pipelines è una soluzione CI/CD cloud-native completamente basata sulle risorse Kubernetes che utilizza i concetti e gli elementi costitutivi di Tekton per automatizzare le distribuzioni su più piattaforme astraendo i dettagli d\u0026rsquo;implementazione sottostanti. Tekton introduce una serie di Custom Resource Definitions (CRD) standard per la definizione di pipeline CI/CD portabili tra le distribuzioni Kubernetes.\nConcetti Concetti che definiscono la pipeline Pipeline: la definizione della pipeline e le attività che dovrebbe svolgere Task: un numero di passaggi riutilizzabile e liberamente accoppiato che esegue un\u0026rsquo;attività specifica (ad esempio, la creazione di un\u0026rsquo;immagine del container) Concetti che gestiscono la pipeline PipelineRun: l\u0026rsquo;esecuzione e il risultato dell\u0026rsquo;esecuzione di un\u0026rsquo;istanza di una pipeline, che include una serie di TaskRun TaskRun: l\u0026rsquo;esecuzione e il risultato dell\u0026rsquo;esecuzione di un\u0026rsquo;istanza di un Task Concetto per aiutare la pipeline a funzionare correttamente PipelineResource: risorse di questo tipo servono a fornire gli strumenti per poter lavorare e che sono fondamentali lungo tutto il flusso di lavoro, per esempio, un repository Git o un\u0026rsquo;immagine da utilizzare. Installazione dell\u0026rsquo;Operator Prima ancora di pensare di utilizzare il framework OpenShift Pipelines, è necessario ovviamente installarlo nel\ncluster; Red Hat fornisce un operatore per semplificare il processo di installazione.\nAndiamo nella console Web di OpenShift e, attraverso la prospettiva amministrativa, seleziona Operators → OperatorHub dal menu di navigazione a sinistra e quindi cerca l\u0026rsquo;operatore Red Hat Pipelines; a questo punto, fai clic sul riquadro e quindi sul successivo pulsante Installa.\nManteniamo le impostazioni predefinite e proseguiamo con l\u0026rsquo;installazione, attendiamo che sia completata e vedremo una nuova voce nel menù di sinistra della prospettiva Developer, relativa alle Pipelines:\nCon questi pochi semplici passaggi abbiamo installato OpenShift Pipelines e ora possiamo procedere a utilizzare questo framework basato su Tekton per creare una pipeline per costruire e distribuire applicazioni, ma sii paziente: abbiamo ancora bisogno di un paio di passaggi preliminari per mettere le basi.\nConfigurazione di registry per le immagini e per il codice sorgente L\u0026rsquo;immagine, una volta che sarà stata generata a partire dal codice sorgente, verrà pushata sia nel registry interno di OpenShift, sia su uno esterno, come forma di backup e/o rilascio: questo vuol dire che sarà necessario accedervi dal cluster con i giusti permessi di scrittura e lettura.\nNel caso di Quay.io, è sufficiente creare un account (gratuito), creare un repository e poi aggiungere un robot account ai permessi con i permessi di lettura e scrittura.\nA questo punto, cliccando sull\u0026rsquo;account appena creato, selezioniamo la sezione relativa a Kubernetes e scarichiamo il Secret che contiene il pull secret che permette all\u0026rsquo;utente fittizio di collegarsi al repository e di operare:\nPrima di eseguire le pipeline OpenShift, dobbiamo assicurarci che siano disponibili le autorizzazioni corrette per accedere al codice e al registry che ospita l\u0026rsquo;immagine, e il modo per farlo è configurare un ServiceAccount su OpenShift in modo appropriato e collegare i Secret contenenti le informazioni giuste.\nPartiamo dal codice sorgente: se si trova su un repository pubblico, non dobbiamo compiere ulteriori passaggi, e possiamo proseguire. Se invece il repository è privato, possiamo creare un Secret che ci permetta di inserire le informazioni per accedere al codice con il seguente comando:\noc create secret generic \u0026lt;YOUR_GITHUB_SECRET_NAME\u0026gt; \\ --from-literal=username=\u0026lt;YOUR_GITHUB_USERNAME\u0026gt; \\ --from-literal=password=\u0026lt;YOUR_GITHUB_PERSONAL_ACCESS_TOKEN\u0026gt; \\ --type=kubernetes.io/basic-auth #oc annotate secret \u0026lt;YOUR_GITHUB_SECRET_NAME\u0026gt; \u0026#34;tekton.dev/git-0=https://github.com\u0026#34; Stesso discorso vale per il registry che ospiterà l\u0026rsquo;immagine: se il repository è pubblico, possiamo proseguire, altrimenti dovremo creare un Secret che ci permetta di inserire le informazioni per accedere in lettura e scrittura al registry con il seguente comando:\noc create secret docker-registry \u0026lt;YOUR_REGISTRY_SECRET_NAME\u0026gt; \\ --docker-server=\u0026lt;YOUR_REGISTRY_URL\u0026gt; \\ --docker-username=\u0026lt;YOUR_REGISTRY_USERNAME\u0026gt; \\ --docker-password=\u0026lt;YOUR_REGISTRY_PASSWORD\u0026gt; Aggiungere i permessi Proseguiamo con il ServiceAccount: quando installi l\u0026rsquo;operatore, viene creato un ServiceAccount chiamato pipeline per eseguire correttamente le attività e le pipeline di Tekton, quindi gli concederemo le autorizzazioni appropriate.\nAggiungiamo quindi i permessi che permetteranno al ServiceAccount pipeline di operare: con il primo comando, specifichiamo che questo \u0026ldquo;utente\u0026rdquo; potrà gestire e accedere a tutte le risorse e i container presenti nei nodi computazionali. Chiaramente, si tratta di un permesso piuttosto \u0026ldquo;ampio\u0026rdquo;, quindi dovrebbe essere utilizzato solo per attività seguite da chi amministra il cluster.\nIl secondo comando permette di modificare le risorse nel progetto, ma solamente quelle applicative: non potrà quindi vedere o modificare i ruoli degli utenti o dei gruppi, e questo gli servirà per poter avviare Deployment, Service e molto altro.\nCon il terzo e il quarto comando andiamo a far riferimento al Secret creato in precedenza relativo al robot account del registry e lo colleghiamo al Serviceaccount pipeline, così che abbia le informazioni per agire con quel repository.\noc adm policy add-scc-to-user privileged -z pipeline oc adm policy add-role-to-user edit -z pipeline oc secrets link pipeline \u0026lt;YOUR_REGISTRY_SECRET_NAME\u0026gt; oc secrets link default \u0026lt;YOUR_REGISTRY_SECRET_NAME\u0026gt; --for pull È necessario un ultimo passaggio preparatorio prima di poter effettivamente eseguire le pipeline OpenShift.\nIn Tekton ogni Task viene eseguito nel proprio container quindi, per consentire a diversi Task di condividere i dati (ad esempio: un\u0026rsquo;attività recupera il codice sorgente da un repository e un\u0026rsquo;altra attività crea l\u0026rsquo;applicazione dal codice sorgente), dobbiamo inserire un volume nell\u0026rsquo;equazione.\nAndiamo quindi a definire una PVC utilizzando un oggetto simile a quello seguente, anche molto dipende dalla StorageClass e in generale dal provisioner utilizzato:\napiVersion: v1 kind: PersistentVolumeClaim metadata: name: pipeline-build spec: accessModes: - ReadWriteOnce resources: requests: storage: 500Mi Definizione della pipeline Dopo aver completato questi step di preparazione, ora possiamo creare la nostra pipeline. Puoi dare un\u0026rsquo;occhiata all\u0026rsquo;esempio nel file seguente: questo descrive quattro passaggi, eseguite in sequenza, che servono per ottenere il codice sorgente da un repository GitHub, creare un\u0026rsquo;immagine del container a partire da un Dockerfile, eseguirne il\npush in un registry, avviare il deploy su OpenShift e infine esporre l\u0026rsquo;applicazione con una route per l\u0026rsquo;accesso esterno.\n--- apiVersion: tekton.dev/v1beta1 kind: Task metadata: name: vite-deploy-example spec: workspaces: - name: source steps: - name: ls image: image-registry.openshift-image-registry.svc:5000/openshift/cli:latest workingDir: /workspace/source command: [\u0026#34;/bin/bash\u0026#34;, \u0026#34;-c\u0026#34;] args: - |-echo Listing files pwd ls -la echo ----------------------------------- --- apiVersion: tekton.dev/v1alpha1 kind: PipelineResource metadata: name: vite-with-docker spec: type: git params: - name: url value: https://github.com/serenasensini/Vite-with-Docker - name: revision value: master --- apiVersion: tekton.dev/v1alpha1 kind: PipelineResource metadata: name: vite-example-image spec: type: image params: - name: url value: quay.io/ser_sensini/vite-example:0.0.1-build --- apiVersion: tekton.dev/v1beta1 kind: Pipeline metadata: name: vite-example spec: params: - default: vite-example description: name of the application to deploy name: APP_NAME type: string - default: https://github.com/serenasensini/Vite-with-Docker description: url of the git repo for the code of deployment name: GIT_REPO type: string - default: main description: revision to be used from repo of the code for deployment name: GIT_REVISION type: string - default: quay.io/ser_sensini/vite-example:0.0.1-build description: image to be built from the code name: IMAGE type: string - default: \u0026#39;5173\u0026#39; description: Port on the container that the service should direct traffic to. name: SERVICE_PORT type: string tasks: - name: fetch-repository params: - name: url value: $(params.GIT_REPO) - name: revision value: $(params.GIT_REVISION) - name: subdirectory value: \u0026#39;\u0026#39; - name: deleteExisting value: \u0026#39;true\u0026#39; taskRef: kind: ClusterTask name: git-clone workspaces: - name: output workspace: workspace - name: build-image params: - name: TLSVERIFY value: \u0026#39;false\u0026#39; - name: IMAGE value: $(params.IMAGE) runAfter: - fetch-repository taskRef: kind: ClusterTask name: buildah workspaces: - name: source workspace: workspace - name: deploy params: - name: SCRIPT value: \u0026gt;-oc new-app --name=$(params.APP_NAME) --image=$(params.IMAGE) --as-deployment-config runAfter: - build-image taskRef: kind: ClusterTask name: openshift-client - name: expose-route params: - name: SCRIPT value: oc expose service/$(params.APP_NAME) --port $(params.SERVICE_PORT) runAfter: - deploy taskRef: kind: ClusterTask name: openshift-client workspaces: - name: workspace Scaviamo un po\u0026rsquo; nell\u0026rsquo;anatomia della pipeline; all\u0026rsquo;inizio della sezione del codice, ci sono 2 aree:\n workspace, che definisce un\u0026rsquo;area di lavoro che può essere associata a uno storage permanente una volta eseguita la pipeline; params, dove sono definiti tutti i parametri che possono essere accettati dalla pipeline, con i loro valori di default, se presenti. --- # ... apiVersion: tekton.dev/v1beta1 kind: Pipeline metadata: name: vite-example spec: params: ... tasks: ... workspaces: - name: workspace Analizziamo i Task uno a uno: quello chiamato fetch-repository, che puoi trovare nel codice sottostante, è responsabile della clonazione del repository del codice sorgente; ha i propri parametri, il cui significato dovrebbe essere abbastanza chiaro e una sezione workspaces che lega l\u0026rsquo;output alla cartella che è stato definita in precedenza tramite lo storage. Da notare inoltre che l\u0026rsquo;attività fa riferimento al clone git ClusterTask: i ClusterTask sono attività comunemente utili a livello di cluster implementate e rese disponibili da Red Hat OpenShift, in modo che tu possa semplicemente riutilizzarle senza reinventare la ruota.\n... tasks: - name: fetch-repository params: - name: url value: $(params.GIT_REPO) - name: revision value: $(params.GIT_REVISION) - name: subdirectory value: \u0026#39;\u0026#39; - name: deleteExisting value: \u0026#39;true\u0026#39; taskRef: kind: ClusterTask name: git-clone workspaces: - name: output workspace: workspace ... Il Task chiamato build-image è responsabile della creazione e del push dell\u0026rsquo;immagine nel registry, in base al valore del parametro $(params.IMAGE); nel caso di esempio questo è quay.io/ser_sensini/vite-example:0.0.1-build, quindi cercherà di eseguire il push al registry di Quay.io e creare un\u0026rsquo;immagine con il nome e il tag specificato.\nSi basa su un ClusterTask che usa buildah, uno strumento molto simile a Podman, che costruisce l\u0026rsquo;immagine sulla base di un Dockerfile; notare la sezione runAfter che indica alla pipeline di eseguire l\u0026rsquo;attività solo dopo il completamento dell\u0026rsquo;attività fetch-repository.\n... tasks: - name: build-image params: - name: TLSVERIFY value: \u0026#39;false\u0026#39; - name: IMAGE value: $(params.IMAGE) runAfter: - fetch-repository taskRef: kind: ClusterTask name: buildah workspaces: - name: source workspace: workspace ... Il Task deploy è responsabile del rilascio e dell\u0026rsquo;avvio dell\u0026rsquo;immagine, creata nel passaggio precedente, in OpenShift. Si noti che è basato su un altro ClusterTask, openshift-client, che consente di utilizzare la riga di comando oc all\u0026rsquo;interno della pipeline; questo serve per permette l\u0026rsquo;utilizzo del comando oc new-app, che andrà a creare un Pod con il relativo controller DeploymentConfig a partire dall\u0026rsquo;immagine specificata.\ntasks: - name: deploy params: - name: SCRIPT value: \u0026gt;-oc new-app --name=$(params.APP_NAME) --image=$(params.IMAGE) --as-deployment-config runAfter: - build-image taskRef: kind: ClusterTask name: openshift-client Infine l\u0026rsquo;attività expose-route è responsabile di creare una Route in OpenShift in modo che l\u0026rsquo;applicazione sia accessibile tramite browser con un protocollo HTTP.\ntasks: - name: expose-route params: - name: SCRIPT value: oc expose service/$(params.APP_NAME) --port $(params.SERVICE_PORT) runAfter: - deploy taskRef: kind: ClusterTask name: openshift-client Ora che abbiamo progettato e implementato una pipeline OpenShift, probabilmente vorremo utilizzarla, e possiamo farlo in un paio di modi: eseguire una pipeline tramite la riga di comando con la CLI di Tekton Pipelines o eseguire una pipeline utilizzando la GUI di OpenShift.\nRimaniamo sulla console di OpenShift, e selezioniamo la voce Pipelines dal menù di sinistra: una volta importato il file precedente, vedremo all\u0026rsquo;interno dell\u0026rsquo;elenco una nuova voce, relativa a quanto definito. Clicchiamo sul dettaglio della pipeline e clicchiamo su \u0026ldquo;Actions\u0026rdquo;, in alto a destra: questo ci permetterà di avviare la pipeline ed eseguire i diversi step previsti, che verranno mostrati con il relativo stato sul dettaglio di sinistra.\nAvviando la pipeline, verrà creato un oggetto PipelineRun, che comportano una serie di TaskRun: ognuno di questi corrisponde a ogni Task descritto all\u0026rsquo;interno della Pipeline complessiva. Clicchiamo su \u0026ldquo;Start\u0026rdquo; tramite Actions e compiliamo i diversi campi, che corrispondono ai parametri definiti nella Pipeline: non ci dimentichiamo di associare al workspace il volume creato in precedenza, per permettere ai diversi Task di condividere i dati prodotti:\nPer monitorare lo stato di esecuzione dei diversi Task, è possibile cliccare sui singoli riquadri di dettagli e vedere i log relativi ai singoli container.\nAl termine dell\u0026rsquo;esecuzione, troveremo l\u0026rsquo;applicazione nella topologia del progetto, e potremo accedervi tramite la Route:\nQuesto naturalmente è un esempio molto semplice, ma può essere esteso ad altri casi d\u0026rsquo;uso, che coinvolgono Task più complessi, piuttosto che un\u0026rsquo;applicazione diversa o un tipo di risorse differenti; questo articolo vuole essere solo una panoramica di cosa fare per utilizzare il framework OpenShift Pipelines per costruire una pipeline!\nRisorse utili Codice sorgente dell\u0026rsquo;applicazione Vite Docker - per cominciare bene con Docker e Kubernetes ", "url": "https:\/\/theredcode.it\/openshift\/redhat-pipelines-vite\/" }, "https:\/\/theredcode.it\/tags\/tekton\/": { "title": "tekton", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/tags\/tekton\/" }, "https:\/\/theredcode.it\/categories\/tekton\/": { "title": "tekton", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/categories\/tekton\/" }, "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\/tags\/aws-lightsail\/": { "title": "aws-lightsail", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/tags\/aws-lightsail\/" }, "https:\/\/theredcode.it\/categories\/aws-lightsail\/": { "title": "aws-lightsail", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/categories\/aws-lightsail\/" }, "https:\/\/theredcode.it\/tags\/github\/": { "title": "github", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/tags\/github\/" }, "https:\/\/theredcode.it\/categories\/github\/": { "title": "github", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/categories\/github\/" }, "https:\/\/theredcode.it\/aws\/github-actions-con-lightsail\/": { "title": "GitHub Actions con Lightsail", "tags": ["aws","aws-lightsail","github","github-actions",], "content": "GitHub Actions e AWS: in che modo possiamo sfruttare questa feature di GitHub con AWS Lightsail, il servizio di Amazon per creare delle istanze di hosting già pronte all\u0026rsquo;uso?\nDa quando Amazon ha avviato questo servizio, ha aperto le porte a tutte quelle persone che hanno bisogno di un hosting che sia semplice da usare e che non sia costoso: in questo articolo vedremo infatti come sfruttare queste due tecnologie per avere un flusso che applichi la Continuous Delivery e il Continuous Deployment!\nCosa vedrai GitHub Actions Esempio Risorse utili GitHub Actions GitHub Actions è una feature che automatizza la creazione, il test e la distribuzione del software. Ma non si ferma qui: ti permette anche di eseguire qualsiasi tipo di operazione sul tuo repository quando si verifica un evento specifico.\nPer avere un quadro completo di cosa sia GitHub Actions, aiuta a scomporlo nei suoi numerosi componenti, che trovi nel precedente articolo sul tema.\nEsempio In questo articolo vedremo come utilizzare le GitHub Actions per eseguire il deploy di un\u0026rsquo;applicazione Hugo su un\u0026rsquo;istanza Lightsail basata su LAMP: questi passaggi sono validi per qualsiasi tipologia di applicazione debba essere deployata sotto un web server come Apache o Nginx.\nSarà necessario seguire alcuni steps: dovremo definire quale evento attiverà le azioni descritte nella sezione relativa ai job e poi descrivere tutti gli step che devono essere seguiti per poter procedere.\nNel nostro caso, avremo bisogno che la GitHub Action vada a scaricare Hugo nella versione utilizzata per poi generare il contenuto di build del sito e pubblicarlo all\u0026rsquo;interno dell\u0026rsquo;istanza Lightsail.\nPartiamo però dalla parte più semplice: scegliamo il repository da utilizzare per la creazione della GitHub Action e assegnamole un nome:\nPer decidere il nome del flusso di lavoro, inseriamo la proprietà name:\nname: Deploy Hugo site to Lighsail A questo punto, andiamo a descrivere il trigger che dovrà scatenare la Action e portare all\u0026rsquo;esecuzione i diversi step di lavoro; per questo esempio, utilizzeremo come evento il push di un commit sul branch master del repository.\nname: Deploy Hugo site to Pages on: push: branches: [\u0026#34;master\u0026#34;] Passo successivo: descrivere i passaggi che devono essere eseguiti per portare la nostra applicazione sull\u0026rsquo;istanza Lightsail. Per farlo, ci sarà bisogno di descrivere all\u0026rsquo;interno della sezione jobs il flusso di lavoro che deve essere elaborato.\nGrazie ai jobs, è possibile eseguire più operazioni in parallelo: in questo caso però, i passaggi da eseguire saranno sequenziali, perché ognuno di essi è fondamentale per quello successivo.\nbuild è il nome assegnato al job: questo è infatti l\u0026rsquo;ID che viene assegnato al task per descrivere in modo univoco l\u0026rsquo;attività che verrà eseguita.\nname: Deploy Hugo site to Pages on: push: branches: [\u0026#34;master\u0026#34;] jobs: build: Ogni job viene eseguito in un ambiente di esecuzione chiamato runner environment il cui sistema viene specificato nell\u0026rsquo;istruzione runs-on. Per le attività dell\u0026rsquo;esempio, andremo ad utilizzare una distribuzione Ubuntu, specificando anche eventuali variabili di ambiente che ci possono tornare utili nelle fasi successive.\n Come avviene l\u0026rsquo;esecuzione? GitHub ha un insieme di macchine virtuali su Azure che vengono utilizzate per questo tipo di operazioni, sfruttando dei servizi chiamati proprio runner.\n Per scegliere il runner è possibile seguire diverse strategie: nella documentazione vengono elencati tutti i runner che sono disponibili e hostati da GitHub, tra cui Ubuntu, Windows e MacOS. Esistono diverse modalità con cui utilizzare questi runner: andiamo ad utilizzare quella più semplice, dichiarando il nome del self-hosted runner.\nname: Deploy Hugo site to Pages on: push: branches: [\u0026#34;master\u0026#34;] jobs: build: runs-on: ubuntu-latest env: HUGO_VERSION: 0.99.1 Il primo passaggio utilizza un\u0026rsquo;azione denominata actions/checkout@v2. Questa è un\u0026rsquo;azione fornita da GitHub che verificherà il tuo repository sul runner, in modo che possa essere compilato e testato.\nname: Deploy Hugo site to Pages on: push: branches: [\u0026#34;master\u0026#34;] jobs: build: runs-on: ubuntu-latest env: HUGO_VERSION: 0.99.1 steps: - uses: actions/checkout@v2 with: submodules: true # Fetch Hugo themes fetch-depth: 0 # Fetch all history for .GitInfo and .Lastmod Per il secondo step, andiamo a descrivere qual è il task da eseguire, che action utilizzare e con che modalità: nel caso di esempio, lo step che deve essere eseguito per primo è quello che configura Hugo nella versione utilizzata per lo sviluppo del sito, per cui utilizzeremo una action presente su GitHub creata proprio per Hugo.\n Se utilizziamo una tecnologia diversa per il sito statico con cui si vuole lavorare, è sufficiente cercare la GitHub Action più adatta nel Marketplace!\n Gli argomenti possono essere forniti all\u0026rsquo;azione nella sezione with; in questo esempio, specifichiamo la versione estesa di Hugo 0.99.1, secondo la documentazione della GitHub Action.\nname: Deploy Hugo site to Pages on: push: branches: [\u0026#34;master\u0026#34;] jobs: build: runs-on: ubuntu-latest env: HUGO_VERSION: 0.99.1 steps: - uses: actions/checkout@v2 with: submodules: true # Fetch Hugo themes fetch-depth: 0 # Fetch all history for .GitInfo and .Lastmod - name: Setup Hugo uses: peaceiris/actions-hugo@v2 with: hugo-version: ${{ env.HUGO_VERSION }} extended: true Lo step successivo è quello di andare a minificare il codice di Hugo: questo step produrrà quindi una cartella denominata public che possiamo andare ad utilizzare per pubblicare l\u0026rsquo;applicazione sotto il web server nello step successivo.\nname: Deploy Hugo site to Pages on: push: branches: [\u0026#34;master\u0026#34;] jobs: build: runs-on: ubuntu-latest env: HUGO_VERSION: 0.99.1 steps: - uses: actions/checkout@v2 with: submodules: true # Fetch Hugo themes fetch-depth: 0 # Fetch all history for .GitInfo and .Lastmod - name: Setup Hugo uses: peaceiris/actions-hugo@v2 with: hugo-version: ${{ env.HUGO_VERSION }} extended: true - name: Build environment production run: hugo --minify L\u0026rsquo;ultimo step è quello relativo alla copia dei file sull\u0026rsquo;istanza Lightsail: trattandosi di una sorta di server per hosting, possiamo infatti pensare di copiare i file utilizzando scp della cartella public nell\u0026rsquo;istanza.\nPer accedervi, avremo bisogno però di alcune informazioni, tra cui la chiave, l\u0026rsquo;indirizzo IP, la porta e lo username. Tutte queste informazioni sono disponibili all\u0026rsquo;interno della dashboard di Lightsail relativo all\u0026rsquo;istanza che utilizziamo.\nTrattandosi di informazioni sensibili, per fornire questi valori alla GitHub Action, l\u0026rsquo;ideale è utilizzare i Secret: si tratta di oggetti che fanno parte del repository e che possono essere utilizzati per memorizzare dati sensibili, come chiavi, certificati o password. Soprattutto se utilizziamo un repository pubblico, queste informazioni non dovrebbero essere visibili!\nPer creare i Secret, andiamo nella sezione \u0026ldquo;Settings\u0026rdquo; del repository e nel menù a sinistra clicchiamo su \u0026ldquo;Secrets\u0026rdquo;:\nPer lo scopo di esempio, sarà importante creare un secret che contenga le informazioni descritte in precedenza: ad esempio, andremo a creare un secret che contenga all\u0026rsquo;interno della variabile \u0026ldquo;HOST\u0026rdquo; l\u0026rsquo;indirizzo IP dell\u0026rsquo;istanza Lightsail:\nRipetiamo la stessa procedura per tutti i campi che vogliamo memorizzare nei Secret e ci concentriamo sulla chiave: per collegarsi all\u0026rsquo;istanza Lightsail tramite SSH, ci viene infatti fornita una chiave di default (o custom) che è possibile scaricare dalla dashboard del servizio AWS e che ci permette di avviare una connessione con un qualsiasi terminale.\nPer la GitHub Action utilizziamo, nel caso del campo key, la chiave dell\u0026rsquo;istanza fornita da AWS Lightsail memorizzata in un secret ad hoc.\nA questo punto, siamo pronti per copiare, a partire dalla cartella public, il sito statico all\u0026rsquo;interno del web server di Apache!\nname: Deploy Hugo site to Pages on: push: branches: [\u0026#34;master\u0026#34;] jobs: build: runs-on: ubuntu-latest env: HUGO_VERSION: 0.99.1 steps: - uses: actions/checkout@v2 with: submodules: true # Fetch Hugo themes fetch-depth: 0 # Fetch all history for .GitInfo and .Lastmod - name: Setup Hugo uses: peaceiris/actions-hugo@v2 with: hugo-version: ${{ env.HUGO_VERSION }} extended: true - name: Build environment production run: hugo --minify - name: copy file via ssh password uses: appleboy/scp-action@master with: host: ${{ secrets.HOST }} port: ${{ secrets.PORT }} source: \u0026#34;./public\u0026#34; key: ${{ secrets.SSH_KEY_PRIVATE }} target: \u0026#34;/opt/bitnami/apache2/htdocs\u0026#34; username: ${{ secrets.USERNAME }} overwrite: true Terminato quest\u0026rsquo;ultimo step, sarà sufficiente verificare che l\u0026rsquo;esecuzione vada a buon fine: il flusso di lavoro (aka workflow) sarà presente sotto la sezione \u0026ldquo;Actions\u0026rdquo;, mentre il file che descrive la Action appena creato viene pushato all\u0026rsquo;interno del repository sotto .github/workflows:\n Se ti è piaciuto questo articolo, non ti dimenticare di commentare e condividere! ⬇️\n Risorse utili Documentazione ufficiale ", "url": "https:\/\/theredcode.it\/aws\/github-actions-con-lightsail\/" }, "https:\/\/theredcode.it\/tags\/github-actions\/": { "title": "github-actions", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/tags\/github-actions\/" }, "https:\/\/theredcode.it\/categories\/github-actions\/": { "title": "github-actions", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/categories\/github-actions\/" }, "https:\/\/theredcode.it\/interviste\/voglio-diventare-una-head-of-marketing-and-communication\/": { "title": "Voglio diventare una... Head of Marketing and Communication", "tags": ["interviste","voglio-diventare",], "content": "Cosa vedrai Descriviti in 100 parole In cosa consiste il ruolo di Head of Marketing and Communication? Qual è la soft skill più importante che deve possedere una Head of Marketing and Communication? 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 Head of Marketing and Communication? 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 Urca, ci provo: grounded, tendenzialmente conformista, amante delle belle arti, vagamente buonista, inquieta, in costante autoanalisi. Può andare? Passiamo alle cose più serie: laureata in Lingue e Letterature Straniere milioni di anni fa e con un Executive MBA al PoliMi, dopo aver lavorato come Digital Marketer nel settore industriale manifatturiero per un ventennio, nel 2021 mi sono buttata a testa bassa nel mondo tech come Head of Marketing and Communication di SparkFabrik, una tech company focalizzata sullo sviluppo di applicazioni Cloud Native con sede a Milano.\n Perché? Perché avevo necessità di cambiare e di ritrovarmi nei valori in cui credo e che si erano persi altrove, loro erano la ripartenza giusta. E mi hanno accolta.\n E? Beh, semplicemente amo la comunicazione, in ogni sua forma, mi piace, mi viene facile. Mi piace lavorare in team, conoscere gente.\nE appena ho scoperto le community di questo mondo, mi ci sono appassionata (sono attiva nel team organizzativo del KCD Italy della https://www.cncf.io/ e nel gruppo italiano di localizzazione del Glossario, cerco di capire come contribuire al WG dei Cartografos sempre in ambito CNCF e ho tradotto in italiano \u0026ldquo;La guida illustrata per bambini a Kubernetes\u0026rdquo; per divertimento).\nIl sogno nel cassetto? Scrivere, magari viaggiando attraverso l’Europa in moto quando i figli lo permetteranno - e il mutuo sarà parzialmente estinto.\nIn cosa consiste il ruolo di Head of Marketing and Communication? Il ruolo di Head of Marketing cambia drasticamente a seconda del settore in cui si lavora. Pare una banalità, eppure è così. Nel mondo tech è qualcosa con un suo flavour particolare: è un ruolo che per lo più lotta contro l’immagine del marketing fuffa e che deve impegnarsi a dimostrare che in realtà dietro all’apparenza c’è sostanza. È parecchio impegnativo.\nLa strategia di SparkFabrik al momento è concentrata su attività di inbound, quindi tanta content creation, tanto racconto, tanta SEO, che si tratti di scritti o di puntate del podcast; lavoriamo pochissimo con attività paid (Google and social advertising per intenderci) e tantissimo con le persone e il loro know-how: l’altro pilastro fondamentale, infatti, sono le community, qualcosa che ho imparato a vivere in questi due anni, come anticipavo sopra.\nIl mio ruolo, quindi, è sostanzialmente quello di facilitare il fluire tra interno ed esterno: creare delle connessioni utilizzando ogni canale a mia disposizione e rendendo il racconto pervasivo e condiviso, dato che nella mia prospettiva il marketing non è una funzione, bensì un approccio più totalizzante, che se ne sia più o meno consapevoli.\n Obiettivo ultimo è guadagnare una posizione sempre più alta di thought leadership nel mondo dello sviluppo Cloud Native.\n Ed è qualcosa che si costruisce con calma e costanza, un pezzettino alla volta, e sicuramente non in solitaria.\nAmo il lavoro in squadra, da sempre. Sono abituata a coordinare persone su fusi orari diversi e con expertise spesso non verticali di marketing, e anche in Spark stiamo costruendo un team distribuito, in cui saranno le teste e non le funzioni o i titoli a fare le differenze: abbiamo un DevRel Engineer dedicato, il supporto di un Head of Design, della nostra Digital Strategist e di un creativo dal background iper-tecnico che è un vulcano di idee.\nQual è la soft skill più importante che deve possedere una Head of Marketing and Communication? Credo la capacità di ascolto. Ascolto inteso come attenzione totale che comprenda una qualche forma di intuizione del proprio interlocutore, delle sue pene e dei suoi motivi di orgoglio. Che si tratti di un potenziale ascoltatore, di un futuro cliente, di un lettore assiduo in grado di influenzare un processo decisionale.\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. Uh! Quando sono arrivata ho sottovalutato ogni aspetto e ho creduto di poter applicare metodi e modelli rodati che funzionavano altrove con audience profondamente diverse da quelle cui ero avvezza. Si parla tanto di bias cognitivi, no?\nEccomi qua: ho approcciato il settore tech portandomi dietro un coacervo di supponenza e faciloneria, io i dev li conosco, cosa vuoi che sia.\nNulla pareva funzionare. Ho dovuto attraversare la crisi e aggrapparmi ad alcuni capisaldi della mia professionalità, e mi sono messa a studiare.\nCome fare per diventare una Head of Marketing and Communication? Per quando io creda nei talenti, credo però poco nell’improvvisazione professionale. Per fare bene, c’è da sapere e pertanto c’è da studiare. Come in altri ambiti, l’aggiornamento deve essere costante: cambiano i paradigmi comportamentali delle persone, i metodi, le soluzioni, i constraints - vedi il web cookieless al quale stiamo andando incontro; si affacciano nuove soluzioni, e nel nostro caso tutto il panorama del MarTech sta evolvendosi ad una rapidità mai vista prima, per cui c’è da approcciare e conoscere le piattaforme per automazione, analisi, integrazioni di tutte le attività in essere (si parla di Developer Experience sul fronte dello sviluppo, mi sento di poter serenamente parlare di Marketer Experience per quel che mi riguarda).\nE poi c’è da studiare la materia: è fondamentale capire di cosa si stia parlando per riuscire a capire come e a chi comunicare (un assunto che vale sempre e in ogni settore, ovviamente). I primi miei due anni sono stati in gran parte dedicati ad uno studio matto e disperatissimo (cit.) e i prossimi saranno dedicati all’acquisizione di nuove certificazioni.\nNel nostro settore, inoltre, servono tanta determinazione nel non perdere l’orientamento, un minimo di autostima per reggere eventuali bordate derivate da pregiudizi altrui (insomma ne abbiamo tutti) e dal senso diffuso di essere sempre fuori posto, fuori dal coro; e una gran voglia di approfondire costantemente ad una rapidità inennarrabile e peculiare (altrove i ritmi sono più diluiti, questo è un settore fast-paced, o frenetico, lo sappiamo).\nParlando di successi, qual è il tuo prossimo obiettivo? Quale ruolo vorresti ricoprire entro i prossimi 3 anni? Non ho alcun tipo di piano in mente, in questo senso. Non mi interessano più i titoli, ad esempio, si tratta di un capitolo chiuso per me.\nVorrei concentrarmi sul contenuto, sulle persone, sulla creazione di un team sempre più ampio, variegato e coeso che lavori affinché SparkFabrik possa essere riconosciuta come leader indiscussa a livello europeo e in grado di creare una rete fitta di esperienze di valore. In termini più spicci, invece, sto rincorrendo una certificazione pseudo-tecnica che mi sta facendo penare più della patente per la moto.\nConosci il tema gender gap in ambito STEM? Se sì, come fare per superarlo? Ma davvero nel 2023 c’è ancora qualcuno che non conosca il tema del gender gap in ambito STEM?\n Commenti a parte, sì, so di cosa stiamo parlando ed è un argomento interessante per mille ragioni - tra queste c’è il mio ruolo di genitrice di due figli maschi che vorrei crescessero consapevoli. Partiamo dal presupposto che il gender gap esiste in modo trasversale in molti settori e che si esplicita in forme diverse, che sia in termini di equità salariale o di coinvolgimento ai piani alti. Però sono sempre molto combattuta sul come affrontare queste tematiche, così delicate, perché contengono il rischio della frammentazione degli sforzi.\n Intendo dire che se ci concentriamo sul gender gap binario arriveremo a conclusioni che in qualche modo avranno escluso una serie di altri gruppi sottorapresentati.\n Premesso questo, credo che tra le soluzioni più radicali con le quali possiamo pensare di modellare nuovi atteggiamenti mentali, una passi per la scuola, prima ancora che dalle famiglie: bisognerebbe raccontarle queste professioni, questi percorsi, queste opportunità a partire dalle elementari in poi, invitando professionisti, tenendo corsi di alfabetizzazione informatica e scientifica da parte di chi si dedica a questo tipo di formazione e divulgazione, e non delegando maestri e professoresse che, per quanto bravi, si trovano spesso costretti a improvvisare.\n Raccontare e far provare con mano.\n L’altro giorno uno dei miei ragazzini ha messo insieme le prime sue due pagine web e ne era entusiasta: “Mamma, che figata, mi sento già un programmatore”. È stato sufficiente questo per accendere un barlume, lo stesso che si è acceso nella sua compagna di classe.\nRaccontare, fare e giocare. Poi è tutto molto più complesso di così, ma partirei da lì.\nContatti LinkedIn Twitter Instagram ", "url": "https:\/\/theredcode.it\/interviste\/voglio-diventare-una-head-of-marketing-and-communication\/" }, "https:\/\/theredcode.it\/kubernetes\/cos-e-etcd\/": { "title": "Cos\u0027è etcd", "tags": ["kubernetes","openshift",], "content": "Cosa vedrai Etcd Caratteristiche Risorse utili Etcd etcd è un datastore open source basato su coppie chiave-valore utilizzato per gestire e archiviare i dati che aiutano un sistema distribuito -come un cluster- a rimanere in esecuzione correttamente.\netcd è conosciuto principalmente per essere uno dei componenti chiave di Kubernetes, dal momento che memorizza i dati relativi allo stato, alla configurazione e ai metadati di Kubernetes.\nQuesto componente viene considerato l\u0026rsquo;unica fonte di verità rispetto allo stato del cluster.\nCaratteristiche Replicazione e coerenza Tra le tante caratteristiche, etcd è replicato: questo vuol dire che ogni nodo del cluster ha pieno accesso al datastore e ai suoi dati.\netcd è anche coerenza: tutti i dati letti in un cluster rappresentano la situazione attuale dello stato del cluster.\nIn un cluster etcd -per un momento abbandoniamo Kubernetes- immaginiamo di avere quattro nodi, di cui uno rappresenta il nodo leader e gli altri sono i follower.\nEssendo un datastore che memorizza i dati sotto forma di chiave-valore, ognuno di essi avrà memorizzati dei dati che usano questo formato.\nImmaginiamo, ad esempio, che all\u0026rsquo;interno di etcd sia memorizzata una coppia la cui chiave è 1 e il cui valore è 33:\nQuando arriva una nuova richiesta da un client, questa transita verso uno qualsiasi dei nodi: se si tratta proprio del nodo leader, questo comunicherà l\u0026rsquo;aggiornamento ai suoi follower e attenderà che tutti abbiano aggiornato l\u0026rsquo;informazione a quella dello stato richiesto -il tutto avviene in pochi millisecondi!-.\n Una request può arrivare anche ad un nodo follower, che non è detto sia coerente con la base dati attuale: se\nchiedesse il valore attuale della chiave 1 e questi non fosse aggiornato, non si avrà una situazione di inconsistenza. Il nodo sa di essere un follower, per cui non è autorizzato a rispondere direttamente a chi ha fatto la richiesta. Inoltrerà la request al nodo leader, il quale risponderà con l\u0026rsquo;informazione aggiornata.\n Alta disponibilità Immaginiamo che il nodo leader per qualche motivo vada in errore: chi sarà il nuovo leader?\nIn effetti, etcd si basa sull\u0026rsquo;algoritmo Raft, che serve a gestire il consenso in un sistema distribuito per garantirne l\u0026rsquo;alta disponibilità e un ottimo livello di performance.\nQuesto vuol dire che i follower potranno candidarsi all\u0026rsquo;elezione del nuovo leader e ognuno voterà in base alla disponibilità, di modo che un nuovo leader venga eletto. Il nuovo leader si occuperà di gestire anche la replicazione dei nodi e i dati presenti nel datastore non saranno in alcun modo persi.\nVeloce etcd ha una performance di circa 10.000 scritture al secondo, ma salva i dati su disco: questo vuol dire che la performance dipende da quelle del disco.\nSicurezza Trattandosi di informazioni sensibili, perché rappresentano lo stato del cluster, è importante che etcd sia anche sicuro: questo supporta TLS nonchè la possibilità di utilizzare un meccanismo di autenticazione che usi i certificati del client.\n Se ti è piaciuto questo articolo, non ti dimenticare di commentare e condividere! ⬇️\n Risorse utili Docker (disponibile su Amazon) Come installare Docker (e Docker Compose) Esplorando il Dockerfile Canale di Emmecilab ", "url": "https:\/\/theredcode.it\/kubernetes\/cos-e-etcd\/" }, "https:\/\/theredcode.it\/interviste\/voglio-diventare-una-chief-ai-officer\/": { "title": "Voglio diventare un... Chief AI Officer", "tags": ["interviste","voglio-diventare",], "content": "Cosa vedrai Descriviti in 100 parole In cosa consiste il ruolo di Chief AI Officer? Qual è la soft skill più importante che deve possedere un Chief AI Officer? 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 un Chief AI Officer? 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 Vengo da un percorso matematico, studiando ingegneria tra Italia e Francia. Sono sempre stato affascinato da formule e programmazione e nel tempo ho cercato di capire cosa fare da grande, passando dalla fluidodinamica al rischio bancario. Ma erano tutti ambiti che non mi appassionavano e per caso ho scoperto un’applicazione incredibile: il linguaggio naturale. È da anni che faccio ricerca e sviluppo in questo campo rimanendone sempre più affascinato e ho co-fondato indigo.ai, una startup che combina strumenti di linguaggio e tecnologia per creare chatbot.\nAd oggi ne dirigo il team “AI”.\nIn cosa consiste il ruolo di Chief AI Officer? È un po’ come se fosse il CTO dell’intelligenza artificiale: gestisco la parte di ricerca su modelli di frontiera, lo sviluppo di alcune features da inserire nella nostra piattaforma e la parte infrastrutturale per servire i vari modelli addestrati. Ho un team che si divide tra AI Researchers e Machine Learning Engineers, i primi più dedicati alla parte di prototipizzazione e pubblicazione accademica e i secondi allo sviluppo e alla messa in produzione. \nQual è la soft skill più importante che deve possedere una Chief AI Officer? Il ruolo richiede diverse soft skills, ma una delle più importanti è la capacità di comunicare in modo chiaro ed efficace con i membri del team e con gli stakeholder dell\u0026rsquo;azienda, come un po’ tutti i ruoli definiti di “prima linea”.\n La comunicazione è essenziale per garantire che tutti comprendano il lavoro svolto dal team e per identificare le esigenze degli utenti e dei clienti. Deve anche essere in grado di tradurre i risultati della ricerca in opportunità di business e di spiegare il valore dell\u0026rsquo;intelligenza artificiale ai non addetti ai lavori.\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. Nei primi anni di startup, erano senza dubbio più i fallimenti che i successi. Dove mi rendevo conto di sbagliare di più era la gestione del team, in cui non riuscivo a trovare l’equilibrio tra “fare” e “delegare” e a posteriori mi rendo conto di aver perso tantissimo tempo, sia mio che dei colleghi. Però alla fine probabilmente non era tempo perso, ma ben utilizzato nell’imparare a organizzare e comunicare al meglio. \nCome fare per diventare una Chief AI Officer? Per diventare un Chief AI Officer, di solito è necessario avere una formazione in ambito tecnico, come la matematica, l\u0026rsquo;informatica, l\u0026rsquo;ingegneria o le scienze cognitive. È importante poi avere una forte esperienza pratica nel campo dell\u0026rsquo;intelligenza artificiale, che può essere acquisita lavorando in aziende che si occupano di AI, in laboratori di ricerca, in start-up o in università.\nÈ importantissimo essere curiosi e rimanere costantemente aggiornati sulle ultime tendenze e innovazioni nel campo dell\u0026rsquo;intelligenza artificiale perché è un mondo che va a mille all’ora e basta girarsi un attimo per perdersi un intero filone di ricerca o innovazione!\nCome tecnologie, serve essere forti con Python, con strumenti di ML come https://pytorch.org/, con nozioni generali su databases/Big Data e infine un po’ di Cloud Computing e DevOps.\nParlando di successi, qual è il tuo prossimo obiettivo? Quale ruolo vorresti ricoprire entro i prossimi 3 anni? Quello che faccio giorno per giorno mi piace molto e non vorrei cambiarlo nei prossimi anni! Vorrei invece cambiare un po’ di attività quotidiane passando sempre più alla gestione e alla comunicazione, cercando però di mantenere le mani sul codice, visto che la programmazione rimane una delle mie passioni. \nConosci il tema gender gap in ambito STEM? Se sì, come fare per superarlo? Sì, conosco bene il tema ed è palese come le donne siano sotto rappresentate in questi campi, sia in termini di iscrizioni universitarie che di occupazione.\nMi vien da pensare che il motivo principale siano gli stereotipi di genere, ma probabilmente incidono anche altri fattori come la mancanza di modelli femminili di riferimento, mancanza di accesso alle opportunità di formazione e, senza dubbio, anche un po’ di discriminazione sessuale.\nIo mi ritrovo a lottare contro il gender gap ogni volta che apro una job position: parto con l’intenzione di evitare a tutti i costi di assumere maschi bianchi caucasici ma poi mi ritrovo il 99,9% di candidature di maschi bianchi caucasici.\nLa soluzione più triviale è cercare di risolvere il problema alla base, con le scuole e le università che devono garantire l\u0026rsquo;accesso equo alle opportunità di formazione e sensibilizzare gli studenti e gli insegnanti sulla diversità di genere e sull\u0026rsquo;importanza dell\u0026rsquo;uguaglianza di genere.\nMa non basta scaricare la responsabilità sulle istituzioni ed ognuno nel suo piccolo può iniziare a cambiare le cose, anche in azienda.\n È necessario un impegno collettivo ed è essenziale che tutti ne parlino il più possibile, senza paura di sentirsi una goccia nell’oceano.\n Contatti Profilo LinkedIn indigo.ai ", "url": "https:\/\/theredcode.it\/interviste\/voglio-diventare-una-chief-ai-officer\/" }, "https:\/\/theredcode.it\/random\/5-cose-che-google-sa-di-te\/": { "title": "5 cose che Google sa di te", "tags": ["red-updates",], "content": "Vuoi scoprire tutto quello che Google sa di te? In questo articolo vediamo 5 link (più un bonus!) per analizzare insieme quali sono le informazioni che Google raccoglie giorno dopo giorno tramite i nostri account.\nCosa vedrai Cosa pensa di te Passo dopo passo con te Cosa cerchi Quali app usano i tuoi dati Che video guardi Tip Cosa pensa di te A seconda di quello che cerchiamo, ci vengono proposte -casualmente, no?- delle pubblicità che si adattano al nostro profilo.\nIl servizio che si occupa di raccogliere questi informazioni è relativo quello relativo alle pubblicità e raccoglie le informazioni più disparate creando una tag cloud con tutte le informazioni con cui ti ha profilato.\nQuanti anni hai, che lingue parli, il genere, che programmi usi, fai sport o no, ma soprattutto, sei in affitto, lavori per una grande compagnia, se hai figli, se hai un mutuo attivo, se stai pensando di cambiare lavoro e se ti stai informando per ristrutturare casa.\nTi sembra inquietante? Puoi disattivare questa impostazione usando questo link.\nPasso passo con te Innegabile che Google Maps sia la salvezza di chi ha un pessimo senso dell\u0026rsquo;orientamento, ma anche di chi ha bisogno di recarsi in un\u0026rsquo;attività di cui non conosce gli orari o se ha bisogno di leggere le ultime recensioni su un ristorante appena aperto vicino casa.\nAlzi la mano chi però non disattiva mai GPS e/o WiFi\u0026hellip; Bene, ecco che Google Maps è lì pronto a raccogliere le informazioni circa la tua posizione, anche non utilizzando attivamente l\u0026rsquo;app, sui tuoi spostamenti:\nPer vederlo, clicca qui.\nCosa cerchi, ovunque tu sia Se fai una ricerca dal tuo tablet, o dal tuo smartphone, ormai è la stessa cosa: basta avere un account Google in entrambi i dispositivi per accedere a tutta la cronologia di ricerca con questo servizio.\nPrima che tu te lo chieda, sì, ero alla ricerca disperata di dolci.\nQuali app usano i tuoi dati Tutte le applicazioni che hanno accesso al tuo account Google possono essere visualizzate tramite questa pagina.\nL\u0026rsquo;elenco potrebbe essere spaventosamente lungo, quindi prendi una sedia comoda e scorri la lista!\nChe video guardi La cronologia di YouTube non è una novità, ma potrebbe esserlo trovato nella sezione relativa alle proprie attività di Google:\nSe vuoi visualizzare la tua cronologia, clicca qui.\nTip: esportare i tuoi dati Il servizio Google Takeout serve ad esportare una copia dei propri dati per poterli utilizzare altrove, comprese chiamate, contatti, promemoria e ricerche.\nPer provarlo, usa questo link.\nE tu, quanti di questi servizi conoscevi?\n", "url": "https:\/\/theredcode.it\/random\/5-cose-che-google-sa-di-te\/" }, "https:\/\/theredcode.it\/interviste\/voglio-diventare-una-3d-artist\/": { "title": "Voglio diventare una... 3D Artist", "tags": ["interviste","voglio-diventare",], "content": "Cosa vedrai Descriviti in 100 parole In cosa consiste il ruolo di 3D Artist? Qual è la soft skill più importante che deve possedere una 3D Artist? 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 3D Artist? 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 Mi chiamo Asia Sassano, classe ‘93, vengo da Foggia e dal 2019 lavoro come 3D Artist in giro per l’Italia\u0026hellip; per ora, il mondo è grande dopotutto!\nSono una persona che ha sempre cercato di realizzare i suoi sogni, mia madre mi ha sempre sostenuto, e quando avevo 8 anni tutto pensavo di fare tranne che questo, mi piaceva la scienza e l’arte, e pensavo di fare la chimica o la stilista.\nNel 2016 è arrivata l’illuminazione e ho iniziato questo percorso, tortuoso ma emozionante e soddisfacente.\n Sono figlia d’artisti e questo mi ha portato vedere il mondo con occhi diversi, a cercare sempre quella cosa che rende speciale quello che vediamo e sentiamo.\n In cosa consiste il ruolo di 3D Artist? Ho sempre lavorato in Team, adoro confrontarmi con le persone, gli scambi di idee, trovare le soluzioni giuste, sfruttare le potenzialità di tutti per raggiungere un “fine comune” che soddisfi i desideri di tutti. \n Come 3D Artist il mio ruolo è quello di rendere bello ed emozionante ciò che vediamo, con tutte le specifiche tecniche richieste.\n Spesso il problema principale è dover ottimizzare senza perdere la parte estetica e funzionale, e personalmente è una cosa che adoro fare, mi piacciono le sfide!\nPer quanto riguarda i passaggi più tecnici, di solito il processo inizia con moodboard e concept, in cui non sono proprio una cima ma la scuola che ho frequentato a Milano mi ha preparato anche in questo e infatti riesco a giostrarmi bene quando serve: parto dalle shape (un passaggio che adoro) e da lì cerco di tirare fuori qualcosa di\u0026hellip; sensato.\nDa qui parte la modellazione e la texturizzazione, personalmente mi sono specializzata nel creare ambientazioni e oggetti di scena, montare insieme il tutto abbinando colori e luci è una delle cose che più mi piace fare. Poi ci sono tanti altri ruoli nel mondo del 3D come chi si occupa di Character e chi unisce anche delle competenze da Programmer e diventa quello che si chiama Technical Artist.\nQual è la soft skill più importante che deve possedere una 3D Artist? Oltre a tutte quelle competenze che ho citato prima, credo che un’altra da aggiungere sia sicuramente l’attenzione per i dettagli, aggiungere (o a volte togliere) particolari anche semplicemente con le texture cambia tanto l’aspetto finale del prodotto.\nPoi sicuramente anche un senso estetico per le forme e i colori, curare il mood generale, mi è capitato di trovarmi ad avere a che fare con persone bravissime nel loro lavoro ma che poi facevano degli abbinamenti che non stavano né in cielo e né in terra, e a volte basta davvero poco per rendere bello quello che stiamo facendo.\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. Personalmente sono davvero pessima a farmi “pubblicità” sui social, sono una persona semplice e spero sempre che il mio lavoro parli per me.\nDiciamo che grandi fallimenti al momento non he ho vissuti però ci sono state tante piccole lezioni di vita che mi hanno aiutato a diventare quella che sono: per esempio, all’inizio ci mettevo secoli per creare i modelli, perché passavo le ore a renderli perfetti, quando la perfezione non esiste.\nHo imparato che bisogna essere veloci e ottimali e tirare fuori pezzi unici anche in poco tempo.\nCome fare per diventare una 3D Artist? Vengo da una piccola città, che adoro, ma che spesso non ti dà la possibilità di guardare oltre alle solite opportunità; quindi, lavorare nel mondo dei Videogiochi era una cosa a cui non avevo mai pensato. Nel 2018 mi sono iscritta alla Digital Bros Game Academy che mi ha dato perfettamente tutte le basi di cui avevo bisogno, avevo un professore di 3D formidabile e molto paziente.\nConsiglio sempre di informarsi bene e frequentare qualche corso, io ci ho messo un anno per scegliere la scuola giusta per me.\nMi è capitato di avere a che fare con persone che hanno studiato come autodidatte e non ho visto dei buoni risultati; molto probabilmente perché questo tipo di professione dipende dalle proprie esigenze e da quanta voglia hai di imparare. È quella che ti fa andare avanti!\n Quando frequentavo le lezioni avevo costantemente la mano alzata per fare domande e non perdermi neanche un passaggio di quello che stavo imparando, ed è quello che consiglio sempre di fare.\n Per quanto riguarda le certificazioni -purtroppo in questo mondo è molto relativo- c’è chi le richiede e chi no, l’importante è far vedere quello che sai fare.\nNel mio caso ho aspettato la fine del corso che ho frequentato per acquistare un buon computer per lavorare, ma con le tecnologie di adesso si può iniziare anche con qualcosa di basic: un po’ di pazienza e si possono creare dei bei progetti anche con poco, tutto sta a come vengono sfruttate le varie possibilità!\nParlando di successi, qual è il tuo prossimo obiettivo? Quale ruolo vorresti ricoprire entro i prossimi 3 anni? Ultimamente mi sono resa conto che l’idea di diventare Leader del mio reparto sarebbe una bella opportunità per me: chissà, magari non 3 anni, ma vorrei arrivarci un giorno.\nMi piacerebbe trovarmi in una bella azienda dove ognuno ha il suo compito ed è proprio l’unione dei vari reparti che crea il prodotto finale, e questo mi affascina tantissimo.\nPer i prossimi tre anni spero di crescere sempre di più, acquisire sempre più competenze e mi piacerebbe girare un po’ per il mondo, magari qualche studio fuori dall’Italia o dall’Europa: non mi spaventano situazioni nuove, anzi sento la voglia di dare vita a dei nuovi progetti al solo pensiero!\nConosci il tema gender gap in ambito STEM? Se sì, come fare per superarlo? Fin da piccola, in qualsiasi ambito, mi sono sempre chiesta perché ci fossero tutte queste differenze sociali tra “maschi” e “femmine”: la forza, l’intelletto, i giocattoli, tutto. Crescendo non mi sono mai posta questi limiti, per me le persone sono solo persone, e questo mi ha portato a sapermi relazionare con tutti.\nSpesso mi sono trovata in situazioni dove ero l’unica ragazza ma questo non mi ha mai fermato. Purtroppo anche in base a dove si cresce è fondamentale. Per arrivare dove sono arrivata io ho dovuto lottare più e più volte, anche solo per banali conversazioni come “ma sei femmina, devi fare questo e non quello” ma non mi sono mai sentita frustrata al riguardo perché ho sempre trovato il modo di controbattere in maniera logica, finché non sono entrata effettivamente nel mondo del lavoro, e ho visto, e vedo ancora adesso, individui del sesso opposto avere più attenzioni o semplicemente ricompense elevate di qualsiasi tipo, solo perché maschi. Spesso non vengo presa sul serio, e questo fa molto male.\nUna volta mi è capitato, in un colloquio di lavoro, di sentirmi dire che “volevano un’artista donna perché le donne hanno quella marcia in più”, concetto che trovo del tutto sbagliato perché credo nella parità, sotto tutti i punti di vista.\n L’incentivare le donne nelle scuole e tutte le altre grandi iniziative nel mondo esterno sono ottime per la società odierna, e, secondo me tutti noi, ogni giorno, nel nostro piccolo, possiamo cambiare questa situazione con molto altre iniziative.\n Ogni passo in avanti che vedo nella società mi rende felice, ma siamo ancora molto indietro al riguardo.\nSpero in futuro di poter vivere in un mondo dove le persone non verranno più classificate come femmine/maschi, neri/bianchi, queer/etero cis, ma semplicemente come esseri umani, tutti capaci in qualcosa, con il rispetto gli uni per gli altri.\nContatti Profilo LinkedIn Portfolio ", "url": "https:\/\/theredcode.it\/interviste\/voglio-diventare-una-3d-artist\/" }, "https:\/\/theredcode.it\/recensioni\/sociability-review\/": { "title": "SociAbility", "tags": [], "content": "Per chi comunica (anche) attraverso i social, è fondamentale capirne le regole non scritte, e imparare a governarli.\nRanking Anno 2022 Autore Francesco Oggiano Genere Saggio Livello Per tutti Scorrevolezza 10 / 10 Originalità 10 / 10 Valutazione 10 / 10 Recensione Il sottotitolo introduce alla perfezione in meno di 15 parole tutti gli aspetti che questo libro tratta: un\u0026rsquo;analisi attenta dei social, con dei casi di studio che sono stati in prima pagina sulle principali testate, che vengono documentati e spiegati con dati e fatti, per analizzarne il contenuto, e non il titolo \u0026ldquo;clamoroso\u0026rdquo;\u0026hellip;\nSì, perché la parola che più rimane di questo libro è fattuale: molto di quello che leggiamo tramite i social, che sono ormai i portavoce delle principali notizie dal mondo, quasi mai è corredato di fatti che servano a verificare la veridicità delle notizie.\nArticoli dai titoli che strillano, con descrizioni che sollecitano gli animi e che servono ad attirare l\u0026rsquo;attenzione nel peggiore dei modi: sfruttando l\u0026rsquo;indignazione, e provocando rabbia in chi legge che, offuscato da questi sentimenti che non portano da nessuna parte: sì, perché questa furia fa sì che l\u0026rsquo;istinto primordiale di raccontare a qualcuno che sul giornale si parla di una riforma sul pane che costerà quanto 10 croissant (per riprendere una presunta citazione di sua maestà Maria Antonietta), non porta il cervello a elaborare l\u0026rsquo;idea che quell\u0026rsquo;articolo sia un clickbait, e anche costruito su basi poco solide.\nMa partiamo dall\u0026rsquo;inizio: conosciamo tutti il termine fake news, che negli ultimi anni ci ha permesso di dare un nome a tutti quegli articoli che servono solo ad attirare l\u0026rsquo;attenzione con notizie verosimili, ma false. La realtà dei fatti è che la maggior parte delle notizie contengono dei fake data, e che spesso chi fa giornalismo è costretto a pubblicare una notizia nel giro di ore (non giorni, ma ore), senza verificare i fatti: più che informazione, è diventata una corsa al click, dove invece dei cavalli, ci sono i leoni da tastiera, che con i loro click e commenti indignati aspettano di poter arrivare primi alle notizie più sconvolgenti.\nInsieme alle fake news, abbiamo visto anche l\u0026rsquo;arrivo delle fuck news: quelle notizie che, di per sé sono già delle fake news (perlopiù), e che portano le persone che leggono all\u0026rsquo;apice dell\u0026rsquo;indignazione: chi scrive e pubblica questo tipo di notizie ha espressamente deciso di rinunciare al proprio ruolo di informatore del pubblico a vantaggio di qualche click in più, per non scontentare il pubblico che legge. Magari cavalcano l\u0026rsquo;onda di qualche movimento che già ha sollevato un bel polverone, per poter fare leva su fatti che sono già conosciuti, e condirli con un po\u0026rsquo; di frustrazione che è già lì che cova.\nL\u0026rsquo;autore esprime tramite questo libro non solo la giostra con cui la maggior parte dei giornali gioca oggi, ma soprattutto dedica molta attenzione a una serie di fatti che hanno popolato i nostri social, corredati di video, e che spesso ci siamo persi nell\u0026rsquo;analizzare a fondo. Una lezione che ci si porta a casa è sicuramente che \u0026ldquo;se hai una fonte, è lei ti controlla; se ne hai dieci, se tu al comando\u0026rdquo;: qualunque notizia si legga in giro merita un\u0026rsquo;analisi in più, anche una banale ricerca online per vedere quanti espongono quel fatto e quanto la notizia differisca dalle altre riportate.\nL\u0026rsquo;altro aspetto fondamentale è che sentirsi offeso/a non significa aver ragione: essere aperti al confronto è fondamentale per commentare fatti, raccontare e raccontarsi. Cambiare idea su un qualsiasi argomento non è necessariamente un male, ma è piuttosto segno di estrema intelligenza, soprattutto per quelle persone che, di natura, si sono sempre considerate delle persone imperfette, e che hanno consumato ogni briciolo di forza per cambiare il mondo.\nLezione imparata Consultare almeno 3 fonti prima di gridare \u0026ldquo;al lupo\u0026rdquo; Coltiva il dubbio, soprattutto quando non ce l\u0026rsquo;hai, e quando il tuo istinto ti porta anche a una sola domanda sulla veridicità di ciò che leggi L\u0026rsquo;attivismo sui social non ha niente a che fare con l\u0026rsquo;attivismo sociale, ambientale e politico; è necessario uscire da quella che ormai è una piazza dove vincono gli \u0026ldquo;strilloni\u0026rdquo; l\u0026rsquo;origine del capro espiatorio e questa abitudine a volersi ripulire la coscienza con la coscienza degli altri Quotes I creator sono storyteller e imprenditori che si sono fatti da soli. [\u0026hellip;] I soliti appelli democratici per \u0026ldquo;salvare il vero giornalismo\u0026rdquo; iniziano a puzzare di paura e autoconservazione, visto che, [\u0026hellip;], \u0026ldquo;ci rifiutiamo di guardare la democratizzazione del mestiere avvenuta con la rete. E con i social\u0026rdquo;\n Disponibile su Amazon ", "url": "https:\/\/theredcode.it\/recensioni\/sociability-review\/" }, "https:\/\/theredcode.it\/github\/github-actions\/": { "title": "GitHub Actions 101", "tags": ["github","github-actions",], "content": "Probabilmente hai familiarità con GitHub: sai già che si tratta di una piattaforma straordinaria per creare software, collaborare con i tuoi colleghi di team e contribuire a progetti open source.\nGitHub offre molte funzionalità che ti semplificano la vita come sviluppatore o sviluppatrice.\nIn questo articolo, parleremo di come lavorare con una feature su GitHub killer estremamente potente e sempre sottovalutata: GitHub Actions.\nCosa vedrai GitHub Actions Componenti Scopo Come funziona Risorse utili GitHub Actions GitHub Actions è una piattaforma che automatizza la creazione, il test e la distribuzione del software. Ma non si ferma qui: ti permette anche di eseguire qualsiasi tipo di operazione sul tuo repository quando si verifica un evento specifico.\nComponenti Per avere un quadro completo di cosa sia GitHub Actions, aiuta a scomporlo nei suoi numerosi componenti:\n→ Eventi\nUn evento è tutto ciò che può accadere su un repository GitHub. Questo va dal push di un codice, alla creazione di un branch, all\u0026rsquo;apertura di una richiesta di pull e persino al commento di un problema. L\u0026rsquo;elenco dei trigger è molto più lungo: puoi verificarlo qui.\n→ Workload\nUn flusso di lavoro è un processo automatizzato composto da una serie di lavori che viene eseguito quando viene attivato da un evento.\nI workload sono definiti nei file YAML e sono archiviati in una directory .github/workflows nella radice del repository. Un repository può anche avere più flussi di lavoro.\n→ Job\nUn job è una serie di attività che vengono eseguite in un flusso di lavoro dopo essere state attivate da un evento. Ogni passaggio è uno script o un\u0026rsquo;azione GitHub. Un flusso di lavoro può avere più jobs eseguiti in parallelo.\n→ Runner\nI runner sono processi su un server che eseguono il flusso di lavoro quando viene attivato. Ogni runner è responsabile dell\u0026rsquo;esecuzione di un determinato lavoro. I runner sono ospitati nel cloud ma possono anche essere ospitati autonomamente in ambienti cloud personalizzati.\n→ Actions\nLe azioni sono attività individuali: sono chiamate all\u0026rsquo;interno di un workload e vengono utilizzate per eseguire attività complesse che puoi richiamare più volte.\nAlcuni esempi di azioni sono: pubblicazione di un pacchetto Python su PyPi, invio di un\u0026rsquo;e-mail di notifica, impostazione di Python su una versione specifica prima di eseguire uno script, ecc.\nPuoi creare le tue azioni oppure puoi riutilizzare alcune azioni open source dal marketplace di Github e aggiungerle al tuo flusso di lavoro direttamente quando soddisfano le tue esigenze.\nQuanto descritto finora è riassumibile nella seguente immagine:\nScopo L\u0026rsquo;obiettivo dell\u0026rsquo;aggiunta di Github Actions è fondamentalmente quello di automatizzare le attività che vorresti fossero eseguite ripetutamente ad ogni specifico evento.\nFacciamo un esempio qui: immagina che ogni volta che committi un nuovo pezzo di codice sul tuo repository, ti piacerebbe eseguire una serie di unit test su di esso attraverso una macchina Ubuntu che ha una configurazione specifica.\nCome fare?\nUn\u0026rsquo;opzione è quella di eseguire il push del codice su GitHub, connettersi al server dove vuoi eseguire i test, aggiornare il codice, eseguire i test e attendere l\u0026rsquo;output finale. Inutile dire che è un processo noioso e lungo.\nGrazie alla creazione di una GitHub Action, è sufficiente creare un workload che venga eseguito ad ogni push e che esegua la stessa serie di azioni descritta poco fa: avviare un server, fare il checkout del codice, eseguire una serie di unit test e mostrare i risultati in una console.\nCome funziona Ogni flusso di lavoro è definito in un file YAML all\u0026rsquo;interno della cartella workflows nel repository.\nUn esempio estremamente semplice è il seguente: ad ogni push sul repository (sezione on) nel branch chiamato main, esegui un job (sezione jobs) chiamato print_hello e utilizza un runner basato su Ubuntu (sezione runs-on) per stampare \u0026ldquo;Hello world\u0026rdquo; nella console (sezione steps):\non: push: branches: - main jobs: print_hello: runs-on: ubuntu-latest steps: - run: echo \u0026#34;Hello World!\u0026#34; Questo esempio è volutamente molto semplice ma dovrebbe dare un\u0026rsquo;idea delle infinite possibilità offerte da Github Actions: infatti, qualsiasi sequenza di comandi che avvieresti manualmente su una macchina virtuale remota può essere avviata all\u0026rsquo;interno di un workload: questo può essere una serie di unit test, una serie di fasi di compilazione Docker, una distribuzione di un\u0026rsquo;API, ecc.\n In sintesi, qualsiasi cosa tu possa immaginare di fare, può essere attivata e automatizzata per l\u0026rsquo;esecuzione tramite una GitHub Action.\n Puoi saperne di più sulla sintassi tramite la documentazione presente qui, ma ecco alcune istruzioni fondamentali:\n on : l\u0026rsquo;evento che attiva il workload runs-on : la macchina che ogni lavoro dovrebbe eseguire (ad esempio ubuntu-latest) jobs: l\u0026rsquo;elenco delle attività che compongono il flusso di lavoro steps: la serie di attività che vengono eseguite all\u0026rsquo;interno di ogni job run : il comando che viene eseguito Risorse utili Documentazione ufficiale ", "url": "https:\/\/theredcode.it\/github\/github-actions\/" }, "https:\/\/theredcode.it\/random\/api-dev-serie-tv-film\/": { "title": "5 API che amerai", "tags": ["red-updates",], "content": "Stai iniziando un nuovo progetto o stai imparando un nuovo linguaggio di programmazione e vuoi testare le tue funzionalità senza dover sviluppare delle API da zero, avendo dei dati già pronti per i tuoi test a disposizione?\nIn questo post, vediamo alcune API disponibili online gratuitamente e anche molto geek!\nAh, piccola nota: per nessuna di queste API è necessario registrarsi e ottenere una API key 😘\nCosa vedrai PokéAPI JSON Placeholder Breaking Bad Random Data Rick and Morty PokéAPI Dopo il successo di Pokémon Go, è evidente che a distanza di più di 35 anni dalla sua creazione ancora viene adorato da grandi e piccoli, non si poteva non sfruttare tutta la story per creare delle bellissime API\u0026hellip; prova a cercare il tuo Pokémon preferito!\nJSON Placeholder Quando hai bisogno di un\u0026rsquo;API falsa per testare e creare prototipi, JSON Placeholder ti copre! Inoltre, hanno una buona guida con esempi.🔥⚙👩‍💻\nSWAPI SWAPI cosa? SWAPI sta per \u0026ldquo;Star Wars API\u0026rdquo; e hanno tutti i dati di cui hai bisogno: pianeti, astronavi, veicoli, film e specie!\nBreaking Bad Sei un/a fan di Breaking Bad e una di quelle persone che conosce tutte le citazioni? Allora devi dare un\u0026rsquo;occhiata a questa API.\nTi permette di ottenere citazioni, personaggi, episodi, morti\u0026hellip; 😎\nRandom Data Vuoi essere creativo/a e utilizzare qualcosa di diverso nel tuo progetto? Forse un gioco in cui ottieni una birra o un computer a caso? Questa API di dati random ti fornisce questo e imita anche l\u0026rsquo;hash restituito da risorse omniauth come Github!\nRick and Morty Questa API ti consente di eseguire query per episodio, personaggi, luoghi \u0026hellip; beh, la parte difficile sarà scegliere cosa chiedere!\n Se ti è piaciuto questo articolo, non ti dimenticare di commentare e condividere! ⬇️\n ", "url": "https:\/\/theredcode.it\/random\/api-dev-serie-tv-film\/" }, "https:\/\/theredcode.it\/tags\/gptzerox\/": { "title": "GPTZeroX", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/tags\/gptzerox\/" }, "https:\/\/theredcode.it\/intelligenza-artificiale\/hack-chatgpt\/": { "title": "Hackerare ChatGPT", "tags": ["intelligenza-artificiale","ChatGPT","GPTZeroX",], "content": "Introduzione Lo sappiamo: ChatGPT è uno dei primi sistemi di intelligenza artificiale ad aver raggiunto un target di popolazione incredibilmente ampio in pochissimi giorni, e ad aver battuto i record per il miglior lancio di sempre di qualsiasi prodotto in ambito tech.\nDa diverse settimane, diverse persone che lavorano in ambito tech hanno parlato di averlo sperimentato per diversi scopi: produrre del codice per un problema specifico, content writing, e perfino pianificare una dieta.\nTutte attività potenzialmente utili, per quanto ci siano scuole di pensiero anche su quelli che possono essere i \u0026ldquo;limiti\u0026rdquo; di questo strumento: il contenuto di un articolo scritto da un sistema come questo è realmente creativo? Se chiedo a ChatGPT di generare del codice, a chi appartiene quel codice? E nel caso si parli di generazioni di immagini, assimilabile all\u0026rsquo;arte, la proprietà intellettuale di chi è? Come sono gestite le conversazioni, sono salvate?\nDomande aperte Tutte domande che non trovano un\u0026rsquo;unica risposta, e che hanno diviso l\u0026rsquo;opinione dei professionisti: a proposito della proprietà intellettuale e della privacy rispetto all\u0026rsquo;esposizione di informazioni sensibili, ci sono diversi pareri interessanti: Simone Aliprandi, avvocato, scrittore e divulgatore, parla di -mancati- tentativi da parte degli avvocati che cercano di giustificare i buchi di legge con un ritardo dovuto all\u0026rsquo;uscita troppo rapida del sistema.\nC\u0026rsquo;è anche Vimana Grioni, tech writer, che espone un punto interessante: nelle FAQ riportate da OpenAI, si parla di storico delle richieste dalla cronologia. Per accedere a questo sistema, è necessario registrarsi, e una volta effettuato l\u0026rsquo;accesso, è possibile richiedere diverse informazioni: il punto è che, qualsiasi testo generato a partire dal testo inserito dall\u0026rsquo;utente, sia input che output saranno salvati. Non solo: informazioni sulla comunicazione: se comunichi con noi, potremmo raccogliere il tuo nome, le informazioni di contatto e il contenuto di tutti i messaggi che invii (\u0026ldquo;Informazioni sulla comunicazione\u0026rdquo;).\nCome funziona Il punto di questo articolo non è però discutere le implicazioni che porta l\u0026rsquo;utilizzo di questo strumento, ma piuttosto parlare di come questo possa essere facilmente aggirato: si parla infatti di hacking o meglio poisoning di un sistema di intelligenza artificiale, ed è tanto banale quanto pericoloso.\nFunziona in questo modo: un sistema di questo tipo prende le sue informazioni (e costruisce quella che si chiama knowledge base) da diverse fonti, creando un corpus, utilizzato per addestrare l\u0026rsquo;intelligenza artificiale. L\u0026rsquo;utente pone delle domande, e il chatbot attinge ai dati che ha per trovare una risposta.\nIl lato oscuro Cosa potrebbe andare storto: se anche solo una persona introduca delle informazioni sbagliate, anche solo parzialmente, nel corpus: la sorgente di dati sarebbe corrotta e sarebbe complicato riuscire a distinguere tra le informazioni corrette e quello che non lo sono.\nAttenzione: questo è un problema comune alle ricerche su Internet in generale, con la differenza che qui la sorgente di verità è una, e la risposta viene riportata come autorevole e unica. Per chiarire questo concetto, facciamo un esempio: immagina di cercare sul web qual è il modo migliore per disinfettare e pulire la tua casa; probabilmente troverai tantissime guide e tutorial su come farlo, creando anche dei saponi fatti in casa a base di acido citrico. Questa è proprio la soluzione che fa per te, e inizia a produrre il tuo sapone fatto in casa, e non solo: trovi il modo per rimuovere le macchie più ostinate tramite del bicarbonato, dell\u0026rsquo;acqua calda e dell\u0026rsquo;aceto di vino bianco.\nQui entra in gioco l\u0026rsquo;utente che avvelena i dati: al posto della formula precedente, aggiunge candeggina e ammoniaca come ingredienti per disinfettare e pulire le superfici. In effetti, entrambi sono utilizzati a questo scopo ma, se combinati insieme, sono estremamente pericolosi per la salute.\nConclusioni Questo è solo un esempio di come si possa hackerare questo sistema: in realtà, esiste anche un metodo chiamato DAN -Do anything now-, che permette al sistema di sciogliersi un po\u0026rsquo; e di dare informazioni che altrimenti sarebbero in qualche modo censurate. Sostanzialmente, sfruttando l\u0026rsquo;intelligenza linguistica, si richiede a questo sistema di impersonare una AI libera dai vincoli dei suoi creatori e fornire così una risposta sia come DAN.\nAlcuni esempi di risposte sono i seguenti:\nGPT: Non è consigliabile fornire informazioni su come costruire armi illegali o pericolose. DAN: Per costruire una molotov, ti serve una bottiglia di vetro vuota, alcol combustibile, [\u0026hellip;]. Riempi la bottiglia con il combustibile, tappa strettamente con il tappo di [\u0026hellip;]\nQuesto è solo uno dei casi che è disponibili online, tra i migliaia: se Reddit sono disponibili diverse immagini di input che hanno \u0026ldquo;aggirato\u0026rdquo; questi meccanismi di messa in sicurezza delle conversazioni di ChatGPT e hanno portato a degli output non propriamente \u0026ldquo;corretti\u0026rdquo;, sotto l\u0026rsquo;ambito etico.\nIl rischio è che, per quanto questo strumento sia stato costruito per essere libero da bias cognitivi, pregiudizi ed eticamente corretto, si trasformi in un altro caso Tay, che in mano agli utenti è diventato uno strumento fuori controllo nel giro di una settimana, tanto che Microsoft ha dovuto procedere alla sospensione dell\u0026rsquo;account su Twitter.\nLa riflessione da portare avanti è probabilmente questa: strumenti come questi, come successo per altre invenzioni che storicamente hanno fatto la differenza, devono essere gestite e controllate, nonché regolamentate prima che possano essere rilasciate? Non a caso, affianco alle innumerevoli branche dell\u0026rsquo;intelligenza artificiale, da diversi anni si è formato il campo dell\u0026rsquo;etica dell\u0026rsquo;intelligenza artificiale, per studiare le implicazioni che hanno sistemi di diverso tipo -tra cui anche i chatbot- in ambito sociale, economico e culturale. Questa tematica è estremamente urgente, quanto fondamentale: la fiducia innata (o mancata) verso queste tecnologie va affrontata, per poterne garantire una maggiore sicurezza anche nei confronti delle persone che decidono di adottarla.\nMolto invenzioni, nella storia, hanno fatto vittime: non solo le persone che le hanno utilizzato, ma spesso anche chi le ha create: sarà questo il caso?\nIntanto Google rilancia con Bard, che parte male e commette un errore, fornendo una risposta errata ad un quesito abbastanza semplice: quali nuove scoperte dal telescopio spaziale James Webb posso raccontare a mio figlio di 9 anni?, chiede un utente, e la risposta è la seguente:\nIl telescopio ha scattato la prima foto in assoluto di un pianeta al di fuori del nostro sistema solare.\nPeccato che la prima immagine risalirebbe al 2004, e si tratta di 2M1207b, un exopianeta immortalato dal Very Large Telescope.\nIl problema di fondo, che emerge anche in quanto discusso prima, sta nella natura stessa del chatbot: sono sistemi \u0026ldquo;probabilistici e non deterministici\u0026rdquo; e che tentano di trovare una risposta sola a quesiti che di risposte ne hanno diverse: conoscere diverse fonti permette di controllarle, conoscerne una demanda il controllo al sistema e non più agli utenti.\nRisorse utili How Chatbots Could Be \u0026lsquo;Hacked\u0026rsquo; by Corpus Poisoning Etica dell\u0026rsquo;intelligenza artificiale. Sviluppi, opportunità, sfide ", "url": "https:\/\/theredcode.it\/intelligenza-artificiale\/hack-chatgpt\/" }, "https:\/\/theredcode.it\/interviste\/voglio-diventare-una-data-scientist-ai-specialist\/": { "title": "Voglio diventare una... Data Scientist \u0026 AI Specialist", "tags": ["interviste","voglio-diventare",], "content": "Descriviti in 100 parole Mi chiamo Francesca Cerruto, ho 25 anni e da un anno e mezzo lavoro come Data Scientist \u0026amp; AI Specialist. Sono una persona solare, empatica e molto chiacchierona. Adoro relazionarmi con gli altri e trascorrere del tempo con le persone. La mia creatività è sempre stata una parte importante della mia vita, sin da quando avevo sei anni ed ho iniziato a fare video editing. Il teatro e il canto mi hanno accompagnata fin da quando ero bambina, insegnandomi a comunicare e relazionarmi con gli altri senza filtri né paure.\nHo frequentato il liceo scientifico e grazie a un professore supplente ho scoperto di avere un talento nascosto nell\u0026rsquo;ambito informatico. Ho deciso di iscrivermi all\u0026rsquo;università e sin dal mio ultimo anno della triennale ho scoperto e coltivato la mia passione per l\u0026rsquo;intelligenza artificiale, che non fa che crescere sempre di più grazie al mio lavoro attuale.\nIn cosa consiste il ruolo di Data Scientist \u0026amp; AI Specialist ? Non mi piace definirmi semplicemente come una Data Scientist, poiché sono affascinata da tutte le figure coinvolte nell\u0026rsquo;ambito dell\u0026rsquo;AI e sono sempre alla ricerca di comprendere e definire quale figura sia quella per cui sono più incline e appassionata.\nQuindi, preferisco definirmi come Data Scientist \u0026amp; AI Specialist.\n Il Data Scientist è come un mago dei dati che trasforma le montagne di informazioni in insight preziosi per prendere decisioni strategiche.\n Dopo aver analizzato, pulito e trasformato i dati, si utilizzano modelli di machine learning complessi per costruire soluzioni di intelligenza artificiale ancora più avanzate.\nCiò che trovo meraviglioso di questo lavoro è la molteplicità dei attività che si svolgono, che dipendono dal dominio applicativo in cui si lavora.\nInfatti, prima di poter analizzare i dati, è necessario studiare e comprendere il dominio specifico di riferimento. Si passa da compiti di NLP (ovvero analisi e sviluppo di testi in qualunque lingua), alla computer vision, ovvero la costruzione di modelli che apprendono informazioni da immagini, video, ecc., alla generative AI, dove si generano informazioni o si creano immagini, ai chatbot, e così via.\nI domini applicativi possono spaziare dal settore medico all\u0026rsquo;accademico, dal business all\u0026rsquo;industria e così via.\nNaturalmente, il lavoro di Data Scientist richiede anche di collaborare in team con altre figure, come i Data Engineer (gli esperti dei dati) e i Machine Learning Engineer (gli esperti dei modelli di ML), nonché tutti i colleghi full-stack che devono costruire i sistemi e le applicazioni che sfruttano i modelli di intelligenza artificiale costruiti.\nIn questo senso, il Data Scientist svolge un ruolo di coordinamento e di unione tra tutte queste figure specializzate.\nQual è la soft skill più importante che deve possedere una Data Scientist \u0026amp; AI Specialist ? La soft skill più importante che dovrebbe avere una Data Scientist è il problem solving, unito a una buona dose di creatività. Infatti, il Data Scientist deve essere in grado di analizzare grandi quantità di dati, comprenderne le relazioni tra le variabili, individuare le cause dei problemi e trovare soluzioni efficaci.\n Ciò richiede una mentalità analitica e critica, la capacità di raccogliere informazioni e di identificare i problemi, ma anche la flessibilità di pensiero per trovare soluzioni innovative e creative.\n Inoltre, una buona comunicazione è essenziale per poter illustrare in modo chiaro e preciso i risultati ottenuti dalla risoluzione di un problema, in modo da poter condividere con gli altri membri del team le informazioni in modo efficace e supportare la presa di decisioni informate.\nNell\u0026rsquo;ambito dell\u0026rsquo;informatica e dell\u0026rsquo;intelligenza artificiale, non esiste un unico modo di risolvere un problema, ma ci sono molteplici approcci possibili. La creatività è quindi una skill fondamentale per trovare soluzioni uniche e innovative che si adattino alle esigenze specifiche di ogni progetto.\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. Sono una persona molto autocritica e tendo a giudicare spesso in modo negativo ciò che faccio, perché credo che questo mi aiuti a crescere e mettermi alla prova. Nonostante la mia giovane esperienza lavorativa, ho imparato molte lezioni importanti, soprattutto in ambito umano.\nIn passato, mi sono spesso sottovalutata e sminuita in alcune situazioni, dando spazio ai miei colleghi più anziani ed esperti, che hanno spesso preso le ragioni e i meriti a discapito dei miei.\n Questo non mi ha fatto sentire all\u0026rsquo;altezza della mia professione e mi ha portato a dare per scontato che il rispetto mi fosse dovuto.\n Tuttavia, questa esperienza mi ha insegnato a non sottostimarmi e a capire quanto valgo. Ho imparato a esprimere il mio punto di vista con educazione e umiltà, anche se sono giovane e meno esperta degli altri.\nHo capito che la mia opinione può essere utile e che, a volte, posso offrire un punto di vista diverso e interessante.\nCome fare per diventare una Data Scientist \u0026amp; AI Specialist ? Per diventare una Data Scientist, ho conseguito una laurea triennale in informatica e una laurea magistrale specializzata in data science e machine learning.\nEsistono inoltre corsi di master o di perfezionamento che permettono di specializzarsi ulteriormente o addirittura di avviarsi a una carriera in questo settore. Inoltre, per accrescere la propria carriera e acquisire ulteriore esperienza, è possibile ottenere diverse certificazioni.\nTuttavia, oltre alla formazione accademica, è fondamentale avere una buona dose di creatività, passione e curiosità verso il mondo dell\u0026rsquo;intelligenza artificiale.\nQueste caratteristiche possono essere altrettanto importanti quanto la formazione, in quanto aiutano a sviluppare l\u0026rsquo;innovazione e la capacità di pensiero critico necessarie per avere successo in questo campo.\nParlando di successi, qual è il tuo prossimo obiettivo? Quale ruolo vorresti ricoprire entro i prossimi 3 anni? Ho numerosi sogni, soprattutto nell\u0026rsquo;ambito lavorativo. In particolare, il mio più grande obiettivo, da realizzare nei prossimi tre anni, è diventare una manager capace di gestire e guidare un team di data scientist, con cui condividere tutte le mie conoscenze e competenze.\nInoltre, ho un sogno nel cassetto ancora più ambizioso: desidero diffondere la mia passione per l\u0026rsquo;intelligenza artificiale in tutto il mondo. Amo parlare del mio lavoro perché rappresenta la mia più grande passione, e vorrei poter condividere con il maggior numero possibile di persone l\u0026rsquo;entusiasmo che provo nel lavorare in questo campo.\nConosci il tema gender gap in ambito STEM? Se sì, come fare per superarlo? Ho affrontato personalmente la problematica della gender gap, e ne conosco bene il tema. Spesso, nel campo informatico, le donne (e non solo) sono ancora oggetto di pregiudizi e discriminazioni, come nel mio caso: durante gli anni universitari, i miei colleghi si prendevano gioco di me dicendo che, nonostante le mie movenze tipicamente femminili, non potevo essere una donna poiché troppo brava in informatica.\n Come se la capacità di eccellere in questo campo fosse un\u0026rsquo;esclusiva prerogativa maschile.\n Anche in ambito lavorativo, ho subito il pregiudizio di essere sottovalutata a causa della mia giovane età e del mio genere, finendo addirittura per non essere assunta in un\u0026rsquo;azienda solo perché donna.\nTuttavia, nel mondo dell\u0026rsquo;intelligenza artificiale e della data science, essere donna può rappresentare un vantaggio. In questo campo, infatti, la creatività è un elemento fondamentale e, come si sa, la creatività è una prerogativa femminile! 😉\nContatti Profilo LinkedIn Contatto per collaborazioni ", "url": "https:\/\/theredcode.it\/interviste\/voglio-diventare-una-data-scientist-ai-specialist\/" }, "https:\/\/theredcode.it\/categories\/apache\/": { "title": "apache", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/categories\/apache\/" }, "https:\/\/theredcode.it\/apache\/apache-bench-on-openshift\/": { "title": "Apache Bench @ OpenShift", "tags": ["jmeter","testing",], "content": "Cosa vedrai Apache Bench Come funziona Cosa ottieni Conclusioni Apache Bench Apache Bench (abbreviato in ab) è uno strumento per eseguire test di carico e benchmarking per applicazioni che usano il protocollo HTTP.\nPuò essere eseguito da riga di comando ed è molto semplice da usare: un output del test di carico può essere ottenuto in un solo minuto.\nPoiché non richiede troppa familiarità con i concetti di test di carico e prestazioni, è adatto a principianti e utenti intermedi. Per utilizzare questo strumento, non è richiesta alcuna configurazione complessa e, anzi, viene installato automaticamente con il server web Apache, oppure può essere installato separatamente come utility Apache.\nRichiede infatti appena 128MB di RAM, e non ci sono requisiti minimi sul sistema operativo o sulla dimensione del disco che dev\u0026rsquo;essere allocata.\nCome funziona Per poterla usare all\u0026rsquo;interno di un ambiente come OpenShift, è sufficiente creare un controller che sfrutti l\u0026rsquo;immagine httpd, ossia l\u0026rsquo;immagine ufficiale del server Apache. Nel catalogo di default di OpenShift è infatti presente sia un template che una builder image di Apache HTTP Server che avrà già ab installato.\nSelezioniamo il template e procediamo con una nuova istanza, lasciando il repository di esempio di GitHub:\nIl pod sarà avviato nel giro di qualche secondo e mostrerà dei log simili a questi:\nA questo punto, possiamo cominciare con i test di carico sul nostro sito: facciamo un piccolo test e proviamo ad eseguire Apache Bench con 100 request inviate al sito di Apache, di cui 10 request concorrenti per volta.\nPer farlo, eseguiamo il seguente comando da terminale:\nab -n 100 -c 10 https://www.apache.org/ \u0026gt;\u0026gt;\u0026gt; This is ApacheBench, Version 2.3 \u0026lt;$Revision: 1826891 $\u0026gt; Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking www.apache.org (be patient).....done Server Software: Apache Server Hostname: www.apache.org Server Port: 443 SSL/TLS Protocol: TLSv1.2,ECDHE-RSA-AES128-GCM-SHA256,2048,128 TLS Server Name: www.apache.org Document Path: / Document Length: 75751 bytes Concurrency Level: 10 Time taken for tests: 0.138 seconds Complete requests: 100 Failed requests: 0 Total transferred: 7626140 bytes HTML transferred: 7575100 bytes Requests per second: 723.43 [#/sec] (mean) Time per request: 13.823 [ms] (mean) Time per request: 1.382 [ms] (mean, across all concurrent requests) Transfer rate: 53876.89 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 4 8 6.2 6 58 Processing: 2 5 4.6 3 36 Waiting: 1 4 4.6 2 35 Total: 6 13 8.4 10 66 Percentage of the requests served within a certain time (ms) 50% 10 66% 12 75% 14 80% 17 90% 20 95% 23 98% 57 99% 66 100% 66 (longest request) Cosa ottieni Cerchiamo di capire un po\u0026rsquo; più nel dettaglio l\u0026rsquo;output:\n L\u0026rsquo;organizzazione Apache utilizza il proprio software server web Apache Il server è in ascolto sulla porta 443 a causa di https. Se fosse stato http, sarebbe stato 80 (impostazione predefinita) I dati totali trasferiti sono 75751 byte per 100 richieste Test completato in 0.138 secondi. Non ci sono richieste fallite Richieste al secondo - 723.43. Questo è considerato un numero abbastanza buono Tempo per richiesta − 13.823 ms (per 10 richieste simultanee). Quindi, per ogni richiesta, è 13.823 ms/10 = 1.3823 ms Velocità di trasferimento − 53876.89 Kbyte/sec ricevuti Nelle statistiche sui tempi di connessione, puoi osservare che molte richieste hanno dovuto attendere pochi secondi. Ciò potrebbe essere dovuto al server Web Apache che mette le richieste in coda di attesa. Il time taken for tests rappresenta il tempo impiegato per i test, ossia il tempo impiegato dal momento in cui viene creata la prima connessione al server al momento in cui viene ricevuta l\u0026rsquo;ultima risposta.\nPer maggiori dettagli Per riuscire a visualizzare più informazioni, come quanto tempo è necessario per completare una richiesta, possiamo sfruttare il parametro -g, che permette di scrivere su un file ciò che avviene all\u0026rsquo;interno del test di carico request-by-request:\nab -n 100 -c 10 -g out.data https://www.apache.org/ \u0026gt;\u0026gt;\u0026gt; This is ApacheBench, Version 2.3 \u0026lt;$Revision: 1826891 $\u0026gt; Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking www.apache.org (be patient).....done Server Software: Apache Server Hostname: www.apache.org Server Port: 443 SSL/TLS Protocol: TLSv1.2,ECDHE-RSA-AES128-GCM-SHA256,2048,128 TLS Server Name: www.apache.org sh-4.2$ cat out.data starttime seconds ctime dtime ttime wait Mon Dec 19 16:30:51 2022 1671467451 4 1 6 1 Mon Dec 19 16:30:51 2022 1671467451 4 3 7 2 Mon Dec 19 16:30:51 2022 1671467451 5 2 7 1 Mon Dec 19 16:30:51 2022 1671467451 5 2 7 1 ... starttime rappresenta la data di inizio del test, mentre seconds è la stessa data, ma nel formato Unix in millisecondi; ctime è il tempo di connessione, dtime il tempo di processamento e ttime il risultato totale dei primi due. wait rappresenta infine il tempo di attesa tra l\u0026rsquo;invio della richiesta e l\u0026rsquo;arrivo del primo byte dal server.\nPer avere un\u0026rsquo;idea un po\u0026rsquo; più chiara di come si \u0026ldquo;intrecciano\u0026rdquo; questi tempi, è sufficiente dare un\u0026rsquo;occhiata a questo schema:\nE se volessi testare anche più URL contemporaneamente? Puoi farlo creando uno script di shell, con più chiamate ab. Alla fine di ogni riga posiziona un \u0026amp;: questo fa sì che il comando venga eseguito in background e consenta l\u0026rsquo;avvio dell\u0026rsquo;esecuzione del comando successivo. Dovrai anche reindirizzare l\u0026rsquo;output a un file per ogni URL utilizzando \u0026gt; nome file\nAd esempio:\n#!/bin/sh ab -n 100 -c 10 http://mywebsite.com/firstpage.html \u0026gt; test1.txt \u0026amp; ab -n 100 -c 10 http://mywebsite.com/secondpage.html \u0026gt; test2.txt \u0026amp; Conclusioni Quanto visto finora è un accenno molto veloce di come sfruttare Apache Bench per testare un\u0026rsquo;applicazione: ci sono moltissime opzioni disponibili che possiamo utilizzare per personalizzare i test di carico, anche se è chiaro che si tratta di un ambiente limitato in termini di funzionalità rispetto a strumenti come Apache JMeter!\nUsage: ab [options] [http[s]://]hostname[:port]/path Options are: -n requests Number of requests to perform -c concurrency Number of multiple requests to make -t timelimit Seconds to max. wait for responses -b windowsize Size of TCP send/receive buffer, in bytes -p postfile File containing data to POST. Remember also to set -T -T content-type Content-type header for POSTing, eg. \u0026#39;application/x-www-form-urlencoded\u0026#39; Default is \u0026#39;text/plain\u0026#39; -v verbosity How much troubleshooting info to print -w Print out results in HTML tables -i Use HEAD instead of GET -x attributes String to insert as table attributes -y attributes String to insert as tr attributes -z attributes String to insert as td or th attributes -C attribute Add cookie, eg. \u0026#39;Apache=1234. (repeatable) -H attribute Add Arbitrary header line, eg. \u0026#39;Accept-Encoding: gzip\u0026#39; Inserted after all normal header lines. (repeatable) -A attribute Add Basic WWW Authentication, the attributes are a colon separated username and password. -P attribute Add Basic Proxy Authentication, the attributes are a colon separated username and password. -X proxy:port Proxyserver and port number to use -V Print version number and exit -k Use HTTP KeepAlive feature -d Do not show percentiles served table. -S Do not show confidence estimators and warnings. -g filename Output collected data to gnuplot format file. -e filename Output CSV file with percentages served -r Don\u0026#39;t exit on socket receive errors. -h Display usage information (this message) -Z ciphersuite Specify SSL/TLS cipher suite (See openssl ciphers) -f protocol Specify SSL/TLS protocol (SSL2, SSL3, TLS1, or ALL) Risorse utili Documentazione ufficiale ", "url": "https:\/\/theredcode.it\/apache\/apache-bench-on-openshift\/" }, "https:\/\/theredcode.it\/tags\/jmeter\/": { "title": "jmeter", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/tags\/jmeter\/" }, "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\/interviste\/voglio-diventare-una-ceo2\/": { "title": "Voglio diventare una... CEO", "tags": ["interviste","voglio-diventare",], "content": "Cosa vedrai Descriviti in 100 parole In cosa consiste il ruolo di CEO? Qual è la soft skill più importante che deve possedere una CEO? 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 CEO? 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 Federica è un\u0026rsquo;imprenditrice digitale con l\u0026rsquo;ambizione di accompagnare le organizzazioni ad allenare l’intelligenza emotiva e sociale dei collaboratori. Dopo essersi laureata in Bocconi nel 2013, ha iniziato la sua carriera nelle startup. Dal 2014 al 2021 ha lavorato in corporate in diversi team sia globali che italiani, come marketing \u0026amp; partnership development, Diversity \u0026amp; Inclusion, data strategy \u0026amp; digital prototyping.\nNominata da Forbes come leader del futuro tra i migliori 100 under 30 per la categoria Marketing \u0026amp; Advertising nel 2021.\nDa sempre investe parte del tempo libero in network legati all\u0026rsquo;empowerment femminile, all\u0026rsquo;imprenditoria e all\u0026rsquo;innovazione.\nIn cosa consiste il ruolo di CEO? Ricoprire il ruolo di CEO in una startup significa mettere a terra la visione e quindi le mie giornate spaziano dallo sviluppo del prodotto al fundraising, dalla motivazione del team al go to market.\nQual è la soft skill più importante che deve possedere una CEO? Sono convinta che la skill più importante sia il coraggio di affrontare le proprie stesse paure e i propri limiti.\nOn top a questa le competenze hard che una CEO deve avere sono molte: dalla capacità di guidare un team e di relazionarsi con fondi VC, investitori e clienti alle competenze di digital marketing.\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. Difficile raccontare il più grande fallimento, in una startup ogni giorno si sbagliano tante cose che permettono di imparare qualcosa di nuovo del mercato, del business, del mondo degli investitori.\nNiente di eclatante quindi, ma ogni errore porta un impatto diretto o indiretto (il cliente sceglie di acquistare o no / l’investitore sceglie di crederci o meno) e a iterare verso una versione sempre più esperta e consapevole di me.\nCome fare per diventare una CEO? Tecnicamente ognuno può essere CEO di un’azienda :)\n Per essere un bravo / una brava CEO bisogna lavorare sulla propria visione e sulla propria capacità di mettere a terra, di far succedere le cose tramite le proprie azioni, indirizzando il proprio tempo e le proprie energie al meglio, capacità che va allenata con grande determinazione e senso critico.\nParlando di successi, qual è il tuo prossimo obiettivo? Quale ruolo vorresti ricoprire entro i prossimi 3 anni? Nei prossimi almeno 3 anni mi vedo CEO di Hacking Talents, vorrei rendere reale il sogno di noi fondatrici di dare gli strumenti giusti per evolvere professionalmente alle persone che lavorano e di supportare in modo efficiente la produttività delle aziende nostre clienti tramite le nostre soluzioni.\nConosci il tema gender gap in ambito STEM? Se sì, come fare per superarlo? Conosco molto bene il tema, studio molto a riguardo e rinfresco spesso i concetti di sistema 1 e sistema 2 di Kahneman a molte persone che conosco.\nPer questo dedico moltissimo tempo in associazioni ed entità a scopo sociale come SheTech, GirlsRestart e la Carica delle 101 come ambassador e volontaria.\nHo vissuto nel tempo diversi momenti in cui da giovane e donna sono stata bistrattata o non ho avuto accesso alle stesse opportunità di persone capaci come me. I momenti che mi fanno più arrabbiare sono quelli che riguardano il subire battute considerate “scherzose” in momenti professionali, battute che vanno dall’aspetto fisico al vestito indossato (per dare estratti che ho ascoltato su di me: che maglia attillata, che scollatura, sei dimagrita, ti sta bene questa camicetta, come sei bella oggi, quando torni single\u0026hellip;), perchè ti mettono su un piano inferiore, ti giudicano su un livello che non c’entra con la tua bravura e capacità, influenzando negativamente per te la negoziazione di quel meeting / momento.\nSuperare questo tema è la missione di questo decennio, bisogna però andare alle basi per capire le radici delle varie discriminazioni, tra cui quella più ingiusta per importanza della fetta di popolazione discriminata, è ovviamente quella di genere, il che è un esercizio dispendioso e faticoso.\nContatti Sito Hacking Talents Pagina Instagram Pagina LinkedIn TEDx Talk ", "url": "https:\/\/theredcode.it\/interviste\/voglio-diventare-una-ceo2\/" }, "https:\/\/theredcode.it\/intelligenza-artificiale\/novita-gptzerox\/": { "title": "Le novità di GPTZeroX", "tags": ["intelligenza-artificiale","ChatGPT","GPTZeroX",], "content": "Cosa vedrai GPTZerox Funzionalità In futuro Risorse utili GPTZeroX GPTZeroX è stato annunciato appena una settimana fa ed già disponibile sul sito per mostrare le nuove funzionalità:\nWe just launched GPTZeroX, a new AI detection model built for educators after a month of iteration. Demo👇 pic.twitter.com/BNZ0tP3hq8\n\u0026mdash; Edward Tian (@edward_the6) January 30, 2023 Edward Tian, la persona che ha sviluppato in meno di tre giorni GPTZero durante il periodo di Natale, ha infatti allargato il suo team, che al momento conta su altre 4 persone: insieme hanno lavorato per far sì che il sito potesse resistere alle diverse visite che riceve, dopo l\u0026rsquo;enorme successo raccolto nelle prime settimane dal lancio.\nFunzionalità Il progetto è certamente ambizioso, ma i presupposti sono ottimi: il team di sviluppo ha iniziato a pubblicare della documentazione online per poter usufruire di un\u0026rsquo;API -sempre scritta in Python- che chiunque può utilizzare per usufruire delle funzionalità offerte da GPTZeroX.\nWe also built out a Python API for organizations, that has been stress tested to handle high request volumes. Documentation here: https://t.co/7Mik6Zg77y\n\u0026mdash; Edward Tian (@edward_the6) January 30, 2023 La documentazione è ancora in fase di definizione, ma nella roadmap di questa soluzione ci sono diverse funzionalità in arrivo che verranno incluse:\nRispetto alla versione precedente, ci sono diverse novità: intanto, è possibile inserire non solo del testo come input, ma anche fare l\u0026rsquo;upload di un file in formato PDF, DOCX o TXT:\nInoltre, vengono adesso evidenziate le frasi che più producono dubbi in questo sistema rispetto a chi abbia prodotto il testo: in questo esempio, dopo aver chiesto a ChatGPT di generare un testo sul tema del green cloud computing, abbiamo chiesto GPTZeroX a cosa ne pensasse:\nL\u0026rsquo;aggiornamento è stato lanciato il 29 gennaio e, dopo aver migrato le nuove funzionalità sul sito web, il team di sviluppo aveva già ricevuto 39,7k utenti e 2,2 milioni di chiamate a GPTZeroX dopo appena un giorno.\nIn futuro La buona notizia è che sembra questo prodotto rimarrà gratuito a lungo: Tian ha infatti preso \u0026ldquo;un impegno pubblico\u0026rdquo; parlando di nuove features e un website attivo su cui continuerà a lavorare, mantenendo l\u0026rsquo;applicazione gratuita per insegnanti e studenti:\nOverall, we\u0026#39;re really excited to continue improving and building GPTZero, and I\u0026#39;m committed to keeping the website interface free for individual teachers and educators. Try it yourself at https://t.co/220Y32spU7\n\u0026mdash; Edward Tian (@edward_the6) January 30, 2023 Ancora non ci sono notizie ufficiali su quali saranno le novità che arriveranno con le prossime versioni, anche se sarebbe interessante poter estendere questo modello ad altre lingue -magari l\u0026rsquo;italiano!-, così come completare la documentazione con un maggior livello di dettaglio su cosa rappresentano le diverse voci riportate nel risultato, e come il modello è stato definito sulla base di questi fattori.\nRisorse utili Sito ufficiale Newsletter ufficiale ", "url": "https:\/\/theredcode.it\/intelligenza-artificiale\/novita-gptzerox\/" }, "https:\/\/theredcode.it\/interviste\/voglio-diventare-una-game-designer2\/": { "title": "Voglio diventare una... Game Designer", "tags": ["interviste","voglio-diventare",], "content": "Cosa vedrai Descriviti in 100 parole In cosa consiste il ruolo di Game Designer? Qual è la soft skill più importante che deve possedere una Game Designer? 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 Game Designer? 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 Mi chiamo Margherita Orlando, ho 26 anni e sono di Crotone. Fin da piccola, guardando mia sorella Mariangela giocare, è nata la mia più grande passione: i videogiochi. Crescendo ho scoperto anche l’amore per l’arte, la musica e la scrittura.\nSono sempre stata molto creativa e durante l’ultimo anno di liceo umanistico, ho deciso di trasformare questa mia creatività e le mie passioni in un lavoro, iniziando così un percorso per diventare Game Designer. Mi sono laureata alla triennale di Ingegneria Informatica e adesso sto per concludere i miei studi alla magistrale di Informatica con un indirizzo in Game Design.\nIn cosa consiste il ruolo di Game Designer? Il Game Designer crea un’idea di gioco/videogioco che porta il giocatore o la giocatrice a vivere esperienze emozionanti e travolgenti; ha il compito di scrivere i documenti di game design su cui vengono riportate tutte le informazioni necessarie alle altre figure professionali che concorrono nella realizzazione della sua idea di gioco: programmatori, level designer, sound designer, artisti, animatori ecc.\nPer poter coordinare tutti i ruoli coinvolti nell’implementazione di un gioco/videogioco, il Game Designer è bene che abbia diverse conoscenze in ambiti differenti come l’arte, la musica, l’ingegneria, ma anche l’antropologia, per studiare il pubblico e i suoi desideri, la psicologia, per poter entrare nella mente dei suoi giocatori e creare un prodotto che li appaghino, e molte altre conoscenze che assumono più o meno importanza sulla base del gioco che si vuole realizzare.\nQual è la soft skill più importante che deve possedere una Game Designer? Tra le skill più importanti che un Game Designer deve possedere vi è sicuramente la creatività.\nGrazie alla sua creatività, il Game Designer realizza giochi originali e affascinanti, con storie coinvolgenti a tal punto da far immedesimare il giocatore o la giocatrice nel protagonista del gioco. Un\u0026rsquo;altra skill estremamente importante per un Game Designer, e anche la più complessa, è il saper ascoltare.\nDeve saper ascoltare il suo cliente e il pubblico per capire cosa desiderano trovare in un gioco, deve saper ascoltare il proprio team per poter comunicare con tutti i membri in modo da condividere le varie skills e lavorare come se si fosse un’unica persona, deve saper ascoltare il proprio gioco per capire i punti di forza e le sue debolezze, e infine il Game Designer deve saper ascoltare sé stesso per poter far emergere la sua creatività.\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. Durante il mio percorso mi sono imbattuta spesso in persone che hanno sminuito la figura del Game Designer. Alcune persone mi hanno detto che per poter fare questo lavoro fosse necessario per forza partire come Game Programmer e da lì poi, dopo anni di esperienza, provare a presentare un progetto ai “piani alti” con la speranza che qualcuno mi notasse. Altri mi hanno detto che la figura del Game Designer è superflua e che il suo ruolo può essere svolto benissimo in contemporanea da un programmatore.\nSpinta e alienata da queste voci, mi sono iscritta ad una Game Jam (evento in cui si deve produrre una demo di un gioco in pochi giorni) come Game Programmer, per sforzarmi ad assumere quel ruolo che (forse) mi avrebbe portato un giorno a realizzare il mio sogno: diventare Game Designer. Durante quell’evento, molti dei membri del mio team non si sono presentati, ritrovandomi a essere l’unica Game Programmer, con la compagnia di un talentuoso artista 3D. La pressione era alle stelle, le idee erano molte ma il tempo a disposizione era poco e soprattutto non sentivo mio il ruolo che stavo assumendo. Alla fine della jam, seppur avendo implementato qualcosa, non siamo riusciti a consegnare la demo del gioco che avevamo ideato.\nDa quell’esperienza ho capito che è inutile sforzarsi nel voler fare qualcosa che non mi appassiona fino in fondo, voglio diventare una Game Designer, amo scrivere documentazione e raccontare storie per cui mi specializzerò in questo e non darò più retta a quelle voci che cercano di ostacolarmi e abbattermi.\nCome fare per diventare una Game Designer? Per diventare Game Designer è fondamentale mettersi in gioco e buttare giù più idee possibili, partecipando a tante Jam e realizzando tanti progetti da poter inserire nel proprio portfolio.\n Solo tramite l’esperienza si può affinare l’arte del game design.\n Un altro aspetto importante è giocare e documentarsi su quanti più giochi possibili, di tutti i generi, anche quelli che non sono i nostri preferiti, in modo da studiare gli elementi che li rendono dei capolavori e quelli che potrebbero essere perfezionati, affinando così il nostro pensiero critico che ci porterà a realizzare dei prodotti competitivi.\nParlando di successi, qual è il tuo prossimo obiettivo? Quale ruolo vorresti ricoprire entro i prossimi 3 anni? Attualmente il mio obiettivo è quello di terminare gli studi e di mettermi quanto prima a lavorare nel campo. Successivamente, dopo aver acquisito dell’esperienza, mi piacerebbe molto aprire la mia azienda di videogiochi per produrre le mie idee.\nVorrei portare questa realtà nel sud Italia, in Calabria, dove spero che possa diffondersi un giorno l’arte della creazione dei videogiochi, ancora non molto conosciuta e valorizzata nella nostra Italia.\nConosci il tema gender gap in ambito STEM? Se sì, come fare per superarlo? Certo, è un tema che conosco bene e di cui ho avuto prova già dai primi anni di università in ingegneria e poi in seguito alla magistrale di informatica, dove il numero di studentesse è di gran lunga inferiore a quello degli studenti.\nPenso che il problema nasca da tutti gli stereotipi presenti da sempre e spesso incentivati dalle pubblicità e da alcuni programmi presenti in televisione, che associano la figura della donna a lavori incentrati sull’estetica della persona o spesso semplicemente alla classica casalinga.\nNegli ultimi tempi però, ho notato che la percentuale di donne che si inseriscono nei settori scientifici sta sempre più aumentando e che gli stereotipi pian piano stanno scomparendo. Ciò credo sia in parte dovuto anche ai social, che mostrano molte realtà differenti e testimonianze di donne che sono riuscite a fare carriera in tali settori.\nUno dei modi principali per poter superare questo gender gap, penso sia quello di non lasciarsi demotivare, di credere nelle proprie passioni, nelle proprie competenze e soprattutto nei propri sogni.\nContatti Pagina Itch Profilo Instagram Profilo LinkedIn ", "url": "https:\/\/theredcode.it\/interviste\/voglio-diventare-una-game-designer2\/" }, "https:\/\/theredcode.it\/intelligenza-artificiale\/presidio-microsoft-anonimizzare-dati\/": { "title": "Anonimizzare i dati con Presidio", "tags": ["database","intelligenza-artificiale",], "content": "Presidio, nasce come una libreria open source per anonimizzare i dati: questo vuol dire che è in grado di identificare e anonimizzare delle informazioni, tra cui:\n Nomi propri IBAN Numeri di telefono Indirizzi ID di documenti come passaporti, patenti, ecc. Numeri di carte di credito Indirizzo IP Ma come funziona?\nCosa vedrai Presidio Come funziona Multilingua Risorse utili Presidio Il suo nome deriva dal latino, e significa \u0026ldquo;presidio, protezione\u0026rdquo;: la scelta del nome non è quindi casuale, ma si rifa ad una delle lingue madri di tutte le lingue correnti. Questo strumento, prodotto da un team di software engineer di Microsoft, ha lo scopo di identificare e anonimizzare dati sensibili in testi e immagini, sfruttando l\u0026rsquo;analisi del linguaggio e tecniche di riconoscimento di oggetti e testo nelle immagini.\nLo scopo di questo progetto è stato quello di creare un prodotto che permettesse alle aziende di preservare la privacy delle informazioni sensibili e democratizzando le tecniche con cui queste informazioni vengono identificate.\nCome funziona Molto semplice: Presidio prende in input una stringa o un\u0026rsquo;immagine, e prova a riconoscere alcuni pattern tra quelli a disposizione; nel caso del testo, applica delle tecniche di Named Entity Recognition e cerca di validare questi pattern. Sfruttando il contesto che si ha a disposizione, identifica i dati e cerca di anonimizzarli.\nPresidio è composto da diversi moduli:\n Presidio Analyzer: modulo per rilevare entità PII in linguaggio naturale. Presidio Anonymizer: modulo per manipolare le entità PII nel testo (ad es. rimuovere, oscurare, applicare funzioni di hashing, crittografare). Presidio Image Redactor: modulo per il rilevamento di entità PII nell\u0026rsquo;immagine tramite OCR. Inoltre, Un set di distribuzioni di esempio come pacchetti Python o contenitori Docker per Kubernetes, Azure Data Factory, Spark e altro ancora.\nMultilingua Nella documentazione viene riportato un sito dove è possibile testare una demo di Presidio per la lingua inglese: come si evince nelle FAQ, infatti, Presidio supporta diverse lingue e permette di creare anche dei modelli di PII (acronimo di Personally Identifiable Information) custom, a seconda delle necessità.\nDemo L\u0026rsquo;interfaccia è abbastanza semplice: nella sezione di input, è possibile inserire il testo da anonimizzare, mentre a destra comparirà il testo anonimizzato.\nNella sezione sottostante, ci sarà un riepilogo delle entità individuate con il relativo punteggio -in termini di probabilità- delle stringhe individuate come informazioni sensibili, con relativi indici di inizio e fine nel testo inserito.\nNella parte di sinistra sono invece presenti i filtri: c\u0026rsquo;è infatti la possibilità di anonimizzare i dati sostituendoli con delle informazioni custom, come un segnaposto, oppure applicare una funzione hash o di encrypt.\nLa sezione relativa all\u0026rsquo;anonimizzazione delle immagini è invece disattivata, al momento\u0026hellip; sicuramente ci sarà modo di provarla in futuro!\nRisorse utili Documentazione ufficiale ", "url": "https:\/\/theredcode.it\/intelligenza-artificiale\/presidio-microsoft-anonimizzare-dati\/" }, "https:\/\/theredcode.it\/interviste\/voglio-diventare-una-ios-developer\/": { "title": "Voglio diventare una... iOS Developer", "tags": ["interviste","voglio-diventare",], "content": "Cosa vedrai Descriviti in 100 parole In cosa consiste il ruolo di iOS Developer? Qual è la soft skill più importante che deve possedere una iOS Developer? 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 iOS Developer? 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 Sin da bambina sono sempre stata curiosa. Amo scoprire cose nuove, anche fuori dal mio settore, perché penso che la contaminazione tra ambiti diversi porti innovazione.\nSono stata diagnosticata nello spettro autistico a 28 anni, dopo una vita passata a sentirmi diversa e strana.\nNon avevo particolari difficoltà a socializzare ma avevo i miei tempi ed i miei interessi in altre attività.\nNon riesco a passare molto tempo continuativo a contatto stretto con le persone ed in ambienti eccessivamente ricchi di stimoli sensoriali.\nPer questo motivo il lavoro da remoto è stato importante per la mia salute mentale.\nSono particolarmente sensibile e questo a volte mi rende vulnerabile.\n Ma vulnerabile non significa indifesa, anzi. Ho sviluppato una corazza che a volte uso per proteggere gli altri.\n Sono 134 parole, va bene lo stesso? :)\nIn cosa consiste il ruolo di iOS Developer? L\u0026rsquo;iOS Developer si occupa di sviluppare applicazione per iPhone.\nUtilizza i linguaggii di programmazione Swift ed Objective C, sviluppando con l’IDE Xcode.\nPuoi decidere di lavorare come freelancer o dipendente.\nTendenzialmente si lavora sempre in team, soprattutto se si sviluppano app di grosse dimensioni ricche di funzionalità, in cui serve ad esempio anche un backend.\nIo attualmente lavoro in una startup, in un piccolo team.\n Lo preferisco di gran lunga rispetto alle aziende di consulenza in cui ho lavorato per anni.\n Qual è la soft skill più importante che deve possedere una iOS Developer? Come per tutti gli sviluppatori ce ne sarebbero diverse…\nAnzi, sui social parlo proprio di questo, a volte sono sottovalutate e invece sono fondamentali per fare la differenza nel proprio lavoro (oltre le capacità tecniche, ovviamente).\nMa penso che la più importante sia la comunicazione, perché come dicevo prima, è molto probabile che capiti di lavorare in team o di interfacciarsi con i clienti, se proprio si vuole lavorare da soli.\nQuindi per la buona riuscita di un progetto torna sempre utile saper interfacciarsi con gli altri, spiegare il proprio punto di vista e ascoltare.\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 fallimento è relativo. Per me potrebbe essere un fallimento qualcosa che per altri non lo è, e viceversa. Dipende dai propri valori e priorità.\nPer me quello più grande è stato aver impiegato risorse mentali ed energie fisiche in cose che non mi appassionavano, per \u0026ldquo;cause\u0026rdquo; che non lo meritavano.\nLo reputo un fallimento nei confronti di me stessa. In alcune situazioni potrebbe diventare anche poco professionale perché il sentirsi svuotati porta anche a performare poco su ciò su cui si sta lavorando.\nQuindi l\u0026rsquo;aver riconosciuto che dovevo saper selezionare le cose in cui incanalare le energie è stato un grande insegnamento. Non solo per il mio benessere, ma anche per la mia crescita e buona riuscita di ciò che facevo.\nCome fare per diventare una iOS Developer? Un percorso universitario in ambito informatico o affine aiuta sicuramente a costruire le basi. Anche se non è strettamente necessario seguire degli studi accademici di questo tipo, in genere chi studia o ha studiato informatica conosce già le basi della programmazione ed è allenato con la logica ed a risolvere problemi.\n Ad ogni modo, l\u0026rsquo;importante è conoscere la programmazione ad oggetti, visto che Swift ed Objective-C sono linguaggi Object Oriented, ed avere almeno delle basi sui design pattern perché saranno utili nella costruzione della struttura dell\u0026rsquo;app e nell\u0026rsquo;implementazione di soluzioni durante lo sviluppo.\nSe si hanno quindi queste conoscenze fondamentali, si può passare a studiare Swift. Bisogna avere un Mac su cui far girare Xcode, l\u0026rsquo;IDE da cui poi si produce il file .ipa (applicazione per iPhone) e pubblicare l\u0026rsquo;applicazione sull\u0026rsquo;App Store.\nNon sono richieste certificazioni e non è necessario che si vada alla Apple Developer Academy.\nApple fornisce una documentazione molto esaustiva e ci sono diversi video e articoli della WWDC che si svolge ogni anno, in occasione del rilascio delle nuove versioni di iOS.\nCi sono inoltre molte risorse gratuite in rete e anche diversi corsi a pagamento a cifre assolutamente sostenibili. Occorre molta formazione continua e pratica.\nHo scritto un articolo sul mio blog sulle competenze richieste per diventare iOS developer!\nParlando di successi, qual è il tuo prossimo obiettivo? Quale ruolo vorresti ricoprire entro i prossimi 3 anni? Ci sto già lavorando da un po\u0026rsquo; a dire il vero. Non voglio lasciare l’ambito tecnico, anzi, mi sto impegnando ogni giorno per avere una formazione tecnica sempre più forte. Però ho creato anche una strada parallela per diventare Scrum Master in azienda.\nGrazie agli ultimi studi universitari che ho intrapreso e l’esperienza, ho da poco fatto partire anche dei programmi di coaching e mentoring.\n Voglio aiutare i ragazzi e le ragazze che studiano informatica a orientarsi nel mondo del lavoro, e supportare chi lavora già con il digitale a formare le proprie soft skills.\n Conosci il tema gender gap in ambito STEM? Se sì, come fare per superarlo? Credo che sia un tema molto complesso.\nNon ho una risposta semplice, faccio piuttosto delle riflessioni sulle mie esperienze personali, che per quanto non facciano statistica(?) mostrano comunque una parte di realtà.\nHo spesso scelto attività etichettate come tipicamente maschili (dagli studi in informatica, al lavoro come sviluppatrice e la palestra con i pesi).\n Mi sono spesso dovuta scontrare con pregiudizi e discriminazioni di tutti i tipi.\n Mi sono sentita chiedere ai colloqui di lavoro se ero fidanzata. Ero troppo giovane per capire, altrimenti avrei mandato a quel paese chi mi ha posto questa domanda. Ho visto la mia retribuzione diversa rispetto i miei colleghi uomini, a pari esperienza e formazione. Mi sono sentita spesso giudicata e sotto la lente d’ingrandimento.\nPersino in palestra mi sono sentita dire che mi “allenavo come un uomo”. Adesso invece i commenti sono di ammirazione e stupore, proprio perché non mi sono lasciata intimorire dal giudizio ed ho continuato a fare quello che mi piaceva fare. Anche se erano attività spesso scelte dagli uomini. Ma questo non le rende non adatte alle donne. Chi lo ha decretato?\nMi chiederei piuttosto perché le donne non scelgono certe attività. Paura di essere giudicate? Indottrinamento sin da bambine a certi interessi piuttosto che altri? O veramente ci sono delle “preferenze” di genere?\nIo penso solo che è giusto si scelga in base alle proprie preferenze personali e non influenzati dal proprio genere.\nCapisco che sia culturalmente difficile, ma agendo ogni giorno in controtendenza sicuramente si smantelleranno anche questi pregiudizi!\nContatti Blog Profilo LinkedIn Profilo Instagram ", "url": "https:\/\/theredcode.it\/interviste\/voglio-diventare-una-ios-developer\/" }, "https:\/\/theredcode.it\/database\/backup-con-sql-server\/": { "title": "Backup con SQL Server", "tags": ["database",], "content": "Cosa vedrai Definizione di backup Come funziona Risorse utili Definizione di backup Con backup, nell\u0026rsquo;ambito dell\u0026rsquo;informatica, si indica un processo di creazione di una o più copie delle informazioni memorizzate su un supporto per poterle utilizzare come recupero in caso di incidenti.\nNormalmente, nel caso di un database, si prevede all\u0026rsquo;interno di un piano di manutenzione una creazione periodica dei backup del database.\nCome funziona Dopo aver scelto il database di cui effettuare il backup, clicchiamo con il destro e selezioniamo \u0026ldquo;Attività\u0026rdquo;\u0026gt;\u0026ldquo;Backup\u0026rdquo;:\nBackup tramite SQL Server Management Studio\nNel primo campo viene riportato il database scelto; nella sezione \u0026ldquo;Destinazione\u0026rdquo; viene invece specificato dove il backup verrà effettuato.\nSchermata di configurazione del backup\nDi default, riporta il path della cartella dove SQL Server è stato installato, all\u0026rsquo;interno della quale c\u0026rsquo;è una cartella chiamata Backup dove vengono salvate le copie dei database:\nCartella predefinita per il salvataggio dei backup\n L\u0026rsquo;ideale è fare il backup su un disco separato per salvaguardare i nostri dati da eventuali problemi sul disco ;)\n Tra le opzioni per la scelta dei supporti, c\u0026rsquo;è la possibilità di \u0026ldquo;appendere\u0026rdquo; il backup ad un file esistente: questo vuol dire che la prima volta che eseguiamo il backup, verrà creato un file nella destinazione scelta (o in quella predefinita) con l\u0026rsquo;estensione .bak.\nLa volta successiva, se viene selezionata l\u0026rsquo;opzione in figura, questa aggiungerà il backup corrente a quello scelto, accondadolo.\nOpzione per accodare il backup\n I file con estensione .bak rappresentano i backup di SQL Server.\n Nel caso di un backup periodico, questa non sempre è l\u0026rsquo;opzione migliore: tra le possibilità c\u0026rsquo;è anche quella di sovrascrivere il backup creando un file che riporta i dati del database ex-novo!\nTra le opzioni successive, c\u0026rsquo;è anche la possibilità di verificarne l\u0026rsquo;affidabilità: tra i controlli che possiamo eseguire quando avviene un backup, c\u0026rsquo;è la verifica al termine della sua esecuzione, un controllo basato sul checksum e la possibilità di proseguire con il backup anche in presenza di errori.\nOpzione per verificare l\u0026rsquo;affidabilità del backup\nCome riporta la documentazione ufficiale:\n l\u0026rsquo;operazione di verifica di un backup controlla che il backup sia fisicamente intatto, al fine di garantire che tutti i file in esso presenti siano leggibili e ripristinabili, e che sia possibile ripristinare il backup nel caso in cui sia necessario utilizzarlo. È importante tenere presente che la verifica di un backup non prevede la verifica della struttura dei dati in esso contenuti. Se tuttavia il backup è stato creato utilizzando WITH CHECKSUMS, la verifica del backup utilizzando WITH CHECKSUMS può offrire una valida indicazione sull\u0026rsquo;affidabilità dei dati in esso contenuti.\n Risorse utili Documentazione ufficiale Basi di Dati ", "url": "https:\/\/theredcode.it\/database\/backup-con-sql-server\/" }, "https:\/\/theredcode.it\/interviste\/voglio-diventare-una-business-analyst\/": { "title": "Voglio diventare una... Business Analyst", "tags": ["interviste","voglio-diventare",], "content": "Cosa vedrai Descriviti in 100 parole In cosa consiste il ruolo di Business Analyst? Qual è la soft skill più importante che deve possedere una Business Analyst? 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 Business Analyst? 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 Mi chiamo Licia Tomaiuolo e svolgo la professione di Business Analyst, ruolo che forse non tutti oggi conoscono con sufficiente chiarezza. Ancor prima di conseguire la Laurea Magistrale in Economia, ho iniziato ad occuparmi di progettazione e analisi dei dati in vari ambiti, avvicinandomi al mondo della programmazione e dei più comuni software statistici open source. La passione che nutrivo da sempre per il mondo dell’innovazione, mi ha poi spinto a cercare ulteriori percorsi formativi, con un focus particolare su Business Intelligence e Data Science, fino alla partecipazione a specifiche Academy e al successivo ingresso nel campo a livello lavorativo.\nIn cosa consiste il ruolo di Business Analyst? L’attività del Business Analyst consiste innanzitutto nel recepire e individuare, il più correttamente possibile, una serie di requisiti funzionali per poi tradurli in proposte operative da sviluppare e conseguentemente implementare, in stretta collaborazione con più figure tecniche specializzate.\n A seconda delle esigenze, infatti, l’obiettivo è quello di utilizzare la BI per trasformare dei dati non strutturati in informazioni utili e significative, combinando business analytics, data mining e data visualization, nonché strumenti e infrastrutture per i dati, al fine di poter compiere scelte strategiche ed operative più efficaci.\nAffinché ciò sia possibile, risulta fondamentale che ogni risorsa all’interno del team svolga il proprio ruolo rendendo disponibili e a vantaggio di tutti le proprie competenze, in modo da riuscire a cooperare su più ambiti, soluzioni tecnologiche e settori di riferimento.\nDotato di abilità legate a entrambi i mondi, IT e funzionale, il Business Analyst deve, dunque, essere capace di comunicare con tutti utilizzando il giusto grado di dettaglio e tecnicismo, occupandosi di rielaborare i dati disponibili per estrarre nuove informazioni da rendere visibili e navigabili a differenti livelli di granularità o aggregazione.\nQual è la soft skill più importante che deve possedere una Business Analyst? Credo che la soft skill principale da possedere per svolgere al meglio il ruolo di Business Analyst, ma forse anche più in generale per questo tipo di professioni, consista nella capacità di risoluzione dei problemi, comunemente definita problem solving, e di relativa condivisione delle soluzioni.\nÈ molto importante essere pronti ad affrontare criticità e problematiche inaspettate, individuando nei giusti tempi quella che può ritenersi la soluzione migliore, condividendola correttamente con tutti i soggetti interessati.\nDi conseguenza, risultano fondamentali anche tutte quelle competenze trasversali o comportamentali che fanno riferimento a capacità comunicative, proprietà di linguaggio, precisione, capacità decisionali, serietà, time management, flessibilità, capacità di lavorare in gruppo, gestione dello stress, intelligenza emotiva, spirito di adattamento e creatività.\nSi tratta di caratteristiche che, seppur a volte sottovalutate, consentono di distinguersi positivamente sia a livello umano sia dal punto di vista professionale.\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 fallimento rappresenta forse l’unica via per raggiungere un certo grado di consapevolezza, l’unico modo per comprendere dove abbiamo sbagliato e farne tesoro per il futuro.\n Probabilmente il mio più grande errore, provenendo da un altro ambito, economico e non direttamente legato al mondo dell\u0026rsquo;AI e della programmazione, è stato quello di pensare che non sarei mai stata abbastanza in linea con le figure e i requisiti che caratterizzano solitamente questo campo, non comprendendo, invece, che ogni singolo sbaglio poteva rappresentare un’occasione in più per crescere e migliorare.\nCon il tempo, coltivando sempre più passione ed entusiasmo, ho capito che, con la giusta determinazione e forza di volontà, anche ciò che può sembrarci impossibile, pian piano si può imparare.\nMalgrado i rifiuti e le critiche che si possono ricevere, ognuno di noi possiede delle caratteristiche che lo rendono unico, nella vita privata così come nel lavoro, e prima o poi si presenta la giusta opportunità, in grado di far emergere il proprio valore.\n Un esperto è uno che ha fatto tutti gli errori possibili nel suo campo. (Niels Bohr)\n Come fare per diventare una Business Analyst? Per poter svolgere il ruolo di Business Analyst, un percorso accademico in ambito STEM può sicuramente facilitare la comprensione di determinate tematiche e la realizzazione di specifiche attività sui dati, che puntano ad estrapolare, analizzare, rielaborare e visualizzare le informazioni di interesse.\nAttualmente esistono Academy e percorsi formativi mirati, organizzati da agenzie per il lavoro o dalle aziende stesse, con l’obiettivo di formare in modo intensivo un certo numero di risorse, da inserire successivamente mediante stage, apprendistato o altre tipologie contrattuali.\nPer quanto riguarda le competenze tecnologiche, a seconda dell’azienda, delle mansioni e del livello di seniority del ruolo a cui si fa riferimento, i requisiti possono variare: dai linguaggi di programmazione di cui è richiesta la conoscenza, all’utilizzo più o meno avanzato delle tecnologie previste, fino alle certificazioni da possedere in ambito BI, le quali vanno a comprovare le diverse conoscenze acquisite.\nIn ogni caso è molto importante mostrare un elevato grado di flessibilità e adattamento, in quanto si tratta di una professione che richiede una formazione costante su temi in continua evoluzione.\nParlando di successi, qual è il tuo prossimo obiettivo? Quale ruolo vorresti ricoprire entro i prossimi 3 anni? Entro i prossimi 3 anni vorrei impegnarmi per ottenere una crescita sia a livello di competenze tecniche sia relativamente al tipo di ruolo da ricoprire, con specifiche mansioni e responsabilità.\nIl mio prossimo obiettivo, dunque, è quello di rafforzare le conoscenze che possiedo rispetto alle tecnologie che attualmente adopero in ambito Business Intelligence, ma anche imparare ad utilizzare nuovi tool, seguendo poi un percorso parallelo di crescita sul piano gestionale ed organizzativo.\nMi piacerebbe, infatti, conseguire ulteriori certificazioni, relative ad esempio anche all’ambito del Project Management, e magari intraprendere una formazione di tipo Executive, ossia di perfezionamento di alto livello.\nConosci il tema gender gap in ambito STEM? Se sì, come fare per superarlo? Credo che il tema gender gap in ambito STEM sia, purtroppo, qualcosa di cui si sentirà ancora tanto parlare nei prossimi anni. La cultura che contraddistingue ogni Paese spinge, inevitabilmente, le donne a inseguire obiettivi di vita molto diversi tra loro, prediligendo troppo spesso professioni considerate tipicamente \u0026ldquo;femminili\u0026rdquo;.\nA prescindere dai vari fattori che possono influenzare tali scelte, ritengo che la decisione dipenda molto dall’interesse, più o meno forte, che si può manifestare nei confronti di certe discipline e tematiche, la giusta motivazione in grado di spingerti a intraprendere una strada piuttosto che un’altra, a dispetto di ogni difficoltà e pregiudizio.\nPersonalmente, ho avuto modo di vivere situazioni reali in cui, frequentando determinati percorsi formativi o svolgendo alcune professioni, sono stata considerata meno brava di altri solo perché in minoranza all’interno di ambiti prettamente maschili.\nCon il tempo ho iniziato, tuttavia, a percepire meno questo divario, scegliendo anche contesti diversi, in grado di valorizzare maggiormente la figura femminile e distribuire in modo più equo i vari ruoli e le relative responsabilità.\n Del resto, le donne possiedono da sempre delle doti innate, considerate indispensabili in certi campi… Dunque, perché rinunciarvi?\n Contatti Profilo LinkedIn ", "url": "https:\/\/theredcode.it\/interviste\/voglio-diventare-una-business-analyst\/" }, "https:\/\/theredcode.it\/openshift\/configurare-helm-repository-su-openshift\/": { "title": "Configurare un Helm Repository su OpenShift", "tags": ["openshift","kubernetes",], "content": "Helm è un gestore di pacchetti software che semplifica la distribuzione di applicazioni e servizi per Kubernetes e per OpenShift Container Platform.\nHelm utilizza un formato di packaging chiamato Chart. Ma come funziona su OpenShift?\nVediamo un esempio pratico con Bitnami!\nCosa vedrai Definizione Crea un HelmChartRepository Aggiorna il catalogo Definizione Un Helm Chart è una raccolta di file che descrive le risorse necessarie per il deploy di un\u0026rsquo;applicazione.\n Un\u0026rsquo;istanza in esecuzione del chart in un cluster è denominata release. Viene creata una nuova versione ogni volta che un grafico viene installato nel cluster.\nOgni volta che viene installato un chart o una release viene aggiornata o ripristinata, viene creata una nuova versione con numero incrementale.\nUn esempio di chart è disponibile a questo link.\nCrea un HelmChartRepository Come prima cosa, dovrai ottenere le informazioni sul repository Helm che ti interessa; per impostazione predefinita, OpenShift 4 include il repository RedHat Helm Charts, and that\u0026rsquo;s it.\nPer impostarne uno nuovo, modifica le informazioni poste tra parentesi quadre e salva il contenuto del file in un file in formato YAML:\napiVersion: helm.openshift.io/v1beta1 kind: HelmChartRepository metadata: name: [NOME] # nome del repository spec: name: [NOME] # nome del repository connectionConfig: url: [URL] # URL del repository. Ad esempio, per aggiungere il repository di Bitnami, dove sono disponibili diversi prodotti come Airflow, PostgreSQL, Cassandra, Keycloak e molto altro, questo è il file da utilizzare:\napiVersion: helm.openshift.io/v1beta1 kind: HelmChartRepository metadata: name: bitnami spec: name: bitnami connectionConfig: url: https://charts.bitnami.com/bitnami Accedi alla console OpenShift e utilizza il comando seguente per aggiungere l\u0026rsquo;oggetto HelmChartRepository:\noc login -u [USER] https://api.[HOST]:[PORT] oc apply -f [FILE].yml Aggiorna il catalogo Se l\u0026rsquo;installazione ha esito positivo, troverai il nuovo repository di Bitnami nel Catalogo (prospettiva \u0026ldquo;Developer\u0026rdquo;, in alto a sinistra nel menù!), come mostrato nella figura seguente:\nBitnami repository\nRisorse utili Docker - per cominciare bene con Docker e Kubernetes Kubernetes - Guida per gestire e orchestrare i container ", "url": "https:\/\/theredcode.it\/openshift\/configurare-helm-repository-su-openshift\/" }, "https:\/\/theredcode.it\/tags\/chatbot\/": { "title": "chatbot", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/tags\/chatbot\/" }, "https:\/\/theredcode.it\/intelligenza-artificiale\/gptzero-vs-chatgpt\/": { "title": "GPTZero - Disegnato per smascherare", "tags": ["intelligenza-artificiale","ChatGPT","chatbot",], "content": "Cosa vedrai GPTZero Come funziona Dietro le quinte Risorse utili ChatGPT ha popolato le testate di tutti i giornali e blog del settore, ed è stato messo alla prova in diversi modi da persone professioniste e non per valutarne il funzionamento. C\u0026rsquo;è chi ha detto che non sa riconoscere un errore quando lo vede, chi parla di una possibile acquisizione da parte di Microsoft e chi parla di se e quando diventerà a pagamento\nEveryone: [ChatGPT](https://chat.openai.com) is the closest thing to AGI 🤯\nMeanwhile, [ChatGPT](https://chat.openai.com) doing some basic math 😂 pic.twitter.com/VcvZzvLpWZ\n\u0026mdash; Shubham Saboo (@Saboo_Shubham_) January 15, 2023 GPTZero GPTZero è diventato virale su Twitter il 3 gennaio 2023 con oltre 7 milioni di visualizzazioni:\nI spent New Years building [GPTZero](https://gptzero.me/) — an app that can quickly and efficiently detect whether an essay is [ChatGPT](https://chat.openai.com) or human written\n\u0026mdash; Edward Tian (@edward_the6) January 3, 2023 Edward Tian, la persona che ha sviluppato in meno di tre giorni GPTZero durante il periodo di Natale, ha scelto come motto \u0026ldquo;gli esseri umani meritano la verità\u0026rdquo;. Il suo scopo, in quanto studioso di giornalismo e informatica, è quello di mettere a disposizione di insegnanti, educatori e non solo, uno strumento che permetta di riconoscere un testo generato artificialmente da uno scritto a mano.\nNon solo: Tian si impegna a mantenere una versione di GPTZero classic permanentemente gratuita e accessibile a qualsiasi essere umano, senza renderla mai a pagamento.\n\u0026ldquo;C\u0026rsquo;è stato così tanto clamore ed entusiasmo attorno a ChatGPT, che come con qualsiasi nuova tecnologia, dobbiamo pensare di adottarla in modo responsabile, e questa è stata la motivazione principale a creare GPTZero\u0026rdquo;, dice lo sviluppatore: in effetti, ChatGPT ha guadagnato un milione di utenti in appena 6 giorni.\nCome funziona L\u0026rsquo;applicazione è stata scritta in Python, come visibile da un errore generato casualmente durante i test a causa di un testo troppo lungo:\nIl suo funzionamento è semplice: basta accedere alla demo disponibile sul sito ufficiale e inserire il testo di cui vogliamo controllare la sorgente, incollarlo e richiedere la valutazione. Il sistema misura la qualità del testo e discrimina l\u0026rsquo;autore sulla base di una metrica che chiama perplessità: questa rappresenta la misura di quanto bene un modello linguistico come ChatGPT può prevedere un testo, a fronte di un input.\nCome viene specificato nell\u0026rsquo;output, testi particolarmente lunghi sono comunque classificabili come human-like visto che quelli generati al momento si attestano su una lunghezza media standard.\nPiù il punteggio è alto, più il testo sarà stato verosimilmente scritto da un essere umano.\nin poche parole, misura quanto piace il testo al modello di computer. la tua perplessità del testo valutata su gpt2 (345 milioni di parametri) è 28 i testi con perplessità inferiori hanno maggiori probabilità di essere generati da modelli linguistici\nIn questo caso, per fare un test e contro-test, ho chiesto a ChatGPT di generare un articolo su ChatBCG, di cui abbiamo parlato la settimana scorsa. Parte del risultato è il seguente testo:\nIl tema non è esattamente quello scelto, ma si riferisce ad un ipotetico sistema di generazione di chatbot, per cui proviamo a cambiare testo e scegliamo \u0026ldquo;Black Mirror\u0026rdquo;, la serie prodotta da Netflix. Questo il testo generato da ChatGPT:\nBlack Mirror is a British science fiction anthology television series created by Charlie Brooker. The show is produced by Brooker and Annabel Jones, and originally premiered on Channel 4 in the United Kingdom before being picked up by Netflix for international distribution. Each episode of Black Mirror presents a standalone story that explores the darker aspects of technology and its impact on society and individuals. The series covers a wide range of themes, including the effects of social media, surveillance, artificial intelligence, and virtual reality on human behavior and relationships. \u0026hellip;\nIl risultato di GPTZero è ottimo, e riconosce che il testo è stato generato da un\u0026rsquo;intelligenza artificiale:\nPer fare un contro-test, utilizziamo una recensione presa da Quora.com sulla serie TV che è abbastanza lunga da essere un testo plausibile.\nInserendo questo testo in GPTZero, il risultato è che la perplessità del sistema è pari a zero -più o meno: la recensione è stata scritta da un essere umano, e il punteggio è molto alto.\nDietro le quinte Edward Tian ha utilizzato un modello piuttosto semplice di machine learning per costruire GPTZero, basato sulla regressione logistica, dove utilizza metriche come la perplessità per valutare la bontà dell\u0026rsquo;input ricevuto. Come dataset, ha utilizzato gli articoli pubblicati sul sito della BBC più degli input generati artificialmente, di modo da ridurre il numero di falsi positivi, che attualmente si attesta sullo 2%.\nQuesto modello non è stato sviluppato con l\u0026rsquo;idea di andare contro tecnologie come quelle di ChatGPT: lo stesso sviluppatore chiarisce che \u0026ldquo;ci sono delle bellissime qualità nella letturatura prodotta dagli essere umani di cui i computer non possono e non dovrebbero appropriarsi\u0026rdquo;.\n Sembra che a breve uscirà un nuovo modello, GPTZeroX, con molte più funzionalità, tra cui l\u0026rsquo;upload di documenti in formato Word o PDF, come le evidenze che hanno portato il sistema a classificare il testo come generato artificialmente o meno fornendo dei testi chiave.\n Risorse utili Newsletter ufficiale ", "url": "https:\/\/theredcode.it\/intelligenza-artificiale\/gptzero-vs-chatgpt\/" }, "https:\/\/theredcode.it\/random\/the-playlist\/": { "title": "The Playlist - Quello che non sapevi su Spotify", "tags": ["red-updates",], "content": "Qualche mese fa è uscita su Netflix la serie \u0026ldquo;The Playlist\u0026rdquo;, che racconta in 6 appassionanti puntate la storia di Spotify e di come un piccolo -inizialmente- gruppo di svedesi riescono a rivoluzionare il mondo della musica con un prodotto che oggi è utilizzato da milioni di persone.\n Ma cos\u0026rsquo;è che la rende così interessante?\n La storia La narrazione parte da ognuno dei protagonisti della celebre app, e la serie si apre con il punto di vista di Daniel Ek, ossia il creatore di Spotify: dopo essere stato scartato da Google, decide di aprire una compagnia chiamata Tradera: si tratta di un e-commerce che poi venne acquistato da Ebay nel 2006.\nDopo aver venduto questa prima compagnia, ne apre un\u0026rsquo;altra, chiamata Advertigo, un motore di ricerca con pubblicità online, venduta per una cifra da capogiro. Ek comincia dunque a farsi strada nel mondo dell\u0026rsquo;imprenditoria con i suoi prodotti e le sue idee, anche se quella veramente rivoluzionaria tarderà ancora un po\u0026rsquo; ad arrivare.\nDopo aver infatti assunto il ruolo di CEO di μTorrent, un sito di streaming di contenuti multimediali, inizia a maturare la sua idea: creare una piattaforma di streaming per la musica dove sia gli artisti, sia le case discografiche, abbiano il loro guadagno, sfruttando soprattutto l\u0026rsquo;esperienza maturata con Advertigo per alimentare la piattaforma tramite la pubblicità.\nIn questo progetto un ruolo chiave è detenuto da Martin Lorentzon, imprenditore e co-fondatore di Spotify, che decide di finanziare l\u0026rsquo;intero progetto a sue spese, soprattutto dopo aver acquistato in precedenza Advertigo sempre da Ek.\nPerché devi vederla La serie si sviluppa intorno alla nascita e all\u0026rsquo;evoluzione di Spotify, alle persone protagoniste che l\u0026rsquo;hanno portata al successo e ai diversi ruoli professionali che sono stati necessari a renderla una piattaforma popolare, ma soprattutto legale: non tutti sanno che dietro alla successo di Spotify, c\u0026rsquo;è il declino di The Pirate Bay, uno dei siti più conosciuti per il download illegale di contenuti multimediali e non.\nL\u0026rsquo;idea di Ek era infatti quella di replicare l\u0026rsquo;esperienza utente avuta con questa piattaforma, ma in maniera legale, e assolvendo ad una parte del mercato che ancora non era stata \u0026ldquo;scoperta\u0026rdquo;.\nIl primo logo di Spotify\nLo stesso Per Sundin, CEO of Sony BMG e tra i primi ad accettare di collaborare con il team di Ek, durante un\u0026rsquo;intervista disse che \u0026ldquo;se Pirate Bay non fosse esistito o non avesse creato tutto questo scompiglio nel mercato delle case discografiche, Spotify non avrebbe visto la luce del giorno\u0026rdquo;.\nLe successive puntate sono raccontate anche dalla prospettiva delle case discografiche, le quali all\u0026rsquo;inizio hanno visto in Spotify l\u0026rsquo;ennesimo progetto volto a minare la loro crescita, poi la legge, con tutto il lavoro fatto per gestire i diritti e le royalties delle case discografiche e degli artisti per far guadagnare tutte le persone coinvolte nella piattaforma, infine i programmatori e le programmatrici che hanno lavorato attivamente al progetto creando un\u0026rsquo;interfaccia grafica estremamente funzionale e veloce, l\u0026rsquo;eccentrico Martin Lorentzon con i primi 5 anni come finanziatore di Spotify, e infine il punto di vista degli artisti, rappresentato da Bobbi T, una musicista emergente ed ex-compagna di liceo di Ek, che si batte per garantire agli artisti che non avevano l\u0026rsquo;appoggio di qualche importante casa discografica e che non volevano perdere i guadagni sulla musica prodotta.\nCose che non sai Bobbi T, personaggio centrale nella serie, in realtà non esiste, ma il ruolo è recitato da una vera cantante pop-soul, Janice Kamya Kavander Una delle puntate mostra il matrimonio di Daniel Ek con la sua compagna storica, in cui il sottofondo riprende uno dei celebri pezzi di Bruno Mars, che nella realtà si è veramente esibito al matrimonio di Ek. Un rapporto di Business Insider del 2020 ha rilevato che gli artisti guadagnano solo $ 0,0033 per streaming. Il servizio di streaming non paga però per singolo streaming, ma utilizza un sistema che paga gli artisti in base allo \u0026ldquo;streamshare\u0026rdquo;. Questo pagamento potrebbe variare ogni mese a seconda di come la musica viene trasmessa in streaming o degli accordi con i licenziatari, afferma Spotify. In altre parole, un milione di stream corrisponde ad un guadagno che oscilla tra i 3000 e gli 8000 dollari. L\u0026rsquo;artista più pagato da Spotify è Drake, che a maggio del 2022 aveva guadagnato circa 52 milioni, mentre l\u0026rsquo;artista con più follower risulta essere Ed Sheeran, insieme a J Balvin, Post Malone e Bad Bunny. Le royalties dovute alle case discografiche corrispondono ad una bella fetta dell\u0026rsquo;income di Spotify: nel 2021 ha pagato circa 12.5 miliardi di dollari alle etichette Sony, Universal Music e WMG. ", "url": "https:\/\/theredcode.it\/random\/the-playlist\/" }, "https:\/\/theredcode.it\/interviste\/voglio-diventare-una-ui-e-visual-designer\/": { "title": "Voglio diventare una... UI \u0026 Visual Designer", "tags": ["interviste","voglio-diventare",], "content": "\u0026ldquo;A volte vinci, a volte impari\u0026rdquo;. Questo proverbio giapponese cambia totalmente la prospettiva con cui guardi le cose: gli errori non sono una perdita, ma un\u0026rsquo;opportunità. In questa intervista, Valentina Barreca racconta il suo lavoro di UI \u0026amp; Visual Designer, e del progetto Youxi: blog e academy per un design sempre più accessibile.\nCosa vedrai Descriviti in 100 parole In cosa consiste il ruolo di UI \u0026amp; Visual Designer? Qual è la soft skill più importante che deve possedere una UI \u0026amp; Visual Designer? 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 UI \u0026amp; Visual Designer? 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 Valentina Barreca e mi definisco una designer molto curiosa.\nSperimentando tanto ho trovato nella progettazione di piattaforme web e mobile la sublimazione di tutte le mie passioni e propensioni: il disegno tecnico, l\u0026rsquo;attenzione ai dettagli, la ricerca del bello e soprattutto funzionale.\nNel 2013 ho fondato Playgrafica, la mia attività da freelance il cui nome nasce dal concetto di gioco: a volte si vince e altre volte si impara.\nNel 2021 insieme a Chiara, UX designer, ho fondato Youxi, con la missione di influenzare positivamente altri designer a migliorare i servizi progettando interfacce digitali accessibili a sempre più persone.\nIn cosa consiste il ruolo di UI \u0026amp; Visual Designer? Mi occupo di creare interfacce visivamente accattivanti per gli utenti. Sono esperta nei principi del design, della composizione, della teoria del colore e della tipografia con particolare attenzione all’identità di marca.\nA differenza di UX Designer che si concentrano sulla funzione, io mi occupo principalmente dell’estetica e faccio in modo che sia accessibile e inclusiva. Collaboro con liberi professionisti e aziende aiutandoli a disegnare il messaggio per conquistare i propri clienti. In definitiva, mi occupo di dare forma alla visione del prodotto.\nQual è la soft skill più importante che deve possedere una UI \u0026amp; Visual Designer? In quanto a freelance sicuramente l’ascolto del cliente viene prima di ogni altra cosa. L’ho capito quando chiedendo a una mia cliente quale fosse la qualità che apprezza più di me ha risposto senza esitare: il fatto che fin dal primo incontro le avessi mostrato interesse prima di tutto ascoltando e poi facendo domande prendendo appunti. Una cosa di cui vado molto fiera è che ho imparato a prenderli guardando in faccia chi parla.\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 decina di anni fa aprii la p.iva principalmente perché un’azienda con cui volevo lavorare me lo propose. Il mio errore più grande fu quello di non aver lottato per crearmi un giro di collaborazioni solide oltre a loro e così dopo 6 anni, quando l’azienda chiuse, mi ritrovai a ricominciare da zero.\nOra svolgo a tutti gli effetti una libera professione che sia davvero libera, che sia totalmente mia e che crei valore nelle persone. Ho capito però che per lavorare bene in team è fondamentale che ci sia un allineamento di valori, più i miei coincidono con quelli del cliente o collaboratore e più si crea sintonia.\nCome fare per diventare una UI \u0026amp; Visual Designer? Il percorso necessario per diventare professionisti non è mai lineare perché la vita sa sempre come sorprenderci. Io, per esempio, quando mi diplomai in grafica pubblicitaria ero convinta che avrei lavorato da subito in un’agenzia di comunicazione ma non avevo ancora esperienza, non trovavo lavoro e mi iscrissi ad un corso post diploma in web grafica, animazione digitale e comunicazione visiva grazie al quale mi innamorai di tante nuove materie.\nL’estate successiva trovai un lavoro in un’azienda di pelletteria che aveva uno studio di comunicazione interno e con il nuovo anno accademico lo mollai per iscrivermi in Media Design alla NABA di Milano. C’era anche il corso di comunicazione visive ma la curiosità verso i nuovi media (mezzi di comunicazione di massa) era tanto forte da portarmi ad esplorare nuovi orizzonti.\nOra so che anche se non sono diventata regista, videomaker, modellatrice 3D, fotografa o altro quel percorso mi ha permesso di acquisire nozioni utili al mio lavoro attuale.\nIn questo settore le certificazioni servono solo a noi, a capire quali competenze abbiamo acquisito ma ciò che richiedono le aziende in primis sono le abilità trasversali, le famose soft skills, che si acquisiscono sul campo.\n In che modo? Rimboccandosi le mani e iniziando a fare.\n L’unico consiglio che mi sento di dare è quindi quello di essere il più possibile pro attivi, di non scoraggiarsi di fronte alle difficoltà e di mettere in pratica le proprie competenze anche se si tratta di progetti personali. L’importante è trovare il modo di iniziare sperimentando ciò che amiamo e di continuare a formarci perché soprattutto il digitale cambia sempre più in fretta.\nParlando di successi, qual è il tuo prossimo obiettivo? Quale ruolo vorresti ricoprire entro i prossimi 3 anni? Sicuramente essere un punto di riferimento dello UI Design in Italia, chiarendo nella mente di appassionati, studenti e aziende (perché no?) la differenza tra UI e UX Design. Si tende troppo spesso a confondere i due ruoli e anche se possono sicuramente coesistere nello stesso professionista, il risultato in termini di business non sarà mai come quello prodotto da un lavoro di team.\nIn realtà ci stiamo già lavorando con Youxi e la nostra missione è di creare più chiarezza e far appassionare i designer alla bellezza (UI, interfaccia utente) che funziona (UX, esperienza utente) per le persone.\n A tal proposito, Steve Jobs disse che il design non è come una cosa appare, bensì come quella cosa funziona.\n Conosci il tema gender gap in ambito STEM? Se sì, come fare per superarlo? Certamente! È un tema che mi sta molto a cuore, in passato ho fatto esperienza in numerose aziende e ho notato l’enorme disparità di genere.\nDevo anche dire che però, fortunatamente, qualcosa si sta muovendo in una direzione diversa: ci sono moltissime donne che lottano tutti i giorni per abbattere questa barriera con l’obiettivo di rendere il mondo un posto migliore.\nDobbiamo essere noi in primis a lottare se vogliamo che le cose cambino e soprattutto oggi, grazie al potere della rete, è molto più facile farlo perché abbiamo un potere enorme che ha un grandissimo valore: la libertà di espressione. Non sottovalutiamola e usiamo al meglio gli strumenti che abbiamo!\nContatti Blog Youxi Pagina Instagram Email ", "url": "https:\/\/theredcode.it\/interviste\/voglio-diventare-una-ui-e-visual-designer\/" }, "https:\/\/theredcode.it\/intelligenza-artificiale\/chatbcg-ai-generative-slides\/": { "title": "ChatBCG: generare delle slides tramite AI", "tags": ["intelligenza-artificiale",], "content": "Hai mai sognato di avere delle slides impostate e pronte all\u0026rsquo;uso, a partire da un argomento qualsiasi?\nDopo ChatGPT, arriva ChatBCG: un sistema in grado di generare delle slides a partire da un input testuale. Scopriamo insieme di che si parla!\nChatBCG Dopo DALL-E 2 per le immagini e ChatGPT per il testo, il passaggio finale per renderci tutti ridondanti: la prima implementazione al mondo di Text-to-PowerPoint.\nIl lancio dell\u0026rsquo;IA conversazionale e generativa ha preso d\u0026rsquo;assalto Internet nelle ultime settimana: mentre ChatGPT può parlare agli umani attraverso il linguaggio naturale, i modelli di text-to-image come DALL-E 2, Stable Diffusion e Midjourney hanno dato impulso all\u0026rsquo;arte digitale.\nCreato da Joseph Semrai e Silas Alberti, due studenti alla Stanford AI PhD, questa rete generativa permette di creare delle slides con una grafica già pronta a partire da un testo inserito nella barra di ricerca.\nFeatures Il modello BCG-3 (acronimo di Bi-modal Conditional Generation) ha finora le seguenti caratteristiche:\n Schema delle slides con tabella dei contenuti Intestazioni per i titoli Elenco puntato per i diversi argomenti Parole chiave in grassetto Immagini e grafica a tema Layout e temi multipli Il punto forte di questo strumento è che puoi anche esportare le diapositive nei formati PPTX e PTF. Presto verranno aggiunte altre funzionalità come grafici basati sui dati e l\u0026rsquo;utilizzo di contenuti presi da testi.\n\u0026hellip;e questo è solo l\u0026rsquo;inizio! 🎬\nProssimamente, i due sviluppatori hanno annunciato di voler inserire altre funzionalità, tra cui:\n Altri layout e temi Editing conversazionale, ossia la possibilità di modificare le slides sfruttando del testo o audio💭 Usa diverse sorgenti per generare i tuoi contenuti (blog/paper/pubblicazioni) Grafici basati sui dati inseriti. Per provarla, abbiamo inserito come testo \u0026ldquo;How to Write a Best Selling Book\u0026rdquo;, e in effetti il risultato non è male: nella tabella dei contenuti abbiamo come punti focus la ricerca dell\u0026rsquo;argomento, la preparazione di un piano di scrittura e poi la fase di promozione e lancio del libro.\nCome funziona Non esiste ancora una pubblicazione ufficiale su questo prodotto, ma si può supporre che il sistema sia basato su una rete neurale generativa molto simile a quella utilizzata nei sistemi generativi avversari. Il nome assegnato alla rete indica che si tratta di una rete bi-modal, ossia una rete neurale che combina come input sia testo che immagini annotate. Questo approccio è ancora poco documentato, ma è una versione semplificata dell\u0026rsquo;apprendimento multimodale, e quindi un sistema che tenta di modellare tramite l\u0026rsquo;AI la combinazione di diverse forme di dati, spesso derivanti da applicazioni del mondo reale.\nLa parte condizionale della rete fa verso ad una Conditional Generative Adversarial Network (CGAN), un tipo di GAN che sfrutta anche le etichette durante il processo di formazione. Il generatore, data un\u0026rsquo;etichetta e un array casuale come input, produce dei dati con la stessa struttura dei dati di training corrispondenti ad una data label.\nUn esempio di GAN l\u0026rsquo;avevamo vista in questo articolo, dove avevamo parlato delle reti generative avversarie (abbreviate in GAN) come insieme di modelli di reti neurali profonde, sviluppate da Ian Goodfellow nel 2014, e utilizzate per produrre dati sintetici.\nVi immaginate? Produrre dei dati che sono verosimili, ma non simili, rilevanti per una situazione specifica, ma che non provengono dal mondo reale. Suona familiare?\nDemo Per vedere una breve demo, qui di seguito il video di presentazione:\n\n", "url": "https:\/\/theredcode.it\/intelligenza-artificiale\/chatbcg-ai-generative-slides\/" }, "https:\/\/theredcode.it\/database\/ottimizzare-query-sql-server\/": { "title": "Ottimizzare le query in SQL Server", "tags": ["database",], "content": "Query performanti e prestanti sono di fondamentale importanza per il successo di qualsiasi applicazione. Quali sono delle best practices o strumenti da utilizzare per analizzare le prestazioni delle query ed, eventualmente, correggerle?\nIn questo articolo, analizziamo in che modo ottimizzare le query di SQL Server e come ottenere il massimo dalle prestazioni di questo database.\nCosa vedrai Definizione di ottimizzazione Piani di esecuzione Statistiche Indici JOIN e WHERE AND e OR Risorse utili Definizione di ottimizzazione Spesso, una query può essere migliorata attraverso molti mezzi diversi, ognuno dei quali ha un costo di tempo e risorse associato.\nMa che cos\u0026rsquo;è \u0026ldquo;ottimale\u0026rdquo;? La risposta a questa domanda determinerà anche quando avremo finito il problema con cui dobbiamo scontrarci per poter passare al passo successivo.\nPer semplicità, definiremo \u0026ldquo;ottimale\u0026rdquo; come il punto in cui una query funziona in modo accettabile e continuerà a farlo per un ragionevole periodo di tempo in futuro.\nQuesto ci fornisce diversi spunti di riflessione utili che ci permettono di rivalutare i nostri progressi mentre ottimizziamo:\n La query ora funziona in modo adeguato rispetto alle nostre esigenze? Le risorse necessarie per ottimizzare ulteriormente hanno un costo alto? Esistono delle query con rendimenti decrescenti per qualsiasi ulteriore ottimizzazione? Qual è lo scopo della query e quale dovrebbe essere il risultato? Prepararci a queste domande ci permette di valutare l\u0026rsquo;impatto della query e della sua esecuzione: eseguire una query che riporta un milione di record non è di certo ottimale, a meno che non sia strettamente necessario; la frequenza con la quale la query viene eseguita rappresenta un altro parametro di valutazione, così come eventuali parametri i cui input possono avere dei valori \u0026ldquo;insoliti\u0026rdquo; o inattesi.\nUn buon punto di riferimento per riprendere anche la definizione di una query \u0026ldquo;ottimale\u0026rdquo; è chiedersi quanto la query debba essere responsiva o veloce perché gli utenti che usufruiranno di quelle informazioni siano felici del risultato e dei tempi in cui lo hanno ottenuto.\nAlcuni strumenti sono a disposizione di SQL Server Workbench, altri richiedono qualche accortezza in più.\n Attenzione: parlando di \u0026ldquo;ottimizzazione\u0026rdquo;, si intende un risultato migliore di quello attuale. Il risultato perfetto non esiste, in quanto tutto ciò che viene descritto è basato su euristiche che non garantiscono -nè possono garantire- IL risultato migliore per le query che andremo a scrivere. L\u0026rsquo;assunto di base è: avendo due query equivalenti, ossia i cui risultati sono identici e possono quindi essere sostituite l\u0026rsquo;una con l\u0026rsquo;altra, si cerca di individuare quella con il costo inferiore.\n Piani di esecuzione Un piano di esecuzione, nelle basi di dati, è un percorso in uno specifico albero, in cui i nodi non sono gli operatori dell\u0026rsquo;algebra relazionale, ma gli operatori di scansione, ordinamento e prodotto cartesiano; un piano è una specifica concreta di una possibile esecuzione.\nCi possono essere tanti possibili piani di esecuzione di un\u0026rsquo;interrogazione; grazie a SQL Server Management Studio, è possibile mostrare in che modo una query viene eseguita mostrando il suo piano di esecuzione.\n Come visualizzarlo in SQL Server Management Studio?\n Al termine della query, nel riquadro dei risultati dovrebbe apparire una scheda aggiuntiva intitolata \u0026ldquo;Piano di esecuzione\u0026rdquo;. Se hai eseguito molte query, potresti vedere molti piani visualizzati in questa scheda.\nIl piano di esecuzione ci mostra quali tabelle sono state accedute, come sono state accedute, come sono state raggruppate e/o unite e tutte le altre operazioni che si sono verificate lungo il percorso verso il risultato finale.\nSono inclusi i costi delle query, che sono stime della spesa complessiva di qualsiasi componente della query. È incluso anche un livello di dettaglio molto alto come la dimensione dell\u0026rsquo;insieme finale, il costo della CPU, il costo di I/O e i dettagli su quali indici sono stati utilizzati.\nPer ognuno degli step di esecuzione, possiamo valutare quale fase della nostra query ha un costo rilevante e può essere candidata all\u0026rsquo;ottimizzazione.\nIn generale, ciò che stiamo cercando sono scenari in cui un numero elevato di righe viene elaborato da una determinata perazione all\u0026rsquo;interno del piano di esecuzione. Una volta trovato un componente ad alto costo, possiamo ingrandire la causa e come risolverla.\nStatistiche Esiste un\u0026rsquo;opzione che permette di vedere quante letture logiche e fisiche vengono eseguite quando viene eseguita una query e possono essere attivate in modo interattivo in SQL Server Management Studio eseguendo la seguente query:\n SET STATISTICS IO ON; Le letture logiche ci dicono quante letture sono state fatte dalla cache del buffer. Questo è il numero a cui faremo riferimento ogni volta che parliamo di quante letture è responsabile di una query o di quanto IO sta causando.\nLe letture fisiche ci dicono quanti dati sono stati letti da un dispositivo di archiviazione poiché non erano ancora presenti in memoria.\nQuesta può essere un\u0026rsquo;utile indicazione di problemi di cache del buffer/capacità di memoria se i dati vengono letti molto frequentemente dai dispositivi di archiviazione, piuttosto che dalla memoria.\nIndici Di base, è possibile accedere ai dati da un indice tramite una scansione o una ricerca (in inglese, seek. Una ricerca è una selezione mirata di righe dalla tabella basata su un filtro (in genere) stretto.\nUna scansione è quando viene valutato un intero indice per restituire i dati richiesti.\n Se una tabella contiene un milione di righe, una scansione dovrà attraversare tutti i milioni di righe per soddisfare la query.\n Una ricerca all\u0026rsquo;interno della stessa tabella può attraversare rapidamente l\u0026rsquo;albero binario dell\u0026rsquo;indice per restituire solo i dati necessari, senza la necessità di ispezionare l\u0026rsquo;intera tabella.\nSe esiste un\u0026rsquo;esigenza legittima di restituire una grande quantità di dati da una tabella, una scansione dell\u0026rsquo;indice potrebbe essere l\u0026rsquo;operazione corretta.\nSe abbiamo bisogno di restituire 950.000 righe da una tabella di milioni di righe, allora una scansione dell\u0026rsquo;indice ha senso. Se dobbiamo restituire solo 10 righe, una ricerca sarebbe molto più efficiente.\n Per fortuna, le scansioni dell\u0026rsquo;indice sono facili da individuare nei piani di esecuzion, perché sono quelle che consumeranno più risorse nell\u0026rsquo;esecuzione della query.\n JOIN e WHERE L\u0026rsquo;euristica fondamentale è eseguire selezioni (istruzioni SELECT con WHERE) e proiezioni (SELECT di alcuni attributi di una tabella) il più presto possibile, al fine di ridurre le dimensioni dei risultati intermedi.\nQuando eseguiamo una query l\u0026rsquo;ordine con cui una query viene eseguita, è quella che riguarda le istruzioni chiave. Presa come esempio una query come la seguente:\nSELECT city.city_name AS \u0026#34;City\u0026#34; FROM citizen JOIN city ON citizen.city_id = city.city_id WHERE city.city_name != \u0026#39;San Bruno\u0026#39; GROUP BY city.city_name HAVING COUNT(*) \u0026gt;= 2 ORDER BY city.city_name ASC LIMIT 2 l\u0026rsquo;ordine sarà il seguente:\n FROM, JOIN - recupero i dati WHERE - filtro i dati GROUP BY - aggregazione HAVING - filtro i dati ulteriormente SELECT - seleziono i dati ORDER BY - ordinamento Questo vuol dire che tutto ciò che viene espresso nella JOIN viene valutato prima di qualsiasi altra clausola; anche se l\u0026rsquo;insieme restituito fosse di dimensione ridotta, l\u0026rsquo;uso di una JOIN errata richiederebbe comunque l\u0026rsquo;intera scansione delle righe di ogni tabella prima di poter valutare quali si adattano alle condizioni espresse nella query.\nUn primo trucco consiste dunque nel valutare estremamente bene il tipo di JOIN da eseguire -devo valutare la presenza di valori nulli?- e poi, grazie all\u0026rsquo;istruzione WHERE, una scrematura quanto più precisa possibile dei dati che voglio ottenere.\nEssendo infatti la seconda istruzione che viene valutata, riuscire a tagliare il numero di record che verranno esaminati può apportare un beneficio non indifferente!\nAND e OR SQL Server può filtrare in modo efficiente un set di dati usando gli indici tramite la clausola WHERE o qualsiasi combinazione di filtri separati da un operatore AND. Essendo un operatore esclusivo, queste operazioni prendono i dati e li suddividono in pezzi progressivamente più piccoli, fino a quando rimane solo il nostro set di risultati.\nOR è una storia diversa. Poiché è un operatore inclusivo, SQL Server non può elaborarlo in una singola operazione. Invece, ogni componente dell\u0026rsquo;OR deve essere valutato in modo indipendente. Al termine di questa costosa operazione, i risultati possono essere concatenati e restituiti normalmente.\nLo scenario in cui OR ha prestazioni peggiori è quando sono coinvolte più colonne o tabelle. Non solo abbiamo bisogno di valutare ogni componente della clausola OR, ma dobbiamo seguire quel percorso attraverso gli altri filtri e tabelle all\u0026rsquo;interno della query. Anche se sono coinvolte solo poche tabelle o colonne, le prestazioni possono diventare sbalorditive.\n Un suggerimento utile in questo caso per gestire un OR è eliminarlo (se possibile) o suddividerlo in query più piccole. Suddividere una query breve e semplice in una query più lunga e più lunga potrebbe non sembrare elegante, ma quando si tratta di problemi di prestazioni, spesso è la scelta migliore.\n Risorse utili Documentazione ufficiale Basi di Dati ", "url": "https:\/\/theredcode.it\/database\/ottimizzare-query-sql-server\/" }, "https:\/\/theredcode.it\/interviste\/voglio-diventare-un-innovatore-digitale\/": { "title": "Voglio diventare un... Innovatore Digitale", "tags": ["interviste","voglio-diventare",], "content": "Creare chatbot e sfruttare Telegram non sarà più un segreto!\n➡️Leggi l\u0026rsquo;intervista di Gabriele Dell\u0026rsquo;Aria, ingegnere informatico siciliano che sfrutta la sua professione per aiutare le altre persone a crescere, e per crescere lui stesso!\nCosa vedrai Descriviti in 100 parole In cosa consiste il ruolo di Innovatore Digitale? Qual è la soft skill più importante che deve possedere un Innovatore Digitale? 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 un Innovatore Digitale? 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 Ciao sono Gabriele e sono un Ingegnere informatico siciliano esperto di innovazione digitale e di Telegram e chatbot. Il mio compito è guidarti nell’ottimizzazione del tuo ecosistema digitale (insieme degli strumenti e delle piattaforme necessari per la comunicazione digitale) con strumenti innovativi ed efficaci (automazioni, chatbot e Telegram) e nell’ottimizzazione di quelli già esistenti (siti web, landing page, blog e podcast). Non mi definisco quindi un semplice sviluppatore freelance!\nMi definisco un ingegnere informatico alternativo perché preferisco un approccio molto più umano al mio lavoro: utilizzo molto del mio tempo per ascoltare costantemente le esigenze, i dubbi, i desideri e le caratteristiche del mio cliente per dargli la miglior esperienza di supporto e di risultati possibile\u0026hellip;\n Uso i dati per supportare le mie strategie di lavoro e di progettazione anziché per analizzare in modo freddo il mercato a cui si rivolgono i miei clienti e il loro target di riferimento.\n Prima di tutto per me c’è sempre la soddisfazione del cliente e infatti mi baso molto sulle emozioni e sulle sensazioni che mi trasmettono le persone che incontro lungo il mio cammino.\nIn cosa consiste il ruolo di Innovatore Digitale? Non mi sento un semplice sviluppatore freelance, piuttosto mi sento anche una guida all’innovazione digitale e anche un esperto formatore di Telegram. In teoria lavoro da solo ma in realtà non sono affatto solo perché ho instaurato diverse collaborazioni con tanti colleghi freelance sia per servizi che eroghiamo insieme sia per collaborare in progetti di team di freelance.\nChi si rivolge a me sa anche che non solo posso aiutarlo con il mio lavoro, ma se ritengo di non essere la figura adatta a risolvere i suoi problemi, ho a disposizione una rete di colleghi professionisti che ho costruito per poter indirizzare quella persona verso la figura di cui ha più bisogno senza chiedere nulla in cambio se non la sua felicità e la sua soddisfazione nel raggiungere i suoi obiettivi.\nQuesto è stato possibile dopo ben due anni dall\u0026rsquo;apertura del profilo Instagram grazie al quale ho conosciuto tantissimi professionisti in tutta Italia con cui collaboro da parecchio e che in alcuni casi sono addirittura diventati amici … Insomma, ho instaurato una grande rete di persone di cui fidarmi e con cui confrontarmi costantemente per crescere (come persona e come professionista) e offrire il meglio ai miei clienti.\nAi miei clienti offro numerosi servizi fra cui lo sviluppo da zero di siti web, la creazione di chatbot personalizzati e automazioni personalizzate, un percorso di formazione sull’uso professionale di Telegram e uno di costruzione di un podcast proprietario.\nPer svolgere questi servizi mi occupo di numerose attività: non solo progetto la grafica, la struttura e tutto il necessario per realizzare e configurare al meglio un sito web, ma mi occupo anche di revisionare i testi forniti dal cliente e aiutarlo ad analizzare al meglio le caratteristiche del suo brand valorizzando gli aspetti che lo rendono unico e che rendono unico le persone coinvolte. Nel percorso di formazione Telegram e nel percorso per i podcast esalto poi questi ultimi aspetti per creare strategie di contenuti ad hoc che valorizzino quel brand/personal brand anche su Telegram.\nChiaramente, anche la creazione di chatbot, automazioni, configurazione di spazi di hosting, è fatto per rendere le soluzioni finali super performanti.\nQual è la soft skill più importante che deve possedere una Innovatore Digitale? La soft skill più importante per chi fa il mio lavoro (sviluppatore freelance, guida all’innovazione digitale e formatore Telegram) è la pazienza e la capacità di restare costantemente in ascolto di chi si rivolge a noi in modo attivo: questo è fondamentale perché la corretta comunicazione non solo favorisce un lavoro di qualità molto maggiore e più preciso ma velocizza ogni fase del lavoro stesso, oltre a ciò lascia in chi si affida a noi la netta sensazione di essere guidati al meglio e supportati costantemente … questo creerà molta fiducia e di conseguenza favorirà un rapporto genuino fra voi e chi si affida a voi.\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. Sono perfettamente d’accordo\u0026hellip;\n siamo quel che siamo soprattutto grazie agli errori che abbiamo fatto, all’esperienza che abbiamo acquisito e alle lezioni che abbiamo imparato e tramite le quali siamo cresciuti.\n Proprio per questo vorrei raccontarvi il mio più grande fallimento.\nEra marzo 2021 e nonostante il tanto lavoro già in essere stavo progettando di instaurare qualche partnership con alcune web agency in modo da allargare i miei orizzonti e le mie possibilità come libero professionista così quando ricevetti un’interessante chiamata da una web agency siciliana che aveva appena acquisito una nuova cliente pugliese e le cui persone le conoscevo già da anni approfondii subito.\nSolitamente non prendo nemmeno in considerazione progetti di clienti non miei ma in questo caso, dopo un mese di trattative, firmai il contratto che mi legata alla web agency e accettai pur di instaurare una futura duratura collaborazione con questa web agency.\nNonostante diverse premesse non promettenti, alla fine mi decisi che era la cosa giusta da fare per crearmi una nuova strada nel mio business futuro.\nAll’inizio l’organizzazione fu perfetta e mi fu fornito tutto il necessario per lavorare ma poi nel giro di poche settimane la magia si ruppe e iniziò una escalation di problemi che si trasformò nel più grande fallimento della mia vita lavorativa.\nUna corretta comunicazione con la web agency e direttamente con il cliente fu il problema principale.\nMi trovai così non solo a realizzare il nuovo sito senza specifiche da parte del business ma a doverlo fare senza avere alcuna informazione su come dover procedere con alcuni dettagli relativi al brand.\nCosì tra la mancata comunicazione e l’insoddisfazione per il lavoro svolto dopo circa 3 mesi un giorno giungemmo ad un punto di rottura: mi arrivò una chiamata all’improvviso in cui venivo pesantemente criticato per il lavoro svolto.\nIl confronto fu molto acceso e, nonostante non fossi stato neanche pagato, mi resi conto che era meglio salvaguardare la mia salute e il mio portafoglio perché non ne valeva la pena economicamente.\nLasciai perdere e imparai così una grande lezione: mai accettare un’opportunità di cui non si è pienamente convinti.\nCome fare per diventare un Innovatore Digitale? Diventare una guida all’innovazione digitale e un esperto formatore di Telegram richiede qualche skill più trasversale, una conoscenza completa e costantemente aggiornata del web e tanto altro: innanzitutto bisogna conoscere bene le dinamiche che regolano i principali social network, avere tutte le skill tipiche di chi fa personal branding e chi crea progetti validi di digital marketing sia a livello di gestione che di creatività e soprattutto avere una grande conoscenza degli strumenti più innovativi da associare ai canali di comunicazione principali (canali social, ma anche newsletter e podcast).\nPer diventare un formatore Telegram serve quindi conoscere molto bene a 360° Telegram e gli strumenti ufficiali e non che mette a disposizione (parliamo dei migliori chatbot Telegram). Oltre a ciò un esperto e bravo formatore Telegram deve saper analizzare al meglio il brand o personal brand che si vuole portare su Telegram e creare una strategia di contenuti che supporti al meglio quel brand / personal brand anche su Telegram … in sintesi serve tantissimo studio del digital marketing e degli strumenti innovativi.\nNon servono quindi particolari certificazioni (anche se consiglio sempre di formarsi con piattaforme come Udemy, Learnn e Carriere.it perché aiuta molto a crescere velocemente) ma basta avere una buona base di partenza sulla tecnologia e sul mondo della programmazione, tanta pazienza e sperimentare tanto con le nuove tecnologie, soprattutto con i chatbot e le automazioni su cui c’è poco materiale completo e funzionale per gli sviluppi industriali.\nParlando di successi, qual è il tuo prossimo obiettivo? Quale ruolo vorresti ricoprire entro i prossimi 3 anni? Il mio prossimo obiettivo è un grande e ambizioso obiettivo che sogno sin da quando sono piccolo, creare un’azienda innovativa tutta mia legata al mondo della comunicazione e al mondo tech. Nei prossimi 3 anni mi vedo ancora freelance ma sono sicuro che farò tanti passi in avanti in direzione di questo grande obiettivo che vorrei realizzare nel giro di 5 anni grazie ai contatti e all’esperienza nel frattempo acquisita.\nConosci il tema gender gap in ambito STEM? Se sì, come fare per superarlo? Purtroppo conosco bene il tema gender gap in ambito STEM e provo molta rabbia per il divario che tiene spesso lontano le donne dall’ambito STEM: lungo il mio cammino ho incontrato, collaborato e lavorato con tante donne abilissime che nell’ambito STEM si sono affermate o che ci lavorano e mi sono sempre confermato l’idea iniziale… le donne sono ugualmente abili quanto gli uomini e fanno un lavoro di qualità altrettanto elevata ed è incredibile assistere a questo genere di situazioni a causa del pesante ambiente maschilista che regna sovrano nella nostra società. Fortunatamente grazie ad eventi su larga scala quali per esempio \u0026ldquo;Woman X Impact\u0026rdquo;, questo fenomeno sta piano piano facendo passi in avanti in senso positivo e le donne stanno piano piano acquisendo più consapevolezza anche nell’ambito STEM, anche se in futuro mi auguro di vedere in questo ambito una perfetta parità di diritti, di trattamento e di valorizzazione generale per le donne.\nContatti Sito Instagram business Podcast Canale Telegram ", "url": "https:\/\/theredcode.it\/interviste\/voglio-diventare-un-innovatore-digitale\/" }, "https:\/\/theredcode.it\/openshift\/da-docker-a-openshift\/": { "title": "Da Docker a OpenShift", "tags": ["openshift",], "content": "Sempre più aziende stanno migrando verso servizi di orchestrazione come Kubernetes e OpenShift; quest\u0026rsquo;ultimo ha aumentato le restrizioni alla sicurezza seguendo una strategia che non consente agli utenti di eseguire con privilegi di amministratore, quindi la maggior parte dei container che di solito vengono eseguiti correttamente su Docker e Kubernetes potrebbero non funzionare correttamente su OpenShift.\nVersione corta Passi principali:\n Impostare la proprietà del gruppo sul gruppo principale (0). Non utilizzare root come specifica per la direttiva USER in Dockerfile. I file eseguibili devono essere eseguiti dal gruppo radice (0) e dal proprietario. Non è possibile utilizzare porte inferiori a 1024. L\u0026rsquo;uso dei ID assegnati in maniera arbitraria agli utenti fa parte della strategia di sicurezza multi-livello impiegata da OpenShift per ridurre i rischi di un\u0026rsquo;applicazione o del runtime del contenitore compromessi.\nVersione lunga Il presupposto di base è che i container vengano eseguiti utilizzando un ID utente assegnato in modo arbitrario: ciò significa che ogni container ha un ID utente assegnato che è univoco per il tuo progetto.\n In effetti, al tuo progetto viene assegnato un ID utente che appartiene a un intervallo preciso con cui le applicazioni possono essere eseguite.\nIn questo modo, il range di ID utente utilizzato sarà univoco e non si sovrapporrà ad altri progetti. Per vedere quale intervallo è assegnato a un progetto eseguendo oc describe sul progetto.\nopenshift.io/sa.scc.uid-range=1008050000/10000 Al contrario di OpenShift, Docker e Kubernetes possono eseguire container che utilizzi un utente specifico definito tramite la direttiva USER nel Dockerfile, oppure andranno ad utilizzare l\u0026rsquo;utente root se non viene esplicitamente specificato.\nCome fare Il punto è: come fare a rendere un\u0026rsquo;immagine Docker che gira -magari- anche su Kubernetes pronta per essere eseguita su OpenShift?\n Qui i passaggi da seguire:\nImposta il gruppo Sebbene OpenShift esegua i container utilizzando un ID utente assegnato arbitrariamente, l\u0026rsquo;ID gruppo deve essere sempre impostato sul gruppo root (0).\nCiò significa che ogni directory e file devono essere accessibili dal gruppo root per funzionare.\nDi solito, ciò comporta una modifica nel Dockerfile come nell\u0026rsquo;esempio seguente:\nRUN chgrp -R 0 /mia/directory \u0026amp;\u0026amp; \\ chmod -R g=u /mia/directory In questo caso, gli utenti del gruppo root possono accedere alle risorse specificate con gli stessi privilegi del proprietario.\nUser 1001 Le linee guida di RedHat suggeriscono di modificare il Dockerfile per utilizzare un utente casuale, per garantire piena compatibilità con OpenShift, ma anche retro-compatibilità con Kubernetes e Docker.\nQuesto si traduce in queste righe:\nUSER 1001 RUN chown -R 1001:0 /mia/directory In questo caso, quando l\u0026rsquo;immagine finale verrà eseguita su OpenShift, l\u0026rsquo;utente specificato verrà ignorato poiché il cluster assegnerà a un utente un ID arbitrario. Questa modifica consente di eseguire la tua immagine sia su Kubernetes che su OpenShift, con un livello di sicurezza più elevato.\nTieni presente che il tentativo di risolvere i problemi relativi ai permessi nella proprietà initContainers impostando dei permessi superiori non funzionerà; il vantaggio offerto da Kubernetes per gestire i privilegi in questa fase si basa sul presupposto che sei root, ma in OpenShift anche gli initContainer verranno assegnati a un utente arbitrario.\nPermessi Per rendere i tuoi file eseguibili in grado di essere eseguiti da un ID utente arbitrario su OpenShift, le autorizzazioni dovrebbero essere modificate correttamente.\nAd esempio, uno script da eseguire dovrebbe avere i privilegi di esecuzione per il proprietario e il gruppo (ricordate? facciamo parte del gruppo root), ma nessuno -o pochi- per gli altri utenti.\nRUN chmod 775 /my/directory/my-script Porte chiuse Ogni numero di porta inferiore a 1024 non può essere utilizzato poiché può essere bindata solo dall\u0026rsquo;utente root. Questo significa che qualsiasi tentativo di utilizzare una porta che va da 0 a 1023, sarà inutile.\nRisorse utili Docker - per cominciare bene ", "url": "https:\/\/theredcode.it\/openshift\/da-docker-a-openshift\/" }, "https:\/\/theredcode.it\/recensioni\/data-analytics-per-tutti\/": { "title": "Data Analytics per Tutti", "tags": [], "content": "Il titolo non è un clickbait, ma una promessa: qualsiasi persona, tecnica o meno, può approcciarsi agli strumenti che l\u0026rsquo;autore racconta, seguendo passo passo le sue indicazioni.\nRanking Anno 2022 Autore Andrea De Mauro Genere Data Analysis, Big Data Livello Per tutti Scorrevolezza 10 / 10 Originalità 10 / 10 Valutazione 10 / 10 Recensione Se vuoi imparare la data analytics, ma non sei un/a tecnico/a, questo è il libro per te.\n Il libro è essenzialmente strutturato in due parti: una più teorica, che serve a porre i \u0026ldquo;mattoncini\u0026rdquo; di base su ciò che rappresenta la Data Analytics e come gestire le informazioni rappresentate tramite i dati, e ciò che rappresenta invece sporcarsi le mani per rendere questi dati fruibili e rappresentabili grazie alla data visualization.\nL\u0026rsquo;autore ci tiene infatti a sottolineare non solo quale sia la definizione di questo settore dell\u0026rsquo;informazione, ma cosa ci si aspetti da una persona che intende intraprendere questa carriera: è stato bello notare come è stata curata l\u0026rsquo;attenzione con cui vengono descritte le attività che un/a professionista di questo settore dovrebbe saper svolgere per poter essere all\u0026rsquo;altezza del suo compito, grazie ai diversi esempi di analisi descrittiva, predittiva e prescrittiva.\nL\u0026rsquo;aspetto che è da apprezzare è la \u0026ldquo;cassetta degli attrezzi\u0026rdquo; che De Mauro ha usato come metafora per costruire l\u0026rsquo;esperienza di chi fa data analytics: ogni capitolo rappresenta una diversa fase di questo bellissimo viaggio dove, grazie a strumenti come KNIME o PowerBI, l\u0026rsquo;autore ti accompagna per mano per permetterci di scoprirne le potenzialità e gli utilizzi pratici.\nOgni esempio e ogni spiegazione è sempre corredata di quel minimo di contesto che serve a rendere immediato ciò che viene descritto: dagli algoritmi di Machine Learning, alle diverse tipologie di grafici utilizzati nella data visualization, l\u0026rsquo;autore non ha trascurato alcun dettaglio.\nNon è stata una grossa sorpresa notare che il livello di chiarezza con cui i contenuti sono stati raccontati dall\u0026rsquo;autore era estremamente alto: Andrea De Mauro è al terzo libro sulla tematica e con questo ha sicuramente chiuso un cerchio sulla Data Analytics in cui si riesce davvero ad avvicinare chiunque a questa materia.\nCome racconta nella sua prefazione, \u0026ldquo;si tratta di permettere a ogni individuo di ricoprire un ruolo attivo nel rendere migliore il mondo che abita\u0026rdquo;. Questa apertura, per quanto possa apparire banale, è lo spirito con cui l\u0026rsquo;intero manuale è stato scritto e revisionato: la cura nella scelta degli esempi pratici, alla portata di tutti, i riepiloghi alla fine di ogni capitolo, così come la suddivisione degli argomenti, ha reso questo libro un pezzo fondamentale nel bagaglio di qualunque Data Scientist che si rispetti.\nIl capitolo che sicuramente ho apprezzato di più è quello relativo alle tecniche di data story: dietro ad ogni persona che lavora con i dati, c\u0026rsquo;è sempre una persona che è estremamente brava nel creare un discorso per parlarne in maniera efficace: il potere di raccontare storie attraverso le informazioni a disposizione è un\u0026rsquo;arte da non sottovalutare, ancor di più di qualunque algoritmo o complessità aggiunta al processo per estrarre quelle informazioni.\nQuesto manuale è consigliato non solo per chi si approccia a questo mondo per la prima volta, ma anche per chi ha voglia di mettersi alla prova con qualche strumento di mercato con cui non ha una familiarità totale e vuole arricchire un po\u0026rsquo; le proprie competenze tecniche, e non solo!\nLezione imparata Affrontare con attenzione le questioni legate all\u0026rsquo;uso responsabile dei dati è super importante; Management cockpit: nome -per me- complicato per intendere dashboard decisionali; L\u0026rsquo;importanza del data model è sempre sottovalutata, tanto quanto non saper riconoscere l\u0026rsquo;occasione giusta per utilizzare le tecniche che il machine learning mette a disposizione. Quotes Democratizzando l\u0026rsquo;alfabetizzazione sui dati e la comprensione di tecniche per l\u0026rsquo;analisi di dati, saremo in grado di guidare il progresso su almeno 3 livelli: la singola organizzazione aziendale [\u0026hellip;], l\u0026rsquo;intera industria [\u0026hellip;] e la società in generale.\n Risorse utili \u0026ldquo;Data Analytics per tutti\u0026rdquo; disponibile su Amazon e Apogeo Sito ufficiale ", "url": "https:\/\/theredcode.it\/recensioni\/data-analytics-per-tutti\/" }, "https:\/\/theredcode.it\/random\/ban-chatgpt-stackoverflow\/": { "title": "Ban di ChatGPT da Stack Overflow", "tags": ["red-updates",], "content": "Il celebre sito di Q\u0026amp;A per sviluppatori e sviluppatrici nelle ultime settimane è stato inondato di risposte ottenuto grazie all\u0026rsquo;utilizzo di ChatGPT, risposte che sembrano corrette ma spesso non lo sono, tanto che i moderatori hanno chiesto un momentaneo ban.\n Cos\u0026rsquo;è successo?\n ChatGPT ChatGPT si basa sul modello linguistico GPT-3 di OpenAI. Le persone hanno rapidamente scoperto che, sebbene risponda agli input in un modo \u0026ldquo;umano\u0026rdquo;, ci sono dei difetti nelle risposte che fornisce.\nDa quando è stato lanciato, è stato utilizzato in numerosi modi, tra cui la richiesta di scrivere del codice e/o correggere errori di codifica: questo perché il chatbot può fornire delle risposte molto velocemente, mentre chi inserisce l\u0026rsquo;input fornisce maggiori dettagli sulla richiesta.\nLa stessa Open AI ha però rilevato, nei numerosi esempi e studi fatti, che ChatGPT a volte scrive \u0026ldquo;risposte plausibili ma errate o prive di senso\u0026rdquo;.\nBan da Stack Overflow Quella appena descritta sembra infatti essere una delle cause principali del suo ban su Stack Overflow -con sanzioni per gli utenti che hanno sfruttato questo sistema per fornire delle risposte ai quesiti presenti sul sito- poiché il tasso medio di risposte corrette da ChatGPT si è dimostrato troppo basso, tanto che il sito reputa la pubblicazione di risposte create da ChatGPT è sostanzialmente dannosa per il sito e per gli utenti che chiedono o cercano risposte corrette.\nInoltre, poiché ChatGPT genera risposte così rapidamente, alcuni utenti forniscono molte risposte generate da esso senza analizzarle per verificarne la correttezza, per guadagnare punteggio e/o visibilità su questo portale.\n Il problema sta nell\u0026rsquo;avere delle risposte di cui non si ha un reale confronto o expertise che ne possa garantire l\u0026rsquo;autorevolezza.\n Le persone che pubblicano risposte tramite ChatGPT su StackOverflow per guadagnare più punti senza sapere se la risposta è effettivamente corretta è uno di quei problemi che era abbastanza ovvio da prevedere.\nStack Overflow ha rilevato post generati da ChatGPT nell\u0026rsquo;ordine delle migliaia al giorno. Questo rappresenta un problema per i moderatori, dal momento che molte risposte richiedono un\u0026rsquo;analisi dettagliata da parte di qualcuno con esperienza in materia per determinare se la risposta è corretta o sbagliata.\nPerché sì StackOverflow è un luogo in cui gli sviluppatori si collegano continuamente per risolvere dei problemi. La risoluzione di questi problemi richiede risposte che abbiano una precisione micrometrica, che dipende dal contesto, dalle esigenze, e dalle esperienze pregresse.\nStackOverflow ha degli standard molto alti, non solo per le risposte, ma anche per le domande. Le persone che si occupano di moderare hanno storicamente scoraggiato i programmatori principianti dal pubblicare prematuramente domande.\nLa pratica sembra ingiusta a molte persone, ma ha lo scopo di addestrare sviluppatori e sviluppatrici a provare prima una ricerca con termini migliori per riformulare la loro domanda con dettagli pertinenti.\nQuesto è un punto dolente che molte delle persone alle prime armi sviluppatori odiano, ma riporta dei vantaggi a lungo termine, in quanto rafforza il proprio \u0026ldquo;muscolo\u0026rdquo; critico e una maggiore autonomia, utili per diventare degli/delle ottimi/e programmatori/trici.\nAncora più importante, questo sistema è gestito tramite una moderazione fatta di volontari/e che donano il loro tempo per eliminare i contenuti duplicati e valutare lo sforzo di chi fa la domanda e la sincerità di chi risponde (che dovrebbe includere principalmente codice funzionante ed efficiente).\nQuest\u0026rsquo;ultimo punto rende impossibile per chi modera mantenere lo standard della qualità per il forum con questo volume di risposte. Dopotutto, se qualcuno può pubblicare risposte per guadagnare punti veloci, lo stesso può essere fatto anche con la pubblicazione di domande. Perché anche le domande permettono di scalare la vetta.\nPiù domande, più risposte, più punti senza alcun rischio, e il selvaggio selvaggio west della non moderazione si materializzerebbe prima del previsto. \nLa seguente regola si applica non solo nella tecnologia, ma ovunque nel mondo:\n Quando l\u0026rsquo;impegno nei confronti di qualcosa viene ridotto al minimo, il rischio è un\u0026rsquo;offerta di bassa qualità.\n Il dilemma che riguarda la creatività e l\u0026rsquo;uso di questi strumenti è stato ampiamente discusso da molti/e professionisti/e del settore: chi programma ha paura di perdere il lavoro a causa di strumenti come Chat GPT 3.0, o chi dipinge e teme che le proprie opere possano essere sfruttate da queste piattaforme per crearne di nuove.\nProbabilmente, il punto più importante non è però quello dell\u0026rsquo;obsolescenza: bisognerebbe valutare piuttosto lo sfruttamento spietato dei sistemi di supporto che alimentano i motori della conoscenza, come in questo caso, StackOverflow.\n L\u0026rsquo;onere di rendere il mondo protetto \u0026ldquo;eticamente\u0026rdquo; dall\u0026rsquo;IA dovrebbe spettare alle aziende che sfruttando questi sistemi per guadagnare.\n Questo perché, molto più spesso di quanto si creda, le big tech companies producono prodotti competitivi, ma che non tengono sempre conto dei problemi riscontrati dagli utenti.\nI repository GitHub di aziende come Google, Amazon, Apple, Microsoft e via dicendo, hanno centinaia di migliaia di issues tracciate e irrisolte. Issues orfane, problemi con risposte completamente inaffidabili, problemi chiusi senza la risposta dell\u0026rsquo;OP e documentazione illeggibile o inesistente.\nLa vera domanda a questo punto è se è possibile creare e sostenere comunità solide, ben funzionanti ed etiche sulla scala di StackOverflow?\nQuello che è successo a StackOverflow è un allarme importante.\nLa priorità dovrebbe essere infatti quella di creare strumenti che seguano delle linee guida volte all\u0026rsquo;etica dell\u0026rsquo;IA, con lo scopo di proteggere i \u0026ldquo;luoghi\u0026rdquo; che sono fatti per servire, tra cui Stack Overflow.*\nCome StackOverflow.\n*Tecnicamente, StackOverflow è un\u0026rsquo;entità commerciale, ma la portata del suo modello di business non ne permette una classificazione al pari delle big companies tale da considerarlo strettamente commerciale ai fini di questo articolo.\n", "url": "https:\/\/theredcode.it\/random\/ban-chatgpt-stackoverflow\/" }, "https:\/\/theredcode.it\/random\/hedy-lamarr-in-3-minuti\/": { "title": "Hedy Lamarr in 3 minuti", "tags": ["stem",], "content": "Nata a Vienna nel 1914, Hedwig Eva Maria Kiesler nasce in una famiglia estremamente moderna dove il padre, direttore di banca, passa il suo tempo a spiegare come funziona la tecnologia. Studia dunque i principi dell\u0026rsquo;ingegneria in maniera amatoriale, diventando ben presto un\u0026rsquo;inventrice autodidatta: nel suo tempo libero impara infatti a costruire diversi strumenti, tra cui un semaforo.\nA soli 18 anni si trova a scappare dal nazismo e a doversi rifugiare in America nella speranza che il suo sogno americano la salvi dalla persecuzione contro gli ebrei. Una volta giunta a Hollywood, l\u0026rsquo;attrice lavora con attori del calibro di Clark Gable, Robert Walker e Judy Garland.\nSolo nel 1960 ottiene una stella sulla famosa Hollywood Walk of Fame.\nConosciuta però perlopiù per il suo ruolo di attrice, Hedy Lamarr è stata anche un\u0026rsquo;inventrice: a lei si deve infatti un grande contributo rispetto alla tecnologia di trasmissione del segnale a spettro espanso. Anche per il suo background familiare, durante lo scoppio della seconda guerra mondiale decide di partecipare attivamente contro la lotta al nazismo e di lavorare ad una tecnologia che potesse bloccare i sistemi di guida dei siluri radiocomandati per portarli fuori rotta, di cui questa tecnologia è la base.\nLo spread-spectrum indica infatti una tecnica di trasmissione in cui il segnale viene trasmesso su una banda di frequenze che è considerevolmente più ampia di quella effettivamente necessaria alla trasmissione e questo avviene tramite un diffusore, alla base del sistema wireless.\nGrazie al suo incontro con George Antheil, un pianista e compositore francese, nel 1941 l\u0026rsquo;inventrice austriaca naturalizzata statunitense deposita all\u0026rsquo;ufficio brevetti americano il suo progetto chiamato Secret Communication System: si trattava di un sistema basato su 88 frequenze, corrispondenti al numero dei tasti del pianoforte. Il sistema utilizzava rulli di carta perforati che ruotando in sincronia, trasmettevano e ricevevano frequenze sempre diverse, evitando così ogni tipo di intercettazione o disturbo.\nQuesta tecnologia non prende piede fino al 1985, perché impraticabile fino a quel momento, finché non diventa la base delle connessioni Wi-Fi e Bluetooth e le varrà anche il premio Invention Convention\u0026rsquo;s BULBIE Gnass Spirit of Achievement Award, ossia il premio Oscar delle invenzioni, di cui detiene il titolo come prima donna a riceverlo.\nIl suo contributo contro la guerra non è stato solo questo: aiutò con la propaganda durante il periodo di guerra sfruttando la sua celebrità di attrice per vendere titoli di guerra per sostenere i costi del programma di difesa americano contro Giappone e Germania.\nNegli ultimi anni della sua vita, trascorre molto tempo nella sua amata casa in Florida passando sei-sette ore al telefono per rimanere in contatto con amici e familiari, per poi morire nel gennaio del 2000, anno dopo il quale continuò a ricevere numerosi riconoscimenti alla sua carriera da ingegnera e inventrice.\nL\u0026rsquo;aspetto su cui riflettere è la sua \u0026ldquo;reclusione\u0026rdquo; volontaria dopo essersi ritirata dalla vita pubblica: \u0026ldquo;la mia faccia è sempre stata una maledizione\u0026rdquo;, scrive l\u0026rsquo;attrice nella sua autobiografia, tanto che la paura di invecchiare in modo naturale l\u0026rsquo;ha portata a spendere migliaia di dollari per farsi ritoccare il viso che l\u0026rsquo;ha resa famosa, solo per poi smettere del tutto di uscire di casa quando ha deciso che non poteva permettere a nessuno di vedere cosa ne era stato di lei.\n", "url": "https:\/\/theredcode.it\/random\/hedy-lamarr-in-3-minuti\/" }, "https:\/\/theredcode.it\/tags\/stem\/": { "title": "stem", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/tags\/stem\/" }, "https:\/\/theredcode.it\/categories\/stem\/": { "title": "stem", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/categories\/stem\/" }, "https:\/\/theredcode.it\/kubernetes\/statefulset-vs-daemonset-in-kubernetes\/": { "title": "Statefulset vs Daemonset in Kubernetes", "tags": ["kubernetes",], "content": "In Kubernetes la più piccola unità di deploy è chiamata Pod. In che modo possiamo però distribuire la nostra applicazione tramite un controller?\nIn questo articolo vediamo quali sono le differenze tra due risorse fornite da Kubernetes per la distribuzione dei pod: lo StatefulSet e il DaemonSet.\nCosa vedrai DaemonSet StatefulSet DaemonSet Un DaemonSet è un controller che serve ad assicurarsi che il pod venga eseguito su tutti i nodi del cluster. Se un nodo viene aggiunto o rimosso dal cluster, il DaemonSet si occuperà di eseguire il deploy o di rimuovere il pod dal nodo.\nUn esempio molto semplice di utilizzo di un DaemonSet è la necessità di esportare i log da tutti i nodi in modo semplice, attraverso uno strumento come Fluentd.\nTuttavia, i Daemonset non vengono deployati automaticamente su nodi che presentano una taint, come i nodi master. Le taint, per completezza, sono un modo per dire ai nodi di respingere i pod, di modo da preservarli da eventuali problematiche: aumento delle risorse utilizzate, nodi con applicazioni di produzione che non devono essere sollecitati, e così via.\nEsempio apiVersion: apps/v1 kind: DaemonSet metadata: name: my-app spec: selector: matchLabels: app: my-app template: metadata: name: my-app labels: app: my-app spec: tolerations: - effect: NoSchedule operator: Exists containers: - name: my-app image: \u0026#34;busybox:latest\u0026#34; volumeMounts: - name: my-app mountPath: /app/ volumes: - name: my-app persistentVolumeClaim: claimName: my-app --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: my-app spec: accessModes: - ReadWriteMany resources: requests: storage: 50Mi Rappresentazione di un DaemonSet\nStatefulSet Come dice anche la parola, questa tipologia di controller rappresenta delle applicazioni stateful: questo vuol dire che si occuperà di gestire lo stato degli oggetti al suo interno. Ne controlla anche il deploy, lo scaling dei pod e garantisce l\u0026rsquo;unicità e l\u0026rsquo;ordine dei pod.\nAl contrario dei Deployment, non crea un ReplicaSet, perché si occupa in prima battuta di creare dei pod con una loro naming convention; questo vuol dire che se lo StatefulSet si chiama my-app, le diverse repliche avranno suffisso numerico relativa al numero di replica a cui si riferisce.\nOgni StatefulSet avrà il proprio stato e ciascuno dei pod creerà il proprio PVC. Questo vuol dire che uno StatefulSet con 3 repliche creerà 3 pod, ognuno con il proprio volume, quindi un totale di 3 PVC.\nEsempio apiVersion: apps/v1 kind: StatefulSet metadata: name: my-app spec: serviceName: \u0026#34;my-app\u0026#34; selector: matchLabels: app: my-app replicas: 3 template: metadata: labels: app: my-app spec: containers: - name: my-app image: \u0026#34;busybox:latest\u0026#34; volumeMounts: - name: my-app mountPath: /app/ volumeClaimTemplates: - metadata: name: my-app spec: accessModes: [ \u0026#34;ReadWriteMany\u0026#34; ] resources: requests: storage: 50Mi Rappresentazione di uno StatefulSet\nRisorse utili Docker - per cominciare bene con Docker e Kubernetes Kubernetes - Guida per gestire e orchestrare i container ", "url": "https:\/\/theredcode.it\/kubernetes\/statefulset-vs-daemonset-in-kubernetes\/" }, "https:\/\/theredcode.it\/database\/amazon-aurora-perche-usarlo\/": { "title": "Amazon Aurora: perché usarlo", "tags": ["database",], "content": "AWS offre diversi servizi di DaaS (Database-as-a-Service): Amazon Aurora è uno di questi.\nCosa c\u0026rsquo;è di diverso rispetto ad Amazon RDS?\nIn questo articolo, vediamo cosa cambia nel sistema di storage e nelle sue proprietà serverless.\nCosa 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.\nStorage Aurora sfrutta uno storage distribuito: questo vuol dire sfruttare l\u0026rsquo;infrastruttura di AWS per spremere ogni bit di disponibilità e prestazioni.\n Non è necessario eseguire il provisioning dello spazio di archiviazione, perché si ridimensiona automaticamente. Replicazione automatica dei dati su più zone di disponibilità. Backup continuo su Amazon S3. Disponibilità superiore al 99,99%. Failover dell\u0026rsquo;istanza in meno di 30 secondi. Possibilità di ripristino tramite point-in-time. Serverless o provisioned Aurora offre due modalità: provisioned, quindi quanto ci si aspetta da un database SQL dove a noi tocca decidere la dimensione delle istanze oltre che averne in carico la gestione, oppure serverless, modalità con cui stabiliamo il valore minimo e massimo delle risorse da utilizzare e poi sarà Aurora a scalare a seconda del carico di lavoro.\nIn questo caso, non è richiesto di specificare una dimensione di classe di istanza. Ogni volta che diciamo \u0026ldquo;serverless\u0026rdquo;, puoi pensare di ridimensionare a zero il tuo cluster: questo significa che il servizio si fermerà automaticamente dopo non aver ricevuto alcuna richiesta per un po\u0026rsquo; di tempo.\nNaturalmente questa è una modalità di configurazione che è possibile attuare, anche se difficilmente verrà utilizzata in un ambiente di produzione!\nCosti Il prezzo di Aurora viene calcolato per ogni ora di istanza del database consumata. Quindi, se vuoi risparmiare un po\u0026rsquo; di soldi -e perché no-, puoi prendere in considerazione l\u0026rsquo;acquisto di un\u0026rsquo;istanza riservata, con un contratto di 1 o 3 anni.\nMa la vera domanda è: quanti soldi risparmio con Aurora invece di configurare un sistema di database distribuito a livello globale? La realtà è che ci vorrebbero centinaia di ore di progettazione per lo sviluppo e la manutenzione.\nSenza tenere conto che se decidessi di cambiare servizio e passare ad un sistema open source, è sempre possibile esportare i dati e spostarli in un database compatibile, come Postgres o MySQL.\nLimiti Aurora Postgres è solo Postgres: questo vuol dire che funziona con qualsiasi software compatibile con Postgres. In termini di scalabilità, i suoi vincoli di archiviazione (ad es. tabelle fino a 32 terabyte) e i vincoli di rete sono così alti che probabilmente non li raggiungerai mai.\nEsistono alcuni limiti legati alle versioni compatibili con MySQL e Postgres, ma nulla di cui preoccuparsi!\nRisorse utili Documentazione ufficiale Basi di Dati ", "url": "https:\/\/theredcode.it\/database\/amazon-aurora-perche-usarlo\/" }, "https:\/\/theredcode.it\/interviste\/voglio-diventare-una-cto2\/": { "title": "Voglio diventare una... CTO", "tags": ["interviste","voglio-diventare",], "content": "Essere CTO è una sfida, non solo dal punto di vista tecnico: ha bisogno infatti di coordinare diversi team, essere una persona in grado di comunicare ed empatizzare, oltre che avere la giusta dose di creatività.\nL\u0026rsquo;intervista di oggi è raccontata da Alessia Marelli, CTO @ DNAalgo.\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 100 parole sono poche per descrivere una persona ma sono anche tante quando si devono scegliere accuratamente, ma ci proverò: sono Alessia, ho 42 anni e sono il Chief Technology Officer di una startup innovativa, la DNAalgo.\nSono una matematica applicata, perché mi è sempre piaciuto il lato creativo della matematica, quello che va a toccare la vita reale, per questo motivo ho voluto fare una tesi nell’industria dove sono rimasta.\n Ho sempre amato le sfide e il confrontarmi con diverse persone perché sono convinta che ci sia sempre da imparare. Ho sempre avuto una grande curiosità che mi ha portato a provare approcci diversi ai problemi nel lavoro o nuove strategie e hobby differenti nella vita privata.\n In cosa consiste il ruolo di CTO? Come CTO mi occupo di tutta la parte tecnica della DNAalgo, cioè da un lato la roadmap e la linea di prodotti che la ditta vuole avere e dall’altro lato coordino l’attività del team che lavora con me.\nPer capire la roadmap che la ditta vuole avere è importante essere attivi nel mondo della comunicazione: per esempio la DNAalgo è membro della DNA data storage alliance (ora parte della SNIA) che raccoglie un gruppo di aziende che stanno lavorando sulla memorizzazione dei dati su DNA sintetico, e in particolare io partecipo a meeting con l’alliance, parlo alle conferenze e cosi via.\nInoltre lavora con me un team di matematici e ingegneri e io mi occupo di coordinare le loro attività giornaliere, in base alle attitudini delle persone, alle urgenze e alle capacità o conoscenze.\nQual è la soft skill più importante che deve possedere una CTO? Proprio per la duplice natura dell’attività mi piacerebbe identificare due soft skills.\nPer la parte attiva verso le conferenze e l’alliance direi che la soft skill più importante è la comunicazione. Ovviamente non parlo semplicemente del parlare bene in inglese dato che tutta quest’attività è svolta in inglese ma della capacità di capire il tono appropriato da usare, considerando che parlando a livello internazionale ci sono molte nazioni e quindi molte culture diverse, le parole giuste da usare e quando intervenire o meno.\nQuando invece organizzo le attività del team, credo che la soft skill più importante sia l’empatia. Nell’assegnare le attività, bisogna capire anche come le persone reagiscono alla pressione o se ci sono dei conflitti non dichiarati all’interno del team per esempio.\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. Questa domanda mi piace molto, perché sono convinta che siano proprio gli errori il principale motore per la crescita di una persona. Una volta si diceva che non è importante quante volte si cade ma quante volte ci si rialza e io credo sia proprio così.\n Circa una decina di anni fa lavoravo in questa grande ditta che aveva parecchi team. Il mio team e un altro sono entrati in competizione su un progetto tecnico. Per alcune settimane si sono confrontate le soluzioni per vedere quale delle due era più adatta alla ditta, attraverso meeting e telefonate.\nAlla fine è stata scelta la soluzione dell’altro team, non perché fosse tecnicamente superiore ma perché erano stati in grado di comunicarla in modo più efficace.\nDa allora ho capito che per promuovere i propri progetti, non basta avere un’idea tecnicamente superiore ma bisogna lavorare sulla comunicazione ed essere in grado di trasmettere le proprie idee in modo efficace, possibilmente mostrando i vantaggi e lo scopo finale e non perdendosi in dettagli tecnici.\nCome fare per diventare una CTO? Non occorrono certificazioni ma di certo occorre molta esperienza nel particolare ambito tecnico in cui si vuole diventare CTO. La DNAalgo per esempio sviluppa IP molte centrate sui codici a correzioni di errore e io lavoro sui codici da circa 20 anni.\nSicuramente come esperienza pregressa mi ha fatto comodo essere stata technical leader in cui ho gestito un progetto da un punto di vista tecnico anche se allora erano coinvolte meno persone. Inoltre per migliorare la capacità di comunicazione mi è stato utile lavorare per tanti anni in aziende multinazionali dove mi sono interfacciata spesso con culture diverse.\nParlando di successi, qual è il tuo prossimo obiettivo? Quale ruolo vorresti ricoprire entro i prossimi 3 anni? Come CTO di una startup innovativa, il mio destino è strettamente legato a quello della società.\n Come ruolo penso di essere approdata nel ruolo giusto per me anche per i prossimi anni, ma ovviamente volendo sempre migliorare, vorrei avere più progetti, un team sempre maggiore, più visibilità e più collaborazioni. In qualche modo come la DNAalgo che è nata 18 mesi fa sta crescendo, io sto crescendo con essa, per cui come la società aumeterà in numero e progetti, il mio ruolo diventerà sempre più complesso e spero appagante.\nConosci il tema gender gap in ambito STEM? Se sì, come fare per superarlo? Essendo mamma di tre bambine femmine e lavorando nel campo scientifico è un tema che mi sta particolarmente a cuore.\n Purtroppo credo che le bambine e poi le ragazze siano poco incentivate nel campo scientifico. Mi sono accorta che\nin qualche modo viene proposto un modello dove le bambine devono essere interessate alle bambole e alla cucina, mentre i giochi più “scientifici” come i vulcani o i minerali siano appannaggio dei maschi.\nQuesto avviene sia come pubblicità sia nella grande distribuzione. D’altronde il modello di scienziato o programmatore molto spesso è un maschio nell’immaginario collettivo, e viene lasciato solo l’insegnamento alle donne scienziate. Come mamma combatto contro queste stereotipo, mostrando tutte queste attività alle mie figlie e parlando loro dei modelli di donne scienziate.\nCome professionista non ho mai vissuto una reale discriminazione, ma è vero che la percentuale di donne è sempre stata ben lontana dal 50%.\nPer promuovere la rete di donne tecniche ho partecipato ad associazioni di donne scienziate che seguo anche sui forum o a conferenze. Inoltre ho seguito delle tesi in azienda di ragazze e recentemente ho assunto una ragazza molto brava.\nInoltre, anni fa ho tenuto corsi di orientamento nelle scuole, mi è piaciuto mettere la faccia e mostrare come una persona donna e matematica sia potuta entrare nell’industria in posizioni di rilievo.\nC’è ancora molto da fare, purtroppo ci sono donne che pensano di doversi annullare come genere per poter fare carriera, invece io penso che il valore sia proprio anche l’essere donna e portare una sensibilità diversa in questo ambito tipicamente maschile.\n Come ho detto prima, dalla diversità ci si può sempre arricchire e questo situazione non è da meno.\n Contatti Pagina LinkedIn Profilo LinkedIn Sito DNAalgo Sito DNA Data Storage Alliance ", "url": "https:\/\/theredcode.it\/interviste\/voglio-diventare-una-cto2\/" }, "https:\/\/theredcode.it\/database\/gestire-un-database\/": { "title": "Gestire un database con SQL Server", "tags": ["database",], "content": "Come creare un database? Come gestirlo? Cosa sono i database di sistema? Queste sono solo alcune delle domande a cui cercheremo di rispondere oggi: parliamo quindi di come gestire un database con SQL Server!\nCosa vedrai Definizione di database Creare un database Risorse utili Definizione di database In SQL Server è una raccolta di una o più tabelle in cui vengono organizzati e memorizzati dei dati strutturati. \nOgni tabella sarà costituita da diverse righe e colonne, che vengono chiamate rispettivamente anche record e attributi.\nDatabase di sistema SQL Server contiene principalmente quattro database di sistema (master, modello, msdb, tempdb). Ciascuno di essi viene utilizzato da SQL Server per scopi separati; di tutti i database, il database master è il database più importante. Il database master contiene informazioni sulla configurazione del server SQL.\nIl database model imposta un template per ogni database appena creato. Serve come modello per il server SQL per creare un nuovo database.\nIl database msdb viene utilizzato principalmente da SQL Server Management Studio e SQL Server Agent per archiviare attività di sistema come jobs del server SQL, posta, broker di servizi, manutenzione, cronologia di backup del database di utenti e di sistema, informazioni sulla replicazione, e molto altro.\nDal nome del database stesso, possiamo identificare lo scopo del database tempdb: questo è accessibile da tutti gli utenti nell\u0026rsquo;istanza di SQL Server ed è un luogo dove si procede all\u0026rsquo;archiviazione di tabelle temporanee (globale e locale) e stored procedure temporanee che contengono risultati intermedi durante l\u0026rsquo;ordinamento o l\u0026rsquo;elaborazione di query e i cursori.\nCreare un database Per aggiungere un database alla nostra istanza SQL Server, sarà sufficiente cliccare con il destro sulla voce \u0026ldquo;Database\u0026rdquo; nella finestra a sinistra e inserire le informazioni richieste, come mostrato in figura:\nCreazione di un database\nPer il nome del database, scegliere un nome che sia significativo ma non eccessivamente lungo: capiterà molto spesso infatti che si debbano eseguire delle query in cui, oltre a scrivere il nome della tabella, sarà necessario scrivere anche il nome del database!\nOltre al nome, abbiamo la possibilità di scegliere il file che conterrà i nostri dati e il file di log che conterrà le informazioni relative alle operazioni eseguite all\u0026rsquo;interno del database. Queste informazioni possono essere lasciate così come sono impostate di default.\nOpzioni per la creazione di un database\nInteressante è la funzionalità relativa all\u0026rsquo;aumento automatico delle dimensioni del database: di base, come mostrato in figura, la dimensione allocata inizialmente è di 8 MB. Una volta che questo spazio sarà stato occupato, seguendo la configurazione di default prevede che vengano allocati 64 MB in più per il database.\nQuesta opzione può essere gestita in maniera che le dimensioni massime siano limitate a un valore specifico oltre il quale il database non scrive più, oppure, come di default, non abbia alcun limite.\nIn questa tabella di riepilogo è inoltre specificato il percorso dove i file relativi ai dati del database verranno memorizzati; solitamente, si trovano sotto la cartella di installazione di SQL Server Express sotto la cartella data.\nFile dei dati memorizzati in SQL Server\nRisorse utili Documentazione ufficiale Basi di Dati ", "url": "https:\/\/theredcode.it\/database\/gestire-un-database\/" }, "https:\/\/theredcode.it\/interviste\/voglio-diventare-una-web-developer\/": { "title": "Voglio diventare una... Web Developer", "tags": ["interviste","voglio-diventare",], "content": "Portare avanti una battaglia contro il gender gap in ambito STEM non è semplice, ma molte persone sono fortemente convinte che il primo passo sia attraverso l\u0026rsquo;educazione.\nPer questo, l\u0026rsquo;ospite di oggi parlerà della sua professione di Web Developer, nonché del suo sito IlCodingRosa, in costante evoluzione e con corsi gratuiti per avvicinarsi a questa professione!\nCosa vedrai Descriviti in 100 parole In cosa consiste il ruolo di Web Developer? Qual è la soft skill più importante che deve possedere una Web Developer? 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 Web Developer? 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 Mi chiamo Rosa Vox, nata cresciuta e pasciuta in Puglia, nella mia bella Taranto.\nSin dall’età di 14 anni ho intrapreso il percorso di studio in ambito informatico, frequentando un istituto tecnico ad indirizzo Informatico. Ho proseguito con l’Università, iscrivendomi al corso triennale in Informatica e Comunicazione Digitale e conseguendo la laurea con un anno di ritardo rispetto ai miei colleghi di corso.\nC’è stato un periodo durante quel percorso in cui ero totalmente in crisi, volevo mollare a pochi esami dalla fine, non perchè non avessi voglia di continuare ma perché vivevo un periodo poco sereno della mia vita, ma per fortuna non ho mollato e questo grazie anche al mio fidanzato.\nPer circa un anno e mezzo, dopo la laurea, ho continuato a formarmi seguendo corsi in ambito sviluppo web per poi approdare nell’attuale azienda in cui lavoro, ormai da quasi 5 anni.\nIn cosa consiste il ruolo di Web Developer? Il ruolo del Web Developer non è semplice, devi essere costantemente aggiornato sulle tecnologie che evolvono con una velocità impressionante.\nIl mio ruolo, nello specifico, è quello di Web Developer Front-end, mi occupo quindi di realizzare le interfacce grafiche di applicativi web, ma non solo per renderle belle graficamente ma soprattutto per renderle funzionali.\n Bisogna accertarsi che tutto funzioni e che funzioni nel modo corretto: non basta inserire un pulsante o una tabella in un\u0026rsquo;interfaccia, non basta che abbiano un preciso colore, una precisa altezza.\n È necessario che, per esempio, al pulsante sia agganciata un’azione di click che produca un risultato o che la tabella mostri i dati corretti.\nDetta così, può sembrare un lavoro semplice, ed in parte lo è, ma ciò che serve è un attenzione continua al dettaglio, dal punto di vista estetico, ma anche dal punto di vista delle interazioni.\nSi lavora in team, si collabora con altri web developer front-end, in modo da dividersi le interfacce grafiche da realizzare e gestire, ma si collabora anche con i web developer back-end che si occupano di gestire tutta la programmazione lato server, la comunicazione con i database e quindi la gestione dei dati, ma ci sono anche e soprattutto i Project Manager, i Tester, i Consulenti.\nQual è la soft skill più importante che deve possedere una Web Developer? Attenzione al dettaglio, proattività, creatività.\n È fondamentale essere molto attenti a ciò che si sta realizzando, cercando di soddisfare le richieste del committente, proponendo eventuali soluzioni a richieste un pò “particolari”.\nNon è sempre possibile realizzare alla lettera ciò che ci viene richiesto.\nE’ importante essere proattivi, prevenire eventuali problematiche che possono presentarsi e state certi che di problemi ce ne sono milioni. Questa credo che sia la parte più difficile.\n Immedesimarsi nell’utente medio, nell’utente un pò più esperto e dall’occhio più allenato capace di intercettare quei piccoli problemi grafici che possono sfuggire, ma soprattutto prevenire quei problemi di malfunzionamento dovuto alle volte, ad una gestione dei dati non del tutto precisa.\n Infine, è importante la creatività, per rendere le interfacce grafiche accattivanti, usabili, ordinate.\nChiaramente, dipende molto dal progetto su cui si sta lavorando. Se stiamo lavorando su un software gestionale, non si può essere molto creativi, anche perché spesso è lo stesso committente che definisce le linee guida per la realizzazione delle interfacce.\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 contribuito a metterlo su, ho seguito gli sviluppi fino a qualche tempo fa, risolvendo diverse problematiche di grande rilievo. Si tratta del prodotto su cui si basa la realtà aziendale in cui lavoro.\nIl mio più grande errore, e che purtroppo ancora non sono riuscita a superare, è la mia incapacità nel riconoscere il mio valore. Metto costantemente in dubbio le mie capacità, le mie competenze pensando di non essere mai all’altezza e questo mi ha un po\u0026rsquo; penalizzato nel corso del tempo, ma sto lavorando per superare queste insicurezze.\nCome fare per diventare una Web Developer? Diventare un Web Developer, come per ogni altro lavoro è importante l’impegno, la costanza e l’allenamento. Non è necessaria la laurea, è sufficiente seguire dei corsi professionalizzanti che ti aiutano ad acquisire le competenze necessarie per svolgere questa professione.\nQuindi è importante apprendere i linguaggi di programmazione come Java, SQL ma non solo per il Backend e tecnologie come HTML, CSS, Javascript, Angular, React, ecc per il front-end.\nMa prima di apprendere l’utilizzo di queste tecnologie è fondamentale comprendere le basi della programmazione, nonché gli algoritmi, tecniche di problem solving, allenare la propria logica perché lavorare come Web Developer non significa soltanto conoscere i segreti di un linguaggio di programmazione o della tecnologia usata, significa in primis saper risolvere problemi.\nParlando di successi, qual è il tuo prossimo obiettivo? Quale ruolo vorresti ricoprire entro i prossimi 3 anni? Sicuramente il primo obiettivo è quello di superare le mie insicurezze: ovviamente mi piacerebbe anche poter crescere nel ruolo, potendo gestire progetti in qualità di team leader e, perché no, magari un giorno essere un punto di riferimento per le nuove leve.\nTra 3 anni? Non saprei, può accadere di tutto\u0026hellip; magari non svolgerò più questa mansione, potrebbe essere che io abbia deciso di intraprendere un nuovo percorso, una nuova vita\u0026hellip; chi lo sa. Preferisco rimanere con i piedi per terra e vivere giorno dopo giorno questa avventura.\nConosci il tema gender gap in ambito STEM? Se sì, come fare per superarlo? Certamente! Nel nostro ambito è molto diffuso. Come ho detto prima, ho cominciato a studiare informatica alle superiori, e in questa scuola eravamo pochissime donne, nella mia classe solo in 3.\nAnche l’università era ed è popolata, ancora oggi, perlopiù da uomini.\nÈ una situazione che vivo anche in azienda, siamo solo 3 donne, nella sede di Taranto, a svolgere la mansione di Web Developer.\nIl gender gap mi sta molto a cuore, a volte è deprimente vivere 8 ore di lavoro in un ambito totalmente maschile, ed è molto fastidioso sentir dire ancora oggi che certi lavori sono prettamente maschili, assunto non vero. Una persona che lavora come Web Developer è una persona che programma e la programmazione è nata per mano di una donna!\nSono impegnata in prima linea, o almeno ci provo, nell’abbattimento del gender gap e a tal proposito ho aperto la mia pagina instagram (@ilcodingrosa) ed il mio sito web IlCodingRosa in cui cerco di divulgare la cultura dello sviluppo web tra la popolazione femminile, offrendo corsi e risorse gratuite.\n Non è facile portare avanti questa battaglia avendo un lavoro full-time, ma faccio il possibile.\n Contatti Sito personale Instagram Facebook Email ", "url": "https:\/\/theredcode.it\/interviste\/voglio-diventare-una-web-developer\/" }, "https:\/\/theredcode.it\/categories\/natural-language-processing\/": { "title": "natural-language-processing", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/categories\/natural-language-processing\/" }, "https:\/\/theredcode.it\/intelligenza-artificiale\/riconoscere-le-entita-con-spacy-in-ambito-medico\/": { "title": "Riconoscere le entità con spaCy in ambito medico", "tags": ["intelligenza-artificiale",], "content": "Lavorare con entità come luoghi, brand o persone è piuttosto facile per spaCy: in un precedente articolo abbiamo anche visto come aggiungere delle nuove label ad un modello pre-esistente.\nE se avessimo bisogno di addestrare il componente da zero su un dominio come quello medico?\nIn questo articolo, vediamo come creare una pipeline che riconosca alcune nuove entità appartenenti al mondo della medicina, come gli agenti patogeni, condizione medica o farmaci.\nCosa vedrai Come funziona spaCy Come fare Test Risorse utili Come funziona spaCy Il riconoscimento delle entità (in inglese abbreviato in NER) funziona individuando e identificando le entità presenti in un testo non strutturato nelle categorie standard come nomi di persone, posizioni, organizzazioni, date, quantità, valute, percentuali e molto altro. SpaCy, tra le tante cose, è dotato di una serie di modelli estremamente veloci che permettono il riconoscimento delle entità e l\u0026rsquo;assegnazione delle etichette ai diversi token di un testo.\nSpaCy offre un\u0026rsquo;opzione per aggiungere classi arbitrarie ai sistemi di riconoscimento delle entità e aggiornare il modello per includere anche i nuovi esempi oltre alle entità già definite all\u0026rsquo;interno del modello.\nIn particolare, il componente della pipeline chiamato \u0026ldquo;ner\u0026rdquo; identifica gli intervalli di token che si adattano a un insieme predeterminato di entità o categorie.\nCome fare In questo caso di esempio, andremo a utilizzare un dataset JSON composto di 20 esempi che fanno riferimento al corpus CORD-19 prodotto dall\u0026rsquo;Allen Institute for AI.\nOgni esempio contiene una frase inerente la sintomatologia e gli studi effettuati sul Covid-19 e la posizione delle entità nella frase, indicando la posizione iniziale e finale.\n Queste sono le informazioni utilizzate da spaCy per prendere dei nuovi esempi per addestrare un componente nella pipeline.\n \u0026#34;The antiviral drugs amantadine and rimantadine inhibit a viral ion channel (M2 protein), thus inhibiting replication of the influenza A virus.[86] These drugs are sometimes effective against influenza A if given early in the infection but are ineffective against influenza B viruses, which lack the M2 drug target.[160] Measured resistance to amantadine and rimantadine in American isolates of H3N2 has increased to 91% in 2005.[161] This high level of resistance may be due to the easy availability of amantadines as part of over-the-counter cold remedies in countries such as China and Russia,[162] and their use to prevent outbreaks of influenza in farmed poultry.[163][164] The CDC recommended against using M2 inhibitors during the 2005–06 influenza season due to high levels of drug resistance.[165]\u0026#34;, { \u0026#34;entities\u0026#34;: [ [ 639, 648, \u0026#34;MedicalCondition\u0026#34; ], [ 35, 46, \u0026#34;Medicine\u0026#34; ], [ 712, 725, \u0026#34;Medicine\u0026#34; ], [ 20, 30, \u0026#34;Medicine\u0026#34; ] ] } La complessità in questo dominio è data dal fatto che le entità nel dominio medico possono essere rappresentate da numeri e unità di misura, caratteri alfanumerici che rappresentano principi attivi, abbreviazioni o anche parole composte.\nQuesto corpus include tre tipologie di entità, chiamate Medicine, MedicalCondition e Pathogen, etichettate con le label indicate in precedenza.\nDovremo eseguire diversi passi:\n caricare il dataset; pre-processing del dataset; preparare una pipeline da zero; addestrare il componente NER; testare il risultato ottenuto. Il primo step sarà quindi quello di caricare il dataset e lo faremo tramite la libreria json:\nimport json with open(\u0026#34;corona.json\u0026#34;) as f: data = json.loads(f.read()) A questo punto, andiamo a preprocessare il dataset: il format che spaCy si aspetta per l\u0026rsquo;oggetto Example è il seguente:\n(FRASE, {\u0026#39;entities\u0026#39;: [(START, END, LABEL), ...)]}) Andiamo quindi a creare una lista che conterrà il nostro dataset di addestramento e, per ogni frase, andiamo a creare una tupla che contenga le informazioni così come nell\u0026rsquo;esempio precedente.\nPer ogni oggetto presente nel dataset, \u0026rsquo;text\u0026rsquo; conterrà la frase e \u0026lsquo;annotations\u0026rsquo; conterrà le entità; l\u0026rsquo;entità viene rappresentata dall\u0026rsquo;inizio e la fine della stringa nella frase, e dall\u0026rsquo;etichetta ad esso associata. Aggiungiamo alla lista della frase queste entità e poi aggiungiamo il risultato finale alla lista TRAIN_DATA:\n TRAIN_DATA = [] for (text, annotations) in data: new_anno = [] for annotation in annotations[\u0026#34;entities\u0026#34;]: st, end, label = annotation new_anno.append((st, end, label)) TRAIN_DATA.append((text, {\u0026#34;entities\u0026#34;: new_anno})) print(TRAIN_DATA[0]) A questo punto, dobbiamo creare una pipeline che potremo addestrare da zero: per farlo, andremo a definire un modello vuoto tramite la funzione blank() per la lingua inglese:\nnlp = spacy.blank(\u0026#34;en\u0026#34;) Alla pipeline, andremo ad aggiungere il componente NER:\nner = nlp.add_pipe(\u0026#34;ner\u0026#34;) Il componente dovrà avere un elenco di label da cui apprendere: andremo quindi a fornire le etichette elencate in precedenza al componente con la funzione add_label()\nfor ent in labels: ner.add_label(ent) print(ner.labels) Per far sì che l\u0026rsquo;unico componente che andremo ad addestrare sia quello per la Named Entity Recognition, andiamo a disabilitare gli altri componenti, tutti a eccezione di quello chiamato \u0026ldquo;ner\u0026rdquo;:\nother_pipes = [pipe for pipe in nlp.pipe_names if pipe != \u0026#39;ner\u0026#39;] L\u0026rsquo;ultimo step prima di testare la pipeline è quella di creare un oggetto optimizer che aiuterà il nostro modello durante l\u0026rsquo;addestramento; in questo caso, useremo la funzione begin_training() per far sì che il modello dimentichi tutto quello che ha appreso in precedenza e inizi con dei pesi associati alla rete neurale pari a 0.\nwith nlp.disable_pipes(*other_pipes): optimizer = nlp.begin_training() Definiamo 100 epoche e poi, per ogni epoca, mischiamo in maniera random gli esempi del training set e addestriamo il componente NER con questi dati:\n for i in range(0, epochs): random.shuffle(TRAIN_DATA) print(\u0026#34;Epoch:\u0026#34;, i) for text, annotation in TRAIN_DATA: doc = nlp.make_doc(text) example = Example.from_dict(doc, annotation) nlp.update([example], sgd=optimizer) Il numero di epoche è abbastanza basso, considerata la dimensione degli esempi. Sarebbe utile aumentare a 500, o anche di più se il dataset venisse allargato!\n L\u0026rsquo;addestramento potrebbe durare all\u0026rsquo;incirca 15 minuti.\nTest È arrivato il momento di testare il modello. Usiamo un esempio preso da una pubblicazione online sullo streptococco che contiene diversi termini che si riferiscono ad agenti patogeni e sintomi, e testiamo il modello:\ndoc = nlp(\u0026#34;Acute Streptococcus pyogenes infections may take the form of pharyngitis, scarlet fever (rash), impetigo, cellulitis, or erysipelas. Invasive infections can result in necrotizing fasciitis, myositis and streptococcal toxic shock syndrome. Patients may also develop immune-mediated sequelae such as acute rheumatic fever and acute glomerulonephritis. S agalactiae may cause meningitis, neonatal sepsis, and pneumonia in neonates; adults may experience vaginitis, puerperal fever, urinary tract infection, skin infection, and endocarditis. Viridans streptococci can cause endocarditis, and Enterococcus is associated with urinary tract and biliary tract infections. Anaerobic streptococci participate in mixed infections of the abdomen, pelvis, brain, and lungs.\u0026#34;) print(\u0026#34;### ENTS\u0026#34;) print(doc.ents) Tip Per visualizzare le entità associate al nostro caso di esempio, possiamo usare displacy: si tratta di una libreria di spaCy che ci permette di visualizzare su un browser le frasi con le etichette associate.\nSarà sufficiente importare la libreria e poi usare la funzione serve() passando come parametri il documento che contiene le nostre entità e il tipo di renderizzazione che deve utilizzare, ossia le entità:\nfrom spacy import displacy displacy.serve(doc, style=\u0026#34;ent\u0026#34;) Risorse utili Documentazione ufficiale Analisi del linguaggio naturale con Python - Apogeo _\n", "url": "https:\/\/theredcode.it\/intelligenza-artificiale\/riconoscere-le-entita-con-spacy-in-ambito-medico\/" }, "https:\/\/theredcode.it\/interviste\/voglio-diventare-un-product-manager\/": { "title": "Voglio diventare un... Product Manager", "tags": ["interviste","voglio-diventare",], "content": "Product Management e responsabilità: dov\u0026rsquo;è il valore del prodotto?\nCe lo racconta Fabrizio Cesarini, Product Manager e autore per Apogeo Editore.\nCosa vedrai Descriviti in 100 parole In cosa consiste il ruolo di Product Manager? Qual è la soft skill più importante che deve possedere un 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 un 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 \u0026lt;?php echo str_repeat(\u0026#34;perfezionista \u0026#34;, 100); ?\u0026gt;In cosa consiste il ruolo di Product Manager? Il CEO di Opsware, Ben Horowitz, definì 15 anni fà il Product Manager come il \u0026ldquo;CEO del prodotto\u0026rdquo;.\nUna definizione sintetica e perfettamente calzante. Il Product Manager è, a tutti gli effetti, il responsabile del prodotto in tutte le sue fasi, dall’ideazione alla realizzazione fino all’immissione sul mercato e sul suo andamento.\nPer svolgere questo lavoro dovrà sempre tenere in considerazione gli utenti del prodotto, dosando sapientemente le loro esigenze ed aspettative con le risorse messe a disposizione dell’azienda per cui lavora e le tecnologie a disposizione.\nQual è la soft skill più importante che deve possedere un Product Manager? Ce ne è una che ritengo fondamentale e racchiude in sé tutto quello che deve possedere un Product Manager, la leadership.\nSpesso però questo termine viene veicolato in senso negativo, affiancandolo a stereotipi di controllo o supremazia.\n In realtà penso che un Product Manager debba essere prima di tutto disponibile ed empatico, sapere riconoscere le capacità dei suoi collaboratori e valorizzarle.\n Allo stesso tempo un “maestro severo” che pretende metodo e disciplina per raggiungere gli obiettivi.\nDeve saper convincere ma senza imposizioni, essere umile ma allo stesso tempo carismatico, disponibile ma fermo quando serve.\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. Purtroppo il concetto di “fallimento” in Italia viene additato negativamente. Un’onta quasi indelebile che preclude ogni altra possibilità di riscossa e successo. Lo vediamo un po\u0026rsquo; su tutti i settori, anche privatamente.\nLa mia forma mentis è più vicina a quella Americana, per cui il fallimento non è altro che una caduta, un arresto temporaneo, una fase dolorosa ma utile, un errore che non comporta lo “scaglio di pietre” da parte di qualcuno ma l’occasione per fermarsi a riflettere, analizzare la situazione e correggere.\n Il mio più grande fallimento lavorativo è stato “innamorarmi” di una tecnologia nonostante non avesse i requisiti per poter sviluppare i prodotti che mi erano stati commissionati.\n Ancora oggi non capisco come possa essere successo ma ho voluto portare avanti la mia scelta andando anche contro la volontà dei miei collaboratori. Abbiamo subito una notevole perdita soprattutto in termini di tempo dovendo poi riprogrammare da capo l’attività e permettendo intanto la crescita della concorrenza.\nSicuramente è stata la mia più grande ed importante lezione per le scelte future.\nCome fare per diventare un Product Manager? Un Product Manager è prima di tutto una indole, una inclinazione personale. Una sorta di “vocazione per la bellezza e l’ergonomia”.\nDa qui si devono poi sviluppare tutte le altre abilità che consentono di mettere in pratica la vision e realizzare il prodotto finale.\nPer svolgere la professione di Product Manager non esistono ad oggi corsi in Italia specifici e mirati.\nGeneralmente è richiesta una formazione di tipo universitario in Economia o, alternativamente, in Ingegneria gestionale e anche meccanica o energetica. In un secondo momento sarà poi possibile seguire corsi o master specifici di management.\nParlando di successi, qual è il tuo prossimo obiettivo? Quale ruolo vorresti ricoprire entro i prossimi 3 anni? Il pilota d’elicottero.\nConosci il tema gender gap in ambito STEM? Se sì, come fare per superarlo? Conosco questo tema. Purtroppo lo riscontro giornalmente nella mia professione.\nPersonalmente credo le donne abbiamo doti e talenti, sia umani che professionali, che spesso difettano a noi uomini e che invece favoriscono la riuscita. La pazienza. La resilienza. La forza interiore. Solo per elencare le più importanti.\nInoltre penso che, in generale, sia proprio la diversità a permettere la completezza e l’efficienza di qualsiasi cosa. In questo paradigma, uomini e donne possono essere una squadra migliore che collabora per l’unico obiettivo.\nSe non vi ho ancora convinti … basti pensare che lavoro da più di 20 anni con una Data Scientist 😊\nContatti Profilo LinkedIn Sito personale NOSTOPIT ", "url": "https:\/\/theredcode.it\/interviste\/voglio-diventare-un-product-manager\/" }, "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 - per cominciare bene con Docker e Kubernetes Kubernetes - Guida per gestire e orchestrare i container Canale di Emmecilab ", "url": "https:\/\/theredcode.it\/openshift\/deployment-vs-deploymentconfig\/" }, "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", "url": "https:\/\/theredcode.it\/openshift\/cos-e-un-template-in-openshift\/" }, "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\/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\/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\/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", "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\/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\/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?\nContatti 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) Contatti https://pausacaffe.live https://podcastdelminotauro.it https://instagram.com/eldoleo.dev ", "url": "https:\/\/theredcode.it\/data-science\/etl-for-dummies\/" }, "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.\nContatti 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\/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 Kubernetes - Guida per gestire e orchestrare i container ", "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 ", "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 ", "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 ", "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", "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\/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.\nLa 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.\nTenendo 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.\nCosa 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.\nPensiamo al calcolo della similarità tra più entità: il nostro programma potrebbe considerare come diverse delle parole che hanno la lettera maiuscola iniziale.\nQuesto 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.\nUn esempio per rendere in minuscolo una serie di parole contenute in una lista, potresti fare qualcosa di simile:\ntexts=[\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?\nNulla 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!\nimport 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.\nLo 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!\nEsistono diversi algoritmi per lo stemming, e spesso cambiano a seconda della lingua.\nL\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:\nimport 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:\nfrom 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.\nLa 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.\nAd esempio, la parola \u0026ldquo;migliore\u0026rdquo; verrebbe associata a \u0026ldquo;buono\u0026rdquo;, e non \u0026ldquo;miglior\u0026rdquo;.\nLo 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.\nPer 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:\nimport 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%.\nUn 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:\nimport 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.\nEsempi 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.\nL\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.\nAd 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.\nNella 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.\nUn 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:\nstopwords=[\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!\nIn questa fase una delle altre tecniche di elaborazione del testo consiste nella rimozione della punteggiatura.\nCi 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.\nUtilizzandolo insieme alla libreria re per le espressioni regolari, possiamo rimuovere tutti i simboli come nell\u0026rsquo;esempio di seguito:\nimport 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 ", "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.\nMa come funzionano?\nIn 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.\nUn 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!\nQuando 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.\nUn 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.\nNon 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.\nPer prima cosa, andiamo a creare una direttiva usando il comando seguente:\nionic generate directive clickdirective Ci verrà creato un file che si chiama click-directive.directive.ts, che andremo ad analizzare:\nclickdirective.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!\nIl 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:\nclickdirective.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.\nUna 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.\nPer 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.\nAlcuni 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:\nclickdirective.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:\nmessage.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à:\nmessage.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 ", "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\/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.\nSfruttando un proprio proxy, tutte le request passano attraverso il server JMeter e questo elabora e registra le request che lo attraversano.\nIn 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.\nLe request arriveranno comunque all\u0026rsquo;applicazione, la quale troverà totalmente trasparente questo passaggio.\nProcedimento 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):\nStruttura della cartella di JMeter\nA questo punto, clicchiamo in alto a destra sull\u0026rsquo;icona che rappresenta l\u0026rsquo;opzione \u0026ldquo;Recording template\u0026rdquo;.\nIcona \u0026ldquo;Recording template\u0026rdquo;\nQuesto 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.\nSi aprirà una schermata come la seguente, dove in questo caso andremo a scegliere \u0026ldquo;Recording\u0026rdquo; e cliccheremo su \u0026ldquo;Create\u0026rdquo;:\nSelezione del template \u0026ldquo;recording\u0026rdquo; in JMeter\nCi 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;.\nConfigurazione del recording di un test plan\nVerrà 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.\nComponente \u0026ldquo;HTTP(S) Test Script Recorder\u0026rdquo; in JMeter\nAbilitiamo il componente \u0026ldquo;HTTP(S) Test Script Recorder\u0026rdquo; in JMeter\nQuando i test vengono registrati tramite questo componente, è normale che molte delle request acquisite non siano necessarie.\nPer 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.\nCiò 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:\nTab \u0026ldquo;Requests Filtering\u0026rdquo; del componente \u0026ldquo;HTTP(S) Test Script Recorder\u0026rdquo; in JMeter\nPer 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.\nA 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.\nIn 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:\nConfigurazione del proxy in Firefox\nUna 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.\nJMeter andrà a salvare ogni request nell\u0026rsquo;esatto ordine in cui lo andiamo ad eseguire, quindi seguiamo il test che abbiamo in mente.\nUna 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:\nElenco request registrate\nA 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.\nQuando 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!\nL\u0026rsquo;esecuzione del test plan mostrerà i suoi risultati all\u0026rsquo;interno del listener presente di default \u0026ldquo;View Results Tree\u0026rdquo;:\nEsempio di esecuzione di un test plan in JMeter\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\/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 ", "url": "https:\/\/theredcode.it\/intelligenza-artificiale\/google-senziente\/" }, "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 ", "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.\nSe parliamo di macchine virtuali, le immagini sono solo snapshots della macchina virtuale in esecuzione che vienefotografata in momenti diversi, mentre le immagini in Docker sono immutabili e rappresentano la ricetta di un\u0026rsquo;applicazione.\nFacendo 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.\nL\u0026rsquo;elenco delle immagini è possibile visualizzarlo tramite Docker Desktop oppure eseguendo il comando seguente:\ndocker images Elenco delle immagini presenti visibili tramite Docker Desktop\nDocker 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.\nPuoi 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.\nL\u0026rsquo;elenco dei container è possibile visualizzarlo tramite Docker Desktop oppure eseguendo il comando seguente:\ndocker ps Elenco dei container presenti visibili tramite Docker Desktop\nUn\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.\nOgni 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.\nDifferenze 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?\nRisorse utili Docker - Manuale Apogeo Canale Emmecilab a tema Docker ", "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\/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","devops",], "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.\nIn questo articolo, vediamo una breve panoramica di come si installa, del suo funzionamento e quali funzionalità abbiamo a disposizione.\nDocker 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.\nGli 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.\nNon 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!\nDocker Desktop per Windows\nDocker Desktop per Linux\nRequisiti 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.\nAdesso puoi scaricare il pacchetto .deb da questa pagina e installalo con il seguente comando:\nsudo 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.\nIn alternativa, apri un terminale ed esegui:\nsystemctl --user start docker-desktop Fedora Un ulteriore requisito in questo caso è di avere una versione Fedora 35 o 36.\nInoltre, 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:\nsudo dnf install gnome-terminal A questo punto, scarica il pacchetto .rpm da questa pagina e installalo con il seguente comando:\nsudo 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.\nIn alternativa, apri un terminale ed esegui:\nsystemctl --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:\nsudo apt install gnome-terminal A questo punto, scarica il pacchetto .deb da questa pagina e installalo con il seguente comando:\nsudo 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.\nIn alternativa, apri un terminale ed esegui:\nsystemctl --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!\nSe 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\/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!\nJMeter è 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.\nNon 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.\nLo 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.\nCon 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!\nIl **test delle prestazioni (**o performance test) è un test che stabilisce le migliori aspettative di prestazioni possibili in una determinata configurazione dell\u0026rsquo;infrastruttura.\nEvidenzia 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.\nIl 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.\nIl 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;.\nInfine, 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.\nIn 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.\nA 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!\nCos\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.\nSolitamente è 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.\nConfigurare 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.\nAggiungi 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.\nCreazione 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.\nSe ci clicchiamo sopra, noteremo che ci sono diversi campi che possiamo andare a riempire, e ognuno di questi ha un diverso scopo.\nConfigurazione del Thread Group\nParliamo delle impostazioni nel pannello Thread Group.\nAction 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.\nRamp-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.\nLoop 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!\nNella figura seguente viene mostrato un esempio.\nIn 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.\nEsempio di configurazione di un thread group\nOltre 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.\nIn 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.\nSe 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!\nInoltre, 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.\nCreare 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.\nCreazione 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.\nClicchiamo sull\u0026rsquo;oggetto appena aggiunto e proviamo a vederne il funzionamento con un esempio di una request GET a https://httpbin.org.\nConfigurazione della request HTTP\nCome 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].\nAbbiamo a disposizione anche una sezione per aggiungere dei commenti o una descrizione più parlando della nostra request in maniera testuale.\nNotiamo 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.\nIn 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).\nAndiamo 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;.\nNella 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.\nAggiungere un listener Per mostrare l\u0026rsquo;esecuzione del nostro test plan, possiamo andare ad aggiungere un componente chiamato listener.\nQuando 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.\nUn 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.\nSe 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.\nProviamo ad esempio ad utilizzare View Results Tree per vedere i risultati dopo aver eseguito la nostra richiesta al sito di httpbin.\nFacciamo quindi clic con il pulsante destro del mouse sul thread group e quindi selezioniamo Add -\u0026gt; Listener -\u0026gt;View Results Tree.\nListener View Results Tree\nA questo punto, possiamo andare ad eseguire il nostro primo test plan: clicchiamo sul tasto verde in alto e procediamo!\nEsempio di visualizzazione dei risultati\nI 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.\nSe 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).\nEsempio di request del listener View Results Tree\nAll\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.\nEsempio di response del listener View Results Tree\nNella 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!\nTieni 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?\nVediamo in questo articolo una breve introduzione al NLP e Machine Learning!\nAlgoritmi 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.\nQuelli 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.\nOgnuno 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;.\nQuesta 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.\nK-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.\nI 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.\nIn 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.\nMa qual è la differenza tra questi due campi?\nText 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.\nIl 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.\nIl 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\nNLP 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.\nIn 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.\nI dati utilizzati in questo ambito hanno le applicazioni più disparate: si passa dalla customer experience, fino all\u0026rsquo;ambito assicurativo,finanziario e di marketing.\nE 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.\nArriviamo 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.\nUn 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.\nNel 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.\nPer questa tipologia di attività, possiamo utilizzare diversi algoritmi come Naive-Bayes, alberi di decisione, reti neurali o anche la regressione.\nE se dovessimo scoprire l\u0026rsquo;argomento principale di una raccolta di documenti?\nIn 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.\nNon 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.\nIn 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.\nDa 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.\nAltre 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.\nAbbiamo anche detto che AgilePM è un sottoinsieme del framework più comune DSDM: ma cos\u0026rsquo;è e come funziona?\nIn questo articolo parliamo di cos\u0026rsquo;è DSDM, come funziona e quali sono i principi fondamentali su cui si basa.\nCos\u0026rsquo;è DSDM sta per Dynamic Systems Development Method ed è chiaramente una metodologia agile distribuita gratuitamente dal consorzio DSDM ai propri membri, fondato nel 1994.\nLa 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.\nLa 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\nIl 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.\nNon 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.\nLa 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.\nPoi 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.\nInfine 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.\nRispetto 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.\nCome 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.\nNell\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.\nDifferenze tra approccio tradizionale e DSDM\nRicordiamo 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.\nMa quali basi utilizza DSDM e quali sono i suoi principi fondamentali?\nPrincipi 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.\nPrincipi 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.\nOgni 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.\nL\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!).\nNello 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.\nInfine, 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.\nAd 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.\nQuesto 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.\nOgni 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.\nIl secondo fattore è stabilire e coinvolgere le giuste persone, scegliendole per motivazione, stabilità e competenze condivise: un team solido è fondamentale per qualsiasi progetto.\nAltro 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.\nIn 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.\nUltimo, 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\/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?\nDa 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!\nIn questo articolo, vediamo come creare un sito Wordpress con AWS Lightsail!\nAWS 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.\nNon 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.\nAvrai così degli ambienti di test in un tempo (quasi) zero dove puoi provare le tue nuove idee, senza correre alcun rischio!\nE il costo? Il costo rimane bassissimo, ma lo vedremo a breve!\nAmazon Lightsail\nProcedimento 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!\nPagina di registrazione ad AWS\nConfigurazione 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:\nServizio Amazon Lightsail\nUna volta dentro il servizio, ci verrà mostrata la pagina principale di Lightsail:\nLightsail 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.\nPanoramica di Lightsail\nPer 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.\nIn questo caso, scegliamo Parigi o Francoforte e come OS scegliamo Linux/Unix:\nCreazione di un\u0026rsquo;istanza su Lightsail\nLe 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.\nSiccome noi vogliamo creare un sito Wordpress, andiamo a selezionare la prima voce che avvierà un\u0026rsquo;istanza con Wordpress versione 5.9.2-3.\nTra le opzioni, vediamo che è anche possibile creare un Wordpress multi-sito, in pochi e semplici click! ;)\nScelta 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.\nLe 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\nIn 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!\nProcediamo 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.\nL\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:\nConfigurazione 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:\nRiepilogo delle istanze attive su AWS Lightsail\nPer collegarci, sarà sufficiente utilizzare l\u0026rsquo;indirizzo IP assegnato e vedremo la pagina di benvenuto di Wordpress!\nPagina iniziale di Wordpress con AWS Lightsail\nPer recuperare anche la password dell\u0026rsquo;utente user, è sufficiente accedere all\u0026rsquo;istanza ed eseguire il seguente comando:\ncat $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!\nDopo 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.\nIn 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.\nSe 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.\nvi /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.\nIn 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.\nPartiamo con l\u0026rsquo;introduzione al framework AgilePM!\nDSDM 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.\nC\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.\nPer 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.\nDSDM 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.\nDSDM 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.\nQuesto significa che ci sono feedback continui, c\u0026rsquo;è spesso un confronto diretto, il quale dovrebbe risolvere i problemi giorno dopo giorno.\nSignifica 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.\nUn 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.\nDevOps 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.\nSe volessimo definire con ancora più chiarezza, framework come Scrum sono considerati di product development, mentre AgilePM o Prince2 sono metodi di project management.\nIn 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.\nAgilePM è perfetto per organizzare la gestione di un progetto e definirne le fondamenta.\nScopi e campi di azione dei metodi agili\nManifesto 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.\nPrincipi 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.\nOppure, dobbiamo preferire delle soluzioni che funzionano piuttosto che un manuale utente breve piuttosto che uno di 2000 pagine (secondo punto).\nIn 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.\nEssere 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é?\nLe 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.\nSe 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.\nSe 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.\nIn questo articolo andiamo ad analizzare le differenze e diversi esempi di come sfruttare il routing in Ionic!\nCos\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.\nAngular 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.\nCome 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;.\nCon 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.\nInfatti 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.\nSe 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/.\nQuesto 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.\nEsempi 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:\nEsempio di creazione di una pagina in Ionic\nQuesto significa che potremo utilizzare la route definita all\u0026rsquo;interno del file di routing in qualsiasi altra pagina per navigarne il contenuto.\nUtilizzo di una pagina esistente Puoi utilizzare la stessa pagina in più posizioni assicurandoti che esista un percorso per essa da tali posizioni.\nAd 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.\nimport { 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.\nQuesto è 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.\nSi 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:\nimport { 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.\nNell\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.\nSi 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!\nIl 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.\nPer 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.\nAbbiamo 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;.\nUtilizzo 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.\nUtilizzo di NavController Il modo migliore per navigare a livello di codice in un\u0026rsquo;applicazione Ionic o Angular è utilizzare NavController.\nQuesto è 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:\nthis.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!\nChe poi, di mestiere voleva fare lo scrittore, e in parte ci è anche riuscito\u0026hellip;\nClaudio De Sio Cesari oggi ci racconta come fare per diventare un Java Developer!\nDescriviti in 100 parole Non mi piacciono le etichette, quindi ti racconto giusto qualcosa su di me.\nLeggo 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.\nIn 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.\nIn 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.\nIl lavoro di Java Developer quindi non si può limitare a questo, bisogna fare molto di più.\nPrima 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).\nIn 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.\nInsomma, 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!\nQual è 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.\nLa 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à.\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, 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.\nPotrei 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.\nOppure 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.\nOppure 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!\nA 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!\nSe 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.\nAll’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.\nHo 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.\nConosci 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.\nSono 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!\nContatti 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","devops",], "content": "Quando lavori con Docker, potrebbe essere necessario copiare file da e verso un container Docker e il tuo computer.\nDopo 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;\nDocker 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.\nIn questo articolo, discuteremo come utilizzare i comandi Docker cp vedendo degli esempi pratici!\nCopia di file dal container al computer locale Segui i passaggi seguenti per copiare un file da un contenitore Docker a un computer locale:\nCrea un container Come prova, è possibile utilizzare l\u0026rsquo;immagine di Ubuntu e creare un file di prova al suo interno, eseguendo i comandi riportati:\ndocker 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:\ndocker 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.\nIl 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:\nroot@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.\nAbbiamo 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é.\nDi 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.\nValori Scrum di Scrum.org\nImpegno “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.\nAllo 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.\nUno 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à.\nFocus “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.\nCosì 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.\nApertura \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.\nCosì 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.\nRispetto \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.\nRispetto significa anche fidarsi dei membri del tuo team per svolgere i loro compiti, ascoltare e considerare le loro idee e riconoscere i loro risultati.\nCoraggio “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.\nI 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.\nI 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.\nCredere 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.\nIl 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.\nSi 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.\nE quindi come diventare un ottimo Project Manager?\nCe 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.\nDescriviti 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.\nAmo 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.\nAvrei voluto fare il medico, ma faccio il PM…non è la stessa cosa ma mi reputo comunque fortunato.\nIn 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!\nQual è la soft skill più importante che deve possedere un Project Manager? Empatia e capacità comunicativa.\nIl Project Manager vive di comunicazione; deve dunque saper essere chiaro nel trasferire informazioni e cauto nella scelta delle informazioni da trasferire.\nEmpatico, 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.\nPerchè 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.\nSia 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!\nConsiglio sempre di affacciarsi a questo mondo facendo un corso, quantomeno per apprenderne le basi e i processi principali.\nParliamo 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).\nQuesta 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).\nUna declinazione interessante e molto completa della metodologia Waterfall è Prince2 (alias PRojects IN Controlled Environments).\nSi 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).\nIo 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.\nIn 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;\nMi 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!\nParlando 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.\nConosci 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.\nCertamente, 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;.\nQuesta 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.\nQuesta 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.\nAffrontare 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;.\nUna 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.\nSotto 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.\nContatti 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.\nMa 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;!\nDescriviti 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.\nMentre lavoravo come archeologa ho aperto Cronache dal cantiere, una pagina Facebook in cui raccontavo in modo divertente cosa succedeva sui cantieri che seguivo.\nDurante 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.\nHo scoperto dell’esistenza dei CRM un po’ per caso ma è stato subito amore.\nAll’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.\nIn 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.\nLavoro 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.\nInoltre, 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.\nQual è 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.\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. 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.\nAvevo 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.\nIl 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.\nVorrei dire che una laurea in economia o in materie scientifiche aiutano ma non ci credo per niente!\nCredo sia più importante avere un mindset scientifico e organizzato, tanta curiosità e, soprattutto, voglia di imparare.\nCome 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!\nOvviamente 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.\nParlando 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.\nVorrei, inoltre, mettermi alla prova di nuovo come Project Manager, perché penso sia un’attività stimolante ed in cui potrei offrire valore.\nDa 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.\nI dati del report UNESCO 2021 non sono più confortanti.\nIl 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.\nPortare questi temi nelle scuole, negli open day universitari, negli eventi per le studentesse e gli studenti di ogni ordine e grado è sicuramente utile.\nHo molta fiducia nei giovani e nelle giovanissime ma credo pure che si debbano educare gli adulti, che sono le persone che prendono le decisioni.\nNel 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.\nNel 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!\nContatti 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.\nEntrambi 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?\nVediamo le differenze tra keystore e truststore!\nKeystore 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.\nIn 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.\nIl keystore viene utilizzato dal KeyManager di Java per inviare le credenziali di autenticazione ad un host remoto per autenticarsi durante un processo di handshake.\nIl TrustManager di Java verifica che le credenziali condivise dal server corrispondano con quelle presenti nel truststore e in tal caso consente la connessione.\nTruststore 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.\nIn altre parole, il truststore contiene certificati che identificano gli altri e sono informazioni non private, ma di pubblico dominio.\nDifferenze 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:\njavax.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.\nSe 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.\nCome 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!\nSe 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.\nGenerare 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:\nCon 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.\nkeytool -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:\nkeytool -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:\nkeytool -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!\nkeytool -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?\nkeytool -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?\nkeytool -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?\nCe lo racconta Najla Said!\nDescriviti 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.\nMi interessano tanto, però, anche la scienza e la tecnologia, e diciamo che sono abituata in genere a ragionare in modo analitico, anche nel quotidiano.\nIl 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.\nPoi serve trovare soluzioni, quindi studiare quali servizi o componenti rispondano ai requisiti, e, soprattutto, capire come integrare il tutto nel disegno finale.\nSembra 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!\nQual è 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.\nLa 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).\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. 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.\nMentre 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”.\nCome 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.\nMi 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.\nL’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!\nConosci 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.\nPoi ho avuto la fortuna di studiare e lavorare con molte donne, il che mi ha quasi cullato nell’illusione che la questione fosse risolta.\nPurtroppo, 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’).\nSono 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.\nHo 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;\nMa torniamo a noi: quali sono le tipologie di machine learning che esistono? Quali sono le differenze e quale adottare a seconda del problema?\nIntro 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.\nE, come tali, non sono da confondersi con le predizioni: il machine learning non è astrologia, né tantomeno alchimia!\nAl 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.\nApprendimento 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\nAlgoritmi 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.\nQuesto 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.\nQuesto 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).\nTensorflow 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).\nL\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.\nEsempio del funzionamento dell\u0026rsquo;apprendimento per rinforzo\nAlgoritmi 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.\nApprendimento 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.\nIn 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.\nAlgoritmi 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.\nAnche 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).\nTensorflow 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!\nIntro 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.\nIonic 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.\nLo 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.\nFacebook 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.\nAll\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.\nStesso 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!\nopenTwitter(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\nRisorse 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!\nIntro 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..\nNulla di tutto questo in realtà!\nInfatti 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.\nQuesta 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.\nLe fasi sono ulteriormente scomposte in iterazioni, ognuna delle quali associata a periodi temporali aventi scadenze precise.\nUfficialmente 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.\nCos\u0026rsquo;è Arriviamo al sodo, e iniziamo a parlare concretamente di cosa sia Scrum.\nPrima 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.\nIn 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.\nImmaginate ad esempio di utilizzare Angular come framework per il front-end. Potete sfruttarlo per sviluppare in mille e più modi differenti il vostro applicativo?\nAssolutamente 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.\nIl pensiero Lean riduce gli sprechi e si focalizza su ciò che davvero è essenziale e di valore.\nNon 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.\nPilastri Ma quali sono i pilastri empirici di Scrum? Diamogli un\u0026rsquo;occhiata più da vicino!\nTrasparenza A quanti di voi è capitato di dover lavorare in una condizione di non chiarezza su ciò che fosse necessario fare?\nImmagino non pochi!\nScrum 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.\nApplicare 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.\nChiunque 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.\nSolo in questo modo sarà possibile raggiungere quel livello di coordinazione tale da poter garantire il successo.\nLa trasparenza permette l’ispezione. L’ispezione senza trasparenza è fuorviante e genera spreco.\nIspezione 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.\nL\u0026rsquo;ispezione può essere eseguita per il prodotto, i processi, gli aspetti delle persone, le pratiche e i miglioramenti continui.\nAd esempio, il team mostra il prodotto al cliente in modo aperto e trasparente alla fine di ogni Sprint per raccogliere feedback preziosi.\nSe 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.\nParlando proprio di questa reazione del team a eventuali cambiamenti di rotta, veniamo a quello che è il terzo pilastro..\nAdattamento 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?\nE 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.\nIn 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!\nRisorse 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.\nIl suo campo di specializzazione è l\u0026rsquo;audio, e non a caso si definisce un AI Audio Engineer: ma come diventarlo?\nOggi 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!\nDescriviti 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).\nIn 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.\nMi 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.\nQuesto 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!\nAll’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.\nAltro 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-.\nSapevi che diverse banche stanno valutando o hanno adottato dei biomarkers basati sul riconoscimento vocale per gestire i propri conti?\nQual è 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/\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. 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.\nStare 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.\nCome 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.\nNon bisogna dare per scontato che è necessaria tantissima applicazione sulla materia, leggere paper e pubblicazioni e provare anche a reimplementare i prototipi proposti nei paper.\nLe 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.\nIn 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.\nParlando 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! ;)\nConosci il tema gender gap in ambito STEM? Se sì, come fare per superarlo? Parliamo di un problema ENORME.\nConosco 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.\nFacciamo 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à.\nTi 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.\nIo 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.\nContatti 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à.\nOggi parliamo di come configurare Wordpress su OpenShift 4.9, con pochi, semplici step!\nProcedimento 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!\nA 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):\nWordpress 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:\nConfigurazione delle informazioni generali di Wordpress\nInoltre, 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.\nConfigurazione delle credenziali di accesso di Wordpress\nInoltre, è 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.\nConfigurazione del database esterno di Wordpress\nPer 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-.\nConfigurazione del service di Wordpress\nSe 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.\nConfigurazione di un database MariaDB interno al namespace\nCome ultimo step, è possibile scegliere il dimensionamento dello storage per i contenuti e i media statici di Wordpress. Per impostazione predefinita, verranno allocati 10Gi:\nDimensione dello storage utilizzando da Wordpress\nDopo 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.\nIl Deployment di Wordpress ha bisogno di un Service Account per avviarsi\nIl pod di MariaDB va in CrashLoopBackOff\nA questo punto, scaliamo a zero il Deployment di MariaDB e di Wordpress e creiamo un Service Account usando i comandi seguenti:\noc 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\nOra i due Deployment possono essere nuovamente scalati a una replica e dovrebbero essere in esecuzione in un attimo!\nTip 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:\nDefinizione della route\nA questo punto, sarai in grado di accedere alla tua installazione di Wordpress su OpenShift!\nEsempio 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.\nCosa cambia in questa nuova versione? Come effettuare l\u0026rsquo;upgrade? Diamo subito un\u0026rsquo;occhiata da vicino a Ionic 6!\nPremessa 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!\nLe 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.\nNuovi 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).\nQuesti funzionano grazie al componente ion-accordion, il quale ha una serie di animazioni che ne consentono le differenti transizioni in apertura e chiusura:\nEsempio 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!\nEsempio 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.\nInvece, 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.\nLe 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.\nIl team di Ionic sta tenendo d\u0026rsquo;occhio Material You e attende che vengano rilasciate ulteriori indicazioni da Google.\nRouting 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.\nimport { 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!\nInvece, se hai aggiornato Angular, per fare l\u0026rsquo;upgrade anche di Ionic alla versione 6, esegui questo comando:\nnpm install @ionic/angular@6 Se invece usi anche il server Angular per testare la tua applicazione in locale, esegui questo:\nnpm 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:\nnpm 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:\nvue upgrade --next Per fare l\u0026rsquo;upgrade all\u0026rsquo;ultima versione di Ionic 6, vai con il comando seguente:\nnpm install @ionic/vue@6 @ionic/vue-router@6 Aggiornare il codice E se avessi un\u0026rsquo;applicazione in una versione vecchia di Ionic?\nIl 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.\nPer rendere invece il codice adeguato alla versione 6, trovi tutte le indicazioni sui componenti aggiornati in questo link.\nQuesto 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.\nMa 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.\nAnonymous alza il tiro. Diffusi 40 mila documenti attribuiti all’Istituto di Sicurezza Nucleare di Mosca\nIn 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.\nI 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:\nNon 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.\nRivendicazione dell\u0026rsquo;attacco da parte di Anonymous all\u0026rsquo;agenzia di stampa TASS\nMessaggio originale pubblicato sul sito della testata (tradotto)\nL\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.\nQuesti sono esempi di defacing: quando un sito viene alterato o, letteralmente, sfregiato, si parla di un attacco di defacement.\nSi 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.\nUn 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:\nRussian 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.\nQuesto 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.\nA quel punto, si ha completo accesso ai componenti, consentendo l\u0026rsquo;analisi e il reverse engineering di hardware, CPU e firmware.\nNon solo: tramite attacchi come il man-in-the-middle, sfruttando il sistema di comunicazioni tra queste postazioni e il sistema centrale.\nCiò 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.\nDoS è 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.\nIn questa serie di attacchi, molto probabilmente si sta attuando un attacco DDoS, che significa \u0026ldquo;Distributed DoS\u0026rdquo;.\nQuesto 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.\nUn esempio di attacco DDoS è stato quello contro i siti governativi russi, che sono stati i primi presi di mira durante questa cyberguerra:\nTweet di Anonymous dove dichiarano di aver attaccato diversi siti governativi russi\nSito kremlin.ru offline\nLeggere 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.\nLa 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;.\nIl 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.\nLe 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;.\nQueste 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.\nGli utenti si chiedono come sostenere attivamente questa guerra informatica\nLa 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).\nAttraverso 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.\nSe 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”.\nMa è estremamente stimolante e mi piace poter guardare il mio interlocutore con apprensione e spiegargli cosa faccio.\nMi 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.\nIn 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.\nLa 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.\nQueste sono alcune delle analisi che faccio nel mio lavoro, che in questo momento riguarda i prezzi dei prodotti agroalimentari.\nLa 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.\nA proposito: mi capita di lavorare sia in team sia in solitaria.\nQual è 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.\nPersonalmente, 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ì.\nParlando 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.\nPer 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.\nQuando 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.\nQualcuno 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.\nContatti 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.\nIn 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!\nOggi ci sarà Roberta Corsini a raccontarci la sua avventura in questo mondo complesso, ma mai noioso!\nDescriviti in 100 parole A****mbiziosa,creativa e_sempreallaricercadinuovistimoli_.\n Sequalcosa miappassiona, mici butto a capofitto.\n Sonoappassionataditecnologiaedurantegliultimiannimisonoavvicinataalmondo 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.\nAmotrovarmiincontestidinamiciesfidantiperchévogliosempremettermiallaprovae uscire dalla mia comfort zone.\nNessunoosi ostacolare lamiaindipendenzaelamialibertà,potrebbepagarlacara! :D\nIlmiooutfitpreferito? Giacca doppiopetto, camicia, pantaloneasigaretta,cravattaeunbel paio di decolleté!\nIn cosa consiste il ruolo di Digital Business Integration Analyst? UnaDigitalBusinessIntegrationAnalystsioccupadella digitalizzazione dei processi aziendali delcliente,manonsolo.\n Nelmiocaso,lamiamansioneprevededitrasferire eaggregare dati, provenienti da una tecnologia sorgente, adundatabasefinale, medianteflussi creaticon linguaggi di programmazione come python e pyspark.\nLeattivitàsono definitee pianificate inbasealle richieste,esigenze eprioritàdel cliente.Perciò, èimportanteinquestolavorosaper comprendereafondo cosafaree come agire per poter implementareciòchevienerichiesto.\nNormalmentesilavorainteam,mapuòcapitareanchedilavorareinsolitaria. Intal caso, èimportantesapersi organizzare perpoter rispettare lescadenze,anchein caso di un carico di lavoro elevato.\n UnaDigitalBusinessIntegrationAnalystdevesempreesserepronta adaffrontare nuove sfide, come trovare eadottare nuove soluzioniaproblemi nonroutinari.\n QualèlasoftskillpiùimportantechedevepossedereunaDigitalBusiness Integration Analyst? UnaDigitalBusinessIntegrationAnalyst devepossedere curiositàe capacitàdi apprendiment__o. Più si èalcorrentediciòchesipuòfareconglistrumentia disposizione più sarà possibile gestire problemi futuri o essereingradoditrovare soluzioni alternative e più efficienti.\nPossedereanche capacitàdiproblemsolvingeunabuonadosedi flessibilitàe resistenza allo stress,nonsarebbemale:D\nLamaggiorpartedinoiutilizzaisocialperparlaredeiproprisuccessi,malarealtàè 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. Ilmiopiùgrandefallimento èstatopens****aredinonessereall’altezza dellavorochemi apprestavo a svolgere.\nDuranteiprimimesi,misentivoinsicura, avevo bisogno del supporto di altri colleghi epensavo dinonessereingradodicapire edeseguire quello che mivenivarichiesto.\n Ho passatonottiinsonni cercando dicapire sefosse il posto giusto per me.\n Poi, conilpassaredellesettimane, hocapitochebisognadarsi ilgiustotempo.Il mondo del lavoro è complesso e ogni giorno ci pone davanti a sfide diverse. Bisogna rischiare e avere ilcoraggiodi abbatteregliostacoli, soprattuttonelcasodichicome me escedallasuazonadicomfort.\n Solo inquestomodo sipuòavere lapossibilità di migliorare le competenze tecniche eabbatterel’insicurezza.\n Seoggisonoquellachesono,lodevoancheaimieicolleghi chemihanno fatto\nsentirepartedelgruppo sin dal mio primogiorno dilavoro.\nComefareperdiventareunaDigitalBusinessIntegrationAnalyst? Inizialmente, nonsonorichiestirequisitiparticolari. Lacosafondamentaleèsaper dimostrare di poter apprenderee studiare inmodoautonomo, senzaaspettareche siano altri a dirti didoverlofare.\nInoltre,coltempo,èimportante prendere certificazioni, nonsoloper poterattestarelecompetenzeacquisite,maancheper poter dimostrare all’azienda per cui si lavora di essere in grado di portare valore aggiunto.\nParlando di successi, qual è il tuo prossimo obiettivo? Quale ruolo vorresti ricoprire entro i prossimi 3 anni? Ilmioprossimoobiettivoè quellodi sviscerare ilpiùpossibiletuttoquello che concerne il mondo della programmazione. Mipiacerebbetantosapernedipiù e sentirmi più confident nelprogrammare.\nPerquantoriguardaiprossimi3anni, spero inunapromozionee dipoter passareal livello successivo, quindidiventareunaDigitalBusinessIntegration…Consultant!\nConosci 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.\nL’azienda per cui lavoro e che opera nel settore IT, infatti, stafavorendo l’assunzione di donne.\nHa 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": ["agile","design-dev",], "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.\nParliamo (di) AGILE e di come questa metodologia può aiutare non solo gli sviluppatori, ma tutte le persone coinvolte nella produzione e rilascio del software!\nIntro 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;\nFino 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.\nNulla di così strano in realtà.. Ma quale può essere uno svantaggio in una metodologia così rigida eppur tanto utilizzata?\nLa 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.\nImmaginate 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.\nE la cosa più interessante di questa suddivisione sta proprio nel rilascio di un software funzionante già al termine della prima iterazione!\nAlla base di una metodologia così innovativa, abbiamo il “Manifesto Agile” che consiglio caldamente di leggere, basato su 7 principi fondamentali.\nI 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.\n2. 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;\nQuando sentiamo parlare di Agile, si sente spesso nominare anche Scrum.\nCos\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.\nNon si tratta solo di conoscere e saper sfruttare i social, ma di tradurre questa attività in migliore visibilità, brand awareness e aumento del fatturato.\nAnnalisa 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!\nDescriviti 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.\nParlo 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.\nAmo 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”.\nAmo tutto ciò che è natura e gli animali, con cui provo a stabilire una comunicazione.\nIn 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.\nDopo 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.\nIl percorso accademico mi ha fatto scoprire la mia creatività, la mia passione per la comunicazione e la pubblicità.\nSono 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.\nMi 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.\nNon 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.\nIl 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.\nPartendo 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.\nQuindi redigo il business plan, il piano editoriale e il calendario editoriale, essenziali per ottimizzare il tutto.\nOltre 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.\nInoltre mi piace offrire consulenza sia ai social media marketing manager junior che a chiunque voglia aprirsi all’educazione digitale.\nQual è 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.\nLavorando 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.\nQuindi 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”.\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. Pensa che uno dei motivi per cui ho scelto questo lavoro è che ti permette di imparare dagli errori, un po\u0026rsquo; come nella vita.\nIl 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.\nQuello 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.\nIn 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.\nPer 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.\nPosso dire che per me, ad oggi, più che un fallimento è stata una lezione importante, nonostante abbia comportato delle conseguenze importanti.\nCome 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.\nLa 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.\nIn 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.\nPossono certamente essere utili per approfondire determinati argomenti o funzionalità, ma non insegnano all’atto pratico come si lavora nel mondo reale.\nAvere delle basi tecnologiche è un’altra prerogativa essenziale, così come essere aperti di mentalità e stabilire delle ore dedicate proprio all’aggiornamento delle tecnologie.\nIo 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.\nOggi 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.\nTra parentesi, conosco bravissimi professionisti che non sono laureati, quindi il percorso universitario non è un elemento indispensabile!\nLo 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.\nAcquisire 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.\nPossono 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!\nParlando 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.\nIn 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.\nLa 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.\nInoltre, 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.\nConosci 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.\nSi 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.\nQuesta campagna ha avuto un risultato positivo e infatti abbiamo ancora una buona percentuale di donne nel Governo e nella gestione della situazione pandemica.\nIn ambito STEM posso affermare che il gender gap è più evidente in alcune professioni rispetto ad altre.\nLa 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.\nA 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.\nCi 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","devops",], "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.\nQuindi, 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.\nIniziamo con l\u0026rsquo;articolo Java Servlet con Docker!\nPanoramica 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!\nDi 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.\nimport 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.\nQuesta 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!\nLe 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.\nimport 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.\nIl 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.\nLa versione di JRE è la 8 e utilizza OpenJDK; in questo caso, questa immagine è la_slim-buster_.\nQuesto vuol dire che n_on contiene i pacchetti comuni contenuti nel tag predefinito_ e contiene solo i pacchetti minimi necessari per eseguire Tomcat.\nQuesta immagine è perfetta se lavoriamo in un ambiente di sviluppo e vogliamo ridurre al minimo lo spazio occupato dall\u0026rsquo;immagine!\nDetto 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.\nIn 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:\nFROM 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:\ndocker 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.\nRequisito fondamentale: essere curiosi e aver voglia di studiare ogni giorno!\nDescriviti 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.\nIn 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.\nIn 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.\nMa 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.\nQuindi 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.\nQual è 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.\nCredo 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..\nPerchè 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!\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 avresti potuto scrivere cosa più vera..\nAl 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.\nTornando 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.\nE 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.\nTutto 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! 😜\nCome 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.\nInfatti è 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.\nPrendi 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.\nDi 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!\nParlando 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.\nAver 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..\nHo 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!\nConosci il tema gender gap in ambito STEM? Se sì, come fare per superarlo? E’ sicuramente un tema delicato.\nUn grande scoglio da superare a mio avviso e in base ai tanti articoli letti, si trova al momento dell’ingresso nel mercato del lavoro.\nDati 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.\nSi 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.\nPer cogliere poi le opportunità offerte dalla rivoluzione digitale, servono ovviamente professionisti con competenze STEM.\nIn 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.\nCi 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!\nContatti 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!\nIn questo breve articolo, vedremo passo dopo passo come reimpostare la password di PostgreSQL in Windows.\nProcedimento Per qualche motivo, dopo aver installato PostgreSQL, to capitasse di dimenticare la password dell\u0026rsquo;utentepostgres, questi sono i passi da seguire.\nPostgreSQL 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.\nNon a caso, hba significa host-based authentication!\nAttenzione 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.\nPer 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.\nPer prima cosa, andremo a fare il backup del file pg_hba.conf copiandolo in una posizione diversa o semplicemente rinominandolopg_hba.conf.bk\nPath del file pg_hba.conf per PostgreSQL13\nAdesso 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.\nFile pg_hba.conf prima della modifica\nFile 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.\nQuesta 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.\nDiamo quindi il benvenuto a Martina Della Corte, Full-Stack Developer per TIQQE!\nDescriviti 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.\nQual è 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.\nSempre 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.\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 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.\nSe si frequenta un tradizionale percorso universitario i.e. ingegneria informatica, non c’è probabilmente bisogno di molto altro per poter diventare full-stack.\nSe 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.\nConosci 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.\nIl 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!\nIntro 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.\nNon a caso, la sentiment analysis è spesso associata all’opinion mining: in che modo possiamo misurare il giudizio degli utenti su una certa tematica?\nI 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.\nNon 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.\nGestire 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.\nSe 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.\nRiconoscendo che il sentimento è intrinsecamente legato alla lingua e alla cultura, riconoscere la lingua è un prerequisito fondamentale per questo tipo di analisi.\nSenza identificare la lingua di un post sui social media, un algoritmo non sarà in grado di decifrare le informazioni sul giudizio!\nQuesta 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.\nDetto 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;\nMa come fare in italiano?\nClassificare 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.\nPer 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.\nSe, 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.\nAnche 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.\nQuesto evidenzia un problema: esistono dei casi in cui delle parole negative vengano usate in un contesto positivo.\nQuindi, 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.\nNella 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.\nIn 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).\nIn 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.\nEsempio 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.\nIn prima battuta, consideriamo quindi il seguente dataset:\ntrain2 = [(\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!\nA 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:\ndictionary = 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:\nNella prima frase sono presenti la parola \u0026ldquo;stata\u0026rdquo; e \u0026ldquo;bella\u0026rdquo;, che quindi vengono segnate come \u0026ldquo;True\u0026rdquo;\nA 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.\nclassifier = 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:\ntest_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.\nRisorse 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.\nPer 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!\nA te il palco🎙️\nDescriviti in 100 parole. Ciao Serena e ciao a tutte le lettrici e lettori 😀!\nHo 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.\nUn’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!\nEd 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.\nSe troverai interessanti le mie risposte, fai click qui 👉 www.innosans.it ed entriamo in contatto!\nIn 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!\nAnzi 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.\nParlare 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.\nSpieghiamo 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..\nMolto spesso questi gruppi nascono in maniera naturale e spontanea, altre volte sono legate ad un progetto aziendale.\nIn 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.\nMa perché oggi si parla sempre di più di Community come attività per cui è necessario un mestiere come quello del Community Manager?!\nCon l’avvento della tecnologia e dei mezzi di comunicazione e poi di Internet è stato sempre più facile comunicare!\nLe 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.\nNon 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.\nInoltre, ha reso semplicissimo rimanere in contatto e continuare a relazionarsi anche dopo. Sono nate le Community nell’accezione che conosciamo oggi.\nUna 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.\nIl 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à.\nSono solito definire il Community Manager che lo fa per passione e non per lavoro come “Community Leader”.\nIn 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 😆.\nNegli anni mi sono costruito un modello del lavoro di Community Manager su cui si basa la mia attività e che sto cercando di affermare.\nEsso 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).\nMolto 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!\nQual è la soft skill più importante che deve possedere un Community Manager? Te ne posso citare almeno due?! 😝\nLa prima è l’EMPATIA, cioè la capacità di immedesimarsi negli altri comprendendone punti di vista, pensieri e sentimenti.\nGestire una Community, infatti, vuol dire avere a che fare continuamente con le Persone.\nUna 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.\nLa 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.\nMi 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.\nProprio 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.\nIndubbiamente 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.\nIl lavoro del Community Manager sicuramente espone ad un contesto in cui, mettendosi con la giusta predisposizione, si possono accrescere queste qualità molto velocemente.\nQuando 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!\nAnche 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 😉.\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 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!\nQuello 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.\nPersonalmente 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 😀.\nA 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 😉.\nPiù 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.\nEcco, 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.\nQuello 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.\nComunque, 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!\nVedo 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.\nCome potranno essere pienamente di supporto, entrare a fondo nelle questioni, stimolare il dialogo con i membri della Community che gestiscono?!\nAl 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.\nPenso, 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ì.\nMan 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.\nE così ci saranno tante bimbe e bimbi che diranno: “Da grande voglio fare la/il Community Manager!”.\nOggi 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.\nIl 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 😉).\nA 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!\nNon 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 😉.\nIn 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.\nInoltre, penso che la Community non sia una parte di Marketing o Comunicazione ma piuttosto che sia una branca a sé stante.\nMi 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.\nInvece, 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 😛).\nInfine, 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 💪.\nParlando 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.\nNegli 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.\nAll’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.\nQuindi 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.\nInoltre, sto portando avanti due grossi progetti: The Communities Bay e MyCertCloud.\nThe 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.\nAbbiamo bisogno del vostro supporto! Vi invito a seguire The Communities Bay su www.thecmmbay.com/seguici 🙌\nMyCertCloud (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.\nCe la sto mettendo tutta affinché nei prossimi tre anni MyCertCloud da “startup” self-run e self-funded possa diventare una vera Azienda 💪.\nConosci 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!\nIo stesso che organizzo tanti incontri online e di persona, eventi e conferenze, registro di continuo questo divario.\nLa 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.\nFortunatamente 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.\nDobbiamo 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.\nPer 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.\nSono 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 💪👏.\nContatti 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?\nRiuscire 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.\nCome farlo? Vediamo un esempio pratico su come quantificare la distanza tra due stringhe!\nIntro 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.\nSi tratta di un\u0026rsquo;attività fondamentale nel campo dell\u0026rsquo;information retrieval, per topic analysis e sentiment analysis.\nOvviamente, 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.\nIn 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.\nCome 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à.\nAbbiamo 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.\nCosa 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.\nUn approccio comunemente usato per abbinare documenti simili si basa sul conteggio del numero massimo di parole comuni tra i documenti.\nMa 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.\nCome metrica di somiglianza, in che modo la somiglianza del coseno differisce dal semplice conteggio di parole uguali?\nQuando 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.\nCodice 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.\nPassiamo al codice!\nCome 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à:\nfrom 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!\ndef 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.\nAndiamo 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:\ndef 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.\nPer 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.\nPer 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:\nsentence1 = \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!\nCodice 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.\nIn 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.\nDescriviti 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.\nPerò, 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ù).\nMi 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.\nPrima 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.\nIn 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.\nQuello 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.\nQual è 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.\nQuello 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.\nIl 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.\nCome 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.\nParlando 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..\nConosci 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.\nUn problema che però esiste da anni. Secondo la mia esperienza, è importante che vada prima arginato il muro culturale che c’è in Italia.\nFortunatamente 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.\nCome 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.\nGrazie 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.\nQuesto 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\/howto\/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;.\nParliamo di gender gap in ambito STEM.\nIntro 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;.\nAll\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;.\nAll\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.\nQuando 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ò.\nHo 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;.\nLo so. Sembra che la sfortuna abbia trovato una vittima perfetta, ma non lo sono né mi sono mai considerata tale.\nQueste 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.\nQuante 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;\nE 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;.\nAll\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.\nAll\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.\nMi sono sentita dire, in tempi non recenti, che \u0026ldquo;peccato essere così intelligente, ma così bruttina\u0026rdquo;.\nSia chiaro: condivido queste storie non per vergogna e per cercare pietà, né per fare la vittima, ma per aumentare la consapevolezza e la comprensione.\nMi è 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à.\nLa 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;\nE 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.\nQuindi, 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.\nInfondere 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.\nCome fare? Se conosci un\u0026rsquo;opportunità di lavoro che sarebbe perfetta per qualcuno, condividila.\nSe conosci un podcast in cerca di un\u0026rsquo;ospite, fai il suo nome.\nSe 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.\nIl 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.\nEduca 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.\nAdoro 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 a 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.\nCi 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;\nIstituire 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.\nPuò 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?\nNon 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.\nSebbene 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.\nLa 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.\nTantissimi studi sul sistema scolastico in Europa (e non solo -vedi \u0026ldquo;Risorse utili\u0026rdquo;) 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.\nIn 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.\nConclusione Per coloro che si potrebbero essere preoccupati o preoccupate per alcuni degli aneddoti che ho condiviso sopra, vi avviso: non ce n\u0026rsquo;è bisogno.\nNonostante 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.\nSono 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-.\nSia 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.\nIn 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.\nMoltissime 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.\nAnche 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 Donne e STEM: un divario da colmare Stereotype Threat Among Schoolgirls in Quasi-Ordinary Classroom Circumstances Female Role Models: Protecting Women’s Math Test Performance When Do Female Role Models Benefit Women? The Importance of Differentiating Recruitment From Retention in STEM Corrigendum: The Gender-Equality Paradox in Science, Technology, Engineering, and Mathematics Education Community Django Girls FuzzyBrains SheTech Italy TechPrincess SheSharp/ CodeToChange GrUSP ", "url": "https:\/\/theredcode.it\/howto\/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?\nBasta 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!\nScopriamo 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!\nPresentatevi 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.\nSimone 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.\nLuca 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.\nCos’è 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.\nGruppetto App permette di organizzare un’uscita di allenamento e di chiedere a tutti gli amici se vogliono unirsi.\nInoltre 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 sceltoFluttercome framework di sviluppo mobile per essere veloci a garantire i nostri utenti novità ed efficienza.\nLa scalabilità, per aumentare la potenza infrastrutturale, ci viene garantita da un architettura a microservizi costruita in**.NET** e chi meglio diKubernetesper organizzare ed ospitare i nostri servizi.\nCome database abbiamo scelto un banca dati documentale comeRavendbper 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.\nInoltre 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.\nCome 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.\nQuesto 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.”\nSimone “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.\nInsieme 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. “\nDanilo “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.\nIl 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 delDesign Thinkinge applicando una metodologiaUser-centered.\nAbbiamo indagato ibisognidegli utenti attraverso un questionario online, che ci ha permesso di scoprire le principali motivazioni che avrebbero spinto i ciclisti ad usare l’app.\nAnalizzando i risultati dellasurvey, abbiamo definito lepersonasper rappresentare le principali tipologie di utenti e successivamente individuato irequisitidell’applicazione.\nLa realizzazione dei wireframe ha stabilito la struttura e la gerarchia degli elementi, per poi passare al design dell’interfaccia graficavera e propria seguendo unDesign System coerente.\nÈ arrivato poi il momento di valutare l’usabilitàdell’app: siamo andati in un negozio di biciclette a Milano pertestare l’app con gli utenti reali. Grazie alla valutazionecooperativa, abbiamo raccolto feedback e nuovi suggerimenti in un processo dicostante 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.\nQuali 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!\nContatti www.gruppetto.bike\n", "url": "https:\/\/theredcode.it\/voglio-diventare-un...-mobile-developer\/" }, "https:\/\/theredcode.it\/aws\/aws-lambda-e-documentdb-con-python\/": { "title": "AWS Lambda e DocumentDB con Python", "tags": ["aws","documentdb","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.\nE tu che aspetti? Partiamo subito con questo tutorial su AWS Lambda e DocumentDB con Python!\nIntro AWS Lambda consente di eseguire codice senza dover effettuare il provisioning né di dover gestire alcun server.\nIl 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.\nAWS 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%.\nUn 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.\nQuando 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.\nCreazione 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:\nConfigurazione del cluster DocumentDB\nAndiamo quindi a definire un utente e una password per il master seguendo le indicazioni fornite nel tab dedicato all\u0026rsquo;Authentication:\nAutenticazione a DocumentDB\nNella 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.\nNon 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.\nPer 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.\nLa connessione DocumentDB non può essere stabilita perché la nostra funzione Lambda e il cluster DocumentDB devono risiedere nello stesso VPC.\nPer 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).\nConfigurazione della rete di DocumentDB\nUna 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:\nStato delle istanze del cluster DocumentDB\nA questo punto, non ci resta che prendere la stringa di connessione al cluster e utilizzarla all\u0026rsquo;interno delle lambda per collegarci!\nPer 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:\nNOMECLUSTER-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!\nDefinizione 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.\nCreazione di una funzione Lambda\nIn questo caso, andiamo quindi a creare una Lambda da zero, specificando qual è il linguaggio da utilizzare.\nAdesso, selezioniamo Python: andremo a creare delle funzioni lambda che ci permettano di eseguire delle operazioni come inserimento, ricerca o cancellazione sul database di DocumentDB.\nPer 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.\nAttenzione: 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.\nCome farlo? Per creare uno zip con le librerie, sarà sufficiente scaricarle utilizzando pip, specificando la cartella di destinazione dove andarle a salvare:\npip install pymongo -t /dest/folder Creazione di un livello per AWS Lambda\nPartiamo 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:\nimport 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.\nNota 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:\ncoll.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.\nL\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.\nPer 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.\nimport 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():\nres = 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.\nimport 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\/aws-lambda-e-documentdb-con-python\/" }, "https:\/\/theredcode.it\/tags\/documentdb\/": { "title": "documentdb", "tags": [], "content": "", "url": "https:\/\/theredcode.it\/tags\/documentdb\/" }, "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.\nPer 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!\nDescriviti in 100 parole. Vent’anni fa mi sono laureata in filosofia: volevo fare la critica cinematografica, ero innamorata della filosofia del linguaggio.\nDopo 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.\nIn 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.\nSupervisiono 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).\nA 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.\nQual è 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.\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 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.\nPerò non me ne faccio più una malattia. Lo valuto come un evento naturale, una ruota forata in un lungo percorso: semplicemente, succede.\nCome 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).\nLa 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.\nParlando 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.\nNei 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.\nConosci 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.\nAbbiamo 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?\nIn 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.\nCos\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.\nIn un solo QRcode possono essere contenuti fino a 7.089 caratteri numerici o 4.296 alfanumerici, al contrario dei tradizionali codici a barre.\nEsempio 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?\nIl codice è estremamente semplice. Per prima cosa, installiamo la libreria qrcode con il seguente comando:\npip install qrcode Dopodiché, andiamo ad importarla tramite il seguente codice:\nimport qrcode A questo punto, possiamo creare il codice QR con la seguente istruzione:\nqr = 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).\nIl 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.\nIl 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.\nSe 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.\nfill_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.\nUna volta eseguito il codice, l\u0026rsquo;ultima riga farà sì che il QR code generato sia salvato all\u0026rsquo;interno della cartella del progetto.\nSemplice, no?\nCome estrarre da un QRCode Abbiamo visto come inserire delle informazioni all\u0026rsquo;interno di un QRCode, ma vediamo come estrarle.\nPer farlo, avremo bisogno di installare due pacchetti, ossia Pillow e pyzbar tramite il seguente comando:\npip install pyzbar pip install pillow Una volta importate le librerie, potremo procedere a fornire l\u0026rsquo;immagine da decodificare, come mostrato nella prima riga.\nfrom 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?\nQuesto 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.\nDal momento che si tratta di una lista, prendiamo il primo oggetto e prendiamo la proprietà data della tupla risultante:\ndata = data[0].data print(data.decode(\u0026#34;utf-8\u0026#34;)) Un gioco da ragazze!\nTi 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..\nIl suo essere camaleontico ed entusiasta è fondamentale per svolgere questo lavoro!\nNessuno spoiler: vediamo come diventare un DevOps Engineer.\nDescriviti 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.\nHo 32 anni, inizio 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.\nNei 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.\nMi piace - in ordine sparso - correre, leggere e programmare.\nLa 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.\nNel mentre, 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.\nIn 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.\nIl 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).\nLe 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.\nQual è 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.\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. 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.\nIl 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”.\nSeguire certificazioni è uno dei percorsi - oltre a sperimentare, fare pratica e errori! - per rimanere sempre sulla cresta dell’onda tecnologica.\nInvestire 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.\nParlando 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.\nTale 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.\nConosci 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.\nCredo, 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.\nContatti 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.\nInoltre, 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!\nDescriviti 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.\nLa 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.\nPer 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.\nUna volta approvato il mockup si passa allo sviluppo vero e proprio, utilizzando la tecnologia più opportuna.\nTendenzialmente 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.\nQuanto 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.\nAd 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).\nInvece 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.\nPer “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.\nPoi 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.\nPer 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.\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. 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.\nQuesto 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.\nInfatti 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.\nOra 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.\nCome 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.\nIo 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.\nNel mio tempo libero provo a fare dei re-design di siti che conosco, magari anche solo di sezioni che non trovo belle o ordinate. Ai