<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.9.2">Jekyll</generator><link href="https://abc.dottor.net/feed.xml" rel="self" type="application/atom+xml" /><link href="https://abc.dottor.net/" rel="alternate" type="text/html" /><updated>2022-12-07T15:47:50+00:00</updated><id>https://abc.dottor.net/feed.xml</id><title type="html">Blog di Andrea Dottor</title><subtitle>Pensieri liberi di una mente dispersa. Di codice, di parole, di persone...
</subtitle><author><name>Andrea Dottor</name></author><entry><title type="html">Podcast .NET in Pillole</title><link href="https://abc.dottor.net/2019/09/13/podcast-dotnet-in-pillole/" rel="alternate" type="text/html" title="Podcast .NET in Pillole" /><published>2019-09-13T00:00:00+00:00</published><updated>2019-09-13T00:00:00+00:00</updated><id>https://abc.dottor.net/2019/09/13/podcast-dotnet-in-pillole</id><content type="html" xml:base="https://abc.dottor.net/2019/09/13/podcast-dotnet-in-pillole/">&lt;p&gt;Nel corso degli anni, il modo di informarsi/imparare è cambiato drasticamente. Online troviamo ogni tipo di risorsa. I mezzi di comunicazione si sono evoluti. Avevo (e ho) ancora voglia di trasmettere quel (poco) che so, la mia esperienza.&lt;/p&gt;

&lt;p&gt;Ho iniziato con un blog, ho fatto qualche webcast e video su youtube, poi non ho più trovato stimoli per portare avanti la cosa. Vedere così tante risorse/corsi/articoli online su temi che avrei voluto trattare, mi ha fatto chiedere il perchè una persona dovrebbe seguire me.&lt;/p&gt;

&lt;p&gt;Passa il tempo, e riscopro i podcast. Onestamente li davo per morti già da tempo, ma invece scopro che la diffusione in Italia sta iniziando ora. Ed è per questo che mi sono detto che forse in questo mezzo di comunicazione posso trovare il mio spazio.&lt;/p&gt;

&lt;p&gt;Nasce così &lt;strong&gt;.NET in Pillole&lt;/strong&gt;!&lt;/p&gt;

&lt;!--more--&gt;

&lt;p&gt;Un podcast con cadenza settimanale dove discutere di argomenti generali (che vanno bene ad ogni sviluppatore), seguiti da qualche commento su articoli/tweet/post nuovi. Un modo diverso per rimanere quindi aggiornati.&lt;/p&gt;

&lt;p&gt;Sono al terzo episodio registrato. Mi accorgo che non ho ancora la naturalezza nel parlare davanti al microfono (e da solo), ma sono fiducioso che con il tempo arriverà.&lt;/p&gt;

&lt;p&gt;Durante le mie attività di consulenza mi accorgo che molti concetti che io do per scontato, non lo sono invece per molti, e saranno questi gli elementi di partenza. Molti non sentono la necessità di sapere come si sta evolvendo la tecnologia, ed ecco che seguendo il podcast, avrà modo di colmare questa lacuna. Nel nostro lavoro non possiamo mai stare fermi. Dobbiamo sempre sapere in che direzione andare.&lt;/p&gt;

&lt;p&gt;Quindi, ora non vi rimane che seguire il mio podcast nel canale/sito/piattaforma che preferite:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Spotify: &lt;a href=&quot;https://open.spotify.com/show/7jyoG6BBmzvScNOqSpVvQQ&quot;&gt;https://open.spotify.com/show/7jyoG6BBmzvScNOqSpVvQQ&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Spreaker: &lt;a href=&quot;https://www.spreaker.com/show/net-in-pillole&quot;&gt;https://www.spreaker.com/show/net-in-pillole&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Apple podcast: &lt;a href=&quot;https://podcasts.apple.com/it/podcast/net-in-pillole/id1478648398&quot;&gt;https://podcasts.apple.com/it/podcast/net-in-pillole/id1478648398&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Google podcast: &lt;a href=&quot;https://podcasts.google.com/?feed=aHR0cHM6Ly93d3cuc3ByZWFrZXIuY29tL3Nob3cvMzY4NTM0NC9lcGlzb2Rlcy9mZWVk&quot;&gt;https://podcasts.google.com/?feed=aHR0cHM6Ly93d3cuc3ByZWFrZXIuY29tL3Nob3cvMzY4NTM0NC9lcGlzb2Rlcy9mZWVk&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Youtube: &lt;a href=&quot;https://www.youtube.com/user/andreadottor/&quot;&gt;https://www.youtube.com/user/andreadottor/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;e datemi un feedback. Ditemi se l’episodio che avete ascoltato ha qualcosa che non va, o se vi è piaciuto. Sono nella strada giusta? Durano poco? Durano troppo? Di che cosa vorreste sentir parlare?&lt;/p&gt;

&lt;p&gt;Io mi sono messo in gioco. A voi non rimane altro che aiutarmi nel diffondere l’iniziativa.&lt;/p&gt;</content><author><name>Andrea Dottor</name></author><category term="Podcast" /><category term=".NET Core" /><category term="ASP.NET" /><category term="Community" /><category term="XE" /><summary type="html">Nel corso degli anni, il modo di informarsi/imparare è cambiato drasticamente. Online troviamo ogni tipo di risorsa. I mezzi di comunicazione si sono evoluti. Avevo (e ho) ancora voglia di trasmettere quel (poco) che so, la mia esperienza. Ho iniziato con un blog, ho fatto qualche webcast e video su youtube, poi non ho più trovato stimoli per portare avanti la cosa. Vedere così tante risorse/corsi/articoli online su temi che avrei voluto trattare, mi ha fatto chiedere il perchè una persona dovrebbe seguire me. Passa il tempo, e riscopro i podcast. Onestamente li davo per morti già da tempo, ma invece scopro che la diffusione in Italia sta iniziando ora. Ed è per questo che mi sono detto che forse in questo mezzo di comunicazione posso trovare il mio spazio. Nasce così .NET in Pillole!</summary></entry><entry><title type="html">Definire del contenuto di default nelle sezioni di un layout Razor</title><link href="https://abc.dottor.net/2019/06/14/aspnetcore-razor-default-content-for-section/" rel="alternate" type="text/html" title="Definire del contenuto di default nelle sezioni di un layout Razor" /><published>2019-06-14T00:00:00+00:00</published><updated>2019-06-14T00:00:00+00:00</updated><id>https://abc.dottor.net/2019/06/14/aspnetcore-razor-default-content-for-section</id><content type="html" xml:base="https://abc.dottor.net/2019/06/14/aspnetcore-razor-default-content-for-section/">&lt;p&gt;In un’applicazione ASP.NET Core vi potrà capitare la necessità di avere una porzione di codice html che dovrà essere differente solo in alcune pagine. Un esempio, l’area di amministrazione molto spesso ha un menu diverso dalle pagine pubbliche. Oppure una pagina potrebbe evare una sidebar con alcune immagini al posto del classico menu.&lt;/p&gt;

&lt;p&gt;Se già utilizzate ASP.NET Core, sapete benissimo che nel definire una sezione in una pagina di layout, è possibile indicare se questa sia obbligatoria o meno:&lt;/p&gt;

&lt;div class=&quot;language-cs highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nf&quot;&gt;@RenderSection&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;Scripts&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;required&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;!--more--&gt;
&lt;p&gt;Ma questo implica che:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;required: true&lt;/strong&gt; –&amp;gt; tutte le pagine devono definire tale contenuto. Quindi anche il contenuto di default deve essere definito in ogni singola pagina (o centralizzato in una partial, comunque inserita in ogni pagina)&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;required: false&lt;/strong&gt; –&amp;gt; alcune pagine definiscono il contenuto della sezione. Vuol dire che quella sezione potrà essere renderizzata o meno. Ma non avrà un contenuto di dafault dove non definita.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Esiste invece una terza strada, ma meno conosciuta.&lt;/p&gt;

&lt;h2 id=&quot;uso-di-issectiondefined&quot;&gt;Uso di IsSectionDefined&lt;/h2&gt;

&lt;p&gt;All’interno delle pagine Razor (sia View di MVC, sia Razor Pages) è presente il metodo &lt;strong&gt;IsSectionDefined&lt;/strong&gt; che permette di capire se una sezione è stata ridefinita o meno, permettendo di scrivere del codice simile al seguente:&lt;/p&gt;

&lt;div class=&quot;language-html highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nt&quot;&gt;&amp;lt;ul&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;navbar-nav flex-grow-1&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
    @if (IsSectionDefined(name: &quot;Menu&quot;))
    {
        @RenderSection(name: &quot;Menu&quot;)
    }
    else
    {
        &lt;span class=&quot;nt&quot;&gt;&amp;lt;li&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;nav-item&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
            &lt;span class=&quot;nt&quot;&gt;&amp;lt;a&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;nav-link text-dark&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;asp-area=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;asp-page=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;/Index&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;Home&lt;span class=&quot;nt&quot;&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;nt&quot;&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;nt&quot;&gt;&amp;lt;li&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;nav-item&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
            &lt;span class=&quot;nt&quot;&gt;&amp;lt;a&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;nav-link text-dark&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;asp-area=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;asp-page=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;/Privacy&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;Privacy&lt;span class=&quot;nt&quot;&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;nt&quot;&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
    }
&lt;span class=&quot;nt&quot;&gt;&amp;lt;/ul&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Ecco quindi il vantaggio di questa tecnica: centralizzare il rendering di default in un unico punto, facilitando quindi la manutenzione.&lt;/p&gt;

&lt;p&gt;Links:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://docs.microsoft.com/en-us/aspnet/core/mvc/views/layout?view=aspnetcore-2.2&quot;&gt;Layout in ASP.NET Core&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://haacked.com/archive/2011/03/05/defining-default-content-for-a-razor-layout-section.aspx/&quot;&gt;Defining Default Content For A Razor Layout Section&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content><author><name>Andrea Dottor</name></author><category term="ASP.NET" /><category term="Razor" /><summary type="html">In un’applicazione ASP.NET Core vi potrà capitare la necessità di avere una porzione di codice html che dovrà essere differente solo in alcune pagine. Un esempio, l’area di amministrazione molto spesso ha un menu diverso dalle pagine pubbliche. Oppure una pagina potrebbe evare una sidebar con alcune immagini al posto del classico menu. Se già utilizzate ASP.NET Core, sapete benissimo che nel definire una sezione in una pagina di layout, è possibile indicare se questa sia obbligatoria o meno: @RenderSection(&quot;Scripts&quot;, required: false)</summary></entry><entry><title type="html">Link della settimana #13</title><link href="https://abc.dottor.net/2019/03/29/link-della-settimana-13/" rel="alternate" type="text/html" title="Link della settimana #13" /><published>2019-03-29T00:00:00+00:00</published><updated>2019-03-29T00:00:00+00:00</updated><id>https://abc.dottor.net/2019/03/29/link-della-settimana-13</id><content type="html" xml:base="https://abc.dottor.net/2019/03/29/link-della-settimana-13/">&lt;p&gt;Esperimento fallito. Fare il post con i link della settimana è utile per permettere a chi non segue i social di avere un’idea delle ultime novità, ma dal lato opposto, un post a settimana nasconde completamente gli altri post &lt;em&gt;utili&lt;/em&gt; che potrebbero esserci in questo blog.&lt;/p&gt;

&lt;p&gt;Quindi devo trovare un sistema migliore. O creare una nuova voce di menu (ma non so in quanti poi la vedano), o magari far diventare questa rubrica in “Link del mese” (che al momento la trovo più fattibile). Avete idee o proposte?
&lt;!--more--&gt;&lt;/p&gt;

&lt;p&gt;Comunque, per questa settimana, ecco alcuni link:&lt;/p&gt;

&lt;h2 id=&quot;aspnet&quot;&gt;ASP&lt;span&gt;.NET&lt;/span&gt;&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.hanselman.com/blog/GettingStartedWithNETCoreAndDockerAndTheMicrosoftContainerRegistry.aspx&quot;&gt;Getting Started with .NET Core and Docker and the Microsoft Container Registry&lt;/a&gt;
    &lt;blockquote&gt;
      &lt;p&gt;It’s super easy to get started with .NET Core and/or ASP.NET Core with Docker. If you have Docker installed you don’t need to install anything to try out .NET Core, of course. […]&lt;/p&gt;
    &lt;/blockquote&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://rehansaeed.com/securing-asp-net-core-in-docker/&quot;&gt;Securing ASP.NET Core in Docker&lt;/a&gt;
    &lt;blockquote&gt;
      &lt;p&gt;Some time ago, I blogged about how you can get some extra security when running Docker containers by making their file systems read-only. This ensures that should an attacker get into the container somehow, they won’t be able to change any files. This only works with certain containers that support it however and unfortunately, at that time ASP.NET Core did not support running in a Docker container with a read-only file system. Happily, this is now fixed! […]&lt;/p&gt;
    &lt;/blockquote&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.jerriepelser.com/blog/modelstate-overriding-model-binding-aspnet-core/&quot;&gt;ModelState interfering with Model Binding in ASP.NET Core&lt;/a&gt;
    &lt;blockquote&gt;
      &lt;p&gt;In an application I am working on, I have a page where a user can invite other users to their account. This page has a simple form at the top allowing the user to invite a new user and then, below that, is a grid displaying the existing users.&lt;/p&gt;

      &lt;p&gt;I do not want to do full page post-back every time a user sends a new invitation, so I am making use of AJAX to handle posting the new user invitation form to my controller action. […]&lt;/p&gt;
    &lt;/blockquote&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;web--typescript--javascript&quot;&gt;Web / TypeScript / JavaScript&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://devblogs.microsoft.com/typescript/announcing-typescript-3-4/&quot;&gt;Announcing TypeScript 3.4&lt;/a&gt;
    &lt;blockquote&gt;
      &lt;p&gt;Today we’re happy to announce the availability of TypeScript 3.4! […]&lt;/p&gt;
    &lt;/blockquote&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.fastly.com/blog/announcing-lucet-fastly-native-webassembly-compiler-runtime&quot;&gt;Announcing Lucet: Fastly’s native WebAssembly compiler and runtime&lt;/a&gt;
    &lt;blockquote&gt;
      &lt;p&gt;Today, we are thrilled to announce the open sourcing of Lucet, Fastly’s native WebAssembly compiler and runtime. WebAssembly is a technology created to enable web browsers to safely execute programs at near-native speeds. It has been shipping in the four major browsers since early 2017. […]&lt;/p&gt;
    &lt;/blockquote&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://thomlom.dev/what-you-should-know-about-js-arrays/&quot;&gt;What you should know about JavaScript arrays&lt;/a&gt;
    &lt;blockquote&gt;
      &lt;p&gt;Let me make a bold statement: for loops are often useless and make the code hard to read. When it comes to iterating over an array, finding elements, sorting it or whatever you want, there’s probably an array method out there that you can use.&lt;/p&gt;

      &lt;p&gt;However, some of them are still not that known and used despite their usefulness. I’ll do the hard work for you by giving you the useful methods. Consider this article as your guide to JavaScript arrays methods.&lt;/p&gt;
    &lt;/blockquote&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;database&quot;&gt;Database&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://azure.microsoft.com/it-it/blog/azure-data-studio-an-open-source-gui-editor-for-postgres/&quot;&gt;Azure Data Studio: An Open Source GUI Editor for Postgres&lt;/a&gt;
    &lt;blockquote&gt;
      &lt;p&gt;Today we’re excited to announce preview support for PostgreSQL in Azure Data Studio. Azure Data Studio is a cross-platform modern editor focused on data development. It’s available for Linux, MacOS, and Windows. Plus, Azure Data Studio comes with an integrated terminal so you’re never far away from psql. […]&lt;/p&gt;
    &lt;/blockquote&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;altri&quot;&gt;Altri&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://medium.com/@herbcaudill/lessons-from-6-software-rewrite-stories-635e4c8f7c22&quot;&gt;Lessons from 6 software rewrite stories&lt;/a&gt;
    &lt;blockquote&gt;
      &lt;p&gt;A new take on the age-old question: Should you rewrite your application from scratch, or is that “the single worst strategic mistake that any software company can make”? Turns out there are more than two options for dealing with a mature codebase. […]&lt;/p&gt;
    &lt;/blockquote&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://auth0.com/blog/convert-windows-pc-to-linux-ubuntu-dev-environment/&quot;&gt;Convert Windows PC to Linux (Ubuntu)&lt;/a&gt;
    &lt;blockquote&gt;
      &lt;p&gt;Imagine for a moment that you’re stranded on a desert island. You’re a software developer and have been using Linux systems or an Apple Mac ever since you were old enough to type on a keyboard. Yet the only things that you were able to bring with you to your desert island was a Windows machine, and enough tea and biscuits to last a lifetime. Luckily the island already has an internet connection — what do you do?&lt;/p&gt;

      &lt;p&gt;Okay, you could just download Ubuntu and install it onto a Virtual Machine, but there is another way. Which as it happens, also involves installing Ubuntu… […]&lt;/p&gt;
    &lt;/blockquote&gt;
  &lt;/li&gt;
&lt;/ul&gt;</content><author><name>Andrea Dottor</name></author><category term="ASP.NET" /><category term="Typescript" /><category term="Docker" /><category term="Links" /><summary type="html">Esperimento fallito. Fare il post con i link della settimana è utile per permettere a chi non segue i social di avere un’idea delle ultime novità, ma dal lato opposto, un post a settimana nasconde completamente gli altri post utili che potrebbero esserci in questo blog. Quindi devo trovare un sistema migliore. O creare una nuova voce di menu (ma non so in quanti poi la vedano), o magari far diventare questa rubrica in “Link del mese” (che al momento la trovo più fattibile). Avete idee o proposte?</summary></entry><entry><title type="html">Link della settimana #12</title><link href="https://abc.dottor.net/2019/03/24/link-della-settimana-2019-12/" rel="alternate" type="text/html" title="Link della settimana #12" /><published>2019-03-24T00:00:00+00:00</published><updated>2019-03-24T00:00:00+00:00</updated><id>https://abc.dottor.net/2019/03/24/link-della-settimana-2019-12</id><content type="html" xml:base="https://abc.dottor.net/2019/03/24/link-della-settimana-2019-12/">&lt;p&gt;Questa settimana sono stato un po’ lontano dai vari social in quanto ero al &lt;a href=&quot;https://mvp.microsoft.com/summit&quot;&gt;Microsoft MVP Summit 2019&lt;/a&gt;…che per me è voluto dire di (volutamente) lasciare a casa il PC e dedicarmi totalmente alla sessioni e al cazzeggio (non capita tutti i giorni di essere dalle parti di Seattle).&lt;/p&gt;

&lt;p&gt;Ma ho comunque trovato un po’ di tempo per riportare in questo post alcuni articoli interessanti di questa settimana.
&lt;!--more--&gt;&lt;/p&gt;

&lt;h2 id=&quot;gaming&quot;&gt;Gaming&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://channel9.msdn.com/Shows/On-NET/Building-Games-with-MonoGame?WT.mc_id=ondotnet-twitter-cephilli&quot;&gt;Building Games with MonoGame&lt;/a&gt;
    &lt;blockquote&gt;
      &lt;p&gt;MonoGame is an Open Source implementation of the Microsoft XNA 4 Framework. It allows developers to create games for iOS, Android, MacOS, Linux, Windows, Xbox and PlayStation.&lt;/p&gt;

      &lt;p&gt;In this episode, Brian Peek comes on to talk to us about how to get started with MonoGame, and also show some interesting games that have been built with the framework. […]&lt;/p&gt;
    &lt;/blockquote&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://azure.microsoft.com/it-it/blog/achieve-more-with-microsoft-game-stack/&quot;&gt;Achieve more with Microsoft Game Stack&lt;/a&gt;
    &lt;blockquote&gt;
      &lt;p&gt;Microsoft is built on the belief of empowering people and organizations to achieve more – it is the DNA of our company. Today we are announcing a new initiative, Microsoft Game Stack, in which we commit to bringing together Microsoft tools and services that will empower game developers like yourself, whether you’re an indie developer just starting out or a AAA studio, to achieve more. […]&lt;/p&gt;
    &lt;/blockquote&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;aspnet-web&quot;&gt;ASP&lt;span&gt;.NET, Web&lt;/span&gt;&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://makingloops.com/visualizing-thin-controllers/&quot;&gt;Visualizing thin ASP.NET Controllers via SOLID Principles&lt;/a&gt;
    &lt;blockquote&gt;
      &lt;p&gt;You can explain a code smell like fat controllers until you’re blue in the face, but some things just click better with pictures.&lt;/p&gt;

      &lt;p&gt;And to celebrate the newly available Thin Controller Recipes, I’d like to examine a particularly troubling issue for many .NET developers. […]&lt;/p&gt;
    &lt;/blockquote&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.red-gate.com/simple-talk/dotnet/net-development/using-auth-cookies-in-asp-net-core/&quot;&gt;Using Auth Cookies in ASP.NET Core&lt;/a&gt;
    &lt;blockquote&gt;
      &lt;p&gt;Using cookie authorization in ASP.NET Core is seamless and flexible. In this article, Camilo Reyes explains why this might be a good choice for your next project and how to use the many options available. […]&lt;/p&gt;
    &lt;/blockquote&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/dmorosinotto/XE_Vue&quot;&gt;XE Session - Vue intro with Typescript 22-03-2019&lt;/a&gt; di &lt;a href=&quot;https://github.com/dmorosinotto&quot;&gt;Daniele Morosinotto&lt;/a&gt;
    &lt;blockquote&gt;
      &lt;p&gt;Slides - walk trough DEMO&lt;/p&gt;

      &lt;p&gt;I’ve create a step-by-step tutorial using GIT tag for every single commit, you can simple navigate the commit history, or try include this in your .gitconfig […]&lt;/p&gt;
    &lt;/blockquote&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://zimmergren.net/azure-container-instances-dotnet-core-api-application-gateway-https/&quot;&gt;Building a .NET Core API, host it in Azure Container Instances from a private Container Registry and enable HTTPS using Application Gateway&lt;/a&gt;
    &lt;blockquote&gt;
      &lt;p&gt;This post is about hosting a public .NET Core C# API inside of a container (ACI), whose image is pulled from a private container registry (ACR) - and enable secure transfer with HTTPS using Application Gateway. […]&lt;/p&gt;
    &lt;/blockquote&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;c-net&quot;&gt;C#, .NET&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://jeremylindsayni.wordpress.com/2019/03/11/using-async-await-and-task-whenall-to-improve-the-overall-speed-of-your-c-code/&quot;&gt;Using async/await and Task.WhenAll to improve the overall speed of your C# code&lt;/a&gt;
    &lt;blockquote&gt;
      &lt;p&gt;Recently I’ve been looking at ways to improve the performance of some .NET code, and this post is about an async/await pattern that I’ve observed a few times that I’ve been able to refactor. […]&lt;/p&gt;
    &lt;/blockquote&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://devblogs.microsoft.com/dotnet/net-core-container-images-now-published-to-microsoft-container-registry/&quot;&gt;.NET Core Container Images now Published to Microsoft Container Registry&lt;/a&gt;
    &lt;blockquote&gt;
      &lt;p&gt;We are now publishing .NET Core container images to Microsoft Container Registry (MCR). We have also made other changes to the images we publish, described in this post. […]&lt;/p&gt;
    &lt;/blockquote&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://devblogs.microsoft.com/visualstudio/using-newtonsoft-json-in-a-visual-studio-extension/&quot;&gt;Using Newtonsoft.Json in a Visual Studio extension&lt;/a&gt;
    &lt;blockquote&gt;
      &lt;p&gt;The ever popular Newtonsoft.Json NuGet package by James Newton-King is used throughout Visual Studio’s code base. Visual Studio 2015 (14.0) was the first version to ship with it. Later updates to Visual Studio also updated its Newtonsoft.Json version when an internal feature needed it. Today it is an integral part of Visual Studio and you can consider it a part of the SDK alongside other Visual Studio assemblies. […]&lt;/p&gt;
    &lt;/blockquote&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://devblogs.microsoft.com/visualstudio/visual-studio-extensions-and-version-ranges-demystified/&quot;&gt;Visual Studio extensions and version ranges demystified&lt;/a&gt;
    &lt;blockquote&gt;
      &lt;p&gt;Extension authors use visual Studio version ranges to specify what versions of Visual Studio their extensions support. A version range looks like this [14.0, 17.0) and specifies the minimum and maximum version of Visual Studio as well as if the edges are included or excluded. The syntax with mismatching braces may initially seem a bit odd and what exactly do those numbers refer to? Let’s unravel the mystery of the Visual Studio version ranges. […]&lt;/p&gt;
    &lt;/blockquote&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;ml&quot;&gt;ML&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://azure.microsoft.com/it-it/blog/microsoft-and-nvidia-bring-gpu-accelerated-machine-learning-to-more-developers/&quot;&gt;Microsoft and NVIDIA bring GPU-accelerated machine learning to more developers&lt;/a&gt;
    &lt;blockquote&gt;
      &lt;p&gt;With ever-increasing data volume and latency requirements, GPUs have become an indispensable tool for doing machine learning (ML) at scale. This week, we are excited to announce two integrations that Microsoft and NVIDIA have built together to unlock industry-leading GPU acceleration for more developers and data scientists. […]&lt;/p&gt;
    &lt;/blockquote&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.theverge.com/2019/3/6/18222203/video-game-ai-future-procedural-generation-deep-learning&quot;&gt;How artificial intelligence will revolutionize the way video games are developed and played&lt;/a&gt;
    &lt;blockquote&gt;
      &lt;p&gt;The advances of modern AI research could bring unprecedented benefits to game development. […]&lt;/p&gt;
    &lt;/blockquote&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.red-gate.com/simple-talk/dotnet/software-delivery/applied-ai-in-software-development/&quot;&gt;Applied AI in Software Development&lt;/a&gt;
    &lt;blockquote&gt;
      &lt;p&gt;Artificial Intelligence is making inroads in all aspects of technology. In this article, Afsana Atar explains the role of AI in software testing including some examples using a popular testing tool. […]&lt;/p&gt;
    &lt;/blockquote&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;database&quot;&gt;Database&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://cloudblogs.microsoft.com/sqlserver/2019/03/18/the-march-release-of-azure-data-studio-is-now-available/&quot;&gt;The March release of Azure Data Studio is now available&lt;/a&gt;
    &lt;blockquote&gt;
      &lt;p&gt;The key highlights for the March release include:&lt;/p&gt;

      &lt;ul&gt;
        &lt;li&gt;Announcing the PostgreSQL extension for Azure Data Studio&lt;/li&gt;
        &lt;li&gt;Announcing SQL Notebooks&lt;/li&gt;
        &lt;li&gt;Adding the PowerShell extension&lt;/li&gt;
        &lt;li&gt;Adding the SQL Server dacpac extension&lt;/li&gt;
        &lt;li&gt;Adding the community extension Queryplan.show&lt;/li&gt;
        &lt;li&gt;Updates to the SQL Server 2019 Preview extension&lt;/li&gt;
        &lt;li&gt;Bug fixes
 […]&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/blockquote&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.red-gate.com/simple-talk/sql/t-sql-programming/converting-a-history-table-into-a-system-versioned-temporal-table/&quot;&gt;Converting a History Table into a System-Versioned Temporal Table&lt;/a&gt;
    &lt;blockquote&gt;
      &lt;p&gt;Temporal tables were introduced with SQL Server 2016. To take advantage of this feature, you might start fresh with a brand new table. It is possible, however, to convert an existing table with accumulated history to the new functionality. In this article, Mala Mahadevan explains how to create temporal tables for both scenarios. […]&lt;/p&gt;
    &lt;/blockquote&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://docs.microsoft.com/en-us/azure/app-service/app-service-web-tutorial-connect-msi&quot;&gt;Tutorial: Secure Azure SQL Database connection from App Service using a managed identity&lt;/a&gt;
    &lt;blockquote&gt;
      &lt;p&gt;App Service provides a highly scalable, self-patching web hosting service in Azure. It also provides a managed identity for your app, which is a turn-key solution for securing access to Azure SQL Database and other Azure services. Managed identities in App Service make your app more secure by eliminating secrets from your app, such as credentials in the connection strings. In this tutorial, you will add managed identity to the sample ASP.NET web app you built in Tutorial: Build an ASP.NET app in Azure with SQL Database. When you’re finished, your sample app will connect to SQL Database securely without the need of username and passwords. […]&lt;/p&gt;
    &lt;/blockquote&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;vari&quot;&gt;Vari&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.microsoft.com/en-us/microsoft-365/blog/2019/03/19/microsoft-teams-experiences-intelligent-workplace/&quot;&gt;Microsoft Teams wins Enterprise Connect Best in Show award and delivers new experiences for the intelligent workplace&lt;/a&gt;
    &lt;blockquote&gt;
      &lt;p&gt;Today, at the Enterprise Connect event in Orlando, Florida, Microsoft Teams won the Best in Show award for the second year in a row in recognition for its vision for making communication and collaboration easier for the entire workforce, including those on the frontline. This week marks the second anniversary of the worldwide launch of Microsoft Teams. Over the past two years, Teams has grown significantly in both new capabilities and customer usage, as the hub for teamwork that brings people together and fosters a culture of engagement and inclusion. We’re unveiling eight new capabilities in Teams that make collaboration more inclusive, effective, and secure. […]&lt;/p&gt;
    &lt;/blockquote&gt;
  &lt;/li&gt;
&lt;/ul&gt;</content><author><name>Andrea Dottor</name></author><category term="gaming" /><category term="ASP.NET" /><category term="Vue" /><category term="ML" /><category term="Links" /><summary type="html">Questa settimana sono stato un po’ lontano dai vari social in quanto ero al Microsoft MVP Summit 2019…che per me è voluto dire di (volutamente) lasciare a casa il PC e dedicarmi totalmente alla sessioni e al cazzeggio (non capita tutti i giorni di essere dalle parti di Seattle). Ma ho comunque trovato un po’ di tempo per riportare in questo post alcuni articoli interessanti di questa settimana.</summary></entry><entry><title type="html">Differenza tra stringhe: Levenshtein distance</title><link href="https://abc.dottor.net/2019/03/18/differenza-tra-stringhe-levenshtein-disstance/" rel="alternate" type="text/html" title="Differenza tra stringhe: Levenshtein distance" /><published>2019-03-18T00:00:00+00:00</published><updated>2019-03-18T00:00:00+00:00</updated><id>https://abc.dottor.net/2019/03/18/differenza-tra-stringhe-levenshtein-disstance</id><content type="html" xml:base="https://abc.dottor.net/2019/03/18/differenza-tra-stringhe-levenshtein-disstance/">&lt;p&gt;Può capitare di dover capire quanto due stringhe sono simili, oppure trovare la stringa più &lt;em&gt;vicina&lt;/em&gt; ad una inserita.&lt;/p&gt;

&lt;p&gt;Un caso pratico?&lt;/p&gt;

&lt;p&gt;Nell’era delle &lt;em&gt;interfacce vocali&lt;/em&gt; come Alexa, Google Home, Cortana o Siri, ci troviamo di fronte al riconoscimento/traduzione dal parlato al scritto, e capita (molto spesso) che il riconoscimento non sia affidabile al 100%.
&lt;!--more--&gt;&lt;/p&gt;

&lt;p&gt;Nel caso della skill che ho sviluppato per XE (&lt;a href=&quot;https://www.amazon.it/Andrea-Dottor-XE-Development-Group/dp/B07M5LZLJ4&quot;&gt;Alexa Skill: XE - Development User Group&lt;/a&gt;), nella versione in sviluppo (e che spero di pubblicare quanto prima) ho aggiunto la possibilità di chiedere quali siano le prossime sessioni di un determinato speaker, ma alcune volte (in fase di test) mi è capitato che il nome della persona che Alexa riconosce non fosse corretto (es Dottor in Dotor, Doctor, Dottore, …), ed ecco che sono andato alla ricerca di una possibile soluzione.&lt;/p&gt;

&lt;p&gt;Trovata!&lt;/p&gt;

&lt;p&gt;La &lt;strong&gt;&lt;a href=&quot;https://it.wikipedia.org/wiki/Distanza_di_Levenshtein&quot;&gt;Distanza di Levenshtein&lt;/a&gt;&lt;/strong&gt; è un algoritmo che ritorna il numero di modifiche da dover fare ad un testo &lt;em&gt;X&lt;/em&gt; per arrivare ad essere uguale al testo &lt;em&gt;Y&lt;/em&gt;…permettendomi così di poter recuperare con facilità lo speaker che più si avvicina a quello che l’utente sta cercando (ed il tutto, con una semplice query linq).&lt;/p&gt;

&lt;div class=&quot;language-cs highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kt&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;speakerFinded&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ev&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;in&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;_events&lt;/span&gt;
                    &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;s&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;in&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ev&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Sessions&lt;/span&gt;
                    &lt;span class=&quot;k&quot;&gt;select&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; 
                        &lt;span class=&quot;n&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;SpeakerName&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; 
                        &lt;span class=&quot;n&quot;&gt;Distance&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;LevenshteinDistance&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;Compute&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;SpeakerName&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;ToLower&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(),&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;speakerName&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;ToLower&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;())&lt;/span&gt; 
                    &lt;span class=&quot;p&quot;&gt;})&lt;/span&gt;
                    &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;Where&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;s&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Distance&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;&amp;lt;=&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
                    &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;FirstOrDefault&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Riporto qui la classe &lt;strong&gt;LevenshteinDistance&lt;/strong&gt; che ho utilizzato, e che potrebbe tornare utile anche a qualcuno di voi.&lt;/p&gt;

&lt;div class=&quot;language-cs highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;/// Contains approximate string matching&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;LevenshteinDistance&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;c1&quot;&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;c1&quot;&gt;/// Compute the distance between two strings.&lt;/span&gt;
    &lt;span class=&quot;c1&quot;&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;Compute&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;string&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;string&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;n&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Length&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;m&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Length&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[,]&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;d&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;n&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;m&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;

        &lt;span class=&quot;c1&quot;&gt;// Step 1&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;n&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

        &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;m&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

        &lt;span class=&quot;c1&quot;&gt;// Step 2&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;i&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;i&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;&amp;lt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;++)&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

        &lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;j&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;j&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;&amp;lt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;j&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;j&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;++)&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

        &lt;span class=&quot;c1&quot;&gt;// Step 3&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;i&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;i&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;&amp;lt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;++)&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;c1&quot;&gt;//Step 4&lt;/span&gt;
            &lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;j&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;j&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;&amp;lt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;j&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;++)&lt;/span&gt;
            &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
                &lt;span class=&quot;c1&quot;&gt;// Step 5&lt;/span&gt;
                &lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;cost&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;j&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;i&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;])&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;?&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

                &lt;span class=&quot;c1&quot;&gt;// Step 6&lt;/span&gt;
                &lt;span class=&quot;n&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;j&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Math&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;Min&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;
                    &lt;span class=&quot;n&quot;&gt;Math&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;Min&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;i&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;j&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;j&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt;
                    &lt;span class=&quot;n&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;i&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;j&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;cost&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
            &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
        &lt;span class=&quot;c1&quot;&gt;// Step 7&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Se conoscete una soluzione migliore, beh, condividetela qui nei commenti. Non capita spesso di risolvere questo genere di problematiche, quindi ogni suggerimento o miglioramento è ben accetto. ;-)&lt;/p&gt;

&lt;h3 id=&quot;links&quot;&gt;Links&lt;/h3&gt;

&lt;p&gt;Per chi volesse approfondire, ecco alcuni link:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://it.wikipedia.org/wiki/Distanza_di_Levenshtein&quot;&gt;wikipedia: Distanza di Levenshtein&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://stackoverflow.com/a/13793600&quot;&gt;stackoverflow: Find closest match to input string in a list of strings&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.codeproject.com/Articles/13525/Fast-memory-efficient-Levenshtein-algorithm&quot;&gt;codeproject: Fast, memory efficient Levenshtein algorithm&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://en.wikibooks.org/wiki/Algorithm_Implementation/Strings/Levenshtein_distance&quot;&gt;wikibooks: Algorithm Implementation/Strings/Levenshtein distance&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.levenshtein.net/&quot;&gt;The Levenshtein-Algorithm&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content><author><name>Andrea Dottor</name></author><category term="c#" /><category term="Alexa" /><summary type="html">Può capitare di dover capire quanto due stringhe sono simili, oppure trovare la stringa più vicina ad una inserita. Un caso pratico? Nell’era delle interfacce vocali come Alexa, Google Home, Cortana o Siri, ci troviamo di fronte al riconoscimento/traduzione dal parlato al scritto, e capita (molto spesso) che il riconoscimento non sia affidabile al 100%.</summary></entry><entry><title type="html">Eseguire il crop di un’immagine da CSS</title><link href="https://abc.dottor.net/2019/03/15/crop-immagine-da-css/" rel="alternate" type="text/html" title="Eseguire il crop di un’immagine da CSS" /><published>2019-03-15T00:00:00+00:00</published><updated>2019-03-15T00:00:00+00:00</updated><id>https://abc.dottor.net/2019/03/15/crop-immagine-da-css</id><content type="html" xml:base="https://abc.dottor.net/2019/03/15/crop-immagine-da-css/">&lt;p&gt;Le potenzialità che offrono i fogli di stile sono davvero molte, e non si finisce mai di imparare.&lt;/p&gt;

&lt;p&gt;Problematica del giorno, trovare il modo di tagliare (fare il crop) dell’immagine che trovate qui sopra al post, ma in modo automatico, senza che debba aprire Photoshop, Paint o altri applicativi. E mi sono messo alla &lt;a href=&quot;https://www.google.com&quot;&gt;ricerca&lt;/a&gt;.
&lt;!--more--&gt;&lt;/p&gt;

&lt;p&gt;Soluzione trovata!&lt;/p&gt;

&lt;p&gt;Tramite lo stile &lt;strong&gt;object-fit&lt;/strong&gt; è possibile indicare come l’immagine si deve adattare al tag &lt;strong&gt;img&lt;/strong&gt;.&lt;/p&gt;

&lt;h2 id=&quot;object-fit&quot;&gt;object-fit:&lt;/h2&gt;

&lt;p&gt;The object-fit CSS property sets how the content of a replaced element, such as an &amp;lt;img&amp;gt; or &amp;lt;video&amp;gt;, should be resized to fit its container.&lt;/p&gt;

&lt;h4 id=&quot;syntax&quot;&gt;Syntax&lt;/h4&gt;
&lt;p&gt;The object-fit property is specified as a single keyword chosen from the list of values below.&lt;/p&gt;

&lt;h4 id=&quot;values&quot;&gt;Values:&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;contain&lt;/strong&gt;: The replaced content is scaled to maintain its aspect ratio while fitting within the element’s content box. The entire object is made to fill &amp;gt;the box, while preserving its aspect ratio, so the object will be “letterboxed” if its aspect ratio does not match the aspect ratio of the box.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;cover&lt;/strong&gt;: The replaced content is sized to maintain its aspect ratio while filling the element’s entire content box. If the object’s aspect ratio does &amp;gt;not match the aspect ratio of its box, then the object will be clipped to fit.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;fill&lt;/strong&gt;: The replaced content is sized to fill the element’s content box. The entire object will completely fill the box. If the object’s aspect ratio &amp;gt;does not match the aspect ratio of its box, then the object will be stretched to fit.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;none&lt;/strong&gt;: The replaced content is not resized.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;scale-down&lt;/strong&gt;: The content is sized as if none or contain were specified, whichever would result in a smaller concrete object size.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;ATTENZIONE alla compatibilità con i vari browser: &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/CSS/object-fit#Browser_compatibility&quot;&gt;Browser_compatibility&lt;/a&gt; …non funziona con Internet Explorer.&lt;/p&gt;

&lt;p&gt;Ecco lo stile che ho utilizzato in questo blog:&lt;/p&gt;

&lt;div class=&quot;language-css highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nc&quot;&gt;.post-header&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;img&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;nl&quot;&gt;border-radius&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;5px&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;nl&quot;&gt;object-fit&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;cover&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;nl&quot;&gt;height&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;300px&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;nl&quot;&gt;width&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;100%&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;nl&quot;&gt;display&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;block&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;links&quot;&gt;Links:&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.w3schools.com/css/css3_object-fit.asp&quot;&gt;w3schools: CSS The object-fit Property&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/CSS/object-fit&quot;&gt;MDN web docs: object-fit&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.w3.org/TR/css3-images/&quot;&gt;W3C: CSS Image Values and Replaced Content Module Level 3&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://css-tricks.com/almanac/properties/o/object-fit/&quot;&gt;css-tricks: object-fit&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content><author><name>Andrea Dottor</name></author><category term="CSS" /><summary type="html">Le potenzialità che offrono i fogli di stile sono davvero molte, e non si finisce mai di imparare. Problematica del giorno, trovare il modo di tagliare (fare il crop) dell’immagine che trovate qui sopra al post, ma in modo automatico, senza che debba aprire Photoshop, Paint o altri applicativi. E mi sono messo alla ricerca.</summary></entry><entry><title type="html">Link della settimana #11</title><link href="https://abc.dottor.net/2019/03/15/link-della-settimana-11/" rel="alternate" type="text/html" title="Link della settimana #11" /><published>2019-03-15T00:00:00+00:00</published><updated>2019-03-15T00:00:00+00:00</updated><id>https://abc.dottor.net/2019/03/15/link-della-settimana-11</id><content type="html" xml:base="https://abc.dottor.net/2019/03/15/link-della-settimana-11/">&lt;p&gt;Ecco il primo di una serie di post &lt;em&gt;settimanali&lt;/em&gt; (almeno questa è la speranza) dove potere trovare alcuni link ad articoli e post che ritengo particolarmente interessanti. Così se qualcuno di voi è un pò assente dai social, slack o altri canali, possa trovare qui le ultime novità.
&lt;!--more--&gt;
L’idea sarebbe anche di aggiungere un mio personale commento ad ogni singolo articolo, ma meglio non pretendere troppo…almeno per ora. :-)&lt;/p&gt;

&lt;h2 id=&quot;net-core&quot;&gt;.NET Core&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://devblogs.microsoft.com/dotnet/announcing-net-core-3-preview-3/&quot;&gt;Announcing .NET Core 3 Preview 3&lt;/a&gt;
    &lt;blockquote&gt;
      &lt;p&gt;&lt;a href=&quot;https://aka.ms/netcore3download&quot;&gt;Download and get started with .NET Core 3 Preview 3&lt;/a&gt; right now on Windows, macOS and Linux.&lt;/p&gt;

      &lt;p&gt;You can see complete details of the release in the &lt;a href=&quot;https://aka.ms/netcore3releasenotes&quot;&gt;.NET Core 3 Preview 3 release notes&lt;/a&gt;.&lt;/p&gt;

      &lt;p&gt;.NET Core 3.0 will be supported in Visual Studio 2019, Visual Studio for Mac and Visual Studio Code. […]&lt;/p&gt;
    &lt;/blockquote&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://devblogs.microsoft.com/dotnet/net-core-march-2019/&quot;&gt;.NET Core March 2019 Updates – 1.0.15, 1.1.12, 2.1.9 and 2.2.3&lt;/a&gt;
    &lt;blockquote&gt;
      &lt;p&gt;Today, we are releasing the .NET Core March 2019 Update. These updates contain security and reliability fixes. See the individual release notes for details on included reliability fixes. […]&lt;/p&gt;
    &lt;/blockquote&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;aspnet&quot;&gt;ASP.NET&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://devblogs.microsoft.com/aspnet/asp-net-core-updates-in-net-core-3-0-preview-3/&quot;&gt;ASP.NET Core updates in .NET Core 3.0 Preview 3&lt;/a&gt;
    &lt;blockquote&gt;
      &lt;p&gt;Here’s the list of what’s new in this preview:&lt;/p&gt;
      &lt;ul&gt;
        &lt;li&gt;Razor Components improvements:
          &lt;ul&gt;
            &lt;li&gt;Single project template&lt;/li&gt;
            &lt;li&gt;New .razor extension&lt;/li&gt;
            &lt;li&gt;Endpoint routing integration&lt;/li&gt;
            &lt;li&gt;Prerendering&lt;/li&gt;
            &lt;li&gt;Razor Components in Razor Class Libraries&lt;/li&gt;
            &lt;li&gt;Improved event handling&lt;/li&gt;
            &lt;li&gt;Forms &amp;amp; validation&lt;/li&gt;
          &lt;/ul&gt;
        &lt;/li&gt;
        &lt;li&gt;Runtime compilation&lt;/li&gt;
        &lt;li&gt;Worker Service template&lt;/li&gt;
        &lt;li&gt;gRPC template&lt;/li&gt;
        &lt;li&gt;Angular template updated to Angular 7&lt;/li&gt;
        &lt;li&gt;Authentication for Single Page Applications&lt;/li&gt;
        &lt;li&gt;SignalR integration with endpoint routing&lt;/li&gt;
        &lt;li&gt;SignalR Java client support for long polling&lt;/li&gt;
      &lt;/ul&gt;

      &lt;p&gt;[…]&lt;/p&gt;
    &lt;/blockquote&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://devblogs.microsoft.com/aspnet/blazor-0-9-0-experimental-release-now-available/&quot;&gt;Blazor 0.9.0 experimental release now available&lt;/a&gt;
    &lt;blockquote&gt;
      &lt;p&gt;New Razor Component improvements now available to Blazor apps:&lt;/p&gt;
      &lt;ul&gt;
        &lt;li&gt;Improved event handling&lt;/li&gt;
        &lt;li&gt;Forms &amp;amp; validation&lt;/li&gt;
      &lt;/ul&gt;

      &lt;p&gt;[…]&lt;/p&gt;
    &lt;/blockquote&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.telerik.com/blogs/telerik-ui-for-blazor-grid-component-basics&quot;&gt;Telerik UI for Blazor: Grid Component Basics&lt;/a&gt;
    &lt;blockquote&gt;
      &lt;p&gt;The Telerik UI for Blazor data grid features functionality like paging, sorting, templates, and themes out of the box. Learn how to get started with the grid’s basic features today. […]&lt;/p&gt;
    &lt;/blockquote&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.infoq.com/presentations/owasp-top-10-vulnerabilities-2017&quot;&gt;OWASP Top 10 Vulnerabilities &amp;amp; ASP.NET&lt;/a&gt;
    &lt;blockquote&gt;
      &lt;p&gt;Bill Dinger goes over the 2017 OWASP Top 10 vulnerabilities and how they apply to ASP.NET, including a demo of each vulnerability, the risk it poses, how to detect the attack, and how to mitigate it. […]&lt;/p&gt;
    &lt;/blockquote&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://channel9.msdn.com/Shows/On-NET/Real-time-web-applications-with-ASPNET-Core-SignalR&quot;&gt;Real-time web applications with ASP.NET Core SignalR&lt;/a&gt;
    &lt;blockquote&gt;
      &lt;p&gt;Brady Gaster (@bradygaster) joins Cecil (@cecilphillip) to show how easy it is to add real-time functionality to your web applications using ASP.NET Core SignalR. They discuss topics such as targeting with clients, SignalR transports, and options for running your SignalR application in the cloud. […]&lt;/p&gt;
    &lt;/blockquote&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://damienbod.com/2019/03/06/security-experiments-with-grpc-and-asp-net-core-3-0/&quot;&gt;Security Experiments with gRPC and ASP.NET Core 3.0&lt;/a&gt;
    &lt;blockquote&gt;
      &lt;p&gt;This article shows how a &lt;a href=&quot;https://grpc.io/&quot;&gt;gRPC&lt;/a&gt; service could implement OAuth2 security using IdentityServer4 as the token service. […]&lt;/p&gt;
    &lt;/blockquote&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://azure.microsoft.com/it-it/blog/real-time-serverless-applications-with-the-signalr-service-bindings-in-azure-functions/&quot;&gt;Real-time serverless applications with the SignalR Service bindings in Azure Functions&lt;/a&gt;
    &lt;blockquote&gt;
      &lt;p&gt;Since our public preview announcement at Microsoft Ignite 2018, every month thousands of developers worldwide have leveraged the Azure SignalR Service bindings for Azure Functions to add real-time capabilities to their serverless applications. Today, we are excited to announce the general availability of these bindings in all global regions where Azure SignalR Service is available! […]&lt;/p&gt;
    &lt;/blockquote&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://andrewlock.net/session-state-gdpr-and-non-essential-cookies/&quot;&gt;Why isn’t my session state working in ASP.NET Core? Session state, GDPR, and non-essential cookies&lt;/a&gt;
    &lt;blockquote&gt;
      &lt;p&gt;In this post I described an issue that I’ve been asked about several times, where developers find that their session state isn’t saving correctly. This is commonly due to the GDPR features introduced in ASP.NET Core 2.1 for cookie consent and non-essential cookies.&lt;/p&gt;

      &lt;p&gt;I showed an example of the issue in action, and how it differs between a 2.0 app and a 2.2 app. I described how session state relies on a session cookie that is considered non-essential by default, and so is not written to the response until a user provides consent. […]&lt;/p&gt;
    &lt;/blockquote&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;vari&quot;&gt;Vari&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://itnext.io/entity-framework-core-show-parameter-values-in-logging-5ac58b6a4929&quot;&gt;Entity Framework Core: Show Parameter Values in Logging&lt;/a&gt;
    &lt;blockquote&gt;
      &lt;p&gt;Back in October, I did a post on Entity Framework Core: Logging which covers enabling logging for Entity Framework Core. This post is going to expand on that previous post and show you how to get the parameter values used in the queries in addition to the SQL statements being used. […]&lt;/p&gt;
    &lt;/blockquote&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.digitalocean.com/learning-graphql-by-doing/&quot;&gt;Learning GraphQL By Doing&lt;/a&gt;
    &lt;blockquote&gt;
      &lt;p&gt;In this tutorial, we’ll cover the basic concepts required for app developers to understand GraphQL, with the intention of learning what a GraphQL API looks like—and how it compares to REST-API equivalents—by actually trying it out. […]&lt;/p&gt;
    &lt;/blockquote&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.mssqltips.com/sqlservertip/5732/azure-devops-for-agile-projects&quot;&gt;Azure DevOps for Agile Projects&lt;/a&gt;
    &lt;blockquote&gt;
      &lt;p&gt;If you are new to modern day development, you might think that the words Agile and Scrum are interchangeable concepts since many project managers refer to them during team discussions. […]&lt;/p&gt;

      &lt;p&gt;Microsoft Azure DevOps is the next generation of Visual Studio Team Services in the cloud.  This product combines scrum project management tools and software version control into one service.&lt;/p&gt;

      &lt;p&gt;How can we plan, track and execute tasks using Azure Dev Ops? […]&lt;/p&gt;
    &lt;/blockquote&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/azure/is-your-vs-code-extension-slow-heres-how-to-speed-it-up-4d66&quot;&gt;Is Your VS Code Extension Slow? Here’s How to Speed it Up!&lt;/a&gt;
    &lt;blockquote&gt;
      &lt;p&gt;VS Code users (and there are a lot of us) just love our extensions. There are thousands of VS Code extension to choose from and many of us have several installed. They do everything from lighting up your favorite language, formatting your code, or even colorizing your theme.&lt;/p&gt;

      &lt;p&gt;Have you ever noticed that some extensions take a few moments to initialize as you start VS Code? What might cause this delay? […]&lt;/p&gt;
    &lt;/blockquote&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://devblogs.microsoft.com/visualstudio/code-more-scroll-less-with-visual-studio-intellicode/&quot;&gt;Code more, scroll less with Visual Studio IntelliCode&lt;/a&gt;
    &lt;blockquote&gt;
      &lt;p&gt;You may know that Visual Studio IntelliCode helps you write code from commonly used libraries, based on machine learning across thousands of open sourced GitHub repos. Instead of having to search and scroll through a sorted list of methods and properties, you get suggestions on the most likely ones for your coding context as you type.&lt;/p&gt;
    &lt;/blockquote&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.troyhunt.com/these-cookie-warning-shenanigans-have-got-to-stop/&quot;&gt;These Cookie Warning Shenanigans Have Got to Stop&lt;/a&gt;
    &lt;blockquote&gt;
      &lt;p&gt;[…] So in summary, everyone clicks through cookie warnings anyway, if you read them you either can’t understand what they’re saying or the configuration of privacy settings is a nightmare, depending on where you are in the world you either don’t get privacy or you don’t get UX hell, if you understand the privacy risks then it’s easy to open links incognito or use an ad blocker, you can still be tracked anyway and finally, the whole thing is just conditioning people to make bad security choices. That is all.&lt;/p&gt;
    &lt;/blockquote&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.red-gate.com/simple-talk/sysadmin/data-protection-and-privacy/introduction-to-sql-server-security-part-3&quot;&gt;Introduction to SQL Server Security — Part 3&lt;/a&gt;
    &lt;blockquote&gt;
      &lt;p&gt;SQL Server supports partially contained databases. This gives you the option of adding database users with a password inside the database. This makes the database easier to move to another instance or participate in an Always On Availability Group. In this article, Robert Sheldon explains how to work with users in contained databases.&lt;/p&gt;
    &lt;/blockquote&gt;
  &lt;/li&gt;
&lt;/ul&gt;</content><author><name>Andrea Dottor</name></author><category term=".NET Core" /><category term="ASP.NET" /><category term="Blazor" /><category term="DevOps" /><category term="Links" /><summary type="html">Ecco il primo di una serie di post settimanali (almeno questa è la speranza) dove potere trovare alcuni link ad articoli e post che ritengo particolarmente interessanti. Così se qualcuno di voi è un pò assente dai social, slack o altri canali, possa trovare qui le ultime novità.</summary></entry><entry><title type="html">Community ed eventi…quello che ti perdi</title><link href="https://abc.dottor.net/2019/03/06/community-ed-eventi-quello-che-ti-perdi/" rel="alternate" type="text/html" title="Community ed eventi…quello che ti perdi" /><published>2019-03-06T00:00:00+00:00</published><updated>2019-03-06T00:00:00+00:00</updated><id>https://abc.dottor.net/2019/03/06/community-ed-eventi-quello-che-ti-perdi</id><content type="html" xml:base="https://abc.dottor.net/2019/03/06/community-ed-eventi-quello-che-ti-perdi/">&lt;p&gt;Ti organizzo un evento ad un passo da casa e mi rispondi “&lt;em&gt;non vengo tanto non mi interessa l’argomento&lt;/em&gt;”?!?&lt;br /&gt;Mi spiace ma non hai capito &lt;del&gt;un cazzo&lt;/del&gt; il vero valore di questi momenti.&lt;br /&gt;E se pensi/aspetti che sia l’azienda a doverti mandare, non hai capito &lt;del&gt;un cazzo&lt;/del&gt;, sono finiti quei tempi, e dovresti pensare &lt;em&gt;tu&lt;/em&gt; per primo alla &lt;em&gt;tua&lt;/em&gt; formazione.&lt;/p&gt;

&lt;p&gt;Le community, e gli eventi che vengono organizzati, non sono fatti &lt;em&gt;solo&lt;/em&gt; di contenuti, ma sono fatti da &lt;strong&gt;Persone&lt;/strong&gt;…o meglio, sono fatti &lt;strong&gt;dalle Persone&lt;/strong&gt; che li frequentano e li vivono.
&lt;!--more--&gt;
La prossima volta che partecipi ad una serata di &lt;a href=&quot;https://www.xedotnet.org&quot;&gt;XE&lt;/a&gt;, fermati a cena (il famoso &lt;strong&gt;terzo tempo&lt;/strong&gt;), e scoprirai che i veri contenuti, che quel qualcosa in più, salta fuori proprio lì, quando (con una buona birra in mano) ci si scambia le proprie esperienze, ci si confronta…e si cresce. Sono le esperienze personali a fare la differenza!&lt;/p&gt;

&lt;p&gt;A &lt;a href=&quot;https://www.xedotnet.org/&quot;&gt;XE&lt;/a&gt; abbiamo instaurato (da più di un anno) i &lt;em&gt;Monthly members meeting&lt;/em&gt;, degli incontri mensili per i soci, nati per portare avanti le attività del gruppo (newsletter, organizzazione agenda, …) ma sopratutto momenti per potersi incontrare di persona e fare &lt;em&gt;Gruppo&lt;/em&gt;. Perché di user-group online ne è pieno il mondo, ma quello che manca è sempre l’opportunità di trovarsi faccia a faccia e confrontarsi di persona. Tutti noi abbiamo una famiglia o degli amici, e non è di certo quella serata a rubare del tempo.&lt;/p&gt;

&lt;p&gt;Online si trovano corsi su qualsiasi tecnologia, anche l’ultima uscita. Agli incontri delle &lt;em&gt;community&lt;/em&gt; troverai invece chi queste tecnologie le ha spremute fino all’ultimo bit, chi ci ha fatto &lt;em&gt;prodotto&lt;/em&gt;, e chi ha commesso una svalangata di errori e può suggerirti cosa non devi assolutamente fare.&lt;/p&gt;

&lt;p&gt;Quindi ora non ti rimane che guardare quali sono i prossimi eventi a calendario (&lt;a href=&quot;https://www.xedotnet.org/eventi/&quot;&gt;eventi XE&lt;/a&gt;), oppure registrati alla newsletter per rimanere aggiornato (&lt;a href=&quot;https://www.xedotnet.org/#newsletter&quot;&gt;iscriviti alla newsletter&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;Se non abiti qui nei dintorni, sono certo che anche dalle tue parti esiste una community o un gruppo di persone che organizza eventi come i nostri. Non ti rimane che &lt;a href=&quot;https://www.google.it/&quot;&gt;cercare&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;E termino con questa citazione:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;em&gt;“Se tu hai una mela, e io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela ciascuno. Ma se tu hai un’idea, ed io ho un’idea, e ce le scambiamo, allora abbiamo entrambi due idee.”&lt;/em&gt; [George Bernard Shaw]&lt;/p&gt;
&lt;/blockquote&gt;</content><author><name>Andrea Dottor</name></author><category term="DevLife" /><category term="Community" /><category term="XE" /><summary type="html">Ti organizzo un evento ad un passo da casa e mi rispondi “non vengo tanto non mi interessa l’argomento”?!?Mi spiace ma non hai capito un cazzo il vero valore di questi momenti.E se pensi/aspetti che sia l’azienda a doverti mandare, non hai capito un cazzo, sono finiti quei tempi, e dovresti pensare tu per primo alla tua formazione. Le community, e gli eventi che vengono organizzati, non sono fatti solo di contenuti, ma sono fatti da Persone…o meglio, sono fatti dalle Persone che li frequentano e li vivono.</summary></entry><entry><title type="html">Markdown, questo sconosciuto</title><link href="https://abc.dottor.net/2019/02/19/markdown-questo-sconosciuto/" rel="alternate" type="text/html" title="Markdown, questo sconosciuto" /><published>2019-02-19T00:00:00+00:00</published><updated>2019-02-19T00:00:00+00:00</updated><id>https://abc.dottor.net/2019/02/19/markdown-questo-sconosciuto</id><content type="html" xml:base="https://abc.dottor.net/2019/02/19/markdown-questo-sconosciuto/">&lt;p&gt;Con la volontà di ritornare a scrivere ho cercato nuovi stimoli/tecnologie, e nel mettere in piedi questo blog ho trovato alcune tematiche per i primi post.&lt;/p&gt;

&lt;p&gt;Questo blog sfrutta &lt;a href=&quot;https://jekyllrb.com/&quot;&gt;Jekyll&lt;/a&gt; e &lt;a href=&quot;https://pages.github.com/&quot;&gt;GitHub Pages&lt;/a&gt;, due tecnologie che lavorano assieme e permettono di convertire del testo scritto in &lt;em&gt;markdown&lt;/em&gt; in pagine statiche (html) che vengono subito esposte nel web. E da qui nasce questo post.
&lt;!--more--&gt;&lt;/p&gt;
&lt;h3 id=&quot;markdown&quot;&gt;Markdown&lt;/h3&gt;

&lt;p&gt;Ho sempre sottovalutato questo linguaggio, in quanto lo associavo principalmente (ed in modo &lt;em&gt;super-mega-riduttivo&lt;/em&gt;) ai soli file README di GitHub. Ma mi sono dovuto ricredere.
Studiandomi Jekyll, e la sintassi markdown, ho appreso un’estreme facilità nel creare html/post/pagine. Un linguaggio che ha delle potenzialità, e molto semplice ed immediato nel suo utilizzo.&lt;/p&gt;

&lt;p&gt;Ho voluto approfondire un pò la cosa per capire chi ci fosse dietro a questo linguaggio, e quale fosse lo scopo.&lt;/p&gt;

&lt;h3 id=&quot;da-dove-ha-inizio&quot;&gt;Da dove ha inizio&lt;/h3&gt;

&lt;p&gt;Markdown nasce nel 2004 da un’idea di &lt;a href=&quot;https://en.wikipedia.org/wiki/John_Gruber&quot;&gt;John Gruber&lt;/a&gt;, e &lt;a href=&quot;https://en.wikipedia.org/wiki/Aaron_Swartz&quot;&gt;Aaron Swartz&lt;/a&gt; ha poi collaborato per quanto riguarda la sintassi. Lo scopo (e ben riuscito) era quello di creare un linguaggio che fosse facilmente convertibile in html.&lt;/p&gt;

&lt;h3 id=&quot;una-storia-triste&quot;&gt;Una storia triste&lt;/h3&gt;

&lt;p&gt;Leggendo vari articoli, e cercando di capire meglio chi fossero i due autori, incappo nella storia di Aaron Swartz e rimango sconvolto dall sua storia. Nato a Chicago l’8 novembre 1986, morto a New York l’11 gennaio 2013. Si è tolto la vita. Aveva 27 anni. Troppe cose sulle spalle. La depressione. E sono triste. Demoralizzato.&lt;/p&gt;

&lt;p&gt;Spendete 5 minuti e leggete qui la sua vita: &lt;a href=&quot;https://it.wikipedia.org/wiki/Aaron_Swartz&quot;&gt;https://it.wikipedia.org/wiki/Aaron_Swartz&lt;/a&gt;&lt;/p&gt;

&lt;h3 id=&quot;la-sintassi&quot;&gt;La sintassi&lt;/h3&gt;

&lt;p&gt;Per muovere i primi passi, e scrivere un semplice post, non servono molte regole. I titoli (che vanno in html dal H1 al H6) si fanno inserendo ad inizio riga il carattere #.&lt;/p&gt;

&lt;p&gt;Se parte del testo la vogliamo in grassetto, lo racchiudiamo tra due caratteri &lt;strong&gt;*&lt;/strong&gt; (oppure &lt;strong&gt;_&lt;/strong&gt;). Es: **ciao** –&amp;gt; &lt;strong&gt;ciao&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Per il corsivo un carattere &lt;strong&gt;*&lt;/strong&gt; (oppure &lt;strong&gt;_&lt;/strong&gt;). Es: *ciao* –&amp;gt; &lt;em&gt;ciao&lt;/em&gt;&lt;/p&gt;

&lt;h4 id=&quot;headers&quot;&gt;Headers&lt;/h4&gt;

&lt;div class=&quot;language-markdown highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;    # H1
    ## H2
    ### H3
    #### H4
    ##### H5
    ###### H6
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h4 id=&quot;emphasis&quot;&gt;Emphasis&lt;/h4&gt;

&lt;div class=&quot;language-markdown highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;    Emphasis, aka italics, with &lt;span class=&quot;ge&quot;&gt;*asterisks*&lt;/span&gt; or _underscores_.
    Strong emphasis, aka bold, with &lt;span class=&quot;gs&quot;&gt;**asterisks**&lt;/span&gt; or __underscores__.
    Combined emphasis with &lt;span class=&quot;gs&quot;&gt;**asterisks and _underscores_**&lt;/span&gt;.
    Strikethrough uses two tildes. ~~Scratch this.~~
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Da qui a scrivere un post con immagini, tabelle, link, il passo è davvero breve. Nei link in coda al post trovate tutte le regole di sintassi che si possono utilizzare.&lt;/p&gt;

&lt;p&gt;Non trovate il modo di fare &lt;em&gt;qualcosa&lt;/em&gt; con la sua sintassi? Nessuna paura, è possibile inserire direttamente dei tag html all’interno del file, e questi verranno renderizzati così come inseriti. Quindi nessun limite a ciò che si può fare.&lt;/p&gt;

&lt;h3 id=&quot;uitlità&quot;&gt;Uitlità&lt;/h3&gt;

&lt;p&gt;Più uso la sintassi &lt;em&gt;markdown&lt;/em&gt; e più mi pento di non averla conosciuta prima. Se la aggiungessero su OneNote sarei davvero alle stelle :-)&lt;/p&gt;

&lt;p&gt;Dal prendere appunti durante una riunione, al scrivere post in questo blog, al scrivere i file readme.md in GitHub, trovo che markdown faciliti e velocizzi tutte queste attività.&lt;/p&gt;

&lt;p&gt;Non è necessario un editor evoluto, ma un qualsiasi editor di testo è sufficiente allo scopo. Se poi ci mettete la sintassi colorata e qualche “aiuto” utilizzando &lt;a href=&quot;https://code.visualstudio.com/&quot;&gt;Visual Studio Code&lt;/a&gt;, allora il tutto sarà ancora più facile e veloce.&lt;/p&gt;

&lt;h3 id=&quot;link-utili&quot;&gt;Link utili:&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Markdown&quot;&gt;Markdown on Wikipedia&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://daringfireball.net/projects/markdown/syntax&quot;&gt;Markdown Syntax By JOHN GRUBER&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet&quot;&gt;Markdown Cheatsheet&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content><author><name>Andrea Dottor</name></author><category term="DevLife" /><category term="Markdown" /><summary type="html">Con la volontà di ritornare a scrivere ho cercato nuovi stimoli/tecnologie, e nel mettere in piedi questo blog ho trovato alcune tematiche per i primi post. Questo blog sfrutta Jekyll e GitHub Pages, due tecnologie che lavorano assieme e permettono di convertire del testo scritto in markdown in pagine statiche (html) che vengono subito esposte nel web. E da qui nasce questo post.</summary></entry><entry><title type="html">Si ricomincia…A B C, 1 2 3</title><link href="https://abc.dottor.net/2019/02/11/si-ricomincia-abc-123/" rel="alternate" type="text/html" title="Si ricomincia…A B C, 1 2 3" /><published>2019-02-11T00:00:00+00:00</published><updated>2019-02-11T00:00:00+00:00</updated><id>https://abc.dottor.net/2019/02/11/si-ricomincia-abc-123</id><content type="html" xml:base="https://abc.dottor.net/2019/02/11/si-ricomincia-abc-123/">&lt;p&gt;Ed ecco che su Twitter qualcuno condivide nuovamente un vecchio post di Scott Hanselman (&lt;a href=&quot;https://www.hanselman.com/blog/YourBlogIsTheEngineOfCommunity.aspx&quot;&gt;link&lt;/a&gt;), e qualcosa scatta. Un post che conosco, e di cui ho condiviso ogni singola parola.&lt;/p&gt;

&lt;p&gt;Da troppo non scrivo. Forse per l’aspettativa di dover &lt;em&gt;dare&lt;/em&gt; sempre qualcosa di qualità, qualcosa che non debba &lt;em&gt;mai deludere&lt;/em&gt;…e il mio blog mi va stretto da un po’…e mi convinco che per ritornare a scrivere sia meglio dare un netto taglio col &lt;a href=&quot;http://blog.dottor.net&quot;&gt;passato&lt;/a&gt; e ricominciare dalle basi, dall’&lt;strong&gt;a b c&lt;/strong&gt;.
&lt;!--more--&gt;
Non so quanto durerà…ma è da parecchio che ci penso e ripenso, e forse è giunto il momento.&lt;/p&gt;

&lt;p&gt;Per ora non mi pongo nemmeno obiettivi (per non mancarli da subito). Idee ce ne sono. Voglia molta. Tempo (sempre) poco.&lt;/p&gt;

&lt;p&gt;Ma il primo passo è fatto.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;A B C&lt;/p&gt;
&lt;/blockquote&gt;

&lt;blockquote&gt;
  &lt;p&gt;1 2 3&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;…e da qui si parte!&lt;/p&gt;</content><author><name>Andrea Dottor</name></author><category term="DevLife" /><summary type="html">Ed ecco che su Twitter qualcuno condivide nuovamente un vecchio post di Scott Hanselman (link), e qualcosa scatta. Un post che conosco, e di cui ho condiviso ogni singola parola. Da troppo non scrivo. Forse per l’aspettativa di dover dare sempre qualcosa di qualità, qualcosa che non debba mai deludere…e il mio blog mi va stretto da un po’…e mi convinco che per ritornare a scrivere sia meglio dare un netto taglio col passato e ricominciare dalle basi, dall’a b c.</summary></entry></feed>