<?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>Nicola Celiento</title>
	<atom:link href="https://www.nicolaceliento.it/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.nicolaceliento.it</link>
	<description>Application Architect &#38; DevOps Engineer</description>
	<lastBuildDate>Sun, 09 Apr 2023 15:38:40 +0000</lastBuildDate>
	<language>it-IT</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.3</generator>
	<item>
		<title>Cosa sono gli NFT</title>
		<link>https://www.nicolaceliento.it/blog/blockchain/cosa-sono-gli-nft-non-fungible-token/</link>
					<comments>https://www.nicolaceliento.it/blog/blockchain/cosa-sono-gli-nft-non-fungible-token/#respond</comments>
		
		<dc:creator><![CDATA[Nicola Celiento]]></dc:creator>
		<pubDate>Tue, 15 Mar 2022 10:28:57 +0000</pubDate>
				<category><![CDATA[Blockchain]]></category>
		<category><![CDATA[blockchain]]></category>
		<category><![CDATA[ethereum]]></category>
		<guid isPermaLink="false">https://www.nicolaceliento.it/?p=1775</guid>

					<description><![CDATA[L&#8217;acronimo NFT sta per Non Fungible Token, ossia token non fungibile. E&#8217; quindi un token, ovvero un set di dati memorizzati su blockchain, come ad esempio le cryptovalute, ma a differenza di queste, non è interscambiabile con un altro token simile. Due monete dello stesso valore sarebbero perfettamente identiche tra loro e quindi scambiabili tra [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>L&#8217;acronimo <strong>NFT </strong>sta per <strong><em>Non Fungible Token</em></strong>, ossia <strong>token non fungibile</strong>. <br>E&#8217; quindi un token, ovvero un set di dati memorizzati su blockchain, come ad esempio le cryptovalute, ma a differenza di queste, non è interscambiabile con un altro token simile. <br>Due monete dello stesso valore sarebbero perfettamente identiche tra loro e quindi scambiabili tra loro, mentre ogni NFT rappresenta invece un <strong>asset unico</strong>, non scambiabile con un altro equivalente. </p>



<p>Chi acquista un’opera legata a un NFT non acquista l’opera in sé, ma la possibilità di dimostrare un <strong>diritto sull’opera</strong>, garantito tramite uno <strong>smart contract</strong>, ossia dei contratti intelligenti, cioè programmi in grado di eliminare la possibilità, per le parti coinvolte, di decidere arbitrariamente di non rispettarne le condizioni stabilite da un vero e proprio contratto, ossia un accordo tra le parti. </p>



<p>Tutto comincia con una versione digitale dell’opera d’arte. Tipicamente, si usa una foto digitale rara o un piccolo filmato in formato digitale. Dopodichè per renderla un NFT si usa una piattaforma di scambio, come ad esembio <a rel="noreferrer noopener" href="https://opensea.io" target="_blank">OpenSea</a>, che si occuperà di creare una transazione sulla blockchain, principalmente un <strong>token ERC-721 </strong>o <strong>ERC-1155 </strong>su <strong>Ethereum</strong>, con un suo contratto ed un identificativo univoco.<br>Una volta creato il token è possibile metterlo in vendita sulla stessa piattaforma OpenSea, ad un prezzo specifico oppure all&#8217;asta.</p>



<p>Tra i primi NFT ad avere successo nel 2017 troviamo i <strong>CryptoPunks</strong>, una serie di circa 10.000 token che ancora oggi circolano a prezzi vertiginosi. In molti ricorderanno che uno di questi è stato venduto a circa <strong>12 milioni di dollari</strong>.</p>



<div class="wp-block-image is-style-default"><figure class="aligncenter size-large is-resized"><img decoding="async" fetchpriority="high" src="https://www.nicolaceliento.it/wp-content/uploads/2022/03/Crypto-Punks-OpenSea-1024x481.png" alt="CryptoPunks su OpenSea" class="wp-image-1781" width="840" height="394" srcset="https://www.nicolaceliento.it/wp-content/uploads/2022/03/Crypto-Punks-OpenSea-1024x481.png 1024w, https://www.nicolaceliento.it/wp-content/uploads/2022/03/Crypto-Punks-OpenSea-300x141.png 300w, https://www.nicolaceliento.it/wp-content/uploads/2022/03/Crypto-Punks-OpenSea-768x360.png 768w, https://www.nicolaceliento.it/wp-content/uploads/2022/03/Crypto-Punks-OpenSea-1536x721.png 1536w, https://www.nicolaceliento.it/wp-content/uploads/2022/03/Crypto-Punks-OpenSea.png 1598w" sizes="(max-width: 840px) 100vw, 840px" /><figcaption><strong>CryptoPunks su OpenSea</strong></figcaption></figure></div>



<p>La capitalizzazione di mercato degli NFT è in continuo aumento ed oggi si aggira intorno ai <strong>10 bilioni di dollari</strong> con un volume di scambio giornaliero di circa <strong>42 milioni di dollari</strong> (fonte <a rel="noreferrer noopener" href="https://coinmarketcap.com/it/nft/" target="_blank">CoinMarkertCap</a>).</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.nicolaceliento.it/blog/blockchain/cosa-sono-gli-nft-non-fungible-token/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Cos&#8217;è la DeFi &#8211; Finanza Decentralizzata</title>
		<link>https://www.nicolaceliento.it/blog/blockchain/cosa-e-la-defi-finanza-decentralizzata/</link>
					<comments>https://www.nicolaceliento.it/blog/blockchain/cosa-e-la-defi-finanza-decentralizzata/#respond</comments>
		
		<dc:creator><![CDATA[Nicola Celiento]]></dc:creator>
		<pubDate>Fri, 04 Mar 2022 17:36:09 +0000</pubDate>
				<category><![CDATA[Blockchain]]></category>
		<category><![CDATA[blockchain]]></category>
		<category><![CDATA[crypto]]></category>
		<guid isPermaLink="false">https://www.nicolaceliento.it/?p=1744</guid>

					<description><![CDATA[Il termine DeFi sta per decentralized finance, ossia finanza decentralizzata. Sostanzialmente rappresenta un insieme di servizi finanziari basati su blockchain che permettono lo scambio di credito e di debito sottoforma di cryptovalute, senza necessità di intermediari o di un server centrale, bensì utilizzando gli smart contract (contratti intelligenti), cioè programmi informatici che svolgono determinate azioni [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>Il termine <strong>DeFi </strong>sta per <strong><em>decentralized finance</em></strong>, ossia <strong>finanza decentralizzata</strong>. </p>



<p>Sostanzialmente rappresenta un <strong>insieme di servizi finanziari basati su blockchain </strong>che permettono lo scambio di credito e di debito sottoforma di <strong>cryptovalute</strong>, senza necessità di intermediari o di un server centrale, bensì utilizzando gli <strong>smart contract</strong> (contratti intelligenti), cioè programmi informatici che svolgono determinate azioni al verificarsi di eventi per rispettare un vero e proprio contratto, ossia un accordo tra le parti. </p>



<p>Questi servizi di DeFi vengono erogati attraverso applicazioni decentralizzate (vedi <a rel="noreferrer noopener" href="https://www.nicolaceliento.it/blog/blockchain/cosa-sono-le-dapp/" target="_blank"><strong>dApp &#8211; decentralized applications</strong></a>) che, accedendo ai wallet di coloro che le utilizzano, consentono lo scambio di asset digitali. Il principale campo di applicazione delle dApp è quello del trading di criptovalute su exchange decentralizzati (<strong>DEX</strong>).</p>



<p>Esistono tantissime piattaforme di DeFi e la maggior parte di queste è ospitata dal network della <strong>blockchain di Ethereum</strong> e consentono di:</p>



<p>1) prestare o prendere in prestito capitale<br>2) speculare sulle variazioni dei prezzi<br>3) scambiare criptovaluta<br>4) guadagnare interessi in un conto di risparmio assicurandosi contro i rischi</p>



<p>E&#8217; importante sapere che molte piattaforme DeFi che promuovono tassi di interesse elevati sono soggette ad alto rischio di perdita del capitale investito.</p>



<p>Nonostante la DeFi sia agli albori, nata poco meno di 2 anni fa, rappresenta un&#8217;economia che vale circa <strong>80 miliardi di dollari</strong> (fonte <a href="https://www.defipulse.com" target="_blank" rel="noreferrer noopener">https://www.defipulse.com</a>).</p>



<p>Per ulteriori approfondimenti sulla DeFi vi lascio alla visione di questo interessante video di Luca Boiardi, fondatore di <a rel="noreferrer noopener" href="https://thecryptogateway.it/" target="_blank">The Crypto Gateway</a> </p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe title="Corso di DeFi per principianti" width="696" height="392" src="https://www.youtube.com/embed/videoseries?list=PLhhAltp0qPbbQsJbdARhixeRQMvpKYlZW" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
</div></figure>
]]></content:encoded>
					
					<wfw:commentRss>https://www.nicolaceliento.it/blog/blockchain/cosa-e-la-defi-finanza-decentralizzata/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Come eseguire Docker Desktop su Virtual Machine Hyper-V</title>
		<link>https://www.nicolaceliento.it/code-snippet/tips-tricks-code-snippet/come-eseguire-docker-desktop-su-virtual-machine-hyper-v/</link>
					<comments>https://www.nicolaceliento.it/code-snippet/tips-tricks-code-snippet/come-eseguire-docker-desktop-su-virtual-machine-hyper-v/#respond</comments>
		
		<dc:creator><![CDATA[Nicola Celiento]]></dc:creator>
		<pubDate>Fri, 10 Dec 2021 17:53:00 +0000</pubDate>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Tips & Tricks]]></category>
		<category><![CDATA[docker]]></category>
		<category><![CDATA[hyper-v]]></category>
		<guid isPermaLink="false">https://www.nicolaceliento.it/?p=1703</guid>

					<description><![CDATA[In recenti progetti ho lavorato con la containerizzazione di applicazioni con Docker, e siccome la quasi totalità delle progettazioni e sviluppi li effettuo su macchine virtuali, anche per Docker ho dovuto procedere allo stesso modo su una virtual machine Microsoft&#160;Hyper-V. Se anche voi avete provato ad installare Docker Desktop su Windows su una macchina virtuale [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>In recenti progetti ho lavorato con la containerizzazione di applicazioni con Docker, e siccome la quasi totalità delle progettazioni e sviluppi li effettuo su macchine virtuali, anche per <strong>Docker </strong>ho dovuto procedere allo stesso modo <strong>su una virtual machine Microsoft&nbsp;Hyper-V</strong>. </p>



<p>Se anche voi avete provato ad installare <a rel="noreferrer noopener" href="https://docs.docker.com/desktop/windows/install/" data-type="URL" data-id="https://docs.docker.com/desktop/windows/install/" target="_blank"><strong>Docker Desktop su Windows</strong></a> su una macchina virtuale Hyper-V, rispettando i pre-requisiti software che indico in fondo all&#8217;articolo, sicuramente vi sarete imbattuti sul seguente errore:</p>



<p><em>System.InvalidOperationException:<br>   Failed to deploy distro docker-desktop </em><br>   <strong><em>Please enable the Virtual Machine Platform Windows feature and ensure virtualization is enabled in the BIOS.</em></strong></p>



<p>Se non avete risolto il problema, sappiate che la soluzione, che voglio condividere con voi in questo articolo, consiste nell&#8217;abilitare e quindi configurare quella che si chiama virtualizzazione annidata (<em><strong>nested virtualization</strong></em>) mediante il seguente comando PowerShell, <span style="text-decoration: underline;"><strong>da eseguire sulla macchina fisica con macchina virtuale spenta</strong></span>:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: powershell; title: ; notranslate">
Set-VMProcessor -VMName &quot;Nome macchina virtuale&quot; -ExposeVirtualizationExtensions $true
</pre></div>


<p>Questa configurazione può essere anche utilizzata per installare ed eseguire Hyper-V su una macchina virtuale Hyper-V, quindi una vera e propria virtualizzazione annidata.</p>



<p><strong>Prerequisiti </strong></p>



<p>L&#8217;host Hyper-V, quindi la macchina fisica che ospita quella virtuale, esegue Windows Server 2016 o Windows 10/11 Pro/Enterprise;<br>La macchina virtuale esegue Windows Server 2016 o Windows 10/11 Pro/Enterprise ;<br>La macchina virtuale Hyper-V ha una versione di configurazione 8.0 o successiva.<br></p>



<p> </p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.nicolaceliento.it/code-snippet/tips-tricks-code-snippet/come-eseguire-docker-desktop-su-virtual-machine-hyper-v/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Cosa sono le dApp?</title>
		<link>https://www.nicolaceliento.it/blog/blockchain/cosa-sono-le-dapp/</link>
					<comments>https://www.nicolaceliento.it/blog/blockchain/cosa-sono-le-dapp/#respond</comments>
		
		<dc:creator><![CDATA[Nicola Celiento]]></dc:creator>
		<pubDate>Fri, 19 Nov 2021 18:46:00 +0000</pubDate>
				<category><![CDATA[Blockchain]]></category>
		<category><![CDATA[blockchain]]></category>
		<category><![CDATA[crypto]]></category>
		<guid isPermaLink="false">https://www.nicolaceliento.it/?p=1690</guid>

					<description><![CDATA[Una dApp, tradotto dall&#8217;inglese Decentralized Application, è un&#8217;applicazione decentralizzata, ossia un programma software open source che, a differenza delle tradizionali applicazioni ospitate ed eseguite su una singola rete di computer (hosting tradizionale o cloud), vengono eseguite in una rete decentralizzato Peer to Peer (P2P), in cui nessuna entità ha il completo controllo. Le dApp fanno [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>Una <strong>dApp</strong>, tradotto dall&#8217;inglese <em>Decentralized Application</em>, è un&#8217;<strong>applicazione decentralizzata</strong>, ossia un programma software <em>open source</em> che, a differenza delle tradizionali applicazioni ospitate ed eseguite su una singola rete di computer (hosting tradizionale o cloud), vengono eseguite in una rete decentralizzato Peer to Peer (P2P), in cui nessuna entità ha il completo controllo.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img decoding="async" src="https://www.nicolaceliento.it/wp-content/uploads/2021/11/1200px-AppsVSdApps.jpg" alt=""/><figcaption class="wp-element-caption"><em>Apps VS dApps</em></figcaption></figure></div>


<p>Le dApp fanno uso della <strong>blockchain </strong>per archiviare i dati, per cui tutte le regole e i protocolli sono trasparenti e non possono essere modificati senza il consenso di tutti.<br>In una rete Peer to Peer di una blockchain, infatti, ogni informazione è condivisa tra tutti i partecipanti. Inoltre, una particolare tipologia di utenti, i cosiddetti minatori (miner), forniscono potenza di calcolo per mantenere in funzione la rete. Per incentivare questa attività ricevono ricompense sotto forma di token o crypto valuta.</p>



<p>Le principali blockchain su cui vengono sviluppate le dApp sono quella di <a href="https://ethereum.org" target="_blank" rel="noreferrer noopener"><strong>Ethereum</strong></a> e <a rel="noreferrer noopener" href="https://eos.io/" target="_blank"><strong>EOS</strong></a> che ospitano tre principali tipi di decentralized App:<br>1) applicazioni che gestiscono valuta, quali exchange<br>2) giochi, scommesse e gioco d’azzardo, quindi comunque applicaioni in cui la valuta è coinvolta in maniera indiretta<br>3) piattaforme di advertising</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.nicolaceliento.it/blog/blockchain/cosa-sono-le-dapp/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Azure DevOps</title>
		<link>https://www.nicolaceliento.it/blog/devops/azure-devops/</link>
					<comments>https://www.nicolaceliento.it/blog/devops/azure-devops/#respond</comments>
		
		<dc:creator><![CDATA[Nicola Celiento]]></dc:creator>
		<pubDate>Sun, 06 Jun 2021 08:05:07 +0000</pubDate>
				<category><![CDATA[DevOps]]></category>
		<category><![CDATA[azure]]></category>
		<category><![CDATA[azure devops]]></category>
		<category><![CDATA[Microsoft]]></category>
		<guid isPermaLink="false">https://www.nicolaceliento.it/?p=1618</guid>

					<description><![CDATA[Cos&#8217;è Azure DevOps? Azure DevOps è una piattaforma Software as a Service (SaaS) di Microsoft che fornisce un insieme di strumenti per lo sviluppo e la distribuzione di software. Si integra inoltre con la maggior parte degli strumenti DevOps (open source e non) presenti sul mercato, ed è un&#8217;ottima opzione per orchestrare una toolchain DevOps. [&#8230;]]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">Cos&#8217;è Azure DevOps?</h2>



<div class="wp-block-image"><figure class="alignright size-large is-resized"><a href="https://azure.microsoft.com/en-us/services/devops/" target="_blank" rel="noopener"><img decoding="async" src="https://www.nicolaceliento.it/wp-content/uploads/2021/06/index-hero-1024x879.jpg" alt="" class="wp-image-1623" width="272" height="233"/></a><figcaption><strong>Microsoft Azure DevOps</strong></figcaption></figure></div>



<p><strong>Azure DevOps</strong> è una piattaforma <strong>Software as a Service (SaaS)</strong> di <strong>Microsoft </strong>che fornisce un insieme di strumenti per lo sviluppo e la distribuzione di software. Si integra inoltre con la maggior parte degli strumenti DevOps (open source e non) presenti sul mercato, ed è un&#8217;ottima opzione per orchestrare una <strong>toolchain DevOps</strong>. Azure DevOps è disponibile sia nella versione cloud Azure che nella versione on premises denominata <strong>Azure DevOps Server</strong>.</p>



<h2 class="wp-block-heading">Quali servizi offre Azure DevOps?</h2>



<p>Azure DevOps comprende una gamma di servizi che coprono l&#8217;intero ciclo di vita dello sviluppo software che sono:</p>



<ul><li><strong>Azure Boards</strong>: fornisce strumenti per una pianificazione Agile ed il monitoraggio degli elementi di lavoro con strumenti di reporting del <strong>backlog di attività</strong>.</li><li><strong>Azure Pipelines</strong>: una piattaforma di <strong><em>Continuous Integration</em></strong> e <strong><em>Continuous Deployment</em></strong> <strong>CI/CD</strong> indipendente dal linguaggio, dalla piattaforma e dal cloud con supporto per Containers o Kubernetes.</li><li><strong>Azure Repos</strong>: per la gestione di <strong>repository Git</strong> privati ​​ospitati nel cloud oppure on premises.</li><li><strong>Azure Artifacts</strong>: fornisce strumenti per la gestione dei pacchetti integrata con supporto per feed di pacchetti Maven, npm, Python e NuGet da origini pubbliche o private.</li><li><strong>Azure Test Plans</strong>: fornisce una soluzione integrata per i piani di test.</li></ul>



<p>Azure DevOps è uno strumento <strong>flessibile</strong>, in quanto non bisogna necessariamente utilizzare tutti i servizi offerti, ma è possibile adottare ciascuno di essi in modo indipendente, ed è possibile integrarli con la propria catena di strumenti.</p>



<p>Azure DevOps può essere usato anche per orchestrare tantissimi strumenti DevOps di terze parti sia open source che a pagamento, come ad esempio <a rel="noreferrer noopener" href="https://www.atlassian.com/it/software/jira" target="_blank">Jira</a>, <a rel="noreferrer noopener" href="https://www.jenkins.io" target="_blank">Jenkins</a>, <a rel="noreferrer noopener" href="https://octopus.com/" data-type="URL" data-id="https://octopus.com/" target="_blank">Octopus Deploy</a>. Inoltre si integra con tanti altri strumenti per il <strong>provisioning</strong> e la <strong>gestione </strong>dell&#8217;<strong>infrastruttura Azure</strong> come <a rel="noreferrer noopener" href="https://www.ansible.com" target="_blank">Ansible</a>, <a rel="noreferrer noopener" href="https://www.chef.io" target="_blank">Chef</a>, <a rel="noreferrer noopener" href="https://puppet.com" target="_blank">Puppet</a> e <a rel="noreferrer noopener" href="https://www.terraform.io" target="_blank">Terraform</a>.</p>



<h2 class="wp-block-heading">Quali software possono essere sviluppati con Azure DevOps?</h2>



<p>Azure Devops non è rivolto soltanto alle organizzazioni orientate a Microsoft o Windows, infatti può funzionare con qualsiasi piattaforma, sia Linux che MacOS ed ovviamente Windows, ma anche con i più svariati linguaggi di programmazione, come app Node.js, Python, Java, PHP, Ruby, C/C++, Android, iOS e chiaramente .Net.</p>



<p>Inoltre è <strong>cloud agnostic</strong>, ossi supporta il <em>continuous deployment</em> anche per piattaforme cloud come <strong>AWS </strong>e <strong>GCP </strong>oltre a <strong>Azure</strong>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.nicolaceliento.it/blog/devops/azure-devops/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Microsoft Virtual Academy: Team Foundation Server 2012 Jump Start</title>
		<link>https://www.nicolaceliento.it/blog/microsoft/microsoft-virtual-academy-team-foundation-server-2012-jump-start/</link>
					<comments>https://www.nicolaceliento.it/blog/microsoft/microsoft-virtual-academy-team-foundation-server-2012-jump-start/#respond</comments>
		
		<dc:creator><![CDATA[Nicola Celiento]]></dc:creator>
		<pubDate>Fri, 30 Sep 2016 18:00:05 +0000</pubDate>
				<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Team Foundation Server]]></category>
		<category><![CDATA[ALM]]></category>
		<category><![CDATA[MVA]]></category>
		<category><![CDATA[team foundation server]]></category>
		<guid isPermaLink="false">http://www.nicolaceliento.it/?p=1301</guid>

					<description><![CDATA[Microsoft ha rilasciato di recente una piattaforma per l&#8217;e-learning: la Microsoft Virtual Academy (MVA). Ogni settimana sono disponibili nuovi corsi, ed è possibile iscriversi gratuitamente a numerosi corsi su prodotti e tecnologie Microsoft; una vera occasione per una formazione gratuita fornita da esperti Microsoft. Microsoft Virtual Academy fornisce (previa autenticazione con account Microsoft) una dashboard [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Microsoft ha rilasciato di recente una piattaforma per l&#8217;e-learning: la <strong><a href="https://mva.microsoft.com" target="_blank" rel="noopener">Microsoft Virtual Academy (MVA)</a></strong>.<br />
Ogni settimana sono disponibili nuovi corsi, ed è possibile iscriversi gratuitamente a numerosi corsi su prodotti e tecnologie Microsoft; una vera occasione per una formazione gratuita fornita da esperti Microsoft.<br />
Microsoft Virtual Academy fornisce (previa autenticazione con account Microsoft) una <strong><a href="https://mva.microsoft.com/MyMVA/Dashboard.aspx" target="_blank" rel="noopener">dashboard</a></strong> che tiene traccia del proprio piano di studi personale, i corsi attivi con relativa percentuale di completamento, ed i corsi completati.</p>
<p>Inoltre, effettuando l&#8217;accesso a Microsoft Virtual Academy, si può usufruire di uno <strong>sconto del 50% sugli e-book e del 40% sui libri stampati</strong>.</p>
<p>Per una prima &#8216;degustazione&#8217; della nuova piattaforma, vi riporto di seguito un interessante corso (<strong>Administering Visual Studio TFS 2012 Jump Start</strong>) relativo a <strong>Team Foundation Server 2012</strong>, un prodotto Microsoft per la gestione del Source Versioning e per l&#8217;application lifecycle management.</p>
<blockquote><p><strong>Overview &#038; Install and Configure Team Foundation Server (Part 1)</strong></p></blockquote>
<p><iframe loading="lazy" src="https://mva.microsoft.com/en-US/training-courses-embed/administering-visual-studio-tfs-2012-jump-start-8226/Overview-Install-and-Configure-Team-Foundation-Server-Part-1--AuGTUuIy_2304984382" width="426" height="472" allowFullScreen frameBorder="0"></iframe></p>
<blockquote><p><strong>Install and Configure Team Foundation Server (Part 2)</strong></p></blockquote>
<p><iframe loading="lazy" src="https://mva.microsoft.com/en-US/training-courses-embed/administering-visual-studio-tfs-2012-jump-start-8226/Install-and-Configure-Team-Foundation-Server-Part-2--sQHKzuIy_604984382" width="426" height="472" allowFullScreen frameBorder="0"></iframe></p>
<blockquote><p><strong>Manage Team Foundation Server (Part 1)</strong></p></blockquote>
<p><iframe loading="lazy" src="https://mva.microsoft.com/en-US/training-courses-embed/administering-visual-studio-tfs-2012-jump-start-8226/Manage-Team-Foundation-Server-Part-1--8BkKLvIy_304984382" width="426" height="472" allowFullScreen frameBorder="0"></iframe></p>
<blockquote><p><strong>Manage Team Foundation Server (Part 2)</strong></p></blockquote>
<p><iframe loading="lazy" src="https://mva.microsoft.com/en-US/training-courses-embed/administering-visual-studio-tfs-2012-jump-start-8226/Manage-Team-Foundation-Server-Part-2--AZdchvIy_9604984382" width="426" height="472" allowFullScreen frameBorder="0"></iframe></p>
<blockquote><p><strong>Customize Team Foundation Server for Team Use</strong></p></blockquote>
<p><iframe loading="lazy" src="https://mva.microsoft.com/en-US/training-courses-embed/administering-visual-studio-tfs-2012-jump-start-8226/Customize-Team-Foundation-Server-for-Team-Use-bxDi4vIy_2304984382" width="426" height="472" allowFullScreen frameBorder="0"></iframe></p>
<blockquote><p><strong>Administer Version Control</strong></p></blockquote>
<p><iframe loading="lazy" src="https://mva.microsoft.com/en-US/training-courses-embed/administering-visual-studio-tfs-2012-jump-start-8226/Administer-Version-Control-bGGoPwIy_9304984382" width="426" height="472" allowFullScreen frameBorder="0"></iframe></p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.nicolaceliento.it/blog/microsoft/microsoft-virtual-academy-team-foundation-server-2012-jump-start/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>DevOps and Application Lifecycle Management</title>
		<link>https://www.nicolaceliento.it/blog/microsoft/devops-and-application-lifecycle-management/</link>
					<comments>https://www.nicolaceliento.it/blog/microsoft/devops-and-application-lifecycle-management/#respond</comments>
		
		<dc:creator><![CDATA[Nicola Celiento]]></dc:creator>
		<pubDate>Sat, 07 May 2016 11:51:41 +0000</pubDate>
				<category><![CDATA[DevOps]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Team Foundation Server]]></category>
		<category><![CDATA[ALM]]></category>
		<category><![CDATA[team foundation server]]></category>
		<category><![CDATA[Visual Studio]]></category>
		<guid isPermaLink="false">http://www.nicolaceliento.it/?p=1281</guid>

					<description><![CDATA[Microsoft extended&#160;Visual Studio Online and Team Foundation Server 2015 (Update 2) on premises with Release Management tools. You can implement DevOps solution for delivering your software easily and more frequently. It enables you to: Automate your deployments Automate approval workflows Retain full traceability Apply security policies and manage users Easily deploy to on-premises and Azure [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Microsoft extended&nbsp;Visual Studio Online and Team Foundation Server 2015 (Update 2) on premises with Release Management tools.</p>
<p>You can implement DevOps solution for delivering your software easily and more frequently.</p>
<p>It enables you to:</p>
<ul>
<li>Automate your deployments</li>
<li>Automate approval workflows</li>
<li>Retain full traceability</li>
<li>Apply security policies and manage users</li>
<li>Easily deploy to on-premises and Azure</li>
<li>Extend Release Management with customizations</li>
</ul>
<p><a href="https://youtu.be/7-Eazr2K9K4">https://youtu.be/7-Eazr2K9K4</a><br />
(<i>double click to enlarge</i>)</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.nicolaceliento.it/blog/microsoft/devops-and-application-lifecycle-management/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Come eseguire un programma Python su LXTerminal Raspberry Pi</title>
		<link>https://www.nicolaceliento.it/code-snippet/single-board-computer/come-eseguire-un-programma-python-su-lxterminal-raspberry-pi/</link>
					<comments>https://www.nicolaceliento.it/code-snippet/single-board-computer/come-eseguire-un-programma-python-su-lxterminal-raspberry-pi/#comments</comments>
		
		<dc:creator><![CDATA[Nicola Celiento]]></dc:creator>
		<pubDate>Mon, 30 Nov 2015 19:08:35 +0000</pubDate>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[Single-Board Computer]]></category>
		<category><![CDATA[Logica programmabile]]></category>
		<category><![CDATA[Raspberry Pi]]></category>
		<category><![CDATA[RPi]]></category>
		<guid isPermaLink="false">http://www.nicolaceliento.it/?p=1246</guid>

					<description><![CDATA[If you are new to using Python on the Raspberry Pi, this article may help you. First of all, let&#8217;s create a simple Python program directly from RPi module, using LeafPad text editor provisioned out of the box with Raspbian operating system. Therefore, let&#8217;s open LeafPad, past the following Python program code snippet: and save [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><!--:en--></p>
<p>If you are new to using Python on the Raspberry Pi, this article may help you.<br />
First of all, let&#8217;s create a simple Python program directly from RPi module, using <b>LeafPad</b> text editor provisioned out of the box with Raspbian operating system.<br />
Therefore, let&#8217;s open <b>LeafPad</b>, past the following Python program code snippet:</p>
<pre class="brush: python; title: ; notranslate">
import datetime

dt = datetime.datetime.now()

print str(dt)
</pre>
<p>and save the fine on Desktop with name DateTimeProgram.py</p>
<p>Now open Raspbian terminal <b>LXTerminal</b> and type the following command to reach the Desktop folder:</p>
<pre class="brush: powershell; title: ; notranslate">
cd /home/pi/Desktop
</pre>
<p>Next, type the following command to run DateTimeProgram Python program and type Enter key:</p>
<pre class="brush: powershell; title: ; notranslate">
python DateTimeProgram.py
</pre>
<p>The program should now be running and print the dae and time on the output console.<!--:--><!--:it--></p>
<p>Se sei un neofita nell&#8217;utilizzo di Python sul modulo Raspberry Pi, questo è un articolo che potrebbe esserti d&#8217;aiuto.<br />
Creaiamo innanzitutto un semplice programma Python direttamente dal modulo RPi utilizzando l&#8217;editor di testo <b>LeafPad</b> fornito direttamente con l&#8217;istallazione di Raspbian.<br />
Dunque, apriamo <b>LeafPad</b>, incolliamo la seguente porzione di programma Python:</p>
<pre class="brush: python; title: ; notranslate">
import datetime

dt = datetime.datetime.now()

print str(dt)
</pre>
<p>e salviamo il file sul Desktop con il nome DateTimeProgram.py</p>
<p>Una volta creato il file sul Desktop, apriamo il terminal di Raspbian <b>LXTerminal</b> ed inseriamo il seguente comando per posizionarci nella cartella contente il programma (Desktop):</p>
<pre class="brush: powershell; title: ; notranslate">
cd /home/pi/Desktop
</pre>
<p>successivamente, digitare il seguente comando per eseguire il programma Python e premere Invio:</p>
<pre class="brush: powershell; title: ; notranslate">
python DateTimeProgram.py
</pre>
<p>Il programma dovrebbe avviarsi e visualizzare sulla console di output la data e l&#8217;ora corrente.<!--:--></p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.nicolaceliento.it/code-snippet/single-board-computer/come-eseguire-un-programma-python-su-lxterminal-raspberry-pi/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>HTML5 Chart JS on ASP.NET and jQuery with export canvas image</title>
		<link>https://www.nicolaceliento.it/code-snippet/framework-net/asp-net/html5-chart-js-on-asp-net-and-jquery-with-export-canvas-image/</link>
					<comments>https://www.nicolaceliento.it/code-snippet/framework-net/asp-net/html5-chart-js-on-asp-net-and-jquery-with-export-canvas-image/#respond</comments>
		
		<dc:creator><![CDATA[Nicola Celiento]]></dc:creator>
		<pubDate>Mon, 04 May 2015 06:13:33 +0000</pubDate>
				<category><![CDATA[AJAX]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Visual Studio]]></category>
		<category><![CDATA[canvas]]></category>
		<category><![CDATA[carthjs]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[webmethod]]></category>
		<guid isPermaLink="false">http://www.nicolaceliento.it/?p=1173</guid>

					<description><![CDATA[This post will show how to use the Chart.js library to build amazing HTML5 report with jQuery and ASP.NET and how to save the rendered report image. Chart.js uses the HTML5 &#60;canvas&#62; element, supported in all modern browsers, and visualize your data in 6 different ways, each of them animated, with a lot of customisation [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><!--:en--></p>
<p>This post will show how to use the <a href="http://www.chartjs.org" target="_blank" rel="noopener">Chart.js</a> library to build amazing HTML5 report with jQuery and ASP.NET and how to save the rendered report image.</p>
<p>Chart.js uses the HTML5 &lt;canvas&gt; element, supported in all modern browsers, and visualize your data in 6 different ways, each of them animated, with a lot of customisation options and interactivity extensions.</p>
<p>In the following example we will use the Radar chart type that will output the following image:</p>
<p><img decoding="async" src="http://www.nicolaceliento.it/wp-content/uploads/2015/05/HTML5_ChartJS_Radar_Report.png" alt="HTML5 ChartJS Radar Report" class="alignnone size-full wp-image-1174"></p>
<p>The report required data are requested to the server with a call to a Web Method by jQuery AJAX and exposed through .NET.<br />
The client side Javascript function is the following:</p>
<pre class="brush: jscript; title: ; notranslate">
function GetReport()
{
var filterByName = &quot;fiter value&quot;;

$.ajax({
type: &quot;POST&quot;,
url: &quot;Default.aspx/GetReportData&quot;,
data: '{name: &quot;' + filterByName + '&quot; }',
contentType: &quot;application/json; charset=utf-8&quot;,
dataType: &quot;json&quot;,
success: function (response) {
var reportData = JSON.parse(response.d);
var reportObj = document.getElementById(&quot;canvas&quot;);
window.myRadar = new Chart(reportObj.getContext(&quot;2d&quot;)).Radar(reportData, {
responsive: true
});
},
error: function (msg) {
alert(msg);
}
});
}
</pre>
<p>The server side Web Method returns data serialized in JSON format with the following code snippet:</p>
<pre class="brush: csharp; title: ; notranslate">
[WebMethod]
public static string GetReportData(string name)
{
var result = GetDataFromDatabase();
return new JavaScriptSerializer().Serialize(result);
}
</pre>
<p>Finally, there is the possibility to save the rendered image with the following client side function:</p>
<pre class="brush: jscript; title: ; notranslate">
function SaveReport() {
var image = document.getElementById(&quot;canvas&quot;).toDataURL(&quot;image/png&quot;);
image = image.replace('data:image/png;base64,', '');

$.ajax({
type: 'POST',
url: '/Default.aspx/SaveReport',
data: '{ &quot;imageData&quot; : &quot;' + image + '&quot; }',
contentType: 'application/json; charset=utf-8',
dataType: 'json',
success: function (msg) {
alert('Image saved!');
}
});
}
</pre>
<p>and the following server side Web Method:</p>
<pre class="brush: csharp; title: ; notranslate">
[WebMethod]
public static void SaveReport(string imageData)
{
//Server.MapPath
string path = HttpContext.Current.Server.MapPath(&quot;SavedReports&quot;) + &quot;\\report.png&quot;;

FileStream fs = new FileStream(path, FileMode.Create);
BinaryWriter bw = new BinaryWriter(fs);

byte[] data = Convert.FromBase64String(imageData);

bw.Write(data);
bw.Close();
}
</pre>
<p>Download the entire example of <a href="http://www.nicolaceliento.it/wp-content/uploads/2015/05/HTML5ChartJSwithAspNetandjQuery.zip" target="_blank" rel="noopener">HTML5 Chart JS on ASP.NET and jQuery with export canvas image</a> developed with Visual Studio 2013.<!--:--><!--:it--></p>
<p>In questo articolo verrà illustrato come è possibile utilizzare la libreria <a href="http://www.chartjs.org" target="_blank" rel="noopener">Chart.js</a> per costruire sorprendenti report in HTML5 utilizzando jQuery e ASP.NET e come è possibile salvare l&#8217;immagine del report generato.</p>
<p>Chart.js utilizza l&#8217;elemento &lt;canvas&gt; di HTML5, che è supportato da tutti i moderni browser, e da la possibilità di visualizzare i dati in 6 modi diversi, in modo animato, con diverse opzioni di personalizzazione ed estensioni interattive.</p>
<p>Nell&#8217;esempio seguente verrà utilizzato il grafico di tipo Radar che darà in output la seguente immagine:</p>
<p><img decoding="async" src="http://www.nicolaceliento.it/wp-content/uploads/2015/05/HTML5_ChartJS_Radar_Report.png" alt="HTML5 ChartJS Radar Report" class="alignnone size-full wp-image-1174"></p>
<p>I dati necessari al report vengono richiesti al server con una chiamata jQuery AJAX ad un Web Method esposto mediante .NET con la seguente funziona Javascript:</p>
<pre class="brush: jscript; title: ; notranslate">
function GetReport()
{
var filterByName = &quot;fiter value&quot;;

$.ajax({
type: &quot;POST&quot;,
url: &quot;Default.aspx/GetReportData&quot;,
data: '{name: &quot;' + filterByName + '&quot; }',
contentType: &quot;application/json; charset=utf-8&quot;,
dataType: &quot;json&quot;,
success: function (response) {
var reportData = JSON.parse(response.d);
var reportObj = document.getElementById(&quot;canvas&quot;);
window.myRadar = new Chart(reportObj.getContext(&quot;2d&quot;)).Radar(reportData, {
responsive: true
});
},
error: function (msg) {
alert(msg);
}
});
}
</pre>
<p>Il Web Method lato server, restituisce i dati serializzati in formato JSON:</p>
<pre class="brush: csharp; title: ; notranslate">
[WebMethod]
public static string GetReportData(string name)
{
var result = GetDataFromDatabase();
return new JavaScriptSerializer().Serialize(result);
}
</pre>
<p>Infine, viene data la possibilità di salvare il report come immagine (png) con la seguente funzione lato client:</p>
<pre class="brush: jscript; title: ; notranslate">
function SaveReport() {
var image = document.getElementById(&quot;canvas&quot;).toDataURL(&quot;image/png&quot;);
image = image.replace('data:image/png;base64,', '');

$.ajax({
type: 'POST',
url: '/Default.aspx/SaveReport',
data: '{ &quot;imageData&quot; : &quot;' + image + '&quot; }',
contentType: 'application/json; charset=utf-8',
dataType: 'json',
success: function (msg) {
alert('Image saved!');
}
});
}
</pre>
<p>e con il seguente Web Method lato server:</p>
<pre class="brush: csharp; title: ; notranslate">
[WebMethod]
public static void SaveReport(string imageData)
{
//Server.MapPath
string path = HttpContext.Current.Server.MapPath(&quot;SavedReports&quot;) + &quot;\\report.png&quot;;

FileStream fs = new FileStream(path, FileMode.Create);
BinaryWriter bw = new BinaryWriter(fs);

byte[] data = Convert.FromBase64String(imageData);

bw.Write(data);
bw.Close();
}
</pre>
<p>Scarica l&#8217;esempio completo di <a href="http://www.nicolaceliento.it/wp-content/uploads/2015/05/HTML5ChartJSwithAspNetandjQuery.zip" target="_blank" rel="noopener">HTML5 Chart JS on ASP.NET and jQuery with export canvas image</a> sviluppato con Visual Studio 2013.<!--:--></p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.nicolaceliento.it/code-snippet/framework-net/asp-net/html5-chart-js-on-asp-net-and-jquery-with-export-canvas-image/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>TSQL &#8211; How to find missing or deleted table identity autoincrement values</title>
		<link>https://www.nicolaceliento.it/code-snippet/t-sql/tsql-how-to-find-missing-or-deleted-table-identity-autoincrement-values/</link>
					<comments>https://www.nicolaceliento.it/code-snippet/t-sql/tsql-how-to-find-missing-or-deleted-table-identity-autoincrement-values/#respond</comments>
		
		<dc:creator><![CDATA[Nicola Celiento]]></dc:creator>
		<pubDate>Fri, 09 May 2014 16:24:49 +0000</pubDate>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Ms SQL Server]]></category>
		<category><![CDATA[T-SQL]]></category>
		<category><![CDATA[sql]]></category>
		<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[Tips & Tricks]]></category>
		<category><![CDATA[tsql]]></category>
		<guid isPermaLink="false">http://www.nicolaceliento.it/?p=1100</guid>

					<description><![CDATA[As a database designer, I often create on database tables the primary key as identity autoincrement and sometimes I needed to find missing or deleted IDs thet interrupt the sequence of autoincrement number on the primary key. To do this you can create a sequence from 1 (or 0 based on setted RESEED) to MAX [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><!--:en--></p>
<p>As a database designer, I often create on database tables the primary key as <b>identity autoincrement</b> and sometimes I needed to find missing or deleted IDs thet interrupt the sequence of autoincrement number on the primary key.<br />
To do this you can create a sequence from 1 (or 0 based on setted RESEED) to MAX ID available on the table and than make a LEFT JOIN of this sequence with start table.</p>
<p>The following snippet <b>get the list of IDs of identity autoincrement column that interrupt the sequence of autoincrement values</b>:</p>
<pre class="brush: sql; title: ; notranslate">
DECLARE @START_ID INT,  @MAXID INT

SET @START_ID = 1
SET @MAXID = (SELECT MAX(ID) FROM [TABLENAME_TO_CHECK])

DECLARE @SEQUENCE_TABLE TABLE (ID BIGINT)

--CREATE TABLE WITH ID FROM [@START_ID] TO [MAX TABLE ID]
WHILE @START_ID &amp;lt; @MAXID
	BEGIN
		INSERT INTO @SEQUENCE_TABLE VALUES(@START_ID)

		SET @START_ID = @START_ID + 1
	END

SELECT S.ID AS [MISSING ID] 
FROM @SEQUENCE_TABLE S 
		LEFT JOIN [TABLENAME_TO_CHECK] AS T ON  S.ID = T.ID
WHERE T.ID IS NULL
</pre>
<p><!--:--><!--:it--></p>
<p>In qualità di database designer, spesso creo la chiave primaria come <b>identity autoincrement</b> sulle tabelle del database ed alcune volte mi è capitato di dover trovare gli ID che sono stati cancellati, per cui interrompono la sequenza dell&#8217;identity autoincrement su campo chiave.<br />
Per fare questo si può semplicemente creare una sequenza che va da 1 (oppure 0 in base al RESEED impostato) al MAX ID presente sulla tabella e, successivamente, mettere in LEFT JOIN questa sequenza con la tabella originaria.</p>
<p>Di seguito lo snippet per <b>recuperare gli ID di un campo identity autoincrement che interrompono la sequenza di valori</b>:</p>
<pre class="brush: sql; title: ; notranslate">
DECLARE @START_ID INT,  @MAXID INT

SET @START_ID = 1
SET @MAXID = (SELECT MAX(ID) FROM [TABLENAME_TO_CHECK])

DECLARE @SEQUENCE_TABLE TABLE (ID BIGINT)

--CREATE TABLE WITH ID FROM [@START_ID] TO [MAX TABLE ID]
WHILE @START_ID &amp;lt; @MAXID
	BEGIN
		INSERT INTO @SEQUENCE_TABLE VALUES(@START_ID)

		SET @START_ID = @START_ID + 1
	END

SELECT S.ID AS [MISSING ID] 
FROM @SEQUENCE_TABLE S 
		LEFT JOIN [TABLENAME_TO_CHECK] AS T ON  S.ID = T.ID
WHERE T.ID IS NULL
</pre>
<p><!--:--></p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.nicolaceliento.it/code-snippet/t-sql/tsql-how-to-find-missing-or-deleted-table-identity-autoincrement-values/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
