<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>The running reader</title>
	<atom:link href="https://gianluigi.sellitto.it/feed/" rel="self" type="application/rss+xml" />
	<link>https://gianluigi.sellitto.it</link>
	<description>...cose da ricordare...</description>
	<lastBuildDate>Sat, 05 Apr 2025 11:43:47 +0000</lastBuildDate>
	<language>it-IT</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.7.5</generator>
	<item>
		<title>SQL Server authentication from linux REHL with SSPI</title>
		<link>https://gianluigi.sellitto.it/2025/04/sql-server-authentication-from-linux-rehl-with-sspi/</link>
		
		<dc:creator><![CDATA[Gianluigi]]></dc:creator>
		<pubDate>Sat, 05 Apr 2025 10:47:08 +0000</pubDate>
				<category><![CDATA[Da Ricordare]]></category>
		<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[REHL]]></category>
		<category><![CDATA[SQLSERVER]]></category>
		<category><![CDATA[SSPI]]></category>
		<guid isPermaLink="false">https://gianluigi.sellitto.it/?p=1582</guid>

					<description><![CDATA[First step install Kerberos client: yum install krb5-workstation krb5-libs krb5-auth-dialog Configure Kerberos, i for example your REALM is TEST.COM, edit kerberos configuration with: sudo nano /etc/krb5.conf [logging]default = FILE:/var/log/krb5libs.logkdc = FILE:/var/log/krb5kdc.logadmin_server = FILE:/var/log/kadmind.log [libdefaults]dns_lookup_realm = falseticket_lifetime = 24hrenew_lifetime = 7dforwardable = truerdns = falsepkinit_anchors = FILE:/etc/pki/tls/certs/ca-bundle.crtspake_preauth_groups = edwards25519dns_canonicalize_hostname = fallbackqualify_shortname = &#8220;&#8221;default_realm = TEST.COMdefault_ccache_name = [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>First step install Kerberos client:</p>



<p><code>yum install krb5-workstation krb5-libs krb5-auth-dialog</code></p>



<p>Configure Kerberos, i for example your REALM is TEST.COM, edit kerberos configuration with:</p>



<p><code>sudo nano /etc/krb5.conf</code></p>



<p>[logging]<br>default = FILE:/var/log/krb5libs.log<br>kdc = FILE:/var/log/krb5kdc.log<br>admin_server = FILE:/var/log/kadmind.log</p>



<p>[libdefaults]<br>dns_lookup_realm = false<br>ticket_lifetime = 24h<br>renew_lifetime = 7d<br>forwardable = true<br>rdns = false<br>pkinit_anchors = FILE:/etc/pki/tls/certs/ca-bundle.crt<br>spake_preauth_groups = edwards25519<br>dns_canonicalize_hostname = fallback<br>qualify_shortname = &#8220;&#8221;<strong><br>default_realm = TEST.COM</strong><br>default_ccache_name = KEYRING:persistent:%{uid}</p>



<p>[realm]</p>



<p><strong>TEST.COM ={<br>kdc = yourdomaincontroller.TEST.COM<br>admin_server = yourdomaincontroller.TEST.COM<br>}</strong></p>



<p>[domain_realm]</p>



<p><strong>.test.com = TEST.COM<br>test.com = TEST.COM</strong></p>



<p>Change only bold lines. Finally:</p>



<p>kinit yourusername@TEST.COM</p>



<p>password for yourusername@TEST.COM:&lt;insert your password&gt;</p>



<p>Congratulation, now you can connect with SqlServer with SSPI.</p>



<p>NB. case in realm is important!</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Ring Intercom</title>
		<link>https://gianluigi.sellitto.it/2024/10/ring-intercom/</link>
		
		<dc:creator><![CDATA[Gianluigi]]></dc:creator>
		<pubDate>Sun, 20 Oct 2024 07:32:17 +0000</pubDate>
				<category><![CDATA[Di tutto]]></category>
		<guid isPermaLink="false">https://gianluigi.sellitto.it/?p=1578</guid>

					<description><![CDATA[Di recente ho installato un Ring Intercom su un impianto con citofono Urmet 1130/12. Il sistema ha un solo pulsante per aprire 2 cancelli, si apre il cancello vicino al citofono a cui hanno bussato. Una volta installato il cavo come da indicazioni dell&#8217;APP, mi diceva di effettuare un test di chiamata, il test ha [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>Di recente ho installato un Ring Intercom su un impianto con citofono Urmet 1130/12. Il sistema ha un solo pulsante per aprire 2 cancelli, si apre il cancello vicino al citofono a cui hanno bussato. Una volta installato il cavo come da indicazioni dell&#8217;APP, mi diceva di effettuare un test di chiamata, il test ha sempre fallito dicendo prima che era necessario fare nuove impostazioni, poi falliva e suggeriva di chiamare il call center. Ma chiudendo il test è andando nell&#8217;applicazione normale tutto il sistema funziona perfettamente. Quando si suona al primo cancello si riceve la notifica si può rispondere ed aprire il cancello senza problemi. Poi si arriva al secondo cancello si suona si riceve la notifica e di nuovo si può parlare ed aprire il cancello senza problemi.</p>



<p>Quindi il consiglio è se il test fallisce anche a voi, prima controllate con l&#8217;app normale.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>MAUI versione rilascio</title>
		<link>https://gianluigi.sellitto.it/2022/08/maui-versione-rilascio/</link>
		
		<dc:creator><![CDATA[Gianluigi]]></dc:creator>
		<pubDate>Wed, 10 Aug 2022 12:51:52 +0000</pubDate>
				<category><![CDATA[Programmazione]]></category>
		<guid isPermaLink="false">https://gianluigi.sellitto.it/?p=1567</guid>

					<description><![CDATA[Finalmente è uscita la versione finale di MAUI per Visual Studio 2022. Per installare basta l&#8217;anciare l&#8217;installer di VS e selezionare il nuovo workload &#8220;MAUI&#8221;. Importante se si ha la versione preview di .Net 7, la compilazione dei progetti MAUI non va a buon fine, bisogna rimuovere .Net 7 perché tutto funzioni.]]></description>
										<content:encoded><![CDATA[
<p>Finalmente è uscita la versione finale di MAUI per Visual Studio 2022. Per installare basta l&#8217;anciare l&#8217;installer di VS e selezionare il nuovo workload &#8220;MAUI&#8221;. Importante se si ha la versione preview di .Net 7, la compilazione dei progetti MAUI non va a buon fine, bisogna rimuovere .Net 7 perché tutto funzioni.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>ADO 2.8 and Compatibility mode</title>
		<link>https://gianluigi.sellitto.it/2021/06/ado-2-8-and-compatibility-mode/</link>
		
		<dc:creator><![CDATA[Gianluigi]]></dc:creator>
		<pubDate>Wed, 30 Jun 2021 12:33:30 +0000</pubDate>
				<category><![CDATA[Di tutto]]></category>
		<category><![CDATA[compatibility mode]]></category>
		<category><![CDATA[sql server]]></category>
		<guid isPermaLink="false">https://gianluigi.sellitto.it/?p=1539</guid>

					<description><![CDATA[If you have old code, that access Sql Server through MS-ADO 2.8, you can have some trouble if connect to DB on Sql Server 2016 with compatibility mode do 2016 (130). You can experience some random error on update: Row cannot be located for updating. Some values may have been changed since it was last [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>If you have old code, that access Sql Server through MS-ADO 2.8, you can have some trouble if connect to DB on Sql Server 2016 with compatibility mode do 2016 (130). You can experience some random error on update:</p>



<p><code>Row cannot be located for updating. Some values may have been changed since it was last read.</code></p>



<p>The error is absolutely random. On the same table one row update go, the next no.</p>



<p>The only solution is to set compatibility level to 2014 (120) or 2012 (110).</p>



<p>Another solution to the problem: use Provider=MSOLEDBSQL.1 instead of Provider=SQLNCLI11.1 in connection string. With Sql Native Client provider there is a problem with row update, with the new Microsoft OLE DB Driver for SQL Server there is no problem.</p>



<p></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Parsing dei parametri C# e VB.NET</title>
		<link>https://gianluigi.sellitto.it/2021/02/parsing-dei-parametri-c-e-vb-net/</link>
		
		<dc:creator><![CDATA[Gianluigi]]></dc:creator>
		<pubDate>Tue, 23 Feb 2021 17:09:08 +0000</pubDate>
				<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[VB.NET]]></category>
		<guid isPermaLink="false">http://gianluigi.sellitto.it/?p=1533</guid>

					<description><![CDATA[Dovete realizzare una applicazione console in ambiente .Net, con parametri in riga di comando? Non perdete tempo a creare routine custom per verificare la presenza dei parametri, lasciate fare tutto a CommandLineParser. L&#8217;installazione è semplice da NuGet. Basta fornire una classe modello con gli opportuni metadati e richiamare il parser, in output otterrete l&#8217;oggetto con [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>Dovete realizzare una applicazione console in ambiente .Net, con parametri in riga di comando? Non perdete tempo a creare routine custom per verificare la presenza dei parametri, lasciate fare tutto a <a href="https://github.com/commandlineparser/commandline">CommandLineParser</a>. L&#8217;installazione è semplice da NuGet. Basta fornire una classe modello con gli opportuni metadati e richiamare il parser, in output otterrete l&#8217;oggetto con i valori dei parametri popolati.</p>



<p>Ad esempio:</p>



<pre class="wp-block-syntaxhighlighter-code">using System;
using System.Configuration;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Threading.Tasks;
using System.Diagnostics;
using System.Threading;
using CommandLine;

namespace TxtTrasformation
{
    internal class Program
    {
        public class Options
        {
            [Option('f', "FilePath", Required = true, HelpText = "Inserisci il nome file da elaborare")]
            public string  FilePath { get; set; }
        }
        private static void Main(string[] args)
        {
            Parser.Default.ParseArguments&lt;Options>(args)
                   .WithParsed&lt;Options>(o =>
                   {
                       ElaboraFile(o.FilePath);
                   });
        }
        static void ElaboraFile(string filein) {
            Stopwatch sw = new Stopwatch();
            sw.Start();
/*
Elaborazione...
*/
            sw.Stop();

        }
    }
}</pre>



<p>La classe Options definisce un parametro obbiligatorio &#8220;f&#8221; di tipo testo. Se il parsing dei parametri fallisce, viene automaticamente visualizzata la schermata di riepilogo dei parametri. In alternativa si può gestire l&#8217;errore nella funzione:</p>



<pre class="wp-block-preformatted">.WithNotParsed((errs) =&gt; HandleParseError(errs));</pre>



<figure class="wp-block-image size-large is-resized"><img fetchpriority="high" decoding="async" src="http://gianluigi.sellitto.it/public/gs/2021/02/SharedScreenshot-494x160.jpg" alt="" class="wp-image-1536" width="561" height="182" srcset="https://gianluigi.sellitto.it/public/gs/2021/02/SharedScreenshot-494x160.jpg 494w, https://gianluigi.sellitto.it/public/gs/2021/02/SharedScreenshot-188x61.jpg 188w, https://gianluigi.sellitto.it/public/gs/2021/02/SharedScreenshot-768x248.jpg 768w, https://gianluigi.sellitto.it/public/gs/2021/02/SharedScreenshot-624x202.jpg 624w, https://gianluigi.sellitto.it/public/gs/2021/02/SharedScreenshot.jpg 1206w" sizes="(max-width: 561px) 100vw, 561px" /></figure>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>MSSQL Server 2019 on Docker e Full Text Search</title>
		<link>https://gianluigi.sellitto.it/2020/03/mssql-server-2019-on-docker-e-full-text-search/</link>
		
		<dc:creator><![CDATA[Gianluigi]]></dc:creator>
		<pubDate>Tue, 17 Mar 2020 18:30:00 +0000</pubDate>
				<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[Docker]]></category>
		<category><![CDATA[mssql 2019]]></category>
		<guid isPermaLink="false">http://gianluigi.sellitto.it/?p=1509</guid>

					<description><![CDATA[Per impostazione predefinita, l&#8217;immagine contenuta nel container MSSQL Server 2019 non contiene il servizio Full Text Search. Per poter utilizzare questo servizio bisogna creare un&#8217;immagine personalizzata. Per fortuna ci sono immagini già preparate per MSSQL 2019, una di queste è presente qui: https://schwabencode.com/blog/2019/10/27/MSSQL-Server-2017-Docker-Full-Text-Search Utilizzando come base di partenza lo script presente al link, basta cambiare [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>Per impostazione predefinita, l&#8217;immagine contenuta nel container <a href="https://hub.docker.com/_/microsoft-mssql-server">MSSQL Server 2019</a> non contiene il servizio Full Text Search. Per poter utilizzare questo servizio bisogna creare un&#8217;immagine personalizzata. Per fortuna ci sono immagini già preparate per MSSQL 2019, una di queste è presente qui:</p>



<p><a href="https://schwabencode.com/blog/2019/10/27/MSSQL-Server-2017-Docker-Full-Text-Search">https://schwabencode.com/blog/2019/10/27/MSSQL-Server-2017-Docker-Full-Text-Search</a></p>



<p>Utilizzando come base di partenza lo script presente al link, basta cambiare semplicemente 2017 in 2019 per avere uno script valido da salvare in un file DOCKERFILE.</p>



<pre class="wp-block-code"><code>## Source: https://github.com/Microsoft/mssql-docker/blob/master/linux/preview/examples/mssql-agent-fts-ha-tools/Dockerfile

# mssql-agent-fts-ha-tools
# Maintainers: Microsoft Corporation (twright-msft on GitHub)
# GitRepo: https://github.com/Microsoft/mssql-docker

# Base OS layer: Latest Ubuntu LTS
FROM ubuntu:16.04

# Install prerequistes since it is needed to get repo config for SQL server
RUN export DEBIAN_FRONTEND=noninteractive &amp;&amp; \
    apt-get update &amp;&amp; \
    apt-get install -yq curl apt-transport-https &amp;&amp; \
    # Get official Microsoft repository configuration
    curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add - &amp;&amp; \
    curl https://packages.microsoft.com/config/ubuntu/16.04/mssql-server-2019.list | tee /etc/apt/sources.list.d/mssql-server.list &amp;&amp; \
    apt-get update &amp;&amp; \
    # Install SQL Server from apt
    apt-get install -y mssql-server &amp;&amp; \
    # Install optional packages
    apt-get install -y mssql-server-ha &amp;&amp; \
    apt-get install -y mssql-server-fts &amp;&amp; \
    # Cleanup the Dockerfile
    apt-get clean &amp;&amp; \
    rm -rf /var/lib/apt/lists

# Run SQL Server process
CMD /opt/mssql/bin/sqlservr</code></pre>



<div class="wp-block-group is-layout-flow wp-block-group-is-layout-flow"><div class="wp-block-group__inner-container"></div></div>



<p>Basta creare l&#8217;immagine con il comando:</p>



<pre class="wp-block-code"><code>docker build -t gianluigisellitto/mssql-fts:2019-ubuntu .</code></pre>



<p>L#importante è di ricordare quando si avvia il container di fornire il parametro &#8220;MSSQL_AGENT_ENABLED=True&#8221;, altrimenti l&#8217;agent non viene avviato.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Docker e WSL2</title>
		<link>https://gianluigi.sellitto.it/2020/01/docker-e-wsl2/</link>
		
		<dc:creator><![CDATA[Gianluigi]]></dc:creator>
		<pubDate>Mon, 06 Jan 2020 23:17:41 +0000</pubDate>
				<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[Docker]]></category>
		<category><![CDATA[wsl2]]></category>
		<guid isPermaLink="false">http://gianluigi.sellitto.it/?p=1500</guid>

					<description><![CDATA[Uno dei framework più importanti che si sta imponendo per la distribuzione delle applicazioni è senza dubbio Docker. Docker, in poche parole, rappresenta l&#8217;evoluzione delle Virtual Machine per la distribuzione delle applicazioni in maniera semplice è isolata. Fino a pochi anni fa, il modo più semplice per integrare su una sola macchina più applicazioni era [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>Uno dei framework più importanti che si sta imponendo per la distribuzione delle applicazioni è senza dubbio Docker. </p>



<p>Docker, in poche parole, rappresenta l&#8217;evoluzione delle Virtual Machine per la distribuzione delle applicazioni in maniera semplice è isolata. Fino a pochi anni fa, il modo più semplice per integrare su una sola macchina più applicazioni era quello di inserire ogni applicazione in una macchina virtuale, in modo da controllare in maniera precisa le interazioni tra le varie applicazioni. Il problema di questo approccio è dato dal fatto di dover avere in ogni macchina virtuale una copia del sistema operativo (SO) da utilizzare per l&#8217;applicazione, anche se ridotto all&#8217;osso, anche se il semplice Kernel. Con Docker, invece, le applicazioni vengono distribuite in &#8220;Containers&#8221; che possono essere viste come macchine virtuali senza SO. I servizi necessari a far girare effettivamente l&#8217;applicazione sono forniti dal Kernel della macchina host. Il Container Docker in pratica è costituito dall&#8217;applicazione vera e propria, più gli strati dell&#8217;SO originale per il quale l&#8217;applicazione è destinata, per far sembrare all&#8217;applicazione di avere a disposizione i servizi dell&#8217;SO.</p>



<p>Originariamente i Containers furono sviluppati per Linux, cioè Linux come SO guest. Poi venne la versione per Windows. Le versioni avanzate dei server Docker, possono far girare indifferentemente Containers Linux e Windows. La versione libera Docker per Windows, dedicata agli sviluppatori, permette di sviluppare container Linux o container Windows, ma non allo stesso momento, bisogna passare da un ambiente all&#8217;altro. La cosa positiva che una volta avviato un container, ad esempio Linux, si può passare allo sviluppo/debug di un container Windows senza interrompere l&#8217;esecuzione del container Linux già avviato. Ad esempio si può avviare un container Linux con SQL Server 2019, per poi passare all&#8217;assemblamento di un container Windows di una app che utilizza quel server.</p>



<p>Su Windows, per eseguire i container Linux, viene avviata una VM Linux, che fa da ponte. Una volta era una macchina VirtualBox, ora è una macchina Hyper-V. Ma adesso grazie al rilascio di WSL (Windows Subsystem for Linux) e con il prossimo rilascio di WSL 2, Docker per Windows nella versione beta offre la possibilità di utilizzare WSL per eseguire i container Linux. I risultati sembrano essere incoraggianti, i miglioramenti di velocità si notano a occhio nudo, il container Linux SQL Server 2019 ci mette pochi istanti a partire, contro qualche secondo della macchina Hyper-V. Di contro è più complicato, al momento, settare da Docker le risorse da dedicare al sottosistema Linux, bisogna ricorrere al comando WSL e al file di configurazione <a href="https://www.bleepingcomputer.com/news/microsoft/windows-10-wsl2-now-allows-you-to-configure-global-options/">.wslconfig</a>. </p>



<p>WSL2 per ora è in fase di test nel Fast ring, ed in fase di installazione di Docker EDGE ci potrebbero essere dei problemi, come descritto <a href="http://gianluigi.sellitto.it/2020/01/docker-2-1-7-0-fail-to-start/">qui</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Docker 2.1.7.0 fail to start</title>
		<link>https://gianluigi.sellitto.it/2020/01/docker-2-1-7-0-fail-to-start/</link>
		
		<dc:creator><![CDATA[Gianluigi]]></dc:creator>
		<pubDate>Sun, 05 Jan 2020 15:47:53 +0000</pubDate>
				<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[Docker]]></category>
		<category><![CDATA[wsl2]]></category>
		<guid isPermaLink="false">http://gianluigi.sellitto.it/?p=1493</guid>

					<description><![CDATA[Docker on Windows use Hyper-v virtual machine to run Linux Container. But with the new version of Windows there is the WSL (Windows subsystem for Linux). The new version WSL2 currently in beta, is used by the Edge version of Docker to run Linux Container without the virtual machine. This feature is an optional settings [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>Docker on Windows use Hyper-v virtual machine to run Linux Container. But with the new version of Windows there is the WSL (Windows subsystem for Linux). The new version WSL2 currently in beta, is used by the Edge version of Docker to run Linux Container without the virtual machine. This feature is an optional settings from version 2.1.6.0.</p>



<p>But on my development machine, the Edge installer suffer of the same <a href="http://gianluigi.sellitto.it/2020/01/docker-and-system-net-http/">problem </a>of the stable one. The installation seems to complete without problem, but Docker do not works. The problem is the same: wrong version o Syste.Net.http, the installer ends with no problem, the Docker service seems to start but it is in not working state. Also the Doker Desktop client do not start. To solve the problem the solution is the same of the linked article, edit the config file for the service and Docker Desktop. After that you can anjoy Docker on WSL 2.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Docker and System.Net.Http</title>
		<link>https://gianluigi.sellitto.it/2020/01/docker-and-system-net-http/</link>
		
		<dc:creator><![CDATA[Gianluigi]]></dc:creator>
		<pubDate>Sat, 04 Jan 2020 23:04:59 +0000</pubDate>
				<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[Docker]]></category>
		<category><![CDATA[installer]]></category>
		<category><![CDATA[System.Net.Http]]></category>
		<guid isPermaLink="false">http://gianluigi.sellitto.it/?p=1489</guid>

					<description><![CDATA[On my developing machine the installer for Docker for Windows hangs forever. The problem occur from stable version 2.1.0.1 to 2.1.0.5. After a little inspection, i discovered that the installer is waiting for the &#8220;Docker Desktop Service&#8221;. The log for the service show the error: &#8230;cannot load assembly &#8216;System.Net.Http, Version=4.2.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a&#8217; &#8230; For the [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>On my developing machine the installer for Docker for Windows hangs forever. The problem occur from stable version 2.1.0.1 to 2.1.0.5. After a little inspection, i discovered that the installer is waiting for the &#8220;Docker Desktop Service&#8221;. The log for the service show the error:</p>



<p>&#8230;cannot load assembly &#8216;System.Net.Http, Version=4.2.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a&#8217; &#8230;</p>



<p>For the library System.Net.Http there are some version problem. If you take this library from Net Framework 4.6.2 (the framework used by Docker for Windows) this library have the Version=4.2.0.0. If you get this library from Nuget you get a library with version &lt;4.2.0.0 (see <a href="https://stackoverflow.com/questions/47570912/strange-issue-with-system-net-http-4-2-0-0-not-found">this</a> for details). So how to solve?</p>



<p>While the installer still hang, waiting for the service to start, follow this steps:</p>



<ul class="wp-block-list"><li>go to C:\Program Files\Docker\Docker</li><li>open the file com.docker.service.config </li><li>comment out or delete the part: </li></ul>



<p><code>&lt;assemblyBinding&nbsp;xmlns="urn:schemas-microsoft-com:asm.v1"&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;dependentAssembly&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;assemblyIdentity&nbsp;name="System.Net.Http"&nbsp;publicKeyToken="b03f5f7f11d50a3a"&nbsp;culture="neutral"&nbsp;/&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;bindingRedirect&nbsp;oldVersion="0.0.0.0-4.2.0.0"&nbsp;newVersion="4.2.0.0"&nbsp;/&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/dependentAssembly&gt;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/assemblyBinding&gt;</code></p>



<ul class="wp-block-list"><li>go to Service Console and start the service &#8220;com.docker.service&#8221; or &#8220;Docker Desktop Service&#8221; (the name depend on version)</li></ul>



<p>When the service start the installer complete succesfully. Close the installer. The Docker Service Client also do not start for the same reason, the solution is the same, comment out the same binding redirect in the file Docker Desktop.exe.config.</p>



<p></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Docker and network on Windows</title>
		<link>https://gianluigi.sellitto.it/2019/12/docker-and-network-on-windows/</link>
		
		<dc:creator><![CDATA[Gianluigi]]></dc:creator>
		<pubDate>Tue, 31 Dec 2019 18:36:19 +0000</pubDate>
				<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[Docker]]></category>
		<guid isPermaLink="false">http://gianluigi.sellitto.it/?p=1487</guid>

					<description><![CDATA[Developing and testing Docker container can be problematic on Windows 10 if you have different type of container. Suppose that you have one Linux container and one Windows Container that need to communicate, the simple solution to communicate through host ip address (Docker bridge actually is not working in mixed mode); but if your IP [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p></p>



<p>Developing and testing Docker container can be problematic on Windows 10 if you have different type of container. Suppose that you have one Linux container and one Windows Container that need to communicate, the simple solution to communicate through host ip address (Docker bridge actually is not working in mixed mode); but if your IP is not stable (you move on different network)? Do you need to change the hostname/IP in every configuration file. But there is a more simple solution: Microsoft loopback adatper. If you install this virtual adapter and assign a fixed IP, containers can communicate using this IP, that not change if you change network. Simple solution for speed-up developing process.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>FileBeat, IIS LOG e X-Forwarded-For</title>
		<link>https://gianluigi.sellitto.it/2019/12/filebeat-e-iis-log-e-x-forwarded-for/</link>
		
		<dc:creator><![CDATA[Gianluigi]]></dc:creator>
		<pubDate>Wed, 04 Dec 2019 05:56:00 +0000</pubDate>
				<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[Elasticsearch]]></category>
		<category><![CDATA[IIS log]]></category>
		<guid isPermaLink="false">http://gianluigi.sellitto.it/?p=1477</guid>

					<description><![CDATA[FileBeat è il ben noto log shipper di Elasticsearch per caricare log dalle più disparate fonti. Uno dei moduli di FileBeat serve a caricare i file di log di IIS. Bisogna ricordare però che i file di log di IIS possono avere un numero variabile di campi, liberamente selezionabili, oltre a poter aggiungere dei campi [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>FileBeat è il ben noto log shipper di Elasticsearch per caricare log dalle più disparate fonti. Uno dei moduli di FileBeat serve a caricare i file di log di IIS. Bisogna ricordare però che i file di log di IIS possono avere un numero variabile di campi, liberamente selezionabili, oltre a poter aggiungere dei campi custom. Per poter far digerire correttamente i vostri file di log bisogna modificare il file:</p>



<p>%ProgramFiles%\filebeat\module\iis\access\ingest\default.json</p>



<p>Questo file contiene la sezione grok:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p> <code>"grok":&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code></p><p><code>"field":&nbsp;"message",&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code></p><p><code>"patterns":&nbsp;[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code></p><p><code>"%{TIMESTAMP_ISO8601:iis.access.time}&nbsp;%{IPORHOST:destination.address}&nbsp;%{WORD:http.request.method}&nbsp;%{NOTSPACE:url.path}&nbsp;%{NOTSPACE:url.query}&nbsp;%{NUMBER:destination.port:long}&nbsp;%{NOTSPACE:user.name}&nbsp;%{IPORHOST:source.address}&nbsp;%{NOTSPACE:user_agent.original}&nbsp;%{NOTSPACE:http.request.referrer}&nbsp;%{NUMBER:http.response.status_code:long}&nbsp;%{NUMBER:iis.access.sub_status:long}&nbsp;%{NUMBER:iis.access.win32_status:long}&nbsp;%{NUMBER:temp.duration:long}"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </code></p><p><code>],</code></p><p><code>"ignore_missing":&nbsp;true&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code></p><p><code>} </code></p></blockquote>



<p>Il campo patterns è un array di stringhe, ogni riga indica un paeern diverso di possibile interpretazione delle collonne del file di log verso le colonne interne di Elsticsearch. Nel caso evidenziato una riga del file di log inizia con la data e l&#8217;ora dell&#8217;evento, prosegue con l&#8217;IP del server di destinazione e così via. Per cui uno di questi pattern deve coincidere con il pattern del vostro file di log.</p>



<h2 class="wp-block-heading">X-Forwarded-For</h2>



<p>Il campo X-Forwarded-For è il campo (oppure  True-Client-IP ) viene utilizzato dai vari reverse-proxy o load balancer per trasmettere l&#8217;ip originale dal quale viene la richiesta, infatti in questa situazione il campo c-ip di IIS contiene l&#8217;IP del reverse proxy. Per inserire il valore del X-Forwarded-For nel file di log bisogna:</p>



<pre class="wp-block-syntaxhighlighter-code">Aprire IIS Manager
Espandere il nodo server
Espandere il nodo siti
Cliccare sul proprio sito web
Doppio click su Registrazione
Cliccare su Seleziona campi...
Cliaccare Aggiungi campo... in fondo nella dialog
Mettere X-Forwarded-For sia in Nome campo che in  Origine.
lascaire Intestazione richiesta come Tipo di origine
Cliccare OK nella dialog Aggiungi campo personalizzato
Cliccare OK nella dialog Campi di registrazione
Cliccare Applica sulla destra.</pre>



<p>In questo modo IIS preleverà il campo dalle instestazioni delle richieste e lo scriverà nel file di log.</p>



<p>Ritornando al nostro pattern dell&#8217;array patterns, bisogna creare un pattern con il campo  %{IPORHOST:iis.access.remote_ip}}  piazzato nella posizione in cui si trova il campo X-Forwarded-For.</p>



<h2 class="wp-block-heading">Modifiche su Elasticsearch</h2>



<p>Una volta modificato il file  %ProgramFiles%\filebeat\module\iis\access\ingest\default.json, bisogna aggiornare la pipeline di ingest sul server. Siccome la pipeline si chiama in modo diverso a seconda della versione di FileBeat, la cosa migliore è eseguire la richiesta (con la consolle di Kibana o con curl)</p>



<p>GET _ingest/pipeline </p>



<p>Vi verrà restituita la lista completa delle pipeline, una di queste sarà del tipo &#8220;filebeat-7.4.2-iis-error-default&#8221; dove il numero di versione può variare, a questo punto con la richiesta</p>



<p>PUT _ingest/pipeline/filebeat-7.4.2-iis-error-default {contenuto del file default .json}</p>



<p>A questo punto anche Elasticsearch sarà pronto a recepire gli eventi nel formato da voi prescelto.</p>



<p>P.S.</p>



<p>Per testare se il pattern cattura il vostro file di log, c&#8217;è il sito http://grokconstructor.appspot.com che permette di testare il tutto prima di installare il tutto.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>IISNODE and encryption</title>
		<link>https://gianluigi.sellitto.it/2019/11/iisnode-and-encryption/</link>
		
		<dc:creator><![CDATA[Gianluigi]]></dc:creator>
		<pubDate>Wed, 20 Nov 2019 22:19:01 +0000</pubDate>
				<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[HTTP Error 500.0 - Internal Server Error]]></category>
		<category><![CDATA[IISNODE]]></category>
		<guid isPermaLink="false">http://gianluigi.sellitto.it/?p=1473</guid>

					<description><![CDATA[IISNODE and INternal server error]]></description>
										<content:encoded><![CDATA[
<p><a href="https://github.com/Azure/iisnode">IISNODE</a> is a well know IIS extension module for hosting NodeJS application inside IIS. Recently i needed to install a small NodeJS app as submodule of .Net application. The integration between the two app was realized by JSON Web Token. The NodeJS app was installed as virtual application on the same machine. On test machine everything worked fine. On production machine IISNode throws &#8220;HTTP Error 500.0 &#8211; Internal Server Error&#8221;. There was no solution to the problem, until i noticed that the root web.config was encrypted by aspnet_regiis. I discovered that this is a know <a href="https://github.com/tjanczuk/iisnode/issues/259">issue</a> of IISNODE. </p>



<p>So for now is not possible have IISNODE and encrypted web.config on the same web.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Sbloccare la stampa di un file PDF</title>
		<link>https://gianluigi.sellitto.it/2019/10/sbloccare-la-stampa-di-un-file-pdf/</link>
		
		<dc:creator><![CDATA[Gianluigi]]></dc:creator>
		<pubDate>Thu, 24 Oct 2019 10:47:08 +0000</pubDate>
				<category><![CDATA[Da Ricordare]]></category>
		<category><![CDATA[Di tutto]]></category>
		<category><![CDATA[pdf]]></category>
		<category><![CDATA[rimozione password]]></category>
		<guid isPermaLink="false">http://gianluigi.sellitto.it/?p=1469</guid>

					<description><![CDATA[Molto spesso ci vengono forniti dei file PDF che possono solamente essere letti. Volendo stamparli bisogna conoscere la password. Molti cercano tra diversi servizi online o programmi a pagamento. Ma c&#8217;è un semplice programma che può servire al caso: QPDF http://qpdf.sourceforge.net/ Si tratta tra l&#8217;altro di un programmino che si installa semplicemente copiando la cartella [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>Molto spesso ci vengono forniti dei file PDF che possono solamente essere letti. Volendo stamparli bisogna conoscere la password. Molti cercano tra diversi servizi online o programmi a pagamento. Ma c&#8217;è un semplice programma che può servire al caso:</p>



<p>QPDF <a href="http://qpdf.sourceforge.net/">http://qpdf.sourceforge.net/</a> </p>



<p>Si tratta tra l&#8217;altro di un programmino che si installa semplicemente copiando la cartella in cui è contenuto, per cui si può installare e trasportare dovunque. Una volta installato per togliere la password da un file basta dare il comando:</p>



<p><code>qpdf.exe --decrypt &lt;percorso al file da sbloccare&gt; &lt;percorso al file di uscita</code>&gt;</p>



<p>Tutto qui.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>JSON Web Token and RSA with C#</title>
		<link>https://gianluigi.sellitto.it/2019/10/json-web-token-and-rsa-with-c/</link>
		
		<dc:creator><![CDATA[Gianluigi]]></dc:creator>
		<pubDate>Mon, 14 Oct 2019 19:36:07 +0000</pubDate>
				<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[JWT]]></category>
		<category><![CDATA[RSA]]></category>
		<guid isPermaLink="false">http://gianluigi.sellitto.it/?p=1457</guid>

					<description><![CDATA[JWT token with RSA signing cipher]]></description>
										<content:encoded><![CDATA[<p><a href="http://jwt.io">JWT</a> is a well know open standard to share information among several services in a secure way. Information are signed with some signing key, so information in the payload are protected against tampering.</p>
<p>Most of samples are based on HS256 encryption scheme. With this encryption scheme two service the want to share some token, must share a secret key, for generate and validate token. This option is useful if you want share token between different service of your application. But if you want share information with application from third party or more? You need to share a secret password with every service, a nightmare of (password,service) to remember. But there is a simple solution: RSA private/public key. With RSA encryption, keys came in couple, if you sign with private key, the verification can be done with the public key, or the other way round. In JWT this means that after generating the couple (private key,public key), the private key must be stored in a safe place and can be used to generate every token. The public key can be made public available and used to verify JWT toke integrity.&nbsp;</p>
<p>Following <a href="https://medium.com/@mmoshikoo/jwt-authentication-using-c-54e0c71f21b0">this</a> sample, i have extended the library to use RS256 signing scheme. The library is complete:</p>
<ol>
<li>generation of (private key,public key), the private key is stored in a encrypted file with <a href="https://en.wikipedia.org/wiki/Blowfish_(cipher)">BlowFish</a> cipher. Public key is stored in XML format and PEM format;</li>
<li>Generation of JWT token with username and userid identifier;</li>
<li>verification of token end claims extraction from JWT token;</li>
</ol>
<p>&nbsp;The source code for the library is <a href="https://github.com/gsellitto/RSAJWT">here</a>, is based on Microsoft JWT implementation fo .Net and Net Core.</p>
<p>For an introduction on JWT with Python see <a href="https://blog.miguelgrinberg.com/post/json-web-tokens-with-public-key-signatures">here</a>.</p>


<p></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Nuovi stronzi</title>
		<link>https://gianluigi.sellitto.it/2019/09/nuovi-stronzi/</link>
		
		<dc:creator><![CDATA[Gianluigi]]></dc:creator>
		<pubDate>Sat, 14 Sep 2019 07:43:03 +0000</pubDate>
				<category><![CDATA[Di tutto]]></category>
		<category><![CDATA[Nuovi stronzi]]></category>
		<guid isPermaLink="false">http://gianluigi.sellitto.it/2019/09/nuovi-stronzi/</guid>

					<description><![CDATA[Se ricevete chiamate da +21692871853 o +21696374351, non rispondete né richiamate, sono degli stronzi che cercano di spillarvi soldi.]]></description>
										<content:encoded><![CDATA[<p>Se ricevete chiamate da +21692871853 o +21696374351, non rispondete né richiamate, sono degli stronzi che cercano di spillarvi soldi.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>JSON Web Tokens</title>
		<link>https://gianluigi.sellitto.it/2019/07/json-web-tokens/</link>
		
		<dc:creator><![CDATA[Gianluigi]]></dc:creator>
		<pubDate>Sun, 07 Jul 2019 09:47:08 +0000</pubDate>
				<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[JSON Web Tokens]]></category>
		<category><![CDATA[Single Sign On]]></category>
		<guid isPermaLink="false">http://gianluigi.sellitto.it/?p=1451</guid>

					<description><![CDATA[JSON Web Tokens è una tecnologia per scambiare token autorizzativi tra due parti. Ogni token può contenere le informazioni che si desiderano e l&#8217;integrità è assicurata dal fingerprint presente sul token stesso. Per la generazione del token esistono librerie praticamente in ogni linguaggio. Ottimo sistema da tener presente se si ha bisogno di scambiare autorizzazione [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p><a href="http://jwt.io">JSON Web Tokens</a> è una tecnologia per scambiare token autorizzativi tra due parti. Ogni token può contenere le informazioni che si desiderano e l&#8217;integrità è assicurata dal fingerprint presente sul token stesso. Per la generazione del token esistono librerie praticamente in ogni linguaggio. </p>



<p>Ottimo sistema da tener presente se si ha bisogno di scambiare autorizzazione tra due sistemi diversi, o per realizzare un sistema di  Single Sign On.</p>



<p>Una buona guida alla libreria .Net è questo <a href="https://medium.com/@mmoshikoo/jwt-authentication-using-c-54e0c71f21b0">esempio</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Picchiapò</title>
		<link>https://gianluigi.sellitto.it/2019/06/picchiapo/</link>
		
		<dc:creator><![CDATA[Gianluigi]]></dc:creator>
		<pubDate>Fri, 07 Jun 2019 13:08:03 +0000</pubDate>
				<category><![CDATA[Di tutto]]></category>
		<guid isPermaLink="false">http://gianluigi.sellitto.it/?p=1448</guid>

					<description><![CDATA[Picchiapò piatto tipico di Roma, che poch romani conoscono!]]></description>
										<content:encoded><![CDATA[
<p><a href="https://blog.giallozafferano.it/rocococo/carne-alla-picchiapo/">Picchiapò</a> piatto tipico di Roma, che poch romani conoscono!</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Strane chiamate da +21697239302</title>
		<link>https://gianluigi.sellitto.it/2019/06/strane-chiamate-da-21697239302/</link>
		
		<dc:creator><![CDATA[Gianluigi]]></dc:creator>
		<pubDate>Mon, 03 Jun 2019 20:40:31 +0000</pubDate>
				<category><![CDATA[Di tutto]]></category>
		<guid isPermaLink="false">http://gianluigi.sellitto.it/?p=1446</guid>

					<description><![CDATA[Io sto ricevendo strani squilli dal numero tunisino +21697239302. Molto probabilmente si tratta di una truffa. Questa. Si basa sul fatto che l&#8217;utente richiami il numero, dall&#8217;altra parte risponde un numero a pagamento, che non fa altro che farvi perdere tempo per tenervi attaccati alla chiamata e succhiarvi euro.]]></description>
										<content:encoded><![CDATA[
<p> Io sto ricevendo strani squilli dal numero tunisino +21697239302. Molto probabilmente si tratta di una truffa. <a href="https://t.co/O0W9w9GlDv">Questa</a>. Si basa sul fatto che l&#8217;utente richiami il numero, dall&#8217;altra parte risponde un numero a pagamento, che non fa altro che farvi perdere tempo per tenervi attaccati alla chiamata e succhiarvi euro.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Hands-On Machine Learning with Scikit-Learn and TensorFlow</title>
		<link>https://gianluigi.sellitto.it/2019/05/hands-on-machine-learning-with-scikit-learn-and-tensorflow/</link>
		
		<dc:creator><![CDATA[Gianluigi]]></dc:creator>
		<pubDate>Sun, 12 May 2019 18:13:20 +0000</pubDate>
				<category><![CDATA[Libri]]></category>
		<category><![CDATA[Programmazione]]></category>
		<guid isPermaLink="false">http://gianluigi.sellitto.it/?p=1438</guid>

					<description><![CDATA[Hands-On è un ottimo testo per imparare le tecniche di machine learning più utilizzate. Il testo non presuppone nessuna conoscenza pregressa. Infatti si parte da un capitolo introduttivo per introdurre la parte teorica del machine learning: che cos&#8217;è il machine learning, perché usarlo, tipi di machine learning, tipi di utilizzo del machine learning. Una parte [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p><a href="https://www.oreilly.com/library/view/hands-on-machine-learning/9781491962282/">Hands-On</a> è un ottimo testo per imparare le tecniche di machine learning più utilizzate. Il testo non presuppone nessuna conoscenza pregressa. Infatti si parte da un capitolo introduttivo per introdurre la parte teorica del machine learning: che cos&#8217;è il machine learning, perché usarlo, tipi di machine learning, tipi di utilizzo del machine learning. Una parte considerevole del capitolo teorico è dedicato a descrivere l&#8217;importanza della scelta appropriata del training set dei dati e della parte da utilizzare per testare il modello costruito.</p>



<p>Il libro prosegue con una serie di capitoli pratici che realizzano un serie di progetti finiti, che introducono le due librerie presentate nel libro. Scikit-Learn e Tensorflow. I progetti sono realizzati, naturalmente, in Python. Anche qui non è richiesta una conoscenza del linguaggio, nel primo capitolo pratico vengono date tutte le indicazioni pratiche per impostare un ambiente adatto alle esercitazioni.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Azure Data Studio</title>
		<link>https://gianluigi.sellitto.it/2019/05/azure-data-studio/</link>
		
		<dc:creator><![CDATA[Gianluigi]]></dc:creator>
		<pubDate>Sun, 12 May 2019 07:37:50 +0000</pubDate>
				<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[Azure Data Studio]]></category>
		<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">http://gianluigi.sellitto.it/?p=1432</guid>

					<description><![CDATA[Azure Data Studio (ADS) è un nuovo ambiente di sviluppo database multi piattaforma in fase di sviluppo da parte di Microsoft. Infatti esiste nella versione Windows, MacOS e Linux. L&#8217;interfaccia e la modalità di interazione è la stessa di VSCode. L&#8217;ultima release, porta in dote diverse novità. Tra queste l&#8217;inclusione del concetto del Notebook. Un [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p><a href="https://www.google.it/url?sa=t&amp;rct=j&amp;q=&amp;esrc=s&amp;source=web&amp;cd=1&amp;cad=rja&amp;uact=8&amp;ved=2ahUKEwja1sn_uZXiAhXP2KQKHad5CzAQFjAAegQIARAB&amp;url=https%3A%2F%2Fdocs.microsoft.com%2Fen-us%2Fsql%2Fazure-data-studio%2Fdownload&amp;usg=AOvVaw1fCuJBVUlLfoKEdPLzSMcC">Azure Data Studio</a> (ADS) è un nuovo ambiente di sviluppo database multi piattaforma in fase di sviluppo da parte di Microsoft. Infatti esiste nella versione Windows, MacOS e Linux. L&#8217;interfaccia e la modalità di interazione è la stessa di <a href="https://www.google.it/url?sa=t&amp;rct=j&amp;q=&amp;esrc=s&amp;source=web&amp;cd=1&amp;cad=rja&amp;uact=8&amp;ved=2ahUKEwihodKRupXiAhXP16QKHeUwBNEQFjAAegQIBhAC&amp;url=https%3A%2F%2Fcode.visualstudio.com%2F&amp;usg=AOvVaw15O90sm1ios8AUpw56hCml">VSCode</a>. L&#8217;ultima release, porta in dote diverse novità. Tra queste l&#8217;inclusione del concetto del Notebook. Un Notebook, non è un semplice documento di query, ma è composto da una serie di oggetti attivi, che possono essere &#8220;attivi&#8221; nello stesso momento, inframmezzati da testo o altro. In pratica è come avere un &#8220;quaderno&#8221; in cui scrivere tutto. Il Notebook più famoso e <a href="https://jupyter.org/">Jupiter Notebook</a>, che serve ad eseguire script Python inframezzato da testo, grafici e altro. </p>



<p>Ed infatti in questa release di ADS un Notebook può avere un backend di codice SQL o Python. E qui iniziano i guai. Provando un nuovo Notebook con backend Python, ADS parte immediatamente con l&#8217;installazione di un proprio ambiente Python. Come risultato mi sono ritrovato con il mio ambiente Python/Anaconda &#8220;piallato&#8221;. È vero che ADS è in fase di sviluppo, ma sarebbe meglio prevedere un rilevamento di un ambiente già installato ed usare quello.</p>



<p>Per il resto i Notebook funzionano perfettamente, e sono perfettamente compatibili con quelli Jupiter (non so se si tratta di un&#8217;integrazione proprio di questi ultimi o solo compatibilità di file). Infatti avevo un Notebook in cui stavo seguendo gli esercizi del libro <a href="http://gianluigi.sellitto.it/2019/05/hands-on-machine-learning-with-scikit-learn-and-tensorflow/">Hands-On Machine Learning with Scikit-Learn and TensorFlow</a> e sono riuscito ad aprirlo senza problemi e proseguire lo sviluppo da ADS.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
