giovedì 29 febbraio 2024

C# funzione Lambda con parametro di default

Una delle tante novità nel linguaggio C# 12 e versione Framework .Net 8 è quella di utilizzare nelle funzioni lambda il parametro di default.

Di seguito una funzione lamba che viene richiamata con un valore per il parametro default e senza valore per il parametro default.

 var risultato = (string testo, string secondoTesto, string separatore = "-") =>
     {
         return string.Join(separatore, testo, secondoTesto);
     };
 MessageBox.Show(risultato("Testo", "Testo2"));
 MessageBox.Show(risultato("Testo", "Testo2", "/"));

mercoledì 28 febbraio 2024

Entity Framework multi insert C#

Di seguito si riporta un frammento di codice con il linguaggio di programmazione C# per l'inserimento di più record con Entity Framework, utilizzando il metodo AddRange.

 try
 {
     using (var contesto = new DatiContext())
     {
         var nominativi = new List<Anagrafica>()
         {
             new() { Cognome="Rossi", Nome = "Mario" },
             new() {Cognome="Bianchi", Nome="Gianni"},
             new() {Cognome = "Maffei", Nome = "Marco"}
         };
         contesto.AddRange(nominativi);
         contesto.SaveChanges();
     }


 }
 catch (Exception ex)
 {
     MessageBox.Show("Errore: " + ex.Message);
 }

martedì 27 febbraio 2024

Sito di creazione di immagini con l'intelligenza artificiale

 



Sono tanti i siti di intelligenza artificiale che in questi mesi sono stati creati, tra questi molti sulla creazione di immagine.

Segnalo il seguente https://www.artguru.ai/it/ in lingua italiana sulla creazione di immagine tramite intelligenza artificiale.


lunedì 26 febbraio 2024

strumento online per la rimozione dello sfondo tramite Intellligenza artificiale

 


Il seguente sito https://www.fotor.com/it/features/background-remover offre un servizio gratuito senza richiedere registrazione ed email, per rimuovere lo sfondo dalle immagini.-

Il sito in lingua italiana, utilizza l'intelligenza artificiale. Molto valido.


domenica 25 febbraio 2024

Libreria gratuita per la scansione dei documenti Ntwain

Per chi deve aggiungere funzionalità di scansione documenti tramite scanner, può tornare utile la seguente libreria Ntwain.

Qui soukoku / ntwain — Bitbucket e qui GitHub - soukoku/ntwain: A TWAIN lib for dotnet. alcuni riferimenti.





sabato 24 febbraio 2024

Download gioco gratuito Dragonheir: Silent Gods

 


Disponibile gratuitamente e senza limitazioni il gioco di combattimento Dragonheir Silent Gods, per sistemi operativi Windows.

Per il download e maggiori informazioni, visitate il seguente sito https://store.epicgames.com/it/p/dragonheir-silent-gods-559a4c

venerdì 23 febbraio 2024

Angular mat-option set style disabled

Qualora si ha la necessità di impostare ad un controllo mat-optional uno stile quando è disabilitato il controllo, occorre impostare nel file di tipo ".scss" l'ovveride dello stile quando è disabilitato.

Di seguito il frammento di codice di tale modifica.



.mat-select-disabled {
    ::ng-deep .mat-select-value {
      color:  hwb(352 8% 4%) !important;
    }
}

giovedì 22 febbraio 2024

Recensione libro Python per Data Science

 




La scheda del libro:

Editore:                  Tecniche Nuove

Prezzo:                  € 33,16

Caratteristiche:                  232 pag - 17 x 24 cm Rilegatura Brossura

ISBN:          978-88-481-4654-8

Anno di edizione:          11/2023

Numero dell'edizione:  1


In quest’ultimi anni il linguaggio di programmazione Python ha trovato sempre più interesse da parte di persone che lavorano nel settore dell’informatica o in quelli interessati alla programmazione. Un linguaggio multi piattaforma che si può utilizzare in vari sistemi operativi o anche dispositivi come le schede programmabili Raspberry.

Il libro Python per Data Science https://www.tecnichenuove.com/libri/python-per-data-science edito della casa editrice tecniche nuove https://www.tecnichenuove.com fornisce una panoramica molto esaustiva e completa sull’utilizzo di questo linguaggio di programmazione in ambito della gestione dei dati.

Tantissimi gli esempi di codice che illustrano varie tecniche per gestire i dati e di come rilevare importanti informazioni durante le varie operazioni di codice estrapolando analisi molto affidabili ed anche complesse.

Nonostante possono sembrare poche le circa 230 pagine, in realtà ogni pagina offre una serie di esempi di codice, che forniscono al lettore informazioni esaurienti e dettagliate dell’argomento trattato.

I primi due capitoli avvicinano il lettore alla gestione dei dati, in particolar modo agli array, una tecnica usata in molti linguaggi di programmazione.

Nel capitolo terzo vengono illustrate alcune librerie gratuite per gestire dati di una certa rilevanza, ma soprattutto fornire una valida conoscenza.

Nel quarto capitolo l’autore inizia a fornire quelle basi essenziali per realizzare applicazioni di un certo livello ma soprattutto nell’attingere le informazioni, in particolare numerosi esempi di codice per gestire i file e le richieste web, le famose webapi.

Un capitolo importante è il quinto, che tratta un tema indispensabile e che troviamo in tutti i linguaggi di programmazione, la gestione di una base dati. In questo capitolo troviamo tanti esempi e tanti scenari di come gestire i dati tramite una fonte dati.

Il sesto e settimo capitolo sono simili, forniscono al lettore la gestione dei dati in ambito aggregativa e di raggruppamento nel gestire più informazioni da più ambiti.

L’ottavo capitolo fornisce una panoramica sui grafici, fornendo al lettore esempi e librerie per la rappresentazione grafica dei dati sottoforma di alcuni modelli come a torta, pila o lineare.

Il capitolo nono, se pur molto breve, affronta un tema che difficilmente viene illustrato in altri linguaggi di programmazione, l’utilizzo dei dati in ambito geografico, per rilevare determinate luoghi e posizioni partendo dalle varie coordinate ed informazioni.

Nel capitolo decimo l’autore illustra come rilevare informazioni utili in ambito di gestione del tempo, nel calcolare le varie differenze.

Il penultimo capitolo, l’undicesimo, fornisce informazioni di base sull’associazione dei dati e di come rilevare informazioni utili in base alle varie interrogazioni sui dati presenti.

Il dodicesimo ed ultimo capitolo, tratta un tema che in questi ultimi due anni è di grande attualità, il machine learning, l’apprendimento automatico. Il capitolo vuole avvicinare il lettore a questa nuova gestione dei dati, il quale tema va approfondito visto la complessità dell’argomento trattato. Questo capitolo fornisce una  valida e chiara introduzione a questo nuovo ambito, fornendo un punto di partenza per approfondire successivamente.


Conclusioni

Un libro molto ben fatto ed in lingua italiana che fornisce una panoramica completa ed esaustiva sull’utilizzo di questo linguaggio in ambito di analisi dei dati. Il libro è adatto a chi già utilizza il linguaggio di programmazione Python e comunque a chi ha una certa dimestichezza o formazione di base su questo linguaggio, in quanto molti aspetti si danno per scontato.

Il tema affrontato che se pur complesso viene illustrato in maniera molto semplice, dando così a tutti la possibilità di avvicinarsi a questo ambito.  Un libro consigliatissimo e che non deve mancare nella libreria di un buon programmatore Python. 

mercoledì 21 febbraio 2024

angular material custom style textarea when disabled

Nel caso che vogliamo applicare uno stile ad un controllo textarea disabilitato in Angular Material, dobbiamo applicare uno stile nel file scss.
Lo stile dovrà essere applicato in maniera di ovveride permettendo di sovrascrivere la formattazione di default.

Di seguito un esempio di come applicare un determinato stile (grassetto e colore verde) quando il controllo TextArea è disabilitato.



.mat-input-element:disabled{
    color:  hsl(102, 84%, 45%) !important;
    font-weight: bold !important;

}

martedì 20 febbraio 2024

Tutorial TypeScript : Parte quarta - gli array

Si riporta l'articolo scritto per il sito https://www.iprogrammatori.it/articoli/javascript/art_parte-quarta-gli-array_1853.aspx


In questo nuovo articolo del tutorial sul linguaggio di programmazione TypeScript, vedremo l’utilizzo degli array, variabili ed oggetti che possono avere un insieme di dati.
Gli array possono tornare utile nelle situazioni in cui dobbiamo gestire una serie di informazioni, questi dati possono essere recuperati effettuando delle ricerche all’interno della variabile stessa.
In questa quarta parte vedremo alcuni aspetti degli array, per chi già programma troverà  la sintassi molto simile ai più comuni linguaggi di programmazione.

Array di string

Di seguito si riporta un esempio di frammento di codice di array di tipo string, nel quale una variabile contiene più valori.

TypeScript

 ngOnInit(): void {

 

    let arrayTesto: string[] = ['Ema', 'Luigi', "Giulia", "Alex", "Olga", "Marco"];

 

  }

 

Come si è visto dal frammento di codice precedente, la definizione di variabile contiene le parentesi quadrate, che indicano che la variabile sarà di tipo array. A seguire viene inizializzata con dei valori tutti racchiusi in altre parentesi quadrate.
Altra modalità di dichiarazione di array, è quella di utilizzare la classe “Array” indicando il tipo di array. 
Di seguito si riporta il frammento di codice delle suddette operazioni.


TypeScript

 ngOnInit(): void {

 

     let ArrayTesto2: Array<string> = ['Ema', 'Luigi', "Giulia", "Alex", "Olga", "Marco"];

   

 

 

  }

Possiamo impostare i valori nell’array anche in un secondo momento non è obbligatorio nel momento in cui si crea la variabile. Di seguito un esempio di codice.

TypeScript

 ngOnInit(): void {

 

    let arrayTesto: string[];

    arrayTesto = ['Ema', 'Luigi', "Giulia", "Alex", "Olga", "Marco"];

  }

 

 

Array di tipo number

Le variabili o oggetti di tipo Array, possono essere numeric e di altro tipo. A titolo semplificativo si riporta un esempio  di array di tipo number che la sintassi è simile agli esempi procedenti con la sola variazione del tipo di array.

TypeScript

ngOnInit(): void {

    let ArrayNumerico: number[] = [1,2,3,4];

  }

 

Lettura dei dati 

Per rilevare il dato di un array, dobbiamo indicare l’indice dal quale vogliamo ottenere il valore, il quale viene indicato dopo il nome dell’array tra parentesi quadrate.
Di seguito si riporta un frammento di codice, con il quale viene visualizzato il dato dei primi due valori presenti nell’array.


TypeScript

 ngOnInit(): void {

 

    let arrayTesto: string[];

    arrayTesto = ['Ema', 'Luigi', "Giulia", "Pasquale", "Olga", "Marco"];

 

    console.log(arrayTesto[0]);

    console.log(arrayTesto[1]);

 

  }

 

Come si è visto dal precedente codice, i valori che verranno visualizzati sono “Ema” e “Luigi”, si fa presente che l’indice 0, è il primo elemento dell’array.
Gli array partono da 0, per coloro che utilizzano altri linguaggi di programmazione, tipo C# e Java troveranno similitudine.
Il rilevamento di uno o più valori può avvenire come spesso si verifica nella scrittura dei programmi, nei cicli for.
Di seguito si riporta un frammento di codice delle suddette operazioni.

TypeScript

 ngOnInit(): void {

 

    let arrayTesto: string[];

    arrayTesto = ['Ema', 'Luigi', "Giulia", "Pasquale", "Olga", "Marco"];

 

    for (var elemento of  arrayTesto) {

      console.log(elemento);

 

    }

 

  }

 




Tramite il metodo “Push” possiamo aggiungere elementi all’array, in modo che in determinate punti del codice o su determinate condizioni possiamo aggiungere valori al nostro array.
Di seguito si riporta un frammento di codice nel quale aggiunge ad un array di tipo string, un altro elemento string.

TypeScript

ngOnInit(): void {

 

    let arrayTesto: string[];

    arrayTesto = ['Ema', 'Luigi', "Giulia", "Pasquale", "Olga", "Marco"];

    arrayTesto.push("Alex");

    for (var elemento of  arrayTesto) {

      console.log(elemento);

 

    }

 

  }

 

Array bidimensionali 

Gli array, possono essere anche a due dimensioni, ossia avere una coppia di valori. 
Di seguito si riporta un frammento di codice, che illustra la creazione di un array bi dimensione di tipo string.



TypeScript

 ngOnInit(): void {

 

    let arrayTesto: string[][] = [['Ema', 'Luigi', "Giulia", "Pasquale", "Olga", "Marco"],['Ema2', 'Luigi2', "Giulia2", "Pasquale2", "Olga2", "Marco2"]];

    console.log(arrayTesto[0][0]); //EMA

    console.log(arrayTesto[0][1]); // Luigi

    console.log(arrayTesto[1][0]); //EMA2

    console.log(arrayTesto[1][1]); //Luigi2

 

  }

 


Come si è visto nel frammento di codice precedente, l’array multi dimensione è dichiarato tramite le doppie parantesi quadrate.
Per rilevare un valore, dopo il nome variabile si imposta il valore per indicare di quale gruppo della multi dimensione rilevare il dato (in questo caso 0  è uguale al primo gruppo, mentre 1 al secondo gruppo) , mentre nella seconda coppia di valori, indicare l’indice (la posizione dell’elemento)  del gruppo indicato nel valore che precede.  Nell’esempio precedente, 0 è il primo elemento e 1 il secondo elemento.
Questa tecnica di avere più dimensioni per array  è poco usata nella gestione dei dati.

Metodi e proprietà Array

Nel gestire i dati presenti in un array, possiamo utilizzare vari metodi e proprietà che gli array posseggono, di seguito si riportano alcuni di essi.
Il metodo “Push” visto in precedenza, aggiunge un valore ad un array esistente.
Di seguito un esempio di codice con il quale alla lista dei nomi si aggiunge anche ‘Alex”, posizionato come ultimo elemento.

TypeScript

 ngOnInit(): void {

 

    let arrayTesto: string[]  =  ['Ema', 'Luigi', "Giulia", "Pasquale", "Olga", "Marco"];

    arrayTesto.push( 'Alex' );

 

     for (var elemento of  arrayTesto) {

      console.log(elemento);

 

    }

 

  }

 

La proprietà “Length” indica il numero degli elementi che sono presenti nell’array.
Di seguito il  frammento di codice dell’utilizzo della proprietà length.


TypeScript

 ngOnInit(): void {

 

    let arrayTesto: string[]  =  ['Ema', 'Luigi', "Giulia", "Pasquale", "Olga", "Marco"];

 

   alert(arrayTesto.length); //6

 

 

  }

 

Un metodo molto interessante è il “sort” che permette di effettuare l’ordinamento dei vari elementi presenti in un array.
Di seguito si riporta un frammento di codice di tale utilizzo.


TypeScript

ngOnInit(): void {

 

    let arrayTesto: string[]  =  ['Ema', 'Luigi', "Giulia", "Pasquale", "Olga", "Marco"];

 

    arrayTesto.sort();

    for (var elemento of  arrayTesto) {

      console.log(elemento);

 

    }

 

  }

 

Il risultato sarà come mostrato in figura 1, con gli elementi ordinati (dalla A alla Z) .


Figura 1 – L’ordinamento degli elementi all’interno dell’array.

Con il metodo “Concat” possiamo aggiungere ad un array, ulteriori elementi che possono essere presenti in altro array.
Con questo metodo, possiamo aggiungere n elementi ad un array già esistente.
Di seguito si riporta un esempio di codice, con il quale ad un array di tipo string, si aggiungono due nominativi.



TypeScript

gOnInit(): void {




    let arrayTesto: string[]  =  ['Ema', 'Luigi', "Giulia", "Pasquale", "Olga", "Marco"];

    let ArrayTesto2: string[]  =  ['Ema2', 'Luigi2'];

    arrayTesto = arrayTesto.concat(ArrayTesto2);

    for (var elemento of  arrayTesto) {

      console.log(elemento);

 

    }

 

  }

 


Altro metodo che possiamo utilizzare con gli array è il ciclo foreach, che permette di scorrere tutti gli elementi.
Di seguito si riporta il frammento di codice del relativo utilizzo.


TypeScript

  ngOnInit(): void {

 

    let  arrayTesto:    string[]  =  ['Ema', 'Luigi', "Giulia", "Pasquale", "Olga", "Marco"];

 

    arrayTesto.forEach(valore=>console.log(valore));

 

  }

 

Array Readonly 

Possiamo creare anche array di sola lettura, tramite la parola chiave readonly. 
Di seguito la dichiarazione di un array di tipo string di sola lettura.


TypeScript

let arrayTesto: readonly  string[]  =  ['Ema', 'Luigi', "Giulia", "Pasquale", "Olga", "Marco"];

 

Se proviamo ad utilizzare il metodo “Push” per aggiungere un elemento, l’ambiente di sviluppo Visual Studio Code, fornirà un errore, il tutto come mostrato in figura 2.


Figura 2 – L’errore che indica che non esiste il metodo.

Conclusioni

In questa quarta parte si è visto l’utilizzo degli array, una tecnica per la gestione di più valori in un unica variabile o proprietà, permettendo in questo modo di scorrere e gestire i vari dati.
Per chi ha già programmato con altri linguaggi, quale C# o Java o altri, troverà molto simile l’utilizzo e la sintassi. 
La tecnica di utilizzare gli array permette di esaminare e gestire i valori di tanti elementi, dando così la possibilità di ottimizzare il codice e soprattutto semplificare l’utilizzo.
Sono stati affrontati alcuni metodi di cui dispongono gli array, lasciamo al lettore di approfondire gli altri metodi ed utilizzo anche avanzato degli array, con il quale si aprono molti scenari, alcuni anche complessi.