<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Gaetano D'Orsi</title>
    <description>The latest articles on Forem by Gaetano D'Orsi (@tudor44).</description>
    <link>https://forem.com/tudor44</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F375949%2F8b506ba1-4e1a-4220-8e5a-792a599c61df.jpg</url>
      <title>Forem: Gaetano D'Orsi</title>
      <link>https://forem.com/tudor44</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/tudor44"/>
    <language>en</language>
    <item>
      <title>[ITALIAN] Nuovo template di progetto per gestire la fatturazione elettronica italiana</title>
      <dc:creator>Gaetano D'Orsi</dc:creator>
      <pubDate>Mon, 17 Jul 2023 06:56:31 +0000</pubDate>
      <link>https://forem.com/tudor44/italian-nuovo-template-di-progetto-per-gestire-la-fatturazione-elettronica-italiana-pd4</link>
      <guid>https://forem.com/tudor44/italian-nuovo-template-di-progetto-per-gestire-la-fatturazione-elettronica-italiana-pd4</guid>
      <description>&lt;p&gt;Link v0.0.1:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/Tudor44/base-app-fatture-elettroniche"&gt;https://github.com/Tudor44/base-app-fatture-elettroniche&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Pillars of Spring Security: A Pre-Authentication component in a complex scenario.</title>
      <dc:creator>Gaetano D'Orsi</dc:creator>
      <pubDate>Thu, 29 Jun 2023 07:02:06 +0000</pubDate>
      <link>https://forem.com/tudor44/pillars-of-spring-security-a-pre-authentication-component-in-a-complex-scenario-34g1</link>
      <guid>https://forem.com/tudor44/pillars-of-spring-security-a-pre-authentication-component-in-a-complex-scenario-34g1</guid>
      <description>&lt;p&gt;After a nostalgic look back at the rich history of computer science, it's time to jump into a more technical topic.&lt;/p&gt;

&lt;p&gt;In the extensive field of application security within the Java ecosystem, Spring Security has carved out a name for itself by offering robust and adaptable solutions for protecting Spring-based applications. Despite some criticisms regarding verbosity and occasional perceptions of inadequate official support, this framework is celebrated for its customizability. It provides ready-to-use solutions for a wide range of common security concerns, along with the tools needed to handle more complex and, at times, seemingly unfeasible niche scenarios.&lt;/p&gt;

&lt;p&gt;In the realm of system security, certain topics are more nuanced and specialized, requiring a more delicate understanding and approach. Pre-authentication is one such topic - a unique authentication scenario that, although uncommon, can prove to be critical in certain application contexts. It may seem daunting or not frequently encountered in daily scenarios, but rest assured, Spring Security has solutions in place.&lt;/p&gt;

&lt;p&gt;In this article, our goal is to demystify this challenging topic by breaking it down to its fundamental components and demonstrating how Spring Security's components can be efficiently harnessed to handle it.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Landscape of Pre-Authentication
&lt;/h3&gt;

&lt;p&gt;In a typical application, authentication is handled internally, often involving , for example, user forms or OAuth tokens. However, in some setups and configurations, an application may rely on external systems for authentication. &lt;/p&gt;

&lt;p&gt;These external systems verify the user's identity and then pass the authentication details, usually a user identifier, to the application. This incoming user identifier, often and support in the form of a request header or a cookie, indicates that the user has been already authenticated on an external component or system.&lt;/p&gt;

&lt;p&gt;As uncommon as this scenario might sound, in a more fashioned it's quite prevalent in architectures where a central security component, and protected, authenticates the user and then forwards the request to the application, often in microservices-based designs or corporate environments.&lt;/p&gt;

&lt;p&gt;Spring Security provides powerful support for these pre-authenticated scenarios, giving developers and engineers the tools to seamlessly integrate this workflow into their application's security architecture. In the next paragraph, we will deep dive into how Spring Security handles pre-authentication, underlining its versatility and its functionality in catering to both general and specific security needs.&lt;/p&gt;

&lt;h3&gt;
  
  
  Create your Pre-Authentication class
&lt;/h3&gt;

&lt;p&gt;To manage pre-authentication, we should invole the &lt;strong&gt;AbstractPreAuthenticatedProcessingFilter&lt;/strong&gt;. Despite its somewhat intimidating name, this class is designed to handle requests in which pre-authentication has been conducted by external components. The essential task here is to create a custom filter by extending the AbstractPreAuthenticatedProcessingFilter with our implementation.&lt;/p&gt;

&lt;p&gt;This is an example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;javax.servlet.http.HttpServletRequest&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;org.springframework.security.web.authentication.preauth.AbstractPreAuthenticatedProcessingFilter&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;HeaderPreAuthenticatedProcessingFilter&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nc"&gt;AbstractPreAuthenticatedProcessingFilter&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;

    &lt;span class="nd"&gt;@Override&lt;/span&gt;
    &lt;span class="kd"&gt;protected&lt;/span&gt; &lt;span class="nc"&gt;Object&lt;/span&gt; &lt;span class="nf"&gt;getPreAuthenticatedPrincipal&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;HttpServletRequest&lt;/span&gt; &lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getHeader&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"PreAuthenticatedHeader"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;

    &lt;span class="nd"&gt;@Override&lt;/span&gt;
    &lt;span class="kd"&gt;protected&lt;/span&gt; &lt;span class="nc"&gt;Object&lt;/span&gt; &lt;span class="nf"&gt;getPreAuthenticatedCredentials&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;HttpServletRequest&lt;/span&gt; &lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s"&gt;"Not handled here"&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In this custom filter, for a straightforward situation, we extract the pre-authenticated principal from the HTTP request header. In a more complex scenario, we may need to invoke another service for additional checks, carry out some security controls, adhere to our security protocol, and so on. The possibilities are countless.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;getPreAuthenticatedCredentials()&lt;/strong&gt; method is not utilized because the authentication is conducted externally.&lt;/p&gt;

&lt;h3&gt;
  
  
  Implement your authentication's action
&lt;/h3&gt;

&lt;p&gt;Next, we need to provide an authentication implementation that the filter will use to retrieve the principal's information.&lt;/p&gt;

&lt;p&gt;After expained that, we are ready to create an implementation of AuthenticationManager for using the pre-authentication scenario created before, where we fetch principal from the request:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;org.springframework.security.authentication.UsernamePasswordAuthenticationToken&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;org.springframework.security.core.Authentication&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;javax.servlet.http.HttpServletRequest&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;HeaderAuthenticator&lt;/span&gt; &lt;span class="kd"&gt;implements&lt;/span&gt; &lt;span class="nc"&gt;AuthenticationManager&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;

    &lt;span class="nd"&gt;@Override&lt;/span&gt;
    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="nc"&gt;Authentication&lt;/span&gt; &lt;span class="nf"&gt;authenticate&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;HttpServletRequest&lt;/span&gt; &lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;principal&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getHeader&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"PreAuthenticatedHeader"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;principal&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;UsernamePasswordAuthenticationToken&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;principal&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt;
        &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;AuthenticationServiceException&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"PreAuthenticatedHeader not found in the request"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In this implementation, the authenticate() method fetches the principal from the &lt;strong&gt;PreAuthenticatedHeader&lt;/strong&gt; header of the request and returns an Authentication object using UsernamePasswordAuthenticationToken class , this class is used to hold the user's information during the authentication process.&lt;/p&gt;

&lt;p&gt;It's important to note that the UsernamePasswordAuthenticationToken &lt;br&gt;
object isn't fully authenticated yet. We only set the principal as parameter (the subject that is or has been authenticated) and leave the credentials as null because the actual authentication was done externally.&lt;/p&gt;

&lt;p&gt;This demonstration is minimal. In a complete implementation, you would typically add additional checks, such as ensuring the header isn't empty, and perhaps other application-specific validations. If the authentication fails for any reason, you would generally throw an authentication exception or call other external handlers to perform additional computations, and so on...&lt;/p&gt;

</description>
      <category>java</category>
      <category>architecture</category>
      <category>spring</category>
      <category>security</category>
    </item>
    <item>
      <title>[Italian] L'Olivetti di Mario Tchou, uno sfortunato destino.</title>
      <dc:creator>Gaetano D'Orsi</dc:creator>
      <pubDate>Mon, 26 Jun 2023 16:18:33 +0000</pubDate>
      <link>https://forem.com/tudor44/italian-lolivetti-di-mario-tchou-uno-sfortunato-destino-3mgg</link>
      <guid>https://forem.com/tudor44/italian-lolivetti-di-mario-tchou-uno-sfortunato-destino-3mgg</guid>
      <description>&lt;p&gt;Il giorno 26 Giugno del 1924 nacque a Roma Mario Tchou , un ingegnere elettronico di origine cinese. &lt;/p&gt;

&lt;p&gt;Fu a capo di uno gruppo di progettisti che lavorarono alla costruzione dei primi computer a transistor nella storia.&lt;br&gt;
Si formo negli Stati Uniti, figlio di un diplomatico cinese in servizio negli uffici del Vaticano a Roma.&lt;/p&gt;

&lt;p&gt;Il leggendario Olivetti Elea 9003, presentato a Milano nell'Aprile del 1959, era uno dei prodotti della linea di computer ELEA.&lt;br&gt;
ELEA stava per Elaboratore Elettronico Aritmetico, e il nome fu scelto in onore della scuola Filosofica nata nell'antica città di Elea, fondata dal Filosofo presocratico Parmenide, ora l'odierna Ascea in provincia di Salerno. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--eqfDFiF0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0ey1n6bcrdncae5dzqvr.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--eqfDFiF0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0ey1n6bcrdncae5dzqvr.jpg" alt="Image description" width="800" height="532"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;L'ELEA è stato sicuramente tra i primi computer in Europa ad essere commercializzato, prima di alcuni esperimenti di alcuni prototipi costruiti all'università di Manchester a metà degli anni 50.&lt;/p&gt;

&lt;p&gt;Morì tragicamente in un incidente stradale il 9 novembre 1961, mentre stava andando ad Ivrea a discutere di un nuovo prototipo da costruire. &lt;br&gt;
Alcuni dissero che l'incidente non è stata una fatalità.&lt;/p&gt;

&lt;p&gt;Tra cui una recente intervista a Carlo De Benedetti, che dichiarò che dietro ci furono i Servizi Segreti USA intenzionati a indebolire l’Olivetti e l'Italia e per favorire la nascente IBM, che creò un prototipo simile (l'IBM 7090) uscito nel Novembre del 1959.&lt;/p&gt;

&lt;p&gt;Non lo sapremo mai, certamente non è difficile pensare comunque ad una tragica fatalità, accompagnata al decesso dell'anno prima del fondatore Adriano Olivetti.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>[Italian] Konrad Zuse, l'inventore del computer moderno durante la Germania nazista</title>
      <dc:creator>Gaetano D'Orsi</dc:creator>
      <pubDate>Thu, 22 Jun 2023 07:57:15 +0000</pubDate>
      <link>https://forem.com/tudor44/italian-konrad-zuse-linventore-del-computer-moderno-durante-la-germania-nazista-2kn</link>
      <guid>https://forem.com/tudor44/italian-konrad-zuse-linventore-del-computer-moderno-durante-la-germania-nazista-2kn</guid>
      <description>&lt;p&gt;Oggi anniversario della nascita di Konrad Zuse.&lt;/p&gt;

&lt;p&gt;Nato in Germania, a Berlino il 22 Giugno 1910, si formò come Ingegnere Civile nel 1935.&lt;/p&gt;

&lt;p&gt;Mentre lavorava in Henschel &amp;amp; Sohn, un'azienda che si occupava di lavori di ingegneria strutturale, costruiì lo Z1 nella sua casa aiutato dalla sua Famiglia. Fu Il primo prototipo di un computer che fosse programmabile.&lt;/p&gt;

&lt;p&gt;Il convegno internazionale di Informatica del 1998 riconobbe a Konrad Zuse con il suo "Z1" il ruolo di inventore del primo computer programmabile, "che poteva funzionare" della storia.&lt;br&gt;
Durante lo scoppio della Guerra, disegnò anche il primo linguaggio di programmazione della Storia il Plankalkül, tra il 1942 e il 1946.&lt;/p&gt;

&lt;p&gt;Non venne mai implementato e sovvenzionato dal governo per le evidenti difficoltà legate alla guerra.&lt;/p&gt;

&lt;p&gt;Fu pubblicato solo solo nel 1972. Il compilatore venne implementato nel 2000 presso la Technische Universität Berlin (un polo tecnologico univeritario), cinque anni dopo la morte di Zuse avvenuta nel 1995.&lt;br&gt;
Dopo la guerra fondò una società che rimase attiva fino al 1961 , quando venne acquisita dalla Siemens a causa di alcune difficoltà economiche, nel pieno dello sviluppo dell'industria IT. &lt;/p&gt;

&lt;p&gt;Settore poi dominato dagli USA, mentre in Europa solo l'italiana Olivetti riuscì a reggere il confronto per un periodo contro i colossi americani.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>[Italian] Blaise Pascal, 400 anni del genio universale a metà tra lo Spirito di finezza e lo Spirito geometrico</title>
      <dc:creator>Gaetano D'Orsi</dc:creator>
      <pubDate>Mon, 19 Jun 2023 08:54:09 +0000</pubDate>
      <link>https://forem.com/tudor44/italian-blaise-pascal-400-anni-del-genio-universale-a-meta-tra-lo-spirito-di-finezza-e-lo-spirito-geometrico-2nad</link>
      <guid>https://forem.com/tudor44/italian-blaise-pascal-400-anni-del-genio-universale-a-meta-tra-lo-spirito-di-finezza-e-lo-spirito-geometrico-2nad</guid>
      <description>&lt;p&gt;Esattamente quattrocento anni fa, in Francia, nasceva &lt;strong&gt;Blaise Pascal&lt;/strong&gt;, il genio universale che si poneva a metà tra lo spirito di finezza e lo spirito geometrico. Tale descrizione credo che rappresenti meglio la sintesi del suo straordinario contribuito alla storia umana.&lt;/p&gt;

&lt;p&gt;Risulterebbe insufficiente tentare di esplorare ogni singolo campo di interesse di Pascal. Come pioniere dell'informatica, costruì uno dei primi calcolatori meccanici, la Pascalina, tra i primi strumenti a gettare le basi per il futuro progresso tecnologico.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--kc-0nfvg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kc80hex9cji8s3y1kn6g.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--kc-0nfvg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kc80hex9cji8s3y1kn6g.jpg" alt="Image description" width="800" height="438"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A lui è stato dedicato il linguaggio di programmazione PASCAL, uno dei primi del suo genere, diffuso a cavallo dagli anni '70 e '80 , influenzando la maggior parte di quelli che utilizzati oggi.&lt;/p&gt;

&lt;p&gt;Nonostante una vita breve, morì a soli 39 anni, Pascal ha arricchito diverse discipline con i suoi teoremi e trattati sulla Fisica, la Matematica e la Geometria. Tra i suoi innumerevoli contributi spiccano le teorie sulle coniche, il calcolo combinatorio, la teoria della probabilità, e la legge dei fluidi.&lt;/p&gt;

&lt;p&gt;In Filosofia, Pascal è ricordato per la celebre Scommessa su Dio, ma anche per le sue decise e attente riflessioni sul valore dell'esistenza umana, anticipando pensatori come Leopardi, Kierkegaard, Schopenhauer e Nietzsche. &lt;br&gt;
Semplificando molto sostenne con convinzione che l'essere umano, non può affidarsi esclusivamente alla razionalità per comprendere il destino e il valore dell'esistenza, ponendo l'Uomo un essere a metà tra due spiriti quello &lt;strong&gt;geometrico&lt;/strong&gt; (razionalità e calcolo), e quello di &lt;strong&gt;finezza&lt;/strong&gt; (intuizione e sentimento).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--5pFyoAW4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zqng6nqn7i57ga1q5p1p.JPG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--5pFyoAW4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zqng6nqn7i57ga1q5p1p.JPG" alt="Image description" width="800" height="953"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Forse Pascal avrebbe previsto oggi, con gli strumenti tecnologici a nostra disposizione, la capacità di scrivere &lt;br&gt;
e aggiungere nuove pagine del mondo che ci rappresentiamo grazie alla nostra volontà di potenza, ossia il bisogno di modellare la nostra natura indipendentemente dal fatto che i risultati siano di natura positiva o negativa.&lt;/p&gt;

</description>
      <category>programming</category>
      <category>history</category>
      <category>pascal</category>
    </item>
    <item>
      <title>[Italian] Oltre il software: Educazione e Società della conoscenza nell’età digitale e delle intelligenze artificiali.</title>
      <dc:creator>Gaetano D'Orsi</dc:creator>
      <pubDate>Mon, 29 May 2023 06:02:06 +0000</pubDate>
      <link>https://forem.com/tudor44/italian-oltre-il-software-educazione-e-societa-della-conoscenza-nelleta-digitale-e-delle-intelligenze-artificiali-m39</link>
      <guid>https://forem.com/tudor44/italian-oltre-il-software-educazione-e-societa-della-conoscenza-nelleta-digitale-e-delle-intelligenze-artificiali-m39</guid>
      <description>&lt;p&gt;Il concetto di &lt;strong&gt;Società della Conoscenza&lt;/strong&gt; costituisce un nodo fondamentale per comprendere la struttura socioculturale dei nostri tempi. Ma come la possiamo definire esattamente? &lt;/p&gt;

&lt;p&gt;Possiamo dire che la società della conoscenza rappresenta e descrive la fase evolutiva nel progresso della civiltà umana dei giorni nostri, caratterizzata dal ruolo predominante della conoscenza come principale risorsa per lo sviluppo economico e sociale, una società dove la diffusione e distribuzione della conoscenza, sono centrali nell’insieme delle attività umane che contribuiscono allo sviluppo di una società. &lt;/p&gt;

&lt;p&gt;Nell'epoca industriale, la produttività era legata indissolubilmente all'efficienza nella produzione di beni fisici, lo scopo della società economica era il valore che derivava dalla generazione fisica di prodotti, con la forza lavoro si misurava in termini di competenze tecniche e manuali. Tuttavia, la società della conoscenza, ha stravolto il paradigma industriale che esisteva in precedenza: il valore non nasce più esclusivamente dalla produzione materiale, bensì dall'elaborazione e dalla gestione di informazioni e conoscenze, allo scopo di prendere decisioni sempre più efficaci. &lt;/p&gt;

&lt;p&gt;In questo contesto, il "capitale" di maggior valore non risiede più nei beni fisici, come fabbriche o macchine, ma nel capitale umano e intellettuale. Ma è fondamentale qui aggiungere anche il contributo significativo delle tecnologie dell'informazione e della comunicazione &lt;strong&gt;(ICT)&lt;/strong&gt; nello sviluppo della società contemporanea. &lt;/p&gt;

&lt;p&gt;Queste tecnologie hanno facilitato una diffusione senza precedenti di informazioni e dati, creando così l'opportunità di elaborarli e generare conoscenza in maniera molto più rapida ed efficace rispetto al passato. Tale accelerazione nel flusso di informazioni, di conseguenza, ha trasformato i modi in cui interagiamo, apprendiamo e lavoriamo in società. Ad esempio, &lt;strong&gt;Internet&lt;/strong&gt; ha reso possibile la disseminazione di informazioni su scala globale, offrendo un accesso a un volume di informazioni e conoscenze prima impensabile. In questa nuova realtà, le competenze necessarie per prosperare subiscono una trasformazione radicale, e abilità quali il pensiero critico, la risoluzione di problemi, la creatività, la comunicazione diventano sempre più rilevanti. L'impatto di queste tecnologie sull'educazione è stato particolarmente significativo, trasformando radicalmente i processi educativi. &lt;/p&gt;

&lt;p&gt;Ad esempio, la possibilità di accedere a risorse didattiche online ha rivoluzionato il modo in cui studenti e docenti interagiscono tra di loro. La vastità e la varietà di informazioni disponibili hanno ampliato gli orizzonti educativi, rendendo possibile l'approfondimento e l'espansione delle competenze in quasi tutti i settori del sapere. &lt;/p&gt;

&lt;p&gt;Inoltre, piattaforme di e-learning e aule virtuali hanno permesso lo sviluppo di nuovi modelli pedagogici, come l'apprendimento a distanza o l'apprendimento misto, che sfruttano la flessibilità e l'accessibilità delle tecnologie digitali per superare le barriere fisiche e temporali tradizionalmente associate all'educazione classica. Le università telematiche rappresentano un significativo esempio di questa trasformazione, avendo la possibilità di contribuire a rendere il processo educativo dell’istruzione accademica non solo più inclusiva, ma soprattutto democratica ed accessibile a un pubblico molto più ampio, ma il concetto di inclusività e democratizzazione dell'istruzione non si riferisce solo alla disponibilità di corsi di studio, ma sicuramente anche alla possibilità per gli studenti, adulti o di partecipare attivamente al processo di apprendimento, indipendentemente dalle loro condizioni economiche o geografiche. &lt;/p&gt;

&lt;p&gt;La possibilità di democratizzazione dell'educazione è ancora più chiara se si pensa gli studenti in aree rurali o in paesi in via di sviluppo. Questa modalità di istruzione, costituita quindi grazie alle ICT, rimuove le barriere fisiche all'apprendimento, offrendo a tutti, indipendentemente dalla loro posizione geografica, l'opportunità di perseguire un percorso di studi universitario alla pari con quelli residenti in grandi centri urbani. In questo modo, l'apprendimento a distanza sta favorendo una certa democratizzazione dell'accesso all'istruzione, contribuendo alla formazione di una società della conoscenza più equa, e allo stesso tempo, contribuisce a diminuire notevolmente per esempio il divario digitale. &lt;/p&gt;

&lt;p&gt;Degno di menzione è il rapido sviluppo e l'impiego crescente dell'&lt;strong&gt;Intelligenza Artificiale (IA)&lt;/strong&gt; e dei sistemi di apprendimento automatico nel settore dell'educazione. Il clamore che queste tecnologie stanno suscitando in tempi recenti influenzerà molto probabilmente i futuri processi educativi, aprirà nuove opportunità e disegnerà scenari ancora inesplorati, potendo così stimolare una revisione sostanziale delle attuali metodologie educative. &lt;/p&gt;

&lt;p&gt;Tuttavia, già nel 1996 &lt;strong&gt;l'Organizzazione per la Cooperazione e lo Sviluppo Economico (OECD)&lt;/strong&gt; evidenziava in un report, l'importanza fondamentale della conoscenza in una società profondamente segnata dal dominio della tecnologia. La conoscenza svolge una funzione duplice: è un motore economico ormai imprescindibile e al contempo ha un ruolo determinante nel promuovere l'avanzamento sociale e culturale. In questo contesto, l'educazione deve promuovere l'acquisizione e lo sviluppo di competenze proprie del secolo corrente, un’epoca in cui l'educazione non è un processo che si esaurisce entro i confini della scuola o dell'università, ma si protrae per l'intero arco della vita, e non si limita più al percorso delle scuole di base, o universitario, ma si dovrebbe estendere per tutta la durata della propria esistenza. &lt;/p&gt;

&lt;p&gt;Questo rinnovato approccio educativo introduce una serie di questioni filosofiche ed etiche, invitando a una riflessione approfondita sul vero significato dell'educazione, sul suo scopo e sulle metodologie più idonee, e coinvolge inoltre l'impegno a creare contesti educativi rispettosi della diversità degli studenti. In questa prospettiva, l'educazione viene intesa come formazione per la vita, posizionando al suo centro l’individuo e sottolineando la responsabilità di ciascuno nel costruire il proprio percorso di apprendimento. Ciò ci permette di citare una nuova possibilità, &lt;strong&gt;l’apprendimento permanente.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Questo concetto afferma che l'apprendimento e l'acquisizione di nuove competenze non dovrebbero essere confinate ai primi anni di vita o alla formazione formale, ma dovrebbero essere dei processi in atto lungo tutto l'arco dell'esistenza. Esso si basa sulla consapevolezza che l'accelerato ritmo dei cambiamenti in tutti i settori, tecnologici, economici richiede un aggiornamento costante delle competenze per rimanere al passo, rendendo l'apprendimento permanente un'esigenza tanto per l'individuo, quanto per la intera società. C’è da riconoscere che ogni tentativo di universalizzazione del concetto di apprendimento permanente potrebbe presentare notevoli difficoltà. In primo luogo, le risorse e le opportunità non sono distribuite equamente in tutto il mondo. &lt;/p&gt;

&lt;p&gt;In molte regioni, l'accesso all'istruzione di base è ancora un problema, figuriamoci l'accesso a risorse per un processo di apprendimento che deve essere continuo. Inoltre, gli individui possono trovarsi in situazioni di vita o lavorative che limitano la loro capacità o il loro tempo per dedicarsi all'apprendimento permanente. In secondo luogo, la possibilità di un apprendimento perenne richiede un alto livello di motivazione e autodisciplina da parte dell'individuo. &lt;/p&gt;

&lt;p&gt;Non tutti possono avere la volontà, l'interesse o la capacità di impegnarsi in un percorso di apprendimento continuo. È importante considerare la diversità dei modi di apprendimento degli individui e il fatto che l'apprendimento permanente potrebbe non essere l'approccio più adatto per tutti, senza contare che sebbene possa fornire benefici individuali e collettivi, può anche generare pressioni. &lt;br&gt;
L'idea che si debba essere costantemente all'altezza, aggiornati, o in uno stato di costante "divenire", può portare a stress e ansia. &lt;strong&gt;Jacques Delors&lt;/strong&gt;, ex presidente della Commissione Europea, è stato una figura di spicco nel promuovere il concetto di apprendimento permanente a livello internazionale, già dalla fine degli anni ‘90. &lt;br&gt;
Nel suo influente rapporto per l'&lt;strong&gt;UNESCO&lt;/strong&gt; del 1996, "&lt;em&gt;&lt;strong&gt;Learning: The Treasure Within&lt;/strong&gt;&lt;/em&gt;", &lt;strong&gt;Delors&lt;/strong&gt; identifica quattro "pilastri" fondamentali dell'educazione che dovrebbero guidare l'apprendimento permanente. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Imparare a conoscere (To know)&lt;/strong&gt;: Questo pilastro sottolinea l'importanza di acquisire un'ampia base di conoscenze, ma anche di letteralmente “imparare ad imparare”, per poter continuare ad acquisire nuove conoscenze nel corso della vita. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Imparare a fare (To do)&lt;/strong&gt;: Si tratta di acquisire le competenze che permettono alle persone di affrontare le molteplici situazioni e compiti della vita e del lavoro. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Imparare a vivere insieme (To live together)&lt;/strong&gt;: Questo pilastro enfatizza l'importanza di imparare a convivere con gli altri in una società sempre più interdipendente, per comprendere e apprezzare la diversità, praticare la tolleranza e lavorare verso obiettivi comuni. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Imparare ad essere (To be)&lt;/strong&gt;: Si tratta dell'obiettivo più difficile, poiché implica lo sviluppo di tutta la persona, comprese la sua autonomia, il giudizio critico e la responsabilità sociale ed etica. &lt;/p&gt;

&lt;p&gt;Secondo &lt;strong&gt;Delors&lt;/strong&gt;, i quattro pilastri dell'apprendimento dovrebbero essere integrati in tutti i contesti di apprendimento, dall'educazione formale all'auto-formazione. In particolare, nel contesto della società della conoscenza, le idee di Delors sull'apprendimento permanente sono estremamente pertinenti all’attuale configurazione della società. &lt;/p&gt;

&lt;p&gt;In conclusione, l'evoluzione in atto nell'odierna società della conoscenza richiede un profondo ripensamento dell'educazione. &lt;/p&gt;

&lt;p&gt;L’incontro delle pratiche educative con il digitale richiede una comprensione più ampia del contesto di apprendimento, che non è più circoscritto a un'aula fisica o a un istituto di istruzione formale, ma si estende a una varietà di ambienti che includono comunità virtuali e fisiche, luoghi di lavoro, modalità ibride di insegnamento e così via. Questa nuova prospettiva comporta un superamento del tradizionale modello di educazione verticale e unidirezionale, a favore di un approccio orizzontale, interattivo e in perenne mutamento come evidenziato dai quattro pilastri di Jacques Delors, che forniscono un quadro di riferimento per realizzare una trasformazione educativa che rispecchia la natura dinamica e interconnessa della società della conoscenza. &lt;/p&gt;

&lt;p&gt;L'educazione, quindi, ha il potenziale di diventare più inclusiva, personalizzata, ma nonostante le sfide, il futuro dell'educazione rappresenta un'opportunità preziosa per sviluppare una formazione attenta alle esigenze dell'individuo e resiliente ai cambiamenti, e dovrebbe inoltre, guidare il processo evolutivo dell’uomo in modo sostenibile per la natura e il nostro pianeta, al momento l’unico habitat naturale disponibile che abbiamo per preservare la nostra specie.&lt;/p&gt;

&lt;p&gt;Lascio con questa citazione di Carlo Sini, uno dei più importanti Filosofi italiani del novecento, durante una sua conferenza riguardo il potere della conoscenza:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;La vera conoscenza è quella che salva la vita, è un saper fare che consente il perpetuarsi della vita di tutti gli esseri viventi.&lt;/em&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>[Italian] Intelligenze artificiali, logica dialettica e la nascita dell'Algoretica</title>
      <dc:creator>Gaetano D'Orsi</dc:creator>
      <pubDate>Fri, 05 May 2023 15:59:00 +0000</pubDate>
      <link>https://forem.com/tudor44/italian-intelligenze-artificiali-logica-dialettica-e-la-nascita-dellalgoretica-4njf</link>
      <guid>https://forem.com/tudor44/italian-intelligenze-artificiali-logica-dialettica-e-la-nascita-dellalgoretica-4njf</guid>
      <description>&lt;p&gt;Le intelligenze artificiali si stanno sempre più inserendo nel mondo dell'industria lasciando i laboratori e gli enti di ricerca, e stanno cambiando il nostro modo di interagire con la tecnologia.&lt;/p&gt;

&lt;p&gt;Un evento che, ad oggi, lo possiamo classificare come una fase ormai avanzata della terza rivoluzione industriale.&lt;br&gt;
Molti parlano invece già di ormai una &lt;strong&gt;Quarta rivoluzione industriale&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Possiamo racchiudere le ere dello sviluppo tecnologico contemporaneo in tre grandi fasi:&lt;/p&gt;

&lt;p&gt;1) &lt;strong&gt;Era del calcolo meccanico&lt;/strong&gt;: dall'inizio del XIX secolo fino agli anni '40 del XX secolo, durante la quale i computer erano costituiti principalmente da componenti meccanici ed elettromeccanici.&lt;/p&gt;

&lt;p&gt;2) &lt;strong&gt;Era dei primi computer&lt;/strong&gt;: dagli anni '50 agli anni '70 del XX secolo, caratterizzata dall'avvento dei primi elaboratori elettronici programmabili, alcuni nomi come l'ENIAC e l'IBM 360, la nascita della programmazione e dei relativi linguaggi.&lt;/p&gt;

&lt;p&gt;3) &lt;strong&gt;Era dei computer digitali&lt;/strong&gt;: dagli anni '80 ad oggi, con la diffusione dei primi personal computer, di Internet , degli smartphone, che hanno reso possibile la diffusione globale delle tecnologie digitali e la creazione di nuove industrie, fino alla digitalizzazione di quelle esistenti.&lt;/p&gt;

&lt;p&gt;In questa fase finale, la crescente diffusione delle I.A. richiede di affrontare diverse questioni. Non perché le ere precedenti siano state meno significative o indolori, ma perché, secondo le stime di molti esperti del settore, l'impatto dell'intelligenza artificiale sarà molto più forte e radicale, rispetto alle rivoluzioni precedenti.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Logica dialettica&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Citando la logica dialettica di &lt;strong&gt;Georg Wilhelm Friedrich Hegel&lt;/strong&gt;, all'interno della sua opera del &lt;strong&gt;1817 Scienze della Logica&lt;/strong&gt;, possiamo partire ad analizzare in breve come possiamo incastrare e sintetizzare a grandi linee ciò che sta accadendo oggi. &lt;/p&gt;

&lt;p&gt;Secondo Hegel, c'è un modo per comprendere meglio la realtà e si può fare tramite un processo logico-dialettico che si sviluppa attraverso la contrapposizione di opposti, la loro negazione e la loro sintesi.&lt;br&gt;
Meglio conosciuta anche come procedimento dialettico tesi-antitesi-sintesi.&lt;/p&gt;

&lt;p&gt;In parole più semplici e accessibili, è possibile comprendere questa idea osservando come l'aumento quantitativo del progresso tecnologico (&lt;strong&gt;tesi&lt;/strong&gt;), possa portare ad un cambiamento qualitativo dell'ambiente o del contesto di riferimento (&lt;strong&gt;antitesi&lt;/strong&gt;).&lt;/p&gt;

&lt;p&gt;Per fare un esempio più concreto analizziamo l'aumento del fenomeno del Remote working, che ha portato e sta portando tuttora, il ripensamento di intere strutture aziendali, uffici e procedure, che a causa dell'aumento "quantitativo" dei mezzi tecnologici (&lt;strong&gt;tesi&lt;/strong&gt;) le possibilità di lavorare in maniera distribuita, causando il cambiamento "qualitativo" (&lt;strong&gt;antitesi&lt;/strong&gt;) di città, paesaggi o ancora di intere aree urbane.&lt;/p&gt;

&lt;p&gt;La &lt;strong&gt;sintesi&lt;/strong&gt; finale dello scontro di questi due eventi opposti, però non può essere decretata poiché è impossibile comprendere l'intera realtà, e soprattutto prevedere come sarà nei prossimi decenni. Chi si occupa di sistemi informatici sa bene che gestire la complessità non è affatto facile. &lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Andare oltre la specializzazione&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Il metodo dialettico hegeliano può fornire un approccio metodologico utile per riflettere su come qualsiasi tipo di evento e fenomeno che comporta un aumento, o un miglioramento importante degli strumenti tecnologici, possa portarci ad adottare uno sguardo critico e consapevole su come tutto ciò che potrebbe comportare, soprattutto per coloro che hanno una formazione esclusivamente tecnico-scientifica.&lt;/p&gt;

&lt;p&gt;Per il futuro, abbiamo bisogno di convivere cercando di salvaguardare l'ambiente, mentre continuiamo ad evolvere le nostre tecnologie adottando nuovi metodi sostenibili, mentre la potenza di elaborazione, la memoria e la velocità degli  apparati tecnologici ci permettono di sviluppare nuovi e sempre più avanzati algoritmi e macchine in grado di fare compiti sempre più efficienti.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;L'intelligenza artificiale&lt;/strong&gt; sta rivoluzionando numerosi settori, come l'industria manifatturiera, la sanità, la finanza, il trasporto pubblico, per citare solo alcuni settori. &lt;br&gt;
Lo sviluppo e il rilascio sul mercato di sempre più completi e raffinati "Modelli di linguaggio naturale" (&lt;strong&gt;LLM&lt;/strong&gt;) come &lt;strong&gt;GPT&lt;/strong&gt;, sono solo un esempio di come le possibilità di trasformazione di interi modelli di business siano illimitati.&lt;/p&gt;

&lt;p&gt;Tuttavia, come con ogni grande progresso tecnologico, ci sono anche sfide e preoccupazioni etiche e sociali da considerare. &lt;br&gt;
La perdita di posti di lavoro, ma anche la creazione di nuovi, magari più adatti ad affrontare le sfide del momento, e quindi che richiedono sempre maggiori competenze (altro esempio di "salto qualitativo" di un fenomeno).&lt;/p&gt;

&lt;p&gt;Il nodo principale di riflessione, rimane sempre la possibilità di controllo di grandi quantità di dati, grazie alla costruzione e la composizione di algoritmi sempre più complessi, che sta aprendo nuove possibilità e sfide che richiedono una riflessione etica e sociale, non più superficiale o di contorno.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Algoretica&lt;/strong&gt;&lt;br&gt;
In questo scenario è nata un nuovo neologismo ormai comunemente accettato anche dall'Accademia della Crusca dal 2018. &lt;br&gt;
Qui c'è un link con maggiori dettagli: &lt;br&gt;
&lt;a href="https://accademiadellacrusca.it/it/parole-nuove/algoretica/18479"&gt;https://accademiadellacrusca.it/it/parole-nuove/algoretica/18479&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;L'Algoretica, per definirla brevemente come disciplina magari futura, deve permettere l'abilitazione, lo studio e l'applicazione della ricerca etica degli algoritmi.&lt;/p&gt;

&lt;p&gt;Sulla enciclopedia Treccani, invece, si fa riferimento sul perchè l'Algoretica deve essere applicata con questa citazione: &lt;/p&gt;

&lt;p&gt;&lt;em&gt;"Abbiamo sentito l'obbligo di entrare in questo contesto, salire su questa macchina che sta muovendo non solo i primi passi, ma è già in una prospettiva di forte avanzamento. Il progresso della tecnologia è molto più veloce di quello della politica, dell'economia, dell'etica e della dimensione umanistica, dunque è necessario un dialogo responsabile all'interno di queste nuove frontiere".&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Come emerge è importante comprendere che il progresso tecnologico non può essere perseguito a scapito del benessere umano, ma deve essere guidato da un dialogo costruttivo. In questo modo, la tecnologia può essere utilizzata per migliorare la vita delle persone, risolvere problemi globali e promuovere lo sviluppo sostenibile. Tuttavia, per farlo, è necessario che l'etica e la componente umanistica siano integrate nella progettazione e nell'implementazione delle tecnologie, in modo da garantire il rispetto dei diritti umani e la giustizia sociale.&lt;/p&gt;

&lt;p&gt;Inoltre, è essenziale che gli sviluppatori (me compreso) e gli utilizzatori della tecnologia mantengano un dialogo costante e trasparente con la società, per assicurarsi che le tecnologie non siano utilizzate in modo dannoso o discriminatorio.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Tutti insieme uniti per la Terra&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Le intelligenze artificiali stanno portando un profondo cambiamento nel nostro rapporto con la tecnologia, determinando una nuova fase della rivoluzione tecnologica iniziata decenni fa.&lt;/p&gt;

&lt;p&gt;Tuttavia, è importante essere consapevoli che ogni grande progresso tecnologico comporta anche sfide e preoccupazioni, come il possibile impatto sull'occupazione , le tematiche sulla sostenibilità ambientale , che la rivoluzione digitale sta portando a modificare.&lt;/p&gt;

&lt;p&gt;È fondamentale adottare un approccio critico e consapevole alla tecnologia, sviluppando l'Algoretica e nuovi metodi sostenibili che consentano di conciliare e integrare la crescita tecnologica con la necessità di preservare l'ambiente grazie alle politiche di sostenibilità che dovranno coinvolgere anche altri attori.&lt;/p&gt;

&lt;p&gt;Solo attraverso un approccio interdisciplinare che coinvolga le diverse aree specialistiche delle scienze e delle tecnologie, possiamo tentare di garantire uno sviluppo sostenibile che protegga il pianeta Terra per le generazioni future.&lt;/p&gt;

</description>
      <category>algorithms</category>
      <category>digitalethics</category>
      <category>historyoftechnology</category>
      <category>sustainibility</category>
    </item>
    <item>
      <title>Test,TDD... Un approccio al Collaudo del Software.</title>
      <dc:creator>Gaetano D'Orsi</dc:creator>
      <pubDate>Mon, 24 Oct 2022 21:45:19 +0000</pubDate>
      <link>https://forem.com/tudor44/testtdd-un-approccio-al-collaudo-del-software-4aio</link>
      <guid>https://forem.com/tudor44/testtdd-un-approccio-al-collaudo-del-software-4aio</guid>
      <description>&lt;h2&gt;
  
  
  &lt;strong&gt;Breve Panoramica&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Nel mondo lavorativo attuale, quando ci approcciamo allo sviluppo software ci concentriamo all'inizio ad apprendere le metodologie o gli strumenti adatti a supportarci nel progettare e sviluppare un software, o in senso più ampio, una soluzione digitale. &lt;/p&gt;

&lt;p&gt;Una volta appresi i concetti e fatta una discreta esperienza ci chiediamo domande del tipo:&lt;br&gt;
&lt;em&gt;Quali sono le tecnologie maggiormente vantaggiose per il nostro caso d'uso, e quali no? Quale linguaggio di programmazione mi conviene usare? Quali framework? Vantaggi e svantaggi? E così via...&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Da ormai diversi decenni le attività di costruzione e sviluppo di un sistema informativo, sono aumentate a dismisura grazie alla sempre maggiore esigenza di sicurezza e robustezza delle soluzioni IT. Le aziende e le organizzazioni, che siano esse di prodotto o di servizio, spingono sempre di più a migliorare il processo di collaudo dei loro prodotti e servizi digitali.&lt;/p&gt;

&lt;p&gt;Il Collaudo del Software (&lt;strong&gt;Software Testing&lt;/strong&gt;) oggi è un aspetto molto vitale e strategico, soprattutto con la crescita e la complessità delle soluzioni di digitalizzazione e automazione dei vari processi produttivi, facendo emergere sempre di più l'esigenza di creare e sviluppare robuste attività per certificare quanto sia solido un software, e allo stesso tempo minimizzare il più possibile la presenza di spiacevoli difetti (i famosi bug).&lt;/p&gt;

&lt;p&gt;Facendo qualche esempio , se pensiamo alla sicurezza informatica tutto ciò è vitale per cercare di ridurre al minimo eventuali rischi di &lt;strong&gt;Data Breach&lt;/strong&gt;, ossia la violazione dei dati di chi utilizza il software o dei loro clienti.&lt;br&gt;
Il rischio è la possibilità che vengono trasferiti a sistemi non autorizzati, o addirittura rubati per scopi commerciali o fraudolenti.&lt;/p&gt;

&lt;p&gt;Per cercare una definizione precisa possiamo citare direttamente lo standard &lt;strong&gt;ANSI / IEEE numero 1059&lt;/strong&gt;, che dichiara l'attività del Software testing come:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"Il processo di analisi di un software per rilevare le differenze quello che è stato sviluppato / prodotto , e ciò che effettivamente stato richiesto (ovvero difetti/errori/bug) e per valutare e validare le funzionalità sviluppate."&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;Il concetto di &lt;strong&gt;Test&lt;/strong&gt;, in parole semplici, è l'esecuzione di un programma eseguito con il fine di identificare eventuali lacune, errori o requisiti mancanti in contrasto con i requisiti reali.&lt;/p&gt;

&lt;p&gt;Tutto ciò fa parte di un processo di valutazione del sistema, con lo scopo di scoprire se quest'ultimo soddisfa o meno i requisiti specificati da chi ne beneficerà. &lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Principali tecniche di collaudo del software&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Per dare meglio un po' di contesto, per certificare la qualità di un sistema informativo esistono due macro categorie di attività (purtroppo non possiamo essere esaustivi). &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fase di Collaudo del Software a basso livello&lt;/strong&gt;&lt;br&gt;
Qui abbiamo la parte più importante dal punto di vista degli sviluppatori software, le due categorie sono chiamate:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Unit test (Test unitari) &lt;/li&gt;
&lt;li&gt;Test di integrazione&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Proviamo a descrivere brevemente:&lt;/p&gt;

&lt;p&gt;Unit Test:&lt;br&gt;
Gli Unit Test sono Test che servono a collaudare le singole parti di un particolare software. Le possiamo chiamare moduli, funzioni, sottoprogrammi, classi o unità. Lo scopo di questi test, che sono spesso eseguiti dallo stesso programmatore, è quello di dimostrare l'effettiva operatività e funzionamento dei componenti soggetti alle varie "prove" di funzionamento.&lt;br&gt;
Gli Unit Test rilevano gli errori già durante la fase di sviluppo, vengono di solito automatizzati ed eseguiti in serie. Qui c'è quindi la parte più delicata dell'intero processo di collaudo.&lt;/p&gt;

&lt;p&gt;Test di integrazione:&lt;br&gt;
I test di integrazione vengono effettuati quando c'è bisogno di verificare lo scambio di messaggi tra componenti diversi. Il test si concentra sullo sviluppo di interfacce di comunicazione esposte dai componenti coinvolti, e serve a dimostrare che i risultati emersi durante la comunicazione e lo scambio di messaggi tra tutti i processi siano corretti e soprattutto coerenti.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fase di collaudo del software ad alto livello&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Qui vengono raggruppate tutte le attività che riguardano i test di sistema e quelli di accettazione. &lt;br&gt;
Qui i programmatori di solito non sono intervengono direttamente, ma a volte collaborano con le diverse figure professionali che si occupano di questo lavoro. &lt;br&gt;
Ad esempio i Test Engineer, o i Test Manager che lavorano affianco ad altre figure tipo i Quality Manager o Product Manager.&lt;br&gt;
Il cliente invece si occupa di eseguire i test test &lt;strong&gt;UAT&lt;/strong&gt;(User Acceptance Testing). &lt;br&gt;
Essi sono un insieme di specifiche che servono a certificare se effettivamente i requisiti richiesti dalla soluzione sono stati implementati correttamente.&lt;/p&gt;

&lt;p&gt;Ora cerchiamo di descrivere come poter sviluppare e definire i vari Test Unitari, in questo caso ci viene in soccorso una delle tecniche più utilizzate, soprattutto nel mondo delle metodologie &lt;br&gt;
Agile, il TDD (Test Driven Development). &lt;/p&gt;




&lt;p&gt;&lt;strong&gt;TDD?&lt;/strong&gt;&lt;br&gt;
Cosa significa esattamente Test Driven Development?&lt;/p&gt;

&lt;p&gt;Il significato di fondo non è molto difficile da capire. In pratica quando si progetta un qualsiasi componente software , si parte scrivendo e pianificando prima gli Unit Test da scrivere e poi il codice che rispetterà i test specificati.&lt;br&gt;
Nello sviluppo basato su test, il programmatore crea costantemente casi di test unitari prima dello sviluppo dei componenti , metodi o funzioni stesse.&lt;/p&gt;

&lt;p&gt;I vantaggi per usare questa metodologia sono molteplici.&lt;br&gt;
Può essere una buona idea iniziare a lavorare con la metodologia TDD quando:&lt;/p&gt;




&lt;p&gt;1.C'è un'alta difficoltà a testare parti di un software già esistente. Basti pensare ad esempio ad un software monolitico, oppure a grossi sistemi che hanno tante integrazioni differenti, e magari ricorre spesso l'esigenza di conoscere e "simulare" i dati che il sistema esterno gestisce e ci invia, per replicare effettivamente tutto il flusso di comunicazione.&lt;/p&gt;

&lt;p&gt;2.Mancanza di budget , o poche risorse a disposizione nel reparto testing/collaudo.&lt;/p&gt;

&lt;p&gt;3.Una maggior facilità nell'addestrare gli sviluppatori a scrivere codice robusto e che funzioni nel miglior modo possibile (vale la pena ricordare che un software con 0 bug non esiste)&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Come fare TDD?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Il funzionamento del TDD è semplice.&lt;br&gt;
Scriviamo test e codice della funzionalità fino a quando non troviamo un caso errato.&lt;br&gt;
Gli Unit Test e il componente si scrivono in modo sequenziale, partendo ovviamente dai Test che semplicemente &lt;strong&gt;guidano&lt;/strong&gt; la funzionalità da testare.&lt;/p&gt;

&lt;p&gt;Tutto ciò viene eseguito grazie ad un processo iterativo e costante. &lt;br&gt;
Proviamo di seguito a schematizzare i passi che ciclicamente vengono svolti durante lo sviluppo:&lt;/p&gt;

&lt;p&gt;1.Scriviamo un test per collaudare un nuovo comportamento (funzionalità) da programmare, iniziando dall'esempio più semplice che ci viene in mente. Se tutto va bene passiamo poi al seguente test.&lt;br&gt;
Appena scriviamo un test che è soddisfatto dal codice esistente, passiamo al secondo test e così via... fino a quando riceviamo un esito negativo dal programma di Unit Testing.&lt;/p&gt;

&lt;p&gt;2.Qui ci adoperiamo a modificare il codice del programma, aggiungendo la funzionalità minima possibile fino a quando il nostro programma che rileva gli Unit test, non ci avvertirà che l'ultimo test scritto è conforme al codice che abbiamo modificato, insieme ai test scritti precedentemente.&lt;/p&gt;

&lt;p&gt;3.Prima di proseguire e aggiungere ulteriori casi di test, come passaggio ulteriore si ripulisce il codice (o come si dice in lingua inglese facciamo il famigerato Refactoring), rimuovendo ripetizioni e casi di duplicazione del codice.&lt;/p&gt;

&lt;p&gt;In questa fase, ovviamente, non aggiungiamo nessuna nuova funzionalità perché quest'ultima non sarà mai coperta da un Test associato. &lt;br&gt;
Dobbiamo ricordarci che non possiamo mai scrivere un nuovo metodo senza prima scrivere il suo test.&lt;br&gt;
L'obiettivo di questa "pulizia" è quella di rendere il codice semplice e il più possibile comprensibile.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Strumenti in Java&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Nel mondo Java ad esempio esistono diversi strumenti per sfruttare le tecniche di TDD, noi ne citiamo due:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;JUnit&lt;/li&gt;
&lt;li&gt;Mockito&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;JUnit&lt;/strong&gt;&lt;br&gt;
JUnit è il framework di riferimento per implementare gli Unit testing in Java e ovviamente il TDD. &lt;br&gt;
JUnit è stato ideato da Kent Beck insieme ad Erich Gamma, due guru e pionieri del mondo Java. &lt;br&gt;
Il primo anche uno dei firmatari della metodologia di sviluppo Agile del software.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mockito&lt;/strong&gt;&lt;br&gt;
Mockito è un framework di test open source per Java. &lt;br&gt;
Esso consente la creazione di oggetti contenete dati sintetici (o di prova) dei dati reali, guidando in modo più realistico possibilita la fase degli unit test automatizzati. &lt;br&gt;
Molto utile se lavoriamo con sistemi d'integrazione e abbiamo bisogno di riprodurre e simulare i dati.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Link utili&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://examples.javacodegeeks.com/core-java/junit/junit-hello-world-example/"&gt;Esempio utilizzo base di JUnit&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.tutorialspoint.com/mockito/mockito_first_application.htm"&gt;Esempio utilizzo base di Mockito&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://osherove.com/tdd-kata-1"&gt;TDD esercitazione String Calculator&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Is Digital transformation more disruptive then Gutenberg's revolution?</title>
      <dc:creator>Gaetano D'Orsi</dc:creator>
      <pubDate>Sun, 02 Oct 2022 15:44:52 +0000</pubDate>
      <link>https://forem.com/tudor44/is-digital-transformation-more-disruptive-then-gutenbergs-revolution-30da</link>
      <guid>https://forem.com/tudor44/is-digital-transformation-more-disruptive-then-gutenbergs-revolution-30da</guid>
      <description>&lt;p&gt;570 years ago, in 1452, is the date that marks the beginning of the first book printed with Gutenberg's movable type technique (The Bible), and the start of the early modern period.&lt;/p&gt;

&lt;p&gt;Today at the end of 2022 we are in the center of Digital Transformation, it is forever changing the way we work&lt;br&gt;
and transmit knowledge and data.&lt;/p&gt;

&lt;p&gt;But the invention of the printing machine is only one of the historical events, the Transformation is a new ERA that marks the end of HISTORY, the same as when the PREHISTORY getting ended with the invention of writing.&lt;/p&gt;

&lt;p&gt;Professor Luciano Floridi, writes in one of his books:&lt;br&gt;
"The actual generation is experiencing the transition from history to HYPERHISTORY"&lt;br&gt;
HYPERHISTORY means our present and future, and some people still don't realize it ...&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Api Java for Italian Electronic Invoice</title>
      <dc:creator>Gaetano D'Orsi</dc:creator>
      <pubDate>Mon, 28 Mar 2022 06:30:20 +0000</pubDate>
      <link>https://forem.com/tudor44/api-java-for-italian-electronic-invoice-347k</link>
      <guid>https://forem.com/tudor44/api-java-for-italian-electronic-invoice-347k</guid>
      <description>&lt;p&gt;&lt;a href="https://github.com/Tudor44/fattura-elettronica"&gt;Link Github&lt;/a&gt;&lt;/p&gt;

</description>
      <category>xml</category>
      <category>api</category>
      <category>java</category>
      <category>document</category>
    </item>
    <item>
      <title>[Italian] Libreria per corrispettivi elettronici 0.1</title>
      <dc:creator>Gaetano D'Orsi</dc:creator>
      <pubDate>Sun, 13 Mar 2022 09:40:34 +0000</pubDate>
      <link>https://forem.com/tudor44/italian-libreria-per-corrispettivi-elettronici-70-1f40</link>
      <guid>https://forem.com/tudor44/italian-libreria-per-corrispettivi-elettronici-70-1f40</guid>
      <description>&lt;p&gt;&lt;a href="https://github.com/Tudor44/scontrino-digitale"&gt;https://github.com/Tudor44/scontrino-digitale&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>[Italian] Classi ed Oggetti, una semplice prospettiva filosofica con Platone</title>
      <dc:creator>Gaetano D'Orsi</dc:creator>
      <pubDate>Fri, 31 Dec 2021 17:01:38 +0000</pubDate>
      <link>https://forem.com/tudor44/italian-classi-ed-oggetti-una-semplice-prospettiva-filosofica-con-platone-35pj</link>
      <guid>https://forem.com/tudor44/italian-classi-ed-oggetti-una-semplice-prospettiva-filosofica-con-platone-35pj</guid>
      <description>&lt;p&gt;Nel corso dei miei studi filosofici accompagnati dalle attività formative che svolgo parallelamente al mio lavoro mi son trovato a valutare e far emergere la consapevolezza di quanto la &lt;strong&gt;Filosofia&lt;/strong&gt;, intesa come disciplina e madre storica di tutti i saperi, possa essere utile non solo come materia ad accrescere il nostro livello culturale e apprendere lo sviluppo del pensiero umano. &lt;br&gt;
Possiamo associargli, per esempio, una dimensione didattica per comprendere nell'ambito dell'informatica meglio dei concetti imprescindibili nel mondo della programmazione moderna come la programmazione orientata ad oggetti (in inglese OOP). &lt;/p&gt;

&lt;p&gt;Davvero? Come possiamo conciliare la disciplina originaria del sapere umano, con un'altra dal forte carattere tecnico-scientifico?&lt;br&gt;
Proviamo a scoprirlo.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Chi è Platone?&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr56o9nikw1460wjnoave.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr56o9nikw1460wjnoave.jpg" alt="Image description"&gt;&lt;/a&gt;&lt;br&gt;
Penso che almeno una volta nella vostra vita avete sentito parlare di uno dei più grandi filosofi della storia del pensiero occidentale ,e che ha influenzato tutta la storia del pensiero umano. Partendo dagli scritti del suo maestro &lt;strong&gt;Socrate&lt;/strong&gt;, &lt;em&gt;l'uomo del sapere giusto e dalle tante virtù&lt;/em&gt;, è anche tra i primi ad aver raccolto tutti gli scritti e i dialoghi dei pensatori venuti prima di lui (i presocratici) e aver stilato una raccolta di 35 Dialoghi e una raccolta di 13 lettere che parlano di Politica, Metafisica, Scienza e Morale.&lt;br&gt;
Di lui disse &lt;strong&gt;Alfred North Whitehead&lt;/strong&gt;, matematico e filosofo inglese del Novecento: &lt;em&gt;"Tutta la storia della filosofia occidentale non è che una serie di note a margine sulle opere di Platone”&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Ci sarebbe tantissimo altro da aggiungere, ma ora focalizziamoci sul nostro obiettivo e cerchiamo di spiegare come facciamo ad associare Platone alla programmazione ad oggetti.&lt;br&gt;
Con la sua celeberrima &lt;strong&gt;&lt;em&gt;Teoria delle Idee&lt;/em&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cos'è la Teoria delle Idee?&lt;/strong&gt;&lt;br&gt;
Prima di spiegarla cerchiamo di concentrarci prima sulla parola  Idea. Il concetto di Idea, come sappiamo tutti, è associato ad una attività del pensiero umano. Ad esempio quando si scopre di trovare una soluzione ad un problema.&lt;/p&gt;

&lt;p&gt;Da un punto di vista etimologico la parola Idea deriva dal greco &lt;br&gt;
antico &lt;strong&gt;Eidos&lt;/strong&gt; (&lt;em&gt;&lt;strong&gt;εἶδος&lt;/strong&gt;&lt;/em&gt;) che signfica "&lt;em&gt;forma, aspetto o anche figura&lt;/em&gt;".&lt;br&gt;
Per Platone quindi le idee sono entità o forme immutabili, ingenerate ed eterne che vivono in una realtà metafisica (da lui chiamata Iperuranio) e rappresentano la forma perfetta di tutte le cose esistenti nella realtà di tutti i giorni. Oggetti, Persone e Animali o anche ad esempio l'idea di Politica , Coraggio, Bene etc..&lt;br&gt;
Le cose esistenti nella nostra realtà riflettono la perfetta Idea ad esempio del Cane proveniente dall'Iperuranio e che non può cambiare. Per Platone quindi le idee sono anche la forma giusta e benefica di tutte le cose esistenti nella realtà.&lt;/p&gt;

&lt;p&gt;Quindi abbiamo introdotto il concetto di Idea e Forma Concreta nella filosofia di Platone. &lt;br&gt;
Con quali concetti possiamo associarli alla programmazione ad oggetti? Ma naturalmente con le Classi e gli Oggetti.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Esempio Classe e Oggetto in Java&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;public class Cane {}
public class Dobermann extends Cane {}
public class Main {
    public static void main(String args[]){
        Dobermann dobermann = new Dobermann();
     }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Questo è un semplice esempio di un programma che ha due entità: una Classe Cane e una Classe Dobermann, che eredita tutte le caratteristiche del tipo Cane. &lt;br&gt;
Non c'è bisogno di specificare se Cane sia una classe di tipo "Abstract", per il nostro semplice esempio concettuale ragioniamo con le classi semplici.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Idea e Forma Concreta scritte in Java&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Abbiamo costruito una rappresentazione fedele del concetto platonico scrivendo in linguaggio Java il concetto base di istanza di una classe. Nel nostro caso abbiamo una classe Cane che rappresente la nostra Idea, e l'istanza della classe Dobermann derivata da Cane che sarebbe la Forma Concreta contenente tutte le caratteristiche principali di un Cane di tipo Dobermann. Anche qui la nostra istanza non è un Cane perfetto e unico come l'&lt;strong&gt;Idea&lt;/strong&gt; (Classe Cane), ma la &lt;strong&gt;Forma Concreta&lt;/strong&gt; (Oggetto dalla Classe Dobermann) ha le caratteristiche reali legate alla razza specifica di un Dobermann.&lt;/p&gt;

&lt;p&gt;Abbiamo messo in pratica, in maniera semplificata, una delle più famose strutture filosofiche della storia con un linguaggio di programmazione per comunicare al nostro compilatore come deve strutturare un elemento Cane nel nostro codice.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conclusione e due domande...&lt;/strong&gt;&lt;br&gt;
La Filosofia è anche madre del pensiero astratto. &lt;br&gt;
Possiamo sfruttarla anche per prendere scelte migliori e porre le giuste domande che servono poi per trovare e organizzare una possibile teoria risolutiva a qualsiasi problema tecnologico , scientifico o umanistico. &lt;br&gt;
E quali se non i problemi di progettazione in campo informatico e della programmazione, dove si può mettere alla prova notevolmente la nostra mente esaltando il ragionamento logico. &lt;/p&gt;

&lt;p&gt;In futuro l'umanità fino a dove riuscirà a portare la rappresentazione del pensiero umano all'interno di una macchina? Esisterà mai una Intelligenza Artificiale "buona" che interpreterà al meglio il pensiero degli uomini per poter compiere sempre azioni tendenti al giusto?&lt;/p&gt;

</description>
      <category>programming</category>
      <category>phylosophy</category>
      <category>oop</category>
      <category>softskill</category>
    </item>
  </channel>
</rss>
